@digitaldefiance/node-express-suite 3.7.3 → 3.7.5
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 +21 -0
- package/package.json +4 -5
- package/src/__tests__/fixtures/{index.d.ts → index.ts} +0 -1
- package/src/__tests__/fixtures/model-mocks.mock.ts +164 -0
- package/src/__tests__/helpers/application.mock.ts +89 -0
- package/src/__tests__/helpers/{index.d.ts → index.ts} +0 -1
- package/src/__tests__/helpers/setup-test-env.ts +202 -0
- package/src/__tests__/{index.d.ts → index.ts} +0 -1
- package/src/application-base.ts +548 -0
- package/src/application-concrete.ts +62 -0
- package/src/application.ts +330 -0
- package/src/backup-code.ts +348 -0
- package/src/builders/application-builder.ts +147 -0
- package/src/builders/{index.d.ts → index.ts} +0 -1
- package/src/constants.ts +89 -0
- package/src/container/{index.d.ts → index.ts} +0 -1
- package/src/container/service-container.ts +85 -0
- package/src/container/service-definitions.ts +23 -0
- package/src/controllers/base.ts +512 -0
- package/src/controllers/{index.d.ts → index.ts} +0 -1
- package/src/controllers/user.ts +1734 -0
- package/src/database/database-initializer.ts +13 -0
- package/src/database/{index.d.ts → index.ts} +0 -1
- package/src/decorators/base-controller.ts +91 -0
- package/src/decorators/controller.ts +152 -0
- package/src/decorators/{index.d.ts → index.ts} +0 -1
- package/src/decorators/zod-validation.ts +64 -0
- package/src/defaults.ts +259 -0
- package/src/documents/base.ts +17 -0
- package/src/documents/email-token.ts +20 -0
- package/src/documents/{index.d.ts → index.ts} +0 -1
- package/src/documents/mnemonic.ts +20 -0
- package/src/documents/role.ts +19 -0
- package/src/documents/used-direct-login-token.ts +18 -0
- package/src/documents/user-role.ts +20 -0
- package/src/documents/user.ts +20 -0
- package/src/enumerations/base-model-name.ts +47 -0
- package/src/enumerations/{index.d.ts → index.ts} +0 -1
- package/src/enumerations/length-encoding-type.ts +16 -0
- package/src/enumerations/schema-collection.ts +39 -0
- package/src/enumerations/symmetric-error-type.ts +13 -0
- package/src/environment.ts +859 -0
- package/src/errors/express-validation.ts +38 -0
- package/src/errors/{index.d.ts → index.ts} +0 -1
- package/src/errors/invalid-backup-code-version.ts +30 -0
- package/src/errors/invalid-jwt-token.ts +24 -0
- package/src/errors/invalid-model.ts +24 -0
- package/src/errors/invalid-new-password.ts +33 -0
- package/src/errors/invalid-password.ts +28 -0
- package/src/errors/missing-validated-data.ts +55 -0
- package/src/errors/mnemonic-or-password-required.ts +26 -0
- package/src/errors/model-not-registered.ts +24 -0
- package/src/errors/mongoose-validation.ts +56 -0
- package/src/errors/symmetric.ts +53 -0
- package/src/errors/token-expired.ts +24 -0
- package/src/get-language.ts +64 -0
- package/src/get-timezone.ts +76 -0
- package/src/{index.d.ts → index.ts} +44 -2
- package/src/interfaces/api-error-response.ts +15 -0
- package/src/interfaces/api-express-validation-error-response.ts +17 -0
- package/src/interfaces/api-message-response.ts +12 -0
- package/src/interfaces/api-mongo-validation-error-response.ts +17 -0
- package/src/interfaces/api-responses/backup-codes-response.ts +15 -0
- package/src/interfaces/api-responses/challenge-response.ts +17 -0
- package/src/interfaces/api-responses/code-count-response.ts +12 -0
- package/src/interfaces/api-responses/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/api-responses/login-response.ts +18 -0
- package/src/interfaces/api-responses/mnemonic-response.ts +15 -0
- package/src/interfaces/api-responses/registration-response.ts +17 -0
- package/src/interfaces/api-responses/request-user-response.ts +16 -0
- package/src/interfaces/api-responses/user-settings-response.ts +19 -0
- package/src/interfaces/application.ts +40 -0
- package/src/interfaces/backend-objects/email-token.ts +18 -0
- package/src/interfaces/backend-objects/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/backend-objects/request-user.ts +19 -0
- package/src/interfaces/backend-objects/role.ts +18 -0
- package/src/interfaces/backend-objects/user.ts +18 -0
- package/src/interfaces/checksum-config.ts +15 -0
- package/src/interfaces/checksum-consts.ts +23 -0
- package/src/interfaces/constants.ts +114 -0
- package/src/interfaces/controller-config.ts +54 -0
- package/src/interfaces/create-user-basics.ts +24 -0
- package/src/interfaces/csp-config.ts +32 -0
- package/src/interfaces/csp-definition.ts +71 -0
- package/src/interfaces/db-init-result.ts +17 -0
- package/src/interfaces/deep-partial.ts +14 -0
- package/src/interfaces/discriminator-collections.ts +21 -0
- package/src/interfaces/email-service.ts +26 -0
- package/src/interfaces/environment-mongo.ts +86 -0
- package/src/interfaces/environment.ts +191 -0
- package/src/interfaces/failable-result.ts +20 -0
- package/src/interfaces/fec-consts.ts +14 -0
- package/src/interfaces/flexible-csp.ts +35 -0
- package/src/interfaces/handleable-error-options.ts +19 -0
- package/src/interfaces/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/jwt-consts.ts +33 -0
- package/src/interfaces/jwt-sign-response.ts +31 -0
- package/src/interfaces/models/email-token.ts +13 -0
- package/src/interfaces/models/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/models/mnemonic.ts +14 -0
- package/src/interfaces/models/role.ts +13 -0
- package/src/interfaces/models/token-role.ts +23 -0
- package/src/interfaces/models/used-direct-login-token.ts +21 -0
- package/src/interfaces/models/user-role.ts +23 -0
- package/src/interfaces/models/user.ts +30 -0
- package/src/interfaces/mongo-errors.ts +14 -0
- package/src/interfaces/request-user.ts +80 -0
- package/src/interfaces/required-string-keys.ts +33 -0
- package/src/interfaces/schema.ts +43 -0
- package/src/interfaces/server-init-result.ts +48 -0
- package/src/interfaces/status-code-response.ts +20 -0
- package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
- package/src/interfaces/symmetric-encryption-results.js.map +1 -1
- package/src/interfaces/symmetric-encryption-results.ts +15 -0
- package/src/interfaces/test-environment.ts +23 -0
- package/src/interfaces/token-response.ts +16 -0
- package/src/middleware-utils.ts +138 -0
- package/src/middlewares/authenticate-crypto.ts +237 -0
- package/src/middlewares/authenticate-token.ts +165 -0
- package/src/middlewares/cleanup-crypto.ts +47 -0
- package/src/middlewares/{index.d.ts → index.ts} +0 -1
- package/src/middlewares/set-global-context-language.ts +38 -0
- package/src/model-registry.ts +142 -0
- package/src/models/email-token.ts +49 -0
- package/src/models/{index.d.ts → index.ts} +0 -1
- package/src/models/mnemonic.ts +42 -0
- package/src/models/role.ts +38 -0
- package/src/models/used-direct-login-token.ts +49 -0
- package/src/models/user-role.ts +40 -0
- package/src/models/user.ts +42 -0
- package/src/pipeline/{index.d.ts → index.ts} +0 -1
- package/src/pipeline/pipeline-builder.ts +27 -0
- package/src/plugins/{index.d.ts → index.ts} +0 -1
- package/src/plugins/plugin-interface.ts +19 -0
- package/src/plugins/plugin-manager.ts +53 -0
- package/src/registry/email-service-registry.ts +76 -0
- package/src/registry/{index.d.ts → index.ts} +0 -1
- package/src/responses/{index.d.ts → index.ts} +0 -1
- package/src/responses/response-builder.ts +166 -0
- package/src/routers/api.ts +233 -0
- package/src/routers/app.ts +395 -0
- package/src/routers/base.ts +34 -0
- package/src/routers/{index.d.ts → index.ts} +0 -1
- package/src/routers/router-config.ts +34 -0
- package/src/routing/index.ts +1 -0
- package/src/routing/route-builder.ts +214 -0
- package/src/schemas/email-token.ts +112 -0
- package/src/schemas/{index.d.ts → index.ts} +0 -1
- package/src/schemas/mnemonic.ts +48 -0
- package/src/schemas/role.ts +153 -0
- package/src/schemas/schema.ts +185 -0
- package/src/schemas/used-direct-login-token.ts +58 -0
- package/src/schemas/user-role.ts +93 -0
- package/src/schemas/user.ts +244 -0
- package/src/services/backup-code.ts +327 -0
- package/src/services/base.ts +46 -0
- package/src/services/checksum.ts +189 -0
- package/src/services/database-initialization.ts +1653 -0
- package/src/services/db-init-cache.ts +28 -0
- package/src/services/direct-login-token.ts +83 -0
- package/src/services/dummy-email-service.ts +43 -0
- package/src/services/fec-usage-example.ts +123 -0
- package/src/services/fec.ts +399 -0
- package/src/services/{index.d.ts → index.ts} +0 -2
- package/src/services/jwt.ts +146 -0
- package/src/services/key-wrapping.ts +528 -0
- package/src/services/mnemonic.ts +174 -0
- package/src/services/request-user.ts +127 -0
- package/src/services/role.ts +417 -0
- package/src/services/symmetric.ts +164 -0
- package/src/services/system-user.ts +87 -0
- package/src/services/user.ts +2324 -0
- package/src/services/xor.ts +39 -0
- package/src/testing.ts +9 -0
- package/src/transactions/{index.d.ts → index.ts} +0 -1
- package/src/transactions/transaction-manager.ts +63 -0
- package/src/types/app-config.ts +36 -0
- package/src/types/controller-config.ts +28 -0
- package/src/types/{environment-variables.d.ts → environment-variables.ts} +32 -5
- package/src/types/{index.d.ts → index.ts} +0 -1
- package/src/types/{mongoose-helpers.d.ts → mongoose-helpers.ts} +8 -2
- package/src/types/mongoose-override.d.ts +1 -0
- package/src/types/mongoose.d.ts +1 -0
- package/src/types.ts +189 -0
- package/src/utils.ts +1116 -0
- package/src/validation/{index.d.ts → index.ts} +0 -1
- package/src/validation/validation-builder.ts +155 -0
- package/src/__tests__/fixtures/index.d.ts.map +0 -1
- package/src/__tests__/fixtures/index.js +0 -5
- package/src/__tests__/fixtures/index.js.map +0 -1
- package/src/__tests__/fixtures/model-mocks.mock.d.ts +0 -12
- package/src/__tests__/fixtures/model-mocks.mock.d.ts.map +0 -1
- package/src/__tests__/fixtures/model-mocks.mock.js +0 -102
- package/src/__tests__/fixtures/model-mocks.mock.js.map +0 -1
- package/src/__tests__/helpers/application.mock.d.ts +0 -8
- package/src/__tests__/helpers/application.mock.d.ts.map +0 -1
- package/src/__tests__/helpers/application.mock.js +0 -77
- package/src/__tests__/helpers/application.mock.js.map +0 -1
- package/src/__tests__/helpers/index.d.ts.map +0 -1
- package/src/__tests__/helpers/index.js +0 -7
- package/src/__tests__/helpers/index.js.map +0 -1
- package/src/__tests__/helpers/setup-test-env.d.ts +0 -12
- package/src/__tests__/helpers/setup-test-env.d.ts.map +0 -1
- package/src/__tests__/helpers/setup-test-env.js +0 -121
- package/src/__tests__/helpers/setup-test-env.js.map +0 -1
- package/src/__tests__/index.d.ts.map +0 -1
- package/src/__tests__/index.js +0 -6
- package/src/__tests__/index.js.map +0 -1
- package/src/application-base.d.ts +0 -123
- package/src/application-base.d.ts.map +0 -1
- package/src/application-base.js +0 -359
- package/src/application-base.js.map +0 -1
- package/src/application-concrete.d.ts +0 -13
- package/src/application-concrete.d.ts.map +0 -1
- package/src/application-concrete.js +0 -21
- package/src/application-concrete.js.map +0 -1
- package/src/application.d.ts +0 -29
- package/src/application.d.ts.map +0 -1
- package/src/application.js +0 -167
- package/src/application.js.map +0 -1
- package/src/backup-code.d.ts +0 -67
- package/src/backup-code.d.ts.map +0 -1
- package/src/backup-code.js +0 -238
- package/src/backup-code.js.map +0 -1
- package/src/builders/application-builder.d.ts +0 -35
- package/src/builders/application-builder.d.ts.map +0 -1
- package/src/builders/application-builder.js +0 -64
- package/src/builders/application-builder.js.map +0 -1
- package/src/builders/index.d.ts.map +0 -1
- package/src/builders/index.js +0 -5
- package/src/builders/index.js.map +0 -1
- package/src/constants.d.ts +0 -16
- package/src/constants.d.ts.map +0 -1
- package/src/constants.js +0 -58
- package/src/constants.js.map +0 -1
- package/src/container/index.d.ts.map +0 -1
- package/src/container/index.js +0 -6
- package/src/container/index.js.map +0 -1
- package/src/container/service-container.d.ts +0 -11
- package/src/container/service-container.d.ts.map +0 -1
- package/src/container/service-container.js +0 -38
- package/src/container/service-container.js.map +0 -1
- package/src/container/service-definitions.d.ts +0 -11
- package/src/container/service-definitions.d.ts.map +0 -1
- package/src/container/service-definitions.js +0 -13
- package/src/container/service-definitions.js.map +0 -1
- package/src/controllers/base.d.ts +0 -67
- package/src/controllers/base.d.ts.map +0 -1
- package/src/controllers/base.js +0 -305
- package/src/controllers/base.js.map +0 -1
- package/src/controllers/index.d.ts.map +0 -1
- package/src/controllers/index.js +0 -6
- package/src/controllers/index.js.map +0 -1
- package/src/controllers/user.d.ts +0 -49
- package/src/controllers/user.d.ts.map +0 -1
- package/src/controllers/user.js +0 -919
- package/src/controllers/user.js.map +0 -1
- package/src/database/database-initializer.d.ts +0 -7
- package/src/database/database-initializer.d.ts.map +0 -1
- package/src/database/database-initializer.js +0 -3
- package/src/database/database-initializer.js.map +0 -1
- package/src/database/index.d.ts.map +0 -1
- package/src/database/index.js +0 -5
- package/src/database/index.js.map +0 -1
- package/src/decorators/base-controller.d.ts +0 -11
- package/src/decorators/base-controller.d.ts.map +0 -1
- package/src/decorators/base-controller.js +0 -60
- package/src/decorators/base-controller.js.map +0 -1
- package/src/decorators/controller.d.ts +0 -38
- package/src/decorators/controller.d.ts.map +0 -1
- package/src/decorators/controller.js +0 -68
- package/src/decorators/controller.js.map +0 -1
- package/src/decorators/index.d.ts.map +0 -1
- package/src/decorators/index.js +0 -7
- package/src/decorators/index.js.map +0 -1
- package/src/decorators/zod-validation.d.ts +0 -5
- package/src/decorators/zod-validation.d.ts.map +0 -1
- package/src/decorators/zod-validation.js +0 -48
- package/src/decorators/zod-validation.js.map +0 -1
- package/src/defaults.d.ts +0 -7
- package/src/defaults.d.ts.map +0 -1
- package/src/defaults.js +0 -205
- package/src/defaults.js.map +0 -1
- package/src/documents/base.d.ts +0 -4
- package/src/documents/base.d.ts.map +0 -1
- package/src/documents/base.js +0 -3
- package/src/documents/base.js.map +0 -1
- package/src/documents/email-token.d.ts +0 -8
- package/src/documents/email-token.d.ts.map +0 -1
- package/src/documents/email-token.js +0 -3
- package/src/documents/email-token.js.map +0 -1
- package/src/documents/index.d.ts.map +0 -1
- package/src/documents/index.js +0 -3
- package/src/documents/index.js.map +0 -1
- package/src/documents/mnemonic.d.ts +0 -8
- package/src/documents/mnemonic.d.ts.map +0 -1
- package/src/documents/mnemonic.js +0 -3
- package/src/documents/mnemonic.js.map +0 -1
- package/src/documents/role.d.ts +0 -8
- package/src/documents/role.d.ts.map +0 -1
- package/src/documents/role.js +0 -3
- package/src/documents/role.js.map +0 -1
- package/src/documents/used-direct-login-token.d.ts +0 -5
- package/src/documents/used-direct-login-token.d.ts.map +0 -1
- package/src/documents/used-direct-login-token.js +0 -3
- package/src/documents/used-direct-login-token.js.map +0 -1
- package/src/documents/user-role.d.ts +0 -8
- package/src/documents/user-role.d.ts.map +0 -1
- package/src/documents/user-role.js +0 -3
- package/src/documents/user-role.js.map +0 -1
- package/src/documents/user.d.ts +0 -8
- package/src/documents/user.d.ts.map +0 -1
- package/src/documents/user.js +0 -3
- package/src/documents/user.js.map +0 -1
- package/src/enumerations/base-model-name.d.ts +0 -38
- package/src/enumerations/base-model-name.d.ts.map +0 -1
- package/src/enumerations/base-model-name.js +0 -34
- package/src/enumerations/base-model-name.js.map +0 -1
- package/src/enumerations/index.d.ts.map +0 -1
- package/src/enumerations/index.js +0 -8
- package/src/enumerations/index.js.map +0 -1
- package/src/enumerations/length-encoding-type.d.ts +0 -7
- package/src/enumerations/length-encoding-type.d.ts.map +0 -1
- package/src/enumerations/length-encoding-type.js +0 -11
- package/src/enumerations/length-encoding-type.js.map +0 -1
- package/src/enumerations/schema-collection.d.ts +0 -34
- package/src/enumerations/schema-collection.d.ts.map +0 -1
- package/src/enumerations/schema-collection.js +0 -38
- package/src/enumerations/schema-collection.js.map +0 -1
- package/src/enumerations/symmetric-error-type.d.ts +0 -5
- package/src/enumerations/symmetric-error-type.d.ts.map +0 -1
- package/src/enumerations/symmetric-error-type.js +0 -9
- package/src/enumerations/symmetric-error-type.js.map +0 -1
- package/src/environment.d.ts +0 -189
- package/src/environment.d.ts.map +0 -1
- package/src/environment.js +0 -641
- package/src/environment.js.map +0 -1
- package/src/errors/express-validation.d.ts +0 -9
- package/src/errors/express-validation.d.ts.map +0 -1
- package/src/errors/express-validation.js +0 -18
- package/src/errors/express-validation.js.map +0 -1
- package/src/errors/index.d.ts.map +0 -1
- package/src/errors/index.js +0 -16
- package/src/errors/index.js.map +0 -1
- package/src/errors/invalid-backup-code-version.d.ts +0 -6
- package/src/errors/invalid-backup-code-version.d.ts.map +0 -1
- package/src/errors/invalid-backup-code-version.js +0 -16
- package/src/errors/invalid-backup-code-version.js.map +0 -1
- package/src/errors/invalid-jwt-token.d.ts +0 -5
- package/src/errors/invalid-jwt-token.d.ts.map +0 -1
- package/src/errors/invalid-jwt-token.js +0 -12
- package/src/errors/invalid-jwt-token.js.map +0 -1
- package/src/errors/invalid-model.d.ts +0 -6
- package/src/errors/invalid-model.d.ts.map +0 -1
- package/src/errors/invalid-model.js +0 -14
- package/src/errors/invalid-model.js.map +0 -1
- package/src/errors/invalid-new-password.d.ts +0 -5
- package/src/errors/invalid-new-password.d.ts.map +0 -1
- package/src/errors/invalid-new-password.js +0 -14
- package/src/errors/invalid-new-password.js.map +0 -1
- package/src/errors/invalid-password.d.ts +0 -5
- package/src/errors/invalid-password.d.ts.map +0 -1
- package/src/errors/invalid-password.js +0 -14
- package/src/errors/invalid-password.js.map +0 -1
- package/src/errors/missing-validated-data.d.ts +0 -7
- package/src/errors/missing-validated-data.d.ts.map +0 -1
- package/src/errors/missing-validated-data.js +0 -36
- package/src/errors/missing-validated-data.js.map +0 -1
- package/src/errors/mnemonic-or-password-required.d.ts +0 -5
- package/src/errors/mnemonic-or-password-required.d.ts.map +0 -1
- package/src/errors/mnemonic-or-password-required.js +0 -14
- package/src/errors/mnemonic-or-password-required.js.map +0 -1
- package/src/errors/model-not-registered.d.ts +0 -6
- package/src/errors/model-not-registered.d.ts.map +0 -1
- package/src/errors/model-not-registered.js +0 -14
- package/src/errors/model-not-registered.js.map +0 -1
- package/src/errors/mongoose-validation.d.ts +0 -12
- package/src/errors/mongoose-validation.d.ts.map +0 -1
- package/src/errors/mongoose-validation.js +0 -17
- package/src/errors/mongoose-validation.js.map +0 -1
- package/src/errors/symmetric.d.ts +0 -8
- package/src/errors/symmetric.d.ts.map +0 -1
- package/src/errors/symmetric.js +0 -22
- package/src/errors/symmetric.js.map +0 -1
- package/src/errors/token-expired.d.ts +0 -5
- package/src/errors/token-expired.d.ts.map +0 -1
- package/src/errors/token-expired.js +0 -12
- package/src/errors/token-expired.js.map +0 -1
- package/src/get-language.d.ts +0 -2
- package/src/get-language.d.ts.map +0 -1
- package/src/get-language.js +0 -30
- package/src/get-language.js.map +0 -1
- package/src/get-timezone.d.ts +0 -2
- package/src/get-timezone.d.ts.map +0 -1
- package/src/get-timezone.js +0 -39
- package/src/get-timezone.js.map +0 -1
- package/src/index.d.ts.map +0 -1
- package/src/index.js +0 -80
- package/src/index.js.map +0 -1
- package/src/interfaces/api-error-response.d.ts +0 -5
- package/src/interfaces/api-error-response.d.ts.map +0 -1
- package/src/interfaces/api-error-response.js +0 -3
- package/src/interfaces/api-error-response.js.map +0 -1
- package/src/interfaces/api-express-validation-error-response.d.ts +0 -7
- package/src/interfaces/api-express-validation-error-response.d.ts.map +0 -1
- package/src/interfaces/api-express-validation-error-response.js +0 -3
- package/src/interfaces/api-express-validation-error-response.js.map +0 -1
- package/src/interfaces/api-message-response.d.ts +0 -4
- package/src/interfaces/api-message-response.d.ts.map +0 -1
- package/src/interfaces/api-message-response.js +0 -3
- package/src/interfaces/api-message-response.js.map +0 -1
- package/src/interfaces/api-mongo-validation-error-response.d.ts +0 -6
- package/src/interfaces/api-mongo-validation-error-response.d.ts.map +0 -1
- package/src/interfaces/api-mongo-validation-error-response.js +0 -3
- package/src/interfaces/api-mongo-validation-error-response.js.map +0 -1
- package/src/interfaces/api-responses/backup-codes-response.d.ts +0 -5
- package/src/interfaces/api-responses/backup-codes-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/backup-codes-response.js +0 -3
- package/src/interfaces/api-responses/backup-codes-response.js.map +0 -1
- package/src/interfaces/api-responses/challenge-response.d.ts +0 -6
- package/src/interfaces/api-responses/challenge-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/challenge-response.js +0 -3
- package/src/interfaces/api-responses/challenge-response.js.map +0 -1
- package/src/interfaces/api-responses/code-count-response.d.ts +0 -5
- package/src/interfaces/api-responses/code-count-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/code-count-response.js +0 -3
- package/src/interfaces/api-responses/code-count-response.js.map +0 -1
- package/src/interfaces/api-responses/index.d.ts.map +0 -1
- package/src/interfaces/api-responses/index.js +0 -12
- package/src/interfaces/api-responses/index.js.map +0 -1
- package/src/interfaces/api-responses/login-response.d.ts +0 -8
- package/src/interfaces/api-responses/login-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/login-response.js +0 -3
- package/src/interfaces/api-responses/login-response.js.map +0 -1
- package/src/interfaces/api-responses/mnemonic-response.d.ts +0 -5
- package/src/interfaces/api-responses/mnemonic-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/mnemonic-response.js +0 -3
- package/src/interfaces/api-responses/mnemonic-response.js.map +0 -1
- package/src/interfaces/api-responses/registration-response.d.ts +0 -6
- package/src/interfaces/api-responses/registration-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/registration-response.js +0 -3
- package/src/interfaces/api-responses/registration-response.js.map +0 -1
- package/src/interfaces/api-responses/request-user-response.d.ts +0 -6
- package/src/interfaces/api-responses/request-user-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/request-user-response.js +0 -3
- package/src/interfaces/api-responses/request-user-response.js.map +0 -1
- package/src/interfaces/api-responses/user-settings-response.d.ts +0 -12
- package/src/interfaces/api-responses/user-settings-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/user-settings-response.js +0 -3
- package/src/interfaces/api-responses/user-settings-response.js.map +0 -1
- package/src/interfaces/application.d.ts +0 -17
- package/src/interfaces/application.d.ts.map +0 -1
- package/src/interfaces/application.js +0 -3
- package/src/interfaces/application.js.map +0 -1
- package/src/interfaces/backend-objects/email-token.d.ts +0 -4
- package/src/interfaces/backend-objects/email-token.d.ts.map +0 -1
- package/src/interfaces/backend-objects/email-token.js +0 -3
- package/src/interfaces/backend-objects/email-token.js.map +0 -1
- package/src/interfaces/backend-objects/index.d.ts.map +0 -1
- package/src/interfaces/backend-objects/index.js +0 -8
- package/src/interfaces/backend-objects/index.js.map +0 -1
- package/src/interfaces/backend-objects/request-user.d.ts +0 -5
- package/src/interfaces/backend-objects/request-user.d.ts.map +0 -1
- package/src/interfaces/backend-objects/request-user.js +0 -3
- package/src/interfaces/backend-objects/request-user.js.map +0 -1
- package/src/interfaces/backend-objects/role.d.ts +0 -4
- package/src/interfaces/backend-objects/role.d.ts.map +0 -1
- package/src/interfaces/backend-objects/role.js +0 -3
- package/src/interfaces/backend-objects/role.js.map +0 -1
- package/src/interfaces/backend-objects/user.d.ts +0 -4
- package/src/interfaces/backend-objects/user.d.ts.map +0 -1
- package/src/interfaces/backend-objects/user.js +0 -3
- package/src/interfaces/backend-objects/user.js.map +0 -1
- package/src/interfaces/checksum-config.d.ts +0 -5
- package/src/interfaces/checksum-config.d.ts.map +0 -1
- package/src/interfaces/checksum-config.js +0 -3
- package/src/interfaces/checksum-config.js.map +0 -1
- package/src/interfaces/checksum-consts.d.ts +0 -11
- package/src/interfaces/checksum-consts.d.ts.map +0 -1
- package/src/interfaces/checksum-consts.js +0 -3
- package/src/interfaces/checksum-consts.js.map +0 -1
- package/src/interfaces/constants.d.ts +0 -102
- package/src/interfaces/constants.d.ts.map +0 -1
- package/src/interfaces/constants.js +0 -3
- package/src/interfaces/constants.js.map +0 -1
- package/src/interfaces/controller-config.d.ts +0 -21
- package/src/interfaces/controller-config.d.ts.map +0 -1
- package/src/interfaces/controller-config.js +0 -3
- package/src/interfaces/controller-config.js.map +0 -1
- package/src/interfaces/create-user-basics.d.ts +0 -18
- package/src/interfaces/create-user-basics.d.ts.map +0 -1
- package/src/interfaces/create-user-basics.js +0 -3
- package/src/interfaces/create-user-basics.js.map +0 -1
- package/src/interfaces/csp-config.d.ts +0 -7
- package/src/interfaces/csp-config.d.ts.map +0 -1
- package/src/interfaces/csp-config.js +0 -13
- package/src/interfaces/csp-config.js.map +0 -1
- package/src/interfaces/csp-definition.d.ts +0 -13
- package/src/interfaces/csp-definition.d.ts.map +0 -1
- package/src/interfaces/csp-definition.js +0 -22
- package/src/interfaces/csp-definition.js.map +0 -1
- package/src/interfaces/db-init-result.d.ts +0 -5
- package/src/interfaces/db-init-result.d.ts.map +0 -1
- package/src/interfaces/db-init-result.js +0 -3
- package/src/interfaces/db-init-result.js.map +0 -1
- package/src/interfaces/deep-partial.d.ts +0 -4
- package/src/interfaces/deep-partial.d.ts.map +0 -1
- package/src/interfaces/deep-partial.js +0 -3
- package/src/interfaces/deep-partial.js.map +0 -1
- package/src/interfaces/discriminator-collections.d.ts +0 -7
- package/src/interfaces/discriminator-collections.d.ts.map +0 -1
- package/src/interfaces/discriminator-collections.js +0 -3
- package/src/interfaces/discriminator-collections.js.map +0 -1
- package/src/interfaces/email-service.d.ts +0 -4
- package/src/interfaces/email-service.d.ts.map +0 -1
- package/src/interfaces/email-service.js +0 -3
- package/src/interfaces/email-service.js.map +0 -1
- package/src/interfaces/environment-mongo.d.ts +0 -76
- package/src/interfaces/environment-mongo.d.ts.map +0 -1
- package/src/interfaces/environment-mongo.js +0 -3
- package/src/interfaces/environment-mongo.js.map +0 -1
- package/src/interfaces/environment.d.ts +0 -180
- package/src/interfaces/environment.d.ts.map +0 -1
- package/src/interfaces/environment.js +0 -3
- package/src/interfaces/environment.js.map +0 -1
- package/src/interfaces/failable-result.d.ts +0 -7
- package/src/interfaces/failable-result.d.ts.map +0 -1
- package/src/interfaces/failable-result.js +0 -3
- package/src/interfaces/failable-result.js.map +0 -1
- package/src/interfaces/fec-consts.d.ts +0 -5
- package/src/interfaces/fec-consts.d.ts.map +0 -1
- package/src/interfaces/fec-consts.js +0 -3
- package/src/interfaces/fec-consts.js.map +0 -1
- package/src/interfaces/flexible-csp.d.ts +0 -8
- package/src/interfaces/flexible-csp.d.ts.map +0 -1
- package/src/interfaces/flexible-csp.js +0 -14
- package/src/interfaces/flexible-csp.js.map +0 -1
- package/src/interfaces/handleable-error-options.d.ts +0 -7
- package/src/interfaces/handleable-error-options.d.ts.map +0 -1
- package/src/interfaces/handleable-error-options.js +0 -3
- package/src/interfaces/handleable-error-options.js.map +0 -1
- package/src/interfaces/index.d.ts.map +0 -1
- package/src/interfaces/index.js +0 -38
- package/src/interfaces/index.js.map +0 -1
- package/src/interfaces/jwt-consts.d.ts +0 -11
- package/src/interfaces/jwt-consts.d.ts.map +0 -1
- package/src/interfaces/jwt-consts.js +0 -3
- package/src/interfaces/jwt-consts.js.map +0 -1
- package/src/interfaces/jwt-sign-response.d.ts +0 -11
- package/src/interfaces/jwt-sign-response.d.ts.map +0 -1
- package/src/interfaces/jwt-sign-response.js +0 -3
- package/src/interfaces/jwt-sign-response.js.map +0 -1
- package/src/interfaces/models/email-token.d.ts +0 -6
- package/src/interfaces/models/email-token.d.ts.map +0 -1
- package/src/interfaces/models/email-token.js +0 -3
- package/src/interfaces/models/email-token.js.map +0 -1
- package/src/interfaces/models/index.d.ts.map +0 -1
- package/src/interfaces/models/index.js +0 -11
- package/src/interfaces/models/index.js.map +0 -1
- package/src/interfaces/models/mnemonic.d.ts +0 -6
- package/src/interfaces/models/mnemonic.d.ts.map +0 -1
- package/src/interfaces/models/mnemonic.js +0 -3
- package/src/interfaces/models/mnemonic.js.map +0 -1
- package/src/interfaces/models/role.d.ts +0 -6
- package/src/interfaces/models/role.d.ts.map +0 -1
- package/src/interfaces/models/role.js +0 -3
- package/src/interfaces/models/role.js.map +0 -1
- package/src/interfaces/models/token-role.d.ts +0 -11
- package/src/interfaces/models/token-role.d.ts.map +0 -1
- package/src/interfaces/models/token-role.js +0 -3
- package/src/interfaces/models/token-role.js.map +0 -1
- package/src/interfaces/models/used-direct-login-token.d.ts +0 -11
- package/src/interfaces/models/used-direct-login-token.d.ts.map +0 -1
- package/src/interfaces/models/used-direct-login-token.js +0 -3
- package/src/interfaces/models/used-direct-login-token.js.map +0 -1
- package/src/interfaces/models/user-role.d.ts +0 -11
- package/src/interfaces/models/user-role.d.ts.map +0 -1
- package/src/interfaces/models/user-role.js +0 -3
- package/src/interfaces/models/user-role.js.map +0 -1
- package/src/interfaces/models/user.d.ts +0 -11
- package/src/interfaces/models/user.d.ts.map +0 -1
- package/src/interfaces/models/user.js +0 -3
- package/src/interfaces/models/user.js.map +0 -1
- package/src/interfaces/mongo-errors.d.ts +0 -5
- package/src/interfaces/mongo-errors.d.ts.map +0 -1
- package/src/interfaces/mongo-errors.js +0 -3
- package/src/interfaces/mongo-errors.js.map +0 -1
- package/src/interfaces/request-user.d.ts +0 -58
- package/src/interfaces/request-user.d.ts.map +0 -1
- package/src/interfaces/request-user.js +0 -3
- package/src/interfaces/request-user.js.map +0 -1
- package/src/interfaces/required-string-keys.d.ts +0 -22
- package/src/interfaces/required-string-keys.d.ts.map +0 -1
- package/src/interfaces/required-string-keys.js +0 -3
- package/src/interfaces/required-string-keys.js.map +0 -1
- package/src/interfaces/schema.d.ts +0 -29
- package/src/interfaces/schema.d.ts.map +0 -1
- package/src/interfaces/schema.js +0 -3
- package/src/interfaces/schema.js.map +0 -1
- package/src/interfaces/server-init-result.d.ts +0 -35
- package/src/interfaces/server-init-result.d.ts.map +0 -1
- package/src/interfaces/server-init-result.js +0 -3
- package/src/interfaces/server-init-result.js.map +0 -1
- package/src/interfaces/status-code-response.d.ts +0 -7
- package/src/interfaces/status-code-response.d.ts.map +0 -1
- package/src/interfaces/status-code-response.js +0 -3
- package/src/interfaces/status-code-response.js.map +0 -1
- package/src/interfaces/symmetric-encryption-results.d.ts +0 -5
- package/src/interfaces/test-environment.d.ts +0 -12
- package/src/interfaces/test-environment.d.ts.map +0 -1
- package/src/interfaces/test-environment.js +0 -3
- package/src/interfaces/test-environment.js.map +0 -1
- package/src/interfaces/token-response.d.ts +0 -5
- package/src/interfaces/token-response.d.ts.map +0 -1
- package/src/interfaces/token-response.js +0 -3
- package/src/interfaces/token-response.js.map +0 -1
- package/src/middleware-utils.d.ts +0 -8
- package/src/middleware-utils.d.ts.map +0 -1
- package/src/middleware-utils.js +0 -94
- package/src/middleware-utils.js.map +0 -1
- package/src/middlewares/authenticate-crypto.d.ts +0 -10
- package/src/middlewares/authenticate-crypto.d.ts.map +0 -1
- package/src/middlewares/authenticate-crypto.js +0 -126
- package/src/middlewares/authenticate-crypto.js.map +0 -1
- package/src/middlewares/authenticate-token.d.ts +0 -21
- package/src/middlewares/authenticate-token.d.ts.map +0 -1
- package/src/middlewares/authenticate-token.js +0 -104
- package/src/middlewares/authenticate-token.js.map +0 -1
- package/src/middlewares/cleanup-crypto.d.ts +0 -7
- package/src/middlewares/cleanup-crypto.d.ts.map +0 -1
- package/src/middlewares/cleanup-crypto.js +0 -32
- package/src/middlewares/cleanup-crypto.js.map +0 -1
- package/src/middlewares/index.d.ts.map +0 -1
- package/src/middlewares/index.js +0 -8
- package/src/middlewares/index.js.map +0 -1
- package/src/middlewares/set-global-context-language.d.ts +0 -3
- package/src/middlewares/set-global-context-language.d.ts.map +0 -1
- package/src/middlewares/set-global-context-language.js +0 -14
- package/src/middlewares/set-global-context-language.js.map +0 -1
- package/src/model-registry.d.ts +0 -23
- package/src/model-registry.d.ts.map +0 -1
- package/src/model-registry.js +0 -47
- package/src/model-registry.js.map +0 -1
- package/src/models/email-token.d.ts +0 -8
- package/src/models/email-token.d.ts.map +0 -1
- package/src/models/email-token.js +0 -11
- package/src/models/email-token.js.map +0 -1
- package/src/models/index.d.ts.map +0 -1
- package/src/models/index.js +0 -10
- package/src/models/index.js.map +0 -1
- package/src/models/mnemonic.d.ts +0 -8
- package/src/models/mnemonic.d.ts.map +0 -1
- package/src/models/mnemonic.js +0 -11
- package/src/models/mnemonic.js.map +0 -1
- package/src/models/role.d.ts +0 -8
- package/src/models/role.d.ts.map +0 -1
- package/src/models/role.js +0 -11
- package/src/models/role.js.map +0 -1
- package/src/models/used-direct-login-token.d.ts +0 -8
- package/src/models/used-direct-login-token.d.ts.map +0 -1
- package/src/models/used-direct-login-token.js +0 -11
- package/src/models/used-direct-login-token.js.map +0 -1
- package/src/models/user-role.d.ts +0 -7
- package/src/models/user-role.d.ts.map +0 -1
- package/src/models/user-role.js +0 -10
- package/src/models/user-role.js.map +0 -1
- package/src/models/user.d.ts +0 -8
- package/src/models/user.d.ts.map +0 -1
- package/src/models/user.js +0 -11
- package/src/models/user.js.map +0 -1
- package/src/pipeline/index.d.ts.map +0 -1
- package/src/pipeline/index.js +0 -5
- package/src/pipeline/index.js.map +0 -1
- package/src/pipeline/pipeline-builder.d.ts +0 -8
- package/src/pipeline/pipeline-builder.d.ts.map +0 -1
- package/src/pipeline/pipeline-builder.js +0 -18
- package/src/pipeline/pipeline-builder.js.map +0 -1
- package/src/plugins/index.d.ts.map +0 -1
- package/src/plugins/index.js +0 -6
- package/src/plugins/index.js.map +0 -1
- package/src/plugins/plugin-interface.d.ts +0 -9
- package/src/plugins/plugin-interface.d.ts.map +0 -1
- package/src/plugins/plugin-interface.js +0 -3
- package/src/plugins/plugin-interface.js.map +0 -1
- package/src/plugins/plugin-manager.d.ts +0 -13
- package/src/plugins/plugin-manager.d.ts.map +0 -1
- package/src/plugins/plugin-manager.js +0 -37
- package/src/plugins/plugin-manager.js.map +0 -1
- package/src/registry/email-service-registry.d.ts +0 -27
- package/src/registry/email-service-registry.d.ts.map +0 -1
- package/src/registry/email-service-registry.js +0 -42
- package/src/registry/email-service-registry.js.map +0 -1
- package/src/registry/index.d.ts.map +0 -1
- package/src/registry/index.js +0 -6
- package/src/registry/index.js.map +0 -1
- package/src/responses/index.d.ts.map +0 -1
- package/src/responses/index.js +0 -5
- package/src/responses/index.js.map +0 -1
- package/src/responses/response-builder.d.ts +0 -24
- package/src/responses/response-builder.d.ts.map +0 -1
- package/src/responses/response-builder.js +0 -63
- package/src/responses/response-builder.js.map +0 -1
- package/src/routers/api.d.ts +0 -28
- package/src/routers/api.d.ts.map +0 -1
- package/src/routers/api.js +0 -80
- package/src/routers/api.js.map +0 -1
- package/src/routers/app.d.ts +0 -33
- package/src/routers/app.d.ts.map +0 -1
- package/src/routers/app.js +0 -228
- package/src/routers/app.js.map +0 -1
- package/src/routers/base.d.ts +0 -9
- package/src/routers/base.d.ts.map +0 -1
- package/src/routers/base.js +0 -14
- package/src/routers/base.js.map +0 -1
- package/src/routers/index.d.ts.map +0 -1
- package/src/routers/index.js +0 -7
- package/src/routers/index.js.map +0 -1
- package/src/routers/router-config.d.ts +0 -18
- package/src/routers/router-config.d.ts.map +0 -1
- package/src/routers/router-config.js +0 -8
- package/src/routers/router-config.js.map +0 -1
- package/src/routing/index.d.ts +0 -2
- package/src/routing/index.d.ts.map +0 -1
- package/src/routing/index.js +0 -5
- package/src/routing/index.js.map +0 -1
- package/src/routing/route-builder.d.ts +0 -36
- package/src/routing/route-builder.d.ts.map +0 -1
- package/src/routing/route-builder.js +0 -86
- package/src/routing/route-builder.js.map +0 -1
- package/src/schemas/email-token.d.ts +0 -49
- package/src/schemas/email-token.d.ts.map +0 -1
- package/src/schemas/email-token.js +0 -55
- package/src/schemas/email-token.js.map +0 -1
- package/src/schemas/index.d.ts.map +0 -1
- package/src/schemas/index.js +0 -11
- package/src/schemas/index.js.map +0 -1
- package/src/schemas/mnemonic.d.ts +0 -27
- package/src/schemas/mnemonic.d.ts.map +0 -1
- package/src/schemas/mnemonic.js +0 -31
- package/src/schemas/mnemonic.js.map +0 -1
- package/src/schemas/role.d.ts +0 -42
- package/src/schemas/role.d.ts.map +0 -1
- package/src/schemas/role.js +0 -89
- package/src/schemas/role.js.map +0 -1
- package/src/schemas/schema.d.ts +0 -42
- package/src/schemas/schema.d.ts.map +0 -1
- package/src/schemas/schema.js +0 -70
- package/src/schemas/schema.js.map +0 -1
- package/src/schemas/used-direct-login-token.d.ts +0 -37
- package/src/schemas/used-direct-login-token.d.ts.map +0 -1
- package/src/schemas/used-direct-login-token.js +0 -24
- package/src/schemas/used-direct-login-token.js.map +0 -1
- package/src/schemas/user-role.d.ts +0 -39
- package/src/schemas/user-role.d.ts.map +0 -1
- package/src/schemas/user-role.js +0 -55
- package/src/schemas/user-role.js.map +0 -1
- package/src/schemas/user.d.ts +0 -24
- package/src/schemas/user.d.ts.map +0 -1
- package/src/schemas/user.js +0 -195
- package/src/schemas/user.js.map +0 -1
- package/src/services/backup-code.d.ts +0 -76
- package/src/services/backup-code.d.ts.map +0 -1
- package/src/services/backup-code.js +0 -185
- package/src/services/backup-code.js.map +0 -1
- package/src/services/base.d.ts +0 -11
- package/src/services/base.d.ts.map +0 -1
- package/src/services/base.js +0 -15
- package/src/services/base.js.map +0 -1
- package/src/services/checksum.d.ts +0 -69
- package/src/services/checksum.d.ts.map +0 -1
- package/src/services/checksum.js +0 -145
- package/src/services/checksum.js.map +0 -1
- package/src/services/crc.d.ts +0 -87
- package/src/services/crc.d.ts.map +0 -1
- package/src/services/crc.js +0 -198
- package/src/services/crc.js.map +0 -1
- package/src/services/database-initialization.d.ts +0 -111
- package/src/services/database-initialization.d.ts.map +0 -1
- package/src/services/database-initialization.js +0 -878
- package/src/services/database-initialization.js.map +0 -1
- package/src/services/db-init-cache.d.ts +0 -10
- package/src/services/db-init-cache.d.ts.map +0 -1
- package/src/services/db-init-cache.js +0 -3
- package/src/services/db-init-cache.js.map +0 -1
- package/src/services/direct-login-token.d.ts +0 -7
- package/src/services/direct-login-token.d.ts.map +0 -1
- package/src/services/direct-login-token.js +0 -41
- package/src/services/direct-login-token.js.map +0 -1
- package/src/services/dummy-email-service.d.ts +0 -11
- package/src/services/dummy-email-service.d.ts.map +0 -1
- package/src/services/dummy-email-service.js +0 -16
- package/src/services/dummy-email-service.js.map +0 -1
- package/src/services/fec-usage-example.d.ts +0 -38
- package/src/services/fec-usage-example.d.ts.map +0 -1
- package/src/services/fec-usage-example.js +0 -75
- package/src/services/fec-usage-example.js.map +0 -1
- package/src/services/fec.d.ts +0 -46
- package/src/services/fec.d.ts.map +0 -1
- package/src/services/fec.js +0 -214
- package/src/services/fec.js.map +0 -1
- package/src/services/index.d.ts.map +0 -1
- package/src/services/index.js +0 -23
- package/src/services/index.js.map +0 -1
- package/src/services/jwt.d.ts +0 -30
- package/src/services/jwt.d.ts.map +0 -1
- package/src/services/jwt.js +0 -90
- package/src/services/jwt.js.map +0 -1
- package/src/services/key-wrapping.d.ts +0 -61
- package/src/services/key-wrapping.d.ts.map +0 -1
- package/src/services/key-wrapping.js +0 -307
- package/src/services/key-wrapping.js.map +0 -1
- package/src/services/mnemonic.d.ts +0 -62
- package/src/services/mnemonic.d.ts.map +0 -1
- package/src/services/mnemonic.js +0 -114
- package/src/services/mnemonic.js.map +0 -1
- package/src/services/request-user.d.ts +0 -23
- package/src/services/request-user.d.ts.map +0 -1
- package/src/services/request-user.js +0 -68
- package/src/services/request-user.js.map +0 -1
- package/src/services/role.d.ts +0 -87
- package/src/services/role.d.ts.map +0 -1
- package/src/services/role.js +0 -279
- package/src/services/role.js.map +0 -1
- package/src/services/symmetric.d.ts +0 -42
- package/src/services/symmetric.d.ts.map +0 -1
- package/src/services/symmetric.js +0 -101
- package/src/services/symmetric.js.map +0 -1
- package/src/services/system-user.d.ts +0 -16
- package/src/services/system-user.d.ts.map +0 -1
- package/src/services/system-user.js +0 -46
- package/src/services/system-user.js.map +0 -1
- package/src/services/user.d.ts +0 -345
- package/src/services/user.d.ts.map +0 -1
- package/src/services/user.js +0 -1447
- package/src/services/user.js.map +0 -1
- package/src/services/xor.d.ts +0 -24
- package/src/services/xor.d.ts.map +0 -1
- package/src/services/xor.js +0 -37
- package/src/services/xor.js.map +0 -1
- package/src/testing.d.ts +0 -3
- package/src/testing.d.ts.map +0 -1
- package/src/testing.js +0 -7
- package/src/testing.js.map +0 -1
- package/src/transactions/index.d.ts.map +0 -1
- package/src/transactions/index.js +0 -5
- package/src/transactions/index.js.map +0 -1
- package/src/transactions/transaction-manager.d.ts +0 -12
- package/src/transactions/transaction-manager.d.ts.map +0 -1
- package/src/transactions/transaction-manager.js +0 -30
- package/src/transactions/transaction-manager.js.map +0 -1
- package/src/types/app-config.d.ts +0 -16
- package/src/types/app-config.d.ts.map +0 -1
- package/src/types/app-config.js +0 -3
- package/src/types/app-config.js.map +0 -1
- package/src/types/controller-config.d.ts +0 -14
- package/src/types/controller-config.d.ts.map +0 -1
- package/src/types/controller-config.js +0 -3
- package/src/types/controller-config.js.map +0 -1
- package/src/types/environment-variables.d.ts.map +0 -1
- package/src/types/environment-variables.js +0 -39
- package/src/types/environment-variables.js.map +0 -1
- package/src/types/index.d.ts.map +0 -1
- package/src/types/index.js +0 -6
- package/src/types/index.js.map +0 -1
- package/src/types/mongoose-helpers.d.ts.map +0 -1
- package/src/types/mongoose-helpers.js +0 -6
- package/src/types/mongoose-helpers.js.map +0 -1
- package/src/types.d.ts +0 -104
- package/src/types.d.ts.map +0 -1
- package/src/types.js +0 -14
- package/src/types.js.map +0 -1
- package/src/utils.d.ts +0 -211
- package/src/utils.d.ts.map +0 -1
- package/src/utils.js +0 -818
- package/src/utils.js.map +0 -1
- package/src/validation/index.d.ts.map +0 -1
- package/src/validation/index.js +0 -5
- package/src/validation/index.js.map +0 -1
- package/src/validation/validation-builder.d.ts +0 -32
- package/src/validation/validation-builder.d.ts.map +0 -1
- package/src/validation/validation-builder.js +0 -81
- package/src/validation/validation-builder.js.map +0 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Request user interface for Express request object.
|
|
3
|
+
* Defines user data structure attached to authenticated requests.
|
|
4
|
+
* @module interfaces/request-user
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
ICombinedRolePrivileges,
|
|
9
|
+
IRoleDTO,
|
|
10
|
+
IRoleFrontendObject,
|
|
11
|
+
} from '@digitaldefiance/suite-core-lib';
|
|
12
|
+
import { IRoleBackendObject } from './backend-objects/role';
|
|
13
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Interface for the user object stored in the request object.
|
|
17
|
+
* Used for request handling, not for Mongoose documents.
|
|
18
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
19
|
+
* @template TRole - Role array type (defaults to IRoleDTO[])
|
|
20
|
+
* @template TLanguage - String type for language (defaults to string)
|
|
21
|
+
* @template TDate - Date type (defaults to string)
|
|
22
|
+
*/
|
|
23
|
+
export interface IRequestUser<
|
|
24
|
+
TID extends PlatformID = Buffer,
|
|
25
|
+
TRole extends
|
|
26
|
+
| Array<IRoleDTO>
|
|
27
|
+
| Array<IRoleFrontendObject>
|
|
28
|
+
| Array<IRoleBackendObject> = Array<IRoleDTO>,
|
|
29
|
+
TLanguage extends string = string,
|
|
30
|
+
TDate extends Date | string = string,
|
|
31
|
+
> {
|
|
32
|
+
/**
|
|
33
|
+
* The ID of the user
|
|
34
|
+
*/
|
|
35
|
+
id: TID;
|
|
36
|
+
/**
|
|
37
|
+
* The roles associated with the user
|
|
38
|
+
*/
|
|
39
|
+
roles: TRole;
|
|
40
|
+
/**
|
|
41
|
+
* Combined role privileges across all user roles
|
|
42
|
+
*/
|
|
43
|
+
rolePrivileges: ICombinedRolePrivileges;
|
|
44
|
+
/**
|
|
45
|
+
* The username of the user
|
|
46
|
+
*/
|
|
47
|
+
username: string;
|
|
48
|
+
/**
|
|
49
|
+
* The email address of the user
|
|
50
|
+
*/
|
|
51
|
+
email: string;
|
|
52
|
+
/**
|
|
53
|
+
* The timezone of the user
|
|
54
|
+
*/
|
|
55
|
+
timezone: string;
|
|
56
|
+
/**
|
|
57
|
+
* The currency preference of the user
|
|
58
|
+
*/
|
|
59
|
+
currency: string;
|
|
60
|
+
/**
|
|
61
|
+
* Whether the user has direct challenge login enabled
|
|
62
|
+
*/
|
|
63
|
+
directChallenge: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* The language of the user
|
|
66
|
+
*/
|
|
67
|
+
siteLanguage: TLanguage;
|
|
68
|
+
/**
|
|
69
|
+
* The date the user last logged in
|
|
70
|
+
*/
|
|
71
|
+
lastLogin?: TDate;
|
|
72
|
+
/**
|
|
73
|
+
* Whether the user has verified their email address
|
|
74
|
+
*/
|
|
75
|
+
emailVerified: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Whether the user prefers dark mode
|
|
78
|
+
*/
|
|
79
|
+
darkMode: boolean;
|
|
80
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Required string keys interface for i18n.
|
|
3
|
+
* Defines minimum required translation keys for the library.
|
|
4
|
+
* @module interfaces/required-string-keys
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Base interface defining the minimum required string keys.
|
|
9
|
+
* Must be implemented by any application using this library.
|
|
10
|
+
*/
|
|
11
|
+
export interface RequiredStringKeys {
|
|
12
|
+
Common_UnexpectedError: string;
|
|
13
|
+
Error_EngineAlreadySet: string;
|
|
14
|
+
Error_EngineNotSet: string;
|
|
15
|
+
Error_LengthExceedsMaximum: string;
|
|
16
|
+
Error_LengthIsInvalidType: string;
|
|
17
|
+
// Validation errors
|
|
18
|
+
ValidationError: string;
|
|
19
|
+
Validation_MissingValidatedData: string;
|
|
20
|
+
Validation_MissingValidatedDataForField: string;
|
|
21
|
+
|
|
22
|
+
// Admin/system messages
|
|
23
|
+
Admin_NoMongoDbClientFoundFallingBack: string;
|
|
24
|
+
Admin_TransactionFailedTransientTemplate: string;
|
|
25
|
+
Admin_TransactionTimeoutTemplate: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Type constraint to ensure user's string key enum extends the required keys.
|
|
30
|
+
* @template T - String key type
|
|
31
|
+
*/
|
|
32
|
+
export type ExtendedStringKeys<T extends string> =
|
|
33
|
+
T extends keyof RequiredStringKeys ? T : T | keyof RequiredStringKeys;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Schema interface for Mongoose model registration.
|
|
3
|
+
* Defines structure for schema map entries with models and discriminators.
|
|
4
|
+
* @module interfaces/schema
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Model, Schema } from '@digitaldefiance/mongoose-types';
|
|
8
|
+
import { IBaseDocument } from '../documents/base';
|
|
9
|
+
import { IDiscriminatorCollections } from '../interfaces/discriminator-collections';
|
|
10
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Interface for each schema in the schema map.
|
|
14
|
+
* Combines Mongoose schema, model, and collection metadata with optional discriminators.
|
|
15
|
+
* @template T - Document type extending IBaseDocument
|
|
16
|
+
*/
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
+
export interface ISchema<
|
|
19
|
+
TID extends PlatformID,
|
|
20
|
+
T extends IBaseDocument<any, TID>,
|
|
21
|
+
> {
|
|
22
|
+
/**
|
|
23
|
+
* The name of the collection, eg 'models'
|
|
24
|
+
*/
|
|
25
|
+
collection: string;
|
|
26
|
+
/**
|
|
27
|
+
* The model for the schema
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
model: Model<T>;
|
|
31
|
+
/**
|
|
32
|
+
* The name of the model, eg 'Model'
|
|
33
|
+
*/
|
|
34
|
+
modelName: string;
|
|
35
|
+
/**
|
|
36
|
+
* The schema for the model
|
|
37
|
+
*/
|
|
38
|
+
schema: Schema;
|
|
39
|
+
/**
|
|
40
|
+
* Discriminators for the model
|
|
41
|
+
*/
|
|
42
|
+
discriminators?: IDiscriminatorCollections<TID, T>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server initialization result interface.
|
|
3
|
+
* Defines structure for test server initialization with admin, member, and system users.
|
|
4
|
+
* @module interfaces/server-init-result
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Member, PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
8
|
+
import { IRoleDocument } from '../documents/role';
|
|
9
|
+
import { IUserDocument } from '../documents/user';
|
|
10
|
+
import { IUserRoleDocument } from '../documents/user-role';
|
|
11
|
+
|
|
12
|
+
// Re-export essential document types
|
|
13
|
+
export type { IRoleDocument, IUserDocument, IUserRoleDocument };
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Result of server initialization for testing.
|
|
17
|
+
* Contains admin, member, and system user accounts with credentials and roles.
|
|
18
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
19
|
+
*/
|
|
20
|
+
export interface IServerInitResult<TID extends PlatformID = Buffer> {
|
|
21
|
+
adminRole: IRoleDocument<TID>;
|
|
22
|
+
adminUser: IUserDocument<string, TID>;
|
|
23
|
+
adminUsername: string;
|
|
24
|
+
adminEmail: string;
|
|
25
|
+
adminMnemonic: string;
|
|
26
|
+
adminPassword: string;
|
|
27
|
+
adminBackupCodes: Array<string>;
|
|
28
|
+
adminMember: Member<TID>;
|
|
29
|
+
adminUserRole: IUserRoleDocument<TID>;
|
|
30
|
+
memberRole: IRoleDocument<TID>;
|
|
31
|
+
memberUser: IUserDocument<string, TID>;
|
|
32
|
+
memberUsername: string;
|
|
33
|
+
memberEmail: string;
|
|
34
|
+
memberMnemonic: string;
|
|
35
|
+
memberPassword: string;
|
|
36
|
+
memberBackupCodes: Array<string>;
|
|
37
|
+
memberMember: Member<TID>;
|
|
38
|
+
memberUserRole: IUserRoleDocument<TID>;
|
|
39
|
+
systemRole: IRoleDocument<TID>;
|
|
40
|
+
systemUser: IUserDocument<string, TID>;
|
|
41
|
+
systemUsername: string;
|
|
42
|
+
systemEmail: string;
|
|
43
|
+
systemMnemonic: string;
|
|
44
|
+
systemPassword: string;
|
|
45
|
+
systemBackupCodes: Array<string>;
|
|
46
|
+
systemMember: Member<TID>;
|
|
47
|
+
systemUserRole: IUserRoleDocument<TID>;
|
|
48
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Status code response wrapper interface.
|
|
3
|
+
* Wraps API responses with HTTP status codes and optional headers.
|
|
4
|
+
* @module interfaces/status-code-response
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ApiResponse } from '../types';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* HTTP response wrapper with status code and headers.
|
|
11
|
+
* @template T - API response type
|
|
12
|
+
* @property {number} statusCode - HTTP status code
|
|
13
|
+
* @property {T} response - Response payload
|
|
14
|
+
* @property {Record<string, string>} [headers] - Optional HTTP headers
|
|
15
|
+
*/
|
|
16
|
+
export interface IStatusCodeResponse<T extends ApiResponse> {
|
|
17
|
+
statusCode: number;
|
|
18
|
+
response: T;
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symmetric-encryption-results.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"symmetric-encryption-results.d.ts","sourceRoot":"","sources":["symmetric-encryption-results.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symmetric-encryption-results.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"symmetric-encryption-results.js","sourceRoot":"","sources":["symmetric-encryption-results.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Symmetric encryption results interface.
|
|
3
|
+
* Defines structure for symmetric encryption operation results.
|
|
4
|
+
* @module interfaces/symmetric-encryption-results
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Results of symmetric encryption operation.
|
|
9
|
+
* @property {Buffer} encryptedData - Encrypted data buffer
|
|
10
|
+
* @property {Buffer} key - Encryption key used
|
|
11
|
+
*/
|
|
12
|
+
export interface ISymmetricEncryptionResults {
|
|
13
|
+
encryptedData: Buffer;
|
|
14
|
+
key: Buffer;
|
|
15
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Test environment interface.
|
|
3
|
+
* Defines structure for test environment with in-memory MongoDB and initialized accounts.
|
|
4
|
+
* @module interfaces/test-environment
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
8
|
+
import { MongoMemoryReplSet } from 'mongodb-memory-server';
|
|
9
|
+
import { IApplication } from './application';
|
|
10
|
+
import { IServerInitResult } from './server-init-result';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Test environment configuration.
|
|
14
|
+
* Contains application instance, in-memory MongoDB, and test account data.
|
|
15
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
16
|
+
*/
|
|
17
|
+
export interface ITestEnvironment<TID extends PlatformID = Buffer> {
|
|
18
|
+
application: IApplication<TID>;
|
|
19
|
+
mongoServer: MongoMemoryReplSet;
|
|
20
|
+
mongoUri: string;
|
|
21
|
+
accountData: IServerInitResult<TID>;
|
|
22
|
+
dbName: string;
|
|
23
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Token response interface for authentication.
|
|
3
|
+
* Extends API message response with JWT token.
|
|
4
|
+
* @module interfaces/token-response
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { IApiMessageResponse } from './api-message-response';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* API response containing authentication token.
|
|
11
|
+
* @extends IApiMessageResponse
|
|
12
|
+
* @property {string} token - JWT authentication token
|
|
13
|
+
*/
|
|
14
|
+
export interface IApiTokenResponse extends IApiMessageResponse {
|
|
15
|
+
token: string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Middleware initialization utilities.
|
|
3
|
+
* Configures Express middleware including Helmet, CORS, and body parsers.
|
|
4
|
+
* @module middleware-utils
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
SuiteCoreStringKey,
|
|
9
|
+
TranslatableSuiteError,
|
|
10
|
+
} from '@digitaldefiance/suite-core-lib';
|
|
11
|
+
import cors from 'cors';
|
|
12
|
+
import { randomBytes } from 'crypto';
|
|
13
|
+
import {
|
|
14
|
+
Application,
|
|
15
|
+
json,
|
|
16
|
+
NextFunction,
|
|
17
|
+
Request,
|
|
18
|
+
Response,
|
|
19
|
+
urlencoded,
|
|
20
|
+
} from 'express';
|
|
21
|
+
import helmet, { HelmetOptions } from 'helmet';
|
|
22
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
23
|
+
import { ISimpleCSPDef, isSimpleCSPDef } from './interfaces/csp-definition';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Creates a CORS options delegate function.
|
|
27
|
+
* @param {string[]} corsWhitelist - Array of allowed origins
|
|
28
|
+
* @returns {Function} CORS options delegate
|
|
29
|
+
*/
|
|
30
|
+
export const corsOptionsDelegate = (corsWhitelist: string[]) => {
|
|
31
|
+
return (
|
|
32
|
+
req: cors.CorsRequest,
|
|
33
|
+
callback: (
|
|
34
|
+
error: Error | null,
|
|
35
|
+
options: cors.CorsOptions | undefined,
|
|
36
|
+
) => void,
|
|
37
|
+
) => {
|
|
38
|
+
let corsOptions: cors.CorsOptions;
|
|
39
|
+
const origin = req.headers.origin;
|
|
40
|
+
if (
|
|
41
|
+
origin &&
|
|
42
|
+
corsWhitelist.find((w: string | RegExp) => {
|
|
43
|
+
if (w instanceof RegExp) {
|
|
44
|
+
return w.test(origin);
|
|
45
|
+
} else {
|
|
46
|
+
return w === origin;
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
) {
|
|
50
|
+
corsOptions = { origin: true };
|
|
51
|
+
} else {
|
|
52
|
+
corsOptions = { origin: false };
|
|
53
|
+
}
|
|
54
|
+
callback(null, corsOptions);
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Type guard to check if object is HelmetOptions.
|
|
60
|
+
* @param {unknown} obj - Object to check
|
|
61
|
+
* @returns {boolean} True if object is HelmetOptions
|
|
62
|
+
*/
|
|
63
|
+
export const isHelmetOptions = (obj: unknown): obj is HelmetOptions => {
|
|
64
|
+
// A very basic check; in real scenarios, you might want to be more thorough
|
|
65
|
+
return !!(
|
|
66
|
+
obj &&
|
|
67
|
+
typeof obj === 'object' &&
|
|
68
|
+
('contentSecurityPolicy' in obj ||
|
|
69
|
+
'crossOriginEmbedderPolicy' in obj ||
|
|
70
|
+
'crossOriginOpenerPolicy' in obj ||
|
|
71
|
+
'crossOriginResourcePolicy' in obj ||
|
|
72
|
+
'originAgentCluster' in obj ||
|
|
73
|
+
'referrerPolicy' in obj)
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Initializes Express middleware stack.
|
|
79
|
+
* Configures Helmet for security headers, CORS, and body parsers.
|
|
80
|
+
* @param {Application} app - Express application instance
|
|
81
|
+
* @param {string[]} corsWhitelist - Array of allowed CORS origins
|
|
82
|
+
* @param {ISimpleCSPDef | HelmetOptions} csp - CSP configuration or Helmet options
|
|
83
|
+
* @throws {TranslatableSuiteError} If invalid CSP configuration provided
|
|
84
|
+
*/
|
|
85
|
+
export const initMiddleware = (
|
|
86
|
+
app: Application,
|
|
87
|
+
corsWhitelist: string[],
|
|
88
|
+
csp: ISimpleCSPDef | HelmetOptions,
|
|
89
|
+
): void => {
|
|
90
|
+
// Helmet helps you secure your Express apps by setting various HTTP headers
|
|
91
|
+
// CSP nonce
|
|
92
|
+
app.use((req: Request, res: Response, next: NextFunction) => {
|
|
93
|
+
res.locals['cspNonce'] = randomBytes(32).toString('hex');
|
|
94
|
+
next();
|
|
95
|
+
});
|
|
96
|
+
if (isSimpleCSPDef(csp)) {
|
|
97
|
+
app.use(
|
|
98
|
+
helmet({
|
|
99
|
+
contentSecurityPolicy: {
|
|
100
|
+
directives: {
|
|
101
|
+
defaultSrc: ["'self'", ...csp.defaultSrc],
|
|
102
|
+
imgSrc: ["'self'", 'data:', 'blob:', ...csp.imgSrc],
|
|
103
|
+
connectSrc: ["'self'", ...csp.connectSrc],
|
|
104
|
+
scriptSrc: [
|
|
105
|
+
"'self'",
|
|
106
|
+
//"'unsafe-inline'",
|
|
107
|
+
"'strict-dynamic'",
|
|
108
|
+
(req: IncomingMessage, res: ServerResponse) => {
|
|
109
|
+
const response = res as Response;
|
|
110
|
+
return `'nonce-${response.locals['cspNonce']}'`;
|
|
111
|
+
},
|
|
112
|
+
...csp.scriptSrc,
|
|
113
|
+
],
|
|
114
|
+
styleSrc: [
|
|
115
|
+
"'self'",
|
|
116
|
+
// "'unsafe-inline'",
|
|
117
|
+
...csp.styleSrc,
|
|
118
|
+
],
|
|
119
|
+
fontSrc: ["'self'", ...csp.fontSrc],
|
|
120
|
+
frameSrc: ["'self'", ...csp.frameSrc],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
}),
|
|
124
|
+
);
|
|
125
|
+
} else if (isHelmetOptions(csp)) {
|
|
126
|
+
app.use(helmet(csp));
|
|
127
|
+
} else {
|
|
128
|
+
throw new TranslatableSuiteError(
|
|
129
|
+
SuiteCoreStringKey.Error_InvalidCspOrHelmetOptionsProvided,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
// Enable CORS
|
|
133
|
+
app.use(cors(corsOptionsDelegate(corsWhitelist)));
|
|
134
|
+
// Parse incoming requests with JSON payloads
|
|
135
|
+
app.use(json());
|
|
136
|
+
// Parse incoming requests with urlencoded payloads
|
|
137
|
+
app.use(urlencoded({ extended: true }));
|
|
138
|
+
};
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Cryptographic authentication middleware for operations requiring private keys.
|
|
3
|
+
* Validates mnemonic or password to unlock user's private key for sensitive operations.
|
|
4
|
+
* @module middlewares/authenticate-crypto
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { SecureString } from '@digitaldefiance/ecies-lib';
|
|
8
|
+
import { ClientSession } from '@digitaldefiance/mongoose-types';
|
|
9
|
+
import {
|
|
10
|
+
Member as BackendMember,
|
|
11
|
+
PlatformID,
|
|
12
|
+
} from '@digitaldefiance/node-ecies-lib';
|
|
13
|
+
import {
|
|
14
|
+
AccountStatus,
|
|
15
|
+
getSuiteCoreTranslation,
|
|
16
|
+
InvalidCredentialsError,
|
|
17
|
+
SuiteCoreStringKey,
|
|
18
|
+
} from '@digitaldefiance/suite-core-lib';
|
|
19
|
+
import { NextFunction, Request, Response } from 'express';
|
|
20
|
+
import { ServiceKeys } from '../container';
|
|
21
|
+
import { IUserDocument } from '../documents/user';
|
|
22
|
+
import { BaseModelName } from '../enumerations';
|
|
23
|
+
import { InvalidPasswordError } from '../errors';
|
|
24
|
+
import { IApplication } from '../interfaces/application';
|
|
25
|
+
import { withTransaction } from '../utils';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Express middleware for cryptographic authentication.
|
|
29
|
+
* Requires mnemonic or password in request body to unlock user's private key.
|
|
30
|
+
* Attaches authenticated BackendMember with private key to req.eciesUser.
|
|
31
|
+
* Used for operations requiring cryptographic signing or decryption.
|
|
32
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
33
|
+
* @template TAccountStatus - Account status type (defaults to AccountStatus)
|
|
34
|
+
* @param {IApplication<TID>} application - Application instance
|
|
35
|
+
* @param {Request} req - Express request object
|
|
36
|
+
* @param {Response} res - Express response object
|
|
37
|
+
* @param {NextFunction} next - Express next function
|
|
38
|
+
* @param {TAccountStatus} [activeStatusValue] - Expected active account status
|
|
39
|
+
* @returns {Promise<Response | void>} Response or void if successful
|
|
40
|
+
* @throws {InvalidCredentialsError} When credentials are invalid
|
|
41
|
+
* @throws {InvalidPasswordError} When password is incorrect
|
|
42
|
+
*/
|
|
43
|
+
export async function authenticateCrypto<
|
|
44
|
+
TID extends PlatformID = Buffer,
|
|
45
|
+
TAccountStatus extends string = AccountStatus,
|
|
46
|
+
>(
|
|
47
|
+
application: IApplication<TID>,
|
|
48
|
+
req: Request,
|
|
49
|
+
res: Response,
|
|
50
|
+
next: NextFunction,
|
|
51
|
+
activeStatusValue: TAccountStatus = AccountStatus.Active as TAccountStatus,
|
|
52
|
+
): Promise<Response | void> {
|
|
53
|
+
if (!req.user) {
|
|
54
|
+
return res.status(401).send(
|
|
55
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
56
|
+
getSuiteCoreTranslation(SuiteCoreStringKey.Validation_InvalidToken),
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Try validatedBody first (if validation has run), then fall back to raw body
|
|
61
|
+
// Note: This middleware runs BEFORE validation, so validatedBody may not exist yet
|
|
62
|
+
const validatedBody = (req as Request & { validatedBody?: unknown })
|
|
63
|
+
.validatedBody as Record<string, unknown> | undefined;
|
|
64
|
+
const rawBody = req.body as Record<string, unknown> | undefined;
|
|
65
|
+
const sourceBody = validatedBody ?? rawBody;
|
|
66
|
+
|
|
67
|
+
if (!sourceBody) {
|
|
68
|
+
return res.status(400).send({
|
|
69
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
70
|
+
message: getSuiteCoreTranslation(
|
|
71
|
+
SuiteCoreStringKey.Validation_MnemonicOrPasswordRequired,
|
|
72
|
+
),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const mnemonic =
|
|
77
|
+
typeof sourceBody['mnemonic'] === 'string'
|
|
78
|
+
? (sourceBody['mnemonic'] as string)
|
|
79
|
+
: undefined;
|
|
80
|
+
const password =
|
|
81
|
+
// amazonq-ignore-next-line false positive
|
|
82
|
+
typeof sourceBody['password'] === 'string'
|
|
83
|
+
? (sourceBody['password'] as string)
|
|
84
|
+
: undefined;
|
|
85
|
+
if (!mnemonic && !password) {
|
|
86
|
+
return res.status(400).send({
|
|
87
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
88
|
+
message: getSuiteCoreTranslation(
|
|
89
|
+
SuiteCoreStringKey.Validation_MnemonicOrPasswordRequired,
|
|
90
|
+
),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const UserModel = application.getModel<IUserDocument<string, TID>>(
|
|
94
|
+
BaseModelName.User,
|
|
95
|
+
);
|
|
96
|
+
const userService = application.services.get(ServiceKeys.USER) as {
|
|
97
|
+
loginWithMnemonic: (
|
|
98
|
+
email: string,
|
|
99
|
+
mnemonic: SecureString,
|
|
100
|
+
session?: ClientSession,
|
|
101
|
+
) => Promise<any>;
|
|
102
|
+
loginWithPassword: (
|
|
103
|
+
email: string,
|
|
104
|
+
password: string,
|
|
105
|
+
session?: ClientSession,
|
|
106
|
+
) => Promise<any>;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
return await withTransaction<Response | void>(
|
|
111
|
+
application.db.connection,
|
|
112
|
+
application.environment.mongo.useTransactions,
|
|
113
|
+
undefined,
|
|
114
|
+
async (sess: ClientSession | undefined) => {
|
|
115
|
+
const userDoc = await UserModel.findById(req.user!.id)
|
|
116
|
+
.session(sess ?? null)
|
|
117
|
+
.exec();
|
|
118
|
+
|
|
119
|
+
if (!userDoc || userDoc.accountStatus !== activeStatusValue) {
|
|
120
|
+
return res.status(403).send(
|
|
121
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
122
|
+
getSuiteCoreTranslation(SuiteCoreStringKey.Validation_UserNotFound),
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Ensure we're only authenticating the currently logged-in user
|
|
127
|
+
if (userDoc._id.toString() !== req.user!.id) {
|
|
128
|
+
return res.status(403).send(
|
|
129
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
130
|
+
getSuiteCoreTranslation(
|
|
131
|
+
SuiteCoreStringKey.Validation_InvalidCredentials,
|
|
132
|
+
),
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
let loginResult: {
|
|
137
|
+
userDoc: IUserDocument;
|
|
138
|
+
userMember: BackendMember;
|
|
139
|
+
adminMember: BackendMember;
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
if (mnemonic) {
|
|
143
|
+
// Authenticate with mnemonic
|
|
144
|
+
const userMnemonic = new SecureString(mnemonic);
|
|
145
|
+
try {
|
|
146
|
+
loginResult = await userService.loginWithMnemonic(
|
|
147
|
+
userDoc.email,
|
|
148
|
+
userMnemonic,
|
|
149
|
+
sess,
|
|
150
|
+
);
|
|
151
|
+
} finally {
|
|
152
|
+
userMnemonic.dispose();
|
|
153
|
+
}
|
|
154
|
+
} else if (password) {
|
|
155
|
+
// Authenticate with password
|
|
156
|
+
loginResult = await userService.loginWithPassword(
|
|
157
|
+
userDoc.email,
|
|
158
|
+
password,
|
|
159
|
+
sess,
|
|
160
|
+
);
|
|
161
|
+
} else {
|
|
162
|
+
// Should not happen due to earlier guard; keeps TypeScript happy
|
|
163
|
+
return res.status(400).send({
|
|
164
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
165
|
+
message: getSuiteCoreTranslation(
|
|
166
|
+
SuiteCoreStringKey.Validation_MnemonicOrPasswordRequired,
|
|
167
|
+
),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Double-check authenticated user matches logged-in user
|
|
172
|
+
if (loginResult.userDoc._id.toString() !== req.user!.id) {
|
|
173
|
+
return res.status(403).send(
|
|
174
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
175
|
+
getSuiteCoreTranslation(
|
|
176
|
+
SuiteCoreStringKey.Validation_InvalidCredentials,
|
|
177
|
+
),
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Attach the fully authenticated member (with private key) to the request
|
|
182
|
+
req.eciesUser = loginResult.userMember;
|
|
183
|
+
// Do not attach the admin user to the request; it's a process-wide singleton
|
|
184
|
+
// and must not be disposed as part of request cleanup.
|
|
185
|
+
|
|
186
|
+
next();
|
|
187
|
+
return;
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
timeoutMs: application.environment.mongo.transactionTimeout,
|
|
191
|
+
},
|
|
192
|
+
);
|
|
193
|
+
} catch (err) {
|
|
194
|
+
if (
|
|
195
|
+
err instanceof InvalidCredentialsError ||
|
|
196
|
+
err instanceof InvalidPasswordError
|
|
197
|
+
) {
|
|
198
|
+
// amazonq-ignore-next-line false positive
|
|
199
|
+
console.error(
|
|
200
|
+
'Crypto authentication failed:',
|
|
201
|
+
`userId=${String(req.user?.id || 'unknown').replace(
|
|
202
|
+
/[\r\n]/g,
|
|
203
|
+
'',
|
|
204
|
+
)} hasPassword=${!!password} hasMnemonic=${!!mnemonic}`,
|
|
205
|
+
);
|
|
206
|
+
return res.status(401).send({
|
|
207
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
208
|
+
message: getSuiteCoreTranslation(
|
|
209
|
+
SuiteCoreStringKey.Validation_InvalidCredentials,
|
|
210
|
+
),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
const sanitizedErr =
|
|
214
|
+
err instanceof Error
|
|
215
|
+
? err.message.replace(/[\r\n]/g, ' ')
|
|
216
|
+
: String(err).replace(/[\r\n]/g, ' ');
|
|
217
|
+
console.error(
|
|
218
|
+
`${getSuiteCoreTranslation(
|
|
219
|
+
SuiteCoreStringKey.Error_UnexpectedErrorInAuthenticateCrypto,
|
|
220
|
+
)}:`,
|
|
221
|
+
sanitizedErr,
|
|
222
|
+
);
|
|
223
|
+
if (err instanceof Error && err.stack) {
|
|
224
|
+
console.error(
|
|
225
|
+
`${getSuiteCoreTranslation(SuiteCoreStringKey.Common_StackTrace)}:`,
|
|
226
|
+
err.stack,
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
return res.status(500).send({
|
|
230
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
231
|
+
message: getSuiteCoreTranslation(
|
|
232
|
+
SuiteCoreStringKey.Common_UnexpectedError,
|
|
233
|
+
),
|
|
234
|
+
error: err,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|