@xyo-network/archivist-storage 2.89.0-rc.1 → 2.89.0-rc.11
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.
- package/dist/browser/StorageArchivist.d.cts +2 -1
- package/dist/browser/StorageArchivist.d.cts.map +1 -1
- package/dist/browser/StorageArchivist.d.mts +2 -1
- package/dist/browser/StorageArchivist.d.mts.map +1 -1
- package/dist/browser/StorageArchivist.d.ts +2 -1
- package/dist/browser/StorageArchivist.d.ts.map +1 -1
- package/dist/browser/index.cjs +4 -12
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +4 -12
- package/dist/browser/index.js.map +1 -1
- package/dist/node/StorageArchivist.d.cts +2 -1
- package/dist/node/StorageArchivist.d.cts.map +1 -1
- package/dist/node/StorageArchivist.d.mts +2 -1
- package/dist/node/StorageArchivist.d.mts.map +1 -1
- package/dist/node/StorageArchivist.d.ts +2 -1
- package/dist/node/StorageArchivist.d.ts.map +1 -1
- package/dist/node/index.cjs +4 -12
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +4 -12
- package/dist/node/index.js.map +1 -1
- package/package.json +18 -17
- package/src/StorageArchivist.ts +7 -10
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
|
|
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
|
|
|
30
31
|
protected allHandler(): PromisableArray<Payload>;
|
|
31
32
|
protected clearHandler(): void | Promise<void>;
|
|
32
33
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
33
|
-
protected deleteHandler(hashes:
|
|
34
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
34
35
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
35
36
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
36
37
|
protected saveAccount(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
|
|
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
|
|
|
30
31
|
protected allHandler(): PromisableArray<Payload>;
|
|
31
32
|
protected clearHandler(): void | Promise<void>;
|
|
32
33
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
33
|
-
protected deleteHandler(hashes:
|
|
34
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
34
35
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
35
36
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
36
37
|
protected saveAccount(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
|
|
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
|
|
|
30
31
|
protected allHandler(): PromisableArray<Payload>;
|
|
31
32
|
protected clearHandler(): void | Promise<void>;
|
|
32
33
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
33
|
-
protected deleteHandler(hashes:
|
|
34
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
34
35
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
35
36
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
36
37
|
protected saveAccount(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -42,7 +42,6 @@ var import_lodash = require("@xylabs/lodash");
|
|
|
42
42
|
var import_promise = require("@xylabs/promise");
|
|
43
43
|
var import_archivist_abstract = require("@xyo-network/archivist-abstract");
|
|
44
44
|
var import_archivist_model = require("@xyo-network/archivist-model");
|
|
45
|
-
var import_hash = require("@xyo-network/hash");
|
|
46
45
|
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
47
46
|
var import_store2 = __toESM(require("store2"), 1);
|
|
48
47
|
var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
|
|
@@ -141,18 +140,11 @@ var StorageArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
141
140
|
return (0, import_lodash.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
|
|
142
141
|
}
|
|
143
142
|
async deleteHandler(hashes) {
|
|
144
|
-
const
|
|
145
|
-
await import_hash.PayloadHasher.hashAsync(payload),
|
|
146
|
-
payload
|
|
147
|
-
]));
|
|
148
|
-
const deletedPairs = (0, import_lodash.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
143
|
+
const deletedHashes = (0, import_lodash.compact)(await Promise.all(hashes.map((hash) => {
|
|
149
144
|
this.storage.remove(hash);
|
|
150
|
-
return
|
|
151
|
-
hash,
|
|
152
|
-
payload
|
|
153
|
-
];
|
|
145
|
+
return hash;
|
|
154
146
|
})));
|
|
155
|
-
return
|
|
147
|
+
return deletedHashes;
|
|
156
148
|
}
|
|
157
149
|
getHandler(hashes) {
|
|
158
150
|
const found = /* @__PURE__ */ new Set();
|
|
@@ -171,7 +163,7 @@ var StorageArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
171
163
|
const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
|
|
172
164
|
const resultPayloads = pairs.map(([payload, hash]) => {
|
|
173
165
|
const value = JSON.stringify(payload);
|
|
174
|
-
(0, import_assert.assertEx)(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
|
|
166
|
+
(0, import_assert.assertEx)(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`);
|
|
175
167
|
this.storage.set(hash, payload);
|
|
176
168
|
this.storage.set(payload.$hash, payload);
|
|
177
169
|
return payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,oBAAyB;AACzB,oBAAwB;AACxB,qBAAuD;AACvD,gCAAkC;AAClC,6BAWO;AAEP,kBAA8B;AAE9B,6BAA+B;AAE/B,oBAAiC;AAG1B,IAAMA,+BAA6D;AAYnE,IAAMC,mBAAN,cAIGC,4CAAAA;EAxCV,OAwCUA;;;EAGR,OAAgBC,gBAAgB;IAACH;;EAEzBI;EACAC;EAER,IAAIC,aAAa;AACf,WAAO,KAAKC,QAAQD,cAAc;EACpC;EAEA,IAAIE,eAAe;AACjB,WAAO,KAAKD,QAAQC,gBAAgB;EACtC;EAEA,IAAIC,YAAY;AACd,WAAO,KAAKF,QAAQE,aAAa;EACnC;EAEA,IAAIC,iBAAiB;AACnB,WAAO,KAAKH,QAAQG,kBAAkB;EACxC;EAEA,IAAaC,UAAoB;AAC/B,WAAO;MACLC;MACAC;MACAC;MACAC;MACAC;SACG,MAAML;;EAEb;EAEA,IAAIM,OAAO;AACT,WAAO,KAAKV,QAAQU,QAAQ;EAC9B;;EAGA,IAAYC,iBAA4B;AACtC,SAAKd,kBAAkB,KAAKC,YAAYc,cAAAA,QAAM,KAAKF,IAAI,EAAER,UAAU,GAAG,KAAKA,SAAS,UAAU;AAC9F,WAAO,KAAKL;EACd;;EAGA,IAAYgB,UAAqB;AAC/B,SAAKf,WAAW,KAAKA,YAAYc,cAAAA,QAAM,KAAKF,IAAI,EAAER,UAAU,KAAKA,SAAS;AAC1E,WAAO,KAAKJ;EACd;;;;;;;;;;;;;;;;;;EAoBmBgB,aAAuC;AACxD,UAAMC,QAAQ,oBAAIC,IAAAA;AAClB,SAAKC,QAAQC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM,EAAE;AAC9D,WAAOC,OAAOC,QAAQ,KAAKR,QAAQS,OAAM,CAAA,EACtCC,IAAI,CAAC,CAAA,EAAGC,KAAAA,MAAWA,KAAAA,EACnBC,OAAO,CAACC,YAAAA;AACP,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACJ;EAEmBE,eAAqC;AACtD,SAAKb,QAAQC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM,EAAE;AAC9D,SAAKN,QAAQkB,MAAK;AAClB,WAAO,KAAKC,KAAK,WAAW;MAAEC,QAAQ;IAAK,CAAA;EAC7C;EAEA,MAAyBC,gBAAyC;AAChE,SAAKjB,QAAQC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM,EAAE;AAC9D,UAAMgB,WAAW,MAAM,KAAKC,IAAG;AAC/BC,gCAASF,SAAShB,SAAS,GAAG,mBAAA;AAC9B,UAAMmB,UAAU,MAAMC,QAAQC,eAC5BC,uBACErB,OAAOsB,QAAQ,MAAM,KAAKC,QAAO,GAAIC,UAAU,CAAA,CAAE,GAAGrB,IAAI,OAAOsB,WAAAA;AAC7D,YAAMC,eAAqC;QACzCC,QAAQvC;MACV;AACA,YAAMwC,QAAQ,MAAM,KAAKC,UAAUH,cAAcX,QAAAA;AACjD,cAAQ,MAAMU,QAAQG,MAAMA,MAAM,CAAA,GAAIA,MAAM,CAAA,CAAE,KAAK,CAAA;IACrD,CAAA,CAAA,CAAA;AAIJ,UAAM,KAAKjB,MAAK;AAChB,eAAOU,uBAAQH,QAAQb,OAAOyB,wBAAAA,EAAW3B,IAAI,CAAC4B,WAAWA,OAAO3B,KAAK,CAAA;EACvE;EAEA,MAAyB4B,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMf,QAAQH,KACrD,MAAM,KAAKmB,IAAIF,MAAAA,GAAS9B,IAAgC,OAAOG,YAAY;MAAC,MAAM8B,0BAAcC,UAAU/B,OAAAA;MAAUA;KAAQ,CAAA;AAE/H,UAAMgC,mBAAoCjB,uBACxC,MAAMF,QAAQH,IACZkB,aAAa/B,IAAmC,CAAC,CAACoC,MAAMjC,OAAAA,MAAQ;AAC9D,WAAKb,QAAQ+C,OAAOD,IAAAA;AACpB,aAAO;QAACA;QAAMjC;;IAChB,CAAA,CAAA,CAAA;AAGJ,WAAOgC,aAAanC,IAAI,CAAC,CAACoC,IAAAA,MAAUA,IAAAA;EACtC;EAEmBE,WAAWR,QAAyC;AACrE,UAAMtC,QAAQ,oBAAIC,IAAAA;AAClB,eAAOyB,uBACLY,OAAO9B,IAAI,CAACoC,SAAAA;AACV,aAAO,KAAK9C,QAAQ0C,IAAII,IAAAA;IAC1B,CAAA,CAAA,EACAlC,OAAO,CAACC,YAAAA;AACR,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACF;EAEA,MAAyBkC,cAAc3B,UAAyC;AAC9E,UAAM4B,QAAQ,MAAMC,sCAAeC,UAAU9B,QAAAA;AAC7C,UAAM+B,iBAAiBH,MAAMxC,IAAI,CAAC,CAACG,SAASiC,IAAAA,MAAK;AAC/C,YAAMnC,QAAQ2C,KAAKC,UAAU1C,OAAAA;AAC7BW,kCAASb,MAAML,SAAS,KAAKlB,cAAc,sBAAsB0D,IAAAA,KAASnC,MAAML,MAAM,GAAG;AACzF,WAAKN,QAAQwD,IAAIV,MAAMjC,OAAAA;AACvB,WAAKb,QAAQwD,IAAI3C,QAAQE,OAAOF,OAAAA;AAChC,aAAOA;IACT,CAAA;AACA,WAAOwC;EACT;EAEUI,cAAc;AACtB,QAAI,KAAKnE,gBAAgB;AACvB,YAAMoE,UAAU,KAAKA;AACrB,WAAKtD,QAAQC,IAAIqD,QAAQC,OAAO;AAChC,WAAK7D,eAAe0D,IAAI,cAAcE,QAAQE,QAAQC,GAAG;IAC3D;EACF;EAEA,MAAyBC,eAAe;AACtC,UAAM,MAAMA,aAAAA;AACZ,SAAKL,YAAW;AAChB,WAAO;EACT;AACF;","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","payloadPairs","get","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -7,7 +7,6 @@ import { compact } from "@xylabs/lodash";
|
|
|
7
7
|
import { fulfilled } from "@xylabs/promise";
|
|
8
8
|
import { AbstractArchivist } from "@xyo-network/archivist-abstract";
|
|
9
9
|
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
|
|
10
|
-
import { PayloadHasher } from "@xyo-network/hash";
|
|
11
10
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
12
11
|
import store from "store2";
|
|
13
12
|
var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
|
|
@@ -106,18 +105,11 @@ var StorageArchivist = class extends AbstractArchivist {
|
|
|
106
105
|
return compact(settled.filter(fulfilled).map((result) => result.value));
|
|
107
106
|
}
|
|
108
107
|
async deleteHandler(hashes) {
|
|
109
|
-
const
|
|
110
|
-
await PayloadHasher.hashAsync(payload),
|
|
111
|
-
payload
|
|
112
|
-
]));
|
|
113
|
-
const deletedPairs = compact(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
108
|
+
const deletedHashes = compact(await Promise.all(hashes.map((hash) => {
|
|
114
109
|
this.storage.remove(hash);
|
|
115
|
-
return
|
|
116
|
-
hash,
|
|
117
|
-
payload
|
|
118
|
-
];
|
|
110
|
+
return hash;
|
|
119
111
|
})));
|
|
120
|
-
return
|
|
112
|
+
return deletedHashes;
|
|
121
113
|
}
|
|
122
114
|
getHandler(hashes) {
|
|
123
115
|
const found = /* @__PURE__ */ new Set();
|
|
@@ -136,7 +128,7 @@ var StorageArchivist = class extends AbstractArchivist {
|
|
|
136
128
|
const pairs = await PayloadBuilder.hashPairs(payloads);
|
|
137
129
|
const resultPayloads = pairs.map(([payload, hash]) => {
|
|
138
130
|
const value = JSON.stringify(payload);
|
|
139
|
-
assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
|
|
131
|
+
assertEx(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`);
|
|
140
132
|
this.storage.set(hash, payload);
|
|
141
133
|
this.storage.set(payload.$hash, payload);
|
|
142
134
|
return payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadBuilder","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","payloadPairs","get","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
|
|
1
|
+
{"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AAEzB,SAASC,eAAe;AACxB,SAASC,iBAA8C;AACvD,SAASC,yBAAyB;AAClC,SACEC,yBACAC,2BACAC,4BAEAC,4BAEAC,kCAIK;AAGP,SAASC,sBAAsB;AAE/B,OAAOC,WAA0B;AAG1B,IAAMC,+BAA6D;AAYnE,IAAMC,mBAAN,cAIGC,kBAAAA;EAxCV,OAwCUA;;;EAGR,OAAgBC,gBAAgB;IAACH;;EAEzBI;EACAC;EAER,IAAIC,aAAa;AACf,WAAO,KAAKC,QAAQD,cAAc;EACpC;EAEA,IAAIE,eAAe;AACjB,WAAO,KAAKD,QAAQC,gBAAgB;EACtC;EAEA,IAAIC,YAAY;AACd,WAAO,KAAKF,QAAQE,aAAa;EACnC;EAEA,IAAIC,iBAAiB;AACnB,WAAO,KAAKH,QAAQG,kBAAkB;EACxC;EAEA,IAAaC,UAAoB;AAC/B,WAAO;MACLC;MACAC;MACAC;MACAC;MACAC;SACG,MAAML;;EAEb;EAEA,IAAIM,OAAO;AACT,WAAO,KAAKV,QAAQU,QAAQ;EAC9B;;EAGA,IAAYC,iBAA4B;AACtC,SAAKd,kBAAkB,KAAKC,YAAYc,MAAM,KAAKF,IAAI,EAAER,UAAU,GAAG,KAAKA,SAAS,UAAU;AAC9F,WAAO,KAAKL;EACd;;EAGA,IAAYgB,UAAqB;AAC/B,SAAKf,WAAW,KAAKA,YAAYc,MAAM,KAAKF,IAAI,EAAER,UAAU,KAAKA,SAAS;AAC1E,WAAO,KAAKJ;EACd;;;;;;;;;;;;;;;;;;EAoBmBgB,aAAuC;AACxD,UAAMC,QAAQ,oBAAIC,IAAAA;AAClB,SAAKC,QAAQC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM,EAAE;AAC9D,WAAOC,OAAOC,QAAQ,KAAKR,QAAQS,OAAM,CAAA,EACtCC,IAAI,CAAC,CAAA,EAAGC,KAAAA,MAAWA,KAAAA,EACnBC,OAAO,CAACC,YAAAA;AACP,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACJ;EAEmBE,eAAqC;AACtD,SAAKb,QAAQC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM,EAAE;AAC9D,SAAKN,QAAQkB,MAAK;AAClB,WAAO,KAAKC,KAAK,WAAW;MAAEC,QAAQ;IAAK,CAAA;EAC7C;EAEA,MAAyBC,gBAAyC;AAChE,SAAKjB,QAAQC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM,EAAE;AAC9D,UAAMgB,WAAW,MAAM,KAAKC,IAAG;AAC/BC,aAASF,SAAShB,SAAS,GAAG,mBAAA;AAC9B,UAAMmB,UAAU,MAAMC,QAAQC,WAC5BC,QACErB,OAAOsB,QAAQ,MAAM,KAAKC,QAAO,GAAIC,UAAU,CAAA,CAAE,GAAGrB,IAAI,OAAOsB,WAAAA;AAC7D,YAAMC,eAAqC;QACzCC,QAAQvC;MACV;AACA,YAAMwC,QAAQ,MAAM,KAAKC,UAAUH,cAAcX,QAAAA;AACjD,cAAQ,MAAMU,QAAQG,MAAMA,MAAM,CAAA,GAAIA,MAAM,CAAA,CAAE,KAAK,CAAA;IACrD,CAAA,CAAA,CAAA;AAIJ,UAAM,KAAKjB,MAAK;AAChB,WAAOU,QAAQH,QAAQb,OAAOyB,SAAAA,EAAW3B,IAAI,CAAC4B,WAAWA,OAAO3B,KAAK,CAAA;EACvE;EAEA,MAAyB4B,cAAcC,QAAiC;AACtE,UAAMC,gBAAgBb,QACpB,MAAMF,QAAQH,IACZiB,OAAO9B,IAAI,CAACgC,SAAAA;AACV,WAAK1C,QAAQ2C,OAAOD,IAAAA;AACpB,aAAOA;IACT,CAAA,CAAA,CAAA;AAGJ,WAAOD;EACT;EAEmBG,WAAWJ,QAAyC;AACrE,UAAMtC,QAAQ,oBAAIC,IAAAA;AAClB,WAAOyB,QACLY,OAAO9B,IAAI,CAACgC,SAAAA;AACV,aAAO,KAAK1C,QAAQ6C,IAAIH,IAAAA;IAC1B,CAAA,CAAA,EACA9B,OAAO,CAACC,YAAAA;AACR,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACF;EAEA,MAAyB+B,cAAcxB,UAAyC;AAC9E,UAAMyB,QAAQ,MAAMC,eAAeC,UAAU3B,QAAAA;AAC7C,UAAM4B,iBAAiBH,MAAMrC,IAAI,CAAC,CAACG,SAAS6B,IAAAA,MAAK;AAC/C,YAAM/B,QAAQwC,KAAKC,UAAUvC,OAAAA;AAC7BW,eAASb,MAAML,SAAS,KAAKlB,cAAc,MAAM,sBAAsBsD,IAAAA,KAAS/B,MAAML,MAAM,GAAG;AAC/F,WAAKN,QAAQqD,IAAIX,MAAM7B,OAAAA;AACvB,WAAKb,QAAQqD,IAAIxC,QAAQE,OAAOF,OAAAA;AAChC,aAAOA;IACT,CAAA;AACA,WAAOqC;EACT;EAEUI,cAAc;AACtB,QAAI,KAAKhE,gBAAgB;AACvB,YAAMiE,UAAU,KAAKA;AACrB,WAAKnD,QAAQC,IAAIkD,QAAQC,OAAO;AAChC,WAAK1D,eAAeuD,IAAI,cAAcE,QAAQE,QAAQC,GAAG;IAC3D;EACF;EAEA,MAAyBC,eAAe;AACtC,UAAM,MAAMA,aAAAA;AACZ,SAAKL,YAAW;AAChB,WAAO;EACT;AACF;","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadBuilder","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
|
|
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
|
|
|
30
31
|
protected allHandler(): PromisableArray<Payload>;
|
|
31
32
|
protected clearHandler(): void | Promise<void>;
|
|
32
33
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
33
|
-
protected deleteHandler(hashes:
|
|
34
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
34
35
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
35
36
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
36
37
|
protected saveAccount(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
|
|
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
|
|
|
30
31
|
protected allHandler(): PromisableArray<Payload>;
|
|
31
32
|
protected clearHandler(): void | Promise<void>;
|
|
32
33
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
33
|
-
protected deleteHandler(hashes:
|
|
34
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
34
35
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
35
36
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
36
37
|
protected saveAccount(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistParams } from '@xyo-network/archivist-model';
|
|
@@ -30,7 +31,7 @@ export declare class StorageArchivist<TParams extends StorageArchivistParams = S
|
|
|
30
31
|
protected allHandler(): PromisableArray<Payload>;
|
|
31
32
|
protected clearHandler(): void | Promise<void>;
|
|
32
33
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
33
|
-
protected deleteHandler(hashes:
|
|
34
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
34
35
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
35
36
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
36
37
|
protected saveAccount(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageArchivist.d.ts","sourceRoot":"","sources":["../../src/StorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,4BAA4B,GAAG,sCAAsC,CAAA;AACjF,eAAO,MAAM,4BAA4B,EAAE,4BAAqE,CAAA;AAEhH,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,4BAA4B,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CACpC,CAAC,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC7F,qBAAa,gBAAgB,CACzB,OAAO,SAAS,sBAAsB,GAAG,sBAAsB,EAC/D,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB;IAE5B,OAAgB,aAAa,2CAAiC;IAE9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,UAAU,WAEb;IAED,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,YAEjB;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAS/B;IAED,IAAI,IAAI,iCAEP;IAGD,OAAO,KAAK,cAAc,GAGzB;IAGD,OAAO,KAAK,OAAO,GAGlB;cAoBkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAetC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAoBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAYpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAgB7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY/E,SAAS,CAAC,WAAW;cAQI,YAAY;CAKtC"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -47,7 +47,6 @@ var import_lodash = require("@xylabs/lodash");
|
|
|
47
47
|
var import_promise = require("@xylabs/promise");
|
|
48
48
|
var import_archivist_abstract = require("@xyo-network/archivist-abstract");
|
|
49
49
|
var import_archivist_model = require("@xyo-network/archivist-model");
|
|
50
|
-
var import_hash = require("@xyo-network/hash");
|
|
51
50
|
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
52
51
|
var import_store2 = __toESM(require("store2"), 1);
|
|
53
52
|
var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
|
|
@@ -149,18 +148,11 @@ var _StorageArchivist = class _StorageArchivist extends import_archivist_abstrac
|
|
|
149
148
|
return (0, import_lodash.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
|
|
150
149
|
}
|
|
151
150
|
async deleteHandler(hashes) {
|
|
152
|
-
const
|
|
153
|
-
await import_hash.PayloadHasher.hashAsync(payload),
|
|
154
|
-
payload
|
|
155
|
-
]));
|
|
156
|
-
const deletedPairs = (0, import_lodash.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
151
|
+
const deletedHashes = (0, import_lodash.compact)(await Promise.all(hashes.map((hash) => {
|
|
157
152
|
this.storage.remove(hash);
|
|
158
|
-
return
|
|
159
|
-
hash,
|
|
160
|
-
payload
|
|
161
|
-
];
|
|
153
|
+
return hash;
|
|
162
154
|
})));
|
|
163
|
-
return
|
|
155
|
+
return deletedHashes;
|
|
164
156
|
}
|
|
165
157
|
getHandler(hashes) {
|
|
166
158
|
const found = /* @__PURE__ */ new Set();
|
|
@@ -179,7 +171,7 @@ var _StorageArchivist = class _StorageArchivist extends import_archivist_abstrac
|
|
|
179
171
|
const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
|
|
180
172
|
const resultPayloads = pairs.map(([payload, hash]) => {
|
|
181
173
|
const value = JSON.stringify(payload);
|
|
182
|
-
(0, import_assert.assertEx)(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
|
|
174
|
+
(0, import_assert.assertEx)(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`);
|
|
183
175
|
this.storage.set(hash, payload);
|
|
184
176
|
this.storage.set(payload.$hash, payload);
|
|
185
177
|
return payload;
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,oBAAyB;AACzB,oBAAwB;AACxB,qBAAuD;AACvD,gCAAkC;AAClC,6BAWO;AAEP,kBAA8B;AAE9B,6BAA+B;AAE/B,oBAAiC;AAG1B,IAAMA,+BAA6D;AAYnE,IAAMC,oBAAN,MAAMA,0BAIHC,4CAAAA;EAKAC;EACAC;EAER,IAAIC,aAAa;AAhDnB;AAiDI,aAAO,UAAKC,WAAL,mBAAaD,eAAc;EACpC;EAEA,IAAIE,eAAe;AApDrB;AAqDI,aAAO,UAAKD,WAAL,mBAAaC,iBAAgB;EACtC;EAEA,IAAIC,YAAY;AAxDlB;AAyDI,aAAO,UAAKF,WAAL,mBAAaE,cAAa;EACnC;EAEA,IAAIC,iBAAiB;AA5DvB;AA6DI,aAAO,UAAKH,WAAL,mBAAaG,mBAAkB;EACxC;EAEA,IAAaC,UAAoB;AAC/B,WAAO;MACLC;MACAC;MACAC;MACAC;MACAC;SACG,MAAML;;EAEb;EAEA,IAAIM,OAAO;AA3Eb;AA4EI,aAAO,UAAKV,WAAL,mBAAaU,SAAQ;EAC9B;;EAGA,IAAYC,iBAA4B;AACtC,SAAKd,kBAAkB,KAAKC,YAAYc,cAAAA,QAAM,KAAKF,IAAI,EAAER,UAAU,GAAG,KAAKA,SAAS,UAAU;AAC9F,WAAO,KAAKL;EACd;;EAGA,IAAYgB,UAAqB;AAC/B,SAAKf,WAAW,KAAKA,YAAYc,cAAAA,QAAM,KAAKF,IAAI,EAAER,UAAU,KAAKA,SAAS;AAC1E,WAAO,KAAKJ;EACd;;;;;;;;;;;;;;;;;;EAoBmBgB,aAAuC;AA7G5D;AA8GI,UAAMC,QAAQ,oBAAIC,IAAAA;AAClB,eAAKC,WAAL,mBAAaC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM;AAC5D,WAAOC,OAAOC,QAAQ,KAAKR,QAAQS,OAAM,CAAA,EACtCC,IAAI,CAAC,CAAA,EAAGC,KAAAA,MAAWA,KAAAA,EACnBC,OAAO,CAACC,YAAAA;AACP,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACJ;EAEmBE,eAAqC;AA5H1D;AA6HI,eAAKb,WAAL,mBAAaC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM;AAC5D,SAAKN,QAAQkB,MAAK;AAClB,WAAO,KAAKC,KAAK,WAAW;MAAEC,QAAQ;IAAK,CAAA;EAC7C;EAEA,MAAyBC,gBAAyC;AAlIpE;AAmII,eAAKjB,WAAL,mBAAaC,IAAI,wBAAwB,KAAKL,QAAQM,MAAM;AAC5D,UAAMgB,WAAW,MAAM,KAAKC,IAAG;AAC/BC,gCAASF,SAAShB,SAAS,GAAG,mBAAA;AAC9B,UAAMmB,UAAU,MAAMC,QAAQC,eAC5BC,wBACErB,YAAOsB,QAAQ,MAAM,KAAKC,QAAO,GAAIC,UAAU,CAAA,CAAE,MAAjDxB,mBAAoDG,IAAI,OAAOsB,WAAAA;AAxIvE,UAAAC;AAyIU,YAAMC,eAAqC;QACzCC,QAAQxC;MACV;AACA,YAAMyC,QAAQ,MAAM,KAAKC,UAAUH,cAAcZ,QAAAA;AACjD,cAAQW,MAAA,OAAMD,iCAAQI,MAAMA,MAAM,CAAA,GAAIA,MAAM,CAAA,QAApC,gBAAAH,IAA2C;IACrD,EAAA,CAAA;AAIJ,UAAM,KAAKf,MAAK;AAChB,eAAOU,uBAAQH,QAAQb,OAAO0B,wBAAAA,EAAW5B,IAAI,CAAC6B,WAAWA,OAAO5B,KAAK,CAAA;EACvE;EAEA,MAAyB6B,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMhB,QAAQH,KACrD,MAAM,KAAKoB,IAAIF,MAAAA,GAAS/B,IAAgC,OAAOG,YAAY;MAAC,MAAM+B,0BAAcC,UAAUhC,OAAAA;MAAUA;KAAQ,CAAA;AAE/H,UAAMiC,mBAAoClB,uBACxC,MAAMF,QAAQH,IACZmB,aAAahC,IAAmC,CAAC,CAACqC,MAAMlC,OAAAA,MAAQ;AAC9D,WAAKb,QAAQgD,OAAOD,IAAAA;AACpB,aAAO;QAACA;QAAMlC;;IAChB,CAAA,CAAA,CAAA;AAGJ,WAAOiC,aAAapC,IAAI,CAAC,CAACqC,IAAAA,MAAUA,IAAAA;EACtC;EAEmBE,WAAWR,QAAyC;AACrE,UAAMvC,QAAQ,oBAAIC,IAAAA;AAClB,eAAOyB,uBACLa,OAAO/B,IAAI,CAACqC,SAAAA;AACV,aAAO,KAAK/C,QAAQ2C,IAAII,IAAAA;IAC1B,CAAA,CAAA,EACAnC,OAAO,CAACC,YAAAA;AACR,UAAIX,MAAMY,IAAID,QAAQE,KAAK,GAAG;AAC5B,eAAO;MACT,OAAO;AACLb,cAAMc,IAAIH,QAAQE,KAAK;AACvB,eAAO;MACT;IACF,CAAA;EACF;EAEA,MAAyBmC,cAAc5B,UAAyC;AAC9E,UAAM6B,QAAQ,MAAMC,sCAAeC,UAAU/B,QAAAA;AAC7C,UAAMgC,iBAAiBH,MAAMzC,IAAI,CAAC,CAACG,SAASkC,IAAAA,MAAK;AAC/C,YAAMpC,QAAQ4C,KAAKC,UAAU3C,OAAAA;AAC7BW,kCAASb,MAAML,SAAS,KAAKlB,cAAc,sBAAsB2D,IAAAA,KAASpC,MAAML,MAAM,GAAG;AACzF,WAAKN,QAAQyD,IAAIV,MAAMlC,OAAAA;AACvB,WAAKb,QAAQyD,IAAI5C,QAAQE,OAAOF,OAAAA;AAChC,aAAOA;IACT,CAAA;AACA,WAAOyC;EACT;EAEUI,cAAc;AAjM1B;AAkMI,QAAI,KAAKpE,gBAAgB;AACvB,YAAMqE,UAAU,KAAKA;AACrB,iBAAKvD,WAAL,mBAAaC,IAAIsD,QAAQC;AACzB,WAAK9D,eAAe2D,IAAI,cAAcE,QAAQE,QAAQC,GAAG;IAC3D;EACF;EAEA,MAAyBC,eAAe;AACtC,UAAM,MAAMA,aAAAA;AACZ,SAAKL,YAAW;AAChB,WAAO;EACT;AACF;AAtKU3E;AAGR,cAPWD,mBAOKkF,iBAAgB;EAACnF;;AAP5B,IAAMC,mBAAN;","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","payloadPairs","get","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './StorageArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
|
package/dist/node/index.js
CHANGED
|
@@ -12,7 +12,6 @@ import { compact } from "@xylabs/lodash";
|
|
|
12
12
|
import { fulfilled } from "@xylabs/promise";
|
|
13
13
|
import { AbstractArchivist } from "@xyo-network/archivist-abstract";
|
|
14
14
|
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
|
|
15
|
-
import { PayloadHasher } from "@xyo-network/hash";
|
|
16
15
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
17
16
|
import store from "store2";
|
|
18
17
|
var StorageArchivistConfigSchema = "network.xyo.archivist.storage.config";
|
|
@@ -114,18 +113,11 @@ var _StorageArchivist = class _StorageArchivist extends AbstractArchivist {
|
|
|
114
113
|
return compact(settled.filter(fulfilled).map((result) => result.value));
|
|
115
114
|
}
|
|
116
115
|
async deleteHandler(hashes) {
|
|
117
|
-
const
|
|
118
|
-
await PayloadHasher.hashAsync(payload),
|
|
119
|
-
payload
|
|
120
|
-
]));
|
|
121
|
-
const deletedPairs = compact(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
116
|
+
const deletedHashes = compact(await Promise.all(hashes.map((hash) => {
|
|
122
117
|
this.storage.remove(hash);
|
|
123
|
-
return
|
|
124
|
-
hash,
|
|
125
|
-
payload
|
|
126
|
-
];
|
|
118
|
+
return hash;
|
|
127
119
|
})));
|
|
128
|
-
return
|
|
120
|
+
return deletedHashes;
|
|
129
121
|
}
|
|
130
122
|
getHandler(hashes) {
|
|
131
123
|
const found = /* @__PURE__ */ new Set();
|
|
@@ -144,7 +136,7 @@ var _StorageArchivist = class _StorageArchivist extends AbstractArchivist {
|
|
|
144
136
|
const pairs = await PayloadBuilder.hashPairs(payloads);
|
|
145
137
|
const resultPayloads = pairs.map(([payload, hash]) => {
|
|
146
138
|
const value = JSON.stringify(payload);
|
|
147
|
-
assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`);
|
|
139
|
+
assertEx(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`);
|
|
148
140
|
this.storage.set(hash, payload);
|
|
149
141
|
this.storage.set(payload.$hash, payload);
|
|
150
142
|
return payload;
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadBuilder","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","payloadPairs","get","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
|
|
1
|
+
{"version":3,"sources":["../../src/StorageArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport store, { StoreBase } from 'store2'\n\nexport type StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\nexport const StorageArchivistConfigSchema: StorageArchivistConfigSchema = 'network.xyo.archivist.storage.config'\n\nexport type StorageArchivistConfig = ArchivistConfig<{\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n persistAccount?: boolean\n schema: StorageArchivistConfigSchema\n type?: 'local' | 'session' | 'page'\n}>\n\nexport type StorageArchivistParams = ArchivistParams<AnyConfigSchema<StorageArchivistConfig>>\nexport class StorageArchivist<\n TParams extends StorageArchivistParams = StorageArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance\n{\n static override configSchemas = [StorageArchivistConfigSchema]\n\n private _privateStorage: StoreBase | undefined\n private _storage: StoreBase | undefined\n\n get maxEntries() {\n return this.config?.maxEntries ?? 1000\n }\n\n get maxEntrySize() {\n return this.config?.maxEntrySize ?? 16_000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n const found = new Set<string>()\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll())\n .map(([, value]) => value)\n .filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n this.storage.remove(hash)\n return hash\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n const found = new Set<string>()\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n ).filter((payload) => {\n if (found.has(payload.$hash)) {\n return false\n } else {\n found.add(payload.$hash)\n return true\n }\n })\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const resultPayloads = pairs.map(([payload, hash]) => {\n const value = JSON.stringify(payload)\n assertEx(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, payload)\n this.storage.set(payload.$hash, payload)\n return payload\n })\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadBuilder","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","found","Set","logger","log","length","Object","entries","getAll","map","value","filter","payload","has","$hash","add","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","_a","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","remove","getHandler","get","insertHandler","pairs","PayloadBuilder","hashPairs","resultPayloads","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler","configSchemas"]}
|
package/package.json
CHANGED
|
@@ -10,27 +10,28 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xylabs/assert": "^2.
|
|
14
|
-
"@xylabs/
|
|
15
|
-
"@xylabs/
|
|
16
|
-
"@
|
|
17
|
-
"@xyo-network/archivist-
|
|
18
|
-
"@xyo-network/
|
|
19
|
-
"@xyo-network/
|
|
20
|
-
"@xyo-network/module-model": "~2.89.0-rc.
|
|
21
|
-
"@xyo-network/payload-builder": "~2.89.0-rc.
|
|
22
|
-
"@xyo-network/payload-model": "~2.89.0-rc.
|
|
13
|
+
"@xylabs/assert": "^2.14.0",
|
|
14
|
+
"@xylabs/hex": "^2.14.0",
|
|
15
|
+
"@xylabs/lodash": "^2.14.0",
|
|
16
|
+
"@xylabs/promise": "^2.14.0",
|
|
17
|
+
"@xyo-network/archivist-abstract": "~2.89.0-rc.11",
|
|
18
|
+
"@xyo-network/archivist-model": "~2.89.0-rc.11",
|
|
19
|
+
"@xyo-network/boundwitness-model": "~2.89.0-rc.11",
|
|
20
|
+
"@xyo-network/module-model": "~2.89.0-rc.11",
|
|
21
|
+
"@xyo-network/payload-builder": "~2.89.0-rc.11",
|
|
22
|
+
"@xyo-network/payload-model": "~2.89.0-rc.11",
|
|
23
23
|
"store2": "^2.14.2"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@xylabs/delay": "^2.
|
|
26
|
+
"@xylabs/delay": "^2.14.0",
|
|
27
27
|
"@xylabs/ts-scripts-yarn3": "^3.2.42",
|
|
28
28
|
"@xylabs/tsconfig": "^3.2.42",
|
|
29
|
-
"@xyo-network/account": "~2.89.0-rc.
|
|
30
|
-
"@xyo-network/archivist-memory": "~2.89.0-rc.
|
|
31
|
-
"@xyo-network/boundwitness-builder": "~2.89.0-rc.
|
|
32
|
-
"@xyo-network/id-payload-plugin": "~2.89.0-rc.
|
|
33
|
-
"@xyo-network/node-memory": "~2.89.0-rc.
|
|
29
|
+
"@xyo-network/account": "~2.89.0-rc.11",
|
|
30
|
+
"@xyo-network/archivist-memory": "~2.89.0-rc.11",
|
|
31
|
+
"@xyo-network/boundwitness-builder": "~2.89.0-rc.11",
|
|
32
|
+
"@xyo-network/id-payload-plugin": "~2.89.0-rc.11",
|
|
33
|
+
"@xyo-network/node-memory": "~2.89.0-rc.11",
|
|
34
|
+
"@xyo-network/payload-wrapper": "~2.89.0-rc.11",
|
|
34
35
|
"typescript": "^5.3.3"
|
|
35
36
|
},
|
|
36
37
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
@@ -72,7 +73,7 @@
|
|
|
72
73
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
73
74
|
},
|
|
74
75
|
"sideEffects": false,
|
|
75
|
-
"version": "2.89.0-rc.
|
|
76
|
+
"version": "2.89.0-rc.11",
|
|
76
77
|
"type": "module",
|
|
77
78
|
"stableVersion": "2.88.3"
|
|
78
79
|
}
|
package/src/StorageArchivist.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { Hash } from '@xylabs/hex'
|
|
2
3
|
import { compact } from '@xylabs/lodash'
|
|
3
4
|
import { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'
|
|
4
5
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract'
|
|
@@ -15,7 +16,6 @@ import {
|
|
|
15
16
|
ArchivistParams,
|
|
16
17
|
} from '@xyo-network/archivist-model'
|
|
17
18
|
import { BoundWitness } from '@xyo-network/boundwitness-model'
|
|
18
|
-
import { PayloadHasher } from '@xyo-network/hash'
|
|
19
19
|
import { AnyConfigSchema } from '@xyo-network/module-model'
|
|
20
20
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
21
21
|
import { Payload } from '@xyo-network/payload-model'
|
|
@@ -148,19 +148,16 @@ export class StorageArchivist<
|
|
|
148
148
|
return compact(settled.filter(fulfilled).map((result) => result.value))
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
protected override async deleteHandler(hashes:
|
|
152
|
-
const
|
|
153
|
-
(await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),
|
|
154
|
-
)
|
|
155
|
-
const deletedPairs: [string, Payload][] = compact(
|
|
151
|
+
protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {
|
|
152
|
+
const deletedHashes = compact(
|
|
156
153
|
await Promise.all(
|
|
157
|
-
|
|
154
|
+
hashes.map((hash) => {
|
|
158
155
|
this.storage.remove(hash)
|
|
159
|
-
return
|
|
156
|
+
return hash
|
|
160
157
|
}),
|
|
161
158
|
),
|
|
162
159
|
)
|
|
163
|
-
return
|
|
160
|
+
return deletedHashes
|
|
164
161
|
}
|
|
165
162
|
|
|
166
163
|
protected override getHandler(hashes: string[]): Promisable<Payload[]> {
|
|
@@ -183,7 +180,7 @@ export class StorageArchivist<
|
|
|
183
180
|
const pairs = await PayloadBuilder.hashPairs(payloads)
|
|
184
181
|
const resultPayloads = pairs.map(([payload, hash]) => {
|
|
185
182
|
const value = JSON.stringify(payload)
|
|
186
|
-
assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)
|
|
183
|
+
assertEx(value.length < this.maxEntrySize, () => `Payload too large [${hash}, ${value.length}]`)
|
|
187
184
|
this.storage.set(hash, payload)
|
|
188
185
|
this.storage.set(payload.$hash, payload)
|
|
189
186
|
return payload
|