@xyo-network/archivist-abstract 3.5.1 → 3.6.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,8 @@ import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-
6
6
  import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper';
7
7
  import { AbstractModuleInstance } from '@xyo-network/module-abstract';
8
8
  import type { ModuleConfig, ModuleQueryHandlerResult, ModuleQueryResult } from '@xyo-network/module-model';
9
- import type { Payload, PayloadWithMeta, Schema, WithMeta } from '@xyo-network/payload-model';
9
+ import type { Payload, Schema } from '@xyo-network/payload-model';
10
+ import type { WithStorageMeta } from './StorageMeta.ts';
10
11
  export interface ActionConfig {
11
12
  emitEvents?: boolean;
12
13
  }
@@ -27,41 +28,48 @@ export declare abstract class AbstractArchivist<TParams extends ArchivistParams
27
28
  get queries(): string[];
28
29
  get requireAllParents(): boolean;
29
30
  protected get storeParentReads(): boolean;
30
- all(): PromisableArray<WithMeta<Payload>>;
31
+ static addSequencedStorageMeta<T extends Payload = Payload>(payload: T, sequence: bigint): Promise<WithStorageMeta<T>>;
32
+ static addSequencedStorageMeta<T extends Payload = Payload>(payload: T, index: number): Promise<WithStorageMeta<T>>;
33
+ static addStorageMeta<T extends Payload>(payloads: T[]): Promise<WithStorageMeta<T>[]>;
34
+ static removeStorageMeta<T extends Payload = Payload>(payloads: T[]): WithStorageMeta<T>[];
35
+ static removeStorageMeta<T extends Payload = Payload>(payload?: T): WithStorageMeta<T>;
36
+ static sequenceNumber(index: number): bigint;
37
+ static sortByStorageMeta<T extends Payload>(payloads: WithStorageMeta<T>[], direction?: -1 | 1): WithStorageMeta<T>[];
38
+ all(): PromisableArray<Payload>;
31
39
  allQuery(account: AccountInstance): Promise<ModuleQueryResult>;
32
40
  clear(): Promisable<void>;
33
41
  clearQuery(account: AccountInstance): Promise<ModuleQueryResult>;
34
- commit(): Promisable<WithMeta<BoundWitness>[]>;
42
+ commit(): Promisable<BoundWitness[]>;
35
43
  commitQuery(account: AccountInstance): Promise<ModuleQueryResult>;
36
44
  delete(hashes: Hash[]): Promise<Hash[]>;
37
45
  deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult>;
38
- get(hashes: Hash[]): Promise<WithMeta<Payload>[]>;
46
+ get(hashes: Hash[]): Promise<Payload[]>;
39
47
  getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult>;
40
- insert(payloads: Payload[]): Promise<WithMeta<Payload>[]>;
48
+ insert(payloads: Payload[]): Promise<Payload[]>;
41
49
  insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult>;
42
- next(options?: ArchivistNextOptions): Promise<WithMeta<Payload>[]>;
50
+ next(options?: ArchivistNextOptions): Promise<Payload[]>;
43
51
  nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult>;
44
52
  protected allHandler(): PromisableArray<Payload>;
45
53
  protected clearHandler(): Promisable<void>;
46
- protected commitHandler(): Promisable<WithMeta<BoundWitness>[]>;
54
+ protected commitHandler(): Promisable<BoundWitness[]>;
47
55
  protected deleteHandler(_hashes: Hash[]): PromisableArray<Hash>;
48
56
  protected deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<Hash[]>;
49
- protected getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]>;
50
- protected getFromParents(hashes: Hash[]): Promise<[WithMeta<Payload>[], Hash[]]>;
57
+ protected getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[Payload[], Hash[]]>;
58
+ protected getFromParents(hashes: Hash[]): Promise<[Payload[], Hash[]]>;
51
59
  protected getHandler(_hashes: Hash[]): Promisable<Payload[]>;
52
- protected getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithMeta<Payload>[]>;
60
+ protected getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<Payload[]>;
53
61
  protected head(): Promisable<Payload | undefined>;
54
- protected insertHandler(_payloads: WithMeta<Payload>[]): Promise<WithMeta<Payload>[]>;
55
- protected insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]): Promise<WithMeta<{
62
+ protected insertHandler(_payloads: Payload[]): Promise<Payload[]>;
63
+ protected insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]): Promise<({
56
64
  schema: string;
57
- } & import("@xyo-network/payload-model").PayloadFields>[]>;
58
- protected insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithMeta<Payload>[]>;
59
- protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithMeta<Payload>[]>;
60
- protected nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithMeta<Payload>[]>;
65
+ } & import("@xyo-network/payload-model").PayloadFields)[]>;
66
+ protected insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]>;
67
+ protected nextHandler(_options?: ArchivistNextOptions): Promisable<Payload[]>;
68
+ protected nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<Payload[]>;
61
69
  protected parentArchivists(): Promise<ArchivistParentInstances>;
62
70
  protected queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(query: T, payloads: Payload[], queryConfig?: TConfig): Promise<ModuleQueryHandlerResult>;
63
- protected writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<PayloadWithMeta[]>;
64
- protected writeToParents(payloads: Payload[]): Promise<PayloadWithMeta[]>;
71
+ protected writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]>;
72
+ protected writeToParents(payloads: Payload[]): Promise<Payload[]>;
65
73
  private resolveArchivists;
66
74
  }
67
75
  //# sourceMappingURL=AbstractArchivist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractArchivist.d.ts","sourceRoot":"","sources":["../../src/AbstractArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAOV,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAEpB,eAAe,EAEf,2BAA2B,EAC5B,MAAM,8BAA8B,CAAA;AAarC,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EACV,YAAY,EAAgC,wBAAwB,EAAE,iBAAiB,EACxF,MAAM,2BAA2B,CAAA;AAGlC,OAAO,KAAK,EACV,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAC3C,MAAM,4BAA4B,CAAA;AAInC,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAC1C;AAED,8BAAsB,iBAAiB,CACrC,OAAO,SAAS,eAAe,GAAG,eAAe,EACjD,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAEtE,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,2BAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;IACpE,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAkD;IAClG,gBAAyB,mBAAmB,EAAE,MAAM,CAAwB;IAC5E,gBAAyB,UAAU,SAAgE;IACnG,OAAO,CAAC,oBAAoB,CAAqB;IACjD,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IAEpD,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,iBAAiB,YAEpB;IAED,SAAS,KAAK,gBAAgB,YAE7B;IAED,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAQnC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKpE,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC;IAQnB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKtE,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;IAQxC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKjE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQvC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKlF,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IAQjD,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAK/E,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IASzD,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKvF,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IAQlE,SAAS,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKtG,SAAS,CAAC,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;IAIhD,SAAS,CAAC,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC;IAI1C,SAAS,CAAC,aAAa,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;IAI/D,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC;cAI/C,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYxE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;cAiBnG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAgBtF,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI5C,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IAkDnG,SAAS,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAIjD,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;cAIrE,kBAAkB,CAAC,CAAC,SAAS,wBAAwB,GAAG,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;;;cAiBhH,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IAiB1G,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;cAIvE,cAAc,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;cAKpG,gBAAgB;cASP,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;cAuDpB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;cAIzF,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAWjE,iBAAiB;CAuBhC"}
1
+ {"version":3,"file":"AbstractArchivist.d.ts","sourceRoot":"","sources":["../../src/AbstractArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAOV,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAEpB,eAAe,EAEf,2BAA2B,EAC5B,MAAM,8BAA8B,CAAA;AAarC,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EACV,YAAY,EAAgC,wBAAwB,EAAE,iBAAiB,EACxF,MAAM,2BAA2B,CAAA;AAGlC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAUvD,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAC1C;AAED,8BAAsB,iBAAiB,CACrC,OAAO,SAAS,eAAe,GAAG,eAAe,EACjD,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAEtE,SAAQ,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAClD,YAAW,2BAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;IACpE,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAkD;IAClG,gBAAyB,mBAAmB,EAAE,MAAM,CAAwB;IAC5E,gBAAyB,UAAU,SAAgE;IACnG,OAAO,CAAC,oBAAoB,CAAqB;IACjD,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IAEpD,IAAa,OAAO,IAAI,MAAM,EAAE,CAE/B;IAED,IAAI,iBAAiB,YAEpB;IAED,SAAS,KAAK,gBAAgB,YAE7B;WAEY,uBAAuB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;WAC/G,uBAAuB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;WAY5G,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAI5F,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE;IAC1F,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAQtF,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM;IAKnC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,GAAE,CAAC,CAAC,GAAG,CAAK;IASjG,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC;IAQzB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKpE,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC;IAQnB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKtE,MAAM,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;IAQ9B,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKjE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQvC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKlF,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQvC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAK/E,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQ/C,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKvF,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQxD,SAAS,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKtG,SAAS,CAAC,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;IAIhD,SAAS,CAAC,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC;IAI1C,SAAS,CAAC,aAAa,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;IAIrD,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC;cAI/C,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYxE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;cAiBzF,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAgB5E,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI5C,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAkDzF,SAAS,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAIjD,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAIjD,kBAAkB,CAAC,CAAC,SAAS,wBAAwB,GAAG,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE;;;cAiBhH,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAgBhG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI7D,cAAc,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAK1F,gBAAgB;cASP,YAAY,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EAChI,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,wBAAwB,CAAC;cA0DpB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAIjF,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAWzD,iBAAiB;CAuBhC"}
@@ -1,16 +1,12 @@
1
- import type { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
1
+ import type { Hash } from '@xylabs/hex';
2
+ import type { Payload } from '@xyo-network/payload-model';
2
3
  export interface StorageMeta {
3
- _sequence: bigint;
4
+ _dataHash: Hash;
5
+ _hash: Hash;
6
+ _sequence: string;
4
7
  }
5
- export type WithOptionalStorageMeta<T extends Payload> = T & Partial<StorageMeta>;
6
- export type WithStorageMeta<T extends Payload> = T & StorageMeta;
7
- export declare const maxSequenceIndex = 10000000000n;
8
- export declare const sequenceNumber: (index: number) => bigint;
9
- export declare const addStorageMeta: <T extends PayloadWithMeta>(payload: T, index?: number) => T & {
10
- _sequence: bigint;
11
- };
12
- export declare const sortByStorageMeta: <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[], direction?: -1 | 1) => WithStorageMeta<T>[];
13
- export declare function removeStorageMeta<T extends Payload>(payload: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T>;
14
- export declare function removeStorageMeta<T extends Payload>(payloads: WithOptionalStorageMeta<WithMeta<T>>[]): WithMeta<T>[];
15
- export declare function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T> | undefined;
8
+ export type WithPartialStorageMeta<T extends Payload = Payload> = Partial<WithStorageMeta<T>>;
9
+ export type WithStorageMeta<T extends Payload = Payload> = T & StorageMeta;
10
+ export declare const maxSequenceIndex = 4294967295n;
11
+ export declare const maxSequenceStringCharacters = 40;
16
12
  //# sourceMappingURL=StorageMeta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageMeta.d.ts","sourceRoot":"","sources":["../../src/StorageMeta.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EAAE,eAAe,EAAE,QAAQ,EACnC,MAAM,4BAA4B,CAAA;AAEnC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AAEjF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG,WAAW,CAAA;AAEhE,eAAO,MAAM,gBAAgB,eAAkB,CAAA;AAE/C,eAAO,MAAM,cAAc,UAAW,MAAM,WAG3C,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,eAAe,WAAW,CAAC;;CAEnE,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,eAAe,YAAY,eAAe,CAAC,CAAC,CAAC,EAAE,cAAa,CAAC,CAAC,GAAG,CAAC,yBAO7G,CAAA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAChH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;AACrH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,CAAC,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA"}
1
+ {"version":3,"file":"StorageMeta.d.ts","sourceRoot":"","sources":["../../src/StorageMeta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,IAAI,CAAA;IACf,KAAK,EAAE,IAAI,CAAA;IAEX,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;AAE7F,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,GAAG,WAAW,CAAA;AAG1E,eAAO,MAAM,gBAAgB,cAAiB,CAAA;AAG9C,eAAO,MAAM,2BAA2B,KAAK,CAAA"}
@@ -4,14 +4,25 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/AbstractArchivist.ts
5
5
  import { assertEx } from "@xylabs/assert";
6
6
  import { exists } from "@xylabs/exists";
7
- import { globallyUnique } from "@xylabs/object";
7
+ import { globallyUnique, omitBy } from "@xylabs/object";
8
8
  import { difference } from "@xylabs/set";
9
9
  import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistGetQuerySchema, ArchivistInsertQuerySchema, ArchivistNextQuerySchema, asArchivistInstance, isArchivistInstance } from "@xyo-network/archivist-model";
10
10
  import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
11
11
  import { AbstractModuleInstance } from "@xyo-network/module-abstract";
12
12
  import { duplicateModules } from "@xyo-network/module-model";
13
13
  import { PayloadBuilder } from "@xyo-network/payload-builder";
14
+
15
+ // src/StorageMeta.ts
16
+ var maxSequenceIndex = 4294967295n;
17
+ var maxSequenceStringCharacters = 40;
18
+
19
+ // src/AbstractArchivist.ts
14
20
  var NOT_IMPLEMENTED = "Not implemented";
21
+ function bigintToZeroPaddedString(value, totalLength) {
22
+ const stringValue = value.toString();
23
+ return stringValue.padStart(totalLength, "0");
24
+ }
25
+ __name(bigintToZeroPaddedString, "bigintToZeroPaddedString");
15
26
  var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance {
16
27
  static {
17
28
  __name(this, "AbstractArchivist");
@@ -36,11 +47,37 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
36
47
  get storeParentReads() {
37
48
  return !!this.config?.storeParentReads;
38
49
  }
50
+ static async addSequencedStorageMeta(payload, indexOrSequence) {
51
+ const sequence = typeof indexOrSequence === "number" ? this.sequenceNumber(indexOrSequence) : indexOrSequence;
52
+ const sequenceString = bigintToZeroPaddedString(sequence, maxSequenceStringCharacters);
53
+ return {
54
+ ...payload,
55
+ _sequence: sequenceString,
56
+ _dataHash: await PayloadBuilder.dataHash(payload),
57
+ _hash: await PayloadBuilder.hash(payload)
58
+ };
59
+ }
60
+ static async addStorageMeta(payloads) {
61
+ return await Promise.all(payloads.map((p, index) => this.addSequencedStorageMeta(p, index)));
62
+ }
63
+ static removeStorageMeta(payload) {
64
+ if (Array.isArray(payload)) {
65
+ return payload.map((p) => this.removeStorageMeta(p));
66
+ }
67
+ return payload ? omitBy(payload, (_, key) => key.startsWith("_")) : null;
68
+ }
69
+ static sequenceNumber(index) {
70
+ assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
71
+ return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
72
+ }
73
+ static sortByStorageMeta(payloads, direction = 1) {
74
+ return payloads.sort((a, b) => a._sequence < b._sequence ? -direction : a._sequence > b._sequence ? direction : 0);
75
+ }
39
76
  all() {
40
77
  this._noOverride("all");
41
78
  return this.busy(async () => {
42
79
  await this.started("throw");
43
- return await PayloadBuilder.build(await this.allHandler());
80
+ return await this.allHandler();
44
81
  });
45
82
  }
46
83
  async allQuery(account) {
@@ -93,7 +130,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
93
130
  this._noOverride("get");
94
131
  return await this.busy(async () => {
95
132
  await this.started("throw");
96
- return await PayloadBuilder.build(await this.getWithConfig(hashes));
133
+ return await this.getWithConfig(hashes);
97
134
  });
98
135
  }
99
136
  async getQuery(hashes, account) {
@@ -221,10 +258,10 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
221
258
  if (this.storeParentReads) {
222
259
  await this.insertWithConfig(parentFoundPayloads);
223
260
  }
224
- return await PayloadBuilder.build([
261
+ return [
225
262
  ...foundPayloads,
226
263
  ...parentFoundPayloads
227
- ]);
264
+ ];
228
265
  }
229
266
  head() {
230
267
  return this._lastInsertedPayload;
@@ -245,11 +282,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
245
282
  async insertWithConfig(payloads, config) {
246
283
  const emitEvents = config?.emitEvents ?? true;
247
284
  const writeToParents = config?.writeToParents ?? true;
248
- const payloadsWithMeta = await PayloadBuilder.build(payloads, {
249
- stamp: false,
250
- validate: true
251
- });
252
- const insertedPayloads = await this.insertHandler(payloadsWithMeta);
285
+ const insertedPayloads = await this.insertHandler(payloads);
253
286
  if (writeToParents) {
254
287
  await this.writeToParents(insertedPayloads);
255
288
  }
@@ -266,7 +299,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
266
299
  }
267
300
  async nextWithConfig(options, _config) {
268
301
  const foundPayloads = await this.nextHandler(options);
269
- return await PayloadBuilder.build(foundPayloads);
302
+ return foundPayloads;
270
303
  }
271
304
  async parentArchivists() {
272
305
  this._parentArchivists = this._parentArchivists ?? {
@@ -278,10 +311,6 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
278
311
  }
279
312
  async queryHandler(query, payloads, queryConfig) {
280
313
  const wrappedQuery = await QueryBoundWitnessWrapper.parseQuery(query, payloads);
281
- const builtQuery = await PayloadBuilder.build(query, {
282
- stamp: false,
283
- validate: true
284
- });
285
314
  const queryPayload = await wrappedQuery.getQuery();
286
315
  assertEx(await this.queryable(query, payloads, queryConfig));
287
316
  const resultPayloads = [];
@@ -321,11 +350,15 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
321
350
  resultPayloads.push(...await this.insertQueryHandler(wrappedQuery, payloads));
322
351
  break;
323
352
  }
353
+ case ArchivistNextQuerySchema: {
354
+ resultPayloads.push(...await this.nextHandler(queryPayload));
355
+ break;
356
+ }
324
357
  default: {
325
358
  const result = await super.queryHandler(query, payloads);
326
359
  if (this.config.storeQueries) {
327
360
  await this.insertHandler([
328
- builtQuery
361
+ query
329
362
  ]);
330
363
  }
331
364
  return result;
@@ -333,7 +366,7 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
333
366
  }
334
367
  if (this.config.storeQueries) {
335
368
  await this.insertHandler([
336
- builtQuery
369
+ query
337
370
  ]);
338
371
  }
339
372
  return resultPayloads;
@@ -368,39 +401,9 @@ var AbstractArchivist = class _AbstractArchivist extends AbstractModuleInstance
368
401
  }, {});
369
402
  }
370
403
  };
371
-
372
- // src/StorageMeta.ts
373
- import { assertEx as assertEx2 } from "@xylabs/assert";
374
- var maxSequenceIndex = 10000000000n;
375
- var sequenceNumber = /* @__PURE__ */ __name((index) => {
376
- assertEx2(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
377
- return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
378
- }, "sequenceNumber");
379
- var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
380
- return {
381
- ...payload,
382
- _sequence: sequenceNumber(index)
383
- };
384
- }, "addStorageMeta");
385
- var sortByStorageMeta = /* @__PURE__ */ __name((payloads, direction = 1) => {
386
- return payloads.sort((a, b) => a._sequence < b._sequence ? -direction : a._sequence > b._sequence ? direction : 0);
387
- }, "sortByStorageMeta");
388
- function removeStorageMeta(payload) {
389
- if (!payload) return;
390
- if (Array.isArray(payload)) {
391
- return payload.map((p) => removeStorageMeta(p));
392
- }
393
- const { ...noMeta } = payload;
394
- delete noMeta._sequence;
395
- return noMeta;
396
- }
397
- __name(removeStorageMeta, "removeStorageMeta");
398
404
  export {
399
405
  AbstractArchivist,
400
- addStorageMeta,
401
406
  maxSequenceIndex,
402
- removeStorageMeta,
403
- sequenceNumber,
404
- sortByStorageMeta
407
+ maxSequenceStringCharacters
405
408
  };
406
409
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { globallyUnique } from '@xylabs/object'\nimport type { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n ArchivistAllQuery,\n ArchivistClearQuery,\n ArchivistCommitQuery,\n ArchivistDeleteQuery,\n ArchivistGetQuery,\n ArchivistInsertQuery,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistParams,\n ArchivistQueries,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { duplicateModules } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, PayloadWithMeta, Schema, WithMeta,\n} from '@xyo-network/payload-model'\n\nconst NOT_IMPLEMENTED = 'Not implemented' as const\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, ArchivistInstance>\n}\n\nexport abstract class AbstractArchivist<\n TParams extends ArchivistParams = ArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableArchivistInstance<TParams, TEventData, Payload> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = ArchivistConfigSchema\n static override readonly uniqueName = globallyUnique('AbstractArchivist', AbstractArchivist, 'xyo')\n private _lastInsertedPayload: Payload | undefined\n private _parentArchivists?: ArchivistParentInstances\n\n override get queries(): string[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents() {\n return this.config.requireAllParents ?? false\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n all(): PromisableArray<WithMeta<Payload>> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await PayloadBuilder.build(await this.allHandler())\n })\n }\n\n async allQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistAllQuery = { schema: ArchivistAllQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n clear(): Promisable<void> {\n this._noOverride('clear')\n return this.busy(async () => {\n await this.started('throw')\n return await this.clearHandler()\n })\n }\n\n async clearQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistClearQuery = { schema: ArchivistClearQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n commit(): Promisable<WithMeta<BoundWitness>[]> {\n this._noOverride('commit')\n return this.busy(async () => {\n await this.started('throw')\n return await this.commitHandler()\n })\n }\n\n async commitQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistCommitQuery = { schema: ArchivistCommitQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async delete(hashes: Hash[]): Promise<Hash[]> {\n this._noOverride('delete')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.deleteWithConfig(hashes)\n })\n }\n\n async deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistDeleteQuery = { hashes, schema: ArchivistDeleteQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async get(hashes: Hash[]): Promise<WithMeta<Payload>[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await PayloadBuilder.build(await this.getWithConfig(hashes))\n })\n }\n\n async getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistGetQuery = { hashes, schema: ArchivistGetQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async insert(payloads: Payload[]): Promise<WithMeta<Payload>[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n // make sure all incoming payloads have proper $hash and $meta\n return await this.insertWithConfig(payloads)\n })\n }\n\n async insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n return await this.sendQueryRaw(queryPayload, payloads, account)\n }\n\n async next(options?: ArchivistNextOptions): Promise<WithMeta<Payload>[]> {\n this._noOverride('next')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.nextWithConfig(options)\n })\n }\n\n async nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistNextQuery = { schema: ArchivistNextQuerySchema, ...options }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n protected allHandler(): PromisableArray<Payload> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected clearHandler(): Promisable<void> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected commitHandler(): Promisable<WithMeta<BoundWitness>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected deleteHandler(_hashes: Hash[]): PromisableArray<Hash> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<Hash[]> {\n const emitEvents = config?.emitEvents ?? true\n\n const deletedHashes = await this.deleteHandler(hashes)\n\n if (emitEvents) {\n await this.emit('deleted', { hashes: deletedHashes, mod: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).filter(([, hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n // throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n const foundPayloads = foundPairs.map(([payload]) => payload)\n\n const notfound = hashes.filter(hash => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[WithMeta<Payload>[], Hash[]]> {\n const parents = Object.values((await this.parentArchivists())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: WithMeta<Payload>[] = []\n\n // NOTE: intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex])\n result = [...result, ...found]\n remainingHashes = notfound\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: Hash[]): Promisable<Payload[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n // Filter out duplicates\n const requestedHashes = new Set(hashes)\n\n // Attempt to find the payloads in the store\n const gotten = await this.getHandler([...requestedHashes])\n\n // Do not just blindly return what the archivist told us but\n // ensure to only return requested payloads and keep track of\n // the ones it did not find so we can ask the parents.\n const foundPayloads: PayloadWithMeta[] = []\n const foundHashes = new Set<Hash>()\n\n // NOTE: We are iterating over the returned result from the archivist\n // (not the array of hashes passed in) to preserve the natural order of the\n // hashes as returned by the archivist as that should loosely\n // correspond to the order when iterated and the symmetry will\n // be helpful for debugging\n for (const payload of gotten) {\n // Compute the hashes for this payload\n const map = await PayloadBuilder.toAllHashMap([payload])\n for (const [key, payload] of Object.entries(map)) {\n let requestedPayloadFound = false\n const hash = key as Hash // NOTE: Required cast as Object.entries always returns string keys\n // If this hash was requested\n if (\n requestedHashes.has(hash) // Indicate that we found it (but do not insert it yet). Since\n // one payload could satisfy two requested hashes (vit its dataHash\n // & rootHash) we only want to insert that payload once but we want\n // to keep track of all the hashes it satisfies so we can ask th\n // parents for the ones we did not find\n && !foundHashes.has(hash)\n ) {\n requestedPayloadFound = true\n // Add it to the list of found hashes\n foundHashes.add(hash)\n }\n if (requestedPayloadFound) foundPayloads.push(payload)\n }\n }\n // For all the hashes we did not find, ask the parents\n const notFoundHashes = [...difference(requestedHashes, foundHashes)]\n const [parentFoundPayloads] = await this.getFromParents(notFoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return await PayloadBuilder.build([...foundPayloads, ...parentFoundPayloads])\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: WithMeta<Payload>[]): Promise<WithMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]) {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByDataHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n // NOTE: There isn't an exact equivalence between what we get and what we store. Once\n // we move to returning only inserted Payloads(/hash) instead of a BoundWitness, we\n // can grab the actual last one\n this._lastInsertedPayload = resolvedPayloads.at(-1)\n return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const payloadsWithMeta = await PayloadBuilder.build(payloads, { stamp: false, validate: true })\n const insertedPayloads = await this.insertHandler(payloadsWithMeta)\n\n if (writeToParents) {\n await this.writeToParents(insertedPayloads)\n }\n if (emitEvents) {\n await this.emit('inserted', { mod: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithMeta<Payload>[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithMeta<Payload>[]> {\n const foundPayloads = await this.nextHandler(options)\n return await PayloadBuilder.build(foundPayloads)\n }\n\n protected async parentArchivists() {\n this._parentArchivists = this._parentArchivists ?? {\n commit: await this.resolveArchivists(this.config?.parents?.commit),\n read: await this.resolveArchivists(this.config?.parents?.read),\n write: await this.resolveArchivists(this.config?.parents?.write),\n }\n return assertEx(this._parentArchivists)\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrappedQuery = await QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(query, payloads)\n const builtQuery = await PayloadBuilder.build(query, { stamp: false, validate: true })\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearHandler()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const resultPayload: ArchivistDeleteQuery = {\n hashes: [...(await this.deleteWithConfig(queryPayload.hashes))],\n schema: ArchivistDeleteQuerySchema,\n }\n resultPayloads.push(resultPayload)\n break\n }\n case ArchivistGetQuerySchema: {\n if (queryPayload.hashes?.length) {\n resultPayloads.push(...(await this.getWithConfig(queryPayload.hashes)))\n } else {\n const head = await this.head()\n if (head) resultPayloads.push(head)\n }\n break\n }\n case ArchivistInsertQuerySchema: {\n resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, payloads)))\n break\n }\n default: {\n const result = await super.queryHandler(query, payloads)\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return result\n }\n }\n if (this.config.storeQueries) {\n await this.insertHandler([builtQuery])\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<PayloadWithMeta[]> {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const parents = await this.parentArchivists()\n return (\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n )\n ).filter(exists).flat()\n }\n\n private async resolveArchivists(archivists: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter(archivist =>\n archivistModules.map(mod => !(mod.address === archivist || mod.modName === archivist)))}]`,\n )\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, mod) => {\n prev[mod.address] = asArchivistInstance(mod, () => {\n isArchivistInstance(mod, { log: console })\n return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n Payload, PayloadWithMeta, WithMeta,\n} from '@xyo-network/payload-model'\n\nexport interface StorageMeta {\n _sequence: bigint\n}\n\nexport type WithOptionalStorageMeta<T extends Payload> = T & Partial<StorageMeta>\n\nexport type WithStorageMeta<T extends Payload> = T & StorageMeta\n\nexport const maxSequenceIndex = 10_000_000_000n\n\nexport const sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nexport const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) }\n}\n\nexport const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[], direction: -1 | 1 = 1) => {\n return payloads.sort((a, b) =>\n a._sequence < b._sequence\n ? -direction\n : a._sequence > b._sequence\n ? direction\n : 0)\n}\n\nexport function removeStorageMeta<T extends Payload>(payload: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T>\nexport function removeStorageMeta<T extends Payload>(payloads: WithOptionalStorageMeta<WithMeta<T>>[]): WithMeta<T>[]\nexport function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T> | undefined\nexport function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>) {\n if (!payload) return\n if (Array.isArray(payload)) {\n return payload.map(p => removeStorageMeta(p))\n }\n\n const { ...noMeta } = payload\n delete noMeta._sequence\n return noMeta\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,cAAc;AAEvB,SAASC,sBAAsB;AAE/B,SAASC,kBAAkB;AAiB3B,SACEC,yBACAC,2BACAC,4BACAC,uBACAC,4BACAC,yBACAC,4BACAC,0BACAC,qBACAC,2BACK;AAEP,SAASC,gCAAgC;AACzC,SAASC,8BAA8B;AAIvC,SAASC,wBAAwB;AACjC,SAASC,sBAAsB;AAK/B,IAAMC,kBAAkB;AAgBjB,IAAeC,oBAAf,MAAeA,2BAIZC,uBAAAA;EAlEV,OAkEUA;;;EAER,OAAyBC,gBAA0B;OAAI,MAAMA;IAAeC;;EAC5E,OAAyBC,sBAA8BD;EACvD,OAAyBE,aAAaC,eAAe,qBAAqBN,oBAAmB,KAAA;EACrFO;EACAC;EAER,IAAaC,UAAoB;AAC/B,WAAO;MAACC;SAA4B,MAAMD;;EAC5C;EAEA,IAAIE,oBAAoB;AACtB,WAAO,KAAKC,OAAOD,qBAAqB;EAC1C;EAEA,IAAcE,mBAAmB;AAC/B,WAAO,CAAC,CAAC,KAAKD,QAAQC;EACxB;EAEAC,MAA0C;AACxC,SAAKC,YAAY,KAAA;AACjB,WAAO,KAAKC,KAAK,YAAA;AACf,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAMC,eAAeC,MAAM,MAAM,KAAKC,WAAU,CAAA;IACzD,CAAA;EACF;EAEA,MAAMC,SAASC,SAAsD;AACnE,UAAMC,eAAkC;MAAEC,QAAQC;IAAwB;AAC1E,WAAO,MAAM,KAAKC,aAAaH,cAAcI,QAAWL,OAAAA;EAC1D;EAEAM,QAA0B;AACxB,SAAKb,YAAY,OAAA;AACjB,WAAO,KAAKC,KAAK,YAAA;AACf,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKY,aAAY;IAChC,CAAA;EACF;EAEA,MAAMC,WAAWR,SAAsD;AACrE,UAAMC,eAAoC;MAAEC,QAAQO;IAA0B;AAC9E,WAAO,MAAM,KAAKL,aAAaH,cAAcI,QAAWL,OAAAA;EAC1D;EAEAU,SAA+C;AAC7C,SAAKjB,YAAY,QAAA;AACjB,WAAO,KAAKC,KAAK,YAAA;AACf,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKgB,cAAa;IACjC,CAAA;EACF;EAEA,MAAMC,YAAYZ,SAAsD;AACtE,UAAMC,eAAqC;MAAEC,QAAQW;IAA2B;AAChF,WAAO,MAAM,KAAKT,aAAaH,cAAcI,QAAWL,OAAAA;EAC1D;EAEA,MAAMc,OAAOC,QAAiC;AAC5C,SAAKtB,YAAY,QAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKqB,iBAAiBD,MAAAA;IACrC,CAAA;EACF;EAEA,MAAME,YAAYF,QAAgBf,SAAuD;AACvF,UAAMC,eAAqC;MAAEc;MAAQb,QAAQgB;IAA2B;AACxF,WAAO,MAAM,KAAKd,aAAaH,cAAcI,QAAWL,OAAAA;EAC1D;EAEA,MAAMmB,IAAIJ,QAA8C;AACtD,SAAKtB,YAAY,KAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAMC,eAAeC,MAAM,MAAM,KAAKuB,cAAcL,MAAAA,CAAAA;IAC7D,CAAA;EACF;EAEA,MAAMM,SAASN,QAAgBf,SAAuD;AACpF,UAAMC,eAAkC;MAAEc;MAAQb,QAAQd;IAAwB;AAClF,WAAO,MAAM,KAAKgB,aAAaH,cAAcI,QAAWL,OAAAA;EAC1D;EAEA,MAAMsB,OAAOC,UAAmD;AAC9D,SAAK9B,YAAY,QAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AAEnB,aAAO,MAAM,KAAK6B,iBAAiBD,QAAAA;IACrC,CAAA;EACF;EAEA,MAAME,YAAYF,UAAqBvB,SAAuD;AAC5F,UAAMC,eAAqC;MAAEC,QAAQwB;IAA2B;AAChF,WAAO,MAAM,KAAKtB,aAAaH,cAAcsB,UAAUvB,OAAAA;EACzD;EAEA,MAAM2B,KAAKC,SAA8D;AACvE,SAAKnC,YAAY,MAAA;AACjB,WAAO,MAAM,KAAKC,KAAK,YAAA;AACrB,YAAM,KAAKC,QAAQ,OAAA;AACnB,aAAO,MAAM,KAAKkC,eAAeD,OAAAA;IACnC,CAAA;EACF;EAEA,MAAME,UAAUF,SAAgC5B,SAAuD;AACrG,UAAMC,eAAmC;MAAEC,QAAQ6B;MAA0B,GAAGH;IAAQ;AACxF,WAAO,MAAM,KAAKxB,aAAaH,cAAcI,QAAWL,OAAAA;EAC1D;EAEUF,aAAuC;AAC/C,UAAM,IAAIkC,MAAMvD,eAAAA;EAClB;EAEU8B,eAAiC;AACzC,UAAM,IAAIyB,MAAMvD,eAAAA;EAClB;EAEUkC,gBAAsD;AAC9D,UAAM,IAAIqB,MAAMvD,eAAAA;EAClB;EAEUwD,cAAcC,SAAwC;AAC9D,UAAM,IAAIF,MAAMvD,eAAAA;EAClB;EAEA,MAAgBuC,iBAAiBD,QAAgBzB,QAAwC;AACvF,UAAM6C,aAAa7C,QAAQ6C,cAAc;AAEzC,UAAMC,gBAAgB,MAAM,KAAKH,cAAclB,MAAAA;AAE/C,QAAIoB,YAAY;AACd,YAAM,KAAKE,KAAK,WAAW;QAAEtB,QAAQqB;QAAeE,KAAK;MAAK,CAAA;IAChE;AAEA,WAAOF;EACT;EAEA,MAAgBG,cAAcxB,QAAgByB,WAAsE;AAClH,UAAMC,cAAc,MAAM7C,eAAe8C,cAAc,MAAMF,UAAUrB,IAAIJ,MAAAA,CAAAA,GAAU4B,OAAO,CAAC,CAAA,EAAGC,IAAAA,MAAK;AACnG,YAAMC,WAAW9B,OAAO+B,SAASF,IAAAA;AACjC,UAAI,CAACC,UAAU;AACbE,gBAAQC,KAAK,oDAAoDJ,IAAAA,EAAM;MAEzE;AACA,aAAOC;IACT,CAAA;AAEA,UAAMI,cAAc,IAAIC,IAAIT,WAAWU,IAAI,CAAC,CAAA,EAAGP,IAAAA,MAAUA,IAAAA,CAAAA;AACzD,UAAMQ,gBAAgBX,WAAWU,IAAI,CAAC,CAACE,OAAAA,MAAaA,OAAAA;AAEpD,UAAMC,WAAWvC,OAAO4B,OAAOC,CAAAA,SAAQ,CAACK,YAAYM,IAAIX,IAAAA,CAAAA;AACxD,WAAO;MAACQ;MAAeE;;EACzB;EAEA,MAAgBE,eAAezC,QAAwD;AACrF,UAAM0C,UAAUC,OAAOC,QAAQ,MAAM,KAAKC,iBAAgB,IAAKC,QAAQ,CAAC,CAAA;AACxE,QAAIC,kBAAkB;SAAI/C;;AAC1B,QAAIgD,cAAc;AAClB,QAAIC,SAA8B,CAAA;AAGlC,WAAOD,cAAcN,QAAQQ,UAAUH,gBAAgBG,SAAS,GAAG;AACjE,YAAM,CAACC,OAAOZ,QAAAA,IAAY,MAAM,KAAKf,cAAcuB,iBAAiBL,QAAQM,WAAAA,CAAY;AACxFC,eAAS;WAAIA;WAAWE;;AACxBJ,wBAAkBR;AAClBS;IACF;AACA,WAAO;MAACC;MAAQF;;EAClB;EAEUK,WAAWjC,SAAwC;AAC3D,UAAM,IAAIF,MAAMvD,eAAAA;EAClB;EAEA,MAAgB2C,cAAcL,QAAgBqD,SAAsD;AAElG,UAAMC,kBAAkB,IAAInB,IAAInC,MAAAA;AAGhC,UAAMuD,SAAS,MAAM,KAAKH,WAAW;SAAIE;KAAgB;AAKzD,UAAMjB,gBAAmC,CAAA;AACzC,UAAMH,cAAc,oBAAIC,IAAAA;AAOxB,eAAWG,WAAWiB,QAAQ;AAE5B,YAAMnB,MAAM,MAAMvD,eAAe2E,aAAa;QAAClB;OAAQ;AACvD,iBAAW,CAACmB,KAAKnB,QAAAA,KAAYK,OAAOe,QAAQtB,GAAAA,GAAM;AAChD,YAAIuB,wBAAwB;AAC5B,cAAM9B,OAAO4B;AAEb,YACEH,gBAAgBd,IAAIX,IAAAA,KAKjB,CAACK,YAAYM,IAAIX,IAAAA,GACpB;AACA8B,kCAAwB;AAExBzB,sBAAY0B,IAAI/B,IAAAA;QAClB;AACA,YAAI8B,sBAAuBtB,eAAcwB,KAAKvB,QAAAA;MAChD;IACF;AAEA,UAAMwB,iBAAiB;SAAIC,WAAWT,iBAAiBpB,WAAAA;;AACvD,UAAM,CAAC8B,mBAAAA,IAAuB,MAAM,KAAKvB,eAAeqB,cAAAA;AAExD,QAAI,KAAKtF,kBAAkB;AACzB,YAAM,KAAKiC,iBAAiBuD,mBAAAA;IAC9B;AACA,WAAO,MAAMnF,eAAeC,MAAM;SAAIuD;SAAkB2B;KAAoB;EAC9E;EAEUC,OAAwC;AAChD,WAAO,KAAK/F;EACd;EAEUgG,cAAcC,WAA8D;AACpF,UAAM,IAAIlD,MAAMvD,eAAAA;EAClB;EAEA,MAAgB0G,mBAAkFC,OAAU7D,UAAsB;AAChI8D,aAAS9D,UAAU,MAAM,qBAAqB+D,KAAKC,UAAUH,MAAM/B,SAAS,MAAM,CAAA,CAAA,EAAI;AACtF,UAAMmC,mBAAmB,MAAM5F,eAAe6F,wBAAwBlE,UAAU6D,MAAMM,aAAa;AACnGL,aACEG,iBAAiBvB,WAAWmB,MAAMM,cAAczB,QAChD,MAAM,sCAAsCuB,iBAAiBvB,MAAM,OAAOmB,MAAMM,cAAczB,MAAM,GAAG;AAEzG,UAAMhE,eAAe,MAAMmF,MAAM/D,SAAQ;AACzC,UAAMsE,uBAAuB,MAAM/F,eAAegG,cAAcJ,kBAAkB,MAAM5F,eAAeiG,SAAS5F,YAAAA,CAAAA;AAChH,UAAM+D,SAAS,MAAM,KAAKxC,iBAAiBmE,oBAAAA;AAI3C,SAAK1G,uBAAuBuG,iBAAiBM,GAAG,EAAC;AACjD,WAAO9B;EACT;EAEA,MAAgBxC,iBAAiBD,UAAqBjC,QAAqD;AACzG,UAAM6C,aAAa7C,QAAQ6C,cAAc;AACzC,UAAM4D,iBAAiBzG,QAAQyG,kBAAkB;AAEjD,UAAMC,mBAAmB,MAAMpG,eAAeC,MAAM0B,UAAU;MAAE0E,OAAO;MAAOC,UAAU;IAAK,CAAA;AAC7F,UAAMC,mBAAmB,MAAM,KAAKlB,cAAce,gBAAAA;AAElD,QAAID,gBAAgB;AAClB,YAAM,KAAKA,eAAeI,gBAAAA;IAC5B;AACA,QAAIhE,YAAY;AACd,YAAM,KAAKE,KAAK,YAAY;QAAEC,KAAK;QAAMf,UAAU4E;MAAiB,CAAA;IACtE;AAEA,WAAOA;EACT;EAEUC,YAAYC,UAAkE;AACtF,UAAM,IAAIrE,MAAMvD,eAAAA;EAClB;EAEA,MAAgBoD,eAAeD,SAAgCwC,SAAsD;AACnH,UAAMhB,gBAAgB,MAAM,KAAKgD,YAAYxE,OAAAA;AAC7C,WAAO,MAAMhC,eAAeC,MAAMuD,aAAAA;EACpC;EAEA,MAAgBQ,mBAAmB;AACjC,SAAK1E,oBAAoB,KAAKA,qBAAqB;MACjDwB,QAAQ,MAAM,KAAK4F,kBAAkB,KAAKhH,QAAQmE,SAAS/C,MAAAA;MAC3DmD,MAAM,MAAM,KAAKyC,kBAAkB,KAAKhH,QAAQmE,SAASI,IAAAA;MACzD0C,OAAO,MAAM,KAAKD,kBAAkB,KAAKhH,QAAQmE,SAAS8C,KAAAA;IAC5D;AACA,WAAOlB,SAAS,KAAKnG,iBAAiB;EACxC;EAEA,MAAyBsH,aACvBpB,OACA7D,UACAkF,aACmC;AACnC,UAAMC,eAAe,MAAMC,yBAAyBC,WAA6BxB,OAAO7D,QAAAA;AACxF,UAAMsF,aAAa,MAAMjH,eAAeC,MAAMuF,OAAO;MAAEa,OAAO;MAAOC,UAAU;IAAK,CAAA;AACpF,UAAMjG,eAAe,MAAMyG,aAAarF,SAAQ;AAChDgE,aAAS,MAAM,KAAKyB,UAAU1B,OAAO7D,UAAUkF,WAAAA,CAAAA;AAC/C,UAAMM,iBAA4B,CAAA;AAElC,YAAQ9G,aAAaC,QAAM;MACzB,KAAKC,yBAAyB;AAC5B4G,uBAAenC,KAAI,GAAK,MAAM,KAAK9E,WAAU,CAAA;AAC7C;MACF;MACA,KAAKW,2BAA2B;AAC9B,cAAM,KAAKF,aAAY;AACvB;MACF;MACA,KAAKM,4BAA4B;AAC/BkG,uBAAenC,KAAI,GAAK,MAAM,KAAKjE,cAAa,CAAA;AAChD;MACF;MACA,KAAKO,4BAA4B;AAC/B,cAAM8F,gBAAsC;UAC1CjG,QAAQ;eAAK,MAAM,KAAKC,iBAAiBf,aAAac,MAAM;;UAC5Db,QAAQgB;QACV;AACA6F,uBAAenC,KAAKoC,aAAAA;AACpB;MACF;MACA,KAAK5H,yBAAyB;AAC5B,YAAIa,aAAac,QAAQkD,QAAQ;AAC/B8C,yBAAenC,KAAI,GAAK,MAAM,KAAKxD,cAAcnB,aAAac,MAAM,CAAA;QACtE,OAAO;AACL,gBAAMiE,OAAO,MAAM,KAAKA,KAAI;AAC5B,cAAIA,KAAM+B,gBAAenC,KAAKI,IAAAA;QAChC;AACA;MACF;MACA,KAAKtD,4BAA4B;AAC/BqF,uBAAenC,KAAI,GAAK,MAAM,KAAKO,mBAAmBuB,cAAcnF,QAAAA,CAAAA;AACpE;MACF;MACA,SAAS;AACP,cAAMyC,SAAS,MAAM,MAAMwC,aAAapB,OAAO7D,QAAAA;AAC/C,YAAI,KAAKjC,OAAO2H,cAAc;AAC5B,gBAAM,KAAKhC,cAAc;YAAC4B;WAAW;QACvC;AACA,eAAO7C;MACT;IACF;AACA,QAAI,KAAK1E,OAAO2H,cAAc;AAC5B,YAAM,KAAKhC,cAAc;QAAC4B;OAAW;IACvC;AACA,WAAOE;EACT;EAEA,MAAgBG,cAAcC,QAA2B5F,UAAiD;AACxG,WAAO,MAAM4F,OAAO7F,OAAOC,QAAAA;EAC7B;EAEA,MAAgBwE,eAAexE,UAAiD;AAC9E,UAAMkC,UAAU,MAAM,KAAKG,iBAAgB;AAC3C,YACE,MAAMwD,QAAQ5H,IACZkE,OAAOC,OAAOF,QAAQ8C,SAAS,CAAC,CAAA,EAAGpD,IAAI,OAAOgE,WAAAA;AAC5C,aAAOA,SAAS,MAAM,KAAKD,cAAcC,QAAQ5F,QAAAA,IAAYlB;IAC/D,CAAA,CAAA,GAEFsC,OAAO0E,MAAAA,EAAQC,KAAI;EACvB;EAEA,MAAchB,kBAAkBiB,aAAiC,CAAA,GAAI;AACnE,UAAMC,mBAAmB;SACnB,MAAM,KAAKC,QAAQ;QAAEC,SAASH;MAAwB,CAAA;SACtD,MAAM,KAAKE,QAAQ;QAAEE,MAAMJ;MAA2B,CAAA;MAC1D5E,OAAOiF,gBAAAA;AAETvC,aACE,CAAC,KAAKhG,qBAAqBmI,iBAAiBvD,WAAWsD,WAAWtD,QAClE,MACE,qEAAqEsD,WAAW5E,OAAOH,CAAAA,cACrFgF,iBAAiBrE,IAAIb,CAAAA,QAAO,EAAEA,IAAIoF,YAAYlF,aAAaF,IAAIuF,YAAYrF,UAAQ,CAAA,CAAA,GAAO;AAIhG,WAAOgF,iBAAiBM,OAA0C,CAACC,MAAMzF,QAAAA;AACvEyF,WAAKzF,IAAIoF,OAAO,IAAIM,oBAAoB1F,KAAK,MAAA;AAC3C2F,4BAAoB3F,KAAK;UAAE4F,KAAKnF;QAAQ,CAAA;AACxC,eAAO,oDAAoDT,IAAIoF,OAAO,KAAKpF,IAAIuF,OAAO,KAAKvF,IAAIhD,OAAOY,MAAM;MAC9G,CAAA;AAEA,aAAO6H;IACT,GAAG,CAAC,CAAA;EACN;AACF;;;AClcA,SAASI,YAAAA,iBAAgB;AAalB,IAAMC,mBAAmB;AAEzB,IAAMC,iBAAiB,wBAACC,UAAAA;AAC7BC,EAAAA,UAASD,QAAQF,kBAAkB,MAAM,gCAAgCA,gBAAAA,EAAkB;AAC3F,SAAOI,OAAOC,KAAKC,IAAG,CAAA,IAAMN,mBAAmBI,OAAOF,KAAAA;AACxD,GAH8B;AAKvB,IAAMK,iBAAiB,wBAA4BC,SAAYN,QAAQ,MAAC;AAC7E,SAAO;IAAE,GAAGM;IAASC,WAAWR,eAAeC,KAAAA;EAAO;AACxD,GAF8B;AAIvB,IAAMQ,oBAAoB,wBAA4BC,UAAgCC,YAAoB,MAAC;AAChH,SAAOD,SAASE,KAAK,CAACC,GAAGC,MACvBD,EAAEL,YAAYM,EAAEN,YACZ,CAACG,YACDE,EAAEL,YAAYM,EAAEN,YACdG,YACA,CAAA;AACV,GAPiC;AAY1B,SAASI,kBAAqCR,SAA8C;AACjG,MAAI,CAACA,QAAS;AACd,MAAIS,MAAMC,QAAQV,OAAAA,GAAU;AAC1B,WAAOA,QAAQW,IAAIC,CAAAA,MAAKJ,kBAAkBI,CAAAA,CAAAA;EAC5C;AAEA,QAAM,EAAE,GAAGC,OAAAA,IAAWb;AACtB,SAAOa,OAAOZ;AACd,SAAOY;AACT;AATgBL;","names":["assertEx","exists","globallyUnique","difference","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistGetQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","asArchivistInstance","isArchivistInstance","QueryBoundWitnessWrapper","AbstractModuleInstance","duplicateModules","PayloadBuilder","NOT_IMPLEMENTED","AbstractArchivist","AbstractModuleInstance","configSchemas","ArchivistConfigSchema","defaultConfigSchema","uniqueName","globallyUnique","_lastInsertedPayload","_parentArchivists","queries","ArchivistGetQuerySchema","requireAllParents","config","storeParentReads","all","_noOverride","busy","started","PayloadBuilder","build","allHandler","allQuery","account","queryPayload","schema","ArchivistAllQuerySchema","sendQueryRaw","undefined","clear","clearHandler","clearQuery","ArchivistClearQuerySchema","commit","commitHandler","commitQuery","ArchivistCommitQuerySchema","delete","hashes","deleteWithConfig","deleteQuery","ArchivistDeleteQuerySchema","get","getWithConfig","getQuery","insert","payloads","insertWithConfig","insertQuery","ArchivistInsertQuerySchema","next","options","nextWithConfig","nextQuery","ArchivistNextQuerySchema","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","mod","getFromParent","archivist","foundPairs","dataHashPairs","filter","hash","askedFor","includes","console","warn","foundHashes","Set","map","foundPayloads","payload","notfound","has","getFromParents","parents","Object","values","parentArchivists","read","remainingHashes","parentIndex","result","length","found","getHandler","_config","requestedHashes","gotten","toAllHashMap","key","entries","requestedPayloadFound","add","push","notFoundHashes","difference","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","assertEx","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","payloadsWithoutQuery","filterExclude","dataHash","at","writeToParents","payloadsWithMeta","stamp","validate","insertedPayloads","nextHandler","_options","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","builtQuery","queryable","resultPayloads","resultPayload","storeQueries","writeToParent","parent","Promise","exists","flat","archivists","archivistModules","resolve","address","name","duplicateModules","modName","reduce","prev","asArchivistInstance","isArchivistInstance","log","assertEx","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","direction","sort","a","b","removeStorageMeta","Array","isArray","map","p","noMeta"]}
1
+ {"version":3,"sources":["../../src/AbstractArchivist.ts","../../src/StorageMeta.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { globallyUnique, omitBy } from '@xylabs/object'\nimport type { Promisable, PromisableArray } from '@xylabs/promise'\nimport { difference } from '@xylabs/set'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n ArchivistAllQuery,\n ArchivistClearQuery,\n ArchivistCommitQuery,\n ArchivistDeleteQuery,\n ArchivistGetQuery,\n ArchivistInsertQuery,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuery,\n ArchivistParams,\n ArchivistQueries,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistGetQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n asArchivistInstance,\n isArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport type {\n ModuleConfig, ModuleIdentifier, ModuleName, ModuleQueryHandlerResult, ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { duplicateModules } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport type { WithStorageMeta } from './StorageMeta.ts'\nimport { maxSequenceIndex, maxSequenceStringCharacters } from './StorageMeta.ts'\n\nconst NOT_IMPLEMENTED = 'Not implemented' as const\n\nfunction bigintToZeroPaddedString(value: bigint, totalLength: number) {\n const stringValue = value.toString()\n return stringValue.padStart(totalLength, '0')\n}\n\nexport interface ActionConfig {\n emitEvents?: boolean\n}\n\nexport interface InsertConfig extends ActionConfig {\n writeToParents?: boolean\n}\n\nexport interface ArchivistParentInstances {\n commit?: Record<string, ArchivistInstance>\n read?: Record<string, ArchivistInstance>\n write?: Record<string, ArchivistInstance>\n}\n\nexport abstract class AbstractArchivist<\n TParams extends ArchivistParams = ArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends AbstractModuleInstance<TParams, TEventData>\n implements AttachableArchivistInstance<TParams, TEventData, Payload> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = ArchivistConfigSchema\n static override readonly uniqueName = globallyUnique('AbstractArchivist', AbstractArchivist, 'xyo')\n private _lastInsertedPayload: Payload | undefined\n private _parentArchivists?: ArchivistParentInstances\n\n override get queries(): string[] {\n return [ArchivistGetQuerySchema, ...super.queries]\n }\n\n get requireAllParents() {\n return this.config.requireAllParents ?? false\n }\n\n protected get storeParentReads() {\n return !!this.config?.storeParentReads\n }\n\n static async addSequencedStorageMeta<T extends Payload = Payload>(payload: T, sequence: bigint): Promise<WithStorageMeta<T>>\n static async addSequencedStorageMeta<T extends Payload = Payload>(payload: T, index: number): Promise<WithStorageMeta<T>>\n static async addSequencedStorageMeta<T extends Payload = Payload>(payload: T, indexOrSequence: number | bigint): Promise<WithStorageMeta<T>> {\n const sequence = typeof indexOrSequence === 'number' ? this.sequenceNumber(indexOrSequence) : indexOrSequence\n const sequenceString = bigintToZeroPaddedString(sequence, maxSequenceStringCharacters)\n return {\n ...payload,\n _sequence: sequenceString,\n _dataHash: await PayloadBuilder.dataHash(payload),\n _hash: await PayloadBuilder.hash(payload),\n }\n }\n\n static async addStorageMeta<T extends Payload>(payloads: T[]): Promise<WithStorageMeta<T>[]> {\n return (await Promise.all(payloads.map((p, index) => this.addSequencedStorageMeta(p, index)))) as WithStorageMeta<T>[]\n }\n\n static removeStorageMeta<T extends Payload = Payload>(payloads: T[]): WithStorageMeta<T>[]\n static removeStorageMeta<T extends Payload = Payload>(payload?: T): WithStorageMeta<T>\n static removeStorageMeta<T extends Payload = Payload>(payload?: T | T[]) {\n if (Array.isArray(payload)) {\n return payload.map(p => this.removeStorageMeta(p)) as WithStorageMeta<T>[]\n }\n return payload ? omitBy(payload, (_, key) => key.startsWith('_')) as WithStorageMeta<T> : null\n }\n\n static sequenceNumber(index: number) {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n }\n\n static sortByStorageMeta<T extends Payload>(payloads: WithStorageMeta<T>[], direction: -1 | 1 = 1) {\n return payloads.sort((a, b) =>\n a._sequence < b._sequence\n ? -direction\n : a._sequence > b._sequence\n ? direction\n : 0)\n }\n\n all(): PromisableArray<Payload> {\n this._noOverride('all')\n return this.busy(async () => {\n await this.started('throw')\n return await this.allHandler()\n })\n }\n\n async allQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistAllQuery = { schema: ArchivistAllQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n clear(): Promisable<void> {\n this._noOverride('clear')\n return this.busy(async () => {\n await this.started('throw')\n return await this.clearHandler()\n })\n }\n\n async clearQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistClearQuery = { schema: ArchivistClearQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n commit(): Promisable<BoundWitness[]> {\n this._noOverride('commit')\n return this.busy(async () => {\n await this.started('throw')\n return await this.commitHandler()\n })\n }\n\n async commitQuery(account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistCommitQuery = { schema: ArchivistCommitQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async delete(hashes: Hash[]): Promise<Hash[]> {\n this._noOverride('delete')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.deleteWithConfig(hashes)\n })\n }\n\n async deleteQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistDeleteQuery = { hashes, schema: ArchivistDeleteQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async get(hashes: Hash[]): Promise<Payload[]> {\n this._noOverride('get')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.getWithConfig(hashes)\n })\n }\n\n async getQuery(hashes: Hash[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistGetQuery = { hashes, schema: ArchivistGetQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async insert(payloads: Payload[]): Promise<Payload[]> {\n this._noOverride('insert')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.insertWithConfig(payloads)\n })\n }\n\n async insertQuery(payloads: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n return await this.sendQueryRaw(queryPayload, payloads, account)\n }\n\n async next(options?: ArchivistNextOptions): Promise<Payload[]> {\n this._noOverride('next')\n return await this.busy(async () => {\n await this.started('throw')\n return await this.nextWithConfig(options)\n })\n }\n\n async nextQuery(options?: ArchivistNextOptions, account?: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ArchivistNextQuery = { schema: ArchivistNextQuerySchema, ...options }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n protected allHandler(): PromisableArray<Payload> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected clearHandler(): Promisable<void> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected commitHandler(): Promisable<BoundWitness[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected deleteHandler(_hashes: Hash[]): PromisableArray<Hash> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async deleteWithConfig(hashes: Hash[], config?: ActionConfig): Promise<Hash[]> {\n const emitEvents = config?.emitEvents ?? true\n\n const deletedHashes = await this.deleteHandler(hashes)\n\n if (emitEvents) {\n await this.emit('deleted', { hashes: deletedHashes, mod: this })\n }\n\n return deletedHashes\n }\n\n protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[Payload[], Hash[]]> {\n const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).filter(([, hash]) => {\n const askedFor = hashes.includes(hash)\n if (!askedFor) {\n console.warn(`Parent returned payload with hash not asked for: ${hash}`)\n // throw Error(`Parent returned payload with hash not asked for: ${hash}`)\n }\n return askedFor\n })\n\n const foundHashes = new Set(foundPairs.map(([, hash]) => hash))\n const foundPayloads = foundPairs.map(([payload]) => payload)\n\n const notfound = hashes.filter(hash => !foundHashes.has(hash))\n return [foundPayloads, notfound]\n }\n\n protected async getFromParents(hashes: Hash[]): Promise<[Payload[], Hash[]]> {\n const parents = Object.values((await this.parentArchivists())?.read ?? {})\n let remainingHashes = [...hashes]\n let parentIndex = 0\n let result: Payload[] = []\n\n // NOTE: intentionally doing this serially\n while (parentIndex < parents.length && remainingHashes.length > 0) {\n const [found, notfound] = await this.getFromParent(remainingHashes, parents[parentIndex])\n result = [...result, ...found]\n remainingHashes = notfound\n parentIndex++\n }\n return [result, remainingHashes]\n }\n\n protected getHandler(_hashes: Hash[]): Promisable<Payload[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<Payload[]> {\n // Filter out duplicates\n const requestedHashes = new Set(hashes)\n\n // Attempt to find the payloads in the store\n const gotten = await this.getHandler([...requestedHashes])\n\n // Do not just blindly return what the archivist told us but\n // ensure to only return requested payloads and keep track of\n // the ones it did not find so we can ask the parents.\n const foundPayloads: Payload[] = []\n const foundHashes = new Set<Hash>()\n\n // NOTE: We are iterating over the returned result from the archivist\n // (not the array of hashes passed in) to preserve the natural order of the\n // hashes as returned by the archivist as that should loosely\n // correspond to the order when iterated and the symmetry will\n // be helpful for debugging\n for (const payload of gotten) {\n // Compute the hashes for this payload\n const map = await PayloadBuilder.toAllHashMap([payload])\n for (const [key, payload] of Object.entries(map)) {\n let requestedPayloadFound = false\n const hash = key as Hash // NOTE: Required cast as Object.entries always returns string keys\n // If this hash was requested\n if (\n requestedHashes.has(hash) // Indicate that we found it (but do not insert it yet). Since\n // one payload could satisfy two requested hashes (vit its dataHash\n // & rootHash) we only want to insert that payload once but we want\n // to keep track of all the hashes it satisfies so we can ask th\n // parents for the ones we did not find\n && !foundHashes.has(hash)\n ) {\n requestedPayloadFound = true\n // Add it to the list of found hashes\n foundHashes.add(hash)\n }\n if (requestedPayloadFound) foundPayloads.push(payload)\n }\n }\n // For all the hashes we did not find, ask the parents\n const notFoundHashes = [...difference(requestedHashes, foundHashes)]\n const [parentFoundPayloads] = await this.getFromParents(notFoundHashes)\n\n if (this.storeParentReads) {\n await this.insertWithConfig(parentFoundPayloads)\n }\n return [...foundPayloads, ...parentFoundPayloads]\n }\n\n protected head(): Promisable<Payload | undefined> {\n return this._lastInsertedPayload\n }\n\n protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async insertQueryHandler<T extends QueryBoundWitnessWrapper = QueryBoundWitnessWrapper>(query: T, payloads?: Payload[]) {\n assertEx(payloads, () => `Missing payloads: ${JSON.stringify(query.payload, null, 2)}`)\n const resolvedPayloads = await PayloadBuilder.filterIncludeByDataHash(payloads, query.payloadHashes)\n assertEx(\n resolvedPayloads.length === query.payloadHashes.length,\n () => `Could not find some passed hashes [${resolvedPayloads.length} != ${query.payloadHashes.length}]`,\n )\n const queryPayload = await query.getQuery()\n const payloadsWithoutQuery = await PayloadBuilder.filterExclude(resolvedPayloads, await PayloadBuilder.dataHash(queryPayload))\n const result = await this.insertWithConfig(payloadsWithoutQuery)\n // NOTE: There isn't an exact equivalence between what we get and what we store. Once\n // we move to returning only inserted Payloads(/hash) instead of a BoundWitness, we\n // can grab the actual last one\n this._lastInsertedPayload = resolvedPayloads.at(-1)\n return result\n }\n\n protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {\n const emitEvents = config?.emitEvents ?? true\n const writeToParents = config?.writeToParents ?? true\n\n const insertedPayloads = await this.insertHandler(payloads)\n\n if (writeToParents) {\n await this.writeToParents(insertedPayloads)\n }\n if (emitEvents) {\n await this.emit('inserted', { mod: this, payloads: insertedPayloads })\n }\n\n return insertedPayloads\n }\n\n protected nextHandler(_options?: ArchivistNextOptions): Promisable<Payload[]> {\n throw new Error(NOT_IMPLEMENTED)\n }\n\n protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<Payload[]> {\n const foundPayloads = await this.nextHandler(options)\n return foundPayloads\n }\n\n protected async parentArchivists() {\n this._parentArchivists = this._parentArchivists ?? {\n commit: await this.resolveArchivists(this.config?.parents?.commit),\n read: await this.resolveArchivists(this.config?.parents?.read),\n write: await this.resolveArchivists(this.config?.parents?.write),\n }\n return assertEx(this._parentArchivists)\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrappedQuery = await QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(query, payloads)\n const queryPayload = await wrappedQuery.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n\n switch (queryPayload.schema) {\n case ArchivistAllQuerySchema: {\n resultPayloads.push(...(await this.allHandler()))\n break\n }\n case ArchivistClearQuerySchema: {\n await this.clearHandler()\n break\n }\n case ArchivistCommitQuerySchema: {\n resultPayloads.push(...(await this.commitHandler()))\n break\n }\n case ArchivistDeleteQuerySchema: {\n const resultPayload: ArchivistDeleteQuery = {\n hashes: [...(await this.deleteWithConfig(queryPayload.hashes))],\n schema: ArchivistDeleteQuerySchema,\n }\n resultPayloads.push(resultPayload)\n break\n }\n case ArchivistGetQuerySchema: {\n if (queryPayload.hashes?.length) {\n resultPayloads.push(...(await this.getWithConfig(queryPayload.hashes)))\n } else {\n const head = await this.head()\n if (head) resultPayloads.push(head)\n }\n break\n }\n case ArchivistInsertQuerySchema: {\n resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, payloads)))\n break\n }\n case ArchivistNextQuerySchema: {\n resultPayloads.push(...(await this.nextHandler(queryPayload)))\n break\n }\n default: {\n const result = await super.queryHandler(query, payloads)\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n return result\n }\n }\n if (this.config.storeQueries) {\n await this.insertHandler([query])\n }\n return resultPayloads\n }\n\n protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {\n return await parent.insert(payloads)\n }\n\n protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {\n const parents = await this.parentArchivists()\n return (\n await Promise.all(\n Object.values(parents.write ?? {}).map(async (parent) => {\n return parent ? await this.writeToParent(parent, payloads) : undefined\n }),\n )\n ).filter(exists).flat()\n }\n\n private async resolveArchivists(archivists: ModuleIdentifier[] = []) {\n const archivistModules = [\n ...(await this.resolve({ address: archivists as Address[] })),\n ...(await this.resolve({ name: archivists as ModuleName[] })),\n ].filter(duplicateModules)\n\n assertEx(\n !this.requireAllParents || archivistModules.length === archivists.length,\n () =>\n `Failed to find some archivists (set allRequired to false if ok): [${archivists.filter(archivist =>\n archivistModules.map(mod => !(mod.address === archivist || mod.modName === archivist)))}]`,\n )\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return archivistModules.reduce<Record<string, ArchivistInstance>>((prev, mod) => {\n prev[mod.address] = asArchivistInstance(mod, () => {\n isArchivistInstance(mod, { log: console })\n return `Unable to cast resolved module to an archivist: [${mod.address}, ${mod.modName}, ${mod.config.schema})}]`\n })\n\n return prev\n }, {})\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport interface StorageMeta {\n _dataHash: Hash\n _hash: Hash\n // this sequence number must be a 0 padded string representation of a 128 bit sequence number\n _sequence: string\n}\n\nexport type WithPartialStorageMeta<T extends Payload = Payload> = Partial<WithStorageMeta<T>>\n\nexport type WithStorageMeta<T extends Payload = Payload> = T & StorageMeta\n\n// the max sequence index which allows for that number of items to be stored at one time stamp (32 bit max value)\nexport const maxSequenceIndex = 4_294_967_295n\n\n// the max number of characters in a sequence string which can accommodate a 128 bit unsigned number\nexport const maxSequenceStringCharacters = 40\n"],"mappings":"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","names":["assertEx","exists","globallyUnique","omitBy","difference","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistGetQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","asArchivistInstance","isArchivistInstance","QueryBoundWitnessWrapper","AbstractModuleInstance","duplicateModules","PayloadBuilder","maxSequenceIndex","maxSequenceStringCharacters","NOT_IMPLEMENTED","bigintToZeroPaddedString","value","totalLength","stringValue","toString","padStart","AbstractArchivist","AbstractModuleInstance","configSchemas","ArchivistConfigSchema","defaultConfigSchema","uniqueName","globallyUnique","_lastInsertedPayload","_parentArchivists","queries","ArchivistGetQuerySchema","requireAllParents","config","storeParentReads","addSequencedStorageMeta","payload","indexOrSequence","sequence","sequenceNumber","sequenceString","maxSequenceStringCharacters","_sequence","_dataHash","PayloadBuilder","dataHash","_hash","hash","addStorageMeta","payloads","Promise","all","map","p","index","removeStorageMeta","Array","isArray","omitBy","_","key","startsWith","assertEx","maxSequenceIndex","BigInt","Date","now","sortByStorageMeta","direction","sort","a","b","_noOverride","busy","started","allHandler","allQuery","account","queryPayload","schema","ArchivistAllQuerySchema","sendQueryRaw","undefined","clear","clearHandler","clearQuery","ArchivistClearQuerySchema","commit","commitHandler","commitQuery","ArchivistCommitQuerySchema","delete","hashes","deleteWithConfig","deleteQuery","ArchivistDeleteQuerySchema","get","getWithConfig","getQuery","insert","insertWithConfig","insertQuery","ArchivistInsertQuerySchema","next","options","nextWithConfig","nextQuery","ArchivistNextQuerySchema","Error","deleteHandler","_hashes","emitEvents","deletedHashes","emit","mod","getFromParent","archivist","foundPairs","dataHashPairs","filter","askedFor","includes","console","warn","foundHashes","Set","foundPayloads","notfound","has","getFromParents","parents","Object","values","parentArchivists","read","remainingHashes","parentIndex","result","length","found","getHandler","_config","requestedHashes","gotten","toAllHashMap","entries","requestedPayloadFound","add","push","notFoundHashes","difference","parentFoundPayloads","head","insertHandler","_payloads","insertQueryHandler","query","JSON","stringify","resolvedPayloads","filterIncludeByDataHash","payloadHashes","payloadsWithoutQuery","filterExclude","at","writeToParents","insertedPayloads","nextHandler","_options","resolveArchivists","write","queryHandler","queryConfig","wrappedQuery","QueryBoundWitnessWrapper","parseQuery","queryable","resultPayloads","resultPayload","storeQueries","writeToParent","parent","exists","flat","archivists","archivistModules","resolve","address","name","duplicateModules","modName","reduce","prev","asArchivistInstance","isArchivistInstance","log"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/archivist-abstract",
3
- "version": "3.5.1",
3
+ "version": "3.6.0-rc.1",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,20 +29,20 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/assert": "^4.4.9",
33
- "@xylabs/exists": "^4.4.9",
34
- "@xylabs/hex": "^4.4.9",
35
- "@xylabs/object": "^4.4.9",
36
- "@xylabs/promise": "^4.4.9",
37
- "@xylabs/set": "^4.4.9",
38
- "@xyo-network/account-model": "^3.5.1",
39
- "@xyo-network/archivist-model": "^3.5.1",
40
- "@xyo-network/boundwitness-model": "^3.5.1",
41
- "@xyo-network/boundwitness-wrapper": "^3.5.1",
42
- "@xyo-network/module-abstract": "^3.5.1",
43
- "@xyo-network/module-model": "^3.5.1",
44
- "@xyo-network/payload-builder": "^3.5.1",
45
- "@xyo-network/payload-model": "^3.5.1"
32
+ "@xylabs/assert": "^4.4.12",
33
+ "@xylabs/exists": "^4.4.12",
34
+ "@xylabs/hex": "^4.4.12",
35
+ "@xylabs/object": "^4.4.12",
36
+ "@xylabs/promise": "^4.4.12",
37
+ "@xylabs/set": "^4.4.12",
38
+ "@xyo-network/account-model": "^3.6.0-rc.1",
39
+ "@xyo-network/archivist-model": "^3.6.0-rc.1",
40
+ "@xyo-network/boundwitness-model": "^3.6.0-rc.1",
41
+ "@xyo-network/boundwitness-wrapper": "^3.6.0-rc.1",
42
+ "@xyo-network/module-abstract": "^3.6.0-rc.1",
43
+ "@xyo-network/module-model": "^3.6.0-rc.1",
44
+ "@xyo-network/payload-builder": "^3.6.0-rc.1",
45
+ "@xyo-network/payload-model": "^3.6.0-rc.1"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@xylabs/ts-scripts-yarn3": "^4.2.4",
@@ -51,5 +51,6 @@
51
51
  },
52
52
  "publishConfig": {
53
53
  "access": "public"
54
- }
54
+ },
55
+ "stableVersion": "3.5.2"
55
56
  }
@@ -1,7 +1,7 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
2
  import { exists } from '@xylabs/exists'
3
3
  import type { Address, Hash } from '@xylabs/hex'
4
- import { globallyUnique } from '@xylabs/object'
4
+ import { globallyUnique, omitBy } from '@xylabs/object'
5
5
  import type { Promisable, PromisableArray } from '@xylabs/promise'
6
6
  import { difference } from '@xylabs/set'
7
7
  import type { AccountInstance } from '@xyo-network/account-model'
@@ -40,12 +40,18 @@ import type {
40
40
  } from '@xyo-network/module-model'
41
41
  import { duplicateModules } from '@xyo-network/module-model'
42
42
  import { PayloadBuilder } from '@xyo-network/payload-builder'
43
- import type {
44
- Payload, PayloadWithMeta, Schema, WithMeta,
45
- } from '@xyo-network/payload-model'
43
+ import type { Payload, Schema } from '@xyo-network/payload-model'
44
+
45
+ import type { WithStorageMeta } from './StorageMeta.ts'
46
+ import { maxSequenceIndex, maxSequenceStringCharacters } from './StorageMeta.ts'
46
47
 
47
48
  const NOT_IMPLEMENTED = 'Not implemented' as const
48
49
 
50
+ function bigintToZeroPaddedString(value: bigint, totalLength: number) {
51
+ const stringValue = value.toString()
52
+ return stringValue.padStart(totalLength, '0')
53
+ }
54
+
49
55
  export interface ActionConfig {
50
56
  emitEvents?: boolean
51
57
  }
@@ -84,11 +90,51 @@ export abstract class AbstractArchivist<
84
90
  return !!this.config?.storeParentReads
85
91
  }
86
92
 
87
- all(): PromisableArray<WithMeta<Payload>> {
93
+ static async addSequencedStorageMeta<T extends Payload = Payload>(payload: T, sequence: bigint): Promise<WithStorageMeta<T>>
94
+ static async addSequencedStorageMeta<T extends Payload = Payload>(payload: T, index: number): Promise<WithStorageMeta<T>>
95
+ static async addSequencedStorageMeta<T extends Payload = Payload>(payload: T, indexOrSequence: number | bigint): Promise<WithStorageMeta<T>> {
96
+ const sequence = typeof indexOrSequence === 'number' ? this.sequenceNumber(indexOrSequence) : indexOrSequence
97
+ const sequenceString = bigintToZeroPaddedString(sequence, maxSequenceStringCharacters)
98
+ return {
99
+ ...payload,
100
+ _sequence: sequenceString,
101
+ _dataHash: await PayloadBuilder.dataHash(payload),
102
+ _hash: await PayloadBuilder.hash(payload),
103
+ }
104
+ }
105
+
106
+ static async addStorageMeta<T extends Payload>(payloads: T[]): Promise<WithStorageMeta<T>[]> {
107
+ return (await Promise.all(payloads.map((p, index) => this.addSequencedStorageMeta(p, index)))) as WithStorageMeta<T>[]
108
+ }
109
+
110
+ static removeStorageMeta<T extends Payload = Payload>(payloads: T[]): WithStorageMeta<T>[]
111
+ static removeStorageMeta<T extends Payload = Payload>(payload?: T): WithStorageMeta<T>
112
+ static removeStorageMeta<T extends Payload = Payload>(payload?: T | T[]) {
113
+ if (Array.isArray(payload)) {
114
+ return payload.map(p => this.removeStorageMeta(p)) as WithStorageMeta<T>[]
115
+ }
116
+ return payload ? omitBy(payload, (_, key) => key.startsWith('_')) as WithStorageMeta<T> : null
117
+ }
118
+
119
+ static sequenceNumber(index: number) {
120
+ assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)
121
+ return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)
122
+ }
123
+
124
+ static sortByStorageMeta<T extends Payload>(payloads: WithStorageMeta<T>[], direction: -1 | 1 = 1) {
125
+ return payloads.sort((a, b) =>
126
+ a._sequence < b._sequence
127
+ ? -direction
128
+ : a._sequence > b._sequence
129
+ ? direction
130
+ : 0)
131
+ }
132
+
133
+ all(): PromisableArray<Payload> {
88
134
  this._noOverride('all')
89
135
  return this.busy(async () => {
90
136
  await this.started('throw')
91
- return await PayloadBuilder.build(await this.allHandler())
137
+ return await this.allHandler()
92
138
  })
93
139
  }
94
140
 
@@ -110,7 +156,7 @@ export abstract class AbstractArchivist<
110
156
  return await this.sendQueryRaw(queryPayload, undefined, account)
111
157
  }
112
158
 
113
- commit(): Promisable<WithMeta<BoundWitness>[]> {
159
+ commit(): Promisable<BoundWitness[]> {
114
160
  this._noOverride('commit')
115
161
  return this.busy(async () => {
116
162
  await this.started('throw')
@@ -136,11 +182,11 @@ export abstract class AbstractArchivist<
136
182
  return await this.sendQueryRaw(queryPayload, undefined, account)
137
183
  }
138
184
 
139
- async get(hashes: Hash[]): Promise<WithMeta<Payload>[]> {
185
+ async get(hashes: Hash[]): Promise<Payload[]> {
140
186
  this._noOverride('get')
141
187
  return await this.busy(async () => {
142
188
  await this.started('throw')
143
- return await PayloadBuilder.build(await this.getWithConfig(hashes))
189
+ return await this.getWithConfig(hashes)
144
190
  })
145
191
  }
146
192
 
@@ -149,11 +195,10 @@ export abstract class AbstractArchivist<
149
195
  return await this.sendQueryRaw(queryPayload, undefined, account)
150
196
  }
151
197
 
152
- async insert(payloads: Payload[]): Promise<WithMeta<Payload>[]> {
198
+ async insert(payloads: Payload[]): Promise<Payload[]> {
153
199
  this._noOverride('insert')
154
200
  return await this.busy(async () => {
155
201
  await this.started('throw')
156
- // make sure all incoming payloads have proper $hash and $meta
157
202
  return await this.insertWithConfig(payloads)
158
203
  })
159
204
  }
@@ -163,7 +208,7 @@ export abstract class AbstractArchivist<
163
208
  return await this.sendQueryRaw(queryPayload, payloads, account)
164
209
  }
165
210
 
166
- async next(options?: ArchivistNextOptions): Promise<WithMeta<Payload>[]> {
211
+ async next(options?: ArchivistNextOptions): Promise<Payload[]> {
167
212
  this._noOverride('next')
168
213
  return await this.busy(async () => {
169
214
  await this.started('throw')
@@ -184,7 +229,7 @@ export abstract class AbstractArchivist<
184
229
  throw new Error(NOT_IMPLEMENTED)
185
230
  }
186
231
 
187
- protected commitHandler(): Promisable<WithMeta<BoundWitness>[]> {
232
+ protected commitHandler(): Promisable<BoundWitness[]> {
188
233
  throw new Error(NOT_IMPLEMENTED)
189
234
  }
190
235
 
@@ -204,7 +249,7 @@ export abstract class AbstractArchivist<
204
249
  return deletedHashes
205
250
  }
206
251
 
207
- protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[WithMeta<Payload>[], Hash[]]> {
252
+ protected async getFromParent(hashes: Hash[], archivist: ArchivistInstance): Promise<[Payload[], Hash[]]> {
208
253
  const foundPairs = (await PayloadBuilder.dataHashPairs(await archivist.get(hashes))).filter(([, hash]) => {
209
254
  const askedFor = hashes.includes(hash)
210
255
  if (!askedFor) {
@@ -221,11 +266,11 @@ export abstract class AbstractArchivist<
221
266
  return [foundPayloads, notfound]
222
267
  }
223
268
 
224
- protected async getFromParents(hashes: Hash[]): Promise<[WithMeta<Payload>[], Hash[]]> {
269
+ protected async getFromParents(hashes: Hash[]): Promise<[Payload[], Hash[]]> {
225
270
  const parents = Object.values((await this.parentArchivists())?.read ?? {})
226
271
  let remainingHashes = [...hashes]
227
272
  let parentIndex = 0
228
- let result: WithMeta<Payload>[] = []
273
+ let result: Payload[] = []
229
274
 
230
275
  // NOTE: intentionally doing this serially
231
276
  while (parentIndex < parents.length && remainingHashes.length > 0) {
@@ -241,7 +286,7 @@ export abstract class AbstractArchivist<
241
286
  throw new Error(NOT_IMPLEMENTED)
242
287
  }
243
288
 
244
- protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<WithMeta<Payload>[]> {
289
+ protected async getWithConfig(hashes: Hash[], _config?: InsertConfig): Promise<Payload[]> {
245
290
  // Filter out duplicates
246
291
  const requestedHashes = new Set(hashes)
247
292
 
@@ -251,7 +296,7 @@ export abstract class AbstractArchivist<
251
296
  // Do not just blindly return what the archivist told us but
252
297
  // ensure to only return requested payloads and keep track of
253
298
  // the ones it did not find so we can ask the parents.
254
- const foundPayloads: PayloadWithMeta[] = []
299
+ const foundPayloads: Payload[] = []
255
300
  const foundHashes = new Set<Hash>()
256
301
 
257
302
  // NOTE: We are iterating over the returned result from the archivist
@@ -288,14 +333,14 @@ export abstract class AbstractArchivist<
288
333
  if (this.storeParentReads) {
289
334
  await this.insertWithConfig(parentFoundPayloads)
290
335
  }
291
- return await PayloadBuilder.build([...foundPayloads, ...parentFoundPayloads])
336
+ return [...foundPayloads, ...parentFoundPayloads]
292
337
  }
293
338
 
294
339
  protected head(): Promisable<Payload | undefined> {
295
340
  return this._lastInsertedPayload
296
341
  }
297
342
 
298
- protected insertHandler(_payloads: WithMeta<Payload>[]): Promise<WithMeta<Payload>[]> {
343
+ protected insertHandler(_payloads: Payload[]): Promise<Payload[]> {
299
344
  throw new Error(NOT_IMPLEMENTED)
300
345
  }
301
346
 
@@ -316,12 +361,11 @@ export abstract class AbstractArchivist<
316
361
  return result
317
362
  }
318
363
 
319
- protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<WithMeta<Payload>[]> {
364
+ protected async insertWithConfig(payloads: Payload[], config?: InsertConfig): Promise<Payload[]> {
320
365
  const emitEvents = config?.emitEvents ?? true
321
366
  const writeToParents = config?.writeToParents ?? true
322
367
 
323
- const payloadsWithMeta = await PayloadBuilder.build(payloads, { stamp: false, validate: true })
324
- const insertedPayloads = await this.insertHandler(payloadsWithMeta)
368
+ const insertedPayloads = await this.insertHandler(payloads)
325
369
 
326
370
  if (writeToParents) {
327
371
  await this.writeToParents(insertedPayloads)
@@ -333,13 +377,13 @@ export abstract class AbstractArchivist<
333
377
  return insertedPayloads
334
378
  }
335
379
 
336
- protected nextHandler(_options?: ArchivistNextOptions): Promisable<WithMeta<Payload>[]> {
380
+ protected nextHandler(_options?: ArchivistNextOptions): Promisable<Payload[]> {
337
381
  throw new Error(NOT_IMPLEMENTED)
338
382
  }
339
383
 
340
- protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<WithMeta<Payload>[]> {
384
+ protected async nextWithConfig(options?: ArchivistNextOptions, _config?: InsertConfig): Promise<Payload[]> {
341
385
  const foundPayloads = await this.nextHandler(options)
342
- return await PayloadBuilder.build(foundPayloads)
386
+ return foundPayloads
343
387
  }
344
388
 
345
389
  protected async parentArchivists() {
@@ -357,7 +401,6 @@ export abstract class AbstractArchivist<
357
401
  queryConfig?: TConfig,
358
402
  ): Promise<ModuleQueryHandlerResult> {
359
403
  const wrappedQuery = await QueryBoundWitnessWrapper.parseQuery<ArchivistQueries>(query, payloads)
360
- const builtQuery = await PayloadBuilder.build(query, { stamp: false, validate: true })
361
404
  const queryPayload = await wrappedQuery.getQuery()
362
405
  assertEx(await this.queryable(query, payloads, queryConfig))
363
406
  const resultPayloads: Payload[] = []
@@ -396,25 +439,29 @@ export abstract class AbstractArchivist<
396
439
  resultPayloads.push(...(await this.insertQueryHandler(wrappedQuery, payloads)))
397
440
  break
398
441
  }
442
+ case ArchivistNextQuerySchema: {
443
+ resultPayloads.push(...(await this.nextHandler(queryPayload)))
444
+ break
445
+ }
399
446
  default: {
400
447
  const result = await super.queryHandler(query, payloads)
401
448
  if (this.config.storeQueries) {
402
- await this.insertHandler([builtQuery])
449
+ await this.insertHandler([query])
403
450
  }
404
451
  return result
405
452
  }
406
453
  }
407
454
  if (this.config.storeQueries) {
408
- await this.insertHandler([builtQuery])
455
+ await this.insertHandler([query])
409
456
  }
410
457
  return resultPayloads
411
458
  }
412
459
 
413
- protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<PayloadWithMeta[]> {
460
+ protected async writeToParent(parent: ArchivistInstance, payloads: Payload[]): Promise<Payload[]> {
414
461
  return await parent.insert(payloads)
415
462
  }
416
463
 
417
- protected async writeToParents(payloads: Payload[]): Promise<PayloadWithMeta[]> {
464
+ protected async writeToParents(payloads: Payload[]): Promise<Payload[]> {
418
465
  const parents = await this.parentArchivists()
419
466
  return (
420
467
  await Promise.all(
@@ -1,46 +1,19 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import type {
3
- Payload, PayloadWithMeta, WithMeta,
4
- } from '@xyo-network/payload-model'
1
+ import type { Hash } from '@xylabs/hex'
2
+ import type { Payload } from '@xyo-network/payload-model'
5
3
 
6
4
  export interface StorageMeta {
7
- _sequence: bigint
5
+ _dataHash: Hash
6
+ _hash: Hash
7
+ // this sequence number must be a 0 padded string representation of a 128 bit sequence number
8
+ _sequence: string
8
9
  }
9
10
 
10
- export type WithOptionalStorageMeta<T extends Payload> = T & Partial<StorageMeta>
11
+ export type WithPartialStorageMeta<T extends Payload = Payload> = Partial<WithStorageMeta<T>>
11
12
 
12
- export type WithStorageMeta<T extends Payload> = T & StorageMeta
13
+ export type WithStorageMeta<T extends Payload = Payload> = T & StorageMeta
13
14
 
14
- export const maxSequenceIndex = 10_000_000_000n
15
+ // the max sequence index which allows for that number of items to be stored at one time stamp (32 bit max value)
16
+ export const maxSequenceIndex = 4_294_967_295n
15
17
 
16
- export const sequenceNumber = (index: number) => {
17
- assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)
18
- return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)
19
- }
20
-
21
- export const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {
22
- return { ...payload, _sequence: sequenceNumber(index) }
23
- }
24
-
25
- export const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[], direction: -1 | 1 = 1) => {
26
- return payloads.sort((a, b) =>
27
- a._sequence < b._sequence
28
- ? -direction
29
- : a._sequence > b._sequence
30
- ? direction
31
- : 0)
32
- }
33
-
34
- export function removeStorageMeta<T extends Payload>(payload: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T>
35
- export function removeStorageMeta<T extends Payload>(payloads: WithOptionalStorageMeta<WithMeta<T>>[]): WithMeta<T>[]
36
- export function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>): WithMeta<T> | undefined
37
- export function removeStorageMeta<T extends Payload>(payload?: WithOptionalStorageMeta<WithMeta<T>>) {
38
- if (!payload) return
39
- if (Array.isArray(payload)) {
40
- return payload.map(p => removeStorageMeta(p))
41
- }
42
-
43
- const { ...noMeta } = payload
44
- delete noMeta._sequence
45
- return noMeta
46
- }
18
+ // the max number of characters in a sequence string which can accommodate a 128 bit unsigned number
19
+ export const maxSequenceStringCharacters = 40