@xyo-network/diviner-payload-generic 3.6.9 → 3.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,18 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/Diviner.ts
5
2
  import { filterAs } from "@xylabs/array";
6
3
  import { assertEx } from "@xylabs/assert";
7
4
  import { forget } from "@xylabs/forget";
8
5
  import { PayloadDiviner } from "@xyo-network/diviner-payload-abstract";
9
- import { asPayloadDivinerQueryPayload } from "@xyo-network/diviner-payload-model";
6
+ import {
7
+ asPayloadDivinerQueryPayload
8
+ } from "@xyo-network/diviner-payload-model";
10
9
  import { PayloadBuilder } from "@xyo-network/payload-builder";
11
10
  import { Mutex } from "async-mutex";
12
11
  var DEFAULT_INDEX_BATCH_SIZE = 100;
13
12
  var DEFAULT_MAX_INDEX_SIZE = 8e3;
14
13
  var GenericPayloadDivinerConfigSchema = "network.xyo.diviner.payload.generic.config";
15
14
  var GenericPayloadDiviner = class extends PayloadDiviner {
16
- static {
17
- __name(this, "GenericPayloadDiviner");
18
- }
19
- static configSchemas = [
20
- ...super.configSchemas,
21
- GenericPayloadDivinerConfigSchema
22
- ];
15
+ static configSchemas = [...super.configSchemas, GenericPayloadDivinerConfigSchema];
23
16
  static defaultConfigSchema = GenericPayloadDivinerConfigSchema;
24
17
  indexMaps = {};
25
18
  payloadsWithMeta = [];
@@ -30,10 +23,7 @@ var GenericPayloadDiviner = class extends PayloadDiviner {
30
23
  return this.config.indexBatchSize ?? DEFAULT_INDEX_BATCH_SIZE;
31
24
  }
32
25
  get indexes() {
33
- return [
34
- "schema",
35
- ...this.config.indexes ?? []
36
- ];
26
+ return ["schema", ...this.config.indexes ?? []];
37
27
  }
38
28
  get maxIndexSize() {
39
29
  return this.config.maxIndexSize ?? DEFAULT_MAX_INDEX_SIZE;
@@ -96,22 +86,26 @@ var GenericPayloadDiviner = class extends PayloadDiviner {
96
86
  throw new Error('Archivist does not support "all"');
97
87
  }
98
88
  }
99
- onArchivistCleared = /* @__PURE__ */ __name(() => {
100
- forget((async () => {
101
- await this.clearIndex();
102
- await this.updateIndex();
103
- })());
104
- }, "onArchivistCleared");
89
+ onArchivistCleared = () => {
90
+ forget(
91
+ (async () => {
92
+ await this.clearIndex();
93
+ await this.updateIndex();
94
+ })()
95
+ );
96
+ };
105
97
  // we are just rebuilding the entire index at this point on delete since large archivists do not support delete
106
- onArchivistDeleted = /* @__PURE__ */ __name(() => {
107
- forget((async () => {
108
- await this.clearIndex();
109
- await this.updateIndex();
110
- })());
111
- }, "onArchivistDeleted");
112
- onArchivistInserted = /* @__PURE__ */ __name(() => {
98
+ onArchivistDeleted = () => {
99
+ forget(
100
+ (async () => {
101
+ await this.clearIndex();
102
+ await this.updateIndex();
103
+ })()
104
+ );
105
+ };
106
+ onArchivistInserted = () => {
113
107
  forget(this.updateIndex());
114
- }, "onArchivistInserted");
108
+ };
115
109
  async stopHandler(_timeout) {
116
110
  const archivist = await this.archivistInstance(true);
117
111
  archivist.off("inserted", this.onArchivistInserted);
@@ -123,18 +117,12 @@ var GenericPayloadDiviner = class extends PayloadDiviner {
123
117
  async updateIndex() {
124
118
  await this._updatePayloadPairsMutex.runExclusive(async () => {
125
119
  const archivist = await this.archivistInstance(true);
126
- let newPayloads = await archivist.next({
127
- limit: 100,
128
- cursor: this._cursor
129
- });
120
+ let newPayloads = await archivist.next({ limit: 100, cursor: this._cursor });
130
121
  while (newPayloads.length > 0) {
131
122
  this._cursor = newPayloads.at(-1)?._sequence;
132
123
  assertEx(this.payloadsWithMeta.length + newPayloads.length <= this.maxIndexSize, () => "maxIndexSize exceeded");
133
124
  this.indexPayloads(newPayloads);
134
- newPayloads = await archivist.next({
135
- limit: 100,
136
- cursor: this._cursor
137
- });
125
+ newPayloads = await archivist.next({ limit: 100, cursor: this._cursor });
138
126
  }
139
127
  });
140
128
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { type Hex } from '@xylabs/hex'\nimport type { ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model'\nimport type { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n asPayloadDivinerQueryPayload,\n type Order,\n type PayloadDivinerConfig,\n type PayloadDivinerParams,\n type PayloadDivinerQueryPayload,\n} from '@xyo-network/diviner-payload-model'\nimport type { EventListener } from '@xyo-network/module-events'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n type Payload, type Schema,\n type WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconst DEFAULT_INDEX_BATCH_SIZE = 100 as const\nconst DEFAULT_MAX_INDEX_SIZE = 8000 as const\n\nexport const GenericPayloadDivinerConfigSchema = 'network.xyo.diviner.payload.generic.config' as const\nexport type GenericPayloadDivinerConfigSchema = typeof GenericPayloadDivinerConfigSchema\n\nexport type GenericPayloadDivinerConfig = PayloadDivinerConfig<\n {\n indexes?: string[]\n },\n GenericPayloadDivinerConfigSchema\n>\n\nexport class GenericPayloadDiviner<\n TParams extends PayloadDivinerParams<GenericPayloadDivinerConfig> = PayloadDivinerParams<GenericPayloadDivinerConfig>,\n TIn extends PayloadDivinerQueryPayload = PayloadDivinerQueryPayload,\n TOut extends WithStorageMeta<Payload> = WithStorageMeta<Payload>,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends PayloadDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, GenericPayloadDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = GenericPayloadDivinerConfigSchema\n\n protected indexMaps: Record<string, WithStorageMeta<TOut>[]> = {}\n protected payloadsWithMeta: WithStorageMeta<TOut>[] = []\n\n private _archivistInstance?: ArchivistInstance\n private _cursor?: Hex\n private _updatePayloadPairsMutex = new Mutex()\n\n protected get indexBatchSize() {\n return this.config.indexBatchSize ?? DEFAULT_INDEX_BATCH_SIZE\n }\n\n protected get indexes(): string[] {\n return ['schema', ...(this.config.indexes ?? [])]\n }\n\n protected get maxIndexSize() {\n return this.config.maxIndexSize ?? DEFAULT_MAX_INDEX_SIZE\n }\n\n protected all(order: Order = 'desc', cursor?: Hex) {\n const payloads = this.payloadsWithMeta.toSorted(PayloadBuilder.compareStorageMeta)\n if (order === 'desc') payloads.reverse()\n const startIndex = (cursor ? (payloads.findIndex(payload => payload._sequence === cursor) ?? -1) : -1) + 1\n return payloads.slice(startIndex)\n }\n\n protected override async archivistInstance(): Promise<ArchivistInstance | undefined>\n protected override async archivistInstance(required: true): Promise<ArchivistInstance>\n protected override async archivistInstance(required = false): Promise<ArchivistInstance | undefined> {\n if (!this._archivistInstance) {\n const archivist = await super.archivistInstance()\n if (required && !archivist) {\n throw new Error('Failed to find archivist')\n }\n archivist?.on('inserted', this.onArchivistInserted)\n archivist?.on('cleared', this.onArchivistCleared)\n archivist?.on('deleted', this.onArchivistDeleted)\n this._archivistInstance = archivist\n }\n return this._archivistInstance\n }\n\n protected async clearIndex() {\n await this._updatePayloadPairsMutex.runExclusive(() => {\n this._cursor = undefined\n this.payloadsWithMeta = []\n this.indexMaps = {}\n })\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filters = filterAs(payloads ?? [], asPayloadDivinerQueryPayload)\n assertEx(filters.length < 2, () => 'Multiple PayloadDivinerQuery payloads may not be specified')\n const filter = assertEx(filters.shift(), () => 'No PayloadDivinerQuery specified') as PayloadDivinerQueryPayload\n await this.updateIndex()\n\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n schema, schemas, order, limit, cursor, ...props\n } = filter\n let all: TOut[] = this.all(order, cursor)\n if (all) {\n if (schemas?.length) all = all.filter(payload => schemas.includes(payload.schema))\n if (Object.keys(props).length > 0) {\n const additionalFilterCriteria = Object.entries(props)\n for (const [prop, filter] of additionalFilterCriteria) {\n const property = prop as keyof TOut\n all\n = Array.isArray(filter)\n ? all.filter(payload =>\n filter.every((value) => {\n const prop = payload?.[property]\n // TODO: This seems to be written just to check arrays, and now that $meta is there, need to check type?\n return Array.isArray(prop) && prop.includes?.(value)\n }))\n : all.filter(payload => payload?.[property] === filter)\n }\n }\n return limit ? all.slice(0, limit) : all\n } else {\n throw new Error('Archivist does not support \"all\"')\n }\n }\n\n protected onArchivistCleared: EventListener<ArchivistModuleEventData['cleared']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n // we are just rebuilding the entire index at this point on delete since large archivists do not support delete\n protected onArchivistDeleted: EventListener<ArchivistModuleEventData['deleted']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n protected onArchivistInserted: EventListener<ArchivistModuleEventData['inserted']> = () => {\n forget(this.updateIndex())\n }\n\n protected override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n const archivist = await this.archivistInstance(true)\n archivist.off('inserted', this.onArchivistInserted)\n archivist.off('deleted', this.onArchivistDeleted)\n archivist.off('cleared', this.onArchivistCleared)\n return await super.stopHandler()\n }\n\n // index any new payloads\n protected async updateIndex() {\n await this._updatePayloadPairsMutex.runExclusive(async () => {\n const archivist = await this.archivistInstance(true)\n let newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n while (newPayloads.length > 0) {\n this._cursor = newPayloads.at(-1)?._sequence\n assertEx(this.payloadsWithMeta.length + newPayloads.length <= this.maxIndexSize, () => 'maxIndexSize exceeded')\n this.indexPayloads(newPayloads)\n newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n }\n })\n }\n\n private indexPayloads(payloads: WithStorageMeta<TOut>[]): Hex {\n this.payloadsWithMeta.push(...payloads)\n\n // update the custom indexes\n for (const index of this.indexes ?? []) {\n this.indexMaps[index] = this.indexMaps[index] ?? []\n for (const payload of payloads) {\n this.indexMaps[index].push(payload)\n }\n }\n return assertEx(payloads.at(-1), () => 'No payloads to index')._sequence\n }\n}\n"],"mappings":"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","names":["filterAs","assertEx","forget","PayloadDiviner","asPayloadDivinerQueryPayload","PayloadBuilder","Mutex","DEFAULT_INDEX_BATCH_SIZE","DEFAULT_MAX_INDEX_SIZE","GenericPayloadDivinerConfigSchema","GenericPayloadDiviner","PayloadDiviner","configSchemas","defaultConfigSchema","indexMaps","payloadsWithMeta","_archivistInstance","_cursor","_updatePayloadPairsMutex","Mutex","indexBatchSize","config","indexes","maxIndexSize","all","order","cursor","payloads","toSorted","PayloadBuilder","compareStorageMeta","reverse","startIndex","findIndex","payload","_sequence","slice","archivistInstance","required","archivist","Error","on","onArchivistInserted","onArchivistCleared","onArchivistDeleted","clearIndex","runExclusive","undefined","divineHandler","filters","filterAs","asPayloadDivinerQueryPayload","assertEx","length","filter","shift","updateIndex","schema","schemas","limit","props","includes","Object","keys","additionalFilterCriteria","entries","prop","property","Array","isArray","every","value","forget","stopHandler","_timeout","off","newPayloads","next","at","indexPayloads","push","index"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { type Hex } from '@xylabs/hex'\nimport type { ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model'\nimport type { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n asPayloadDivinerQueryPayload,\n type Order,\n type PayloadDivinerConfig,\n type PayloadDivinerParams,\n type PayloadDivinerQueryPayload,\n} from '@xyo-network/diviner-payload-model'\nimport type { EventListener } from '@xyo-network/module-events'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n type Payload, type Schema,\n type WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nconst DEFAULT_INDEX_BATCH_SIZE = 100 as const\nconst DEFAULT_MAX_INDEX_SIZE = 8000 as const\n\nexport const GenericPayloadDivinerConfigSchema = 'network.xyo.diviner.payload.generic.config' as const\nexport type GenericPayloadDivinerConfigSchema = typeof GenericPayloadDivinerConfigSchema\n\nexport type GenericPayloadDivinerConfig = PayloadDivinerConfig<\n {\n indexes?: string[]\n },\n GenericPayloadDivinerConfigSchema\n>\n\nexport class GenericPayloadDiviner<\n TParams extends PayloadDivinerParams<GenericPayloadDivinerConfig> = PayloadDivinerParams<GenericPayloadDivinerConfig>,\n TIn extends PayloadDivinerQueryPayload = PayloadDivinerQueryPayload,\n TOut extends WithStorageMeta<Payload> = WithStorageMeta<Payload>,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends PayloadDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, GenericPayloadDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = GenericPayloadDivinerConfigSchema\n\n protected indexMaps: Record<string, WithStorageMeta<TOut>[]> = {}\n protected payloadsWithMeta: WithStorageMeta<TOut>[] = []\n\n private _archivistInstance?: ArchivistInstance\n private _cursor?: Hex\n private _updatePayloadPairsMutex = new Mutex()\n\n protected get indexBatchSize() {\n return this.config.indexBatchSize ?? DEFAULT_INDEX_BATCH_SIZE\n }\n\n protected get indexes(): string[] {\n return ['schema', ...(this.config.indexes ?? [])]\n }\n\n protected get maxIndexSize() {\n return this.config.maxIndexSize ?? DEFAULT_MAX_INDEX_SIZE\n }\n\n protected all(order: Order = 'desc', cursor?: Hex) {\n const payloads = this.payloadsWithMeta.toSorted(PayloadBuilder.compareStorageMeta)\n if (order === 'desc') payloads.reverse()\n const startIndex = (cursor ? (payloads.findIndex(payload => payload._sequence === cursor) ?? -1) : -1) + 1\n return payloads.slice(startIndex)\n }\n\n protected override async archivistInstance(): Promise<ArchivistInstance | undefined>\n protected override async archivistInstance(required: true): Promise<ArchivistInstance>\n protected override async archivistInstance(required = false): Promise<ArchivistInstance | undefined> {\n if (!this._archivistInstance) {\n const archivist = await super.archivistInstance()\n if (required && !archivist) {\n throw new Error('Failed to find archivist')\n }\n archivist?.on('inserted', this.onArchivistInserted)\n archivist?.on('cleared', this.onArchivistCleared)\n archivist?.on('deleted', this.onArchivistDeleted)\n this._archivistInstance = archivist\n }\n return this._archivistInstance\n }\n\n protected async clearIndex() {\n await this._updatePayloadPairsMutex.runExclusive(() => {\n this._cursor = undefined\n this.payloadsWithMeta = []\n this.indexMaps = {}\n })\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const filters = filterAs(payloads ?? [], asPayloadDivinerQueryPayload)\n assertEx(filters.length < 2, () => 'Multiple PayloadDivinerQuery payloads may not be specified')\n const filter = assertEx(filters.shift(), () => 'No PayloadDivinerQuery specified') as PayloadDivinerQueryPayload\n await this.updateIndex()\n\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n schema, schemas, order, limit, cursor, ...props\n } = filter\n let all: TOut[] = this.all(order, cursor)\n if (all) {\n if (schemas?.length) all = all.filter(payload => schemas.includes(payload.schema))\n if (Object.keys(props).length > 0) {\n const additionalFilterCriteria = Object.entries(props)\n for (const [prop, filter] of additionalFilterCriteria) {\n const property = prop as keyof TOut\n all\n = Array.isArray(filter)\n ? all.filter(payload =>\n filter.every((value) => {\n const prop = payload?.[property]\n // TODO: This seems to be written just to check arrays, and now that $meta is there, need to check type?\n return Array.isArray(prop) && prop.includes?.(value)\n }))\n : all.filter(payload => payload?.[property] === filter)\n }\n }\n return limit ? all.slice(0, limit) : all\n } else {\n throw new Error('Archivist does not support \"all\"')\n }\n }\n\n protected onArchivistCleared: EventListener<ArchivistModuleEventData['cleared']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n // we are just rebuilding the entire index at this point on delete since large archivists do not support delete\n protected onArchivistDeleted: EventListener<ArchivistModuleEventData['deleted']> = () => {\n forget(\n (async () => {\n await this.clearIndex()\n await this.updateIndex()\n })(),\n )\n }\n\n protected onArchivistInserted: EventListener<ArchivistModuleEventData['inserted']> = () => {\n forget(this.updateIndex())\n }\n\n protected override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n const archivist = await this.archivistInstance(true)\n archivist.off('inserted', this.onArchivistInserted)\n archivist.off('deleted', this.onArchivistDeleted)\n archivist.off('cleared', this.onArchivistCleared)\n return await super.stopHandler()\n }\n\n // index any new payloads\n protected async updateIndex() {\n await this._updatePayloadPairsMutex.runExclusive(async () => {\n const archivist = await this.archivistInstance(true)\n let newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n while (newPayloads.length > 0) {\n this._cursor = newPayloads.at(-1)?._sequence\n assertEx(this.payloadsWithMeta.length + newPayloads.length <= this.maxIndexSize, () => 'maxIndexSize exceeded')\n this.indexPayloads(newPayloads)\n newPayloads = await archivist.next({ limit: 100, cursor: this._cursor }) as TOut[]\n }\n })\n }\n\n private indexPayloads(payloads: WithStorageMeta<TOut>[]): Hex {\n this.payloadsWithMeta.push(...payloads)\n\n // update the custom indexes\n for (const index of this.indexes ?? []) {\n this.indexMaps[index] = this.indexMaps[index] ?? []\n for (const payload of payloads) {\n this.indexMaps[index].push(payload)\n }\n }\n return assertEx(payloads.at(-1), () => 'No payloads to index')._sequence\n }\n}\n"],"mappings":"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","names":["filter","prop"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/diviner-payload-generic",
3
- "version": "3.6.9",
3
+ "version": "3.6.10",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,31 +29,31 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/array": "^4.4.34",
33
- "@xylabs/assert": "^4.4.34",
34
- "@xylabs/forget": "^4.4.34",
35
- "@xylabs/hex": "^4.4.34",
36
- "@xyo-network/archivist-model": "^3.6.9",
37
- "@xyo-network/diviner-model": "^3.6.9",
38
- "@xyo-network/diviner-payload-abstract": "^3.6.9",
39
- "@xyo-network/diviner-payload-model": "^3.6.9",
40
- "@xyo-network/module-events": "^3.6.9",
41
- "@xyo-network/payload-builder": "^3.6.9",
42
- "@xyo-network/payload-model": "^3.6.9",
32
+ "@xylabs/array": "^4.5.1",
33
+ "@xylabs/assert": "^4.5.1",
34
+ "@xylabs/forget": "^4.5.1",
35
+ "@xylabs/hex": "^4.5.1",
36
+ "@xyo-network/archivist-model": "^3.6.10",
37
+ "@xyo-network/diviner-model": "^3.6.10",
38
+ "@xyo-network/diviner-payload-abstract": "^3.6.10",
39
+ "@xyo-network/diviner-payload-model": "^3.6.10",
40
+ "@xyo-network/module-events": "^3.6.10",
41
+ "@xyo-network/payload-builder": "^3.6.10",
42
+ "@xyo-network/payload-model": "^3.6.10",
43
43
  "async-mutex": "^0.5.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@xylabs/delay": "^4.4.34",
46
+ "@xylabs/delay": "^4.5.1",
47
47
  "@xylabs/ts-scripts-yarn3": "^4.2.6",
48
48
  "@xylabs/tsconfig": "^4.2.6",
49
- "@xylabs/vitest-extended": "^4.4.34",
50
- "@xyo-network/archivist-indexeddb": "^3.6.9",
51
- "@xyo-network/archivist-memory": "^3.6.9",
52
- "@xyo-network/node-memory": "^3.6.9",
53
- "@xyo-network/payload-builder": "^3.6.9",
49
+ "@xylabs/vitest-extended": "^4.5.1",
50
+ "@xyo-network/archivist-indexeddb": "^3.6.10",
51
+ "@xyo-network/archivist-memory": "^3.6.10",
52
+ "@xyo-network/node-memory": "^3.6.10",
53
+ "@xyo-network/payload-builder": "^3.6.10",
54
54
  "fake-indexeddb": "^6.0.0",
55
- "typescript": "^5.7.2",
56
- "vitest": "^2.1.8"
55
+ "typescript": "^5.7.3",
56
+ "vitest": "^3.0.4"
57
57
  },
58
58
  "publishConfig": {
59
59
  "access": "public"