@digitaldefiance/node-express-suite 3.12.16 → 3.13.1

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.
Files changed (77) hide show
  1. package/package.json +1 -1
  2. package/src/application-base.d.ts +50 -47
  3. package/src/application-base.d.ts.map +1 -1
  4. package/src/application-base.js +180 -229
  5. package/src/application-base.js.map +1 -1
  6. package/src/application.d.ts +2 -1
  7. package/src/application.d.ts.map +1 -1
  8. package/src/application.js +8 -4
  9. package/src/application.js.map +1 -1
  10. package/src/index.d.ts +1 -0
  11. package/src/index.d.ts.map +1 -1
  12. package/src/index.js +3 -1
  13. package/src/index.js.map +1 -1
  14. package/src/interfaces/document-store.d.ts +38 -0
  15. package/src/interfaces/document-store.d.ts.map +1 -0
  16. package/src/interfaces/document-store.js +8 -0
  17. package/src/interfaces/document-store.js.map +1 -0
  18. package/src/interfaces/failable-result.d.ts +1 -6
  19. package/src/interfaces/failable-result.d.ts.map +1 -1
  20. package/src/interfaces/failable-result.js +0 -5
  21. package/src/interfaces/failable-result.js.map +1 -1
  22. package/src/interfaces/index.d.ts +2 -0
  23. package/src/interfaces/index.d.ts.map +1 -1
  24. package/src/interfaces/index.js +2 -0
  25. package/src/interfaces/index.js.map +1 -1
  26. package/src/interfaces/storage/client-session.d.ts +22 -0
  27. package/src/interfaces/storage/client-session.d.ts.map +1 -0
  28. package/src/interfaces/storage/client-session.js +3 -0
  29. package/src/interfaces/storage/client-session.js.map +1 -0
  30. package/src/interfaces/storage/collection.d.ts +80 -0
  31. package/src/interfaces/storage/collection.d.ts.map +1 -0
  32. package/src/interfaces/storage/collection.js +3 -0
  33. package/src/interfaces/storage/collection.js.map +1 -0
  34. package/src/interfaces/storage/database-lifecycle-hooks.d.ts +43 -0
  35. package/src/interfaces/storage/database-lifecycle-hooks.d.ts.map +1 -0
  36. package/src/interfaces/storage/database-lifecycle-hooks.js +3 -0
  37. package/src/interfaces/storage/database-lifecycle-hooks.js.map +1 -0
  38. package/src/interfaces/storage/database.d.ts +30 -0
  39. package/src/interfaces/storage/database.d.ts.map +1 -0
  40. package/src/interfaces/storage/database.js +3 -0
  41. package/src/interfaces/storage/database.js.map +1 -0
  42. package/src/interfaces/storage/document-types.d.ts +413 -0
  43. package/src/interfaces/storage/document-types.d.ts.map +1 -0
  44. package/src/interfaces/storage/document-types.js +8 -0
  45. package/src/interfaces/storage/document-types.js.map +1 -0
  46. package/src/interfaces/storage/index.d.ts +6 -0
  47. package/src/interfaces/storage/index.d.ts.map +1 -0
  48. package/src/interfaces/storage/index.js +9 -0
  49. package/src/interfaces/storage/index.js.map +1 -0
  50. package/src/services/index.d.ts +4 -0
  51. package/src/services/index.d.ts.map +1 -1
  52. package/src/services/index.js +4 -0
  53. package/src/services/index.js.map +1 -1
  54. package/src/services/mongoose-collection.d.ts +52 -0
  55. package/src/services/mongoose-collection.d.ts.map +1 -0
  56. package/src/services/mongoose-collection.js +326 -0
  57. package/src/services/mongoose-collection.js.map +1 -0
  58. package/src/services/mongoose-database.d.ts +64 -0
  59. package/src/services/mongoose-database.d.ts.map +1 -0
  60. package/src/services/mongoose-database.js +121 -0
  61. package/src/services/mongoose-database.js.map +1 -0
  62. package/src/services/mongoose-document-store.d.ts +109 -0
  63. package/src/services/mongoose-document-store.d.ts.map +1 -0
  64. package/src/services/mongoose-document-store.js +264 -0
  65. package/src/services/mongoose-document-store.js.map +1 -0
  66. package/src/services/mongoose-session-adapter.d.ts +39 -0
  67. package/src/services/mongoose-session-adapter.d.ts.map +1 -0
  68. package/src/services/mongoose-session-adapter.js +63 -0
  69. package/src/services/mongoose-session-adapter.js.map +1 -0
  70. package/src/utils/default-mongo-uri-validator.d.ts +15 -0
  71. package/src/utils/default-mongo-uri-validator.d.ts.map +1 -0
  72. package/src/utils/default-mongo-uri-validator.js +46 -0
  73. package/src/utils/default-mongo-uri-validator.js.map +1 -0
  74. package/src/utils.d.ts +21 -2
  75. package/src/utils.d.ts.map +1 -1
  76. package/src/utils.js +124 -49
  77. package/src/utils.js.map +1 -1
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Mongoose implementation of the IDocumentStore interface.
4
+ * Wraps existing mongoose logic previously embedded in BaseApplication.
5
+ * @module services/mongoose-document-store
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MongooseDocumentStore = void 0;
9
+ const tslib_1 = require("tslib");
10
+ const mongoose_types_1 = tslib_1.__importDefault(require("@digitaldefiance/mongoose-types"));
11
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
12
+ const mongodb_memory_server_1 = require("mongodb-memory-server");
13
+ const model_registry_1 = require("../model-registry");
14
+ const utils_1 = require("../utils");
15
+ const default_mongo_uri_validator_1 = require("../utils/default-mongo-uri-validator");
16
+ /**
17
+ * Mongoose implementation of IDocumentStore.
18
+ * Extracts and preserves the existing mongoose logic from BaseApplication.
19
+ * @template TID - Platform-specific ID type extending PlatformID
20
+ * @template TModelDocs - Record mapping model names to their document types
21
+ * @template TInitResults - Type of database initialization results
22
+ * @template TConstants - Application constants type
23
+ */
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ class MongooseDocumentStore {
26
+ /**
27
+ * Mongoose database instance
28
+ */
29
+ _db;
30
+ /**
31
+ * Schema map for all models
32
+ */
33
+ _schemaMap;
34
+ /**
35
+ * In-memory MongoDB instance for development
36
+ */
37
+ _devDatabase;
38
+ /**
39
+ * Function to create the schema map given a Mongoose connection
40
+ */
41
+ _schemaMapFactory;
42
+ /**
43
+ * Function to initialize the database with default data
44
+ */
45
+ _databaseInitFunction;
46
+ /**
47
+ * Function to create a hash from the database initialization results (for logging purposes)
48
+ */
49
+ _initResultHashFunction;
50
+ /**
51
+ * Application environment
52
+ */
53
+ _environment;
54
+ /**
55
+ * Application constants
56
+ */
57
+ _constants;
58
+ constructor(schemaMapFactory, databaseInitFunction, initResultHashFunction, environment, constants = suite_core_lib_1.Constants) {
59
+ this._schemaMapFactory = schemaMapFactory;
60
+ this._databaseInitFunction = databaseInitFunction;
61
+ this._initResultHashFunction = initResultHashFunction;
62
+ this._environment = environment;
63
+ this._constants = constants;
64
+ }
65
+ /**
66
+ * Get the underlying mongoose instance (for backward compatibility).
67
+ */
68
+ get db() {
69
+ if (!this._db) {
70
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_DatabaseNotConnectedYet);
71
+ }
72
+ return this._db;
73
+ }
74
+ /** @inheritdoc */
75
+ get schemaMap() {
76
+ return this._schemaMap;
77
+ }
78
+ /** @inheritdoc */
79
+ get devDatabase() {
80
+ return this._devDatabase;
81
+ }
82
+ /**
83
+ * Validate MongoDB URI to prevent SSRF attacks.
84
+ * Delegates to the standalone defaultMongoUriValidator for reuse
85
+ * across both IDatabase and IDocumentStore paths.
86
+ */
87
+ validateMongoUri(uri) {
88
+ (0, default_mongo_uri_validator_1.defaultMongoUriValidator)(uri, this._environment.production);
89
+ }
90
+ /**
91
+ * Connect to MongoDB and initialize schemas.
92
+ * Extracted from BaseApplication.connectDatabase.
93
+ * @inheritdoc
94
+ */
95
+ async connect(uri) {
96
+ const mongoUri = uri ?? this._environment.mongo.uri;
97
+ const debug = this._environment.debug;
98
+ this.validateMongoUri(mongoUri);
99
+ (0, utils_1.debugLog)(debug, 'log', `[ ${(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_Connecting, undefined, undefined, { constants: this._constants })} ] ${(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_MongoDB, undefined, undefined, { constants: this._constants })}: ${mongoUri}`);
100
+ // Always disconnect first to ensure clean state
101
+ if (mongoose_types_1.default.connection.readyState !== 0) {
102
+ await mongoose_types_1.default.disconnect();
103
+ }
104
+ // amazonq-ignore-next-line solved above with validateMongoUri call
105
+ await mongoose_types_1.default.connect(mongoUri, {
106
+ maxPoolSize: this._environment.mongo.maxPoolSize,
107
+ minPoolSize: this._environment.mongo.minPoolSize,
108
+ maxIdleTimeMS: this._environment.mongo.maxIdleTimeMS,
109
+ serverSelectionTimeoutMS: this._environment.mongo.serverSelectionTimeoutMS,
110
+ socketTimeoutMS: this._environment.mongo.socketTimeoutMS,
111
+ retryWrites: this._environment.mongo.retryWrites,
112
+ retryReads: this._environment.mongo.retryReads,
113
+ readConcern: this._environment.mongo.readConcern,
114
+ writeConcern: this._environment.mongo.writeConcern,
115
+ });
116
+ this._db = mongoose_types_1.default;
117
+ await new Promise((resolve) => {
118
+ if (mongoose_types_1.default.connection.readyState === 1) {
119
+ resolve();
120
+ }
121
+ else {
122
+ mongoose_types_1.default.connection.once('connected', resolve);
123
+ }
124
+ });
125
+ const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
126
+ (0, utils_1.debugLog)(debug, 'log', engine.t('[ {{SuiteCoreStringKey.Common_Connected}} ] {{SuiteCoreStringKey.Common_MongoDB}}'));
127
+ (0, utils_1.debugLog)(debug, 'log', engine.t('[ {{SuiteCoreStringKey.Common_Loading}} ] {{SuiteCoreStringKey.Common_Schemas}}'));
128
+ this._schemaMap = this._schemaMapFactory(this.db.connection);
129
+ // Register all base models in ModelRegistry for extensibility
130
+ if (this._schemaMap) {
131
+ Object.values(this._schemaMap).forEach((schema) => {
132
+ model_registry_1.ModelRegistry.instance.register({
133
+ modelName: schema.modelName,
134
+ schema: schema.schema,
135
+ model: schema.model,
136
+ collection: schema.collection,
137
+ discriminators: schema.discriminators,
138
+ });
139
+ });
140
+ }
141
+ if (debug) {
142
+ Object.values(this._schemaMap).forEach((schema) => {
143
+ console.log(engine.t(`[ {{SuiteCoreStringKey.Common_Loaded}} ] {{SuiteCoreStringKey.Common_Schema}} '${schema.modelName.replace(/[\r\n]/g, '')}'`));
144
+ });
145
+ }
146
+ if (!this._db.connection.db) {
147
+ console.error(engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToSetTransactionTimeout));
148
+ }
149
+ else {
150
+ const command = {
151
+ ...(this._environment.mongo.setParameterSupported
152
+ ? { setParameter: 1 }
153
+ : {}),
154
+ ...(this._environment.mongo.useTransactions &&
155
+ this._environment.mongo.transactionLifetimeLimitSecondsSupported
156
+ ? {
157
+ transactionLifetimeLimitSeconds: this._environment.mongo.transactionTimeout,
158
+ }
159
+ : {}),
160
+ ...(this._environment.mongo.useTransactions &&
161
+ this._environment.mongo.maxTransactionLockRequestTimeoutMillisSupported
162
+ ? {
163
+ maxTransactionLockRequestTimeoutMillis: this._environment.mongo.transactionLockRequestTimeout,
164
+ }
165
+ : {}),
166
+ };
167
+ if (Object.keys(command).length > 0) {
168
+ await this._db.connection.db
169
+ .admin()
170
+ .command(command)
171
+ .catch(() => undefined);
172
+ }
173
+ (0, utils_1.debugLog)(debug, 'log', engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_SetTransactionTimeoutSuccessfully));
174
+ }
175
+ }
176
+ /**
177
+ * Disconnect from database.
178
+ * Extracted from BaseApplication.disconnectDatabase.
179
+ * @inheritdoc
180
+ */
181
+ async disconnect() {
182
+ const debug = this._environment.debug;
183
+ if (this._db && mongoose_types_1.default.connection.readyState !== 0) {
184
+ await this._db.disconnect();
185
+ }
186
+ const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
187
+ this._db = undefined;
188
+ (0, utils_1.debugLog)(debug, 'log', `[ ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Disconnected)} ] ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_MongoDB)}`);
189
+ }
190
+ /**
191
+ * Whether the store is currently connected and ready for operations.
192
+ * @inheritdoc
193
+ */
194
+ isConnected() {
195
+ return mongoose_types_1.default.connection.readyState === 1;
196
+ }
197
+ /**
198
+ * Retrieve a model/collection handle by name.
199
+ * Delegates to ModelRegistry.
200
+ * @inheritdoc
201
+ */
202
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
203
+ getModel(modelName) {
204
+ return model_registry_1.ModelRegistry.instance.get(modelName).model;
205
+ }
206
+ /**
207
+ * Set up an in-memory MongoDB instance for development.
208
+ * Extracted from BaseApplication.setupDevDatabase.
209
+ * @inheritdoc
210
+ */
211
+ async setupDevStore() {
212
+ this._devDatabase = await mongodb_memory_server_1.MongoMemoryReplSet.create({
213
+ replSet: { count: 1, storageEngine: 'wiredTiger' },
214
+ });
215
+ await this._devDatabase.waitUntilRunning();
216
+ const mongoUri = this._devDatabase.getUri(this._environment.devDatabase) +
217
+ '&maxPoolSize=20&minPoolSize=4';
218
+ this._environment.setEnvironment('mongo.uri', mongoUri);
219
+ (0, utils_1.debugLog)(this._environment.debug, 'log', `MongoDB Memory Server with transactions: ${mongoUri}`);
220
+ return mongoUri;
221
+ }
222
+ /**
223
+ * Initialize the development database with default data.
224
+ * Extracted from BaseApplication.initializeDevDatabase.
225
+ * @inheritdoc
226
+ */
227
+ async initializeDevStore(app) {
228
+ const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
229
+ (0, utils_1.debugLog)(this._environment.debug, 'log', `${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_StartingDatabaseInitialization)}: ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_TransactionsEnabledDisabledTemplate, {
230
+ STATE: this._environment.mongo.useTransactions
231
+ ? engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Enabled)
232
+ : engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Disabled),
233
+ })}`);
234
+ let initTimeout;
235
+ const initTimeoutMs = 300000;
236
+ const accountDataResult = await Promise.race([
237
+ this._databaseInitFunction(app),
238
+ new Promise((_, reject) => {
239
+ initTimeout = setTimeout(() => {
240
+ const logMsg = engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabaseTimeoutTemplate, { timeMs: initTimeoutMs.toString() });
241
+ console.error(logMsg);
242
+ reject(new Error(logMsg));
243
+ }, initTimeoutMs);
244
+ }),
245
+ ]);
246
+ if (initTimeout)
247
+ clearTimeout(initTimeout);
248
+ if (accountDataResult.success && accountDataResult.data) {
249
+ if (this._environment.detailedDebug) {
250
+ const initHash = this._initResultHashFunction(accountDataResult.data);
251
+ (0, utils_1.debugLog)(true, 'log', engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_DatabaseInitializedWithOptionsHashTemplate, { hash: initHash }));
252
+ }
253
+ return accountDataResult.data;
254
+ }
255
+ else {
256
+ if (this._environment.detailedDebug && accountDataResult.error) {
257
+ (0, utils_1.debugLog)(true, 'log', accountDataResult.error);
258
+ }
259
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabase);
260
+ }
261
+ }
262
+ }
263
+ exports.MongooseDocumentStore = MongooseDocumentStore;
264
+ //# sourceMappingURL=mongoose-document-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-document-store.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/mongoose-document-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview Mongoose session adapter implementing IClientSession.
3
+ * Wraps a mongodb ClientSession to conform to the shared IClientSession interface
4
+ * from brightchain-lib.
5
+ * @module services/mongoose-session-adapter
6
+ */
7
+ import type { IClientSession } from '../interfaces/storage';
8
+ import type { ClientSession } from 'mongodb';
9
+ /**
10
+ * Adapts a mongodb ClientSession to the IClientSession interface.
11
+ * This allows mongoose-based transaction code to work through the
12
+ * shared interface contract.
13
+ */
14
+ export declare class MongooseSessionAdapter implements IClientSession {
15
+ private readonly _session;
16
+ constructor(session: ClientSession);
17
+ /**
18
+ * Unique session ID as a string.
19
+ * Falls back to 'unknown' if the session has no server session yet.
20
+ */
21
+ get id(): string;
22
+ /**
23
+ * Whether a transaction is currently active on this session.
24
+ */
25
+ get inTransaction(): boolean;
26
+ /**
27
+ * Get the underlying mongodb ClientSession for passing to mongoose operations.
28
+ */
29
+ get nativeSession(): ClientSession;
30
+ /** Start a new transaction on this session. */
31
+ startTransaction(): void;
32
+ /** Commit the current transaction. */
33
+ commitTransaction(): Promise<void>;
34
+ /** Abort the current transaction. */
35
+ abortTransaction(): Promise<void>;
36
+ /** End this session, releasing server resources. */
37
+ endSession(): void;
38
+ }
39
+ //# sourceMappingURL=mongoose-session-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-session-adapter.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/mongoose-session-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,OAAO,EAAE,aAAa;IAIlC;;;OAGG;IACH,IAAI,EAAE,IAAI,MAAM,CAMf;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,aAAa,CAEjC;IAED,+CAA+C;IAC/C,gBAAgB,IAAI,IAAI;IAIxB,sCAAsC;IAChC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,qCAAqC;IAC/B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC,oDAAoD;IACpD,UAAU,IAAI,IAAI;CAKnB"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Mongoose session adapter implementing IClientSession.
4
+ * Wraps a mongodb ClientSession to conform to the shared IClientSession interface
5
+ * from brightchain-lib.
6
+ * @module services/mongoose-session-adapter
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MongooseSessionAdapter = void 0;
10
+ /**
11
+ * Adapts a mongodb ClientSession to the IClientSession interface.
12
+ * This allows mongoose-based transaction code to work through the
13
+ * shared interface contract.
14
+ */
15
+ class MongooseSessionAdapter {
16
+ _session;
17
+ constructor(session) {
18
+ this._session = session;
19
+ }
20
+ /**
21
+ * Unique session ID as a string.
22
+ * Falls back to 'unknown' if the session has no server session yet.
23
+ */
24
+ get id() {
25
+ const sessionId = this._session.id;
26
+ if (sessionId?.id) {
27
+ return sessionId.id.toString('hex');
28
+ }
29
+ return 'unknown';
30
+ }
31
+ /**
32
+ * Whether a transaction is currently active on this session.
33
+ */
34
+ get inTransaction() {
35
+ return this._session.inTransaction();
36
+ }
37
+ /**
38
+ * Get the underlying mongodb ClientSession for passing to mongoose operations.
39
+ */
40
+ get nativeSession() {
41
+ return this._session;
42
+ }
43
+ /** Start a new transaction on this session. */
44
+ startTransaction() {
45
+ this._session.startTransaction();
46
+ }
47
+ /** Commit the current transaction. */
48
+ async commitTransaction() {
49
+ await this._session.commitTransaction();
50
+ }
51
+ /** Abort the current transaction. */
52
+ async abortTransaction() {
53
+ await this._session.abortTransaction();
54
+ }
55
+ /** End this session, releasing server resources. */
56
+ endSession() {
57
+ // mongodb's endSession returns Promise<void>, but IClientSession declares void.
58
+ // Fire and forget — the session cleanup is best-effort.
59
+ void this._session.endSession();
60
+ }
61
+ }
62
+ exports.MongooseSessionAdapter = MongooseSessionAdapter;
63
+ //# sourceMappingURL=mongoose-session-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-session-adapter.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/mongoose-session-adapter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAKH;;;;GAIG;AACH,MAAa,sBAAsB;IAChB,QAAQ,CAAgB;IAEzC,YAAY,OAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,EAAE;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,IAAI,SAAS,EAAE,EAAE,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,+CAA+C;IAC/C,gBAAgB;QACd,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC;IAED,oDAAoD;IACpD,UAAU;QACR,gFAAgF;QAChF,wDAAwD;QACxD,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;CACF;AAtDD,wDAsDC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Default MongoDB URI validator with SSRF protection.
3
+ * Extracted from MongooseDocumentStore.validateMongoUri() for reuse
4
+ * across both IDatabase and IDocumentStore paths.
5
+ * @module utils/default-mongo-uri-validator
6
+ */
7
+ /**
8
+ * Default MongoDB URI validator with SSRF protection.
9
+ * Rejects non-mongodb protocols and private/localhost addresses in production.
10
+ * @param uri - The MongoDB connection URI to validate
11
+ * @param production - Whether the application is running in production mode
12
+ * @throws {TranslatableSuiteError} If the URI is invalid or targets a private address in production
13
+ */
14
+ export declare function defaultMongoUriValidator(uri: string, production: boolean): void;
15
+ //# sourceMappingURL=default-mongo-uri-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-mongo-uri-validator.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/utils/default-mongo-uri-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,OAAO,GAClB,IAAI,CAmCN"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Default MongoDB URI validator with SSRF protection.
4
+ * Extracted from MongooseDocumentStore.validateMongoUri() for reuse
5
+ * across both IDatabase and IDocumentStore paths.
6
+ * @module utils/default-mongo-uri-validator
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.defaultMongoUriValidator = defaultMongoUriValidator;
10
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
11
+ /**
12
+ * Default MongoDB URI validator with SSRF protection.
13
+ * Rejects non-mongodb protocols and private/localhost addresses in production.
14
+ * @param uri - The MongoDB connection URI to validate
15
+ * @param production - Whether the application is running in production mode
16
+ * @throws {TranslatableSuiteError} If the URI is invalid or targets a private address in production
17
+ */
18
+ function defaultMongoUriValidator(uri, production) {
19
+ // Validate protocol
20
+ if (!uri.startsWith('mongodb://') && !uri.startsWith('mongodb+srv://')) {
21
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_InvalidMongoUri);
22
+ }
23
+ // In production, block private IPs and localhost
24
+ if (production) {
25
+ // Updated regex to handle IPv6 addresses with brackets
26
+ const urlMatch = uri.match(/^mongodb(?:\+srv)?:\/\/(?:[^@]+@)?(\[[^\]]+\]|[^:/]+)/);
27
+ if (urlMatch) {
28
+ // Remove brackets from hostname for IPv6 addresses
29
+ const hostname = urlMatch[1].replace(/[[\]]/g, '');
30
+ // Block localhost and private IP ranges
31
+ if (hostname === 'localhost' ||
32
+ hostname === '127.0.0.1' ||
33
+ hostname.startsWith('10.') ||
34
+ hostname.startsWith('192.168.') ||
35
+ /^172\.(1[6-9]|2[0-9]|3[0-1])\./.test(hostname) ||
36
+ hostname.startsWith('169.254.') || // Link-local
37
+ hostname === '::1' || // IPv6 localhost
38
+ hostname.startsWith('fc00:') || // IPv6 private
39
+ hostname.startsWith('fd00:') // IPv6 private
40
+ ) {
41
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_InvalidMongoUri);
42
+ }
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=default-mongo-uri-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-mongo-uri-validator.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/utils/default-mongo-uri-validator.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAcH,4DAsCC;AAlDD,oEAGyC;AAEzC;;;;;;GAMG;AACH,SAAgB,wBAAwB,CACtC,GAAW,EACX,UAAmB;IAEnB,oBAAoB;IACpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,2BAA2B,CAC/C,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,IAAI,UAAU,EAAE,CAAC;QACf,uDAAuD;QACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CACxB,uDAAuD,CACxD,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,mDAAmD;YACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACnD,wCAAwC;YACxC,IACE,QAAQ,KAAK,WAAW;gBACxB,QAAQ,KAAK,WAAW;gBACxB,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC1B,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC/B,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC/C,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,aAAa;gBAChD,QAAQ,KAAK,KAAK,IAAI,iBAAiB;gBACvC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,eAAe;gBAC/C,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,eAAe;cAC5C,CAAC;gBACD,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,2BAA2B,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
package/src/utils.d.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  * Provides comprehensive helpers for API responses, MongoDB transactions, validation, and cryptographic operations.
4
4
  * @module utils
5
5
  */
6
+ import type { IClientSession, IDatabase } from './interfaces/storage';
6
7
  import { ClientSession, Connection } from '@digitaldefiance/mongoose-types';
7
8
  import { NextFunction, Request, Response } from 'express';
8
9
  import { ValidationError } from 'express-validator';
@@ -110,7 +111,25 @@ export interface TransactionOptions<TID extends PlatformID = Buffer> {
110
111
  */
111
112
  export declare function getDefaultBaseDelay(): number;
112
113
  /**
113
- * Wraps a callback in a transaction if necessary
114
+ * Transaction callback type for IDatabase-based transactions.
115
+ * Accepts an IClientSession instead of a mongoose ClientSession.
116
+ */
117
+ export type IDatabaseTransactionCallback<T> = (session: IClientSession | undefined, ...args: Array<unknown>) => Promise<T>;
118
+ /**
119
+ * Wraps a callback in a transaction if necessary.
120
+ * Overload accepting IDatabase for storage-agnostic transaction support.
121
+ * @param database The IDatabase instance
122
+ * @param useTransaction Whether to use a transaction
123
+ * @param session The IClientSession to use (or undefined to create one)
124
+ * @param callback The callback to wrap
125
+ * @param options Transaction options including timeout and retry attempts
126
+ * @param args The arguments to pass to the callback
127
+ * @returns The result of the callback
128
+ */
129
+ export declare function withTransaction<T, TID extends PlatformID = Buffer>(database: IDatabase, useTransaction: boolean, session: IClientSession | undefined, callback: IDatabaseTransactionCallback<T>, options?: TransactionOptions<TID>, ...args: Array<unknown>): Promise<T>;
130
+ /**
131
+ * Wraps a callback in a transaction if necessary.
132
+ * Legacy overload accepting a mongoose Connection.
114
133
  * @param connection The mongoose connection
115
134
  * @param useTransaction Whether to use a transaction
116
135
  * @param session The session to use
@@ -119,7 +138,7 @@ export declare function getDefaultBaseDelay(): number;
119
138
  * @param args The arguments to pass to the callback
120
139
  * @returns The result of the callback
121
140
  */
122
- export declare function withTransaction<T, TID extends PlatformID = Buffer>(connection: Connection, useTransaction: boolean, session: ClientSession | undefined, callback: TransactionCallback<T>, options?: TransactionOptions<TID>, ...args: any): Promise<T>;
141
+ export declare function withTransaction<T, TID extends PlatformID = Buffer>(connection: Connection, useTransaction: boolean, session: ClientSession | undefined, callback: TransactionCallback<T>, options?: TransactionOptions<TID>, ...args: Array<unknown>): Promise<T>;
123
142
  /**
124
143
  * Sends an API response with the given status and response object.
125
144
  * @param status
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-express-suite/src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-express-suite/src/utils.ts"],"names":[],"mappings":"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"}