blendsdk 5.33.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/README.md +125 -0
- package/dist/cmdline/cmdline.d.ts +144 -0
- package/dist/cmdline/cmdline.d.ts.map +1 -0
- package/dist/cmdline/cmdline.js +683 -0
- package/dist/cmdline/cmdline.js.map +1 -0
- package/dist/cmdline/errors.d.ts +105 -0
- package/dist/cmdline/errors.d.ts.map +1 -0
- package/dist/cmdline/errors.js +153 -0
- package/dist/cmdline/errors.js.map +1 -0
- package/dist/cmdline/index.d.ts +5 -0
- package/dist/cmdline/index.d.ts.map +1 -0
- package/dist/cmdline/index.js +5 -0
- package/dist/cmdline/index.js.map +1 -0
- package/dist/cmdline/types.d.ts +260 -0
- package/dist/cmdline/types.d.ts.map +1 -0
- package/dist/cmdline/types.js +9 -0
- package/dist/cmdline/types.js.map +1 -0
- package/dist/cmdline/validators.d.ts +28 -0
- package/dist/cmdline/validators.d.ts.map +1 -0
- package/dist/cmdline/validators.js +211 -0
- package/dist/cmdline/validators.js.map +1 -0
- package/dist/codegen/database/index.d.ts +3 -0
- package/dist/codegen/database/index.d.ts.map +1 -0
- package/dist/codegen/database/index.js +3 -0
- package/dist/codegen/database/index.js.map +1 -0
- package/dist/codegen/database/introspect/index.d.ts +3 -0
- package/dist/codegen/database/introspect/index.d.ts.map +1 -0
- package/dist/codegen/database/introspect/index.js +3 -0
- package/dist/codegen/database/introspect/index.js.map +1 -0
- package/dist/codegen/database/introspect/introspect-query.d.ts +2 -0
- package/dist/codegen/database/introspect/introspect-query.d.ts.map +1 -0
- package/dist/codegen/database/introspect/introspect-query.js +416 -0
- package/dist/codegen/database/introspect/introspect-query.js.map +1 -0
- package/dist/codegen/database/introspect/introspect-types.d.ts +45 -0
- package/dist/codegen/database/introspect/introspect-types.d.ts.map +1 -0
- package/dist/codegen/database/introspect/introspect-types.js +2 -0
- package/dist/codegen/database/introspect/introspect-types.js.map +1 -0
- package/dist/codegen/database/introspect/introspect.d.ts +21 -0
- package/dist/codegen/database/introspect/introspect.d.ts.map +1 -0
- package/dist/codegen/database/introspect/introspect.js +223 -0
- package/dist/codegen/database/introspect/introspect.js.map +1 -0
- package/dist/codegen/database/schema/check-constraint.d.ts +8 -0
- package/dist/codegen/database/schema/check-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/check-constraint.js +12 -0
- package/dist/codegen/database/schema/check-constraint.js.map +1 -0
- package/dist/codegen/database/schema/column-schema.d.ts +7 -0
- package/dist/codegen/database/schema/column-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/column-schema.js +9 -0
- package/dist/codegen/database/schema/column-schema.js.map +1 -0
- package/dist/codegen/database/schema/constraint-base.d.ts +13 -0
- package/dist/codegen/database/schema/constraint-base.d.ts.map +1 -0
- package/dist/codegen/database/schema/constraint-base.js +32 -0
- package/dist/codegen/database/schema/constraint-base.js.map +1 -0
- package/dist/codegen/database/schema/database-schema.d.ts +19 -0
- package/dist/codegen/database/schema/database-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/database-schema.js +48 -0
- package/dist/codegen/database/schema/database-schema.js.map +1 -0
- package/dist/codegen/database/schema/dataobject-schema.d.ts +9 -0
- package/dist/codegen/database/schema/dataobject-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/dataobject-schema.js +18 -0
- package/dist/codegen/database/schema/dataobject-schema.js.map +1 -0
- package/dist/codegen/database/schema/fkey-constraints.d.ts +21 -0
- package/dist/codegen/database/schema/fkey-constraints.d.ts.map +1 -0
- package/dist/codegen/database/schema/fkey-constraints.js +58 -0
- package/dist/codegen/database/schema/fkey-constraints.js.map +1 -0
- package/dist/codegen/database/schema/index-constraint.d.ts +34 -0
- package/dist/codegen/database/schema/index-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/index-constraint.js +79 -0
- package/dist/codegen/database/schema/index-constraint.js.map +1 -0
- package/dist/codegen/database/schema/index.d.ts +5 -0
- package/dist/codegen/database/schema/index.d.ts.map +1 -0
- package/dist/codegen/database/schema/index.js +5 -0
- package/dist/codegen/database/schema/index.js.map +1 -0
- package/dist/codegen/database/schema/primarykey-constraint.d.ts +4 -0
- package/dist/codegen/database/schema/primarykey-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/primarykey-constraint.js +4 -0
- package/dist/codegen/database/schema/primarykey-constraint.js.map +1 -0
- package/dist/codegen/database/schema/relation-schema.d.ts +16 -0
- package/dist/codegen/database/schema/relation-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/relation-schema.js +32 -0
- package/dist/codegen/database/schema/relation-schema.js.map +1 -0
- package/dist/codegen/database/schema/table-column-schema.d.ts +59 -0
- package/dist/codegen/database/schema/table-column-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/table-column-schema.js +137 -0
- package/dist/codegen/database/schema/table-column-schema.js.map +1 -0
- package/dist/codegen/database/schema/table-schema.d.ts +48 -0
- package/dist/codegen/database/schema/table-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/table-schema.js +219 -0
- package/dist/codegen/database/schema/table-schema.js.map +1 -0
- package/dist/codegen/database/schema/types.d.ts +13 -0
- package/dist/codegen/database/schema/types.d.ts.map +1 -0
- package/dist/codegen/database/schema/types.js +175 -0
- package/dist/codegen/database/schema/types.js.map +1 -0
- package/dist/codegen/database/schema/unique-constraint.d.ts +4 -0
- package/dist/codegen/database/schema/unique-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/unique-constraint.js +4 -0
- package/dist/codegen/database/schema/unique-constraint.js.map +1 -0
- package/dist/codegen/database/schema/view-schema.d.ts +14 -0
- package/dist/codegen/database/schema/view-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/view-schema.js +32 -0
- package/dist/codegen/database/schema/view-schema.js.map +1 -0
- package/dist/codegen/generator/ctype-generator.d.ts +5 -0
- package/dist/codegen/generator/ctype-generator.d.ts.map +1 -0
- package/dist/codegen/generator/ctype-generator.js +26 -0
- package/dist/codegen/generator/ctype-generator.js.map +1 -0
- package/dist/codegen/generator/generator.d.ts +17 -0
- package/dist/codegen/generator/generator.d.ts.map +1 -0
- package/dist/codegen/generator/generator.js +57 -0
- package/dist/codegen/generator/generator.js.map +1 -0
- package/dist/codegen/generator/index.d.ts +8 -0
- package/dist/codegen/generator/index.d.ts.map +1 -0
- package/dist/codegen/generator/index.js +8 -0
- package/dist/codegen/generator/index.js.map +1 -0
- package/dist/codegen/generator/openapi-generator.d.ts +239 -0
- package/dist/codegen/generator/openapi-generator.d.ts.map +1 -0
- package/dist/codegen/generator/openapi-generator.js +434 -0
- package/dist/codegen/generator/openapi-generator.js.map +1 -0
- package/dist/codegen/generator/openapi-types.d.ts +263 -0
- package/dist/codegen/generator/openapi-types.d.ts.map +1 -0
- package/dist/codegen/generator/openapi-types.js +11 -0
- package/dist/codegen/generator/openapi-types.js.map +1 -0
- package/dist/codegen/generator/postgres-schema-generator.d.ts +48 -0
- package/dist/codegen/generator/postgres-schema-generator.d.ts.map +1 -0
- package/dist/codegen/generator/postgres-schema-generator.js +339 -0
- package/dist/codegen/generator/postgres-schema-generator.js.map +1 -0
- package/dist/codegen/generator/type-generator.d.ts +113 -0
- package/dist/codegen/generator/type-generator.d.ts.map +1 -0
- package/dist/codegen/generator/type-generator.js +249 -0
- package/dist/codegen/generator/type-generator.js.map +1 -0
- package/dist/codegen/generator/zod-generator.d.ts +15 -0
- package/dist/codegen/generator/zod-generator.d.ts.map +1 -0
- package/dist/codegen/generator/zod-generator.js +86 -0
- package/dist/codegen/generator/zod-generator.js.map +1 -0
- package/dist/codegen/generator/zod-to-openapi.d.ts +69 -0
- package/dist/codegen/generator/zod-to-openapi.d.ts.map +1 -0
- package/dist/codegen/generator/zod-to-openapi.js +480 -0
- package/dist/codegen/generator/zod-to-openapi.js.map +1 -0
- package/dist/codegen/index.d.ts +4 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +4 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/schema/any-schema.d.ts +6 -0
- package/dist/codegen/schema/any-schema.d.ts.map +1 -0
- package/dist/codegen/schema/any-schema.js +12 -0
- package/dist/codegen/schema/any-schema.js.map +1 -0
- package/dist/codegen/schema/boolean-schema.d.ts +6 -0
- package/dist/codegen/schema/boolean-schema.d.ts.map +1 -0
- package/dist/codegen/schema/boolean-schema.js +12 -0
- package/dist/codegen/schema/boolean-schema.js.map +1 -0
- package/dist/codegen/schema/date-schema.d.ts +6 -0
- package/dist/codegen/schema/date-schema.d.ts.map +1 -0
- package/dist/codegen/schema/date-schema.js +12 -0
- package/dist/codegen/schema/date-schema.js.map +1 -0
- package/dist/codegen/schema/index.d.ts +10 -0
- package/dist/codegen/schema/index.d.ts.map +1 -0
- package/dist/codegen/schema/index.js +10 -0
- package/dist/codegen/schema/index.js.map +1 -0
- package/dist/codegen/schema/object-schema.d.ts +10 -0
- package/dist/codegen/schema/object-schema.d.ts.map +1 -0
- package/dist/codegen/schema/object-schema.js +21 -0
- package/dist/codegen/schema/object-schema.js.map +1 -0
- package/dist/codegen/schema/primitive-schema.d.ts +20 -0
- package/dist/codegen/schema/primitive-schema.d.ts.map +1 -0
- package/dist/codegen/schema/primitive-schema.js +48 -0
- package/dist/codegen/schema/primitive-schema.js.map +1 -0
- package/dist/codegen/schema/ref-schema.d.ts +6 -0
- package/dist/codegen/schema/ref-schema.d.ts.map +1 -0
- package/dist/codegen/schema/ref-schema.js +11 -0
- package/dist/codegen/schema/ref-schema.js.map +1 -0
- package/dist/codegen/schema/schema-container.d.ts +14 -0
- package/dist/codegen/schema/schema-container.d.ts.map +1 -0
- package/dist/codegen/schema/schema-container.js +38 -0
- package/dist/codegen/schema/schema-container.js.map +1 -0
- package/dist/codegen/schema/schema-object.d.ts +42 -0
- package/dist/codegen/schema/schema-object.d.ts.map +1 -0
- package/dist/codegen/schema/schema-object.js +90 -0
- package/dist/codegen/schema/schema-object.js.map +1 -0
- package/dist/codegen/schema/schema-scope.d.ts +23 -0
- package/dist/codegen/schema/schema-scope.d.ts.map +1 -0
- package/dist/codegen/schema/schema-scope.js +67 -0
- package/dist/codegen/schema/schema-scope.js.map +1 -0
- package/dist/codegen/schema/utils.d.ts +17 -0
- package/dist/codegen/schema/utils.d.ts.map +1 -0
- package/dist/codegen/schema/utils.js +47 -0
- package/dist/codegen/schema/utils.js.map +1 -0
- package/dist/dbcore/crud-statement.d.ts +67 -0
- package/dist/dbcore/crud-statement.d.ts.map +1 -0
- package/dist/dbcore/crud-statement.js +75 -0
- package/dist/dbcore/crud-statement.js.map +1 -0
- package/dist/dbcore/database.d.ts +272 -0
- package/dist/dbcore/database.d.ts.map +1 -0
- package/dist/dbcore/database.js +53 -0
- package/dist/dbcore/database.js.map +1 -0
- package/dist/dbcore/dataservice-base.d.ts +18 -0
- package/dist/dbcore/dataservice-base.d.ts.map +1 -0
- package/dist/dbcore/dataservice-base.js +19 -0
- package/dist/dbcore/dataservice-base.js.map +1 -0
- package/dist/dbcore/delete-statement.d.ts +29 -0
- package/dist/dbcore/delete-statement.d.ts.map +1 -0
- package/dist/dbcore/delete-statement.js +30 -0
- package/dist/dbcore/delete-statement.js.map +1 -0
- package/dist/dbcore/filterable-statement.d.ts +126 -0
- package/dist/dbcore/filterable-statement.d.ts.map +1 -0
- package/dist/dbcore/filterable-statement.js +178 -0
- package/dist/dbcore/filterable-statement.js.map +1 -0
- package/dist/dbcore/from-statement.d.ts +120 -0
- package/dist/dbcore/from-statement.d.ts.map +1 -0
- package/dist/dbcore/from-statement.js +150 -0
- package/dist/dbcore/from-statement.js.map +1 -0
- package/dist/dbcore/index.d.ts +21 -0
- package/dist/dbcore/index.d.ts.map +1 -0
- package/dist/dbcore/index.js +21 -0
- package/dist/dbcore/index.js.map +1 -0
- package/dist/dbcore/insert-statement.d.ts +48 -0
- package/dist/dbcore/insert-statement.d.ts.map +1 -0
- package/dist/dbcore/insert-statement.js +52 -0
- package/dist/dbcore/insert-statement.js.map +1 -0
- package/dist/dbcore/query-dataservice.d.ts +144 -0
- package/dist/dbcore/query-dataservice.d.ts.map +1 -0
- package/dist/dbcore/query-dataservice.js +144 -0
- package/dist/dbcore/query-dataservice.js.map +1 -0
- package/dist/dbcore/statement.d.ts +133 -0
- package/dist/dbcore/statement.d.ts.map +1 -0
- package/dist/dbcore/statement.js +138 -0
- package/dist/dbcore/statement.js.map +1 -0
- package/dist/dbcore/update-statement.d.ts +48 -0
- package/dist/dbcore/update-statement.d.ts.map +1 -0
- package/dist/dbcore/update-statement.js +52 -0
- package/dist/dbcore/update-statement.js.map +1 -0
- package/dist/expression/builders/comparison-builder.d.ts +47 -0
- package/dist/expression/builders/comparison-builder.d.ts.map +1 -0
- package/dist/expression/builders/comparison-builder.js +197 -0
- package/dist/expression/builders/comparison-builder.js.map +1 -0
- package/dist/expression/builders/query-builder.d.ts +80 -0
- package/dist/expression/builders/query-builder.d.ts.map +1 -0
- package/dist/expression/builders/query-builder.js +229 -0
- package/dist/expression/builders/query-builder.js.map +1 -0
- package/dist/expression/compiler/postgresql-compiler.d.ts +56 -0
- package/dist/expression/compiler/postgresql-compiler.d.ts.map +1 -0
- package/dist/expression/compiler/postgresql-compiler.js +217 -0
- package/dist/expression/compiler/postgresql-compiler.js.map +1 -0
- package/dist/expression/core/ast-node.d.ts +47 -0
- package/dist/expression/core/ast-node.d.ts.map +1 -0
- package/dist/expression/core/ast-node.js +154 -0
- package/dist/expression/core/ast-node.js.map +1 -0
- package/dist/expression/core/parameter-manager.d.ts +84 -0
- package/dist/expression/core/parameter-manager.d.ts.map +1 -0
- package/dist/expression/core/parameter-manager.js +164 -0
- package/dist/expression/core/parameter-manager.js.map +1 -0
- package/dist/expression/core/query-builder-interfaces.d.ts +188 -0
- package/dist/expression/core/query-builder-interfaces.d.ts.map +1 -0
- package/dist/expression/core/query-builder-interfaces.js +6 -0
- package/dist/expression/core/query-builder-interfaces.js.map +1 -0
- package/dist/expression/core/types.d.ts +239 -0
- package/dist/expression/core/types.d.ts.map +1 -0
- package/dist/expression/core/types.js +121 -0
- package/dist/expression/core/types.js.map +1 -0
- package/dist/expression/index.d.ts +11 -0
- package/dist/expression/index.d.ts.map +1 -0
- package/dist/expression/index.js +11 -0
- package/dist/expression/index.js.map +1 -0
- package/dist/i18n/content-file-source.d.ts +109 -0
- package/dist/i18n/content-file-source.d.ts.map +1 -0
- package/dist/i18n/content-file-source.js +218 -0
- package/dist/i18n/content-file-source.js.map +1 -0
- package/dist/i18n/index.d.ts +19 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +21 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/json-file-source.d.ts +96 -0
- package/dist/i18n/json-file-source.d.ts.map +1 -0
- package/dist/i18n/json-file-source.js +258 -0
- package/dist/i18n/json-file-source.js.map +1 -0
- package/dist/i18n/merge-catalogs.d.ts +20 -0
- package/dist/i18n/merge-catalogs.d.ts.map +1 -0
- package/dist/i18n/merge-catalogs.js +34 -0
- package/dist/i18n/merge-catalogs.js.map +1 -0
- package/dist/i18n/node.d.ts +20 -0
- package/dist/i18n/node.d.ts.map +1 -0
- package/dist/i18n/node.js +19 -0
- package/dist/i18n/node.js.map +1 -0
- package/dist/i18n/translation-source.d.ts +35 -0
- package/dist/i18n/translation-source.d.ts.map +1 -0
- package/dist/i18n/translation-source.js +2 -0
- package/dist/i18n/translation-source.js.map +1 -0
- package/dist/i18n/translator.d.ts +162 -0
- package/dist/i18n/translator.d.ts.map +1 -0
- package/dist/i18n/translator.js +259 -0
- package/dist/i18n/translator.js.map +1 -0
- package/dist/i18n/types.d.ts +80 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +2 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/postgresql/database.d.ts +204 -0
- package/dist/postgresql/database.d.ts.map +1 -0
- package/dist/postgresql/database.js +321 -0
- package/dist/postgresql/database.js.map +1 -0
- package/dist/postgresql/delete-statement.d.ts +36 -0
- package/dist/postgresql/delete-statement.d.ts.map +1 -0
- package/dist/postgresql/delete-statement.js +54 -0
- package/dist/postgresql/delete-statement.js.map +1 -0
- package/dist/postgresql/index.d.ts +12 -0
- package/dist/postgresql/index.d.ts.map +1 -0
- package/dist/postgresql/index.js +12 -0
- package/dist/postgresql/index.js.map +1 -0
- package/dist/postgresql/insert-statement.d.ts +34 -0
- package/dist/postgresql/insert-statement.d.ts.map +1 -0
- package/dist/postgresql/insert-statement.js +48 -0
- package/dist/postgresql/insert-statement.js.map +1 -0
- package/dist/postgresql/update-statement.d.ts +38 -0
- package/dist/postgresql/update-statement.d.ts.map +1 -0
- package/dist/postgresql/update-statement.js +75 -0
- package/dist/postgresql/update-statement.js.map +1 -0
- package/dist/stdlib/formatString.d.ts +52 -0
- package/dist/stdlib/formatString.d.ts.map +1 -0
- package/dist/stdlib/formatString.js +118 -0
- package/dist/stdlib/formatString.js.map +1 -0
- package/dist/stdlib/index.d.ts +8 -0
- package/dist/stdlib/index.d.ts.map +1 -0
- package/dist/stdlib/index.js +8 -0
- package/dist/stdlib/index.js.map +1 -0
- package/dist/stdlib/isBoolean.d.ts +15 -0
- package/dist/stdlib/isBoolean.d.ts.map +1 -0
- package/dist/stdlib/isBoolean.js +17 -0
- package/dist/stdlib/isBoolean.js.map +1 -0
- package/dist/stdlib/isNullOrUndef.d.ts +24 -0
- package/dist/stdlib/isNullOrUndef.d.ts.map +1 -0
- package/dist/stdlib/isNullOrUndef.js +28 -0
- package/dist/stdlib/isNullOrUndef.js.map +1 -0
- package/dist/stdlib/isNumeric.d.ts +20 -0
- package/dist/stdlib/isNumeric.d.ts.map +1 -0
- package/dist/stdlib/isNumeric.js +39 -0
- package/dist/stdlib/isNumeric.js.map +1 -0
- package/dist/stdlib/isString.d.ts +15 -0
- package/dist/stdlib/isString.d.ts.map +1 -0
- package/dist/stdlib/isString.js +17 -0
- package/dist/stdlib/isString.js.map +1 -0
- package/dist/stdlib/isTemplateString.d.ts +18 -0
- package/dist/stdlib/isTemplateString.d.ts.map +1 -0
- package/dist/stdlib/isTemplateString.js +38 -0
- package/dist/stdlib/isTemplateString.js.map +1 -0
- package/dist/stdlib/wrapInArray.d.ts +14 -0
- package/dist/stdlib/wrapInArray.d.ts.map +1 -0
- package/dist/stdlib/wrapInArray.js +17 -0
- package/dist/stdlib/wrapInArray.js.map +1 -0
- package/dist/webafx/application/application-settings.d.ts +129 -0
- package/dist/webafx/application/application-settings.d.ts.map +1 -0
- package/dist/webafx/application/application-settings.js +162 -0
- package/dist/webafx/application/application-settings.js.map +1 -0
- package/dist/webafx/application/base-controller.d.ts +128 -0
- package/dist/webafx/application/base-controller.d.ts.map +1 -0
- package/dist/webafx/application/base-controller.js +122 -0
- package/dist/webafx/application/base-controller.js.map +1 -0
- package/dist/webafx/application/console-logger.d.ts +81 -0
- package/dist/webafx/application/console-logger.d.ts.map +1 -0
- package/dist/webafx/application/console-logger.js +111 -0
- package/dist/webafx/application/console-logger.js.map +1 -0
- package/dist/webafx/application/controller-registry.d.ts +34 -0
- package/dist/webafx/application/controller-registry.d.ts.map +1 -0
- package/dist/webafx/application/controller-registry.js +32 -0
- package/dist/webafx/application/controller-registry.js.map +1 -0
- package/dist/webafx/application/error-handler-middleware.d.ts +22 -0
- package/dist/webafx/application/error-handler-middleware.d.ts.map +1 -0
- package/dist/webafx/application/error-handler-middleware.js +70 -0
- package/dist/webafx/application/error-handler-middleware.js.map +1 -0
- package/dist/webafx/application/index.d.ts +13 -0
- package/dist/webafx/application/index.d.ts.map +1 -0
- package/dist/webafx/application/index.js +13 -0
- package/dist/webafx/application/index.js.map +1 -0
- package/dist/webafx/application/logger.d.ts +2 -0
- package/dist/webafx/application/logger.d.ts.map +1 -0
- package/dist/webafx/application/logger.js +2 -0
- package/dist/webafx/application/logger.js.map +1 -0
- package/dist/webafx/application/plugin.d.ts +73 -0
- package/dist/webafx/application/plugin.d.ts.map +1 -0
- package/dist/webafx/application/plugin.js +90 -0
- package/dist/webafx/application/plugin.js.map +1 -0
- package/dist/webafx/application/rate-limiter.d.ts +35 -0
- package/dist/webafx/application/rate-limiter.d.ts.map +1 -0
- package/dist/webafx/application/rate-limiter.js +74 -0
- package/dist/webafx/application/rate-limiter.js.map +1 -0
- package/dist/webafx/application/request-context.d.ts +62 -0
- package/dist/webafx/application/request-context.d.ts.map +1 -0
- package/dist/webafx/application/request-context.js +54 -0
- package/dist/webafx/application/request-context.js.map +1 -0
- package/dist/webafx/application/request-id-middleware.d.ts +30 -0
- package/dist/webafx/application/request-id-middleware.d.ts.map +1 -0
- package/dist/webafx/application/request-id-middleware.js +57 -0
- package/dist/webafx/application/request-id-middleware.js.map +1 -0
- package/dist/webafx/application/route-builder.d.ts +231 -0
- package/dist/webafx/application/route-builder.d.ts.map +1 -0
- package/dist/webafx/application/route-builder.js +182 -0
- package/dist/webafx/application/route-builder.js.map +1 -0
- package/dist/webafx/application/service-container.d.ts +144 -0
- package/dist/webafx/application/service-container.d.ts.map +1 -0
- package/dist/webafx/application/service-container.js +192 -0
- package/dist/webafx/application/service-container.js.map +1 -0
- package/dist/webafx/application/services.d.ts +27 -0
- package/dist/webafx/application/services.d.ts.map +1 -0
- package/dist/webafx/application/services.js +33 -0
- package/dist/webafx/application/services.js.map +1 -0
- package/dist/webafx/application/structured-logger.d.ts +99 -0
- package/dist/webafx/application/structured-logger.d.ts.map +1 -0
- package/dist/webafx/application/structured-logger.js +132 -0
- package/dist/webafx/application/structured-logger.js.map +1 -0
- package/dist/webafx/application/type.d.ts +29 -0
- package/dist/webafx/application/type.d.ts.map +1 -0
- package/dist/webafx/application/type.js +2 -0
- package/dist/webafx/application/type.js.map +1 -0
- package/dist/webafx/application/web-application.d.ts +257 -0
- package/dist/webafx/application/web-application.d.ts.map +1 -0
- package/dist/webafx/application/web-application.js +611 -0
- package/dist/webafx/application/web-application.js.map +1 -0
- package/dist/webafx/errors/api-error.d.ts +21 -0
- package/dist/webafx/errors/api-error.d.ts.map +1 -0
- package/dist/webafx/errors/api-error.js +38 -0
- package/dist/webafx/errors/api-error.js.map +1 -0
- package/dist/webafx/errors/http-errors.d.ts +56 -0
- package/dist/webafx/errors/http-errors.d.ts.map +1 -0
- package/dist/webafx/errors/http-errors.js +74 -0
- package/dist/webafx/errors/http-errors.js.map +1 -0
- package/dist/webafx/errors/index.d.ts +4 -0
- package/dist/webafx/errors/index.d.ts.map +1 -0
- package/dist/webafx/errors/index.js +4 -0
- package/dist/webafx/errors/index.js.map +1 -0
- package/dist/webafx/errors/types.d.ts +42 -0
- package/dist/webafx/errors/types.d.ts.map +1 -0
- package/dist/webafx/errors/types.js +2 -0
- package/dist/webafx/errors/types.js.map +1 -0
- package/dist/webafx/index.d.ts +3 -0
- package/dist/webafx/index.d.ts.map +1 -0
- package/dist/webafx/index.js +3 -0
- package/dist/webafx/index.js.map +1 -0
- package/dist/webafx-auth/abstract-auth-provider.d.ts +178 -0
- package/dist/webafx-auth/abstract-auth-provider.d.ts.map +1 -0
- package/dist/webafx-auth/abstract-auth-provider.js +240 -0
- package/dist/webafx-auth/abstract-auth-provider.js.map +1 -0
- package/dist/webafx-auth/index.d.ts +27 -0
- package/dist/webafx-auth/index.d.ts.map +1 -0
- package/dist/webafx-auth/index.js +32 -0
- package/dist/webafx-auth/index.js.map +1 -0
- package/dist/webafx-auth/jwt-auth-provider.d.ts +100 -0
- package/dist/webafx-auth/jwt-auth-provider.d.ts.map +1 -0
- package/dist/webafx-auth/jwt-auth-provider.js +154 -0
- package/dist/webafx-auth/jwt-auth-provider.js.map +1 -0
- package/dist/webafx-auth/memory-auth-provider.d.ts +100 -0
- package/dist/webafx-auth/memory-auth-provider.d.ts.map +1 -0
- package/dist/webafx-auth/memory-auth-provider.js +122 -0
- package/dist/webafx-auth/memory-auth-provider.js.map +1 -0
- package/dist/webafx-auth/types.d.ts +333 -0
- package/dist/webafx-auth/types.d.ts.map +1 -0
- package/dist/webafx-auth/types.js +24 -0
- package/dist/webafx-auth/types.js.map +1 -0
- package/dist/webafx-cache/abstract-cache-provider.d.ts +185 -0
- package/dist/webafx-cache/abstract-cache-provider.d.ts.map +1 -0
- package/dist/webafx-cache/abstract-cache-provider.js +133 -0
- package/dist/webafx-cache/abstract-cache-provider.js.map +1 -0
- package/dist/webafx-cache/abstract-pubsub-provider.d.ts +170 -0
- package/dist/webafx-cache/abstract-pubsub-provider.d.ts.map +1 -0
- package/dist/webafx-cache/abstract-pubsub-provider.js +132 -0
- package/dist/webafx-cache/abstract-pubsub-provider.js.map +1 -0
- package/dist/webafx-cache/cache-plugin.d.ts +114 -0
- package/dist/webafx-cache/cache-plugin.d.ts.map +1 -0
- package/dist/webafx-cache/cache-plugin.js +176 -0
- package/dist/webafx-cache/cache-plugin.js.map +1 -0
- package/dist/webafx-cache/index.d.ts +33 -0
- package/dist/webafx-cache/index.d.ts.map +1 -0
- package/dist/webafx-cache/index.js +44 -0
- package/dist/webafx-cache/index.js.map +1 -0
- package/dist/webafx-cache/memory-cache-provider.d.ts +99 -0
- package/dist/webafx-cache/memory-cache-provider.d.ts.map +1 -0
- package/dist/webafx-cache/memory-cache-provider.js +251 -0
- package/dist/webafx-cache/memory-cache-provider.js.map +1 -0
- package/dist/webafx-cache/memory-pubsub-provider.d.ts +124 -0
- package/dist/webafx-cache/memory-pubsub-provider.d.ts.map +1 -0
- package/dist/webafx-cache/memory-pubsub-provider.js +195 -0
- package/dist/webafx-cache/memory-pubsub-provider.js.map +1 -0
- package/dist/webafx-cache/pubsub-plugin.d.ts +128 -0
- package/dist/webafx-cache/pubsub-plugin.d.ts.map +1 -0
- package/dist/webafx-cache/pubsub-plugin.js +182 -0
- package/dist/webafx-cache/pubsub-plugin.js.map +1 -0
- package/dist/webafx-cache/redis-cache-provider.d.ts +81 -0
- package/dist/webafx-cache/redis-cache-provider.d.ts.map +1 -0
- package/dist/webafx-cache/redis-cache-provider.js +209 -0
- package/dist/webafx-cache/redis-cache-provider.js.map +1 -0
- package/dist/webafx-cache/redis-pubsub-provider.d.ts +164 -0
- package/dist/webafx-cache/redis-pubsub-provider.d.ts.map +1 -0
- package/dist/webafx-cache/redis-pubsub-provider.js +329 -0
- package/dist/webafx-cache/redis-pubsub-provider.js.map +1 -0
- package/dist/webafx-cache/types.d.ts +206 -0
- package/dist/webafx-cache/types.d.ts.map +1 -0
- package/dist/webafx-cache/types.js +27 -0
- package/dist/webafx-cache/types.js.map +1 -0
- package/dist/webafx-i18n/i18n-plugin.d.ts +29 -0
- package/dist/webafx-i18n/i18n-plugin.d.ts.map +1 -0
- package/dist/webafx-i18n/i18n-plugin.js +145 -0
- package/dist/webafx-i18n/i18n-plugin.js.map +1 -0
- package/dist/webafx-i18n/index.d.ts +12 -0
- package/dist/webafx-i18n/index.d.ts.map +1 -0
- package/dist/webafx-i18n/index.js +12 -0
- package/dist/webafx-i18n/index.js.map +1 -0
- package/dist/webafx-i18n/locale-resolver.d.ts +33 -0
- package/dist/webafx-i18n/locale-resolver.d.ts.map +1 -0
- package/dist/webafx-i18n/locale-resolver.js +67 -0
- package/dist/webafx-i18n/locale-resolver.js.map +1 -0
- package/dist/webafx-i18n/postgresql-source.d.ts +101 -0
- package/dist/webafx-i18n/postgresql-source.d.ts.map +1 -0
- package/dist/webafx-i18n/postgresql-source.js +101 -0
- package/dist/webafx-i18n/postgresql-source.js.map +1 -0
- package/dist/webafx-i18n/types.d.ts +70 -0
- package/dist/webafx-i18n/types.d.ts.map +1 -0
- package/dist/webafx-i18n/types.js +2 -0
- package/dist/webafx-i18n/types.js.map +1 -0
- package/dist/webafx-mailer/abstract-mail-provider.d.ts +55 -0
- package/dist/webafx-mailer/abstract-mail-provider.d.ts.map +1 -0
- package/dist/webafx-mailer/abstract-mail-provider.js +37 -0
- package/dist/webafx-mailer/abstract-mail-provider.js.map +1 -0
- package/dist/webafx-mailer/index.d.ts +24 -0
- package/dist/webafx-mailer/index.d.ts.map +1 -0
- package/dist/webafx-mailer/index.js +34 -0
- package/dist/webafx-mailer/index.js.map +1 -0
- package/dist/webafx-mailer/mail-plugin.d.ts +98 -0
- package/dist/webafx-mailer/mail-plugin.d.ts.map +1 -0
- package/dist/webafx-mailer/mail-plugin.js +155 -0
- package/dist/webafx-mailer/mail-plugin.js.map +1 -0
- package/dist/webafx-mailer/memory-mail-provider.d.ts +85 -0
- package/dist/webafx-mailer/memory-mail-provider.d.ts.map +1 -0
- package/dist/webafx-mailer/memory-mail-provider.js +111 -0
- package/dist/webafx-mailer/memory-mail-provider.js.map +1 -0
- package/dist/webafx-mailer/smtp-mail-provider.d.ts +65 -0
- package/dist/webafx-mailer/smtp-mail-provider.d.ts.map +1 -0
- package/dist/webafx-mailer/smtp-mail-provider.js +113 -0
- package/dist/webafx-mailer/smtp-mail-provider.js.map +1 -0
- package/dist/webafx-mailer/types.d.ts +136 -0
- package/dist/webafx-mailer/types.d.ts.map +1 -0
- package/dist/webafx-mailer/types.js +13 -0
- package/dist/webafx-mailer/types.js.map +1 -0
- package/package.json +159 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebAFX plugin integration for mail providers.
|
|
3
|
+
*
|
|
4
|
+
* Provides convenience factory functions that wire a MailProvider instance
|
|
5
|
+
* into a WebAFX application as a singleton service with health check and
|
|
6
|
+
* graceful shutdown support.
|
|
7
|
+
*
|
|
8
|
+
* This is the ONLY file in @blendsdk/webafx-mailer that imports from @blendsdk/webafx,
|
|
9
|
+
* which is why webafx is an optional peer dependency (not a hard dependency).
|
|
10
|
+
*
|
|
11
|
+
* The design mirrors @blendsdk/webafx-cache's cache-plugin.ts exactly.
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
import { MemoryMailProvider } from "./memory-mail-provider.js";
|
|
16
|
+
import { SmtpMailProvider } from "./smtp-mail-provider.js";
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Default Constants
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/** Default plugin priority — installs after most core plugins */
|
|
21
|
+
const DEFAULT_PLUGIN_PRIORITY = 30;
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Plugin Factory Functions
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/**
|
|
26
|
+
* Create a WebAFX PluginDefinition from any MailProvider instance.
|
|
27
|
+
*
|
|
28
|
+
* This is the core function that wires a mail provider into WebAFX:
|
|
29
|
+
* 1. Registers the provider as a singleton service in the service container
|
|
30
|
+
* 2. Hooks the provider's health() into the /health endpoint
|
|
31
|
+
* 3. Hooks the provider's shutdown() into graceful shutdown
|
|
32
|
+
*
|
|
33
|
+
* The service name is read from `provider.serviceName` (defaults to "mailer").
|
|
34
|
+
*
|
|
35
|
+
* @param provider - Any MailProvider instance (SMTP, Memory, or custom)
|
|
36
|
+
* @param options - Optional overrides for plugin priority
|
|
37
|
+
* @returns A WebAFX PluginDefinition ready to pass to app.use()
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const mailer = new SmtpMailProvider({ host: "smtp.example.com", port: 587 });
|
|
42
|
+
* app.use(createMailPlugin(mailer));
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function createMailPlugin(provider, options) {
|
|
46
|
+
return {
|
|
47
|
+
name: provider.serviceName,
|
|
48
|
+
priority: options?.priority ?? DEFAULT_PLUGIN_PRIORITY,
|
|
49
|
+
factory: async ({ app, logger }) => {
|
|
50
|
+
// Register the mail provider as an application-wide singleton service.
|
|
51
|
+
// The factory ignores container/settings since the provider is pre-created.
|
|
52
|
+
app.registerService({
|
|
53
|
+
name: provider.serviceName,
|
|
54
|
+
type: "singleton",
|
|
55
|
+
factory: () => provider,
|
|
56
|
+
dispose: async () => {
|
|
57
|
+
await provider.shutdown();
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
await logger.info(`Mail plugin "${provider.serviceName}" initialized ` +
|
|
61
|
+
`(${provider.constructor.name})`);
|
|
62
|
+
// Return Plugin hooks for health monitoring and graceful shutdown
|
|
63
|
+
return {
|
|
64
|
+
health: () => provider.health(),
|
|
65
|
+
shutdown: () => provider.shutdown(),
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a WebAFX mail plugin with an SMTP backend. One-liner registration.
|
|
72
|
+
*
|
|
73
|
+
* Creates a SmtpMailProvider internally and returns a PluginDefinition.
|
|
74
|
+
* The user never needs to instantiate the provider manually.
|
|
75
|
+
*
|
|
76
|
+
* @param config - SMTP configuration (host, port, auth, TLS options)
|
|
77
|
+
* @returns A WebAFX PluginDefinition ready to pass to app.use()
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* app.use(smtpMailPlugin({
|
|
82
|
+
* host: "smtp.example.com",
|
|
83
|
+
* port: 587,
|
|
84
|
+
* secure: false,
|
|
85
|
+
* auth: { user: "user@example.com", pass: "secret" },
|
|
86
|
+
* }));
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export function smtpMailPlugin(config) {
|
|
90
|
+
const provider = new SmtpMailProvider(config);
|
|
91
|
+
return createMailPlugin(provider);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a WebAFX mail plugin with an In-Memory backend. One-liner registration.
|
|
95
|
+
*
|
|
96
|
+
* Creates a MemoryMailProvider internally and returns a PluginDefinition.
|
|
97
|
+
* Ideal for development and testing — no emails are actually sent.
|
|
98
|
+
*
|
|
99
|
+
* @param config - Optional memory configuration (serviceName override)
|
|
100
|
+
* @returns A WebAFX PluginDefinition ready to pass to app.use()
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* app.use(memoryMailPlugin());
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export function memoryMailPlugin(config) {
|
|
108
|
+
const provider = new MemoryMailProvider(config);
|
|
109
|
+
return createMailPlugin(provider);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create a MailProvider based on configuration type.
|
|
113
|
+
*
|
|
114
|
+
* Factory function for environment-based backend switching.
|
|
115
|
+
* Returns the appropriate provider based on `config.type`.
|
|
116
|
+
* Use with `createMailPlugin()` to register in WebAFX.
|
|
117
|
+
*
|
|
118
|
+
* @param config - Mail factory configuration with type discriminator
|
|
119
|
+
* @returns A MailProvider instance (SMTP or Memory)
|
|
120
|
+
* @throws Error if config.type is not "smtp" or "memory"
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const mailer = createMailProvider({
|
|
125
|
+
* type: process.env.NODE_ENV === "production" ? "smtp" : "memory",
|
|
126
|
+
* host: process.env.SMTP_HOST,
|
|
127
|
+
* port: Number(process.env.SMTP_PORT || 587),
|
|
128
|
+
* });
|
|
129
|
+
* app.use(createMailPlugin(mailer));
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
export function createMailProvider(config) {
|
|
133
|
+
switch (config.type) {
|
|
134
|
+
case "smtp":
|
|
135
|
+
return new SmtpMailProvider({
|
|
136
|
+
serviceName: config.serviceName,
|
|
137
|
+
host: config.host,
|
|
138
|
+
port: config.port,
|
|
139
|
+
secure: config.secure,
|
|
140
|
+
auth: config.auth,
|
|
141
|
+
tls: config.tls,
|
|
142
|
+
});
|
|
143
|
+
case "memory":
|
|
144
|
+
return new MemoryMailProvider({
|
|
145
|
+
serviceName: config.serviceName,
|
|
146
|
+
});
|
|
147
|
+
default: {
|
|
148
|
+
// Exhaustive check — provides a clear runtime error if called with
|
|
149
|
+
// an invalid type that TypeScript couldn't catch at compile time
|
|
150
|
+
const unknownType = config.type;
|
|
151
|
+
throw new Error(`Unknown mail type: "${unknownType}". Supported types: "smtp", "memory".`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=mail-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-plugin.js","sourceRoot":"","sources":["../src/mail-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,iEAAiE;AACjE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,gBAAgB,CAC5B,QAAsB,EACtB,OAA+B;IAE/B,OAAO;QACH,IAAI,EAAE,QAAQ,CAAC,WAAW;QAC1B,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,uBAAuB;QAEtD,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;YAC/B,uEAAuE;YACvE,4EAA4E;YAC5E,GAAG,CAAC,eAAe,CAAC;gBAChB,IAAI,EAAE,QAAQ,CAAC,WAAW;gBAC1B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;gBACvB,OAAO,EAAE,KAAK,IAAI,EAAE;oBAChB,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC9B,CAAC;aACJ,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,IAAI,CACb,gBAAgB,QAAQ,CAAC,WAAW,gBAAgB;gBAChD,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CACvC,CAAC;YAEF,kEAAkE;YAClE,OAAO;gBACH,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC/B,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;aACtC,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACjD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAyB;IACtD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAyB;IACxD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACP,OAAO,IAAI,gBAAgB,CAAC;gBACxB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,IAAI,EAAE,MAAM,CAAC,IAAK;gBAClB,IAAI,EAAE,MAAM,CAAC,IAAK;gBAClB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;aAClB,CAAC,CAAC;QAEP,KAAK,QAAQ;YACT,OAAO,IAAI,kBAAkB,CAAC;gBAC1B,WAAW,EAAE,MAAM,CAAC,WAAW;aAClC,CAAC,CAAC;QAEP,OAAO,CAAC,CAAC,CAAC;YACN,mEAAmE;YACnE,iEAAiE;YACjE,MAAM,WAAW,GAAI,MAA2B,CAAC,IAAI,CAAC;YACtD,MAAM,IAAI,KAAK,CACX,uBAAuB,WAAW,uCAAuC,CAC5E,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory mail provider for testing.
|
|
3
|
+
*
|
|
4
|
+
* Stores all sent messages in an array that can be queried for test assertions.
|
|
5
|
+
* Does not actually send any emails — purely for development and testing use.
|
|
6
|
+
*
|
|
7
|
+
* Provides helper methods for test assertions:
|
|
8
|
+
* - `getSentMessages()` — returns all sent messages (as a copy)
|
|
9
|
+
* - `getLastMessage()` — returns the most recently sent message
|
|
10
|
+
* - `clear()` — empties the stored messages
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const mailer = new MemoryMailProvider();
|
|
15
|
+
* await mailer.send({ from: "a@b.com", to: "c@d.com", subject: "Hi", text: "Hello" });
|
|
16
|
+
*
|
|
17
|
+
* const sent = mailer.getSentMessages();
|
|
18
|
+
* expect(sent).toHaveLength(1);
|
|
19
|
+
* expect(sent[0].message.subject).toBe("Hi");
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { MailProvider } from "./abstract-mail-provider.js";
|
|
23
|
+
import type { MailMessage, MailResult, MemoryMailConfig } from "./types.js";
|
|
24
|
+
/** Stored message entry — includes both the original message and send result */
|
|
25
|
+
export interface SentMailEntry {
|
|
26
|
+
/** The original mail message as submitted to send() */
|
|
27
|
+
message: MailMessage;
|
|
28
|
+
/** The result returned from send() */
|
|
29
|
+
result: MailResult;
|
|
30
|
+
}
|
|
31
|
+
export declare class MemoryMailProvider extends MailProvider {
|
|
32
|
+
/** Internal store of all sent messages */
|
|
33
|
+
protected messages: SentMailEntry[];
|
|
34
|
+
/**
|
|
35
|
+
* Create a new in-memory mail provider.
|
|
36
|
+
*
|
|
37
|
+
* @param config - Optional config; defaults to `{ serviceName: "mailer" }`
|
|
38
|
+
*/
|
|
39
|
+
constructor(config?: MemoryMailConfig);
|
|
40
|
+
/**
|
|
41
|
+
* "Send" an email by storing it in memory.
|
|
42
|
+
*
|
|
43
|
+
* All recipients (to, cc, bcc) are marked as accepted.
|
|
44
|
+
* A deterministic messageId is generated for test predictability.
|
|
45
|
+
*
|
|
46
|
+
* @param message - The email message to store
|
|
47
|
+
* @returns Result with all recipients in accepted list
|
|
48
|
+
*/
|
|
49
|
+
send(message: MailMessage): Promise<MailResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Get all sent messages (for test assertions).
|
|
52
|
+
*
|
|
53
|
+
* Returns a shallow copy of the internal array to prevent
|
|
54
|
+
* external mutation of the stored data.
|
|
55
|
+
*
|
|
56
|
+
* @returns Array of all sent message entries (message + result)
|
|
57
|
+
*/
|
|
58
|
+
getSentMessages(): SentMailEntry[];
|
|
59
|
+
/**
|
|
60
|
+
* Get the last sent message (convenience for single-email tests).
|
|
61
|
+
*
|
|
62
|
+
* @returns The most recently sent entry, or undefined if no messages sent
|
|
63
|
+
*/
|
|
64
|
+
getLastMessage(): SentMailEntry | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Clear all stored messages.
|
|
67
|
+
*
|
|
68
|
+
* Useful for resetting state between test cases.
|
|
69
|
+
*/
|
|
70
|
+
clear(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Health check — always returns true.
|
|
73
|
+
*
|
|
74
|
+
* The memory provider has no external dependencies,
|
|
75
|
+
* so it's always "healthy".
|
|
76
|
+
*/
|
|
77
|
+
health(): Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Graceful shutdown — clears all stored messages.
|
|
80
|
+
*
|
|
81
|
+
* Releases the in-memory message store.
|
|
82
|
+
*/
|
|
83
|
+
shutdown(): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=memory-mail-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-mail-provider.d.ts","sourceRoot":"","sources":["../src/memory-mail-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE5E,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC1B,uDAAuD;IACvD,OAAO,EAAE,WAAW,CAAC;IACrB,sCAAsC;IACtC,MAAM,EAAE,UAAU,CAAC;CACtB;AAED,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,0CAA0C;IAC1C,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAM;IAEzC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,gBAAgB;IAIrC;;;;;;;;OAQG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAwBrD;;;;;;;OAOG;IACH,eAAe,IAAI,aAAa,EAAE;IAIlC;;;;OAIG;IACH,cAAc,IAAI,aAAa,GAAG,SAAS;IAM3C;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory mail provider for testing.
|
|
3
|
+
*
|
|
4
|
+
* Stores all sent messages in an array that can be queried for test assertions.
|
|
5
|
+
* Does not actually send any emails — purely for development and testing use.
|
|
6
|
+
*
|
|
7
|
+
* Provides helper methods for test assertions:
|
|
8
|
+
* - `getSentMessages()` — returns all sent messages (as a copy)
|
|
9
|
+
* - `getLastMessage()` — returns the most recently sent message
|
|
10
|
+
* - `clear()` — empties the stored messages
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const mailer = new MemoryMailProvider();
|
|
15
|
+
* await mailer.send({ from: "a@b.com", to: "c@d.com", subject: "Hi", text: "Hello" });
|
|
16
|
+
*
|
|
17
|
+
* const sent = mailer.getSentMessages();
|
|
18
|
+
* expect(sent).toHaveLength(1);
|
|
19
|
+
* expect(sent[0].message.subject).toBe("Hi");
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { MailProvider } from "./abstract-mail-provider.js";
|
|
23
|
+
export class MemoryMailProvider extends MailProvider {
|
|
24
|
+
/** Internal store of all sent messages */
|
|
25
|
+
messages = [];
|
|
26
|
+
/**
|
|
27
|
+
* Create a new in-memory mail provider.
|
|
28
|
+
*
|
|
29
|
+
* @param config - Optional config; defaults to `{ serviceName: "mailer" }`
|
|
30
|
+
*/
|
|
31
|
+
constructor(config) {
|
|
32
|
+
super(config ?? {});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* "Send" an email by storing it in memory.
|
|
36
|
+
*
|
|
37
|
+
* All recipients (to, cc, bcc) are marked as accepted.
|
|
38
|
+
* A deterministic messageId is generated for test predictability.
|
|
39
|
+
*
|
|
40
|
+
* @param message - The email message to store
|
|
41
|
+
* @returns Result with all recipients in accepted list
|
|
42
|
+
*/
|
|
43
|
+
async send(message) {
|
|
44
|
+
// Normalize all recipient fields to arrays for consistent result format
|
|
45
|
+
const toArray = Array.isArray(message.to) ? message.to : [message.to];
|
|
46
|
+
const ccArray = message.cc
|
|
47
|
+
? Array.isArray(message.cc)
|
|
48
|
+
? message.cc
|
|
49
|
+
: [message.cc]
|
|
50
|
+
: [];
|
|
51
|
+
const bccArray = message.bcc
|
|
52
|
+
? Array.isArray(message.bcc)
|
|
53
|
+
? message.bcc
|
|
54
|
+
: [message.bcc]
|
|
55
|
+
: [];
|
|
56
|
+
const result = {
|
|
57
|
+
accepted: [...toArray, ...ccArray, ...bccArray],
|
|
58
|
+
rejected: [],
|
|
59
|
+
messageId: `<memory-${Date.now()}-${this.messages.length}@test>`,
|
|
60
|
+
};
|
|
61
|
+
this.messages.push({ message, result });
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get all sent messages (for test assertions).
|
|
66
|
+
*
|
|
67
|
+
* Returns a shallow copy of the internal array to prevent
|
|
68
|
+
* external mutation of the stored data.
|
|
69
|
+
*
|
|
70
|
+
* @returns Array of all sent message entries (message + result)
|
|
71
|
+
*/
|
|
72
|
+
getSentMessages() {
|
|
73
|
+
return [...this.messages];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get the last sent message (convenience for single-email tests).
|
|
77
|
+
*
|
|
78
|
+
* @returns The most recently sent entry, or undefined if no messages sent
|
|
79
|
+
*/
|
|
80
|
+
getLastMessage() {
|
|
81
|
+
return this.messages.length > 0
|
|
82
|
+
? this.messages[this.messages.length - 1]
|
|
83
|
+
: undefined;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Clear all stored messages.
|
|
87
|
+
*
|
|
88
|
+
* Useful for resetting state between test cases.
|
|
89
|
+
*/
|
|
90
|
+
clear() {
|
|
91
|
+
this.messages = [];
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Health check — always returns true.
|
|
95
|
+
*
|
|
96
|
+
* The memory provider has no external dependencies,
|
|
97
|
+
* so it's always "healthy".
|
|
98
|
+
*/
|
|
99
|
+
async health() {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Graceful shutdown — clears all stored messages.
|
|
104
|
+
*
|
|
105
|
+
* Releases the in-memory message store.
|
|
106
|
+
*/
|
|
107
|
+
async shutdown() {
|
|
108
|
+
this.clear();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=memory-mail-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-mail-provider.js","sourceRoot":"","sources":["../src/memory-mail-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAW3D,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAChD,0CAA0C;IAChC,QAAQ,GAAoB,EAAE,CAAC;IAEzC;;;;OAIG;IACH,YAAY,MAAyB;QACjC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC3B,wEAAwE;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,CAAC,CAAC,OAAO,CAAC,EAAE;gBACZ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG;YACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;gBACxB,CAAC,CAAC,OAAO,CAAC,GAAG;gBACb,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YACnB,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,MAAM,GAAe;YACvB,QAAQ,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC;YAC/C,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ;SACnE,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,eAAe;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,cAAc;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMTP mail provider using nodemailer.
|
|
3
|
+
*
|
|
4
|
+
* Wraps nodemailer's transport to provide a clean MailProvider interface
|
|
5
|
+
* with health check and graceful shutdown support. The underlying transport
|
|
6
|
+
* handles connection pooling internally.
|
|
7
|
+
*
|
|
8
|
+
* Key design decisions vs. v3:
|
|
9
|
+
* - `secure` defaults to false (modern SMTP uses STARTTLS on port 587)
|
|
10
|
+
* - No hardcoded `tls.rejectUnauthorized: false` — configurable via `tls` option
|
|
11
|
+
* - `transporter.verify()` for health check — tests SMTP connection without sending
|
|
12
|
+
* - `transporter.close()` for graceful shutdown — closes the connection pool
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const mailer = new SmtpMailProvider({
|
|
17
|
+
* host: "smtp.example.com",
|
|
18
|
+
* port: 587,
|
|
19
|
+
* secure: false,
|
|
20
|
+
* auth: { user: "user@example.com", pass: "secret" },
|
|
21
|
+
* });
|
|
22
|
+
* await mailer.send({ from: "a@b.com", to: "c@d.com", subject: "Hi", text: "Hello" });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import nodemailer from "nodemailer";
|
|
26
|
+
import { MailProvider } from "./abstract-mail-provider.js";
|
|
27
|
+
import type { MailMessage, MailResult, SmtpMailConfig } from "./types.js";
|
|
28
|
+
export declare class SmtpMailProvider extends MailProvider {
|
|
29
|
+
/** Nodemailer transport instance — handles SMTP connection pooling */
|
|
30
|
+
protected transporter: nodemailer.Transporter;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new SMTP mail provider.
|
|
33
|
+
*
|
|
34
|
+
* @param config - SMTP connection settings (host, port, auth, TLS options)
|
|
35
|
+
*/
|
|
36
|
+
constructor(config: SmtpMailConfig);
|
|
37
|
+
/**
|
|
38
|
+
* Send an email via SMTP.
|
|
39
|
+
*
|
|
40
|
+
* Converts our MailMessage to nodemailer's format and sends it.
|
|
41
|
+
* Array recipients are joined with commas as nodemailer expects.
|
|
42
|
+
*
|
|
43
|
+
* @param message - The email message to send
|
|
44
|
+
* @returns Result with accepted/rejected addresses and message ID
|
|
45
|
+
* @throws Error on SMTP connection failure, auth failure, or send rejection
|
|
46
|
+
*/
|
|
47
|
+
send(message: MailMessage): Promise<MailResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Health check — verifies the SMTP connection is alive.
|
|
50
|
+
*
|
|
51
|
+
* Uses nodemailer's `verify()` which performs an EHLO/HELO handshake
|
|
52
|
+
* with the server without sending any email.
|
|
53
|
+
*
|
|
54
|
+
* @returns true if SMTP server is reachable and accepts connections
|
|
55
|
+
*/
|
|
56
|
+
health(): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Graceful shutdown — closes the nodemailer transport.
|
|
59
|
+
*
|
|
60
|
+
* Releases the underlying TCP connection pool. After calling this,
|
|
61
|
+
* subsequent `send()` calls will fail.
|
|
62
|
+
*/
|
|
63
|
+
shutdown(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=smtp-mail-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smtp-mail-provider.d.ts","sourceRoot":"","sources":["../src/smtp-mail-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE1E,qBAAa,gBAAiB,SAAQ,YAAY;IAC9C,sEAAsE;IACtE,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC;IAE9C;;;;OAIG;gBACS,MAAM,EAAE,cAAc;IAclC;;;;;;;;;OASG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA+BrD;;;;;;;OAOG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMTP mail provider using nodemailer.
|
|
3
|
+
*
|
|
4
|
+
* Wraps nodemailer's transport to provide a clean MailProvider interface
|
|
5
|
+
* with health check and graceful shutdown support. The underlying transport
|
|
6
|
+
* handles connection pooling internally.
|
|
7
|
+
*
|
|
8
|
+
* Key design decisions vs. v3:
|
|
9
|
+
* - `secure` defaults to false (modern SMTP uses STARTTLS on port 587)
|
|
10
|
+
* - No hardcoded `tls.rejectUnauthorized: false` — configurable via `tls` option
|
|
11
|
+
* - `transporter.verify()` for health check — tests SMTP connection without sending
|
|
12
|
+
* - `transporter.close()` for graceful shutdown — closes the connection pool
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const mailer = new SmtpMailProvider({
|
|
17
|
+
* host: "smtp.example.com",
|
|
18
|
+
* port: 587,
|
|
19
|
+
* secure: false,
|
|
20
|
+
* auth: { user: "user@example.com", pass: "secret" },
|
|
21
|
+
* });
|
|
22
|
+
* await mailer.send({ from: "a@b.com", to: "c@d.com", subject: "Hi", text: "Hello" });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import nodemailer from "nodemailer";
|
|
26
|
+
import { MailProvider } from "./abstract-mail-provider.js";
|
|
27
|
+
export class SmtpMailProvider extends MailProvider {
|
|
28
|
+
/** Nodemailer transport instance — handles SMTP connection pooling */
|
|
29
|
+
transporter;
|
|
30
|
+
/**
|
|
31
|
+
* Create a new SMTP mail provider.
|
|
32
|
+
*
|
|
33
|
+
* @param config - SMTP connection settings (host, port, auth, TLS options)
|
|
34
|
+
*/
|
|
35
|
+
constructor(config) {
|
|
36
|
+
super(config);
|
|
37
|
+
// Create nodemailer transport with provided SMTP settings.
|
|
38
|
+
// secure defaults to false — most modern SMTP servers use STARTTLS on port 587.
|
|
39
|
+
this.transporter = nodemailer.createTransport({
|
|
40
|
+
host: config.host,
|
|
41
|
+
port: config.port,
|
|
42
|
+
secure: config.secure ?? false,
|
|
43
|
+
auth: config.auth,
|
|
44
|
+
tls: config.tls,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Send an email via SMTP.
|
|
49
|
+
*
|
|
50
|
+
* Converts our MailMessage to nodemailer's format and sends it.
|
|
51
|
+
* Array recipients are joined with commas as nodemailer expects.
|
|
52
|
+
*
|
|
53
|
+
* @param message - The email message to send
|
|
54
|
+
* @returns Result with accepted/rejected addresses and message ID
|
|
55
|
+
* @throws Error on SMTP connection failure, auth failure, or send rejection
|
|
56
|
+
*/
|
|
57
|
+
async send(message) {
|
|
58
|
+
const info = await this.transporter.sendMail({
|
|
59
|
+
from: message.from,
|
|
60
|
+
to: Array.isArray(message.to) ? message.to.join(", ") : message.to,
|
|
61
|
+
cc: message.cc
|
|
62
|
+
? Array.isArray(message.cc)
|
|
63
|
+
? message.cc.join(", ")
|
|
64
|
+
: message.cc
|
|
65
|
+
: undefined,
|
|
66
|
+
bcc: message.bcc
|
|
67
|
+
? Array.isArray(message.bcc)
|
|
68
|
+
? message.bcc.join(", ")
|
|
69
|
+
: message.bcc
|
|
70
|
+
: undefined,
|
|
71
|
+
subject: message.subject,
|
|
72
|
+
text: message.text,
|
|
73
|
+
html: message.html,
|
|
74
|
+
attachments: message.attachments?.map((a) => ({
|
|
75
|
+
filename: a.filename,
|
|
76
|
+
content: a.content,
|
|
77
|
+
contentType: a.contentType,
|
|
78
|
+
})),
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
accepted: Array.isArray(info.accepted) ? info.accepted.map(String) : [],
|
|
82
|
+
rejected: Array.isArray(info.rejected) ? info.rejected.map(String) : [],
|
|
83
|
+
messageId: info.messageId,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Health check — verifies the SMTP connection is alive.
|
|
88
|
+
*
|
|
89
|
+
* Uses nodemailer's `verify()` which performs an EHLO/HELO handshake
|
|
90
|
+
* with the server without sending any email.
|
|
91
|
+
*
|
|
92
|
+
* @returns true if SMTP server is reachable and accepts connections
|
|
93
|
+
*/
|
|
94
|
+
async health() {
|
|
95
|
+
try {
|
|
96
|
+
await this.transporter.verify();
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Graceful shutdown — closes the nodemailer transport.
|
|
105
|
+
*
|
|
106
|
+
* Releases the underlying TCP connection pool. After calling this,
|
|
107
|
+
* subsequent `send()` calls will fail.
|
|
108
|
+
*/
|
|
109
|
+
async shutdown() {
|
|
110
|
+
this.transporter.close();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=smtp-mail-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smtp-mail-provider.js","sourceRoot":"","sources":["../src/smtp-mail-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAC9C,sEAAsE;IAC5D,WAAW,CAAyB;IAE9C;;;;OAIG;IACH,YAAY,MAAsB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,2DAA2D;QAC3D,gFAAgF;QAChF,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC;YAC1C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;YAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;SAClB,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YACzC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YAClE,EAAE,EAAE,OAAO,CAAC,EAAE;gBACV,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;oBACvB,CAAC,CAAC,OAAO,CAAC,EAAE;gBAChB,CAAC,CAAC,SAAS;YACf,GAAG,EAAE,OAAO,CAAC,GAAG;gBACZ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;oBACxB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBACxB,CAAC,CAAC,OAAO,CAAC,GAAG;gBACjB,CAAC,CAAC,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1C,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,WAAW,EAAE,CAAC,CAAC,WAAW;aAC7B,CAAC,CAAC;SACN,CAAC,CAAC;QAEH,OAAO;YACH,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YACvE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YACvE,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;IACN,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM;QACR,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACJ"}
|