@digitaldefiance/node-express-suite-mongo 4.23.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 +152 -0
- package/package.json +51 -0
- package/src/__tests__/fixtures/index.d.ts +2 -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 +4 -0
- package/src/__tests__/helpers/application.mock.d.ts.map +1 -0
- package/src/__tests__/helpers/application.mock.js +35 -0
- package/src/__tests__/helpers/application.mock.js.map +1 -0
- package/src/__tests__/helpers/index.d.ts +5 -0
- package/src/__tests__/helpers/index.d.ts.map +1 -0
- package/src/__tests__/helpers/index.js +8 -0
- package/src/__tests__/helpers/index.js.map +1 -0
- package/src/__tests__/helpers/mongoose-memory.d.ts +14 -0
- package/src/__tests__/helpers/mongoose-memory.d.ts.map +1 -0
- package/src/__tests__/helpers/mongoose-memory.js +49 -0
- package/src/__tests__/helpers/mongoose-memory.js.map +1 -0
- package/src/__tests__/helpers/setup-test-env.d.ts +13 -0
- package/src/__tests__/helpers/setup-test-env.d.ts.map +1 -0
- package/src/__tests__/helpers/setup-test-env.js +131 -0
- package/src/__tests__/helpers/setup-test-env.js.map +1 -0
- package/src/__tests__/index.d.ts +3 -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/builders/application-builder.d.ts +38 -0
- package/src/builders/application-builder.d.ts.map +1 -0
- package/src/builders/application-builder.js +82 -0
- package/src/builders/application-builder.js.map +1 -0
- package/src/builders/index.d.ts +2 -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/controllers/index.d.ts +3 -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/mongo-base.d.ts +55 -0
- package/src/controllers/mongo-base.d.ts.map +1 -0
- package/src/controllers/mongo-base.js +108 -0
- package/src/controllers/mongo-base.js.map +1 -0
- package/src/controllers/user.d.ts +61 -0
- package/src/controllers/user.d.ts.map +1 -0
- package/src/controllers/user.js +944 -0
- package/src/controllers/user.js.map +1 -0
- package/src/documents/base.d.ts +15 -0
- 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.d.ts +15 -0
- 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.d.ts +8 -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.d.ts +16 -0
- 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.d.ts +15 -0
- 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.d.ts +16 -0
- 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.d.ts +16 -0
- 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.d.ts +16 -0
- 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.d.ts +3 -0
- package/src/enumerations/index.d.ts.map +1 -0
- package/src/enumerations/index.js +6 -0
- package/src/enumerations/index.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/errors/index.d.ts +5 -0
- package/src/errors/index.d.ts.map +1 -0
- package/src/errors/index.js +8 -0
- package/src/errors/index.js.map +1 -0
- package/src/errors/invalid-backup-code-version.d.ts +5 -0
- package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
- package/src/errors/invalid-backup-code-version.js +14 -0
- package/src/errors/invalid-backup-code-version.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/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/index.d.ts +19 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +31 -0
- package/src/index.js.map +1 -0
- package/src/interfaces/api-mongo-validation-error-response.d.ts +16 -0
- 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/database-init-result-tx.d.ts +27 -0
- package/src/interfaces/database-init-result-tx.d.ts.map +1 -0
- package/src/interfaces/database-init-result-tx.js +3 -0
- package/src/interfaces/database-init-result-tx.js.map +1 -0
- package/src/interfaces/db-init-result.d.ts +16 -0
- 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/discriminator-collections.d.ts +17 -0
- 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/environment-mongo.d.ts +88 -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/index.d.ts +13 -0
- package/src/interfaces/index.d.ts.map +1 -0
- package/src/interfaces/index.js +16 -0
- package/src/interfaces/index.js.map +1 -0
- package/src/interfaces/models/email-token.d.ts +12 -0
- 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.d.ts +8 -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.d.ts +13 -0
- 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.d.ts +12 -0
- 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.d.ts +19 -0
- 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.d.ts +19 -0
- 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.d.ts +19 -0
- 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.d.ts +21 -0
- 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-application.d.ts +47 -0
- package/src/interfaces/mongo-application.d.ts.map +1 -0
- package/src/interfaces/mongo-application.js +10 -0
- package/src/interfaces/mongo-application.js.map +1 -0
- package/src/interfaces/mongo-errors.d.ts +13 -0
- 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/mongoose-document-store.d.ts +42 -0
- package/src/interfaces/mongoose-document-store.d.ts.map +1 -0
- package/src/interfaces/mongoose-document-store.js +10 -0
- package/src/interfaces/mongoose-document-store.js.map +1 -0
- package/src/interfaces/schema.d.ts +37 -0
- 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/test-environment.d.ts +22 -0
- 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/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.d.ts +24 -0
- 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.d.ts +7 -0
- package/src/models/index.d.ts.map +1 -0
- package/src/models/index.js +10 -0
- package/src/models/index.js.map +1 -0
- package/src/models/mnemonic.d.ts +24 -0
- 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.d.ts +24 -0
- 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.d.ts +24 -0
- 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.d.ts +23 -0
- 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.d.ts +24 -0
- 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/mongo-application-concrete.d.ts +30 -0
- package/src/mongo-application-concrete.d.ts.map +1 -0
- package/src/mongo-application-concrete.js +46 -0
- package/src/mongo-application-concrete.js.map +1 -0
- package/src/plugins/index.d.ts +2 -0
- package/src/plugins/index.d.ts.map +1 -0
- package/src/plugins/index.js +5 -0
- package/src/plugins/index.js.map +1 -0
- package/src/plugins/mongo-database-plugin.d.ts +116 -0
- package/src/plugins/mongo-database-plugin.d.ts.map +1 -0
- package/src/plugins/mongo-database-plugin.js +230 -0
- package/src/plugins/mongo-database-plugin.js.map +1 -0
- package/src/routers/api.d.ts +29 -0
- package/src/routers/api.d.ts.map +1 -0
- package/src/routers/api.js +84 -0
- package/src/routers/api.js.map +1 -0
- package/src/routers/index.d.ts +2 -0
- package/src/routers/index.d.ts.map +1 -0
- package/src/routers/index.js +5 -0
- package/src/routers/index.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.d.ts +8 -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 +118 -0
- package/src/services/backup-code.d.ts.map +1 -0
- package/src/services/backup-code.js +320 -0
- package/src/services/backup-code.js.map +1 -0
- package/src/services/database-initialization.d.ts +137 -0
- package/src/services/database-initialization.d.ts.map +1 -0
- package/src/services/database-initialization.js +911 -0
- package/src/services/database-initialization.js.map +1 -0
- package/src/services/db-init-cache.d.ts +18 -0
- 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/index.d.ts +17 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.js +20 -0
- package/src/services/index.js.map +1 -0
- package/src/services/jwt.d.ts +20 -0
- package/src/services/jwt.d.ts.map +1 -0
- package/src/services/jwt.js +79 -0
- package/src/services/jwt.js.map +1 -0
- package/src/services/mnemonic.d.ts +30 -0
- package/src/services/mnemonic.d.ts.map +1 -0
- package/src/services/mnemonic.js +80 -0
- package/src/services/mnemonic.js.map +1 -0
- package/src/services/mongo-authentication-provider.d.ts +27 -0
- package/src/services/mongo-authentication-provider.d.ts.map +1 -0
- package/src/services/mongo-authentication-provider.js +97 -0
- package/src/services/mongo-authentication-provider.js.map +1 -0
- package/src/services/mongo-backup-code-store.d.ts +40 -0
- package/src/services/mongo-backup-code-store.d.ts.map +1 -0
- package/src/services/mongo-backup-code-store.js +104 -0
- package/src/services/mongo-backup-code-store.js.map +1 -0
- package/src/services/mongo-base.d.ts +24 -0
- package/src/services/mongo-base.d.ts.map +1 -0
- package/src/services/mongo-base.js +28 -0
- package/src/services/mongo-base.js.map +1 -0
- package/src/services/mongoose-collection.d.ts +52 -0
- package/src/services/mongoose-collection.d.ts.map +1 -0
- package/src/services/mongoose-collection.js +326 -0
- package/src/services/mongoose-collection.js.map +1 -0
- package/src/services/mongoose-database.d.ts +64 -0
- package/src/services/mongoose-database.d.ts.map +1 -0
- package/src/services/mongoose-database.js +121 -0
- package/src/services/mongoose-database.js.map +1 -0
- package/src/services/mongoose-document-store.d.ts +108 -0
- package/src/services/mongoose-document-store.d.ts.map +1 -0
- package/src/services/mongoose-document-store.js +265 -0
- package/src/services/mongoose-document-store.js.map +1 -0
- package/src/services/mongoose-session-adapter.d.ts +39 -0
- package/src/services/mongoose-session-adapter.d.ts.map +1 -0
- package/src/services/mongoose-session-adapter.js +63 -0
- package/src/services/mongoose-session-adapter.js.map +1 -0
- package/src/services/request-user.d.ts +22 -0
- package/src/services/request-user.d.ts.map +1 -0
- package/src/services/request-user.js +66 -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 +288 -0
- package/src/services/role.js.map +1 -0
- package/src/services/user.d.ts +362 -0
- package/src/services/user.d.ts.map +1 -0
- package/src/services/user.js +1504 -0
- package/src/services/user.js.map +1 -0
- package/src/testing.d.ts +9 -0
- 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.d.ts +2 -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/index.d.ts +26 -0
- package/src/types/index.d.ts.map +1 -0
- package/src/types/index.js +9 -0
- package/src/types/index.js.map +1 -0
- package/src/types/mongoose-helpers.d.ts +16 -0
- 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/utils/default-mongo-uri-validator.d.ts +15 -0
- package/src/utils/default-mongo-uri-validator.d.ts.map +1 -0
- package/src/utils/default-mongo-uri-validator.js +46 -0
- package/src/utils/default-mongo-uri-validator.js.map +1 -0
- package/src/utils/index.d.ts +5 -0
- package/src/utils/index.d.ts.map +1 -0
- package/src/utils/index.js +8 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/mongo-error-response.d.ts +17 -0
- package/src/utils/mongo-error-response.d.ts.map +1 -0
- package/src/utils/mongo-error-response.js +21 -0
- package/src/utils/mongo-error-response.js.map +1 -0
- package/src/utils/mongo-transaction.d.ts +39 -0
- package/src/utils/mongo-transaction.d.ts.map +1 -0
- package/src/utils/mongo-transaction.js +131 -0
- package/src/utils/mongo-transaction.js.map +1 -0
- package/src/utils/object-id.d.ts +11 -0
- package/src/utils/object-id.d.ts.map +1 -0
- package/src/utils/object-id.js +17 -0
- package/src/utils/object-id.js.map +1 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Backup code service for secure account recovery.
|
|
4
|
+
* Implements v1.0.0 backup code scheme with Argon2id KDF and HKDF-SHA256 checksums.
|
|
5
|
+
*
|
|
6
|
+
* Storage-agnostic: accepts an optional {@link IBackupCodeStore} for persistence.
|
|
7
|
+
* When no store is provided, falls back to direct UserDocument manipulation
|
|
8
|
+
* (backward-compatible Mongoose path).
|
|
9
|
+
*
|
|
10
|
+
* @module services/backup-code
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.BackupCodeService = void 0;
|
|
14
|
+
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
15
|
+
const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
|
|
16
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
17
|
+
const crypto_1 = require("crypto");
|
|
18
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
19
|
+
const invalid_backup_code_version_1 = require("../errors/invalid-backup-code-version");
|
|
20
|
+
/**
|
|
21
|
+
* Service for backup code generation, validation, and key recovery.
|
|
22
|
+
* Implements secure backup code scheme with constant-time validation and key wrapping.
|
|
23
|
+
*
|
|
24
|
+
* Storage is abstracted via {@link IBackupCodeStore}. When a store is provided,
|
|
25
|
+
* all persistence goes through the store interface. When omitted, the service
|
|
26
|
+
* falls back to direct UserDocument manipulation for backward compatibility
|
|
27
|
+
* with existing Mongoose-based consumers.
|
|
28
|
+
*
|
|
29
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
30
|
+
* @template TDate - Date type (defaults to Date)
|
|
31
|
+
* @template TTokenRole - Token role interface type
|
|
32
|
+
* @template TApplication - Application interface type
|
|
33
|
+
* @extends {BaseService<TID>}
|
|
34
|
+
*/
|
|
35
|
+
class BackupCodeService extends node_express_suite_1.BaseService {
|
|
36
|
+
eciesService;
|
|
37
|
+
systemUser;
|
|
38
|
+
keyWrappingService;
|
|
39
|
+
roleService;
|
|
40
|
+
store;
|
|
41
|
+
/**
|
|
42
|
+
* Construct a BackupCodeService.
|
|
43
|
+
* @param application - The application instance
|
|
44
|
+
* @param eciesService - ECIES cryptographic service
|
|
45
|
+
* @param keyWrappingService - Key wrapping service for password-based key protection
|
|
46
|
+
* @param roleService - Role service for member type resolution
|
|
47
|
+
* @param store - Optional storage adapter. When omitted, falls back to direct
|
|
48
|
+
* UserDocument manipulation (Mongoose). Provide an IBackupCodeStore implementation
|
|
49
|
+
* for non-Mongoose backends (e.g. BrightDB).
|
|
50
|
+
*/
|
|
51
|
+
constructor(application, eciesService, keyWrappingService, roleService, store) {
|
|
52
|
+
super(application);
|
|
53
|
+
this.eciesService = eciesService;
|
|
54
|
+
this.keyWrappingService = keyWrappingService;
|
|
55
|
+
this.roleService = roleService;
|
|
56
|
+
this.store = store;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the lazily-initialized system user for key wrapping/unwrapping.
|
|
60
|
+
*/
|
|
61
|
+
getSystemUser() {
|
|
62
|
+
if (!this.systemUser) {
|
|
63
|
+
this.systemUser = node_express_suite_1.SystemUserService.getSystemUser(this.application.environment, this.application.constants);
|
|
64
|
+
}
|
|
65
|
+
return this.systemUser;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Forcibly set the system user (for database initialization)
|
|
69
|
+
* @param user
|
|
70
|
+
*/
|
|
71
|
+
setSystemUser(user) {
|
|
72
|
+
this.systemUser = user;
|
|
73
|
+
}
|
|
74
|
+
// ── Pure crypto operations (no storage dependency) ─────────────────────
|
|
75
|
+
/**
|
|
76
|
+
* v1: Consume (validate and remove) a backup code via constant-time checksum match.
|
|
77
|
+
*/
|
|
78
|
+
useBackupCodeV1(encryptedBackupCodes, backupCode) {
|
|
79
|
+
const normalizedCode = node_express_suite_1.BackupCode.normalizeCode(backupCode);
|
|
80
|
+
if (!node_express_suite_1.LocalhostConstants.BACKUP_CODES.NormalizedHexRegex.test(normalizedCode)) {
|
|
81
|
+
throw new suite_core_lib_1.InvalidBackupCodeError();
|
|
82
|
+
}
|
|
83
|
+
const codeBytes = Buffer.from(normalizedCode, 'utf8');
|
|
84
|
+
try {
|
|
85
|
+
for (const code of encryptedBackupCodes) {
|
|
86
|
+
if (code.version !== node_express_suite_1.BackupCode.BackupCodeVersion)
|
|
87
|
+
continue;
|
|
88
|
+
const checksumSalt = Buffer.from(code.checksumSalt, 'hex');
|
|
89
|
+
const expected = node_express_suite_1.BackupCode.hkdfSha256(codeBytes, checksumSalt, Buffer.from('backup-checksum'), 32);
|
|
90
|
+
if (code.checksum.length === expected.length * 2 &&
|
|
91
|
+
(0, crypto_1.timingSafeEqual)(Buffer.from(code.checksum, 'hex'), expected)) {
|
|
92
|
+
const checksumHex = expected.toString('hex');
|
|
93
|
+
return {
|
|
94
|
+
newCodesArray: encryptedBackupCodes.filter((c) => c.checksum !== checksumHex),
|
|
95
|
+
code,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
throw new suite_core_lib_1.InvalidBackupCodeError();
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
codeBytes.fill(0);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Consume a backup code by first detecting the version and then dispatching to the appropriate handler.
|
|
107
|
+
*/
|
|
108
|
+
useBackupCode(encryptedBackupCodes, backupCode) {
|
|
109
|
+
const version = node_express_suite_1.BackupCode.detectBackupCodeVersion(encryptedBackupCodes, backupCode);
|
|
110
|
+
switch (version) {
|
|
111
|
+
case node_express_suite_1.BackupCode.BackupCodeVersion:
|
|
112
|
+
return this.useBackupCodeV1(encryptedBackupCodes.filter((c) => c.version === node_express_suite_1.BackupCode.BackupCodeVersion), backupCode);
|
|
113
|
+
default:
|
|
114
|
+
throw new invalid_backup_code_version_1.InvalidBackupCodeVersionError(version);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// ── Storage-agnostic recovery ──────────────────────────────────────────
|
|
118
|
+
/**
|
|
119
|
+
* Recover a user's private key using a backup code.
|
|
120
|
+
* Storage-agnostic: uses IBackupCodeStore when available, otherwise
|
|
121
|
+
* falls back to the legacy UserDocument path.
|
|
122
|
+
*
|
|
123
|
+
* @param userOrId - Either a UserDocument (legacy) or a user ID (store-based)
|
|
124
|
+
* @param backupCode - The plaintext backup code
|
|
125
|
+
* @param newPassword - Optional new password to re-wrap the private key
|
|
126
|
+
* @param session - Optional database session for transactional consistency
|
|
127
|
+
*/
|
|
128
|
+
async recoverKeyWithBackupCodeV1(userOrId, backupCode, newPassword, session) {
|
|
129
|
+
// Store-based path
|
|
130
|
+
if (this.store && !userOrId.save) {
|
|
131
|
+
return this._recoverViaStore(userOrId, backupCode, newPassword);
|
|
132
|
+
}
|
|
133
|
+
// Legacy Mongoose path
|
|
134
|
+
return this._recoverViaUserDoc(userOrId, backupCode, newPassword, session);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Recover a user's private key using a backup code (version-dispatched).
|
|
138
|
+
* Accepts either a UserDocument (legacy) or a user ID (store-based).
|
|
139
|
+
*/
|
|
140
|
+
async recoverKeyWithBackupCode(userOrId, backupCode, newPassword, session) {
|
|
141
|
+
// Determine backup codes source
|
|
142
|
+
let backupCodes;
|
|
143
|
+
if (this.store && !userOrId.save) {
|
|
144
|
+
const record = await this.store.getUserRecord(userOrId);
|
|
145
|
+
if (!record)
|
|
146
|
+
throw new suite_core_lib_1.InvalidBackupCodeError();
|
|
147
|
+
backupCodes = record.backupCodes;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
backupCodes = userOrId.backupCodes;
|
|
151
|
+
}
|
|
152
|
+
const version = node_express_suite_1.BackupCode.detectBackupCodeVersion(backupCodes, backupCode);
|
|
153
|
+
switch (version) {
|
|
154
|
+
case node_express_suite_1.BackupCode.BackupCodeVersion:
|
|
155
|
+
return this.recoverKeyWithBackupCodeV1(userOrId, backupCode, newPassword, session);
|
|
156
|
+
default:
|
|
157
|
+
throw new invalid_backup_code_version_1.InvalidBackupCodeVersionError(version);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// ── Rewrap (key rotation) ─────────────────────────────────────────────
|
|
161
|
+
/**
|
|
162
|
+
* Rewrap system-wrapped AEAD blobs from old system key to new one.
|
|
163
|
+
*
|
|
164
|
+
* When a store is provided, uses the store's fetchBatch/updateUserRecord.
|
|
165
|
+
* Otherwise falls back to the legacy callback-based approach.
|
|
166
|
+
*/
|
|
167
|
+
async rewrapAllUsersBackupCodes(fetchBatchOrOldSystem, saveUserOrNewSystem, oldSystemOrOptions, newSystemOrUndefined, options) {
|
|
168
|
+
// Detect which overload is being used
|
|
169
|
+
if (this.store && typeof fetchBatchOrOldSystem !== 'function') {
|
|
170
|
+
// Store-based: rewrapAllUsersBackupCodes(oldSystem, newSystem, options?)
|
|
171
|
+
return this._rewrapViaStore(fetchBatchOrOldSystem, saveUserOrNewSystem, oldSystemOrOptions);
|
|
172
|
+
}
|
|
173
|
+
// Legacy callback-based: rewrapAllUsersBackupCodes(fetchBatch, saveUser, oldSystem, newSystem, options?)
|
|
174
|
+
return this._rewrapViaCallbacks(fetchBatchOrOldSystem, saveUserOrNewSystem, oldSystemOrOptions, newSystemOrUndefined, options);
|
|
175
|
+
}
|
|
176
|
+
// ── Private: store-based recovery ─────────────────────────────────────
|
|
177
|
+
async _recoverViaStore(userId, backupCode, newPassword) {
|
|
178
|
+
const store = this.store;
|
|
179
|
+
const record = await store.getUserRecord(userId);
|
|
180
|
+
if (!record)
|
|
181
|
+
throw new suite_core_lib_1.InvalidBackupCodeError();
|
|
182
|
+
const normalizedCode = node_express_suite_1.BackupCode.normalizeCode(backupCode);
|
|
183
|
+
const { code, newCodesArray } = this.useBackupCodeV1(record.backupCodes, normalizedCode);
|
|
184
|
+
let decryptionKey;
|
|
185
|
+
try {
|
|
186
|
+
const adminMember = this.getSystemUser();
|
|
187
|
+
decryptionKey = await node_express_suite_1.BackupCode.getBackupKeyV1(code.checksumSalt, normalizedCode, this.application.constants);
|
|
188
|
+
const privateKeyUnwrapped = await adminMember.decryptData(Buffer.from(code.encrypted, 'hex'));
|
|
189
|
+
const decryptedPrivateKey = new ecies_lib_1.SecureBuffer(node_express_suite_1.SymmetricService.decryptBuffer(privateKeyUnwrapped, decryptionKey));
|
|
190
|
+
const memberType = await store.getMemberType(userId);
|
|
191
|
+
const user = new node_ecies_lib_1.Member(this.eciesService, memberType, record.username, new ecies_lib_1.EmailString(record.email), Buffer.from(record.publicKey, 'hex'), decryptedPrivateKey, undefined, record._id, new Date(record.createdAt), new Date(record.updatedAt));
|
|
192
|
+
const updates = {
|
|
193
|
+
backupCodes: newCodesArray,
|
|
194
|
+
};
|
|
195
|
+
if (newPassword) {
|
|
196
|
+
updates.passwordWrappedPrivateKey = this.keyWrappingService.wrapSecret(decryptedPrivateKey, newPassword, this.application.constants);
|
|
197
|
+
}
|
|
198
|
+
await store.updateUserRecord(userId, updates);
|
|
199
|
+
// Update the record in-place for the caller
|
|
200
|
+
record.backupCodes = newCodesArray;
|
|
201
|
+
if (updates.passwordWrappedPrivateKey) {
|
|
202
|
+
record.passwordWrappedPrivateKey = updates.passwordWrappedPrivateKey;
|
|
203
|
+
}
|
|
204
|
+
return { userRecord: record, user, codeCount: newCodesArray.length };
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
if (decryptionKey)
|
|
208
|
+
decryptionKey.fill(0);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ── Private: legacy Mongoose recovery ─────────────────────────────────
|
|
212
|
+
async _recoverViaUserDoc(userDoc, backupCode, newPassword, session) {
|
|
213
|
+
const normalizedCode = node_express_suite_1.BackupCode.normalizeCode(backupCode);
|
|
214
|
+
return await this.withTransaction(async (_sess) => {
|
|
215
|
+
const sess = _sess;
|
|
216
|
+
const { code, newCodesArray } = this.useBackupCodeV1(userDoc.backupCodes, normalizedCode);
|
|
217
|
+
userDoc.backupCodes = newCodesArray;
|
|
218
|
+
let decryptionKey;
|
|
219
|
+
try {
|
|
220
|
+
const adminMember = this.getSystemUser();
|
|
221
|
+
decryptionKey = await node_express_suite_1.BackupCode.getBackupKeyV1(code.checksumSalt, normalizedCode, this.application.constants);
|
|
222
|
+
const privateKeyUnwrapped = await adminMember.decryptData(Buffer.from(code.encrypted, 'hex'));
|
|
223
|
+
const decryptedPrivateKey = new ecies_lib_1.SecureBuffer(node_express_suite_1.SymmetricService.decryptBuffer(privateKeyUnwrapped, decryptionKey));
|
|
224
|
+
const memberType = await this.roleService.getMemberType(userDoc, session);
|
|
225
|
+
const user = new node_ecies_lib_1.Member(this.eciesService, memberType, userDoc.username, new ecies_lib_1.EmailString(userDoc.email), Buffer.from(userDoc.publicKey, 'hex'), decryptedPrivateKey, undefined, userDoc._id, new Date(userDoc.createdAt), new Date(userDoc.updatedAt));
|
|
226
|
+
if (!newPassword) {
|
|
227
|
+
await userDoc.save({ session: sess });
|
|
228
|
+
return {
|
|
229
|
+
userDoc,
|
|
230
|
+
user,
|
|
231
|
+
codeCount: newCodesArray.length,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const wrapped = this.keyWrappingService.wrapSecret(decryptedPrivateKey, newPassword, this.application.constants);
|
|
235
|
+
userDoc.passwordWrappedPrivateKey = wrapped;
|
|
236
|
+
await userDoc.save({ session: sess });
|
|
237
|
+
return { userDoc, user, codeCount: newCodesArray.length };
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
if (decryptionKey)
|
|
241
|
+
decryptionKey.fill(0);
|
|
242
|
+
}
|
|
243
|
+
}, session, {
|
|
244
|
+
timeoutMs: this.application.environment.mongo.transactionTimeout * 5,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
// ── Private: store-based rewrap ───────────────────────────────────────
|
|
248
|
+
async _rewrapViaStore(oldSystem, newSystem, options) {
|
|
249
|
+
const store = this.store;
|
|
250
|
+
const batchSize = options?.batchSize ?? 500;
|
|
251
|
+
let processed = 0;
|
|
252
|
+
let afterId;
|
|
253
|
+
for (;;) {
|
|
254
|
+
const records = await store.fetchBatch(afterId, batchSize);
|
|
255
|
+
if (!records.length)
|
|
256
|
+
break;
|
|
257
|
+
for (const record of records) {
|
|
258
|
+
let modified = false;
|
|
259
|
+
for (const bc of record.backupCodes ?? []) {
|
|
260
|
+
try {
|
|
261
|
+
const sealed = await oldSystem.decryptData(Buffer.from(bc.encrypted, 'hex'));
|
|
262
|
+
const rewrapped = (await newSystem.encryptData(sealed)).toString('hex');
|
|
263
|
+
if (rewrapped !== bc.encrypted) {
|
|
264
|
+
bc.encrypted = rewrapped;
|
|
265
|
+
modified = true;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (e) {
|
|
269
|
+
throw new Error(`Failed to rewrap backup code for user ${record._id}: ${e.message}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (modified) {
|
|
273
|
+
await store.updateUserRecord(record._id, {
|
|
274
|
+
backupCodes: record.backupCodes,
|
|
275
|
+
});
|
|
276
|
+
processed++;
|
|
277
|
+
options?.onProgress?.(processed);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
afterId = records[records.length - 1]?._id?.toString() ?? undefined;
|
|
281
|
+
}
|
|
282
|
+
return processed;
|
|
283
|
+
}
|
|
284
|
+
// ── Private: legacy callback-based rewrap ─────────────────────────────
|
|
285
|
+
async _rewrapViaCallbacks(fetchBatch, saveUser, oldSystem, newSystem, options) {
|
|
286
|
+
const batchSize = options?.batchSize ?? 500;
|
|
287
|
+
let processed = 0;
|
|
288
|
+
let afterId;
|
|
289
|
+
for (;;) {
|
|
290
|
+
const users = await fetchBatch(afterId, batchSize);
|
|
291
|
+
if (!users.length)
|
|
292
|
+
break;
|
|
293
|
+
for (const user of users) {
|
|
294
|
+
let modified = false;
|
|
295
|
+
for (const bc of user.backupCodes ?? []) {
|
|
296
|
+
try {
|
|
297
|
+
const sealed = await oldSystem.decryptData(Buffer.from(bc.encrypted, 'hex'));
|
|
298
|
+
const rewrapped = (await newSystem.encryptData(sealed)).toString('hex');
|
|
299
|
+
if (rewrapped !== bc.encrypted) {
|
|
300
|
+
bc.encrypted = rewrapped;
|
|
301
|
+
modified = true;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (e) {
|
|
305
|
+
throw new Error(`Failed to rewrap backup code for user ${user._id}: ${e.message}`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (modified) {
|
|
309
|
+
await saveUser(user);
|
|
310
|
+
processed++;
|
|
311
|
+
options?.onProgress?.(processed);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
afterId = users[users.length - 1]?._id?.toString() ?? undefined;
|
|
315
|
+
}
|
|
316
|
+
return processed;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
exports.BackupCodeService = BackupCodeService;
|
|
320
|
+
//# sourceMappingURL=backup-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-code.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/backup-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service for initializing the database with default users, roles, and relationships.
|
|
3
|
+
* Handles creation of system, admin, and member users with encrypted credentials and backup codes.
|
|
4
|
+
* @module services/database-initialization
|
|
5
|
+
*/
|
|
6
|
+
import { EmailString, MemberType, SecureString } from '@digitaldefiance/ecies-lib';
|
|
7
|
+
import { Connection } from '@digitaldefiance/mongoose-types';
|
|
8
|
+
import { Member as BackendMember, ECIESService, PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
9
|
+
import { IFailableResult } from '@digitaldefiance/suite-core-lib';
|
|
10
|
+
import { BackupCode, KeyWrappingService } from '@digitaldefiance/node-express-suite';
|
|
11
|
+
import { MnemonicService } from './mnemonic';
|
|
12
|
+
import { IServerInitResult } from '../interfaces/server-init-result';
|
|
13
|
+
import { IDBInitResult } from '../interfaces';
|
|
14
|
+
import { IMongoApplication } from '../interfaces/mongo-application';
|
|
15
|
+
import { BackupCodeService } from './backup-code';
|
|
16
|
+
import { RoleService } from './role';
|
|
17
|
+
/**
|
|
18
|
+
* Service for initializing the database with default users, roles, and relationships.
|
|
19
|
+
* Manages creation of system, admin, and member accounts with encrypted credentials.
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class DatabaseInitializationService {
|
|
22
|
+
/**
|
|
23
|
+
* Static initialization state management to prevent concurrent initialization.
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
26
|
+
protected static initializationPromises: Map<string, Promise<IFailableResult<IServerInitResult<Buffer<ArrayBufferLike>>>>>;
|
|
27
|
+
/** Initialization lock to prevent race conditions */
|
|
28
|
+
protected static initializationLock: Map<string, boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Default i18n translation function for database initialization messages.
|
|
31
|
+
* @param str String key to translate
|
|
32
|
+
* @param variables Template variables
|
|
33
|
+
* @param language Target language
|
|
34
|
+
* @param application Application instance
|
|
35
|
+
* @returns Translated string
|
|
36
|
+
*/
|
|
37
|
+
protected static defaultI18nTFunc(str: string, variables?: Record<string, unknown>, language?: string, application?: IMongoApplication): string;
|
|
38
|
+
/**
|
|
39
|
+
* Gets the mnemonic or generates a new one if not present.
|
|
40
|
+
* @template TID Platform-specific ID type
|
|
41
|
+
* @param mnemonic Existing mnemonic or undefined
|
|
42
|
+
* @param eciesService ECIES service to generate a new mnemonic
|
|
43
|
+
* @returns Existing or new mnemonic
|
|
44
|
+
*/
|
|
45
|
+
static mnemonicOrNew<TID extends PlatformID = Buffer>(mnemonic: SecureString | undefined, eciesService: ECIESService<TID>): SecureString;
|
|
46
|
+
/**
|
|
47
|
+
* Generates a cache key for a user based on their details.
|
|
48
|
+
* @template TID Platform-specific ID type
|
|
49
|
+
* @param username Username
|
|
50
|
+
* @param email Email address
|
|
51
|
+
* @param mnemonic Mnemonic
|
|
52
|
+
* @param id User ID
|
|
53
|
+
* @returns Generated cache key as hex string
|
|
54
|
+
*/
|
|
55
|
+
static cacheKey<TID extends PlatformID = Buffer>(username: string, email: EmailString, mnemonic: SecureString, id: TID): string;
|
|
56
|
+
/**
|
|
57
|
+
* Gets a cached BackendMember or creates a new one if not cached.
|
|
58
|
+
* @template TID Platform-specific ID type
|
|
59
|
+
* @param username Username
|
|
60
|
+
* @param email Email address
|
|
61
|
+
* @param mnemonic Mnemonic or undefined to generate a new one
|
|
62
|
+
* @param memberType Type of member (Admin, Member, System)
|
|
63
|
+
* @param eciesService ECIES service to handle key generation
|
|
64
|
+
* @param memberId Optional specific member ID to use
|
|
65
|
+
* @param createdBy Optional ID of the user who created this member
|
|
66
|
+
* @returns Cached or newly created BackendMember and the mnemonic used
|
|
67
|
+
*/
|
|
68
|
+
static cacheOrNew<TID extends PlatformID = Buffer>(username: string, email: EmailString, mnemonic: SecureString | undefined, memberType: MemberType, eciesService: ECIESService<TID>, memberId?: TID, createdBy?: TID): {
|
|
69
|
+
member: BackendMember<TID>;
|
|
70
|
+
mnemonic: SecureString;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Generates a random password meeting security requirements.
|
|
74
|
+
* @param length Length of the password
|
|
75
|
+
* @returns Generated password string
|
|
76
|
+
*/
|
|
77
|
+
static generatePassword(length: number): string;
|
|
78
|
+
/**
|
|
79
|
+
* Drops the database.
|
|
80
|
+
* @param connection Database connection
|
|
81
|
+
* @returns True if the database was dropped, false if not connected
|
|
82
|
+
*/
|
|
83
|
+
static dropDatabase(connection: Connection): Promise<boolean>;
|
|
84
|
+
static getInitOptions<TID extends PlatformID = Buffer>(application: IMongoApplication<TID>): {
|
|
85
|
+
adminId?: TID;
|
|
86
|
+
adminMnemonic?: SecureString;
|
|
87
|
+
adminPassword?: SecureString;
|
|
88
|
+
adminRoleId?: TID;
|
|
89
|
+
adminUserRoleId?: TID;
|
|
90
|
+
adminBackupCodes?: BackupCode[];
|
|
91
|
+
memberId?: TID;
|
|
92
|
+
memberMnemonic?: SecureString;
|
|
93
|
+
memberPassword?: SecureString;
|
|
94
|
+
memberRoleId?: TID;
|
|
95
|
+
memberUserRoleId?: TID;
|
|
96
|
+
memberBackupCodes?: BackupCode[];
|
|
97
|
+
systemId?: TID;
|
|
98
|
+
systemMnemonic?: SecureString;
|
|
99
|
+
systemPassword?: SecureString;
|
|
100
|
+
systemRoleId?: TID;
|
|
101
|
+
systemUserRoleId?: TID;
|
|
102
|
+
systemBackupCodes?: BackupCode[];
|
|
103
|
+
};
|
|
104
|
+
static serverInitResultHash<TID extends PlatformID = Buffer>(serverInitResult: IServerInitResult<TID>): string;
|
|
105
|
+
/**
|
|
106
|
+
* Initializes the user database with default users and roles using dependency injection.
|
|
107
|
+
* @template TID Platform-specific ID type
|
|
108
|
+
* @param application Application instance
|
|
109
|
+
* @param keyWrappingService Key wrapping service
|
|
110
|
+
* @param mnemonicService Mnemonic service
|
|
111
|
+
* @param eciesService ECIES service
|
|
112
|
+
* @param roleService Role service
|
|
113
|
+
* @param backupCodeService Backup code service
|
|
114
|
+
* @returns Result of the initialization
|
|
115
|
+
*/
|
|
116
|
+
static initUserDbWithServices<TID extends PlatformID = Buffer>(application: IMongoApplication<TID>, keyWrappingService: KeyWrappingService, mnemonicService: MnemonicService<TID>, eciesService: ECIESService<TID>, roleService: RoleService<TID>, backupCodeService: BackupCodeService<TID>): Promise<IDBInitResult<IServerInitResult<TID>>>;
|
|
117
|
+
static serverInitResultsToDotEnv<TID extends PlatformID = Buffer>(serverInitResult: IServerInitResult<TID>): string;
|
|
118
|
+
static printServerInitResults<TID extends PlatformID = Buffer>(result: IServerInitResult<TID>, printDotEnv?: boolean): void;
|
|
119
|
+
static setEnvFromInitResults<TID extends PlatformID = Buffer>(result: IServerInitResult<TID>): void;
|
|
120
|
+
/**
|
|
121
|
+
* Write initialization results to a .env file
|
|
122
|
+
* Updates or adds the credential variables in the specified .env file
|
|
123
|
+
* @param envFilePath Path to the .env file to update
|
|
124
|
+
* @param result The initialization results containing credentials
|
|
125
|
+
* @param idToString Function to convert IDs to strings
|
|
126
|
+
*/
|
|
127
|
+
static writeEnvFile<TID extends PlatformID = Buffer>(envFilePath: string, result: IServerInitResult<TID>): void;
|
|
128
|
+
/**
|
|
129
|
+
* Initializes the user database with default users and roles (convenience method).
|
|
130
|
+
* Creates necessary services and calls initUserDbWithServices.
|
|
131
|
+
* @template TID Platform-specific ID type
|
|
132
|
+
* @param application Application instance
|
|
133
|
+
* @returns Result of the initialization
|
|
134
|
+
*/
|
|
135
|
+
static initUserDb<TID extends PlatformID = Buffer>(application: IMongoApplication<TID>): Promise<IFailableResult<IServerInitResult<TID>>>;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=database-initialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-initialization.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/database-initialization.ts"],"names":[],"mappings":"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"}
|