@xyo-network/archivist-storage 2.88.3 → 2.89.0-rc.2

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.
@@ -1,3 +1,4 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { Promisable, PromisableArray } from '@xylabs/promise';
2
3
  import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
4
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
30
31
  protected allHandler(): PromisableArray<Payload>;
31
32
  protected clearHandler(): void | Promise<void>;
32
33
  protected commitHandler(): Promise<BoundWitness[]>;
33
- protected deleteHandler(hashes: string[]): Promise<string[]>;
34
+ protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
34
35
  protected getHandler(hashes: string[]): Promisable<Payload[]>;
35
36
  protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
36
37
  protected saveAccount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAKtC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAexD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAQ7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAc/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
1
+ {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
@@ -1,3 +1,4 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { Promisable, PromisableArray } from '@xylabs/promise';
2
3
  import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
4
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
30
31
  protected allHandler(): PromisableArray<Payload>;
31
32
  protected clearHandler(): void | Promise<void>;
32
33
  protected commitHandler(): Promise<BoundWitness[]>;
33
- protected deleteHandler(hashes: string[]): Promise<string[]>;
34
+ protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
34
35
  protected getHandler(hashes: string[]): Promisable<Payload[]>;
35
36
  protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
36
37
  protected saveAccount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAKtC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAexD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAQ7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAc/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
1
+ {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
@@ -1,3 +1,4 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { Promisable, PromisableArray } from '@xylabs/promise';
2
3
  import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
4
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
30
31
  protected allHandler(): PromisableArray<Payload>;
31
32
  protected clearHandler(): void | Promise<void>;
32
33
  protected commitHandler(): Promise<BoundWitness[]>;
33
- protected deleteHandler(hashes: string[]): Promise<string[]>;
34
+ protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
34
35
  protected getHandler(hashes: string[]): Promisable<Payload[]>;
35
36
  protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
36
37
  protected saveAccount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAKtC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAexD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAQ7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAc/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
1
+ {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
@@ -42,8 +42,7 @@ var import_lodash = require("@xylabs/lodash");
42
42
  var import_promise = require("@xylabs/promise");
43
43
  var import_archivist_abstract = require("@xyo-network/archivist-abstract");
44
44
  var import_archivist_model = require("@xyo-network/archivist-model");
45
- var import_hash = require("@xyo-network/hash");
46
- var import_payload_wrapper = require("@xyo-network/payload-wrapper");
45
+ var import_payload_builder = require("@xyo-network/payload-builder");
47
46
  var import_store2 = __toESM(require("store2"), 1);
48
47
  var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
49
48
  var StorageArchivist = class extends import_archivist_abstract.AbstractArchivist {
@@ -108,8 +107,16 @@ var StorageArchivist = class extends import_archivist_abstract.AbstractArchivist
108
107
  return await super.loadAccount()
109
108
  }*/
110
109
  allHandler() {
110
+ const found = /* @__PURE__ */ new Set();
111
111
  this.logger?.log(`this.storage.length: ${this.storage.length}`);
112
- return Object.entries(this.storage.getAll()).map(([, value]) => value);
112
+ return Object.entries(this.storage.getAll()).map(([, value]) => value).filter((payload) => {
113
+ if (found.has(payload.$hash)) {
114
+ return false;
115
+ } else {
116
+ found.add(payload.$hash);
117
+ return true;
118
+ }
119
+ });
113
120
  }
114
121
  clearHandler() {
115
122
  this.logger?.log(`this.storage.length: ${this.storage.length}`);
@@ -133,33 +140,34 @@ var StorageArchivist = class extends import_archivist_abstract.AbstractArchivist
133
140
  return (0, import_lodash.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
134
141
  }
135
142
  async deleteHandler(hashes) {
136
- const payloadPairs = await Promise.all((await this.get(hashes)).map(async (payload) => [
137
- await import_hash.PayloadHasher.hashAsync(payload),
138
- payload
139
- ]));
140
- const deletedPairs = (0, import_lodash.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
143
+ const deletedHashes = (0, import_lodash.compact)(await Promise.all(hashes.map((hash) => {
141
144
  this.storage.remove(hash);
142
- return [
143
- hash,
144
- payload
145
- ];
145
+ return hash;
146
146
  })));
147
- return deletedPairs.map(([hash]) => hash);
147
+ return deletedHashes;
148
148
  }
149
149
  getHandler(hashes) {
150
+ const found = /* @__PURE__ */ new Set();
150
151
  return (0, import_lodash.compact)(hashes.map((hash) => {
151
152
  return this.storage.get(hash);
152
- }));
153
+ })).filter((payload) => {
154
+ if (found.has(payload.$hash)) {
155
+ return false;
156
+ } else {
157
+ found.add(payload.$hash);
158
+ return true;
159
+ }
160
+ });
153
161
  }
154
162
  async insertHandler(payloads) {
155
- const resultPayloads = await Promise.all(payloads.map(async (payload) => {
156
- const wrapper = import_payload_wrapper.PayloadWrapper.wrap(payload);
157
- const hash = await wrapper.hashAsync();
158
- const value = JSON.stringify(wrapper.payload());
163
+ const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
164
+ const resultPayloads = pairs.map(([payload, hash]) => {
165
+ const value = JSON.stringify(payload);
159
166
  (0, import_assert.assertEx)(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
160
- this.storage.set(hash, wrapper.payload());
161
- return wrapper.payload();
162
- }));
167
+ this.storage.set(hash, payload);
168
+ this.storage.set(payload.$hash, payload);
169
+ return payload;
170
+ });
163
171
  return resultPayloads;
164
172
  }
165
173
  saveAccount() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
@@ -7,8 +7,7 @@ import { compact } from "@xylabs/lodash";
7
7
  import { fulfilled } from "@xylabs/promise";
8
8
  import { AbstractArchivist } from "@xyo-network/archivist-abstract";
9
9
  import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
10
- import { PayloadHasher } from "@xyo-network/hash";
11
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
10
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
12
11
  import store from "store2";
13
12
  var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
14
13
  var StorageArchivist = class extends AbstractArchivist {
@@ -73,8 +72,16 @@ var StorageArchivist = class extends AbstractArchivist {
73
72
  return await super.loadAccount()
74
73
  }*/
75
74
  allHandler() {
75
+ const found = /* @__PURE__ */ new Set();
76
76
  this.logger?.log(`this.storage.length: ${this.storage.length}`);
77
- return Object.entries(this.storage.getAll()).map(([, value]) => value);
77
+ return Object.entries(this.storage.getAll()).map(([, value]) => value).filter((payload) => {
78
+ if (found.has(payload.$hash)) {
79
+ return false;
80
+ } else {
81
+ found.add(payload.$hash);
82
+ return true;
83
+ }
84
+ });
78
85
  }
79
86
  clearHandler() {
80
87
  this.logger?.log(`this.storage.length: ${this.storage.length}`);
@@ -98,33 +105,34 @@ var StorageArchivist = class extends AbstractArchivist {
98
105
  return compact(settled.filter(fulfilled).map((result) => result.value));
99
106
  }
100
107
  async deleteHandler(hashes) {
101
- const payloadPairs = await Promise.all((await this.get(hashes)).map(async (payload) => [
102
- await PayloadHasher.hashAsync(payload),
103
- payload
104
- ]));
105
- const deletedPairs = compact(await Promise.all(payloadPairs.map(([hash, payload]) => {
108
+ const deletedHashes = compact(await Promise.all(hashes.map((hash) => {
106
109
  this.storage.remove(hash);
107
- return [
108
- hash,
109
- payload
110
- ];
110
+ return hash;
111
111
  })));
112
- return deletedPairs.map(([hash]) => hash);
112
+ return deletedHashes;
113
113
  }
114
114
  getHandler(hashes) {
115
+ const found = /* @__PURE__ */ new Set();
115
116
  return compact(hashes.map((hash) => {
116
117
  return this.storage.get(hash);
117
- }));
118
+ })).filter((payload) => {
119
+ if (found.has(payload.$hash)) {
120
+ return false;
121
+ } else {
122
+ found.add(payload.$hash);
123
+ return true;
124
+ }
125
+ });
118
126
  }
119
127
  async insertHandler(payloads) {
120
- const resultPayloads = await Promise.all(payloads.map(async (payload) => {
121
- const wrapper = PayloadWrapper.wrap(payload);
122
- const hash = await wrapper.hashAsync();
123
- const value = JSON.stringify(wrapper.payload());
128
+ const pairs = await PayloadBuilder.hashPairs(payloads);
129
+ const resultPayloads = pairs.map(([payload, hash]) => {
130
+ const value = JSON.stringify(payload);
124
131
  assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
125
- this.storage.set(hash, wrapper.payload());
126
- return wrapper.payload();
127
- }));
132
+ this.storage.set(hash, payload);
133
+ this.storage.set(payload.$hash, payload);
134
+ return payload;
135
+ });
128
136
  return resultPayloads;
129
137
  }
130
138
  saveAccount() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadWrapper","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
1
+ {"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadBuilder","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
@@ -1,3 +1,4 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { Promisable, PromisableArray } from '@xylabs/promise';
2
3
  import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
4
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
30
31
  protected allHandler(): PromisableArray<Payload>;
31
32
  protected clearHandler(): void | Promise<void>;
32
33
  protected commitHandler(): Promise<BoundWitness[]>;
33
- protected deleteHandler(hashes: string[]): Promise<string[]>;
34
+ protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
34
35
  protected getHandler(hashes: string[]): Promisable<Payload[]>;
35
36
  protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
36
37
  protected saveAccount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAKtC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAexD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAQ7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAc/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
1
+ {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
@@ -1,3 +1,4 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { Promisable, PromisableArray } from '@xylabs/promise';
2
3
  import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
4
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
30
31
  protected allHandler(): PromisableArray<Payload>;
31
32
  protected clearHandler(): void | Promise<void>;
32
33
  protected commitHandler(): Promise<BoundWitness[]>;
33
- protected deleteHandler(hashes: string[]): Promise<string[]>;
34
+ protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
34
35
  protected getHandler(hashes: string[]): Promisable<Payload[]>;
35
36
  protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
36
37
  protected saveAccount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAKtC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAexD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAQ7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAc/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
1
+ {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
@@ -1,3 +1,4 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { Promisable, PromisableArray } from '@xylabs/promise';
2
3
  import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
4
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
30
31
  protected allHandler(): PromisableArray<Payload>;
31
32
  protected clearHandler(): void | Promise<void>;
32
33
  protected commitHandler(): Promise<BoundWitness[]>;
33
- protected deleteHandler(hashes: string[]): Promise<string[]>;
34
+ protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
34
35
  protected getHandler(hashes: string[]): Promisable<Payload[]>;
35
36
  protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
36
37
  protected saveAccount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAKtC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAexD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAQ7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAc/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
1
+ {"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
@@ -47,8 +47,7 @@ var import_lodash = require("@xylabs/lodash");
47
47
  var import_promise = require("@xylabs/promise");
48
48
  var import_archivist_abstract = require("@xyo-network/archivist-abstract");
49
49
  var import_archivist_model = require("@xyo-network/archivist-model");
50
- var import_hash = require("@xyo-network/hash");
51
- var import_payload_wrapper = require("@xyo-network/payload-wrapper");
50
+ var import_payload_builder = require("@xyo-network/payload-builder");
52
51
  var import_store2 = __toESM(require("store2"), 1);
53
52
  var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
54
53
  var _StorageArchivist = class _StorageArchivist extends import_archivist_abstract.AbstractArchivist {
@@ -113,8 +112,16 @@ var _StorageArchivist = class _StorageArchivist extends import_archivist_abstrac
113
112
  }*/
114
113
  allHandler() {
115
114
  var _a;
115
+ const found = /* @__PURE__ */ new Set();
116
116
  (_a = this.logger) == null ? void 0 : _a.log(`this.storage.length: ${this.storage.length}`);
117
- return Object.entries(this.storage.getAll()).map(([, value]) => value);
117
+ return Object.entries(this.storage.getAll()).map(([, value]) => value).filter((payload) => {
118
+ if (found.has(payload.$hash)) {
119
+ return false;
120
+ } else {
121
+ found.add(payload.$hash);
122
+ return true;
123
+ }
124
+ });
118
125
  }
119
126
  clearHandler() {
120
127
  var _a;
@@ -141,33 +148,34 @@ var _StorageArchivist = class _StorageArchivist extends import_archivist_abstrac
141
148
  return (0, import_lodash.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
142
149
  }
143
150
  async deleteHandler(hashes) {
144
- const payloadPairs = await Promise.all((await this.get(hashes)).map(async (payload) => [
145
- await import_hash.PayloadHasher.hashAsync(payload),
146
- payload
147
- ]));
148
- const deletedPairs = (0, import_lodash.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
151
+ const deletedHashes = (0, import_lodash.compact)(await Promise.all(hashes.map((hash) => {
149
152
  this.storage.remove(hash);
150
- return [
151
- hash,
152
- payload
153
- ];
153
+ return hash;
154
154
  })));
155
- return deletedPairs.map(([hash]) => hash);
155
+ return deletedHashes;
156
156
  }
157
157
  getHandler(hashes) {
158
+ const found = /* @__PURE__ */ new Set();
158
159
  return (0, import_lodash.compact)(hashes.map((hash) => {
159
160
  return this.storage.get(hash);
160
- }));
161
+ })).filter((payload) => {
162
+ if (found.has(payload.$hash)) {
163
+ return false;
164
+ } else {
165
+ found.add(payload.$hash);
166
+ return true;
167
+ }
168
+ });
161
169
  }
162
170
  async insertHandler(payloads) {
163
- const resultPayloads = await Promise.all(payloads.map(async (payload) => {
164
- const wrapper = import_payload_wrapper.PayloadWrapper.wrap(payload);
165
- const hash = await wrapper.hashAsync();
166
- const value = JSON.stringify(wrapper.payload());
171
+ const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
172
+ const resultPayloads = pairs.map(([payload, hash]) => {
173
+ const value = JSON.stringify(payload);
167
174
  (0, import_assert.assertEx)(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
168
- this.storage.set(hash, wrapper.payload());
169
- return wrapper.payload();
170
- }));
175
+ this.storage.set(hash, payload);
176
+ this.storage.set(payload.$hash, payload);
177
+ return payload;
178
+ });
171
179
  return resultPayloads;
172
180
  }
173
181
  saveAccount() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,oBAAyB;AAEzB,oBAAwB;AACxB,qBAAuD;AACvD,gCAAkC;AAClC,6BAWO;AAGP,6BAA+B;AAE/B,oBAAiC;AAG1B,IAAMA,+BAA6D;AAYnE,IAAMC,oBAAN,MAAMA,0BAIHC,4CAAAA;EAKAC;EACAC;EAER,IAAIC,aAAa;AAhDnB;AAiDI,aAAO,UAAKC,WAAL,mBAAaD,eAAc;EACpC;EAEA,IAAIE,eAAe;AApDrB;AAqDI,aAAO,UAAKD,WAAL,mBAAaC,iBAAgB;EACtC;EAEA,IAAIC,YAAY;AAxDlB;AAyDI,aAAO,UAAKF,WAAL,mBAAaE,cAAa;EACnC;EAEA,IAAIC,iBAAiB;AA5DvB;AA6DI,aAAO,UAAKH,WAAL,mBAAaG,mBAAkB;EACxC;EAEA,IAAaC,UAAoB;AAC/B,WAAO;MACLC;MACAC;MACAC;MACAC;MACAC;SACG,MAAML;;EAEb;EAEA,IAAIM,OAAO;AA3Eb;AA4EI,aAAO,UAAKV,WAAL,mBAAaU,SAAQ;EAC9B;;EAGA,IAAYC,iBAA4B;AACtC,SAAKd,kBAAkB,KAAKC,YAAYc,cAAAA,QAAM,KAAKF,IAAI,EAAER,UAAU,GAAG,KAAKA,SAAS,UAAU;AAC9F,WAAO,KAAKL;EACd;;EAGA,IAAYgB,UAAqB;AAC/B,SAAKf,WAAW,KAAKA,YAAYc,cAAAA,QAAM,KAAKF,IAAI,EAAER,UAAU,KAAKA,SAAS;AAC1E,WAAO,KAAKJ;EACd;;;;;;;;;;;;;;;;;;EAoBmBgB,aAAuC;AA7G5D;AA8GI,UAAMC,QAAQ,oBAAIC,IAAAA;AAClB,eAAKC,WAAL,mBAAaC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM;AAC5D,WAAOC,OAAOC,QAAQ,KAAKR,QAAQS,OAAM,CAAA,EACtCC,IAAI,CAAC,CAAA,EAAGC,KAAAA,MAAWA,KAAAA,EACnBC,OAAO,CAACC,YAAAA;AACP,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACJ;EAEmBE,eAAqC;AA5H1D;AA6HI,eAAKb,WAAL,mBAAaC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM;AAC5D,SAAKN,QAAQkB,MAAK;AAClB,WAAO,KAAKC,KAAK,WAAW;MAAEC,QAAQ;IAAK,CAAA;EAC7C;EAEA,MAAyBC,gBAAyC;AAlIpE;AAmII,eAAKjB,WAAL,mBAAaC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM;AAC5D,UAAMgB,WAAW,MAAM,KAAKC,IAAG;AAC/BC,gCAASF,SAAShB,SAAS,GAAG,mBAAA;AAC9B,UAAMmB,UAAU,MAAMC,QAAQC,eAC5BC,wBACErB,YAAOsB,QAAQ,MAAM,KAAKC,QAAO,GAAIC,UAAU,CAAA,CAAE,MAAjDxB,mBAAoDG,IAAI,OAAOsB,WAAAA;AAxIvE,UAAAC;AAyIU,YAAMC,eAAqC;QACzCC,QAAQxC;MACV;AACA,YAAMyC,QAAQ,MAAM,KAAKC,UAAUH,cAAcZ,QAAAA;AACjD,cAAQW,MAAA,OAAMD,iCAAQI,MAAMA,MAAM,CAAA,GAAIA,MAAM,CAAA,QAApC,gBAAAH,IAA2C;IACrD,EAAA,CAAA;AAIJ,UAAM,KAAKf,MAAK;AAChB,eAAOU,uBAAQH,QAAQb,OAAO0B,wBAAAA,EAAW5B,IAAI,CAAC6B,WAAWA,OAAO5B,KAAK,CAAA;EACvE;EAEA,MAAyB6B,cAAcC,QAAiC;AACtE,UAAMC,oBAAgBd,uBACpB,MAAMF,QAAQH,IACZkB,OAAO/B,IAAI,CAACiC,SAAAA;AACV,WAAK3C,QAAQ4C,OAAOD,IAAAA;AACpB,aAAOA;IACT,CAAA,CAAA,CAAA;AAGJ,WAAOD;EACT;EAEmBG,WAAWJ,QAAyC;AACrE,UAAMvC,QAAQ,oBAAIC,IAAAA;AAClB,eAAOyB,uBACLa,OAAO/B,IAAI,CAACiC,SAAAA;AACV,aAAO,KAAK3C,QAAQ8C,IAAIH,IAAAA;IAC1B,CAAA,CAAA,EACA/B,OAAO,CAACC,YAAAA;AACR,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACF;EAEA,MAAyBgC,cAAczB,UAAyC;AAC9E,UAAM0B,QAAQ,MAAMC,sCAAeC,UAAU5B,QAAAA;AAC7C,UAAM6B,iBAAiBH,MAAMtC,IAAI,CAAC,CAACG,SAAS8B,IAAAA,MAAK;AAC/C,YAAMhC,QAAQyC,KAAKC,UAAUxC,OAAAA;AAC7BW,kCAASb,MAAML,SAAS,KAAKlB,cAAc,sBAAsBuD,IAAAA,KAAShC,MAAML,MAAM,GAAG;AACzF,WAAKN,QAAQsD,IAAIX,MAAM9B,OAAAA;AACvB,WAAKb,QAAQsD,IAAIzC,QAAQE,OAAOF,OAAAA;AAChC,aAAOA;IACT,CAAA;AACA,WAAOsC;EACT;EAEUI,cAAc;AA9L1B;AA+LI,QAAI,KAAKjE,gBAAgB;AACvB,YAAMkE,UAAU,KAAKA;AACrB,iBAAKpD,WAAL,mBAAaC,IAAImD,QAAQC;AACzB,WAAK3D,eAAewD,IAAI,cAAcE,QAAQE,QAAQC,GAAG;IAC3D;EACF;EAEA,MAAyBC,eAAe;AACtC,UAAM,MAAMA,aAAAA;AACZ,SAAKL,YAAW;AAChB,WAAO;EACT;AACF;AAnKUxE;AAGR,cAPWD,mBAOK+E,iBAAgB;EAAChF;;AAP5B,IAAMC,mBAAN;","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
@@ -12,8 +12,7 @@ import { compact } from "@xylabs/lodash";
12
12
  import { fulfilled } from "@xylabs/promise";
13
13
  import { AbstractArchivist } from "@xyo-network/archivist-abstract";
14
14
  import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
15
- import { PayloadHasher } from "@xyo-network/hash";
16
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
15
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
17
16
  import store from "store2";
18
17
  var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
19
18
  var _StorageArchivist = class _StorageArchivist extends AbstractArchivist {
@@ -78,8 +77,16 @@ var _StorageArchivist = class _StorageArchivist extends AbstractArchivist {
78
77
  }*/
79
78
  allHandler() {
80
79
  var _a;
80
+ const found = /* @__PURE__ */ new Set();
81
81
  (_a = this.logger) == null ? void 0 : _a.log(`this.storage.length: ${this.storage.length}`);
82
- return Object.entries(this.storage.getAll()).map(([, value]) => value);
82
+ return Object.entries(this.storage.getAll()).map(([, value]) => value).filter((payload) => {
83
+ if (found.has(payload.$hash)) {
84
+ return false;
85
+ } else {
86
+ found.add(payload.$hash);
87
+ return true;
88
+ }
89
+ });
83
90
  }
84
91
  clearHandler() {
85
92
  var _a;
@@ -106,33 +113,34 @@ var _StorageArchivist = class _StorageArchivist extends AbstractArchivist {
106
113
  return compact(settled.filter(fulfilled).map((result) => result.value));
107
114
  }
108
115
  async deleteHandler(hashes) {
109
- const payloadPairs = await Promise.all((await this.get(hashes)).map(async (payload) => [
110
- await PayloadHasher.hashAsync(payload),
111
- payload
112
- ]));
113
- const deletedPairs = compact(await Promise.all(payloadPairs.map(([hash, payload]) => {
116
+ const deletedHashes = compact(await Promise.all(hashes.map((hash) => {
114
117
  this.storage.remove(hash);
115
- return [
116
- hash,
117
- payload
118
- ];
118
+ return hash;
119
119
  })));
120
- return deletedPairs.map(([hash]) => hash);
120
+ return deletedHashes;
121
121
  }
122
122
  getHandler(hashes) {
123
+ const found = /* @__PURE__ */ new Set();
123
124
  return compact(hashes.map((hash) => {
124
125
  return this.storage.get(hash);
125
- }));
126
+ })).filter((payload) => {
127
+ if (found.has(payload.$hash)) {
128
+ return false;
129
+ } else {
130
+ found.add(payload.$hash);
131
+ return true;
132
+ }
133
+ });
126
134
  }
127
135
  async insertHandler(payloads) {
128
- const resultPayloads = await Promise.all(payloads.map(async (payload) => {
129
- const wrapper = PayloadWrapper.wrap(payload);
130
- const hash = await wrapper.hashAsync();
131
- const value = JSON.stringify(wrapper.payload());
136
+ const pairs = await PayloadBuilder.hashPairs(payloads);
137
+ const resultPayloads = pairs.map(([payload, hash]) => {
138
+ const value = JSON.stringify(payload);
132
139
  assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
133
- this.storage.set(hash, wrapper.payload());
134
- return wrapper.payload();
135
- }));
140
+ this.storage.set(hash, payload);
141
+ this.storage.set(payload.$hash, payload);
142
+ return payload;
143
+ });
136
144
  return resultPayloads;
137
145
  }
138
146
  saveAccount() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadWrapper","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
1
+ {"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadBuilder","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
package/package.json CHANGED
@@ -11,26 +11,27 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@xylabs/assert": "^2.13.29",
14
+ "@xylabs/hex": "^2.13.29",
14
15
  "@xylabs/lodash": "^2.13.29",
15
16
  "@xylabs/promise": "^2.13.29",
16
- "@xyo-network/archivist-abstract": "~2.88.3",
17
- "@xyo-network/archivist-model": "~2.88.3",
18
- "@xyo-network/boundwitness-model": "~2.88.3",
19
- "@xyo-network/hash": "~2.88.3",
20
- "@xyo-network/module-model": "~2.88.3",
21
- "@xyo-network/payload-model": "~2.88.3",
22
- "@xyo-network/payload-wrapper": "~2.88.3",
17
+ "@xyo-network/archivist-abstract": "~2.89.0-rc.2",
18
+ "@xyo-network/archivist-model": "~2.89.0-rc.2",
19
+ "@xyo-network/boundwitness-model": "~2.89.0-rc.2",
20
+ "@xyo-network/module-model": "~2.89.0-rc.2",
21
+ "@xyo-network/payload-builder": "~2.89.0-rc.2",
22
+ "@xyo-network/payload-model": "~2.89.0-rc.2",
23
23
  "store2": "^2.14.2"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@xylabs/delay": "^2.13.29",
27
27
  "@xylabs/ts-scripts-yarn3": "^3.2.42",
28
28
  "@xylabs/tsconfig": "^3.2.42",
29
- "@xyo-network/account": "~2.88.3",
30
- "@xyo-network/archivist-memory": "~2.88.3",
31
- "@xyo-network/boundwitness-builder": "~2.88.3",
32
- "@xyo-network/id-payload-plugin": "~2.88.3",
33
- "@xyo-network/node-memory": "~2.88.3",
29
+ "@xyo-network/account": "~2.89.0-rc.2",
30
+ "@xyo-network/archivist-memory": "~2.89.0-rc.2",
31
+ "@xyo-network/boundwitness-builder": "~2.89.0-rc.2",
32
+ "@xyo-network/id-payload-plugin": "~2.89.0-rc.2",
33
+ "@xyo-network/node-memory": "~2.89.0-rc.2",
34
+ "@xyo-network/payload-wrapper": "~2.89.0-rc.2",
34
35
  "typescript": "^5.3.3"
35
36
  },
36
37
  "description": "Primary SDK for using XYO Protocol 2.0",
@@ -72,6 +73,7 @@
72
73
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
73
74
  },
74
75
  "sideEffects": false,
75
- "version": "2.88.3",
76
- "type": "module"
76
+ "version": "2.89.0-rc.2",
77
+ "type": "module",
78
+ "stableVersion": "2.88.3"
77
79
  }
@@ -1,4 +1,5 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
+ import { Hash } from '@xylabs/hex'
2
3
  import { compact } from '@xylabs/lodash'
3
4
  import { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'
4
5
  import { AbstractArchivist } from '@xyo-network/archivist-abstract'
@@ -15,10 +16,9 @@ import {
15
16
  ArchivistParams,
16
17
  } from '@xyo-network/archivist-model'
17
18
  import { BoundWitness } from '@xyo-network/boundwitness-model'
18
- import { PayloadHasher } from '@xyo-network/hash'
19
19
  import { AnyConfigSchema } from '@xyo-network/module-model'
20
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
20
21
  import { Payload } from '@xyo-network/payload-model'
21
- import { PayloadWrapper } from '@xyo-network/payload-wrapper'
22
22
  import store, { StoreBase } from 'store2'
23
23
 
24
24
  export type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'
@@ -108,8 +108,18 @@ export class StorageArchivist<
108
108
  }*/
109
109
 
110
110
  protected override allHandler(): PromisableArray<Payload> {
111
+ const found = new Set<string>()
111
112
  this.logger?.log(`this.storage.length: ${this.storage.length}`)
112
- return Object.entries(this.storage.getAll()).map(([, value]) => value)
113
+ return Object.entries(this.storage.getAll())
114
+ .map(([, value]) => value)
115
+ .filter((payload) => {
116
+ if (found.has(payload.$hash)) {
117
+ return false
118
+ } else {
119
+ found.add(payload.$hash)
120
+ return true
121
+ }
122
+ })
113
123
  }
114
124
 
115
125
  protected override clearHandler(): void | Promise<void> {
@@ -138,40 +148,43 @@ export class StorageArchivist<
138
148
  return compact(settled.filter(fulfilled).map((result) => result.value))
139
149
  }
140
150
 
141
- protected override async deleteHandler(hashes: string[]): Promise<string[]> {
142
- const payloadPairs: [string, Payload][] = await Promise.all(
143
- (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),
144
- )
145
- const deletedPairs: [string, Payload][] = compact(
151
+ protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {
152
+ const deletedHashes = compact(
146
153
  await Promise.all(
147
- payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {
154
+ hashes.map((hash) => {
148
155
  this.storage.remove(hash)
149
- return [hash, payload]
156
+ return hash
150
157
  }),
151
158
  ),
152
159
  )
153
- return deletedPairs.map(([hash]) => hash)
160
+ return deletedHashes
154
161
  }
155
162
 
156
163
  protected override getHandler(hashes: string[]): Promisable<Payload[]> {
164
+ const found = new Set<string>()
157
165
  return compact(
158
166
  hashes.map((hash) => {
159
167
  return this.storage.get(hash)
160
168
  }),
161
- )
169
+ ).filter((payload) => {
170
+ if (found.has(payload.$hash)) {
171
+ return false
172
+ } else {
173
+ found.add(payload.$hash)
174
+ return true
175
+ }
176
+ })
162
177
  }
163
178
 
164
179
  protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {
165
- const resultPayloads = await Promise.all(
166
- payloads.map(async (payload) => {
167
- const wrapper = PayloadWrapper.wrap(payload)
168
- const hash = await wrapper.hashAsync()
169
- const value = JSON.stringify(wrapper.payload())
170
- assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)
171
- this.storage.set(hash, wrapper.payload())
172
- return wrapper.payload()
173
- }),
174
- )
180
+ const pairs = await PayloadBuilder.hashPairs(payloads)
181
+ const resultPayloads = pairs.map(([payload, hash]) => {
182
+ const value = JSON.stringify(payload)
183
+ assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)
184
+ this.storage.set(hash, payload)
185
+ this.storage.set(payload.$hash, payload)
186
+ return payload
187
+ })
175
188
  return resultPayloads
176
189
  }
177
190