@digitaldefiance/node-express-suite 3.7.4 → 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 -1
- 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/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 -22
- 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,395 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Application router for serving React frontend and API routes.
|
|
3
|
+
* Handles static file serving, EJS template rendering, and catch-all routing.
|
|
4
|
+
* @module routers/app
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
CoreI18nComponentId,
|
|
9
|
+
TranslatableGenericError,
|
|
10
|
+
} from '@digitaldefiance/i18n-lib';
|
|
11
|
+
import {
|
|
12
|
+
getSuiteCoreTranslation,
|
|
13
|
+
SuiteCoreStringKey,
|
|
14
|
+
TranslatableSuiteError,
|
|
15
|
+
} from '@digitaldefiance/suite-core-lib';
|
|
16
|
+
import ejs from 'ejs';
|
|
17
|
+
import {
|
|
18
|
+
Application,
|
|
19
|
+
static as expressStatic,
|
|
20
|
+
NextFunction,
|
|
21
|
+
Request,
|
|
22
|
+
Response,
|
|
23
|
+
} from 'express';
|
|
24
|
+
import { existsSync, readdirSync } from 'fs';
|
|
25
|
+
import { resolve, sep } from 'path';
|
|
26
|
+
import { IApplication } from '../interfaces/application';
|
|
27
|
+
import { debugLog, handleError, sendApiMessageResponse } from '../utils';
|
|
28
|
+
import { BaseRouter } from './base';
|
|
29
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Dummy function to ensure EJS is included in the bundle.
|
|
33
|
+
* @private
|
|
34
|
+
*/
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
36
|
+
function keepEJS() {
|
|
37
|
+
ejs.compile(''); // Compile an empty string, doesn't generate anything meaningful
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Application router for serving React frontend and API routes.
|
|
42
|
+
* Sets up static file serving, EJS template rendering, and catch-all routing for SPA.
|
|
43
|
+
* @template TID Platform-specific ID type
|
|
44
|
+
* @template TApplication Application instance type
|
|
45
|
+
*/
|
|
46
|
+
export class AppRouter<
|
|
47
|
+
TID extends PlatformID = Buffer,
|
|
48
|
+
TApplication extends IApplication<TID> = IApplication<TID>,
|
|
49
|
+
> {
|
|
50
|
+
/** Path to EJS views directory */
|
|
51
|
+
protected readonly viewsPath: string;
|
|
52
|
+
/** Path to index.html file */
|
|
53
|
+
protected readonly indexPath: string;
|
|
54
|
+
/** Path to assets directory */
|
|
55
|
+
protected readonly assetsDir: string;
|
|
56
|
+
/** Path to React distribution directory */
|
|
57
|
+
protected readonly reactDistDir: string;
|
|
58
|
+
|
|
59
|
+
/** API router instance */
|
|
60
|
+
protected readonly apiRouter: BaseRouter<TID, TApplication>;
|
|
61
|
+
/** Application instance */
|
|
62
|
+
protected readonly application: TApplication;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Creates a new application router instance.
|
|
66
|
+
* Validates and resolves all paths to prevent directory traversal attacks.
|
|
67
|
+
* @param apiRouter API router instance to mount under /api
|
|
68
|
+
* @throws {TranslatableSuiteError} If paths contain invalid traversal sequences
|
|
69
|
+
*/
|
|
70
|
+
constructor(apiRouter: BaseRouter<TID, TApplication>) {
|
|
71
|
+
this.application = apiRouter.application;
|
|
72
|
+
this.apiRouter = apiRouter;
|
|
73
|
+
|
|
74
|
+
// Validate paths don't contain traversal sequences
|
|
75
|
+
if (
|
|
76
|
+
this.application.environment.apiDistDir.includes('..') ||
|
|
77
|
+
this.application.environment.reactDistDir.includes('..')
|
|
78
|
+
) {
|
|
79
|
+
throw new TranslatableSuiteError(
|
|
80
|
+
SuiteCoreStringKey.Error_InvalidPathContainsParentDirectoryReference,
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const normalizedApiDistDir = resolve(
|
|
85
|
+
this.application.environment.apiDistDir,
|
|
86
|
+
);
|
|
87
|
+
const viewsPath = resolve(normalizedApiDistDir, 'views');
|
|
88
|
+
if (
|
|
89
|
+
!viewsPath.startsWith(normalizedApiDistDir + sep) &&
|
|
90
|
+
viewsPath !== normalizedApiDistDir
|
|
91
|
+
) {
|
|
92
|
+
throw new TranslatableSuiteError(
|
|
93
|
+
SuiteCoreStringKey.Error_InvalidViewsPathEscapesBaseDirectory,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
this.viewsPath = viewsPath;
|
|
97
|
+
|
|
98
|
+
const normalizedReactDistDir = resolve(
|
|
99
|
+
this.application.environment.reactDistDir,
|
|
100
|
+
);
|
|
101
|
+
this.reactDistDir = normalizedReactDistDir;
|
|
102
|
+
|
|
103
|
+
const indexPath = resolve(normalizedReactDistDir, 'index.html');
|
|
104
|
+
if (
|
|
105
|
+
!indexPath.startsWith(normalizedReactDistDir + sep) &&
|
|
106
|
+
indexPath !== normalizedReactDistDir
|
|
107
|
+
) {
|
|
108
|
+
throw new TranslatableSuiteError(
|
|
109
|
+
SuiteCoreStringKey.Error_InvalidIndexPathEscapesBaseDirectory,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
this.indexPath = indexPath;
|
|
113
|
+
|
|
114
|
+
const assetsPath = resolve(normalizedReactDistDir, 'assets');
|
|
115
|
+
if (
|
|
116
|
+
!assetsPath.startsWith(normalizedReactDistDir + sep) &&
|
|
117
|
+
assetsPath !== normalizedReactDistDir
|
|
118
|
+
) {
|
|
119
|
+
throw new TranslatableSuiteError(
|
|
120
|
+
SuiteCoreStringKey.Error_InvalidAssetsPathEscapesBaseDirectory,
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
this.assetsDir = assetsPath;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Gets the filename of an asset matching a pattern.
|
|
128
|
+
* @param assetDir Directory to search in
|
|
129
|
+
* @param pattern Regular expression pattern to match
|
|
130
|
+
* @returns Filename if found, undefined otherwise
|
|
131
|
+
*/
|
|
132
|
+
public getAssetFilename(
|
|
133
|
+
assetDir: string,
|
|
134
|
+
pattern: RegExp,
|
|
135
|
+
): string | undefined {
|
|
136
|
+
try {
|
|
137
|
+
// Prevent path traversal by validating assetDir is within expected directory
|
|
138
|
+
// amazonq-ignore-next-line already addressed
|
|
139
|
+
if (
|
|
140
|
+
// amazonq-ignore-next-line
|
|
141
|
+
assetDir.includes('..') ||
|
|
142
|
+
!assetDir.startsWith(this.reactDistDir)
|
|
143
|
+
) {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
const files = readdirSync(assetDir, 'utf8');
|
|
147
|
+
return files.find((f) => pattern.test(f));
|
|
148
|
+
} catch {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Gets base view locals for EJS template rendering.
|
|
155
|
+
* Subclasses can override to add additional locals.
|
|
156
|
+
* @param req Express request
|
|
157
|
+
* @param res Express response
|
|
158
|
+
* @returns Object containing base template variables
|
|
159
|
+
*/
|
|
160
|
+
protected getBaseViewLocals(
|
|
161
|
+
req: Request,
|
|
162
|
+
res: Response,
|
|
163
|
+
): Record<string, unknown> {
|
|
164
|
+
const SiteName = this.application.constants.Site;
|
|
165
|
+
const SiteTagline = this.application.constants.SiteTagline;
|
|
166
|
+
const SiteDescription = this.application.constants.SiteDescription;
|
|
167
|
+
const hostname = req.hostname;
|
|
168
|
+
const server =
|
|
169
|
+
(req.socket.localPort === 443 && req.protocol === 'https') ||
|
|
170
|
+
(req.socket.localPort === 80 && req.protocol === 'http')
|
|
171
|
+
? `${req.protocol}://${hostname}`
|
|
172
|
+
: `${req.protocol}://${hostname}:${req.socket.localPort}`;
|
|
173
|
+
|
|
174
|
+
return {
|
|
175
|
+
cspNonce: res.locals['cspNonce'],
|
|
176
|
+
title: SiteName,
|
|
177
|
+
tagline: SiteTagline,
|
|
178
|
+
description: SiteDescription,
|
|
179
|
+
server,
|
|
180
|
+
siteUrl: this.apiRouter.application.environment.serverUrl,
|
|
181
|
+
baseHref: this.apiRouter.application.environment.basePath,
|
|
182
|
+
hostname,
|
|
183
|
+
siteTitle: SiteName,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Renders an EJS template with the provided locals.
|
|
189
|
+
* @param req Express request
|
|
190
|
+
* @param res Express response
|
|
191
|
+
* @param next Express next function
|
|
192
|
+
* @param template Template name to render
|
|
193
|
+
* @param locals Template variables
|
|
194
|
+
*/
|
|
195
|
+
protected renderTemplate(
|
|
196
|
+
req: Request,
|
|
197
|
+
res: Response,
|
|
198
|
+
next: NextFunction,
|
|
199
|
+
template: string,
|
|
200
|
+
locals: Record<string, unknown>,
|
|
201
|
+
): void {
|
|
202
|
+
if (!/^[\w/-]+$/.test(template)) {
|
|
203
|
+
next(new Error('Invalid template name requested'));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const sanitizedUrl = (req.url || '').replace(/[\r\n]/g, ' ');
|
|
208
|
+
debugLog(
|
|
209
|
+
this.apiRouter.application.environment.debug,
|
|
210
|
+
'log',
|
|
211
|
+
`Rendering view "${template}" for ${sanitizedUrl}`,
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
res.render(template, locals, (err, html) => {
|
|
215
|
+
if (err) {
|
|
216
|
+
const errMsg =
|
|
217
|
+
err && typeof err === 'object' && 'message' in err
|
|
218
|
+
? String(err.message).replace(/[\r\n]/g, ' ')
|
|
219
|
+
: 'Unknown error';
|
|
220
|
+
console.error('Error rendering: ' + errMsg);
|
|
221
|
+
const normalizedError = err instanceof Error ? err : new Error(errMsg);
|
|
222
|
+
if (!res.headersSent) {
|
|
223
|
+
res.status(500).send('An error occurred');
|
|
224
|
+
}
|
|
225
|
+
next(normalizedError);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (!html) {
|
|
230
|
+
next(new Error(`Rendered template "${template}" returned empty HTML`));
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
debugLog(
|
|
235
|
+
this.apiRouter.application.environment.debug,
|
|
236
|
+
'log',
|
|
237
|
+
`Rendered view "${template}" for ${sanitizedUrl}`,
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
res.send(html);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Creates a view renderer function for a specific template.
|
|
246
|
+
* @param template Template name to render
|
|
247
|
+
* @param localsFactory Optional function to generate additional locals
|
|
248
|
+
* @returns Express middleware function
|
|
249
|
+
*/
|
|
250
|
+
protected createViewRenderer(
|
|
251
|
+
template: string,
|
|
252
|
+
localsFactory?: (req: Request, res: Response) => Record<string, unknown>,
|
|
253
|
+
): (req: Request, res: Response, next: NextFunction) => void {
|
|
254
|
+
return (req, res, next) => {
|
|
255
|
+
const baseLocals = this.getBaseViewLocals(req, res);
|
|
256
|
+
const extraLocals = localsFactory ? localsFactory(req, res) : {};
|
|
257
|
+
this.renderTemplate(req, res, next, template, {
|
|
258
|
+
...baseLocals,
|
|
259
|
+
...extraLocals,
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Override to register additional routes (e.g. other EJS pages) before the index catch-all.
|
|
266
|
+
* @param app Express application
|
|
267
|
+
*/
|
|
268
|
+
protected registerAdditionalRenderHooks(app: Application): void {
|
|
269
|
+
void app;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Renders the index.html page with injected asset paths.
|
|
274
|
+
* @param req Express request
|
|
275
|
+
* @param res Express response
|
|
276
|
+
* @param next Express next function
|
|
277
|
+
*/
|
|
278
|
+
public renderIndex(req: Request, res: Response, next: NextFunction): void {
|
|
279
|
+
if (req.url.endsWith('.js')) {
|
|
280
|
+
res.type('application/javascript');
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const jsFile = this.getAssetFilename(this.assetsDir, /^index-.*\.js$/);
|
|
284
|
+
const cssFile = this.getAssetFilename(this.assetsDir, /^index-.*\.css$/);
|
|
285
|
+
const locals = {
|
|
286
|
+
...this.getBaseViewLocals(req, res),
|
|
287
|
+
jsFile: jsFile ? `assets/${jsFile}` : undefined,
|
|
288
|
+
cssFile: cssFile ? `assets/${cssFile}` : undefined,
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
this.renderTemplate(req, res, next, 'index', locals);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Initializes the application router with all routes and middleware.
|
|
296
|
+
* Sets up API routes, static file serving, and catch-all routing.
|
|
297
|
+
* @param app Express application
|
|
298
|
+
* @throws {TranslatableGenericError} If index file not found or invalid paths
|
|
299
|
+
*/
|
|
300
|
+
public init(app: Application) {
|
|
301
|
+
const reactDistHasDistSegment = this.reactDistDir
|
|
302
|
+
.split(sep)
|
|
303
|
+
.filter((segment) => segment.length > 0)
|
|
304
|
+
.some((segment) => segment.toLowerCase() === 'dist');
|
|
305
|
+
if (!reactDistHasDistSegment) {
|
|
306
|
+
throw new TranslatableGenericError<SuiteCoreStringKey>(
|
|
307
|
+
CoreI18nComponentId,
|
|
308
|
+
SuiteCoreStringKey.Error_AppDoesNotAppearToBeRunningWithinDistTemplate,
|
|
309
|
+
{ dir: this.apiRouter.application.environment.reactDistDir },
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
if (!existsSync(this.indexPath)) {
|
|
313
|
+
throw new TranslatableGenericError<SuiteCoreStringKey>(
|
|
314
|
+
CoreI18nComponentId,
|
|
315
|
+
SuiteCoreStringKey.Error_IndexFileNotFoundTemplate,
|
|
316
|
+
{ path: this.indexPath },
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (this.apiRouter.application.environment.debug) {
|
|
321
|
+
app.use((req, res, next) => {
|
|
322
|
+
const port =
|
|
323
|
+
(req.socket.localPort === 443 && req.protocol === 'https') ||
|
|
324
|
+
(req.socket.localPort === 80 && req.protocol === 'http')
|
|
325
|
+
? ''
|
|
326
|
+
: `:${req.socket.localPort}`;
|
|
327
|
+
// amazonq-ignore-next-line
|
|
328
|
+
console.log(
|
|
329
|
+
getSuiteCoreTranslation(SuiteCoreStringKey.Admin_ServingRoute) +
|
|
330
|
+
': method=' +
|
|
331
|
+
req.method +
|
|
332
|
+
' url=' +
|
|
333
|
+
req.protocol +
|
|
334
|
+
'://' +
|
|
335
|
+
req.hostname +
|
|
336
|
+
port +
|
|
337
|
+
(req.url || '').replace(/[\r\n]/g, ' '),
|
|
338
|
+
);
|
|
339
|
+
next();
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
app.use('/api', this.apiRouter.router);
|
|
344
|
+
|
|
345
|
+
app.set('views', this.viewsPath);
|
|
346
|
+
app.set('view engine', 'ejs');
|
|
347
|
+
|
|
348
|
+
// Serve static files from the React app build directory (validated in constructor)
|
|
349
|
+
app.use('/assets', expressStatic(this.assetsDir));
|
|
350
|
+
const serveStaticWithLogging = expressStatic(this.reactDistDir);
|
|
351
|
+
app.use('/static/js', expressStatic(this.reactDistDir));
|
|
352
|
+
app.use((req, res, next) => {
|
|
353
|
+
if (req.url === '/') {
|
|
354
|
+
next();
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
debugLog(
|
|
358
|
+
this.apiRouter.application.environment.debug,
|
|
359
|
+
'log',
|
|
360
|
+
`Trying to serve static for ${(req.url || '').replace(/[\r\n]/g, ' ')}`,
|
|
361
|
+
);
|
|
362
|
+
if (req.url.endsWith('.js')) {
|
|
363
|
+
res.type('application/javascript');
|
|
364
|
+
}
|
|
365
|
+
serveStaticWithLogging(req, res, (err) => {
|
|
366
|
+
if (err) {
|
|
367
|
+
const sanitizedErr =
|
|
368
|
+
err instanceof Error
|
|
369
|
+
? err.message.replace(/[\r\n]/g, ' ')
|
|
370
|
+
: String(err).replace(/[\r\n]/g, ' ');
|
|
371
|
+
debugLog(
|
|
372
|
+
this.apiRouter.application.environment.debug,
|
|
373
|
+
'error',
|
|
374
|
+
'Error serving static file:',
|
|
375
|
+
sanitizedErr,
|
|
376
|
+
);
|
|
377
|
+
handleError(err, res, sendApiMessageResponse, next);
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
next();
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
// The "catchall" handler: for any request that doesn't
|
|
385
|
+
// match one above, send back React's index.html file.
|
|
386
|
+
// app.get('*', (req, res) => {
|
|
387
|
+
// res.sendFile(path.join(__dirname,'..', '..', '..', 'myapp-react', 'index.html'));
|
|
388
|
+
// });
|
|
389
|
+
this.registerAdditionalRenderHooks(app);
|
|
390
|
+
|
|
391
|
+
app.use((req: Request, res: Response, next: NextFunction) => {
|
|
392
|
+
this.renderIndex(req, res, next);
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Base router class providing common router functionality.
|
|
3
|
+
* All routers extend this class to access application context and Express router.
|
|
4
|
+
* @module routers/base
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Router } from 'express';
|
|
8
|
+
import { IApplication } from '../interfaces/application';
|
|
9
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Abstract base class for all routers in the application.
|
|
13
|
+
* Provides access to the Express router and application instance.
|
|
14
|
+
* @template TID Platform-specific ID type (Buffer, ObjectId, etc.)
|
|
15
|
+
* @template TApplication Application instance type
|
|
16
|
+
*/
|
|
17
|
+
export abstract class BaseRouter<
|
|
18
|
+
TID extends PlatformID = Buffer,
|
|
19
|
+
TApplication extends IApplication<TID> = IApplication<TID>,
|
|
20
|
+
> {
|
|
21
|
+
/** Express router instance for registering routes */
|
|
22
|
+
public readonly router: Router;
|
|
23
|
+
/** Application instance providing access to services and configuration */
|
|
24
|
+
public readonly application: TApplication;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new base router instance.
|
|
28
|
+
* @param application Application instance
|
|
29
|
+
*/
|
|
30
|
+
protected constructor(application: TApplication) {
|
|
31
|
+
this.application = application;
|
|
32
|
+
this.router = Router();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Router configuration interface and defaults.
|
|
3
|
+
* Defines configuration options for router setup including static paths, view engine, and middleware.
|
|
4
|
+
* @module routers/router-config
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { RequestHandler } from 'express';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Configuration interface for router setup.
|
|
11
|
+
*/
|
|
12
|
+
export interface RouterConfig {
|
|
13
|
+
/** Array of static path configurations with prefix and directory */
|
|
14
|
+
staticPaths?: Array<{ prefix: string; directory: string }>;
|
|
15
|
+
/** View engine configuration with name and views path */
|
|
16
|
+
viewEngine?: { name: string; viewsPath: string };
|
|
17
|
+
/** Array of middleware functions to apply */
|
|
18
|
+
middleware?: RequestHandler[];
|
|
19
|
+
/** CORS configuration options */
|
|
20
|
+
cors?: {
|
|
21
|
+
/** Allowed origin(s) for CORS */
|
|
22
|
+
origin?: string | string[];
|
|
23
|
+
/** Whether to allow credentials */
|
|
24
|
+
credentials?: boolean;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Default router configuration with empty arrays.
|
|
30
|
+
*/
|
|
31
|
+
export const DefaultRouterConfig: RouterConfig = {
|
|
32
|
+
staticPaths: [],
|
|
33
|
+
middleware: [],
|
|
34
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './route-builder';
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Route builder for fluent route configuration.
|
|
3
|
+
* Provides builder pattern for defining Express routes.
|
|
4
|
+
* @module routing/route-builder
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { RequestHandler } from 'express';
|
|
8
|
+
import { ValidationChain } from 'express-validator';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Builder for constructing route configurations with fluent API.
|
|
13
|
+
* @template TLanguage - Language code type (defaults to string)
|
|
14
|
+
*/
|
|
15
|
+
export class RouteBuilder<TLanguage extends string = string> {
|
|
16
|
+
private config: {
|
|
17
|
+
method?: 'get' | 'post' | 'put' | 'delete' | 'patch';
|
|
18
|
+
path?: string;
|
|
19
|
+
handler?: RequestHandler;
|
|
20
|
+
auth?: boolean;
|
|
21
|
+
cryptoAuth?: boolean;
|
|
22
|
+
validation?: ValidationChain[] | ((lang: TLanguage) => ValidationChain[]);
|
|
23
|
+
schema?: z.ZodSchema;
|
|
24
|
+
middleware?: RequestHandler[];
|
|
25
|
+
transaction?: boolean;
|
|
26
|
+
transactionTimeout?: number;
|
|
27
|
+
rawJson?: boolean;
|
|
28
|
+
} = {};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new RouteBuilder instance.
|
|
32
|
+
* @template T - Language code type
|
|
33
|
+
* @returns {RouteBuilder<T>} New builder instance
|
|
34
|
+
*/
|
|
35
|
+
static create<T extends string = string>(): RouteBuilder<T> {
|
|
36
|
+
return new RouteBuilder<T>();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Sets GET method and path.
|
|
41
|
+
* @param {string} path - Route path
|
|
42
|
+
* @returns {this} This builder for chaining
|
|
43
|
+
*/
|
|
44
|
+
get(path: string): this {
|
|
45
|
+
this.config.method = 'get';
|
|
46
|
+
this.config.path = path;
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Sets POST method and path.
|
|
52
|
+
* @param {string} path - Route path
|
|
53
|
+
* @returns {this} This builder for chaining
|
|
54
|
+
*/
|
|
55
|
+
post(path: string): this {
|
|
56
|
+
this.config.method = 'post';
|
|
57
|
+
this.config.path = path;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Sets PUT method and path.
|
|
63
|
+
* @param {string} path - Route path
|
|
64
|
+
* @returns {this} This builder for chaining
|
|
65
|
+
*/
|
|
66
|
+
put(path: string): this {
|
|
67
|
+
this.config.method = 'put';
|
|
68
|
+
this.config.path = path;
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Sets DELETE method and path.
|
|
74
|
+
* @param {string} path - Route path
|
|
75
|
+
* @returns {this} This builder for chaining
|
|
76
|
+
*/
|
|
77
|
+
delete(path: string): this {
|
|
78
|
+
this.config.method = 'delete';
|
|
79
|
+
this.config.path = path;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Sets PATCH method and path.
|
|
85
|
+
* @param {string} path - Route path
|
|
86
|
+
* @returns {this} This builder for chaining
|
|
87
|
+
*/
|
|
88
|
+
patch(path: string): this {
|
|
89
|
+
this.config.method = 'patch';
|
|
90
|
+
this.config.path = path;
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Enables authentication.
|
|
96
|
+
* @param {boolean} [enabled=true] - Whether to enable authentication
|
|
97
|
+
* @returns {this} This builder for chaining
|
|
98
|
+
*/
|
|
99
|
+
auth(enabled = true): this {
|
|
100
|
+
this.config.auth = enabled;
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Enables crypto authentication.
|
|
106
|
+
* @param {boolean} [enabled=true] - Whether to enable crypto authentication
|
|
107
|
+
* @returns {this} This builder for chaining
|
|
108
|
+
*/
|
|
109
|
+
cryptoAuth(enabled = true): this {
|
|
110
|
+
this.config.cryptoAuth = enabled;
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Sets validation chains.
|
|
116
|
+
* @param {ValidationChain[] | Function} validation - Validation chains or factory function
|
|
117
|
+
* @returns {this} This builder for chaining
|
|
118
|
+
*/
|
|
119
|
+
validate(
|
|
120
|
+
validation: ValidationChain[] | ((lang: TLanguage) => ValidationChain[]),
|
|
121
|
+
): this {
|
|
122
|
+
this.config.validation = validation;
|
|
123
|
+
return this;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Sets Zod schema for validation.
|
|
128
|
+
* @param {z.ZodSchema} schema - Zod schema
|
|
129
|
+
* @returns {this} This builder for chaining
|
|
130
|
+
*/
|
|
131
|
+
schema(schema: z.ZodSchema): this {
|
|
132
|
+
this.config.schema = schema;
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Adds middleware to the route.
|
|
138
|
+
* @param {...RequestHandler[]} middleware - Middleware functions
|
|
139
|
+
* @returns {this} This builder for chaining
|
|
140
|
+
*/
|
|
141
|
+
use(...middleware: RequestHandler[]): this {
|
|
142
|
+
this.config.middleware = [...(this.config.middleware || []), ...middleware];
|
|
143
|
+
return this;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Enables transaction support.
|
|
148
|
+
* @param {boolean} [enabled=true] - Whether to enable transactions
|
|
149
|
+
* @param {number} [timeout] - Transaction timeout in milliseconds
|
|
150
|
+
* @returns {this} This builder for chaining
|
|
151
|
+
*/
|
|
152
|
+
transaction(enabled = true, timeout?: number): this {
|
|
153
|
+
this.config.transaction = enabled;
|
|
154
|
+
if (timeout) this.config.transactionTimeout = timeout;
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Enables raw JSON handling.
|
|
160
|
+
* @param {boolean} [enabled=true] - Whether to enable raw JSON
|
|
161
|
+
* @returns {this} This builder for chaining
|
|
162
|
+
*/
|
|
163
|
+
rawJson(enabled = true): this {
|
|
164
|
+
this.config.rawJson = enabled;
|
|
165
|
+
return this;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Builds the route configuration with handler.
|
|
170
|
+
* @param {RequestHandler} handler - Route handler function
|
|
171
|
+
* @returns {RouteConfig<TLanguage>} Complete route configuration
|
|
172
|
+
* @throws {Error} If method or path not set
|
|
173
|
+
*/
|
|
174
|
+
handle(handler: RequestHandler): RouteConfig<TLanguage> {
|
|
175
|
+
if (!this.config.method || !this.config.path) {
|
|
176
|
+
throw new Error('Method and path must be set before calling handle()');
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
method: this.config.method,
|
|
180
|
+
path: this.config.path,
|
|
181
|
+
handler,
|
|
182
|
+
options: {
|
|
183
|
+
auth: this.config.auth,
|
|
184
|
+
cryptoAuth: this.config.cryptoAuth,
|
|
185
|
+
validation: this.config.validation,
|
|
186
|
+
schema: this.config.schema,
|
|
187
|
+
middleware: this.config.middleware,
|
|
188
|
+
transaction: this.config.transaction,
|
|
189
|
+
transactionTimeout: this.config.transactionTimeout,
|
|
190
|
+
rawJson: this.config.rawJson,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Route configuration interface.
|
|
198
|
+
* @template TLanguage - Language code type (defaults to string)
|
|
199
|
+
*/
|
|
200
|
+
export interface RouteConfig<TLanguage extends string = string> {
|
|
201
|
+
method: 'get' | 'post' | 'put' | 'delete' | 'patch';
|
|
202
|
+
path: string;
|
|
203
|
+
handler: RequestHandler;
|
|
204
|
+
options: {
|
|
205
|
+
auth?: boolean;
|
|
206
|
+
cryptoAuth?: boolean;
|
|
207
|
+
validation?: ValidationChain[] | ((lang: TLanguage) => ValidationChain[]);
|
|
208
|
+
schema?: z.ZodSchema;
|
|
209
|
+
middleware?: RequestHandler[];
|
|
210
|
+
transaction?: boolean;
|
|
211
|
+
transactionTimeout?: number;
|
|
212
|
+
rawJson?: boolean;
|
|
213
|
+
};
|
|
214
|
+
}
|