@digitaldefiance/node-express-suite 1.0.23 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/package.json +8 -7
- package/src/application-base.d.ts +112 -0
- package/src/application-base.d.ts.map +1 -0
- package/src/application-base.js +335 -0
- package/src/application-base.js.map +1 -0
- package/src/application.d.ts +20 -0
- package/src/application.d.ts.map +1 -0
- package/src/application.js +124 -0
- package/src/application.js.map +1 -0
- package/src/backup-code.d.ts +67 -0
- package/src/backup-code.d.ts.map +1 -0
- package/src/backup-code.js +238 -0
- package/src/backup-code.js.map +1 -0
- package/src/constants.d.ts +16 -0
- package/src/constants.d.ts.map +1 -0
- package/src/constants.js +54 -0
- package/src/constants.js.map +1 -0
- package/src/controllers/base.d.ts +63 -0
- package/src/controllers/base.d.ts.map +1 -0
- package/src/controllers/base.js +272 -0
- package/src/controllers/base.js.map +1 -0
- package/src/controllers/{index.ts → index.d.ts} +1 -0
- package/src/controllers/index.d.ts.map +1 -0
- package/src/controllers/index.js +6 -0
- package/src/controllers/index.js.map +1 -0
- package/src/controllers/user.d.ts +45 -0
- package/src/controllers/user.d.ts.map +1 -0
- package/src/controllers/user.js +748 -0
- package/src/controllers/user.js.map +1 -0
- package/src/decorators/base-controller.d.ts +14 -0
- package/src/decorators/base-controller.d.ts.map +1 -0
- package/src/decorators/base-controller.js +49 -0
- package/src/decorators/base-controller.js.map +1 -0
- package/src/decorators/controller.d.ts +32 -0
- package/src/decorators/controller.d.ts.map +1 -0
- package/src/decorators/controller.js +67 -0
- package/src/decorators/controller.js.map +1 -0
- package/src/decorators/{index.ts → index.d.ts} +1 -0
- package/src/decorators/index.d.ts.map +1 -0
- package/src/decorators/index.js +7 -0
- package/src/decorators/index.js.map +1 -0
- package/src/decorators/zod-validation.d.ts +5 -0
- package/src/decorators/zod-validation.d.ts.map +1 -0
- package/src/decorators/zod-validation.js +47 -0
- package/src/decorators/zod-validation.js.map +1 -0
- package/src/defaults.d.ts +7 -0
- package/src/defaults.d.ts.map +1 -0
- package/src/defaults.js +83 -0
- package/src/defaults.js.map +1 -0
- package/src/documents/base.d.ts +3 -0
- package/src/documents/base.d.ts.map +1 -0
- package/src/documents/base.js +3 -0
- package/src/documents/base.js.map +1 -0
- package/src/documents/email-token.d.ts +8 -0
- package/src/documents/email-token.d.ts.map +1 -0
- package/src/documents/email-token.js +3 -0
- package/src/documents/email-token.js.map +1 -0
- package/src/documents/{index.ts → index.d.ts} +1 -0
- package/src/documents/index.d.ts.map +1 -0
- package/src/documents/index.js +3 -0
- package/src/documents/index.js.map +1 -0
- package/src/documents/{mnemonic.ts → mnemonic.d.ts} +2 -5
- package/src/documents/mnemonic.d.ts.map +1 -0
- package/src/documents/mnemonic.js +3 -0
- package/src/documents/mnemonic.js.map +1 -0
- package/src/documents/{role.ts → role.d.ts} +2 -5
- package/src/documents/role.d.ts.map +1 -0
- package/src/documents/role.js +3 -0
- package/src/documents/role.js.map +1 -0
- package/src/documents/used-direct-login-token.d.ts +5 -0
- package/src/documents/used-direct-login-token.d.ts.map +1 -0
- package/src/documents/used-direct-login-token.js +3 -0
- package/src/documents/used-direct-login-token.js.map +1 -0
- package/src/documents/{user-role.ts → user-role.d.ts} +2 -5
- package/src/documents/user-role.d.ts.map +1 -0
- package/src/documents/user-role.js +3 -0
- package/src/documents/user-role.js.map +1 -0
- package/src/documents/{user.ts → user.d.ts} +2 -4
- package/src/documents/user.d.ts.map +1 -0
- package/src/documents/user.js +3 -0
- package/src/documents/user.js.map +1 -0
- package/src/enumerations/base-model-name.d.ts +38 -0
- package/src/enumerations/base-model-name.d.ts.map +1 -0
- package/src/enumerations/base-model-name.js +34 -0
- package/src/enumerations/base-model-name.js.map +1 -0
- package/src/enumerations/{index.ts → index.d.ts} +1 -0
- package/src/enumerations/index.d.ts.map +1 -0
- package/src/enumerations/index.js +8 -0
- package/src/enumerations/index.js.map +1 -0
- package/src/enumerations/length-encoding-type.d.ts +7 -0
- package/src/enumerations/length-encoding-type.d.ts.map +1 -0
- package/src/enumerations/length-encoding-type.js +11 -0
- package/src/enumerations/length-encoding-type.js.map +1 -0
- package/src/enumerations/schema-collection.d.ts +34 -0
- package/src/enumerations/schema-collection.d.ts.map +1 -0
- package/src/enumerations/schema-collection.js +38 -0
- package/src/enumerations/schema-collection.js.map +1 -0
- package/src/enumerations/symmetric-error-type.d.ts +5 -0
- package/src/enumerations/symmetric-error-type.d.ts.map +1 -0
- package/src/enumerations/symmetric-error-type.js +9 -0
- package/src/enumerations/symmetric-error-type.js.map +1 -0
- package/src/environment.d.ts +189 -0
- package/src/environment.d.ts.map +1 -0
- package/src/environment.js +620 -0
- package/src/environment.js.map +1 -0
- package/src/errors/express-validation.d.ts +9 -0
- package/src/errors/express-validation.d.ts.map +1 -0
- package/src/errors/express-validation.js +18 -0
- package/src/errors/express-validation.js.map +1 -0
- package/src/errors/{index.ts → index.d.ts} +1 -0
- package/src/errors/index.d.ts.map +1 -0
- package/src/errors/index.js +16 -0
- package/src/errors/index.js.map +1 -0
- package/src/errors/invalid-backup-code-version.d.ts +6 -0
- package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
- package/src/errors/invalid-backup-code-version.js +15 -0
- package/src/errors/invalid-backup-code-version.js.map +1 -0
- package/src/errors/invalid-jwt-token.d.ts +5 -0
- package/src/errors/invalid-jwt-token.d.ts.map +1 -0
- package/src/errors/invalid-jwt-token.js +11 -0
- package/src/errors/invalid-jwt-token.js.map +1 -0
- package/src/errors/invalid-model.d.ts +6 -0
- package/src/errors/invalid-model.d.ts.map +1 -0
- package/src/errors/invalid-model.js +14 -0
- package/src/errors/invalid-model.js.map +1 -0
- package/src/errors/invalid-new-password.d.ts +5 -0
- package/src/errors/invalid-new-password.d.ts.map +1 -0
- package/src/errors/invalid-new-password.js +14 -0
- package/src/errors/invalid-new-password.js.map +1 -0
- package/src/errors/invalid-password.d.ts +5 -0
- package/src/errors/invalid-password.d.ts.map +1 -0
- package/src/errors/invalid-password.js +14 -0
- package/src/errors/invalid-password.js.map +1 -0
- package/src/errors/missing-validated-data.d.ts +7 -0
- package/src/errors/missing-validated-data.d.ts.map +1 -0
- package/src/errors/missing-validated-data.js +36 -0
- package/src/errors/missing-validated-data.js.map +1 -0
- package/src/errors/mnemonic-or-password-required.d.ts +5 -0
- package/src/errors/mnemonic-or-password-required.d.ts.map +1 -0
- package/src/errors/mnemonic-or-password-required.js +13 -0
- package/src/errors/mnemonic-or-password-required.js.map +1 -0
- package/src/errors/model-not-registered.d.ts +5 -0
- package/src/errors/model-not-registered.d.ts.map +1 -0
- package/src/errors/model-not-registered.js +12 -0
- package/src/errors/model-not-registered.js.map +1 -0
- package/src/errors/mongoose-validation.d.ts +11 -0
- package/src/errors/mongoose-validation.d.ts.map +1 -0
- package/src/errors/mongoose-validation.js +17 -0
- package/src/errors/mongoose-validation.js.map +1 -0
- package/src/errors/symmetric.d.ts +8 -0
- package/src/errors/symmetric.d.ts.map +1 -0
- package/src/errors/symmetric.js +23 -0
- package/src/errors/symmetric.js.map +1 -0
- package/src/errors/token-expired.d.ts +5 -0
- package/src/errors/token-expired.d.ts.map +1 -0
- package/src/errors/token-expired.js +11 -0
- package/src/errors/token-expired.js.map +1 -0
- package/src/get-language.d.ts +2 -0
- package/src/get-language.d.ts.map +1 -0
- package/src/get-language.js +30 -0
- package/src/get-language.js.map +1 -0
- package/src/get-timezone.d.ts +3 -0
- package/src/get-timezone.d.ts.map +1 -0
- package/src/get-timezone.js +31 -0
- package/src/get-timezone.js.map +1 -0
- package/src/{index.ts → index.d.ts} +1 -1
- package/src/index.d.ts.map +1 -0
- package/src/index.js +28 -0
- package/src/index.js.map +1 -0
- package/src/interfaces/{api-error-response.ts → api-error-response.d.ts} +2 -2
- package/src/interfaces/api-error-response.d.ts.map +1 -0
- package/src/interfaces/api-error-response.js +3 -0
- package/src/interfaces/api-error-response.js.map +1 -0
- package/src/interfaces/api-express-validation-error-response.d.ts +7 -0
- package/src/interfaces/api-express-validation-error-response.d.ts.map +1 -0
- package/src/interfaces/api-express-validation-error-response.js +3 -0
- package/src/interfaces/api-express-validation-error-response.js.map +1 -0
- package/src/interfaces/api-message-response.d.ts +4 -0
- package/src/interfaces/api-message-response.d.ts.map +1 -0
- package/src/interfaces/api-message-response.js +3 -0
- package/src/interfaces/api-message-response.js.map +1 -0
- package/src/interfaces/{api-mongo-validation-error-response.ts → api-mongo-validation-error-response.d.ts} +2 -2
- package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
- package/src/interfaces/api-mongo-validation-error-response.js +3 -0
- package/src/interfaces/api-mongo-validation-error-response.js.map +1 -0
- package/src/interfaces/api-responses/{backup-codes-response.ts → backup-codes-response.d.ts} +2 -2
- package/src/interfaces/api-responses/backup-codes-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/backup-codes-response.js +3 -0
- package/src/interfaces/api-responses/backup-codes-response.js.map +1 -0
- package/src/interfaces/api-responses/{challenge-response.ts → challenge-response.d.ts} +3 -3
- package/src/interfaces/api-responses/challenge-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/challenge-response.js +3 -0
- package/src/interfaces/api-responses/challenge-response.js.map +1 -0
- package/src/interfaces/api-responses/{code-count-response.ts → code-count-response.d.ts} +2 -2
- package/src/interfaces/api-responses/code-count-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/code-count-response.js +3 -0
- package/src/interfaces/api-responses/code-count-response.js.map +1 -0
- package/src/interfaces/api-responses/{index.ts → index.d.ts} +1 -0
- package/src/interfaces/api-responses/index.d.ts.map +1 -0
- package/src/interfaces/api-responses/index.js +11 -0
- package/src/interfaces/api-responses/index.js.map +1 -0
- package/src/interfaces/api-responses/{login-response.ts → login-response.d.ts} +4 -4
- package/src/interfaces/api-responses/login-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/login-response.js +3 -0
- package/src/interfaces/api-responses/login-response.js.map +1 -0
- package/src/interfaces/api-responses/{mnemonic-response.ts → mnemonic-response.d.ts} +2 -2
- package/src/interfaces/api-responses/mnemonic-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/mnemonic-response.js +3 -0
- package/src/interfaces/api-responses/mnemonic-response.js.map +1 -0
- package/src/interfaces/api-responses/{registration-response.ts → registration-response.d.ts} +3 -3
- package/src/interfaces/api-responses/registration-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/registration-response.js +3 -0
- package/src/interfaces/api-responses/registration-response.js.map +1 -0
- package/src/interfaces/api-responses/{request-user-response.ts → request-user-response.d.ts} +2 -2
- package/src/interfaces/api-responses/request-user-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/request-user-response.js +3 -0
- package/src/interfaces/api-responses/request-user-response.js.map +1 -0
- package/src/interfaces/{application.ts → application.d.ts} +7 -7
- package/src/interfaces/application.d.ts.map +1 -0
- package/src/interfaces/application.js +3 -0
- package/src/interfaces/application.js.map +1 -0
- package/src/interfaces/backend-objects/email-token.d.ts +4 -0
- package/src/interfaces/backend-objects/email-token.d.ts.map +1 -0
- package/src/interfaces/backend-objects/email-token.js +3 -0
- package/src/interfaces/backend-objects/email-token.js.map +1 -0
- package/src/interfaces/backend-objects/{index.ts → index.d.ts} +1 -0
- package/src/interfaces/backend-objects/index.d.ts.map +1 -0
- package/src/interfaces/backend-objects/index.js +8 -0
- package/src/interfaces/backend-objects/index.js.map +1 -0
- package/src/interfaces/backend-objects/{request-user.ts → request-user.d.ts} +2 -7
- package/src/interfaces/backend-objects/request-user.d.ts.map +1 -0
- package/src/interfaces/backend-objects/request-user.js +3 -0
- package/src/interfaces/backend-objects/request-user.js.map +1 -0
- package/src/interfaces/backend-objects/{role.ts → role.d.ts} +1 -1
- package/src/interfaces/backend-objects/role.d.ts.map +1 -0
- package/src/interfaces/backend-objects/role.js +3 -0
- package/src/interfaces/backend-objects/role.js.map +1 -0
- package/src/interfaces/backend-objects/user.d.ts +4 -0
- package/src/interfaces/backend-objects/user.d.ts.map +1 -0
- package/src/interfaces/backend-objects/user.js +3 -0
- package/src/interfaces/backend-objects/user.js.map +1 -0
- package/src/interfaces/checksum-config.d.ts +5 -0
- package/src/interfaces/checksum-config.d.ts.map +1 -0
- package/src/interfaces/checksum-config.js +3 -0
- package/src/interfaces/checksum-config.js.map +1 -0
- package/src/interfaces/checksum-consts.d.ts +11 -0
- package/src/interfaces/checksum-consts.d.ts.map +1 -0
- package/src/interfaces/checksum-consts.js +3 -0
- package/src/interfaces/checksum-consts.js.map +1 -0
- package/src/interfaces/{constants.ts → constants.d.ts} +5 -5
- package/src/interfaces/constants.d.ts.map +1 -0
- package/src/interfaces/constants.js +3 -0
- package/src/interfaces/constants.js.map +1 -0
- package/src/interfaces/create-user-basics.d.ts +18 -0
- package/src/interfaces/create-user-basics.d.ts.map +1 -0
- package/src/interfaces/create-user-basics.js +3 -0
- package/src/interfaces/create-user-basics.js.map +1 -0
- package/src/interfaces/csp-config.d.ts +14 -0
- package/src/interfaces/csp-config.d.ts.map +1 -0
- package/src/interfaces/csp-config.js +3 -0
- package/src/interfaces/csp-config.js.map +1 -0
- package/src/interfaces/deep-partial.d.ts +4 -0
- package/src/interfaces/deep-partial.d.ts.map +1 -0
- package/src/interfaces/deep-partial.js +3 -0
- package/src/interfaces/deep-partial.js.map +1 -0
- package/src/interfaces/{discriminator-collections.ts → discriminator-collections.d.ts} +3 -3
- package/src/interfaces/discriminator-collections.d.ts.map +1 -0
- package/src/interfaces/discriminator-collections.js +3 -0
- package/src/interfaces/discriminator-collections.js.map +1 -0
- package/src/interfaces/email-service.d.ts +4 -0
- package/src/interfaces/email-service.d.ts.map +1 -0
- package/src/interfaces/email-service.js +3 -0
- package/src/interfaces/email-service.js.map +1 -0
- package/src/interfaces/environment-mongo.d.ts +76 -0
- package/src/interfaces/environment-mongo.d.ts.map +1 -0
- package/src/interfaces/environment-mongo.js +3 -0
- package/src/interfaces/environment-mongo.js.map +1 -0
- package/src/interfaces/environment.d.ts +181 -0
- package/src/interfaces/environment.d.ts.map +1 -0
- package/src/interfaces/environment.js +3 -0
- package/src/interfaces/environment.js.map +1 -0
- package/src/interfaces/failable-result.d.ts +7 -0
- package/src/interfaces/failable-result.d.ts.map +1 -0
- package/src/interfaces/failable-result.js +3 -0
- package/src/interfaces/failable-result.js.map +1 -0
- package/src/interfaces/fec-consts.d.ts +5 -0
- package/src/interfaces/fec-consts.d.ts.map +1 -0
- package/src/interfaces/fec-consts.js +3 -0
- package/src/interfaces/fec-consts.js.map +1 -0
- package/src/interfaces/handleable-error-options.d.ts +7 -0
- package/src/interfaces/handleable-error-options.d.ts.map +1 -0
- package/src/interfaces/handleable-error-options.js +3 -0
- package/src/interfaces/handleable-error-options.js.map +1 -0
- package/src/interfaces/{index.ts → index.d.ts} +1 -0
- package/src/interfaces/index.d.ts.map +1 -0
- package/src/interfaces/index.js +33 -0
- package/src/interfaces/index.js.map +1 -0
- package/src/interfaces/jwt-consts.d.ts +11 -0
- package/src/interfaces/jwt-consts.d.ts.map +1 -0
- package/src/interfaces/jwt-consts.js +3 -0
- package/src/interfaces/jwt-consts.js.map +1 -0
- package/src/interfaces/jwt-sign-response.d.ts +11 -0
- package/src/interfaces/jwt-sign-response.d.ts.map +1 -0
- package/src/interfaces/jwt-sign-response.js +3 -0
- package/src/interfaces/jwt-sign-response.js.map +1 -0
- package/src/interfaces/mongo-errors.d.ts +5 -0
- package/src/interfaces/mongo-errors.d.ts.map +1 -0
- package/src/interfaces/mongo-errors.js +3 -0
- package/src/interfaces/mongo-errors.js.map +1 -0
- package/src/interfaces/request-user.d.ts +42 -0
- package/src/interfaces/request-user.d.ts.map +1 -0
- package/src/interfaces/request-user.js +3 -0
- package/src/interfaces/request-user.js.map +1 -0
- package/src/interfaces/required-string-keys.d.ts +22 -0
- package/src/interfaces/required-string-keys.d.ts.map +1 -0
- package/src/interfaces/required-string-keys.js +3 -0
- package/src/interfaces/required-string-keys.js.map +1 -0
- package/src/interfaces/schema.d.ts +29 -0
- package/src/interfaces/schema.d.ts.map +1 -0
- package/src/interfaces/schema.js +3 -0
- package/src/interfaces/schema.js.map +1 -0
- package/src/interfaces/server-init-result.d.ts +35 -0
- package/src/interfaces/server-init-result.d.ts.map +1 -0
- package/src/interfaces/server-init-result.js +3 -0
- package/src/interfaces/server-init-result.js.map +1 -0
- package/src/interfaces/status-code-response.d.ts +7 -0
- package/src/interfaces/status-code-response.d.ts.map +1 -0
- package/src/interfaces/status-code-response.js +3 -0
- package/src/interfaces/status-code-response.js.map +1 -0
- package/src/interfaces/symmetric-encryption-results.d.ts +3 -3
- package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
- package/src/interfaces/symmetric-encryption-results.js.map +1 -1
- package/src/interfaces/{token-response.ts → token-response.d.ts} +2 -2
- package/src/interfaces/token-response.d.ts.map +1 -0
- package/src/interfaces/token-response.js +3 -0
- package/src/interfaces/token-response.js.map +1 -0
- package/src/middlewares/authenticate-crypto.d.ts +13 -0
- package/src/middlewares/authenticate-crypto.d.ts.map +1 -0
- package/src/middlewares/authenticate-crypto.js +146 -0
- package/src/middlewares/authenticate-crypto.js.map +1 -0
- package/src/middlewares/authenticate-token.d.ts +24 -0
- package/src/middlewares/authenticate-token.d.ts.map +1 -0
- package/src/middlewares/authenticate-token.js +102 -0
- package/src/middlewares/authenticate-token.js.map +1 -0
- package/src/middlewares/cleanup-crypto.d.ts +7 -0
- package/src/middlewares/cleanup-crypto.d.ts.map +1 -0
- package/src/middlewares/cleanup-crypto.js +32 -0
- package/src/middlewares/cleanup-crypto.js.map +1 -0
- package/src/middlewares/{index.ts → index.d.ts} +1 -0
- package/src/middlewares/index.d.ts.map +1 -0
- package/src/middlewares/index.js +8 -0
- package/src/middlewares/index.js.map +1 -0
- package/src/middlewares/set-global-context-language.d.ts +3 -0
- package/src/middlewares/set-global-context-language.d.ts.map +1 -0
- package/src/middlewares/set-global-context-language.js +14 -0
- package/src/middlewares/set-global-context-language.js.map +1 -0
- package/src/middlewares.d.ts +18 -0
- package/src/middlewares.d.ts.map +1 -0
- package/src/middlewares.js +74 -0
- package/src/middlewares.js.map +1 -0
- package/src/model-registry.d.ts +23 -0
- package/src/model-registry.d.ts.map +1 -0
- package/src/model-registry.js +47 -0
- package/src/model-registry.js.map +1 -0
- package/src/models/email-token.d.ts +11 -0
- package/src/models/email-token.d.ts.map +1 -0
- package/src/models/email-token.js +11 -0
- package/src/models/email-token.js.map +1 -0
- package/src/models/{index.ts → index.d.ts} +1 -0
- package/src/models/index.d.ts.map +1 -0
- package/src/models/index.js +10 -0
- package/src/models/index.js.map +1 -0
- package/src/models/mnemonic.d.ts +11 -0
- package/src/models/mnemonic.d.ts.map +1 -0
- package/src/models/mnemonic.js +11 -0
- package/src/models/mnemonic.js.map +1 -0
- package/src/models/role.d.ts +11 -0
- package/src/models/role.d.ts.map +1 -0
- package/src/models/role.js +11 -0
- package/src/models/role.js.map +1 -0
- package/src/models/used-direct-login-token.d.ts +11 -0
- package/src/models/used-direct-login-token.d.ts.map +1 -0
- package/src/models/used-direct-login-token.js +11 -0
- package/src/models/used-direct-login-token.js.map +1 -0
- package/src/models/user-role.d.ts +6 -0
- package/src/models/user-role.d.ts.map +1 -0
- package/src/models/user-role.js +10 -0
- package/src/models/user-role.js.map +1 -0
- package/src/models/user.d.ts +7 -0
- package/src/models/user.d.ts.map +1 -0
- package/src/models/user.js +11 -0
- package/src/models/user.js.map +1 -0
- package/src/registry/email-service-registry.d.ts +9 -0
- package/src/registry/email-service-registry.d.ts.map +1 -0
- package/src/registry/email-service-registry.js +18 -0
- package/src/registry/email-service-registry.js.map +1 -0
- package/src/registry/{index.ts → index.d.ts} +1 -0
- package/src/registry/index.d.ts.map +1 -0
- package/src/registry/index.js +6 -0
- package/src/registry/index.js.map +1 -0
- package/src/routers/api.d.ts +27 -0
- package/src/routers/api.d.ts.map +1 -0
- package/src/routers/api.js +52 -0
- package/src/routers/api.js.map +1 -0
- package/src/routers/app.d.ts +28 -0
- package/src/routers/app.d.ts.map +1 -0
- package/src/routers/app.js +186 -0
- package/src/routers/app.js.map +1 -0
- package/src/routers/base.d.ts +12 -0
- package/src/routers/base.d.ts.map +1 -0
- package/src/routers/base.js +14 -0
- package/src/routers/base.js.map +1 -0
- package/src/routers/{index.ts → index.d.ts} +1 -0
- package/src/routers/index.d.ts.map +1 -0
- package/src/routers/index.js +7 -0
- package/src/routers/index.js.map +1 -0
- package/src/schemas/email-token.d.ts +38 -0
- package/src/schemas/email-token.d.ts.map +1 -0
- package/src/schemas/email-token.js +54 -0
- package/src/schemas/email-token.js.map +1 -0
- package/src/schemas/{index.ts → index.d.ts} +2 -1
- package/src/schemas/index.d.ts.map +1 -0
- package/src/schemas/index.js +11 -0
- package/src/schemas/index.js.map +1 -0
- package/src/schemas/mnemonic.d.ts +20 -0
- package/src/schemas/mnemonic.d.ts.map +1 -0
- package/src/schemas/mnemonic.js +30 -0
- package/src/schemas/mnemonic.js.map +1 -0
- package/src/schemas/role.d.ts +32 -0
- package/src/schemas/role.d.ts.map +1 -0
- package/src/schemas/role.js +86 -0
- package/src/schemas/role.js.map +1 -0
- package/src/schemas/schema.d.ts +40 -0
- package/src/schemas/schema.d.ts.map +1 -0
- package/src/schemas/schema.js +62 -0
- package/src/schemas/schema.js.map +1 -0
- package/src/schemas/used-direct-login-token.d.ts +27 -0
- package/src/schemas/used-direct-login-token.d.ts.map +1 -0
- package/src/schemas/used-direct-login-token.js +23 -0
- package/src/schemas/used-direct-login-token.js.map +1 -0
- package/src/schemas/user-role.d.ts +29 -0
- package/src/schemas/user-role.d.ts.map +1 -0
- package/src/schemas/user-role.js +54 -0
- package/src/schemas/user-role.js.map +1 -0
- package/src/schemas/user.d.ts +21 -0
- package/src/schemas/user.d.ts.map +1 -0
- package/src/schemas/user.js +176 -0
- package/src/schemas/user.js.map +1 -0
- package/src/services/backup-code.d.ts +78 -0
- package/src/services/backup-code.d.ts.map +1 -0
- package/src/services/backup-code.js +184 -0
- package/src/services/backup-code.js.map +1 -0
- package/src/services/base.d.ts +13 -0
- package/src/services/base.d.ts.map +1 -0
- package/src/services/base.js +15 -0
- package/src/services/base.js.map +1 -0
- package/src/services/checksum.d.ts +67 -0
- package/src/services/checksum.d.ts.map +1 -0
- package/src/services/checksum.js +143 -0
- package/src/services/checksum.js.map +1 -0
- package/src/services/crc.d.ts +87 -0
- package/src/services/crc.d.ts.map +1 -0
- package/src/services/crc.js +198 -0
- package/src/services/crc.js.map +1 -0
- package/src/services/database-initialization.d.ts +105 -0
- package/src/services/database-initialization.d.ts.map +1 -0
- package/src/services/database-initialization.js +782 -0
- package/src/services/database-initialization.js.map +1 -0
- package/src/services/direct-login-token.d.ts +9 -0
- package/src/services/direct-login-token.d.ts.map +1 -0
- package/src/services/direct-login-token.js +41 -0
- package/src/services/direct-login-token.js.map +1 -0
- package/src/services/fec-usage-example.d.ts +38 -0
- package/src/services/fec-usage-example.d.ts.map +1 -0
- package/src/services/fec-usage-example.js +75 -0
- package/src/services/fec-usage-example.js.map +1 -0
- package/src/services/fec.d.ts +46 -0
- package/src/services/fec.d.ts.map +1 -0
- package/src/services/fec.js +192 -0
- package/src/services/fec.js.map +1 -0
- package/src/services/{index.ts → index.d.ts} +1 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.js +22 -0
- package/src/services/index.js.map +1 -0
- package/src/services/jwt.d.ts +33 -0
- package/src/services/jwt.d.ts.map +1 -0
- package/src/services/jwt.js +91 -0
- package/src/services/jwt.js.map +1 -0
- package/src/services/key-wrapping.d.ts +60 -0
- package/src/services/key-wrapping.d.ts.map +1 -0
- package/src/services/key-wrapping.js +311 -0
- package/src/services/key-wrapping.js.map +1 -0
- package/src/services/mnemonic.d.ts +61 -0
- package/src/services/mnemonic.d.ts.map +1 -0
- package/src/services/mnemonic.js +115 -0
- package/src/services/mnemonic.js.map +1 -0
- package/src/services/request-user.d.ts +20 -0
- package/src/services/request-user.d.ts.map +1 -0
- package/src/services/request-user.js +50 -0
- package/src/services/request-user.js.map +1 -0
- package/src/services/role.d.ts +88 -0
- package/src/services/role.d.ts.map +1 -0
- package/src/services/role.js +263 -0
- package/src/services/role.js.map +1 -0
- package/src/services/symmetric.d.ts +42 -0
- package/src/services/symmetric.d.ts.map +1 -0
- package/src/services/symmetric.js +101 -0
- package/src/services/symmetric.js.map +1 -0
- package/src/services/system-user.d.ts +17 -0
- package/src/services/system-user.d.ts.map +1 -0
- package/src/services/system-user.js +46 -0
- package/src/services/system-user.js.map +1 -0
- package/src/services/user.d.ts +320 -0
- package/src/services/user.d.ts.map +1 -0
- package/src/services/user.js +1378 -0
- package/src/services/user.js.map +1 -0
- package/src/services/xor.d.ts +24 -0
- package/src/services/xor.d.ts.map +1 -0
- package/src/services/xor.js +37 -0
- package/src/services/xor.js.map +1 -0
- package/src/types.d.ts +66 -40
- package/src/types.d.ts.map +1 -0
- package/src/types.js +14 -0
- package/src/types.js.map +1 -0
- package/src/utils.d.ts +202 -0
- package/src/utils.d.ts.map +1 -0
- package/src/utils.js +784 -0
- package/src/utils.js.map +1 -0
- package/LICENSE +0 -21
- package/src/application-base.ts +0 -492
- package/src/application.ts +0 -254
- package/src/backup-code.ts +0 -336
- package/src/constants.ts +0 -69
- package/src/controllers/base.ts +0 -440
- package/src/controllers/user.ts +0 -1451
- package/src/decorators/base-controller.ts +0 -61
- package/src/decorators/controller.ts +0 -109
- package/src/decorators/zod-validation.ts +0 -57
- package/src/defaults.ts +0 -94
- package/src/documents/base.ts +0 -7
- package/src/documents/email-token.ts +0 -14
- package/src/documents/used-direct-login-token.ts +0 -7
- package/src/enumerations/base-model-name.ts +0 -41
- package/src/enumerations/length-encoding-type.ts +0 -6
- package/src/enumerations/schema-collection.ts +0 -33
- package/src/enumerations/symmetric-error-type.ts +0 -4
- package/src/environment.ts +0 -770
- package/src/errors/express-validation.ts +0 -21
- package/src/errors/invalid-backup-code-version.ts +0 -14
- package/src/errors/invalid-jwt-token.ts +0 -10
- package/src/errors/invalid-model.ts +0 -11
- package/src/errors/invalid-new-password.ts +0 -18
- package/src/errors/invalid-password.ts +0 -13
- package/src/errors/missing-validated-data.ts +0 -36
- package/src/errors/mnemonic-or-password-required.ts +0 -12
- package/src/errors/model-not-registered.ts +0 -11
- package/src/errors/mongoose-validation.ts +0 -34
- package/src/errors/symmetric.ts +0 -41
- package/src/errors/token-expired.ts +0 -10
- package/src/get-language.ts +0 -53
- package/src/get-timezone.ts +0 -45
- package/src/interfaces/api-express-validation-error-response.ts +0 -8
- package/src/interfaces/api-message-response.ts +0 -3
- package/src/interfaces/backend-objects/email-token.ts +0 -11
- package/src/interfaces/backend-objects/user.ts +0 -9
- package/src/interfaces/checksum-config.ts +0 -4
- package/src/interfaces/checksum-consts.ts +0 -13
- package/src/interfaces/create-user-basics.ts +0 -17
- package/src/interfaces/csp-config.ts +0 -35
- package/src/interfaces/deep-partial.ts +0 -3
- package/src/interfaces/email-service.ts +0 -8
- package/src/interfaces/environment-mongo.ts +0 -76
- package/src/interfaces/environment.ts +0 -181
- package/src/interfaces/failable-result.ts +0 -6
- package/src/interfaces/fec-consts.ts +0 -4
- package/src/interfaces/handleable-error-options.ts +0 -6
- package/src/interfaces/jwt-consts.ts +0 -23
- package/src/interfaces/jwt-sign-response.ts +0 -19
- package/src/interfaces/mongo-errors.ts +0 -5
- package/src/interfaces/request-user.ts +0 -50
- package/src/interfaces/required-string-keys.ts +0 -26
- package/src/interfaces/schema.ts +0 -31
- package/src/interfaces/server-init-result.ts +0 -37
- package/src/interfaces/status-code-response.ts +0 -7
- package/src/interfaces/symmetric-encryption-results.ts +0 -4
- package/src/middlewares/authenticate-crypto.ts +0 -243
- package/src/middlewares/authenticate-token.ts +0 -152
- package/src/middlewares/cleanup-crypto.ts +0 -40
- package/src/middlewares/set-global-context-language.ts +0 -24
- package/src/middlewares.ts +0 -120
- package/src/model-registry.ts +0 -75
- package/src/models/email-token.ts +0 -19
- package/src/models/mnemonic.ts +0 -19
- package/src/models/role.ts +0 -19
- package/src/models/used-direct-login-token.ts +0 -23
- package/src/models/user-role.ts +0 -17
- package/src/models/user.ts +0 -19
- package/src/registry/email-service-registry.ts +0 -24
- package/src/routers/api.ts +0 -151
- package/src/routers/app.ts +0 -258
- package/src/routers/base.ts +0 -17
- package/src/schemas/email-token.ts +0 -91
- package/src/schemas/mnemonic.ts +0 -37
- package/src/schemas/role.ts +0 -127
- package/src/schemas/schema.ts +0 -140
- package/src/schemas/used-direct-login-token.ts +0 -38
- package/src/schemas/user-role.ts +0 -75
- package/src/schemas/user.ts +0 -202
- package/src/services/backup-code.ts +0 -316
- package/src/services/base.ts +0 -33
- package/src/services/checksum.ts +0 -161
- package/src/services/crc.ts +0 -213
- package/src/services/database-initialization.ts +0 -1479
- package/src/services/db-init-cache.d.ts +0 -16
- package/src/services/direct-login-token.ts +0 -62
- package/src/services/fec-usage-example.ts +0 -102
- package/src/services/fec.ts +0 -296
- package/src/services/jwt.ts +0 -134
- package/src/services/key-wrapping.ts +0 -434
- package/src/services/mnemonic.ts +0 -167
- package/src/services/request-user.ts +0 -62
- package/src/services/role.ts +0 -396
- package/src/services/symmetric.ts +0 -139
- package/src/services/system-user.ts +0 -82
- package/src/services/user.ts +0 -2137
- package/src/services/xor.ts +0 -34
- package/src/types.ts +0 -128
- package/src/utils.ts +0 -1022
package/src/services/role.ts
DELETED
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
import { MemberType } from '@digitaldefiance/ecies-lib';
|
|
2
|
-
import {
|
|
3
|
-
GlobalActiveContext,
|
|
4
|
-
IActiveContext,
|
|
5
|
-
PluginI18nEngine,
|
|
6
|
-
} from '@digitaldefiance/i18n-lib';
|
|
7
|
-
import {
|
|
8
|
-
IRoleBase,
|
|
9
|
-
IRoleDTO,
|
|
10
|
-
ITokenRole,
|
|
11
|
-
ITokenRoleDTO,
|
|
12
|
-
IUserRoleBase,
|
|
13
|
-
LastAdminError,
|
|
14
|
-
Role,
|
|
15
|
-
} from '@digitaldefiance/suite-core-lib';
|
|
16
|
-
import { ClientSession, Document, Types } from 'mongoose';
|
|
17
|
-
import { IBaseDocument, IUserDocument } from '../documents';
|
|
18
|
-
import { IRoleDocument } from '../documents/role';
|
|
19
|
-
import { IUserRoleDocument } from '../documents/user-role';
|
|
20
|
-
import { BaseModelName } from '../enumerations/base-model-name';
|
|
21
|
-
import { IApplication } from '../interfaces/application';
|
|
22
|
-
import { IRoleBackendObject } from '../interfaces/backend-objects/role';
|
|
23
|
-
import { ModelRegistry } from '../model-registry';
|
|
24
|
-
import { omit } from '../utils';
|
|
25
|
-
import { BaseService } from './base';
|
|
26
|
-
import { Environment } from '../environment';
|
|
27
|
-
import { IConstants } from '../interfaces';
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Service for managing roles
|
|
31
|
-
*/
|
|
32
|
-
export class RoleService<
|
|
33
|
-
I = Types.ObjectId,
|
|
34
|
-
D extends Date = Date,
|
|
35
|
-
TTokenRole extends ITokenRole<I, D> = ITokenRole<I, D>,
|
|
36
|
-
> extends BaseService {
|
|
37
|
-
/**
|
|
38
|
-
* Constructor for the role service
|
|
39
|
-
* @param application The application object
|
|
40
|
-
*/
|
|
41
|
-
constructor(application: IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants>,) {
|
|
42
|
-
super(application);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public static roleToRoleDTO<I = Types.ObjectId, D extends Date = Date>(
|
|
46
|
-
role: ITokenRole<I, D> | IRoleDocument | Partial<IRoleBase<I>>,
|
|
47
|
-
): ITokenRoleDTO {
|
|
48
|
-
return {
|
|
49
|
-
...(role instanceof Document ? role.toObject() : role),
|
|
50
|
-
_id: (role._id instanceof Types.ObjectId
|
|
51
|
-
? role._id.toString()
|
|
52
|
-
: role._id) as string,
|
|
53
|
-
translatedName:
|
|
54
|
-
'translatedName' in role ? role.translatedName : role.name,
|
|
55
|
-
createdBy: (role.createdBy instanceof Date
|
|
56
|
-
? role.createdBy.toString()
|
|
57
|
-
: role.createdBy) as string,
|
|
58
|
-
updatedBy: (role.updatedBy instanceof Date
|
|
59
|
-
? role.updatedBy.toString()
|
|
60
|
-
: role.updatedBy) as string,
|
|
61
|
-
...(role.deletedBy
|
|
62
|
-
? {
|
|
63
|
-
deletedBy: (role.deletedBy instanceof Date
|
|
64
|
-
? role.deletedBy.toString()
|
|
65
|
-
: role.deletedBy) as string,
|
|
66
|
-
}
|
|
67
|
-
: {}),
|
|
68
|
-
} as ITokenRoleDTO;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Given a Role DTO, reconstitute ids and dates
|
|
73
|
-
* @param role The Role DTO
|
|
74
|
-
* @returns An IRoleBackendObject
|
|
75
|
-
*/
|
|
76
|
-
public static hydrateRoleDTOToBackend(
|
|
77
|
-
role: ITokenRoleDTO,
|
|
78
|
-
): IRoleBackendObject {
|
|
79
|
-
return {
|
|
80
|
-
...(omit<ITokenRoleDTO, 'translatedName'>(role, [
|
|
81
|
-
'translatedName',
|
|
82
|
-
]) as IRoleDTO),
|
|
83
|
-
_id: new Types.ObjectId(role._id),
|
|
84
|
-
name: role.name as Role,
|
|
85
|
-
createdAt: new Date(role.createdAt),
|
|
86
|
-
createdBy: new Types.ObjectId(role.createdBy),
|
|
87
|
-
updatedAt: new Date(role.updatedAt),
|
|
88
|
-
updatedBy: new Types.ObjectId(role.updatedBy),
|
|
89
|
-
...(role.deletedAt ? { deletedAt: new Date(role.deletedAt) } : {}),
|
|
90
|
-
...(role.deletedBy
|
|
91
|
-
? {
|
|
92
|
-
deletedBy: new Types.ObjectId(role.deletedBy),
|
|
93
|
-
}
|
|
94
|
-
: {}),
|
|
95
|
-
} as IRoleBackendObject;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Gets the role ID by name
|
|
100
|
-
* @param roleName The name of the role
|
|
101
|
-
* @returns The role ID or null if not found
|
|
102
|
-
*/
|
|
103
|
-
public async getRoleIdByName(
|
|
104
|
-
roleName: Role,
|
|
105
|
-
session?: ClientSession,
|
|
106
|
-
): Promise<Types.ObjectId | null> {
|
|
107
|
-
const RoleModel = ModelRegistry.instance.get<
|
|
108
|
-
IRoleBase<Types.ObjectId, Date, Role>,
|
|
109
|
-
IBaseDocument<IRoleBase<Types.ObjectId, Date, Role>>
|
|
110
|
-
>(BaseModelName.Role).model;
|
|
111
|
-
const role = await RoleModel.findOne({ name: roleName }, undefined, {
|
|
112
|
-
session,
|
|
113
|
-
}).select('_id');
|
|
114
|
-
if (!role) {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
return role._id;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Creates a new role
|
|
122
|
-
* @param roleData The role data
|
|
123
|
-
* @param session Optional mongoose session
|
|
124
|
-
* @returns The created role document
|
|
125
|
-
*/
|
|
126
|
-
public async createRole(
|
|
127
|
-
roleData: IRoleBase<Types.ObjectId, Date, Role>,
|
|
128
|
-
session?: ClientSession | null,
|
|
129
|
-
): Promise<IRoleDocument> {
|
|
130
|
-
const RoleModel = ModelRegistry.instance.get<
|
|
131
|
-
IRoleBase<Types.ObjectId, Date, Role>,
|
|
132
|
-
IBaseDocument<IRoleBase<Types.ObjectId, Date, Role>>
|
|
133
|
-
>(BaseModelName.Role).model;
|
|
134
|
-
const role = new RoleModel(roleData);
|
|
135
|
-
const savedRole = await role.save(session ? { session } : {});
|
|
136
|
-
return savedRole;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Adds a user to a role
|
|
141
|
-
* @param roleId - The role id
|
|
142
|
-
* @param userId - The user id
|
|
143
|
-
* @param createdBy - The user creating the relationship
|
|
144
|
-
* @param session Optional mongoose session
|
|
145
|
-
*/
|
|
146
|
-
public async addUserToRole(
|
|
147
|
-
roleId: Types.ObjectId,
|
|
148
|
-
userId: Types.ObjectId,
|
|
149
|
-
createdBy: Types.ObjectId,
|
|
150
|
-
session?: ClientSession,
|
|
151
|
-
overrideId?: Types.ObjectId,
|
|
152
|
-
): Promise<IUserRoleDocument> {
|
|
153
|
-
const UserRoleModel = ModelRegistry.instance.get<
|
|
154
|
-
IUserRoleBase<Types.ObjectId, Date>,
|
|
155
|
-
IUserRoleDocument
|
|
156
|
-
>(BaseModelName.UserRole).model;
|
|
157
|
-
|
|
158
|
-
// Check if the user-role relationship already exists (and is not deleted)
|
|
159
|
-
const existingUserRole = await UserRoleModel.findOne({
|
|
160
|
-
userId,
|
|
161
|
-
roleId,
|
|
162
|
-
deletedAt: { $exists: false },
|
|
163
|
-
}).session(session ?? null);
|
|
164
|
-
|
|
165
|
-
if (existingUserRole) {
|
|
166
|
-
// Relationship already exists, no need to create it again
|
|
167
|
-
return existingUserRole;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const userRole = new UserRoleModel({
|
|
171
|
-
...(overrideId ? { _id: overrideId } : {}),
|
|
172
|
-
userId,
|
|
173
|
-
roleId,
|
|
174
|
-
createdBy,
|
|
175
|
-
updatedBy: createdBy,
|
|
176
|
-
});
|
|
177
|
-
const result = await userRole.save({ session });
|
|
178
|
-
return result;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Removes a user from a role
|
|
183
|
-
* @param roleId - The role id
|
|
184
|
-
* @param userId - The user id
|
|
185
|
-
* @param deletedBy - The user removing the relationship
|
|
186
|
-
* @param session Optional mongoose session
|
|
187
|
-
* @throws LastAdminError if attempting to remove the last admin
|
|
188
|
-
*/
|
|
189
|
-
public async removeUserFromRole(
|
|
190
|
-
roleId: Types.ObjectId,
|
|
191
|
-
userId: Types.ObjectId,
|
|
192
|
-
deletedBy: Types.ObjectId,
|
|
193
|
-
session?: ClientSession,
|
|
194
|
-
): Promise<void> {
|
|
195
|
-
const RoleModel = ModelRegistry.instance.get<
|
|
196
|
-
IRoleBase<Types.ObjectId, Date, Role>,
|
|
197
|
-
IRoleDocument
|
|
198
|
-
>(BaseModelName.Role).model;
|
|
199
|
-
const UserRoleModel = ModelRegistry.instance.get<
|
|
200
|
-
IUserRoleBase<Types.ObjectId, Date>,
|
|
201
|
-
IUserRoleDocument
|
|
202
|
-
>(BaseModelName.UserRole).model;
|
|
203
|
-
|
|
204
|
-
const role = await RoleModel.findById(roleId).session(session ?? null);
|
|
205
|
-
if (role?.admin) {
|
|
206
|
-
const adminCount = await UserRoleModel.countDocuments({
|
|
207
|
-
roleId,
|
|
208
|
-
deletedAt: { $exists: false },
|
|
209
|
-
}).session(session ?? null);
|
|
210
|
-
if (adminCount <= 1) {
|
|
211
|
-
throw new LastAdminError();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
await UserRoleModel.findOneAndUpdate(
|
|
216
|
-
{ userId, roleId, deletedAt: { $exists: false } },
|
|
217
|
-
{ deletedAt: new Date(), deletedBy },
|
|
218
|
-
{ session },
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Deletes a role by ID
|
|
224
|
-
* @param roleId The role ID
|
|
225
|
-
* @param deleter The ID of the user deleting the role
|
|
226
|
-
* @param hardDelete Whether to hard delete the role
|
|
227
|
-
* @param session Optional mongoose session
|
|
228
|
-
*/
|
|
229
|
-
public async deleteRole(
|
|
230
|
-
roleId: Types.ObjectId,
|
|
231
|
-
deleter: Types.ObjectId,
|
|
232
|
-
hardDelete: boolean,
|
|
233
|
-
session?: ClientSession,
|
|
234
|
-
): Promise<void> {
|
|
235
|
-
const RoleModel = ModelRegistry.instance.get<
|
|
236
|
-
IRoleBase<Types.ObjectId, Date, Role>,
|
|
237
|
-
IRoleDocument
|
|
238
|
-
>(BaseModelName.Role).model;
|
|
239
|
-
if (hardDelete) {
|
|
240
|
-
await RoleModel.findByIdAndDelete(roleId).session(session ?? null);
|
|
241
|
-
} else {
|
|
242
|
-
await RoleModel.findByIdAndUpdate(roleId, {
|
|
243
|
-
deletedAt: new Date(),
|
|
244
|
-
deletedBy: deleter,
|
|
245
|
-
}).session(session ?? null);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* Gets all roles for a user
|
|
251
|
-
* @param userId The user ID
|
|
252
|
-
* @param session Optional mongoose session
|
|
253
|
-
* @returns The roles the user is a member of
|
|
254
|
-
*/
|
|
255
|
-
public async getUserRoles(
|
|
256
|
-
userId: Types.ObjectId,
|
|
257
|
-
session?: ClientSession,
|
|
258
|
-
): Promise<IRoleDocument[]> {
|
|
259
|
-
const UserRoleModel = ModelRegistry.instance.get<
|
|
260
|
-
IUserRoleBase<Types.ObjectId, Date>,
|
|
261
|
-
IUserRoleDocument
|
|
262
|
-
>(BaseModelName.UserRole).model;
|
|
263
|
-
const RoleModel = ModelRegistry.instance.get<
|
|
264
|
-
IRoleBase<Types.ObjectId, Date, Role>,
|
|
265
|
-
IBaseDocument<IRoleBase<Types.ObjectId, Date, Role>>
|
|
266
|
-
>(BaseModelName.Role).model;
|
|
267
|
-
if (!UserRoleModel || !RoleModel) throw new Error('Model not registered');
|
|
268
|
-
|
|
269
|
-
// Return full documents
|
|
270
|
-
const userRoles = await UserRoleModel.find({
|
|
271
|
-
userId,
|
|
272
|
-
deletedAt: { $exists: false },
|
|
273
|
-
})
|
|
274
|
-
.select('roleId')
|
|
275
|
-
.session(session ?? null);
|
|
276
|
-
|
|
277
|
-
const roleIds = userRoles.map((ur) => ur.roleId);
|
|
278
|
-
return await RoleModel.find({
|
|
279
|
-
_id: { $in: roleIds },
|
|
280
|
-
deletedAt: { $exists: false },
|
|
281
|
-
}).session(session ?? null);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* Gets all users for a role
|
|
286
|
-
* @param roleId The role ID
|
|
287
|
-
* @param session Optional mongoose session
|
|
288
|
-
* @returns The user IDs that are members of the role
|
|
289
|
-
*/
|
|
290
|
-
public async getRoleUsers(
|
|
291
|
-
roleId: Types.ObjectId,
|
|
292
|
-
session?: ClientSession,
|
|
293
|
-
): Promise<Types.ObjectId[]> {
|
|
294
|
-
const UserRoleModel = ModelRegistry.instance.get<
|
|
295
|
-
IUserRoleBase<Types.ObjectId, Date>,
|
|
296
|
-
IUserRoleDocument
|
|
297
|
-
>(BaseModelName.UserRole).model;
|
|
298
|
-
|
|
299
|
-
// Return full documents
|
|
300
|
-
const userRoles = await UserRoleModel.find({
|
|
301
|
-
roleId,
|
|
302
|
-
deletedAt: { $exists: false },
|
|
303
|
-
})
|
|
304
|
-
.select('userId')
|
|
305
|
-
.session(session ?? null);
|
|
306
|
-
|
|
307
|
-
return userRoles.map((ur) => ur.userId);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/** Convert roles to translated TokenRoles */
|
|
311
|
-
public rolesToTokenRoles(
|
|
312
|
-
roles: Array<IRoleBackendObject>,
|
|
313
|
-
overrideLanguage?: string,
|
|
314
|
-
): Array<TTokenRole> {
|
|
315
|
-
return roles.map((role) => {
|
|
316
|
-
const engine = PluginI18nEngine.getInstance<string>();
|
|
317
|
-
const userLang = GlobalActiveContext.getInstance<
|
|
318
|
-
string,
|
|
319
|
-
IActiveContext<string>
|
|
320
|
-
>().userLanguage;
|
|
321
|
-
const lang = (overrideLanguage || userLang || 'en-US') as string;
|
|
322
|
-
const roleTranslation = engine.translateEnum(Role, role.name, lang);
|
|
323
|
-
return {
|
|
324
|
-
...role,
|
|
325
|
-
translatedName: roleTranslation,
|
|
326
|
-
} as TTokenRole;
|
|
327
|
-
});
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
public async isUserAdmin(
|
|
331
|
-
userDoc: IUserDocument,
|
|
332
|
-
session?: ClientSession,
|
|
333
|
-
providedRoles?: Array<IRoleDocument>,
|
|
334
|
-
): Promise<boolean> {
|
|
335
|
-
const roles =
|
|
336
|
-
providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
337
|
-
if (roles.filter((r) => r.admin).length > 0) {
|
|
338
|
-
return true;
|
|
339
|
-
}
|
|
340
|
-
return false;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
public async isUserMember(
|
|
344
|
-
userDoc: IUserDocument,
|
|
345
|
-
session?: ClientSession,
|
|
346
|
-
providedRoles?: Array<IRoleDocument>,
|
|
347
|
-
): Promise<boolean> {
|
|
348
|
-
const roles =
|
|
349
|
-
providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
350
|
-
if (roles.filter((r) => r.member).length > 0) {
|
|
351
|
-
return true;
|
|
352
|
-
}
|
|
353
|
-
return false;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
public async isUserChild(
|
|
357
|
-
userDoc: IUserDocument,
|
|
358
|
-
session?: ClientSession,
|
|
359
|
-
providedRoles?: Array<IRoleDocument>,
|
|
360
|
-
): Promise<boolean> {
|
|
361
|
-
const roles =
|
|
362
|
-
providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
363
|
-
if (roles.filter((r) => r.child).length > 0) {
|
|
364
|
-
return true;
|
|
365
|
-
}
|
|
366
|
-
return false;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
public async isSystemUser(
|
|
370
|
-
userDoc: IUserDocument,
|
|
371
|
-
session?: ClientSession,
|
|
372
|
-
providedRoles?: Array<IRoleDocument>,
|
|
373
|
-
): Promise<boolean> {
|
|
374
|
-
const roles =
|
|
375
|
-
providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
376
|
-
return roles.some((r) => r.system);
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
public async getMemberType(
|
|
380
|
-
userDoc: IUserDocument,
|
|
381
|
-
session?: ClientSession,
|
|
382
|
-
providedRoles?: Array<IRoleDocument>,
|
|
383
|
-
): Promise<MemberType> {
|
|
384
|
-
const roles =
|
|
385
|
-
providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
386
|
-
if (await this.isSystemUser(userDoc, session, roles)) {
|
|
387
|
-
return MemberType.System;
|
|
388
|
-
} else if (await this.isUserAdmin(userDoc, session, roles)) {
|
|
389
|
-
return MemberType.Admin;
|
|
390
|
-
} else if (await this.isUserMember(userDoc, session, roles)) {
|
|
391
|
-
return MemberType.User;
|
|
392
|
-
} else {
|
|
393
|
-
return MemberType.Anonymous;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { ECIES, IECIESConstants } from '@digitaldefiance/ecies-lib';
|
|
2
|
-
import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';
|
|
3
|
-
import { SymmetricErrorType } from '../enumerations/symmetric-error-type';
|
|
4
|
-
import { SymmetricError } from '../errors/symmetric';
|
|
5
|
-
import { ISymmetricEncryptionResults } from '../interfaces/symmetric-encryption-results';
|
|
6
|
-
|
|
7
|
-
function hasToJsonMethod<T>(obj: T): obj is T & { toJson: () => string } {
|
|
8
|
-
return typeof obj === 'object' && obj !== null && 'toJson' in obj;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Service for handling symmetric encryption operations.
|
|
13
|
-
* This service provides functionality for:
|
|
14
|
-
* - AES encryption/decryption of buffers and JSON data
|
|
15
|
-
* - Key and IV generation
|
|
16
|
-
* - Secure cryptographic operations
|
|
17
|
-
*/
|
|
18
|
-
export class SymmetricService {
|
|
19
|
-
public static symmetricKeyBits(
|
|
20
|
-
eciesConstants: IECIESConstants = ECIES,
|
|
21
|
-
): number {
|
|
22
|
-
return eciesConstants.SYMMETRIC.KEY_BITS;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public static symmetricKeyBytes(
|
|
26
|
-
eciesConstants: IECIESConstants = ECIES,
|
|
27
|
-
): number {
|
|
28
|
-
return eciesConstants.SYMMETRIC.KEY_SIZE;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Encrypt data with AES
|
|
33
|
-
* @param data The data to encrypt
|
|
34
|
-
* @param encryptionKey Optional encryption key (will be randomly generated if not provided)
|
|
35
|
-
* @returns Object containing encrypted data and key
|
|
36
|
-
*/
|
|
37
|
-
public static encryptBuffer(
|
|
38
|
-
data: Buffer,
|
|
39
|
-
encryptionKey?: Buffer,
|
|
40
|
-
eciesConstants: IECIESConstants = ECIES,
|
|
41
|
-
): ISymmetricEncryptionResults {
|
|
42
|
-
if (
|
|
43
|
-
encryptionKey &&
|
|
44
|
-
encryptionKey.length != eciesConstants.SYMMETRIC.KEY_SIZE
|
|
45
|
-
) {
|
|
46
|
-
throw new SymmetricError(SymmetricErrorType.InvalidKeyLength);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// encrypt the document using AES-256 and the key
|
|
50
|
-
// Initialization Vector
|
|
51
|
-
const ivBuffer = randomBytes(eciesConstants.IV_SIZE);
|
|
52
|
-
const key: Buffer =
|
|
53
|
-
encryptionKey ?? randomBytes(eciesConstants.SYMMETRIC.KEY_SIZE);
|
|
54
|
-
const cipher = createCipheriv(
|
|
55
|
-
eciesConstants.SYMMETRIC_ALGORITHM_CONFIGURATION,
|
|
56
|
-
key,
|
|
57
|
-
ivBuffer,
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
const ciphertextBuffer = cipher.update(data);
|
|
61
|
-
const finalBuffer = cipher.final();
|
|
62
|
-
const authTag = cipher.getAuthTag();
|
|
63
|
-
|
|
64
|
-
const encryptionIvPlusData: Buffer = Buffer.concat([
|
|
65
|
-
ivBuffer,
|
|
66
|
-
ciphertextBuffer,
|
|
67
|
-
finalBuffer,
|
|
68
|
-
authTag,
|
|
69
|
-
]);
|
|
70
|
-
return {
|
|
71
|
-
encryptedData: encryptionIvPlusData,
|
|
72
|
-
key: key,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Decrypt the given buffer with AES
|
|
78
|
-
* @param encryptedData The encrypted data to decrypt
|
|
79
|
-
* @param key The key to use for decryption
|
|
80
|
-
* @returns Decrypted data as a Buffer
|
|
81
|
-
*/
|
|
82
|
-
public static decryptBuffer(
|
|
83
|
-
encryptedData: Buffer,
|
|
84
|
-
key: Buffer,
|
|
85
|
-
eciesConstants: IECIESConstants = ECIES,
|
|
86
|
-
): Buffer {
|
|
87
|
-
const ivBuffer = encryptedData.subarray(0, eciesConstants.IV_SIZE);
|
|
88
|
-
const authTagStart = encryptedData.length - eciesConstants.AUTH_TAG_SIZE;
|
|
89
|
-
const ciphertextBuffer = encryptedData.subarray(
|
|
90
|
-
eciesConstants.IV_SIZE,
|
|
91
|
-
authTagStart,
|
|
92
|
-
);
|
|
93
|
-
const authTag = encryptedData.subarray(authTagStart);
|
|
94
|
-
|
|
95
|
-
const decipher = createDecipheriv(
|
|
96
|
-
eciesConstants.SYMMETRIC_ALGORITHM_CONFIGURATION,
|
|
97
|
-
key,
|
|
98
|
-
ivBuffer,
|
|
99
|
-
);
|
|
100
|
-
decipher.setAuthTag(authTag);
|
|
101
|
-
|
|
102
|
-
return Buffer.concat([decipher.update(ciphertextBuffer), decipher.final()]);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Encrypt JSON data with AES
|
|
107
|
-
* @param data The data to encrypt
|
|
108
|
-
* @param encryptionKey Optional encryption key (will be randomly generated if not provided)
|
|
109
|
-
* @returns Object containing encrypted data and key
|
|
110
|
-
*/
|
|
111
|
-
public static encryptJson<T>(
|
|
112
|
-
data: T,
|
|
113
|
-
encryptionKey?: Buffer,
|
|
114
|
-
): ISymmetricEncryptionResults {
|
|
115
|
-
if (data === null || data === undefined) {
|
|
116
|
-
throw new SymmetricError(SymmetricErrorType.DataNullOrUndefined);
|
|
117
|
-
}
|
|
118
|
-
let dataBuffer: Buffer;
|
|
119
|
-
if (hasToJsonMethod<T>(data)) {
|
|
120
|
-
// amazonq-ignore-next-line false positive
|
|
121
|
-
dataBuffer = Buffer.from(data.toJson(), 'utf8');
|
|
122
|
-
} else {
|
|
123
|
-
dataBuffer = Buffer.from(JSON.stringify(data), 'utf8');
|
|
124
|
-
}
|
|
125
|
-
return SymmetricService.encryptBuffer(dataBuffer, encryptionKey);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Decrypt the given buffer with AES and parse as JSON
|
|
130
|
-
* @param encryptedData The encrypted data to decrypt
|
|
131
|
-
* @param key The key to use for decryption
|
|
132
|
-
* @returns Decrypted data parsed as type T
|
|
133
|
-
*/
|
|
134
|
-
public static decryptJson<T>(encryptedData: Buffer, key: Buffer): T {
|
|
135
|
-
return JSON.parse(
|
|
136
|
-
SymmetricService.decryptBuffer(encryptedData, key).toString('utf8'),
|
|
137
|
-
) as T;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
EmailString,
|
|
3
|
-
MemberType,
|
|
4
|
-
SecureBuffer,
|
|
5
|
-
SecureString,
|
|
6
|
-
} from '@digitaldefiance/ecies-lib';
|
|
7
|
-
import {
|
|
8
|
-
Member as BackendMember,
|
|
9
|
-
ECIESService,
|
|
10
|
-
} from '@digitaldefiance/node-ecies-lib';
|
|
11
|
-
import {
|
|
12
|
-
Constants,
|
|
13
|
-
IConstants,
|
|
14
|
-
SuiteCoreStringKey,
|
|
15
|
-
TranslatableSuiteError,
|
|
16
|
-
} from '@digitaldefiance/suite-core-lib';
|
|
17
|
-
import { Environment } from '../environment';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Service to manage the system member's wallet.
|
|
21
|
-
*/
|
|
22
|
-
export class SystemUserService {
|
|
23
|
-
private static systemUser: BackendMember | null = null;
|
|
24
|
-
private static eciesService: ECIESService = new ECIESService();
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Initializes and returns the system member's Member instance.
|
|
28
|
-
* The mnemonic should be stored securely in environment variables.
|
|
29
|
-
*/
|
|
30
|
-
public static getSystemUser(
|
|
31
|
-
environment: Environment,
|
|
32
|
-
constants: IConstants = Constants,
|
|
33
|
-
): BackendMember {
|
|
34
|
-
if (!SystemUserService.systemUser) {
|
|
35
|
-
if (!environment.systemMnemonic) {
|
|
36
|
-
throw new TranslatableSuiteError(
|
|
37
|
-
SuiteCoreStringKey.Admin_EnvNotSetTemplate,
|
|
38
|
-
{
|
|
39
|
-
NAME: 'SYSTEM_MNEMONIC',
|
|
40
|
-
},
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
const mnemonic: SecureString = environment.systemMnemonic;
|
|
44
|
-
const { wallet } =
|
|
45
|
-
SystemUserService.eciesService.walletAndSeedFromMnemonic(mnemonic);
|
|
46
|
-
const keyPair =
|
|
47
|
-
SystemUserService.eciesService.walletToSimpleKeyPairBuffer(wallet);
|
|
48
|
-
|
|
49
|
-
SystemUserService.systemUser = new BackendMember(
|
|
50
|
-
SystemUserService.eciesService,
|
|
51
|
-
MemberType.System,
|
|
52
|
-
constants.SystemUser,
|
|
53
|
-
new EmailString(constants.SystemEmail),
|
|
54
|
-
keyPair.publicKey,
|
|
55
|
-
new SecureBuffer(keyPair.privateKey),
|
|
56
|
-
wallet,
|
|
57
|
-
);
|
|
58
|
-
if (
|
|
59
|
-
SystemUserService.systemUser.publicKey.toString('hex') !==
|
|
60
|
-
environment.systemPublicKeyHex
|
|
61
|
-
) {
|
|
62
|
-
console.warn('System public key does not match environment variable', {
|
|
63
|
-
derived: SystemUserService.systemUser.publicKey.toString('hex'),
|
|
64
|
-
expected: environment.systemPublicKeyHex,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return SystemUserService.systemUser;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public static setSystemUser(
|
|
72
|
-
user: BackendMember,
|
|
73
|
-
constants: IConstants = Constants,
|
|
74
|
-
): void {
|
|
75
|
-
if (user.type !== MemberType.System || user.name !== constants.SystemUser) {
|
|
76
|
-
throw new Error(
|
|
77
|
-
'setSystemUser can only be called with a MemberType.System user',
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
SystemUserService.systemUser = user;
|
|
81
|
-
}
|
|
82
|
-
}
|