@xyo-network/module-abstract-mongodb 5.3.29 → 5.4.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 CHANGED
@@ -38,441 +38,6 @@ bun add {{name}}
38
38
 
39
39
  See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
40
40
 
41
- ## Reference
42
-
43
- ### packages
44
-
45
- ### modules
46
-
47
- ### packages
48
-
49
- ### module
50
-
51
- ### packages
52
-
53
- ### mongodb
54
-
55
- ### packages
56
-
57
- ### abstract
58
-
59
- ### .temp-typedoc
60
-
61
- ### functions
62
-
63
- ### <a id="MongoDBModuleMixin"></a>MongoDBModuleMixin
64
-
65
- [**@xyo-network/module-abstract-mongodb**](#../README)
66
-
67
- ***
68
-
69
- ```ts
70
- function MongoDBModuleMixin<TParams, TModule>(ModuleBase): {
71
- (...args): MongoModuleBase<TParams>;
72
- labels: MongoDBStorageClassLabels;
73
- prototype: MongoModuleBase<any, any>;
74
- } & TModule;
75
- ```
76
-
77
- ## Type Parameters
78
-
79
- ### TParams
80
-
81
- `TParams` *extends* `MongoDBModuleParams` = `MongoDBModuleParams`
82
-
83
- ### TModule
84
-
85
- `TModule` *extends* `AnyAbstractModule`\<`TParams`\> = `AnyAbstractModule`\<`TParams`\>
86
-
87
- ## Parameters
88
-
89
- ### ModuleBase
90
-
91
- `TModule`
92
-
93
- ## Returns
94
-
95
- \{
96
- (...`args`): `MongoModuleBase`\<`TParams`\>;
97
- `labels`: `MongoDBStorageClassLabels`;
98
- `prototype`: `MongoModuleBase`\<`any`, `any`\>;
99
- \} & `TModule`
100
-
101
- ### <a id="MongoDBModuleMixinV2"></a>MongoDBModuleMixinV2
102
-
103
- [**@xyo-network/module-abstract-mongodb**](#../README)
104
-
105
- ***
106
-
107
- ```ts
108
- function MongoDBModuleMixinV2<TParams, TModule>(ModuleBase): {
109
- (...args): MongoModuleBase<TParams>;
110
- labels: MongoDBStorageClassLabels;
111
- prototype: MongoModuleBase<any, any>;
112
- } & TModule;
113
- ```
114
-
115
- ## Type Parameters
116
-
117
- ### TParams
118
-
119
- `TParams` *extends* `MongoDBModuleParamsV2`\<`AnyConfigSchema`\<`MongoDBModuleConfigV2`\>\> = `MongoDBModuleParamsV2`\<`AnyConfigSchema`\<`MongoDBModuleConfigV2`\>\>
120
-
121
- ### TModule
122
-
123
- `TModule` *extends* `AnyAbstractModule`\<`TParams`\> = `AnyAbstractModule`\<`TParams`\>
124
-
125
- ## Parameters
126
-
127
- ### ModuleBase
128
-
129
- `TModule`
130
-
131
- ## Returns
132
-
133
- \{
134
- (...`args`): `MongoModuleBase`\<`TParams`\>;
135
- `labels`: `MongoDBStorageClassLabels`;
136
- `prototype`: `MongoModuleBase`\<`any`, `any`\>;
137
- \} & `TModule`
138
-
139
- ### <a id="fromDbProperty"></a>fromDbProperty
140
-
141
- [**@xyo-network/module-abstract-mongodb**](#../README)
142
-
143
- ***
144
-
145
- ```ts
146
- function fromDbProperty(value): string;
147
- ```
148
-
149
- ## Parameters
150
-
151
- ### value
152
-
153
- `string`
154
-
155
- ## Returns
156
-
157
- `string`
158
-
159
- ### <a id="getBaseMongoSdk"></a>getBaseMongoSdk
160
-
161
- [**@xyo-network/module-abstract-mongodb**](#../README)
162
-
163
- ***
164
-
165
- ```ts
166
- function getBaseMongoSdk<T>(collection): BaseMongoSdk<T>;
167
- ```
168
-
169
- ## Type Parameters
170
-
171
- ### T
172
-
173
- `T` *extends* `Document`
174
-
175
- ## Parameters
176
-
177
- ### collection
178
-
179
- `string`
180
-
181
- ## Returns
182
-
183
- `BaseMongoSdk`\<`T`\>
184
-
185
- ### <a id="getBaseMongoSdkPrivateConfig"></a>getBaseMongoSdkPrivateConfig
186
-
187
- [**@xyo-network/module-abstract-mongodb**](#../README)
188
-
189
- ***
190
-
191
- ```ts
192
- function getBaseMongoSdkPrivateConfig(): BaseMongoSdkPrivateConfig;
193
- ```
194
-
195
- ## Returns
196
-
197
- `BaseMongoSdkPrivateConfig`
198
-
199
- ### <a id="getMongoDBConfig"></a>getMongoDBConfig
200
-
201
- [**@xyo-network/module-abstract-mongodb**](#../README)
202
-
203
- ***
204
-
205
- ```ts
206
- function getMongoDBConfig(): MongoEnv;
207
- ```
208
-
209
- ## Returns
210
-
211
- [`MongoEnv`](#../type-aliases/MongoEnv)
212
-
213
- ### <a id="hasMongoDBConfig"></a>hasMongoDBConfig
214
-
215
- [**@xyo-network/module-abstract-mongodb**](#../README)
216
-
217
- ***
218
-
219
- ```ts
220
- function hasMongoDBConfig(): boolean;
221
- ```
222
-
223
- ## Returns
224
-
225
- `boolean`
226
-
227
- ### <a id="toDbProperty"></a>toDbProperty
228
-
229
- [**@xyo-network/module-abstract-mongodb**](#../README)
230
-
231
- ***
232
-
233
- ```ts
234
- function toDbProperty(value): string;
235
- ```
236
-
237
- ## Parameters
238
-
239
- ### value
240
-
241
- `string`
242
-
243
- ## Returns
244
-
245
- `string`
246
-
247
- ### type-aliases
248
-
249
- ### <a id="CollectionIndexFunction"></a>CollectionIndexFunction
250
-
251
- [**@xyo-network/module-abstract-mongodb**](#../README)
252
-
253
- ***
254
-
255
- ```ts
256
- type CollectionIndexFunction = (collectionName) => IndexDescription[];
257
- ```
258
-
259
- ## Parameters
260
-
261
- ### collectionName
262
-
263
- `string`
264
-
265
- ## Returns
266
-
267
- `IndexDescription`[]
268
-
269
- ### <a id="IndexDescription"></a>IndexDescription
270
-
271
- [**@xyo-network/module-abstract-mongodb**](#../README)
272
-
273
- ***
274
-
275
- ```ts
276
- type IndexDescription = object;
277
- ```
278
-
279
- Description of index(es) to be created on a store
280
-
281
- ## Properties
282
-
283
- ### key
284
-
285
- ```ts
286
- key:
287
- | {
288
- [key: string]: IndexDirection;
289
- }
290
- | Map<string, IndexDirection>;
291
- ```
292
-
293
- The key(s) to index
294
-
295
- ***
296
-
297
- ### name?
298
-
299
- ```ts
300
- optional name?: string;
301
- ```
302
-
303
- The name of the index
304
-
305
- ***
306
-
307
- ### unique?
308
-
309
- ```ts
310
- optional unique?: boolean;
311
- ```
312
-
313
- If true, the index must enforce uniqueness on the key
314
-
315
- ### <a id="IndexDirection"></a>IndexDirection
316
-
317
- [**@xyo-network/module-abstract-mongodb**](#../README)
318
-
319
- ***
320
-
321
- ```ts
322
- type IndexDirection = -1 | 1;
323
- ```
324
-
325
- The index direction (1 for ascending, -1 for descending)
326
-
327
- ### <a id="MongoDbConnectionStringEnvVar"></a>MongoDbConnectionStringEnvVar
328
-
329
- [**@xyo-network/module-abstract-mongodb**](#../README)
330
-
331
- ***
332
-
333
- ```ts
334
- type MongoDbConnectionStringEnvVar = "MONGO_CONNECTION_STRING";
335
- ```
336
-
337
- ### <a id="MongoDbEnvVars"></a>MongoDbEnvVars
338
-
339
- [**@xyo-network/module-abstract-mongodb**](#../README)
340
-
341
- ***
342
-
343
- ```ts
344
- type MongoDbEnvVars = "MONGO_DATABASE" | "MONGO_DOMAIN" | "MONGO_PASSWORD" | "MONGO_USERNAME";
345
- ```
346
-
347
- ### <a id="MongoEnv"></a>MongoEnv
348
-
349
- [**@xyo-network/module-abstract-mongodb**](#../README)
350
-
351
- ***
352
-
353
- ```ts
354
- type MongoEnv = Record<
355
- | MongoDbEnvVars
356
- | MongoDbConnectionStringEnvVar, string | undefined>;
357
- ```
358
-
359
- ### variables
360
-
361
- ### <a id="COLLECTIONS"></a>COLLECTIONS
362
-
363
- [**@xyo-network/module-abstract-mongodb**](#../README)
364
-
365
- ***
366
-
367
- ```ts
368
- const COLLECTIONS: object;
369
- ```
370
-
371
- ## Type Declaration
372
-
373
- ### AddressInfo
374
-
375
- ```ts
376
- AddressInfo: "address_info";
377
- ```
378
-
379
- ### ArchivistStats
380
-
381
- ```ts
382
- ArchivistStats: "archivist_stats";
383
- ```
384
-
385
- ### BoundWitnesses
386
-
387
- ```ts
388
- BoundWitnesses: "bound_witnesses";
389
- ```
390
-
391
- ### Payloads
392
-
393
- ```ts
394
- Payloads: "payloads";
395
- ```
396
-
397
- ### Thumbnails
398
-
399
- ```ts
400
- Thumbnails: "thumbnails";
401
- ```
402
-
403
- ### Users
404
-
405
- ```ts
406
- Users: "users";
407
- ```
408
-
409
- ### <a id="DATABASES"></a>DATABASES
410
-
411
- [**@xyo-network/module-abstract-mongodb**](#../README)
412
-
413
- ***
414
-
415
- ```ts
416
- const DATABASES: object;
417
- ```
418
-
419
- ## Type Declaration
420
-
421
- ### Archivist
422
-
423
- ```ts
424
- Archivist: "archivist";
425
- ```
426
-
427
- ### <a id="DefaultAggregateTimeoutMs"></a>DefaultAggregateTimeoutMs
428
-
429
- [**@xyo-network/module-abstract-mongodb**](#../README)
430
-
431
- ***
432
-
433
- ```ts
434
- const DefaultAggregateTimeoutMs: 10000 = 10_000;
435
- ```
436
-
437
- ### <a id="DefaultLimit"></a>DefaultLimit
438
-
439
- [**@xyo-network/module-abstract-mongodb**](#../README)
440
-
441
- ***
442
-
443
- ```ts
444
- const DefaultLimit: 20 = 20;
445
- ```
446
-
447
- ### <a id="DefaultMaxTimeMS"></a>DefaultMaxTimeMS
448
-
449
- [**@xyo-network/module-abstract-mongodb**](#../README)
450
-
451
- ***
452
-
453
- ```ts
454
- const DefaultMaxTimeMS: 2000 = 2000;
455
- ```
456
-
457
- ### <a id="DefaultOrder"></a>DefaultOrder
458
-
459
- [**@xyo-network/module-abstract-mongodb**](#../README)
460
-
461
- ***
462
-
463
- ```ts
464
- const DefaultOrder: "desc" = 'desc';
465
- ```
466
-
467
- ### <a id="escapeChar"></a>escapeChar
468
-
469
- [**@xyo-network/module-abstract-mongodb**](#../README)
470
-
471
- ***
472
-
473
- ```ts
474
- const escapeChar: "#" = '#';
475
- ```
476
41
 
477
42
 
478
43
  [logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
@@ -5,13 +5,11 @@ export type IndexDirection = -1 | 1;
5
5
  /**
6
6
  * Description of index(es) to be created on a store
7
7
  */
8
- export type IndexDescription = {
8
+ export interface IndexDescription {
9
9
  /**
10
10
  * The key(s) to index
11
11
  */
12
- key: {
13
- [key: string]: IndexDirection;
14
- } | Map<string, IndexDirection>;
12
+ key: Record<string, IndexDirection> | Map<string, IndexDirection>;
15
13
  /**
16
14
  * The name of the index
17
15
  */
@@ -20,5 +18,5 @@ export type IndexDescription = {
20
18
  * If true, the index must enforce uniqueness on the key
21
19
  */
22
20
  unique?: boolean;
23
- };
21
+ }
24
22
  //# sourceMappingURL=IndexDescription.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IndexDescription.d.ts","sourceRoot":"","sources":["../../src/IndexDescription.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AAEnC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,GAAG,EACC;QACA,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAC9B,GACC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA"}
1
+ {"version":3,"file":"IndexDescription.d.ts","sourceRoot":"","sources":["../../src/IndexDescription.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AAEnC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,GAAG,EACC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAC9B,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
@@ -1,13 +1,15 @@
1
- import { BaseMongoSdk, BaseMongoSdkConfig } from '@xylabs/mongo';
2
- import { MongoDBModuleParams, MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb';
3
- import { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
4
- import { AnyAbstractModule } from './AnyAbstractModule.ts';
1
+ import type { BaseMongoSdkConfig } from '@xylabs/mongo';
2
+ import { BaseMongoSdk } from '@xylabs/mongo';
3
+ import type { JobQueue, MongoDBModuleParams } from '@xyo-network/module-model-mongodb';
4
+ import { MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb';
5
+ import type { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
6
+ import type { AnyAbstractModule } from './AnyAbstractModule.ts';
5
7
  export declare const MongoDBModuleMixin: <TParams extends MongoDBModuleParams = MongoDBModuleParams, TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>>(ModuleBase: TModule) => ((abstract new (...args: any[]) => {
6
8
  _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined;
7
9
  _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined;
8
10
  get boundWitnessSdkConfig(): BaseMongoSdkConfig;
9
11
  get boundWitnesses(): BaseMongoSdk<BoundWitnessWithMongoMeta>;
10
- get jobQueue(): import("@xyo-network/shared").JobQueue;
12
+ get jobQueue(): JobQueue;
11
13
  get payloadSdkConfig(): BaseMongoSdkConfig;
12
14
  get payloads(): BaseMongoSdk<PayloadWithMongoMeta>;
13
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../../src/Module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAO,EACU,mBAAmB,EAAE,yBAAyB,EAC9D,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAG9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAkB1D,eAAO,MAAM,kBAAkB,GAC7B,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EACzD,OAAO,SAAS,iBAAiB,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAEvE,YAAY,OAAO;sBAKC,YAAY,CAAC,yBAAyB,CAAC,GAAG,SAAS;iBACxD,YAAY,CAAC,oBAAoB,CAAC,GAAG,SAAS;iCAE9B,kBAAkB;;;4BAmBvB,kBAAkB;;IAe1C;;;OAGG;qBACoB,OAAO,CAAC,IAAI,CAAC;;;;;;;;sRAlDnB,CAAC,6DACZ,CAAC;4RAKA,CAAC,6DACP,CAAC;;;;;;;;;;;;;;;;YAuDL,CAAA"}
1
+ {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../../src/Module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,KAAK,EACV,QAAQ,EACO,mBAAmB,EACnC,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAkB/D,eAAO,MAAM,kBAAkB,GAC7B,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EACzD,OAAO,SAAS,iBAAiB,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAEvE,YAAY,OAAO;sBAKC,YAAY,CAAC,yBAAyB,CAAC,GAAG,SAAS;iBACxD,YAAY,CAAC,oBAAoB,CAAC,GAAG,SAAS;iCAE9B,kBAAkB;;oBAe/B,QAAQ;4BAIA,kBAAkB;;IAe1C;;;OAGG;qBACoB,OAAO,CAAC,IAAI,CAAC;;;;;;;;sRAzDE,CAAC,6DACxC,CAAC;4RAOoD,CAAC,6DACrC,CAAC;;;;;;;;;;;;;;;;YA4DpB,CAAA"}
@@ -1,10 +1,12 @@
1
- import { BaseMongoSdk, BaseMongoSdkConfig } from '@xylabs/mongo';
2
- import { MongoDBModuleParamsV2, MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb';
3
- import { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
4
- import { AnyAbstractModule } from './AnyAbstractModule.ts';
1
+ import type { BaseMongoSdkConfig } from '@xylabs/mongo';
2
+ import { BaseMongoSdk } from '@xylabs/mongo';
3
+ import type { JobQueue, MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb';
4
+ import { MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb';
5
+ import type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
6
+ import type { AnyAbstractModule } from './AnyAbstractModule.ts';
5
7
  export declare const MongoDBModuleMixinV2: <TParams extends MongoDBModuleParamsV2 = MongoDBModuleParamsV2, TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>>(ModuleBase: TModule) => ((abstract new (...args: any[]) => {
6
8
  _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined;
7
- get jobQueue(): import("@xyo-network/shared").JobQueue;
9
+ get jobQueue(): JobQueue;
8
10
  get payloadSdkConfig(): BaseMongoSdkConfig;
9
11
  get payloads(): BaseMongoSdk<PayloadWithMongoMeta>;
10
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleV2.d.ts","sourceRoot":"","sources":["../../src/ModuleV2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAIhE,OAAO,EACL,qBAAqB,EAAwC,yBAAyB,EACvF,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAkB1D,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,qBAAqB,GAAG,qBAAqB,EAC7D,OAAO,SAAS,iBAAiB,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAEvE,YAAY,OAAO;iBAKJ,YAAY,CAAC,oBAAoB,CAAC,GAAG,SAAS;;4BAMnC,kBAAkB;;IA6B1C;;;OAGG;wBACuB,OAAO,CAAC,IAAI,CAAC;;;;;;;;sRAhDpC,CAAC,6DAAwB,CAAC;4RAIZ,CAAC,6DAEN,CAAC;;;;;;;;;;;;;;;;YA8DhB,CAAA"}
1
+ {"version":3,"file":"ModuleV2.d.ts","sourceRoot":"","sources":["../../src/ModuleV2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAI5C,OAAO,KAAK,EACV,QAAQ,EACR,qBAAqB,EACtB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAkB/D,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,qBAAqB,GAAG,qBAAqB,EAC7D,OAAO,SAAS,iBAAiB,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAEvE,YAAY,OAAO;iBAKJ,YAAY,CAAC,oBAAoB,CAAC,GAAG,SAAS;oBAE3C,QAAQ;4BAIA,kBAAkB;;IA6B1C;;;OAGG;wBACuB,OAAO,CAAC,IAAI,CAAC;;;;;;;;sRAvDhB,CAAC,6DAAwB,CAAC;4RAQb,CAAC,6DACvC,CAAD;;;;;;;;;;;;;;;;YAkEA,CAAA"}
@@ -75,9 +75,7 @@ var DefaultOrder = "desc";
75
75
  // src/Module.ts
76
76
  import { BaseMongoSdk as BaseMongoSdk2 } from "@xylabs/mongo";
77
77
  import { assertEx as assertEx2, staticImplements } from "@xylabs/sdk-js";
78
- import {
79
- MongoDBStorageClassLabels
80
- } from "@xyo-network/module-model-mongodb";
78
+ import { MongoDBStorageClassLabels } from "@xyo-network/module-model-mongodb";
81
79
 
82
80
  // src/merge.ts
83
81
  function isObject(val) {
@@ -208,9 +206,7 @@ import {
208
206
  isDefined,
209
207
  staticImplements as staticImplements2
210
208
  } from "@xylabs/sdk-js";
211
- import {
212
- MongoDBStorageClassLabels as MongoDBStorageClassLabels2
213
- } from "@xyo-network/module-model-mongodb";
209
+ import { MongoDBStorageClassLabels as MongoDBStorageClassLabels2 } from "@xyo-network/module-model-mongodb";
214
210
  var standardIndexes2 = [
215
211
  {
216
212
  name: "UX__hash",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Collections.ts","../../src/config/getBaseMongoSdk.ts","../../src/config/getMongoDBConfig.ts","../../src/config/hasMongoDBConfig.ts","../../src/Databases.ts","../../src/Defaults.ts","../../src/Module.ts","../../src/merge.ts","../../src/ModuleV2.ts","../../src/util/dbProperty.ts"],"sourcesContent":["// TODO: By DB\nexport const COLLECTIONS = {\n AddressInfo: 'address_info' as const,\n ArchivistStats: 'archivist_stats' as const,\n BoundWitnesses: 'bound_witnesses' as const,\n Payloads: 'payloads' as const,\n Thumbnails: 'thumbnails' as const,\n Users: 'users' as const,\n}\n","import type { BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Document } from 'mongodb'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.ts'\n\nexport const getBaseMongoSdkPrivateConfig = (): BaseMongoSdkPrivateConfig => {\n const env = getMongoDBConfig()\n return {\n dbConnectionString: env.MONGO_CONNECTION_STRING,\n dbDomain: assertEx(env.MONGO_DOMAIN, () => 'Missing Mongo Domain'),\n dbName: assertEx(env.MONGO_DATABASE, () => 'Missing Mongo Database'),\n dbPassword: assertEx(env.MONGO_PASSWORD, () => 'Missing Mongo Password'),\n dbUserName: assertEx(env.MONGO_USERNAME, () => 'Missing Mongo Username'),\n }\n}\n\nexport const getBaseMongoSdk = <T extends Document>(collection: string) => {\n return new BaseMongoSdk<T>({ ...getBaseMongoSdkPrivateConfig(), collection })\n}\n","export type MongoDbConnectionStringEnvVar = 'MONGO_CONNECTION_STRING'\nexport type MongoDbEnvVars = 'MONGO_DATABASE' | 'MONGO_DOMAIN' | 'MONGO_PASSWORD' | 'MONGO_USERNAME'\n\nexport type MongoEnv = Record<MongoDbEnvVars | MongoDbConnectionStringEnvVar, string | undefined>\n\nexport const getMongoDBConfig = (): MongoEnv => {\n const env: MongoEnv = {} as MongoEnv\n if (process.env.MONGO_CONNECTION_STRING) {\n env.MONGO_CONNECTION_STRING = process.env.MONGO_CONNECTION_STRING\n }\n if (process.env.MONGO_DOMAIN) {\n env.MONGO_DATABASE = process.env.MONGO_DATABASE\n env.MONGO_DOMAIN = process.env.MONGO_DOMAIN\n env.MONGO_PASSWORD = process.env.MONGO_PASSWORD\n env.MONGO_USERNAME = process.env.MONGO_USERNAME\n }\n return env\n}\n","import { exists } from '@xylabs/sdk-js'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.ts'\n\nexport const hasMongoDBConfig = (): boolean => {\n const env = getMongoDBConfig()\n const requiredValues = [env.MONGO_CONNECTION_STRING, env.MONGO_DATABASE, env.MONGO_DOMAIN, env.MONGO_PASSWORD, env.MONGO_USERNAME]\n return requiredValues.every(exists)\n}\n","export const DATABASES = { Archivist: 'archivist' as const }\n","export const DefaultAggregateTimeoutMs = 10_000\nexport const DefaultLimit = 20\nexport const DefaultMaxTimeMS = 2000\nexport const DefaultOrder = 'desc'\n","import { BaseMongoSdk, BaseMongoSdkConfig } from '@xylabs/mongo'\nimport { assertEx, staticImplements } from '@xylabs/sdk-js'\nimport {\n MongoDBModule, MongoDBModuleParams, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { MongoServerError } from 'mongodb'\n\nimport { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport { IndexDescription } from './IndexDescription.ts'\nimport { merge } from './merge.ts'\n\nconst standardIndexes: IndexDescription[] = [\n {\n name: 'IX__hash', key: { _hash: 1 }, unique: false,\n },\n {\n name: 'IX__dataHash', key: { _dataHash: 1 }, unique: false,\n },\n {\n name: 'IX__sequence', key: { _sequence: 1 }, unique: false,\n },\n]\n\nexport const MongoDBModuleMixin = <\n TParams extends MongoDBModuleParams = MongoDBModuleParams,\n TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>,\n>(\n ModuleBase: TModule,\n) => {\n @staticImplements<TModule>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModule {\n static readonly labels = MongoDBStorageClassLabels\n _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined\n _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n get boundWitnessSdkConfig(): BaseMongoSdkConfig {\n const config = { collection: COLLECTIONS.BoundWitnesses, ...getBaseMongoSdkPrivateConfig() }\n return merge(\n config,\n this.params.boundWitnessSdkConfig,\n this.config.boundWitnessSdkConfig,\n { collection: this.config.boundWitnessSdkConfig?.collection ?? this.params.boundWitnessSdkConfig?.collection ?? COLLECTIONS.BoundWitnesses },\n )\n }\n\n get boundWitnesses() {\n this._boundWitnessSdk = this._boundWitnessSdk ?? new BaseMongoSdk<BoundWitnessWithMongoMeta>(this.boundWitnessSdkConfig)\n return assertEx(this._boundWitnessSdk)\n }\n\n get jobQueue() {\n return assertEx(this.params.jobQueue, () => 'MongoDBModule Error: jobQueue required for this module but is not defined')\n }\n\n get payloadSdkConfig(): BaseMongoSdkConfig {\n const config = { collection: COLLECTIONS.Payloads, ...getBaseMongoSdkPrivateConfig() }\n return merge(\n config,\n this.params.payloadSdkConfig,\n this.config.payloadSdkConfig,\n { collection: this.config.payloadSdkConfig?.collection ?? this.params.payloadSdkConfig?.collection ?? COLLECTIONS.Payloads },\n )\n }\n\n get payloads() {\n this._payloadSdk = this._payloadSdk ?? new BaseMongoSdk<PayloadWithMongoMeta>(this.payloadSdkConfig)\n return assertEx(this._payloadSdk)\n }\n\n /**\n * Ensures any indexes specified within the config are created. This method should be idempotent\n * allowing for multiple calls without causing errors while ensuring the desired state.\n */\n async ensureIndexes(): Promise<void> {\n const configIndexes = (this.config as { storage?: { indexes?: IndexDescription[] } })?.storage?.indexes ?? []\n const boundWitnessesCollectionName = this.boundWitnessSdkConfig.collection\n const payloadCollectionName = this.payloadSdkConfig.collection\n\n const bwStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${boundWitnessesCollectionName}.${ix.name}` }))\n await ensureIndexesExistOnCollection(this.boundWitnesses, [...bwStandardIndexes, ...configIndexes])\n const payloadStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }))\n await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes, ...configIndexes])\n }\n }\n return MongoModuleBase\n}\n\n/**\n * Ensures the specified indexes exist on the collection\n * @param sdk The sdk to use for the collection\n * @param configIndexes The indexes to ensure exist on the collection\n */\nconst ensureIndexesExistOnCollection = async (\n sdk: BaseMongoSdk<PayloadWithMongoMeta> | BaseMongoSdk<BoundWitnessWithMongoMeta>,\n configIndexes: IndexDescription[],\n) => {\n await sdk.useCollection(async (collection) => {\n const collectionName = collection.collectionName.toLowerCase()\n const indexes = configIndexes.filter(ix => ix?.name?.toLowerCase().startsWith(collectionName))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = mongoServerError\n if (codeName === 'IndexKeySpecsConflict' || codeName === 'IndexOptionsConflict') {\n // Index already exists which is fine OR index exists with another name which is fine\n // TODO: For the latter case (IndexOptionsConflict) we could get into this case\n // if we change the TTL an existing index. We currently don't support TTLs so\n // we'll need to revisit this assumption if we do.\n continue\n }\n console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${error}`)\n throw error\n }\n }\n })\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction isObject(val: unknown): val is Record<string, any> {\n return val !== null && typeof val === 'object'\n}\n\nexport function merge<T extends object>(target: T, ...sources: any[]): T {\n if (!isObject(target)) {\n throw new TypeError('Target must be an object')\n }\n\n for (const source of sources) {\n if (!isObject(source)) {\n continue\n }\n\n for (const key of Object.keys(source)) {\n const sourceVal = source[key]\n const targetVal = (target as any)[key]\n\n if (Array.isArray(sourceVal)) {\n // Arrays are replaced, not deeply merged (lodash behavior)\n (target as any)[key] = [...sourceVal]\n } else if (isObject(sourceVal)) {\n if (!isObject(targetVal)) {\n (target as any)[key] = {}\n }\n merge((target as any)[key], sourceVal)\n } else {\n (target as any)[key] = sourceVal\n }\n }\n }\n\n return target\n}\n","import { BaseMongoSdk, BaseMongoSdkConfig } from '@xylabs/mongo'\nimport {\n assertEx, isDefined, staticImplements,\n} from '@xylabs/sdk-js'\nimport {\n MongoDBModuleParamsV2, MongoDBModuleStatic, MongoDBModuleV2, MongoDBStorageClassLabels,\n} from '@xyo-network/module-model-mongodb'\nimport { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { Db, MongoServerError } from 'mongodb'\n\nimport { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport { IndexDescription } from './IndexDescription.ts'\nimport { merge } from './merge.ts'\n\nconst standardIndexes: IndexDescription[] = [\n {\n name: 'UX__hash', key: { _hash: 1 }, unique: true,\n },\n {\n name: 'IX__dataHash', key: { _dataHash: 1 }, unique: false,\n },\n {\n name: 'UX__sequence', key: { _sequence: 1 }, unique: true,\n },\n]\n\nexport const MongoDBModuleMixinV2 = <\n TParams extends MongoDBModuleParamsV2 = MongoDBModuleParamsV2,\n TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>,\n>(\n ModuleBase: TModule,\n) => {\n @staticImplements<MongoDBModuleStatic>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModuleV2 {\n static readonly labels = MongoDBStorageClassLabels\n _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n get jobQueue() {\n return assertEx(this.params.jobQueue, () => 'MongoDBModule Error: jobQueue required for this module but is not defined')\n }\n\n get payloadSdkConfig(): BaseMongoSdkConfig {\n const defaultConfig = { collection: COLLECTIONS.Payloads }\n // If the params of config have payloadSdkConfig, merge it with the default config\n const paramsPayloadSdkConfig = this.params.payloadSdkConfig\n const configPayloadSdkConfig = this.config.payloadSdkConfig\n if (isDefined(paramsPayloadSdkConfig) || isDefined(configPayloadSdkConfig)) {\n return merge(\n defaultConfig,\n configPayloadSdkConfig ?? {},\n paramsPayloadSdkConfig ?? {},\n )\n } else {\n // Otherwise, attempt to get the config from the environment\n // TODO: Deprecate this in favor of params/config injection\n // This is a temporary solution to maintain backward compatibility\n // and should be removed in the future.\n const envConfig = getBaseMongoSdkPrivateConfig()\n return merge(\n defaultConfig,\n envConfig,\n )\n }\n }\n\n get payloads() {\n this._payloadSdk = this._payloadSdk ?? new BaseMongoSdk<PayloadWithMongoMeta>(this.payloadSdkConfig)\n return assertEx(this._payloadSdk)\n }\n\n /**\n * Ensures any indexes specified within the config are created. This method should be idempotent\n * allowing for multiple calls without causing errors while ensuring the desired state.\n */\n async ensureCollection(): Promise<void> {\n const { max } = this.config\n const payloadCollectionName = this.payloadSdkConfig.collection\n\n const payloadStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }))\n\n if (isDefined(max)) {\n // Create capped collection if it doesn't exist or convert it if it does\n await ensureCappedCollection(this.payloads, max)\n // Recreate indexes after creating/converting a capped collection as\n // capped will remove all indexes on existing collections.\n // https://www.mongodb.com/docs/manual/reference/command/convertToCapped/\n await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes])\n } else {\n // Create indexes (creates collection without having to write data to it)\n await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes])\n }\n }\n }\n return MongoModuleBase\n}\n\nconst collectionExists = async (db: Db, name: string): Promise<boolean> => {\n const collections = await db.listCollections({ name }).toArray()\n return collections.length > 0\n}\n\n/**\n * Ensures the specified indexes exist on the collection\n * @param sdk The sdk to use for the collection\n * @param configIndexes The indexes to ensure exist on the collection\n */\nconst ensureIndexesExistOnCollection = async (\n sdk: BaseMongoSdk<PayloadWithMongoMeta>,\n configIndexes: IndexDescription[],\n) => {\n await sdk.useCollection(async (collection) => {\n const collectionName = collection.collectionName.toLowerCase()\n const indexes = configIndexes.filter(ix => ix?.name?.toLowerCase().startsWith(collectionName))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = mongoServerError\n if (codeName === 'IndexKeySpecsConflict' || codeName === 'IndexOptionsConflict' || codeName === 'Unauthorized') {\n // Allowed errors:\n // - IndexKeySpecsConflict: Index already exists which is fine\n // - IndexOptionsConflict: Index already exists with another name which is fine\n // - Unauthorized: Index can't be created since we don't have permission to create indexes\n // which is fine so long as we're only viewing collection as readonly (determined by connection\n // string passed in so presumably the desired configuration)\n // TODO: For the latter case (IndexOptionsConflict) we could get into this case\n // if we change the TTL an existing index. We currently don't support TTLs so\n // we'll need to revisit this assumption if we do.\n continue\n }\n console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${error}`)\n throw error\n }\n }\n })\n}\n\n/**\n * Ensures that a collection is capped with a max document count and a reasonable size.\n * If the collection exists and is not capped, it will be converted.\n * If it doesn't exist, it will be created.\n *\n * @param name The name of the collection.\n * @param count The maximum number of documents to retain.\n * @param documentSize Estimated average document size in bytes if collection is empty.\n */\nconst ensureCappedCollection = async (sdk: BaseMongoSdk<PayloadWithMongoMeta>, max: number, docSize = 1024) => {\n await sdk.useCollection(async (collection) => {\n const name = collection.collectionName.toLowerCase()\n await sdk.useMongo(async (client) => {\n const db = client.db(collection.dbName)\n const exists = await collectionExists(db, name)\n const size = docSize * max\n return exists\n ? await ensureExistingCollectionIsCapped(sdk, max, size)\n // Create capped collection\n : await db.createCollection(name, {\n capped: true, size, max,\n })\n })\n })\n}\n\n/**\n * Converts an existing collection to a capped collection with a max document count.\n * Since MongoDB doesn't support `max` in `convertToCapped` or `cloneCollectionAsCapped`,\n * this function recreates the collection to work around Mongo's limitations.\n * https://www.mongodb.com/docs/manual/reference/command/convertToCapped/\n * https://www.mongodb.com/docs/manual/reference/command/clonecollectionascapped/\n * @param db - The MongoDB database instance\n * @param name - The name of the collection to convert\n * @param max - The maximum number of documents to retain\n * @param docSize - Fallback size (in bytes) to use if no documents exist (default 1KB)\n */\nconst ensureExistingCollectionIsCapped = async (\n sdk: BaseMongoSdk<PayloadWithMongoMeta>,\n max: number,\n docSize = 1024,\n): Promise<void> => {\n await sdk.useCollection(async (collection) => {\n const name = collection.collectionName.toLowerCase()\n await sdk.useMongo(async (client) => {\n const db = client.db(collection.dbName)\n const exists = await collectionExists(db, name)\n if (!exists) throw new Error(`Collection '${name}' does not exist`)\n\n const size = docSize * max\n\n const stats = await db.command({ collStats: name })\n if (stats.capped && stats.max === max && stats.maxSize === size) {\n return\n }\n\n const tmpName = `${name}_tmp_capped`\n\n // Create new capped collection\n await db.createCollection(tmpName, {\n capped: true, size, max,\n })\n\n // Copy most recent documents\n const docs = await collection\n .find()\n\n .sort({ $natural: -1 })\n .limit(max)\n .toArray()\n\n if (docs.length > 0) await db.collection(tmpName).insertMany(docs.toReversed())\n\n // Replace old collection\n await collection.drop()\n await db.collection(tmpName).rename(name)\n })\n })\n}\n","export const escapeChar = '#'\n\nexport const toDbProperty = (value: string) => value.replaceAll('.', escapeChar)\n\nexport const fromDbProperty = (value: string) => value.replaceAll(escapeChar, '.')\n"],"mappings":"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","names":["BaseMongoSdk","assertEx","BaseMongoSdk","assertEx","BaseMongoSdk","assertEx","staticImplements","MongoDBStorageClassLabels","standardIndexes","assertEx","BaseMongoSdk","ensureIndexesExistOnCollection","MongoDBStorageClassLabels","staticImplements","exists"]}
1
+ {"version":3,"sources":["../../src/Collections.ts","../../src/config/getBaseMongoSdk.ts","../../src/config/getMongoDBConfig.ts","../../src/config/hasMongoDBConfig.ts","../../src/Databases.ts","../../src/Defaults.ts","../../src/Module.ts","../../src/merge.ts","../../src/ModuleV2.ts","../../src/util/dbProperty.ts"],"sourcesContent":["// TODO: By DB\nexport const COLLECTIONS = {\n AddressInfo: 'address_info' as const,\n ArchivistStats: 'archivist_stats' as const,\n BoundWitnesses: 'bound_witnesses' as const,\n Payloads: 'payloads' as const,\n Thumbnails: 'thumbnails' as const,\n Users: 'users' as const,\n}\n","import type { BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Document } from 'mongodb'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.ts'\n\nexport const getBaseMongoSdkPrivateConfig = (): BaseMongoSdkPrivateConfig => {\n const env = getMongoDBConfig()\n return {\n dbConnectionString: env.MONGO_CONNECTION_STRING,\n dbDomain: assertEx(env.MONGO_DOMAIN, () => 'Missing Mongo Domain'),\n dbName: assertEx(env.MONGO_DATABASE, () => 'Missing Mongo Database'),\n dbPassword: assertEx(env.MONGO_PASSWORD, () => 'Missing Mongo Password'),\n dbUserName: assertEx(env.MONGO_USERNAME, () => 'Missing Mongo Username'),\n }\n}\n\nexport const getBaseMongoSdk = <T extends Document>(collection: string) => {\n return new BaseMongoSdk<T>({ ...getBaseMongoSdkPrivateConfig(), collection })\n}\n","export type MongoDbConnectionStringEnvVar = 'MONGO_CONNECTION_STRING'\nexport type MongoDbEnvVars = 'MONGO_DATABASE' | 'MONGO_DOMAIN' | 'MONGO_PASSWORD' | 'MONGO_USERNAME'\n\nexport type MongoEnv = Record<MongoDbEnvVars | MongoDbConnectionStringEnvVar, string | undefined>\n\nexport const getMongoDBConfig = (): MongoEnv => {\n const env: MongoEnv = {} as MongoEnv\n if (process.env.MONGO_CONNECTION_STRING) {\n env.MONGO_CONNECTION_STRING = process.env.MONGO_CONNECTION_STRING\n }\n if (process.env.MONGO_DOMAIN) {\n env.MONGO_DATABASE = process.env.MONGO_DATABASE\n env.MONGO_DOMAIN = process.env.MONGO_DOMAIN\n env.MONGO_PASSWORD = process.env.MONGO_PASSWORD\n env.MONGO_USERNAME = process.env.MONGO_USERNAME\n }\n return env\n}\n","import { exists } from '@xylabs/sdk-js'\n\nimport { getMongoDBConfig } from './getMongoDBConfig.ts'\n\nexport const hasMongoDBConfig = (): boolean => {\n const env = getMongoDBConfig()\n const requiredValues = [env.MONGO_CONNECTION_STRING, env.MONGO_DATABASE, env.MONGO_DOMAIN, env.MONGO_PASSWORD, env.MONGO_USERNAME]\n return requiredValues.every(exists)\n}\n","export const DATABASES = { Archivist: 'archivist' as const }\n","export const DefaultAggregateTimeoutMs = 10_000\nexport const DefaultLimit = 20\nexport const DefaultMaxTimeMS = 2000\nexport const DefaultOrder = 'desc'\n","import type { BaseMongoSdkConfig } from '@xylabs/mongo'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport { assertEx, staticImplements } from '@xylabs/sdk-js'\nimport type {\n JobQueue,\n MongoDBModule, MongoDBModuleParams,\n} from '@xyo-network/module-model-mongodb'\nimport { MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb'\nimport type { BoundWitnessWithMongoMeta, PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport type { MongoServerError } from 'mongodb'\n\nimport type { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport type { IndexDescription } from './IndexDescription.ts'\nimport { merge } from './merge.ts'\n\nconst standardIndexes: IndexDescription[] = [\n {\n name: 'IX__hash', key: { _hash: 1 }, unique: false,\n },\n {\n name: 'IX__dataHash', key: { _dataHash: 1 }, unique: false,\n },\n {\n name: 'IX__sequence', key: { _sequence: 1 }, unique: false,\n },\n]\n\nexport const MongoDBModuleMixin = <\n TParams extends MongoDBModuleParams = MongoDBModuleParams,\n TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>,\n>(\n ModuleBase: TModule,\n) => {\n @staticImplements<TModule>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModule {\n static readonly labels = MongoDBStorageClassLabels\n _boundWitnessSdk: BaseMongoSdk<BoundWitnessWithMongoMeta> | undefined\n _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n get boundWitnessSdkConfig(): BaseMongoSdkConfig {\n const config = { collection: COLLECTIONS.BoundWitnesses, ...getBaseMongoSdkPrivateConfig() }\n return merge(\n config,\n this.params.boundWitnessSdkConfig,\n this.config.boundWitnessSdkConfig,\n { collection: this.config.boundWitnessSdkConfig?.collection ?? this.params.boundWitnessSdkConfig?.collection ?? COLLECTIONS.BoundWitnesses },\n )\n }\n\n get boundWitnesses() {\n this._boundWitnessSdk = this._boundWitnessSdk ?? new BaseMongoSdk<BoundWitnessWithMongoMeta>(this.boundWitnessSdkConfig)\n return assertEx(this._boundWitnessSdk)\n }\n\n get jobQueue(): JobQueue {\n return assertEx(this.params.jobQueue, () => 'MongoDBModule Error: jobQueue required for this module but is not defined')\n }\n\n get payloadSdkConfig(): BaseMongoSdkConfig {\n const config = { collection: COLLECTIONS.Payloads, ...getBaseMongoSdkPrivateConfig() }\n return merge(\n config,\n this.params.payloadSdkConfig,\n this.config.payloadSdkConfig,\n { collection: this.config.payloadSdkConfig?.collection ?? this.params.payloadSdkConfig?.collection ?? COLLECTIONS.Payloads },\n )\n }\n\n get payloads() {\n this._payloadSdk = this._payloadSdk ?? new BaseMongoSdk<PayloadWithMongoMeta>(this.payloadSdkConfig)\n return assertEx(this._payloadSdk)\n }\n\n /**\n * Ensures any indexes specified within the config are created. This method should be idempotent\n * allowing for multiple calls without causing errors while ensuring the desired state.\n */\n async ensureIndexes(): Promise<void> {\n const configIndexes = (this.config as { storage?: { indexes?: IndexDescription[] } })?.storage?.indexes ?? []\n const boundWitnessesCollectionName = this.boundWitnessSdkConfig.collection\n const payloadCollectionName = this.payloadSdkConfig.collection\n\n const bwStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${boundWitnessesCollectionName}.${ix.name}` }))\n await ensureIndexesExistOnCollection(this.boundWitnesses, [...bwStandardIndexes, ...configIndexes])\n const payloadStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }))\n await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes, ...configIndexes])\n }\n }\n return MongoModuleBase\n}\n\n/**\n * Ensures the specified indexes exist on the collection\n * @param sdk The sdk to use for the collection\n * @param configIndexes The indexes to ensure exist on the collection\n */\nconst ensureIndexesExistOnCollection = async (\n sdk: BaseMongoSdk<PayloadWithMongoMeta> | BaseMongoSdk<BoundWitnessWithMongoMeta>,\n configIndexes: IndexDescription[],\n) => {\n await sdk.useCollection(async (collection) => {\n const collectionName = collection.collectionName.toLowerCase()\n const indexes = configIndexes.filter(ix => ix?.name?.toLowerCase().startsWith(collectionName))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = mongoServerError\n if (codeName === 'IndexKeySpecsConflict' || codeName === 'IndexOptionsConflict') {\n // Index already exists which is fine OR index exists with another name which is fine\n // TODO: For the latter case (IndexOptionsConflict) we could get into this case\n // if we change the TTL an existing index. We currently don't support TTLs so\n // we'll need to revisit this assumption if we do.\n continue\n }\n console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${error}`)\n throw error\n }\n }\n })\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction isObject(val: unknown): val is Record<string, any> {\n return val !== null && typeof val === 'object'\n}\n\nexport function merge<T extends object>(target: T, ...sources: any[]): T {\n if (!isObject(target)) {\n throw new TypeError('Target must be an object')\n }\n\n for (const source of sources) {\n if (!isObject(source)) {\n continue\n }\n\n for (const key of Object.keys(source)) {\n const sourceVal = source[key]\n const targetVal = (target as any)[key]\n\n if (Array.isArray(sourceVal)) {\n // Arrays are replaced, not deeply merged (lodash behavior)\n (target as any)[key] = [...sourceVal]\n } else if (isObject(sourceVal)) {\n if (!isObject(targetVal)) {\n (target as any)[key] = {}\n }\n merge((target as any)[key], sourceVal)\n } else {\n (target as any)[key] = sourceVal\n }\n }\n }\n\n return target\n}\n","import type { BaseMongoSdkConfig } from '@xylabs/mongo'\nimport { BaseMongoSdk } from '@xylabs/mongo'\nimport {\n assertEx, isDefined, staticImplements,\n} from '@xylabs/sdk-js'\nimport type {\n JobQueue,\n MongoDBModuleParamsV2, MongoDBModuleStatic, MongoDBModuleV2,\n} from '@xyo-network/module-model-mongodb'\nimport { MongoDBStorageClassLabels } from '@xyo-network/module-model-mongodb'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport type { Db, MongoServerError } from 'mongodb'\n\nimport type { AnyAbstractModule } from './AnyAbstractModule.ts'\nimport { COLLECTIONS } from './Collections.ts'\nimport { getBaseMongoSdkPrivateConfig } from './config/index.ts'\nimport type { IndexDescription } from './IndexDescription.ts'\nimport { merge } from './merge.ts'\n\nconst standardIndexes: IndexDescription[] = [\n {\n name: 'UX__hash', key: { _hash: 1 }, unique: true,\n },\n {\n name: 'IX__dataHash', key: { _dataHash: 1 }, unique: false,\n },\n {\n name: 'UX__sequence', key: { _sequence: 1 }, unique: true,\n },\n]\n\nexport const MongoDBModuleMixinV2 = <\n TParams extends MongoDBModuleParamsV2 = MongoDBModuleParamsV2,\n TModule extends AnyAbstractModule<TParams> = AnyAbstractModule<TParams>,\n>(\n ModuleBase: TModule,\n) => {\n @staticImplements<MongoDBModuleStatic>()\n abstract class MongoModuleBase extends ModuleBase implements MongoDBModuleV2 {\n static readonly labels = MongoDBStorageClassLabels\n _payloadSdk: BaseMongoSdk<PayloadWithMongoMeta> | undefined\n\n get jobQueue(): JobQueue {\n return assertEx(this.params.jobQueue, () => 'MongoDBModule Error: jobQueue required for this module but is not defined')\n }\n\n get payloadSdkConfig(): BaseMongoSdkConfig {\n const defaultConfig = { collection: COLLECTIONS.Payloads }\n // If the params of config have payloadSdkConfig, merge it with the default config\n const paramsPayloadSdkConfig = this.params.payloadSdkConfig\n const configPayloadSdkConfig = this.config.payloadSdkConfig\n if (isDefined(paramsPayloadSdkConfig) || isDefined(configPayloadSdkConfig)) {\n return merge(\n defaultConfig,\n configPayloadSdkConfig ?? {},\n paramsPayloadSdkConfig ?? {},\n )\n } else {\n // Otherwise, attempt to get the config from the environment\n // TODO: Deprecate this in favor of params/config injection\n // This is a temporary solution to maintain backward compatibility\n // and should be removed in the future.\n const envConfig = getBaseMongoSdkPrivateConfig()\n return merge(\n defaultConfig,\n envConfig,\n )\n }\n }\n\n get payloads() {\n this._payloadSdk = this._payloadSdk ?? new BaseMongoSdk<PayloadWithMongoMeta>(this.payloadSdkConfig)\n return assertEx(this._payloadSdk)\n }\n\n /**\n * Ensures any indexes specified within the config are created. This method should be idempotent\n * allowing for multiple calls without causing errors while ensuring the desired state.\n */\n async ensureCollection(): Promise<void> {\n const { max } = this.config\n const payloadCollectionName = this.payloadSdkConfig.collection\n\n const payloadStandardIndexes = standardIndexes.map(ix => ({ ...ix, name: `${payloadCollectionName}.${ix.name}` }))\n\n if (isDefined(max)) {\n // Create capped collection if it doesn't exist or convert it if it does\n await ensureCappedCollection(this.payloads, max)\n // Recreate indexes after creating/converting a capped collection as\n // capped will remove all indexes on existing collections.\n // https://www.mongodb.com/docs/manual/reference/command/convertToCapped/\n await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes])\n } else {\n // Create indexes (creates collection without having to write data to it)\n await ensureIndexesExistOnCollection(this.payloads, [...payloadStandardIndexes])\n }\n }\n }\n return MongoModuleBase\n}\n\nconst collectionExists = async (db: Db, name: string): Promise<boolean> => {\n const collections = await db.listCollections({ name }).toArray()\n return collections.length > 0\n}\n\n/**\n * Ensures the specified indexes exist on the collection\n * @param sdk The sdk to use for the collection\n * @param configIndexes The indexes to ensure exist on the collection\n */\nconst ensureIndexesExistOnCollection = async (\n sdk: BaseMongoSdk<PayloadWithMongoMeta>,\n configIndexes: IndexDescription[],\n) => {\n await sdk.useCollection(async (collection) => {\n const collectionName = collection.collectionName.toLowerCase()\n const indexes = configIndexes.filter(ix => ix?.name?.toLowerCase().startsWith(collectionName))\n if (indexes.length === 0) return\n for (const ix of indexes) {\n try {\n await collection.createIndexes([ix])\n } catch (error) {\n const mongoServerError = error as MongoServerError\n const { codeName } = mongoServerError\n if (codeName === 'IndexKeySpecsConflict' || codeName === 'IndexOptionsConflict' || codeName === 'Unauthorized') {\n // Allowed errors:\n // - IndexKeySpecsConflict: Index already exists which is fine\n // - IndexOptionsConflict: Index already exists with another name which is fine\n // - Unauthorized: Index can't be created since we don't have permission to create indexes\n // which is fine so long as we're only viewing collection as readonly (determined by connection\n // string passed in so presumably the desired configuration)\n // TODO: For the latter case (IndexOptionsConflict) we could get into this case\n // if we change the TTL an existing index. We currently don't support TTLs so\n // we'll need to revisit this assumption if we do.\n continue\n }\n console.error(`Error creating index ${ix.name} for collection ${collectionName}: ${error}`)\n throw error\n }\n }\n })\n}\n\n/**\n * Ensures that a collection is capped with a max document count and a reasonable size.\n * If the collection exists and is not capped, it will be converted.\n * If it doesn't exist, it will be created.\n *\n * @param name The name of the collection.\n * @param count The maximum number of documents to retain.\n * @param documentSize Estimated average document size in bytes if collection is empty.\n */\nconst ensureCappedCollection = async (sdk: BaseMongoSdk<PayloadWithMongoMeta>, max: number, docSize = 1024) => {\n await sdk.useCollection(async (collection) => {\n const name = collection.collectionName.toLowerCase()\n await sdk.useMongo(async (client) => {\n const db = client.db(collection.dbName)\n const exists = await collectionExists(db, name)\n const size = docSize * max\n return exists\n ? await ensureExistingCollectionIsCapped(sdk, max, size)\n // Create capped collection\n : await db.createCollection(name, {\n capped: true, size, max,\n })\n })\n })\n}\n\n/**\n * Converts an existing collection to a capped collection with a max document count.\n * Since MongoDB doesn't support `max` in `convertToCapped` or `cloneCollectionAsCapped`,\n * this function recreates the collection to work around Mongo's limitations.\n * https://www.mongodb.com/docs/manual/reference/command/convertToCapped/\n * https://www.mongodb.com/docs/manual/reference/command/clonecollectionascapped/\n * @param db - The MongoDB database instance\n * @param name - The name of the collection to convert\n * @param max - The maximum number of documents to retain\n * @param docSize - Fallback size (in bytes) to use if no documents exist (default 1KB)\n */\nconst ensureExistingCollectionIsCapped = async (\n sdk: BaseMongoSdk<PayloadWithMongoMeta>,\n max: number,\n docSize = 1024,\n): Promise<void> => {\n await sdk.useCollection(async (collection) => {\n const name = collection.collectionName.toLowerCase()\n await sdk.useMongo(async (client) => {\n const db = client.db(collection.dbName)\n const exists = await collectionExists(db, name)\n if (!exists) throw new Error(`Collection '${name}' does not exist`)\n\n const size = docSize * max\n\n const stats = await db.command({ collStats: name })\n if (stats.capped && stats.max === max && stats.maxSize === size) {\n return\n }\n\n const tmpName = `${name}_tmp_capped`\n\n // Create new capped collection\n await db.createCollection(tmpName, {\n capped: true, size, max,\n })\n\n // Copy most recent documents\n const docs = await collection\n .find()\n\n .sort({ $natural: -1 })\n .limit(max)\n .toArray()\n\n if (docs.length > 0) await db.collection(tmpName).insertMany(docs.toReversed())\n\n // Replace old collection\n await collection.drop()\n await db.collection(tmpName).rename(name)\n })\n })\n}\n","export const escapeChar = '#'\n\nexport const toDbProperty = (value: string) => value.replaceAll('.', escapeChar)\n\nexport const fromDbProperty = (value: string) => value.replaceAll(escapeChar, '.')\n"],"mappings":"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","names":["BaseMongoSdk","assertEx","BaseMongoSdk","assertEx","BaseMongoSdk","assertEx","staticImplements","MongoDBStorageClassLabels","standardIndexes","assertEx","BaseMongoSdk","ensureIndexesExistOnCollection","MongoDBStorageClassLabels","staticImplements","exists"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/module-abstract-mongodb",
3
- "version": "5.3.29",
3
+ "version": "5.4.0",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -36,38 +36,36 @@
36
36
  "README.md"
37
37
  ],
38
38
  "dependencies": {
39
- "@xyo-network/payload-mongodb": "~5.3.29"
39
+ "@xyo-network/payload-mongodb": "~5.4.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@opentelemetry/api": "^1.9.1",
43
- "@xylabs/mongo": "^5.0.95",
44
- "@xylabs/sdk-js": "^5.0.95",
45
- "@xylabs/ts-scripts-common": "~7.8.4",
46
- "@xylabs/ts-scripts-pnpm": "~7.8.4",
47
- "@xylabs/tsconfig": "~7.8.4",
48
- "axios": "^1.14.0",
43
+ "@xylabs/mongo": "^5.0.97",
44
+ "@xylabs/sdk-js": "^5.0.97",
45
+ "@xylabs/toolchain": "~7.10.8",
46
+ "@xylabs/tsconfig": "~7.10.8",
49
47
  "mongodb": "~7.1.1",
50
48
  "pako": "~2.1.0",
51
49
  "tslib": "~2.8.1",
52
50
  "typescript": "~5.9.3",
53
51
  "zod": "^4.3.6",
54
- "@xyo-network/account-model": "~5.3.29",
55
- "@xyo-network/hash": "~5.3.29",
56
- "@xyo-network/manifest-model": "~5.3.29",
57
- "@xyo-network/module-model": "~5.3.29",
58
- "@xyo-network/payload-model": "~5.3.29",
59
- "@xyo-network/wasm": "~5.3.29",
60
- "@xyo-network/previous-hash-store-model": "~5.3.29",
61
- "@xyo-network/module-model-mongodb": "~5.3.29"
52
+ "@xyo-network/manifest-model": "~5.4.0",
53
+ "@xyo-network/module-model": "~5.4.0",
54
+ "@xyo-network/account-model": "~5.4.0",
55
+ "@xyo-network/hash": "~5.4.0",
56
+ "@xyo-network/module-model-mongodb": "~5.4.0",
57
+ "@xyo-network/payload-model": "~5.4.0",
58
+ "@xyo-network/previous-hash-store-model": "~5.4.0",
59
+ "@xyo-network/wasm": "~5.4.0"
62
60
  },
63
61
  "peerDependencies": {
64
- "@xylabs/mongo": "^5",
65
- "@xylabs/sdk-js": "^5",
66
- "mongodb": "^6 || ^7",
67
- "@xyo-network/hash": "~5.3.29",
68
- "@xyo-network/module-model": "~5.3.29",
69
- "@xyo-network/module-model-mongodb": "~5.3.29",
70
- "@xyo-network/payload-model": "~5.3.29"
62
+ "@xylabs/mongo": "^5.0.97",
63
+ "@xylabs/sdk-js": "^5.0.97",
64
+ "@xyo-network/hash": "~5.4",
65
+ "@xyo-network/module-model": "~5.4",
66
+ "@xyo-network/module-model-mongodb": "~5.4",
67
+ "@xyo-network/payload-model": "~5.4",
68
+ "mongodb": "^6 || ^7"
71
69
  },
72
70
  "publishConfig": {
73
71
  "access": "public"