@xyo-network/archivist 2.75.13 → 2.75.15

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.
Files changed (65) hide show
  1. package/dist/browser/AbstractArchivingModule.cjs +2 -22
  2. package/dist/browser/AbstractArchivingModule.cjs.map +1 -1
  3. package/dist/browser/AbstractArchivingModule.d.cts +6 -9
  4. package/dist/browser/AbstractArchivingModule.d.cts.map +1 -1
  5. package/dist/browser/AbstractArchivingModule.d.mts +6 -9
  6. package/dist/browser/AbstractArchivingModule.d.mts.map +1 -1
  7. package/dist/browser/AbstractArchivingModule.d.ts +6 -9
  8. package/dist/browser/AbstractArchivingModule.d.ts.map +1 -1
  9. package/dist/browser/AbstractArchivingModule.js +1 -21
  10. package/dist/browser/AbstractArchivingModule.js.map +1 -1
  11. package/dist/browser/CookieArchivist.cjs.map +1 -1
  12. package/dist/browser/CookieArchivist.d.cts +1 -1
  13. package/dist/browser/CookieArchivist.d.cts.map +1 -1
  14. package/dist/browser/CookieArchivist.d.mts +1 -1
  15. package/dist/browser/CookieArchivist.d.mts.map +1 -1
  16. package/dist/browser/CookieArchivist.d.ts +1 -1
  17. package/dist/browser/CookieArchivist.d.ts.map +1 -1
  18. package/dist/browser/CookieArchivist.js.map +1 -1
  19. package/dist/browser/StorageArchivist.cjs.map +1 -1
  20. package/dist/browser/StorageArchivist.d.cts +1 -1
  21. package/dist/browser/StorageArchivist.d.cts.map +1 -1
  22. package/dist/browser/StorageArchivist.d.mts +1 -1
  23. package/dist/browser/StorageArchivist.d.mts.map +1 -1
  24. package/dist/browser/StorageArchivist.d.ts +1 -1
  25. package/dist/browser/StorageArchivist.d.ts.map +1 -1
  26. package/dist/browser/StorageArchivist.js.map +1 -1
  27. package/dist/browser/index.cjs +26 -46
  28. package/dist/browser/index.cjs.map +1 -1
  29. package/dist/browser/index.js +11 -31
  30. package/dist/browser/index.js.map +1 -1
  31. package/dist/docs.json +11164 -9526
  32. package/dist/node/AbstractArchivingModule.d.cts +6 -9
  33. package/dist/node/AbstractArchivingModule.d.cts.map +1 -1
  34. package/dist/node/AbstractArchivingModule.d.mts +6 -9
  35. package/dist/node/AbstractArchivingModule.d.mts.map +1 -1
  36. package/dist/node/AbstractArchivingModule.d.ts +6 -9
  37. package/dist/node/AbstractArchivingModule.d.ts.map +1 -1
  38. package/dist/node/AbstractArchivingModule.js +2 -23
  39. package/dist/node/AbstractArchivingModule.js.map +1 -1
  40. package/dist/node/AbstractArchivingModule.mjs +1 -22
  41. package/dist/node/AbstractArchivingModule.mjs.map +1 -1
  42. package/dist/node/CookieArchivist.d.cts +1 -1
  43. package/dist/node/CookieArchivist.d.cts.map +1 -1
  44. package/dist/node/CookieArchivist.d.mts +1 -1
  45. package/dist/node/CookieArchivist.d.mts.map +1 -1
  46. package/dist/node/CookieArchivist.d.ts +1 -1
  47. package/dist/node/CookieArchivist.d.ts.map +1 -1
  48. package/dist/node/CookieArchivist.js.map +1 -1
  49. package/dist/node/CookieArchivist.mjs.map +1 -1
  50. package/dist/node/StorageArchivist.d.cts +1 -1
  51. package/dist/node/StorageArchivist.d.cts.map +1 -1
  52. package/dist/node/StorageArchivist.d.mts +1 -1
  53. package/dist/node/StorageArchivist.d.mts.map +1 -1
  54. package/dist/node/StorageArchivist.d.ts +1 -1
  55. package/dist/node/StorageArchivist.d.ts.map +1 -1
  56. package/dist/node/StorageArchivist.js.map +1 -1
  57. package/dist/node/StorageArchivist.mjs.map +1 -1
  58. package/dist/node/index.js +26 -47
  59. package/dist/node/index.js.map +1 -1
  60. package/dist/node/index.mjs +11 -32
  61. package/dist/node/index.mjs.map +1 -1
  62. package/package.json +20 -20
  63. package/src/AbstractArchivingModule.ts +8 -39
  64. package/src/CookieArchivist.ts +1 -1
  65. package/src/StorageArchivist.ts +1 -1
@@ -41,39 +41,19 @@ __export(src_exports, {
41
41
  module.exports = __toCommonJS(src_exports);
42
42
 
43
43
  // src/AbstractArchivingModule.ts
44
- var import_lodash = require("@xylabs/lodash");
45
- var import_archivist_model = require("@xyo-network/archivist-model");
46
- var import_module = require("@xyo-network/module");
47
- var AbstractArchivingModule = class extends import_module.AbstractModuleInstance {
44
+ var import_module_abstract = require("@xyo-network/module-abstract");
45
+ var AbstractArchivingModule = class extends import_module_abstract.AbstractModuleInstance {
48
46
  static {
49
47
  __name(this, "AbstractArchivingModule");
50
48
  }
51
- async bindQueryResult(query, payloads, additionalWitnesses = [], errorPayloads = []) {
52
- const result = await super.bindQueryResult(query, payloads, additionalWitnesses, errorPayloads);
53
- await this.storeToArchivists(result.flat());
54
- return result;
55
- }
56
- async resolveArchivists() {
57
- const archivists = this.config.archivists;
58
- if (!archivists)
59
- return [];
60
- const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
61
- return (0, import_lodash.compact)(resolved.map((mod) => (0, import_archivist_model.asArchivistInstance)(mod)));
62
- }
63
- async storeToArchivists(payloads) {
64
- const archivists = await this.resolveArchivists();
65
- return (await Promise.all(archivists.map((archivist) => {
66
- return archivist.insert?.(payloads);
67
- }))).map(([bw]) => bw);
68
- }
69
49
  };
70
50
 
71
51
  // src/CookieArchivist.ts
72
52
  var import_assert = require("@xylabs/assert");
73
- var import_lodash2 = require("@xylabs/lodash");
53
+ var import_lodash = require("@xylabs/lodash");
74
54
  var import_promise = require("@xylabs/promise");
75
55
  var import_archivist_abstract = require("@xyo-network/archivist-abstract");
76
- var import_archivist_model2 = require("@xyo-network/archivist-model");
56
+ var import_archivist_model = require("@xyo-network/archivist-model");
77
57
  var import_core = require("@xyo-network/core");
78
58
  var import_payload_wrapper = require("@xyo-network/payload-wrapper");
79
59
  var import_js_cookie = __toESM(require("js-cookie"));
@@ -99,11 +79,11 @@ var CookieArchivist = class extends import_archivist_abstract.AbstractArchivist
99
79
  }
100
80
  get queries() {
101
81
  return [
102
- import_archivist_model2.ArchivistAllQuerySchema,
103
- import_archivist_model2.ArchivistDeleteQuerySchema,
104
- import_archivist_model2.ArchivistClearQuerySchema,
105
- import_archivist_model2.ArchivistInsertQuerySchema,
106
- import_archivist_model2.ArchivistCommitQuerySchema,
82
+ import_archivist_model.ArchivistAllQuerySchema,
83
+ import_archivist_model.ArchivistDeleteQuerySchema,
84
+ import_archivist_model.ArchivistClearQuerySchema,
85
+ import_archivist_model.ArchivistInsertQuerySchema,
86
+ import_archivist_model.ArchivistCommitQuerySchema,
107
87
  ...super.queries
108
88
  ];
109
89
  }
@@ -131,15 +111,15 @@ var CookieArchivist = class extends import_archivist_abstract.AbstractArchivist
131
111
  try {
132
112
  const payloads = await this.all();
133
113
  (0, import_assert.assertEx)(payloads.length > 0, "Nothing to commit");
134
- const settled = await Promise.allSettled((0, import_lodash2.compact)(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
114
+ const settled = await Promise.allSettled((0, import_lodash.compact)(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
135
115
  const queryPayload = {
136
- schema: import_archivist_model2.ArchivistInsertQuerySchema
116
+ schema: import_archivist_model.ArchivistInsertQuerySchema
137
117
  };
138
118
  const query = await this.bindQuery(queryPayload, payloads);
139
119
  return (await parent?.query(query[0], query[1]))?.[0];
140
120
  })));
141
121
  await this.clear();
142
- return (0, import_lodash2.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
122
+ return (0, import_lodash.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
143
123
  } catch (ex) {
144
124
  console.error(`Error: ${JSON.stringify(ex, null, 2)}`);
145
125
  throw ex;
@@ -150,7 +130,7 @@ var CookieArchivist = class extends import_archivist_abstract.AbstractArchivist
150
130
  await import_core.PayloadHasher.hashAsync(payload),
151
131
  payload
152
132
  ]));
153
- const deletedPairs = (0, import_lodash2.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
133
+ const deletedPairs = (0, import_lodash.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
154
134
  import_js_cookie.default.remove(hash);
155
135
  return [
156
136
  hash,
@@ -160,7 +140,7 @@ var CookieArchivist = class extends import_archivist_abstract.AbstractArchivist
160
140
  return deletedPairs.map(([hash]) => hash);
161
141
  }
162
142
  getHandler(hashes) {
163
- return (0, import_lodash2.compact)(hashes.map((hash) => {
143
+ return (0, import_lodash.compact)(hashes.map((hash) => {
164
144
  const cookieString = import_js_cookie.default.get(this.keyFromHash(hash));
165
145
  return cookieString ? JSON.parse(cookieString) : void 0;
166
146
  }));
@@ -188,10 +168,10 @@ var CookieArchivist = class extends import_archivist_abstract.AbstractArchivist
188
168
 
189
169
  // src/StorageArchivist.ts
190
170
  var import_assert2 = require("@xylabs/assert");
191
- var import_lodash3 = require("@xylabs/lodash");
171
+ var import_lodash2 = require("@xylabs/lodash");
192
172
  var import_promise2 = require("@xylabs/promise");
193
173
  var import_archivist_abstract2 = require("@xyo-network/archivist-abstract");
194
- var import_archivist_model3 = require("@xyo-network/archivist-model");
174
+ var import_archivist_model2 = require("@xyo-network/archivist-model");
195
175
  var import_core2 = require("@xyo-network/core");
196
176
  var import_payload_wrapper2 = require("@xyo-network/payload-wrapper");
197
177
  var import_store2 = __toESM(require("store2"));
@@ -219,11 +199,11 @@ var StorageArchivist = class extends import_archivist_abstract2.AbstractArchivis
219
199
  }
220
200
  get queries() {
221
201
  return [
222
- import_archivist_model3.ArchivistAllQuerySchema,
223
- import_archivist_model3.ArchivistDeleteQuerySchema,
224
- import_archivist_model3.ArchivistClearQuerySchema,
225
- import_archivist_model3.ArchivistInsertQuerySchema,
226
- import_archivist_model3.ArchivistCommitQuerySchema,
202
+ import_archivist_model2.ArchivistAllQuerySchema,
203
+ import_archivist_model2.ArchivistDeleteQuerySchema,
204
+ import_archivist_model2.ArchivistClearQuerySchema,
205
+ import_archivist_model2.ArchivistInsertQuerySchema,
206
+ import_archivist_model2.ArchivistCommitQuerySchema,
227
207
  ...super.queries
228
208
  ];
229
209
  }
@@ -272,22 +252,22 @@ var StorageArchivist = class extends import_archivist_abstract2.AbstractArchivis
272
252
  this.logger?.log(`this.storage.length: ${this.storage.length}`);
273
253
  const payloads = await this.all();
274
254
  (0, import_assert2.assertEx)(payloads.length > 0, "Nothing to commit");
275
- const settled = await Promise.allSettled((0, import_lodash3.compact)(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
255
+ const settled = await Promise.allSettled((0, import_lodash2.compact)(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
276
256
  const queryPayload = {
277
- schema: import_archivist_model3.ArchivistInsertQuerySchema
257
+ schema: import_archivist_model2.ArchivistInsertQuerySchema
278
258
  };
279
259
  const query = await this.bindQuery(queryPayload, payloads);
280
260
  return (await parent?.query(query[0], query[1]))?.[0];
281
261
  })));
282
262
  await this.clear();
283
- return (0, import_lodash3.compact)(settled.filter(import_promise2.fulfilled).map((result) => result.value));
263
+ return (0, import_lodash2.compact)(settled.filter(import_promise2.fulfilled).map((result) => result.value));
284
264
  }
285
265
  async deleteHandler(hashes) {
286
266
  const payloadPairs = await Promise.all((await this.get(hashes)).map(async (payload) => [
287
267
  await import_core2.PayloadHasher.hashAsync(payload),
288
268
  payload
289
269
  ]));
290
- const deletedPairs = (0, import_lodash3.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
270
+ const deletedPairs = (0, import_lodash2.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
291
271
  this.storage.remove(hash);
292
272
  return [
293
273
  hash,
@@ -297,7 +277,7 @@ var StorageArchivist = class extends import_archivist_abstract2.AbstractArchivis
297
277
  return deletedPairs.map(([hash]) => hash);
298
278
  }
299
279
  getHandler(hashes) {
300
- return (0, import_lodash3.compact)(hashes.map((hash) => {
280
+ return (0, import_lodash2.compact)(hashes.map((hash) => {
301
281
  return this.storage.get(hash);
302
282
  }));
303
283
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractArchivingModule.ts","../../src/CookieArchivist.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './AbstractArchivingModule'\nexport * from './CookieArchivist'\nexport * from './StorageArchivist'\nexport * from '@xyo-network/archivist-abstract'\nexport * from '@xyo-network/archivist-model'\nexport * from '@xyo-network/archivist-wrapper'\nexport * from '@xyo-network/memory-archivist'\n","import { compact } from '@xylabs/lodash'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractModuleInstance, AnyConfigSchema, Module, ModuleConfig, ModuleEventData, ModuleParams, ModuleQueryResult } from '@xyo-network/module'\nimport { ModuleError, Payload, Query } from '@xyo-network/payload-model'\n\nexport type ArchivingModuleConfig<T extends ModuleConfig = ModuleConfig> = ModuleConfig<\n {\n archivists?: string[]\n schema: string\n } & T\n>\n// @creatableModule()\nexport abstract class AbstractArchivingModule<\n TParams extends ModuleParams<AnyConfigSchema<ArchivingModuleConfig>> = ModuleParams<AnyConfigSchema<ArchivingModuleConfig>>,\n TEventData extends ModuleEventData = ModuleEventData,\n >\n extends AbstractModuleInstance<TParams, TEventData>\n implements Module<TParams, TEventData>\n{\n protected override async bindQueryResult<T extends Query>(\n query: T,\n payloads: Payload[],\n additionalWitnesses: AccountInstance[] = [],\n errorPayloads: ModuleError[] = [],\n ): Promise<ModuleQueryResult> {\n const result = await super.bindQueryResult(query, payloads, additionalWitnesses, errorPayloads)\n await this.storeToArchivists(result.flat())\n return result\n }\n\n protected async resolveArchivists(): Promise<ArchivistInstance[]> {\n const archivists = this.config.archivists\n if (!archivists) return []\n const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)))\n return compact(resolved.map((mod) => asArchivistInstance(mod)))\n }\n\n protected async storeToArchivists(payloads: Payload[]): Promise<Payload[]> {\n const archivists = await this.resolveArchivists()\n return (\n await Promise.all(\n archivists.map((archivist) => {\n return archivist.insert?.(payloads)\n }),\n )\n ).map(([bw]) => bw)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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 ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\nimport Cookies from 'js-cookie'\n\nexport type CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\nexport const CookieArchivistConfigSchema: CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\n\nexport type CookieArchivistConfig = ArchivistConfig<{\n domain?: string\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n schema: CookieArchivistConfigSchema\n}>\n\nexport type CookieArchivistParams = ArchivistParams<AnyConfigSchema<CookieArchivistConfig>>\n\nexport class CookieArchivist<\n TParams extends CookieArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [CookieArchivistConfigSchema]\n\n get domain() {\n return this.config?.domain\n }\n\n get maxEntries() {\n //all browsers support at least 60 cookies\n return this.config?.maxEntries ?? 60\n }\n\n get maxEntrySize() {\n //all browsers support at least 4000 length per cookie\n return this.config?.maxEntrySize ?? 4000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyoarch'\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 protected override allHandler(): PromisableArray<Payload> {\n try {\n return Object.entries(Cookies.get())\n .filter(([key]) => key.startsWith(`${this.namespace}-`))\n .map(([, value]) => JSON.parse(value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override clearHandler(): void | Promise<void> {\n try {\n Object.entries(Cookies.get()).map(([key]) => {\n if (key.startsWith(`${this.namespace}-`)) {\n Cookies.remove(key)\n }\n })\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n try {\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 await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\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 Cookies.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const cookieString = Cookies.get(this.keyFromHash(hash))\n return cookieString ? JSON.parse(cookieString) : undefined\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n try {\n const resultPayloads: Payload[] = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const key = this.keyFromHash(await wrapper.hashAsync())\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${wrapper.hashAsync()}, ${value.length}]`)\n Cookies.set(key, JSON.stringify(wrapper.payload()))\n return wrapper.payload()\n }),\n )\n return resultPayloads\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n private keyFromHash(hash: string) {\n return `${this.namespace}-${hash}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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/core'\nimport { AnyConfigSchema } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\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 ?? 16000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["AbstractArchivingModule","AbstractModuleInstance","bindQueryResult","query","payloads","additionalWitnesses","errorPayloads","result","storeToArchivists","flat","resolveArchivists","archivists","config","resolved","Promise","all","map","archivist","resolve","compact","mod","asArchivistInstance","insert","bw","import_lodash","import_archivist_model","CookieArchivistConfigSchema","CookieArchivist","AbstractArchivist","configSchemas","domain","config","maxEntries","maxEntrySize","namespace","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","Object","entries","Cookies","get","filter","key","startsWith","map","value","JSON","parse","ex","console","error","stringify","clearHandler","remove","commitHandler","payloads","all","assertEx","length","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","clear","fulfilled","result","deleteHandler","hashes","payloadPairs","payload","PayloadHasher","hashAsync","deletedPairs","hash","getHandler","cookieString","keyFromHash","undefined","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","set","import_assert","import_lodash","import_promise","import_archivist_abstract","import_archivist_model","import_core","import_payload_wrapper","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/AbstractArchivingModule.ts","../../src/CookieArchivist.ts","../../src/StorageArchivist.ts"],"sourcesContent":["export * from './AbstractArchivingModule'\nexport * from './CookieArchivist'\nexport * from './StorageArchivist'\nexport * from '@xyo-network/archivist-abstract'\nexport * from '@xyo-network/archivist-model'\nexport * from '@xyo-network/archivist-wrapper'\nexport * from '@xyo-network/memory-archivist'\n","import { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { AnyConfigSchema, Module, ModuleConfig, ModuleEventData, ModuleParams } from '@xyo-network/module-model'\n\n/** @deprecated use AbstractModule which now has this functionality included */\nexport type ArchivingModuleBaseConfig<T extends ModuleConfig = ModuleConfig> = ModuleConfig<\n {\n archivists?: string[]\n schema: string\n } & T\n>\n\n/** @deprecated use AbstractModule which now has this functionality included */\nexport abstract class AbstractArchivingModule<\n TParams extends ModuleParams<AnyConfigSchema<ArchivingModuleBaseConfig>> = ModuleParams<AnyConfigSchema<ArchivingModuleBaseConfig>>,\n TEventData extends ModuleEventData = ModuleEventData,\n >\n extends AbstractModuleInstance<TParams, TEventData>\n implements Module<TParams, TEventData> {}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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 ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\nimport Cookies from 'js-cookie'\n\nexport type CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\nexport const CookieArchivistConfigSchema: CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\n\nexport type CookieArchivistConfig = ArchivistConfig<{\n domain?: string\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n schema: CookieArchivistConfigSchema\n}>\n\nexport type CookieArchivistParams = ArchivistParams<AnyConfigSchema<CookieArchivistConfig>>\n\nexport class CookieArchivist<\n TParams extends CookieArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [CookieArchivistConfigSchema]\n\n get domain() {\n return this.config?.domain\n }\n\n get maxEntries() {\n //all browsers support at least 60 cookies\n return this.config?.maxEntries ?? 60\n }\n\n get maxEntrySize() {\n //all browsers support at least 4000 length per cookie\n return this.config?.maxEntrySize ?? 4000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyoarch'\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 protected override allHandler(): PromisableArray<Payload> {\n try {\n return Object.entries(Cookies.get())\n .filter(([key]) => key.startsWith(`${this.namespace}-`))\n .map(([, value]) => JSON.parse(value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override clearHandler(): void | Promise<void> {\n try {\n Object.entries(Cookies.get()).map(([key]) => {\n if (key.startsWith(`${this.namespace}-`)) {\n Cookies.remove(key)\n }\n })\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n try {\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 await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\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 Cookies.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const cookieString = Cookies.get(this.keyFromHash(hash))\n return cookieString ? JSON.parse(cookieString) : undefined\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n try {\n const resultPayloads: Payload[] = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const key = this.keyFromHash(await wrapper.hashAsync())\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${wrapper.hashAsync()}, ${value.length}]`)\n Cookies.set(key, JSON.stringify(wrapper.payload()))\n return wrapper.payload()\n }),\n )\n return resultPayloads\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n private keyFromHash(hash: string) {\n return `${this.namespace}-${hash}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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/core'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\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 ?? 16000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n"],"mappings":"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","names":["AbstractArchivingModule","AbstractModuleInstance","CookieArchivistConfigSchema","CookieArchivist","AbstractArchivist","configSchemas","domain","config","maxEntries","maxEntrySize","namespace","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","Object","entries","Cookies","get","filter","key","startsWith","map","value","JSON","parse","ex","console","error","stringify","clearHandler","remove","commitHandler","payloads","all","assertEx","length","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","clear","fulfilled","result","deleteHandler","hashes","payloadPairs","payload","PayloadHasher","hashAsync","deletedPairs","hash","getHandler","cookieString","keyFromHash","undefined","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","set","import_assert","import_lodash","import_promise","import_archivist_abstract","import_archivist_model","import_core","import_payload_wrapper","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
@@ -2,36 +2,16 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
4
  // src/AbstractArchivingModule.ts
5
- import { compact } from "@xylabs/lodash";
6
- import { asArchivistInstance } from "@xyo-network/archivist-model";
7
- import { AbstractModuleInstance } from "@xyo-network/module";
5
+ import { AbstractModuleInstance } from "@xyo-network/module-abstract";
8
6
  var AbstractArchivingModule = class extends AbstractModuleInstance {
9
7
  static {
10
8
  __name(this, "AbstractArchivingModule");
11
9
  }
12
- async bindQueryResult(query, payloads, additionalWitnesses = [], errorPayloads = []) {
13
- const result = await super.bindQueryResult(query, payloads, additionalWitnesses, errorPayloads);
14
- await this.storeToArchivists(result.flat());
15
- return result;
16
- }
17
- async resolveArchivists() {
18
- const archivists = this.config.archivists;
19
- if (!archivists)
20
- return [];
21
- const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
22
- return compact(resolved.map((mod) => asArchivistInstance(mod)));
23
- }
24
- async storeToArchivists(payloads) {
25
- const archivists = await this.resolveArchivists();
26
- return (await Promise.all(archivists.map((archivist) => {
27
- return archivist.insert?.(payloads);
28
- }))).map(([bw]) => bw);
29
- }
30
10
  };
31
11
 
32
12
  // src/CookieArchivist.ts
33
13
  import { assertEx } from "@xylabs/assert";
34
- import { compact as compact2 } from "@xylabs/lodash";
14
+ import { compact } from "@xylabs/lodash";
35
15
  import { fulfilled } from "@xylabs/promise";
36
16
  import { AbstractArchivist } from "@xyo-network/archivist-abstract";
37
17
  import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
@@ -92,7 +72,7 @@ var CookieArchivist = class extends AbstractArchivist {
92
72
  try {
93
73
  const payloads = await this.all();
94
74
  assertEx(payloads.length > 0, "Nothing to commit");
95
- const settled = await Promise.allSettled(compact2(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
75
+ const settled = await Promise.allSettled(compact(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
96
76
  const queryPayload = {
97
77
  schema: ArchivistInsertQuerySchema
98
78
  };
@@ -100,7 +80,7 @@ var CookieArchivist = class extends AbstractArchivist {
100
80
  return (await parent?.query(query[0], query[1]))?.[0];
101
81
  })));
102
82
  await this.clear();
103
- return compact2(settled.filter(fulfilled).map((result) => result.value));
83
+ return compact(settled.filter(fulfilled).map((result) => result.value));
104
84
  } catch (ex) {
105
85
  console.error(`Error: ${JSON.stringify(ex, null, 2)}`);
106
86
  throw ex;
@@ -111,7 +91,7 @@ var CookieArchivist = class extends AbstractArchivist {
111
91
  await PayloadHasher.hashAsync(payload),
112
92
  payload
113
93
  ]));
114
- const deletedPairs = compact2(await Promise.all(payloadPairs.map(([hash, payload]) => {
94
+ const deletedPairs = compact(await Promise.all(payloadPairs.map(([hash, payload]) => {
115
95
  Cookies.remove(hash);
116
96
  return [
117
97
  hash,
@@ -121,7 +101,7 @@ var CookieArchivist = class extends AbstractArchivist {
121
101
  return deletedPairs.map(([hash]) => hash);
122
102
  }
123
103
  getHandler(hashes) {
124
- return compact2(hashes.map((hash) => {
104
+ return compact(hashes.map((hash) => {
125
105
  const cookieString = Cookies.get(this.keyFromHash(hash));
126
106
  return cookieString ? JSON.parse(cookieString) : void 0;
127
107
  }));
@@ -149,7 +129,7 @@ var CookieArchivist = class extends AbstractArchivist {
149
129
 
150
130
  // src/StorageArchivist.ts
151
131
  import { assertEx as assertEx2 } from "@xylabs/assert";
152
- import { compact as compact3 } from "@xylabs/lodash";
132
+ import { compact as compact2 } from "@xylabs/lodash";
153
133
  import { fulfilled as fulfilled2 } from "@xylabs/promise";
154
134
  import { AbstractArchivist as AbstractArchivist2 } from "@xyo-network/archivist-abstract";
155
135
  import { ArchivistAllQuerySchema as ArchivistAllQuerySchema2, ArchivistClearQuerySchema as ArchivistClearQuerySchema2, ArchivistCommitQuerySchema as ArchivistCommitQuerySchema2, ArchivistDeleteQuerySchema as ArchivistDeleteQuerySchema2, ArchivistInsertQuerySchema as ArchivistInsertQuerySchema2 } from "@xyo-network/archivist-model";
@@ -233,7 +213,7 @@ var StorageArchivist = class extends AbstractArchivist2 {
233
213
  this.logger?.log(`this.storage.length: ${this.storage.length}`);
234
214
  const payloads = await this.all();
235
215
  assertEx2(payloads.length > 0, "Nothing to commit");
236
- const settled = await Promise.allSettled(compact3(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
216
+ const settled = await Promise.allSettled(compact2(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
237
217
  const queryPayload = {
238
218
  schema: ArchivistInsertQuerySchema2
239
219
  };
@@ -241,14 +221,14 @@ var StorageArchivist = class extends AbstractArchivist2 {
241
221
  return (await parent?.query(query[0], query[1]))?.[0];
242
222
  })));
243
223
  await this.clear();
244
- return compact3(settled.filter(fulfilled2).map((result) => result.value));
224
+ return compact2(settled.filter(fulfilled2).map((result) => result.value));
245
225
  }
246
226
  async deleteHandler(hashes) {
247
227
  const payloadPairs = await Promise.all((await this.get(hashes)).map(async (payload) => [
248
228
  await PayloadHasher2.hashAsync(payload),
249
229
  payload
250
230
  ]));
251
- const deletedPairs = compact3(await Promise.all(payloadPairs.map(([hash, payload]) => {
231
+ const deletedPairs = compact2(await Promise.all(payloadPairs.map(([hash, payload]) => {
252
232
  this.storage.remove(hash);
253
233
  return [
254
234
  hash,
@@ -258,7 +238,7 @@ var StorageArchivist = class extends AbstractArchivist2 {
258
238
  return deletedPairs.map(([hash]) => hash);
259
239
  }
260
240
  getHandler(hashes) {
261
- return compact3(hashes.map((hash) => {
241
+ return compact2(hashes.map((hash) => {
262
242
  return this.storage.get(hash);
263
243
  }));
264
244
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractArchivingModule.ts","../../src/CookieArchivist.ts","../../src/StorageArchivist.ts","../../src/index.ts"],"sourcesContent":["import { compact } from '@xylabs/lodash'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractModuleInstance, AnyConfigSchema, Module, ModuleConfig, ModuleEventData, ModuleParams, ModuleQueryResult } from '@xyo-network/module'\nimport { ModuleError, Payload, Query } from '@xyo-network/payload-model'\n\nexport type ArchivingModuleConfig<T extends ModuleConfig = ModuleConfig> = ModuleConfig<\n {\n archivists?: string[]\n schema: string\n } & T\n>\n// @creatableModule()\nexport abstract class AbstractArchivingModule<\n TParams extends ModuleParams<AnyConfigSchema<ArchivingModuleConfig>> = ModuleParams<AnyConfigSchema<ArchivingModuleConfig>>,\n TEventData extends ModuleEventData = ModuleEventData,\n >\n extends AbstractModuleInstance<TParams, TEventData>\n implements Module<TParams, TEventData>\n{\n protected override async bindQueryResult<T extends Query>(\n query: T,\n payloads: Payload[],\n additionalWitnesses: AccountInstance[] = [],\n errorPayloads: ModuleError[] = [],\n ): Promise<ModuleQueryResult> {\n const result = await super.bindQueryResult(query, payloads, additionalWitnesses, errorPayloads)\n await this.storeToArchivists(result.flat())\n return result\n }\n\n protected async resolveArchivists(): Promise<ArchivistInstance[]> {\n const archivists = this.config.archivists\n if (!archivists) return []\n const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)))\n return compact(resolved.map((mod) => asArchivistInstance(mod)))\n }\n\n protected async storeToArchivists(payloads: Payload[]): Promise<Payload[]> {\n const archivists = await this.resolveArchivists()\n return (\n await Promise.all(\n archivists.map((archivist) => {\n return archivist.insert?.(payloads)\n }),\n )\n ).map(([bw]) => bw)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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 ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\nimport Cookies from 'js-cookie'\n\nexport type CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\nexport const CookieArchivistConfigSchema: CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\n\nexport type CookieArchivistConfig = ArchivistConfig<{\n domain?: string\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n schema: CookieArchivistConfigSchema\n}>\n\nexport type CookieArchivistParams = ArchivistParams<AnyConfigSchema<CookieArchivistConfig>>\n\nexport class CookieArchivist<\n TParams extends CookieArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [CookieArchivistConfigSchema]\n\n get domain() {\n return this.config?.domain\n }\n\n get maxEntries() {\n //all browsers support at least 60 cookies\n return this.config?.maxEntries ?? 60\n }\n\n get maxEntrySize() {\n //all browsers support at least 4000 length per cookie\n return this.config?.maxEntrySize ?? 4000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyoarch'\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 protected override allHandler(): PromisableArray<Payload> {\n try {\n return Object.entries(Cookies.get())\n .filter(([key]) => key.startsWith(`${this.namespace}-`))\n .map(([, value]) => JSON.parse(value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override clearHandler(): void | Promise<void> {\n try {\n Object.entries(Cookies.get()).map(([key]) => {\n if (key.startsWith(`${this.namespace}-`)) {\n Cookies.remove(key)\n }\n })\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n try {\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 await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\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 Cookies.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const cookieString = Cookies.get(this.keyFromHash(hash))\n return cookieString ? JSON.parse(cookieString) : undefined\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n try {\n const resultPayloads: Payload[] = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const key = this.keyFromHash(await wrapper.hashAsync())\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${wrapper.hashAsync()}, ${value.length}]`)\n Cookies.set(key, JSON.stringify(wrapper.payload()))\n return wrapper.payload()\n }),\n )\n return resultPayloads\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n private keyFromHash(hash: string) {\n return `${this.namespace}-${hash}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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/core'\nimport { AnyConfigSchema } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\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 ?? 16000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n","export * from './AbstractArchivingModule'\nexport * from './CookieArchivist'\nexport * from './StorageArchivist'\nexport * from '@xyo-network/archivist-abstract'\nexport * from '@xyo-network/archivist-model'\nexport * from '@xyo-network/archivist-wrapper'\nexport * from '@xyo-network/memory-archivist'\n"],"mappings":"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","names":["compact","asArchivistInstance","AbstractModuleInstance","AbstractArchivingModule","AbstractModuleInstance","bindQueryResult","query","payloads","additionalWitnesses","errorPayloads","result","storeToArchivists","flat","resolveArchivists","archivists","config","resolved","Promise","all","map","archivist","resolve","compact","mod","asArchivistInstance","insert","bw","assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadWrapper","Cookies","CookieArchivistConfigSchema","CookieArchivist","AbstractArchivist","configSchemas","domain","config","maxEntries","maxEntrySize","namespace","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","Object","entries","Cookies","get","filter","key","startsWith","map","value","JSON","parse","ex","console","error","stringify","clearHandler","remove","commitHandler","payloads","all","assertEx","length","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","clear","fulfilled","result","deleteHandler","hashes","payloadPairs","payload","PayloadHasher","hashAsync","deletedPairs","hash","getHandler","cookieString","keyFromHash","undefined","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","set","assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadWrapper","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}
1
+ {"version":3,"sources":["../../src/AbstractArchivingModule.ts","../../src/CookieArchivist.ts","../../src/StorageArchivist.ts","../../src/index.ts"],"sourcesContent":["import { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport { AnyConfigSchema, Module, ModuleConfig, ModuleEventData, ModuleParams } from '@xyo-network/module-model'\n\n/** @deprecated use AbstractModule which now has this functionality included */\nexport type ArchivingModuleBaseConfig<T extends ModuleConfig = ModuleConfig> = ModuleConfig<\n {\n archivists?: string[]\n schema: string\n } & T\n>\n\n/** @deprecated use AbstractModule which now has this functionality included */\nexport abstract class AbstractArchivingModule<\n TParams extends ModuleParams<AnyConfigSchema<ArchivingModuleBaseConfig>> = ModuleParams<AnyConfigSchema<ArchivingModuleBaseConfig>>,\n TEventData extends ModuleEventData = ModuleEventData,\n >\n extends AbstractModuleInstance<TParams, TEventData>\n implements Module<TParams, TEventData> {}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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 ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\nimport Cookies from 'js-cookie'\n\nexport type CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\nexport const CookieArchivistConfigSchema: CookieArchivistConfigSchema = 'network.xyo.archivist.cookie.config'\n\nexport type CookieArchivistConfig = ArchivistConfig<{\n domain?: string\n maxEntries?: number\n maxEntrySize?: number\n namespace?: string\n schema: CookieArchivistConfigSchema\n}>\n\nexport type CookieArchivistParams = ArchivistParams<AnyConfigSchema<CookieArchivistConfig>>\n\nexport class CookieArchivist<\n TParams extends CookieArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [CookieArchivistConfigSchema]\n\n get domain() {\n return this.config?.domain\n }\n\n get maxEntries() {\n //all browsers support at least 60 cookies\n return this.config?.maxEntries ?? 60\n }\n\n get maxEntrySize() {\n //all browsers support at least 4000 length per cookie\n return this.config?.maxEntrySize ?? 4000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyoarch'\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 protected override allHandler(): PromisableArray<Payload> {\n try {\n return Object.entries(Cookies.get())\n .filter(([key]) => key.startsWith(`${this.namespace}-`))\n .map(([, value]) => JSON.parse(value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override clearHandler(): void | Promise<void> {\n try {\n Object.entries(Cookies.get()).map(([key]) => {\n if (key.startsWith(`${this.namespace}-`)) {\n Cookies.remove(key)\n }\n })\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n try {\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 await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\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 Cookies.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const cookieString = Cookies.get(this.keyFromHash(hash))\n return cookieString ? JSON.parse(cookieString) : undefined\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n try {\n const resultPayloads: Payload[] = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const key = this.keyFromHash(await wrapper.hashAsync())\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${wrapper.hashAsync()}, ${value.length}]`)\n Cookies.set(key, JSON.stringify(wrapper.payload()))\n return wrapper.payload()\n }),\n )\n return resultPayloads\n } catch (ex) {\n console.error(`Error: ${JSON.stringify(ex, null, 2)}`)\n throw ex\n }\n }\n\n private keyFromHash(hash: string) {\n return `${this.namespace}-${hash}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled } 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/core'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { Promisable, PromisableArray } from '@xyo-network/promise'\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 ?? 16000\n }\n\n get namespace() {\n return this.config?.namespace ?? 'xyo-archivist'\n }\n\n get persistAccount() {\n return this.config?.persistAccount ?? false\n }\n\n override get queries(): string[] {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n get type() {\n return this.config?.type ?? 'local'\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get privateStorage(): StoreBase {\n this._privateStorage = this._storage ?? store[this.type].namespace(`${this.namespace}|private`)\n return this._privateStorage\n }\n\n /* This has to be a getter so that it can access it during construction */\n private get storage(): StoreBase {\n this._storage = this._storage ?? store[this.type].namespace(this.namespace)\n return this._storage\n }\n\n /*override async loadAccount(account?: AccountInstance, persistAccount?: boolean, privateStorage?: StoreBase, _logger?: Logger) {\n if (!this._account) {\n if (persistAccount) {\n const privateKey = privateStorage?.get('privateKey')\n if (privateKey) {\n try {\n this._account = await Account.create({ privateKey })\n return this._account\n } catch (ex) {\n console.error(`Error reading Account from storage [${ex}] - Recreating Account`)\n privateStorage?.remove('privateKey')\n }\n }\n }\n }\n return await super.loadAccount()\n }*/\n\n protected override allHandler(): PromisableArray<Payload> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n return Object.entries(this.storage.getAll()).map(([, value]) => value)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n this.storage.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n this.logger?.log(`this.storage.length: ${this.storage.length}`)\n const payloads = await this.all()\n assertEx(payloads.length > 0, 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n // TODO - rather than clear, delete the payloads that come back as successfully inserted\n await this.clear()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n const deletedPairs: [string, Payload][] = compact(\n await Promise.all(\n payloadPairs.map<[string, Payload] | undefined>(([hash, payload]) => {\n this.storage.remove(hash)\n return [hash, payload]\n }),\n ),\n )\n return deletedPairs.map(([hash]) => hash)\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n return this.storage.get(hash)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const resultPayloads = await Promise.all(\n payloads.map(async (payload) => {\n const wrapper = PayloadWrapper.wrap(payload)\n const hash = await wrapper.hashAsync()\n const value = JSON.stringify(wrapper.payload())\n assertEx(value.length < this.maxEntrySize, `Payload too large [${hash}, ${value.length}]`)\n this.storage.set(hash, wrapper.payload())\n return wrapper.payload()\n }),\n )\n return resultPayloads\n }\n\n protected saveAccount() {\n if (this.persistAccount) {\n const account = this.account\n this.logger?.log(account.address)\n this.privateStorage.set('privateKey', account.private.hex)\n }\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.saveAccount()\n return true\n }\n}\n","export * from './AbstractArchivingModule'\nexport * from './CookieArchivist'\nexport * from './StorageArchivist'\nexport * from '@xyo-network/archivist-abstract'\nexport * from '@xyo-network/archivist-model'\nexport * from '@xyo-network/archivist-wrapper'\nexport * from '@xyo-network/memory-archivist'\n"],"mappings":"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","names":["AbstractModuleInstance","AbstractArchivingModule","AbstractModuleInstance","assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadWrapper","Cookies","CookieArchivistConfigSchema","CookieArchivist","AbstractArchivist","configSchemas","domain","config","maxEntries","maxEntrySize","namespace","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","Object","entries","Cookies","get","filter","key","startsWith","map","value","JSON","parse","ex","console","error","stringify","clearHandler","remove","commitHandler","payloads","all","assertEx","length","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","clear","fulfilled","result","deleteHandler","hashes","payloadPairs","payload","PayloadHasher","hashAsync","deletedPairs","hash","getHandler","cookieString","keyFromHash","undefined","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","set","assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","PayloadWrapper","store","StorageArchivistConfigSchema","StorageArchivist","AbstractArchivist","configSchemas","_privateStorage","_storage","maxEntries","config","maxEntrySize","namespace","persistAccount","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","type","privateStorage","store","storage","allHandler","logger","log","length","Object","entries","getAll","map","value","clearHandler","clear","emit","module","commitHandler","payloads","all","assertEx","settled","Promise","allSettled","compact","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","payloadPairs","get","payload","PayloadHasher","hashAsync","deletedPairs","hash","remove","getHandler","insertHandler","resultPayloads","wrapper","PayloadWrapper","wrap","JSON","stringify","set","saveAccount","account","address","private","hex","startHandler"]}