@digitaldefiance/node-express-suite 3.7.3 → 3.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/package.json +4 -5
- package/src/__tests__/fixtures/{index.d.ts → index.ts} +0 -1
- package/src/__tests__/fixtures/model-mocks.mock.ts +164 -0
- package/src/__tests__/helpers/application.mock.ts +89 -0
- package/src/__tests__/helpers/{index.d.ts → index.ts} +0 -1
- package/src/__tests__/helpers/setup-test-env.ts +202 -0
- package/src/__tests__/{index.d.ts → index.ts} +0 -1
- package/src/application-base.ts +548 -0
- package/src/application-concrete.ts +62 -0
- package/src/application.ts +330 -0
- package/src/backup-code.ts +348 -0
- package/src/builders/application-builder.ts +147 -0
- package/src/builders/{index.d.ts → index.ts} +0 -1
- package/src/constants.ts +89 -0
- package/src/container/{index.d.ts → index.ts} +0 -1
- package/src/container/service-container.ts +85 -0
- package/src/container/service-definitions.ts +23 -0
- package/src/controllers/base.ts +512 -0
- package/src/controllers/{index.d.ts → index.ts} +0 -1
- package/src/controllers/user.ts +1734 -0
- package/src/database/database-initializer.ts +13 -0
- package/src/database/{index.d.ts → index.ts} +0 -1
- package/src/decorators/base-controller.ts +91 -0
- package/src/decorators/controller.ts +152 -0
- package/src/decorators/{index.d.ts → index.ts} +0 -1
- package/src/decorators/zod-validation.ts +64 -0
- package/src/defaults.ts +259 -0
- package/src/documents/base.ts +17 -0
- package/src/documents/email-token.ts +20 -0
- package/src/documents/{index.d.ts → index.ts} +0 -1
- package/src/documents/mnemonic.ts +20 -0
- package/src/documents/role.ts +19 -0
- package/src/documents/used-direct-login-token.ts +18 -0
- package/src/documents/user-role.ts +20 -0
- package/src/documents/user.ts +20 -0
- package/src/enumerations/base-model-name.ts +47 -0
- package/src/enumerations/{index.d.ts → index.ts} +0 -1
- package/src/enumerations/length-encoding-type.ts +16 -0
- package/src/enumerations/schema-collection.ts +39 -0
- package/src/enumerations/symmetric-error-type.ts +13 -0
- package/src/environment.ts +859 -0
- package/src/errors/express-validation.ts +38 -0
- package/src/errors/{index.d.ts → index.ts} +0 -1
- package/src/errors/invalid-backup-code-version.ts +30 -0
- package/src/errors/invalid-jwt-token.ts +24 -0
- package/src/errors/invalid-model.ts +24 -0
- package/src/errors/invalid-new-password.ts +33 -0
- package/src/errors/invalid-password.ts +28 -0
- package/src/errors/missing-validated-data.ts +55 -0
- package/src/errors/mnemonic-or-password-required.ts +26 -0
- package/src/errors/model-not-registered.ts +24 -0
- package/src/errors/mongoose-validation.ts +56 -0
- package/src/errors/symmetric.ts +53 -0
- package/src/errors/token-expired.ts +24 -0
- package/src/get-language.ts +64 -0
- package/src/get-timezone.ts +76 -0
- package/src/{index.d.ts → index.ts} +44 -2
- package/src/interfaces/api-error-response.ts +15 -0
- package/src/interfaces/api-express-validation-error-response.ts +17 -0
- package/src/interfaces/api-message-response.ts +12 -0
- package/src/interfaces/api-mongo-validation-error-response.ts +17 -0
- package/src/interfaces/api-responses/backup-codes-response.ts +15 -0
- package/src/interfaces/api-responses/challenge-response.ts +17 -0
- package/src/interfaces/api-responses/code-count-response.ts +12 -0
- package/src/interfaces/api-responses/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/api-responses/login-response.ts +18 -0
- package/src/interfaces/api-responses/mnemonic-response.ts +15 -0
- package/src/interfaces/api-responses/registration-response.ts +17 -0
- package/src/interfaces/api-responses/request-user-response.ts +16 -0
- package/src/interfaces/api-responses/user-settings-response.ts +19 -0
- package/src/interfaces/application.ts +40 -0
- package/src/interfaces/backend-objects/email-token.ts +18 -0
- package/src/interfaces/backend-objects/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/backend-objects/request-user.ts +19 -0
- package/src/interfaces/backend-objects/role.ts +18 -0
- package/src/interfaces/backend-objects/user.ts +18 -0
- package/src/interfaces/checksum-config.ts +15 -0
- package/src/interfaces/checksum-consts.ts +23 -0
- package/src/interfaces/constants.ts +114 -0
- package/src/interfaces/controller-config.ts +54 -0
- package/src/interfaces/create-user-basics.ts +24 -0
- package/src/interfaces/csp-config.ts +32 -0
- package/src/interfaces/csp-definition.ts +71 -0
- package/src/interfaces/db-init-result.ts +17 -0
- package/src/interfaces/deep-partial.ts +14 -0
- package/src/interfaces/discriminator-collections.ts +21 -0
- package/src/interfaces/email-service.ts +26 -0
- package/src/interfaces/environment-mongo.ts +86 -0
- package/src/interfaces/environment.ts +191 -0
- package/src/interfaces/failable-result.ts +20 -0
- package/src/interfaces/fec-consts.ts +14 -0
- package/src/interfaces/flexible-csp.ts +35 -0
- package/src/interfaces/handleable-error-options.ts +19 -0
- package/src/interfaces/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/jwt-consts.ts +33 -0
- package/src/interfaces/jwt-sign-response.ts +31 -0
- package/src/interfaces/models/email-token.ts +13 -0
- package/src/interfaces/models/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/models/mnemonic.ts +14 -0
- package/src/interfaces/models/role.ts +13 -0
- package/src/interfaces/models/token-role.ts +23 -0
- package/src/interfaces/models/used-direct-login-token.ts +21 -0
- package/src/interfaces/models/user-role.ts +23 -0
- package/src/interfaces/models/user.ts +30 -0
- package/src/interfaces/mongo-errors.ts +14 -0
- package/src/interfaces/request-user.ts +80 -0
- package/src/interfaces/required-string-keys.ts +33 -0
- package/src/interfaces/schema.ts +43 -0
- package/src/interfaces/server-init-result.ts +48 -0
- package/src/interfaces/status-code-response.ts +20 -0
- package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
- package/src/interfaces/symmetric-encryption-results.js.map +1 -1
- package/src/interfaces/symmetric-encryption-results.ts +15 -0
- package/src/interfaces/test-environment.ts +23 -0
- package/src/interfaces/token-response.ts +16 -0
- package/src/middleware-utils.ts +138 -0
- package/src/middlewares/authenticate-crypto.ts +237 -0
- package/src/middlewares/authenticate-token.ts +165 -0
- package/src/middlewares/cleanup-crypto.ts +47 -0
- package/src/middlewares/{index.d.ts → index.ts} +0 -1
- package/src/middlewares/set-global-context-language.ts +38 -0
- package/src/model-registry.ts +142 -0
- package/src/models/email-token.ts +49 -0
- package/src/models/{index.d.ts → index.ts} +0 -1
- package/src/models/mnemonic.ts +42 -0
- package/src/models/role.ts +38 -0
- package/src/models/used-direct-login-token.ts +49 -0
- package/src/models/user-role.ts +40 -0
- package/src/models/user.ts +42 -0
- package/src/pipeline/{index.d.ts → index.ts} +0 -1
- package/src/pipeline/pipeline-builder.ts +27 -0
- package/src/plugins/{index.d.ts → index.ts} +0 -1
- package/src/plugins/plugin-interface.ts +19 -0
- package/src/plugins/plugin-manager.ts +53 -0
- package/src/registry/email-service-registry.ts +76 -0
- package/src/registry/{index.d.ts → index.ts} +0 -1
- package/src/responses/{index.d.ts → index.ts} +0 -1
- package/src/responses/response-builder.ts +166 -0
- package/src/routers/api.ts +233 -0
- package/src/routers/app.ts +395 -0
- package/src/routers/base.ts +34 -0
- package/src/routers/{index.d.ts → index.ts} +0 -1
- package/src/routers/router-config.ts +34 -0
- package/src/routing/index.ts +1 -0
- package/src/routing/route-builder.ts +214 -0
- package/src/schemas/email-token.ts +112 -0
- package/src/schemas/{index.d.ts → index.ts} +0 -1
- package/src/schemas/mnemonic.ts +48 -0
- package/src/schemas/role.ts +153 -0
- package/src/schemas/schema.ts +185 -0
- package/src/schemas/used-direct-login-token.ts +58 -0
- package/src/schemas/user-role.ts +93 -0
- package/src/schemas/user.ts +244 -0
- package/src/services/backup-code.ts +327 -0
- package/src/services/base.ts +46 -0
- package/src/services/checksum.ts +189 -0
- package/src/services/database-initialization.ts +1653 -0
- package/src/services/db-init-cache.ts +28 -0
- package/src/services/direct-login-token.ts +83 -0
- package/src/services/dummy-email-service.ts +43 -0
- package/src/services/fec-usage-example.ts +123 -0
- package/src/services/fec.ts +399 -0
- package/src/services/{index.d.ts → index.ts} +0 -2
- package/src/services/jwt.ts +146 -0
- package/src/services/key-wrapping.ts +528 -0
- package/src/services/mnemonic.ts +174 -0
- package/src/services/request-user.ts +127 -0
- package/src/services/role.ts +417 -0
- package/src/services/symmetric.ts +164 -0
- package/src/services/system-user.ts +87 -0
- package/src/services/user.ts +2324 -0
- package/src/services/xor.ts +39 -0
- package/src/testing.ts +9 -0
- package/src/transactions/{index.d.ts → index.ts} +0 -1
- package/src/transactions/transaction-manager.ts +63 -0
- package/src/types/app-config.ts +36 -0
- package/src/types/controller-config.ts +28 -0
- package/src/types/{environment-variables.d.ts → environment-variables.ts} +32 -5
- package/src/types/{index.d.ts → index.ts} +0 -1
- package/src/types/{mongoose-helpers.d.ts → mongoose-helpers.ts} +8 -2
- package/src/types/mongoose-override.d.ts +1 -0
- package/src/types/mongoose.d.ts +1 -0
- package/src/types.ts +189 -0
- package/src/utils.ts +1116 -0
- package/src/validation/{index.d.ts → index.ts} +0 -1
- package/src/validation/validation-builder.ts +155 -0
- package/src/__tests__/fixtures/index.d.ts.map +0 -1
- package/src/__tests__/fixtures/index.js +0 -5
- package/src/__tests__/fixtures/index.js.map +0 -1
- package/src/__tests__/fixtures/model-mocks.mock.d.ts +0 -12
- package/src/__tests__/fixtures/model-mocks.mock.d.ts.map +0 -1
- package/src/__tests__/fixtures/model-mocks.mock.js +0 -102
- package/src/__tests__/fixtures/model-mocks.mock.js.map +0 -1
- package/src/__tests__/helpers/application.mock.d.ts +0 -8
- package/src/__tests__/helpers/application.mock.d.ts.map +0 -1
- package/src/__tests__/helpers/application.mock.js +0 -77
- package/src/__tests__/helpers/application.mock.js.map +0 -1
- package/src/__tests__/helpers/index.d.ts.map +0 -1
- package/src/__tests__/helpers/index.js +0 -7
- package/src/__tests__/helpers/index.js.map +0 -1
- package/src/__tests__/helpers/setup-test-env.d.ts +0 -12
- package/src/__tests__/helpers/setup-test-env.d.ts.map +0 -1
- package/src/__tests__/helpers/setup-test-env.js +0 -121
- package/src/__tests__/helpers/setup-test-env.js.map +0 -1
- package/src/__tests__/index.d.ts.map +0 -1
- package/src/__tests__/index.js +0 -6
- package/src/__tests__/index.js.map +0 -1
- package/src/application-base.d.ts +0 -123
- package/src/application-base.d.ts.map +0 -1
- package/src/application-base.js +0 -359
- package/src/application-base.js.map +0 -1
- package/src/application-concrete.d.ts +0 -13
- package/src/application-concrete.d.ts.map +0 -1
- package/src/application-concrete.js +0 -21
- package/src/application-concrete.js.map +0 -1
- package/src/application.d.ts +0 -29
- package/src/application.d.ts.map +0 -1
- package/src/application.js +0 -167
- package/src/application.js.map +0 -1
- package/src/backup-code.d.ts +0 -67
- package/src/backup-code.d.ts.map +0 -1
- package/src/backup-code.js +0 -238
- package/src/backup-code.js.map +0 -1
- package/src/builders/application-builder.d.ts +0 -35
- package/src/builders/application-builder.d.ts.map +0 -1
- package/src/builders/application-builder.js +0 -64
- package/src/builders/application-builder.js.map +0 -1
- package/src/builders/index.d.ts.map +0 -1
- package/src/builders/index.js +0 -5
- package/src/builders/index.js.map +0 -1
- package/src/constants.d.ts +0 -16
- package/src/constants.d.ts.map +0 -1
- package/src/constants.js +0 -58
- package/src/constants.js.map +0 -1
- package/src/container/index.d.ts.map +0 -1
- package/src/container/index.js +0 -6
- package/src/container/index.js.map +0 -1
- package/src/container/service-container.d.ts +0 -11
- package/src/container/service-container.d.ts.map +0 -1
- package/src/container/service-container.js +0 -38
- package/src/container/service-container.js.map +0 -1
- package/src/container/service-definitions.d.ts +0 -11
- package/src/container/service-definitions.d.ts.map +0 -1
- package/src/container/service-definitions.js +0 -13
- package/src/container/service-definitions.js.map +0 -1
- package/src/controllers/base.d.ts +0 -67
- package/src/controllers/base.d.ts.map +0 -1
- package/src/controllers/base.js +0 -305
- package/src/controllers/base.js.map +0 -1
- package/src/controllers/index.d.ts.map +0 -1
- package/src/controllers/index.js +0 -6
- package/src/controllers/index.js.map +0 -1
- package/src/controllers/user.d.ts +0 -49
- package/src/controllers/user.d.ts.map +0 -1
- package/src/controllers/user.js +0 -919
- package/src/controllers/user.js.map +0 -1
- package/src/database/database-initializer.d.ts +0 -7
- package/src/database/database-initializer.d.ts.map +0 -1
- package/src/database/database-initializer.js +0 -3
- package/src/database/database-initializer.js.map +0 -1
- package/src/database/index.d.ts.map +0 -1
- package/src/database/index.js +0 -5
- package/src/database/index.js.map +0 -1
- package/src/decorators/base-controller.d.ts +0 -11
- package/src/decorators/base-controller.d.ts.map +0 -1
- package/src/decorators/base-controller.js +0 -60
- package/src/decorators/base-controller.js.map +0 -1
- package/src/decorators/controller.d.ts +0 -38
- package/src/decorators/controller.d.ts.map +0 -1
- package/src/decorators/controller.js +0 -68
- package/src/decorators/controller.js.map +0 -1
- package/src/decorators/index.d.ts.map +0 -1
- package/src/decorators/index.js +0 -7
- package/src/decorators/index.js.map +0 -1
- package/src/decorators/zod-validation.d.ts +0 -5
- package/src/decorators/zod-validation.d.ts.map +0 -1
- package/src/decorators/zod-validation.js +0 -48
- package/src/decorators/zod-validation.js.map +0 -1
- package/src/defaults.d.ts +0 -7
- package/src/defaults.d.ts.map +0 -1
- package/src/defaults.js +0 -205
- package/src/defaults.js.map +0 -1
- package/src/documents/base.d.ts +0 -4
- package/src/documents/base.d.ts.map +0 -1
- package/src/documents/base.js +0 -3
- package/src/documents/base.js.map +0 -1
- package/src/documents/email-token.d.ts +0 -8
- package/src/documents/email-token.d.ts.map +0 -1
- package/src/documents/email-token.js +0 -3
- package/src/documents/email-token.js.map +0 -1
- package/src/documents/index.d.ts.map +0 -1
- package/src/documents/index.js +0 -3
- package/src/documents/index.js.map +0 -1
- package/src/documents/mnemonic.d.ts +0 -8
- package/src/documents/mnemonic.d.ts.map +0 -1
- package/src/documents/mnemonic.js +0 -3
- package/src/documents/mnemonic.js.map +0 -1
- package/src/documents/role.d.ts +0 -8
- package/src/documents/role.d.ts.map +0 -1
- package/src/documents/role.js +0 -3
- package/src/documents/role.js.map +0 -1
- package/src/documents/used-direct-login-token.d.ts +0 -5
- package/src/documents/used-direct-login-token.d.ts.map +0 -1
- package/src/documents/used-direct-login-token.js +0 -3
- package/src/documents/used-direct-login-token.js.map +0 -1
- package/src/documents/user-role.d.ts +0 -8
- package/src/documents/user-role.d.ts.map +0 -1
- package/src/documents/user-role.js +0 -3
- package/src/documents/user-role.js.map +0 -1
- package/src/documents/user.d.ts +0 -8
- package/src/documents/user.d.ts.map +0 -1
- package/src/documents/user.js +0 -3
- package/src/documents/user.js.map +0 -1
- package/src/enumerations/base-model-name.d.ts +0 -38
- package/src/enumerations/base-model-name.d.ts.map +0 -1
- package/src/enumerations/base-model-name.js +0 -34
- package/src/enumerations/base-model-name.js.map +0 -1
- package/src/enumerations/index.d.ts.map +0 -1
- package/src/enumerations/index.js +0 -8
- package/src/enumerations/index.js.map +0 -1
- package/src/enumerations/length-encoding-type.d.ts +0 -7
- package/src/enumerations/length-encoding-type.d.ts.map +0 -1
- package/src/enumerations/length-encoding-type.js +0 -11
- package/src/enumerations/length-encoding-type.js.map +0 -1
- package/src/enumerations/schema-collection.d.ts +0 -34
- package/src/enumerations/schema-collection.d.ts.map +0 -1
- package/src/enumerations/schema-collection.js +0 -38
- package/src/enumerations/schema-collection.js.map +0 -1
- package/src/enumerations/symmetric-error-type.d.ts +0 -5
- package/src/enumerations/symmetric-error-type.d.ts.map +0 -1
- package/src/enumerations/symmetric-error-type.js +0 -9
- package/src/enumerations/symmetric-error-type.js.map +0 -1
- package/src/environment.d.ts +0 -189
- package/src/environment.d.ts.map +0 -1
- package/src/environment.js +0 -641
- package/src/environment.js.map +0 -1
- package/src/errors/express-validation.d.ts +0 -9
- package/src/errors/express-validation.d.ts.map +0 -1
- package/src/errors/express-validation.js +0 -18
- package/src/errors/express-validation.js.map +0 -1
- package/src/errors/index.d.ts.map +0 -1
- package/src/errors/index.js +0 -16
- package/src/errors/index.js.map +0 -1
- package/src/errors/invalid-backup-code-version.d.ts +0 -6
- package/src/errors/invalid-backup-code-version.d.ts.map +0 -1
- package/src/errors/invalid-backup-code-version.js +0 -16
- package/src/errors/invalid-backup-code-version.js.map +0 -1
- package/src/errors/invalid-jwt-token.d.ts +0 -5
- package/src/errors/invalid-jwt-token.d.ts.map +0 -1
- package/src/errors/invalid-jwt-token.js +0 -12
- package/src/errors/invalid-jwt-token.js.map +0 -1
- package/src/errors/invalid-model.d.ts +0 -6
- package/src/errors/invalid-model.d.ts.map +0 -1
- package/src/errors/invalid-model.js +0 -14
- package/src/errors/invalid-model.js.map +0 -1
- package/src/errors/invalid-new-password.d.ts +0 -5
- package/src/errors/invalid-new-password.d.ts.map +0 -1
- package/src/errors/invalid-new-password.js +0 -14
- package/src/errors/invalid-new-password.js.map +0 -1
- package/src/errors/invalid-password.d.ts +0 -5
- package/src/errors/invalid-password.d.ts.map +0 -1
- package/src/errors/invalid-password.js +0 -14
- package/src/errors/invalid-password.js.map +0 -1
- package/src/errors/missing-validated-data.d.ts +0 -7
- package/src/errors/missing-validated-data.d.ts.map +0 -1
- package/src/errors/missing-validated-data.js +0 -36
- package/src/errors/missing-validated-data.js.map +0 -1
- package/src/errors/mnemonic-or-password-required.d.ts +0 -5
- package/src/errors/mnemonic-or-password-required.d.ts.map +0 -1
- package/src/errors/mnemonic-or-password-required.js +0 -14
- package/src/errors/mnemonic-or-password-required.js.map +0 -1
- package/src/errors/model-not-registered.d.ts +0 -6
- package/src/errors/model-not-registered.d.ts.map +0 -1
- package/src/errors/model-not-registered.js +0 -14
- package/src/errors/model-not-registered.js.map +0 -1
- package/src/errors/mongoose-validation.d.ts +0 -12
- package/src/errors/mongoose-validation.d.ts.map +0 -1
- package/src/errors/mongoose-validation.js +0 -17
- package/src/errors/mongoose-validation.js.map +0 -1
- package/src/errors/symmetric.d.ts +0 -8
- package/src/errors/symmetric.d.ts.map +0 -1
- package/src/errors/symmetric.js +0 -22
- package/src/errors/symmetric.js.map +0 -1
- package/src/errors/token-expired.d.ts +0 -5
- package/src/errors/token-expired.d.ts.map +0 -1
- package/src/errors/token-expired.js +0 -12
- package/src/errors/token-expired.js.map +0 -1
- package/src/get-language.d.ts +0 -2
- package/src/get-language.d.ts.map +0 -1
- package/src/get-language.js +0 -30
- package/src/get-language.js.map +0 -1
- package/src/get-timezone.d.ts +0 -2
- package/src/get-timezone.d.ts.map +0 -1
- package/src/get-timezone.js +0 -39
- package/src/get-timezone.js.map +0 -1
- package/src/index.d.ts.map +0 -1
- package/src/index.js +0 -80
- package/src/index.js.map +0 -1
- package/src/interfaces/api-error-response.d.ts +0 -5
- package/src/interfaces/api-error-response.d.ts.map +0 -1
- package/src/interfaces/api-error-response.js +0 -3
- package/src/interfaces/api-error-response.js.map +0 -1
- package/src/interfaces/api-express-validation-error-response.d.ts +0 -7
- package/src/interfaces/api-express-validation-error-response.d.ts.map +0 -1
- package/src/interfaces/api-express-validation-error-response.js +0 -3
- package/src/interfaces/api-express-validation-error-response.js.map +0 -1
- package/src/interfaces/api-message-response.d.ts +0 -4
- package/src/interfaces/api-message-response.d.ts.map +0 -1
- package/src/interfaces/api-message-response.js +0 -3
- package/src/interfaces/api-message-response.js.map +0 -1
- package/src/interfaces/api-mongo-validation-error-response.d.ts +0 -6
- package/src/interfaces/api-mongo-validation-error-response.d.ts.map +0 -1
- package/src/interfaces/api-mongo-validation-error-response.js +0 -3
- package/src/interfaces/api-mongo-validation-error-response.js.map +0 -1
- package/src/interfaces/api-responses/backup-codes-response.d.ts +0 -5
- package/src/interfaces/api-responses/backup-codes-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/backup-codes-response.js +0 -3
- package/src/interfaces/api-responses/backup-codes-response.js.map +0 -1
- package/src/interfaces/api-responses/challenge-response.d.ts +0 -6
- package/src/interfaces/api-responses/challenge-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/challenge-response.js +0 -3
- package/src/interfaces/api-responses/challenge-response.js.map +0 -1
- package/src/interfaces/api-responses/code-count-response.d.ts +0 -5
- package/src/interfaces/api-responses/code-count-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/code-count-response.js +0 -3
- package/src/interfaces/api-responses/code-count-response.js.map +0 -1
- package/src/interfaces/api-responses/index.d.ts.map +0 -1
- package/src/interfaces/api-responses/index.js +0 -12
- package/src/interfaces/api-responses/index.js.map +0 -1
- package/src/interfaces/api-responses/login-response.d.ts +0 -8
- package/src/interfaces/api-responses/login-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/login-response.js +0 -3
- package/src/interfaces/api-responses/login-response.js.map +0 -1
- package/src/interfaces/api-responses/mnemonic-response.d.ts +0 -5
- package/src/interfaces/api-responses/mnemonic-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/mnemonic-response.js +0 -3
- package/src/interfaces/api-responses/mnemonic-response.js.map +0 -1
- package/src/interfaces/api-responses/registration-response.d.ts +0 -6
- package/src/interfaces/api-responses/registration-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/registration-response.js +0 -3
- package/src/interfaces/api-responses/registration-response.js.map +0 -1
- package/src/interfaces/api-responses/request-user-response.d.ts +0 -6
- package/src/interfaces/api-responses/request-user-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/request-user-response.js +0 -3
- package/src/interfaces/api-responses/request-user-response.js.map +0 -1
- package/src/interfaces/api-responses/user-settings-response.d.ts +0 -12
- package/src/interfaces/api-responses/user-settings-response.d.ts.map +0 -1
- package/src/interfaces/api-responses/user-settings-response.js +0 -3
- package/src/interfaces/api-responses/user-settings-response.js.map +0 -1
- package/src/interfaces/application.d.ts +0 -17
- package/src/interfaces/application.d.ts.map +0 -1
- package/src/interfaces/application.js +0 -3
- package/src/interfaces/application.js.map +0 -1
- package/src/interfaces/backend-objects/email-token.d.ts +0 -4
- package/src/interfaces/backend-objects/email-token.d.ts.map +0 -1
- package/src/interfaces/backend-objects/email-token.js +0 -3
- package/src/interfaces/backend-objects/email-token.js.map +0 -1
- package/src/interfaces/backend-objects/index.d.ts.map +0 -1
- package/src/interfaces/backend-objects/index.js +0 -8
- package/src/interfaces/backend-objects/index.js.map +0 -1
- package/src/interfaces/backend-objects/request-user.d.ts +0 -5
- package/src/interfaces/backend-objects/request-user.d.ts.map +0 -1
- package/src/interfaces/backend-objects/request-user.js +0 -3
- package/src/interfaces/backend-objects/request-user.js.map +0 -1
- package/src/interfaces/backend-objects/role.d.ts +0 -4
- package/src/interfaces/backend-objects/role.d.ts.map +0 -1
- package/src/interfaces/backend-objects/role.js +0 -3
- package/src/interfaces/backend-objects/role.js.map +0 -1
- package/src/interfaces/backend-objects/user.d.ts +0 -4
- package/src/interfaces/backend-objects/user.d.ts.map +0 -1
- package/src/interfaces/backend-objects/user.js +0 -3
- package/src/interfaces/backend-objects/user.js.map +0 -1
- package/src/interfaces/checksum-config.d.ts +0 -5
- package/src/interfaces/checksum-config.d.ts.map +0 -1
- package/src/interfaces/checksum-config.js +0 -3
- package/src/interfaces/checksum-config.js.map +0 -1
- package/src/interfaces/checksum-consts.d.ts +0 -11
- package/src/interfaces/checksum-consts.d.ts.map +0 -1
- package/src/interfaces/checksum-consts.js +0 -3
- package/src/interfaces/checksum-consts.js.map +0 -1
- package/src/interfaces/constants.d.ts +0 -102
- package/src/interfaces/constants.d.ts.map +0 -1
- package/src/interfaces/constants.js +0 -3
- package/src/interfaces/constants.js.map +0 -1
- package/src/interfaces/controller-config.d.ts +0 -21
- package/src/interfaces/controller-config.d.ts.map +0 -1
- package/src/interfaces/controller-config.js +0 -3
- package/src/interfaces/controller-config.js.map +0 -1
- package/src/interfaces/create-user-basics.d.ts +0 -18
- package/src/interfaces/create-user-basics.d.ts.map +0 -1
- package/src/interfaces/create-user-basics.js +0 -3
- package/src/interfaces/create-user-basics.js.map +0 -1
- package/src/interfaces/csp-config.d.ts +0 -7
- package/src/interfaces/csp-config.d.ts.map +0 -1
- package/src/interfaces/csp-config.js +0 -13
- package/src/interfaces/csp-config.js.map +0 -1
- package/src/interfaces/csp-definition.d.ts +0 -13
- package/src/interfaces/csp-definition.d.ts.map +0 -1
- package/src/interfaces/csp-definition.js +0 -22
- package/src/interfaces/csp-definition.js.map +0 -1
- package/src/interfaces/db-init-result.d.ts +0 -5
- package/src/interfaces/db-init-result.d.ts.map +0 -1
- package/src/interfaces/db-init-result.js +0 -3
- package/src/interfaces/db-init-result.js.map +0 -1
- package/src/interfaces/deep-partial.d.ts +0 -4
- package/src/interfaces/deep-partial.d.ts.map +0 -1
- package/src/interfaces/deep-partial.js +0 -3
- package/src/interfaces/deep-partial.js.map +0 -1
- package/src/interfaces/discriminator-collections.d.ts +0 -7
- package/src/interfaces/discriminator-collections.d.ts.map +0 -1
- package/src/interfaces/discriminator-collections.js +0 -3
- package/src/interfaces/discriminator-collections.js.map +0 -1
- package/src/interfaces/email-service.d.ts +0 -4
- package/src/interfaces/email-service.d.ts.map +0 -1
- package/src/interfaces/email-service.js +0 -3
- package/src/interfaces/email-service.js.map +0 -1
- package/src/interfaces/environment-mongo.d.ts +0 -76
- package/src/interfaces/environment-mongo.d.ts.map +0 -1
- package/src/interfaces/environment-mongo.js +0 -3
- package/src/interfaces/environment-mongo.js.map +0 -1
- package/src/interfaces/environment.d.ts +0 -180
- package/src/interfaces/environment.d.ts.map +0 -1
- package/src/interfaces/environment.js +0 -3
- package/src/interfaces/environment.js.map +0 -1
- package/src/interfaces/failable-result.d.ts +0 -7
- package/src/interfaces/failable-result.d.ts.map +0 -1
- package/src/interfaces/failable-result.js +0 -3
- package/src/interfaces/failable-result.js.map +0 -1
- package/src/interfaces/fec-consts.d.ts +0 -5
- package/src/interfaces/fec-consts.d.ts.map +0 -1
- package/src/interfaces/fec-consts.js +0 -3
- package/src/interfaces/fec-consts.js.map +0 -1
- package/src/interfaces/flexible-csp.d.ts +0 -8
- package/src/interfaces/flexible-csp.d.ts.map +0 -1
- package/src/interfaces/flexible-csp.js +0 -14
- package/src/interfaces/flexible-csp.js.map +0 -1
- package/src/interfaces/handleable-error-options.d.ts +0 -7
- package/src/interfaces/handleable-error-options.d.ts.map +0 -1
- package/src/interfaces/handleable-error-options.js +0 -3
- package/src/interfaces/handleable-error-options.js.map +0 -1
- package/src/interfaces/index.d.ts.map +0 -1
- package/src/interfaces/index.js +0 -38
- package/src/interfaces/index.js.map +0 -1
- package/src/interfaces/jwt-consts.d.ts +0 -11
- package/src/interfaces/jwt-consts.d.ts.map +0 -1
- package/src/interfaces/jwt-consts.js +0 -3
- package/src/interfaces/jwt-consts.js.map +0 -1
- package/src/interfaces/jwt-sign-response.d.ts +0 -11
- package/src/interfaces/jwt-sign-response.d.ts.map +0 -1
- package/src/interfaces/jwt-sign-response.js +0 -3
- package/src/interfaces/jwt-sign-response.js.map +0 -1
- package/src/interfaces/models/email-token.d.ts +0 -6
- package/src/interfaces/models/email-token.d.ts.map +0 -1
- package/src/interfaces/models/email-token.js +0 -3
- package/src/interfaces/models/email-token.js.map +0 -1
- package/src/interfaces/models/index.d.ts.map +0 -1
- package/src/interfaces/models/index.js +0 -11
- package/src/interfaces/models/index.js.map +0 -1
- package/src/interfaces/models/mnemonic.d.ts +0 -6
- package/src/interfaces/models/mnemonic.d.ts.map +0 -1
- package/src/interfaces/models/mnemonic.js +0 -3
- package/src/interfaces/models/mnemonic.js.map +0 -1
- package/src/interfaces/models/role.d.ts +0 -6
- package/src/interfaces/models/role.d.ts.map +0 -1
- package/src/interfaces/models/role.js +0 -3
- package/src/interfaces/models/role.js.map +0 -1
- package/src/interfaces/models/token-role.d.ts +0 -11
- package/src/interfaces/models/token-role.d.ts.map +0 -1
- package/src/interfaces/models/token-role.js +0 -3
- package/src/interfaces/models/token-role.js.map +0 -1
- package/src/interfaces/models/used-direct-login-token.d.ts +0 -11
- package/src/interfaces/models/used-direct-login-token.d.ts.map +0 -1
- package/src/interfaces/models/used-direct-login-token.js +0 -3
- package/src/interfaces/models/used-direct-login-token.js.map +0 -1
- package/src/interfaces/models/user-role.d.ts +0 -11
- package/src/interfaces/models/user-role.d.ts.map +0 -1
- package/src/interfaces/models/user-role.js +0 -3
- package/src/interfaces/models/user-role.js.map +0 -1
- package/src/interfaces/models/user.d.ts +0 -11
- package/src/interfaces/models/user.d.ts.map +0 -1
- package/src/interfaces/models/user.js +0 -3
- package/src/interfaces/models/user.js.map +0 -1
- package/src/interfaces/mongo-errors.d.ts +0 -5
- package/src/interfaces/mongo-errors.d.ts.map +0 -1
- package/src/interfaces/mongo-errors.js +0 -3
- package/src/interfaces/mongo-errors.js.map +0 -1
- package/src/interfaces/request-user.d.ts +0 -58
- package/src/interfaces/request-user.d.ts.map +0 -1
- package/src/interfaces/request-user.js +0 -3
- package/src/interfaces/request-user.js.map +0 -1
- package/src/interfaces/required-string-keys.d.ts +0 -22
- package/src/interfaces/required-string-keys.d.ts.map +0 -1
- package/src/interfaces/required-string-keys.js +0 -3
- package/src/interfaces/required-string-keys.js.map +0 -1
- package/src/interfaces/schema.d.ts +0 -29
- package/src/interfaces/schema.d.ts.map +0 -1
- package/src/interfaces/schema.js +0 -3
- package/src/interfaces/schema.js.map +0 -1
- package/src/interfaces/server-init-result.d.ts +0 -35
- package/src/interfaces/server-init-result.d.ts.map +0 -1
- package/src/interfaces/server-init-result.js +0 -3
- package/src/interfaces/server-init-result.js.map +0 -1
- package/src/interfaces/status-code-response.d.ts +0 -7
- package/src/interfaces/status-code-response.d.ts.map +0 -1
- package/src/interfaces/status-code-response.js +0 -3
- package/src/interfaces/status-code-response.js.map +0 -1
- package/src/interfaces/symmetric-encryption-results.d.ts +0 -5
- package/src/interfaces/test-environment.d.ts +0 -12
- package/src/interfaces/test-environment.d.ts.map +0 -1
- package/src/interfaces/test-environment.js +0 -3
- package/src/interfaces/test-environment.js.map +0 -1
- package/src/interfaces/token-response.d.ts +0 -5
- package/src/interfaces/token-response.d.ts.map +0 -1
- package/src/interfaces/token-response.js +0 -3
- package/src/interfaces/token-response.js.map +0 -1
- package/src/middleware-utils.d.ts +0 -8
- package/src/middleware-utils.d.ts.map +0 -1
- package/src/middleware-utils.js +0 -94
- package/src/middleware-utils.js.map +0 -1
- package/src/middlewares/authenticate-crypto.d.ts +0 -10
- package/src/middlewares/authenticate-crypto.d.ts.map +0 -1
- package/src/middlewares/authenticate-crypto.js +0 -126
- package/src/middlewares/authenticate-crypto.js.map +0 -1
- package/src/middlewares/authenticate-token.d.ts +0 -21
- package/src/middlewares/authenticate-token.d.ts.map +0 -1
- package/src/middlewares/authenticate-token.js +0 -104
- package/src/middlewares/authenticate-token.js.map +0 -1
- package/src/middlewares/cleanup-crypto.d.ts +0 -7
- package/src/middlewares/cleanup-crypto.d.ts.map +0 -1
- package/src/middlewares/cleanup-crypto.js +0 -32
- package/src/middlewares/cleanup-crypto.js.map +0 -1
- package/src/middlewares/index.d.ts.map +0 -1
- package/src/middlewares/index.js +0 -8
- package/src/middlewares/index.js.map +0 -1
- package/src/middlewares/set-global-context-language.d.ts +0 -3
- package/src/middlewares/set-global-context-language.d.ts.map +0 -1
- package/src/middlewares/set-global-context-language.js +0 -14
- package/src/middlewares/set-global-context-language.js.map +0 -1
- package/src/model-registry.d.ts +0 -23
- package/src/model-registry.d.ts.map +0 -1
- package/src/model-registry.js +0 -47
- package/src/model-registry.js.map +0 -1
- package/src/models/email-token.d.ts +0 -8
- package/src/models/email-token.d.ts.map +0 -1
- package/src/models/email-token.js +0 -11
- package/src/models/email-token.js.map +0 -1
- package/src/models/index.d.ts.map +0 -1
- package/src/models/index.js +0 -10
- package/src/models/index.js.map +0 -1
- package/src/models/mnemonic.d.ts +0 -8
- package/src/models/mnemonic.d.ts.map +0 -1
- package/src/models/mnemonic.js +0 -11
- package/src/models/mnemonic.js.map +0 -1
- package/src/models/role.d.ts +0 -8
- package/src/models/role.d.ts.map +0 -1
- package/src/models/role.js +0 -11
- package/src/models/role.js.map +0 -1
- package/src/models/used-direct-login-token.d.ts +0 -8
- package/src/models/used-direct-login-token.d.ts.map +0 -1
- package/src/models/used-direct-login-token.js +0 -11
- package/src/models/used-direct-login-token.js.map +0 -1
- package/src/models/user-role.d.ts +0 -7
- package/src/models/user-role.d.ts.map +0 -1
- package/src/models/user-role.js +0 -10
- package/src/models/user-role.js.map +0 -1
- package/src/models/user.d.ts +0 -8
- package/src/models/user.d.ts.map +0 -1
- package/src/models/user.js +0 -11
- package/src/models/user.js.map +0 -1
- package/src/pipeline/index.d.ts.map +0 -1
- package/src/pipeline/index.js +0 -5
- package/src/pipeline/index.js.map +0 -1
- package/src/pipeline/pipeline-builder.d.ts +0 -8
- package/src/pipeline/pipeline-builder.d.ts.map +0 -1
- package/src/pipeline/pipeline-builder.js +0 -18
- package/src/pipeline/pipeline-builder.js.map +0 -1
- package/src/plugins/index.d.ts.map +0 -1
- package/src/plugins/index.js +0 -6
- package/src/plugins/index.js.map +0 -1
- package/src/plugins/plugin-interface.d.ts +0 -9
- package/src/plugins/plugin-interface.d.ts.map +0 -1
- package/src/plugins/plugin-interface.js +0 -3
- package/src/plugins/plugin-interface.js.map +0 -1
- package/src/plugins/plugin-manager.d.ts +0 -13
- package/src/plugins/plugin-manager.d.ts.map +0 -1
- package/src/plugins/plugin-manager.js +0 -37
- package/src/plugins/plugin-manager.js.map +0 -1
- package/src/registry/email-service-registry.d.ts +0 -27
- package/src/registry/email-service-registry.d.ts.map +0 -1
- package/src/registry/email-service-registry.js +0 -42
- package/src/registry/email-service-registry.js.map +0 -1
- package/src/registry/index.d.ts.map +0 -1
- package/src/registry/index.js +0 -6
- package/src/registry/index.js.map +0 -1
- package/src/responses/index.d.ts.map +0 -1
- package/src/responses/index.js +0 -5
- package/src/responses/index.js.map +0 -1
- package/src/responses/response-builder.d.ts +0 -24
- package/src/responses/response-builder.d.ts.map +0 -1
- package/src/responses/response-builder.js +0 -63
- package/src/responses/response-builder.js.map +0 -1
- package/src/routers/api.d.ts +0 -28
- package/src/routers/api.d.ts.map +0 -1
- package/src/routers/api.js +0 -80
- package/src/routers/api.js.map +0 -1
- package/src/routers/app.d.ts +0 -33
- package/src/routers/app.d.ts.map +0 -1
- package/src/routers/app.js +0 -228
- package/src/routers/app.js.map +0 -1
- package/src/routers/base.d.ts +0 -9
- package/src/routers/base.d.ts.map +0 -1
- package/src/routers/base.js +0 -14
- package/src/routers/base.js.map +0 -1
- package/src/routers/index.d.ts.map +0 -1
- package/src/routers/index.js +0 -7
- package/src/routers/index.js.map +0 -1
- package/src/routers/router-config.d.ts +0 -18
- package/src/routers/router-config.d.ts.map +0 -1
- package/src/routers/router-config.js +0 -8
- package/src/routers/router-config.js.map +0 -1
- package/src/routing/index.d.ts +0 -2
- package/src/routing/index.d.ts.map +0 -1
- package/src/routing/index.js +0 -5
- package/src/routing/index.js.map +0 -1
- package/src/routing/route-builder.d.ts +0 -36
- package/src/routing/route-builder.d.ts.map +0 -1
- package/src/routing/route-builder.js +0 -86
- package/src/routing/route-builder.js.map +0 -1
- package/src/schemas/email-token.d.ts +0 -49
- package/src/schemas/email-token.d.ts.map +0 -1
- package/src/schemas/email-token.js +0 -55
- package/src/schemas/email-token.js.map +0 -1
- package/src/schemas/index.d.ts.map +0 -1
- package/src/schemas/index.js +0 -11
- package/src/schemas/index.js.map +0 -1
- package/src/schemas/mnemonic.d.ts +0 -27
- package/src/schemas/mnemonic.d.ts.map +0 -1
- package/src/schemas/mnemonic.js +0 -31
- package/src/schemas/mnemonic.js.map +0 -1
- package/src/schemas/role.d.ts +0 -42
- package/src/schemas/role.d.ts.map +0 -1
- package/src/schemas/role.js +0 -89
- package/src/schemas/role.js.map +0 -1
- package/src/schemas/schema.d.ts +0 -42
- package/src/schemas/schema.d.ts.map +0 -1
- package/src/schemas/schema.js +0 -70
- package/src/schemas/schema.js.map +0 -1
- package/src/schemas/used-direct-login-token.d.ts +0 -37
- package/src/schemas/used-direct-login-token.d.ts.map +0 -1
- package/src/schemas/used-direct-login-token.js +0 -24
- package/src/schemas/used-direct-login-token.js.map +0 -1
- package/src/schemas/user-role.d.ts +0 -39
- package/src/schemas/user-role.d.ts.map +0 -1
- package/src/schemas/user-role.js +0 -55
- package/src/schemas/user-role.js.map +0 -1
- package/src/schemas/user.d.ts +0 -24
- package/src/schemas/user.d.ts.map +0 -1
- package/src/schemas/user.js +0 -195
- package/src/schemas/user.js.map +0 -1
- package/src/services/backup-code.d.ts +0 -76
- package/src/services/backup-code.d.ts.map +0 -1
- package/src/services/backup-code.js +0 -185
- package/src/services/backup-code.js.map +0 -1
- package/src/services/base.d.ts +0 -11
- package/src/services/base.d.ts.map +0 -1
- package/src/services/base.js +0 -15
- package/src/services/base.js.map +0 -1
- package/src/services/checksum.d.ts +0 -69
- package/src/services/checksum.d.ts.map +0 -1
- package/src/services/checksum.js +0 -145
- package/src/services/checksum.js.map +0 -1
- package/src/services/crc.d.ts +0 -87
- package/src/services/crc.d.ts.map +0 -1
- package/src/services/crc.js +0 -198
- package/src/services/crc.js.map +0 -1
- package/src/services/database-initialization.d.ts +0 -111
- package/src/services/database-initialization.d.ts.map +0 -1
- package/src/services/database-initialization.js +0 -878
- package/src/services/database-initialization.js.map +0 -1
- package/src/services/db-init-cache.d.ts +0 -10
- package/src/services/db-init-cache.d.ts.map +0 -1
- package/src/services/db-init-cache.js +0 -3
- package/src/services/db-init-cache.js.map +0 -1
- package/src/services/direct-login-token.d.ts +0 -7
- package/src/services/direct-login-token.d.ts.map +0 -1
- package/src/services/direct-login-token.js +0 -41
- package/src/services/direct-login-token.js.map +0 -1
- package/src/services/dummy-email-service.d.ts +0 -11
- package/src/services/dummy-email-service.d.ts.map +0 -1
- package/src/services/dummy-email-service.js +0 -16
- package/src/services/dummy-email-service.js.map +0 -1
- package/src/services/fec-usage-example.d.ts +0 -38
- package/src/services/fec-usage-example.d.ts.map +0 -1
- package/src/services/fec-usage-example.js +0 -75
- package/src/services/fec-usage-example.js.map +0 -1
- package/src/services/fec.d.ts +0 -46
- package/src/services/fec.d.ts.map +0 -1
- package/src/services/fec.js +0 -214
- package/src/services/fec.js.map +0 -1
- package/src/services/index.d.ts.map +0 -1
- package/src/services/index.js +0 -23
- package/src/services/index.js.map +0 -1
- package/src/services/jwt.d.ts +0 -30
- package/src/services/jwt.d.ts.map +0 -1
- package/src/services/jwt.js +0 -90
- package/src/services/jwt.js.map +0 -1
- package/src/services/key-wrapping.d.ts +0 -61
- package/src/services/key-wrapping.d.ts.map +0 -1
- package/src/services/key-wrapping.js +0 -307
- package/src/services/key-wrapping.js.map +0 -1
- package/src/services/mnemonic.d.ts +0 -62
- package/src/services/mnemonic.d.ts.map +0 -1
- package/src/services/mnemonic.js +0 -114
- package/src/services/mnemonic.js.map +0 -1
- package/src/services/request-user.d.ts +0 -23
- package/src/services/request-user.d.ts.map +0 -1
- package/src/services/request-user.js +0 -68
- package/src/services/request-user.js.map +0 -1
- package/src/services/role.d.ts +0 -87
- package/src/services/role.d.ts.map +0 -1
- package/src/services/role.js +0 -279
- package/src/services/role.js.map +0 -1
- package/src/services/symmetric.d.ts +0 -42
- package/src/services/symmetric.d.ts.map +0 -1
- package/src/services/symmetric.js +0 -101
- package/src/services/symmetric.js.map +0 -1
- package/src/services/system-user.d.ts +0 -16
- package/src/services/system-user.d.ts.map +0 -1
- package/src/services/system-user.js +0 -46
- package/src/services/system-user.js.map +0 -1
- package/src/services/user.d.ts +0 -345
- package/src/services/user.d.ts.map +0 -1
- package/src/services/user.js +0 -1447
- package/src/services/user.js.map +0 -1
- package/src/services/xor.d.ts +0 -24
- package/src/services/xor.d.ts.map +0 -1
- package/src/services/xor.js +0 -37
- package/src/services/xor.js.map +0 -1
- package/src/testing.d.ts +0 -3
- package/src/testing.d.ts.map +0 -1
- package/src/testing.js +0 -7
- package/src/testing.js.map +0 -1
- package/src/transactions/index.d.ts.map +0 -1
- package/src/transactions/index.js +0 -5
- package/src/transactions/index.js.map +0 -1
- package/src/transactions/transaction-manager.d.ts +0 -12
- package/src/transactions/transaction-manager.d.ts.map +0 -1
- package/src/transactions/transaction-manager.js +0 -30
- package/src/transactions/transaction-manager.js.map +0 -1
- package/src/types/app-config.d.ts +0 -16
- package/src/types/app-config.d.ts.map +0 -1
- package/src/types/app-config.js +0 -3
- package/src/types/app-config.js.map +0 -1
- package/src/types/controller-config.d.ts +0 -14
- package/src/types/controller-config.d.ts.map +0 -1
- package/src/types/controller-config.js +0 -3
- package/src/types/controller-config.js.map +0 -1
- package/src/types/environment-variables.d.ts.map +0 -1
- package/src/types/environment-variables.js +0 -39
- package/src/types/environment-variables.js.map +0 -1
- package/src/types/index.d.ts.map +0 -1
- package/src/types/index.js +0 -6
- package/src/types/index.js.map +0 -1
- package/src/types/mongoose-helpers.d.ts.map +0 -1
- package/src/types/mongoose-helpers.js +0 -6
- package/src/types/mongoose-helpers.js.map +0 -1
- package/src/types.d.ts +0 -104
- package/src/types.d.ts.map +0 -1
- package/src/types.js +0 -14
- package/src/types.js.map +0 -1
- package/src/utils.d.ts +0 -211
- package/src/utils.d.ts.map +0 -1
- package/src/utils.js +0 -818
- package/src/utils.js.map +0 -1
- package/src/validation/index.d.ts.map +0 -1
- package/src/validation/index.js +0 -5
- package/src/validation/index.js.map +0 -1
- package/src/validation/validation-builder.d.ts +0 -32
- package/src/validation/validation-builder.d.ts.map +0 -1
- package/src/validation/validation-builder.js +0 -81
- package/src/validation/validation-builder.js.map +0 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Global type declarations for database initialization member caching.
|
|
3
|
+
* @module services/db-init-cache
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { SecureString } from '@digitaldefiance/ecies-lib';
|
|
7
|
+
import type {
|
|
8
|
+
Member as BackendMember,
|
|
9
|
+
PlatformID,
|
|
10
|
+
} from '@digitaldefiance/node-ecies-lib';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Global member cache for database initialization.
|
|
14
|
+
* Stores Member instances and their associated mnemonics to avoid recreating them during tests.
|
|
15
|
+
*/
|
|
16
|
+
declare global {
|
|
17
|
+
var __MEMBER_CACHE__:
|
|
18
|
+
| Map<
|
|
19
|
+
string,
|
|
20
|
+
{
|
|
21
|
+
member: BackendMember<PlatformID>;
|
|
22
|
+
mnemonic: SecureString;
|
|
23
|
+
}
|
|
24
|
+
>
|
|
25
|
+
| undefined;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service for managing direct login token usage and preventing token reuse.
|
|
3
|
+
* Tracks used tokens in the database to ensure one-time use security.
|
|
4
|
+
* @module services/direct-login-token
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ClientSession } from '@digitaldefiance/mongoose-types';
|
|
8
|
+
import {
|
|
9
|
+
DirectTokenUsedError,
|
|
10
|
+
FailedToUseDirectTokenError,
|
|
11
|
+
IUsedDirectLoginTokenBase,
|
|
12
|
+
} from '@digitaldefiance/suite-core-lib';
|
|
13
|
+
import { BaseModelName } from '../enumerations/base-model-name';
|
|
14
|
+
import { IApplication } from '../interfaces/application';
|
|
15
|
+
import { ModelRegistry } from '../model-registry';
|
|
16
|
+
import { withTransaction } from '../utils';
|
|
17
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Service for managing direct login token usage.
|
|
21
|
+
* Ensures tokens can only be used once by tracking them in the database.
|
|
22
|
+
*/
|
|
23
|
+
export abstract class DirectLoginTokenService {
|
|
24
|
+
/**
|
|
25
|
+
* Marks a direct login token as used in the database.
|
|
26
|
+
* Prevents token reuse by checking for existing usage and creating a new record.
|
|
27
|
+
* @template TID Platform-specific ID type
|
|
28
|
+
* @param app Application instance with database connection
|
|
29
|
+
* @param userId User ID associated with the token
|
|
30
|
+
* @param token Direct login token to mark as used
|
|
31
|
+
* @param session Optional MongoDB session for transaction support
|
|
32
|
+
* @returns Promise that resolves when token is successfully marked as used
|
|
33
|
+
* @throws {DirectTokenUsedError} If token has already been used
|
|
34
|
+
* @throws {FailedToUseDirectTokenError} If token creation fails
|
|
35
|
+
*/
|
|
36
|
+
public static async useToken<TID extends PlatformID = Buffer>(
|
|
37
|
+
app: IApplication<TID>,
|
|
38
|
+
userId: TID,
|
|
39
|
+
token: string,
|
|
40
|
+
session?: ClientSession,
|
|
41
|
+
): Promise<void> {
|
|
42
|
+
return withTransaction(
|
|
43
|
+
app.db.connection,
|
|
44
|
+
app.environment.mongo.useTransactions,
|
|
45
|
+
session,
|
|
46
|
+
async (sess) => {
|
|
47
|
+
const UsedDirectLoginTokenModel = ModelRegistry.instance.get<
|
|
48
|
+
IUsedDirectLoginTokenBase<TID>,
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
any
|
|
51
|
+
>(BaseModelName.UsedDirectLoginToken).model;
|
|
52
|
+
const tokenExists = await UsedDirectLoginTokenModel.exists({
|
|
53
|
+
userId,
|
|
54
|
+
token,
|
|
55
|
+
}).session(sess ?? null);
|
|
56
|
+
if (tokenExists) {
|
|
57
|
+
throw new DirectTokenUsedError();
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const newTokens = await UsedDirectLoginTokenModel.create(
|
|
61
|
+
[{ userId, token }],
|
|
62
|
+
{
|
|
63
|
+
session: sess,
|
|
64
|
+
},
|
|
65
|
+
);
|
|
66
|
+
if (newTokens.length !== 1) {
|
|
67
|
+
throw new FailedToUseDirectTokenError();
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
// re-throw FailedToUseDirectTokenError
|
|
71
|
+
if (err instanceof FailedToUseDirectTokenError) {
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
// throw FailedToUseDirectTokenError on duplicate key error or other errors
|
|
75
|
+
throw new FailedToUseDirectTokenError();
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
timeoutMs: app.environment.mongo.transactionTimeout,
|
|
80
|
+
},
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Dummy email service for testing.
|
|
3
|
+
* No-op implementation of IEmailService for development and testing.
|
|
4
|
+
* @module services/dummy-email-service
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
8
|
+
import { IApplication, IEmailService } from '../interfaces';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Dummy email service that does nothing.
|
|
12
|
+
* Primarily for testing and development environments.
|
|
13
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
14
|
+
* @template TApplication - Application type (defaults to IApplication<TID>)
|
|
15
|
+
*/
|
|
16
|
+
export class DummyEmailService<
|
|
17
|
+
TID extends PlatformID = Buffer,
|
|
18
|
+
TApplication extends IApplication<TID> = IApplication<TID>,
|
|
19
|
+
> implements IEmailService {
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new dummy email service.
|
|
22
|
+
* @param {TApplication} _application - Application instance (unused)
|
|
23
|
+
*/
|
|
24
|
+
constructor(_application: TApplication) {}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Sends an email (no-op implementation).
|
|
28
|
+
* @param {string} _to - Recipient email address
|
|
29
|
+
* @param {string} _subject - Email subject
|
|
30
|
+
* @param {string} _text - Plain text body
|
|
31
|
+
* @param {string} _html - HTML body
|
|
32
|
+
* @returns {Promise<void>} Resolves immediately
|
|
33
|
+
*/
|
|
34
|
+
public async sendEmail(
|
|
35
|
+
_to: string,
|
|
36
|
+
_subject: string,
|
|
37
|
+
_text: string,
|
|
38
|
+
_html: string,
|
|
39
|
+
): Promise<void> {
|
|
40
|
+
// Do nothing
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Example usage patterns for the Forward Error Correction (FEC) service.
|
|
3
|
+
* @module services/fec-usage-example
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { FecService } from './fec';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Example usage of the adapted FEC service for filesystem/S3 objects.
|
|
10
|
+
* Demonstrates creating parity data, recovering corrupted files, and verifying integrity.
|
|
11
|
+
*/
|
|
12
|
+
export class FecUsageExample {
|
|
13
|
+
private fecService = new FecService();
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Creates parity data for a file and returns it for separate storage.
|
|
17
|
+
*
|
|
18
|
+
* @param fileData - Original file data to protect
|
|
19
|
+
* @param parityCount - Number of parity blocks to create (default: 2)
|
|
20
|
+
* @returns Object containing original data, parity data, and original size
|
|
21
|
+
*/
|
|
22
|
+
async createFileWithParity(fileData: Buffer, parityCount: number = 2) {
|
|
23
|
+
// Create parity data
|
|
24
|
+
const parityData = await this.fecService.createParityData(
|
|
25
|
+
fileData,
|
|
26
|
+
parityCount,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
// In a real implementation, you would:
|
|
30
|
+
// 1. Store the original file (e.g., to S3 as "file.dat")
|
|
31
|
+
// 2. Store each parity data separately (e.g., "file.dat.parity.0", "file.dat.parity.1")
|
|
32
|
+
// 3. Store metadata about the original file size
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
originalData: fileData,
|
|
36
|
+
parityData,
|
|
37
|
+
originalSize: fileData.length,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Recovers a corrupted file using parity data.
|
|
43
|
+
*
|
|
44
|
+
* @param parityData - Array of parity blocks with their indices
|
|
45
|
+
* @param originalSize - Original file size in bytes
|
|
46
|
+
* @returns Recovered file data
|
|
47
|
+
* @throws Error if file recovery fails
|
|
48
|
+
*/
|
|
49
|
+
async recoverCorruptedFile(
|
|
50
|
+
parityData: Array<{ data: Buffer; index: number }>,
|
|
51
|
+
originalSize: number,
|
|
52
|
+
) {
|
|
53
|
+
// Attempt recovery (pass null for corrupted data)
|
|
54
|
+
const result = await this.fecService.recoverFileData(
|
|
55
|
+
null, // corrupted data
|
|
56
|
+
parityData,
|
|
57
|
+
originalSize,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if (result.recovered) {
|
|
61
|
+
console.log('File successfully recovered!');
|
|
62
|
+
return result.data;
|
|
63
|
+
} else {
|
|
64
|
+
throw new Error('File recovery failed');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Verifies file integrity using parity data.
|
|
70
|
+
*
|
|
71
|
+
* @param fileData - File data to verify
|
|
72
|
+
* @param parityData - Array of parity blocks with their indices
|
|
73
|
+
* @returns True if file integrity is valid, false otherwise
|
|
74
|
+
*/
|
|
75
|
+
async verifyFile(
|
|
76
|
+
fileData: Buffer,
|
|
77
|
+
parityData: Array<{ data: Buffer; index: number }>,
|
|
78
|
+
): Promise<boolean> {
|
|
79
|
+
return await this.fecService.verifyFileIntegrity(fileData, parityData);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Demonstrates a complete FEC workflow including creation, verification, corruption, and recovery.
|
|
84
|
+
*
|
|
85
|
+
* @returns Object containing original file, recovered file, parity data, and recovery status
|
|
86
|
+
*/
|
|
87
|
+
async demonstrateWorkflow() {
|
|
88
|
+
// Original file data
|
|
89
|
+
const originalFile = Buffer.from(
|
|
90
|
+
'This is important file data that needs protection!',
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
// Step 1: Create parity data
|
|
94
|
+
console.log('Creating parity data...');
|
|
95
|
+
const { parityData, originalSize } = await this.createFileWithParity(
|
|
96
|
+
originalFile,
|
|
97
|
+
2,
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
// Step 2: Verify integrity
|
|
101
|
+
console.log('Verifying file integrity...');
|
|
102
|
+
const isValid = await this.verifyFile(originalFile, parityData);
|
|
103
|
+
console.log('File integrity check:', isValid ? 'PASSED' : 'FAILED');
|
|
104
|
+
|
|
105
|
+
// Step 3: Simulate file corruption and recovery
|
|
106
|
+
console.log('Simulating file corruption and recovery...');
|
|
107
|
+
const recoveredFile = await this.recoverCorruptedFile(
|
|
108
|
+
parityData,
|
|
109
|
+
originalSize,
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
// Step 4: Verify recovery
|
|
113
|
+
const recoverySuccessful = originalFile.equals(recoveredFile);
|
|
114
|
+
console.log('Recovery successful:', recoverySuccessful ? 'YES' : 'NO');
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
originalFile,
|
|
118
|
+
recoveredFile,
|
|
119
|
+
parityData,
|
|
120
|
+
recoverySuccessful,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Forward Error Correction (FEC) service using Reed-Solomon erasure coding.
|
|
3
|
+
* Provides parity data creation, file recovery, and integrity verification for distributed storage.
|
|
4
|
+
* @module services/fec
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { FecError, FecErrorType } from '@digitaldefiance/suite-core-lib';
|
|
8
|
+
import { ReedSolomonErasure } from '@subspace/reed-solomon-erasure.wasm';
|
|
9
|
+
import { FEC } from '../constants';
|
|
10
|
+
import { IFECConsts } from '../interfaces';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* FecService provides Forward Error Correction (FEC) functionality for filesystem/S3 objects.
|
|
14
|
+
* This service is used to:
|
|
15
|
+
* 1. Create parity data for file recovery
|
|
16
|
+
* 2. Recover corrupted files using parity data
|
|
17
|
+
* 3. Ensure data integrity across distributed storage
|
|
18
|
+
*
|
|
19
|
+
* This implementation uses Reed-Solomon erasure coding to:
|
|
20
|
+
* 1. Split file data into shards
|
|
21
|
+
* 2. Create parity shards
|
|
22
|
+
* 3. Recover lost shards using parity
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Represents parity data for a specific shard index.
|
|
27
|
+
*/
|
|
28
|
+
export interface ParityData {
|
|
29
|
+
/** Parity data buffer */
|
|
30
|
+
data: Buffer;
|
|
31
|
+
/** Index of the parity shard */
|
|
32
|
+
index: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Result of a file recovery operation.
|
|
37
|
+
*/
|
|
38
|
+
export interface RecoveryResult {
|
|
39
|
+
/** Recovered file data */
|
|
40
|
+
data: Buffer;
|
|
41
|
+
/** Whether parity data was used for recovery */
|
|
42
|
+
recovered: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class FecService {
|
|
46
|
+
/**
|
|
47
|
+
* Encodes data using Reed-Solomon erasure coding.
|
|
48
|
+
* @param data Data buffer to encode
|
|
49
|
+
* @param shardSize Size of each shard in bytes
|
|
50
|
+
* @param dataShards Number of data shards
|
|
51
|
+
* @param parityShards Number of parity shards
|
|
52
|
+
* @param fecOnly If true, returns only parity shards; otherwise returns all shards
|
|
53
|
+
* @param fecConstants FEC constants (defaults to FEC)
|
|
54
|
+
* @returns Encoded buffer containing shards
|
|
55
|
+
* @throws {FecError} If parameters are invalid or encoding fails
|
|
56
|
+
*/
|
|
57
|
+
public async encode(
|
|
58
|
+
data: Buffer,
|
|
59
|
+
shardSize: number,
|
|
60
|
+
dataShards: number,
|
|
61
|
+
parityShards: number,
|
|
62
|
+
fecOnly: boolean,
|
|
63
|
+
fecConstants: IFECConsts = FEC,
|
|
64
|
+
): Promise<Buffer> {
|
|
65
|
+
// Validate parameters
|
|
66
|
+
if (!data || data.length === 0) {
|
|
67
|
+
throw new FecError(FecErrorType.DataRequired);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (data.length !== shardSize * dataShards) {
|
|
71
|
+
throw new FecError(FecErrorType.InvalidDataLength, undefined, {
|
|
72
|
+
LENGTH: data.length.toString(),
|
|
73
|
+
EXPECTED: (shardSize * dataShards).toString(),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (shardSize > fecConstants.MAX_SHARD_SIZE) {
|
|
78
|
+
throw new FecError(FecErrorType.ShardSizeExceedsMaximum, undefined, {
|
|
79
|
+
SIZE: shardSize.toString(),
|
|
80
|
+
MAXIMUM: fecConstants.MAX_SHARD_SIZE.toString(),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (dataShards <= 0 || parityShards <= 0) {
|
|
85
|
+
throw new FecError(FecErrorType.InvalidShardCounts);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
try {
|
|
89
|
+
const shards = new Uint8Array(shardSize * (dataShards + parityShards));
|
|
90
|
+
shards.set(new Uint8Array(data));
|
|
91
|
+
|
|
92
|
+
// Encoding
|
|
93
|
+
const reedSolomonErasure =
|
|
94
|
+
await ReedSolomonErasure.fromCurrentDirectory();
|
|
95
|
+
reedSolomonErasure.encode(shards, dataShards, parityShards);
|
|
96
|
+
|
|
97
|
+
return fecOnly
|
|
98
|
+
? Buffer.from(shards.subarray(shardSize * dataShards))
|
|
99
|
+
: Buffer.from(shards);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
throw new FecError(FecErrorType.FecEncodingFailed, undefined, {
|
|
102
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Decodes/reconstructs data using Reed-Solomon erasure coding.
|
|
109
|
+
* @param data Encoded data buffer containing all shards
|
|
110
|
+
* @param shardSize Size of each shard in bytes
|
|
111
|
+
* @param dataShards Number of data shards
|
|
112
|
+
* @param parityShards Number of parity shards
|
|
113
|
+
* @param shardsAvailable Boolean array indicating which shards are available
|
|
114
|
+
* @returns Reconstructed data buffer
|
|
115
|
+
* @throws {FecError} If parameters are invalid or decoding fails
|
|
116
|
+
*/
|
|
117
|
+
public async decode(
|
|
118
|
+
data: Buffer,
|
|
119
|
+
shardSize: number,
|
|
120
|
+
dataShards: number,
|
|
121
|
+
parityShards: number,
|
|
122
|
+
shardsAvailable: boolean[],
|
|
123
|
+
): Promise<Buffer> {
|
|
124
|
+
// Validate parameters
|
|
125
|
+
if (!data || data.length === 0) {
|
|
126
|
+
throw new FecError(FecErrorType.DataRequired);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (data.length !== shardSize * (dataShards + parityShards)) {
|
|
130
|
+
throw new FecError(FecErrorType.InvalidDataLength, undefined, {
|
|
131
|
+
LENGTH: data.length.toString(),
|
|
132
|
+
EXPECTED: (shardSize * (dataShards + parityShards)).toString(),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (
|
|
137
|
+
!shardsAvailable ||
|
|
138
|
+
shardsAvailable.length !== dataShards + parityShards
|
|
139
|
+
) {
|
|
140
|
+
throw new FecError(FecErrorType.InvalidShardsAvailableArray);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const availableCount = shardsAvailable.filter((x) => x).length;
|
|
144
|
+
if (availableCount < dataShards) {
|
|
145
|
+
throw new FecError(FecErrorType.NotEnoughShardsAvailable, undefined, {
|
|
146
|
+
AVAILABLE: availableCount.toString(),
|
|
147
|
+
REQUIRED: dataShards.toString(),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
try {
|
|
152
|
+
const uint8Data = new Uint8Array(data);
|
|
153
|
+
const reedSolomonErasure =
|
|
154
|
+
await ReedSolomonErasure.fromCurrentDirectory();
|
|
155
|
+
reedSolomonErasure.reconstruct(
|
|
156
|
+
uint8Data,
|
|
157
|
+
dataShards,
|
|
158
|
+
parityShards,
|
|
159
|
+
shardsAvailable,
|
|
160
|
+
);
|
|
161
|
+
return Buffer.from(uint8Data.subarray(0, shardSize * dataShards));
|
|
162
|
+
} catch (error) {
|
|
163
|
+
throw new FecError(FecErrorType.FecDecodingFailed, undefined, {
|
|
164
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Creates parity data for a file buffer.
|
|
171
|
+
* @param fileData File data to create parity for
|
|
172
|
+
* @param parityCount Number of parity shards to create
|
|
173
|
+
* @param fecConstants FEC constants (defaults to FEC)
|
|
174
|
+
* @returns Array of parity data objects
|
|
175
|
+
* @throws {FecError} If parameters are invalid or encoding fails
|
|
176
|
+
*/
|
|
177
|
+
public async createParityData(
|
|
178
|
+
fileData: Buffer,
|
|
179
|
+
parityCount: number,
|
|
180
|
+
fecConstants: IFECConsts = FEC,
|
|
181
|
+
): Promise<ParityData[]> {
|
|
182
|
+
if (!fileData || fileData.length === 0) {
|
|
183
|
+
throw new FecError(FecErrorType.DataRequired);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (parityCount <= 0) {
|
|
187
|
+
throw new FecError(FecErrorType.ParityDataCountMustBePositive);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const shardSize = Math.min(fileData.length, fecConstants.MAX_SHARD_SIZE);
|
|
191
|
+
const requiredShards = Math.ceil(fileData.length / shardSize);
|
|
192
|
+
|
|
193
|
+
try {
|
|
194
|
+
const resultParityData: Buffer[] = Array(parityCount)
|
|
195
|
+
.fill(null)
|
|
196
|
+
.map(() => Buffer.alloc(0));
|
|
197
|
+
|
|
198
|
+
// Process each chunk
|
|
199
|
+
for (let i = 0; i < requiredShards; i++) {
|
|
200
|
+
const start = i * shardSize;
|
|
201
|
+
const end = Math.min(start + shardSize, fileData.length);
|
|
202
|
+
const chunk = fileData.subarray(start, end);
|
|
203
|
+
|
|
204
|
+
// Pad chunk if necessary
|
|
205
|
+
const paddedChunk = Buffer.alloc(shardSize);
|
|
206
|
+
paddedChunk.set(chunk.subarray(0, shardSize));
|
|
207
|
+
|
|
208
|
+
const chunkParity = await this.encode(
|
|
209
|
+
paddedChunk,
|
|
210
|
+
shardSize,
|
|
211
|
+
1,
|
|
212
|
+
parityCount,
|
|
213
|
+
true,
|
|
214
|
+
fecConstants,
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
// Distribute parity data
|
|
218
|
+
for (let j = 0; j < parityCount; j++) {
|
|
219
|
+
const parityChunk = chunkParity.subarray(
|
|
220
|
+
j * shardSize,
|
|
221
|
+
(j + 1) * shardSize,
|
|
222
|
+
);
|
|
223
|
+
const combined = Buffer.alloc(
|
|
224
|
+
resultParityData[j].length + parityChunk.length,
|
|
225
|
+
);
|
|
226
|
+
combined.set(resultParityData[j], 0);
|
|
227
|
+
combined.set(parityChunk, resultParityData[j].length);
|
|
228
|
+
resultParityData[j] = combined;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return resultParityData.map((data, index) => ({
|
|
233
|
+
data,
|
|
234
|
+
index,
|
|
235
|
+
}));
|
|
236
|
+
} catch (error) {
|
|
237
|
+
throw new FecError(FecErrorType.FecEncodingFailed, undefined, {
|
|
238
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Recovers file data using parity data. Pass null for corrupted data.
|
|
245
|
+
* @param corruptedData Corrupted file data or null if completely lost
|
|
246
|
+
* @param parityData Array of parity data objects
|
|
247
|
+
* @param originalSize Original file size in bytes
|
|
248
|
+
* @param fecConstants FEC constants (defaults to FEC)
|
|
249
|
+
* @returns Recovery result with data and recovery status
|
|
250
|
+
* @throws {FecError} If parameters are invalid or recovery fails
|
|
251
|
+
*/
|
|
252
|
+
public async recoverFileData(
|
|
253
|
+
corruptedData: Buffer | null,
|
|
254
|
+
parityData: ParityData[],
|
|
255
|
+
originalSize: number,
|
|
256
|
+
fecConstants: IFECConsts = FEC,
|
|
257
|
+
): Promise<RecoveryResult> {
|
|
258
|
+
if (!parityData || parityData.length === 0) {
|
|
259
|
+
throw new FecError(FecErrorType.ParityDataRequired);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (originalSize <= 0) {
|
|
263
|
+
throw new FecError(FecErrorType.InvalidDataLength);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
try {
|
|
267
|
+
const shardSize = Math.min(originalSize, fecConstants.MAX_SHARD_SIZE);
|
|
268
|
+
const requiredShards = Math.ceil(originalSize / shardSize);
|
|
269
|
+
let recoveredData = Buffer.alloc(0);
|
|
270
|
+
let parityUsed = false;
|
|
271
|
+
|
|
272
|
+
// Recover each shard
|
|
273
|
+
for (let i = 0; i < requiredShards; i++) {
|
|
274
|
+
const start = i * shardSize;
|
|
275
|
+
const end = Math.min(start + shardSize, originalSize);
|
|
276
|
+
const chunkSize = end - start;
|
|
277
|
+
|
|
278
|
+
// Use corrupted data if available, otherwise create placeholder
|
|
279
|
+
const corruptedShard = corruptedData
|
|
280
|
+
? corruptedData.subarray(start, Math.min(end, corruptedData.length))
|
|
281
|
+
: Buffer.alloc(0);
|
|
282
|
+
|
|
283
|
+
const parityChunks = parityData.map((parity) =>
|
|
284
|
+
parity.data.subarray(i * shardSize, (i + 1) * shardSize),
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
const hasDataShard = corruptedShard.length > 0;
|
|
288
|
+
const paddedCorruptedShard = Buffer.alloc(shardSize);
|
|
289
|
+
if (hasDataShard) {
|
|
290
|
+
paddedCorruptedShard.set(
|
|
291
|
+
corruptedShard.subarray(
|
|
292
|
+
0,
|
|
293
|
+
Math.min(shardSize, corruptedShard.length),
|
|
294
|
+
),
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
let shardIsHealthy = false;
|
|
299
|
+
if (hasDataShard) {
|
|
300
|
+
const regeneratedParity = await this.encode(
|
|
301
|
+
paddedCorruptedShard,
|
|
302
|
+
shardSize,
|
|
303
|
+
1,
|
|
304
|
+
parityData.length,
|
|
305
|
+
true,
|
|
306
|
+
fecConstants,
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
shardIsHealthy = parityChunks.every((parityChunk, index) =>
|
|
310
|
+
parityChunk.equals(
|
|
311
|
+
Uint8Array.from(
|
|
312
|
+
regeneratedParity.subarray(
|
|
313
|
+
index * shardSize,
|
|
314
|
+
(index + 1) * shardSize,
|
|
315
|
+
),
|
|
316
|
+
),
|
|
317
|
+
),
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
if (shardIsHealthy) {
|
|
322
|
+
const actualShard = Buffer.from(
|
|
323
|
+
paddedCorruptedShard.subarray(0, chunkSize),
|
|
324
|
+
);
|
|
325
|
+
const combinedRecovered = Buffer.alloc(
|
|
326
|
+
recoveredData.length + actualShard.length,
|
|
327
|
+
);
|
|
328
|
+
combinedRecovered.set(recoveredData, 0);
|
|
329
|
+
combinedRecovered.set(actualShard, recoveredData.length);
|
|
330
|
+
recoveredData = combinedRecovered;
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Mark data shard as missing and attempt recovery using parity
|
|
335
|
+
parityUsed = true;
|
|
336
|
+
const shardData = Buffer.alloc((1 + parityData.length) * shardSize);
|
|
337
|
+
shardData.set(paddedCorruptedShard, 0);
|
|
338
|
+
parityChunks.forEach((chunk, index) => {
|
|
339
|
+
shardData.set(chunk, (index + 1) * shardSize);
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
const availableShards = [false, ...Array(parityData.length).fill(true)];
|
|
343
|
+
|
|
344
|
+
const recoveredShard = await this.decode(
|
|
345
|
+
shardData,
|
|
346
|
+
shardSize,
|
|
347
|
+
1,
|
|
348
|
+
parityData.length,
|
|
349
|
+
availableShards,
|
|
350
|
+
);
|
|
351
|
+
|
|
352
|
+
const actualShard = recoveredShard.subarray(0, chunkSize);
|
|
353
|
+
const combinedRecovered = Buffer.alloc(
|
|
354
|
+
recoveredData.length + actualShard.length,
|
|
355
|
+
);
|
|
356
|
+
combinedRecovered.set(recoveredData, 0);
|
|
357
|
+
combinedRecovered.set(actualShard, recoveredData.length);
|
|
358
|
+
recoveredData = combinedRecovered;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return {
|
|
362
|
+
data: recoveredData,
|
|
363
|
+
recovered: parityUsed || corruptedData === null,
|
|
364
|
+
};
|
|
365
|
+
} catch (error) {
|
|
366
|
+
throw new FecError(FecErrorType.FecDecodingFailed, undefined, {
|
|
367
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Verifies file integrity using parity data.
|
|
374
|
+
* @param fileData File data to verify
|
|
375
|
+
* @param parityData Array of parity data objects
|
|
376
|
+
* @returns True if file integrity is verified, false otherwise
|
|
377
|
+
*/
|
|
378
|
+
public async verifyFileIntegrity(
|
|
379
|
+
fileData: Buffer,
|
|
380
|
+
parityData: ParityData[],
|
|
381
|
+
): Promise<boolean> {
|
|
382
|
+
try {
|
|
383
|
+
const regeneratedParity = await this.createParityData(
|
|
384
|
+
fileData,
|
|
385
|
+
parityData.length,
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
return parityData.every(
|
|
389
|
+
(original, index) =>
|
|
390
|
+
Buffer.compare(
|
|
391
|
+
new Uint8Array(original.data),
|
|
392
|
+
new Uint8Array(regeneratedParity[index].data),
|
|
393
|
+
) === 0,
|
|
394
|
+
);
|
|
395
|
+
} catch {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from './backup-code';
|
|
2
2
|
export * from './base';
|
|
3
3
|
export * from './checksum';
|
|
4
|
-
export * from './crc';
|
|
5
4
|
export * from './database-initialization';
|
|
6
5
|
export * from './db-init-cache';
|
|
7
6
|
export * from './direct-login-token';
|
|
@@ -17,4 +16,3 @@ export * from './symmetric';
|
|
|
17
16
|
export * from './system-user';
|
|
18
17
|
export * from './user';
|
|
19
18
|
export * from './xor';
|
|
20
|
-
//# sourceMappingURL=index.d.ts.map
|