@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,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Mongoose/MongoDB database plugin.
|
|
3
|
+
* Extracts all Mongo-specific database lifecycle
|
|
4
|
+
* into a plugin that can be registered on any Application instance.
|
|
5
|
+
* @module plugins/mongo-database-plugin
|
|
6
|
+
*/
|
|
7
|
+
import { Model } from '@digitaldefiance/mongoose-types';
|
|
8
|
+
import mongoose from '@digitaldefiance/mongoose-types';
|
|
9
|
+
import { IFailableResult } from '@digitaldefiance/suite-core-lib';
|
|
10
|
+
import { MongoMemoryReplSet } from 'mongodb-memory-server';
|
|
11
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
12
|
+
import type { IDatabase } from '@digitaldefiance/suite-core-lib';
|
|
13
|
+
import type { IAuthenticationProvider } from '@digitaldefiance/node-express-suite';
|
|
14
|
+
import type { IApplication } from '@digitaldefiance/node-express-suite';
|
|
15
|
+
import type { IConstants } from '@digitaldefiance/node-express-suite';
|
|
16
|
+
import type { IDatabasePlugin } from '@digitaldefiance/node-express-suite';
|
|
17
|
+
import { Environment } from '@digitaldefiance/node-express-suite';
|
|
18
|
+
import type { BaseDocument } from '../documents/base';
|
|
19
|
+
import type { IDocumentStore } from '../interfaces/mongoose-document-store';
|
|
20
|
+
import type { IMongoApplication } from '../interfaces/mongo-application';
|
|
21
|
+
import type { SchemaMap } from '../types';
|
|
22
|
+
/**
|
|
23
|
+
* Options for constructing a MongoDatabasePlugin.
|
|
24
|
+
*/
|
|
25
|
+
export interface MongoDatabasePluginOptions<TID extends PlatformID, TModelDocs extends Record<string, BaseDocument<any, TID>>, TInitResults, TConstants extends IConstants = IConstants> {
|
|
26
|
+
schemaMapFactory: (connection: mongoose.Connection) => SchemaMap<TID, TModelDocs>;
|
|
27
|
+
databaseInitFunction: (application: IMongoApplication<TID>) => Promise<IFailableResult<TInitResults>>;
|
|
28
|
+
initResultHashFunction: (initResults: TInitResults) => string;
|
|
29
|
+
environment: Environment<TID>;
|
|
30
|
+
constants?: TConstants;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Mongoose/MongoDB database plugin.
|
|
34
|
+
*
|
|
35
|
+
* Wraps a MongooseDocumentStore and exposes Mongoose-specific accessors
|
|
36
|
+
* (db, getModel, schemaMap, devDatabase) while conforming to the
|
|
37
|
+
* IDatabasePlugin contract for pluggable database backends.
|
|
38
|
+
*
|
|
39
|
+
* @template TID - Platform ID type
|
|
40
|
+
* @template TModelDocs - Record mapping model names to document types
|
|
41
|
+
* @template TInitResults - Database initialization result type
|
|
42
|
+
* @template TConstants - Application constants type
|
|
43
|
+
*/
|
|
44
|
+
export declare class MongoDatabasePlugin<TID extends PlatformID, TModelDocs extends Record<string, BaseDocument<any, TID>>, TInitResults, TConstants extends IConstants = IConstants> implements IDatabasePlugin<TID> {
|
|
45
|
+
readonly name = "mongo-database";
|
|
46
|
+
readonly version = "1.0.0";
|
|
47
|
+
private readonly _documentStore;
|
|
48
|
+
private readonly _environment;
|
|
49
|
+
private _authProvider;
|
|
50
|
+
private _application;
|
|
51
|
+
private _lastInitResult;
|
|
52
|
+
constructor(options: MongoDatabasePluginOptions<TID, TModelDocs, TInitResults, TConstants>);
|
|
53
|
+
/**
|
|
54
|
+
* Construct from an existing IDocumentStore instance.
|
|
55
|
+
*/
|
|
56
|
+
static fromDocumentStore<TID extends PlatformID, TModelDocs extends Record<string, BaseDocument<any, TID>>, TInitResults, TConstants extends IConstants = IConstants>(documentStore: IDocumentStore<TID, TModelDocs>, environment: Environment<TID>): MongoDatabasePlugin<TID, TModelDocs, TInitResults, TConstants>;
|
|
57
|
+
/**
|
|
58
|
+
* The IDatabase instance. For Mongo, this is a no-op adapter since
|
|
59
|
+
* the document store manages its own connection lifecycle.
|
|
60
|
+
*/
|
|
61
|
+
get database(): IDatabase;
|
|
62
|
+
get authenticationProvider(): IAuthenticationProvider<TID> | undefined;
|
|
63
|
+
connect(uri?: string): Promise<void>;
|
|
64
|
+
disconnect(): Promise<void>;
|
|
65
|
+
isConnected(): boolean;
|
|
66
|
+
setupDevStore(): Promise<string>;
|
|
67
|
+
teardownDevStore(): Promise<void>;
|
|
68
|
+
initializeDevStore(): Promise<TInitResults | undefined>;
|
|
69
|
+
/**
|
|
70
|
+
* Get the result of the last initializeDevStore call.
|
|
71
|
+
* Available after start() completes in dev mode.
|
|
72
|
+
*/
|
|
73
|
+
get lastInitResult(): TInitResults | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Get the IMongoApplication adapter created during init().
|
|
76
|
+
* This adapter delegates Mongo-specific accessors (db, getModel) to the plugin
|
|
77
|
+
* and everything else to the real application. Use this when constructing
|
|
78
|
+
* services that need IMongoApplication (e.g. UserService, RoleService).
|
|
79
|
+
* Available after init() has been called.
|
|
80
|
+
*/
|
|
81
|
+
get mongoApplication(): IMongoApplication<TID> | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Called by PluginManager during Application.start().
|
|
84
|
+
* Wires up the Mongoose-backed authentication provider.
|
|
85
|
+
*/
|
|
86
|
+
init(app: IApplication<TID>): Promise<void>;
|
|
87
|
+
stop(): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Get the Mongoose database instance.
|
|
90
|
+
*/
|
|
91
|
+
get db(): typeof mongoose;
|
|
92
|
+
/**
|
|
93
|
+
* Get the schema map for all models.
|
|
94
|
+
*/
|
|
95
|
+
get schemaMap(): SchemaMap<TID, TModelDocs>;
|
|
96
|
+
/**
|
|
97
|
+
* Get the in-memory MongoDB instance (if any).
|
|
98
|
+
*/
|
|
99
|
+
get devDatabase(): MongoMemoryReplSet | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Get the underlying document store.
|
|
102
|
+
*/
|
|
103
|
+
get documentStore(): IDocumentStore<TID, TModelDocs>;
|
|
104
|
+
/**
|
|
105
|
+
* Get a Mongoose model by name.
|
|
106
|
+
*/
|
|
107
|
+
getModel<T extends BaseDocument<any, TID>>(modelName: string): Model<T>;
|
|
108
|
+
getModel<U>(modelName: string): U | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Creates a lightweight adapter that satisfies IMongoApplication
|
|
111
|
+
* by delegating to the plugin for Mongo-specific accessors and
|
|
112
|
+
* to the real app for everything else.
|
|
113
|
+
*/
|
|
114
|
+
private createMongoAppAdapter;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=mongo-database-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo-database-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/plugins/mongo-database-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Mongoose/MongoDB database plugin.
|
|
4
|
+
* Extracts all Mongo-specific database lifecycle
|
|
5
|
+
* into a plugin that can be registered on any Application instance.
|
|
6
|
+
* @module plugins/mongo-database-plugin
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MongoDatabasePlugin = void 0;
|
|
10
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
11
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
12
|
+
const mongoose_document_store_1 = require("../services/mongoose-document-store");
|
|
13
|
+
const mongo_authentication_provider_1 = require("../services/mongo-authentication-provider");
|
|
14
|
+
const database_initialization_1 = require("../services/database-initialization");
|
|
15
|
+
/**
|
|
16
|
+
* Mongoose/MongoDB database plugin.
|
|
17
|
+
*
|
|
18
|
+
* Wraps a MongooseDocumentStore and exposes Mongoose-specific accessors
|
|
19
|
+
* (db, getModel, schemaMap, devDatabase) while conforming to the
|
|
20
|
+
* IDatabasePlugin contract for pluggable database backends.
|
|
21
|
+
*
|
|
22
|
+
* @template TID - Platform ID type
|
|
23
|
+
* @template TModelDocs - Record mapping model names to document types
|
|
24
|
+
* @template TInitResults - Database initialization result type
|
|
25
|
+
* @template TConstants - Application constants type
|
|
26
|
+
*/
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
class MongoDatabasePlugin {
|
|
29
|
+
name = 'mongo-database';
|
|
30
|
+
version = '1.0.0';
|
|
31
|
+
_documentStore;
|
|
32
|
+
_environment;
|
|
33
|
+
_authProvider;
|
|
34
|
+
_application;
|
|
35
|
+
_lastInitResult;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
const constants = options.constants ?? suite_core_lib_1.Constants;
|
|
38
|
+
this._documentStore = new mongoose_document_store_1.MongooseDocumentStore(options.schemaMapFactory, options.databaseInitFunction, options.initResultHashFunction, options.environment, constants);
|
|
39
|
+
this._environment = options.environment;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Construct from an existing IDocumentStore instance.
|
|
43
|
+
*/
|
|
44
|
+
static fromDocumentStore(documentStore, environment) {
|
|
45
|
+
const plugin = Object.create(MongoDatabasePlugin.prototype);
|
|
46
|
+
Object.defineProperty(plugin, '_documentStore', {
|
|
47
|
+
value: documentStore,
|
|
48
|
+
writable: false,
|
|
49
|
+
});
|
|
50
|
+
Object.defineProperty(plugin, '_environment', {
|
|
51
|
+
value: environment,
|
|
52
|
+
writable: false,
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(plugin, 'name', {
|
|
55
|
+
value: 'mongo-database',
|
|
56
|
+
writable: false,
|
|
57
|
+
});
|
|
58
|
+
Object.defineProperty(plugin, 'version', {
|
|
59
|
+
value: '1.0.0',
|
|
60
|
+
writable: false,
|
|
61
|
+
});
|
|
62
|
+
return plugin;
|
|
63
|
+
}
|
|
64
|
+
// ── IDatabasePlugin contract ──
|
|
65
|
+
/**
|
|
66
|
+
* The IDatabase instance. For Mongo, this is a no-op adapter since
|
|
67
|
+
* the document store manages its own connection lifecycle.
|
|
68
|
+
*/
|
|
69
|
+
get database() {
|
|
70
|
+
return (0, node_express_suite_1.createNoOpDatabase)();
|
|
71
|
+
}
|
|
72
|
+
get authenticationProvider() {
|
|
73
|
+
return this._authProvider;
|
|
74
|
+
}
|
|
75
|
+
async connect(uri) {
|
|
76
|
+
// Handle dev database setup
|
|
77
|
+
if (this._environment.devDatabase && !this._documentStore.devDatabase) {
|
|
78
|
+
if (this._documentStore.setupDevStore) {
|
|
79
|
+
const devUri = await this._documentStore.setupDevStore();
|
|
80
|
+
if (devUri) {
|
|
81
|
+
uri = devUri;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const resolvedUri = uri ?? this._environment.mongo?.['uri'];
|
|
86
|
+
await this._documentStore.connect(resolvedUri);
|
|
87
|
+
}
|
|
88
|
+
async disconnect() {
|
|
89
|
+
await this._documentStore.disconnect();
|
|
90
|
+
if (this._documentStore.devDatabase) {
|
|
91
|
+
await this._documentStore.devDatabase.stop();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
isConnected() {
|
|
95
|
+
return this._documentStore.isConnected();
|
|
96
|
+
}
|
|
97
|
+
async setupDevStore() {
|
|
98
|
+
if (this._documentStore.setupDevStore) {
|
|
99
|
+
const uri = await this._documentStore.setupDevStore();
|
|
100
|
+
return uri ?? '';
|
|
101
|
+
}
|
|
102
|
+
return '';
|
|
103
|
+
}
|
|
104
|
+
async teardownDevStore() {
|
|
105
|
+
if (this._documentStore.devDatabase) {
|
|
106
|
+
await this._documentStore.devDatabase.stop();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async initializeDevStore() {
|
|
110
|
+
if (this._documentStore.initializeDevStore && this._application) {
|
|
111
|
+
const result = await this._documentStore.initializeDevStore(this._application);
|
|
112
|
+
database_initialization_1.DatabaseInitializationService.printServerInitResults(result, false);
|
|
113
|
+
this._lastInitResult = result;
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get the result of the last initializeDevStore call.
|
|
120
|
+
* Available after start() completes in dev mode.
|
|
121
|
+
*/
|
|
122
|
+
get lastInitResult() {
|
|
123
|
+
return this._lastInitResult;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get the IMongoApplication adapter created during init().
|
|
127
|
+
* This adapter delegates Mongo-specific accessors (db, getModel) to the plugin
|
|
128
|
+
* and everything else to the real application. Use this when constructing
|
|
129
|
+
* services that need IMongoApplication (e.g. UserService, RoleService).
|
|
130
|
+
* Available after init() has been called.
|
|
131
|
+
*/
|
|
132
|
+
get mongoApplication() {
|
|
133
|
+
return this._application;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Called by PluginManager during Application.start().
|
|
137
|
+
* Wires up the Mongoose-backed authentication provider.
|
|
138
|
+
*/
|
|
139
|
+
async init(app) {
|
|
140
|
+
// Wire up auth provider if the app exposes IMongoApplication-compatible interface
|
|
141
|
+
// We create a lightweight adapter that satisfies IMongoApplication
|
|
142
|
+
const mongoAppAdapter = this.createMongoAppAdapter(app);
|
|
143
|
+
// Store the adapter (not the raw app) so that initializeDevStore
|
|
144
|
+
// passes an IMongoApplication with getModel/db to the init function.
|
|
145
|
+
this._application = mongoAppAdapter;
|
|
146
|
+
this._authProvider = new mongo_authentication_provider_1.MongoAuthenticationProvider(mongoAppAdapter);
|
|
147
|
+
// Set the auth provider on the application
|
|
148
|
+
if ('authProvider' in app && app.authProvider === undefined) {
|
|
149
|
+
app.authProvider = this._authProvider;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async stop() {
|
|
153
|
+
await this.disconnect();
|
|
154
|
+
}
|
|
155
|
+
// ── Mongo-specific accessors ──
|
|
156
|
+
/**
|
|
157
|
+
* Get the Mongoose database instance.
|
|
158
|
+
*/
|
|
159
|
+
get db() {
|
|
160
|
+
if (this._documentStore instanceof mongoose_document_store_1.MongooseDocumentStore) {
|
|
161
|
+
return this._documentStore.db;
|
|
162
|
+
}
|
|
163
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_DatabaseNotConnectedYet);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get the schema map for all models.
|
|
167
|
+
*/
|
|
168
|
+
get schemaMap() {
|
|
169
|
+
const map = this._documentStore.schemaMap;
|
|
170
|
+
if (!map) {
|
|
171
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_SchemaMapIsNotLoadedYet);
|
|
172
|
+
}
|
|
173
|
+
return map;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get the in-memory MongoDB instance (if any).
|
|
177
|
+
*/
|
|
178
|
+
get devDatabase() {
|
|
179
|
+
return this._documentStore.devDatabase;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get the underlying document store.
|
|
183
|
+
*/
|
|
184
|
+
get documentStore() {
|
|
185
|
+
return this._documentStore;
|
|
186
|
+
}
|
|
187
|
+
getModel(modelName) {
|
|
188
|
+
return this._documentStore.getModel(modelName);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Creates a lightweight adapter that satisfies IMongoApplication
|
|
192
|
+
* by delegating to the plugin for Mongo-specific accessors and
|
|
193
|
+
* to the real app for everything else.
|
|
194
|
+
*/
|
|
195
|
+
createMongoAppAdapter(app) {
|
|
196
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
197
|
+
const plugin = this;
|
|
198
|
+
return {
|
|
199
|
+
get environment() {
|
|
200
|
+
return app.environment;
|
|
201
|
+
},
|
|
202
|
+
get constants() {
|
|
203
|
+
return app.constants;
|
|
204
|
+
},
|
|
205
|
+
get ready() {
|
|
206
|
+
return app.ready;
|
|
207
|
+
},
|
|
208
|
+
get services() {
|
|
209
|
+
return app.services;
|
|
210
|
+
},
|
|
211
|
+
get plugins() {
|
|
212
|
+
return app.plugins;
|
|
213
|
+
},
|
|
214
|
+
get database() {
|
|
215
|
+
return app.database;
|
|
216
|
+
},
|
|
217
|
+
get authProvider() {
|
|
218
|
+
return app.authProvider;
|
|
219
|
+
},
|
|
220
|
+
start: () => app.start(),
|
|
221
|
+
get db() {
|
|
222
|
+
return plugin.db;
|
|
223
|
+
},
|
|
224
|
+
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
225
|
+
getModel: (modelName) => plugin.getModel(modelName),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
exports.MongoDatabasePlugin = MongoDatabasePlugin;
|
|
230
|
+
//# sourceMappingURL=mongo-database-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo-database-plugin.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/plugins/mongo-database-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview API router configuration with dependency injection and service registration.
|
|
3
|
+
* Manages user controller and all required services for API endpoints.
|
|
4
|
+
* @module routers/api
|
|
5
|
+
*/
|
|
6
|
+
import { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
7
|
+
import { ITokenRole, ITokenUser, IUserBase } from '@digitaldefiance/suite-core-lib';
|
|
8
|
+
import { Environment, IConstants, BaseRouter } from '@digitaldefiance/node-express-suite';
|
|
9
|
+
import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
|
|
10
|
+
import { BaseDocument } from '../documents';
|
|
11
|
+
import { IMongoApplication } from '../interfaces/mongo-application';
|
|
12
|
+
/**
|
|
13
|
+
* Router for the API endpoints.
|
|
14
|
+
* Manages user controller and registers all required services via dependency injection.
|
|
15
|
+
*/
|
|
16
|
+
export declare class ApiRouter<TID extends PlatformID, TDate extends Date, TLanguage extends CoreLanguageCode, TAccountStatus extends string, TUser extends IUserBase<TID, TDate, TLanguage, TAccountStatus> = IUserBase<TID, TDate, TLanguage, TAccountStatus>, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>, TBaseDocument extends BaseDocument<any, TID> = BaseDocument<any, TID>, TTokenUser extends ITokenUser = ITokenUser, TConstants extends IConstants = IConstants, TEnvironment extends Environment<TID> = Environment<TID>, TApplication extends IMongoApplication<TID> = IMongoApplication<TID>> extends BaseRouter<TID, TApplication> {
|
|
17
|
+
private readonly openApiController;
|
|
18
|
+
private readonly userController;
|
|
19
|
+
private readonly jwtService;
|
|
20
|
+
private readonly emailService;
|
|
21
|
+
private readonly userService;
|
|
22
|
+
private readonly roleService;
|
|
23
|
+
private readonly keyWrappingService;
|
|
24
|
+
private readonly eciesService;
|
|
25
|
+
private readonly backupCodeService;
|
|
26
|
+
constructor(application: TApplication, docsRoute?: string | undefined);
|
|
27
|
+
private registerServices;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACV,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,WAAW,EACX,UAAU,EACV,UAAU,EAGX,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAMpE;;;GAGG;AACH,qBAAa,SAAS,CACpB,GAAG,SAAS,UAAU,EACtB,KAAK,SAAS,IAAI,EAClB,SAAS,SAAS,gBAAgB,EAClC,cAAc,SAAS,MAAM,EAC7B,KAAK,SAAS,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,SAAS,CACxE,GAAG,EACH,KAAK,EACL,SAAS,EACT,cAAc,CACf,EACD,UAAU,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAClE,aAAa,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EACrE,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1C,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1C,YAAY,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,EACxD,YAAY,SAAS,iBAAiB,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CACpE,SAAQ,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAS7B;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAMzB;IACF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAY1B;IACF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;gBAGA,WAAW,EAAE,YAAY,EACzB,SAAS,GAAE,MAAM,GAAG,SAAsB;IAuC5C,OAAO,CAAC,gBAAgB;CAmFzB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview API router configuration with dependency injection and service registration.
|
|
4
|
+
* Manages user controller and all required services for API endpoints.
|
|
5
|
+
* @module routers/api
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ApiRouter = void 0;
|
|
9
|
+
const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
|
|
10
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
11
|
+
const node_express_suite_2 = require("@digitaldefiance/node-express-suite");
|
|
12
|
+
const user_1 = require("../controllers/user");
|
|
13
|
+
const backup_code_1 = require("../services/backup-code");
|
|
14
|
+
const jwt_1 = require("../services/jwt");
|
|
15
|
+
const role_1 = require("../services/role");
|
|
16
|
+
const user_2 = require("../services/user");
|
|
17
|
+
/**
|
|
18
|
+
* Router for the API endpoints.
|
|
19
|
+
* Manages user controller and registers all required services via dependency injection.
|
|
20
|
+
*/
|
|
21
|
+
class ApiRouter extends node_express_suite_1.BaseRouter {
|
|
22
|
+
openApiController;
|
|
23
|
+
userController;
|
|
24
|
+
jwtService;
|
|
25
|
+
emailService;
|
|
26
|
+
userService;
|
|
27
|
+
roleService;
|
|
28
|
+
keyWrappingService;
|
|
29
|
+
eciesService;
|
|
30
|
+
backupCodeService;
|
|
31
|
+
constructor(application, docsRoute = '/openapi') {
|
|
32
|
+
super(application);
|
|
33
|
+
this.registerServices();
|
|
34
|
+
this.jwtService = application.services.get(node_express_suite_1.ServiceKeys.JWT);
|
|
35
|
+
this.roleService = application.services.get(node_express_suite_1.ServiceKeys.ROLE);
|
|
36
|
+
this.emailService = application.services.get(node_express_suite_1.ServiceKeys.EMAIL);
|
|
37
|
+
this.keyWrappingService = application.services.get(node_express_suite_1.ServiceKeys.KEY_WRAPPING);
|
|
38
|
+
this.eciesService = application.services.get(node_express_suite_1.ServiceKeys.ECIES);
|
|
39
|
+
this.backupCodeService = application.services.get(node_express_suite_1.ServiceKeys.BACKUP_CODE);
|
|
40
|
+
this.userService = application.services.get(node_express_suite_1.ServiceKeys.USER);
|
|
41
|
+
this.userController = new user_1.UserController(application, this.jwtService, this.userService, this.backupCodeService, this.roleService, this.eciesService);
|
|
42
|
+
this.openApiController = new node_express_suite_1.OpenApiController(application);
|
|
43
|
+
this.router.use('/user', this.userController.router);
|
|
44
|
+
if (docsRoute !== undefined && docsRoute !== '') {
|
|
45
|
+
this.router.use(docsRoute, this.openApiController.router);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
registerServices() {
|
|
49
|
+
const app = this.application;
|
|
50
|
+
if (!app.services.has(node_express_suite_1.ServiceKeys.JWT)) {
|
|
51
|
+
app.services.register(node_express_suite_1.ServiceKeys.JWT, () => new jwt_1.JwtService(app));
|
|
52
|
+
}
|
|
53
|
+
if (!app.services.has(node_express_suite_1.ServiceKeys.ROLE)) {
|
|
54
|
+
app.services.register(node_express_suite_1.ServiceKeys.ROLE, () => new role_1.RoleService(app));
|
|
55
|
+
}
|
|
56
|
+
if (!app.services.has(node_express_suite_1.ServiceKeys.EMAIL)) {
|
|
57
|
+
app.services.register(node_express_suite_1.ServiceKeys.EMAIL, () => node_express_suite_2.emailServiceRegistry.getService());
|
|
58
|
+
}
|
|
59
|
+
if (!app.services.has(node_express_suite_1.ServiceKeys.KEY_WRAPPING)) {
|
|
60
|
+
app.services.register(node_express_suite_1.ServiceKeys.KEY_WRAPPING, () => new node_express_suite_1.KeyWrappingService());
|
|
61
|
+
}
|
|
62
|
+
if (!app.services.has(node_express_suite_1.ServiceKeys.ECIES)) {
|
|
63
|
+
app.services.register(node_express_suite_1.ServiceKeys.ECIES, () => {
|
|
64
|
+
const config = {
|
|
65
|
+
curveName: app.constants.ECIES.CURVE_NAME,
|
|
66
|
+
primaryKeyDerivationPath: app.constants.ECIES.PRIMARY_KEY_DERIVATION_PATH,
|
|
67
|
+
mnemonicStrength: app.constants.ECIES.MNEMONIC_STRENGTH,
|
|
68
|
+
symmetricAlgorithm: app.constants.ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
|
|
69
|
+
symmetricKeyBits: app.constants.ECIES.SYMMETRIC.KEY_BITS,
|
|
70
|
+
symmetricKeyMode: app.constants.ECIES.SYMMETRIC.MODE,
|
|
71
|
+
};
|
|
72
|
+
return new node_ecies_lib_1.ECIESService(config);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (!app.services.has(node_express_suite_1.ServiceKeys.BACKUP_CODE)) {
|
|
76
|
+
app.services.register(node_express_suite_1.ServiceKeys.BACKUP_CODE, () => new backup_code_1.BackupCodeService(app, app.services.get(node_express_suite_1.ServiceKeys.ECIES), app.services.get(node_express_suite_1.ServiceKeys.KEY_WRAPPING), app.services.get(node_express_suite_1.ServiceKeys.ROLE)));
|
|
77
|
+
}
|
|
78
|
+
if (!app.services.has(node_express_suite_1.ServiceKeys.USER)) {
|
|
79
|
+
app.services.register(node_express_suite_1.ServiceKeys.USER, () => new user_2.UserService(app, app.services.get(node_express_suite_1.ServiceKeys.ROLE), app.services.get(node_express_suite_1.ServiceKeys.EMAIL), app.services.get(node_express_suite_1.ServiceKeys.KEY_WRAPPING), app.services.get(node_express_suite_1.ServiceKeys.BACKUP_CODE)));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.ApiRouter = ApiRouter;
|
|
84
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Email token schema factory for MongoDB.
|
|
3
|
+
* Creates schema for email verification and password reset tokens.
|
|
4
|
+
* @module schemas/email-token
|
|
5
|
+
*/
|
|
6
|
+
import { Schema } from '@digitaldefiance/mongoose-types';
|
|
7
|
+
import { EmailTokenType } from '@digitaldefiance/suite-core-lib';
|
|
8
|
+
import { BaseModelName } from '../enumerations';
|
|
9
|
+
import { IConstants } from '@digitaldefiance/node-express-suite';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration options for creating an email token schema.
|
|
12
|
+
* @template TTokenType - Token type enum (defaults to EmailTokenType)
|
|
13
|
+
* @template TModelName - Model name type (defaults to BaseModelName)
|
|
14
|
+
* @template TConstants - Constants type (defaults to IConstants)
|
|
15
|
+
*/
|
|
16
|
+
export interface EmailTokenSchemaOptions<TTokenType extends string = EmailTokenType, TModelName extends string = BaseModelName, TConstants extends IConstants = IConstants> {
|
|
17
|
+
/** Token type enum values to use */
|
|
18
|
+
tokenTypeEnum?: TTokenType[];
|
|
19
|
+
/** Model name for user reference */
|
|
20
|
+
userModelName?: TModelName;
|
|
21
|
+
/** Token expiration time (default: '1d') */
|
|
22
|
+
expiresIn?: string;
|
|
23
|
+
/** Custom email validator function */
|
|
24
|
+
emailValidator?: (v: string) => boolean;
|
|
25
|
+
/** Custom validation error message function */
|
|
26
|
+
validationMessage?: (props: {
|
|
27
|
+
value: string;
|
|
28
|
+
}) => string;
|
|
29
|
+
constants?: TConstants;
|
|
30
|
+
/** ID type for references */
|
|
31
|
+
idType?: any;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Factory function to create an extensible email token schema.
|
|
35
|
+
* Includes TTL index for automatic token expiration.
|
|
36
|
+
* @template TTokenType - Token type enum (defaults to EmailTokenType)
|
|
37
|
+
* @template TModelName - Model name type (defaults to BaseModelName)
|
|
38
|
+
* @template TConstants - Constants type (defaults to IConstants)
|
|
39
|
+
* @param {EmailTokenSchemaOptions<TTokenType, TModelName>} options - Schema configuration options
|
|
40
|
+
* @param {TConstants} [_constants] - Optional constants (reserved for future use)
|
|
41
|
+
* @returns {Schema} Configured email token schema with TTL and unique indexes
|
|
42
|
+
*/
|
|
43
|
+
export declare function createEmailTokenSchema<TTokenType extends string = EmailTokenType, TModelName extends string = BaseModelName, TConstants extends IConstants = IConstants>(options?: EmailTokenSchemaOptions<TTokenType, TModelName>, _constants?: TConstants): Schema;
|
|
44
|
+
/**
|
|
45
|
+
* Default email token schema with base configuration.
|
|
46
|
+
* Pre-configured schema with 1-day TTL and compound unique index.
|
|
47
|
+
*/
|
|
48
|
+
export declare const EmailTokenSchema: Schema<any, import("mongoose").Model<any, any, any, any, any, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, {
|
|
49
|
+
[x: number]: unknown;
|
|
50
|
+
[x: symbol]: unknown;
|
|
51
|
+
[x: string]: unknown;
|
|
52
|
+
}, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<{
|
|
53
|
+
[x: number]: unknown;
|
|
54
|
+
[x: symbol]: unknown;
|
|
55
|
+
[x: string]: unknown;
|
|
56
|
+
}>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<{
|
|
57
|
+
[x: number]: unknown;
|
|
58
|
+
[x: symbol]: unknown;
|
|
59
|
+
[x: string]: unknown;
|
|
60
|
+
}> & Required<{
|
|
61
|
+
_id: unknown;
|
|
62
|
+
}> & {
|
|
63
|
+
__v: number;
|
|
64
|
+
}>;
|
|
65
|
+
//# sourceMappingURL=email-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-token.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/schemas/email-token.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EACL,cAAc,EAGf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB,CACtC,UAAU,SAAS,MAAM,GAAG,cAAc,EAC1C,UAAU,SAAS,MAAM,GAAG,aAAa,EACzC,UAAU,SAAS,UAAU,GAAG,UAAU;IAE1C,oCAAoC;IACpC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7B,oCAAoC;IACpC,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACzD,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,SAAS,MAAM,GAAG,cAAc,EAC1C,UAAU,SAAS,MAAM,GAAG,aAAa,EACzC,UAAU,SAAS,UAAU,GAAG,UAAU,EAE1C,OAAO,GAAE,uBAAuB,CAAC,UAAU,EAAE,UAAU,CAAM,EAC7D,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM,CA8CR;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAA2B,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Email token schema factory for MongoDB.
|
|
4
|
+
* Creates schema for email verification and password reset tokens.
|
|
5
|
+
* @module schemas/email-token
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.EmailTokenSchema = void 0;
|
|
9
|
+
exports.createEmailTokenSchema = createEmailTokenSchema;
|
|
10
|
+
const tslib_1 = require("tslib");
|
|
11
|
+
const mongoose_types_1 = require("@digitaldefiance/mongoose-types");
|
|
12
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
13
|
+
const validator_1 = tslib_1.__importDefault(require("validator"));
|
|
14
|
+
const enumerations_1 = require("../enumerations");
|
|
15
|
+
/**
|
|
16
|
+
* Factory function to create an extensible email token schema.
|
|
17
|
+
* Includes TTL index for automatic token expiration.
|
|
18
|
+
* @template TTokenType - Token type enum (defaults to EmailTokenType)
|
|
19
|
+
* @template TModelName - Model name type (defaults to BaseModelName)
|
|
20
|
+
* @template TConstants - Constants type (defaults to IConstants)
|
|
21
|
+
* @param {EmailTokenSchemaOptions<TTokenType, TModelName>} options - Schema configuration options
|
|
22
|
+
* @param {TConstants} [_constants] - Optional constants (reserved for future use)
|
|
23
|
+
* @returns {Schema} Configured email token schema with TTL and unique indexes
|
|
24
|
+
*/
|
|
25
|
+
function createEmailTokenSchema(options = {}, _constants) {
|
|
26
|
+
const { tokenTypeEnum = Object.values(suite_core_lib_1.EmailTokenType), userModelName = enumerations_1.BaseModelName.User, expiresIn = '1d', validationMessage = (props) => (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Error_InvalidEmailTemplate, {
|
|
27
|
+
email: props.value,
|
|
28
|
+
}), idType = mongoose_types_1.Schema.Types.ObjectId, } = options;
|
|
29
|
+
const definition = {
|
|
30
|
+
userId: {
|
|
31
|
+
type: idType,
|
|
32
|
+
required: true,
|
|
33
|
+
ref: userModelName,
|
|
34
|
+
immutable: true,
|
|
35
|
+
},
|
|
36
|
+
type: {
|
|
37
|
+
type: String,
|
|
38
|
+
enum: tokenTypeEnum,
|
|
39
|
+
required: true,
|
|
40
|
+
immutable: true,
|
|
41
|
+
},
|
|
42
|
+
token: { type: String, required: true, immutable: true, unique: true },
|
|
43
|
+
email: {
|
|
44
|
+
type: String,
|
|
45
|
+
required: true,
|
|
46
|
+
immutable: true,
|
|
47
|
+
validate: {
|
|
48
|
+
validator: (v) => validator_1.default.isEmail(v),
|
|
49
|
+
message: validationMessage,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
lastSent: { type: Date, required: false },
|
|
53
|
+
expiresAt: {
|
|
54
|
+
type: Date,
|
|
55
|
+
default: Date.now,
|
|
56
|
+
index: { expires: expiresIn },
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
const schema = new mongoose_types_1.Schema(definition, { timestamps: true });
|
|
60
|
+
schema.index({ userId: 1, email: 1, type: 1 }, { unique: true });
|
|
61
|
+
return schema;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Default email token schema with base configuration.
|
|
65
|
+
* Pre-configured schema with 1-day TTL and compound unique index.
|
|
66
|
+
*/
|
|
67
|
+
exports.EmailTokenSchema = createEmailTokenSchema();
|
|
68
|
+
//# sourceMappingURL=email-token.js.map
|