@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,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupTestEnvironment = setupTestEnvironment;
|
|
4
|
+
const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
|
|
5
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
6
|
+
const services_1 = require("../../services");
|
|
7
|
+
const mongo_database_plugin_1 = require("../../plugins/mongo-database-plugin");
|
|
8
|
+
async function setupTestEnvironment(constants, apiRouterFactory, schemaMapFactory, appRouterFactory = (apiRouter) => new node_express_suite_1.AppRouter(apiRouter), customInitMiddleware = node_express_suite_1.initMiddleware, envLocation, databaseInitFunction, initResultHashFunction, cspConfig = {
|
|
9
|
+
corsWhitelist: [],
|
|
10
|
+
csp: {
|
|
11
|
+
defaultSrc: [],
|
|
12
|
+
imgSrc: [],
|
|
13
|
+
connectSrc: [],
|
|
14
|
+
scriptSrc: [],
|
|
15
|
+
styleSrc: [],
|
|
16
|
+
fontSrc: [],
|
|
17
|
+
frameSrc: [],
|
|
18
|
+
},
|
|
19
|
+
}) {
|
|
20
|
+
// Make runtime deterministic for tests
|
|
21
|
+
process.env.NODE_ENV = 'test';
|
|
22
|
+
process.env['DEV_DATABASE'] = 'test';
|
|
23
|
+
// Increase libuv threadpool for concurrent pbkdf2 work
|
|
24
|
+
if (!process.env['UV_THREADPOOL_SIZE']) {
|
|
25
|
+
process.env['UV_THREADPOOL_SIZE'] = '16';
|
|
26
|
+
}
|
|
27
|
+
// Optimize MongoDB settings for test performance while maintaining reliability
|
|
28
|
+
if (!process.env['MONGO_MAX_POOL_SIZE']) {
|
|
29
|
+
process.env['MONGO_MAX_POOL_SIZE'] = '5';
|
|
30
|
+
}
|
|
31
|
+
if (!process.env['MONGO_MIN_POOL_SIZE']) {
|
|
32
|
+
process.env['MONGO_MIN_POOL_SIZE'] = '2';
|
|
33
|
+
}
|
|
34
|
+
if (!process.env['MONGO_SERVER_SELECTION_TIMEOUT_MS']) {
|
|
35
|
+
process.env['MONGO_SERVER_SELECTION_TIMEOUT_MS'] = '5000';
|
|
36
|
+
}
|
|
37
|
+
if (!process.env['MONGO_SOCKET_TIMEOUT_MS']) {
|
|
38
|
+
process.env['MONGO_SOCKET_TIMEOUT_MS'] = '15000';
|
|
39
|
+
}
|
|
40
|
+
if (!process.env['MONGO_TRANSACTION_TIMEOUT']) {
|
|
41
|
+
process.env['MONGO_TRANSACTION_TIMEOUT'] = '15000';
|
|
42
|
+
}
|
|
43
|
+
if (!process.env['MONGO_TRANSACTION_LOCK_REQUEST_TIMEOUT']) {
|
|
44
|
+
process.env['MONGO_TRANSACTION_LOCK_REQUEST_TIMEOUT'] = '8000';
|
|
45
|
+
}
|
|
46
|
+
if (!process.env['MONGO_TRANSACTION_RETRY_BASE_DELAY']) {
|
|
47
|
+
process.env['MONGO_TRANSACTION_RETRY_BASE_DELAY'] = '100';
|
|
48
|
+
}
|
|
49
|
+
// Disable transactions in test environment for better reliability
|
|
50
|
+
if (!process.env['MONGO_USE_TRANSACTIONS']) {
|
|
51
|
+
process.env['MONGO_USE_TRANSACTIONS'] = 'false';
|
|
52
|
+
}
|
|
53
|
+
// Ensure language is set to English for consistent test behavior
|
|
54
|
+
process.env.LANGUAGE = 'English (US)';
|
|
55
|
+
// Use a random high port to avoid conflicts
|
|
56
|
+
process.env['PORT'] = String(Math.floor(Math.random() * 10000) + 50000);
|
|
57
|
+
// Use unique database name for each test to avoid conflicts
|
|
58
|
+
const uniqueDbName = `test_${Date.now()}_${Math.floor(Math.random() * 10000)}`;
|
|
59
|
+
process.env['DEV_DATABASE'] = uniqueDbName;
|
|
60
|
+
// Reset global language context to English
|
|
61
|
+
const setAdminLanguage = (language) => {
|
|
62
|
+
const context = i18n_lib_1.GlobalActiveContext.getInstance();
|
|
63
|
+
context.setAdminLanguage(language);
|
|
64
|
+
};
|
|
65
|
+
setAdminLanguage('en-US');
|
|
66
|
+
const env = new node_express_suite_1.Environment(envLocation, true);
|
|
67
|
+
// Create the Application with MongoDatabasePlugin
|
|
68
|
+
const application = new node_express_suite_1.Application(env, apiRouterFactory, cspConfig, constants, appRouterFactory, customInitMiddleware);
|
|
69
|
+
const mongoPlugin = new mongo_database_plugin_1.MongoDatabasePlugin({
|
|
70
|
+
schemaMapFactory,
|
|
71
|
+
databaseInitFunction: databaseInitFunction ??
|
|
72
|
+
services_1.DatabaseInitializationService.initUserDb.bind(services_1.DatabaseInitializationService),
|
|
73
|
+
initResultHashFunction: initResultHashFunction ??
|
|
74
|
+
services_1.DatabaseInitializationService.serverInitResultHash.bind(services_1.DatabaseInitializationService),
|
|
75
|
+
environment: env,
|
|
76
|
+
constants,
|
|
77
|
+
});
|
|
78
|
+
application.useDatabasePlugin(mongoPlugin);
|
|
79
|
+
// Create and start your app — this connects the DB, inits plugins,
|
|
80
|
+
// and runs initializeDevStore (which calls initUserDb) via the plugin.
|
|
81
|
+
try {
|
|
82
|
+
await application.start();
|
|
83
|
+
if (mongoPlugin.db.connection.db) {
|
|
84
|
+
const command = {
|
|
85
|
+
...(application.environment.mongo.setParameterSupported
|
|
86
|
+
? { setParameter: 1 }
|
|
87
|
+
: {}),
|
|
88
|
+
...(application.environment.mongo.useTransactions &&
|
|
89
|
+
application.environment.mongo.transactionLifetimeLimitSecondsSupported
|
|
90
|
+
? {
|
|
91
|
+
transactionLifetimeLimitSeconds: application.environment.mongo.transactionTimeout,
|
|
92
|
+
}
|
|
93
|
+
: {}),
|
|
94
|
+
...(application.environment.mongo.useTransactions &&
|
|
95
|
+
application.environment.mongo
|
|
96
|
+
.maxTransactionLockRequestTimeoutMillisSupported
|
|
97
|
+
? {
|
|
98
|
+
maxTransactionLockRequestTimeoutMillis: application.environment.mongo.transactionLockRequestTimeout,
|
|
99
|
+
}
|
|
100
|
+
: {}),
|
|
101
|
+
};
|
|
102
|
+
if (Object.keys(command).length > 0) {
|
|
103
|
+
await mongoPlugin.db.connection.db
|
|
104
|
+
.admin()
|
|
105
|
+
.command(command)
|
|
106
|
+
.catch(() => undefined);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.error('Failed to start application with MongoDB URI:', application.environment.mongo.uri);
|
|
112
|
+
console.error('Connection error:', error);
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
// Ensure the test process uses the same JWT secret as the application
|
|
116
|
+
process.env.JWT_SECRET = application.environment.jwtSecret;
|
|
117
|
+
// Get the init result from the plugin (populated during start() → initializeDevStore)
|
|
118
|
+
const accountData = mongoPlugin.lastInitResult;
|
|
119
|
+
if (!accountData) {
|
|
120
|
+
throw new Error('Failed to initialize database for tests — no init result from plugin');
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
application: application,
|
|
124
|
+
mongoServer: mongoPlugin.devDatabase,
|
|
125
|
+
mongoUri: application.environment.mongo
|
|
126
|
+
.uri,
|
|
127
|
+
accountData,
|
|
128
|
+
dbName: application.environment.devDatabase,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=setup-test-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-test-env.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-express-suite-mongo/src/__tests__/helpers/setup-test-env.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/__tests__/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/__tests__/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B;AAC3B,oDAA0B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Application builder for fluent application construction.
|
|
3
|
+
* Provides builder pattern for creating Application instances with MongoDatabasePlugin.
|
|
4
|
+
* @module builders/application-builder
|
|
5
|
+
*/
|
|
6
|
+
import mongoose from '@digitaldefiance/mongoose-types';
|
|
7
|
+
import { IFailableResult } from '@digitaldefiance/suite-core-lib';
|
|
8
|
+
import { HelmetOptions } from 'helmet';
|
|
9
|
+
import { Application, Environment, IApplication, ICSPConfig, IConstants, IFlexibleCSP, initMiddleware, AppRouter, BaseRouter } from '@digitaldefiance/node-express-suite';
|
|
10
|
+
import { BaseDocument } from '../documents';
|
|
11
|
+
import { IMongoApplication } from '../interfaces/mongo-application';
|
|
12
|
+
import { IServerInitResult } from '../interfaces/server-init-result';
|
|
13
|
+
import { SchemaMap } from '../types';
|
|
14
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
15
|
+
/**
|
|
16
|
+
* Builder for constructing Application instances with MongoDatabasePlugin using a fluent API.
|
|
17
|
+
*/
|
|
18
|
+
export declare class ApplicationBuilder<TID extends PlatformID, TModelDocs extends Record<string, BaseDocument<never, TID>>, TInitResults extends IServerInitResult<TID>, TConstants extends IConstants = IConstants> {
|
|
19
|
+
private environment?;
|
|
20
|
+
private apiRouterFactory?;
|
|
21
|
+
private appRouterFactory?;
|
|
22
|
+
private schemaMapFactory?;
|
|
23
|
+
private databaseInitFunction?;
|
|
24
|
+
private initResultHashFunction?;
|
|
25
|
+
private cspConfig?;
|
|
26
|
+
private constants?;
|
|
27
|
+
private customInitMiddleware?;
|
|
28
|
+
withEnvironment(env: Environment<TID>): this;
|
|
29
|
+
withApiRouter(factory: (app: IApplication<TID>) => BaseRouter<TID>): this;
|
|
30
|
+
withAppRouter(factory: (apiRouter: BaseRouter<TID>) => AppRouter<TID>): this;
|
|
31
|
+
withSchemaMap(factory: (connection: mongoose.Connection) => SchemaMap<TID, TModelDocs>): this;
|
|
32
|
+
withDatabaseInit(initFn: (app: IMongoApplication<TID>) => Promise<IFailableResult<TInitResults>>, hashFn: (results: TInitResults) => string): this;
|
|
33
|
+
withCSP(config: ICSPConfig | HelmetOptions | IFlexibleCSP): this;
|
|
34
|
+
withConstants(constants: TConstants): this;
|
|
35
|
+
withMiddleware(middleware: typeof initMiddleware): this;
|
|
36
|
+
build(): Application<TID, Environment<TID>, TConstants, AppRouter<TID>>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=application-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/builders/application-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AACvD,OAAO,EACL,eAAe,EAGhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,UAAU,EACX,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;GAEG;AACH,qBAAa,kBAAkB,CAC7B,GAAG,SAAS,UAAU,EACtB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAC3D,YAAY,SAAS,iBAAiB,CAAC,GAAG,CAAC,EAC3C,UAAU,SAAS,UAAU,GAAG,UAAU;IAE1C,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAA8C;IACvE,OAAO,CAAC,gBAAgB,CAAC,CAAiD;IAC1E,OAAO,CAAC,gBAAgB,CAAC,CAEO;IAChC,OAAO,CAAC,oBAAoB,CAAC,CAEe;IAC5C,OAAO,CAAC,sBAAsB,CAAC,CAAoC;IACnE,OAAO,CAAC,SAAS,CAAC,CAA4C;IAC9D,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,oBAAoB,CAAC,CAAwB;IAErD,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;IAK5C,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI;IAKzE,aAAa,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI;IAK5E,aAAa,CACX,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,GACvE,IAAI;IAKP,gBAAgB,CACd,MAAM,EAAE,CACN,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,KACxB,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,EAC3C,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,MAAM,GACxC,IAAI;IAMP,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,IAAI;IAKhE,aAAa,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAK1C,cAAc,CAAC,UAAU,EAAE,OAAO,cAAc,GAAG,IAAI;IAKvD,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;CAqDxE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Application builder for fluent application construction.
|
|
4
|
+
* Provides builder pattern for creating Application instances with MongoDatabasePlugin.
|
|
5
|
+
* @module builders/application-builder
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ApplicationBuilder = void 0;
|
|
9
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
10
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
11
|
+
const mongo_database_plugin_1 = require("../plugins/mongo-database-plugin");
|
|
12
|
+
/**
|
|
13
|
+
* Builder for constructing Application instances with MongoDatabasePlugin using a fluent API.
|
|
14
|
+
*/
|
|
15
|
+
class ApplicationBuilder {
|
|
16
|
+
environment;
|
|
17
|
+
apiRouterFactory;
|
|
18
|
+
appRouterFactory;
|
|
19
|
+
schemaMapFactory;
|
|
20
|
+
databaseInitFunction;
|
|
21
|
+
initResultHashFunction;
|
|
22
|
+
cspConfig;
|
|
23
|
+
constants;
|
|
24
|
+
customInitMiddleware;
|
|
25
|
+
withEnvironment(env) {
|
|
26
|
+
this.environment = env;
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
withApiRouter(factory) {
|
|
30
|
+
this.apiRouterFactory = factory;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
withAppRouter(factory) {
|
|
34
|
+
this.appRouterFactory = factory;
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
withSchemaMap(factory) {
|
|
38
|
+
this.schemaMapFactory = factory;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
withDatabaseInit(initFn, hashFn) {
|
|
42
|
+
this.databaseInitFunction = initFn;
|
|
43
|
+
this.initResultHashFunction = hashFn;
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
withCSP(config) {
|
|
47
|
+
this.cspConfig = config;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
withConstants(constants) {
|
|
51
|
+
this.constants = constants;
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
withMiddleware(middleware) {
|
|
55
|
+
this.customInitMiddleware = middleware;
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
build() {
|
|
59
|
+
if (!this.environment)
|
|
60
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_EnvironmentIsRequired);
|
|
61
|
+
if (!this.apiRouterFactory)
|
|
62
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_ApiRouterFactoryIsRequired);
|
|
63
|
+
if (!this.schemaMapFactory)
|
|
64
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_SchemaMapFactoryIsRequired);
|
|
65
|
+
if (!this.databaseInitFunction)
|
|
66
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_DatabaseInitFunctionIsRequired);
|
|
67
|
+
if (!this.initResultHashFunction)
|
|
68
|
+
throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_InitResultHashFunctionIsRequired);
|
|
69
|
+
const app = new node_express_suite_1.Application(this.environment, this.apiRouterFactory, this.cspConfig, this.constants, this.appRouterFactory, this.customInitMiddleware);
|
|
70
|
+
const mongoPlugin = new mongo_database_plugin_1.MongoDatabasePlugin({
|
|
71
|
+
schemaMapFactory: this.schemaMapFactory,
|
|
72
|
+
databaseInitFunction: this.databaseInitFunction,
|
|
73
|
+
initResultHashFunction: this.initResultHashFunction,
|
|
74
|
+
environment: this.environment,
|
|
75
|
+
constants: this.constants,
|
|
76
|
+
});
|
|
77
|
+
app.useDatabasePlugin(mongoPlugin);
|
|
78
|
+
return app;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.ApplicationBuilder = ApplicationBuilder;
|
|
82
|
+
//# sourceMappingURL=application-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-builder.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/builders/application-builder.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,oEAIyC;AAEzC,4EAU6C;AAI7C,4EAAuE;AAIvE;;GAEG;AACH,MAAa,kBAAkB;IAMrB,WAAW,CAAoB;IAC/B,gBAAgB,CAA+C;IAC/D,gBAAgB,CAAkD;IAClE,gBAAgB,CAEQ;IACxB,oBAAoB,CAEgB;IACpC,sBAAsB,CAAqC;IAC3D,SAAS,CAA6C;IACtD,SAAS,CAAc;IACvB,oBAAoB,CAAyB;IAErD,eAAe,CAAC,GAAqB;QACnC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,OAAoD;QAChE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,OAAuD;QACnE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CACX,OAAwE;QAExE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CACd,MAE2C,EAC3C,MAAyC;QAEzC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;QACnC,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,MAAiD;QACvD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,SAAqB;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,UAAiC;QAC9C,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,WAAW;YACnB,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,2BAA2B,CAC/C,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACxB,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,gCAAgC,CACpD,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACxB,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,gCAAgC,CACpD,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAC5B,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,oCAAoC,CACxD,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAC9B,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,sCAAsC,CAC1D,CAAC;QAEJ,MAAM,GAAG,GAAG,IAAI,gCAAW,CAMzB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,oBAAoB,CAC1B,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,2CAAmB,CAKzC;YACA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,GAAG,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEnC,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAzHD,gDAyHC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/builders/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/builders/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/controllers/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B;AAC7B,iDAAuB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Mongo-specific base controller extending the database-agnostic BaseController.
|
|
3
|
+
* Restores Mongoose-specific functionality: isMongoApplication(), mongoApplication,
|
|
4
|
+
* transactionManager, validateAndFetchRequestUser(), and Mongoose-specific withTransaction().
|
|
5
|
+
* @module controllers/mongo-base
|
|
6
|
+
*/
|
|
7
|
+
import { ClientSession } from '@digitaldefiance/mongoose-types';
|
|
8
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
9
|
+
import type { Request } from 'express';
|
|
10
|
+
import { BaseController, type ApiResponse, type TransactionCallback } from '@digitaldefiance/node-express-suite';
|
|
11
|
+
import type { IApplication } from '@digitaldefiance/node-express-suite';
|
|
12
|
+
import type { IMongoApplication } from '../interfaces/mongo-application';
|
|
13
|
+
import type { UserDocument } from '../documents/user';
|
|
14
|
+
import { TransactionManager } from '../transactions';
|
|
15
|
+
import { type MongoTransactionOptions } from '../utils/mongo-transaction';
|
|
16
|
+
/**
|
|
17
|
+
* Abstract Mongo-specific base controller.
|
|
18
|
+
* Extends the database-agnostic BaseController with Mongoose transaction management,
|
|
19
|
+
* Mongo application type guards, and user validation via Mongoose models.
|
|
20
|
+
*
|
|
21
|
+
* @template T API response type
|
|
22
|
+
* @template THandler Handler object type
|
|
23
|
+
* @template TLanguage Language code type
|
|
24
|
+
* @template TID Platform ID type
|
|
25
|
+
* @template TApplication Application interface type
|
|
26
|
+
*/
|
|
27
|
+
export declare abstract class MongoBaseController<T extends ApiResponse, THandler extends object, TLanguage extends string, TID extends PlatformID = Buffer, TApplication extends IApplication<TID> = IApplication<TID>> extends BaseController<T, THandler, TLanguage, TID, TApplication> {
|
|
28
|
+
protected transactionManager: TransactionManager | undefined;
|
|
29
|
+
constructor(application: TApplication);
|
|
30
|
+
/**
|
|
31
|
+
* Type guard: does the application expose a Mongoose connection?
|
|
32
|
+
* Uses try/catch to safely handle cases where the db getter throws
|
|
33
|
+
* (e.g. when no MongoDatabasePlugin is registered).
|
|
34
|
+
*/
|
|
35
|
+
protected isMongoApplication(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Returns the application typed as IMongoApplication, or undefined if not Mongo-backed.
|
|
38
|
+
*/
|
|
39
|
+
protected get mongoApplication(): IMongoApplication<TID> | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Validates the request has a user and fetches the full UserDocument from Mongoose.
|
|
42
|
+
* @param req The Express request object
|
|
43
|
+
* @returns The UserDocument for the authenticated user
|
|
44
|
+
* @throws Error if the application is not Mongo-backed
|
|
45
|
+
* @throws HandleableError if no user is on the request
|
|
46
|
+
* @throws UserNotFoundError if the user is not found in the database
|
|
47
|
+
*/
|
|
48
|
+
protected validateAndFetchRequestUser(req: Request): Promise<UserDocument<TLanguage, TID>>;
|
|
49
|
+
/**
|
|
50
|
+
* Wraps a callback in a Mongoose transaction with full retry/timeout support.
|
|
51
|
+
* Falls back to IDatabase.withTransaction or direct execution when Mongoose is unavailable.
|
|
52
|
+
*/
|
|
53
|
+
withTransaction<TResult>(callback: TransactionCallback<TResult>, session?: ClientSession, options?: MongoTransactionOptions<TID>, ...args: any): Promise<TResult>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=mongo-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo-base.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/controllers/mongo-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAOlE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;GAUG;AACH,8BAAsB,mBAAmB,CACvC,CAAC,SAAS,WAAW,EACrB,QAAQ,SAAS,MAAM,EACvB,SAAS,SAAS,MAAM,EACxB,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,YAAY,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAC1D,SAAQ,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC;IACjE,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAC;gBAE1C,WAAW,EAAE,YAAY;IAY5C;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,IAAI,OAAO;IAWvC;;OAEG;IACH,SAAS,KAAK,gBAAgB,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,SAAS,CAKnE;IAED;;;;;;;OAOG;cACa,2BAA2B,CACzC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAgCxC;;;OAGG;IACU,eAAe,CAAC,OAAO,EAClC,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,uBAAuB,CAAC,GAAG,CAAC,EACtC,GAAG,IAAI,EAAE,GAAG;CA0Bf"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Mongo-specific base controller extending the database-agnostic BaseController.
|
|
4
|
+
* Restores Mongoose-specific functionality: isMongoApplication(), mongoApplication,
|
|
5
|
+
* transactionManager, validateAndFetchRequestUser(), and Mongoose-specific withTransaction().
|
|
6
|
+
* @module controllers/mongo-base
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MongoBaseController = void 0;
|
|
10
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
11
|
+
const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
|
|
12
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
13
|
+
const base_model_name_1 = require("../enumerations/base-model-name");
|
|
14
|
+
const model_registry_1 = require("../model-registry");
|
|
15
|
+
const transactions_1 = require("../transactions");
|
|
16
|
+
const mongo_transaction_1 = require("../utils/mongo-transaction");
|
|
17
|
+
/**
|
|
18
|
+
* Abstract Mongo-specific base controller.
|
|
19
|
+
* Extends the database-agnostic BaseController with Mongoose transaction management,
|
|
20
|
+
* Mongo application type guards, and user validation via Mongoose models.
|
|
21
|
+
*
|
|
22
|
+
* @template T API response type
|
|
23
|
+
* @template THandler Handler object type
|
|
24
|
+
* @template TLanguage Language code type
|
|
25
|
+
* @template TID Platform ID type
|
|
26
|
+
* @template TApplication Application interface type
|
|
27
|
+
*/
|
|
28
|
+
class MongoBaseController extends node_express_suite_1.BaseController {
|
|
29
|
+
transactionManager;
|
|
30
|
+
constructor(application) {
|
|
31
|
+
super(application);
|
|
32
|
+
// Only create TransactionManager when the app has a Mongoose connection
|
|
33
|
+
const mongoApp = this.mongoApplication;
|
|
34
|
+
if (mongoApp) {
|
|
35
|
+
this.transactionManager = new transactions_1.TransactionManager(mongoApp.db.connection, mongoApp.environment.mongo.useTransactions);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Type guard: does the application expose a Mongoose connection?
|
|
40
|
+
* Uses try/catch to safely handle cases where the db getter throws
|
|
41
|
+
* (e.g. when no MongoDatabasePlugin is registered).
|
|
42
|
+
*/
|
|
43
|
+
isMongoApplication() {
|
|
44
|
+
try {
|
|
45
|
+
return ('db' in this.application &&
|
|
46
|
+
this.application.db !== undefined);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns the application typed as IMongoApplication, or undefined if not Mongo-backed.
|
|
54
|
+
*/
|
|
55
|
+
get mongoApplication() {
|
|
56
|
+
if (this.isMongoApplication()) {
|
|
57
|
+
return this.application;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Validates the request has a user and fetches the full UserDocument from Mongoose.
|
|
63
|
+
* @param req The Express request object
|
|
64
|
+
* @returns The UserDocument for the authenticated user
|
|
65
|
+
* @throws Error if the application is not Mongo-backed
|
|
66
|
+
* @throws HandleableError if no user is on the request
|
|
67
|
+
* @throws UserNotFoundError if the user is not found in the database
|
|
68
|
+
*/
|
|
69
|
+
async validateAndFetchRequestUser(req) {
|
|
70
|
+
if (!this.isMongoApplication()) {
|
|
71
|
+
throw new Error('validateAndFetchRequestUser requires a Mongo-backed application. ' +
|
|
72
|
+
'Override this method for non-Mongo storage backends.');
|
|
73
|
+
}
|
|
74
|
+
const UserModel = model_registry_1.ModelRegistry.instance.getTypedModel(base_model_name_1.BaseModelName.User);
|
|
75
|
+
if (!req.user) {
|
|
76
|
+
throw new i18n_lib_1.HandleableError(new Error((0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_Unauthorized, undefined, undefined, { constants: this.application.constants })), {
|
|
77
|
+
statusCode: 401,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const user = await UserModel.findById(req.user.id);
|
|
81
|
+
if (!user) {
|
|
82
|
+
throw new suite_core_lib_1.UserNotFoundError();
|
|
83
|
+
}
|
|
84
|
+
return user;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Wraps a callback in a Mongoose transaction with full retry/timeout support.
|
|
88
|
+
* Falls back to IDatabase.withTransaction or direct execution when Mongoose is unavailable.
|
|
89
|
+
*/
|
|
90
|
+
async withTransaction(callback, session, options, ...args) {
|
|
91
|
+
// Mongoose path — full retry/timeout support
|
|
92
|
+
if (this.isMongoApplication()) {
|
|
93
|
+
const mongoApp = this.mongoApplication;
|
|
94
|
+
return await (0, mongo_transaction_1.withMongoTransaction)(mongoApp.db.connection, mongoApp.environment.mongo.useTransactions, session, callback, { application: this.application, ...options }, ...args);
|
|
95
|
+
}
|
|
96
|
+
// IDatabase path — delegate to IDatabase.withTransaction
|
|
97
|
+
const db = this.application.database;
|
|
98
|
+
if (db) {
|
|
99
|
+
return await db.withTransaction(async () => {
|
|
100
|
+
return await callback(session, ...args);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// No database — run callback directly without transaction
|
|
104
|
+
return await callback(session, ...args);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.MongoBaseController = MongoBaseController;
|
|
108
|
+
//# sourceMappingURL=mongo-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo-base.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/controllers/mongo-base.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,oEAIyC;AACzC,wDAA4D;AAE5D,4EAI6C;AAI7C,qEAAgE;AAChE,sDAAkD;AAClD,kDAAqD;AACrD,kEAGoC;AAEpC;;;;;;;;;;GAUG;AACH,MAAsB,mBAMpB,SAAQ,mCAAyD;IACvD,kBAAkB,CAAiC;IAE7D,YAAmB,WAAyB;QAC1C,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,wEAAwE;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,iCAAkB,CAC9C,QAAQ,CAAC,EAAE,CAAC,UAAU,EACtB,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACO,kBAAkB;QAC1B,IAAI,CAAC;YACH,OAAO,CACL,IAAI,IAAI,IAAI,CAAC,WAAW;gBACvB,IAAI,CAAC,WAAiD,CAAC,EAAE,KAAK,SAAS,CACzE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAc,gBAAgB;QAC5B,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAgD,CAAC;QAC/D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;OAOG;IACO,KAAK,CAAC,2BAA2B,CACzC,GAAY;QAEZ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,mEAAmE;gBACjE,sDAAsD,CACzD,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,8BAAa,CAAC,QAAQ,CAAC,aAAa,CAEpD,+BAAa,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,IAAI,0BAAe,CACvB,IAAI,KAAK,CACP,IAAA,wCAAuB,EACrB,mCAAkB,CAAC,mBAAmB,EACtC,SAAS,EACT,SAAS,EACT,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAC1C,CACF,EACD;gBACE,UAAU,EAAE,GAAG;aAChB,CACF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,kCAAiB,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe,CAC1B,QAAsC,EACtC,OAAuB,EACvB,OAAsC,EACtC,GAAG,IAAS;QAEZ,6CAA6C;QAC7C,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAiB,CAAC;YACxC,OAAO,MAAM,IAAA,wCAAoB,EAC/B,QAAQ,CAAC,EAAE,CAAC,UAAU,EACtB,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,EAC1C,OAAO,EACP,QAAQ,EACR,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,EAAE,EAC7C,GAAG,IAAI,CACR,CAAC;QACJ,CAAC;QAED,yDAAyD;QACzD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACrC,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,MAAM,EAAE,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;gBACzC,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF;AA3HD,kDA2HC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview User controller handling authentication, registration, and user management endpoints.
|
|
3
|
+
* Provides comprehensive user operations including login, password management, and settings.
|
|
4
|
+
* @module controllers/user
|
|
5
|
+
*/
|
|
6
|
+
import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
|
|
7
|
+
import { Member as BackendMember, ECIESService, PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
8
|
+
import { ITokenRole, ITokenUser, IUserBase } from '@digitaldefiance/suite-core-lib';
|
|
9
|
+
import type { NextFunction, Request, Response } from 'express';
|
|
10
|
+
import { DecoratorBaseController, Environment, IApiChallengeResponse, IApiCodeCountResponse, IApiLoginResponse, IApiMessageResponse, IApiMnemonicResponse, IApiRegistrationResponse, IApiRequestUserResponse, IApiUserSettingsResponse, IApiBackupCodesResponse, IConstants, IStatusCodeResponse } from '@digitaldefiance/node-express-suite';
|
|
11
|
+
import type { ApiErrorResponse } from '@digitaldefiance/node-express-suite';
|
|
12
|
+
import { JwtService } from '../services/jwt';
|
|
13
|
+
import { BaseDocument } from '../documents';
|
|
14
|
+
import { UserDocument } from '../documents/user';
|
|
15
|
+
import type { IMongoApplication } from '../interfaces/mongo-application';
|
|
16
|
+
import { BackupCodeService } from '../services/backup-code';
|
|
17
|
+
import { RoleService } from '../services/role';
|
|
18
|
+
import { UserService } from '../services/user';
|
|
19
|
+
/**
|
|
20
|
+
* User controller handling all user-related API endpoints.
|
|
21
|
+
* Manages authentication, registration, password operations, settings, and backup codes.
|
|
22
|
+
* @template TID Platform ID type
|
|
23
|
+
* @template TDate Date type
|
|
24
|
+
* @template TLanguage Site language string type
|
|
25
|
+
* @template TAccountStatus Account status string type
|
|
26
|
+
* @template TUser User base type
|
|
27
|
+
* @template TTokenRole Token role type
|
|
28
|
+
* @template TTokenUser Token user type
|
|
29
|
+
* @template TApplication Application type
|
|
30
|
+
*/
|
|
31
|
+
export declare class UserController<TID extends PlatformID = Buffer, TDate extends Date = Date, TLanguage extends CoreLanguageCode = CoreLanguageCode, TAccountStatus extends string = string, TUser extends IUserBase<TID, TDate, TLanguage, TAccountStatus> = IUserBase<TID, TDate, TLanguage, TAccountStatus>, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>, TTokenUser extends ITokenUser = ITokenUser, TApplication extends IMongoApplication<TID> = IMongoApplication<TID>> extends DecoratorBaseController<TLanguage, TID, TApplication> {
|
|
32
|
+
protected readonly userService: UserService<UserDocument, TID, TDate, TLanguage, TAccountStatus, Environment<TID>, IConstants, BaseDocument<UserDocument, TID>, TUser, TTokenRole, TApplication>;
|
|
33
|
+
protected readonly jwtService: JwtService<TID, TDate, TTokenRole, TTokenUser, TApplication>;
|
|
34
|
+
protected readonly backupCodeService: BackupCodeService<TID, TDate, TTokenRole, TApplication>;
|
|
35
|
+
protected readonly roleService: RoleService<TID, TDate, TTokenRole>;
|
|
36
|
+
protected readonly eciesService: ECIESService<TID>;
|
|
37
|
+
protected readonly systemUser: BackendMember<TID>;
|
|
38
|
+
constructor(application: TApplication, jwtService: JwtService<TID, TDate, TTokenRole, TTokenUser, TApplication>, userService: UserService<any, TID, TDate, TLanguage, TAccountStatus, any, any, any, TUser, TTokenRole, TApplication>, backupCodeService: BackupCodeService<TID, TDate, TTokenRole, TApplication>, roleService: RoleService<TID, TDate, TTokenRole>, eciesService: ECIESService<TID>);
|
|
39
|
+
tokenVerifiedResponse(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiRequestUserResponse | ApiErrorResponse>>;
|
|
40
|
+
refreshToken(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiLoginResponse | ApiErrorResponse>>;
|
|
41
|
+
register(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiRegistrationResponse | ApiErrorResponse>>;
|
|
42
|
+
completeAccountVerification(_req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMessageResponse | ApiErrorResponse>>;
|
|
43
|
+
setLanguage(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiRequestUserResponse | ApiErrorResponse>>;
|
|
44
|
+
setDarkMode(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiRequestUserResponse | ApiErrorResponse>>;
|
|
45
|
+
getSettings(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiUserSettingsResponse | ApiErrorResponse>>;
|
|
46
|
+
updateSettings(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiRequestUserResponse | ApiErrorResponse>>;
|
|
47
|
+
getBackupCodeCount(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiCodeCountResponse | ApiErrorResponse>>;
|
|
48
|
+
resetBackupCodes(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiBackupCodesResponse | ApiErrorResponse>>;
|
|
49
|
+
recoverMnemonic(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMnemonicResponse | ApiErrorResponse>>;
|
|
50
|
+
changePassword(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMessageResponse | ApiErrorResponse>>;
|
|
51
|
+
requestDirectLogin(_req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiChallengeResponse | ApiErrorResponse>>;
|
|
52
|
+
directLoginChallenge(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiLoginResponse | ApiErrorResponse>>;
|
|
53
|
+
requestEmailLogin(_req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMessageResponse | ApiErrorResponse>>;
|
|
54
|
+
emailLoginChallenge(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiLoginResponse | ApiErrorResponse>>;
|
|
55
|
+
resendVerification(_req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMessageResponse | ApiErrorResponse>>;
|
|
56
|
+
useBackupCodeLogin(_req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiLoginResponse | ApiErrorResponse>>;
|
|
57
|
+
forgotPassword(_req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMessageResponse | ApiErrorResponse>>;
|
|
58
|
+
verifyResetToken(req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMessageResponse | ApiErrorResponse>>;
|
|
59
|
+
resetPassword(_req: Request, _res: Response, _next: NextFunction): Promise<IStatusCodeResponse<IApiMessageResponse | ApiErrorResponse>>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/controllers/user.ts"],"names":[],"mappings":"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"}
|