@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.
- package/package.json +1 -1
- package/src/application-base.d.ts +50 -47
- package/src/application-base.d.ts.map +1 -1
- package/src/application-base.js +180 -229
- package/src/application-base.js.map +1 -1
- package/src/application.d.ts +2 -1
- package/src/application.d.ts.map +1 -1
- package/src/application.js +8 -4
- package/src/application.js.map +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +3 -1
- package/src/index.js.map +1 -1
- package/src/interfaces/document-store.d.ts +38 -0
- package/src/interfaces/document-store.d.ts.map +1 -0
- package/src/interfaces/document-store.js +8 -0
- package/src/interfaces/document-store.js.map +1 -0
- package/src/interfaces/failable-result.d.ts +1 -6
- package/src/interfaces/failable-result.d.ts.map +1 -1
- package/src/interfaces/failable-result.js +0 -5
- package/src/interfaces/failable-result.js.map +1 -1
- package/src/interfaces/index.d.ts +2 -0
- package/src/interfaces/index.d.ts.map +1 -1
- package/src/interfaces/index.js +2 -0
- package/src/interfaces/index.js.map +1 -1
- package/src/interfaces/storage/client-session.d.ts +22 -0
- package/src/interfaces/storage/client-session.d.ts.map +1 -0
- package/src/interfaces/storage/client-session.js +3 -0
- package/src/interfaces/storage/client-session.js.map +1 -0
- package/src/interfaces/storage/collection.d.ts +80 -0
- package/src/interfaces/storage/collection.d.ts.map +1 -0
- package/src/interfaces/storage/collection.js +3 -0
- package/src/interfaces/storage/collection.js.map +1 -0
- package/src/interfaces/storage/database-lifecycle-hooks.d.ts +43 -0
- package/src/interfaces/storage/database-lifecycle-hooks.d.ts.map +1 -0
- package/src/interfaces/storage/database-lifecycle-hooks.js +3 -0
- package/src/interfaces/storage/database-lifecycle-hooks.js.map +1 -0
- package/src/interfaces/storage/database.d.ts +30 -0
- package/src/interfaces/storage/database.d.ts.map +1 -0
- package/src/interfaces/storage/database.js +3 -0
- package/src/interfaces/storage/database.js.map +1 -0
- package/src/interfaces/storage/document-types.d.ts +413 -0
- package/src/interfaces/storage/document-types.d.ts.map +1 -0
- package/src/interfaces/storage/document-types.js +8 -0
- package/src/interfaces/storage/document-types.js.map +1 -0
- package/src/interfaces/storage/index.d.ts +6 -0
- package/src/interfaces/storage/index.d.ts.map +1 -0
- package/src/interfaces/storage/index.js +9 -0
- package/src/interfaces/storage/index.js.map +1 -0
- package/src/services/index.d.ts +4 -0
- package/src/services/index.d.ts.map +1 -1
- package/src/services/index.js +4 -0
- package/src/services/index.js.map +1 -1
- 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 +109 -0
- package/src/services/mongoose-document-store.d.ts.map +1 -0
- package/src/services/mongoose-document-store.js +264 -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/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.d.ts +21 -2
- package/src/utils.d.ts.map +1 -1
- package/src/utils.js +124 -49
- 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
|
-
*
|
|
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:
|
|
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
|
package/src/utils.d.ts.map
CHANGED
|
@@ -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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"}
|