@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,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Mongoose implementation of the IDocumentStore interface.
|
|
4
|
+
* Wraps existing mongoose logic previously embedded in BaseApplication.
|
|
5
|
+
* @module services/mongoose-document-store
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.MongooseDocumentStore = void 0;
|
|
9
|
+
const tslib_1 = require("tslib");
|
|
10
|
+
const mongoose_types_1 = tslib_1.__importDefault(require("@digitaldefiance/mongoose-types"));
|
|
11
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
12
|
+
const mongodb_memory_server_1 = require("mongodb-memory-server");
|
|
13
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
14
|
+
const model_registry_1 = require("../model-registry");
|
|
15
|
+
const default_mongo_uri_validator_1 = require("../utils/default-mongo-uri-validator");
|
|
16
|
+
/**
|
|
17
|
+
* Mongoose implementation of IDocumentStore.
|
|
18
|
+
* Extracts and preserves the existing mongoose logic from BaseApplication.
|
|
19
|
+
* @template TID - Platform-specific ID type extending PlatformID
|
|
20
|
+
* @template TModelDocs - Record mapping model names to their document types
|
|
21
|
+
* @template TInitResults - Type of database initialization results
|
|
22
|
+
* @template TConstants - Application constants type
|
|
23
|
+
*/
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
class MongooseDocumentStore {
|
|
26
|
+
/**
|
|
27
|
+
* Mongoose database instance
|
|
28
|
+
*/
|
|
29
|
+
_db;
|
|
30
|
+
/**
|
|
31
|
+
* Schema map for all models
|
|
32
|
+
*/
|
|
33
|
+
_schemaMap;
|
|
34
|
+
/**
|
|
35
|
+
* In-memory MongoDB instance for development
|
|
36
|
+
*/
|
|
37
|
+
_devDatabase;
|
|
38
|
+
/**
|
|
39
|
+
* Function to create the schema map given a Mongoose connection
|
|
40
|
+
*/
|
|
41
|
+
_schemaMapFactory;
|
|
42
|
+
/**
|
|
43
|
+
* Function to initialize the database with default data
|
|
44
|
+
*/
|
|
45
|
+
_databaseInitFunction;
|
|
46
|
+
/**
|
|
47
|
+
* Function to create a hash from the database initialization results (for logging purposes)
|
|
48
|
+
*/
|
|
49
|
+
_initResultHashFunction;
|
|
50
|
+
/**
|
|
51
|
+
* Application environment
|
|
52
|
+
*/
|
|
53
|
+
_environment;
|
|
54
|
+
/**
|
|
55
|
+
* Application constants
|
|
56
|
+
*/
|
|
57
|
+
_constants;
|
|
58
|
+
constructor(schemaMapFactory, databaseInitFunction, initResultHashFunction, environment, constants = suite_core_lib_1.Constants) {
|
|
59
|
+
this._schemaMapFactory = schemaMapFactory;
|
|
60
|
+
this._databaseInitFunction = databaseInitFunction;
|
|
61
|
+
this._initResultHashFunction = initResultHashFunction;
|
|
62
|
+
this._environment = environment;
|
|
63
|
+
this._constants = constants;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get the underlying mongoose instance (for backward compatibility).
|
|
67
|
+
*/
|
|
68
|
+
get db() {
|
|
69
|
+
if (!this._db) {
|
|
70
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_DatabaseNotConnectedYet);
|
|
71
|
+
}
|
|
72
|
+
return this._db;
|
|
73
|
+
}
|
|
74
|
+
/** @inheritdoc */
|
|
75
|
+
get schemaMap() {
|
|
76
|
+
return this._schemaMap;
|
|
77
|
+
}
|
|
78
|
+
/** @inheritdoc */
|
|
79
|
+
get devDatabase() {
|
|
80
|
+
return this._devDatabase;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Validate MongoDB URI to prevent SSRF attacks.
|
|
84
|
+
* Delegates to the standalone defaultMongoUriValidator for reuse
|
|
85
|
+
* across both IDatabase and IDocumentStore paths.
|
|
86
|
+
*/
|
|
87
|
+
validateMongoUri(uri) {
|
|
88
|
+
(0, default_mongo_uri_validator_1.defaultMongoUriValidator)(uri, this._environment.production);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Connect to MongoDB and initialize schemas.
|
|
92
|
+
* Extracted from BaseApplication.connectDatabase.
|
|
93
|
+
* @inheritdoc
|
|
94
|
+
*/
|
|
95
|
+
async connect(uri) {
|
|
96
|
+
const mongoUri = uri ?? this._environment.requireMongo.uri;
|
|
97
|
+
const debug = this._environment.debug;
|
|
98
|
+
this.validateMongoUri(mongoUri);
|
|
99
|
+
(0, node_express_suite_1.debugLog)(debug, 'log', `[ ${(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_Connecting, undefined, undefined, { constants: this._constants })} ] ${(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_MongoDB, undefined, undefined, { constants: this._constants })}: ${mongoUri}`);
|
|
100
|
+
// Always disconnect first to ensure clean state
|
|
101
|
+
if (mongoose_types_1.default.connection.readyState !== 0) {
|
|
102
|
+
await mongoose_types_1.default.disconnect();
|
|
103
|
+
}
|
|
104
|
+
// amazonq-ignore-next-line solved above with validateMongoUri call
|
|
105
|
+
const mongoConfig = this._environment.mongo;
|
|
106
|
+
await mongoose_types_1.default.connect(mongoUri, {
|
|
107
|
+
maxPoolSize: mongoConfig.maxPoolSize,
|
|
108
|
+
minPoolSize: mongoConfig.minPoolSize,
|
|
109
|
+
maxIdleTimeMS: mongoConfig.maxIdleTimeMS,
|
|
110
|
+
serverSelectionTimeoutMS: mongoConfig.serverSelectionTimeoutMS,
|
|
111
|
+
socketTimeoutMS: mongoConfig.socketTimeoutMS,
|
|
112
|
+
retryWrites: mongoConfig.retryWrites,
|
|
113
|
+
retryReads: mongoConfig.retryReads,
|
|
114
|
+
readConcern: mongoConfig.readConcern,
|
|
115
|
+
writeConcern: mongoConfig.writeConcern,
|
|
116
|
+
});
|
|
117
|
+
this._db = mongoose_types_1.default;
|
|
118
|
+
await new Promise((resolve) => {
|
|
119
|
+
if (mongoose_types_1.default.connection.readyState === 1) {
|
|
120
|
+
resolve();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
mongoose_types_1.default.connection.once('connected', resolve);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
|
|
127
|
+
(0, node_express_suite_1.debugLog)(debug, 'log', engine.t('[ {{SuiteCoreStringKey.Common_Connected}} ] {{SuiteCoreStringKey.Common_MongoDB}}'));
|
|
128
|
+
(0, node_express_suite_1.debugLog)(debug, 'log', engine.t('[ {{SuiteCoreStringKey.Common_Loading}} ] {{SuiteCoreStringKey.Common_Schemas}}'));
|
|
129
|
+
this._schemaMap = this._schemaMapFactory(this.db.connection);
|
|
130
|
+
// Register all base models in ModelRegistry for extensibility
|
|
131
|
+
if (this._schemaMap) {
|
|
132
|
+
Object.values(this._schemaMap).forEach((schema) => {
|
|
133
|
+
model_registry_1.ModelRegistry.instance.register({
|
|
134
|
+
modelName: schema.modelName,
|
|
135
|
+
schema: schema.schema,
|
|
136
|
+
model: schema.model,
|
|
137
|
+
collection: schema.collection,
|
|
138
|
+
discriminators: schema.discriminators,
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (debug) {
|
|
143
|
+
Object.values(this._schemaMap).forEach((schema) => {
|
|
144
|
+
console.log(engine.t(`[ {{SuiteCoreStringKey.Common_Loaded}} ] {{SuiteCoreStringKey.Common_Schema}} '${schema.modelName.replace(/[\r\n]/g, '')}'`));
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (!this._db.connection.db) {
|
|
148
|
+
console.error(engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToSetTransactionTimeout));
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const command = {
|
|
152
|
+
...(this._environment.mongo.setParameterSupported
|
|
153
|
+
? { setParameter: 1 }
|
|
154
|
+
: {}),
|
|
155
|
+
...(this._environment.mongo.useTransactions &&
|
|
156
|
+
this._environment.mongo.transactionLifetimeLimitSecondsSupported
|
|
157
|
+
? {
|
|
158
|
+
transactionLifetimeLimitSeconds: this._environment.mongo.transactionTimeout,
|
|
159
|
+
}
|
|
160
|
+
: {}),
|
|
161
|
+
...(this._environment.mongo.useTransactions &&
|
|
162
|
+
this._environment.mongo.maxTransactionLockRequestTimeoutMillisSupported
|
|
163
|
+
? {
|
|
164
|
+
maxTransactionLockRequestTimeoutMillis: this._environment.mongo.transactionLockRequestTimeout,
|
|
165
|
+
}
|
|
166
|
+
: {}),
|
|
167
|
+
};
|
|
168
|
+
if (Object.keys(command).length > 0) {
|
|
169
|
+
await this._db.connection.db
|
|
170
|
+
.admin()
|
|
171
|
+
.command(command)
|
|
172
|
+
.catch(() => undefined);
|
|
173
|
+
}
|
|
174
|
+
(0, node_express_suite_1.debugLog)(debug, 'log', engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_SetTransactionTimeoutSuccessfully));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Disconnect from database.
|
|
179
|
+
* Extracted from BaseApplication.disconnectDatabase.
|
|
180
|
+
* @inheritdoc
|
|
181
|
+
*/
|
|
182
|
+
async disconnect() {
|
|
183
|
+
const debug = this._environment.debug;
|
|
184
|
+
if (this._db && mongoose_types_1.default.connection.readyState !== 0) {
|
|
185
|
+
await this._db.disconnect();
|
|
186
|
+
}
|
|
187
|
+
const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
|
|
188
|
+
this._db = undefined;
|
|
189
|
+
(0, node_express_suite_1.debugLog)(debug, 'log', `[ ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Disconnected)} ] ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_MongoDB)}`);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Whether the store is currently connected and ready for operations.
|
|
193
|
+
* @inheritdoc
|
|
194
|
+
*/
|
|
195
|
+
isConnected() {
|
|
196
|
+
return mongoose_types_1.default.connection.readyState === 1;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Retrieve a model/collection handle by name.
|
|
200
|
+
* Delegates to ModelRegistry.
|
|
201
|
+
* @inheritdoc
|
|
202
|
+
*/
|
|
203
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
204
|
+
getModel(modelName) {
|
|
205
|
+
return model_registry_1.ModelRegistry.instance.get(modelName).model;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Set up an in-memory MongoDB instance for development.
|
|
209
|
+
* Extracted from BaseApplication.setupDevDatabase.
|
|
210
|
+
* @inheritdoc
|
|
211
|
+
*/
|
|
212
|
+
async setupDevStore() {
|
|
213
|
+
this._devDatabase = await mongodb_memory_server_1.MongoMemoryReplSet.create({
|
|
214
|
+
replSet: { count: 1, storageEngine: 'wiredTiger' },
|
|
215
|
+
});
|
|
216
|
+
await this._devDatabase.waitUntilRunning();
|
|
217
|
+
const mongoUri = this._devDatabase.getUri(this._environment.devDatabase) +
|
|
218
|
+
'&maxPoolSize=20&minPoolSize=4';
|
|
219
|
+
this._environment.setEnvironment('mongo.uri', mongoUri);
|
|
220
|
+
(0, node_express_suite_1.debugLog)(this._environment.debug, 'log', `MongoDB Memory Server with transactions: ${mongoUri}`);
|
|
221
|
+
return mongoUri;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Initialize the development database with default data.
|
|
225
|
+
* Extracted from BaseApplication.initializeDevDatabase.
|
|
226
|
+
* @inheritdoc
|
|
227
|
+
*/
|
|
228
|
+
async initializeDevStore(app) {
|
|
229
|
+
const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
|
|
230
|
+
(0, node_express_suite_1.debugLog)(this._environment.debug, 'log', `${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_StartingDatabaseInitialization)}: ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_TransactionsEnabledDisabledTemplate, {
|
|
231
|
+
STATE: this._environment.mongo.useTransactions
|
|
232
|
+
? engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Enabled)
|
|
233
|
+
: engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Disabled),
|
|
234
|
+
})}`);
|
|
235
|
+
let initTimeout;
|
|
236
|
+
const initTimeoutMs = 300000;
|
|
237
|
+
const accountDataResult = await Promise.race([
|
|
238
|
+
this._databaseInitFunction(app),
|
|
239
|
+
new Promise((_, reject) => {
|
|
240
|
+
initTimeout = setTimeout(() => {
|
|
241
|
+
const logMsg = engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabaseTimeoutTemplate, { timeMs: initTimeoutMs.toString() });
|
|
242
|
+
console.error(logMsg);
|
|
243
|
+
reject(new Error(logMsg));
|
|
244
|
+
}, initTimeoutMs);
|
|
245
|
+
}),
|
|
246
|
+
]);
|
|
247
|
+
if (initTimeout)
|
|
248
|
+
clearTimeout(initTimeout);
|
|
249
|
+
if (accountDataResult.success && accountDataResult.data) {
|
|
250
|
+
if (this._environment.detailedDebug) {
|
|
251
|
+
const initHash = this._initResultHashFunction(accountDataResult.data);
|
|
252
|
+
(0, node_express_suite_1.debugLog)(true, 'log', engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_DatabaseInitializedWithOptionsHashTemplate, { hash: initHash }));
|
|
253
|
+
}
|
|
254
|
+
return accountDataResult.data;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
if (this._environment.detailedDebug && accountDataResult.error) {
|
|
258
|
+
(0, node_express_suite_1.debugLog)(true, 'log', accountDataResult.error);
|
|
259
|
+
}
|
|
260
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabase);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
exports.MongooseDocumentStore = MongooseDocumentStore;
|
|
265
|
+
//# sourceMappingURL=mongoose-document-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoose-document-store.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/mongoose-document-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Mongoose session adapter implementing IClientSession.
|
|
3
|
+
* Wraps a mongodb ClientSession to conform to the shared IClientSession interface
|
|
4
|
+
* from brightchain-lib.
|
|
5
|
+
* @module services/mongoose-session-adapter
|
|
6
|
+
*/
|
|
7
|
+
import type { IClientSession } from '@digitaldefiance/suite-core-lib';
|
|
8
|
+
import type { ClientSession } from 'mongodb';
|
|
9
|
+
/**
|
|
10
|
+
* Adapts a mongodb ClientSession to the IClientSession interface.
|
|
11
|
+
* This allows mongoose-based transaction code to work through the
|
|
12
|
+
* shared interface contract.
|
|
13
|
+
*/
|
|
14
|
+
export declare class MongooseSessionAdapter implements IClientSession {
|
|
15
|
+
private readonly _session;
|
|
16
|
+
constructor(session: ClientSession);
|
|
17
|
+
/**
|
|
18
|
+
* Unique session ID as a string.
|
|
19
|
+
* Falls back to 'unknown' if the session has no server session yet.
|
|
20
|
+
*/
|
|
21
|
+
get id(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Whether a transaction is currently active on this session.
|
|
24
|
+
*/
|
|
25
|
+
get inTransaction(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Get the underlying mongodb ClientSession for passing to mongoose operations.
|
|
28
|
+
*/
|
|
29
|
+
get nativeSession(): ClientSession;
|
|
30
|
+
/** Start a new transaction on this session. */
|
|
31
|
+
startTransaction(): void;
|
|
32
|
+
/** Commit the current transaction. */
|
|
33
|
+
commitTransaction(): Promise<void>;
|
|
34
|
+
/** Abort the current transaction. */
|
|
35
|
+
abortTransaction(): Promise<void>;
|
|
36
|
+
/** End this session, releasing server resources. */
|
|
37
|
+
endSession(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=mongoose-session-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoose-session-adapter.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/mongoose-session-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,OAAO,EAAE,aAAa;IAIlC;;;OAGG;IACH,IAAI,EAAE,IAAI,MAAM,CAMf;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,aAAa,CAEjC;IAED,+CAA+C;IAC/C,gBAAgB,IAAI,IAAI;IAIxB,sCAAsC;IAChC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,qCAAqC;IAC/B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC,oDAAoD;IACpD,UAAU,IAAI,IAAI;CAKnB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Mongoose session adapter implementing IClientSession.
|
|
4
|
+
* Wraps a mongodb ClientSession to conform to the shared IClientSession interface
|
|
5
|
+
* from brightchain-lib.
|
|
6
|
+
* @module services/mongoose-session-adapter
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MongooseSessionAdapter = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Adapts a mongodb ClientSession to the IClientSession interface.
|
|
12
|
+
* This allows mongoose-based transaction code to work through the
|
|
13
|
+
* shared interface contract.
|
|
14
|
+
*/
|
|
15
|
+
class MongooseSessionAdapter {
|
|
16
|
+
_session;
|
|
17
|
+
constructor(session) {
|
|
18
|
+
this._session = session;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Unique session ID as a string.
|
|
22
|
+
* Falls back to 'unknown' if the session has no server session yet.
|
|
23
|
+
*/
|
|
24
|
+
get id() {
|
|
25
|
+
const sessionId = this._session.id;
|
|
26
|
+
if (sessionId?.id) {
|
|
27
|
+
return sessionId.id.toString('hex');
|
|
28
|
+
}
|
|
29
|
+
return 'unknown';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Whether a transaction is currently active on this session.
|
|
33
|
+
*/
|
|
34
|
+
get inTransaction() {
|
|
35
|
+
return this._session.inTransaction();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the underlying mongodb ClientSession for passing to mongoose operations.
|
|
39
|
+
*/
|
|
40
|
+
get nativeSession() {
|
|
41
|
+
return this._session;
|
|
42
|
+
}
|
|
43
|
+
/** Start a new transaction on this session. */
|
|
44
|
+
startTransaction() {
|
|
45
|
+
this._session.startTransaction();
|
|
46
|
+
}
|
|
47
|
+
/** Commit the current transaction. */
|
|
48
|
+
async commitTransaction() {
|
|
49
|
+
await this._session.commitTransaction();
|
|
50
|
+
}
|
|
51
|
+
/** Abort the current transaction. */
|
|
52
|
+
async abortTransaction() {
|
|
53
|
+
await this._session.abortTransaction();
|
|
54
|
+
}
|
|
55
|
+
/** End this session, releasing server resources. */
|
|
56
|
+
endSession() {
|
|
57
|
+
// mongodb's endSession returns Promise<void>, but IClientSession declares void.
|
|
58
|
+
// Fire and forget — the session cleanup is best-effort.
|
|
59
|
+
void this._session.endSession();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.MongooseSessionAdapter = MongooseSessionAdapter;
|
|
63
|
+
//# sourceMappingURL=mongoose-session-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoose-session-adapter.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/mongoose-session-adapter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAKH;;;;GAIG;AACH,MAAa,sBAAsB;IAChB,QAAQ,CAAgB;IAEzC,YAAY,OAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,EAAE;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,IAAI,SAAS,EAAE,EAAE,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,+CAA+C;IAC/C,gBAAgB;QACd,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC;IAED,oDAAoD;IACpD,UAAU;QACR,gFAAgF;QAChF,wDAAwD;QACxD,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;CACF;AAtDD,wDAsDC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service for transforming user documents into request user DTOs and backend objects.
|
|
3
|
+
* Handles serialization and deserialization of user data for API requests and JWT tokens.
|
|
4
|
+
* @module services/request-user
|
|
5
|
+
*/
|
|
6
|
+
import { IRequestUserDTO, ITokenRole } from '@digitaldefiance/suite-core-lib';
|
|
7
|
+
import { UserDocument } from '../documents';
|
|
8
|
+
import type { IRequestUserBackendObject } from '@digitaldefiance/node-express-suite';
|
|
9
|
+
import { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
10
|
+
/**
|
|
11
|
+
* Service for converting between user documents, DTOs, and backend objects.
|
|
12
|
+
* Provides transformation methods for user data in different contexts (API, JWT, database).
|
|
13
|
+
*/
|
|
14
|
+
export declare class RequestUserService<TID extends PlatformID, _TTokenRole extends ITokenRole<TID>> {
|
|
15
|
+
static makeRequestUserDTO<TID extends PlatformID, TLanguage extends string, TTokenRole extends ITokenRole<TID>, TRequestUserDTO extends IRequestUserDTO>(userDoc: UserDocument<TLanguage, TID> | (Pick<UserDocument<TLanguage, TID>, keyof UserDocument<TLanguage, TID>> & {
|
|
16
|
+
_id: PlatformID;
|
|
17
|
+
}), roles: TTokenRole[]): TRequestUserDTO;
|
|
18
|
+
static hydrateRequestUser<TID extends PlatformID, TLanguage extends string, TRequestUserDTO extends IRequestUserDTO & {
|
|
19
|
+
siteLanguage: TLanguage;
|
|
20
|
+
}>(requestUser: TRequestUserDTO): IRequestUserBackendObject<TLanguage, TID>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=request-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-user.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/request-user.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EAEf,UAAU,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAErF,OAAO,EAEL,UAAU,EACX,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,qBAAa,kBAAkB,CAC7B,GAAG,SAAS,UAAU,EACtB,WAAW,SAAS,UAAU,CAAC,GAAG,CAAC;WAErB,kBAAkB,CAC9B,GAAG,SAAS,UAAU,EACtB,SAAS,SAAS,MAAM,EACxB,UAAU,SAAS,UAAU,CAAC,GAAG,CAAC,EAClC,eAAe,SAAS,eAAe,EAEvC,OAAO,EACH,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,GAC5B,CAAC,IAAI,CACH,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,EAC5B,MAAM,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CACnC,GAAG;QACF,GAAG,EAAE,UAAU,CAAC;KACjB,CAAC,EACN,KAAK,EAAE,UAAU,EAAE,GAClB,eAAe;WA6BJ,kBAAkB,CAC9B,GAAG,SAAS,UAAU,EACtB,SAAS,SAAS,MAAM,EACxB,eAAe,SAAS,eAAe,GAAG;QAAE,YAAY,EAAE,SAAS,CAAA;KAAE,EACrE,WAAW,EAAE,eAAe,GAAG,yBAAyB,CAAC,SAAS,EAAE,GAAG,CAAC;CA2B3E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Service for transforming user documents into request user DTOs and backend objects.
|
|
4
|
+
* Handles serialization and deserialization of user data for API requests and JWT tokens.
|
|
5
|
+
* @module services/request-user
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.RequestUserService = void 0;
|
|
9
|
+
const role_1 = require("./role");
|
|
10
|
+
const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
|
|
11
|
+
/**
|
|
12
|
+
* Service for converting between user documents, DTOs, and backend objects.
|
|
13
|
+
* Provides transformation methods for user data in different contexts (API, JWT, database).
|
|
14
|
+
*/
|
|
15
|
+
class RequestUserService {
|
|
16
|
+
static makeRequestUserDTO(userDoc, roles) {
|
|
17
|
+
if (!userDoc._id) {
|
|
18
|
+
throw new Error('User document is missing _id');
|
|
19
|
+
}
|
|
20
|
+
const rolePrivileges = {
|
|
21
|
+
admin: roles.some((r) => r.admin),
|
|
22
|
+
member: roles.some((r) => r.member),
|
|
23
|
+
child: roles.some((r) => r.child),
|
|
24
|
+
system: roles.some((r) => r.system),
|
|
25
|
+
};
|
|
26
|
+
const provider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
|
|
27
|
+
return {
|
|
28
|
+
id: provider.idToString(userDoc._id),
|
|
29
|
+
email: userDoc.email,
|
|
30
|
+
roles: roles.map((r) => role_1.RoleService.roleToRoleDTO(r)),
|
|
31
|
+
rolePrivileges,
|
|
32
|
+
username: userDoc.username,
|
|
33
|
+
timezone: userDoc.timezone,
|
|
34
|
+
currency: userDoc.currency,
|
|
35
|
+
directChallenge: userDoc.directChallenge,
|
|
36
|
+
emailVerified: userDoc.emailVerified,
|
|
37
|
+
darkMode: userDoc.darkMode,
|
|
38
|
+
siteLanguage: userDoc.siteLanguage,
|
|
39
|
+
...(userDoc.lastLogin && { lastLogin: userDoc.lastLogin.toString() }),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
static hydrateRequestUser(requestUser) {
|
|
43
|
+
const provider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
|
|
44
|
+
const convert = (id) => provider.idFromString(id);
|
|
45
|
+
const hydratedRoles = requestUser.roles.map((role) => role_1.RoleService.hydrateRoleDTOToBackend(role));
|
|
46
|
+
const hydratedUser = {
|
|
47
|
+
id: convert(requestUser.id),
|
|
48
|
+
email: requestUser.email,
|
|
49
|
+
roles: hydratedRoles,
|
|
50
|
+
rolePrivileges: requestUser.rolePrivileges,
|
|
51
|
+
username: requestUser.username,
|
|
52
|
+
timezone: requestUser.timezone,
|
|
53
|
+
currency: requestUser.currency,
|
|
54
|
+
directChallenge: requestUser.directChallenge,
|
|
55
|
+
emailVerified: requestUser.emailVerified,
|
|
56
|
+
darkMode: requestUser.darkMode,
|
|
57
|
+
siteLanguage: requestUser.siteLanguage,
|
|
58
|
+
};
|
|
59
|
+
if (requestUser.lastLogin) {
|
|
60
|
+
hydratedUser.lastLogin = new Date(requestUser.lastLogin);
|
|
61
|
+
}
|
|
62
|
+
return hydratedUser;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.RequestUserService = RequestUserService;
|
|
66
|
+
//# sourceMappingURL=request-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-user.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/request-user.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AASH,iCAAqC;AACrC,oEAGyC;AAEzC;;;GAGG;AACH,MAAa,kBAAkB;IAItB,MAAM,CAAC,kBAAkB,CAM9B,OAOM,EACN,KAAmB;QAEnB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,cAAc,GAAG;YACrB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACjC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACnC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACjC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SACpC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAA,0CAAyB,GAAO,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACrD,cAAc;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAsB;YAC5C,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;SACnD,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAI9B,WAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAA,0CAAyB,GAAO,CAAC;QAClD,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAc,EAAE,EAAE,CAC7D,kBAAW,CAAC,uBAAuB,CAAM,IAAI,CAAC,CAC/C,CAAC;QAEF,MAAM,YAAY,GAA8C;YAC9D,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,aAAa;YACpB,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAC;QAEF,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,YAAY,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA/ED,gDA+EC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Role-based access control (RBAC) service.
|
|
3
|
+
* Manages roles, user-role relationships, and permission checks.
|
|
4
|
+
* @module services/role
|
|
5
|
+
*/
|
|
6
|
+
import { MemberType } from '@digitaldefiance/ecies-lib';
|
|
7
|
+
import { ClientSession } from '@digitaldefiance/mongoose-types';
|
|
8
|
+
import { IRoleBase, ITokenRole, ITokenRoleDTO, Role } from '@digitaldefiance/suite-core-lib';
|
|
9
|
+
import { UserDocument } from '../documents';
|
|
10
|
+
import { RoleDocument } from '../documents/role';
|
|
11
|
+
import { UserRoleDocument } from '../documents/user-role';
|
|
12
|
+
import type { IApplication } from '@digitaldefiance/node-express-suite';
|
|
13
|
+
import type { IRoleBackendObject } from '@digitaldefiance/node-express-suite';
|
|
14
|
+
import { BaseService } from '@digitaldefiance/node-express-suite';
|
|
15
|
+
import { type PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
16
|
+
/**
|
|
17
|
+
* Service for managing roles and role-based access control.
|
|
18
|
+
* Handles role creation, user-role assignments, and permission queries.
|
|
19
|
+
* @template TID - Platform ID type (defaults to Buffer)
|
|
20
|
+
* @template TDate - Date type (defaults to Date)
|
|
21
|
+
* @template TTokenRole - Token role interface type
|
|
22
|
+
* @extends {BaseService<TID>}
|
|
23
|
+
*/
|
|
24
|
+
export declare class RoleService<TID extends PlatformID = Buffer, TDate extends Date = Date, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>> extends BaseService<TID> {
|
|
25
|
+
/**
|
|
26
|
+
* Constructor for the role service
|
|
27
|
+
* @param application The application object
|
|
28
|
+
*/
|
|
29
|
+
constructor(application: IApplication<TID>);
|
|
30
|
+
static roleToRoleDTO<TID extends PlatformID = Buffer, TDate extends Date = Date>(role: ITokenRole<TID, TDate> | RoleDocument<TID> | Partial<IRoleBase<TID>>): ITokenRoleDTO;
|
|
31
|
+
/**
|
|
32
|
+
* Given a Role DTO, reconstitute ids and dates
|
|
33
|
+
* @param role The Role DTO
|
|
34
|
+
* @returns An IRoleBackendObject
|
|
35
|
+
*/
|
|
36
|
+
static hydrateRoleDTOToBackend<TID extends PlatformID = Buffer>(role: ITokenRoleDTO): IRoleBackendObject<TID>;
|
|
37
|
+
/**
|
|
38
|
+
* Gets the role ID by name
|
|
39
|
+
* @param roleName The name of the role
|
|
40
|
+
* @returns The role ID or null if not found
|
|
41
|
+
*/
|
|
42
|
+
getRoleIdByName(roleName: Role, session?: ClientSession): Promise<TID | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Creates a new role
|
|
45
|
+
* @param roleData The role data
|
|
46
|
+
* @param session Optional mongoose session
|
|
47
|
+
* @returns The created role document
|
|
48
|
+
*/
|
|
49
|
+
createRole(roleData: IRoleBase<TID, TDate, Role>, session?: ClientSession | null): Promise<RoleDocument<TID>>;
|
|
50
|
+
/**
|
|
51
|
+
* Adds a user to a role
|
|
52
|
+
* @param roleId - The role id
|
|
53
|
+
* @param userId - The user id
|
|
54
|
+
* @param createdBy - The user creating the relationship
|
|
55
|
+
* @param session Optional mongoose session
|
|
56
|
+
*/
|
|
57
|
+
addUserToRole(roleId: TID, userId: TID, createdBy: TID, session?: ClientSession, overrideId?: TID): Promise<UserRoleDocument<TID>>;
|
|
58
|
+
/**
|
|
59
|
+
* Removes a user from a role
|
|
60
|
+
* @param roleId - The role id
|
|
61
|
+
* @param userId - The user id
|
|
62
|
+
* @param deletedBy - The user removing the relationship
|
|
63
|
+
* @param session Optional mongoose session
|
|
64
|
+
* @throws LastAdminError if attempting to remove the last admin
|
|
65
|
+
*/
|
|
66
|
+
removeUserFromRole(roleId: TID, userId: TID, deletedBy: TID, session?: ClientSession): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Deletes a role by ID
|
|
69
|
+
* @param roleId The role ID
|
|
70
|
+
* @param deleter The ID of the user deleting the role
|
|
71
|
+
* @param hardDelete Whether to hard delete the role
|
|
72
|
+
* @param session Optional mongoose session
|
|
73
|
+
*/
|
|
74
|
+
deleteRole(roleId: TID, deleter: TID, hardDelete: boolean, session?: ClientSession): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Gets all roles for a user
|
|
77
|
+
* @param userId The user ID
|
|
78
|
+
* @param session Optional mongoose session
|
|
79
|
+
* @returns The roles the user is a member of
|
|
80
|
+
*/
|
|
81
|
+
getUserRoles(userId: TID, session?: ClientSession): Promise<RoleDocument<TID>[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Gets all users for a role
|
|
84
|
+
* @param roleId The role ID
|
|
85
|
+
* @param session Optional mongoose session
|
|
86
|
+
* @returns The user IDs that are members of the role
|
|
87
|
+
*/
|
|
88
|
+
getRoleUsers(roleId: TID, session?: ClientSession): Promise<TID[]>;
|
|
89
|
+
/** Convert roles to translated TokenRoles */
|
|
90
|
+
rolesToTokenRoles(roles: Array<IRoleBackendObject<TID>>, overrideLanguage?: string): Array<TTokenRole>;
|
|
91
|
+
isUserAdmin(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
|
|
92
|
+
isUserMember(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
|
|
93
|
+
isUserChild(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
|
|
94
|
+
isSystemUser(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
|
|
95
|
+
getMemberType(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<MemberType>;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=role.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/role.ts"],"names":[],"mappings":"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"}
|