@xyo-network/archivist-memory 2.88.2 → 2.89.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
3
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
4
4
  import { BoundWitness } from '@xyo-network/boundwitness-model';
5
5
  import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
6
- import { Payload } from '@xyo-network/payload-model';
6
+ import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
7
7
  import { LRUCache } from 'lru-cache';
8
8
  export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
9
9
  export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
@@ -14,10 +14,10 @@ export type MemoryArchivistConfig = ArchivistConfig<{
14
14
  export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
15
15
  export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
16
16
  static configSchemas: string[];
17
+ private _bodyHashIndex?;
17
18
  private _cache?;
18
- get cache(): LRUCache<string, {
19
- schema: string;
20
- } & object, unknown>;
19
+ get bodyHashIndex(): LRUCache<string, string, unknown>;
20
+ get cache(): LRUCache<string, PayloadWithMeta, unknown>;
21
21
  get max(): number;
22
22
  get queries(): string[];
23
23
  protected allHandler(): PromisableArray<Payload>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,MAAM,CAAC,CAA2B;IAE1C,IAAI,KAAK;;yBAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAK9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAUjE,sBAAsB;CAMrC"}
1
+ {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -3,7 +3,7 @@ import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
3
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
4
4
  import { BoundWitness } from '@xyo-network/boundwitness-model';
5
5
  import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
6
- import { Payload } from '@xyo-network/payload-model';
6
+ import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
7
7
  import { LRUCache } from 'lru-cache';
8
8
  export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
9
9
  export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
@@ -14,10 +14,10 @@ export type MemoryArchivistConfig = ArchivistConfig<{
14
14
  export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
15
15
  export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
16
16
  static configSchemas: string[];
17
+ private _bodyHashIndex?;
17
18
  private _cache?;
18
- get cache(): LRUCache<string, {
19
- schema: string;
20
- } & object, unknown>;
19
+ get bodyHashIndex(): LRUCache<string, string, unknown>;
20
+ get cache(): LRUCache<string, PayloadWithMeta, unknown>;
21
21
  get max(): number;
22
22
  get queries(): string[];
23
23
  protected allHandler(): PromisableArray<Payload>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,MAAM,CAAC,CAA2B;IAE1C,IAAI,KAAK;;yBAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAK9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAUjE,sBAAsB;CAMrC"}
1
+ {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -3,7 +3,7 @@ import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
3
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
4
4
  import { BoundWitness } from '@xyo-network/boundwitness-model';
5
5
  import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
6
- import { Payload } from '@xyo-network/payload-model';
6
+ import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
7
7
  import { LRUCache } from 'lru-cache';
8
8
  export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
9
9
  export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
@@ -14,10 +14,10 @@ export type MemoryArchivistConfig = ArchivistConfig<{
14
14
  export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
15
15
  export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
16
16
  static configSchemas: string[];
17
+ private _bodyHashIndex?;
17
18
  private _cache?;
18
- get cache(): LRUCache<string, {
19
- schema: string;
20
- } & object, unknown>;
19
+ get bodyHashIndex(): LRUCache<string, string, unknown>;
20
+ get cache(): LRUCache<string, PayloadWithMeta, unknown>;
21
21
  get max(): number;
22
22
  get queries(): string[];
23
23
  protected allHandler(): PromisableArray<Payload>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,MAAM,CAAC,CAA2B;IAE1C,IAAI,KAAK;;yBAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAK9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAUjE,sBAAsB;CAMrC"}
1
+ {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -34,7 +34,7 @@ var import_archivist_abstract = require("@xyo-network/archivist-abstract");
34
34
  var import_archivist_model = require("@xyo-network/archivist-model");
35
35
  var import_hash = require("@xyo-network/hash");
36
36
  var import_module_model = require("@xyo-network/module-model");
37
- var import_payload_wrapper = require("@xyo-network/payload-wrapper");
37
+ var import_payload_builder = require("@xyo-network/payload-builder");
38
38
  var import_lru_cache = require("lru-cache");
39
39
  function _ts_decorate(decorators, target, key, desc) {
40
40
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -56,7 +56,14 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
56
56
  MemoryArchivistConfigSchema,
57
57
  import_archivist_model.ArchivistConfigSchema
58
58
  ];
59
+ _bodyHashIndex;
59
60
  _cache;
61
+ get bodyHashIndex() {
62
+ this._bodyHashIndex = this._bodyHashIndex ?? new import_lru_cache.LRUCache({
63
+ max: this.max
64
+ });
65
+ return this._bodyHashIndex;
66
+ }
60
67
  get cache() {
61
68
  this._cache = this._cache ?? new import_lru_cache.LRUCache({
62
69
  max: this.max
@@ -81,6 +88,7 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
81
88
  }
82
89
  clearHandler() {
83
90
  this.cache.clear();
91
+ this.bodyHashIndex.clear();
84
92
  return this.emit("cleared", {
85
93
  module: this
86
94
  });
@@ -111,22 +119,25 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
111
119
  return deletedPairs.map(([hash]) => hash);
112
120
  }
113
121
  getHandler(hashes) {
114
- return (0, import_lodash.compact)(hashes.map((hash) => this.cache.get(hash)));
122
+ return (0, import_lodash.compact)(hashes.map((hash) => {
123
+ const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
124
+ const result = this.cache.get(resolvedHash);
125
+ if (resolvedHash !== hash && !result) {
126
+ throw new Error("Missing referenced payload");
127
+ }
128
+ return result;
129
+ }));
115
130
  }
116
131
  async insertHandler(payloads) {
117
- const insertedPayloads = await Promise.all(payloads.map((payload) => {
118
- return this.insertPayloadIntoCache(payload);
132
+ const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
133
+ const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
134
+ return this.insertPayloadIntoCache(payload, hash);
119
135
  }));
120
136
  return insertedPayloads;
121
137
  }
122
- async insertPayloadIntoCache(payload) {
123
- const wrapper = import_payload_wrapper.PayloadWrapper.wrap(payload);
124
- const payloadWithMeta = {
125
- ...import_hash.PayloadHasher.hashFields(payload),
126
- _hash: await wrapper.hashAsync(),
127
- _timestamp: Date.now()
128
- };
129
- this.cache.set(payloadWithMeta._hash, payloadWithMeta);
138
+ insertPayloadIntoCache(payload, hash) {
139
+ this.cache.set(hash, payload);
140
+ this.bodyHashIndex.set(payload.$hash, hash);
130
141
  return payload;
131
142
  }
132
143
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<string, Payload>\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, Payload>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(hashes.map((hash) => this.cache.get(hash)))\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const insertedPayloads = await Promise.all(\n payloads.map((payload) => {\n return this.insertPayloadIntoCache(payload)\n }),\n )\n\n return insertedPayloads\n }\n\n private async insertPayloadIntoCache(payload: Payload): Promise<Payload> {\n const wrapper = PayloadWrapper.wrap(payload)\n const payloadWithMeta = { ...PayloadHasher.hashFields(payload), _hash: await wrapper.hashAsync(), _timestamp: Date.now() }\n this.cache.set(payloadWithMeta._hash, payloadWithMeta)\n return payload\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_cache","cache","LRUCache","max","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","insertHandler","insertedPayloads","insertPayloadIntoCache","wrapper","PayloadWrapper","wrap","payloadWithMeta","_hash","_timestamp","Date","now","set","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\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 const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","resolvedHash","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","set","$hash","creatableModule"]}
@@ -9,7 +9,7 @@ import { AbstractArchivist } from "@xyo-network/archivist-abstract";
9
9
  import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
10
10
  import { PayloadHasher } from "@xyo-network/hash";
11
11
  import { creatableModule } from "@xyo-network/module-model";
12
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
12
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
13
13
  import { LRUCache } from "lru-cache";
14
14
  function _ts_decorate(decorators, target, key, desc) {
15
15
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -31,7 +31,14 @@ var MemoryArchivist = class extends AbstractArchivist {
31
31
  MemoryArchivistConfigSchema,
32
32
  ArchivistConfigSchema
33
33
  ];
34
+ _bodyHashIndex;
34
35
  _cache;
36
+ get bodyHashIndex() {
37
+ this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache({
38
+ max: this.max
39
+ });
40
+ return this._bodyHashIndex;
41
+ }
35
42
  get cache() {
36
43
  this._cache = this._cache ?? new LRUCache({
37
44
  max: this.max
@@ -56,6 +63,7 @@ var MemoryArchivist = class extends AbstractArchivist {
56
63
  }
57
64
  clearHandler() {
58
65
  this.cache.clear();
66
+ this.bodyHashIndex.clear();
59
67
  return this.emit("cleared", {
60
68
  module: this
61
69
  });
@@ -86,22 +94,25 @@ var MemoryArchivist = class extends AbstractArchivist {
86
94
  return deletedPairs.map(([hash]) => hash);
87
95
  }
88
96
  getHandler(hashes) {
89
- return compact(hashes.map((hash) => this.cache.get(hash)));
97
+ return compact(hashes.map((hash) => {
98
+ const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
99
+ const result = this.cache.get(resolvedHash);
100
+ if (resolvedHash !== hash && !result) {
101
+ throw new Error("Missing referenced payload");
102
+ }
103
+ return result;
104
+ }));
90
105
  }
91
106
  async insertHandler(payloads) {
92
- const insertedPayloads = await Promise.all(payloads.map((payload) => {
93
- return this.insertPayloadIntoCache(payload);
107
+ const pairs = await PayloadBuilder.hashPairs(payloads);
108
+ const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
109
+ return this.insertPayloadIntoCache(payload, hash);
94
110
  }));
95
111
  return insertedPayloads;
96
112
  }
97
- async insertPayloadIntoCache(payload) {
98
- const wrapper = PayloadWrapper.wrap(payload);
99
- const payloadWithMeta = {
100
- ...PayloadHasher.hashFields(payload),
101
- _hash: await wrapper.hashAsync(),
102
- _timestamp: Date.now()
103
- };
104
- this.cache.set(payloadWithMeta._hash, payloadWithMeta);
113
+ insertPayloadIntoCache(payload, hash) {
114
+ this.cache.set(hash, payload);
115
+ this.bodyHashIndex.set(payload.$hash, hash);
105
116
  return payload;
106
117
  }
107
118
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryArchivist.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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<string, Payload>\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, Payload>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(hashes.map((hash) => this.cache.get(hash)))\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const insertedPayloads = await Promise.all(\n payloads.map((payload) => {\n return this.insertPayloadIntoCache(payload)\n }),\n )\n\n return insertedPayloads\n }\n\n private async insertPayloadIntoCache(payload: Payload): Promise<Payload> {\n const wrapper = PayloadWrapper.wrap(payload)\n const payloadWithMeta = { ...PayloadHasher.hashFields(payload), _hash: await wrapper.hashAsync(), _timestamp: Date.now() }\n this.cache.set(payloadWithMeta._hash, payloadWithMeta)\n return payload\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","PayloadWrapper","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_cache","cache","LRUCache","max","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","insertHandler","insertedPayloads","insertPayloadIntoCache","wrapper","PayloadWrapper","wrap","payloadWithMeta","_hash","_timestamp","Date","now","set","creatableModule"]}
1
+ {"version":3,"sources":["../../src/MemoryArchivist.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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\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 const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","resolvedHash","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","set","$hash","creatableModule"]}
@@ -3,7 +3,7 @@ import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
3
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
4
4
  import { BoundWitness } from '@xyo-network/boundwitness-model';
5
5
  import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
6
- import { Payload } from '@xyo-network/payload-model';
6
+ import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
7
7
  import { LRUCache } from 'lru-cache';
8
8
  export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
9
9
  export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
@@ -14,10 +14,10 @@ export type MemoryArchivistConfig = ArchivistConfig<{
14
14
  export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
15
15
  export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
16
16
  static configSchemas: string[];
17
+ private _bodyHashIndex?;
17
18
  private _cache?;
18
- get cache(): LRUCache<string, {
19
- schema: string;
20
- } & object, unknown>;
19
+ get bodyHashIndex(): LRUCache<string, string, unknown>;
20
+ get cache(): LRUCache<string, PayloadWithMeta, unknown>;
21
21
  get max(): number;
22
22
  get queries(): string[];
23
23
  protected allHandler(): PromisableArray<Payload>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,MAAM,CAAC,CAA2B;IAE1C,IAAI,KAAK;;yBAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAK9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAUjE,sBAAsB;CAMrC"}
1
+ {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -3,7 +3,7 @@ import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
3
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
4
4
  import { BoundWitness } from '@xyo-network/boundwitness-model';
5
5
  import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
6
- import { Payload } from '@xyo-network/payload-model';
6
+ import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
7
7
  import { LRUCache } from 'lru-cache';
8
8
  export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
9
9
  export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
@@ -14,10 +14,10 @@ export type MemoryArchivistConfig = ArchivistConfig<{
14
14
  export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
15
15
  export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
16
16
  static configSchemas: string[];
17
+ private _bodyHashIndex?;
17
18
  private _cache?;
18
- get cache(): LRUCache<string, {
19
- schema: string;
20
- } & object, unknown>;
19
+ get bodyHashIndex(): LRUCache<string, string, unknown>;
20
+ get cache(): LRUCache<string, PayloadWithMeta, unknown>;
21
21
  get max(): number;
22
22
  get queries(): string[];
23
23
  protected allHandler(): PromisableArray<Payload>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,MAAM,CAAC,CAA2B;IAE1C,IAAI,KAAK;;yBAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAK9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAUjE,sBAAsB;CAMrC"}
1
+ {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -3,7 +3,7 @@ import { AbstractArchivist } from '@xyo-network/archivist-abstract';
3
3
  import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
4
4
  import { BoundWitness } from '@xyo-network/boundwitness-model';
5
5
  import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
6
- import { Payload } from '@xyo-network/payload-model';
6
+ import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
7
7
  import { LRUCache } from 'lru-cache';
8
8
  export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
9
9
  export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
@@ -14,10 +14,10 @@ export type MemoryArchivistConfig = ArchivistConfig<{
14
14
  export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
15
15
  export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
16
16
  static configSchemas: string[];
17
+ private _bodyHashIndex?;
17
18
  private _cache?;
18
- get cache(): LRUCache<string, {
19
- schema: string;
20
- } & object, unknown>;
19
+ get bodyHashIndex(): LRUCache<string, string, unknown>;
20
+ get cache(): LRUCache<string, PayloadWithMeta, unknown>;
21
21
  get max(): number;
22
22
  get queries(): string[];
23
23
  protected allHandler(): PromisableArray<Payload>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,MAAM,CAAC,CAA2B;IAE1C,IAAI,KAAK;;yBAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAK9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAI7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAUjE,sBAAsB;CAMrC"}
1
+ {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.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,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAcxD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -39,7 +39,7 @@ var import_archivist_abstract = require("@xyo-network/archivist-abstract");
39
39
  var import_archivist_model = require("@xyo-network/archivist-model");
40
40
  var import_hash = require("@xyo-network/hash");
41
41
  var import_module_model = require("@xyo-network/module-model");
42
- var import_payload_wrapper = require("@xyo-network/payload-wrapper");
42
+ var import_payload_builder = require("@xyo-network/payload-builder");
43
43
  var import_lru_cache = require("lru-cache");
44
44
  function _ts_decorate(decorators, target, key, desc) {
45
45
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -54,7 +54,14 @@ function _ts_decorate(decorators, target, key, desc) {
54
54
  __name(_ts_decorate, "_ts_decorate");
55
55
  var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
56
56
  var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.AbstractArchivist {
57
+ _bodyHashIndex;
57
58
  _cache;
59
+ get bodyHashIndex() {
60
+ this._bodyHashIndex = this._bodyHashIndex ?? new import_lru_cache.LRUCache({
61
+ max: this.max
62
+ });
63
+ return this._bodyHashIndex;
64
+ }
58
65
  get cache() {
59
66
  this._cache = this._cache ?? new import_lru_cache.LRUCache({
60
67
  max: this.max
@@ -80,6 +87,7 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
80
87
  }
81
88
  clearHandler() {
82
89
  this.cache.clear();
90
+ this.bodyHashIndex.clear();
83
91
  return this.emit("cleared", {
84
92
  module: this
85
93
  });
@@ -112,22 +120,25 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
112
120
  return deletedPairs.map(([hash]) => hash);
113
121
  }
114
122
  getHandler(hashes) {
115
- return (0, import_lodash.compact)(hashes.map((hash) => this.cache.get(hash)));
123
+ return (0, import_lodash.compact)(hashes.map((hash) => {
124
+ const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
125
+ const result = this.cache.get(resolvedHash);
126
+ if (resolvedHash !== hash && !result) {
127
+ throw new Error("Missing referenced payload");
128
+ }
129
+ return result;
130
+ }));
116
131
  }
117
132
  async insertHandler(payloads) {
118
- const insertedPayloads = await Promise.all(payloads.map((payload) => {
119
- return this.insertPayloadIntoCache(payload);
133
+ const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
134
+ const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
135
+ return this.insertPayloadIntoCache(payload, hash);
120
136
  }));
121
137
  return insertedPayloads;
122
138
  }
123
- async insertPayloadIntoCache(payload) {
124
- const wrapper = import_payload_wrapper.PayloadWrapper.wrap(payload);
125
- const payloadWithMeta = {
126
- ...import_hash.PayloadHasher.hashFields(payload),
127
- _hash: await wrapper.hashAsync(),
128
- _timestamp: Date.now()
129
- };
130
- this.cache.set(payloadWithMeta._hash, payloadWithMeta);
139
+ insertPayloadIntoCache(payload, hash) {
140
+ this.cache.set(hash, payload);
141
+ this.bodyHashIndex.set(payload.$hash, hash);
131
142
  return payload;
132
143
  }
133
144
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<string, Payload>\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, Payload>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(hashes.map((hash) => this.cache.get(hash)))\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const insertedPayloads = await Promise.all(\n payloads.map((payload) => {\n return this.insertPayloadIntoCache(payload)\n }),\n )\n\n return insertedPayloads\n }\n\n private async insertPayloadIntoCache(payload: Payload): Promise<Payload> {\n const wrapper = PayloadWrapper.wrap(payload)\n const payloadWithMeta = { ...PayloadHasher.hashFields(payload), _hash: await wrapper.hashAsync(), _timestamp: Date.now() }\n this.cache.set(payloadWithMeta._hash, payloadWithMeta)\n return payload\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_cache","cache","LRUCache","max","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","insertHandler","insertedPayloads","insertPayloadIntoCache","wrapper","PayloadWrapper","wrap","payloadWithMeta","_hash","_timestamp","Date","now","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\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 const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","resolvedHash","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
@@ -14,7 +14,7 @@ import { AbstractArchivist } from "@xyo-network/archivist-abstract";
14
14
  import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
15
15
  import { PayloadHasher } from "@xyo-network/hash";
16
16
  import { creatableModule } from "@xyo-network/module-model";
17
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
17
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
18
18
  import { LRUCache } from "lru-cache";
19
19
  function _ts_decorate(decorators, target, key, desc) {
20
20
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -29,7 +29,14 @@ function _ts_decorate(decorators, target, key, desc) {
29
29
  __name(_ts_decorate, "_ts_decorate");
30
30
  var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
31
31
  var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
32
+ _bodyHashIndex;
32
33
  _cache;
34
+ get bodyHashIndex() {
35
+ this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache({
36
+ max: this.max
37
+ });
38
+ return this._bodyHashIndex;
39
+ }
33
40
  get cache() {
34
41
  this._cache = this._cache ?? new LRUCache({
35
42
  max: this.max
@@ -55,6 +62,7 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
55
62
  }
56
63
  clearHandler() {
57
64
  this.cache.clear();
65
+ this.bodyHashIndex.clear();
58
66
  return this.emit("cleared", {
59
67
  module: this
60
68
  });
@@ -87,22 +95,25 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
87
95
  return deletedPairs.map(([hash]) => hash);
88
96
  }
89
97
  getHandler(hashes) {
90
- return compact(hashes.map((hash) => this.cache.get(hash)));
98
+ return compact(hashes.map((hash) => {
99
+ const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
100
+ const result = this.cache.get(resolvedHash);
101
+ if (resolvedHash !== hash && !result) {
102
+ throw new Error("Missing referenced payload");
103
+ }
104
+ return result;
105
+ }));
91
106
  }
92
107
  async insertHandler(payloads) {
93
- const insertedPayloads = await Promise.all(payloads.map((payload) => {
94
- return this.insertPayloadIntoCache(payload);
108
+ const pairs = await PayloadBuilder.hashPairs(payloads);
109
+ const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
110
+ return this.insertPayloadIntoCache(payload, hash);
95
111
  }));
96
112
  return insertedPayloads;
97
113
  }
98
- async insertPayloadIntoCache(payload) {
99
- const wrapper = PayloadWrapper.wrap(payload);
100
- const payloadWithMeta = {
101
- ...PayloadHasher.hashFields(payload),
102
- _hash: await wrapper.hashAsync(),
103
- _timestamp: Date.now()
104
- };
105
- this.cache.set(payloadWithMeta._hash, payloadWithMeta);
114
+ insertPayloadIntoCache(payload, hash) {
115
+ this.cache.set(hash, payload);
116
+ this.bodyHashIndex.set(payload.$hash, hash);
106
117
  return payload;
107
118
  }
108
119
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryArchivist.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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<string, Payload>\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, Payload>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(hashes.map((hash) => this.cache.get(hash)))\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const insertedPayloads = await Promise.all(\n payloads.map((payload) => {\n return this.insertPayloadIntoCache(payload)\n }),\n )\n\n return insertedPayloads\n }\n\n private async insertPayloadIntoCache(payload: Payload): Promise<Payload> {\n const wrapper = PayloadWrapper.wrap(payload)\n const payloadWithMeta = { ...PayloadHasher.hashFields(payload), _hash: await wrapper.hashAsync(), _timestamp: Date.now() }\n this.cache.set(payloadWithMeta._hash, payloadWithMeta)\n return payload\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","PayloadWrapper","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_cache","cache","LRUCache","max","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","insertHandler","insertedPayloads","insertPayloadIntoCache","wrapper","PayloadWrapper","wrap","payloadWithMeta","_hash","_timestamp","Date","now","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
1
+ {"version":3,"sources":["../../src/MemoryArchivist.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 ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), '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 await this.clearHandler()\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 return this.cache.delete(hash) ? [hash, payload] : undefined\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 const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","all","get","payload","hashAsync","deletedPairs","hash","delete","undefined","getHandler","resolvedHash","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
package/package.json CHANGED
@@ -10,22 +10,22 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^2.13.25",
14
- "@xylabs/lodash": "^2.13.25",
15
- "@xylabs/promise": "^2.13.25",
16
- "@xyo-network/archivist-abstract": "~2.88.2",
17
- "@xyo-network/archivist-model": "~2.88.2",
18
- "@xyo-network/boundwitness-model": "~2.88.2",
19
- "@xyo-network/hash": "~2.88.2",
20
- "@xyo-network/module-model": "~2.88.2",
21
- "@xyo-network/payload-model": "~2.88.2",
22
- "@xyo-network/payload-wrapper": "~2.88.2",
13
+ "@xylabs/assert": "^2.13.29",
14
+ "@xylabs/lodash": "^2.13.29",
15
+ "@xylabs/promise": "^2.13.29",
16
+ "@xyo-network/archivist-abstract": "~2.89.0-rc.1",
17
+ "@xyo-network/archivist-model": "~2.89.0-rc.1",
18
+ "@xyo-network/boundwitness-model": "~2.89.0-rc.1",
19
+ "@xyo-network/hash": "~2.89.0-rc.1",
20
+ "@xyo-network/module-model": "~2.89.0-rc.1",
21
+ "@xyo-network/payload-builder": "~2.89.0-rc.1",
22
+ "@xyo-network/payload-model": "~2.89.0-rc.1",
23
23
  "lru-cache": "^10.1.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@xylabs/ts-scripts-yarn3": "^3.2.42",
27
27
  "@xylabs/tsconfig": "^3.2.42",
28
- "@xyo-network/account": "~2.88.2",
28
+ "@xyo-network/account": "~2.89.0-rc.1",
29
29
  "typescript": "^5.3.3"
30
30
  },
31
31
  "description": "Primary SDK for using XYO Protocol 2.0",
@@ -67,6 +67,7 @@
67
67
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
68
68
  },
69
69
  "sideEffects": false,
70
- "version": "2.88.2",
71
- "type": "module"
70
+ "version": "2.89.0-rc.1",
71
+ "type": "module",
72
+ "stableVersion": "2.88.3"
72
73
  }
@@ -17,8 +17,8 @@ import {
17
17
  import { BoundWitness } from '@xyo-network/boundwitness-model'
18
18
  import { PayloadHasher } from '@xyo-network/hash'
19
19
  import { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'
20
- import { Payload } from '@xyo-network/payload-model'
21
- import { PayloadWrapper } from '@xyo-network/payload-wrapper'
20
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
21
+ import { Payload, PayloadWithMeta } from '@xyo-network/payload-model'
22
22
  import { LRUCache } from 'lru-cache'
23
23
 
24
24
  export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'
@@ -41,10 +41,16 @@ export class MemoryArchivist<
41
41
  {
42
42
  static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]
43
43
 
44
- private _cache?: LRUCache<string, Payload>
44
+ private _bodyHashIndex?: LRUCache<string, string>
45
+ private _cache?: LRUCache<string, PayloadWithMeta>
46
+
47
+ get bodyHashIndex() {
48
+ this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })
49
+ return this._bodyHashIndex
50
+ }
45
51
 
46
52
  get cache() {
47
- this._cache = this._cache ?? new LRUCache<string, Payload>({ max: this.max })
53
+ this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })
48
54
  return this._cache
49
55
  }
50
56
 
@@ -69,6 +75,7 @@ export class MemoryArchivist<
69
75
 
70
76
  protected override clearHandler(): void | Promise<void> {
71
77
  this.cache.clear()
78
+ this.bodyHashIndex.clear()
72
79
  return this.emit('cleared', { module: this })
73
80
  }
74
81
 
@@ -104,23 +111,32 @@ export class MemoryArchivist<
104
111
  }
105
112
 
106
113
  protected override getHandler(hashes: string[]): Promisable<Payload[]> {
107
- return compact(hashes.map((hash) => this.cache.get(hash)))
114
+ return compact(
115
+ hashes.map((hash) => {
116
+ const resolvedHash = this.bodyHashIndex.get(hash) ?? hash
117
+ const result = this.cache.get(resolvedHash)
118
+ if (resolvedHash !== hash && !result) {
119
+ throw new Error('Missing referenced payload')
120
+ }
121
+ return result
122
+ }),
123
+ )
108
124
  }
109
125
 
110
126
  protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {
127
+ const pairs = await PayloadBuilder.hashPairs(payloads)
111
128
  const insertedPayloads = await Promise.all(
112
- payloads.map((payload) => {
113
- return this.insertPayloadIntoCache(payload)
129
+ pairs.map(([payload, hash]) => {
130
+ return this.insertPayloadIntoCache(payload, hash)
114
131
  }),
115
132
  )
116
133
 
117
134
  return insertedPayloads
118
135
  }
119
136
 
120
- private async insertPayloadIntoCache(payload: Payload): Promise<Payload> {
121
- const wrapper = PayloadWrapper.wrap(payload)
122
- const payloadWithMeta = { ...PayloadHasher.hashFields(payload), _hash: await wrapper.hashAsync(), _timestamp: Date.now() }
123
- this.cache.set(payloadWithMeta._hash, payloadWithMeta)
137
+ private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {
138
+ this.cache.set(hash, payload)
139
+ this.bodyHashIndex.set(payload.$hash, hash)
124
140
  return payload
125
141
  }
126
142
  }