@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,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Role-based access control (RBAC) service.
|
|
4
|
+
* Manages roles, user-role relationships, and permission checks.
|
|
5
|
+
* @module services/role
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.RoleService = void 0;
|
|
9
|
+
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
10
|
+
const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
|
|
11
|
+
const mongoose_types_1 = require("@digitaldefiance/mongoose-types");
|
|
12
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
13
|
+
const base_model_name_1 = require("../enumerations/base-model-name");
|
|
14
|
+
const model_registry_1 = require("../model-registry");
|
|
15
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
16
|
+
const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
|
|
17
|
+
/**
|
|
18
|
+
* Service for managing roles and role-based access control.
|
|
19
|
+
* Handles role creation, user-role assignments, and permission queries.
|
|
20
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
21
|
+
* @template TDate - Date type (defaults to Date)
|
|
22
|
+
* @template TTokenRole - Token role interface type
|
|
23
|
+
* @extends {BaseService<TID>}
|
|
24
|
+
*/
|
|
25
|
+
class RoleService extends node_express_suite_1.BaseService {
|
|
26
|
+
/**
|
|
27
|
+
* Constructor for the role service
|
|
28
|
+
* @param application The application object
|
|
29
|
+
*/
|
|
30
|
+
constructor(application) {
|
|
31
|
+
super(application);
|
|
32
|
+
}
|
|
33
|
+
static roleToRoleDTO(role) {
|
|
34
|
+
const provider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
|
|
35
|
+
const roleObj = role instanceof mongoose_types_1.Document ? role.toObject() : role;
|
|
36
|
+
return {
|
|
37
|
+
_id: provider.idToString(roleObj._id),
|
|
38
|
+
name: roleObj.name,
|
|
39
|
+
admin: roleObj.admin ?? false,
|
|
40
|
+
member: roleObj.member ?? false,
|
|
41
|
+
child: roleObj.child ?? false,
|
|
42
|
+
system: roleObj.system ?? false,
|
|
43
|
+
translatedName: 'translatedName' in role ? role.translatedName : role.name,
|
|
44
|
+
createdAt: (roleObj.createdAt instanceof Date
|
|
45
|
+
? roleObj.createdAt.toISOString()
|
|
46
|
+
: roleObj.createdAt),
|
|
47
|
+
createdBy: provider.idToString(roleObj.createdBy),
|
|
48
|
+
updatedAt: (roleObj.updatedAt instanceof Date
|
|
49
|
+
? roleObj.updatedAt.toISOString()
|
|
50
|
+
: roleObj.updatedAt),
|
|
51
|
+
updatedBy: provider.idToString(roleObj.updatedBy),
|
|
52
|
+
...(roleObj.deletedAt
|
|
53
|
+
? {
|
|
54
|
+
deletedAt: (roleObj.deletedAt instanceof Date
|
|
55
|
+
? roleObj.deletedAt.toISOString()
|
|
56
|
+
: roleObj.deletedAt),
|
|
57
|
+
}
|
|
58
|
+
: {}),
|
|
59
|
+
...(role.deletedBy
|
|
60
|
+
? {
|
|
61
|
+
deletedBy: provider.idToString(roleObj.deletedBy),
|
|
62
|
+
}
|
|
63
|
+
: {}),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Given a Role DTO, reconstitute ids and dates
|
|
68
|
+
* @param role The Role DTO
|
|
69
|
+
* @returns An IRoleBackendObject
|
|
70
|
+
*/
|
|
71
|
+
static hydrateRoleDTOToBackend(role) {
|
|
72
|
+
const idProvider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
|
|
73
|
+
const convert = (id) => idProvider.idFromString(id);
|
|
74
|
+
return {
|
|
75
|
+
...(0, node_express_suite_1.omit)(role, [
|
|
76
|
+
'translatedName',
|
|
77
|
+
]),
|
|
78
|
+
_id: convert(role._id),
|
|
79
|
+
name: role.name,
|
|
80
|
+
createdAt: new Date(role.createdAt),
|
|
81
|
+
createdBy: convert(role.createdBy),
|
|
82
|
+
updatedAt: new Date(role.updatedAt),
|
|
83
|
+
updatedBy: convert(role.updatedBy),
|
|
84
|
+
...(role.deletedAt ? { deletedAt: new Date(role.deletedAt) } : {}),
|
|
85
|
+
...(role.deletedBy
|
|
86
|
+
? {
|
|
87
|
+
deletedBy: convert(role.deletedBy),
|
|
88
|
+
}
|
|
89
|
+
: {}),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets the role ID by name
|
|
94
|
+
* @param roleName The name of the role
|
|
95
|
+
* @returns The role ID or null if not found
|
|
96
|
+
*/
|
|
97
|
+
async getRoleIdByName(roleName, session) {
|
|
98
|
+
const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
|
|
99
|
+
const role = await RoleModel.findOne({ name: roleName }, undefined, {
|
|
100
|
+
session,
|
|
101
|
+
}).select('_id');
|
|
102
|
+
if (!role) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return role._id;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Creates a new role
|
|
109
|
+
* @param roleData The role data
|
|
110
|
+
* @param session Optional mongoose session
|
|
111
|
+
* @returns The created role document
|
|
112
|
+
*/
|
|
113
|
+
async createRole(roleData, session) {
|
|
114
|
+
const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
|
|
115
|
+
const role = new RoleModel(roleData);
|
|
116
|
+
const savedRole = await role.save(session ? { session } : {});
|
|
117
|
+
return savedRole;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Adds a user to a role
|
|
121
|
+
* @param roleId - The role id
|
|
122
|
+
* @param userId - The user id
|
|
123
|
+
* @param createdBy - The user creating the relationship
|
|
124
|
+
* @param session Optional mongoose session
|
|
125
|
+
*/
|
|
126
|
+
async addUserToRole(roleId, userId, createdBy, session, overrideId) {
|
|
127
|
+
const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
|
|
128
|
+
// Check if the user-role relationship already exists (and is not deleted)
|
|
129
|
+
const existingUserRole = await UserRoleModel.findOne({
|
|
130
|
+
userId,
|
|
131
|
+
roleId,
|
|
132
|
+
deletedAt: { $exists: false },
|
|
133
|
+
}).session(session ?? null);
|
|
134
|
+
if (existingUserRole) {
|
|
135
|
+
// Relationship already exists, no need to create it again
|
|
136
|
+
return existingUserRole;
|
|
137
|
+
}
|
|
138
|
+
const userRole = new UserRoleModel({
|
|
139
|
+
...(overrideId ? { _id: overrideId } : {}),
|
|
140
|
+
userId,
|
|
141
|
+
roleId,
|
|
142
|
+
createdBy,
|
|
143
|
+
updatedBy: createdBy,
|
|
144
|
+
});
|
|
145
|
+
const result = await userRole.save({ session });
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Removes a user from a role
|
|
150
|
+
* @param roleId - The role id
|
|
151
|
+
* @param userId - The user id
|
|
152
|
+
* @param deletedBy - The user removing the relationship
|
|
153
|
+
* @param session Optional mongoose session
|
|
154
|
+
* @throws LastAdminError if attempting to remove the last admin
|
|
155
|
+
*/
|
|
156
|
+
async removeUserFromRole(roleId, userId, deletedBy, session) {
|
|
157
|
+
const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
|
|
158
|
+
const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
|
|
159
|
+
const role = await RoleModel.findById(roleId).session(session ?? null);
|
|
160
|
+
if (role?.admin) {
|
|
161
|
+
const adminCount = await UserRoleModel.countDocuments({
|
|
162
|
+
roleId,
|
|
163
|
+
deletedAt: { $exists: false },
|
|
164
|
+
}).session(session ?? null);
|
|
165
|
+
if (adminCount <= 1) {
|
|
166
|
+
throw new suite_core_lib_1.LastAdminError();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
await UserRoleModel.findOneAndUpdate({ userId, roleId, deletedAt: { $exists: false } }, { deletedAt: new Date(), deletedBy }, { session });
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Deletes a role by ID
|
|
173
|
+
* @param roleId The role ID
|
|
174
|
+
* @param deleter The ID of the user deleting the role
|
|
175
|
+
* @param hardDelete Whether to hard delete the role
|
|
176
|
+
* @param session Optional mongoose session
|
|
177
|
+
*/
|
|
178
|
+
async deleteRole(roleId, deleter, hardDelete, session) {
|
|
179
|
+
const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
|
|
180
|
+
if (hardDelete) {
|
|
181
|
+
await RoleModel.findByIdAndDelete(roleId).session(session ?? null);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
await RoleModel.findByIdAndUpdate(roleId, {
|
|
185
|
+
deletedAt: new Date(),
|
|
186
|
+
deletedBy: deleter,
|
|
187
|
+
}).session(session ?? null);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Gets all roles for a user
|
|
192
|
+
* @param userId The user ID
|
|
193
|
+
* @param session Optional mongoose session
|
|
194
|
+
* @returns The roles the user is a member of
|
|
195
|
+
*/
|
|
196
|
+
async getUserRoles(userId, session) {
|
|
197
|
+
const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
|
|
198
|
+
const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
|
|
199
|
+
if (!UserRoleModel || !RoleModel)
|
|
200
|
+
throw new Error('Model not registered');
|
|
201
|
+
// Return full documents
|
|
202
|
+
const userRoles = await UserRoleModel.find({
|
|
203
|
+
userId,
|
|
204
|
+
deletedAt: { $exists: false },
|
|
205
|
+
})
|
|
206
|
+
.select('roleId')
|
|
207
|
+
.session(session ?? null);
|
|
208
|
+
const roleIds = userRoles.map((ur) => ur.roleId);
|
|
209
|
+
return (await RoleModel.find({
|
|
210
|
+
_id: { $in: roleIds },
|
|
211
|
+
deletedAt: { $exists: false },
|
|
212
|
+
}).session(session ?? null));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Gets all users for a role
|
|
216
|
+
* @param roleId The role ID
|
|
217
|
+
* @param session Optional mongoose session
|
|
218
|
+
* @returns The user IDs that are members of the role
|
|
219
|
+
*/
|
|
220
|
+
async getRoleUsers(roleId, session) {
|
|
221
|
+
const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
|
|
222
|
+
// Return full documents
|
|
223
|
+
const userRoles = await UserRoleModel.find({
|
|
224
|
+
roleId,
|
|
225
|
+
deletedAt: { $exists: false },
|
|
226
|
+
})
|
|
227
|
+
.select('userId')
|
|
228
|
+
.session(session ?? null);
|
|
229
|
+
return userRoles.map((ur) => ur.userId);
|
|
230
|
+
}
|
|
231
|
+
/** Convert roles to translated TokenRoles */
|
|
232
|
+
rolesToTokenRoles(roles, overrideLanguage) {
|
|
233
|
+
return roles.map((role) => {
|
|
234
|
+
const engine = i18n_lib_1.I18nEngine.getInstance('default');
|
|
235
|
+
const userLang = i18n_lib_1.GlobalActiveContext.getInstance().userLanguage;
|
|
236
|
+
const lang = (overrideLanguage || userLang || 'en-US');
|
|
237
|
+
const roleTranslation = engine.translateEnum(suite_core_lib_1.Role, role.name, lang);
|
|
238
|
+
// Convert Mongoose document to plain object if needed
|
|
239
|
+
const roleObj = role instanceof mongoose_types_1.Document ? role.toObject() : role;
|
|
240
|
+
return {
|
|
241
|
+
...roleObj,
|
|
242
|
+
translatedName: roleTranslation,
|
|
243
|
+
};
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
async isUserAdmin(userDoc, session, providedRoles) {
|
|
247
|
+
const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
248
|
+
if (roles.filter((r) => r.admin).length > 0) {
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
async isUserMember(userDoc, session, providedRoles) {
|
|
254
|
+
const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
255
|
+
if (roles.filter((r) => r.member).length > 0) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
async isUserChild(userDoc, session, providedRoles) {
|
|
261
|
+
const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
262
|
+
if (roles.filter((r) => r.child).length > 0) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
async isSystemUser(userDoc, session, providedRoles) {
|
|
268
|
+
const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
269
|
+
return roles.some((r) => r.system);
|
|
270
|
+
}
|
|
271
|
+
async getMemberType(userDoc, session, providedRoles) {
|
|
272
|
+
const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
|
|
273
|
+
if (await this.isSystemUser(userDoc, session, roles)) {
|
|
274
|
+
return ecies_lib_1.MemberType.System;
|
|
275
|
+
}
|
|
276
|
+
else if (await this.isUserAdmin(userDoc, session, roles)) {
|
|
277
|
+
return ecies_lib_1.MemberType.Admin;
|
|
278
|
+
}
|
|
279
|
+
else if (await this.isUserMember(userDoc, session, roles)) {
|
|
280
|
+
return ecies_lib_1.MemberType.User;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
return ecies_lib_1.MemberType.Anonymous;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
exports.RoleService = RoleService;
|
|
288
|
+
//# sourceMappingURL=role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/role.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Comprehensive user management service.
|
|
3
|
+
* Handles user authentication, registration, password management, email verification,
|
|
4
|
+
* mnemonic recovery, backup codes, and all user-related operations.
|
|
5
|
+
* @module services/user
|
|
6
|
+
*/
|
|
7
|
+
import { SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
|
|
8
|
+
import { ClientSession, ProjectionType } from '@digitaldefiance/mongoose-types';
|
|
9
|
+
import { Member as BackendMember, ECIESService, PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
10
|
+
import { EmailTokenType, IBackupCode, IRequestUserDTO, ITokenRole, IUserBase, IUserDTO } from '@digitaldefiance/suite-core-lib';
|
|
11
|
+
import { Wallet } from '@ethereumjs/wallet';
|
|
12
|
+
import { BackupCode, Environment, BaseService, KeyWrappingService } from '@digitaldefiance/node-express-suite';
|
|
13
|
+
import { MnemonicService } from './mnemonic';
|
|
14
|
+
import type { IConstants, ICreateUserBasics, IEmailService, IUserBackendObject } from '@digitaldefiance/node-express-suite';
|
|
15
|
+
import { EmailTokenDocument } from '../documents/email-token';
|
|
16
|
+
import { BaseDocument } from '../documents/base';
|
|
17
|
+
import { UserDocument } from '../documents/user';
|
|
18
|
+
import { IMongoApplication } from '../interfaces/mongo-application';
|
|
19
|
+
import { BackupCodeService } from './backup-code';
|
|
20
|
+
import { RoleService } from './role';
|
|
21
|
+
/**
|
|
22
|
+
* Comprehensive service for user management and authentication.
|
|
23
|
+
* Provides methods for user creation, authentication (mnemonic/password/challenge),
|
|
24
|
+
* email verification, password reset, backup code recovery, and settings management.
|
|
25
|
+
* @template T - User document type
|
|
26
|
+
* @template TID - Platform ID type
|
|
27
|
+
* @template TDate - Date type
|
|
28
|
+
* @template TLanguage - String type for site language
|
|
29
|
+
* @template TAccountStatus - String type for account status
|
|
30
|
+
* @template _TEnvironment - Environment type
|
|
31
|
+
* @template _TConstants - Constants type
|
|
32
|
+
* @template _TBaseDocument - Base document type
|
|
33
|
+
* @template TUser - User base interface type
|
|
34
|
+
* @template TTokenRole - Token role interface type
|
|
35
|
+
* @template TApplication - Application interface type
|
|
36
|
+
* @extends {BaseService<TID, TApplication>}
|
|
37
|
+
*/
|
|
38
|
+
export declare class UserService<T, TID extends PlatformID, TDate extends Date, TLanguage extends string, TAccountStatus extends string, _TEnvironment extends Environment<TID> = Environment<TID>, _TConstants extends IConstants = IConstants, _TBaseDocument extends BaseDocument<T, TID> = BaseDocument<T, TID>, TUser extends IUserBase<TID, TDate, TLanguage, TAccountStatus> = IUserBase<TID, TDate, TLanguage, TAccountStatus>, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>, TApplication extends IMongoApplication<TID> = IMongoApplication<TID>> extends BaseService<TID, TApplication> {
|
|
39
|
+
protected readonly roleService: RoleService<TID, TDate, TTokenRole>;
|
|
40
|
+
protected readonly eciesService: ECIESService<TID>;
|
|
41
|
+
protected readonly keyWrappingService: KeyWrappingService;
|
|
42
|
+
protected readonly mnemonicService: MnemonicService;
|
|
43
|
+
protected readonly emailService: IEmailService;
|
|
44
|
+
protected readonly backupCodeService: BackupCodeService<TID, TDate, TTokenRole, TApplication>;
|
|
45
|
+
protected readonly serverUrl: string;
|
|
46
|
+
protected readonly disableEmailSend: boolean;
|
|
47
|
+
constructor(application: TApplication, roleService: RoleService<TID, TDate, TTokenRole>, emailService: IEmailService, keyWrappingService: KeyWrappingService, backupCodeService: BackupCodeService<TID, TDate, TTokenRole, TApplication>);
|
|
48
|
+
/**
|
|
49
|
+
* Given a User Document, make a User DTO
|
|
50
|
+
* @param user a User Document
|
|
51
|
+
* @returns An IUserDTO
|
|
52
|
+
*/
|
|
53
|
+
static userToUserDTO<TLanguage extends string, TID extends PlatformID = Buffer>(user: UserDocument<TLanguage, TID> | Record<string, unknown>): IUserDTO;
|
|
54
|
+
/**
|
|
55
|
+
* Given a User DTO, reconstitute ids and dates
|
|
56
|
+
* @param user a User DTO
|
|
57
|
+
* @returns An IUserBackendObject
|
|
58
|
+
*/
|
|
59
|
+
hydrateUserDTOToBackend(user: IUserDTO): IUserBackendObject<TLanguage, TID>;
|
|
60
|
+
/**
|
|
61
|
+
* Create a new email token to send to the user for email verification
|
|
62
|
+
* @param userDoc The user to create the email token for
|
|
63
|
+
* @param type The type of email token to create
|
|
64
|
+
* @param session The session to use for the query
|
|
65
|
+
* @returns The email token document
|
|
66
|
+
*/
|
|
67
|
+
createEmailToken(userDoc: UserDocument<TLanguage, TID>, type: EmailTokenType, session?: ClientSession): Promise<EmailTokenDocument>;
|
|
68
|
+
/**
|
|
69
|
+
* Create and send an email token to the user for email verification
|
|
70
|
+
* @param user The user to send the email token to
|
|
71
|
+
* @param type The type of email token to send
|
|
72
|
+
* @param session The session to use for the query
|
|
73
|
+
* @returns The email token document
|
|
74
|
+
*/
|
|
75
|
+
createAndSendEmailToken(user: UserDocument<TLanguage, TID> | (Pick<UserDocument<TLanguage, TID>, keyof UserDocument<TLanguage, TID>> & {
|
|
76
|
+
_id: any;
|
|
77
|
+
}), type?: EmailTokenType, session?: ClientSession, debug?: boolean): Promise<EmailTokenDocument>;
|
|
78
|
+
/**
|
|
79
|
+
* Create and send an email token directly within an existing transaction
|
|
80
|
+
* @param user The user to send the email token to
|
|
81
|
+
* @param type The type of email token to send
|
|
82
|
+
* @param session The session to use for the query (required)
|
|
83
|
+
* @param debug Whether to enable debug logging
|
|
84
|
+
* @returns The email token document
|
|
85
|
+
*/
|
|
86
|
+
createAndSendEmailTokenDirect(user: UserDocument<TLanguage, TID>, type: EmailTokenType | undefined, session: ClientSession, debug?: boolean): Promise<EmailTokenDocument>;
|
|
87
|
+
/**
|
|
88
|
+
* Send an email token to the user for email verification
|
|
89
|
+
* @param emailToken The email token to send
|
|
90
|
+
* @param session The session to use for the query
|
|
91
|
+
* @returns void
|
|
92
|
+
*/
|
|
93
|
+
sendEmailToken(emailToken: EmailTokenDocument, session?: ClientSession, debug?: boolean): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Find a user by email or username and enforce account status checks
|
|
96
|
+
* @param email Optional email
|
|
97
|
+
* @param username Optional username
|
|
98
|
+
* @param session Optional mongoose session
|
|
99
|
+
* @throws UsernameOrEmailRequiredError if neither provided
|
|
100
|
+
* @throws InvalidCredentialsError if not found or deleted
|
|
101
|
+
* @throws AccountLockedError | PendingEmailVerificationError | AccountStatusError per status
|
|
102
|
+
*/
|
|
103
|
+
findUser(email?: string, username?: string, session?: ClientSession): Promise<UserDocument<TLanguage, TID>>;
|
|
104
|
+
/**
|
|
105
|
+
* Finds a user record by ID
|
|
106
|
+
* @param userId The user ID
|
|
107
|
+
* @param throwIfNotActive Whether to throw if the user is inactive
|
|
108
|
+
* @param session The active session, if present
|
|
109
|
+
* @returns The user document
|
|
110
|
+
*/
|
|
111
|
+
findUserById(userId: TID, throwIfNotActive: boolean, session?: ClientSession, select?: ProjectionType<UserDocument<TLanguage, TID>>): Promise<UserDocument<TLanguage, TID>>;
|
|
112
|
+
/**
|
|
113
|
+
* Ensure required fields are present in a projection for queries that rely on them.
|
|
114
|
+
* Supports string and object-style projections. For inclusion projections, adds fields.
|
|
115
|
+
* For exclusion projections, ensures required fields are not excluded.
|
|
116
|
+
*/
|
|
117
|
+
private ensureRequiredFieldsInProjection;
|
|
118
|
+
/**
|
|
119
|
+
* Fill in the default values to a user object
|
|
120
|
+
* @param newUser The user object to fill in
|
|
121
|
+
* @param createdBy The user ID of the user creating the new user
|
|
122
|
+
* @returns The filled in user
|
|
123
|
+
*/
|
|
124
|
+
fillUserDefaults(newUser: ICreateUserBasics, createdBy: TID, backupCodes: Array<IBackupCode>, encryptedMnemonic: string, userId?: TID): IUserBackendObject<TLanguage, TID>;
|
|
125
|
+
/**
|
|
126
|
+
* Create a new user document from an IUser and unhashed password
|
|
127
|
+
* @param newUser The user object
|
|
128
|
+
* @returns The new user document
|
|
129
|
+
*/
|
|
130
|
+
makeUserDoc(newUser: TUser): Promise<UserDocument<TLanguage, TID>>;
|
|
131
|
+
/**
|
|
132
|
+
* Create a new user.
|
|
133
|
+
* Do not set createdBy to a new (non-existing) ObjectId unless you also set newUserId to it.
|
|
134
|
+
* If newUserId is not set, one will be generated.
|
|
135
|
+
* @param systemUser The system user performing the operation
|
|
136
|
+
* @param userData Username, email, password in a ICreateUserBasics object
|
|
137
|
+
* @param createdBy The user id of the user creating the user
|
|
138
|
+
* @param newUserId the user id of the new user object- usually the createdBy user id.
|
|
139
|
+
* @param session The session to use for the query
|
|
140
|
+
* @param debug Whether to log debug information
|
|
141
|
+
* @param password The password to use for the new user (optional, if not provided, mnemonic will be used)
|
|
142
|
+
* @returns The new user document
|
|
143
|
+
*/
|
|
144
|
+
newUser(systemUser: BackendMember<TID>, userData: ICreateUserBasics, createdBy?: TID, newUserId?: TID, session?: ClientSession, debug?: boolean, password?: string, userProvidedMnemonic?: string): Promise<{
|
|
145
|
+
user: UserDocument<TLanguage, TID>;
|
|
146
|
+
mnemonic: string;
|
|
147
|
+
backupCodes: Array<string>;
|
|
148
|
+
password?: string;
|
|
149
|
+
}>;
|
|
150
|
+
/**
|
|
151
|
+
* Get the backup codes for a user.
|
|
152
|
+
* Requires the user not be deleted or inactive
|
|
153
|
+
*/
|
|
154
|
+
getEncryptedUserBackupCodes(userId: TID, session?: ClientSession): Promise<Array<IBackupCode>>;
|
|
155
|
+
/**
|
|
156
|
+
* Resets the given user's backup codes
|
|
157
|
+
* @param backupUser The user to generate codes for
|
|
158
|
+
* @param session The current session, if any
|
|
159
|
+
* @returns A promise of an array of backup codes
|
|
160
|
+
*/
|
|
161
|
+
resetUserBackupCodes(backupUser: BackendMember<TID>, systemUser: BackendMember<TID>, session?: ClientSession): Promise<Array<BackupCode>>;
|
|
162
|
+
/**
|
|
163
|
+
* Recover a user's mnemonic from an encrypted mnemonic
|
|
164
|
+
* @param user The user whose mnemonic to recover
|
|
165
|
+
* @param encryptedMnemonic The encrypted mnemonic
|
|
166
|
+
* @returns The recovered mnemonic
|
|
167
|
+
*/
|
|
168
|
+
recoverMnemonic(user: BackendMember<any>, encryptedMnemonic: string): SecureString;
|
|
169
|
+
/**
|
|
170
|
+
* Make a Member from a user document and optional private key
|
|
171
|
+
* @param userDoc The user document
|
|
172
|
+
* @param privateKey Optional private key to load the wallet
|
|
173
|
+
* @param publicKey Optional public key to override the userDoc public key
|
|
174
|
+
* @param session The current session, if any
|
|
175
|
+
* @returns A promise containing the created Member
|
|
176
|
+
*/
|
|
177
|
+
makeUserFromUserDoc(userDoc: UserDocument<TLanguage, TID>, privateKey?: SecureBuffer, publicKey?: Buffer, mnemonic?: SecureString, wallet?: Wallet, session?: ClientSession): Promise<BackendMember<TID>>;
|
|
178
|
+
/**
|
|
179
|
+
* Challenges a given userDoc with a given mnemonic, returns a system and user Member
|
|
180
|
+
* @param userDoc The userDoc in question
|
|
181
|
+
* @param mnemonic The mnemonic to challenge against
|
|
182
|
+
* @returns A promise containing the user and system Members
|
|
183
|
+
* @throws InvalidCredentialsError if the challenge fails
|
|
184
|
+
* @throws AccountLockedError if the account is locked
|
|
185
|
+
* @throws PendingEmailVerificationError if the email is not verified
|
|
186
|
+
* @throws AccountStatusError if the account status is invalid
|
|
187
|
+
*/
|
|
188
|
+
challengeUserWithMnemonic(userDoc: UserDocument<TLanguage, TID>, mnemonic: SecureString, session?: ClientSession): Promise<{
|
|
189
|
+
userMember: BackendMember<TID>;
|
|
190
|
+
adminMember: BackendMember<TID>;
|
|
191
|
+
}>;
|
|
192
|
+
/**
|
|
193
|
+
* Validates a login challenge response
|
|
194
|
+
* @param challengeResponse The challenge response bytes in hex
|
|
195
|
+
* @param email The email address of the user
|
|
196
|
+
* @param username The username of the user
|
|
197
|
+
* @param session The mongo session for the query
|
|
198
|
+
* @returns A promise that resolves to the user document, user member, and system member
|
|
199
|
+
*/
|
|
200
|
+
loginWithChallengeResponse(challengeResponse: string, email?: string, username?: string, session?: ClientSession): Promise<{
|
|
201
|
+
userDoc: UserDocument<TLanguage, TID>;
|
|
202
|
+
userMember: BackendMember<TID>;
|
|
203
|
+
adminMember: BackendMember<TID>;
|
|
204
|
+
}>;
|
|
205
|
+
/**
|
|
206
|
+
* Authenticate a user with client-verified challenge (skips server-side challenge)
|
|
207
|
+
* @returns The authenticated user document.
|
|
208
|
+
*/
|
|
209
|
+
loginWithClientVerifiedChallenge(usernameOrEmail: string, mnemonic: SecureString, session?: ClientSession): Promise<{
|
|
210
|
+
userDoc: UserDocument<TLanguage, TID>;
|
|
211
|
+
userMember: BackendMember<TID>;
|
|
212
|
+
adminMember: BackendMember<TID>;
|
|
213
|
+
}>;
|
|
214
|
+
/**
|
|
215
|
+
* Authenticate a user with their mnemonic.
|
|
216
|
+
* @returns The authenticated user document.
|
|
217
|
+
*/
|
|
218
|
+
loginWithMnemonic(usernameOrEmail: string, mnemonic: SecureString, session?: ClientSession): Promise<{
|
|
219
|
+
userDoc: UserDocument<TLanguage, TID>;
|
|
220
|
+
userMember: BackendMember<TID>;
|
|
221
|
+
adminMember: BackendMember<TID>;
|
|
222
|
+
}>;
|
|
223
|
+
/**
|
|
224
|
+
* Authenticate a user with their password (for key-wrapped accounts).
|
|
225
|
+
* @returns The authenticated user document.
|
|
226
|
+
*/
|
|
227
|
+
loginWithPassword(usernameOrEmail: string, password: string, session?: ClientSession): Promise<{
|
|
228
|
+
userDoc: UserDocument<TLanguage, TID>;
|
|
229
|
+
userMember: BackendMember<TID>;
|
|
230
|
+
adminMember: BackendMember<TID>;
|
|
231
|
+
}>;
|
|
232
|
+
/**
|
|
233
|
+
* Re-send a previously sent email token
|
|
234
|
+
* @param userId The user id
|
|
235
|
+
* @param session The session to use for the query
|
|
236
|
+
* @returns void
|
|
237
|
+
* @throws EmailTokenUsedOrInvalidError
|
|
238
|
+
*/
|
|
239
|
+
resendEmailToken(userId: string, type: EmailTokenType, session?: ClientSession, debug?: boolean): Promise<void>;
|
|
240
|
+
/**
|
|
241
|
+
* Verify the email token and update the user's account status
|
|
242
|
+
* @param emailToken The email token to verify
|
|
243
|
+
* @param session The session to use for the query
|
|
244
|
+
* @returns void
|
|
245
|
+
* @throws EmailTokenUsedOrInvalidError
|
|
246
|
+
* @throws EmailTokenExpiredError
|
|
247
|
+
* @throws EmailVerifiedError
|
|
248
|
+
* @throws UserNotFoundError
|
|
249
|
+
*/
|
|
250
|
+
verifyAccountTokenAndComplete(emailToken: string, session?: ClientSession): Promise<void>;
|
|
251
|
+
/**
|
|
252
|
+
* Validate the email token
|
|
253
|
+
* @param token The token to validate
|
|
254
|
+
* @param restrictType The type of email token to validate (or throw)
|
|
255
|
+
* @param session The session to use for the query
|
|
256
|
+
* @returns void
|
|
257
|
+
* @throws EmailTokenUsedOrInvalidError
|
|
258
|
+
*/
|
|
259
|
+
validateEmailToken(token: string, restrictType?: EmailTokenType, session?: ClientSession): Promise<void>;
|
|
260
|
+
/**
|
|
261
|
+
* Updates the user's language
|
|
262
|
+
* @param userId - The ID of the user
|
|
263
|
+
* @param newLanguage - The new language
|
|
264
|
+
* @param session - The session to use for the query
|
|
265
|
+
* @returns The updated user
|
|
266
|
+
*/
|
|
267
|
+
updateSiteLanguage(userId: string, newLanguage: string, session?: ClientSession): Promise<IRequestUserDTO>;
|
|
268
|
+
/**
|
|
269
|
+
* Updates the user's Dark Mode preference
|
|
270
|
+
* @param userId - The ID of the user
|
|
271
|
+
* @param newDarkMode - The new Dark Mode preference
|
|
272
|
+
* @param session - The session to use for the query
|
|
273
|
+
* @returns The updated user
|
|
274
|
+
*/
|
|
275
|
+
updateDarkMode(userId: string, newDarkMode: boolean, session?: ClientSession): Promise<IRequestUserDTO>;
|
|
276
|
+
/**
|
|
277
|
+
* Updates multiple user settings at once
|
|
278
|
+
* @param userId - The ID of the user
|
|
279
|
+
* @param settings - Object containing settings to update
|
|
280
|
+
* @param session - The session to use for the query
|
|
281
|
+
* @returns The updated user
|
|
282
|
+
*/
|
|
283
|
+
updateUserSettings(userId: string, settings: {
|
|
284
|
+
email?: string;
|
|
285
|
+
timezone?: string;
|
|
286
|
+
siteLanguage?: string;
|
|
287
|
+
currency?: string;
|
|
288
|
+
darkMode?: boolean;
|
|
289
|
+
directChallenge?: boolean;
|
|
290
|
+
}, session?: ClientSession): Promise<IRequestUserDTO>;
|
|
291
|
+
/**
|
|
292
|
+
* Changes the user's password by re-wrapping their master key
|
|
293
|
+
* @param userId - The ID of the user
|
|
294
|
+
* @param currentPassword - The current password
|
|
295
|
+
* @param newPassword - The new password
|
|
296
|
+
* @param session - The session to use for the query
|
|
297
|
+
* @returns void
|
|
298
|
+
*/
|
|
299
|
+
changePassword(userId: string, currentPassword: string, newPassword: string, session?: ClientSession): Promise<void>;
|
|
300
|
+
/**
|
|
301
|
+
* Retrieve an email token by its token string and type
|
|
302
|
+
* @param token - The token string
|
|
303
|
+
* @param type - The type of the email token
|
|
304
|
+
* @param session - The session to use for the query
|
|
305
|
+
* @returns The email token document or null if not found
|
|
306
|
+
*/
|
|
307
|
+
findEmailToken(token: string, type?: EmailTokenType, session?: ClientSession): Promise<EmailTokenDocument | null>;
|
|
308
|
+
/**
|
|
309
|
+
* Verify email token is valid
|
|
310
|
+
* @param token - The email token
|
|
311
|
+
* @param session - The session to use for the query
|
|
312
|
+
* @returns void
|
|
313
|
+
*/
|
|
314
|
+
verifyEmailToken(token: string, type: EmailTokenType, session?: ClientSession): Promise<void>;
|
|
315
|
+
/**
|
|
316
|
+
* Reset password using email token
|
|
317
|
+
* @param token - The email token
|
|
318
|
+
* @param newPassword - The new password
|
|
319
|
+
* @param session - The session to use for the query
|
|
320
|
+
* @returns void
|
|
321
|
+
*/
|
|
322
|
+
resetPasswordWithToken(token: string, newPassword: string, credential?: string, // either mnemonic or current password; required
|
|
323
|
+
session?: ClientSession): Promise<void>;
|
|
324
|
+
/**
|
|
325
|
+
* Generate a login challenge for the client to sign
|
|
326
|
+
* @returns The login challenge in hex
|
|
327
|
+
*/
|
|
328
|
+
generateDirectLoginChallenge(): string;
|
|
329
|
+
/**
|
|
330
|
+
* Verifies a direct login challenge response
|
|
331
|
+
* @param serverSignedRequest The login challenge response in hex
|
|
332
|
+
* @param session The mongoose session, if provided
|
|
333
|
+
* @returns A promise with the user document and user member object
|
|
334
|
+
*/
|
|
335
|
+
verifyDirectLoginChallenge(serverSignedRequest: string, signature: string, username?: string, email?: string, session?: ClientSession): Promise<{
|
|
336
|
+
userDoc: UserDocument<TLanguage, TID>;
|
|
337
|
+
userMember: BackendMember<TID>;
|
|
338
|
+
}>;
|
|
339
|
+
/**
|
|
340
|
+
* Request a login link via email
|
|
341
|
+
* @param email Email address
|
|
342
|
+
* @param username Username
|
|
343
|
+
* @param session Existing session, if any
|
|
344
|
+
* @returns void
|
|
345
|
+
*/
|
|
346
|
+
requestEmailLogin(email?: string, username?: string, session?: ClientSession): Promise<void>;
|
|
347
|
+
/**
|
|
348
|
+
* Validate an email login token challenge
|
|
349
|
+
* @param token The token to challenge
|
|
350
|
+
* @param signature The signature of the token by the user's private key
|
|
351
|
+
* @param session The session to use for the query
|
|
352
|
+
* @returns The user document if the challenge is valid
|
|
353
|
+
*/
|
|
354
|
+
validateEmailLoginTokenChallenge(token: string, signature: string, session?: ClientSession): Promise<UserDocument<TLanguage, TID>>;
|
|
355
|
+
/**
|
|
356
|
+
* Updates the user's last login time atomically
|
|
357
|
+
* @param userId - The ID of the user
|
|
358
|
+
* @returns void
|
|
359
|
+
*/
|
|
360
|
+
updateLastLogin(userId: TID): Promise<void>;
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=user.d.ts.map
|