@xyo-network/diviner-temporal-indexing-memory 2.85.8 → 2.86.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":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAUjI"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAOjI"}
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAUjI"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAOjI"}
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAUjI"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAOjI"}
@@ -294,7 +294,7 @@ var import_diviner_temporal_indexing_model5 = require("@xyo-network/diviner-temp
294
294
  var import_diviner_wrapper = require("@xyo-network/diviner-wrapper");
295
295
  var import_module_model = require("@xyo-network/module-model");
296
296
  var import_payload_builder3 = require("@xyo-network/payload-builder");
297
- var import_payload_model2 = require("@xyo-network/payload-model");
297
+ var import_payload_utils2 = require("@xyo-network/payload-utils");
298
298
  var import_witness_timestamp = require("@xyo-network/witness-timestamp");
299
299
  var order = "asc";
300
300
  var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
@@ -396,14 +396,13 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_d
396
396
  return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
397
397
  }
398
398
  async getPayloadsInBoundWitness(bw, archivist) {
399
- const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema));
400
- const hashes = indexes.map((index) => bw.payload_hashes?.[index]);
401
- const results = await archivist.get(hashes);
402
- const indexCandidateIdentityFunctions = this.payload_schemas.map(import_payload_model2.isPayloadOfSchemaType);
403
- const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
404
- if (filteredResults.includes(void 0))
399
+ const combinations = (0, import_payload_utils2.intraBoundwitnessSchemaCombinations)(bw, this.payload_schemas).flat();
400
+ if (combinations.length === 0)
405
401
  return void 0;
406
- const indexCandidates = filteredResults.filter(import_exists2.exists);
402
+ const hashes = new Set(combinations);
403
+ const indexCandidates = await archivist.get([
404
+ ...hashes
405
+ ]);
407
406
  return [
408
407
  bw,
409
408
  ...indexCandidates
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["TemporalIndexingDiviner","IndexingDiviner","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","startHandler","import_diviner_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","import_diviner_abstract","import_diviner_jsonpath_aggregate_memory","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","import_diviner_abstract","import_diviner_model","import_diviner_payload_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","import_assert","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_model","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","indexes","findIndex","s","hashes","index","payload_hashes","results","get","indexCandidateIdentityFunctions","isPayloadOfSchemaType","filteredResults","is","includes"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.payload_schemas).flat()\n if (combinations.length === 0) return undefined\n const hashes = new Set(combinations)\n const indexCandidates = await archivist.get([...hashes])\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["TemporalIndexingDiviner","IndexingDiviner","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","startHandler","import_diviner_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","import_diviner_abstract","import_diviner_jsonpath_aggregate_memory","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","import_diviner_abstract","import_diviner_model","import_diviner_payload_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","import_assert","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_utils","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","combinations","intraBoundwitnessSchemaCombinations","hashes","Set","get"]}
@@ -266,7 +266,7 @@ import { TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema } from
266
266
  import { DivinerWrapper } from "@xyo-network/diviner-wrapper";
267
267
  import { isModuleState, ModuleStateSchema } from "@xyo-network/module-model";
268
268
  import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
269
- import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
269
+ import { intraBoundwitnessSchemaCombinations as intraBoundwitnessSchemaCombinations2 } from "@xyo-network/payload-utils";
270
270
  import { TimestampSchema } from "@xyo-network/witness-timestamp";
271
271
  var order = "asc";
272
272
  var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
@@ -368,14 +368,13 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
368
368
  return DivinerWrapper.wrap(mod, this.account);
369
369
  }
370
370
  async getPayloadsInBoundWitness(bw, archivist) {
371
- const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema));
372
- const hashes = indexes.map((index) => bw.payload_hashes?.[index]);
373
- const results = await archivist.get(hashes);
374
- const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType2);
375
- const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
376
- if (filteredResults.includes(void 0))
371
+ const combinations = intraBoundwitnessSchemaCombinations2(bw, this.payload_schemas).flat();
372
+ if (combinations.length === 0)
377
373
  return void 0;
378
- const indexCandidates = filteredResults.filter(exists2);
374
+ const hashes = new Set(combinations);
375
+ const indexCandidates = await archivist.get([
376
+ ...hashes
377
+ ]);
379
378
  return [
380
379
  bw,
381
380
  ...indexCandidates
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["IndexingDiviner","IndexingDivinerConfigSchema","DivinerConfigSchema","TemporalIndexingDivinerConfigSchema","TemporalIndexingDiviner","IndexingDiviner","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","startHandler","AbstractDiviner","jsonPathToTransformersDictionary","reducePayloads","DivinerConfigSchema","PayloadDivinerQuerySchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadBuilder","isPayloadOfSchemaType","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","containsAll","assertEx","exists","isBoundWitness","AbstractDiviner","jsonPathToTransformersDictionary","DivinerConfigSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadHasher","PayloadBuilder","intraBoundwitnessSchemaCombinations","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","AbstractDiviner","DivinerConfigSchema","isPayloadDivinerQueryPayload","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","assertEx","exists","ArchivistWrapper","isBoundWitness","AbstractDiviner","BoundWitnessDivinerQuerySchema","DivinerConfigSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","DivinerWrapper","isModuleState","ModuleStateSchema","PayloadBuilder","isPayloadOfSchemaType","TimestampSchema","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","indexes","findIndex","s","hashes","index","payload_hashes","results","get","indexCandidateIdentityFunctions","isPayloadOfSchemaType","filteredResults","is","includes"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.payload_schemas).flat()\n if (combinations.length === 0) return undefined\n const hashes = new Set(combinations)\n const indexCandidates = await archivist.get([...hashes])\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["IndexingDiviner","IndexingDivinerConfigSchema","DivinerConfigSchema","TemporalIndexingDivinerConfigSchema","TemporalIndexingDiviner","IndexingDiviner","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","startHandler","AbstractDiviner","jsonPathToTransformersDictionary","reducePayloads","DivinerConfigSchema","PayloadDivinerQuerySchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadBuilder","isPayloadOfSchemaType","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","containsAll","assertEx","exists","isBoundWitness","AbstractDiviner","jsonPathToTransformersDictionary","DivinerConfigSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadHasher","PayloadBuilder","intraBoundwitnessSchemaCombinations","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","AbstractDiviner","DivinerConfigSchema","isPayloadDivinerQueryPayload","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","assertEx","exists","ArchivistWrapper","isBoundWitness","AbstractDiviner","BoundWitnessDivinerQuerySchema","DivinerConfigSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","DivinerWrapper","isModuleState","ModuleStateSchema","PayloadBuilder","intraBoundwitnessSchemaCombinations","TimestampSchema","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","combinations","intraBoundwitnessSchemaCombinations","hashes","Set","get"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAUjI"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAOjI"}
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAUjI"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAOjI"}
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAUjI"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/StateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAEL,yDAAyD,EAC1D,MAAM,8CAA8C,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAmB,MAAM,gCAAgC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAC5C;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAYD;;GAEG;AACH,qBAAa,mDAAmD,CAC9D,OAAO,SAAS,yDAAyD,GAAG,yDAAyD,CACrI,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,YAAY,oFAAkE;IACvG,OAAgB,aAAa,WAAyF;IACtH,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpB;IAED,IAAI,mBAAmB,WAEtB;IAED;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,MAAM,EAAE,CAGxC;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IA0B7G;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7E;;;OAGG;cACa,8BAA8B,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;cAarE,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;CAOjI"}
@@ -297,7 +297,7 @@ var import_diviner_temporal_indexing_model5 = require("@xyo-network/diviner-temp
297
297
  var import_diviner_wrapper = require("@xyo-network/diviner-wrapper");
298
298
  var import_module_model = require("@xyo-network/module-model");
299
299
  var import_payload_builder3 = require("@xyo-network/payload-builder");
300
- var import_payload_model2 = require("@xyo-network/payload-model");
300
+ var import_payload_utils2 = require("@xyo-network/payload-utils");
301
301
  var import_witness_timestamp = require("@xyo-network/witness-timestamp");
302
302
  var order = "asc";
303
303
  var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
@@ -391,20 +391,13 @@ var _TemporalIndexingDivinerStateToIndexCandidateDiviner = class _TemporalIndexi
391
391
  return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
392
392
  }
393
393
  async getPayloadsInBoundWitness(bw, archivist) {
394
- const indexes = this.payload_schemas.map((schema) => {
395
- var _a;
396
- return (_a = bw.payload_schemas) == null ? void 0 : _a.findIndex((s) => s === schema);
397
- });
398
- const hashes = indexes.map((index) => {
399
- var _a;
400
- return (_a = bw.payload_hashes) == null ? void 0 : _a[index];
401
- });
402
- const results = await archivist.get(hashes);
403
- const indexCandidateIdentityFunctions = this.payload_schemas.map(import_payload_model2.isPayloadOfSchemaType);
404
- const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
405
- if (filteredResults.includes(void 0))
394
+ const combinations = (0, import_payload_utils2.intraBoundwitnessSchemaCombinations)(bw, this.payload_schemas).flat();
395
+ if (combinations.length === 0)
406
396
  return void 0;
407
- const indexCandidates = filteredResults.filter(import_exists2.exists);
397
+ const hashes = new Set(combinations);
398
+ const indexCandidates = await archivist.get([
399
+ ...hashes
400
+ ]);
408
401
  return [
409
402
  bw,
410
403
  ...indexCandidates
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["TemporalIndexingDiviner","IndexingDiviner","startHandler","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","import_diviner_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_diviner_abstract","import_diviner_jsonpath_aggregate_memory","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_diviner_abstract","import_diviner_model","import_diviner_payload_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_assert","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_model","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","indexes","findIndex","s","hashes","index","payload_hashes","results","get","indexCandidateIdentityFunctions","isPayloadOfSchemaType","filteredResults","is","includes","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.payload_schemas).flat()\n if (combinations.length === 0) return undefined\n const hashes = new Set(combinations)\n const indexCandidates = await archivist.get([...hashes])\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["TemporalIndexingDiviner","IndexingDiviner","startHandler","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","import_diviner_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_diviner_abstract","import_diviner_jsonpath_aggregate_memory","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_diviner_abstract","import_diviner_model","import_diviner_payload_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_assert","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_utils","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","combinations","intraBoundwitnessSchemaCombinations","hashes","Set","get","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels"]}
@@ -269,7 +269,7 @@ import { TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema } from
269
269
  import { DivinerWrapper } from "@xyo-network/diviner-wrapper";
270
270
  import { isModuleState, ModuleStateSchema } from "@xyo-network/module-model";
271
271
  import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
272
- import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
272
+ import { intraBoundwitnessSchemaCombinations as intraBoundwitnessSchemaCombinations2 } from "@xyo-network/payload-utils";
273
273
  import { TimestampSchema } from "@xyo-network/witness-timestamp";
274
274
  var order = "asc";
275
275
  var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
@@ -363,20 +363,13 @@ var _TemporalIndexingDivinerStateToIndexCandidateDiviner = class _TemporalIndexi
363
363
  return DivinerWrapper.wrap(mod, this.account);
364
364
  }
365
365
  async getPayloadsInBoundWitness(bw, archivist) {
366
- const indexes = this.payload_schemas.map((schema) => {
367
- var _a;
368
- return (_a = bw.payload_schemas) == null ? void 0 : _a.findIndex((s) => s === schema);
369
- });
370
- const hashes = indexes.map((index) => {
371
- var _a;
372
- return (_a = bw.payload_hashes) == null ? void 0 : _a[index];
373
- });
374
- const results = await archivist.get(hashes);
375
- const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType2);
376
- const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
377
- if (filteredResults.includes(void 0))
366
+ const combinations = intraBoundwitnessSchemaCombinations2(bw, this.payload_schemas).flat();
367
+ if (combinations.length === 0)
378
368
  return void 0;
379
- const indexCandidates = filteredResults.filter(exists2);
369
+ const hashes = new Set(combinations);
370
+ const indexCandidates = await archivist.get([
371
+ ...hashes
372
+ ]);
380
373
  return [
381
374
  bw,
382
375
  ...indexCandidates
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["IndexingDiviner","IndexingDivinerConfigSchema","DivinerConfigSchema","TemporalIndexingDivinerConfigSchema","TemporalIndexingDiviner","IndexingDiviner","startHandler","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","AbstractDiviner","jsonPathToTransformersDictionary","reducePayloads","DivinerConfigSchema","PayloadDivinerQuerySchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadBuilder","isPayloadOfSchemaType","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","containsAll","assertEx","exists","isBoundWitness","AbstractDiviner","jsonPathToTransformersDictionary","DivinerConfigSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadHasher","PayloadBuilder","intraBoundwitnessSchemaCombinations","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","AbstractDiviner","DivinerConfigSchema","isPayloadDivinerQueryPayload","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","assertEx","exists","ArchivistWrapper","isBoundWitness","AbstractDiviner","BoundWitnessDivinerQuerySchema","DivinerConfigSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","DivinerWrapper","isModuleState","ModuleStateSchema","PayloadBuilder","isPayloadOfSchemaType","TimestampSchema","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","indexes","findIndex","s","hashes","index","payload_hashes","results","get","indexCandidateIdentityFunctions","isPayloadOfSchemaType","filteredResults","is","includes","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.payload_schemas).flat()\n if (combinations.length === 0) return undefined\n const hashes = new Set(combinations)\n const indexCandidates = await archivist.get([...hashes])\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["IndexingDiviner","IndexingDivinerConfigSchema","DivinerConfigSchema","TemporalIndexingDivinerConfigSchema","TemporalIndexingDiviner","IndexingDiviner","startHandler","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","AbstractDiviner","jsonPathToTransformersDictionary","reducePayloads","DivinerConfigSchema","PayloadDivinerQuerySchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadBuilder","isPayloadOfSchemaType","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","containsAll","assertEx","exists","isBoundWitness","AbstractDiviner","jsonPathToTransformersDictionary","DivinerConfigSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadHasher","PayloadBuilder","intraBoundwitnessSchemaCombinations","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","AbstractDiviner","DivinerConfigSchema","isPayloadDivinerQueryPayload","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","assertEx","exists","ArchivistWrapper","isBoundWitness","AbstractDiviner","BoundWitnessDivinerQuerySchema","DivinerConfigSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","DivinerWrapper","isModuleState","ModuleStateSchema","PayloadBuilder","intraBoundwitnessSchemaCombinations","TimestampSchema","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","combinations","intraBoundwitnessSchemaCombinations","hashes","Set","get","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels"]}
package/package.json CHANGED
@@ -13,37 +13,37 @@
13
13
  "@xylabs/array": "^2.13.23",
14
14
  "@xylabs/assert": "^2.13.23",
15
15
  "@xylabs/exists": "^2.13.23",
16
- "@xyo-network/archivist-model": "~2.85.8",
17
- "@xyo-network/archivist-wrapper": "~2.85.8",
18
- "@xyo-network/boundwitness-model": "~2.85.8",
19
- "@xyo-network/diviner-abstract": "~2.85.8",
20
- "@xyo-network/diviner-boundwitness-model": "~2.85.8",
21
- "@xyo-network/diviner-indexing-memory": "~2.85.8",
22
- "@xyo-network/diviner-indexing-model": "~2.85.8",
23
- "@xyo-network/diviner-jsonpath-aggregate-memory": "~2.85.8",
24
- "@xyo-network/diviner-jsonpath-model": "~2.85.8",
25
- "@xyo-network/diviner-model": "~2.85.8",
26
- "@xyo-network/diviner-payload-model": "~2.85.8",
27
- "@xyo-network/diviner-temporal-indexing-model": "~2.85.8",
28
- "@xyo-network/diviner-wrapper": "~2.85.8",
29
- "@xyo-network/hash": "~2.85.8",
30
- "@xyo-network/module-model": "~2.85.8",
31
- "@xyo-network/payload-builder": "~2.85.8",
32
- "@xyo-network/payload-model": "~2.85.8",
33
- "@xyo-network/payload-utils": "^2.85.8",
34
- "@xyo-network/witness-timestamp": "~2.85.8"
16
+ "@xyo-network/archivist-model": "~2.86.0",
17
+ "@xyo-network/archivist-wrapper": "~2.86.0",
18
+ "@xyo-network/boundwitness-model": "~2.86.0",
19
+ "@xyo-network/diviner-abstract": "~2.86.0",
20
+ "@xyo-network/diviner-boundwitness-model": "~2.86.0",
21
+ "@xyo-network/diviner-indexing-memory": "~2.86.0",
22
+ "@xyo-network/diviner-indexing-model": "~2.86.0",
23
+ "@xyo-network/diviner-jsonpath-aggregate-memory": "~2.86.0",
24
+ "@xyo-network/diviner-jsonpath-model": "~2.86.0",
25
+ "@xyo-network/diviner-model": "~2.86.0",
26
+ "@xyo-network/diviner-payload-model": "~2.86.0",
27
+ "@xyo-network/diviner-temporal-indexing-model": "~2.86.0",
28
+ "@xyo-network/diviner-wrapper": "~2.86.0",
29
+ "@xyo-network/hash": "~2.86.0",
30
+ "@xyo-network/module-model": "~2.86.0",
31
+ "@xyo-network/payload-builder": "~2.86.0",
32
+ "@xyo-network/payload-model": "~2.86.0",
33
+ "@xyo-network/payload-utils": "^2.86.0",
34
+ "@xyo-network/witness-timestamp": "~2.86.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@xylabs/delay": "^2.13.23",
38
38
  "@xylabs/ts-scripts-yarn3": "^3.2.25",
39
39
  "@xylabs/tsconfig": "^3.2.25",
40
- "@xyo-network/account": "~2.85.8",
41
- "@xyo-network/archivist-memory": "~2.85.8",
42
- "@xyo-network/boundwitness-builder": "~2.85.8",
43
- "@xyo-network/diviner-boundwitness-memory": "~2.85.8",
44
- "@xyo-network/diviner-payload-memory": "~2.85.8",
45
- "@xyo-network/manifest": "~2.85.8",
46
- "@xyo-network/node-memory": "~2.85.8",
40
+ "@xyo-network/account": "~2.86.0",
41
+ "@xyo-network/archivist-memory": "~2.86.0",
42
+ "@xyo-network/boundwitness-builder": "~2.86.0",
43
+ "@xyo-network/diviner-boundwitness-memory": "~2.86.0",
44
+ "@xyo-network/diviner-payload-memory": "~2.86.0",
45
+ "@xyo-network/manifest": "~2.86.0",
46
+ "@xyo-network/node-memory": "~2.86.0",
47
47
  "typescript": "^5.3.3"
48
48
  },
49
49
  "description": "Primary SDK for using XYO Protocol 2.0",
@@ -85,6 +85,6 @@
85
85
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
86
86
  },
87
87
  "sideEffects": false,
88
- "version": "2.85.8",
88
+ "version": "2.86.0",
89
89
  "type": "module"
90
90
  }
@@ -14,7 +14,8 @@ import {
14
14
  import { DivinerWrapper } from '@xyo-network/diviner-wrapper'
15
15
  import { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'
16
16
  import { PayloadBuilder } from '@xyo-network/payload-builder'
17
- import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'
17
+ import { Payload } from '@xyo-network/payload-model'
18
+ import { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'
18
19
  import { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'
19
20
 
20
21
  /**
@@ -128,13 +129,10 @@ export class TemporalIndexingDivinerStateToIndexCandidateDiviner<
128
129
  }
129
130
 
130
131
  protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {
131
- const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))
132
- const hashes = indexes.map((index) => bw.payload_hashes?.[index])
133
- const results = await archivist.get(hashes)
134
- const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType)
135
- const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))
136
- if (filteredResults.includes(undefined)) return undefined
137
- const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]
132
+ const combinations = intraBoundwitnessSchemaCombinations(bw, this.payload_schemas).flat()
133
+ if (combinations.length === 0) return undefined
134
+ const hashes = new Set(combinations)
135
+ const indexCandidates = await archivist.get([...hashes])
138
136
  return [bw, ...indexCandidates]
139
137
  }
140
138
  }
@@ -197,7 +197,7 @@
197
197
  },
198
198
  "language": "javascript",
199
199
  "name": "ImageThumbnailDiviner",
200
- "pollFrequency": 1000,
200
+ "pollFrequency": 100,
201
201
  "schema": "network.xyo.diviner.indexing.config",
202
202
  "stateStore": {
203
203
  "archivist": "AddressStateArchivist",