@xyo-network/diviner-boundwitness-memory 2.92.7 → 2.92.8

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.
@@ -42,10 +42,10 @@ var MemoryBoundWitnessDiviner = class extends import_diviner_boundwitness_abstra
42
42
  import_diviner_boundwitness_model.BoundWitnessDivinerConfigSchema
43
43
  ];
44
44
  async divineHandler(payloads) {
45
- const filter = (0, import_assert.assertEx)(payloads?.filter(import_diviner_boundwitness_model.isBoundWitnessDivinerQueryPayload)?.pop(), "Missing query payload");
45
+ const filter = (0, import_assert.assertEx)(payloads?.filter(import_diviner_boundwitness_model.isBoundWitnessDivinerQueryPayload)?.pop(), () => "Missing query payload");
46
46
  if (!filter)
47
47
  return [];
48
- const archivist = (0, import_assert.assertEx)(await this.getArchivist(), "Unable to resolve archivist");
48
+ const archivist = (0, import_assert.assertEx)(await this.getArchivist(), () => "Unable to resolve archivist");
49
49
  const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter;
50
50
  let bws = (await archivist?.all?.() ?? []).filter(import_boundwitness_model.isBoundWitness);
51
51
  if (order === "desc")
@@ -60,7 +60,7 @@ var MemoryBoundWitnessDiviner = class extends import_diviner_boundwitness_abstra
60
60
  if (sourceQuery)
61
61
  bws = bws.filter((bw) => bw?.$meta?.sourceQuery === sourceQuery);
62
62
  if (destination && Array.isArray(destination) && destination?.length > 0) {
63
- const targetFilter = (0, import_assert.assertEx)(destination, "Missing destination");
63
+ const targetFilter = (0, import_assert.assertEx)(destination, () => "Missing destination");
64
64
  bws = bws.filter((bw) => {
65
65
  const targetDestinationField = bw?.$meta?.destination;
66
66
  return targetDestinationField !== void 0 && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ? (
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["export * from './MemoryBoundWitnessDiviner'\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,mBAA4B;AAC5B,oBAAyB;AACzB,oBAAuB;AACvB,iBAAiC;AACjC,gCAA6C;AAC7C,2CAAoC;AACpC,wCAKO;AAsDP,IAAMA,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,4BAAN,cAIGC,yDAAAA;EAvEV,OAuEUA;;;EACR,OAAgBC,gBAAgB;IAACC;;EAEjC,MAAyBC,cAAcC,UAAkB;AACvD,UAAMC,aAASC,wBAASF,UAAUC,OAAOE,mEAAAA,GAAoCC,IAAAA,GAAO,uBAAA;AACpF,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,gBAAYH,wBAAS,MAAM,KAAKI,aAAY,GAAI,6BAAA;AACtD,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAarB,UAAS,IAAKQ;AAClH,QAAIc,OAAQ,MAAMV,WAAWW,MAAAA,KAAY,CAAA,GAAIf,OAAOgB,wCAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,WAAWa,IAAI,CAACC,gBAAYC,6BAAiBD,OAAAA,CAAAA,EAAUpB,OAAOsB,oBAAAA;AACnF,QAAIJ,cAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACT,WAAOiC,0BAAYjC,GAAGe,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,gBAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACT,WAAOiC,0BAAYjC,GAAGgB,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,iBAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACT,WAAOiC,0BAAYjC,GAAGiB,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACT,OAAQA,IAAIkC,OAAoCb,gBAAgBA,WAAAA;AAEnG,QAAIC,eAAea,MAAMC,QAAQd,WAAAA,KAAgBA,aAAaU,SAAS,GAAG;AACxE,YAAMK,mBAAe3B,wBAASY,aAAa,qBAAA;AAE3CC,YAAMA,IAAId,OAAO,CAACT,OAAAA;AAChB,cAAMsC,yBAA0BtC,IAAIkC,OAAsCZ;AAE1E,eAAOgB,2BAA2BpC,UAAaiC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBN,SAAS;;cAEpHC,0BAAYI,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIrC,cAAcC,QAAW;AAC3BqB,YACEH,UAAU,SACRG,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA,IACxDsB,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMsC,cAAcrB,SAASK,IAAIS;AACjC,UAAMQ,eAAerB,UAAU;AAC/B,WAAOI,IAAIkB,MAAMD,cAAcD,WAAAA;EACjC;AACF;","names":["hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","configSchemas","BoundWitnessDivinerConfigSchema","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["export * from './MemoryBoundWitnessDiviner'\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), () => 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,mBAA4B;AAC5B,oBAAyB;AACzB,oBAAuB;AACvB,iBAAiC;AACjC,gCAA6C;AAC7C,2CAAoC;AACpC,wCAKO;AAsDP,IAAMA,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,4BAAN,cAIGC,yDAAAA;EAvEV,OAuEUA;;;EACR,OAAgBC,gBAAgB;IAACC;;EAEjC,MAAyBC,cAAcC,UAAkB;AACvD,UAAMC,aAASC,wBAASF,UAAUC,OAAOE,mEAAAA,GAAoCC,IAAAA,GAAO,MAAM,uBAAA;AAC1F,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,gBAAYH,wBAAS,MAAM,KAAKI,aAAY,GAAI,MAAM,6BAAA;AAC5D,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAarB,UAAS,IAAKQ;AAClH,QAAIc,OAAQ,MAAMV,WAAWW,MAAAA,KAAY,CAAA,GAAIf,OAAOgB,wCAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,WAAWa,IAAI,CAACC,gBAAYC,6BAAiBD,OAAAA,CAAAA,EAAUpB,OAAOsB,oBAAAA;AACnF,QAAIJ,cAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACT,WAAOiC,0BAAYjC,GAAGe,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,gBAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACT,WAAOiC,0BAAYjC,GAAGgB,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,iBAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACT,WAAOiC,0BAAYjC,GAAGiB,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACT,OAAQA,IAAIkC,OAAoCb,gBAAgBA,WAAAA;AAEnG,QAAIC,eAAea,MAAMC,QAAQd,WAAAA,KAAgBA,aAAaU,SAAS,GAAG;AACxE,YAAMK,mBAAe3B,wBAASY,aAAa,MAAM,qBAAA;AAEjDC,YAAMA,IAAId,OAAO,CAACT,OAAAA;AAChB,cAAMsC,yBAA0BtC,IAAIkC,OAAsCZ;AAE1E,eAAOgB,2BAA2BpC,UAAaiC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBN,SAAS;;cAEpHC,0BAAYI,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIrC,cAAcC,QAAW;AAC3BqB,YACEH,UAAU,SACRG,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA,IACxDsB,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMsC,cAAcrB,SAASK,IAAIS;AACjC,UAAMQ,eAAerB,UAAU;AAC/B,WAAOI,IAAIkB,MAAMD,cAAcD,WAAAA;EACjC;AACF;","names":["hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","configSchemas","BoundWitnessDivinerConfigSchema","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice"]}
@@ -18,10 +18,10 @@ var MemoryBoundWitnessDiviner = class extends BoundWitnessDiviner {
18
18
  BoundWitnessDivinerConfigSchema
19
19
  ];
20
20
  async divineHandler(payloads) {
21
- const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), "Missing query payload");
21
+ const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => "Missing query payload");
22
22
  if (!filter)
23
23
  return [];
24
- const archivist = assertEx(await this.getArchivist(), "Unable to resolve archivist");
24
+ const archivist = assertEx(await this.getArchivist(), () => "Unable to resolve archivist");
25
25
  const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter;
26
26
  let bws = (await archivist?.all?.() ?? []).filter(isBoundWitness);
27
27
  if (order === "desc")
@@ -36,7 +36,7 @@ var MemoryBoundWitnessDiviner = class extends BoundWitnessDiviner {
36
36
  if (sourceQuery)
37
37
  bws = bws.filter((bw) => bw?.$meta?.sourceQuery === sourceQuery);
38
38
  if (destination && Array.isArray(destination) && destination?.length > 0) {
39
- const targetFilter = assertEx(destination, "Missing destination");
39
+ const targetFilter = assertEx(destination, () => "Missing destination");
40
40
  bws = bws.filter((bw) => {
41
41
  const targetDestinationField = bw?.$meta?.destination;
42
42
  return targetDestinationField !== void 0 && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ? (
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;AAAA,SAASA,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,wBAAwB;AACjC,SAAuBC,sBAAsB;AAC7C,SAASC,2BAA2B;AACpC,SACEC,iCAGAC,yCACK;AAsDP,IAAMC,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,4BAAN,cAIGC,oBAAAA;EAvEV,OAuEUA;;;EACR,OAAgBC,gBAAgB;IAACC;;EAEjC,MAAyBC,cAAcC,UAAkB;AACvD,UAAMC,SAASC,SAASF,UAAUC,OAAOE,iCAAAA,GAAoCC,IAAAA,GAAO,uBAAA;AACpF,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,YAAYH,SAAS,MAAM,KAAKI,aAAY,GAAI,6BAAA;AACtD,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAarB,UAAS,IAAKQ;AAClH,QAAIc,OAAQ,MAAMV,WAAWW,MAAAA,KAAY,CAAA,GAAIf,OAAOgB,cAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,WAAWa,IAAI,CAACC,YAAYC,iBAAiBD,OAAAA,CAAAA,EAAUpB,OAAOsB,MAAAA;AACnF,QAAIJ,cAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACT,OAAOiC,YAAYjC,GAAGe,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,gBAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACT,OAAOiC,YAAYjC,GAAGgB,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,iBAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACT,OAAOiC,YAAYjC,GAAGiB,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACT,OAAQA,IAAIkC,OAAoCb,gBAAgBA,WAAAA;AAEnG,QAAIC,eAAea,MAAMC,QAAQd,WAAAA,KAAgBA,aAAaU,SAAS,GAAG;AACxE,YAAMK,eAAe3B,SAASY,aAAa,qBAAA;AAE3CC,YAAMA,IAAId,OAAO,CAACT,OAAAA;AAChB,cAAMsC,yBAA0BtC,IAAIkC,OAAsCZ;AAE1E,eAAOgB,2BAA2BpC,UAAaiC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBN,SAAS;;UAEpHC,YAAYI,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIrC,cAAcC,QAAW;AAC3BqB,YACEH,UAAU,SACRG,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA,IACxDsB,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMsC,cAAcrB,SAASK,IAAIS;AACjC,UAAMQ,eAAerB,UAAU;AAC/B,WAAOI,IAAIkB,MAAMD,cAAcD,WAAAA;EACjC;AACF;","names":["containsAll","assertEx","exists","hexFromHexString","isBoundWitness","BoundWitnessDiviner","BoundWitnessDivinerConfigSchema","isBoundWitnessDivinerQueryPayload","hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","configSchemas","BoundWitnessDivinerConfigSchema","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice"]}
1
+ {"version":3,"sources":["../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), () => 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;AAAA,SAASA,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,wBAAwB;AACjC,SAAuBC,sBAAsB;AAC7C,SAASC,2BAA2B;AACpC,SACEC,iCAGAC,yCACK;AAsDP,IAAMC,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,4BAAN,cAIGC,oBAAAA;EAvEV,OAuEUA;;;EACR,OAAgBC,gBAAgB;IAACC;;EAEjC,MAAyBC,cAAcC,UAAkB;AACvD,UAAMC,SAASC,SAASF,UAAUC,OAAOE,iCAAAA,GAAoCC,IAAAA,GAAO,MAAM,uBAAA;AAC1F,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,YAAYH,SAAS,MAAM,KAAKI,aAAY,GAAI,MAAM,6BAAA;AAC5D,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAarB,UAAS,IAAKQ;AAClH,QAAIc,OAAQ,MAAMV,WAAWW,MAAAA,KAAY,CAAA,GAAIf,OAAOgB,cAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,WAAWa,IAAI,CAACC,YAAYC,iBAAiBD,OAAAA,CAAAA,EAAUpB,OAAOsB,MAAAA;AACnF,QAAIJ,cAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACT,OAAOiC,YAAYjC,GAAGe,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,gBAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACT,OAAOiC,YAAYjC,GAAGgB,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,iBAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACT,OAAOiC,YAAYjC,GAAGiB,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACT,OAAQA,IAAIkC,OAAoCb,gBAAgBA,WAAAA;AAEnG,QAAIC,eAAea,MAAMC,QAAQd,WAAAA,KAAgBA,aAAaU,SAAS,GAAG;AACxE,YAAMK,eAAe3B,SAASY,aAAa,MAAM,qBAAA;AAEjDC,YAAMA,IAAId,OAAO,CAACT,OAAAA;AAChB,cAAMsC,yBAA0BtC,IAAIkC,OAAsCZ;AAE1E,eAAOgB,2BAA2BpC,UAAaiC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBN,SAAS;;UAEpHC,YAAYI,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIrC,cAAcC,QAAW;AAC3BqB,YACEH,UAAU,SACRG,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA,IACxDsB,IAAId,OAAOV,YAAAA,EAAcU,OAAO,CAACT,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMsC,cAAcrB,SAASK,IAAIS;AACjC,UAAMQ,eAAerB,UAAU;AAC/B,WAAOI,IAAIkB,MAAMD,cAAcD,WAAAA;EACjC;AACF;","names":["containsAll","assertEx","exists","hexFromHexString","isBoundWitness","BoundWitnessDiviner","BoundWitnessDivinerConfigSchema","isBoundWitnessDivinerQueryPayload","hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","configSchemas","BoundWitnessDivinerConfigSchema","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice"]}
@@ -42,10 +42,10 @@ var hasTimestamp = /* @__PURE__ */ __name((bw) => bw.timestamp !== void 0, "hasT
42
42
  var _MemoryBoundWitnessDiviner = class _MemoryBoundWitnessDiviner extends import_diviner_boundwitness_abstract.BoundWitnessDiviner {
43
43
  async divineHandler(payloads) {
44
44
  var _a, _b;
45
- const filter = (0, import_assert.assertEx)((_a = payloads == null ? void 0 : payloads.filter(import_diviner_boundwitness_model.isBoundWitnessDivinerQueryPayload)) == null ? void 0 : _a.pop(), "Missing query payload");
45
+ const filter = (0, import_assert.assertEx)((_a = payloads == null ? void 0 : payloads.filter(import_diviner_boundwitness_model.isBoundWitnessDivinerQueryPayload)) == null ? void 0 : _a.pop(), () => "Missing query payload");
46
46
  if (!filter)
47
47
  return [];
48
- const archivist = (0, import_assert.assertEx)(await this.getArchivist(), "Unable to resolve archivist");
48
+ const archivist = (0, import_assert.assertEx)(await this.getArchivist(), () => "Unable to resolve archivist");
49
49
  const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter;
50
50
  let bws = (await ((_b = archivist == null ? void 0 : archivist.all) == null ? void 0 : _b.call(archivist)) ?? []).filter(import_boundwitness_model.isBoundWitness);
51
51
  if (order === "desc")
@@ -63,7 +63,7 @@ var _MemoryBoundWitnessDiviner = class _MemoryBoundWitnessDiviner extends import
63
63
  return ((_a2 = bw == null ? void 0 : bw.$meta) == null ? void 0 : _a2.sourceQuery) === sourceQuery;
64
64
  });
65
65
  if (destination && Array.isArray(destination) && (destination == null ? void 0 : destination.length) > 0) {
66
- const targetFilter = (0, import_assert.assertEx)(destination, "Missing destination");
66
+ const targetFilter = (0, import_assert.assertEx)(destination, () => "Missing destination");
67
67
  bws = bws.filter((bw) => {
68
68
  var _a2;
69
69
  const targetDestinationField = (_a2 = bw == null ? void 0 : bw.$meta) == null ? void 0 : _a2.destination;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["export * from './MemoryBoundWitnessDiviner'\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,mBAA4B;AAC5B,oBAAyB;AACzB,oBAAuB;AACvB,iBAAiC;AACjC,gCAA6C;AAC7C,2CAAoC;AACpC,wCAKO;AAsDP,IAAMA,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,6BAAN,MAAMA,mCAIHC,yDAAAA;EAGR,MAAyBC,cAAcC,UAAkB;AA1E3D;AA2EI,UAAMC,aAASC,yBAASF,0CAAUC,OAAOE,yEAAjBH,mBAAqDI,OAAO,uBAAA;AACpF,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,gBAAYH,wBAAS,MAAM,KAAKI,aAAY,GAAI,6BAAA;AACtD,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAanB,UAAS,IAAKM;AAClH,QAAIc,OAAQ,QAAMV,4CAAWW,QAAXX,uCAAuB,CAAA,GAAIJ,OAAOgB,wCAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,uCAAWa,IAAI,CAACC,gBAAYC,6BAAiBD,OAAAA,GAAUpB,OAAOsB;AACnF,QAAIJ,6CAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACP,WAAO+B,0BAAY/B,GAAGa,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,iDAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACP,WAAO+B,0BAAY/B,GAAGc,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,mDAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACP,WAAO+B,0BAAY/B,GAAGe,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACP,OAAAA;AArFvC,YAAAgC;AAqF+ChC,iBAAAA,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAAwCmB,iBAAgBA;OAAAA;AAEnG,QAAIC,eAAec,MAAMC,QAAQf,WAAAA,MAAgBA,2CAAaU,UAAS,GAAG;AACxE,YAAMM,mBAAe5B,wBAASY,aAAa,qBAAA;AAE3CC,YAAMA,IAAId,OAAO,CAACP,OAAAA;AA1FxB,YAAAgC;AA2FQ,cAAMK,0BAA0BrC,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAA0CoB;AAE1E,eAAOiB,2BAA2BnC,UAAagC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBP,SAAS;;cAEpHC,0BAAYK,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIpC,cAAcC,QAAW;AAC3BmB,YACEH,UAAU,SACRG,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA,IACxDoB,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMqC,cAActB,SAASK,IAAIS;AACjC,UAAMS,eAAetB,UAAU;AAC/B,WAAOI,IAAImB,MAAMD,cAAcD,WAAAA;EACjC;AACF;AAvCUlC;AACR,cALWD,4BAKKsC,iBAAgB;EAACC;;AAL5B,IAAMvC,4BAAN;","names":["hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","_a","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice","configSchemas","BoundWitnessDivinerConfigSchema"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["export * from './MemoryBoundWitnessDiviner'\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), () => 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,mBAA4B;AAC5B,oBAAyB;AACzB,oBAAuB;AACvB,iBAAiC;AACjC,gCAA6C;AAC7C,2CAAoC;AACpC,wCAKO;AAsDP,IAAMA,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,6BAAN,MAAMA,mCAIHC,yDAAAA;EAGR,MAAyBC,cAAcC,UAAkB;AA1E3D;AA2EI,UAAMC,aAASC,yBAASF,0CAAUC,OAAOE,yEAAjBH,mBAAqDI,OAAO,MAAM,uBAAA;AAC1F,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,gBAAYH,wBAAS,MAAM,KAAKI,aAAY,GAAI,MAAM,6BAAA;AAC5D,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAanB,UAAS,IAAKM;AAClH,QAAIc,OAAQ,QAAMV,4CAAWW,QAAXX,uCAAuB,CAAA,GAAIJ,OAAOgB,wCAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,uCAAWa,IAAI,CAACC,gBAAYC,6BAAiBD,OAAAA,GAAUpB,OAAOsB;AACnF,QAAIJ,6CAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACP,WAAO+B,0BAAY/B,GAAGa,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,iDAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACP,WAAO+B,0BAAY/B,GAAGc,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,mDAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACP,WAAO+B,0BAAY/B,GAAGe,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACP,OAAAA;AArFvC,YAAAgC;AAqF+ChC,iBAAAA,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAAwCmB,iBAAgBA;OAAAA;AAEnG,QAAIC,eAAec,MAAMC,QAAQf,WAAAA,MAAgBA,2CAAaU,UAAS,GAAG;AACxE,YAAMM,mBAAe5B,wBAASY,aAAa,MAAM,qBAAA;AAEjDC,YAAMA,IAAId,OAAO,CAACP,OAAAA;AA1FxB,YAAAgC;AA2FQ,cAAMK,0BAA0BrC,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAA0CoB;AAE1E,eAAOiB,2BAA2BnC,UAAagC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBP,SAAS;;cAEpHC,0BAAYK,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIpC,cAAcC,QAAW;AAC3BmB,YACEH,UAAU,SACRG,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA,IACxDoB,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMqC,cAActB,SAASK,IAAIS;AACjC,UAAMS,eAAetB,UAAU;AAC/B,WAAOI,IAAImB,MAAMD,cAAcD,WAAAA;EACjC;AACF;AAvCUlC;AACR,cALWD,4BAKKsC,iBAAgB;EAACC;;AAL5B,IAAMvC,4BAAN;","names":["hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","_a","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice","configSchemas","BoundWitnessDivinerConfigSchema"]}
@@ -18,10 +18,10 @@ var hasTimestamp = /* @__PURE__ */ __name((bw) => bw.timestamp !== void 0, "hasT
18
18
  var _MemoryBoundWitnessDiviner = class _MemoryBoundWitnessDiviner extends BoundWitnessDiviner {
19
19
  async divineHandler(payloads) {
20
20
  var _a, _b;
21
- const filter = assertEx((_a = payloads == null ? void 0 : payloads.filter(isBoundWitnessDivinerQueryPayload)) == null ? void 0 : _a.pop(), "Missing query payload");
21
+ const filter = assertEx((_a = payloads == null ? void 0 : payloads.filter(isBoundWitnessDivinerQueryPayload)) == null ? void 0 : _a.pop(), () => "Missing query payload");
22
22
  if (!filter)
23
23
  return [];
24
- const archivist = assertEx(await this.getArchivist(), "Unable to resolve archivist");
24
+ const archivist = assertEx(await this.getArchivist(), () => "Unable to resolve archivist");
25
25
  const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter;
26
26
  let bws = (await ((_b = archivist == null ? void 0 : archivist.all) == null ? void 0 : _b.call(archivist)) ?? []).filter(isBoundWitness);
27
27
  if (order === "desc")
@@ -39,7 +39,7 @@ var _MemoryBoundWitnessDiviner = class _MemoryBoundWitnessDiviner extends BoundW
39
39
  return ((_a2 = bw == null ? void 0 : bw.$meta) == null ? void 0 : _a2.sourceQuery) === sourceQuery;
40
40
  });
41
41
  if (destination && Array.isArray(destination) && (destination == null ? void 0 : destination.length) > 0) {
42
- const targetFilter = assertEx(destination, "Missing destination");
42
+ const targetFilter = assertEx(destination, () => "Missing destination");
43
43
  bws = bws.filter((bw) => {
44
44
  var _a2;
45
45
  const targetDestinationField = (_a2 = bw == null ? void 0 : bw.$meta) == null ? void 0 : _a2.destination;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAASA,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,wBAAwB;AACjC,SAAuBC,sBAAsB;AAC7C,SAASC,2BAA2B;AACpC,SACEC,iCAGAC,yCACK;AAsDP,IAAMC,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,6BAAN,MAAMA,mCAIHC,oBAAAA;EAGR,MAAyBC,cAAcC,UAAkB;AA1E3D;AA2EI,UAAMC,SAASC,UAASF,0CAAUC,OAAOE,uCAAjBH,mBAAqDI,OAAO,uBAAA;AACpF,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,YAAYH,SAAS,MAAM,KAAKI,aAAY,GAAI,6BAAA;AACtD,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAanB,UAAS,IAAKM;AAClH,QAAIc,OAAQ,QAAMV,4CAAWW,QAAXX,uCAAuB,CAAA,GAAIJ,OAAOgB,cAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,uCAAWa,IAAI,CAACC,YAAYC,iBAAiBD,OAAAA,GAAUpB,OAAOsB;AACnF,QAAIJ,6CAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACP,OAAO+B,YAAY/B,GAAGa,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,iDAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACP,OAAO+B,YAAY/B,GAAGc,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,mDAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACP,OAAO+B,YAAY/B,GAAGe,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACP,OAAAA;AArFvC,YAAAgC;AAqF+ChC,iBAAAA,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAAwCmB,iBAAgBA;OAAAA;AAEnG,QAAIC,eAAec,MAAMC,QAAQf,WAAAA,MAAgBA,2CAAaU,UAAS,GAAG;AACxE,YAAMM,eAAe5B,SAASY,aAAa,qBAAA;AAE3CC,YAAMA,IAAId,OAAO,CAACP,OAAAA;AA1FxB,YAAAgC;AA2FQ,cAAMK,0BAA0BrC,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAA0CoB;AAE1E,eAAOiB,2BAA2BnC,UAAagC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBP,SAAS;;UAEpHC,YAAYK,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIpC,cAAcC,QAAW;AAC3BmB,YACEH,UAAU,SACRG,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA,IACxDoB,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMqC,cAActB,SAASK,IAAIS;AACjC,UAAMS,eAAetB,UAAU;AAC/B,WAAOI,IAAImB,MAAMD,cAAcD,WAAAA;EACjC;AACF;AAvCUlC;AACR,cALWD,4BAKKsC,iBAAgB;EAACC;;AAL5B,IAAMvC,4BAAN;","names":["containsAll","assertEx","exists","hexFromHexString","isBoundWitness","BoundWitnessDiviner","BoundWitnessDivinerConfigSchema","isBoundWitnessDivinerQueryPayload","hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","_a","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice","configSchemas","BoundWitnessDivinerConfigSchema"]}
1
+ {"version":3,"sources":["../../src/MemoryBoundWitnessDiviner.ts"],"sourcesContent":["import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { hexFromHexString } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport {\n BoundWitnessDivinerConfigSchema,\n BoundWitnessDivinerParams,\n BoundWitnessDivinerQueryPayload,\n isBoundWitnessDivinerQueryPayload,\n} from '@xyo-network/diviner-boundwitness-model'\nimport { WithMeta } from '@xyo-network/payload-model'\n\nexport interface EqualityComparisonOperators {\n /**\n * 'Not Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value does not match the provided string.\n * Example: field != 'value'\n */\n '!=': string\n\n /**\n * 'Less Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than the provided string.\n * Example: field < 'value'\n */\n '<': string\n\n /**\n * 'Less Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically less than or equal to the provided string.\n * Example: field <= 'value'\n */\n '<=': string\n\n /**\n * 'Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value matches the provided string exactly.\n * Example: field = 'value'\n */\n '=': string\n\n /**\n * 'Greater Than' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than the provided string.\n * Example: field > 'value'\n */\n '>': string\n\n /**\n * 'Greater Than or Equal To' comparison operator.\n * Compares the field with the specified string value,\n * selecting records where the field value is lexicographically greater than or equal to the provided string.\n * Example: field >= 'value'\n */\n '>=': string\n}\n\ntype WithTimestamp = BoundWitness & { timestamp: number }\nconst hasTimestamp = (bw: BoundWitness): bw is WithTimestamp => bw.timestamp !== undefined\n\nexport class MemoryBoundWitnessDiviner<\n TParams extends BoundWitnessDivinerParams = BoundWitnessDivinerParams,\n TIn extends BoundWitnessDivinerQueryPayload = BoundWitnessDivinerQueryPayload,\n TOut extends BoundWitness = BoundWitness,\n> extends BoundWitnessDiviner<TParams, TIn, TOut> {\n static override configSchemas = [BoundWitnessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: TIn[]) {\n const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')\n if (!filter) return []\n const archivist = assertEx(await this.getArchivist(), () => 'Unable to resolve archivist')\n const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter\n let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]\n if (order === 'desc') bws = bws.reverse()\n const allAddresses = addresses?.map((address) => hexFromHexString(address)).filter(exists)\n if (allAddresses?.length) bws = bws.filter((bw) => containsAll(bw.addresses, allAddresses))\n if (payload_hashes?.length) bws = bws.filter((bw) => containsAll(bw.payload_hashes, payload_hashes))\n if (payload_schemas?.length) bws = bws.filter((bw) => containsAll(bw.payload_schemas, payload_schemas))\n if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)\n // If there's a destination filter of the right kind\n if (destination && Array.isArray(destination) && destination?.length > 0) {\n const targetFilter = assertEx(destination, () => 'Missing destination')\n // Find all BWs that satisfy the destination constraint\n bws = bws.filter((bw) => {\n const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination\n // If the destination field is an array and contains at least one element\n return targetDestinationField !== undefined && Array.isArray(targetDestinationField) && targetDestinationField.length > 0 ?\n // Check that the targetDestinationField contains all the elements in the targetFilter\n containsAll(targetFilter, targetDestinationField ?? [])\n // Otherwise, filter it out\n : false\n })\n }\n if (timestamp !== undefined) {\n bws =\n order === 'desc' ?\n bws.filter(hasTimestamp).filter((bw) => bw.timestamp <= timestamp)\n : bws.filter(hasTimestamp).filter((bw) => bw.timestamp >= timestamp)\n }\n const parsedLimit = limit ?? bws.length\n const parsedOffset = offset ?? 0\n return bws.slice(parsedOffset, parsedLimit) as WithMeta<TOut>[]\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAASA,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,wBAAwB;AACjC,SAAuBC,sBAAsB;AAC7C,SAASC,2BAA2B;AACpC,SACEC,iCAGAC,yCACK;AAsDP,IAAMC,eAAe,wBAACC,OAA0CA,GAAGC,cAAcC,QAA5D;AAEd,IAAMC,6BAAN,MAAMA,mCAIHC,oBAAAA;EAGR,MAAyBC,cAAcC,UAAkB;AA1E3D;AA2EI,UAAMC,SAASC,UAASF,0CAAUC,OAAOE,uCAAjBH,mBAAqDI,OAAO,MAAM,uBAAA;AAC1F,QAAI,CAACH;AAAQ,aAAO,CAAA;AACpB,UAAMI,YAAYH,SAAS,MAAM,KAAKI,aAAY,GAAI,MAAM,6BAAA;AAC5D,UAAM,EAAEC,WAAWC,gBAAgBC,iBAAiBC,OAAOC,QAAQC,OAAOC,aAAaC,aAAanB,UAAS,IAAKM;AAClH,QAAIc,OAAQ,QAAMV,4CAAWW,QAAXX,uCAAuB,CAAA,GAAIJ,OAAOgB,cAAAA;AACpD,QAAIL,UAAU;AAAQG,YAAMA,IAAIG,QAAO;AACvC,UAAMC,eAAeZ,uCAAWa,IAAI,CAACC,YAAYC,iBAAiBD,OAAAA,GAAUpB,OAAOsB;AACnF,QAAIJ,6CAAcK;AAAQT,YAAMA,IAAId,OAAO,CAACP,OAAO+B,YAAY/B,GAAGa,WAAWY,YAAAA,CAAAA;AAC7E,QAAIX,iDAAgBgB;AAAQT,YAAMA,IAAId,OAAO,CAACP,OAAO+B,YAAY/B,GAAGc,gBAAgBA,cAAAA,CAAAA;AACpF,QAAIC,mDAAiBe;AAAQT,YAAMA,IAAId,OAAO,CAACP,OAAO+B,YAAY/B,GAAGe,iBAAiBA,eAAAA,CAAAA;AACtF,QAAII;AAAaE,YAAMA,IAAId,OAAO,CAACP,OAAAA;AArFvC,YAAAgC;AAqF+ChC,iBAAAA,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAAwCmB,iBAAgBA;OAAAA;AAEnG,QAAIC,eAAec,MAAMC,QAAQf,WAAAA,MAAgBA,2CAAaU,UAAS,GAAG;AACxE,YAAMM,eAAe5B,SAASY,aAAa,MAAM,qBAAA;AAEjDC,YAAMA,IAAId,OAAO,CAACP,OAAAA;AA1FxB,YAAAgC;AA2FQ,cAAMK,0BAA0BrC,MAAAA,yBAAIiC,UAAJjC,gBAAAA,IAA0CoB;AAE1E,eAAOiB,2BAA2BnC,UAAagC,MAAMC,QAAQE,sBAAAA,KAA2BA,uBAAuBP,SAAS;;UAEpHC,YAAYK,cAAcC,0BAA0B,CAAA,CAAE;YAEtD;MACN,CAAA;IACF;AACA,QAAIpC,cAAcC,QAAW;AAC3BmB,YACEH,UAAU,SACRG,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA,IACxDoB,IAAId,OAAOR,YAAAA,EAAcQ,OAAO,CAACP,OAAOA,GAAGC,aAAaA,SAAAA;IAC9D;AACA,UAAMqC,cAActB,SAASK,IAAIS;AACjC,UAAMS,eAAetB,UAAU;AAC/B,WAAOI,IAAImB,MAAMD,cAAcD,WAAAA;EACjC;AACF;AAvCUlC;AACR,cALWD,4BAKKsC,iBAAgB;EAACC;;AAL5B,IAAMvC,4BAAN;","names":["containsAll","assertEx","exists","hexFromHexString","isBoundWitness","BoundWitnessDiviner","BoundWitnessDivinerConfigSchema","isBoundWitnessDivinerQueryPayload","hasTimestamp","bw","timestamp","undefined","MemoryBoundWitnessDiviner","BoundWitnessDiviner","divineHandler","payloads","filter","assertEx","isBoundWitnessDivinerQueryPayload","pop","archivist","getArchivist","addresses","payload_hashes","payload_schemas","limit","offset","order","sourceQuery","destination","bws","all","isBoundWitness","reverse","allAddresses","map","address","hexFromHexString","exists","length","containsAll","_a","$meta","Array","isArray","targetFilter","targetDestinationField","parsedLimit","parsedOffset","slice","configSchemas","BoundWitnessDivinerConfigSchema"]}
package/package.json CHANGED
@@ -10,14 +10,14 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/array": "^3.0.13",
14
- "@xylabs/assert": "^3.0.13",
15
- "@xylabs/exists": "^3.0.13",
16
- "@xylabs/hex": "^3.0.13",
17
- "@xyo-network/boundwitness-model": "~2.92.7",
18
- "@xyo-network/diviner-boundwitness-abstract": "~2.92.7",
19
- "@xyo-network/diviner-boundwitness-model": "~2.92.7",
20
- "@xyo-network/payload-model": "~2.92.7"
13
+ "@xylabs/array": "^3.0.15",
14
+ "@xylabs/assert": "^3.0.15",
15
+ "@xylabs/exists": "^3.0.15",
16
+ "@xylabs/hex": "^3.0.15",
17
+ "@xyo-network/boundwitness-model": "~2.92.8",
18
+ "@xyo-network/diviner-boundwitness-abstract": "~2.92.8",
19
+ "@xyo-network/diviner-boundwitness-model": "~2.92.8",
20
+ "@xyo-network/payload-model": "~2.92.8"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@xylabs/ts-scripts-yarn3": "^3.5.2",
@@ -63,6 +63,6 @@
63
63
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
64
64
  },
65
65
  "sideEffects": false,
66
- "version": "2.92.7",
66
+ "version": "2.92.8",
67
67
  "type": "module"
68
68
  }
@@ -73,9 +73,9 @@ export class MemoryBoundWitnessDiviner<
73
73
  static override configSchemas = [BoundWitnessDivinerConfigSchema]
74
74
 
75
75
  protected override async divineHandler(payloads?: TIn[]) {
76
- const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), 'Missing query payload')
76
+ const filter = assertEx(payloads?.filter(isBoundWitnessDivinerQueryPayload)?.pop(), () => 'Missing query payload')
77
77
  if (!filter) return []
78
- const archivist = assertEx(await this.getArchivist(), 'Unable to resolve archivist')
78
+ const archivist = assertEx(await this.getArchivist(), () => 'Unable to resolve archivist')
79
79
  const { addresses, payload_hashes, payload_schemas, limit, offset, order, sourceQuery, destination, timestamp } = filter
80
80
  let bws = ((await archivist?.all?.()) ?? []).filter(isBoundWitness) as WithMeta<BoundWitness>[]
81
81
  if (order === 'desc') bws = bws.reverse()
@@ -86,7 +86,7 @@ export class MemoryBoundWitnessDiviner<
86
86
  if (sourceQuery) bws = bws.filter((bw) => (bw?.$meta as { sourceQuery?: string })?.sourceQuery === sourceQuery)
87
87
  // If there's a destination filter of the right kind
88
88
  if (destination && Array.isArray(destination) && destination?.length > 0) {
89
- const targetFilter = assertEx(destination, 'Missing destination')
89
+ const targetFilter = assertEx(destination, () => 'Missing destination')
90
90
  // Find all BWs that satisfy the destination constraint
91
91
  bws = bws.filter((bw) => {
92
92
  const targetDestinationField = (bw?.$meta as { destination?: string[] })?.destination