@xyo-network/diviner-payload-pointer-memory 2.111.2 → 3.0.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.
Files changed (84) hide show
  1. package/dist/neutral/index.d.ts +15 -2
  2. package/package.json +32 -51
  3. package/xy.config.ts +12 -0
  4. package/dist/browser/Diviner.d.cts +0 -13
  5. package/dist/browser/Diviner.d.cts.map +0 -1
  6. package/dist/browser/Diviner.d.mts +0 -13
  7. package/dist/browser/Diviner.d.mts.map +0 -1
  8. package/dist/browser/Diviner.d.ts +0 -13
  9. package/dist/browser/Diviner.d.ts.map +0 -1
  10. package/dist/browser/combineRules.d.cts +0 -3
  11. package/dist/browser/combineRules.d.cts.map +0 -1
  12. package/dist/browser/combineRules.d.mts +0 -3
  13. package/dist/browser/combineRules.d.mts.map +0 -1
  14. package/dist/browser/combineRules.d.ts +0 -3
  15. package/dist/browser/combineRules.d.ts.map +0 -1
  16. package/dist/browser/findPayload.d.cts +0 -7
  17. package/dist/browser/findPayload.d.cts.map +0 -1
  18. package/dist/browser/findPayload.d.mts +0 -7
  19. package/dist/browser/findPayload.d.mts.map +0 -1
  20. package/dist/browser/findPayload.d.ts +0 -7
  21. package/dist/browser/findPayload.d.ts.map +0 -1
  22. package/dist/browser/index.cjs +0 -170
  23. package/dist/browser/index.cjs.map +0 -1
  24. package/dist/browser/index.d.cts +0 -2
  25. package/dist/browser/index.d.cts.map +0 -1
  26. package/dist/browser/index.d.mts +0 -2
  27. package/dist/browser/index.d.mts.map +0 -1
  28. package/dist/browser/index.d.ts +0 -2
  29. package/dist/browser/index.d.ts.map +0 -1
  30. package/dist/browser/index.mjs +0 -149
  31. package/dist/browser/index.mjs.map +0 -1
  32. package/dist/neutral/Diviner.d.cts +0 -13
  33. package/dist/neutral/Diviner.d.cts.map +0 -1
  34. package/dist/neutral/Diviner.d.mts +0 -13
  35. package/dist/neutral/Diviner.d.mts.map +0 -1
  36. package/dist/neutral/Diviner.d.ts +0 -13
  37. package/dist/neutral/Diviner.d.ts.map +0 -1
  38. package/dist/neutral/combineRules.d.cts +0 -3
  39. package/dist/neutral/combineRules.d.cts.map +0 -1
  40. package/dist/neutral/combineRules.d.mts +0 -3
  41. package/dist/neutral/combineRules.d.mts.map +0 -1
  42. package/dist/neutral/combineRules.d.ts +0 -3
  43. package/dist/neutral/combineRules.d.ts.map +0 -1
  44. package/dist/neutral/findPayload.d.cts +0 -7
  45. package/dist/neutral/findPayload.d.cts.map +0 -1
  46. package/dist/neutral/findPayload.d.mts +0 -7
  47. package/dist/neutral/findPayload.d.mts.map +0 -1
  48. package/dist/neutral/findPayload.d.ts +0 -7
  49. package/dist/neutral/findPayload.d.ts.map +0 -1
  50. package/dist/neutral/index.cjs +0 -170
  51. package/dist/neutral/index.cjs.map +0 -1
  52. package/dist/neutral/index.d.cts +0 -2
  53. package/dist/neutral/index.d.cts.map +0 -1
  54. package/dist/neutral/index.d.mts +0 -2
  55. package/dist/neutral/index.d.mts.map +0 -1
  56. package/dist/neutral/index.d.ts.map +0 -1
  57. package/dist/node/Diviner.d.cts +0 -13
  58. package/dist/node/Diviner.d.cts.map +0 -1
  59. package/dist/node/Diviner.d.mts +0 -13
  60. package/dist/node/Diviner.d.mts.map +0 -1
  61. package/dist/node/Diviner.d.ts +0 -13
  62. package/dist/node/Diviner.d.ts.map +0 -1
  63. package/dist/node/combineRules.d.cts +0 -3
  64. package/dist/node/combineRules.d.cts.map +0 -1
  65. package/dist/node/combineRules.d.mts +0 -3
  66. package/dist/node/combineRules.d.mts.map +0 -1
  67. package/dist/node/combineRules.d.ts +0 -3
  68. package/dist/node/combineRules.d.ts.map +0 -1
  69. package/dist/node/findPayload.d.cts +0 -7
  70. package/dist/node/findPayload.d.cts.map +0 -1
  71. package/dist/node/findPayload.d.mts +0 -7
  72. package/dist/node/findPayload.d.mts.map +0 -1
  73. package/dist/node/findPayload.d.ts +0 -7
  74. package/dist/node/findPayload.d.ts.map +0 -1
  75. package/dist/node/index.cjs +0 -182
  76. package/dist/node/index.cjs.map +0 -1
  77. package/dist/node/index.d.cts +0 -2
  78. package/dist/node/index.d.cts.map +0 -1
  79. package/dist/node/index.d.mts +0 -2
  80. package/dist/node/index.d.mts.map +0 -1
  81. package/dist/node/index.d.ts +0 -2
  82. package/dist/node/index.d.ts.map +0 -1
  83. package/dist/node/index.mjs +0 -157
  84. package/dist/node/index.mjs.map +0 -1
@@ -1,7 +0,0 @@
1
- import { ArchivistInstance } from '@xyo-network/archivist-model';
2
- import { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract';
3
- import { PayloadDiviner } from '@xyo-network/diviner-payload-abstract';
4
- import { PointerPayload } from '@xyo-network/diviner-payload-pointer-model';
5
- import { Payload } from '@xyo-network/payload-model';
6
- export declare const findPayload: (archivist: ArchivistInstance, boundWitnessDiviner: BoundWitnessDiviner, payloadDiviner: PayloadDiviner, pointer: PointerPayload) => Promise<Payload | undefined>;
7
- //# sourceMappingURL=findPayload.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1,7 +0,0 @@
1
- import { ArchivistInstance } from '@xyo-network/archivist-model';
2
- import { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract';
3
- import { PayloadDiviner } from '@xyo-network/diviner-payload-abstract';
4
- import { PointerPayload } from '@xyo-network/diviner-payload-pointer-model';
5
- import { Payload } from '@xyo-network/payload-model';
6
- export declare const findPayload: (archivist: ArchivistInstance, boundWitnessDiviner: BoundWitnessDiviner, payloadDiviner: PayloadDiviner, pointer: PointerPayload) => Promise<Payload | undefined>;
7
- //# sourceMappingURL=findPayload.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1,7 +0,0 @@
1
- import { ArchivistInstance } from '@xyo-network/archivist-model';
2
- import { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract';
3
- import { PayloadDiviner } from '@xyo-network/diviner-payload-abstract';
4
- import { PointerPayload } from '@xyo-network/diviner-payload-pointer-model';
5
- import { Payload } from '@xyo-network/payload-model';
6
- export declare const findPayload: (archivist: ArchivistInstance, boundWitnessDiviner: BoundWitnessDiviner, payloadDiviner: PayloadDiviner, pointer: PointerPayload) => Promise<Payload | undefined>;
7
- //# sourceMappingURL=findPayload.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findPayload.d.ts","sourceRoot":"","sources":["../../src/findPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAgD,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACzH,OAAO,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAA;AA0B5D,eAAO,MAAM,WAAW,cACX,iBAAiB,uBACP,mBAAmB,kBACxB,cAAc,WACrB,cAAc,KACtB,OAAO,CAAC,OAAO,GAAG,SAAS,CA2B7B,CAAA"}
@@ -1,182 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __reflectGet = Reflect.get;
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
- var __export = (target, all) => {
11
- for (var name in all)
12
- __defProp(target, name, { get: all[name], enumerable: true });
13
- };
14
- var __copyProps = (to, from, except, desc) => {
15
- if (from && typeof from === "object" || typeof from === "function") {
16
- for (let key of __getOwnPropNames(from))
17
- if (!__hasOwnProp.call(to, key) && key !== except)
18
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
- }
20
- return to;
21
- };
22
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
24
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
25
-
26
- // src/index.ts
27
- var src_exports = {};
28
- __export(src_exports, {
29
- PayloadPointerDiviner: () => PayloadPointerDiviner
30
- });
31
- module.exports = __toCommonJS(src_exports);
32
-
33
- // src/Diviner.ts
34
- var import_assert2 = require("@xylabs/assert");
35
- var import_diviner_abstract = require("@xyo-network/diviner-abstract");
36
- var import_diviner_model = require("@xyo-network/diviner-model");
37
- var import_diviner_payload_pointer_model3 = require("@xyo-network/diviner-payload-pointer-model");
38
-
39
- // src/findPayload.ts
40
- var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
41
- var import_diviner_boundwitness_model = require("@xyo-network/diviner-boundwitness-model");
42
- var import_diviner_payload_model = require("@xyo-network/diviner-payload-model");
43
- var import_diviner_payload_pointer_model2 = require("@xyo-network/diviner-payload-pointer-model");
44
- var import_payload_wrapper = require("@xyo-network/payload-wrapper");
45
-
46
- // src/combineRules.ts
47
- var import_assert = require("@xylabs/assert");
48
- var import_exists = require("@xylabs/exists");
49
- var import_diviner_payload_pointer_model = require("@xyo-network/diviner-payload-pointer-model");
50
- var combineRules = /* @__PURE__ */ __name((rules) => {
51
- var _a, _b;
52
- const addresses = rules.flat().filter(import_diviner_payload_pointer_model.isPayloadAddressRule).map((r) => r.address).filter(import_exists.exists);
53
- const schemas = rules.flat().filter(import_diviner_payload_pointer_model.isPayloadSchemaRule).map((r) => r.schema).filter(import_exists.exists);
54
- (0, import_assert.assertEx)(schemas.length, () => "At least one schema must be supplied");
55
- const directionTimestamp = rules.flat().filter(import_diviner_payload_pointer_model.isPayloadTimestampOrderRule).filter(import_exists.exists);
56
- (0, import_assert.assertEx)(directionTimestamp.length < 2, () => "Must not supply more than 1 direction/timestamp rule");
57
- const order = ((_a = directionTimestamp[0]) == null ? void 0 : _a.order) || "desc";
58
- const timestamp = directionTimestamp.length > 0 ? (_b = directionTimestamp[0]) == null ? void 0 : _b.timestamp : Date.now();
59
- return {
60
- addresses,
61
- order,
62
- schemas,
63
- timestamp
64
- };
65
- }, "combineRules");
66
-
67
- // src/findPayload.ts
68
- var limit = 1;
69
- var createBoundWitnessFilterFromSearchCriteria = /* @__PURE__ */ __name((searchCriteria) => {
70
- const { addresses, order = "desc", schemas, timestamp } = searchCriteria;
71
- const query = {
72
- addresses,
73
- limit,
74
- order,
75
- payload_schemas: schemas,
76
- schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema,
77
- timestamp
78
- };
79
- return [
80
- query
81
- ];
82
- }, "createBoundWitnessFilterFromSearchCriteria");
83
- var createPayloadFilterFromSearchCriteria = /* @__PURE__ */ __name((searchCriteria) => {
84
- const { order = "desc", schemas, timestamp } = searchCriteria;
85
- const query = {
86
- limit,
87
- order,
88
- schema: import_diviner_payload_model.PayloadDivinerQuerySchema,
89
- schemas,
90
- timestamp
91
- };
92
- return [
93
- query
94
- ];
95
- }, "createPayloadFilterFromSearchCriteria");
96
- var findPayload = /* @__PURE__ */ __name(async (archivist, boundWitnessDiviner, payloadDiviner, pointer) => {
97
- const searchCriteria = combineRules(pointer.reference);
98
- const { addresses } = searchCriteria;
99
- const findWitnessedPayload = addresses == null ? void 0 : addresses.length;
100
- const returnBoundWitness = (0, import_diviner_payload_pointer_model2.isBoundWitnessPointer)(pointer);
101
- if (returnBoundWitness || findWitnessedPayload) {
102
- const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria);
103
- const result = await boundWitnessDiviner.divine(filter);
104
- const bw = (result == null ? void 0 : result[0]) ? import_boundwitness_wrapper.BoundWitnessWrapper.parse(result[0]) : void 0;
105
- if (bw) {
106
- if (returnBoundWitness) return bw.payload;
107
- const { schemas, order = "desc" } = searchCriteria;
108
- let payloadIndex = order === "asc" ? 0 : bw.payloadHashes.length - 1;
109
- if (schemas) {
110
- const schemaInSearchCriteria = /* @__PURE__ */ __name((schema) => schemas.includes(schema), "schemaInSearchCriteria");
111
- payloadIndex = order === "asc" ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria);
112
- }
113
- const hash = bw.payloadHashes[payloadIndex];
114
- const result2 = await archivist.get([
115
- hash
116
- ]);
117
- return (result2 == null ? void 0 : result2[0]) ? import_payload_wrapper.PayloadWrapper.wrap(result2 == null ? void 0 : result2[0]).payload : void 0;
118
- }
119
- } else {
120
- const filter = createPayloadFilterFromSearchCriteria(searchCriteria);
121
- const result = await payloadDiviner.divine(filter);
122
- return (result == null ? void 0 : result[0]) ? import_payload_wrapper.PayloadWrapper.wrap(result == null ? void 0 : result[0]).payload : void 0;
123
- }
124
- }, "findPayload");
125
-
126
- // src/Diviner.ts
127
- var _PayloadPointerDiviner = class _PayloadPointerDiviner extends import_diviner_abstract.AbstractDiviner {
128
- async divineHandler(payloads) {
129
- const pointer = payloads == null ? void 0 : payloads.find(import_diviner_payload_pointer_model3.isPointerPayload);
130
- if (!pointer) return [];
131
- const archivist = await this.getConfigArchivist();
132
- const boundWitnessDiviner = await this.getBoundWitnessDiviner();
133
- const payloadDiviner = await this.getPayloadDiviner();
134
- const result = await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer);
135
- return result ? [
136
- result
137
- ] : [];
138
- }
139
- /**
140
- * Returns the archivist instance for the given config
141
- * @returns The archivist instance corresponding to the config
142
- */
143
- async getBoundWitnessDiviner() {
144
- var _a;
145
- const name = (0, import_assert2.assertEx)((_a = this.config) == null ? void 0 : _a.boundWitnessDiviner, () => "Missing archivist in config");
146
- const mod = (0, import_assert2.assertEx)(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`);
147
- const diviner = (0, import_assert2.assertEx)((0, import_diviner_model.asDivinerInstance)(mod), () => `Module ${name} is not an BoundWitnessDiviner`);
148
- return diviner;
149
- }
150
- /**
151
- * Returns the archivist instance for the given config
152
- * @returns The archivist instance corresponding to the config
153
- */
154
- async getConfigArchivist() {
155
- var _a;
156
- const name = (0, import_assert2.assertEx)((_a = this.config) == null ? void 0 : _a.archivist, () => "Missing archivist in config");
157
- return (0, import_assert2.assertEx)(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`);
158
- }
159
- /**
160
- * Returns the archivist instance for the given config
161
- * @returns The archivist instance corresponding to the config
162
- */
163
- async getPayloadDiviner() {
164
- var _a;
165
- const name = (0, import_assert2.assertEx)((_a = this.config) == null ? void 0 : _a.payloadDiviner, () => "Missing payloadDiviner in config");
166
- const mod = (0, import_assert2.assertEx)(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`);
167
- const diviner = (0, import_assert2.assertEx)((0, import_diviner_model.asDivinerInstance)(mod), () => `Module ${name} is not an PayloadDiviner`);
168
- return diviner;
169
- }
170
- };
171
- __name(_PayloadPointerDiviner, "PayloadPointerDiviner");
172
- __publicField(_PayloadPointerDiviner, "configSchemas", [
173
- ...__superGet(_PayloadPointerDiviner, _PayloadPointerDiviner, "configSchemas"),
174
- import_diviner_payload_pointer_model3.PayloadPointerDivinerConfigSchema
175
- ]);
176
- __publicField(_PayloadPointerDiviner, "defaultConfigSchema", import_diviner_payload_pointer_model3.PayloadPointerDivinerConfigSchema);
177
- var PayloadPointerDiviner = _PayloadPointerDiviner;
178
- // Annotate the CommonJS export names for ESM import in node:
179
- 0 && (module.exports = {
180
- PayloadPointerDiviner
181
- });
182
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["export * from './Diviner.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["import_assert","import_diviner_payload_pointer_model","import_diviner_payload_pointer_model","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema"]}
@@ -1,2 +0,0 @@
1
- export * from './Diviner.ts';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -1,2 +0,0 @@
1
- export * from './Diviner.ts';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -1,2 +0,0 @@
1
- export * from './Diviner.ts';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -1,157 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getProtoOf = Object.getPrototypeOf;
3
- var __reflectGet = Reflect.get;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
8
-
9
- // src/Diviner.ts
10
- import { assertEx as assertEx2 } from "@xylabs/assert";
11
- import { AbstractDiviner } from "@xyo-network/diviner-abstract";
12
- import { asDivinerInstance } from "@xyo-network/diviner-model";
13
- import { isPointerPayload, PayloadPointerDivinerConfigSchema } from "@xyo-network/diviner-payload-pointer-model";
14
-
15
- // src/findPayload.ts
16
- import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
17
- import { BoundWitnessDivinerQuerySchema } from "@xyo-network/diviner-boundwitness-model";
18
- import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
19
- import { isBoundWitnessPointer } from "@xyo-network/diviner-payload-pointer-model";
20
- import { PayloadWrapper } from "@xyo-network/payload-wrapper";
21
-
22
- // src/combineRules.ts
23
- import { assertEx } from "@xylabs/assert";
24
- import { exists } from "@xylabs/exists";
25
- import { isPayloadAddressRule, isPayloadSchemaRule, isPayloadTimestampOrderRule } from "@xyo-network/diviner-payload-pointer-model";
26
- var combineRules = /* @__PURE__ */ __name((rules) => {
27
- var _a, _b;
28
- const addresses = rules.flat().filter(isPayloadAddressRule).map((r) => r.address).filter(exists);
29
- const schemas = rules.flat().filter(isPayloadSchemaRule).map((r) => r.schema).filter(exists);
30
- assertEx(schemas.length, () => "At least one schema must be supplied");
31
- const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists);
32
- assertEx(directionTimestamp.length < 2, () => "Must not supply more than 1 direction/timestamp rule");
33
- const order = ((_a = directionTimestamp[0]) == null ? void 0 : _a.order) || "desc";
34
- const timestamp = directionTimestamp.length > 0 ? (_b = directionTimestamp[0]) == null ? void 0 : _b.timestamp : Date.now();
35
- return {
36
- addresses,
37
- order,
38
- schemas,
39
- timestamp
40
- };
41
- }, "combineRules");
42
-
43
- // src/findPayload.ts
44
- var limit = 1;
45
- var createBoundWitnessFilterFromSearchCriteria = /* @__PURE__ */ __name((searchCriteria) => {
46
- const { addresses, order = "desc", schemas, timestamp } = searchCriteria;
47
- const query = {
48
- addresses,
49
- limit,
50
- order,
51
- payload_schemas: schemas,
52
- schema: BoundWitnessDivinerQuerySchema,
53
- timestamp
54
- };
55
- return [
56
- query
57
- ];
58
- }, "createBoundWitnessFilterFromSearchCriteria");
59
- var createPayloadFilterFromSearchCriteria = /* @__PURE__ */ __name((searchCriteria) => {
60
- const { order = "desc", schemas, timestamp } = searchCriteria;
61
- const query = {
62
- limit,
63
- order,
64
- schema: PayloadDivinerQuerySchema,
65
- schemas,
66
- timestamp
67
- };
68
- return [
69
- query
70
- ];
71
- }, "createPayloadFilterFromSearchCriteria");
72
- var findPayload = /* @__PURE__ */ __name(async (archivist, boundWitnessDiviner, payloadDiviner, pointer) => {
73
- const searchCriteria = combineRules(pointer.reference);
74
- const { addresses } = searchCriteria;
75
- const findWitnessedPayload = addresses == null ? void 0 : addresses.length;
76
- const returnBoundWitness = isBoundWitnessPointer(pointer);
77
- if (returnBoundWitness || findWitnessedPayload) {
78
- const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria);
79
- const result = await boundWitnessDiviner.divine(filter);
80
- const bw = (result == null ? void 0 : result[0]) ? BoundWitnessWrapper.parse(result[0]) : void 0;
81
- if (bw) {
82
- if (returnBoundWitness) return bw.payload;
83
- const { schemas, order = "desc" } = searchCriteria;
84
- let payloadIndex = order === "asc" ? 0 : bw.payloadHashes.length - 1;
85
- if (schemas) {
86
- const schemaInSearchCriteria = /* @__PURE__ */ __name((schema) => schemas.includes(schema), "schemaInSearchCriteria");
87
- payloadIndex = order === "asc" ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria);
88
- }
89
- const hash = bw.payloadHashes[payloadIndex];
90
- const result2 = await archivist.get([
91
- hash
92
- ]);
93
- return (result2 == null ? void 0 : result2[0]) ? PayloadWrapper.wrap(result2 == null ? void 0 : result2[0]).payload : void 0;
94
- }
95
- } else {
96
- const filter = createPayloadFilterFromSearchCriteria(searchCriteria);
97
- const result = await payloadDiviner.divine(filter);
98
- return (result == null ? void 0 : result[0]) ? PayloadWrapper.wrap(result == null ? void 0 : result[0]).payload : void 0;
99
- }
100
- }, "findPayload");
101
-
102
- // src/Diviner.ts
103
- var _PayloadPointerDiviner = class _PayloadPointerDiviner extends AbstractDiviner {
104
- async divineHandler(payloads) {
105
- const pointer = payloads == null ? void 0 : payloads.find(isPointerPayload);
106
- if (!pointer) return [];
107
- const archivist = await this.getConfigArchivist();
108
- const boundWitnessDiviner = await this.getBoundWitnessDiviner();
109
- const payloadDiviner = await this.getPayloadDiviner();
110
- const result = await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer);
111
- return result ? [
112
- result
113
- ] : [];
114
- }
115
- /**
116
- * Returns the archivist instance for the given config
117
- * @returns The archivist instance corresponding to the config
118
- */
119
- async getBoundWitnessDiviner() {
120
- var _a;
121
- const name = assertEx2((_a = this.config) == null ? void 0 : _a.boundWitnessDiviner, () => "Missing archivist in config");
122
- const mod = assertEx2(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`);
123
- const diviner = assertEx2(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`);
124
- return diviner;
125
- }
126
- /**
127
- * Returns the archivist instance for the given config
128
- * @returns The archivist instance corresponding to the config
129
- */
130
- async getConfigArchivist() {
131
- var _a;
132
- const name = assertEx2((_a = this.config) == null ? void 0 : _a.archivist, () => "Missing archivist in config");
133
- return assertEx2(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`);
134
- }
135
- /**
136
- * Returns the archivist instance for the given config
137
- * @returns The archivist instance corresponding to the config
138
- */
139
- async getPayloadDiviner() {
140
- var _a;
141
- const name = assertEx2((_a = this.config) == null ? void 0 : _a.payloadDiviner, () => "Missing payloadDiviner in config");
142
- const mod = assertEx2(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`);
143
- const diviner = assertEx2(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`);
144
- return diviner;
145
- }
146
- };
147
- __name(_PayloadPointerDiviner, "PayloadPointerDiviner");
148
- __publicField(_PayloadPointerDiviner, "configSchemas", [
149
- ...__superGet(_PayloadPointerDiviner, _PayloadPointerDiviner, "configSchemas"),
150
- PayloadPointerDivinerConfigSchema
151
- ]);
152
- __publicField(_PayloadPointerDiviner, "defaultConfigSchema", PayloadPointerDivinerConfigSchema);
153
- var PayloadPointerDiviner = _PayloadPointerDiviner;
154
- export {
155
- PayloadPointerDiviner
156
- };
157
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/findPayload.ts","../../src/combineRules.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { asDivinerInstance, DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport {\n isPointerPayload,\n PayloadPointerDivinerConfigSchema,\n PayloadPointerDivinerParams,\n PointerPayload,\n} from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { findPayload } from './findPayload.ts'\n\nexport class PayloadPointerDiviner<\n TParams extends PayloadPointerDivinerParams = PayloadPointerDivinerParams,\n TIn extends PointerPayload = PointerPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, PayloadPointerDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = PayloadPointerDivinerConfigSchema\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const pointer = payloads?.find(isPointerPayload)\n if (!pointer) return []\n const archivist = await this.getConfigArchivist()\n const boundWitnessDiviner = await this.getBoundWitnessDiviner()\n const payloadDiviner = await this.getPayloadDiviner()\n const result = (await findPayload(archivist, boundWitnessDiviner, payloadDiviner, pointer)) as TOut | undefined\n return result ? [result] : []\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getBoundWitnessDiviner(): Promise<BoundWitnessDiviner> {\n const name = assertEx(this.config?.boundWitnessDiviner, () => 'Missing archivist in config')\n const mod = assertEx(await this.resolve(name), () => `Config.boundWitnessDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an BoundWitnessDiviner`)\n return diviner as BoundWitnessDiviner\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getConfigArchivist(): Promise<ArchivistInstance> {\n const name = assertEx(this.config?.archivist, () => 'Missing archivist in config')\n return assertEx(await this.getArchivist(), () => `Config.archivist module value of ${name} not resolved`)\n }\n\n /**\n * Returns the archivist instance for the given config\n * @returns The archivist instance corresponding to the config\n */\n private async getPayloadDiviner(): Promise<PayloadDiviner> {\n const name = assertEx(this.config?.payloadDiviner, () => 'Missing payloadDiviner in config')\n const mod = assertEx(await this.resolve(name), () => `Config.payloadDiviner module value of ${name} not resolved`)\n const diviner = assertEx(asDivinerInstance(mod), () => `Module ${name} is not an PayloadDiviner`)\n return diviner as PayloadDiviner\n }\n}\n","import { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isBoundWitnessPointer, PayloadSearchCriteria, PointerPayload } from '@xyo-network/diviner-payload-pointer-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { combineRules } from './combineRules.ts'\n\nconst limit = 1\n\nconst createBoundWitnessFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): BoundWitnessDivinerQueryPayload[] => {\n const { addresses, order = 'desc', schemas, timestamp } = searchCriteria\n const query: BoundWitnessDivinerQueryPayload = {\n addresses,\n limit,\n order,\n payload_schemas: schemas,\n schema: BoundWitnessDivinerQuerySchema,\n timestamp,\n }\n return [query]\n}\n\nconst createPayloadFilterFromSearchCriteria = (searchCriteria: PayloadSearchCriteria): Payload[] => {\n const { order = 'desc', schemas, timestamp } = searchCriteria\n const query: PayloadDivinerQueryPayload = { limit, order, schema: PayloadDivinerQuerySchema, schemas, timestamp }\n return [query]\n}\n\nexport const findPayload = async (\n archivist: ArchivistInstance,\n boundWitnessDiviner: BoundWitnessDiviner,\n payloadDiviner: PayloadDiviner,\n pointer: PointerPayload,\n): Promise<Payload | undefined> => {\n const searchCriteria = combineRules(pointer.reference)\n const { addresses } = searchCriteria\n const findWitnessedPayload = addresses?.length\n const returnBoundWitness = isBoundWitnessPointer(pointer)\n if (returnBoundWitness || findWitnessedPayload) {\n const filter = createBoundWitnessFilterFromSearchCriteria(searchCriteria)\n const result = await boundWitnessDiviner.divine(filter)\n const bw = result?.[0] ? BoundWitnessWrapper.parse(result[0]) : undefined\n if (bw) {\n if (returnBoundWitness) return bw.payload\n const { schemas, order = 'desc' } = searchCriteria\n let payloadIndex = order === 'asc' ? 0 : bw.payloadHashes.length - 1\n if (schemas) {\n const schemaInSearchCriteria = (schema: Schema) => schemas.includes(schema)\n payloadIndex = order === 'asc' ? bw.payloadSchemas.findIndex(schemaInSearchCriteria) : bw.payloadSchemas.findLastIndex(schemaInSearchCriteria)\n }\n const hash = bw.payloadHashes[payloadIndex]\n const result = await archivist.get([hash])\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n } else {\n // Find payload\n const filter = createPayloadFilterFromSearchCriteria(searchCriteria)\n const result = await payloadDiviner.divine(filter)\n return result?.[0] ? PayloadWrapper.wrap(result?.[0]).payload : undefined\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Order } from '@xyo-network/diviner-payload-model'\nimport {\n isPayloadAddressRule,\n isPayloadSchemaRule,\n isPayloadTimestampOrderRule,\n PayloadRule,\n PayloadSearchCriteria,\n} from '@xyo-network/diviner-payload-pointer-model'\n\n// TODO: Could make it so that composability is such that we:\n// • AND first dimension of array\n// • OR 2nd dimension of array\nexport const combineRules = (rules: PayloadRule[][]): PayloadSearchCriteria => {\n const addresses = rules\n .flat()\n .filter(isPayloadAddressRule)\n .map(r => r.address)\n .filter(exists) as Address[]\n\n const schemas = rules\n .flat()\n .filter(isPayloadSchemaRule)\n .map(r => r.schema)\n .filter(exists)\n assertEx(schemas.length, () => 'At least one schema must be supplied')\n\n const directionTimestamp = rules.flat().filter(isPayloadTimestampOrderRule).filter(exists)\n assertEx(directionTimestamp.length < 2, () => 'Must not supply more than 1 direction/timestamp rule')\n\n const order: Order = directionTimestamp[0]?.order || 'desc'\n const timestamp: number = directionTimestamp.length > 0 ? directionTimestamp[0]?.timestamp : Date.now()\n\n return {\n addresses,\n order,\n schemas,\n timestamp,\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","asDivinerInstance","isPointerPayload","PayloadPointerDivinerConfigSchema","BoundWitnessWrapper","BoundWitnessDivinerQuerySchema","PayloadDivinerQuerySchema","isBoundWitnessPointer","PayloadWrapper","assertEx","exists","isPayloadAddressRule","isPayloadSchemaRule","isPayloadTimestampOrderRule","combineRules","rules","addresses","flat","filter","isPayloadAddressRule","map","r","address","exists","schemas","isPayloadSchemaRule","schema","assertEx","length","directionTimestamp","isPayloadTimestampOrderRule","order","timestamp","Date","now","limit","createBoundWitnessFilterFromSearchCriteria","searchCriteria","addresses","order","schemas","timestamp","query","payload_schemas","schema","BoundWitnessDivinerQuerySchema","createPayloadFilterFromSearchCriteria","PayloadDivinerQuerySchema","findPayload","archivist","boundWitnessDiviner","payloadDiviner","pointer","combineRules","reference","findWitnessedPayload","length","returnBoundWitness","isBoundWitnessPointer","filter","result","divine","bw","BoundWitnessWrapper","parse","undefined","payload","payloadIndex","payloadHashes","schemaInSearchCriteria","includes","payloadSchemas","findIndex","findLastIndex","hash","get","PayloadWrapper","wrap","PayloadPointerDiviner","AbstractDiviner","divineHandler","payloads","pointer","find","isPointerPayload","archivist","getConfigArchivist","boundWitnessDiviner","getBoundWitnessDiviner","payloadDiviner","getPayloadDiviner","result","findPayload","name","assertEx","config","mod","resolve","diviner","asDivinerInstance","getArchivist","configSchemas","PayloadPointerDivinerConfigSchema","defaultConfigSchema"]}