@xyo-network/diviner-payload-pointer-memory 2.110.16 → 2.111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["export * from './Diviner.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n }\n // Find payload\n else {\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map((r) => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map((r) => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,IAAAA,iBAAyB;AAEzB,8BAAgC;AAEhC,2BAA2E;AAE3E,IAAAC,wCAKO;;;ACVP,kCAAoC;AAEpC,wCAAgF;AAEhF,mCAAsE;AACtE,IAAAC,wCAA6E;AAE7E,6BAA+B;;;ACR/B,oBAAyB;AACzB,oBAAuB;AAGvB,2CAMO;AAKA,IAAMC,eAAe,wBAACC,UAAAA;AAC3B,QAAMC,YAAYD,MACfE,KAAI,EACJC,OAAOC,yDAAAA,EACPC,IAAI,CAACC,MAAMA,EAAEC,OAAO,EACpBJ,OAAOK,oBAAAA;AAEV,QAAMC,UAAUT,MACbE,KAAI,EACJC,OAAOO,wDAAAA,EACPL,IAAI,CAACC,MAAMA,EAAEK,MAAM,EACnBR,OAAOK,oBAAAA;AACVI,8BAASH,QAAQI,QAAQ,MAAM,sCAAA;AAE/B,QAAMC,qBAAqBd,MAAME,KAAI,EAAGC,OAAOY,gEAAAA,EAA6BZ,OAAOK,oBAAAA;AACnFI,8BAASE,mBAAmBD,SAAS,GAAG,MAAM,sDAAA;AAE9C,QAAMG,QAAeF,mBAAmB,CAAA,GAAIE,SAAS;AACrD,QAAMC,YAAoBH,mBAAmBD,SAAS,IAAIC,mBAAmB,CAAA,GAAIG,YAAYC,KAAKC,IAAG;AAErG,SAAO;IACLlB;IACAe;IACAP;IACAQ;EACF;AACF,GA1B4B;;;ADH5B,IAAMG,QAAQ;AAEd,IAAMC,6CAA6C,wBAACC,mBAAAA;AAClD,QAAM,EAAEC,WAAWC,QAAQ,QAAQC,SAASC,UAAS,IAAKJ;AAC1D,QAAMK,QAAyC;IAC7CJ;IACAH;IACAI;IACAI,iBAAiBH;IACjBI,QAAQC;IACRJ;EACF;AACA,SAAO;IAACC;;AACV,GAXmD;AAanD,IAAMI,wCAAwC,wBAACT,mBAAAA;AAC7C,QAAM,EAAEE,QAAQ,QAAQC,SAASC,UAAS,IAAKJ;AAC/C,QAAMK,QAAoC;IAAEP;IAAOI;IAAOK,QAAQG;IAA2BP;IAASC;EAAU;AAChH,SAAO;IAACC;;AACV,GAJ8C;AAMvC,IAAMM,cAAc,8BACzBC,WACAC,qBACAC,gBACAC,YAAAA;AAEA,QAAMf,iBAAiBgB,aAAaD,QAAQE,SAAS;AACrD,QAAM,EAAEhB,UAAS,IAAKD;AACtB,QAAMkB,uBAAuBjB,WAAWkB;AACxC,QAAMC,yBAAqBC,6DAAsBN,OAAAA;AACjD,MAAIK,sBAAsBF,sBAAsB;AAC9C,UAAMI,SAASvB,2CAA2CC,cAAAA;AAC1D,UAAMuB,SAAS,MAAMV,oBAAoBW,OAAOF,MAAAA;AAChD,UAAMG,KAAKF,SAAS,CAAA,IAAKG,gDAAoBC,MAAMJ,OAAO,CAAA,CAAE,IAAIK;AAChE,QAAIH,IAAI;AACN,UAAIL,mBAAoB,QAAOK,GAAGI;AAClC,YAAM,EAAE1B,SAASD,QAAQ,OAAM,IAAKF;AACpC,UAAI8B,eAAe5B,UAAU,QAAQ,IAAIuB,GAAGM,cAAcZ,SAAS;AACnE,UAAIhB,SAAS;AACX,cAAM6B,yBAAyB,wBAACzB,WAAmBJ,QAAQ8B,SAAS1B,MAAAA,GAArC;AAC/BuB,uBAAe5B,UAAU,QAAQuB,GAAGS,eAAeC,UAAUH,sBAAAA,IAA0BP,GAAGS,eAAeE,cAAcJ,sBAAAA;MACzH;AACA,YAAMK,OAAOZ,GAAGM,cAAcD,YAAAA;AAC9B,YAAMP,UAAS,MAAMX,UAAU0B,IAAI;QAACD;OAAK;AACzC,aAAOd,UAAS,CAAA,IAAKgB,sCAAeC,KAAKjB,UAAS,CAAA,CAAE,EAAEM,UAAUD;IAClE;EACF,OAEK;AACH,UAAMN,SAASb,sCAAsCT,cAAAA;AACrD,UAAMuB,SAAS,MAAMT,eAAeU,OAAOF,MAAAA;AAC3C,WAAOC,SAAS,CAAA,IAAKgB,sCAAeC,KAAKjB,SAAS,CAAA,CAAE,EAAEM,UAAUD;EAClE;AACF,GAjC2B;;;ADjBpB,IAAMa,wBAAN,cASGC,wCAAAA;EAzBV,OAyBUA;;;EACR,OAAyBC,gBAA0B;OAAI,MAAMA;IAAeC;;EAC5E,OAAyBC,sBAA8BD;EAEvD,MAAyBE,cAAcC,UAAmC;AACxE,UAAMC,UAAUD,UAAUE,KAAKC,sDAAAA;AAC/B,QAAI,CAACF,QAAS,QAAO,CAAA;AACrB,UAAMG,YAAY,MAAM,KAAKC,mBAAkB;AAC/C,UAAMC,sBAAsB,MAAM,KAAKC,uBAAsB;AAC7D,UAAMC,iBAAiB,MAAM,KAAKC,kBAAiB;AACnD,UAAMC,SAAU,MAAMC,YAAYP,WAAWE,qBAAqBE,gBAAgBP,OAAAA;AAClF,WAAOS,SAAS;MAACA;QAAU,CAAA;EAC7B;;;;;EAMA,MAAcH,yBAAuD;AACnE,UAAMK,WAAOC,yBAAS,KAAKC,QAAQR,qBAAqB,MAAM,6BAAA;AAC9D,UAAMS,UAAMF,yBAAS,MAAM,KAAKG,QAAQJ,IAAAA,GAAO,MAAM,8CAA8CA,IAAAA,eAAmB;AACtH,UAAMK,cAAUJ,6BAASK,wCAAkBH,GAAAA,GAAM,MAAM,UAAUH,IAAAA,gCAAoC;AACrG,WAAOK;EACT;;;;;EAMA,MAAcZ,qBAAiD;AAC7D,UAAMO,WAAOC,yBAAS,KAAKC,QAAQV,WAAW,MAAM,6BAAA;AACpD,eAAOS,yBAAS,MAAM,KAAKM,aAAY,GAAI,MAAM,oCAAoCP,IAAAA,eAAmB;EAC1G;;;;;EAMA,MAAcH,oBAA6C;AACzD,UAAMG,WAAOC,yBAAS,KAAKC,QAAQN,gBAAgB,MAAM,kCAAA;AACzD,UAAMO,UAAMF,yBAAS,MAAM,KAAKG,QAAQJ,IAAAA,GAAO,MAAM,yCAAyCA,IAAAA,eAAmB;AACjH,UAAMK,cAAUJ,6BAASK,wCAAkBH,GAAAA,GAAM,MAAM,UAAUH,IAAAA,2BAA+B;AAChG,WAAOK;EACT;AACF;","names":["import_assert","import_diviner_payload_pointer_model","import_diviner_payload_pointer_model","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["export * from './Diviner.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["import_assert","import_diviner_payload_pointer_model","import_diviner_payload_pointer_model","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
@@ -146,4 +146,4 @@ var PayloadPointerDiviner = class extends AbstractDiviner {
146
146
  export {
147
147
  PayloadPointerDiviner
148
148
  };
149
- //# sourceMappingURL=index.js.map
149
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["export * from './Diviner.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n }\n // Find payload\n else {\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map((r) => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map((r) => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["import_assert","import_diviner_payload_pointer_model","import_diviner_payload_pointer_model","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["export * from './Diviner.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["import_assert","import_diviner_payload_pointer_model","import_diviner_payload_pointer_model","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
@@ -146,4 +146,4 @@ var PayloadPointerDiviner = class extends AbstractDiviner {
146
146
  export {
147
147
  PayloadPointerDiviner
148
148
  };
149
- //# sourceMappingURL=index.js.map
149
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["export * from './Diviner.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n }\n // Find payload\n else {\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map((r) => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map((r) => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["import_assert","import_diviner_payload_pointer_model","import_diviner_payload_pointer_model","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["export * from './Diviner.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["import_assert","import_diviner_payload_pointer_model","import_diviner_payload_pointer_model","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema"]}
@@ -154,4 +154,4 @@ var PayloadPointerDiviner = _PayloadPointerDiviner;
154
154
  export {
155
155
  PayloadPointerDiviner
156
156
  };
157
- //# sourceMappingURL=index.js.map
157
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n }\n // Find payload\n else {\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map((r) => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map((r) => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema"]}
package/package.json CHANGED
@@ -10,36 +10,36 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.6.6",
14
- "@xylabs/exists": "^3.6.6",
15
- "@xylabs/hex": "^3.6.6",
16
- "@xyo-network/archivist-model": "^2.110.18",
17
- "@xyo-network/boundwitness-wrapper": "^2.110.18",
18
- "@xyo-network/diviner-abstract": "^2.110.18",
19
- "@xyo-network/diviner-boundwitness-abstract": "^2.110.18",
20
- "@xyo-network/diviner-boundwitness-model": "^2.110.18",
21
- "@xyo-network/diviner-model": "^2.110.18",
22
- "@xyo-network/diviner-payload-abstract": "^2.110.18",
23
- "@xyo-network/diviner-payload-model": "^2.110.18",
24
- "@xyo-network/diviner-payload-pointer-model": "^2.110.16",
25
- "@xyo-network/payload-model": "^2.110.18",
26
- "@xyo-network/payload-wrapper": "^2.110.18"
13
+ "@xylabs/assert": "^3.6.8",
14
+ "@xylabs/exists": "^3.6.8",
15
+ "@xylabs/hex": "^3.6.8",
16
+ "@xyo-network/archivist-model": "^2.111.0",
17
+ "@xyo-network/boundwitness-wrapper": "^2.111.0",
18
+ "@xyo-network/diviner-abstract": "^2.111.0",
19
+ "@xyo-network/diviner-boundwitness-abstract": "^2.111.0",
20
+ "@xyo-network/diviner-boundwitness-model": "^2.111.0",
21
+ "@xyo-network/diviner-model": "^2.111.0",
22
+ "@xyo-network/diviner-payload-abstract": "^2.111.0",
23
+ "@xyo-network/diviner-payload-model": "^2.111.0",
24
+ "@xyo-network/diviner-payload-pointer-model": "^2.111.0",
25
+ "@xyo-network/payload-model": "^2.111.0",
26
+ "@xyo-network/payload-wrapper": "^2.111.0"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/uuid": "^10.0.0",
30
- "@xylabs/ts-scripts-yarn3": "^3.14.1",
31
- "@xylabs/tsconfig": "^3.14.1",
32
- "@xyo-network/account": "^2.110.18",
33
- "@xyo-network/account-model": "^2.110.18",
34
- "@xyo-network/archivist-memory": "^2.110.18",
35
- "@xyo-network/boundwitness-builder": "^2.110.18",
36
- "@xyo-network/boundwitness-model": "^2.110.18",
37
- "@xyo-network/diviner-boundwitness-memory": "^2.110.18",
38
- "@xyo-network/diviner-payload-memory": "^2.110.18",
39
- "@xyo-network/node-memory": "^2.110.18",
40
- "@xyo-network/node-model": "^2.110.18",
41
- "@xyo-network/payload-builder": "^2.110.18",
42
- "@xyo-network/wallet-model": "^2.110.18",
30
+ "@xylabs/ts-scripts-yarn3": "^3.15.5",
31
+ "@xylabs/tsconfig": "^3.15.5",
32
+ "@xyo-network/account": "^2.111.0",
33
+ "@xyo-network/account-model": "^2.111.0",
34
+ "@xyo-network/archivist-memory": "^2.111.0",
35
+ "@xyo-network/boundwitness-builder": "^2.111.0",
36
+ "@xyo-network/boundwitness-model": "^2.111.0",
37
+ "@xyo-network/diviner-boundwitness-memory": "^2.111.0",
38
+ "@xyo-network/diviner-payload-memory": "^2.111.0",
39
+ "@xyo-network/node-memory": "^2.111.0",
40
+ "@xyo-network/node-model": "^2.111.0",
41
+ "@xyo-network/payload-builder": "^2.111.0",
42
+ "@xyo-network/wallet-model": "^2.111.0",
43
43
  "typescript": "^5.5.4",
44
44
  "uuid": "^10.0.0"
45
45
  },
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "import": {
56
56
  "types": "./dist/browser/index.d.mts",
57
- "default": "./dist/browser/index.js"
57
+ "default": "./dist/browser/index.mjs"
58
58
  }
59
59
  },
60
60
  "node": {
@@ -64,14 +64,14 @@
64
64
  },
65
65
  "import": {
66
66
  "types": "./dist/node/index.d.mts",
67
- "default": "./dist/node/index.js"
67
+ "default": "./dist/node/index.mjs"
68
68
  }
69
69
  }
70
70
  },
71
71
  "./package.json": "./package.json"
72
72
  },
73
73
  "main": "dist/node/index.cjs",
74
- "module": "dist/node/index.js",
74
+ "module": "dist/node/index.mjs",
75
75
  "homepage": "https://xyo.network",
76
76
  "license": "LGPL-3.0-only",
77
77
  "publishConfig": {
@@ -82,6 +82,6 @@
82
82
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
83
83
  },
84
84
  "sideEffects": false,
85
- "version": "2.110.16",
85
+ "version": "2.111.0",
86
86
  "type": "module"
87
87
  }
@@ -17,13 +17,13 @@ export const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {
17
17
  const addresses = rules
18
18
  .flat()
19
19
  .filter(isPayloadAddressRule)
20
- .map((r) => r.address)
20
+ .map(r => r.address)
21
21
  .filter(exists) as Address[]
22
22
 
23
23
  const schemas = rules
24
24
  .flat()
25
25
  .filter(isPayloadSchemaRule)
26
- .map((r) => r.schema)
26
+ .map(r => r.schema)
27
27
  .filter(exists)
28
28
  assertEx(schemas.length, () => 'At least one schema must be supplied')
29
29
 
@@ -57,9 +57,8 @@ export const findPayload = async (
57
57
  const result = await archivist.get([hash])
58
58
  return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined
59
59
  }
60
- }
61
- // Find payload
62
- else {
60
+ } else {
61
+ // Find payload
63
62
  const filter = createPayloadFilterFromSearchCriteria(searchCriteria)
64
63
  const result = await payloadDiviner.divine(filter)
65
64
  return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined
@@ -5,8 +5,8 @@ let _unitTestSigningAccount: Promise<AccountInstance> | undefined
5
5
  let _otherUnitTestSigningAccount: Promise<AccountInstance> | undefined
6
6
 
7
7
  export const unitTestSigningAccount = () =>
8
- (_unitTestSigningAccount =
9
- _unitTestSigningAccount ?? Account.create({ phrase: 'draw seven setup planet bitter return old bronze neither nephew panel pelican' }))
8
+ (_unitTestSigningAccount
9
+ = _unitTestSigningAccount ?? Account.create({ phrase: 'draw seven setup planet bitter return old bronze neither nephew panel pelican' }))
10
10
  export const otherUnitTestSigningAccount = () =>
11
- (_otherUnitTestSigningAccount =
12
- _otherUnitTestSigningAccount ?? Account.create({ phrase: 'pitch rich dentist meadow few club place dirt push sustain innocent fix' }))
11
+ (_otherUnitTestSigningAccount
12
+ = _otherUnitTestSigningAccount ?? Account.create({ phrase: 'pitch rich dentist meadow few club place dirt push sustain innocent fix' }))
@@ -2,6 +2,7 @@ import { assertEx } from '@xylabs/assert'
2
2
  import { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'
3
3
  import { NodeInstance } from '@xyo-network/node-model'
4
4
 
5
+ // eslint-disable-next-line import/no-internal-modules
5
6
  import { ArchivistName } from '../Node/getTestNode.ts'
6
7
 
7
8
  export const getArchivist = async (node: NodeInstance, name = ArchivistName): Promise<ArchivistInstance> => {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n }\n // Find payload\n else {\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map((r) => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map((r) => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n }\n // Find payload\n else {\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map((r) => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map((r) => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema"]}