@xyo-network/diviner-payload-pointer-memory 3.6.0-rc.9 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAGrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAG3E,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAEvG,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AAgCjE,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
1
+ {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAGrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAG3E,OAAO,KAAK,EAC0B,cAAc,EACnD,MAAM,4CAA4C,CAAA;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA8BjE,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA4B7B,CAAA"}
@@ -17,54 +17,54 @@ import { PayloadWrapper } from "@xyo-network/payload-wrapper";
17
17
  // src/combineRules.ts
18
18
  import { assertEx } from "@xylabs/assert";
19
19
  import { exists } from "@xylabs/exists";
20
- import { isPayloadAddressRule, isPayloadSchemaRule, isPayloadTimestampOrderRule } from "@xyo-network/diviner-payload-pointer-model";
20
+ import { isPayloadAddressRule, isPayloadSchemaRule, isPayloadSequenceOrderRule } from "@xyo-network/diviner-payload-pointer-model";
21
21
  var combineRules = /* @__PURE__ */ __name((rules) => {
22
22
  const addresses = rules.flat().filter(isPayloadAddressRule).map((r) => r.address).filter(exists);
23
23
  const schemas = rules.flat().filter(isPayloadSchemaRule).map((r) => r.schema).filter(exists);
24
24
  assertEx(schemas.length, () => "At least one schema must be supplied");
25
- const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists);
26
- assertEx(directionTimestamp.length < 2, () => "Must not supply more than 1 direction/timestamp rule");
27
- const order = directionTimestamp[0]?.order || "desc";
28
- const timestamp = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now();
25
+ const sequenceOrderRule = rules.flat().filter(isPayloadSequenceOrderRule).filter(exists);
26
+ assertEx(sequenceOrderRule.length < 2, () => "Must not supply more than 1 direction/timestamp rule");
27
+ const order = sequenceOrderRule[0]?.order || "desc";
28
+ const cursor = sequenceOrderRule[0]?.sequence;
29
29
  return {
30
30
  addresses,
31
+ cursor,
31
32
  order,
32
- schemas,
33
- timestamp
33
+ schemas
34
34
  };
35
35
  }, "combineRules");
36
36
 
37
37
  // src/findPayload.ts
38
38
  var limit = 1;
39
39
  var createBoundWitnessFilterFromSearchCriteria = /* @__PURE__ */ __name((searchCriteria) => {
40
- const { addresses, order = "desc", schemas, timestamp } = searchCriteria;
40
+ const { addresses, order = "desc", schemas, cursor } = searchCriteria;
41
41
  const query = {
42
42
  addresses,
43
43
  limit,
44
44
  order,
45
45
  payload_schemas: schemas,
46
- schema: BoundWitnessDivinerQuerySchema,
47
- timestamp
46
+ schema: BoundWitnessDivinerQuerySchema
48
47
  };
48
+ if (cursor) query.cursor = cursor;
49
49
  return [
50
50
  query
51
51
  ];
52
52
  }, "createBoundWitnessFilterFromSearchCriteria");
53
53
  var createPayloadFilterFromSearchCriteria = /* @__PURE__ */ __name((searchCriteria) => {
54
- const { order = "desc", schemas, timestamp } = searchCriteria;
54
+ const { order = "desc", schemas } = searchCriteria;
55
55
  const query = {
56
56
  limit,
57
57
  order,
58
58
  schema: PayloadDivinerQuerySchema,
59
- schemas,
60
- timestamp
59
+ schemas
61
60
  };
62
61
  return [
63
62
  query
64
63
  ];
65
64
  }, "createPayloadFilterFromSearchCriteria");
66
65
  var findPayload = /* @__PURE__ */ __name(async (archivist, boundWitnessDiviner, payloadDiviner, pointer) => {
67
- const searchCriteria = combineRules(pointer.reference);
66
+ const reference = pointer.reference;
67
+ const searchCriteria = combineRules(reference);
68
68
  const { addresses } = searchCriteria;
69
69
  const findWitnessedPayload = addresses?.length;
70
70
  const returnBoundWitness = isBoundWitnessPointer(pointer);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport type { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport type { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport type {\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport type { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { isBoundWitnessPointer } from '@xyo-network/diviner-payload-pointer-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const {\n addresses, order = 'desc', schemas, timestamp,\n } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const {\n order = 'desc', schemas, timestamp,\n } = searchCriteria\n const query: PayloadDivinerQueryPayload = {\n limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp,\n }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Order } from '@xyo-network/diviner-payload-model'\nimport type {\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport type { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport type { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport type {\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport type { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n PayloadRule, PayloadSearchCriteria, PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { isBoundWitnessPointer } from '@xyo-network/diviner-payload-pointer-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const {\n addresses, order = 'desc', schemas, cursor,\n } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n }\n if (cursor) query.cursor = cursor\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas } = searchCriteria\n const query: PayloadDivinerQueryPayload = {\n limit, order, schema: PayloadDivinerQuerySchema, schemas,\n }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const reference = pointer.reference as PayloadRule[][]\n const searchCriteria = combineRules(reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Order } from '@xyo-network/diviner-payload-model'\nimport type {\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadSequenceOrderRule,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const sequenceOrderRule = rules.flat().filter(isPayloadSequenceOrderRule).filter(exists)\n assertEx(sequenceOrderRule.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = sequenceOrderRule[0]?.order || 'desc'\n const cursor = sequenceOrderRule[0]?.sequence\n\n return {\n addresses,\n cursor,\n order,\n schemas,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadSequenceOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","sequenceOrderRule","isPayloadSequenceOrderRule","order","cursor","sequence","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","cursor","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","reference","combineRules","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/diviner-payload-pointer-memory",
3
- "version": "3.6.0-rc.9",
3
+ "version": "3.6.1",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,44 +29,44 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/assert": "^4.4.18",
33
- "@xylabs/exists": "^4.4.18",
34
- "@xylabs/hex": "^4.4.18",
35
- "@xyo-network/archivist-model": "^3.6.0-rc.9",
36
- "@xyo-network/boundwitness-wrapper": "^3.6.0-rc.9",
37
- "@xyo-network/diviner-abstract": "^3.6.0-rc.9",
38
- "@xyo-network/diviner-boundwitness-abstract": "^3.6.0-rc.9",
39
- "@xyo-network/diviner-boundwitness-model": "^3.6.0-rc.9",
40
- "@xyo-network/diviner-model": "^3.6.0-rc.9",
41
- "@xyo-network/diviner-payload-abstract": "^3.6.0-rc.9",
42
- "@xyo-network/diviner-payload-model": "^3.6.0-rc.9",
43
- "@xyo-network/diviner-payload-pointer-model": "^3.6.0-rc.9",
44
- "@xyo-network/payload-model": "^3.6.0-rc.9",
45
- "@xyo-network/payload-wrapper": "^3.6.0-rc.9"
32
+ "@xylabs/assert": "^4.4.26",
33
+ "@xylabs/exists": "^4.4.26",
34
+ "@xylabs/hex": "^4.4.26",
35
+ "@xyo-network/archivist-model": "^3.6.1",
36
+ "@xyo-network/boundwitness-wrapper": "^3.6.1",
37
+ "@xyo-network/diviner-abstract": "^3.6.1",
38
+ "@xyo-network/diviner-boundwitness-abstract": "^3.6.1",
39
+ "@xyo-network/diviner-boundwitness-model": "^3.6.1",
40
+ "@xyo-network/diviner-model": "^3.6.1",
41
+ "@xyo-network/diviner-payload-abstract": "^3.6.1",
42
+ "@xyo-network/diviner-payload-model": "^3.6.1",
43
+ "@xyo-network/diviner-payload-pointer-model": "^3.6.1",
44
+ "@xyo-network/payload-model": "^3.6.1",
45
+ "@xyo-network/payload-wrapper": "^3.6.1"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/uuid": "^10.0.0",
49
- "@xylabs/delay": "^4.4.18",
50
- "@xylabs/ts-scripts-yarn3": "^4.2.4",
51
- "@xylabs/tsconfig": "^4.2.4",
52
- "@xylabs/vitest-extended": "^4.4.18",
53
- "@xyo-network/account": "^3.6.0-rc.9",
54
- "@xyo-network/account-model": "^3.6.0-rc.9",
55
- "@xyo-network/archivist-memory": "^3.6.0-rc.9",
56
- "@xyo-network/boundwitness-builder": "^3.6.0-rc.9",
57
- "@xyo-network/boundwitness-model": "^3.6.0-rc.9",
58
- "@xyo-network/diviner-boundwitness-memory": "^3.6.0-rc.9",
59
- "@xyo-network/diviner-payload-memory": "^3.6.0-rc.9",
60
- "@xyo-network/node-memory": "^3.6.0-rc.9",
61
- "@xyo-network/node-model": "^3.6.0-rc.9",
62
- "@xyo-network/payload-builder": "^3.6.0-rc.9",
63
- "@xyo-network/wallet-model": "^3.6.0-rc.9",
49
+ "@xylabs/delay": "^4.4.26",
50
+ "@xylabs/ts-scripts-yarn3": "^4.2.6",
51
+ "@xylabs/tsconfig": "^4.2.6",
52
+ "@xylabs/vitest-extended": "^4.4.26",
53
+ "@xyo-network/account": "^3.6.1",
54
+ "@xyo-network/account-model": "^3.6.1",
55
+ "@xyo-network/archivist-memory": "^3.6.1",
56
+ "@xyo-network/boundwitness-builder": "^3.6.1",
57
+ "@xyo-network/boundwitness-model": "^3.6.1",
58
+ "@xyo-network/diviner-boundwitness-memory": "^3.6.1",
59
+ "@xyo-network/diviner-payload-generic": "^3.6.1",
60
+ "@xyo-network/diviner-payload-memory": "^3.6.1",
61
+ "@xyo-network/node-memory": "^3.6.1",
62
+ "@xyo-network/node-model": "^3.6.1",
63
+ "@xyo-network/payload-builder": "^3.6.1",
64
+ "@xyo-network/wallet-model": "^3.6.1",
64
65
  "typescript": "^5.7.2",
65
66
  "uuid": "^11.0.3",
66
67
  "vitest": "^2.1.8"
67
68
  },
68
69
  "publishConfig": {
69
70
  "access": "public"
70
- },
71
- "stableVersion": "3.5.2"
71
+ }
72
72
  }
@@ -9,7 +9,7 @@ import type {
9
9
  import {
10
10
  isPayloadAddressRule,
11
11
  isPayloadSchemaRule,
12
- isPayloadTimestampOrderRule,
12
+ isPayloadSequenceOrderRule,
13
13
  } from '@xyo-network/diviner-payload-pointer-model'
14
14
 
15
15
  // TODO: Could make it so that composability is such that we:
@@ -29,16 +29,16 @@ export const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {
29
29
  .filter(exists)
30
30
  assertEx(schemas.length, () => 'At least one schema must be supplied')
31
31
 
32
- const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)
33
- assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')
32
+ const sequenceOrderRule = rules.flat().filter(isPayloadSequenceOrderRule).filter(exists)
33
+ assertEx(sequenceOrderRule.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')
34
34
 
35
- const order: Order = directionTimestamp[0]?.order || 'desc'
36
- const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()
35
+ const order: Order = sequenceOrderRule[0]?.order || 'desc'
36
+ const cursor = sequenceOrderRule[0]?.sequence
37
37
 
38
38
  return {
39
39
  addresses,
40
+ cursor,
40
41
  order,
41
42
  schemas,
42
- timestamp,
43
43
  }
44
44
  }
@@ -6,7 +6,9 @@ import { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitnes
6
6
  import type { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'
7
7
  import type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'
8
8
  import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'
9
- import type { PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'
9
+ import type {
10
+ PayloadRule, PayloadSearchCriteria, PointerPayload,
11
+ } from '@xyo-network/diviner-payload-pointer-model'
10
12
  import { isBoundWitnessPointer } from '@xyo-network/diviner-payload-pointer-model'
11
13
  import type { Payload, Schema } from '@xyo-network/payload-model'
12
14
  import { PayloadWrapper } from '@xyo-network/payload-wrapper'
@@ -17,7 +19,7 @@ const limit = 1
17
19
 
18
20
  const createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {
19
21
  const {
20
- addresses, order = 'desc', schemas, timestamp,
22
+ addresses, order = 'desc', schemas, cursor,
21
23
  } = searchCriteria
22
24
  const query: BoundWitnessDivinerQueryPayload = {
23
25
  addresses,
@@ -25,17 +27,15 @@ const createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearc
25
27
  order,
26
28
  payload_schemas: schemas,
27
29
  schema: BoundWitnessDivinerQuerySchema,
28
- timestamp,
29
30
  }
31
+ if (cursor) query.cursor = cursor
30
32
  return [query]
31
33
  }
32
34
 
33
35
  const createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {
34
- const {
35
- order = 'desc', schemas, timestamp,
36
- } = searchCriteria
36
+ const { order = 'desc', schemas } = searchCriteria
37
37
  const query: PayloadDivinerQueryPayload = {
38
- limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp,
38
+ limit, order, schema: PayloadDivinerQuerySchema, schemas,
39
39
  }
40
40
  return [query]
41
41
  }
@@ -46,7 +46,8 @@ export const findPayload = async (
46
46
  payloadDiviner: PayloadDiviner,
47
47
  pointer: PointerPayload,
48
48
  ): Promise<Payload | undefined> => {
49
- const searchCriteria = combineRules(pointer.reference)
49
+ const reference = pointer.reference as PayloadRule[][]
50
+ const searchCriteria = combineRules(reference)
50
51
  const { addresses } = searchCriteria
51
52
  const findWitnessedPayload = addresses?.length
52
53
  const returnBoundWitness = isBoundWitnessPointer(pointer)
@@ -1,8 +1,8 @@
1
1
  import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'
2
2
  import { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'
3
3
  import { BoundWitnessDivinerConfigSchema } from '@xyo-network/diviner-boundwitness-model'
4
+ import { GenericPayloadDivinerConfigSchema } from '@xyo-network/diviner-payload-generic'
4
5
  import { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'
5
- import { PayloadDivinerConfigSchema } from '@xyo-network/diviner-payload-model'
6
6
  import type { PayloadPointerDivinerConfig } from '@xyo-network/diviner-payload-pointer-model'
7
7
  import { PayloadPointerDivinerConfigSchema } from '@xyo-network/diviner-payload-pointer-model'
8
8
  import { MemoryNode } from '@xyo-network/node-memory'
@@ -16,12 +16,12 @@ export const PayloadDivinerName = 'PayloadDiviner'
16
16
  export const PayloadPointerDivinerName = 'PayloadPointerDiviner'
17
17
 
18
18
  export const getTestNode = async (): Promise<NodeInstance> => {
19
- const node = await MemoryNode.create()
19
+ const node = await MemoryNode.create({ account: 'random' })
20
20
  const archivist = await MemoryArchivist.create({ account: 'random', config: { schema: MemoryArchivistConfigSchema, name: ArchivistName } })
21
21
  const payloadDiviner = await MemoryPayloadDiviner.create({
22
22
  account: 'random',
23
23
  config: {
24
- schema: PayloadDivinerConfigSchema, name: PayloadDivinerName, archivist: ArchivistName,
24
+ schema: GenericPayloadDivinerConfigSchema, name: PayloadDivinerName, archivist: ArchivistName,
25
25
  },
26
26
  })
27
27
  const boundWitnessDiviner = await MemoryBoundWitnessDiviner.create({
@@ -4,11 +4,11 @@ import { v4 as uuid } from 'uuid'
4
4
 
5
5
  import { schema } from './schema.ts'
6
6
 
7
- export const getNewPayload = async (): Promise<Payload> => {
7
+ export const getNewPayload = (): Payload => {
8
8
  const fields = { schema: 'network.xyo.id', salt: uuid() }
9
- return await new PayloadBuilder({ schema }).fields(fields).build()
9
+ return new PayloadBuilder({ schema }).fields(fields).build()
10
10
  }
11
11
 
12
- export const getNewPayloads = async (numPayloads: number) => {
13
- return await Promise.all(Array.from({ length: numPayloads }).fill(0).map(getNewPayload))
12
+ export const getNewPayloads = (numPayloads: number) => {
13
+ return Array.from({ length: numPayloads }).fill(0).map(getNewPayload)
14
14
  }
@@ -4,17 +4,19 @@ import type {
4
4
  PayloadPointerPayload,
5
5
  PayloadRule,
6
6
  PayloadSchemaRule,
7
- PayloadTimestampOrderRule,
7
+ PayloadSequenceOrderRule,
8
8
  } from '@xyo-network/diviner-payload-pointer-model'
9
9
  import { PayloadPointerSchema } from '@xyo-network/diviner-payload-pointer-model'
10
10
  import { PayloadBuilder } from '@xyo-network/payload-builder'
11
+ import type { Sequence } from '@xyo-network/payload-model'
12
+ import { SequenceConstants } from '@xyo-network/payload-model'
11
13
 
12
- export const createPointer = async (
14
+ export const createPointer = (
13
15
  addresses: string[][] = [],
14
16
  schemas: string[][] = [],
15
- timestamp = Date.now(),
16
17
  order: Order = 'desc',
17
- ): Promise<PayloadPointerPayload> => {
18
+ sequence?: Sequence,
19
+ ): PayloadPointerPayload => {
18
20
  const reference: PayloadRule[][] = []
19
21
 
20
22
  const schemaRules: PayloadSchemaRule[][] = schemas.map((rules) => {
@@ -31,8 +33,9 @@ export const createPointer = async (
31
33
  })
32
34
  if (addressRules.length > 0) reference.push(...addressRules)
33
35
 
34
- const timestampRule: PayloadTimestampOrderRule = { order, timestamp }
35
- reference.push([timestampRule])
36
+ const sequenceOrderRule: PayloadSequenceOrderRule = { order }
37
+ if (sequence != SequenceConstants.minLocalSequence) sequenceOrderRule.sequence = sequence
38
+ reference.push([sequenceOrderRule])
36
39
 
37
- return await new PayloadBuilder<PayloadPointerPayload>({ schema: PayloadPointerSchema }).fields({ reference }).build()
40
+ return new PayloadBuilder<PayloadPointerPayload>({ schema: PayloadPointerSchema }).fields({ reference }).build()
38
41
  }