@digitaldefiance/node-express-suite 3.7.5 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -6
- package/package.json +9 -8
- package/src/__tests__/fixtures/{index.ts → index.d.ts} +1 -0
- package/src/__tests__/fixtures/index.d.ts.map +1 -0
- package/src/__tests__/fixtures/index.js +5 -0
- package/src/__tests__/fixtures/index.js.map +1 -0
- package/src/__tests__/fixtures/model-mocks.mock.d.ts +12 -0
- package/src/__tests__/fixtures/model-mocks.mock.d.ts.map +1 -0
- package/src/__tests__/fixtures/model-mocks.mock.js +102 -0
- package/src/__tests__/fixtures/model-mocks.mock.js.map +1 -0
- package/src/__tests__/helpers/application.mock.d.ts +8 -0
- package/src/__tests__/helpers/application.mock.d.ts.map +1 -0
- package/src/__tests__/helpers/application.mock.js +77 -0
- package/src/__tests__/helpers/application.mock.js.map +1 -0
- package/src/__tests__/helpers/{index.ts → index.d.ts} +1 -0
- package/src/__tests__/helpers/index.d.ts.map +1 -0
- package/src/__tests__/helpers/index.js +7 -0
- package/src/__tests__/helpers/index.js.map +1 -0
- package/src/__tests__/helpers/setup-test-env.d.ts +12 -0
- package/src/__tests__/helpers/setup-test-env.d.ts.map +1 -0
- package/src/__tests__/helpers/setup-test-env.js +121 -0
- package/src/__tests__/helpers/setup-test-env.js.map +1 -0
- package/src/__tests__/{index.ts → index.d.ts} +1 -0
- package/src/__tests__/index.d.ts.map +1 -0
- package/src/__tests__/index.js +6 -0
- package/src/__tests__/index.js.map +1 -0
- package/src/application-base.d.ts +128 -0
- package/src/application-base.d.ts.map +1 -0
- package/src/application-base.js +364 -0
- package/src/application-base.js.map +1 -0
- package/src/application-concrete.d.ts +26 -0
- package/src/application-concrete.d.ts.map +1 -0
- package/src/application-concrete.js +34 -0
- package/src/application-concrete.js.map +1 -0
- package/src/application.d.ts +34 -0
- package/src/application.d.ts.map +1 -0
- package/src/application.js +172 -0
- package/src/application.js.map +1 -0
- package/src/backup-code.d.ts +72 -0
- package/src/backup-code.d.ts.map +1 -0
- package/src/backup-code.js +243 -0
- package/src/backup-code.js.map +1 -0
- package/src/builders/application-builder.d.ts +47 -0
- package/src/builders/application-builder.d.ts.map +1 -0
- package/src/builders/application-builder.js +76 -0
- package/src/builders/application-builder.js.map +1 -0
- package/src/builders/{index.ts → index.d.ts} +1 -0
- package/src/builders/index.d.ts.map +1 -0
- package/src/builders/index.js +5 -0
- package/src/builders/index.js.map +1 -0
- package/src/constants.d.ts +21 -0
- package/src/constants.d.ts.map +1 -0
- package/src/constants.js +63 -0
- package/src/constants.js.map +1 -0
- package/src/container/{index.ts → index.d.ts} +1 -0
- package/src/container/index.d.ts.map +1 -0
- package/src/container/index.js +6 -0
- package/src/container/index.js.map +1 -0
- package/src/container/service-container.d.ts +45 -0
- package/src/container/service-container.d.ts.map +1 -0
- package/src/container/service-container.js +68 -0
- package/src/container/service-container.js.map +1 -0
- package/src/container/{service-definitions.ts → service-definitions.d.ts} +10 -11
- package/src/container/service-definitions.d.ts.map +1 -0
- package/src/container/service-definitions.js +21 -0
- package/src/container/service-definitions.js.map +1 -0
- package/src/controllers/base.d.ts +80 -0
- package/src/controllers/base.d.ts.map +1 -0
- package/src/controllers/base.js +318 -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 +66 -0
- package/src/controllers/user.d.ts.map +1 -0
- package/src/controllers/user.js +936 -0
- package/src/controllers/user.js.map +1 -0
- package/src/database/{database-initializer.ts → database-initializer.d.ts} +3 -4
- package/src/database/database-initializer.d.ts.map +1 -0
- package/src/database/database-initializer.js +8 -0
- package/src/database/database-initializer.js.map +1 -0
- package/src/database/{index.ts → index.d.ts} +1 -0
- package/src/database/index.d.ts.map +1 -0
- package/src/database/index.js +5 -0
- package/src/database/index.js.map +1 -0
- package/src/decorators/base-controller.d.ts +22 -0
- package/src/decorators/base-controller.d.ts.map +1 -0
- package/src/decorators/base-controller.js +71 -0
- package/src/decorators/base-controller.js.map +1 -0
- package/src/decorators/controller.d.ts +43 -0
- package/src/decorators/controller.d.ts.map +1 -0
- package/src/decorators/controller.js +73 -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 +10 -0
- package/src/decorators/zod-validation.d.ts.map +1 -0
- package/src/decorators/zod-validation.js +53 -0
- package/src/decorators/zod-validation.js.map +1 -0
- package/src/defaults.d.ts +12 -0
- package/src/defaults.d.ts.map +1 -0
- package/src/defaults.js +212 -0
- package/src/defaults.js.map +1 -0
- package/src/documents/{base.ts → base.d.ts} +2 -4
- package/src/documents/base.d.ts.map +1 -0
- package/src/documents/base.js +8 -0
- package/src/documents/base.js.map +1 -0
- package/src/documents/{email-token.ts → email-token.d.ts} +3 -8
- package/src/documents/email-token.d.ts.map +1 -0
- package/src/documents/email-token.js +8 -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 -6
- package/src/documents/mnemonic.d.ts.map +1 -0
- package/src/documents/mnemonic.js +8 -0
- package/src/documents/mnemonic.js.map +1 -0
- package/src/documents/{role.ts → role.d.ts} +2 -6
- package/src/documents/role.d.ts.map +1 -0
- package/src/documents/role.js +8 -0
- package/src/documents/role.js.map +1 -0
- package/src/documents/{used-direct-login-token.ts → used-direct-login-token.d.ts} +2 -4
- package/src/documents/used-direct-login-token.d.ts.map +1 -0
- package/src/documents/used-direct-login-token.js +8 -0
- package/src/documents/used-direct-login-token.js.map +1 -0
- package/src/documents/{user-role.ts → user-role.d.ts} +2 -6
- package/src/documents/user-role.d.ts.map +1 -0
- package/src/documents/user-role.js +8 -0
- package/src/documents/user-role.js.map +1 -0
- package/src/documents/{user.ts → user.d.ts} +2 -6
- package/src/documents/user.d.ts.map +1 -0
- package/src/documents/user.js +8 -0
- package/src/documents/user.js.map +1 -0
- package/src/enumerations/base-model-name.d.ts +43 -0
- package/src/enumerations/base-model-name.d.ts.map +1 -0
- package/src/enumerations/base-model-name.js +39 -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.ts → length-encoding-type.d.ts} +6 -6
- package/src/enumerations/length-encoding-type.d.ts.map +1 -0
- package/src/enumerations/length-encoding-type.js +20 -0
- package/src/enumerations/length-encoding-type.js.map +1 -0
- package/src/enumerations/schema-collection.d.ts +39 -0
- package/src/enumerations/schema-collection.d.ts.map +1 -0
- package/src/enumerations/schema-collection.js +43 -0
- package/src/enumerations/schema-collection.js.map +1 -0
- package/src/enumerations/{symmetric-error-type.ts → symmetric-error-type.d.ts} +4 -4
- package/src/enumerations/symmetric-error-type.d.ts.map +1 -0
- package/src/enumerations/symmetric-error-type.js +17 -0
- package/src/enumerations/symmetric-error-type.js.map +1 -0
- package/src/environment.d.ts +194 -0
- package/src/environment.d.ts.map +1 -0
- package/src/environment.js +649 -0
- package/src/environment.js.map +1 -0
- package/src/errors/express-validation.d.ts +24 -0
- package/src/errors/express-validation.d.ts.map +1 -0
- package/src/errors/express-validation.js +33 -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 +19 -0
- package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
- package/src/errors/invalid-backup-code-version.js +29 -0
- package/src/errors/invalid-backup-code-version.js.map +1 -0
- package/src/errors/invalid-jwt-token.d.ts +17 -0
- package/src/errors/invalid-jwt-token.d.ts.map +1 -0
- package/src/errors/invalid-jwt-token.js +24 -0
- package/src/errors/invalid-jwt-token.js.map +1 -0
- package/src/errors/invalid-model.d.ts +18 -0
- package/src/errors/invalid-model.d.ts.map +1 -0
- package/src/errors/invalid-model.js +26 -0
- package/src/errors/invalid-model.js.map +1 -0
- package/src/errors/invalid-new-password.d.ts +19 -0
- package/src/errors/invalid-new-password.d.ts.map +1 -0
- package/src/errors/invalid-new-password.js +28 -0
- package/src/errors/invalid-new-password.js.map +1 -0
- package/src/errors/invalid-password.d.ts +19 -0
- package/src/errors/invalid-password.d.ts.map +1 -0
- package/src/errors/invalid-password.js +28 -0
- package/src/errors/invalid-password.js.map +1 -0
- package/src/errors/missing-validated-data.d.ts +24 -0
- package/src/errors/missing-validated-data.d.ts.map +1 -0
- package/src/errors/missing-validated-data.js +53 -0
- package/src/errors/missing-validated-data.js.map +1 -0
- package/src/errors/mnemonic-or-password-required.d.ts +17 -0
- package/src/errors/mnemonic-or-password-required.d.ts.map +1 -0
- package/src/errors/mnemonic-or-password-required.js +26 -0
- package/src/errors/mnemonic-or-password-required.js.map +1 -0
- package/src/errors/model-not-registered.d.ts +18 -0
- package/src/errors/model-not-registered.d.ts.map +1 -0
- package/src/errors/model-not-registered.js +26 -0
- package/src/errors/model-not-registered.js.map +1 -0
- package/src/errors/mongoose-validation.d.ts +28 -0
- package/src/errors/mongoose-validation.d.ts.map +1 -0
- package/src/errors/mongoose-validation.js +33 -0
- package/src/errors/mongoose-validation.js.map +1 -0
- package/src/errors/symmetric.d.ts +23 -0
- package/src/errors/symmetric.d.ts.map +1 -0
- package/src/errors/symmetric.js +37 -0
- package/src/errors/symmetric.js.map +1 -0
- package/src/errors/token-expired.d.ts +17 -0
- package/src/errors/token-expired.d.ts.map +1 -0
- package/src/errors/token-expired.js +24 -0
- package/src/errors/token-expired.js.map +1 -0
- package/src/get-language.d.ts +12 -0
- package/src/get-language.d.ts.map +1 -0
- package/src/get-language.js +40 -0
- package/src/get-language.js.map +1 -0
- package/src/get-timezone.d.ts +12 -0
- package/src/get-timezone.d.ts.map +1 -0
- package/src/get-timezone.js +53 -0
- package/src/get-timezone.js.map +1 -0
- package/src/{index.ts → index.d.ts} +2 -44
- package/src/index.d.ts.map +1 -0
- package/src/index.js +80 -0
- package/src/index.js.map +1 -0
- package/src/interfaces/{api-error-response.ts → api-error-response.d.ts} +2 -3
- package/src/interfaces/api-error-response.d.ts.map +1 -0
- package/src/interfaces/api-error-response.js +8 -0
- package/src/interfaces/api-error-response.js.map +1 -0
- package/src/interfaces/{api-express-validation-error-response.ts → api-express-validation-error-response.d.ts} +3 -4
- package/src/interfaces/api-express-validation-error-response.d.ts.map +1 -0
- package/src/interfaces/api-express-validation-error-response.js +8 -0
- package/src/interfaces/api-express-validation-error-response.js.map +1 -0
- package/src/interfaces/{api-message-response.ts → api-message-response.d.ts} +2 -2
- package/src/interfaces/api-message-response.d.ts.map +1 -0
- package/src/interfaces/api-message-response.js +8 -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 -3
- package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
- package/src/interfaces/api-mongo-validation-error-response.js +8 -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 -3
- package/src/interfaces/api-responses/backup-codes-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/backup-codes-response.js +8 -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} +5 -6
- package/src/interfaces/api-responses/challenge-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/challenge-response.js +7 -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 -3
- package/src/interfaces/api-responses/code-count-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/code-count-response.js +8 -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 +12 -0
- package/src/interfaces/api-responses/index.js.map +1 -0
- package/src/interfaces/api-responses/{login-response.ts → login-response.d.ts} +4 -5
- package/src/interfaces/api-responses/login-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/login-response.js +8 -0
- package/src/interfaces/api-responses/login-response.js.map +1 -0
- package/src/interfaces/api-responses/{mnemonic-response.ts → mnemonic-response.d.ts} +3 -4
- package/src/interfaces/api-responses/mnemonic-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/mnemonic-response.js +7 -0
- package/src/interfaces/api-responses/mnemonic-response.js.map +1 -0
- package/src/interfaces/api-responses/{registration-response.ts → registration-response.d.ts} +5 -6
- package/src/interfaces/api-responses/registration-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/registration-response.js +7 -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 -3
- package/src/interfaces/api-responses/request-user-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/request-user-response.js +8 -0
- package/src/interfaces/api-responses/request-user-response.js.map +1 -0
- package/src/interfaces/api-responses/{user-settings-response.ts → user-settings-response.d.ts} +9 -10
- package/src/interfaces/api-responses/user-settings-response.d.ts.map +1 -0
- package/src/interfaces/api-responses/user-settings-response.js +8 -0
- package/src/interfaces/api-responses/user-settings-response.js.map +1 -0
- package/src/interfaces/application.d.ts +39 -0
- package/src/interfaces/application.d.ts.map +1 -0
- package/src/interfaces/application.js +8 -0
- package/src/interfaces/application.js.map +1 -0
- package/src/interfaces/backend-objects/{email-token.ts → email-token.d.ts} +3 -8
- package/src/interfaces/backend-objects/email-token.d.ts.map +1 -0
- package/src/interfaces/backend-objects/email-token.js +8 -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 -6
- package/src/interfaces/backend-objects/request-user.d.ts.map +1 -0
- package/src/interfaces/backend-objects/request-user.js +8 -0
- package/src/interfaces/backend-objects/request-user.js.map +1 -0
- package/src/interfaces/backend-objects/{role.ts → role.d.ts} +2 -7
- package/src/interfaces/backend-objects/role.d.ts.map +1 -0
- package/src/interfaces/backend-objects/role.js +8 -0
- package/src/interfaces/backend-objects/role.js.map +1 -0
- package/src/interfaces/backend-objects/{user.ts → user.d.ts} +2 -6
- package/src/interfaces/backend-objects/user.d.ts.map +1 -0
- package/src/interfaces/backend-objects/user.js +8 -0
- package/src/interfaces/backend-objects/user.js.map +1 -0
- package/src/interfaces/{checksum-config.ts → checksum-config.d.ts} +3 -3
- package/src/interfaces/checksum-config.d.ts.map +1 -0
- package/src/interfaces/checksum-config.js +8 -0
- package/src/interfaces/checksum-config.js.map +1 -0
- package/src/interfaces/checksum-consts.d.ts +20 -0
- package/src/interfaces/checksum-consts.d.ts.map +1 -0
- package/src/interfaces/checksum-consts.js +8 -0
- package/src/interfaces/checksum-consts.js.map +1 -0
- package/src/interfaces/constants.d.ts +66 -0
- package/src/interfaces/constants.d.ts.map +1 -0
- package/src/interfaces/constants.js +8 -0
- package/src/interfaces/constants.js.map +1 -0
- package/src/interfaces/{controller-config.ts → controller-config.d.ts} +15 -31
- package/src/interfaces/controller-config.d.ts.map +1 -0
- package/src/interfaces/controller-config.js +8 -0
- package/src/interfaces/controller-config.js.map +1 -0
- package/src/interfaces/{create-user-basics.ts → create-user-basics.d.ts} +13 -13
- package/src/interfaces/create-user-basics.d.ts.map +1 -0
- package/src/interfaces/create-user-basics.js +8 -0
- package/src/interfaces/create-user-basics.js.map +1 -0
- package/src/interfaces/{csp-config.ts → csp-config.d.ts} +5 -15
- package/src/interfaces/csp-config.d.ts.map +1 -0
- package/src/interfaces/csp-config.js +23 -0
- package/src/interfaces/csp-config.js.map +1 -0
- package/src/interfaces/{csp-definition.ts → csp-definition.d.ts} +9 -46
- package/src/interfaces/csp-definition.d.ts.map +1 -0
- package/src/interfaces/csp-definition.js +32 -0
- package/src/interfaces/csp-definition.js.map +1 -0
- package/src/interfaces/{db-init-result.ts → db-init-result.d.ts} +2 -3
- package/src/interfaces/db-init-result.d.ts.map +1 -0
- package/src/interfaces/db-init-result.js +8 -0
- package/src/interfaces/db-init-result.js.map +1 -0
- package/src/interfaces/{deep-partial.ts → deep-partial.d.ts} +2 -2
- package/src/interfaces/deep-partial.d.ts.map +1 -0
- package/src/interfaces/deep-partial.js +8 -0
- package/src/interfaces/deep-partial.js.map +1 -0
- package/src/interfaces/{discriminator-collections.ts → discriminator-collections.d.ts} +4 -8
- package/src/interfaces/discriminator-collections.d.ts.map +1 -0
- package/src/interfaces/discriminator-collections.js +8 -0
- package/src/interfaces/discriminator-collections.js.map +1 -0
- package/src/interfaces/email-service.d.ts +21 -0
- package/src/interfaces/email-service.d.ts.map +1 -0
- package/src/interfaces/email-service.js +8 -0
- package/src/interfaces/email-service.js.map +1 -0
- package/src/interfaces/environment-mongo.d.ts +85 -0
- package/src/interfaces/environment-mongo.d.ts.map +1 -0
- package/src/interfaces/environment-mongo.js +8 -0
- package/src/interfaces/environment-mongo.js.map +1 -0
- package/src/interfaces/environment.d.ts +190 -0
- package/src/interfaces/environment.d.ts.map +1 -0
- package/src/interfaces/environment.js +8 -0
- package/src/interfaces/environment.js.map +1 -0
- package/src/interfaces/{failable-result.ts → failable-result.d.ts} +5 -5
- package/src/interfaces/failable-result.d.ts.map +1 -0
- package/src/interfaces/failable-result.js +8 -0
- package/src/interfaces/failable-result.js.map +1 -0
- package/src/interfaces/{fec-consts.ts → fec-consts.d.ts} +3 -3
- package/src/interfaces/fec-consts.d.ts.map +1 -0
- package/src/interfaces/fec-consts.js +8 -0
- package/src/interfaces/fec-consts.js.map +1 -0
- package/src/interfaces/{flexible-csp.ts → flexible-csp.d.ts} +5 -16
- package/src/interfaces/flexible-csp.d.ts.map +1 -0
- package/src/interfaces/flexible-csp.js +24 -0
- package/src/interfaces/flexible-csp.js.map +1 -0
- package/src/interfaces/{handleable-error-options.ts → handleable-error-options.d.ts} +5 -5
- package/src/interfaces/handleable-error-options.d.ts.map +1 -0
- package/src/interfaces/handleable-error-options.js +8 -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 +38 -0
- package/src/interfaces/index.js.map +1 -0
- package/src/interfaces/jwt-consts.d.ts +20 -0
- package/src/interfaces/jwt-consts.d.ts.map +1 -0
- package/src/interfaces/jwt-consts.js +8 -0
- package/src/interfaces/jwt-consts.js.map +1 -0
- package/src/interfaces/{jwt-sign-response.ts → jwt-sign-response.d.ts} +9 -18
- package/src/interfaces/jwt-sign-response.d.ts.map +1 -0
- package/src/interfaces/jwt-sign-response.js +8 -0
- package/src/interfaces/jwt-sign-response.js.map +1 -0
- package/src/interfaces/models/{email-token.ts → email-token.d.ts} +1 -2
- package/src/interfaces/models/email-token.d.ts.map +1 -0
- package/src/interfaces/models/email-token.js +8 -0
- package/src/interfaces/models/email-token.js.map +1 -0
- package/src/interfaces/models/{index.ts → index.d.ts} +1 -0
- package/src/interfaces/models/index.d.ts.map +1 -0
- package/src/interfaces/models/index.js +11 -0
- package/src/interfaces/models/index.js.map +1 -0
- package/src/interfaces/models/{mnemonic.ts → mnemonic.d.ts} +1 -2
- package/src/interfaces/models/mnemonic.d.ts.map +1 -0
- package/src/interfaces/models/mnemonic.js +8 -0
- package/src/interfaces/models/mnemonic.js.map +1 -0
- package/src/interfaces/models/{role.ts → role.d.ts} +1 -2
- package/src/interfaces/models/role.d.ts.map +1 -0
- package/src/interfaces/models/role.js +8 -0
- package/src/interfaces/models/role.js.map +1 -0
- package/src/interfaces/models/{token-role.ts → token-role.d.ts} +2 -6
- package/src/interfaces/models/token-role.d.ts.map +1 -0
- package/src/interfaces/models/token-role.js +8 -0
- package/src/interfaces/models/token-role.js.map +1 -0
- package/src/interfaces/models/{used-direct-login-token.ts → used-direct-login-token.d.ts} +2 -4
- package/src/interfaces/models/used-direct-login-token.d.ts.map +1 -0
- package/src/interfaces/models/used-direct-login-token.js +8 -0
- package/src/interfaces/models/used-direct-login-token.js.map +1 -0
- package/src/interfaces/models/{user-role.ts → user-role.d.ts} +2 -6
- package/src/interfaces/models/user-role.d.ts.map +1 -0
- package/src/interfaces/models/user-role.js +8 -0
- package/src/interfaces/models/user-role.js.map +1 -0
- package/src/interfaces/models/{user.ts → user.d.ts} +3 -12
- package/src/interfaces/models/user.d.ts.map +1 -0
- package/src/interfaces/models/user.js +8 -0
- package/src/interfaces/models/user.js.map +1 -0
- package/src/interfaces/{mongo-errors.ts → mongo-errors.d.ts} +2 -3
- package/src/interfaces/mongo-errors.d.ts.map +1 -0
- package/src/interfaces/mongo-errors.js +8 -0
- package/src/interfaces/mongo-errors.js.map +1 -0
- package/src/interfaces/request-user.d.ts +67 -0
- package/src/interfaces/request-user.d.ts.map +1 -0
- package/src/interfaces/request-user.js +8 -0
- package/src/interfaces/request-user.js.map +1 -0
- package/src/interfaces/required-string-keys.d.ts +28 -0
- package/src/interfaces/required-string-keys.d.ts.map +1 -0
- package/src/interfaces/required-string-keys.js +8 -0
- package/src/interfaces/required-string-keys.js.map +1 -0
- package/src/interfaces/{schema.ts → schema.d.ts} +22 -28
- package/src/interfaces/schema.d.ts.map +1 -0
- package/src/interfaces/schema.js +8 -0
- package/src/interfaces/schema.js.map +1 -0
- package/src/interfaces/server-init-result.d.ts +45 -0
- package/src/interfaces/server-init-result.d.ts.map +1 -0
- package/src/interfaces/server-init-result.js +8 -0
- package/src/interfaces/server-init-result.js.map +1 -0
- package/src/interfaces/{status-code-response.ts → status-code-response.d.ts} +4 -5
- package/src/interfaces/status-code-response.d.ts.map +1 -0
- package/src/interfaces/status-code-response.js +8 -0
- package/src/interfaces/status-code-response.js.map +1 -0
- package/src/interfaces/{symmetric-encryption-results.ts → 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 +5 -0
- package/src/interfaces/symmetric-encryption-results.js.map +1 -1
- package/src/interfaces/{test-environment.ts → test-environment.d.ts} +6 -7
- package/src/interfaces/test-environment.d.ts.map +1 -0
- package/src/interfaces/test-environment.js +8 -0
- package/src/interfaces/test-environment.js.map +1 -0
- package/src/interfaces/{token-response.ts → token-response.d.ts} +2 -3
- package/src/interfaces/token-response.d.ts.map +1 -0
- package/src/interfaces/token-response.js +8 -0
- package/src/interfaces/token-response.js.map +1 -0
- package/src/middleware-utils.d.ts +31 -0
- package/src/middleware-utils.d.ts.map +1 -0
- package/src/middleware-utils.js +117 -0
- package/src/middleware-utils.js.map +1 -0
- package/src/middlewares/authenticate-crypto.d.ts +27 -0
- package/src/middlewares/authenticate-crypto.d.ts.map +1 -0
- package/src/middlewares/authenticate-crypto.js +143 -0
- package/src/middlewares/authenticate-crypto.js.map +1 -0
- package/src/middlewares/authenticate-token.d.ts +34 -0
- package/src/middlewares/authenticate-token.d.ts.map +1 -0
- package/src/middlewares/authenticate-token.js +117 -0
- package/src/middlewares/authenticate-token.js.map +1 -0
- package/src/middlewares/cleanup-crypto.d.ts +16 -0
- package/src/middlewares/cleanup-crypto.d.ts.map +1 -0
- package/src/middlewares/cleanup-crypto.js +41 -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.ts → set-global-context-language.d.ts} +2 -24
- package/src/middlewares/set-global-context-language.d.ts.map +1 -0
- package/src/middlewares/set-global-context-language.js +27 -0
- package/src/middlewares/set-global-context-language.js.map +1 -0
- package/src/model-registry.d.ts +79 -0
- package/src/model-registry.d.ts.map +1 -0
- package/src/model-registry.js +97 -0
- package/src/model-registry.js.map +1 -0
- package/src/models/{email-token.ts → email-token.d.ts} +2 -27
- package/src/models/email-token.d.ts.map +1 -0
- package/src/models/email-token.js +16 -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.ts → mnemonic.d.ts} +2 -20
- package/src/models/mnemonic.d.ts.map +1 -0
- package/src/models/mnemonic.js +27 -0
- package/src/models/mnemonic.js.map +1 -0
- package/src/models/{role.ts → role.d.ts} +2 -16
- package/src/models/role.d.ts.map +1 -0
- package/src/models/role.js +27 -0
- package/src/models/role.js.map +1 -0
- package/src/models/{used-direct-login-token.ts → used-direct-login-token.d.ts} +2 -27
- package/src/models/used-direct-login-token.d.ts.map +1 -0
- package/src/models/used-direct-login-token.js +16 -0
- package/src/models/used-direct-login-token.js.map +1 -0
- package/src/models/{user-role.ts → user-role.d.ts} +2 -19
- package/src/models/user-role.d.ts.map +1 -0
- package/src/models/user-role.js +26 -0
- package/src/models/user-role.js.map +1 -0
- package/src/models/{user.ts → user.d.ts} +2 -20
- package/src/models/user.d.ts.map +1 -0
- package/src/models/user.js +27 -0
- package/src/models/user.js.map +1 -0
- package/src/pipeline/{index.ts → index.d.ts} +1 -0
- package/src/pipeline/index.d.ts.map +1 -0
- package/src/pipeline/index.js +5 -0
- package/src/pipeline/index.js.map +1 -0
- package/src/pipeline/pipeline-builder.d.ts +16 -0
- package/src/pipeline/pipeline-builder.d.ts.map +1 -0
- package/src/pipeline/pipeline-builder.js +26 -0
- package/src/pipeline/pipeline-builder.js.map +1 -0
- package/src/plugins/{index.ts → index.d.ts} +1 -0
- package/src/plugins/index.d.ts.map +1 -0
- package/src/plugins/index.js +6 -0
- package/src/plugins/index.js.map +1 -0
- package/src/plugins/{plugin-interface.ts → plugin-interface.d.ts} +5 -6
- package/src/plugins/plugin-interface.d.ts.map +1 -0
- package/src/plugins/plugin-interface.js +8 -0
- package/src/plugins/plugin-interface.js.map +1 -0
- package/src/plugins/plugin-manager.d.ts +22 -0
- package/src/plugins/plugin-manager.d.ts.map +1 -0
- package/src/plugins/plugin-manager.js +46 -0
- package/src/plugins/plugin-manager.js.map +1 -0
- package/src/registry/email-service-registry.d.ts +49 -0
- package/src/registry/email-service-registry.d.ts.map +1 -0
- package/src/registry/email-service-registry.js +64 -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/responses/{index.ts → index.d.ts} +1 -0
- package/src/responses/index.d.ts.map +1 -0
- package/src/responses/index.js +5 -0
- package/src/responses/index.js.map +1 -0
- package/src/responses/response-builder.d.ts +103 -0
- package/src/responses/response-builder.d.ts.map +1 -0
- package/src/responses/response-builder.js +142 -0
- package/src/responses/response-builder.js.map +1 -0
- package/src/routers/api.d.ts +59 -0
- package/src/routers/api.d.ts.map +1 -0
- package/src/routers/api.js +110 -0
- package/src/routers/api.js.map +1 -0
- package/src/routers/app.d.ts +87 -0
- package/src/routers/app.d.ts.map +1 -0
- package/src/routers/app.js +285 -0
- package/src/routers/app.js.map +1 -0
- package/src/routers/{base.ts → base.d.ts} +11 -19
- package/src/routers/base.d.ts.map +1 -0
- package/src/routers/base.js +31 -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/routers/router-config.d.ts +35 -0
- package/src/routers/router-config.d.ts.map +1 -0
- package/src/routers/router-config.js +16 -0
- package/src/routers/router-config.js.map +1 -0
- package/src/routing/index.d.ts +2 -0
- package/src/routing/index.d.ts.map +1 -0
- package/src/routing/index.js +5 -0
- package/src/routing/index.js.map +1 -0
- package/src/routing/route-builder.d.ts +121 -0
- package/src/routing/route-builder.d.ts.map +1 -0
- package/src/routing/route-builder.js +167 -0
- package/src/routing/route-builder.js.map +1 -0
- package/src/schemas/email-token.d.ts +65 -0
- package/src/schemas/email-token.d.ts.map +1 -0
- package/src/schemas/email-token.js +68 -0
- package/src/schemas/email-token.js.map +1 -0
- package/src/schemas/{index.ts → index.d.ts} +1 -0
- 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 +37 -0
- package/src/schemas/mnemonic.d.ts.map +1 -0
- package/src/schemas/mnemonic.js +41 -0
- package/src/schemas/mnemonic.js.map +1 -0
- package/src/schemas/role.d.ts +57 -0
- package/src/schemas/role.d.ts.map +1 -0
- package/src/schemas/role.js +102 -0
- package/src/schemas/role.js.map +1 -0
- package/src/schemas/schema.d.ts +62 -0
- package/src/schemas/schema.d.ts.map +1 -0
- package/src/schemas/schema.js +81 -0
- package/src/schemas/schema.js.map +1 -0
- package/src/schemas/used-direct-login-token.d.ts +49 -0
- package/src/schemas/used-direct-login-token.d.ts.map +1 -0
- package/src/schemas/used-direct-login-token.js +35 -0
- package/src/schemas/used-direct-login-token.js.map +1 -0
- package/src/schemas/user-role.d.ts +52 -0
- package/src/schemas/user-role.d.ts.map +1 -0
- package/src/schemas/user-role.js +67 -0
- package/src/schemas/user-role.js.map +1 -0
- package/src/schemas/user.d.ts +43 -0
- package/src/schemas/user.d.ts.map +1 -0
- package/src/schemas/user.js +214 -0
- package/src/schemas/user.js.map +1 -0
- package/src/services/backup-code.d.ts +80 -0
- package/src/services/backup-code.d.ts.map +1 -0
- package/src/services/backup-code.js +189 -0
- package/src/services/backup-code.js.map +1 -0
- package/src/services/base.d.ts +22 -0
- package/src/services/base.d.ts.map +1 -0
- package/src/services/base.js +26 -0
- package/src/services/base.js.map +1 -0
- package/src/services/checksum.d.ts +90 -0
- package/src/services/checksum.d.ts.map +1 -0
- package/src/services/checksum.js +166 -0
- package/src/services/checksum.js.map +1 -0
- package/src/services/database-initialization.d.ts +138 -0
- package/src/services/database-initialization.d.ts.map +1 -0
- package/src/services/database-initialization.js +904 -0
- package/src/services/database-initialization.js.map +1 -0
- package/src/services/{db-init-cache.ts → db-init-cache.d.ts} +6 -16
- package/src/services/db-init-cache.d.ts.map +1 -0
- package/src/services/db-init-cache.js +7 -0
- package/src/services/db-init-cache.js.map +1 -0
- package/src/services/direct-login-token.d.ts +28 -0
- package/src/services/direct-login-token.d.ts.map +1 -0
- package/src/services/direct-login-token.js +62 -0
- package/src/services/direct-login-token.js.map +1 -0
- package/src/services/dummy-email-service.d.ts +30 -0
- package/src/services/dummy-email-service.d.ts.map +1 -0
- package/src/services/dummy-email-service.js +35 -0
- package/src/services/dummy-email-service.js.map +1 -0
- package/src/services/fec-usage-example.d.ts +58 -0
- package/src/services/fec-usage-example.d.ts.map +1 -0
- package/src/services/fec-usage-example.js +95 -0
- package/src/services/fec-usage-example.js.map +1 -0
- package/src/services/fec.d.ts +88 -0
- package/src/services/fec.d.ts.map +1 -0
- package/src/services/fec.js +246 -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 +45 -0
- package/src/services/jwt.d.ts.map +1 -0
- package/src/services/jwt.js +105 -0
- package/src/services/jwt.js.map +1 -0
- package/src/services/key-wrapping.d.ts +139 -0
- package/src/services/key-wrapping.d.ts.map +1 -0
- package/src/services/key-wrapping.js +372 -0
- package/src/services/key-wrapping.js.map +1 -0
- package/src/services/mnemonic.d.ts +68 -0
- package/src/services/mnemonic.d.ts.map +1 -0
- package/src/services/mnemonic.js +120 -0
- package/src/services/mnemonic.js.map +1 -0
- package/src/services/request-user.d.ts +45 -0
- package/src/services/request-user.d.ts.map +1 -0
- package/src/services/request-user.js +90 -0
- package/src/services/request-user.js.map +1 -0
- package/src/services/role.d.ts +97 -0
- package/src/services/role.d.ts.map +1 -0
- package/src/services/role.js +289 -0
- package/src/services/role.js.map +1 -0
- package/src/services/symmetric.d.ts +60 -0
- package/src/services/symmetric.d.ts.map +1 -0
- package/src/services/symmetric.js +125 -0
- package/src/services/symmetric.js.map +1 -0
- package/src/services/system-user.d.ts +22 -0
- package/src/services/system-user.d.ts.map +1 -0
- package/src/services/system-user.js +52 -0
- package/src/services/system-user.js.map +1 -0
- package/src/services/user.d.ts +368 -0
- package/src/services/user.d.ts.map +1 -0
- package/src/services/user.js +1470 -0
- package/src/services/user.js.map +1 -0
- package/src/services/xor.d.ts +28 -0
- package/src/services/xor.d.ts.map +1 -0
- package/src/services/xor.js +45 -0
- package/src/services/xor.js.map +1 -0
- package/src/{testing.ts → testing.d.ts} +1 -2
- package/src/testing.d.ts.map +1 -0
- package/src/testing.js +12 -0
- package/src/testing.js.map +1 -0
- package/src/transactions/{index.ts → index.d.ts} +1 -0
- package/src/transactions/index.d.ts.map +1 -0
- package/src/transactions/index.js +5 -0
- package/src/transactions/index.js.map +1 -0
- package/src/transactions/transaction-manager.d.ts +37 -0
- package/src/transactions/transaction-manager.d.ts.map +1 -0
- package/src/transactions/transaction-manager.js +50 -0
- package/src/transactions/transaction-manager.js.map +1 -0
- package/src/types/{app-config.ts → app-config.d.ts} +10 -16
- package/src/types/app-config.d.ts.map +1 -0
- package/src/types/app-config.js +8 -0
- package/src/types/app-config.js.map +1 -0
- package/src/types/{controller-config.ts → controller-config.d.ts} +7 -9
- package/src/types/controller-config.d.ts.map +1 -0
- package/src/types/controller-config.js +8 -0
- package/src/types/controller-config.js.map +1 -0
- package/src/types/{environment-variables.ts → environment-variables.d.ts} +5 -27
- package/src/types/environment-variables.d.ts.map +1 -0
- package/src/types/environment-variables.js +41 -0
- package/src/types/environment-variables.js.map +1 -0
- package/src/types/{index.ts → index.d.ts} +1 -0
- package/src/types/index.d.ts.map +1 -0
- package/src/types/index.js +6 -0
- package/src/types/index.js.map +1 -0
- package/src/types/{mongoose-helpers.ts → mongoose-helpers.d.ts} +2 -3
- package/src/types/mongoose-helpers.d.ts.map +1 -0
- package/src/types/mongoose-helpers.js +8 -0
- package/src/types/mongoose-helpers.js.map +1 -0
- package/src/types.d.ts +118 -0
- package/src/types.d.ts.map +1 -0
- package/src/types.js +28 -0
- package/src/types.js.map +1 -0
- package/src/utils.d.ts +240 -0
- package/src/utils.d.ts.map +1 -0
- package/src/utils.js +843 -0
- package/src/utils.js.map +1 -0
- package/src/validation/{index.ts → index.d.ts} +1 -0
- package/src/validation/index.d.ts.map +1 -0
- package/src/validation/index.js +5 -0
- package/src/validation/index.js.map +1 -0
- package/src/validation/validation-builder.d.ts +71 -0
- package/src/validation/validation-builder.d.ts.map +1 -0
- package/src/validation/validation-builder.js +120 -0
- package/src/validation/validation-builder.js.map +1 -0
- package/LICENSE +0 -21
- package/src/__tests__/fixtures/model-mocks.mock.ts +0 -164
- package/src/__tests__/helpers/application.mock.ts +0 -89
- package/src/__tests__/helpers/setup-test-env.ts +0 -202
- package/src/application-base.ts +0 -548
- package/src/application-concrete.ts +0 -62
- package/src/application.ts +0 -330
- package/src/backup-code.ts +0 -348
- package/src/builders/application-builder.ts +0 -147
- package/src/constants.ts +0 -89
- package/src/container/service-container.ts +0 -85
- package/src/controllers/base.ts +0 -512
- package/src/controllers/user.ts +0 -1734
- package/src/decorators/base-controller.ts +0 -91
- package/src/decorators/controller.ts +0 -152
- package/src/decorators/zod-validation.ts +0 -64
- package/src/defaults.ts +0 -259
- package/src/enumerations/base-model-name.ts +0 -47
- package/src/enumerations/schema-collection.ts +0 -39
- package/src/environment.ts +0 -859
- package/src/errors/express-validation.ts +0 -38
- package/src/errors/invalid-backup-code-version.ts +0 -30
- package/src/errors/invalid-jwt-token.ts +0 -24
- package/src/errors/invalid-model.ts +0 -24
- package/src/errors/invalid-new-password.ts +0 -33
- package/src/errors/invalid-password.ts +0 -28
- package/src/errors/missing-validated-data.ts +0 -55
- package/src/errors/mnemonic-or-password-required.ts +0 -26
- package/src/errors/model-not-registered.ts +0 -24
- package/src/errors/mongoose-validation.ts +0 -56
- package/src/errors/symmetric.ts +0 -53
- package/src/errors/token-expired.ts +0 -24
- package/src/get-language.ts +0 -64
- package/src/get-timezone.ts +0 -76
- package/src/interfaces/application.ts +0 -40
- package/src/interfaces/checksum-consts.ts +0 -23
- package/src/interfaces/constants.ts +0 -114
- package/src/interfaces/email-service.ts +0 -26
- package/src/interfaces/environment-mongo.ts +0 -86
- package/src/interfaces/environment.ts +0 -191
- package/src/interfaces/jwt-consts.ts +0 -33
- package/src/interfaces/request-user.ts +0 -80
- package/src/interfaces/required-string-keys.ts +0 -33
- package/src/interfaces/server-init-result.ts +0 -48
- package/src/middleware-utils.ts +0 -138
- package/src/middlewares/authenticate-crypto.ts +0 -237
- package/src/middlewares/authenticate-token.ts +0 -165
- package/src/middlewares/cleanup-crypto.ts +0 -47
- package/src/model-registry.ts +0 -142
- package/src/pipeline/pipeline-builder.ts +0 -27
- package/src/plugins/plugin-manager.ts +0 -53
- package/src/registry/email-service-registry.ts +0 -76
- package/src/responses/response-builder.ts +0 -166
- package/src/routers/api.ts +0 -233
- package/src/routers/app.ts +0 -395
- package/src/routers/router-config.ts +0 -34
- package/src/routing/index.ts +0 -1
- package/src/routing/route-builder.ts +0 -214
- package/src/schemas/email-token.ts +0 -112
- package/src/schemas/mnemonic.ts +0 -48
- package/src/schemas/role.ts +0 -153
- package/src/schemas/schema.ts +0 -185
- package/src/schemas/used-direct-login-token.ts +0 -58
- package/src/schemas/user-role.ts +0 -93
- package/src/schemas/user.ts +0 -244
- package/src/services/backup-code.ts +0 -327
- package/src/services/base.ts +0 -46
- package/src/services/checksum.ts +0 -189
- package/src/services/database-initialization.ts +0 -1653
- package/src/services/direct-login-token.ts +0 -83
- package/src/services/dummy-email-service.ts +0 -43
- package/src/services/fec-usage-example.ts +0 -123
- package/src/services/fec.ts +0 -399
- package/src/services/jwt.ts +0 -146
- package/src/services/key-wrapping.ts +0 -528
- package/src/services/mnemonic.ts +0 -174
- package/src/services/request-user.ts +0 -127
- package/src/services/role.ts +0 -417
- package/src/services/symmetric.ts +0 -164
- package/src/services/system-user.ts +0 -87
- package/src/services/user.ts +0 -2324
- package/src/services/xor.ts +0 -39
- package/src/transactions/transaction-manager.ts +0 -63
- package/src/types/mongoose-override.d.ts +0 -1
- package/src/types/mongoose.d.ts +0 -1
- package/src/types.ts +0 -189
- package/src/utils.ts +0 -1116
- package/src/validation/validation-builder.ts +0 -155
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Forward Error Correction (FEC) service using Reed-Solomon erasure coding.
|
|
4
|
+
* Provides parity data creation, file recovery, and integrity verification for distributed storage.
|
|
5
|
+
* @module services/fec
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.FecService = void 0;
|
|
9
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
10
|
+
const reed_solomon_erasure_wasm_1 = require("@subspace/reed-solomon-erasure.wasm");
|
|
11
|
+
const constants_1 = require("../constants");
|
|
12
|
+
class FecService {
|
|
13
|
+
/**
|
|
14
|
+
* Encodes data using Reed-Solomon erasure coding.
|
|
15
|
+
* @param data Data buffer to encode
|
|
16
|
+
* @param shardSize Size of each shard in bytes
|
|
17
|
+
* @param dataShards Number of data shards
|
|
18
|
+
* @param parityShards Number of parity shards
|
|
19
|
+
* @param fecOnly If true, returns only parity shards; otherwise returns all shards
|
|
20
|
+
* @param fecConstants FEC constants (defaults to FEC)
|
|
21
|
+
* @returns Encoded buffer containing shards
|
|
22
|
+
* @throws {FecError} If parameters are invalid or encoding fails
|
|
23
|
+
*/
|
|
24
|
+
async encode(data, shardSize, dataShards, parityShards, fecOnly, fecConstants = constants_1.FEC) {
|
|
25
|
+
// Validate parameters
|
|
26
|
+
if (!data || data.length === 0) {
|
|
27
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.DataRequired);
|
|
28
|
+
}
|
|
29
|
+
if (data.length !== shardSize * dataShards) {
|
|
30
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.InvalidDataLength, undefined, {
|
|
31
|
+
LENGTH: data.length.toString(),
|
|
32
|
+
EXPECTED: (shardSize * dataShards).toString(),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (shardSize > fecConstants.MAX_SHARD_SIZE) {
|
|
36
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.ShardSizeExceedsMaximum, undefined, {
|
|
37
|
+
SIZE: shardSize.toString(),
|
|
38
|
+
MAXIMUM: fecConstants.MAX_SHARD_SIZE.toString(),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (dataShards <= 0 || parityShards <= 0) {
|
|
42
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.InvalidShardCounts);
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const shards = new Uint8Array(shardSize * (dataShards + parityShards));
|
|
46
|
+
shards.set(new Uint8Array(data));
|
|
47
|
+
// Encoding
|
|
48
|
+
const reedSolomonErasure = await reed_solomon_erasure_wasm_1.ReedSolomonErasure.fromCurrentDirectory();
|
|
49
|
+
reedSolomonErasure.encode(shards, dataShards, parityShards);
|
|
50
|
+
return fecOnly
|
|
51
|
+
? Buffer.from(shards.subarray(shardSize * dataShards))
|
|
52
|
+
: Buffer.from(shards);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.FecEncodingFailed, undefined, {
|
|
56
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Decodes/reconstructs data using Reed-Solomon erasure coding.
|
|
62
|
+
* @param data Encoded data buffer containing all shards
|
|
63
|
+
* @param shardSize Size of each shard in bytes
|
|
64
|
+
* @param dataShards Number of data shards
|
|
65
|
+
* @param parityShards Number of parity shards
|
|
66
|
+
* @param shardsAvailable Boolean array indicating which shards are available
|
|
67
|
+
* @returns Reconstructed data buffer
|
|
68
|
+
* @throws {FecError} If parameters are invalid or decoding fails
|
|
69
|
+
*/
|
|
70
|
+
async decode(data, shardSize, dataShards, parityShards, shardsAvailable) {
|
|
71
|
+
// Validate parameters
|
|
72
|
+
if (!data || data.length === 0) {
|
|
73
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.DataRequired);
|
|
74
|
+
}
|
|
75
|
+
if (data.length !== shardSize * (dataShards + parityShards)) {
|
|
76
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.InvalidDataLength, undefined, {
|
|
77
|
+
LENGTH: data.length.toString(),
|
|
78
|
+
EXPECTED: (shardSize * (dataShards + parityShards)).toString(),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (!shardsAvailable ||
|
|
82
|
+
shardsAvailable.length !== dataShards + parityShards) {
|
|
83
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.InvalidShardsAvailableArray);
|
|
84
|
+
}
|
|
85
|
+
const availableCount = shardsAvailable.filter((x) => x).length;
|
|
86
|
+
if (availableCount < dataShards) {
|
|
87
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.NotEnoughShardsAvailable, undefined, {
|
|
88
|
+
AVAILABLE: availableCount.toString(),
|
|
89
|
+
REQUIRED: dataShards.toString(),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const uint8Data = new Uint8Array(data);
|
|
94
|
+
const reedSolomonErasure = await reed_solomon_erasure_wasm_1.ReedSolomonErasure.fromCurrentDirectory();
|
|
95
|
+
reedSolomonErasure.reconstruct(uint8Data, dataShards, parityShards, shardsAvailable);
|
|
96
|
+
return Buffer.from(uint8Data.subarray(0, shardSize * dataShards));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.FecDecodingFailed, undefined, {
|
|
100
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Creates parity data for a file buffer.
|
|
106
|
+
* @param fileData File data to create parity for
|
|
107
|
+
* @param parityCount Number of parity shards to create
|
|
108
|
+
* @param fecConstants FEC constants (defaults to FEC)
|
|
109
|
+
* @returns Array of parity data objects
|
|
110
|
+
* @throws {FecError} If parameters are invalid or encoding fails
|
|
111
|
+
*/
|
|
112
|
+
async createParityData(fileData, parityCount, fecConstants = constants_1.FEC) {
|
|
113
|
+
if (!fileData || fileData.length === 0) {
|
|
114
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.DataRequired);
|
|
115
|
+
}
|
|
116
|
+
if (parityCount <= 0) {
|
|
117
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.ParityDataCountMustBePositive);
|
|
118
|
+
}
|
|
119
|
+
const shardSize = Math.min(fileData.length, fecConstants.MAX_SHARD_SIZE);
|
|
120
|
+
const requiredShards = Math.ceil(fileData.length / shardSize);
|
|
121
|
+
try {
|
|
122
|
+
const resultParityData = Array(parityCount)
|
|
123
|
+
.fill(null)
|
|
124
|
+
.map(() => Buffer.alloc(0));
|
|
125
|
+
// Process each chunk
|
|
126
|
+
for (let i = 0; i < requiredShards; i++) {
|
|
127
|
+
const start = i * shardSize;
|
|
128
|
+
const end = Math.min(start + shardSize, fileData.length);
|
|
129
|
+
const chunk = fileData.subarray(start, end);
|
|
130
|
+
// Pad chunk if necessary
|
|
131
|
+
const paddedChunk = Buffer.alloc(shardSize);
|
|
132
|
+
paddedChunk.set(chunk.subarray(0, shardSize));
|
|
133
|
+
const chunkParity = await this.encode(paddedChunk, shardSize, 1, parityCount, true, fecConstants);
|
|
134
|
+
// Distribute parity data
|
|
135
|
+
for (let j = 0; j < parityCount; j++) {
|
|
136
|
+
const parityChunk = chunkParity.subarray(j * shardSize, (j + 1) * shardSize);
|
|
137
|
+
const combined = Buffer.alloc(resultParityData[j].length + parityChunk.length);
|
|
138
|
+
combined.set(resultParityData[j], 0);
|
|
139
|
+
combined.set(parityChunk, resultParityData[j].length);
|
|
140
|
+
resultParityData[j] = combined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return resultParityData.map((data, index) => ({
|
|
144
|
+
data,
|
|
145
|
+
index,
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.FecEncodingFailed, undefined, {
|
|
150
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Recovers file data using parity data. Pass null for corrupted data.
|
|
156
|
+
* @param corruptedData Corrupted file data or null if completely lost
|
|
157
|
+
* @param parityData Array of parity data objects
|
|
158
|
+
* @param originalSize Original file size in bytes
|
|
159
|
+
* @param fecConstants FEC constants (defaults to FEC)
|
|
160
|
+
* @returns Recovery result with data and recovery status
|
|
161
|
+
* @throws {FecError} If parameters are invalid or recovery fails
|
|
162
|
+
*/
|
|
163
|
+
async recoverFileData(corruptedData, parityData, originalSize, fecConstants = constants_1.FEC) {
|
|
164
|
+
if (!parityData || parityData.length === 0) {
|
|
165
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.ParityDataRequired);
|
|
166
|
+
}
|
|
167
|
+
if (originalSize <= 0) {
|
|
168
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.InvalidDataLength);
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const shardSize = Math.min(originalSize, fecConstants.MAX_SHARD_SIZE);
|
|
172
|
+
const requiredShards = Math.ceil(originalSize / shardSize);
|
|
173
|
+
let recoveredData = Buffer.alloc(0);
|
|
174
|
+
let parityUsed = false;
|
|
175
|
+
// Recover each shard
|
|
176
|
+
for (let i = 0; i < requiredShards; i++) {
|
|
177
|
+
const start = i * shardSize;
|
|
178
|
+
const end = Math.min(start + shardSize, originalSize);
|
|
179
|
+
const chunkSize = end - start;
|
|
180
|
+
// Use corrupted data if available, otherwise create placeholder
|
|
181
|
+
const corruptedShard = corruptedData
|
|
182
|
+
? corruptedData.subarray(start, Math.min(end, corruptedData.length))
|
|
183
|
+
: Buffer.alloc(0);
|
|
184
|
+
const parityChunks = parityData.map((parity) => parity.data.subarray(i * shardSize, (i + 1) * shardSize));
|
|
185
|
+
const hasDataShard = corruptedShard.length > 0;
|
|
186
|
+
const paddedCorruptedShard = Buffer.alloc(shardSize);
|
|
187
|
+
if (hasDataShard) {
|
|
188
|
+
paddedCorruptedShard.set(corruptedShard.subarray(0, Math.min(shardSize, corruptedShard.length)));
|
|
189
|
+
}
|
|
190
|
+
let shardIsHealthy = false;
|
|
191
|
+
if (hasDataShard) {
|
|
192
|
+
const regeneratedParity = await this.encode(paddedCorruptedShard, shardSize, 1, parityData.length, true, fecConstants);
|
|
193
|
+
shardIsHealthy = parityChunks.every((parityChunk, index) => parityChunk.equals(Uint8Array.from(regeneratedParity.subarray(index * shardSize, (index + 1) * shardSize))));
|
|
194
|
+
}
|
|
195
|
+
if (shardIsHealthy) {
|
|
196
|
+
const actualShard = Buffer.from(paddedCorruptedShard.subarray(0, chunkSize));
|
|
197
|
+
const combinedRecovered = Buffer.alloc(recoveredData.length + actualShard.length);
|
|
198
|
+
combinedRecovered.set(recoveredData, 0);
|
|
199
|
+
combinedRecovered.set(actualShard, recoveredData.length);
|
|
200
|
+
recoveredData = combinedRecovered;
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
// Mark data shard as missing and attempt recovery using parity
|
|
204
|
+
parityUsed = true;
|
|
205
|
+
const shardData = Buffer.alloc((1 + parityData.length) * shardSize);
|
|
206
|
+
shardData.set(paddedCorruptedShard, 0);
|
|
207
|
+
parityChunks.forEach((chunk, index) => {
|
|
208
|
+
shardData.set(chunk, (index + 1) * shardSize);
|
|
209
|
+
});
|
|
210
|
+
const availableShards = [false, ...Array(parityData.length).fill(true)];
|
|
211
|
+
const recoveredShard = await this.decode(shardData, shardSize, 1, parityData.length, availableShards);
|
|
212
|
+
const actualShard = recoveredShard.subarray(0, chunkSize);
|
|
213
|
+
const combinedRecovered = Buffer.alloc(recoveredData.length + actualShard.length);
|
|
214
|
+
combinedRecovered.set(recoveredData, 0);
|
|
215
|
+
combinedRecovered.set(actualShard, recoveredData.length);
|
|
216
|
+
recoveredData = combinedRecovered;
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
data: recoveredData,
|
|
220
|
+
recovered: parityUsed || corruptedData === null,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
throw new suite_core_lib_1.FecError(suite_core_lib_1.FecErrorType.FecDecodingFailed, undefined, {
|
|
225
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Verifies file integrity using parity data.
|
|
231
|
+
* @param fileData File data to verify
|
|
232
|
+
* @param parityData Array of parity data objects
|
|
233
|
+
* @returns True if file integrity is verified, false otherwise
|
|
234
|
+
*/
|
|
235
|
+
async verifyFileIntegrity(fileData, parityData) {
|
|
236
|
+
try {
|
|
237
|
+
const regeneratedParity = await this.createParityData(fileData, parityData.length);
|
|
238
|
+
return parityData.every((original, index) => Buffer.compare(new Uint8Array(original.data), new Uint8Array(regeneratedParity[index].data)) === 0);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.FecService = FecService;
|
|
246
|
+
//# sourceMappingURL=fec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fec.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/fec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,OAAO,CAAC;AACtB,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./backup-code"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./base"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./checksum"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./database-initialization"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./db-init-cache"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./direct-login-token"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./dummy-email-service"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./fec"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./fec-usage-example"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./jwt"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./key-wrapping"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./mnemonic"), exports);
|
|
16
|
+
tslib_1.__exportStar(require("./request-user"), exports);
|
|
17
|
+
tslib_1.__exportStar(require("./role"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./symmetric"), exports);
|
|
19
|
+
tslib_1.__exportStar(require("./system-user"), exports);
|
|
20
|
+
tslib_1.__exportStar(require("./user"), exports);
|
|
21
|
+
tslib_1.__exportStar(require("./xor"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,iDAAuB;AACvB,qDAA2B;AAC3B,oEAA0C;AAC1C,0DAAgC;AAChC,+DAAqC;AACrC,gEAAsC;AACtC,gDAAsB;AACtB,8DAAoC;AACpC,gDAAsB;AACtB,yDAA+B;AAC/B,qDAA2B;AAC3B,yDAA+B;AAC/B,iDAAuB;AACvB,sDAA4B;AAC5B,wDAA8B;AAC9B,iDAAuB;AACvB,gDAAsB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview JWT token service for authentication and authorization.
|
|
3
|
+
* Handles JWT token generation, signing, and verification with role-based access control.
|
|
4
|
+
* @module services/jwt
|
|
5
|
+
*/
|
|
6
|
+
import { ITokenRole, ITokenUser } from '@digitaldefiance/suite-core-lib';
|
|
7
|
+
import { IUserDocument } from '../documents/user';
|
|
8
|
+
import { IApplication } from '../interfaces/application';
|
|
9
|
+
import { IJwtSignResponse } from '../interfaces/jwt-sign-response';
|
|
10
|
+
import { BaseService } from './base';
|
|
11
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
12
|
+
/**
|
|
13
|
+
* Service for JWT token operations including generation, signing, and verification.
|
|
14
|
+
* Integrates with role service to embed user roles in JWT tokens.
|
|
15
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
16
|
+
* @template TDate - Date type (defaults to Date)
|
|
17
|
+
* @template TTokenRole - Token role interface type
|
|
18
|
+
* @template TTokenUser - Token user interface type
|
|
19
|
+
* @template TApplication - Application interface type
|
|
20
|
+
* @extends {BaseService<TID, TApplication>}
|
|
21
|
+
*/
|
|
22
|
+
export declare class JwtService<TID extends PlatformID = Buffer, TDate extends Date = Date, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>, TTokenUser extends ITokenUser = ITokenUser, TApplication extends IApplication<TID> = IApplication<TID>> extends BaseService<TID, TApplication> {
|
|
23
|
+
private readonly roleService;
|
|
24
|
+
/**
|
|
25
|
+
* Constructor for the JWT service
|
|
26
|
+
* @param application The application object
|
|
27
|
+
*/
|
|
28
|
+
constructor(application: TApplication);
|
|
29
|
+
/**
|
|
30
|
+
* Sign a JWT token for a user
|
|
31
|
+
* @param userDoc The user document to sign the token for
|
|
32
|
+
* @param jwtSecret The secret to sign the token with
|
|
33
|
+
* @param overrideLanguage Optional language to use for role translations
|
|
34
|
+
* @returns The signed token
|
|
35
|
+
*/
|
|
36
|
+
signToken(userDoc: IUserDocument<string, TID>, jwtSecret: string, overrideLanguage?: string): Promise<IJwtSignResponse<TID, TDate, TTokenRole>>;
|
|
37
|
+
/**
|
|
38
|
+
* Verify a JWT token and return the user data
|
|
39
|
+
* @param token The token to verify
|
|
40
|
+
* @returns The user data
|
|
41
|
+
* @throws InvalidTokenError
|
|
42
|
+
*/
|
|
43
|
+
verifyToken(token: string): Promise<TTokenUser | null>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/jwt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EAEV,UAAU,EACX,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AASlE;;;;;;;;;GASG;AACH,qBAAa,UAAU,CACrB,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,KAAK,SAAS,IAAI,GAAG,IAAI,EACzB,UAAU,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAClE,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1C,YAAY,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAC1D,SAAQ,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAElE;;;OAGG;gBACS,WAAW,EAAE,YAAY;IAKrC;;;;;;OAMG;IACU,SAAS,CACpB,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAgCpD;;;;;OAKG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAgCpE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview JWT token service for authentication and authorization.
|
|
4
|
+
* Handles JWT token generation, signing, and verification with role-based access control.
|
|
5
|
+
* @module services/jwt
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.JwtService = void 0;
|
|
9
|
+
const jsonwebtoken_1 = require("jsonwebtoken");
|
|
10
|
+
const util_1 = require("util");
|
|
11
|
+
const invalid_jwt_token_1 = require("../errors/invalid-jwt-token");
|
|
12
|
+
const token_expired_1 = require("../errors/token-expired");
|
|
13
|
+
const base_1 = require("./base");
|
|
14
|
+
const role_1 = require("./role");
|
|
15
|
+
const verifyAsync = (0, util_1.promisify)(jsonwebtoken_1.verify);
|
|
16
|
+
/**
|
|
17
|
+
* Service for JWT token operations including generation, signing, and verification.
|
|
18
|
+
* Integrates with role service to embed user roles in JWT tokens.
|
|
19
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
20
|
+
* @template TDate - Date type (defaults to Date)
|
|
21
|
+
* @template TTokenRole - Token role interface type
|
|
22
|
+
* @template TTokenUser - Token user interface type
|
|
23
|
+
* @template TApplication - Application interface type
|
|
24
|
+
* @extends {BaseService<TID, TApplication>}
|
|
25
|
+
*/
|
|
26
|
+
class JwtService extends base_1.BaseService {
|
|
27
|
+
roleService;
|
|
28
|
+
/**
|
|
29
|
+
* Constructor for the JWT service
|
|
30
|
+
* @param application The application object
|
|
31
|
+
*/
|
|
32
|
+
constructor(application) {
|
|
33
|
+
super(application);
|
|
34
|
+
this.roleService = new role_1.RoleService(application);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sign a JWT token for a user
|
|
38
|
+
* @param userDoc The user document to sign the token for
|
|
39
|
+
* @param jwtSecret The secret to sign the token with
|
|
40
|
+
* @param overrideLanguage Optional language to use for role translations
|
|
41
|
+
* @returns The signed token
|
|
42
|
+
*/
|
|
43
|
+
async signToken(userDoc, jwtSecret, overrideLanguage) {
|
|
44
|
+
// look for roles the user is a member of (the role contains the user id in the user's roles array)
|
|
45
|
+
const roles = await this.roleService.getUserRoles(userDoc._id);
|
|
46
|
+
const tokenRoles = this.roleService.rolesToTokenRoles(roles, overrideLanguage);
|
|
47
|
+
const tokenRoleDTOs = tokenRoles.map((role) => role_1.RoleService.roleToRoleDTO(role));
|
|
48
|
+
const roleTranslatedNames = tokenRoles.map((role) => role.translatedName);
|
|
49
|
+
const roleNames = tokenRoles.map((role) => role.name);
|
|
50
|
+
const tokenUser = {
|
|
51
|
+
userId: userDoc._id.toString(),
|
|
52
|
+
roles: tokenRoleDTOs,
|
|
53
|
+
};
|
|
54
|
+
// amazonq-ignore-next-line false positive
|
|
55
|
+
const token = (0, jsonwebtoken_1.sign)(tokenUser, jwtSecret, {
|
|
56
|
+
algorithm: this.application.constants.JWT.ALGORITHM,
|
|
57
|
+
allowInsecureKeySizes: false,
|
|
58
|
+
expiresIn: this.application.constants.JWT.EXPIRATION_SEC,
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
token,
|
|
62
|
+
tokenUser,
|
|
63
|
+
roleNames,
|
|
64
|
+
roleTranslatedNames,
|
|
65
|
+
roles: tokenRoles,
|
|
66
|
+
roleDTOs: tokenRoleDTOs,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Verify a JWT token and return the user data
|
|
71
|
+
* @param token The token to verify
|
|
72
|
+
* @returns The user data
|
|
73
|
+
* @throws InvalidTokenError
|
|
74
|
+
*/
|
|
75
|
+
async verifyToken(token) {
|
|
76
|
+
try {
|
|
77
|
+
const decoded = (await verifyAsync(token, this.application.environment.jwtSecret, {
|
|
78
|
+
algorithms: [this.application.constants.JWT.ALGORITHM],
|
|
79
|
+
}));
|
|
80
|
+
if (typeof decoded === 'object' &&
|
|
81
|
+
decoded !== null &&
|
|
82
|
+
'userId' in decoded &&
|
|
83
|
+
'roles' in decoded) {
|
|
84
|
+
return {
|
|
85
|
+
userId: decoded['userId'],
|
|
86
|
+
roles: decoded['roles'],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err instanceof jsonwebtoken_1.TokenExpiredError) {
|
|
95
|
+
throw new token_expired_1.TokenExpiredError();
|
|
96
|
+
}
|
|
97
|
+
else if (err instanceof jsonwebtoken_1.JsonWebTokenError) {
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
throw new invalid_jwt_token_1.InvalidJwtTokenError();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.JwtService = JwtService;
|
|
105
|
+
//# sourceMappingURL=jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/jwt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service for password-based key wrapping and unwrapping using AES-256-GCM.
|
|
3
|
+
* Provides secure master key management, password changes, and generic secret wrapping.
|
|
4
|
+
* @module services/key-wrapping
|
|
5
|
+
*/
|
|
6
|
+
import { SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
|
|
7
|
+
import { IConstants } from '@digitaldefiance/node-ecies-lib';
|
|
8
|
+
/**
|
|
9
|
+
* Represents a password-wrapped master key with all encryption metadata.
|
|
10
|
+
*/
|
|
11
|
+
export interface WrappedKey {
|
|
12
|
+
/** Hex-encoded salt for PBKDF2 key derivation */
|
|
13
|
+
salt: string;
|
|
14
|
+
/** Hex-encoded initialization vector for AES-GCM */
|
|
15
|
+
iv: string;
|
|
16
|
+
/** Hex-encoded authentication tag for AES-GCM */
|
|
17
|
+
authTag: string;
|
|
18
|
+
/** Hex-encoded encrypted master key */
|
|
19
|
+
encryptedMasterKey: string;
|
|
20
|
+
/** Number of PBKDF2 iterations used */
|
|
21
|
+
iterations: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generic password-wrapped secret payload with encryption metadata.
|
|
25
|
+
*/
|
|
26
|
+
export interface PasswordWrappedSecret {
|
|
27
|
+
/** Hex-encoded salt for PBKDF2 key derivation */
|
|
28
|
+
salt: string;
|
|
29
|
+
/** Hex-encoded initialization vector for AES-GCM */
|
|
30
|
+
iv: string;
|
|
31
|
+
/** Hex-encoded authentication tag for AES-GCM */
|
|
32
|
+
authTag: string;
|
|
33
|
+
/** Hex-encoded encrypted secret data */
|
|
34
|
+
ciphertext: string;
|
|
35
|
+
/** Number of PBKDF2 iterations used */
|
|
36
|
+
iterations: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Service for password-based key wrapping and unwrapping operations.
|
|
40
|
+
* Provides secure master key management with AES-256-GCM encryption and PBKDF2 key derivation.
|
|
41
|
+
* Supports both synchronous and asynchronous operations with deduplication for concurrent requests.
|
|
42
|
+
*/
|
|
43
|
+
export declare class KeyWrappingService {
|
|
44
|
+
/**
|
|
45
|
+
* In-flight de-duplication map to share PBKDF2 work across concurrent identical requests.
|
|
46
|
+
* Stores promises of base64-encoded master key bytes for sharing across callers.
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
private static inFlightUnwraps;
|
|
50
|
+
/**
|
|
51
|
+
* Generates a new random master key and wraps it with the user's password.
|
|
52
|
+
* @param password User's password for wrapping
|
|
53
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
54
|
+
* @returns Object containing the master key and wrapped key metadata
|
|
55
|
+
* @throws {InvalidNewPasswordError} If password doesn't meet requirements
|
|
56
|
+
*/
|
|
57
|
+
wrapNewMasterKey(password: SecureString, constants?: IConstants): {
|
|
58
|
+
masterKey: SecureBuffer;
|
|
59
|
+
wrappedKey: WrappedKey;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Wraps an existing master key with a password-derived key using AES-256-GCM.
|
|
63
|
+
* @param masterKey Master key to wrap
|
|
64
|
+
* @param password User's password for wrapping
|
|
65
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
66
|
+
* @returns Wrapped key metadata including salt, IV, auth tag, and encrypted key
|
|
67
|
+
* @throws {InvalidNewPasswordError} If password doesn't meet requirements
|
|
68
|
+
*/
|
|
69
|
+
wrapMasterKey(masterKey: SecureBuffer, password: SecureString, constants?: IConstants): WrappedKey;
|
|
70
|
+
/**
|
|
71
|
+
* Unwraps a master key using the user's password (synchronous).
|
|
72
|
+
* @param wrappedKey Wrapped key metadata
|
|
73
|
+
* @param password User's password for unwrapping
|
|
74
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
75
|
+
* @returns Unwrapped master key in a SecureBuffer
|
|
76
|
+
* @throws {InvalidPasswordError} If password is incorrect or decryption fails
|
|
77
|
+
*/
|
|
78
|
+
unwrapMasterKey(wrappedKey: WrappedKey, password: SecureString, constants?: IConstants): SecureBuffer;
|
|
79
|
+
/**
|
|
80
|
+
* Async version of unwrapMasterKey that uses libuv threadpool via crypto.pbkdf2
|
|
81
|
+
* to avoid blocking the event loop during password verification.
|
|
82
|
+
* @param wrappedKey Wrapped key metadata
|
|
83
|
+
* @param password User's password (SecureString or raw string)
|
|
84
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
85
|
+
* @returns Promise resolving to unwrapped master key in a SecureBuffer
|
|
86
|
+
* @throws {InvalidPasswordError} If password is incorrect or decryption fails
|
|
87
|
+
*/
|
|
88
|
+
unwrapMasterKeyAsync(wrappedKey: WrappedKey, password: SecureString | string, constants?: IConstants): Promise<SecureBuffer>;
|
|
89
|
+
/**
|
|
90
|
+
* Deduplicated async unwrap that coalesces concurrent identical PBKDF2 operations.
|
|
91
|
+
* Keyed by salt + iterations + password hash to avoid redundant computation.
|
|
92
|
+
* @param wrappedKey Wrapped key metadata
|
|
93
|
+
* @param password User's password as string
|
|
94
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
95
|
+
* @returns Promise resolving to unwrapped master key in a SecureBuffer
|
|
96
|
+
* @throws {InvalidPasswordError} If password is incorrect or decryption fails
|
|
97
|
+
*/
|
|
98
|
+
unwrapMasterKeyAsyncDedup(wrappedKey: WrappedKey, password: string, constants?: IConstants): Promise<SecureBuffer>;
|
|
99
|
+
/**
|
|
100
|
+
* Changes password by re-wrapping the master key with a new password.
|
|
101
|
+
* @param wrappedKey Current wrapped key metadata
|
|
102
|
+
* @param oldPassword Current password
|
|
103
|
+
* @param newPassword New password
|
|
104
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
105
|
+
* @returns New wrapped key metadata
|
|
106
|
+
* @throws {InvalidPasswordError} If old password is incorrect
|
|
107
|
+
* @throws {InvalidNewPasswordError} If new password doesn't meet requirements
|
|
108
|
+
*/
|
|
109
|
+
changePassword(wrappedKey: WrappedKey, oldPassword: SecureString, newPassword: SecureString, constants?: IConstants): WrappedKey;
|
|
110
|
+
/**
|
|
111
|
+
* Wraps arbitrary secret bytes with a password-derived key using AES-256-GCM.
|
|
112
|
+
* @param secret Secret data to wrap
|
|
113
|
+
* @param password User's password for wrapping
|
|
114
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
115
|
+
* @returns Password-wrapped secret metadata
|
|
116
|
+
* @throws {InvalidNewPasswordError} If password doesn't meet requirements
|
|
117
|
+
*/
|
|
118
|
+
wrapSecret(secret: SecureBuffer, password: SecureString, constants?: IConstants): PasswordWrappedSecret;
|
|
119
|
+
/**
|
|
120
|
+
* Unwraps a password-wrapped secret (synchronous).
|
|
121
|
+
* @param wrapped Password-wrapped secret metadata
|
|
122
|
+
* @param password User's password for unwrapping
|
|
123
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
124
|
+
* @returns Unwrapped secret in a SecureBuffer
|
|
125
|
+
* @throws {InvalidPasswordError} If password is incorrect or decryption fails
|
|
126
|
+
*/
|
|
127
|
+
unwrapSecret(wrapped: PasswordWrappedSecret, password: SecureString, constants?: IConstants): SecureBuffer;
|
|
128
|
+
/**
|
|
129
|
+
* Unwraps a password-wrapped secret using async PBKDF2 to avoid blocking.
|
|
130
|
+
* @param wrapped Password-wrapped secret metadata
|
|
131
|
+
* @param password User's password (SecureString or raw string)
|
|
132
|
+
* @param constants Configuration constants (defaults to Constants)
|
|
133
|
+
* @returns Promise resolving to unwrapped secret in a SecureBuffer
|
|
134
|
+
* @throws {InvalidPasswordError} If password is incorrect or decryption fails
|
|
135
|
+
* @throws {Error} If password is undefined, null, or invalid type
|
|
136
|
+
*/
|
|
137
|
+
unwrapSecretAsync(wrapped: PasswordWrappedSecret, password: SecureString | string, constants?: IConstants): Promise<SecureBuffer>;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=key-wrapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-wrapping.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/key-wrapping.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAEL,UAAU,EAEX,MAAM,iCAAiC,CAAC;AAkBzC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe,CAA2C;IAEzE;;;;;;OAMG;IACI,gBAAgB,CACrB,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,UAAsB,GAChC;QACD,SAAS,EAAE,YAAY,CAAC;QACxB,UAAU,EAAE,UAAU,CAAC;KACxB;IAQD;;;;;;;OAOG;IACI,aAAa,CAClB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,UAAsB,GAChC,UAAU;IAyCb;;;;;;;OAOG;IACI,eAAe,CACpB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,UAAsB,GAChC,YAAY;IAuCf;;;;;;;;OAQG;IACU,oBAAoB,CAC/B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,YAAY,GAAG,MAAM,EAC/B,SAAS,GAAE,UAAsB,GAChC,OAAO,CAAC,YAAY,CAAC;IA6DxB;;;;;;;;OAQG;IACU,yBAAyB,CACpC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,UAAsB,GAChC,OAAO,CAAC,YAAY,CAAC;IAuCxB;;;;;;;;;OASG;IACI,cAAc,CACnB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,YAAY,EACzB,SAAS,GAAE,UAAsB,GAChC,UAAU;IAYb;;;;;;;OAOG;IACI,UAAU,CACf,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,UAAsB,GAChC,qBAAqB;IAuCxB;;;;;;;OAOG;IACI,YAAY,CACjB,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,UAAsB,GAChC,YAAY;IAoCf;;;;;;;;OAQG;IACU,iBAAiB,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,YAAY,GAAG,MAAM,EAC/B,SAAS,GAAE,UAAsB,GAChC,OAAO,CAAC,YAAY,CAAC;CA+DzB"}
|