@authup/server-core 1.0.0-beta.45 → 1.0.0-beta.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -201
- package/README.md +3 -1
- package/dist/adapters/database/data-source/index.d.ts +0 -1
- package/dist/adapters/database/data-source/index.d.ts.map +1 -1
- package/dist/adapters/database/data-source/index.mjs +1 -2
- package/dist/adapters/database/domains/client/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/client/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/client/subscriber.mjs +21 -39
- package/dist/adapters/database/domains/client/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/client-permission/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/client-permission/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-permission/subscriber.mjs +24 -49
- package/dist/adapters/database/domains/client-permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/client-role/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/client-role/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-role/subscriber.mjs +24 -49
- package/dist/adapters/database/domains/client-role/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/client-scope/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/client-scope/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-scope/subscriber.mjs +21 -36
- package/dist/adapters/database/domains/client-scope/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/identity-provider/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider/subscriber.mjs +21 -39
- package/dist/adapters/database/domains/identity-provider/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-account/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/identity-provider-account/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-account/subscriber.mjs +21 -36
- package/dist/adapters/database/domains/identity-provider-account/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-attribute/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/identity-provider-attribute/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs +21 -36
- package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs +21 -45
- package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/permission/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/permission/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/permission/subscriber.mjs +28 -47
- package/dist/adapters/database/domains/permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/policy/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/policy/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/policy/subscriber.mjs +21 -36
- package/dist/adapters/database/domains/policy/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/policy-attribute/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/policy-attribute/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/policy-attribute/subscriber.mjs +24 -45
- package/dist/adapters/database/domains/policy-attribute/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/realm/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/realm/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/realm/subscriber.mjs +21 -36
- package/dist/adapters/database/domains/realm/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/robot/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/robot/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/robot/subscriber.mjs +21 -39
- package/dist/adapters/database/domains/robot/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/robot-permission/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/robot-permission/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/robot-permission/subscriber.mjs +24 -49
- package/dist/adapters/database/domains/robot-permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/robot-role/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/robot-role/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/robot-role/subscriber.mjs +24 -49
- package/dist/adapters/database/domains/robot-role/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/role/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/role/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/role/subscriber.mjs +21 -41
- package/dist/adapters/database/domains/role/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/role-attribute/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/role-attribute/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/role-attribute/subscriber.mjs +24 -45
- package/dist/adapters/database/domains/role-attribute/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/role-permission/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/role-permission/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/role-permission/subscriber.mjs +24 -49
- package/dist/adapters/database/domains/role-permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/scope/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/scope/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/scope/subscriber.mjs +17 -43
- package/dist/adapters/database/domains/scope/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/user/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/user/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/user/subscriber.mjs +21 -39
- package/dist/adapters/database/domains/user/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/user-attribute/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/user-attribute/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-attribute/subscriber.mjs +24 -43
- package/dist/adapters/database/domains/user-attribute/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/user-permission/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/user-permission/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-permission/subscriber.mjs +24 -49
- package/dist/adapters/database/domains/user-permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/user-role/subscriber.d.ts +3 -6
- package/dist/adapters/database/domains/user-role/subscriber.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-role/subscriber.mjs +24 -49
- package/dist/adapters/database/domains/user-role/subscriber.mjs.map +1 -1
- package/dist/adapters/database/index.d.ts +1 -0
- package/dist/adapters/database/index.d.ts.map +1 -1
- package/dist/adapters/database/index.mjs +3 -2
- package/dist/adapters/database/subscriber/index.d.ts +3 -0
- package/dist/adapters/database/subscriber/index.d.ts.map +1 -0
- package/dist/adapters/database/subscriber/index.mjs +5 -0
- package/dist/adapters/database/subscriber/module.d.ts +19 -0
- package/dist/adapters/database/subscriber/module.d.ts.map +1 -0
- package/dist/adapters/database/subscriber/module.mjs +70 -0
- package/dist/adapters/database/subscriber/module.mjs.map +1 -0
- package/dist/adapters/database/subscriber/types.d.ts +15 -0
- package/dist/adapters/database/subscriber/types.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +1 -1
- package/dist/adapters/http/controllers/workflows/activate/module.d.ts +8 -1
- package/dist/adapters/http/controllers/workflows/activate/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/activate/module.mjs +20 -1
- package/dist/adapters/http/controllers/workflows/activate/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs +16 -37
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/types.d.ts +2 -0
- package/dist/adapters/http/controllers/workflows/authorize/types.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/password-forgot/module.d.ts +8 -1
- package/dist/adapters/http/controllers/workflows/password-forgot/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs +23 -2
- package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/password-reset/module.d.ts +8 -1
- package/dist/adapters/http/controllers/workflows/password-reset/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/password-reset/module.mjs +21 -1
- package/dist/adapters/http/controllers/workflows/password-reset/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/register/module.d.ts +8 -1
- package/dist/adapters/http/controllers/workflows/register/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/register/module.mjs +23 -2
- package/dist/adapters/http/controllers/workflows/register/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/status/module.d.ts +11 -4
- package/dist/adapters/http/controllers/workflows/status/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/status/module.mjs +17 -5
- package/dist/adapters/http/controllers/workflows/status/module.mjs.map +1 -1
- package/dist/adapters/http/index.mjs +4 -1
- package/dist/adapters/http/middleware/built-in/cors.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/cors.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/error.d.ts +6 -1
- package/dist/adapters/http/middleware/built-in/error.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/error.mjs +2 -3
- package/dist/adapters/http/middleware/built-in/error.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/index.d.ts +1 -0
- package/dist/adapters/http/middleware/built-in/index.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/index.mjs +2 -1
- package/dist/adapters/http/middleware/built-in/logger.d.ts +2 -0
- package/dist/adapters/http/middleware/built-in/logger.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/logger.mjs +1 -2
- package/dist/adapters/http/middleware/built-in/logger.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts +15 -0
- package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts.map +1 -0
- package/dist/adapters/http/middleware/built-in/ui-http-client.mjs +25 -0
- package/dist/adapters/http/middleware/built-in/ui-http-client.mjs.map +1 -0
- package/dist/adapters/http/middleware/index.mjs +2 -1
- package/dist/adapters/http/request/helpers/index.d.ts +2 -0
- package/dist/adapters/http/request/helpers/index.d.ts.map +1 -1
- package/dist/adapters/http/request/helpers/index.mjs +3 -1
- package/dist/adapters/http/request/helpers/locale.d.ts +14 -0
- package/dist/adapters/http/request/helpers/locale.d.ts.map +1 -0
- package/dist/adapters/http/request/helpers/locale.mjs +32 -0
- package/dist/adapters/http/request/helpers/locale.mjs.map +1 -0
- package/dist/adapters/http/request/helpers/locations.mjs +1 -1
- package/dist/adapters/http/request/helpers/redirect.d.ts +14 -0
- package/dist/adapters/http/request/helpers/redirect.d.ts.map +1 -0
- package/dist/adapters/http/request/helpers/redirect.mjs +36 -0
- package/dist/adapters/http/request/helpers/redirect.mjs.map +1 -0
- package/dist/adapters/http/request/index.mjs +3 -1
- package/dist/adapters/http/ui/base-path.d.ts +9 -0
- package/dist/adapters/http/ui/base-path.d.ts.map +1 -0
- package/dist/adapters/http/ui/base-path.mjs +18 -0
- package/dist/adapters/http/ui/base-path.mjs.map +1 -0
- package/dist/adapters/http/ui/index.d.ts +5 -0
- package/dist/adapters/http/ui/index.d.ts.map +1 -0
- package/dist/adapters/http/ui/index.mjs +7 -0
- package/dist/adapters/http/ui/render.d.ts +4 -0
- package/dist/adapters/http/ui/render.d.ts.map +1 -0
- package/dist/adapters/http/ui/render.mjs +60 -0
- package/dist/adapters/http/ui/render.mjs.map +1 -0
- package/dist/adapters/http/ui/serve.d.ts +16 -0
- package/dist/adapters/http/ui/serve.d.ts.map +1 -0
- package/dist/adapters/http/ui/serve.mjs +32 -0
- package/dist/adapters/http/ui/serve.mjs.map +1 -0
- package/dist/adapters/http/ui/types.d.ts +8 -0
- package/dist/adapters/http/ui/types.d.ts.map +1 -0
- package/dist/adapters/http/ui/types.mjs +4 -0
- package/dist/app/index.d.ts +0 -2
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.mjs +3 -3
- package/dist/app/modules/config/constants.d.ts +1 -0
- package/dist/app/modules/config/constants.d.ts.map +1 -1
- package/dist/app/modules/config/constants.mjs +1 -0
- package/dist/app/modules/config/constants.mjs.map +1 -1
- package/dist/app/modules/config/index.d.ts +1 -0
- package/dist/app/modules/config/index.d.ts.map +1 -1
- package/dist/app/modules/config/index.mjs +2 -1
- package/dist/app/modules/config/normalize.d.ts.map +1 -1
- package/dist/app/modules/config/normalize.mjs +9 -2
- package/dist/app/modules/config/normalize.mjs.map +1 -1
- package/dist/app/modules/config/origins.d.ts +10 -0
- package/dist/app/modules/config/origins.d.ts.map +1 -0
- package/dist/app/modules/config/origins.mjs +21 -0
- package/dist/app/modules/config/origins.mjs.map +1 -0
- package/dist/app/modules/config/parse.d.ts.map +1 -1
- package/dist/app/modules/config/parse.mjs +1 -0
- package/dist/app/modules/config/parse.mjs.map +1 -1
- package/dist/app/modules/config/read/env.d.ts.map +1 -1
- package/dist/app/modules/config/read/env.mjs +2 -0
- package/dist/app/modules/config/read/env.mjs.map +1 -1
- package/dist/app/modules/config/types.d.ts +14 -0
- package/dist/app/modules/config/types.d.ts.map +1 -1
- package/dist/app/modules/database/constants.d.ts +2 -0
- package/dist/app/modules/database/constants.d.ts.map +1 -1
- package/dist/app/modules/database/constants.mjs +4 -1
- package/dist/app/modules/database/constants.mjs.map +1 -1
- package/dist/app/modules/database/module.d.ts +5 -1
- package/dist/app/modules/database/module.d.ts.map +1 -1
- package/dist/app/modules/database/module.mjs +26 -15
- package/dist/app/modules/database/module.mjs.map +1 -1
- package/dist/app/modules/http/constants.d.ts +11 -0
- package/dist/app/modules/http/constants.d.ts.map +1 -1
- package/dist/app/modules/http/constants.mjs +12 -1
- package/dist/app/modules/http/constants.mjs.map +1 -1
- package/dist/app/modules/http/modules/controller.d.ts +5 -1
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +75 -10
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/http/modules/middleware.d.ts +2 -1
- package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
- package/dist/app/modules/http/modules/middleware.mjs +19 -4
- package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
- package/dist/app/modules/identity/module.mjs +4 -4
- package/dist/app/modules/identity/module.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/provider/account/module.d.ts +3 -1
- package/dist/app/modules/identity/repositories/provider/account/module.d.ts.map +1 -1
- package/dist/app/modules/identity/repositories/provider/account/module.mjs +6 -3
- package/dist/app/modules/identity/repositories/provider/account/module.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/attribute.d.ts +3 -0
- package/dist/app/modules/identity/repositories/provider/mapper/attribute.d.ts.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/attribute.mjs +5 -2
- package/dist/app/modules/identity/repositories/provider/mapper/attribute.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/permission.d.ts +3 -0
- package/dist/app/modules/identity/repositories/provider/mapper/permission.d.ts.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/permission.mjs +5 -2
- package/dist/app/modules/identity/repositories/provider/mapper/permission.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/role.d.ts +3 -0
- package/dist/app/modules/identity/repositories/provider/mapper/role.d.ts.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/role.mjs +5 -2
- package/dist/app/modules/identity/repositories/provider/mapper/role.mjs.map +1 -1
- package/dist/app/modules/index.mjs +3 -2
- package/dist/app/modules/logger/module.d.ts.map +1 -1
- package/dist/app/modules/logger/module.mjs +1 -5
- package/dist/app/modules/logger/module.mjs.map +1 -1
- package/dist/app/modules/mail/constants.d.ts +2 -1
- package/dist/app/modules/mail/constants.d.ts.map +1 -1
- package/dist/app/modules/mail/constants.mjs +2 -1
- package/dist/app/modules/mail/constants.mjs.map +1 -1
- package/dist/app/modules/mail/index.mjs +2 -2
- package/dist/app/modules/mail/module.d.ts.map +1 -1
- package/dist/app/modules/mail/module.mjs +4 -1
- package/dist/app/modules/mail/module.mjs.map +1 -1
- package/dist/app/modules/oauth2/module.d.ts.map +1 -1
- package/dist/app/modules/oauth2/module.mjs +3 -1
- package/dist/app/modules/oauth2/module.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/key/repository.d.ts +3 -0
- package/dist/app/modules/oauth2/repositories/key/repository.d.ts.map +1 -1
- package/dist/app/modules/oauth2/repositories/key/repository.mjs +5 -2
- package/dist/app/modules/oauth2/repositories/key/repository.mjs.map +1 -1
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +12 -0
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.mjs +2 -1
- package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
- package/dist/core/entities/client/index.d.ts +1 -0
- package/dist/core/entities/client/index.d.ts.map +1 -1
- package/dist/core/entities/client/index.mjs +2 -1
- package/dist/core/entities/client/service.d.ts.map +1 -1
- package/dist/core/entities/client/service.mjs +3 -2
- package/dist/core/entities/client/service.mjs.map +1 -1
- package/dist/core/entities/client/types.d.ts +11 -1
- package/dist/core/entities/client/types.d.ts.map +1 -1
- package/dist/core/entities/client/web-client.d.ts +34 -0
- package/dist/core/entities/client/web-client.d.ts.map +1 -0
- package/dist/core/entities/client/web-client.mjs +62 -0
- package/dist/core/entities/client/web-client.mjs.map +1 -0
- package/dist/core/entities/index.mjs +2 -1
- package/dist/core/entities/realm/service.d.ts +6 -1
- package/dist/core/entities/realm/service.d.ts.map +1 -1
- package/dist/core/entities/realm/service.mjs +9 -0
- package/dist/core/entities/realm/service.mjs.map +1 -1
- package/dist/core/identity/index.d.ts +1 -0
- package/dist/core/identity/index.d.ts.map +1 -1
- package/dist/core/identity/index.mjs +2 -1
- package/dist/core/identity/password-recovery/constants.d.ts +6 -0
- package/dist/core/identity/password-recovery/constants.d.ts.map +1 -0
- package/dist/core/identity/password-recovery/constants.mjs +12 -0
- package/dist/core/identity/password-recovery/constants.mjs.map +1 -0
- package/dist/core/identity/password-recovery/index.d.ts +1 -0
- package/dist/core/identity/password-recovery/index.d.ts.map +1 -1
- package/dist/core/identity/password-recovery/index.mjs +2 -1
- package/dist/core/identity/password-recovery/service.d.ts +4 -2
- package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
- package/dist/core/identity/password-recovery/service.mjs +17 -6
- package/dist/core/identity/password-recovery/service.mjs.map +1 -1
- package/dist/core/identity/password-recovery/types.d.ts +5 -2
- package/dist/core/identity/password-recovery/types.d.ts.map +1 -1
- package/dist/core/identity/registration/service.d.ts +4 -2
- package/dist/core/identity/registration/service.d.ts.map +1 -1
- package/dist/core/identity/registration/service.mjs +15 -6
- package/dist/core/identity/registration/service.mjs.map +1 -1
- package/dist/core/identity/registration/types.d.ts +5 -2
- package/dist/core/identity/registration/types.d.ts.map +1 -1
- package/dist/core/identity/role/module.d.ts.map +1 -1
- package/dist/core/identity/role/module.mjs +1 -1
- package/dist/core/identity/role/module.mjs.map +1 -1
- package/dist/core/identity/types.d.ts +10 -0
- package/dist/core/identity/types.d.ts.map +1 -0
- package/dist/core/identity/types.mjs +4 -0
- package/dist/core/index.mjs +8 -1
- package/dist/core/mail/format/blocks.d.ts +12 -0
- package/dist/core/mail/format/blocks.d.ts.map +1 -0
- package/dist/core/mail/format/blocks.mjs +47 -0
- package/dist/core/mail/format/blocks.mjs.map +1 -0
- package/dist/core/mail/format/html.d.ts +9 -0
- package/dist/core/mail/format/html.d.ts.map +1 -0
- package/dist/core/mail/format/html.mjs +41 -0
- package/dist/core/mail/format/html.mjs.map +1 -0
- package/dist/core/mail/format/index.d.ts +5 -0
- package/dist/core/mail/format/index.d.ts.map +1 -0
- package/dist/core/mail/format/index.mjs +7 -0
- package/dist/core/mail/format/text.d.ts +3 -0
- package/dist/core/mail/format/text.d.ts.map +1 -0
- package/dist/core/mail/format/text.mjs +20 -0
- package/dist/core/mail/format/text.mjs.map +1 -0
- package/dist/core/mail/format/types.d.ts +30 -0
- package/dist/core/mail/format/types.d.ts.map +1 -0
- package/dist/core/mail/format/types.mjs +4 -0
- package/dist/core/mail/index.d.ts +3 -0
- package/dist/core/mail/index.d.ts.map +1 -1
- package/dist/core/mail/index.mjs +6 -1
- package/dist/core/mail/renderer.d.ts +10 -0
- package/dist/core/mail/renderer.d.ts.map +1 -0
- package/dist/core/mail/renderer.mjs +49 -0
- package/dist/core/mail/renderer.mjs.map +1 -0
- package/dist/core/mail/template/define.d.ts +7 -0
- package/dist/core/mail/template/define.d.ts.map +1 -0
- package/dist/core/mail/template/define.mjs +14 -0
- package/dist/core/mail/template/define.mjs.map +1 -0
- package/dist/core/mail/template/index.d.ts +4 -0
- package/dist/core/mail/template/index.d.ts.map +1 -0
- package/dist/core/mail/template/index.mjs +7 -0
- package/dist/core/mail/template/registry.d.ts +6 -0
- package/dist/core/mail/template/registry.d.ts.map +1 -0
- package/dist/core/mail/template/registry.mjs +15 -0
- package/dist/core/mail/template/registry.mjs.map +1 -0
- package/dist/core/mail/template/templates/password-reset.d.ts +3 -0
- package/dist/core/mail/template/templates/password-reset.d.ts.map +1 -0
- package/dist/core/mail/template/templates/password-reset.mjs +36 -0
- package/dist/core/mail/template/templates/password-reset.mjs.map +1 -0
- package/dist/core/mail/template/templates/registration-activation.d.ts +3 -0
- package/dist/core/mail/template/templates/registration-activation.d.ts.map +1 -0
- package/dist/core/mail/template/templates/registration-activation.mjs +34 -0
- package/dist/core/mail/template/templates/registration-activation.mjs.map +1 -0
- package/dist/core/mail/template/types.d.ts +39 -0
- package/dist/core/mail/template/types.d.ts.map +1 -0
- package/dist/core/mail/template/types.mjs +13 -0
- package/dist/core/mail/template/types.mjs.map +1 -0
- package/dist/core/mail/types.d.ts +21 -0
- package/dist/core/mail/types.d.ts.map +1 -1
- package/dist/index.mjs +7 -4
- package/dist/swagger.json +98 -3
- package/dist/ui/client/.vite/ssr-manifest.json +49086 -875
- package/dist/ui/client/assets/asap-latin-400-normal-Dc37g3Il.woff +0 -0
- package/dist/ui/client/assets/asap-latin-400-normal-DnZ1MOsG.woff2 +0 -0
- package/dist/ui/client/assets/asap-latin-700-normal-Dqcopq14.woff +0 -0
- package/dist/ui/client/assets/asap-latin-700-normal-l2Y8pi-F.woff2 +0 -0
- package/dist/ui/client/assets/asap-latin-ext-400-normal-C-fcRdtE.woff +0 -0
- package/dist/ui/client/assets/asap-latin-ext-400-normal-DwYtpHbV.woff2 +0 -0
- package/dist/ui/client/assets/asap-latin-ext-700-normal-D00OESsZ.woff +0 -0
- package/dist/ui/client/assets/asap-latin-ext-700-normal-y8bo5aW5.woff2 +0 -0
- package/dist/ui/client/assets/asap-vietnamese-400-normal-DGyJlJLT.woff2 +0 -0
- package/dist/ui/client/assets/asap-vietnamese-400-normal-lfLaoF2x.woff +0 -0
- package/dist/ui/client/assets/asap-vietnamese-700-normal-B-e19ug5.woff +0 -0
- package/dist/ui/client/assets/asap-vietnamese-700-normal-D-SxY94i.woff2 +0 -0
- package/dist/ui/client/assets/index-BeXJgvKE.css +2 -0
- package/dist/ui/client/assets/index-CgLTRwpP.js +95 -0
- package/dist/ui/client/assets/nunito-cyrillic-300-normal-BPQV259B.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-300-normal-g5qSsvc0.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-400-normal-D1j0u8EH.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-400-normal-xAOo5cBP.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-600-normal-BUjmtIuu.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-600-normal-DJGQ2h05.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-700-normal-DP36NgGt.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-700-normal-DfHRUDv-.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-300-normal-BDHtqmCR.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-300-normal-ChMQLIrm.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-400-normal-CuPM9foi.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-400-normal-xaE7D4Sw.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-600-normal-CWPPjBOD.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-600-normal-vnfu4DTE.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-700-normal-BuR0mlCG.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-700-normal-DfoqN4Gs.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-300-normal-C3ZIKvzv.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-300-normal-COoPE5VN.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-400-normal-DKg4f3fz.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-400-normal-r8SDr6Up.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-600-normal-Br8yIETf.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-600-normal-Cd0eNu1l.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-700-normal-Dort48En.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-700-normal-OcDqTBcA.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-300-normal-D1SyVuPt.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-300-normal-DfqbmdMl.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-400-normal-CjMJVfGn.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-400-normal-i-8OOpdj.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-600-normal-BKUpuB78.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-600-normal-Dd9Zuxh1.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-700-normal-BWeMsAzO.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-700-normal-D4woHhbd.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-300-normal-DATld5Vw.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-300-normal-mLneKULB.woff2 +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-400-normal-BHkVbP3T.woff2 +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-400-normal-DtOtW02z.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-600-normal-BY8O6Cug.woff2 +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-600-normal-DO1RqFw5.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-700-normal-C9SQsXvj.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-700-normal-Ch8EUCfz.woff2 +0 -0
- package/dist/ui/client/index.html +2 -2
- package/dist/ui/server/server.js +20388 -18163
- package/package.json +20 -17
- package/dist/adapters/database/data-source/singleton.d.ts +0 -5
- package/dist/adapters/database/data-source/singleton.d.ts.map +0 -1
- package/dist/adapters/database/data-source/singleton.mjs +0 -19
- package/dist/adapters/database/data-source/singleton.mjs.map +0 -1
- package/dist/adapters/database/event-publisher/index.d.ts +0 -2
- package/dist/adapters/database/event-publisher/index.d.ts.map +0 -1
- package/dist/adapters/database/event-publisher/index.mjs +0 -5
- package/dist/adapters/database/event-publisher/module.d.ts +0 -6
- package/dist/adapters/database/event-publisher/module.d.ts.map +0 -1
- package/dist/adapters/database/event-publisher/module.mjs +0 -25
- package/dist/adapters/database/event-publisher/module.mjs.map +0 -1
- package/dist/app/module.d.ts +0 -2
- package/dist/app/module.d.ts.map +0 -1
- package/dist/app/module.mjs +0 -5
- package/dist/app/types.d.ts +0 -2
- package/dist/app/types.d.ts.map +0 -1
- package/dist/ui/client/assets/index-CjKS9a0I.css +0 -1
- package/dist/ui/client/assets/index-bGxpD1zZ.js +0 -95
- /package/dist/{app → adapters/database/subscriber}/types.mjs +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
//#region src/core/mail/format/blocks.ts
|
|
5
|
+
function paragraph(text) {
|
|
6
|
+
return {
|
|
7
|
+
type: "paragraph",
|
|
8
|
+
text
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function code(label, value) {
|
|
12
|
+
return {
|
|
13
|
+
type: "code",
|
|
14
|
+
label,
|
|
15
|
+
value
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function action(label, url) {
|
|
19
|
+
return {
|
|
20
|
+
type: "action",
|
|
21
|
+
label,
|
|
22
|
+
url
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function note(text) {
|
|
26
|
+
return {
|
|
27
|
+
type: "note",
|
|
28
|
+
text
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Only http(s) URLs may become call-to-action links. Action URLs are built
|
|
33
|
+
* from `publicUrl` config today, so this is defense in depth against a
|
|
34
|
+
* future caller passing an attacker-influenced value (e.g. `javascript:`).
|
|
35
|
+
*/ function isSafeActionURL(input) {
|
|
36
|
+
let parsed;
|
|
37
|
+
try {
|
|
38
|
+
parsed = new URL(input);
|
|
39
|
+
} catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return parsed.protocol === "http:" || parsed.protocol === "https:";
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { action, code, isSafeActionURL, note, paragraph };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=blocks.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.mjs","names":["paragraph","text","type","code","label","value","action","url","note","isSafeActionURL","input","parsed","URL","protocol"],"sources":["../../../../src/core/mail/format/blocks.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n MailActionBlock,\n MailCodeBlock,\n MailNoteBlock,\n MailParagraphBlock,\n} from './types.ts';\n\nexport function paragraph(text: string): MailParagraphBlock {\n return { type: 'paragraph', text };\n}\n\nexport function code(label: string, value: string): MailCodeBlock {\n return {\n type: 'code', \n label, \n value, \n };\n}\n\nexport function action(label: string, url: string): MailActionBlock {\n return {\n type: 'action', \n label, \n url, \n };\n}\n\nexport function note(text: string): MailNoteBlock {\n return { type: 'note', text };\n}\n\n/**\n * Only http(s) URLs may become call-to-action links. Action URLs are built\n * from `publicUrl` config today, so this is defense in depth against a\n * future caller passing an attacker-influenced value (e.g. `javascript:`).\n */\nexport function isSafeActionURL(input: string): boolean {\n let parsed: URL;\n\n try {\n parsed = new URL(input);\n } catch {\n return false;\n }\n\n return parsed.protocol === 'http:' || parsed.protocol === 'https:';\n}\n"],"mappings":";;;;AAcA,SAAgBA,UAAUC,MAAY;CAClC,OAAO;EAAEC,MAAM;EAAaD;CAAK;AACrC;AAEA,SAAgBE,KAAKC,OAAeC,OAAa;CAC7C,OAAO;EACHH,MAAM;EACNE;EACAC;CACJ;AACJ;AAEA,SAAgBC,OAAOF,OAAeG,KAAW;CAC7C,OAAO;EACHL,MAAM;EACNE;EACAG;CACJ;AACJ;AAEA,SAAgBC,KAAKP,MAAY;CAC7B,OAAO;EAAEC,MAAM;EAAQD;CAAK;AAChC;;;;;GAOA,SAAgBQ,gBAAgBC,OAAa;CACzC,IAAIC;CAEJ,IAAI;EACAA,SAAS,IAAIC,IAAIF,KAAAA;CACrB,QAAQ;EACJ,OAAO;CACX;CAEA,OAAOC,OAAOE,aAAa,WAAWF,OAAOE,aAAa;AAC9D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MailDocument } from './types.ts';
|
|
2
|
+
export declare function escapeHtml(input: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Wrap the block list in a small branded HTML shell. Inline styles only —
|
|
5
|
+
* mail clients strip <style>/external CSS. The preheader is rendered
|
|
6
|
+
* invisible but picked up by clients as the preview line.
|
|
7
|
+
*/
|
|
8
|
+
export declare function renderHtmlDocument(document: MailDocument): string;
|
|
9
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/format/html.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAyBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAgBjE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
//#region src/core/mail/format/html.ts
|
|
5
|
+
function escapeHtml(input) {
|
|
6
|
+
return input.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
7
|
+
}
|
|
8
|
+
function renderBlock(block) {
|
|
9
|
+
switch (block.type) {
|
|
10
|
+
case "paragraph": return `<p style="margin:0 0 16px;">${escapeHtml(block.text)}</p>`;
|
|
11
|
+
case "code": return `<p style="margin:0 0 4px;font-size:13px;color:#9aa0aa;">${escapeHtml(block.label)}</p>
|
|
12
|
+
<p style="margin:0 0 16px;font-family:monospace;font-size:16px;letter-spacing:0.04em;word-break:break-all;background:#f4f4f6;border-radius:8px;padding:12px 14px;">${escapeHtml(block.value)}</p>`;
|
|
13
|
+
case "action": return `<p style="margin:24px 0 16px;">
|
|
14
|
+
<a href="${escapeHtml(block.url)}" style="display:inline-block;padding:10px 18px;border-radius:8px;background:#6d7fcc;color:#ffffff;text-decoration:none;font-weight:600;">${escapeHtml(block.label)}</a>
|
|
15
|
+
</p>`;
|
|
16
|
+
case "note": return `<p style="margin:0 0 8px;font-size:13px;color:#9aa0aa;">${escapeHtml(block.text)}</p>`;
|
|
17
|
+
default: return "";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Wrap the block list in a small branded HTML shell. Inline styles only —
|
|
22
|
+
* mail clients strip <style>/external CSS. The preheader is rendered
|
|
23
|
+
* invisible but picked up by clients as the preview line.
|
|
24
|
+
*/ function renderHtmlDocument(document) {
|
|
25
|
+
const preheader = document.preview ? `<div style="display:none;max-height:0;overflow:hidden;mso-hide:all;">${escapeHtml(document.preview)}</div>` : "";
|
|
26
|
+
return `<!doctype html>
|
|
27
|
+
<html lang="${escapeHtml(document.lang || "en")}">
|
|
28
|
+
<body style="margin:0;padding:24px;background:#f4f4f6;font-family:Nunito,Segoe UI,Arial,sans-serif;color:#26272c;">
|
|
29
|
+
${preheader}
|
|
30
|
+
<div style="max-width:480px;margin:0 auto;background:#ffffff;border-radius:12px;padding:28px;">
|
|
31
|
+
<div style="font-family:Asap,Arial,sans-serif;font-weight:700;font-size:20px;color:#6d7fcc;margin-bottom:16px;">Authup</div>
|
|
32
|
+
${document.blocks.map((block) => renderBlock(block)).join("\n ")}
|
|
33
|
+
</div>
|
|
34
|
+
<div style="max-width:480px;margin:12px auto 0;text-align:center;font-size:12px;color:#9aa0aa;">Made with 💚</div>
|
|
35
|
+
</body>
|
|
36
|
+
</html>`;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { escapeHtml, renderHtmlDocument };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=html.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.mjs","names":["escapeHtml","input","replace","renderBlock","block","type","text","label","value","url","renderHtmlDocument","document","preheader","preview","lang","blocks","map","join"],"sources":["../../../../src/core/mail/format/html.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { MailBlock, MailDocument } from './types.ts';\n\nexport function escapeHtml(input: string): string {\n return input\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction renderBlock(block: MailBlock): string {\n switch (block.type) {\n case 'paragraph': {\n return `<p style=\"margin:0 0 16px;\">${escapeHtml(block.text)}</p>`;\n }\n case 'code': {\n return `<p style=\"margin:0 0 4px;font-size:13px;color:#9aa0aa;\">${escapeHtml(block.label)}</p>\n <p style=\"margin:0 0 16px;font-family:monospace;font-size:16px;letter-spacing:0.04em;word-break:break-all;background:#f4f4f6;border-radius:8px;padding:12px 14px;\">${escapeHtml(block.value)}</p>`;\n }\n case 'action': {\n return `<p style=\"margin:24px 0 16px;\">\n <a href=\"${escapeHtml(block.url)}\" style=\"display:inline-block;padding:10px 18px;border-radius:8px;background:#6d7fcc;color:#ffffff;text-decoration:none;font-weight:600;\">${escapeHtml(block.label)}</a>\n </p>`;\n }\n case 'note': {\n return `<p style=\"margin:0 0 8px;font-size:13px;color:#9aa0aa;\">${escapeHtml(block.text)}</p>`;\n }\n default: {\n return '';\n }\n }\n}\n\n/**\n * Wrap the block list in a small branded HTML shell. Inline styles only —\n * mail clients strip <style>/external CSS. The preheader is rendered\n * invisible but picked up by clients as the preview line.\n */\nexport function renderHtmlDocument(document: MailDocument): string {\n const preheader = document.preview ?\n `<div style=\"display:none;max-height:0;overflow:hidden;mso-hide:all;\">${escapeHtml(document.preview)}</div>` :\n '';\n\n return `<!doctype html>\n<html lang=\"${escapeHtml(document.lang || 'en')}\">\n<body style=\"margin:0;padding:24px;background:#f4f4f6;font-family:Nunito,Segoe UI,Arial,sans-serif;color:#26272c;\">\n ${preheader}\n <div style=\"max-width:480px;margin:0 auto;background:#ffffff;border-radius:12px;padding:28px;\">\n <div style=\"font-family:Asap,Arial,sans-serif;font-weight:700;font-size:20px;color:#6d7fcc;margin-bottom:16px;\">Authup</div>\n ${document.blocks.map((block) => renderBlock(block)).join('\\n ')}\n </div>\n <div style=\"max-width:480px;margin:12px auto 0;text-align:center;font-size:12px;color:#9aa0aa;\">Made with 💚</div>\n</body>\n</html>`;\n}\n"],"mappings":";;;;AASA,SAAgBA,WAAWC,OAAa;CACpC,OAAOA,MACFC,QAAQ,MAAM,OAAA,CAAA,CACdA,QAAQ,MAAM,MAAA,CAAA,CACdA,QAAQ,MAAM,MAAA,CAAA,CACdA,QAAQ,MAAM,QAAA,CAAA,CACdA,QAAQ,MAAM,OAAA;AACvB;AAEA,SAASC,YAAYC,OAAgB;CACjC,QAAQA,MAAMC,MAAd;EACI,KAAK,aACD,OAAO,+BAA+BL,WAAWI,MAAME,IAAI,EAAE;EAEjE,KAAK,QACD,OAAO,2DAA2DN,WAAWI,MAAMG,KAAK,EAAE;6KACuEP,WAAWI,MAAMI,KAAK,EAAE;EAE7L,KAAK,UACD,OAAO;uBACIR,WAAWI,MAAMK,GAAG,EAAE,4IAA4IT,WAAWI,MAAMG,KAAK,EAAE;;EAGzM,KAAK,QACD,OAAO,2DAA2DP,WAAWI,MAAME,IAAI,EAAE;EAE7F,SACI,OAAO;CAEf;AACJ;;;;;GAOA,SAAgBI,mBAAmBC,UAAsB;CACrD,MAAMC,YAAYD,SAASE,UACvB,wEAAwEb,WAAWW,SAASE,OAAO,EAAE,UACrG;CAEJ,OAAO;cACGb,WAAWW,SAASG,QAAQ,IAAA,EAAM;;MAE1CF,UAAU;;;UAGND,SAASI,OAAOC,KAAKZ,UAAUD,YAAYC,KAAAA,CAAAA,CAAAA,CAAQa,KAAK,YAAA,EAAc;;;;;AAKhF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/format/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { action, code, isSafeActionURL, note, paragraph } from "./blocks.mjs";
|
|
5
|
+
import { escapeHtml, renderHtmlDocument } from "./html.mjs";
|
|
6
|
+
import { renderTextDocument } from "./text.mjs";
|
|
7
|
+
export { action, code, escapeHtml, isSafeActionURL, note, paragraph, renderHtmlDocument, renderTextDocument };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/format/text.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,YAAY,CAAC;AAsB1D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAKjE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
//#region src/core/mail/format/text.ts
|
|
5
|
+
function renderBlock(block) {
|
|
6
|
+
switch (block.type) {
|
|
7
|
+
case "paragraph": return block.text;
|
|
8
|
+
case "code": return `${block.label}: ${block.value}`;
|
|
9
|
+
case "action": return `${block.label}: ${block.url}`;
|
|
10
|
+
case "note": return block.text;
|
|
11
|
+
default: return "";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function renderTextDocument(document) {
|
|
15
|
+
return document.blocks.map((block) => renderBlock(block)).filter((line) => line.length > 0).join("\n\n");
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { renderTextDocument };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=text.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.mjs","names":["renderBlock","block","type","text","label","value","url","renderTextDocument","document","blocks","map","filter","line","length","join"],"sources":["../../../../src/core/mail/format/text.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { MailBlock, MailDocument } from './types.ts';\n\nfunction renderBlock(block: MailBlock): string {\n switch (block.type) {\n case 'paragraph': {\n return block.text;\n }\n case 'code': {\n return `${block.label}: ${block.value}`;\n }\n case 'action': {\n return `${block.label}: ${block.url}`;\n }\n case 'note': {\n return block.text;\n }\n default: {\n return '';\n }\n }\n}\n\nexport function renderTextDocument(document: MailDocument): string {\n return document.blocks\n .map((block) => renderBlock(block))\n .filter((line) => line.length > 0)\n .join('\\n\\n');\n}\n"],"mappings":";;;;AASA,SAASA,YAAYC,OAAgB;CACjC,QAAQA,MAAMC,MAAd;EACI,KAAK,aACD,OAAOD,MAAME;EAEjB,KAAK,QACD,OAAO,GAAGF,MAAMG,MAAM,IAAIH,MAAMI;EAEpC,KAAK,UACD,OAAO,GAAGJ,MAAMG,MAAM,IAAIH,MAAMK;EAEpC,KAAK,QACD,OAAOL,MAAME;EAEjB,SACI,OAAO;CAEf;AACJ;AAEA,SAAgBI,mBAAmBC,UAAsB;CACrD,OAAOA,SAASC,OACXC,KAAKT,UAAUD,YAAYC,KAAAA,CAAAA,CAAAA,CAC3BU,QAAQC,SAASA,KAAKC,SAAS,CAAA,CAAA,CAC/BC,KAAK,MAAA;AACd"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural building blocks of a mail body. Templates compose blocks;
|
|
3
|
+
* the html/text formatters turn the same block list into both mail parts,
|
|
4
|
+
* so the two representations cannot drift apart.
|
|
5
|
+
*/
|
|
6
|
+
export type MailParagraphBlock = {
|
|
7
|
+
type: 'paragraph';
|
|
8
|
+
text: string;
|
|
9
|
+
};
|
|
10
|
+
export type MailCodeBlock = {
|
|
11
|
+
type: 'code';
|
|
12
|
+
label: string;
|
|
13
|
+
value: string;
|
|
14
|
+
};
|
|
15
|
+
export type MailActionBlock = {
|
|
16
|
+
type: 'action';
|
|
17
|
+
label: string;
|
|
18
|
+
url: string;
|
|
19
|
+
};
|
|
20
|
+
export type MailNoteBlock = {
|
|
21
|
+
type: 'note';
|
|
22
|
+
text: string;
|
|
23
|
+
};
|
|
24
|
+
export type MailBlock = MailParagraphBlock | MailCodeBlock | MailActionBlock | MailNoteBlock;
|
|
25
|
+
export type MailDocument = {
|
|
26
|
+
lang?: string;
|
|
27
|
+
preview?: string;
|
|
28
|
+
blocks: MailBlock[];
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/format/types.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,kBAAkB,GAC1C,aAAa,GACb,eAAe,GACf,aAAa,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG;IAEvB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/mail/index.ts"],"names":[],"mappings":"AAOA,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/mail/index.ts"],"names":[],"mappings":"AAOA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC"}
|
package/dist/core/mail/index.mjs
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import "node:path";
|
|
2
2
|
import "node:url";
|
|
3
3
|
import.meta.url;
|
|
4
|
-
|
|
4
|
+
import { defineMailTemplate } from "./template/define.mjs";
|
|
5
|
+
import { MailTemplateName } from "./template/types.mjs";
|
|
6
|
+
import { MAIL_TEMPLATE_REGISTRY } from "./template/registry.mjs";
|
|
7
|
+
import { MailTemplateRenderer } from "./renderer.mjs";
|
|
8
|
+
import "./template/index.mjs";
|
|
9
|
+
export { MAIL_TEMPLATE_REGISTRY, MailTemplateName, MailTemplateRenderer, defineMailTemplate };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Ilingo } from 'ilingo';
|
|
2
|
+
import type { MailTemplateName } from './template/types.ts';
|
|
3
|
+
import type { IMailTemplateRenderer, MailContent, MailRenderInput } from './types.ts';
|
|
4
|
+
export declare class MailTemplateRenderer implements IMailTemplateRenderer {
|
|
5
|
+
protected ilingo: Ilingo;
|
|
6
|
+
constructor();
|
|
7
|
+
render<N extends MailTemplateName>(input: MailRenderInput<N>): Promise<MailContent>;
|
|
8
|
+
protected translate(locale: string, key: string, data?: Record<string, any>): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/core/mail/renderer.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAM7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACR,qBAAqB,EACrB,WAAW,EACX,eAAe,EAClB,MAAM,YAAY,CAAC;AAEpB,qBAAa,oBAAqB,YAAW,qBAAqB;IAC9D,SAAS,CAAC,MAAM,EAAG,MAAM,CAAC;;IASpB,MAAM,CAAC,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;cA6BzE,SAAS,CACrB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,MAAM,CAAC;CAcrB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { isSafeActionURL } from "./format/blocks.mjs";
|
|
5
|
+
import { renderHtmlDocument } from "./format/html.mjs";
|
|
6
|
+
import { renderTextDocument } from "./format/text.mjs";
|
|
7
|
+
import { MAIL_TEMPLATE_REGISTRY } from "./template/registry.mjs";
|
|
8
|
+
import { InternalError } from "@authup/errors";
|
|
9
|
+
import { CATALOGS, DEFAULT_LOCALE, TranslatorTranslationNamespace, matchLocale } from "@authup/i18n";
|
|
10
|
+
import { Ilingo, MemoryStore } from "ilingo";
|
|
11
|
+
//#region src/core/mail/renderer.ts
|
|
12
|
+
var MailTemplateRenderer = class {
|
|
13
|
+
ilingo;
|
|
14
|
+
constructor() {
|
|
15
|
+
this.ilingo = new Ilingo({
|
|
16
|
+
store: new MemoryStore({ data: CATALOGS }),
|
|
17
|
+
locale: DEFAULT_LOCALE
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async render(input) {
|
|
21
|
+
const template = MAIL_TEMPLATE_REGISTRY[input.template];
|
|
22
|
+
const locale = matchLocale(input.locale) ?? DEFAULT_LOCALE;
|
|
23
|
+
const output = await template.build(input.params, (key, data) => this.translate(locale, key, data));
|
|
24
|
+
const document = {
|
|
25
|
+
lang: locale,
|
|
26
|
+
preview: output.preview,
|
|
27
|
+
blocks: output.blocks.filter((block) => block.type !== "action" || isSafeActionURL(block.url))
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
subject: output.subject,
|
|
31
|
+
html: renderHtmlDocument(document),
|
|
32
|
+
text: renderTextDocument(document)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async translate(locale, key, data) {
|
|
36
|
+
const value = await this.ilingo.get({
|
|
37
|
+
namespace: TranslatorTranslationNamespace.MAIL,
|
|
38
|
+
key,
|
|
39
|
+
locale,
|
|
40
|
+
data
|
|
41
|
+
});
|
|
42
|
+
if (typeof value === "undefined") throw new InternalError(`The mail translation "${key}" (locale: ${locale}) could not be resolved.`);
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
//#endregion
|
|
47
|
+
export { MailTemplateRenderer };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=renderer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.mjs","names":["InternalError","CATALOGS","DEFAULT_LOCALE","TranslatorTranslationNamespace","matchLocale","Ilingo","MemoryStore","isSafeActionURL","renderHtmlDocument","renderTextDocument","MAIL_TEMPLATE_REGISTRY","MailTemplateRenderer","ilingo","store","data","locale","render","input","template","output","build","params","key","translate","document","lang","preview","blocks","filter","block","type","url","subject","html","text","value","get","namespace","MAIL"],"sources":["../../../src/core/mail/renderer.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { InternalError } from '@authup/errors';\nimport {\n CATALOGS,\n DEFAULT_LOCALE,\n TranslatorTranslationNamespace,\n matchLocale,\n} from '@authup/i18n';\nimport { Ilingo, MemoryStore } from 'ilingo';\nimport { isSafeActionURL } from './format/blocks.ts';\nimport { renderHtmlDocument } from './format/html.ts';\nimport { renderTextDocument } from './format/text.ts';\nimport type { MailDocument } from './format/types.ts';\nimport { MAIL_TEMPLATE_REGISTRY } from './template/registry.ts';\nimport type { MailTemplateName } from './template/types.ts';\nimport type {\n IMailTemplateRenderer,\n MailContent,\n MailRenderInput,\n} from './types.ts';\n\nexport class MailTemplateRenderer implements IMailTemplateRenderer {\n protected ilingo : Ilingo;\n\n constructor() {\n this.ilingo = new Ilingo({\n store: new MemoryStore({ data: CATALOGS }),\n locale: DEFAULT_LOCALE,\n });\n }\n\n async render<N extends MailTemplateName>(input: MailRenderInput<N>): Promise<MailContent> {\n const template = MAIL_TEMPLATE_REGISTRY[input.template];\n\n // Narrow the requested BCP-47 tag onto an authored catalog locale\n // up front, so the copy and the rendered `<html lang>` agree.\n const locale = matchLocale(input.locale) ?? DEFAULT_LOCALE;\n\n const output = await template.build(\n input.params,\n (key, data) => this.translate(locale, key, data),\n );\n\n const document : MailDocument = {\n lang: locale,\n preview: output.preview,\n // Central guard: a call-to-action never renders with a non-http(s)\n // URL, regardless of what an individual template composed.\n blocks: output.blocks.filter(\n (block) => block.type !== 'action' || isSafeActionURL(block.url),\n ),\n };\n\n return {\n subject: output.subject,\n html: renderHtmlDocument(document),\n text: renderTextDocument(document),\n };\n }\n\n protected async translate(\n locale: string,\n key: string,\n data?: Record<string, any>,\n ): Promise<string> {\n const value = await this.ilingo.get({\n namespace: TranslatorTranslationNamespace.MAIL,\n key,\n locale,\n data,\n });\n\n if (typeof value === 'undefined') {\n throw new InternalError(`The mail translation \"${key}\" (locale: ${locale}) could not be resolved.`);\n }\n\n return value;\n }\n}\n"],"mappings":";;;;;;;;;;;AA2BA,IAAaW,uBAAb,MAAaA;CACCC;CAEV,cAAc;EACV,KAAKA,SAAS,IAAIP,OAAO;GACrBQ,OAAO,IAAIP,YAAY,EAAEQ,MAAMb,SAAS,CAAA;GACxCc,QAAQb;EACZ,CAAA;CACJ;CAEA,MAAMc,OAAmCC,OAAiD;EACtF,MAAMC,WAAWR,uBAAuBO,MAAMC;EAI9C,MAAMH,SAASX,YAAYa,MAAMF,MAAM,KAAKb;EAE5C,MAAMiB,SAAS,MAAMD,SAASE,MAC1BH,MAAMI,SACLC,KAAKR,SAAS,KAAKS,UAAUR,QAAQO,KAAKR,IAAAA,CAAAA;EAG/C,MAAMU,WAA0B;GAC5BC,MAAMV;GACNW,SAASP,OAAOO;GAGhBC,QAAQR,OAAOQ,OAAOC,QACjBC,UAAUA,MAAMC,SAAS,YAAYvB,gBAAgBsB,MAAME,GAAG,CAAA;EAEvE;EAEA,OAAO;GACHC,SAASb,OAAOa;GAChBC,MAAMzB,mBAAmBgB,QAAAA;GACzBU,MAAMzB,mBAAmBe,QAAAA;EAC7B;CACJ;CAEA,MAAgBD,UACZR,QACAO,KACAR,MACe;EACf,MAAMqB,QAAQ,MAAM,KAAKvB,OAAOwB,IAAI;GAChCC,WAAWlC,+BAA+BmC;GAC1ChB;GACAP;GACAD;EACJ,CAAA;EAEA,IAAI,OAAOqB,UAAU,aACjB,MAAM,IAAInC,cAAc,yBAAyBsB,IAAI,aAAaP,OAAO,yBAAyB;EAGtG,OAAOoB;CACX;AACJ"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MailTemplate, MailTemplateName } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Identity helper that pins down the per-template params (via `name`) so
|
|
4
|
+
* `build` is fully typed at the call site.
|
|
5
|
+
*/
|
|
6
|
+
export declare function defineMailTemplate<N extends MailTemplateName>(template: MailTemplate<N>): MailTemplate<N>;
|
|
7
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/template/define.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,gBAAgB,EACzD,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAC1B,YAAY,CAAC,CAAC,CAAC,CAEjB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
//#region src/core/mail/template/define.ts
|
|
5
|
+
/**
|
|
6
|
+
* Identity helper that pins down the per-template params (via `name`) so
|
|
7
|
+
* `build` is fully typed at the call site.
|
|
8
|
+
*/ function defineMailTemplate(template) {
|
|
9
|
+
return template;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { defineMailTemplate };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=define.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.mjs","names":["defineMailTemplate","template"],"sources":["../../../../src/core/mail/template/define.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { MailTemplate, MailTemplateName } from './types.ts';\n\n/**\n * Identity helper that pins down the per-template params (via `name`) so\n * `build` is fully typed at the call site.\n */\nexport function defineMailTemplate<N extends MailTemplateName>(\n template: MailTemplate<N>,\n): MailTemplate<N> {\n return template;\n}\n"],"mappings":";;;;;;;GAaA,SAAgBA,mBACZC,UAAyB;CAEzB,OAAOA;AACX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/template/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { defineMailTemplate } from "./define.mjs";
|
|
5
|
+
import { MailTemplateName } from "./types.mjs";
|
|
6
|
+
import { MAIL_TEMPLATE_REGISTRY } from "./registry.mjs";
|
|
7
|
+
export { MAIL_TEMPLATE_REGISTRY, MailTemplateName, defineMailTemplate };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/template/registry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,sBAAsB,EAAE;KAAG,CAAC,IAAI,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC;CAG9E,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { MailTemplateName } from "./types.mjs";
|
|
5
|
+
import { passwordResetMailTemplate } from "./templates/password-reset.mjs";
|
|
6
|
+
import { registrationActivationMailTemplate } from "./templates/registration-activation.mjs";
|
|
7
|
+
//#region src/core/mail/template/registry.ts
|
|
8
|
+
const MAIL_TEMPLATE_REGISTRY = {
|
|
9
|
+
[MailTemplateName.REGISTRATION_ACTIVATION]: registrationActivationMailTemplate,
|
|
10
|
+
[MailTemplateName.PASSWORD_RESET]: passwordResetMailTemplate
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { MAIL_TEMPLATE_REGISTRY };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=registry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.mjs","names":["passwordResetMailTemplate","registrationActivationMailTemplate","MailTemplateName","MAIL_TEMPLATE_REGISTRY","REGISTRATION_ACTIVATION","PASSWORD_RESET"],"sources":["../../../../src/core/mail/template/registry.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { passwordResetMailTemplate } from './templates/password-reset.ts';\nimport { registrationActivationMailTemplate } from './templates/registration-activation.ts';\nimport type { MailTemplate } from './types.ts';\nimport { MailTemplateName } from './types.ts';\n\nexport const MAIL_TEMPLATE_REGISTRY: { [N in MailTemplateName]: MailTemplate<N> } = {\n [MailTemplateName.REGISTRATION_ACTIVATION]: registrationActivationMailTemplate,\n [MailTemplateName.PASSWORD_RESET]: passwordResetMailTemplate,\n};\n"],"mappings":";;;;;;;AAYA,MAAaG,yBAAuE;EAC/ED,iBAAiBE,0BAA0BH;EAC3CC,iBAAiBG,iBAAiBL;AACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset.d.ts","sourceRoot":"","sources":["../../../../../src/core/mail/template/templates/password-reset.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,yBAAyB,qEA2BpC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { action, code, note, paragraph } from "../../format/blocks.mjs";
|
|
5
|
+
import { defineMailTemplate } from "../define.mjs";
|
|
6
|
+
import { MailTemplateName } from "../types.mjs";
|
|
7
|
+
import { TranslatorTranslationMailKey } from "@authup/i18n";
|
|
8
|
+
//#region src/core/mail/template/templates/password-reset.ts
|
|
9
|
+
const passwordResetMailTemplate = defineMailTemplate({
|
|
10
|
+
name: MailTemplateName.PASSWORD_RESET,
|
|
11
|
+
build: async (params, t) => {
|
|
12
|
+
const [subject, intro, codeLabel, actionLabel, hint] = await Promise.all([
|
|
13
|
+
t(TranslatorTranslationMailKey.PASSWORD_RESET_SUBJECT),
|
|
14
|
+
t(TranslatorTranslationMailKey.PASSWORD_RESET_INTRO),
|
|
15
|
+
t(TranslatorTranslationMailKey.CODE),
|
|
16
|
+
t(TranslatorTranslationMailKey.PASSWORD_RESET_ACTION),
|
|
17
|
+
t(TranslatorTranslationMailKey.PASSWORD_RESET_HINT)
|
|
18
|
+
]);
|
|
19
|
+
const expiry = params.expiresInMinutes ? await t(TranslatorTranslationMailKey.PASSWORD_RESET_EXPIRY, { minutes: params.expiresInMinutes }) : void 0;
|
|
20
|
+
return {
|
|
21
|
+
subject,
|
|
22
|
+
preview: intro,
|
|
23
|
+
blocks: [
|
|
24
|
+
paragraph(intro),
|
|
25
|
+
code(codeLabel, params.code),
|
|
26
|
+
...params.url ? [action(actionLabel, params.url)] : [],
|
|
27
|
+
...expiry ? [note(expiry)] : [],
|
|
28
|
+
note(hint)
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
//#endregion
|
|
34
|
+
export { passwordResetMailTemplate };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=password-reset.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset.mjs","names":["TranslatorTranslationMailKey","action","code","note","paragraph","defineMailTemplate","MailTemplateName","passwordResetMailTemplate","name","PASSWORD_RESET","build","params","t","subject","intro","codeLabel","actionLabel","hint","Promise","all","PASSWORD_RESET_SUBJECT","PASSWORD_RESET_INTRO","CODE","PASSWORD_RESET_ACTION","PASSWORD_RESET_HINT","expiry","expiresInMinutes","PASSWORD_RESET_EXPIRY","minutes","undefined","preview","blocks","url"],"sources":["../../../../../src/core/mail/template/templates/password-reset.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TranslatorTranslationMailKey } from '@authup/i18n';\nimport { \n action, \n code, \n note, \n paragraph, \n} from '../../format/blocks.ts';\nimport { defineMailTemplate } from '../define.ts';\nimport { MailTemplateName } from '../types.ts';\n\nexport const passwordResetMailTemplate = defineMailTemplate({\n name: MailTemplateName.PASSWORD_RESET,\n build: async (params, t) => {\n const [subject, intro, codeLabel, actionLabel, hint] = await Promise.all([\n t(TranslatorTranslationMailKey.PASSWORD_RESET_SUBJECT),\n t(TranslatorTranslationMailKey.PASSWORD_RESET_INTRO),\n t(TranslatorTranslationMailKey.CODE),\n t(TranslatorTranslationMailKey.PASSWORD_RESET_ACTION),\n t(TranslatorTranslationMailKey.PASSWORD_RESET_HINT),\n ]);\n\n const expiry = params.expiresInMinutes ?\n await t(TranslatorTranslationMailKey.PASSWORD_RESET_EXPIRY, { minutes: params.expiresInMinutes }) :\n undefined;\n\n return {\n subject,\n preview: intro,\n blocks: [\n paragraph(intro),\n code(codeLabel, params.code),\n ...(params.url ? [action(actionLabel, params.url)] : []),\n ...(expiry ? [note(expiry)] : []),\n note(hint),\n ],\n };\n },\n});\n"],"mappings":";;;;;;;;AAiBA,MAAaO,4BAA4BF,mBAAmB;CACxDG,MAAMF,iBAAiBG;CACvBC,OAAO,OAAOC,QAAQC,MAAAA;EAClB,MAAM,CAACC,SAASC,OAAOC,WAAWC,aAAaC,QAAQ,MAAMC,QAAQC,IAAI;GACrEP,EAAEZ,6BAA6BoB,sBAAsB;GACrDR,EAAEZ,6BAA6BqB,oBAAoB;GACnDT,EAAEZ,6BAA6BsB,IAAI;GACnCV,EAAEZ,6BAA6BuB,qBAAqB;GACpDX,EAAEZ,6BAA6BwB,mBAAmB;GACrD;EAED,MAAMC,SAASd,OAAOe,mBAClB,MAAMd,EAAEZ,6BAA6B2B,uBAAuB,EAAEC,SAASjB,OAAOe,iBAAiB,CAAA,IAC/FG,KAAAA;EAEJ,OAAO;GACHhB;GACAiB,SAAShB;GACTiB,QAAQ;IACJ3B,UAAUU,KAAAA;IACVZ,KAAKa,WAAWJ,OAAOT,IAAI;OACvBS,OAAOqB,MAAM,CAAC/B,OAAOe,aAAaL,OAAOqB,GAAG,CAAA,IAAK,CAAA;OACjDP,SAAS,CAACtB,KAAKsB,MAAAA,CAAAA,IAAW,CAAA;IAC9BtB,KAAKc,IAAAA;;EAEb;CACJ;AACJ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration-activation.d.ts","sourceRoot":"","sources":["../../../../../src/core/mail/template/templates/registration-activation.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,kCAAkC,8EAsB7C,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { action, code, note, paragraph } from "../../format/blocks.mjs";
|
|
5
|
+
import { defineMailTemplate } from "../define.mjs";
|
|
6
|
+
import { MailTemplateName } from "../types.mjs";
|
|
7
|
+
import { TranslatorTranslationMailKey } from "@authup/i18n";
|
|
8
|
+
//#region src/core/mail/template/templates/registration-activation.ts
|
|
9
|
+
const registrationActivationMailTemplate = defineMailTemplate({
|
|
10
|
+
name: MailTemplateName.REGISTRATION_ACTIVATION,
|
|
11
|
+
build: async (params, t) => {
|
|
12
|
+
const [subject, intro, codeLabel, actionLabel, hint] = await Promise.all([
|
|
13
|
+
t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_SUBJECT),
|
|
14
|
+
t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_INTRO),
|
|
15
|
+
t(TranslatorTranslationMailKey.CODE),
|
|
16
|
+
t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_ACTION),
|
|
17
|
+
t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_HINT)
|
|
18
|
+
]);
|
|
19
|
+
return {
|
|
20
|
+
subject,
|
|
21
|
+
preview: intro,
|
|
22
|
+
blocks: [
|
|
23
|
+
paragraph(intro),
|
|
24
|
+
code(codeLabel, params.code),
|
|
25
|
+
...params.url ? [action(actionLabel, params.url)] : [],
|
|
26
|
+
note(hint)
|
|
27
|
+
]
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
//#endregion
|
|
32
|
+
export { registrationActivationMailTemplate };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=registration-activation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration-activation.mjs","names":["TranslatorTranslationMailKey","action","code","note","paragraph","defineMailTemplate","MailTemplateName","registrationActivationMailTemplate","name","REGISTRATION_ACTIVATION","build","params","t","subject","intro","codeLabel","actionLabel","hint","Promise","all","REGISTRATION_ACTIVATION_SUBJECT","REGISTRATION_ACTIVATION_INTRO","CODE","REGISTRATION_ACTIVATION_ACTION","REGISTRATION_ACTIVATION_HINT","preview","blocks","url"],"sources":["../../../../../src/core/mail/template/templates/registration-activation.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TranslatorTranslationMailKey } from '@authup/i18n';\nimport { \n action, \n code, \n note, \n paragraph, \n} from '../../format/blocks.ts';\nimport { defineMailTemplate } from '../define.ts';\nimport { MailTemplateName } from '../types.ts';\n\nexport const registrationActivationMailTemplate = defineMailTemplate({\n name: MailTemplateName.REGISTRATION_ACTIVATION,\n build: async (params, t) => {\n const [subject, intro, codeLabel, actionLabel, hint] = await Promise.all([\n t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_SUBJECT),\n t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_INTRO),\n t(TranslatorTranslationMailKey.CODE),\n t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_ACTION),\n t(TranslatorTranslationMailKey.REGISTRATION_ACTIVATION_HINT),\n ]);\n\n return {\n subject,\n preview: intro,\n blocks: [\n paragraph(intro),\n code(codeLabel, params.code),\n ...(params.url ? [action(actionLabel, params.url)] : []),\n note(hint),\n ],\n };\n },\n});\n"],"mappings":";;;;;;;;AAiBA,MAAaO,qCAAqCF,mBAAmB;CACjEG,MAAMF,iBAAiBG;CACvBC,OAAO,OAAOC,QAAQC,MAAAA;EAClB,MAAM,CAACC,SAASC,OAAOC,WAAWC,aAAaC,QAAQ,MAAMC,QAAQC,IAAI;GACrEP,EAAEZ,6BAA6BoB,+BAA+B;GAC9DR,EAAEZ,6BAA6BqB,6BAA6B;GAC5DT,EAAEZ,6BAA6BsB,IAAI;GACnCV,EAAEZ,6BAA6BuB,8BAA8B;GAC7DX,EAAEZ,6BAA6BwB,4BAA4B;GAC9D;EAED,OAAO;GACHX;GACAY,SAASX;GACTY,QAAQ;IACJtB,UAAUU,KAAAA;IACVZ,KAAKa,WAAWJ,OAAOT,IAAI;OACvBS,OAAOgB,MAAM,CAAC1B,OAAOe,aAAaL,OAAOgB,GAAG,CAAA,IAAK,CAAA;IACrDxB,KAAKc,IAAAA;;EAEb;CACJ;AACJ,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { TranslatorTranslationMailKey } from '@authup/i18n';
|
|
2
|
+
import type { MailBlock } from '../format/types.ts';
|
|
3
|
+
export declare enum MailTemplateName {
|
|
4
|
+
REGISTRATION_ACTIVATION = "registration-activation",
|
|
5
|
+
PASSWORD_RESET = "password-reset"
|
|
6
|
+
}
|
|
7
|
+
export type MailTemplateParamsMap = {
|
|
8
|
+
[MailTemplateName.REGISTRATION_ACTIVATION]: {
|
|
9
|
+
code: string;
|
|
10
|
+
url?: string;
|
|
11
|
+
};
|
|
12
|
+
[MailTemplateName.PASSWORD_RESET]: {
|
|
13
|
+
code: string;
|
|
14
|
+
url?: string;
|
|
15
|
+
expiresInMinutes?: number;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Locale-bound translator handed to a template's `build`. Resolves a key
|
|
20
|
+
* of the `authupMail` namespace (`@authup/i18n`) through ilingo — `data`
|
|
21
|
+
* feeds `{{var}}` interpolation. Async so file- or remote-backed override
|
|
22
|
+
* stores can slot in behind the same contract.
|
|
23
|
+
*/
|
|
24
|
+
export type MailTemplateTranslator = (key: `${TranslatorTranslationMailKey}`, data?: Record<string, any>) => Promise<string>;
|
|
25
|
+
export type MailTemplateBuildOutput = {
|
|
26
|
+
subject: string;
|
|
27
|
+
preview?: string;
|
|
28
|
+
blocks: MailBlock[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* A mail template composes its body from blocks; subject, html and text
|
|
32
|
+
* all derive from the same build output. Copy is not embedded — it is
|
|
33
|
+
* resolved per locale through the supplied translator.
|
|
34
|
+
*/
|
|
35
|
+
export type MailTemplate<N extends MailTemplateName = MailTemplateName> = {
|
|
36
|
+
name: N;
|
|
37
|
+
build(params: MailTemplateParamsMap[N], t: MailTemplateTranslator): Promise<MailTemplateBuildOutput>;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/mail/template/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,oBAAY,gBAAgB;IACxB,uBAAuB,4BAA4B;IACnD,cAAc,mBAAmB;CACpC;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,EAAE;QACxC,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACL,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACjC,GAAG,EAAE,GAAG,4BAA4B,EAAE,EACtC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACzB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,uBAAuB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IAAI;IACtE,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CACD,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAChC,CAAC,EAAE,sBAAsB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACvC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
//#region src/core/mail/template/types.ts
|
|
5
|
+
var MailTemplateName = /*#__PURE__*/ function(MailTemplateName) {
|
|
6
|
+
MailTemplateName["REGISTRATION_ACTIVATION"] = "registration-activation";
|
|
7
|
+
MailTemplateName["PASSWORD_RESET"] = "password-reset";
|
|
8
|
+
return MailTemplateName;
|
|
9
|
+
}({});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { MailTemplateName };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","names":["MailTemplateName"],"sources":["../../../../src/core/mail/template/types.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { TranslatorTranslationMailKey } from '@authup/i18n';\nimport type { MailBlock } from '../format/types.ts';\n\nexport enum MailTemplateName {\n REGISTRATION_ACTIVATION = 'registration-activation',\n PASSWORD_RESET = 'password-reset',\n}\n\nexport type MailTemplateParamsMap = {\n [MailTemplateName.REGISTRATION_ACTIVATION]: {\n code: string,\n url?: string,\n },\n [MailTemplateName.PASSWORD_RESET]: {\n code: string,\n url?: string,\n expiresInMinutes?: number,\n },\n};\n\n/**\n * Locale-bound translator handed to a template's `build`. Resolves a key\n * of the `authupMail` namespace (`@authup/i18n`) through ilingo — `data`\n * feeds `{{var}}` interpolation. Async so file- or remote-backed override\n * stores can slot in behind the same contract.\n */\nexport type MailTemplateTranslator = (\n key: `${TranslatorTranslationMailKey}`,\n data?: Record<string, any>,\n) => Promise<string>;\n\nexport type MailTemplateBuildOutput = {\n subject: string,\n // Hidden preheader shown by mail clients as the preview line.\n preview?: string,\n blocks: MailBlock[],\n};\n\n/**\n * A mail template composes its body from blocks; subject, html and text\n * all derive from the same build output. Copy is not embedded — it is\n * resolved per locale through the supplied translator.\n */\nexport type MailTemplate<N extends MailTemplateName = MailTemplateName> = {\n name: N,\n build(\n params: MailTemplateParamsMap[N],\n t: MailTemplateTranslator,\n ): Promise<MailTemplateBuildOutput>,\n};\n"],"mappings":";;;;AAUA,IAAO,mBAAKA,uBAAAA,kBAAAA;;;QAAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MailTemplateName, MailTemplateParamsMap } from './template/types.ts';
|
|
1
2
|
export type MailAddress = {
|
|
2
3
|
name: string;
|
|
3
4
|
address: string;
|
|
@@ -12,4 +13,24 @@ export type MailSendOptions = {
|
|
|
12
13
|
export interface IMailClient {
|
|
13
14
|
send(options: MailSendOptions): Promise<void>;
|
|
14
15
|
}
|
|
16
|
+
export type MailRenderInput<N extends MailTemplateName = MailTemplateName> = {
|
|
17
|
+
template: N;
|
|
18
|
+
params: MailTemplateParamsMap[N];
|
|
19
|
+
locale?: string;
|
|
20
|
+
};
|
|
21
|
+
export type MailContent = {
|
|
22
|
+
subject: string;
|
|
23
|
+
html: string;
|
|
24
|
+
text: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Renders a localized, branded mail (subject + html + text) from a template
|
|
28
|
+
* name and typed params. Decouples mail copy/markup from the workflow
|
|
29
|
+
* services, which pass `{ template, params, locale }` instead of building
|
|
30
|
+
* HTML. Async because copy resolution runs through ilingo's store contract
|
|
31
|
+
* (memory today; file- or remote-backed overrides tomorrow).
|
|
32
|
+
*/
|
|
33
|
+
export interface IMailTemplateRenderer {
|
|
34
|
+
render<N extends MailTemplateName>(input: MailRenderInput<N>): Promise<MailContent>;
|
|
35
|
+
}
|
|
15
36
|
//# sourceMappingURL=types.d.ts.map
|