@xyo-network/archivist-mongodb 4.0.3 → 4.1.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.
@@ -8,38 +8,38 @@ declare const MongoDBArchivistBase: (abstract new (...args: any[]) => {
8
8
  _payloadSdk: import("@xylabs/mongo").BaseMongoSdk<PayloadWithMongoMeta> | undefined;
9
9
  readonly boundWitnessSdkConfig: import("@xylabs/mongo").BaseMongoSdkConfig;
10
10
  readonly boundWitnesses: import("@xylabs/mongo").BaseMongoSdk<import("@xyo-network/payload-mongodb").BoundWitnessWithMongoMeta>;
11
- readonly jobQueue: import("@xyo-network/shared").JobQueue;
11
+ readonly jobQueue: _xyo_network_shared.JobQueue;
12
12
  readonly payloadSdkConfig: import("@xylabs/mongo").BaseMongoSdkConfig;
13
13
  readonly payloads: import("@xylabs/mongo").BaseMongoSdk<PayloadWithMongoMeta>;
14
14
  ensureIndexes(): Promise<void>;
15
- address: import("@xylabs/hex").Address;
15
+ address: _xylabs_hex.Address;
16
16
  config: Partial<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/module-model-mongodb").MongoDBModuleConfig>>;
17
17
  id: string;
18
18
  modName?: import("@xyo-network/module-model").ModuleName;
19
19
  params: import("@xyo-network/module-model-mongodb").MongoDBModuleParams;
20
- previousHash: () => import("@xylabs/promise").Promisable<string | undefined>;
20
+ previousHash: () => _xylabs_promise.Promisable<string | undefined>;
21
21
  queries: string[];
22
- query: <T extends import("@xyo-network/boundwitness-model").QueryBoundWitness = import("@xyo-network/boundwitness-model").QueryBoundWitness, TConf extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: import("@xyo-network/payload-model").Payload[], queryConfig?: TConf) => import("@xylabs/promise").Promisable<import("@xyo-network/module-model").ModuleQueryResult>;
23
- queryable: <T extends import("@xyo-network/boundwitness-model").QueryBoundWitness = import("@xyo-network/boundwitness-model").QueryBoundWitness, TConf_1 extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: import("@xyo-network/payload-model").Payload[], queryConfig?: TConf_1) => import("@xylabs/promise").Promisable<boolean>;
24
- start?: () => import("@xylabs/promise").Promisable<boolean>;
25
- stop?: () => import("@xylabs/promise").Promisable<boolean>;
22
+ query: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf) => _xylabs_promise.Promisable<import("@xyo-network/module-model").ModuleQueryResult>;
23
+ queryable: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf_1 extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf_1) => _xylabs_promise.Promisable<boolean>;
24
+ start?: () => _xylabs_promise.Promisable<boolean>;
25
+ stop?: () => _xylabs_promise.Promisable<boolean>;
26
26
  eventData: import("@xyo-network/module-model").ModuleEventData<object>;
27
27
  clearListeners(eventNames: keyof import("@xyo-network/module-model").ModuleEventData<object> | (keyof import("@xyo-network/module-model").ModuleEventData<object>)[]): void;
28
28
  emit<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
29
29
  emitSerial<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
30
30
  listenerCount(eventNames: keyof import("@xyo-network/module-model").ModuleEventData<object> | (keyof import("@xyo-network/module-model").ModuleEventData<object>)[]): number;
31
- off<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import("@xylabs/events").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): void;
32
- offAny(listener: import("@xylabs/events").EventAnyListener | Promise<void>): void;
33
- on<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import("@xylabs/events").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import("@xylabs/events").EventUnsubscribeFunction;
34
- onAny(listener: import("@xylabs/events").EventAnyListener): import("@xylabs/events").EventUnsubscribeFunction;
35
- once<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, listener: import("@xylabs/events").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import("@xylabs/events").EventUnsubscribeFunction;
31
+ off<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): void;
32
+ offAny(listener: _xylabs_events.EventAnyListener | Promise<void>): void;
33
+ on<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
34
+ onAny(listener: _xylabs_events.EventAnyListener): _xylabs_events.EventUnsubscribeFunction;
35
+ once<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, listener: _xylabs_events.EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
36
36
  }) & {
37
37
  readonly labels: import("@xyo-network/module-model-mongodb").MongoDBStorageClassLabels;
38
38
  } & typeof AbstractArchivist;
39
39
  export declare class MongoDBArchivist extends MongoDBArchivistBase {
40
40
  static readonly configSchemas: Schema[];
41
41
  static readonly defaultConfigSchema: Schema;
42
- readonly queries: string[];
42
+ queries: string[];
43
43
  /**
44
44
  * The amount of time to allow the aggregate query to execute
45
45
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Archivist.d.ts","sourceRoot":"","sources":["../../src/Archivist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAC3C,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAMxE,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;kQAqEsB,CAAC,wBAAmD,CAAC;wQAKjD,CAAC,wBAAmD,CAAC;;;;;;;;;;;;;;;4BA1EvC,CAAA;AAElE,qBAAa,gBAAiB,SAAQ,oBAAoB;IACxD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAyD;IACzG,gBAAyB,mBAAmB,EAAE,MAAM,CAA+B;IAE1E,OAAO,WAA2E;IAE3F;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,SAAS;cAE9B,aAAa,CAAC,IAAI,EAAE,IAAI;cAoBxB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;cAU3B,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cA0B/D,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAmBxF,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAkEhF,YAAY;CAItC"}
@@ -5,31 +5,31 @@ import { type Payload, type Schema, type Sequence, type WithStorageMeta } from '
5
5
  import type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
6
6
  declare const MongoDBArchivistBaseV2: (abstract new (...args: any[]) => {
7
7
  _payloadSdk: import("@xylabs/mongo").BaseMongoSdk<PayloadWithMongoMeta> | undefined;
8
- readonly jobQueue: import("@xyo-network/shared").JobQueue;
8
+ readonly jobQueue: _xyo_network_shared.JobQueue;
9
9
  readonly payloadSdkConfig: import("@xylabs/mongo").BaseMongoSdkConfig;
10
10
  readonly payloads: import("@xylabs/mongo").BaseMongoSdk<PayloadWithMongoMeta>;
11
11
  ensureCollection(): Promise<void>;
12
- address: import("@xylabs/hex").Address;
12
+ address: _xylabs_hex.Address;
13
13
  config: Partial<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/module-model-mongodb").MongoDBModuleConfigV2>>;
14
14
  id: string;
15
15
  modName?: import("@xyo-network/module-model").ModuleName;
16
16
  params: import("@xyo-network/module-model-mongodb").MongoDBModuleParamsV2<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/module-model-mongodb").MongoDBModuleConfigV2>>;
17
- previousHash: () => import("@xylabs/promise").Promisable<string | undefined>;
17
+ previousHash: () => _xylabs_promise.Promisable<string | undefined>;
18
18
  queries: string[];
19
- query: <T extends import("@xyo-network/boundwitness-model").QueryBoundWitness = import("@xyo-network/boundwitness-model").QueryBoundWitness, TConf extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: import("@xyo-network/payload-model").Payload[], queryConfig?: TConf) => import("@xylabs/promise").Promisable<import("@xyo-network/module-model").ModuleQueryResult>;
20
- queryable: <T extends import("@xyo-network/boundwitness-model").QueryBoundWitness = import("@xyo-network/boundwitness-model").QueryBoundWitness, TConf_1 extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: import("@xyo-network/payload-model").Payload[], queryConfig?: TConf_1) => import("@xylabs/promise").Promisable<boolean>;
21
- start?: () => import("@xylabs/promise").Promisable<boolean>;
22
- stop?: () => import("@xylabs/promise").Promisable<boolean>;
19
+ query: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf) => _xylabs_promise.Promisable<import("@xyo-network/module-model").ModuleQueryResult>;
20
+ queryable: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf_1 extends import("@xyo-network/module-model").ModuleConfig = import("@xyo-network/module-model").ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf_1) => _xylabs_promise.Promisable<boolean>;
21
+ start?: () => _xylabs_promise.Promisable<boolean>;
22
+ stop?: () => _xylabs_promise.Promisable<boolean>;
23
23
  eventData: import("@xyo-network/module-model").ModuleEventData<object>;
24
24
  clearListeners(eventNames: keyof import("@xyo-network/module-model").ModuleEventData<object> | (keyof import("@xyo-network/module-model").ModuleEventData<object>)[]): void;
25
25
  emit<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
26
26
  emitSerial<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, eventArgs: import("@xyo-network/module-model").ModuleEventData<object>[TEventName]): Promise<void>;
27
27
  listenerCount(eventNames: keyof import("@xyo-network/module-model").ModuleEventData<object> | (keyof import("@xyo-network/module-model").ModuleEventData<object>)[]): number;
28
- off<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import("@xylabs/events").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): void;
29
- offAny(listener: import("@xylabs/events").EventAnyListener | Promise<void>): void;
30
- on<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: import("@xylabs/events").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import("@xylabs/events").EventUnsubscribeFunction;
31
- onAny(listener: import("@xylabs/events").EventAnyListener): import("@xylabs/events").EventUnsubscribeFunction;
32
- once<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, listener: import("@xylabs/events").EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): import("@xylabs/events").EventUnsubscribeFunction;
28
+ off<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): void;
29
+ offAny(listener: _xylabs_events.EventAnyListener | Promise<void>): void;
30
+ on<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
31
+ onAny(listener: _xylabs_events.EventAnyListener): _xylabs_events.EventUnsubscribeFunction;
32
+ once<TEventName extends keyof import("@xyo-network/module-model").ModuleEventData<object>>(eventName: TEventName, listener: _xylabs_events.EventListener<import("@xyo-network/module-model").ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
33
33
  }) & {
34
34
  readonly labels: import("@xyo-network/module-model-mongodb").MongoDBStorageClassLabels;
35
35
  } & typeof AbstractArchivist;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArchivistV2.d.ts","sourceRoot":"","sources":["../../src/ArchivistV2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,OAAO,EACL,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EACxC,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;kQAgImvD,CAAC,wBAAmD,CAAC;wQAAyU,CAAC,wBAAmD,CAAC;;;;;;;;;;;;;;;4BAhI5nE,CAAA;AAItE,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAyD;IACzG,gBAAyB,mBAAmB,EAAE,MAAM,CAA+B;IAEnF,SAAkB,OAAO,EAAE,MAAM,EAAE,CAA2E;IAE9G;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,SAAS;cAE9B,aAAa,CAAC,IAAI,EAAE,IAAI;cAYxB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;cAO3B,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAiB/D,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAgBxF,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAwDhF,YAAY;CAItC"}
@@ -0,0 +1,108 @@
1
+ import * as mongodb from 'mongodb';
2
+ import * as _xyo_network_module_model from '@xyo-network/module-model';
3
+ import * as _xyo_network_module_model_mongodb from '@xyo-network/module-model-mongodb';
4
+ import * as _xylabs_mongo from '@xylabs/mongo';
5
+ import * as _xyo_network_payload_mongodb from '@xyo-network/payload-mongodb';
6
+ import { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb';
7
+ import { Hash } from '@xylabs/hex';
8
+ import { AbstractArchivist } from '@xyo-network/archivist-abstract';
9
+ import { ArchivistNextOptions } from '@xyo-network/archivist-model';
10
+ import { Payload, Schema, Sequence, WithStorageMeta } from '@xyo-network/payload-model';
11
+ export * from '@xyo-network/archivist-model-mongodb';
12
+
13
+ declare const MongoDBArchivistBase: (abstract new (...args: any[]) => {
14
+ _boundWitnessSdk: _xylabs_mongo.BaseMongoSdk<_xyo_network_payload_mongodb.BoundWitnessWithMongoMeta> | undefined;
15
+ _payloadSdk: _xylabs_mongo.BaseMongoSdk<PayloadWithMongoMeta> | undefined;
16
+ readonly boundWitnessSdkConfig: _xylabs_mongo.BaseMongoSdkConfig;
17
+ readonly boundWitnesses: _xylabs_mongo.BaseMongoSdk<_xyo_network_payload_mongodb.BoundWitnessWithMongoMeta>;
18
+ readonly jobQueue: _xyo_network_shared.JobQueue;
19
+ readonly payloadSdkConfig: _xylabs_mongo.BaseMongoSdkConfig;
20
+ readonly payloads: _xylabs_mongo.BaseMongoSdk<PayloadWithMongoMeta>;
21
+ ensureIndexes(): Promise<void>;
22
+ address: _xylabs_hex.Address;
23
+ config: Partial<_xyo_network_module_model.AnyConfigSchema<_xyo_network_module_model_mongodb.MongoDBModuleConfig>>;
24
+ id: string;
25
+ modName?: _xyo_network_module_model.ModuleName;
26
+ params: _xyo_network_module_model_mongodb.MongoDBModuleParams;
27
+ previousHash: () => _xylabs_promise.Promisable<string | undefined>;
28
+ queries: string[];
29
+ query: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf extends _xyo_network_module_model.ModuleConfig = _xyo_network_module_model.ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf) => _xylabs_promise.Promisable<_xyo_network_module_model.ModuleQueryResult>;
30
+ queryable: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf_1 extends _xyo_network_module_model.ModuleConfig = _xyo_network_module_model.ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf_1) => _xylabs_promise.Promisable<boolean>;
31
+ start?: () => _xylabs_promise.Promisable<boolean>;
32
+ stop?: () => _xylabs_promise.Promisable<boolean>;
33
+ eventData: _xyo_network_module_model.ModuleEventData<object>;
34
+ clearListeners(eventNames: keyof _xyo_network_module_model.ModuleEventData<object> | (keyof _xyo_network_module_model.ModuleEventData<object>)[]): void;
35
+ emit<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventName: TEventName, eventArgs: _xyo_network_module_model.ModuleEventData<object>[TEventName]): Promise<void>;
36
+ emitSerial<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventName: TEventName, eventArgs: _xyo_network_module_model.ModuleEventData<object>[TEventName]): Promise<void>;
37
+ listenerCount(eventNames: keyof _xyo_network_module_model.ModuleEventData<object> | (keyof _xyo_network_module_model.ModuleEventData<object>)[]): number;
38
+ off<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<_xyo_network_module_model.ModuleEventData<object>[TEventName]>): void;
39
+ offAny(listener: _xylabs_events.EventAnyListener | Promise<void>): void;
40
+ on<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<_xyo_network_module_model.ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
41
+ onAny(listener: _xylabs_events.EventAnyListener): _xylabs_events.EventUnsubscribeFunction;
42
+ once<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventName: TEventName, listener: _xylabs_events.EventListener<_xyo_network_module_model.ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
43
+ }) & {
44
+ readonly labels: _xyo_network_module_model_mongodb.MongoDBStorageClassLabels;
45
+ } & typeof AbstractArchivist;
46
+ declare class MongoDBArchivist extends MongoDBArchivistBase {
47
+ static readonly configSchemas: Schema[];
48
+ static readonly defaultConfigSchema: Schema;
49
+ queries: string[];
50
+ /**
51
+ * The amount of time to allow the aggregate query to execute
52
+ */
53
+ protected readonly aggregateTimeoutMs = 10000;
54
+ protected findOneByHash(hash: Hash): Promise<mongodb.WithId<PayloadWithMongoMeta> | undefined>;
55
+ protected findOneBySequence(sequence: Sequence): Promise<mongodb.WithId<PayloadWithMongoMeta> | null>;
56
+ protected getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]>;
57
+ protected insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]>;
58
+ protected nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]>;
59
+ protected startHandler(): Promise<void>;
60
+ }
61
+
62
+ declare const MongoDBArchivistBaseV2: (abstract new (...args: any[]) => {
63
+ _payloadSdk: _xylabs_mongo.BaseMongoSdk<PayloadWithMongoMeta> | undefined;
64
+ readonly jobQueue: _xyo_network_shared.JobQueue;
65
+ readonly payloadSdkConfig: _xylabs_mongo.BaseMongoSdkConfig;
66
+ readonly payloads: _xylabs_mongo.BaseMongoSdk<PayloadWithMongoMeta>;
67
+ ensureCollection(): Promise<void>;
68
+ address: _xylabs_hex.Address;
69
+ config: Partial<_xyo_network_module_model.AnyConfigSchema<_xyo_network_module_model_mongodb.MongoDBModuleConfigV2>>;
70
+ id: string;
71
+ modName?: _xyo_network_module_model.ModuleName;
72
+ params: _xyo_network_module_model_mongodb.MongoDBModuleParamsV2<_xyo_network_module_model.AnyConfigSchema<_xyo_network_module_model_mongodb.MongoDBModuleConfigV2>>;
73
+ previousHash: () => _xylabs_promise.Promisable<string | undefined>;
74
+ queries: string[];
75
+ query: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf extends _xyo_network_module_model.ModuleConfig = _xyo_network_module_model.ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf) => _xylabs_promise.Promisable<_xyo_network_module_model.ModuleQueryResult>;
76
+ queryable: <T extends _xyo_network_boundwitness_model.QueryBoundWitness = _xyo_network_boundwitness_model.QueryBoundWitness, TConf_1 extends _xyo_network_module_model.ModuleConfig = _xyo_network_module_model.ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConf_1) => _xylabs_promise.Promisable<boolean>;
77
+ start?: () => _xylabs_promise.Promisable<boolean>;
78
+ stop?: () => _xylabs_promise.Promisable<boolean>;
79
+ eventData: _xyo_network_module_model.ModuleEventData<object>;
80
+ clearListeners(eventNames: keyof _xyo_network_module_model.ModuleEventData<object> | (keyof _xyo_network_module_model.ModuleEventData<object>)[]): void;
81
+ emit<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventName: TEventName, eventArgs: _xyo_network_module_model.ModuleEventData<object>[TEventName]): Promise<void>;
82
+ emitSerial<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventName: TEventName, eventArgs: _xyo_network_module_model.ModuleEventData<object>[TEventName]): Promise<void>;
83
+ listenerCount(eventNames: keyof _xyo_network_module_model.ModuleEventData<object> | (keyof _xyo_network_module_model.ModuleEventData<object>)[]): number;
84
+ off<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<_xyo_network_module_model.ModuleEventData<object>[TEventName]>): void;
85
+ offAny(listener: _xylabs_events.EventAnyListener | Promise<void>): void;
86
+ on<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventNames: TEventName | TEventName[], listener: _xylabs_events.EventListener<_xyo_network_module_model.ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
87
+ onAny(listener: _xylabs_events.EventAnyListener): _xylabs_events.EventUnsubscribeFunction;
88
+ once<TEventName extends keyof _xyo_network_module_model.ModuleEventData<object>>(eventName: TEventName, listener: _xylabs_events.EventListener<_xyo_network_module_model.ModuleEventData<object>[TEventName]>): _xylabs_events.EventUnsubscribeFunction;
89
+ }) & {
90
+ readonly labels: _xyo_network_module_model_mongodb.MongoDBStorageClassLabels;
91
+ } & typeof AbstractArchivist;
92
+ declare class MongoDBArchivistV2 extends MongoDBArchivistBaseV2 {
93
+ static readonly configSchemas: Schema[];
94
+ static readonly defaultConfigSchema: Schema;
95
+ readonly queries: string[];
96
+ /**
97
+ * The amount of time to allow the aggregate query to execute
98
+ */
99
+ protected readonly aggregateTimeoutMs = 10000;
100
+ protected findOneByHash(hash: Hash): Promise<mongodb.WithId<PayloadWithMongoMeta> | undefined>;
101
+ protected findOneBySequence(sequence: Sequence): Promise<mongodb.WithId<PayloadWithMongoMeta> | undefined>;
102
+ protected getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]>;
103
+ protected insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]>;
104
+ protected nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]>;
105
+ protected startHandler(): Promise<void>;
106
+ }
107
+
108
+ export { MongoDBArchivist, MongoDBArchivistV2 };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Archivist.ts","../../src/lib/validByType.ts","../../src/ArchivistV2.ts","../../src/index.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixin } from '@xyo-network/module-abstract-mongodb'\nimport type {\n Payload, Schema, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport { ObjectId } from 'mongodb'\n\nimport { validByType } from './lib/index.js'\n\nconst MongoDBArchivistBase = MongoDBModuleMixin(AbstractArchivist)\n\nexport class MongoDBArchivist extends MongoDBArchivistBase {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _$hash: hash }))\n if (dataBw) {\n return dataBw\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n } else {\n const bw = (await this.boundWitnesses.findOne({ _hash: hash }))\n return bw ?? undefined\n }\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _sequence: sequence }))\n return dataBw\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const dataBws = (await Promise.all(remainingHashes.map(_dataHash => this.boundWitnesses.findOne({ _dataHash })))).filter(exists)\n const dataBwsHashes = new Set(dataBws.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataBwsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const bws = (await Promise.all(remainingHashes.map(_hash => this.boundWitnesses.findOne({ _hash })))).filter(exists)\n const bwsHashes = new Set(bws.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !bwsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n // console.log(`getHandler: ${JSON.stringify(hashes, null, 2)}:${JSON.stringify(result, null, 2)}`)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const [bw, p] = await validByType(payloads)\n const payloadsWithExternalMeta = p.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta)\n if (!payloadsResult.acknowledged || payloadsResult.insertedCount !== payloadsWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting Payloads')\n }\n\n const boundWitnessesWithExternalMeta = bw.map(value => toDbRepresentation(value))\n if (boundWitnessesWithExternalMeta.length > 0) {\n const boundWitnessesResult = await this.boundWitnesses.insertMany(boundWitnessesWithExternalMeta)\n if (!boundWitnessesResult.acknowledged || boundWitnessesResult.insertedCount !== boundWitnessesWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting BoundWitnesses')\n }\n\n return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let id: ObjectId | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) id = payload._id\n } else {\n id = order === 'asc'\n // If ascending, start from the beginning of time\n ? ObjectId.createFromTime(0)\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : ObjectId.createFromTime((Date.now() + 10_000) / 1000)\n }\n if (!id) return []\n\n // Create aggregate criteria\n const sort = order === 'asc' ? 1 : -1\n // TODO: How to handle random component of ID across multiple collections\n // to ensure we don't skip some payloads\n const match = order === 'asc' ? (open ? { _id: { $gte: id } } : { _id: { $gt: id } }) : (open ? { _id: { $lte: id } } : { _id: { $lt: id } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _id\n { $sort: { _id: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n // Combine with filtered boundWitnesses collection\n {\n $unionWith: {\n coll: this.boundWitnessSdkConfig.collection,\n pipeline: [\n { $match: match }, // Pre-filter boundWitnesses\n { $sort: { _id: sort } }, // Sort boundWitnesses by _id\n { $limit: limit }, // Limit boundWitnesses to the first N boundWitnesses\n ],\n },\n },\n // Sort the combined result by _id\n { $sort: { _id: sort } },\n // Limit the final result to N documents\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureIndexes()\n }\n}\n","import type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness, isQueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport const validByType = async (payloads: WithStorageMeta<Payload>[] = []) => {\n const results: [WithStorageMeta<BoundWitness>[], WithStorageMeta<Payload>[]] = [[], []]\n await Promise.all(\n payloads.map(async (payload) => {\n if (isBoundWitness(payload)) {\n const wrapper = isQueryBoundWitness(payload) ? QueryBoundWitnessWrapper : BoundWitnessWrapper\n const bw = wrapper.parse(payload)\n if (await bw.getValid()) {\n results[0].push(payload)\n } else {\n const errors = await bw.getErrors()\n console.log(`validByType.Error: ${JSON.stringify(errors, null, 2)}`)\n }\n } else {\n const payloadWrapper = PayloadWrapper.wrap(payload)\n if (await payloadWrapper.getValid()) {\n results[1].push(payload)\n }\n }\n }),\n )\n return results\n}\n","import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixinV2 } from '@xyo-network/module-abstract-mongodb'\nimport {\n type Payload, type Schema, type Sequence, SequenceConstants,\n type WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport type { MongoError } from 'mongodb'\n\nconst MongoDBArchivistBaseV2 = MongoDBModuleMixinV2(AbstractArchivist)\n\nconst MONGODB_DUPLICATE_KEY_ERROR = 11_000\n\nexport class MongoDBArchivistV2 extends MongoDBArchivistBaseV2 {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...payloads] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const payloadsWithExternalMeta = payloads.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n try {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta, { ordered: false })\n if (!payloadsResult.acknowledged) throw new Error('MongoDBArchivist: Error inserting Payloads')\n } catch (error) {\n const mongoError = error as MongoError\n // NOTE: Intentional coercive equality since Mongo error codes are\n // of type string | number\n if (mongoError?.code != MONGODB_DUPLICATE_KEY_ERROR) throw error\n }\n }\n return [...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open = true,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let sequence: Sequence | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) sequence = payload._sequence\n } else {\n sequence = order === 'asc'\n // If ascending, start from the beginning of time\n ? SequenceConstants.minLocalSequence\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : SequenceConstants.maxLocalSequence\n }\n if (!sequence) return []\n\n // Create find criteria\n const sort = order === 'asc' ? 1 : -1\n\n const match = order === 'asc'\n ? (open\n ? { _sequence: { $gt: sequence } }\n : { _sequence: { $gte: sequence } })\n : (open\n ? { _sequence: { $lt: sequence } }\n : { _sequence: { $lte: sequence } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _sequence\n { $sort: { _sequence: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureCollection()\n }\n}\n","export * from './Archivist.js'\nexport * from './ArchivistV2.ts'\nexport * from '@xyo-network/archivist-model-mongodb'\n"],"mappings":"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","names":["exists","AbstractArchivist","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","MongoDBArchivistConfigSchema","fromDbRepresentation","toDbRepresentation"]}
1
+ {"version":3,"sources":["../../src/Archivist.ts","../../src/lib/validByType.ts","../../src/ArchivistV2.ts","../../src/index.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixin } from '@xyo-network/module-abstract-mongodb'\nimport type {\n Payload, Schema, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport { ObjectId } from 'mongodb'\n\nimport { validByType } from './lib/index.js'\n\nconst MongoDBArchivistBase = MongoDBModuleMixin(AbstractArchivist)\n\nexport class MongoDBArchivist extends MongoDBArchivistBase {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override queries = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _$hash: hash }))\n if (dataBw) {\n return dataBw\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n } else {\n const bw = (await this.boundWitnesses.findOne({ _hash: hash }))\n return bw ?? undefined\n }\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _sequence: sequence }))\n return dataBw\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const dataBws = (await Promise.all(remainingHashes.map(_dataHash => this.boundWitnesses.findOne({ _dataHash })))).filter(exists)\n const dataBwsHashes = new Set(dataBws.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataBwsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const bws = (await Promise.all(remainingHashes.map(_hash => this.boundWitnesses.findOne({ _hash })))).filter(exists)\n const bwsHashes = new Set(bws.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !bwsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n // console.log(`getHandler: ${JSON.stringify(hashes, null, 2)}:${JSON.stringify(result, null, 2)}`)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const [bw, p] = await validByType(payloads)\n const payloadsWithExternalMeta = p.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta)\n if (!payloadsResult.acknowledged || payloadsResult.insertedCount !== payloadsWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting Payloads')\n }\n\n const boundWitnessesWithExternalMeta = bw.map(value => toDbRepresentation(value))\n if (boundWitnessesWithExternalMeta.length > 0) {\n const boundWitnessesResult = await this.boundWitnesses.insertMany(boundWitnessesWithExternalMeta)\n if (!boundWitnessesResult.acknowledged || boundWitnessesResult.insertedCount !== boundWitnessesWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting BoundWitnesses')\n }\n\n return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let id: ObjectId | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) id = payload._id\n } else {\n id = order === 'asc'\n // If ascending, start from the beginning of time\n ? ObjectId.createFromTime(0)\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : ObjectId.createFromTime((Date.now() + 10_000) / 1000)\n }\n if (!id) return []\n\n // Create aggregate criteria\n const sort = order === 'asc' ? 1 : -1\n // TODO: How to handle random component of ID across multiple collections\n // to ensure we don't skip some payloads\n const match = order === 'asc' ? (open ? { _id: { $gte: id } } : { _id: { $gt: id } }) : (open ? { _id: { $lte: id } } : { _id: { $lt: id } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _id\n { $sort: { _id: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n // Combine with filtered boundWitnesses collection\n {\n $unionWith: {\n coll: this.boundWitnessSdkConfig.collection,\n pipeline: [\n { $match: match }, // Pre-filter boundWitnesses\n { $sort: { _id: sort } }, // Sort boundWitnesses by _id\n { $limit: limit }, // Limit boundWitnesses to the first N boundWitnesses\n ],\n },\n },\n // Sort the combined result by _id\n { $sort: { _id: sort } },\n // Limit the final result to N documents\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureIndexes()\n }\n}\n","import type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness, isQueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport const validByType = async (payloads: WithStorageMeta<Payload>[] = []) => {\n const results: [WithStorageMeta<BoundWitness>[], WithStorageMeta<Payload>[]] = [[], []]\n await Promise.all(\n payloads.map(async (payload) => {\n if (isBoundWitness(payload)) {\n const wrapper = isQueryBoundWitness(payload) ? QueryBoundWitnessWrapper : BoundWitnessWrapper\n const bw = wrapper.parse(payload)\n if (await bw.getValid()) {\n results[0].push(payload)\n } else {\n const errors = await bw.getErrors()\n console.log(`validByType.Error: ${JSON.stringify(errors, null, 2)}`)\n }\n } else {\n const payloadWrapper = PayloadWrapper.wrap(payload)\n if (await payloadWrapper.getValid()) {\n results[1].push(payload)\n }\n }\n }),\n )\n return results\n}\n","import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixinV2 } from '@xyo-network/module-abstract-mongodb'\nimport {\n type Payload, type Schema, type Sequence, SequenceConstants,\n type WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport type { MongoError } from 'mongodb'\n\nconst MongoDBArchivistBaseV2 = MongoDBModuleMixinV2(AbstractArchivist)\n\nconst MONGODB_DUPLICATE_KEY_ERROR = 11_000\n\nexport class MongoDBArchivistV2 extends MongoDBArchivistBaseV2 {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...payloads] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const payloadsWithExternalMeta = payloads.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n try {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta, { ordered: false })\n if (!payloadsResult.acknowledged) throw new Error('MongoDBArchivist: Error inserting Payloads')\n } catch (error) {\n const mongoError = error as MongoError\n // NOTE: Intentional coercive equality since Mongo error codes are\n // of type string | number\n if (mongoError?.code != MONGODB_DUPLICATE_KEY_ERROR) throw error\n }\n }\n return [...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open = true,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let sequence: Sequence | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) sequence = payload._sequence\n } else {\n sequence = order === 'asc'\n // If ascending, start from the beginning of time\n ? SequenceConstants.minLocalSequence\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : SequenceConstants.maxLocalSequence\n }\n if (!sequence) return []\n\n // Create find criteria\n const sort = order === 'asc' ? 1 : -1\n\n const match = order === 'asc'\n ? (open\n ? { _sequence: { $gt: sequence } }\n : { _sequence: { $gte: sequence } })\n : (open\n ? { _sequence: { $lt: sequence } }\n : { _sequence: { $lte: sequence } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _sequence\n { $sort: { _sequence: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureCollection()\n }\n}\n","export * from './Archivist.js'\nexport * from './ArchivistV2.ts'\nexport * from '@xyo-network/archivist-model-mongodb'\n"],"mappings":"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","names":["exists","AbstractArchivist","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","MongoDBArchivistConfigSchema","fromDbRepresentation","toDbRepresentation"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/archivist-mongodb",
3
- "version": "4.0.3",
3
+ "version": "4.1.0",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -21,49 +21,48 @@
21
21
  "type": "module",
22
22
  "exports": {
23
23
  ".": {
24
- "browser": {
25
- "types": "./dist/types/index.d.ts",
26
- "default": "./dist/browser/index.mjs"
27
- },
28
24
  "node": {
29
- "types": "./dist/types/index.d.ts",
25
+ "types": "./dist/node/index.d.ts",
26
+ "browser": {},
30
27
  "default": "./dist/node/index.mjs"
31
- },
32
- "types": "./dist/types/index.d.ts",
33
- "default": "./dist/node/index.mjs"
28
+ }
34
29
  },
35
30
  "./package.json": "./package.json"
36
31
  },
37
32
  "module": "dist/node/index.mjs",
38
- "types": "dist/types/index.d.ts",
33
+ "types": "dist/node/index.d.ts",
39
34
  "dependencies": {
40
- "@xylabs/exists": "^4.13.4",
41
- "@xylabs/hex": "^4.13.4",
42
- "@xyo-network/archivist-abstract": "^4.0.3",
43
- "@xyo-network/archivist-model": "^4.0.3",
44
- "@xyo-network/archivist-model-mongodb": "^4.0.3",
45
- "@xyo-network/boundwitness-model": "^4.0.3",
46
- "@xyo-network/boundwitness-wrapper": "^4.0.3",
47
- "@xyo-network/module-abstract-mongodb": "^4.0.3",
48
- "@xyo-network/payload-model": "^4.0.3",
49
- "@xyo-network/payload-mongodb": "^4.0.3",
50
- "@xyo-network/payload-wrapper": "^4.0.3",
35
+ "@xylabs/exists": "^4.13.15",
36
+ "@xylabs/hex": "^4.13.15",
37
+ "@xyo-network/archivist-abstract": "^4.1.0",
38
+ "@xyo-network/archivist-model": "^4.1.0",
39
+ "@xyo-network/archivist-model-mongodb": "^4.1.0",
40
+ "@xyo-network/boundwitness-model": "^4.1.0",
41
+ "@xyo-network/boundwitness-wrapper": "^4.1.0",
42
+ "@xyo-network/module-abstract-mongodb": "^4.1.0",
43
+ "@xyo-network/module-model-mongodb": "^4.1.0",
44
+ "@xyo-network/payload-model": "^4.1.0",
45
+ "@xyo-network/payload-mongodb": "^4.1.0",
46
+ "@xyo-network/payload-wrapper": "^4.1.0",
51
47
  "mongodb": "~6.17.0"
52
48
  },
53
49
  "devDependencies": {
54
- "@xylabs/delay": "^4.13.4",
55
- "@xylabs/mongo": "^4.13.4",
56
- "@xylabs/ts-scripts-yarn3": "^6.5.18",
57
- "@xylabs/tsconfig": "^6.5.18",
58
- "@xylabs/vitest-extended": "^4.13.4",
59
- "@xyo-network/account": "^4.0.3",
60
- "@xyo-network/archivist-acceptance-tests": "^4.0.3",
61
- "@xyo-network/archivist-wrapper": "^4.0.3",
62
- "@xyo-network/boundwitness-builder": "^4.0.3",
63
- "@xyo-network/payload-builder": "^4.0.3",
50
+ "@xylabs/delay": "^4.13.15",
51
+ "@xylabs/mongo": "^4.13.15",
52
+ "@xylabs/ts-scripts-yarn3": "^7.0.0-rc.20",
53
+ "@xylabs/tsconfig": "^7.0.0-rc.20",
54
+ "@xylabs/vitest-extended": "^4.13.15",
55
+ "@xyo-network/account": "^4.1.0",
56
+ "@xyo-network/archivist-acceptance-tests": "^4.1.0",
57
+ "@xyo-network/archivist-wrapper": "^4.1.0",
58
+ "@xyo-network/boundwitness-builder": "^4.1.0",
59
+ "@xyo-network/payload-builder": "^4.1.0",
64
60
  "typescript": "^5.8.3",
65
61
  "vitest": "^3.2.4"
66
62
  },
63
+ "engines": {
64
+ "node": ">=16"
65
+ },
67
66
  "publishConfig": {
68
67
  "access": "public"
69
68
  }
package/src/Archivist.ts CHANGED
@@ -20,7 +20,7 @@ export class MongoDBArchivist extends MongoDBArchivistBase {
20
20
  static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]
21
21
  static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema
22
22
 
23
- override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]
23
+ override queries = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]
24
24
 
25
25
  /**
26
26
  * The amount of time to allow the aggregate query to execute
package/xy.config.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
2
+ const config: XyTsupConfig = {
3
+ compile: {
4
+ entryMode: 'custom',
5
+ neutral: {},
6
+ browser: {},
7
+ node: { src: { entry: ['index.ts'] } },
8
+ },
9
+ }
10
+
11
+ export default config
@@ -1,272 +0,0 @@
1
- // src/Archivist.ts
2
- import { exists } from "@xylabs/exists";
3
- import { AbstractArchivist } from "@xyo-network/archivist-abstract";
4
- import { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from "@xyo-network/archivist-model";
5
- import { MongoDBArchivistConfigSchema } from "@xyo-network/archivist-model-mongodb";
6
- import { MongoDBModuleMixin } from "@xyo-network/module-abstract-mongodb";
7
- import { fromDbRepresentation, toDbRepresentation } from "@xyo-network/payload-mongodb";
8
- import { ObjectId } from "mongodb";
9
-
10
- // src/lib/validByType.ts
11
- import { isBoundWitness, isQueryBoundWitness } from "@xyo-network/boundwitness-model";
12
- import { BoundWitnessWrapper, QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
13
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
14
- var validByType = async (payloads = []) => {
15
- const results = [[], []];
16
- await Promise.all(
17
- payloads.map(async (payload) => {
18
- if (isBoundWitness(payload)) {
19
- const wrapper = isQueryBoundWitness(payload) ? QueryBoundWitnessWrapper : BoundWitnessWrapper;
20
- const bw = wrapper.parse(payload);
21
- if (await bw.getValid()) {
22
- results[0].push(payload);
23
- } else {
24
- const errors = await bw.getErrors();
25
- console.log(`validByType.Error: ${JSON.stringify(errors, null, 2)}`);
26
- }
27
- } else {
28
- const payloadWrapper = PayloadWrapper.wrap(payload);
29
- if (await payloadWrapper.getValid()) {
30
- results[1].push(payload);
31
- }
32
- }
33
- })
34
- );
35
- return results;
36
- };
37
-
38
- // src/Archivist.ts
39
- var MongoDBArchivistBase = MongoDBModuleMixin(AbstractArchivist);
40
- var MongoDBArchivist = class extends MongoDBArchivistBase {
41
- static configSchemas = [...super.configSchemas, MongoDBArchivistConfigSchema];
42
- static defaultConfigSchema = MongoDBArchivistConfigSchema;
43
- queries = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries];
44
- /**
45
- * The amount of time to allow the aggregate query to execute
46
- */
47
- aggregateTimeoutMs = 1e4;
48
- async findOneByHash(hash) {
49
- const dataPayload = await this.payloads.findOne({ _$hash: hash });
50
- if (dataPayload) {
51
- return dataPayload;
52
- } else {
53
- const dataBw = await this.boundWitnesses.findOne({ _$hash: hash });
54
- if (dataBw) {
55
- return dataBw;
56
- } else {
57
- const payload = await this.payloads.findOne({ _hash: hash });
58
- if (payload) {
59
- return payload;
60
- } else {
61
- const bw = await this.boundWitnesses.findOne({ _hash: hash });
62
- return bw ?? void 0;
63
- }
64
- }
65
- }
66
- }
67
- async findOneBySequence(sequence) {
68
- const dataPayload = await this.payloads.findOne({ _sequence: sequence });
69
- if (dataPayload) {
70
- return dataPayload;
71
- } else {
72
- const dataBw = await this.boundWitnesses.findOne({ _sequence: sequence });
73
- return dataBw;
74
- }
75
- }
76
- async getHandler(hashes) {
77
- let remainingHashes = [...hashes];
78
- const dataPayloads = (await Promise.all(remainingHashes.map((_dataHash) => this.payloads.findOne({ _dataHash })))).filter(exists);
79
- const dataPayloadsHashes = new Set(dataPayloads.map((payload) => payload._dataHash));
80
- remainingHashes = remainingHashes.filter((hash) => !dataPayloadsHashes.has(hash));
81
- const dataBws = (await Promise.all(remainingHashes.map((_dataHash) => this.boundWitnesses.findOne({ _dataHash })))).filter(exists);
82
- const dataBwsHashes = new Set(dataBws.map((payload) => payload._dataHash));
83
- remainingHashes = remainingHashes.filter((hash) => !dataBwsHashes.has(hash));
84
- const payloads = (await Promise.all(remainingHashes.map((_hash) => this.payloads.findOne({ _hash })))).filter(exists);
85
- const payloadsHashes = new Set(payloads.map((payload) => payload._hash));
86
- remainingHashes = remainingHashes.filter((hash) => !payloadsHashes.has(hash));
87
- const bws = (await Promise.all(remainingHashes.map((_hash) => this.boundWitnesses.findOne({ _hash })))).filter(exists);
88
- const bwsHashes = new Set(bws.map((payload) => payload._hash));
89
- remainingHashes = remainingHashes.filter((hash) => !bwsHashes.has(hash));
90
- const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws];
91
- const result = foundPayloads.map(fromDbRepresentation);
92
- return result;
93
- }
94
- async insertHandler(payloads) {
95
- const [bw, p] = await validByType(payloads);
96
- const payloadsWithExternalMeta = p.map((value) => toDbRepresentation(value));
97
- if (payloadsWithExternalMeta.length > 0) {
98
- const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta);
99
- if (!payloadsResult.acknowledged || payloadsResult.insertedCount !== payloadsWithExternalMeta.length)
100
- throw new Error("MongoDBArchivist: Error inserting Payloads");
101
- }
102
- const boundWitnessesWithExternalMeta = bw.map((value) => toDbRepresentation(value));
103
- if (boundWitnessesWithExternalMeta.length > 0) {
104
- const boundWitnessesResult = await this.boundWitnesses.insertMany(boundWitnessesWithExternalMeta);
105
- if (!boundWitnessesResult.acknowledged || boundWitnessesResult.insertedCount !== boundWitnessesWithExternalMeta.length)
106
- throw new Error("MongoDBArchivist: Error inserting BoundWitnesses");
107
- }
108
- return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation);
109
- }
110
- async nextHandler(options) {
111
- let {
112
- limit,
113
- cursor,
114
- order,
115
- open
116
- } = options ?? { limit: 10, order: "desc" };
117
- if (!limit) limit = 10;
118
- if (limit > 100) limit = 100;
119
- if (order != "asc") order = "desc";
120
- let id;
121
- if (cursor) {
122
- const payload = await this.findOneBySequence(cursor);
123
- if (payload) id = payload._id;
124
- } else {
125
- id = order === "asc" ? ObjectId.createFromTime(0) : ObjectId.createFromTime((Date.now() + 1e4) / 1e3);
126
- }
127
- if (!id) return [];
128
- const sort = order === "asc" ? 1 : -1;
129
- const match = order === "asc" ? open ? { _id: { $gte: id } } : { _id: { $gt: id } } : open ? { _id: { $lte: id } } : { _id: { $lt: id } };
130
- const foundPayloads = await this.payloads.useCollection((collection) => {
131
- return collection.aggregate([
132
- // Pre-filter payloads collection
133
- { $match: match },
134
- // Sort payloads by _id
135
- { $sort: { _id: sort } },
136
- // Limit payloads to the first N payloads
137
- { $limit: limit },
138
- // Combine with filtered boundWitnesses collection
139
- {
140
- $unionWith: {
141
- coll: this.boundWitnessSdkConfig.collection,
142
- pipeline: [
143
- { $match: match },
144
- // Pre-filter boundWitnesses
145
- { $sort: { _id: sort } },
146
- // Sort boundWitnesses by _id
147
- { $limit: limit }
148
- // Limit boundWitnesses to the first N boundWitnesses
149
- ]
150
- }
151
- },
152
- // Sort the combined result by _id
153
- { $sort: { _id: sort } },
154
- // Limit the final result to N documents
155
- { $limit: limit }
156
- ]).maxTimeMS(this.aggregateTimeoutMs).toArray();
157
- });
158
- return foundPayloads.map(fromDbRepresentation);
159
- }
160
- async startHandler() {
161
- await super.startHandler();
162
- await this.ensureIndexes();
163
- }
164
- };
165
-
166
- // src/ArchivistV2.ts
167
- import { exists as exists2 } from "@xylabs/exists";
168
- import { AbstractArchivist as AbstractArchivist2 } from "@xyo-network/archivist-abstract";
169
- import { ArchivistInsertQuerySchema as ArchivistInsertQuerySchema2, ArchivistNextQuerySchema as ArchivistNextQuerySchema2 } from "@xyo-network/archivist-model";
170
- import { MongoDBArchivistConfigSchema as MongoDBArchivistConfigSchema2 } from "@xyo-network/archivist-model-mongodb";
171
- import { MongoDBModuleMixinV2 } from "@xyo-network/module-abstract-mongodb";
172
- import {
173
- SequenceConstants
174
- } from "@xyo-network/payload-model";
175
- import { fromDbRepresentation as fromDbRepresentation2, toDbRepresentation as toDbRepresentation2 } from "@xyo-network/payload-mongodb";
176
- var MongoDBArchivistBaseV2 = MongoDBModuleMixinV2(AbstractArchivist2);
177
- var MONGODB_DUPLICATE_KEY_ERROR = 11e3;
178
- var MongoDBArchivistV2 = class extends MongoDBArchivistBaseV2 {
179
- static configSchemas = [...super.configSchemas, MongoDBArchivistConfigSchema2];
180
- static defaultConfigSchema = MongoDBArchivistConfigSchema2;
181
- queries = [ArchivistInsertQuerySchema2, ArchivistNextQuerySchema2, ...super.queries];
182
- /**
183
- * The amount of time to allow the aggregate query to execute
184
- */
185
- aggregateTimeoutMs = 1e4;
186
- async findOneByHash(hash) {
187
- const dataPayload = await this.payloads.findOne({ _$hash: hash });
188
- if (dataPayload) {
189
- return dataPayload;
190
- } else {
191
- const payload = await this.payloads.findOne({ _hash: hash });
192
- if (payload) {
193
- return payload;
194
- }
195
- }
196
- }
197
- async findOneBySequence(sequence) {
198
- const dataPayload = await this.payloads.findOne({ _sequence: sequence });
199
- if (dataPayload) {
200
- return dataPayload;
201
- }
202
- }
203
- async getHandler(hashes) {
204
- let remainingHashes = [...hashes];
205
- const dataPayloads = (await Promise.all(remainingHashes.map((_dataHash) => this.payloads.findOne({ _dataHash })))).filter(exists2);
206
- const dataPayloadsHashes = new Set(dataPayloads.map((payload) => payload._dataHash));
207
- remainingHashes = remainingHashes.filter((hash) => !dataPayloadsHashes.has(hash));
208
- const payloads = (await Promise.all(remainingHashes.map((_hash) => this.payloads.findOne({ _hash })))).filter(exists2);
209
- const payloadsHashes = new Set(payloads.map((payload) => payload._hash));
210
- remainingHashes = remainingHashes.filter((hash) => !payloadsHashes.has(hash));
211
- const foundPayloads = [...dataPayloads, ...payloads];
212
- const result = foundPayloads.map(fromDbRepresentation2);
213
- return result;
214
- }
215
- async insertHandler(payloads) {
216
- const payloadsWithExternalMeta = payloads.map((value) => toDbRepresentation2(value));
217
- if (payloadsWithExternalMeta.length > 0) {
218
- try {
219
- const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta, { ordered: false });
220
- if (!payloadsResult.acknowledged) throw new Error("MongoDBArchivist: Error inserting Payloads");
221
- } catch (error) {
222
- const mongoError = error;
223
- if (mongoError?.code != MONGODB_DUPLICATE_KEY_ERROR) throw error;
224
- }
225
- }
226
- return [...payloadsWithExternalMeta].map(fromDbRepresentation2);
227
- }
228
- async nextHandler(options) {
229
- let {
230
- limit,
231
- cursor,
232
- order,
233
- open = true
234
- } = options ?? { limit: 10, order: "desc" };
235
- if (!limit) limit = 10;
236
- if (limit > 100) limit = 100;
237
- if (order != "asc") order = "desc";
238
- let sequence;
239
- if (cursor) {
240
- const payload = await this.findOneBySequence(cursor);
241
- if (payload) sequence = payload._sequence;
242
- } else {
243
- sequence = order === "asc" ? SequenceConstants.minLocalSequence : SequenceConstants.maxLocalSequence;
244
- }
245
- if (!sequence) return [];
246
- const sort = order === "asc" ? 1 : -1;
247
- const match = order === "asc" ? open ? { _sequence: { $gt: sequence } } : { _sequence: { $gte: sequence } } : open ? { _sequence: { $lt: sequence } } : { _sequence: { $lte: sequence } };
248
- const foundPayloads = await this.payloads.useCollection((collection) => {
249
- return collection.aggregate([
250
- // Pre-filter payloads collection
251
- { $match: match },
252
- // Sort payloads by _sequence
253
- { $sort: { _sequence: sort } },
254
- // Limit payloads to the first N payloads
255
- { $limit: limit }
256
- ]).maxTimeMS(this.aggregateTimeoutMs).toArray();
257
- });
258
- return foundPayloads.map(fromDbRepresentation2);
259
- }
260
- async startHandler() {
261
- await super.startHandler();
262
- await this.ensureCollection();
263
- }
264
- };
265
-
266
- // src/index.ts
267
- export * from "@xyo-network/archivist-model-mongodb";
268
- export {
269
- MongoDBArchivist,
270
- MongoDBArchivistV2
271
- };
272
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/Archivist.ts","../../src/lib/validByType.ts","../../src/ArchivistV2.ts","../../src/index.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixin } from '@xyo-network/module-abstract-mongodb'\nimport type {\n Payload, Schema, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport { ObjectId } from 'mongodb'\n\nimport { validByType } from './lib/index.js'\n\nconst MongoDBArchivistBase = MongoDBModuleMixin(AbstractArchivist)\n\nexport class MongoDBArchivist extends MongoDBArchivistBase {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _$hash: hash }))\n if (dataBw) {\n return dataBw\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n } else {\n const bw = (await this.boundWitnesses.findOne({ _hash: hash }))\n return bw ?? undefined\n }\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _sequence: sequence }))\n return dataBw\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const dataBws = (await Promise.all(remainingHashes.map(_dataHash => this.boundWitnesses.findOne({ _dataHash })))).filter(exists)\n const dataBwsHashes = new Set(dataBws.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataBwsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const bws = (await Promise.all(remainingHashes.map(_hash => this.boundWitnesses.findOne({ _hash })))).filter(exists)\n const bwsHashes = new Set(bws.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !bwsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n // console.log(`getHandler: ${JSON.stringify(hashes, null, 2)}:${JSON.stringify(result, null, 2)}`)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const [bw, p] = await validByType(payloads)\n const payloadsWithExternalMeta = p.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta)\n if (!payloadsResult.acknowledged || payloadsResult.insertedCount !== payloadsWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting Payloads')\n }\n\n const boundWitnessesWithExternalMeta = bw.map(value => toDbRepresentation(value))\n if (boundWitnessesWithExternalMeta.length > 0) {\n const boundWitnessesResult = await this.boundWitnesses.insertMany(boundWitnessesWithExternalMeta)\n if (!boundWitnessesResult.acknowledged || boundWitnessesResult.insertedCount !== boundWitnessesWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting BoundWitnesses')\n }\n\n return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let id: ObjectId | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) id = payload._id\n } else {\n id = order === 'asc'\n // If ascending, start from the beginning of time\n ? ObjectId.createFromTime(0)\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : ObjectId.createFromTime((Date.now() + 10_000) / 1000)\n }\n if (!id) return []\n\n // Create aggregate criteria\n const sort = order === 'asc' ? 1 : -1\n // TODO: How to handle random component of ID across multiple collections\n // to ensure we don't skip some payloads\n const match = order === 'asc' ? (open ? { _id: { $gte: id } } : { _id: { $gt: id } }) : (open ? { _id: { $lte: id } } : { _id: { $lt: id } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _id\n { $sort: { _id: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n // Combine with filtered boundWitnesses collection\n {\n $unionWith: {\n coll: this.boundWitnessSdkConfig.collection,\n pipeline: [\n { $match: match }, // Pre-filter boundWitnesses\n { $sort: { _id: sort } }, // Sort boundWitnesses by _id\n { $limit: limit }, // Limit boundWitnesses to the first N boundWitnesses\n ],\n },\n },\n // Sort the combined result by _id\n { $sort: { _id: sort } },\n // Limit the final result to N documents\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureIndexes()\n }\n}\n","import type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness, isQueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport const validByType = async (payloads: WithStorageMeta<Payload>[] = []) => {\n const results: [WithStorageMeta<BoundWitness>[], WithStorageMeta<Payload>[]] = [[], []]\n await Promise.all(\n payloads.map(async (payload) => {\n if (isBoundWitness(payload)) {\n const wrapper = isQueryBoundWitness(payload) ? QueryBoundWitnessWrapper : BoundWitnessWrapper\n const bw = wrapper.parse(payload)\n if (await bw.getValid()) {\n results[0].push(payload)\n } else {\n const errors = await bw.getErrors()\n console.log(`validByType.Error: ${JSON.stringify(errors, null, 2)}`)\n }\n } else {\n const payloadWrapper = PayloadWrapper.wrap(payload)\n if (await payloadWrapper.getValid()) {\n results[1].push(payload)\n }\n }\n }),\n )\n return results\n}\n","import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixinV2 } from '@xyo-network/module-abstract-mongodb'\nimport {\n type Payload, type Schema, type Sequence, SequenceConstants,\n type WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport type { MongoError } from 'mongodb'\n\nconst MongoDBArchivistBaseV2 = MongoDBModuleMixinV2(AbstractArchivist)\n\nconst MONGODB_DUPLICATE_KEY_ERROR = 11_000\n\nexport class MongoDBArchivistV2 extends MongoDBArchivistBaseV2 {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...payloads] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const payloadsWithExternalMeta = payloads.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n try {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta, { ordered: false })\n if (!payloadsResult.acknowledged) throw new Error('MongoDBArchivist: Error inserting Payloads')\n } catch (error) {\n const mongoError = error as MongoError\n // NOTE: Intentional coercive equality since Mongo error codes are\n // of type string | number\n if (mongoError?.code != MONGODB_DUPLICATE_KEY_ERROR) throw error\n }\n }\n return [...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open = true,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let sequence: Sequence | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) sequence = payload._sequence\n } else {\n sequence = order === 'asc'\n // If ascending, start from the beginning of time\n ? SequenceConstants.minLocalSequence\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : SequenceConstants.maxLocalSequence\n }\n if (!sequence) return []\n\n // Create find criteria\n const sort = order === 'asc' ? 1 : -1\n\n const match = order === 'asc'\n ? (open\n ? { _sequence: { $gt: sequence } }\n : { _sequence: { $gte: sequence } })\n : (open\n ? { _sequence: { $lt: sequence } }\n : { _sequence: { $lte: sequence } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _sequence\n { $sort: { _sequence: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureCollection()\n }\n}\n","export * from './Archivist.js'\nexport * from './ArchivistV2.ts'\nexport * from '@xyo-network/archivist-model-mongodb'\n"],"mappings":"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","names":["exists","AbstractArchivist","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","MongoDBArchivistConfigSchema","fromDbRepresentation","toDbRepresentation"]}
@@ -1,272 +0,0 @@
1
- // src/Archivist.ts
2
- import { exists } from "@xylabs/exists";
3
- import { AbstractArchivist } from "@xyo-network/archivist-abstract";
4
- import { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from "@xyo-network/archivist-model";
5
- import { MongoDBArchivistConfigSchema } from "@xyo-network/archivist-model-mongodb";
6
- import { MongoDBModuleMixin } from "@xyo-network/module-abstract-mongodb";
7
- import { fromDbRepresentation, toDbRepresentation } from "@xyo-network/payload-mongodb";
8
- import { ObjectId } from "mongodb";
9
-
10
- // src/lib/validByType.ts
11
- import { isBoundWitness, isQueryBoundWitness } from "@xyo-network/boundwitness-model";
12
- import { BoundWitnessWrapper, QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
13
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
14
- var validByType = async (payloads = []) => {
15
- const results = [[], []];
16
- await Promise.all(
17
- payloads.map(async (payload) => {
18
- if (isBoundWitness(payload)) {
19
- const wrapper = isQueryBoundWitness(payload) ? QueryBoundWitnessWrapper : BoundWitnessWrapper;
20
- const bw = wrapper.parse(payload);
21
- if (await bw.getValid()) {
22
- results[0].push(payload);
23
- } else {
24
- const errors = await bw.getErrors();
25
- console.log(`validByType.Error: ${JSON.stringify(errors, null, 2)}`);
26
- }
27
- } else {
28
- const payloadWrapper = PayloadWrapper.wrap(payload);
29
- if (await payloadWrapper.getValid()) {
30
- results[1].push(payload);
31
- }
32
- }
33
- })
34
- );
35
- return results;
36
- };
37
-
38
- // src/Archivist.ts
39
- var MongoDBArchivistBase = MongoDBModuleMixin(AbstractArchivist);
40
- var MongoDBArchivist = class extends MongoDBArchivistBase {
41
- static configSchemas = [...super.configSchemas, MongoDBArchivistConfigSchema];
42
- static defaultConfigSchema = MongoDBArchivistConfigSchema;
43
- queries = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries];
44
- /**
45
- * The amount of time to allow the aggregate query to execute
46
- */
47
- aggregateTimeoutMs = 1e4;
48
- async findOneByHash(hash) {
49
- const dataPayload = await this.payloads.findOne({ _$hash: hash });
50
- if (dataPayload) {
51
- return dataPayload;
52
- } else {
53
- const dataBw = await this.boundWitnesses.findOne({ _$hash: hash });
54
- if (dataBw) {
55
- return dataBw;
56
- } else {
57
- const payload = await this.payloads.findOne({ _hash: hash });
58
- if (payload) {
59
- return payload;
60
- } else {
61
- const bw = await this.boundWitnesses.findOne({ _hash: hash });
62
- return bw ?? void 0;
63
- }
64
- }
65
- }
66
- }
67
- async findOneBySequence(sequence) {
68
- const dataPayload = await this.payloads.findOne({ _sequence: sequence });
69
- if (dataPayload) {
70
- return dataPayload;
71
- } else {
72
- const dataBw = await this.boundWitnesses.findOne({ _sequence: sequence });
73
- return dataBw;
74
- }
75
- }
76
- async getHandler(hashes) {
77
- let remainingHashes = [...hashes];
78
- const dataPayloads = (await Promise.all(remainingHashes.map((_dataHash) => this.payloads.findOne({ _dataHash })))).filter(exists);
79
- const dataPayloadsHashes = new Set(dataPayloads.map((payload) => payload._dataHash));
80
- remainingHashes = remainingHashes.filter((hash) => !dataPayloadsHashes.has(hash));
81
- const dataBws = (await Promise.all(remainingHashes.map((_dataHash) => this.boundWitnesses.findOne({ _dataHash })))).filter(exists);
82
- const dataBwsHashes = new Set(dataBws.map((payload) => payload._dataHash));
83
- remainingHashes = remainingHashes.filter((hash) => !dataBwsHashes.has(hash));
84
- const payloads = (await Promise.all(remainingHashes.map((_hash) => this.payloads.findOne({ _hash })))).filter(exists);
85
- const payloadsHashes = new Set(payloads.map((payload) => payload._hash));
86
- remainingHashes = remainingHashes.filter((hash) => !payloadsHashes.has(hash));
87
- const bws = (await Promise.all(remainingHashes.map((_hash) => this.boundWitnesses.findOne({ _hash })))).filter(exists);
88
- const bwsHashes = new Set(bws.map((payload) => payload._hash));
89
- remainingHashes = remainingHashes.filter((hash) => !bwsHashes.has(hash));
90
- const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws];
91
- const result = foundPayloads.map(fromDbRepresentation);
92
- return result;
93
- }
94
- async insertHandler(payloads) {
95
- const [bw, p] = await validByType(payloads);
96
- const payloadsWithExternalMeta = p.map((value) => toDbRepresentation(value));
97
- if (payloadsWithExternalMeta.length > 0) {
98
- const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta);
99
- if (!payloadsResult.acknowledged || payloadsResult.insertedCount !== payloadsWithExternalMeta.length)
100
- throw new Error("MongoDBArchivist: Error inserting Payloads");
101
- }
102
- const boundWitnessesWithExternalMeta = bw.map((value) => toDbRepresentation(value));
103
- if (boundWitnessesWithExternalMeta.length > 0) {
104
- const boundWitnessesResult = await this.boundWitnesses.insertMany(boundWitnessesWithExternalMeta);
105
- if (!boundWitnessesResult.acknowledged || boundWitnessesResult.insertedCount !== boundWitnessesWithExternalMeta.length)
106
- throw new Error("MongoDBArchivist: Error inserting BoundWitnesses");
107
- }
108
- return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation);
109
- }
110
- async nextHandler(options) {
111
- let {
112
- limit,
113
- cursor,
114
- order,
115
- open
116
- } = options ?? { limit: 10, order: "desc" };
117
- if (!limit) limit = 10;
118
- if (limit > 100) limit = 100;
119
- if (order != "asc") order = "desc";
120
- let id;
121
- if (cursor) {
122
- const payload = await this.findOneBySequence(cursor);
123
- if (payload) id = payload._id;
124
- } else {
125
- id = order === "asc" ? ObjectId.createFromTime(0) : ObjectId.createFromTime((Date.now() + 1e4) / 1e3);
126
- }
127
- if (!id) return [];
128
- const sort = order === "asc" ? 1 : -1;
129
- const match = order === "asc" ? open ? { _id: { $gte: id } } : { _id: { $gt: id } } : open ? { _id: { $lte: id } } : { _id: { $lt: id } };
130
- const foundPayloads = await this.payloads.useCollection((collection) => {
131
- return collection.aggregate([
132
- // Pre-filter payloads collection
133
- { $match: match },
134
- // Sort payloads by _id
135
- { $sort: { _id: sort } },
136
- // Limit payloads to the first N payloads
137
- { $limit: limit },
138
- // Combine with filtered boundWitnesses collection
139
- {
140
- $unionWith: {
141
- coll: this.boundWitnessSdkConfig.collection,
142
- pipeline: [
143
- { $match: match },
144
- // Pre-filter boundWitnesses
145
- { $sort: { _id: sort } },
146
- // Sort boundWitnesses by _id
147
- { $limit: limit }
148
- // Limit boundWitnesses to the first N boundWitnesses
149
- ]
150
- }
151
- },
152
- // Sort the combined result by _id
153
- { $sort: { _id: sort } },
154
- // Limit the final result to N documents
155
- { $limit: limit }
156
- ]).maxTimeMS(this.aggregateTimeoutMs).toArray();
157
- });
158
- return foundPayloads.map(fromDbRepresentation);
159
- }
160
- async startHandler() {
161
- await super.startHandler();
162
- await this.ensureIndexes();
163
- }
164
- };
165
-
166
- // src/ArchivistV2.ts
167
- import { exists as exists2 } from "@xylabs/exists";
168
- import { AbstractArchivist as AbstractArchivist2 } from "@xyo-network/archivist-abstract";
169
- import { ArchivistInsertQuerySchema as ArchivistInsertQuerySchema2, ArchivistNextQuerySchema as ArchivistNextQuerySchema2 } from "@xyo-network/archivist-model";
170
- import { MongoDBArchivistConfigSchema as MongoDBArchivistConfigSchema2 } from "@xyo-network/archivist-model-mongodb";
171
- import { MongoDBModuleMixinV2 } from "@xyo-network/module-abstract-mongodb";
172
- import {
173
- SequenceConstants
174
- } from "@xyo-network/payload-model";
175
- import { fromDbRepresentation as fromDbRepresentation2, toDbRepresentation as toDbRepresentation2 } from "@xyo-network/payload-mongodb";
176
- var MongoDBArchivistBaseV2 = MongoDBModuleMixinV2(AbstractArchivist2);
177
- var MONGODB_DUPLICATE_KEY_ERROR = 11e3;
178
- var MongoDBArchivistV2 = class extends MongoDBArchivistBaseV2 {
179
- static configSchemas = [...super.configSchemas, MongoDBArchivistConfigSchema2];
180
- static defaultConfigSchema = MongoDBArchivistConfigSchema2;
181
- queries = [ArchivistInsertQuerySchema2, ArchivistNextQuerySchema2, ...super.queries];
182
- /**
183
- * The amount of time to allow the aggregate query to execute
184
- */
185
- aggregateTimeoutMs = 1e4;
186
- async findOneByHash(hash) {
187
- const dataPayload = await this.payloads.findOne({ _$hash: hash });
188
- if (dataPayload) {
189
- return dataPayload;
190
- } else {
191
- const payload = await this.payloads.findOne({ _hash: hash });
192
- if (payload) {
193
- return payload;
194
- }
195
- }
196
- }
197
- async findOneBySequence(sequence) {
198
- const dataPayload = await this.payloads.findOne({ _sequence: sequence });
199
- if (dataPayload) {
200
- return dataPayload;
201
- }
202
- }
203
- async getHandler(hashes) {
204
- let remainingHashes = [...hashes];
205
- const dataPayloads = (await Promise.all(remainingHashes.map((_dataHash) => this.payloads.findOne({ _dataHash })))).filter(exists2);
206
- const dataPayloadsHashes = new Set(dataPayloads.map((payload) => payload._dataHash));
207
- remainingHashes = remainingHashes.filter((hash) => !dataPayloadsHashes.has(hash));
208
- const payloads = (await Promise.all(remainingHashes.map((_hash) => this.payloads.findOne({ _hash })))).filter(exists2);
209
- const payloadsHashes = new Set(payloads.map((payload) => payload._hash));
210
- remainingHashes = remainingHashes.filter((hash) => !payloadsHashes.has(hash));
211
- const foundPayloads = [...dataPayloads, ...payloads];
212
- const result = foundPayloads.map(fromDbRepresentation2);
213
- return result;
214
- }
215
- async insertHandler(payloads) {
216
- const payloadsWithExternalMeta = payloads.map((value) => toDbRepresentation2(value));
217
- if (payloadsWithExternalMeta.length > 0) {
218
- try {
219
- const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta, { ordered: false });
220
- if (!payloadsResult.acknowledged) throw new Error("MongoDBArchivist: Error inserting Payloads");
221
- } catch (error) {
222
- const mongoError = error;
223
- if (mongoError?.code != MONGODB_DUPLICATE_KEY_ERROR) throw error;
224
- }
225
- }
226
- return [...payloadsWithExternalMeta].map(fromDbRepresentation2);
227
- }
228
- async nextHandler(options) {
229
- let {
230
- limit,
231
- cursor,
232
- order,
233
- open = true
234
- } = options ?? { limit: 10, order: "desc" };
235
- if (!limit) limit = 10;
236
- if (limit > 100) limit = 100;
237
- if (order != "asc") order = "desc";
238
- let sequence;
239
- if (cursor) {
240
- const payload = await this.findOneBySequence(cursor);
241
- if (payload) sequence = payload._sequence;
242
- } else {
243
- sequence = order === "asc" ? SequenceConstants.minLocalSequence : SequenceConstants.maxLocalSequence;
244
- }
245
- if (!sequence) return [];
246
- const sort = order === "asc" ? 1 : -1;
247
- const match = order === "asc" ? open ? { _sequence: { $gt: sequence } } : { _sequence: { $gte: sequence } } : open ? { _sequence: { $lt: sequence } } : { _sequence: { $lte: sequence } };
248
- const foundPayloads = await this.payloads.useCollection((collection) => {
249
- return collection.aggregate([
250
- // Pre-filter payloads collection
251
- { $match: match },
252
- // Sort payloads by _sequence
253
- { $sort: { _sequence: sort } },
254
- // Limit payloads to the first N payloads
255
- { $limit: limit }
256
- ]).maxTimeMS(this.aggregateTimeoutMs).toArray();
257
- });
258
- return foundPayloads.map(fromDbRepresentation2);
259
- }
260
- async startHandler() {
261
- await super.startHandler();
262
- await this.ensureCollection();
263
- }
264
- };
265
-
266
- // src/index.ts
267
- export * from "@xyo-network/archivist-model-mongodb";
268
- export {
269
- MongoDBArchivist,
270
- MongoDBArchivistV2
271
- };
272
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/Archivist.ts","../../src/lib/validByType.ts","../../src/ArchivistV2.ts","../../src/index.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixin } from '@xyo-network/module-abstract-mongodb'\nimport type {\n Payload, Schema, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport { ObjectId } from 'mongodb'\n\nimport { validByType } from './lib/index.js'\n\nconst MongoDBArchivistBase = MongoDBModuleMixin(AbstractArchivist)\n\nexport class MongoDBArchivist extends MongoDBArchivistBase {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _$hash: hash }))\n if (dataBw) {\n return dataBw\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n } else {\n const bw = (await this.boundWitnesses.findOne({ _hash: hash }))\n return bw ?? undefined\n }\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n } else {\n const dataBw = (await this.boundWitnesses.findOne({ _sequence: sequence }))\n return dataBw\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const dataBws = (await Promise.all(remainingHashes.map(_dataHash => this.boundWitnesses.findOne({ _dataHash })))).filter(exists)\n const dataBwsHashes = new Set(dataBws.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataBwsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const bws = (await Promise.all(remainingHashes.map(_hash => this.boundWitnesses.findOne({ _hash })))).filter(exists)\n const bwsHashes = new Set(bws.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !bwsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n // console.log(`getHandler: ${JSON.stringify(hashes, null, 2)}:${JSON.stringify(result, null, 2)}`)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const [bw, p] = await validByType(payloads)\n const payloadsWithExternalMeta = p.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta)\n if (!payloadsResult.acknowledged || payloadsResult.insertedCount !== payloadsWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting Payloads')\n }\n\n const boundWitnessesWithExternalMeta = bw.map(value => toDbRepresentation(value))\n if (boundWitnessesWithExternalMeta.length > 0) {\n const boundWitnessesResult = await this.boundWitnesses.insertMany(boundWitnessesWithExternalMeta)\n if (!boundWitnessesResult.acknowledged || boundWitnessesResult.insertedCount !== boundWitnessesWithExternalMeta.length)\n throw new Error('MongoDBArchivist: Error inserting BoundWitnesses')\n }\n\n return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let id: ObjectId | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) id = payload._id\n } else {\n id = order === 'asc'\n // If ascending, start from the beginning of time\n ? ObjectId.createFromTime(0)\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : ObjectId.createFromTime((Date.now() + 10_000) / 1000)\n }\n if (!id) return []\n\n // Create aggregate criteria\n const sort = order === 'asc' ? 1 : -1\n // TODO: How to handle random component of ID across multiple collections\n // to ensure we don't skip some payloads\n const match = order === 'asc' ? (open ? { _id: { $gte: id } } : { _id: { $gt: id } }) : (open ? { _id: { $lte: id } } : { _id: { $lt: id } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _id\n { $sort: { _id: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n // Combine with filtered boundWitnesses collection\n {\n $unionWith: {\n coll: this.boundWitnessSdkConfig.collection,\n pipeline: [\n { $match: match }, // Pre-filter boundWitnesses\n { $sort: { _id: sort } }, // Sort boundWitnesses by _id\n { $limit: limit }, // Limit boundWitnesses to the first N boundWitnesses\n ],\n },\n },\n // Sort the combined result by _id\n { $sort: { _id: sort } },\n // Limit the final result to N documents\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureIndexes()\n }\n}\n","import type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness, isQueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport const validByType = async (payloads: WithStorageMeta<Payload>[] = []) => {\n const results: [WithStorageMeta<BoundWitness>[], WithStorageMeta<Payload>[]] = [[], []]\n await Promise.all(\n payloads.map(async (payload) => {\n if (isBoundWitness(payload)) {\n const wrapper = isQueryBoundWitness(payload) ? QueryBoundWitnessWrapper : BoundWitnessWrapper\n const bw = wrapper.parse(payload)\n if (await bw.getValid()) {\n results[0].push(payload)\n } else {\n const errors = await bw.getErrors()\n console.log(`validByType.Error: ${JSON.stringify(errors, null, 2)}`)\n }\n } else {\n const payloadWrapper = PayloadWrapper.wrap(payload)\n if (await payloadWrapper.getValid()) {\n results[1].push(payload)\n }\n }\n }),\n )\n return results\n}\n","import { exists } from '@xylabs/exists'\nimport type { Hash } from '@xylabs/hex'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type { ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from '@xyo-network/archivist-model'\nimport { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongodb'\nimport { MongoDBModuleMixinV2 } from '@xyo-network/module-abstract-mongodb'\nimport {\n type Payload, type Schema, type Sequence, SequenceConstants,\n type WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'\nimport { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'\nimport type { MongoError } from 'mongodb'\n\nconst MongoDBArchivistBaseV2 = MongoDBModuleMixinV2(AbstractArchivist)\n\nconst MONGODB_DUPLICATE_KEY_ERROR = 11_000\n\nexport class MongoDBArchivistV2 extends MongoDBArchivistBaseV2 {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MongoDBArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MongoDBArchivistConfigSchema\n\n override readonly queries: string[] = [ArchivistInsertQuerySchema, ArchivistNextQuerySchema, ...super.queries]\n\n /**\n * The amount of time to allow the aggregate query to execute\n */\n protected readonly aggregateTimeoutMs = 10_000\n\n protected async findOneByHash(hash: Hash) {\n const dataPayload = (await this.payloads.findOne({ _$hash: hash }))\n if (dataPayload) {\n return dataPayload\n } else {\n const payload = (await this.payloads.findOne({ _hash: hash }))\n if (payload) {\n return payload\n }\n }\n }\n\n protected async findOneBySequence(sequence: Sequence) {\n const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))\n if (dataPayload) {\n return dataPayload\n }\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n\n const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)\n const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))\n remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))\n\n const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)\n const payloadsHashes = new Set(payloads.map(payload => payload._hash))\n // eslint-disable-next-line sonarjs/no-dead-store\n remainingHashes = remainingHashes.filter(hash => !payloadsHashes.has(hash))\n\n const foundPayloads = [...dataPayloads, ...payloads] as PayloadWithMongoMeta<Payload>[]\n const result = foundPayloads.map(fromDbRepresentation)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n const payloadsWithExternalMeta = payloads.map(value => toDbRepresentation(value))\n if (payloadsWithExternalMeta.length > 0) {\n try {\n const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta, { ordered: false })\n if (!payloadsResult.acknowledged) throw new Error('MongoDBArchivist: Error inserting Payloads')\n } catch (error) {\n const mongoError = error as MongoError\n // NOTE: Intentional coercive equality since Mongo error codes are\n // of type string | number\n if (mongoError?.code != MONGODB_DUPLICATE_KEY_ERROR) throw error\n }\n }\n return [...payloadsWithExternalMeta].map(fromDbRepresentation)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n // Sanitize inputs and set defaults\n let {\n limit, cursor, order, open = true,\n } = options ?? { limit: 10, order: 'desc' }\n\n if (!limit) limit = 10\n if (limit > 100) limit = 100\n\n if (order != 'asc') order = 'desc'\n\n let sequence: Sequence | undefined\n if (cursor) {\n const payload = await this.findOneBySequence(cursor)\n // TODO: Should we throw an error if the requested payload is not found?\n if (payload) sequence = payload._sequence\n } else {\n sequence = order === 'asc'\n // If ascending, start from the beginning of time\n ? SequenceConstants.minLocalSequence\n // If descending, start from now (plus a bit more in the future to ensure\n // them most recent ObjectIds are included)\n : SequenceConstants.maxLocalSequence\n }\n if (!sequence) return []\n\n // Create find criteria\n const sort = order === 'asc' ? 1 : -1\n\n const match = order === 'asc'\n ? (open\n ? { _sequence: { $gt: sequence } }\n : { _sequence: { $gte: sequence } })\n : (open\n ? { _sequence: { $lt: sequence } }\n : { _sequence: { $lte: sequence } })\n\n // Run the aggregate query\n const foundPayloads = await this.payloads.useCollection((collection) => {\n return collection\n .aggregate<PayloadWithMongoMeta>([\n // Pre-filter payloads collection\n { $match: match },\n // Sort payloads by _sequence\n { $sort: { _sequence: sort } },\n // Limit payloads to the first N payloads\n { $limit: limit },\n ])\n .maxTimeMS(this.aggregateTimeoutMs)\n .toArray()\n })\n\n // Convert from DB representation to Payloads\n return foundPayloads.map(fromDbRepresentation)\n }\n\n protected override async startHandler() {\n await super.startHandler()\n await this.ensureCollection()\n }\n}\n","export * from './Archivist.js'\nexport * from './ArchivistV2.ts'\nexport * from '@xyo-network/archivist-model-mongodb'\n"],"mappings":"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","names":["exists","AbstractArchivist","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","MongoDBArchivistConfigSchema","fromDbRepresentation","toDbRepresentation"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Archivist.d.ts","sourceRoot":"","sources":["../../src/Archivist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAC3C,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAMxE,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;sRAwBf,CAAC,6DAEmB,CAAC;4RAa1B,CAAA,6DAI8B,CAAC;;;;;;;;;;;;;;;4BA3C6B,CAAA;AAElE,qBAAa,gBAAiB,SAAQ,oBAAoB;IACxD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAyD;IACzG,gBAAyB,mBAAmB,EAAE,MAAM,CAA+B;IAEnF,SAAkB,OAAO,EAAE,MAAM,EAAE,CAA2E;IAE9G;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,SAAS;cAE9B,aAAa,CAAC,IAAI,EAAE,IAAI;cAoBxB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;cAU3B,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cA0B/D,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAmBxF,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAkEhF,YAAY;CAItC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArchivistV2.d.ts","sourceRoot":"","sources":["../../src/ArchivistV2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,OAAO,EACL,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EACxC,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;sRAkBrB,CAAC,6DAEuB,CAAC;4RAe5B,CAAH,6DAEsB,CAAC;;;;;;;;;;;;;;;4BArC8C,CAAA;AAItE,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAyD;IACzG,gBAAyB,mBAAmB,EAAE,MAAM,CAA+B;IAEnF,SAAkB,OAAO,EAAE,MAAM,EAAE,CAA2E;IAE9G;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,SAAS;cAE9B,aAAa,CAAC,IAAI,EAAE,IAAI;cAYxB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;cAO3B,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAiB/D,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAgBxF,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAwDhF,YAAY;CAItC"}
File without changes
File without changes
File without changes
File without changes
File without changes