immich/server/src/interfaces
Nicolò 9bce3417e9
feat(server): email notifications (#8447)
* feat(server): add `react-mail` as mail template engine and `nodemailer`

* feat(server): add `smtp` related configs to `SystemConfig`

* feat(web): add page for SMTP settings

* feat(server): add `react-email.adapter`

This adapter render the React-Email into HTML and plain/text email.
The output is set as the body of the email.

* feat(server): add `MailRepository` and `MailService`

Allow to use the NestJS-modules-mailer module to send SMTP emails.
This is the base transport for the `NotificationRepository`

* feat(server): register the job dispatcher and Job for async email

This allows to queue email sending jobs for the `EmailService`.

* feat(server): add `NotificationRepository` and `NotificationService`

This act as a middleware to properly route the notification to the right transport.
As POC I've only implemented a simple SMTP transport.

* feat(server): add `welcome` email template

* feat(server): add the first notification on `createUser` in `UserService`

This trigger an event for the `NotificationRepository` that once processes
by using the global config and per-user config will carry the payload to the right notification transport.

* chore: clean up

* chore: clean up web

* fix: type errors"

* fix package lock

* fix mail sending, option to ignore certs

* chore: open api

* chore: clean up

* remove unused import

* feat: email feature flag

* chore: remove unused interface

* small styling

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-05-02 15:43:18 +01:00
..
access.interface.ts feat: readonly album sharing (#8720) 2024-04-25 04:19:49 +00:00
activity.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
album-user.interface.ts feat: readonly album sharing (#8720) 2024-04-25 04:19:49 +00:00
album.interface.ts refactor(server): extract add/remove assets logic to utility function (#8329) 2024-03-29 07:56:16 -04:00
api-key.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
asset-stack.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
asset-v1.interface.ts chore(server): remove unusuned endpoint/service/interface in asset-v1 (#9086) 2024-04-26 01:02:04 -05:00
asset.interface.ts fix(server): stacked assets for full sync, userIds as array for delta sync (#9100) 2024-04-28 23:24:21 -04:00
audit.interface.ts feat(server): efficient full app sync (#8755) 2024-04-16 07:26:37 +02:00
crypto.interface.ts refactor(server): new password repo method (#8208) 2024-03-23 14:33:25 -04:00
database.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
event.interface.ts refactor: server events (#8204) 2024-03-22 18:24:02 -04:00
job.interface.ts feat(server): email notifications (#8447) 2024-05-02 15:43:18 +01:00
library.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
logger.interface.ts feat(server): correlation id via injected logger (#8823) 2024-04-15 23:39:06 +00:00
machine-learning.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
media.interface.ts feat(server): use embedded preview from raw images (#8773) 2024-04-19 10:50:13 -05:00
memory.interface.ts feat: persistent memories (#8330) 2024-04-02 10:23:17 -04:00
metadata.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
metric.interface.ts refactor(server): metric repo (#8278) 2024-03-25 23:15:11 +00:00
move.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
notification.interface.ts feat(server): email notifications (#8447) 2024-05-02 15:43:18 +01:00
partner.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
person.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
search.interface.ts chore(server): remove old asset search (#9104) 2024-04-27 12:57:39 +00:00
server-info.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
session.interface.ts feat(server): remove inactive sessions (#9121) 2024-04-27 16:45:16 -04:00
shared-link.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
storage.interface.ts chore(server): cleanup library watching (#8835) 2024-04-15 23:05:08 -04:00
system-config.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
system-metadata.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
tag.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00
user.interface.ts chore(server): rename domain repositories -> interfaces (#8147) 2024-03-21 06:59:49 -05:00