@venizia/ignis 0.2.0-9 → 0.2.1-0
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.md +0 -1
- package/README.md +118 -158
- package/dist/base/applications/base.d.ts +19 -13
- package/dist/base/applications/base.d.ts.map +1 -1
- package/dist/base/applications/base.js +95 -74
- package/dist/base/applications/base.js.map +1 -1
- package/dist/base/applications/boot-steps.d.ts +13 -0
- package/dist/base/applications/boot-steps.d.ts.map +1 -0
- package/dist/base/applications/boot-steps.js +23 -0
- package/dist/base/applications/boot-steps.js.map +1 -0
- package/dist/base/applications/common/index.d.ts +2 -0
- package/dist/base/applications/common/index.d.ts.map +1 -0
- package/dist/base/applications/common/index.js +18 -0
- package/dist/base/applications/common/index.js.map +1 -0
- package/dist/base/applications/{types.d.ts → common/types.d.ts} +11 -0
- package/dist/base/applications/common/types.d.ts.map +1 -0
- package/dist/base/applications/common/types.js.map +1 -0
- package/dist/base/applications/index.d.ts +2 -1
- package/dist/base/applications/index.d.ts.map +1 -1
- package/dist/base/applications/index.js +2 -1
- package/dist/base/applications/index.js.map +1 -1
- package/dist/base/applications/server.d.ts +6 -2
- package/dist/base/applications/server.d.ts.map +1 -1
- package/dist/base/applications/server.js +34 -2
- package/dist/base/applications/server.js.map +1 -1
- package/dist/base/controllers/grpc/adapter.js +2 -2
- package/dist/base/controllers/grpc/adapter.js.map +1 -1
- package/dist/base/middlewares/app-error/app-error.middleware.d.ts +3 -2
- package/dist/base/middlewares/app-error/app-error.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/app-error/app-error.middleware.js +4 -3
- package/dist/base/middlewares/app-error/app-error.middleware.js.map +1 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts +2 -2
- package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.js +20 -6
- package/dist/base/middlewares/request-spy/request-spy.middleware.js.map +1 -1
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/common/constants.js +2 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/environments.d.ts +31 -10
- package/dist/common/environments.d.ts.map +1 -1
- package/dist/common/environments.js +33 -10
- package/dist/common/environments.js.map +1 -1
- package/dist/components/api-reference/component.d.ts.map +1 -1
- package/dist/components/api-reference/component.js +4 -3
- package/dist/components/api-reference/component.js.map +1 -1
- package/dist/components/api-reference/index.d.ts +1 -1
- package/dist/components/api-reference/index.d.ts.map +1 -1
- package/dist/components/api-reference/index.js +1 -1
- package/dist/components/api-reference/index.js.map +1 -1
- package/dist/components/api-reference/ui/factory.d.ts +14 -0
- package/dist/components/api-reference/ui/factory.d.ts.map +1 -0
- package/dist/components/api-reference/ui/factory.js +54 -0
- package/dist/components/api-reference/ui/factory.js.map +1 -0
- package/dist/components/api-reference/ui/index.d.ts +4 -0
- package/dist/components/api-reference/ui/index.d.ts.map +1 -0
- package/dist/components/api-reference/ui/index.js +20 -0
- package/dist/components/api-reference/ui/index.js.map +1 -0
- package/dist/components/api-reference/ui/scalar.d.ts +8 -0
- package/dist/components/api-reference/ui/scalar.d.ts.map +1 -0
- package/dist/components/api-reference/ui/scalar.js +28 -0
- package/dist/components/api-reference/ui/scalar.js.map +1 -0
- package/dist/components/api-reference/ui/swagger.d.ts +8 -0
- package/dist/components/api-reference/ui/swagger.d.ts.map +1 -0
- package/dist/components/api-reference/ui/swagger.js +28 -0
- package/dist/components/api-reference/ui/swagger.js.map +1 -0
- package/dist/components/auth/authenticate/component.d.ts +5 -0
- package/dist/components/auth/authenticate/component.d.ts.map +1 -1
- package/dist/components/auth/authenticate/component.js +23 -0
- package/dist/components/auth/authenticate/component.js.map +1 -1
- package/dist/components/auth/authenticate/controllers/factory.d.ts +35 -3
- package/dist/components/auth/authenticate/controllers/factory.d.ts.map +1 -1
- package/dist/components/auth/authenticate/controllers/jwks/definitions.d.ts +40 -20
- package/dist/components/auth/authenticate/controllers/jwks/definitions.d.ts.map +1 -1
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts +40 -20
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts +2 -2
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js +12 -8
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.d.ts +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.js +5 -3
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jws.service.d.ts +1 -2
- package/dist/components/auth/authenticate/services/bearer/jws.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jws.service.js +5 -3
- package/dist/components/auth/authenticate/services/bearer/jws.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/jose-loader.d.ts +16 -0
- package/dist/components/auth/authenticate/services/jose-loader.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/jose-loader.js +25 -0
- package/dist/components/auth/authenticate/services/jose-loader.js.map +1 -0
- package/dist/components/auth/authenticate/services/service/signer.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/service/signer.service.js +8 -5
- package/dist/components/auth/authenticate/services/service/signer.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/service/verifier.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/service/verifier.service.js +10 -9
- package/dist/components/auth/authenticate/services/service/verifier.service.js.map +1 -1
- package/dist/components/auth/authenticate/strategies/index.d.ts +1 -1
- package/dist/components/auth/authenticate/strategies/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/strategies/index.js +1 -1
- package/dist/components/auth/authenticate/strategies/index.js.map +1 -1
- package/dist/components/auth/authenticate/strategies/jwks/index.d.ts +3 -0
- package/dist/components/auth/authenticate/strategies/jwks/index.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/jwks/index.js +19 -0
- package/dist/components/auth/authenticate/strategies/jwks/index.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/jwks/issuer.d.ts +13 -0
- package/dist/components/auth/authenticate/strategies/jwks/issuer.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/{jwks.strategy.js → jwks/issuer.js} +4 -27
- package/dist/components/auth/authenticate/strategies/jwks/issuer.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/{jwks.strategy.d.ts → jwks/verifier.d.ts} +2 -10
- package/dist/components/auth/authenticate/strategies/jwks/verifier.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/jwks/verifier.js +45 -0
- package/dist/components/auth/authenticate/strategies/jwks/verifier.js.map +1 -0
- package/dist/components/auth/authorize/adapters/base-filtered.d.ts +1 -1
- package/dist/components/auth/authorize/adapters/base-filtered.d.ts.map +1 -1
- package/dist/components/auth/authorize/adapters/common/index.d.ts +2 -0
- package/dist/components/auth/authorize/adapters/common/index.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/common/index.js +18 -0
- package/dist/components/auth/authorize/adapters/common/index.js.map +1 -0
- package/dist/components/auth/authorize/adapters/{types.d.ts → common/types.d.ts} +1 -1
- package/dist/components/auth/authorize/adapters/common/types.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/common/types.js.map +1 -0
- package/dist/components/auth/authorize/adapters/connector.d.ts +1 -1
- package/dist/components/auth/authorize/adapters/connector.d.ts.map +1 -1
- package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts +1 -1
- package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts.map +1 -1
- package/dist/components/auth/authorize/adapters/index.d.ts +2 -2
- package/dist/components/auth/authorize/adapters/index.d.ts.map +1 -1
- package/dist/components/auth/authorize/adapters/index.js +2 -2
- package/dist/components/auth/authorize/adapters/index.js.map +1 -1
- package/dist/components/auth/authorize/adapters/{scoped-casbin.adapter.d.ts → scoped-casbin/adapter.d.ts} +11 -55
- package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/{scoped-casbin.adapter.js → scoped-casbin/adapter.js} +27 -22
- package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.d.ts +2 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.js +5 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.d.ts +3 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.js +19 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.d.ts +50 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.js +3 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.d.ts +4 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.js +19 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.d.ts +17 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.js +11 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.js.map +1 -0
- package/dist/components/auth/authorize/enforcers/policy-line-codec.d.ts.map +1 -1
- package/dist/components/auth/authorize/enforcers/policy-line-codec.js +4 -2
- package/dist/components/auth/authorize/enforcers/policy-line-codec.js.map +1 -1
- package/dist/components/auth/authorize/role-managers/base.d.ts.map +1 -1
- package/dist/components/auth/authorize/role-managers/base.js +2 -1
- package/dist/components/auth/authorize/role-managers/base.js.map +1 -1
- package/dist/components/auth/models/entities/policy-definition.model.d.ts +30 -9
- package/dist/components/auth/models/entities/policy-definition.model.d.ts.map +1 -1
- package/dist/components/auth/models/entities/policy-definition.model.js +36 -10
- package/dist/components/auth/models/entities/policy-definition.model.js.map +1 -1
- package/dist/components/auth/models/entities/user.model.d.ts +2 -2
- package/dist/components/controller/grpc/grpc.component.d.ts.map +1 -1
- package/dist/components/controller/grpc/grpc.component.js +1 -5
- package/dist/components/controller/grpc/grpc.component.js.map +1 -1
- package/dist/components/health-check/common/constants.d.ts +5 -0
- package/dist/components/health-check/common/constants.d.ts.map +1 -0
- package/dist/components/health-check/common/constants.js +9 -0
- package/dist/components/health-check/common/constants.js.map +1 -0
- package/dist/components/health-check/common/index.d.ts +1 -0
- package/dist/components/health-check/common/index.d.ts.map +1 -1
- package/dist/components/health-check/common/index.js +1 -0
- package/dist/components/health-check/common/index.js.map +1 -1
- package/dist/components/health-check/common/keys.d.ts +2 -0
- package/dist/components/health-check/common/keys.d.ts.map +1 -1
- package/dist/components/health-check/common/keys.js +2 -0
- package/dist/components/health-check/common/keys.js.map +1 -1
- package/dist/components/health-check/common/rest-paths.d.ts +1 -0
- package/dist/components/health-check/common/rest-paths.d.ts.map +1 -1
- package/dist/components/health-check/common/rest-paths.js +1 -0
- package/dist/components/health-check/common/rest-paths.js.map +1 -1
- package/dist/components/health-check/common/types.d.ts +22 -0
- package/dist/components/health-check/common/types.d.ts.map +1 -1
- package/dist/components/health-check/component.d.ts +9 -3
- package/dist/components/health-check/component.d.ts.map +1 -1
- package/dist/components/health-check/component.js +38 -1
- package/dist/components/health-check/component.js.map +1 -1
- package/dist/components/health-check/controller.d.ts +10 -2
- package/dist/components/health-check/controller.d.ts.map +1 -1
- package/dist/components/health-check/controller.js +79 -13
- package/dist/components/health-check/controller.js.map +1 -1
- package/dist/components/health-check/index.d.ts +1 -0
- package/dist/components/health-check/index.d.ts.map +1 -1
- package/dist/components/health-check/index.js +1 -0
- package/dist/components/health-check/index.js.map +1 -1
- package/dist/components/health-check/reporter.d.ts +98 -0
- package/dist/components/health-check/reporter.d.ts.map +1 -0
- package/dist/components/health-check/reporter.js +138 -0
- package/dist/components/health-check/reporter.js.map +1 -0
- package/dist/components/mail/common/constants.d.ts +13 -0
- package/dist/components/mail/common/constants.d.ts.map +1 -1
- package/dist/components/mail/common/constants.js +20 -1
- package/dist/components/mail/common/constants.js.map +1 -1
- package/dist/components/mail/common/errors.d.ts +25 -0
- package/dist/components/mail/common/errors.d.ts.map +1 -1
- package/dist/components/mail/common/errors.js +22 -0
- package/dist/components/mail/common/errors.js.map +1 -1
- package/dist/components/mail/common/types/index.d.ts +6 -0
- package/dist/components/mail/common/types/index.d.ts.map +1 -0
- package/dist/components/mail/common/types/index.js +22 -0
- package/dist/components/mail/common/types/index.js.map +1 -0
- package/dist/components/mail/common/types/message.d.ts +50 -0
- package/dist/components/mail/common/types/message.d.ts.map +1 -0
- package/dist/components/mail/common/types/message.js +3 -0
- package/dist/components/mail/common/types/message.js.map +1 -0
- package/dist/components/mail/common/types/options.d.ts +72 -0
- package/dist/components/mail/common/types/options.d.ts.map +1 -0
- package/dist/components/mail/common/types/options.js +3 -0
- package/dist/components/mail/common/types/options.js.map +1 -0
- package/dist/components/mail/common/types/queue.d.ts +56 -0
- package/dist/components/mail/common/types/queue.d.ts.map +1 -0
- package/dist/components/mail/common/types/queue.js +3 -0
- package/dist/components/mail/common/types/queue.js.map +1 -0
- package/dist/components/mail/common/types/template.d.ts +33 -0
- package/dist/components/mail/common/types/template.d.ts.map +1 -0
- package/dist/components/mail/common/types/template.js +3 -0
- package/dist/components/mail/common/types/template.js.map +1 -0
- package/dist/components/mail/common/types/verification.d.ts +26 -0
- package/dist/components/mail/common/types/verification.d.ts.map +1 -0
- package/dist/components/mail/common/types/verification.js +3 -0
- package/dist/components/mail/common/types/verification.js.map +1 -0
- package/dist/components/mail/component.d.ts +6 -1
- package/dist/components/mail/component.d.ts.map +1 -1
- package/dist/components/mail/component.js +68 -16
- package/dist/components/mail/component.js.map +1 -1
- package/dist/components/mail/helpers/executors/bull-mq-executor.helper.d.ts +1 -0
- package/dist/components/mail/helpers/executors/bull-mq-executor.helper.d.ts.map +1 -1
- package/dist/components/mail/helpers/executors/bull-mq-executor.helper.js +3 -0
- package/dist/components/mail/helpers/executors/bull-mq-executor.helper.js.map +1 -1
- package/dist/components/mail/helpers/executors/internal-queue-executor.helper.d.ts.map +1 -1
- package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js +2 -1
- package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js.map +1 -1
- package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.d.ts +19 -0
- package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.d.ts.map +1 -0
- package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.js +114 -0
- package/dist/components/mail/helpers/transporters/amazon-ses-transporter.helper.js.map +1 -0
- package/dist/components/mail/helpers/transporters/index.d.ts +2 -1
- package/dist/components/mail/helpers/transporters/index.d.ts.map +1 -1
- package/dist/components/mail/helpers/transporters/index.js +2 -1
- package/dist/components/mail/helpers/transporters/index.js.map +1 -1
- package/dist/components/mail/helpers/transporters/mailgun-transporter.helper.d.ts.map +1 -1
- package/dist/components/mail/helpers/transporters/mailgun-transporter.helper.js +10 -9
- package/dist/components/mail/helpers/transporters/mailgun-transporter.helper.js.map +1 -1
- package/dist/components/mail/helpers/transporters/nodemail-transporter.helper.d.ts.map +1 -1
- package/dist/components/mail/helpers/transporters/nodemail-transporter.helper.js +12 -1
- package/dist/components/mail/helpers/transporters/nodemail-transporter.helper.js.map +1 -1
- package/dist/components/mail/providers/mail-transporter.provider.d.ts +2 -0
- package/dist/components/mail/providers/mail-transporter.provider.d.ts.map +1 -1
- package/dist/components/mail/providers/mail-transporter.provider.js +35 -17
- package/dist/components/mail/providers/mail-transporter.provider.js.map +1 -1
- package/dist/components/mail/services/generators/index.d.ts +4 -0
- package/dist/components/mail/services/generators/index.d.ts.map +1 -0
- package/dist/components/mail/services/generators/index.js +20 -0
- package/dist/components/mail/services/generators/index.js.map +1 -0
- package/dist/components/mail/services/generators/numeric-code.d.ts +7 -0
- package/dist/components/mail/services/generators/numeric-code.d.ts.map +1 -0
- package/dist/components/mail/services/generators/numeric-code.js +20 -0
- package/dist/components/mail/services/generators/numeric-code.js.map +1 -0
- package/dist/components/mail/services/generators/random-token.d.ts +7 -0
- package/dist/components/mail/services/generators/random-token.d.ts.map +1 -0
- package/dist/components/mail/services/generators/random-token.js +18 -0
- package/dist/components/mail/services/generators/random-token.js.map +1 -0
- package/dist/components/mail/services/{generator.service.d.ts → generators/verification-data.d.ts} +2 -10
- package/dist/components/mail/services/generators/verification-data.d.ts.map +1 -0
- package/dist/components/mail/services/{generator.service.js → generators/verification-data.js} +5 -29
- package/dist/components/mail/services/generators/verification-data.js.map +1 -0
- package/dist/components/mail/services/index.d.ts +1 -1
- package/dist/components/mail/services/index.d.ts.map +1 -1
- package/dist/components/mail/services/index.js +1 -1
- package/dist/components/mail/services/index.js.map +1 -1
- package/dist/components/mail/services/mail.service.d.ts.map +1 -1
- package/dist/components/mail/services/mail.service.js +37 -20
- package/dist/components/mail/services/mail.service.js.map +1 -1
- package/dist/components/mail/utilities/address.utility.d.ts +9 -0
- package/dist/components/mail/utilities/address.utility.d.ts.map +1 -0
- package/dist/components/mail/utilities/address.utility.js +36 -0
- package/dist/components/mail/utilities/address.utility.js.map +1 -0
- package/dist/components/mail/utilities/attachment.utility.d.ts +31 -0
- package/dist/components/mail/utilities/attachment.utility.d.ts.map +1 -0
- package/dist/components/mail/utilities/attachment.utility.js +214 -0
- package/dist/components/mail/utilities/attachment.utility.js.map +1 -0
- package/dist/components/mail/utilities/body.utility.d.ts +6 -0
- package/dist/components/mail/utilities/body.utility.d.ts.map +1 -0
- package/dist/components/mail/utilities/body.utility.js +20 -0
- package/dist/components/mail/utilities/body.utility.js.map +1 -0
- package/dist/components/mail/utilities/index.d.ts +2 -0
- package/dist/components/mail/utilities/index.d.ts.map +1 -1
- package/dist/components/mail/utilities/index.js +2 -0
- package/dist/components/mail/utilities/index.js.map +1 -1
- package/dist/components/mail/utilities/mime.utility.d.ts +19 -0
- package/dist/components/mail/utilities/mime.utility.d.ts.map +1 -0
- package/dist/components/mail/utilities/mime.utility.js +390 -0
- package/dist/components/mail/utilities/mime.utility.js.map +1 -0
- package/dist/components/static-asset/common/commit-token.d.ts +23 -0
- package/dist/components/static-asset/common/commit-token.d.ts.map +1 -0
- package/dist/components/static-asset/common/commit-token.js +40 -0
- package/dist/components/static-asset/common/commit-token.js.map +1 -0
- package/dist/components/static-asset/common/constants.d.ts +21 -1
- package/dist/components/static-asset/common/constants.d.ts.map +1 -1
- package/dist/components/static-asset/common/constants.js +39 -2
- package/dist/components/static-asset/common/constants.js.map +1 -1
- package/dist/components/static-asset/common/errors.d.ts +52 -0
- package/dist/components/static-asset/common/errors.d.ts.map +1 -1
- package/dist/components/static-asset/common/errors.js +46 -0
- package/dist/components/static-asset/common/errors.js.map +1 -1
- package/dist/components/static-asset/common/index.d.ts +1 -0
- package/dist/components/static-asset/common/index.d.ts.map +1 -1
- package/dist/components/static-asset/common/index.js +1 -0
- package/dist/components/static-asset/common/index.js.map +1 -1
- package/dist/components/static-asset/common/keys.d.ts +1 -0
- package/dist/components/static-asset/common/keys.d.ts.map +1 -1
- package/dist/components/static-asset/common/keys.js +1 -0
- package/dist/components/static-asset/common/keys.js.map +1 -1
- package/dist/components/static-asset/common/types.d.ts +100 -30
- package/dist/components/static-asset/common/types.d.ts.map +1 -1
- package/dist/components/static-asset/component.d.ts +4 -1
- package/dist/components/static-asset/component.d.ts.map +1 -1
- package/dist/components/static-asset/component.js +21 -10
- package/dist/components/static-asset/component.js.map +1 -1
- package/dist/components/static-asset/controller/base.definition.d.ts +27 -554
- package/dist/components/static-asset/controller/base.definition.d.ts.map +1 -1
- package/dist/components/static-asset/controller/base.definition.js +259 -286
- package/dist/components/static-asset/controller/base.definition.js.map +1 -1
- package/dist/components/static-asset/controller/factory.d.ts +76 -7
- package/dist/components/static-asset/controller/factory.d.ts.map +1 -1
- package/dist/components/static-asset/controller/factory.js +810 -328
- package/dist/components/static-asset/controller/factory.js.map +1 -1
- package/dist/components/static-asset/controller/key-scope.d.ts +28 -0
- package/dist/components/static-asset/controller/key-scope.d.ts.map +1 -0
- package/dist/components/static-asset/controller/key-scope.js +44 -0
- package/dist/components/static-asset/controller/key-scope.js.map +1 -0
- package/dist/components/static-asset/controller/meta-link.d.ts +37 -0
- package/dist/components/static-asset/controller/meta-link.d.ts.map +1 -0
- package/dist/components/static-asset/controller/meta-link.js +95 -0
- package/dist/components/static-asset/controller/meta-link.js.map +1 -0
- package/dist/components/static-asset/controller/route-options.d.ts +18 -0
- package/dist/components/static-asset/controller/route-options.d.ts.map +1 -0
- package/dist/components/static-asset/controller/route-options.js +37 -0
- package/dist/components/static-asset/controller/route-options.js.map +1 -0
- package/dist/components/static-asset/index.d.ts +1 -0
- package/dist/components/static-asset/index.d.ts.map +1 -1
- package/dist/components/static-asset/index.js +1 -0
- package/dist/components/static-asset/index.js.map +1 -1
- package/dist/components/static-asset/ingest.d.ts +58 -0
- package/dist/components/static-asset/ingest.d.ts.map +1 -0
- package/dist/components/static-asset/ingest.js +82 -0
- package/dist/components/static-asset/ingest.js.map +1 -0
- package/dist/components/static-asset/models/base.model.d.ts +44 -6
- package/dist/components/static-asset/models/base.model.d.ts.map +1 -1
- package/dist/components/static-asset/models/base.model.js +7 -1
- package/dist/components/static-asset/models/base.model.js.map +1 -1
- package/dist/components/websocket/handlers/bun.handler.d.ts.map +1 -1
- package/dist/components/websocket/handlers/bun.handler.js +2 -1
- package/dist/components/websocket/handlers/bun.handler.js.map +1 -1
- package/dist/connectors/postgres/drivers/postgres-js.d.mts +3 -0
- package/dist/connectors/postgres/drivers/postgres-js.d.mts.map +1 -0
- package/dist/connectors/postgres/drivers/postgres-js.mjs +3 -0
- package/dist/connectors/postgres/drivers/postgres-js.mjs.map +1 -0
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +19 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +33 -26
- package/dist/base/applications/types.d.ts.map +0 -1
- package/dist/base/applications/types.js.map +0 -1
- package/dist/components/api-reference/ui-factory.d.ts +0 -24
- package/dist/components/api-reference/ui-factory.d.ts.map +0 -1
- package/dist/components/api-reference/ui-factory.js +0 -97
- package/dist/components/api-reference/ui-factory.js.map +0 -1
- package/dist/components/auth/authenticate/strategies/jwks.strategy.d.ts.map +0 -1
- package/dist/components/auth/authenticate/strategies/jwks.strategy.js.map +0 -1
- package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts.map +0 -1
- package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js.map +0 -1
- package/dist/components/auth/authorize/adapters/types.d.ts.map +0 -1
- package/dist/components/auth/authorize/adapters/types.js.map +0 -1
- package/dist/components/mail/common/types.d.ts +0 -201
- package/dist/components/mail/common/types.d.ts.map +0 -1
- package/dist/components/mail/common/types.js +0 -10
- package/dist/components/mail/common/types.js.map +0 -1
- package/dist/components/mail/services/generator.service.d.ts.map +0 -1
- package/dist/components/mail/services/generator.service.js.map +0 -1
- /package/dist/base/applications/{types.js → common/types.js} +0 -0
- /package/dist/components/auth/authorize/adapters/{types.js → common/types.js} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RandomTokenGenerator = void 0;
|
|
7
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
8
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
9
|
+
class RandomTokenGenerator extends core_1.BaseHelper {
|
|
10
|
+
constructor() {
|
|
11
|
+
super({ scope: RandomTokenGenerator.name });
|
|
12
|
+
}
|
|
13
|
+
generateToken(bytes) {
|
|
14
|
+
return node_crypto_1.default.randomBytes(bytes).toString('base64url');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.RandomTokenGenerator = RandomTokenGenerator;
|
|
18
|
+
//# sourceMappingURL=random-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-token.js","sourceRoot":"","sources":["../../../../../src/components/mail/services/generators/random-token.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyD;AACzD,8DAAiC;AAGjC,MAAa,oBAAqB,SAAQ,iBAAU;IAClD;QACE,KAAK,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,qBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC;CACF;AARD,oDAQC"}
|
package/dist/components/mail/services/{generator.service.d.ts → generators/verification-data.d.ts}
RENAMED
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import { BaseHelper } from '@venizia/ignis-helpers/core';
|
|
2
|
-
import type { IVerificationCodeGenerator, IVerificationData, IVerificationDataGenerator, IVerificationGenerationOptions, IVerificationTokenGenerator } from '
|
|
3
|
-
export declare class NumericCodeGenerator extends BaseHelper implements IVerificationCodeGenerator {
|
|
4
|
-
constructor();
|
|
5
|
-
generateCode(length: number): string;
|
|
6
|
-
}
|
|
7
|
-
export declare class RandomTokenGenerator extends BaseHelper implements IVerificationTokenGenerator {
|
|
8
|
-
constructor();
|
|
9
|
-
generateToken(bytes: number): string;
|
|
10
|
-
}
|
|
2
|
+
import type { IVerificationCodeGenerator, IVerificationData, IVerificationDataGenerator, IVerificationGenerationOptions, IVerificationTokenGenerator } from '../../common';
|
|
11
3
|
export declare class DefaultVerificationDataGenerator extends BaseHelper implements IVerificationDataGenerator {
|
|
12
4
|
private codeGenerator;
|
|
13
5
|
private tokenGenerator;
|
|
14
6
|
constructor(codeGenerator: IVerificationCodeGenerator, tokenGenerator: IVerificationTokenGenerator);
|
|
15
7
|
generateVerificationData(options: IVerificationGenerationOptions): IVerificationData;
|
|
16
8
|
}
|
|
17
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=verification-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-data.d.ts","sourceRoot":"","sources":["../../../../../src/components/mail/services/generators/verification-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,0BAA0B,EAC1B,8BAA8B,EAC9B,2BAA2B,EAC5B,MAAM,cAAc,CAAC;AAItB,qBAAa,gCACX,SAAQ,UACR,YAAW,0BAA0B;IAInC,OAAO,CAAC,aAAa;IAGrB,OAAO,CAAC,cAAc;gBAHd,aAAa,EAAE,0BAA0B,EAGzC,cAAc,EAAE,2BAA2B;IAKrD,wBAAwB,CAAC,OAAO,EAAE,8BAA8B,GAAG,iBAAiB;CAkBrF"}
|
package/dist/components/mail/services/{generator.service.js → generators/verification-data.js}
RENAMED
|
@@ -11,37 +11,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
-
};
|
|
17
14
|
var DefaultVerificationDataGenerator_1;
|
|
18
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.DefaultVerificationDataGenerator =
|
|
20
|
-
const metadata_1 = require("
|
|
16
|
+
exports.DefaultVerificationDataGenerator = void 0;
|
|
17
|
+
const metadata_1 = require("../../../../base/metadata");
|
|
21
18
|
const core_1 = require("@venizia/ignis-helpers/core");
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const utilities_1 = require("../utilities");
|
|
25
|
-
class NumericCodeGenerator extends core_1.BaseHelper {
|
|
26
|
-
constructor() {
|
|
27
|
-
super({ scope: NumericCodeGenerator.name });
|
|
28
|
-
}
|
|
29
|
-
generateCode(length) {
|
|
30
|
-
const max = Math.pow(10, length);
|
|
31
|
-
const code = node_crypto_1.default.randomInt(0, max);
|
|
32
|
-
return code.toString().padStart(length, '0');
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.NumericCodeGenerator = NumericCodeGenerator;
|
|
36
|
-
class RandomTokenGenerator extends core_1.BaseHelper {
|
|
37
|
-
constructor() {
|
|
38
|
-
super({ scope: RandomTokenGenerator.name });
|
|
39
|
-
}
|
|
40
|
-
generateToken(bytes) {
|
|
41
|
-
return node_crypto_1.default.randomBytes(bytes).toString('base64url');
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
exports.RandomTokenGenerator = RandomTokenGenerator;
|
|
19
|
+
const common_1 = require("../../common");
|
|
20
|
+
const utilities_1 = require("../../utilities");
|
|
45
21
|
let DefaultVerificationDataGenerator = DefaultVerificationDataGenerator_1 = class DefaultVerificationDataGenerator extends core_1.BaseHelper {
|
|
46
22
|
constructor(codeGenerator, tokenGenerator) {
|
|
47
23
|
super({ scope: DefaultVerificationDataGenerator_1.name });
|
|
@@ -70,4 +46,4 @@ exports.DefaultVerificationDataGenerator = DefaultVerificationDataGenerator = De
|
|
|
70
46
|
__param(1, (0, metadata_1.inject)({ key: common_1.MailKeys.MAIL_VERIFICATION_TOKEN_GENERATOR })),
|
|
71
47
|
__metadata("design:paramtypes", [Object, Object])
|
|
72
48
|
], DefaultVerificationDataGenerator);
|
|
73
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=verification-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-data.js","sourceRoot":"","sources":["../../../../../src/components/mail/services/generators/verification-data.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAyC;AACzC,sDAAyD;AASzD,yCAAwC;AACxC,+CAAsE;AAEtE,IAAa,gCAAgC,wCAA7C,MAAa,gCACX,SAAQ,iBAAU;IAGlB,YAEU,aAAyC,EAGzC,cAA2C;QAEnD,KAAK,CAAC,EAAE,KAAK,EAAE,kCAAgC,CAAC,IAAI,EAAE,CAAC,CAAC;QALhD,kBAAa,GAAb,aAAa,CAA4B;QAGzC,mBAAc,GAAd,cAAc,CAA6B;IAGrD,CAAC;IAED,wBAAwB,CAAC,OAAuC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,eAAe,EAAE,GAAG;YACpB,aAAa,EAAE,IAAA,yBAAa,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE;YACrE,YAAY,EAAE,CAAC;YAEf,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,GAAG;YACrB,cAAc,EAAE,IAAA,gCAAoB,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE;YAE5E,cAAc,EAAE,GAAG;SACpB,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,4EAAgC;2CAAhC,gCAAgC;IAKxC,WAAA,IAAA,iBAAM,EAAC,EAAE,GAAG,EAAE,iBAAQ,CAAC,gCAAgC,EAAE,CAAC,CAAA;IAG1D,WAAA,IAAA,iBAAM,EAAC,EAAE,GAAG,EAAE,iBAAQ,CAAC,iCAAiC,EAAE,CAAC,CAAA;;GARnD,gCAAgC,CAgC5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/mail/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/mail/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
|
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./generators"), exports);
|
|
18
18
|
__exportStar(require("./mail.service"), exports);
|
|
19
19
|
__exportStar(require("./template.service"), exports);
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/mail/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/mail/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,iDAA+B;AAC/B,qDAAmC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../../../../src/components/mail/services/mail.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../../../../src/components/mail/services/mail.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,YAAY,EACb,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAKxD,qBAAa,WAAY,SAAQ,WAAY,YAAW,YAAY;IAGhE,SAAS,CAAC,OAAO,EAAE,YAAY;IAE/B,SAAS,CAAC,SAAS,EAAE,cAAc;IAEnC,SAAS,CAAC,cAAc,CAAC,EAAE,mBAAmB;gBAJpC,OAAO,EAAE,YAAY,EAErB,SAAS,EAAE,cAAc,EAEzB,cAAc,CAAC,EAAE,mBAAmB,YAAA;IAQ1C,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAiDrD,SAAS,CACb,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC,eAAe,EAAE,CAAC;IA4CvB,YAAY,CAAC,IAAI,EAAE;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;KACjC,GAAG,OAAO,CAAC,eAAe,CAAC;IA2CtB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAiBhC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAyBtD,SAAS,CAAC,cAAc,IAAI,MAAM;CAcnC"}
|
|
@@ -14,11 +14,14 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
var MailService_1;
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.MailService = void 0;
|
|
17
|
+
const common_1 = require("@venizia/ignis-helpers/common");
|
|
17
18
|
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
18
|
-
const
|
|
19
|
+
const common_2 = require("../common");
|
|
19
20
|
const metadata_1 = require("../../../base/metadata");
|
|
20
21
|
const core_1 = require("@venizia/ignis-helpers/core");
|
|
21
22
|
const ignis_helpers_1 = require("@venizia/ignis-helpers");
|
|
23
|
+
const attachment_utility_1 = require("../utilities/attachment.utility");
|
|
24
|
+
const body_utility_1 = require("../utilities/body.utility");
|
|
22
25
|
let MailService = MailService_1 = class MailService extends ignis_kernel_1.BaseService {
|
|
23
26
|
constructor(options, transport, templateEngine) {
|
|
24
27
|
super({ scope: MailService_1.name });
|
|
@@ -36,6 +39,14 @@ let MailService = MailService_1 = class MailService extends ignis_kernel_1.BaseS
|
|
|
36
39
|
...message,
|
|
37
40
|
from: message.from ?? this.getDefaultFrom(),
|
|
38
41
|
};
|
|
42
|
+
// The one place the attachment policy applies: every transport receives bytes, never a path.
|
|
43
|
+
if (message.attachments) {
|
|
44
|
+
emailMessage.attachments = await (0, attachment_utility_1.resolveMailAttachments)({
|
|
45
|
+
attachments: message.attachments,
|
|
46
|
+
attachmentRoot: this.options.attachmentRoot,
|
|
47
|
+
maxBytes: this.options.maxAttachmentBytes ?? common_2.MailDefaults.MAX_ATTACHMENT_BYTES,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
39
50
|
this.logger.for(this.send.name).debug('Sending email to: %s', emailMessage.to);
|
|
40
51
|
const result = await this.transport.send(emailMessage);
|
|
41
52
|
if (result.success) {
|
|
@@ -50,20 +61,23 @@ let MailService = MailService_1 = class MailService extends ignis_kernel_1.BaseS
|
|
|
50
61
|
}
|
|
51
62
|
catch (error) {
|
|
52
63
|
this.logger.for(this.send.name).error('Error sending email: %s', error);
|
|
64
|
+
(0, attachment_utility_1.releaseAttachmentStreams)({ attachments: message.attachments });
|
|
53
65
|
// An error the framework already shaped carries its own status and message code; re-wrapping as 500 would report a caller mistake as a server fault.
|
|
54
66
|
if ((0, core_1.isApplicationError)(error)) {
|
|
55
67
|
throw error;
|
|
56
68
|
}
|
|
57
69
|
throw (0, core_1.getError)({
|
|
58
|
-
statusCode:
|
|
59
|
-
messageCode:
|
|
60
|
-
|
|
70
|
+
statusCode: common_1.HTTP.ResultCodes.RS_5.InternalServerError,
|
|
71
|
+
messageCode: common_2.MailErrorCodes.SEND_FAILED,
|
|
72
|
+
// The raw text can carry a file path or a provider detail; it rides in `cause`, which only development responses show.
|
|
73
|
+
message: 'Failed to send email',
|
|
74
|
+
cause: error,
|
|
61
75
|
});
|
|
62
76
|
}
|
|
63
77
|
}
|
|
64
78
|
async sendBatch(messages, options) {
|
|
65
79
|
try {
|
|
66
|
-
const concurrency = options?.concurrency ??
|
|
80
|
+
const concurrency = options?.concurrency ?? common_2.MailDefaults.BATCH_CONCURRENCY;
|
|
67
81
|
this.logger
|
|
68
82
|
.for(this.sendBatch.name)
|
|
69
83
|
.info('Sending batch of %d emails with concurrency: %d', messages.length, concurrency);
|
|
@@ -91,9 +105,10 @@ let MailService = MailService_1 = class MailService extends ignis_kernel_1.BaseS
|
|
|
91
105
|
catch (error) {
|
|
92
106
|
this.logger.for(this.sendBatch.name).error('Error sending batch emails: %s', error);
|
|
93
107
|
throw (0, core_1.getError)({
|
|
94
|
-
statusCode:
|
|
95
|
-
messageCode:
|
|
96
|
-
message:
|
|
108
|
+
statusCode: common_1.HTTP.ResultCodes.RS_5.InternalServerError,
|
|
109
|
+
messageCode: common_2.MailErrorCodes.BATCH_SEND_FAILED,
|
|
110
|
+
message: 'Failed to send batch emails',
|
|
111
|
+
cause: error,
|
|
97
112
|
});
|
|
98
113
|
}
|
|
99
114
|
}
|
|
@@ -102,8 +117,8 @@ let MailService = MailService_1 = class MailService extends ignis_kernel_1.BaseS
|
|
|
102
117
|
try {
|
|
103
118
|
if (!this.templateEngine) {
|
|
104
119
|
throw (0, core_1.getError)({
|
|
105
|
-
statusCode:
|
|
106
|
-
messageCode:
|
|
120
|
+
statusCode: common_1.HTTP.ResultCodes.RS_5.InternalServerError,
|
|
121
|
+
messageCode: common_2.MailErrorCodes.INVALID_CONFIGURATION,
|
|
107
122
|
message: 'Template engine not configured',
|
|
108
123
|
});
|
|
109
124
|
}
|
|
@@ -144,37 +159,39 @@ let MailService = MailService_1 = class MailService extends ignis_kernel_1.BaseS
|
|
|
144
159
|
catch (error) {
|
|
145
160
|
this.logger.for(this.verify.name).error('Verification failed: %s', error);
|
|
146
161
|
throw (0, core_1.getError)({
|
|
147
|
-
statusCode:
|
|
148
|
-
messageCode:
|
|
149
|
-
message:
|
|
162
|
+
statusCode: common_1.HTTP.ResultCodes.RS_5.InternalServerError,
|
|
163
|
+
messageCode: common_2.MailErrorCodes.VERIFICATION_FAILED,
|
|
164
|
+
message: 'Mail transport verification failed',
|
|
165
|
+
cause: error,
|
|
150
166
|
});
|
|
151
167
|
}
|
|
152
168
|
}
|
|
153
169
|
validateMessage(message) {
|
|
154
170
|
if (!message.to || (Array.isArray(message.to) && message.to.length === 0)) {
|
|
155
171
|
throw (0, core_1.getError)({
|
|
156
|
-
error:
|
|
172
|
+
error: common_2.MailErrors.INVALID_RECIPIENT,
|
|
157
173
|
message: 'Recipient email address is required',
|
|
158
174
|
});
|
|
159
175
|
}
|
|
160
176
|
if (!message.subject) {
|
|
161
177
|
throw (0, core_1.getError)({
|
|
162
|
-
error:
|
|
178
|
+
error: common_2.MailErrors.INVALID_CONFIGURATION,
|
|
163
179
|
message: 'Email subject is required',
|
|
164
180
|
});
|
|
165
181
|
}
|
|
166
182
|
if (!message.text && !message.html) {
|
|
167
183
|
throw (0, core_1.getError)({
|
|
168
|
-
error:
|
|
184
|
+
error: common_2.MailErrors.INVALID_CONFIGURATION,
|
|
169
185
|
message: 'Email must have either text or html content',
|
|
170
186
|
});
|
|
171
187
|
}
|
|
188
|
+
(0, body_utility_1.assertMailBodyIsText)({ message });
|
|
172
189
|
}
|
|
173
190
|
getDefaultFrom() {
|
|
174
191
|
const { from, fromName } = this.options;
|
|
175
192
|
// A display name is only renderable around an address: `"Name" <undefined>` is not a sender.
|
|
176
193
|
if (!from) {
|
|
177
|
-
return
|
|
194
|
+
return common_2.MailDefaults.FALLBACK_FROM;
|
|
178
195
|
}
|
|
179
196
|
if (!fromName) {
|
|
180
197
|
return from;
|
|
@@ -184,9 +201,9 @@ let MailService = MailService_1 = class MailService extends ignis_kernel_1.BaseS
|
|
|
184
201
|
};
|
|
185
202
|
exports.MailService = MailService;
|
|
186
203
|
exports.MailService = MailService = MailService_1 = __decorate([
|
|
187
|
-
__param(0, (0, metadata_1.inject)({ key:
|
|
188
|
-
__param(1, (0, metadata_1.inject)({ key:
|
|
189
|
-
__param(2, (0, metadata_1.inject)({ key:
|
|
204
|
+
__param(0, (0, metadata_1.inject)({ key: common_2.MailKeys.MAIL_OPTIONS })),
|
|
205
|
+
__param(1, (0, metadata_1.inject)({ key: common_2.MailKeys.MAIL_TRANSPORT_INSTANCE })),
|
|
206
|
+
__param(2, (0, metadata_1.inject)({ key: common_2.MailKeys.MAIL_TEMPLATE_ENGINE, isOptional: true })),
|
|
190
207
|
__metadata("design:paramtypes", [Object, Object, Object])
|
|
191
208
|
], MailService);
|
|
192
209
|
//# sourceMappingURL=mail.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../../../../src/components/mail/services/mail.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAoD;AASpD,sCAA+E;AAC/E,8CAAyC;AACzC,sDAA2E;AAE3E,0DAAiE;AAEjE,IAAa,WAAW,mBAAxB,MAAa,WAAY,SAAQ,0BAAW;IAC1C,YAEY,OAAqB,EAErB,SAAyB,EAEzB,cAAoC;QAE9C,KAAK,CAAC,EAAE,KAAK,EAAE,aAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QANzB,YAAO,GAAP,OAAO,CAAc;QAErB,cAAS,GAAT,SAAS,CAAgB;QAEzB,mBAAc,GAAd,cAAc,CAAsB;QAG9C,IAAI,CAAC,MAAM;aACR,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aAC1B,IAAI,CAAC,4CAA4C,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAqB;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE9B,MAAM,YAAY,GAAiB;gBACjC,GAAG,OAAO;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;aAC5C,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,sBAAsB,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM;qBACR,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;qBACnB,KAAK,CAAC,wCAAwC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/E,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../../../../src/components/mail/services/mail.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAqD;AACrD,wDAAoD;AASpD,sCAA+E;AAC/E,8CAAyC;AACzC,sDAA2E;AAE3E,0DAAiE;AACjE,wEAAmG;AACnG,4DAAiE;AAEjE,IAAa,WAAW,mBAAxB,MAAa,WAAY,SAAQ,0BAAW;IAC1C,YAEY,OAAqB,EAErB,SAAyB,EAEzB,cAAoC;QAE9C,KAAK,CAAC,EAAE,KAAK,EAAE,aAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QANzB,YAAO,GAAP,OAAO,CAAc;QAErB,cAAS,GAAT,SAAS,CAAgB;QAEzB,mBAAc,GAAd,cAAc,CAAsB;QAG9C,IAAI,CAAC,MAAM;aACR,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aAC1B,IAAI,CAAC,4CAA4C,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAqB;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE9B,MAAM,YAAY,GAAiB;gBACjC,GAAG,OAAO;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;aAC5C,CAAC;YAEF,6FAA6F;YAC7F,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,YAAY,CAAC,WAAW,GAAG,MAAM,IAAA,2CAAsB,EAAC;oBACtD,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;oBAC3C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,qBAAY,CAAC,oBAAoB;iBAC/E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,sBAAsB,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM;qBACR,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;qBACnB,KAAK,CAAC,wCAAwC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/E,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YACxE,IAAA,6CAAwB,EAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAE/D,qJAAqJ;YACrJ,IAAI,IAAA,yBAAkB,EAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAA,eAAQ,EAAC;gBACb,UAAU,EAAE,aAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;gBACrD,WAAW,EAAE,uBAAc,CAAC,WAAW;gBACvC,uHAAuH;gBACvH,OAAO,EAAE,sBAAsB;gBAC/B,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CACb,QAAwB,EACxB,OAAkC;QAElC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,qBAAY,CAAC,iBAAiB,CAAC;YAC3E,IAAI,CAAC,MAAM;iBACR,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iBACxB,IAAI,CAAC,iDAAiD,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAEzF,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;gBAC/C,IAAI,CAAC;oBACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAChE,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,IAAA,uCAAuB,EAAkB;gBAC7D,KAAK;gBACL,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAC3D,IAAI,CAAC,MAAM;iBACR,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iBACxB,IAAI,CACH,+CAA+C,EAC/C,YAAY,EACZ,OAAO,CAAC,MAAM,GAAG,YAAY,CAC9B,CAAC;YAEJ,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACpF,MAAM,IAAA,eAAQ,EAAC;gBACb,UAAU,EAAE,aAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;gBACrD,WAAW,EAAE,uBAAc,CAAC,iBAAiB;gBAC7C,OAAO,EAAE,6BAA6B;gBACtC,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAKlB;QACC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEzD,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,MAAM,IAAA,eAAQ,EAAC;oBACb,UAAU,EAAE,aAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;oBACrD,WAAW,EAAE,uBAAc,CAAC,qBAAqB;oBACjD,OAAO,EAAE,gCAAgC;iBAC1C,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBACtC,YAAY;gBACZ,IAAI;gBACJ,eAAe,EAAE,OAAO,EAAE,eAAe;aAC1C,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAiB;gBAC5B,EAAE,EAAE,UAAU;gBACd,OAAO,EACL,OAAO,EAAE,OAAO;oBAChB,CAAC,YAAY,EAAE,OAAO,KAAK,SAAS;wBAClC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;4BACzB,YAAY,EAAE,YAAY,CAAC,OAAO;4BAClC,IAAI;4BACJ,eAAe,EAAE,OAAO,EAAE,eAAe;yBAC1C,CAAC;wBACJ,CAAC,CAAC,YAAY,CAAC;gBACnB,IAAI;gBACJ,GAAG,OAAO;aACX,CAAC;YAEF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAC/E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;YAC5E,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC1E,MAAM,IAAA,eAAQ,EAAC;gBACb,UAAU,EAAE,aAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;gBACrD,WAAW,EAAE,uBAAc,CAAC,mBAAmB;gBAC/C,OAAO,EAAE,oCAAoC;gBAC7C,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAES,eAAe,CAAC,OAAqB;QAC7C,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAA,eAAQ,EAAC;gBACb,KAAK,EAAE,mBAAU,CAAC,iBAAiB;gBACnC,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAA,eAAQ,EAAC;gBACb,KAAK,EAAE,mBAAU,CAAC,qBAAqB;gBACvC,OAAO,EAAE,2BAA2B;aACrC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAA,eAAQ,EAAC;gBACb,KAAK,EAAE,mBAAU,CAAC,qBAAqB;gBACvC,OAAO,EAAE,6CAA6C;aACvD,CAAC,CAAC;QACL,CAAC;QAED,IAAA,mCAAoB,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAES,cAAc;QACtB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAExC,6FAA6F;QAC7F,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,qBAAY,CAAC,aAAa,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,QAAQ,MAAM,IAAI,GAAG,CAAC;IACnC,CAAC;CACF,CAAA;AAvNY,kCAAW;sBAAX,WAAW;IAEnB,WAAA,IAAA,iBAAM,EAAC,EAAE,GAAG,EAAE,iBAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;IAEtC,WAAA,IAAA,iBAAM,EAAC,EAAE,GAAG,EAAE,iBAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAA;IAEjD,WAAA,IAAA,iBAAM,EAAC,EAAE,GAAG,EAAE,iBAAQ,CAAC,oBAAoB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;;GANxD,WAAW,CAuNvB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splits one or more RFC 5322 mailbox strings into individual addresses. A caller-supplied `to`
|
|
3
|
+
* is frequently a single comma-separated string (`"a@x.com, b@y.com"`), not an array - treating
|
|
4
|
+
* it as one opaque address turns it into a single malformed recipient. Splitting only at
|
|
5
|
+
* top-level commas (outside a quoted display name) keeps `"Doe, Jane" <jane@x.com>` intact while
|
|
6
|
+
* still separating `"Doe, Jane" <jane@x.com>, bob@y.com` into its two mailboxes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function splitAddressList(value: string | string[]): string[];
|
|
9
|
+
//# sourceMappingURL=address.utility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.utility.d.ts","sourceRoot":"","sources":["../../../../src/components/mail/utilities/address.utility.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CA8BnE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitAddressList = splitAddressList;
|
|
4
|
+
/**
|
|
5
|
+
* Splits one or more RFC 5322 mailbox strings into individual addresses. A caller-supplied `to`
|
|
6
|
+
* is frequently a single comma-separated string (`"a@x.com, b@y.com"`), not an array - treating
|
|
7
|
+
* it as one opaque address turns it into a single malformed recipient. Splitting only at
|
|
8
|
+
* top-level commas (outside a quoted display name) keeps `"Doe, Jane" <jane@x.com>` intact while
|
|
9
|
+
* still separating `"Doe, Jane" <jane@x.com>, bob@y.com` into its two mailboxes.
|
|
10
|
+
*/
|
|
11
|
+
function splitAddressList(value) {
|
|
12
|
+
const items = Array.isArray(value) ? value : [value];
|
|
13
|
+
const addresses = [];
|
|
14
|
+
for (const item of items) {
|
|
15
|
+
let current = '';
|
|
16
|
+
let inQuotes = false;
|
|
17
|
+
for (const char of item) {
|
|
18
|
+
if (char === '"') {
|
|
19
|
+
inQuotes = !inQuotes;
|
|
20
|
+
}
|
|
21
|
+
if (char === ',' && !inQuotes) {
|
|
22
|
+
if (current.trim()) {
|
|
23
|
+
addresses.push(current.trim());
|
|
24
|
+
}
|
|
25
|
+
current = '';
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
current += char;
|
|
29
|
+
}
|
|
30
|
+
if (current.trim()) {
|
|
31
|
+
addresses.push(current.trim());
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return addresses;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=address.utility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.utility.js","sourceRoot":"","sources":["../../../../src/components/mail/utilities/address.utility.ts"],"names":[],"mappings":";;AAOA,4CA8BC;AArCD;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,KAAwB;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACvB,CAAC;YAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type IMailAttachment } from '../common';
|
|
2
|
+
/**
|
|
3
|
+
* Reads one attachment's bytes. A string `content` is raw text unless `encoding` says otherwise
|
|
4
|
+
* (nodemailer's convention); `null` counts as absent. A `path` is read only inside
|
|
5
|
+
* `attachmentRoot` and refused without one. `maxBytes` caps the whole message; `usedBytes` is what
|
|
6
|
+
* earlier attachments already took.
|
|
7
|
+
*/
|
|
8
|
+
export declare const readAttachmentContent: (opts: {
|
|
9
|
+
attachment: IMailAttachment;
|
|
10
|
+
attachmentRoot?: string;
|
|
11
|
+
maxBytes?: number;
|
|
12
|
+
usedBytes?: number;
|
|
13
|
+
}) => Promise<Buffer>;
|
|
14
|
+
/**
|
|
15
|
+
* Turns every attachment into `content` bytes and drops `path`, so no transport is ever handed a
|
|
16
|
+
* file or URL to read on its own. `maxBytes` is shared by all attachments of the message. An
|
|
17
|
+
* attachment read from `path` keeps the file's name and, when none is given, its content type.
|
|
18
|
+
*/
|
|
19
|
+
export declare const resolveMailAttachments: (opts: {
|
|
20
|
+
attachments: IMailAttachment[];
|
|
21
|
+
attachmentRoot?: string;
|
|
22
|
+
maxBytes?: number;
|
|
23
|
+
}) => Promise<IMailAttachment[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Releases every attachment stream of a refused send, read or not, so none keeps a descriptor
|
|
26
|
+
* open. A drained stream is already closed; releasing it again is harmless.
|
|
27
|
+
*/
|
|
28
|
+
export declare const releaseAttachmentStreams: (opts: {
|
|
29
|
+
attachments?: IMailAttachment[];
|
|
30
|
+
}) => void;
|
|
31
|
+
//# sourceMappingURL=attachment.utility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment.utility.d.ts","sourceRoot":"","sources":["../../../../src/components/mail/utilities/attachment.utility.ts"],"names":[],"mappings":"AAMA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAyJ7D;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAU,MAAM;IAChD,UAAU,EAAE,eAAe,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KAAG,OAAO,CAAC,MAAM,CAgCjB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAU,MAAM;IACjD,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,KAAG,OAAO,CAAC,eAAe,EAAE,CAwC5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,MAAM;IAAE,WAAW,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,KAAG,IA0BpF,CAAC"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.releaseAttachmentStreams = exports.resolveMailAttachments = exports.readAttachmentContent = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const promises_1 = require("node:fs/promises");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const common_1 = require("@venizia/ignis-helpers/common");
|
|
8
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
9
|
+
const ignis_helpers_1 = require("@venizia/ignis-helpers");
|
|
10
|
+
const common_2 = require("../common");
|
|
11
|
+
const logger = ignis_helpers_1.LoggerFactory.getLogger(['MailAttachments']);
|
|
12
|
+
// O_NONBLOCK: opening a FIFO must not wait for a writer; the fstat check then refuses it.
|
|
13
|
+
// Windows has neither flag; there the realpath containment check stands alone.
|
|
14
|
+
const OPEN_FLAGS = node_fs_1.constants.O_RDONLY | (node_fs_1.constants.O_NOFOLLOW ?? 0) | (node_fs_1.constants.O_NONBLOCK ?? 0);
|
|
15
|
+
// One reason for missing, directory, unreadable and escaping paths: no existence oracle.
|
|
16
|
+
const PATH_OUTSIDE_REASON = 'attachment.path must name a readable file inside attachmentRoot | pass the bytes as content instead';
|
|
17
|
+
const buildPathRefusedError = (opts) => {
|
|
18
|
+
return (0, core_1.getError)({
|
|
19
|
+
error: common_2.MailErrors.ATTACHMENT_PATH_REFUSED,
|
|
20
|
+
message: `Mail attachment path refused | ${opts.reason}`,
|
|
21
|
+
cause: opts.cause,
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
const buildTooLargeError = (opts) => {
|
|
25
|
+
return (0, core_1.getError)({
|
|
26
|
+
error: common_2.MailErrors.ATTACHMENT_TOO_LARGE,
|
|
27
|
+
message: `Mail attachments are over maxAttachmentBytes (${opts.maxBytes} bytes per message) | raise maxAttachmentBytes on the mail options, or send smaller attachments`,
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
const assertWithinLimit = (opts) => {
|
|
31
|
+
const { byteLength, usedBytes, maxBytes } = opts;
|
|
32
|
+
if (maxBytes === undefined || usedBytes + byteLength <= maxBytes) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
throw buildTooLargeError({ maxBytes });
|
|
36
|
+
};
|
|
37
|
+
const isAttachmentStream = (value) => {
|
|
38
|
+
return typeof value === 'object' && value !== null && Symbol.asyncIterator in value;
|
|
39
|
+
};
|
|
40
|
+
const toBuffer = (chunk) => {
|
|
41
|
+
if (typeof chunk === 'string') {
|
|
42
|
+
return Buffer.from(chunk);
|
|
43
|
+
}
|
|
44
|
+
return Buffer.isBuffer(chunk)
|
|
45
|
+
? chunk
|
|
46
|
+
: Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
|
|
47
|
+
};
|
|
48
|
+
/** Throwing out of `for await` destroys a Node Readable and cancels a web ReadableStream. */
|
|
49
|
+
const drainStream = async (opts) => {
|
|
50
|
+
const { stream, usedBytes, maxBytes } = opts;
|
|
51
|
+
const chunks = [];
|
|
52
|
+
let streamBytes = 0;
|
|
53
|
+
for await (const chunk of stream) {
|
|
54
|
+
const buffer = toBuffer(chunk);
|
|
55
|
+
streamBytes += buffer.byteLength;
|
|
56
|
+
// Per chunk: a stream has no length up front, and the rest must never be buffered.
|
|
57
|
+
assertWithinLimit({ byteLength: streamBytes, usedBytes, maxBytes });
|
|
58
|
+
chunks.push(buffer);
|
|
59
|
+
}
|
|
60
|
+
return Buffer.concat(chunks, streamBytes);
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Both sides go through realpath, so neither `..` nor a symlink can leave the root. Not closed: a
|
|
64
|
+
* directory inside the root swapped for a symlink between this check and `open` - that takes write
|
|
65
|
+
* access inside the root, so keep the root writable only by what the application trusts.
|
|
66
|
+
*/
|
|
67
|
+
const resolveConfinedPath = async (opts) => {
|
|
68
|
+
const { path, attachmentRoot } = opts;
|
|
69
|
+
let rootPath;
|
|
70
|
+
let filePath;
|
|
71
|
+
// `resolve` throws synchronously on a non-string `path` from an untyped caller; it lands here too.
|
|
72
|
+
try {
|
|
73
|
+
[rootPath, filePath] = await Promise.all([
|
|
74
|
+
(0, promises_1.realpath)(attachmentRoot),
|
|
75
|
+
(0, promises_1.realpath)((0, node_path_1.resolve)(attachmentRoot, path)),
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw buildPathRefusedError({ reason: PATH_OUTSIDE_REASON, cause: error });
|
|
80
|
+
}
|
|
81
|
+
const relation = (0, node_path_1.relative)(rootPath, filePath);
|
|
82
|
+
const isOutside = relation === '' || relation === '..' || relation.startsWith(`..${node_path_1.sep}`) || (0, node_path_1.isAbsolute)(relation);
|
|
83
|
+
if (isOutside) {
|
|
84
|
+
throw buildPathRefusedError({ reason: PATH_OUTSIDE_REASON });
|
|
85
|
+
}
|
|
86
|
+
return filePath;
|
|
87
|
+
};
|
|
88
|
+
const readConfinedFile = async (opts) => {
|
|
89
|
+
const { path, usedBytes, attachmentRoot, maxBytes } = opts;
|
|
90
|
+
if (!attachmentRoot) {
|
|
91
|
+
throw buildPathRefusedError({
|
|
92
|
+
reason: 'attachment.path is read only under attachmentRoot, which is not set | set attachmentRoot on the mail options, or pass the bytes as content',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const filePath = await resolveConfinedPath({ path, attachmentRoot });
|
|
96
|
+
const handle = await (0, promises_1.open)(filePath, OPEN_FLAGS).catch(error => {
|
|
97
|
+
throw buildPathRefusedError({ reason: PATH_OUTSIDE_REASON, cause: error });
|
|
98
|
+
});
|
|
99
|
+
try {
|
|
100
|
+
const stats = await handle.stat();
|
|
101
|
+
if (!stats.isFile()) {
|
|
102
|
+
throw buildPathRefusedError({ reason: PATH_OUTSIDE_REASON });
|
|
103
|
+
}
|
|
104
|
+
// Sized before reading, so a file known to be oversized is never opened for reading.
|
|
105
|
+
assertWithinLimit({ byteLength: stats.size, usedBytes, maxBytes });
|
|
106
|
+
// Counted while read, and read no further than one byte past the budget: the file may have
|
|
107
|
+
// grown since fstat.
|
|
108
|
+
const stream = handle.createReadStream({
|
|
109
|
+
autoClose: false,
|
|
110
|
+
end: maxBytes === undefined ? Infinity : maxBytes - usedBytes,
|
|
111
|
+
});
|
|
112
|
+
return await drainStream({ stream, usedBytes, maxBytes });
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
await handle.close();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Reads one attachment's bytes. A string `content` is raw text unless `encoding` says otherwise
|
|
120
|
+
* (nodemailer's convention); `null` counts as absent. A `path` is read only inside
|
|
121
|
+
* `attachmentRoot` and refused without one. `maxBytes` caps the whole message; `usedBytes` is what
|
|
122
|
+
* earlier attachments already took.
|
|
123
|
+
*/
|
|
124
|
+
const readAttachmentContent = async (opts) => {
|
|
125
|
+
const { attachment, attachmentRoot, maxBytes, usedBytes = 0 } = opts;
|
|
126
|
+
const { content } = attachment;
|
|
127
|
+
if (content !== undefined && content !== null) {
|
|
128
|
+
if (typeof content === 'string') {
|
|
129
|
+
const encoding = attachment.encoding ?? 'utf-8';
|
|
130
|
+
assertWithinLimit({ byteLength: Buffer.byteLength(content, encoding), usedBytes, maxBytes });
|
|
131
|
+
return Buffer.from(content, encoding);
|
|
132
|
+
}
|
|
133
|
+
if (content instanceof Uint8Array) {
|
|
134
|
+
assertWithinLimit({ byteLength: content.byteLength, usedBytes, maxBytes });
|
|
135
|
+
return toBuffer(content);
|
|
136
|
+
}
|
|
137
|
+
if (!isAttachmentStream(content)) {
|
|
138
|
+
throw (0, core_1.getError)({
|
|
139
|
+
error: common_2.MailErrors.INVALID_CONFIGURATION,
|
|
140
|
+
message: 'Invalid mail attachment | attachment.content must be a Buffer, a Uint8Array, a string or a stream',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return drainStream({ stream: content, usedBytes, maxBytes });
|
|
144
|
+
}
|
|
145
|
+
if (attachment.path !== undefined && attachment.path !== null) {
|
|
146
|
+
return readConfinedFile({ path: attachment.path, usedBytes, attachmentRoot, maxBytes });
|
|
147
|
+
}
|
|
148
|
+
return Buffer.alloc(0);
|
|
149
|
+
};
|
|
150
|
+
exports.readAttachmentContent = readAttachmentContent;
|
|
151
|
+
/**
|
|
152
|
+
* Turns every attachment into `content` bytes and drops `path`, so no transport is ever handed a
|
|
153
|
+
* file or URL to read on its own. `maxBytes` is shared by all attachments of the message. An
|
|
154
|
+
* attachment read from `path` keeps the file's name and, when none is given, its content type.
|
|
155
|
+
*/
|
|
156
|
+
const resolveMailAttachments = async (opts) => {
|
|
157
|
+
const { attachments, attachmentRoot, maxBytes } = opts;
|
|
158
|
+
const resolved = [];
|
|
159
|
+
let usedBytes = 0;
|
|
160
|
+
// Sequential on purpose: each read spends the budget the previous ones left.
|
|
161
|
+
for (const attachment of attachments) {
|
|
162
|
+
const { path, href, raw, content, encoding, ...rest } = attachment;
|
|
163
|
+
// nodemailer reads both on its own - `href` fetches a URL, `raw` can carry a `path`.
|
|
164
|
+
if ((href !== undefined && href !== null) || (raw !== undefined && raw !== null)) {
|
|
165
|
+
throw buildPathRefusedError({
|
|
166
|
+
reason: 'attachment.href and attachment.raw are not supported | pass the bytes as content',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const bytes = await (0, exports.readAttachmentContent)({
|
|
170
|
+
attachment: { content, encoding, path },
|
|
171
|
+
attachmentRoot,
|
|
172
|
+
maxBytes,
|
|
173
|
+
usedBytes,
|
|
174
|
+
});
|
|
175
|
+
usedBytes += bytes.byteLength;
|
|
176
|
+
const isReadFromPath = (content === undefined || content === null) && typeof path === 'string';
|
|
177
|
+
const filename = rest.filename ?? (isReadFromPath ? (0, node_path_1.basename)(path) : undefined);
|
|
178
|
+
const contentType = rest.contentType ??
|
|
179
|
+
(isReadFromPath && filename ? common_1.ContentTypeTable.resolve({ filename }) : undefined);
|
|
180
|
+
resolved.push({
|
|
181
|
+
...rest,
|
|
182
|
+
...(filename === undefined ? {} : { filename }),
|
|
183
|
+
...(contentType === undefined ? {} : { contentType }),
|
|
184
|
+
content: bytes,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return resolved;
|
|
188
|
+
};
|
|
189
|
+
exports.resolveMailAttachments = resolveMailAttachments;
|
|
190
|
+
/**
|
|
191
|
+
* Releases every attachment stream of a refused send, read or not, so none keeps a descriptor
|
|
192
|
+
* open. A drained stream is already closed; releasing it again is harmless.
|
|
193
|
+
*/
|
|
194
|
+
const releaseAttachmentStreams = (opts) => {
|
|
195
|
+
for (const attachment of opts.attachments ?? []) {
|
|
196
|
+
const { content } = attachment;
|
|
197
|
+
if (content instanceof ReadableStream) {
|
|
198
|
+
if (!content.locked) {
|
|
199
|
+
content.cancel().catch(error => {
|
|
200
|
+
logger.warn('[releaseAttachmentStreams] Cancelling a web stream failed | error: %s', error);
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (typeof content === 'object' &&
|
|
206
|
+
content !== null &&
|
|
207
|
+
'destroy' in content &&
|
|
208
|
+
typeof content.destroy === 'function') {
|
|
209
|
+
content.destroy();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
exports.releaseAttachmentStreams = releaseAttachmentStreams;
|
|
214
|
+
//# sourceMappingURL=attachment.utility.js.map
|