@xyo-network/diviner-temporal-indexing-memory 2.84.19 → 2.85.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.
@@ -3,6 +3,8 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
8
10
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -16,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
16
18
  return to;
17
19
  };
18
20
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var __publicField = (obj, key, value) => {
22
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
23
+ return value;
24
+ };
19
25
 
20
26
  // src/index.ts
21
27
  var src_exports = {};
@@ -33,14 +39,20 @@ var import_diviner_indexing_memory = require("@xyo-network/diviner-indexing-memo
33
39
  var import_diviner_indexing_model = require("@xyo-network/diviner-indexing-model");
34
40
  var import_diviner_model = require("@xyo-network/diviner-model");
35
41
  var import_diviner_temporal_indexing_model = require("@xyo-network/diviner-temporal-indexing-model");
36
- var TemporalIndexingDiviner = class extends import_diviner_indexing_memory.IndexingDiviner {
37
- static configSchema = import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema;
38
- static configSchemas = [import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema, import_diviner_indexing_model.IndexingDivinerConfigSchema, import_diviner_model.DivinerConfigSchema];
42
+ var _TemporalIndexingDiviner = class _TemporalIndexingDiviner extends import_diviner_indexing_memory.IndexingDiviner {
39
43
  async startHandler() {
40
44
  await super.startHandler();
41
45
  return true;
42
46
  }
43
47
  };
48
+ __name(_TemporalIndexingDiviner, "TemporalIndexingDiviner");
49
+ __publicField(_TemporalIndexingDiviner, "configSchema", import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema);
50
+ __publicField(_TemporalIndexingDiviner, "configSchemas", [
51
+ import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema,
52
+ import_diviner_indexing_model.IndexingDivinerConfigSchema,
53
+ import_diviner_model.DivinerConfigSchema
54
+ ]);
55
+ var TemporalIndexingDiviner = _TemporalIndexingDiviner;
44
56
 
45
57
  // src/DivinerQueryToIndexQueryDiviner/Diviner.ts
46
58
  var import_abstract_diviner = require("@xyo-network/abstract-diviner");
@@ -50,53 +62,48 @@ var import_diviner_payload_model = require("@xyo-network/diviner-payload-model")
50
62
  var import_diviner_temporal_indexing_model2 = require("@xyo-network/diviner-temporal-indexing-model");
51
63
  var import_payload_builder = require("@xyo-network/payload-builder");
52
64
  var import_payload_model = require("@xyo-network/payload-model");
53
- var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends import_abstract_diviner.AbstractDiviner {
54
- static configSchema = import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema;
55
- static configSchemas = [import_diviner_model2.DivinerConfigSchema, import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema];
56
- static labels = {
57
- "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
58
- };
65
+ var _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner extends import_abstract_diviner.AbstractDiviner {
59
66
  _indexableSchemas;
60
67
  _payloadTransformers;
61
68
  /**
62
- * The schema of the diviner query payloads
63
- */
69
+ * The schema of the diviner query payloads
70
+ */
64
71
  get divinerQuerySchema() {
65
72
  return this.config.divinerQuerySchema ?? import_diviner_payload_model.PayloadDivinerQuerySchema;
66
73
  }
67
74
  /**
68
- * The schema of the index query payloads
69
- */
75
+ * The schema of the index query payloads
76
+ */
70
77
  get indexQuerySchema() {
71
78
  return this.config.indexQuerySchema ?? import_diviner_payload_model.PayloadDivinerQuerySchema;
72
79
  }
73
80
  /**
74
- * The schema of the index payloads
75
- */
81
+ * The schema of the index payloads
82
+ */
76
83
  get indexSchema() {
77
84
  return this.config.indexSchema ?? import_diviner_temporal_indexing_model2.TemporalIndexingDivinerResultIndexSchema;
78
85
  }
79
86
  /**
80
- * List of indexable schemas for this diviner
81
- */
87
+ * List of indexable schemas for this diviner
88
+ */
82
89
  get indexableSchemas() {
83
90
  if (!this._indexableSchemas)
84
91
  this._indexableSchemas = Object.keys(this.schemaTransforms);
85
92
  return this._indexableSchemas;
86
93
  }
87
94
  /**
88
- * Dictionary of schemas to payload transformers for creating indexes
89
- * from the payloads within a Bound Witness
90
- */
95
+ * Dictionary of schemas to payload transformers for creating indexes
96
+ * from the payloads within a Bound Witness
97
+ */
91
98
  get payloadTransformers() {
92
99
  if (!this._payloadTransformers)
93
100
  this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory.jsonPathToTransformersDictionary)(this.schemaTransforms);
94
101
  return this._payloadTransformers;
95
102
  }
96
103
  /**
97
- * The dictionary of schemas to JSON Path transform expressions for creating indexes
98
- * from the payloads within a Bound Witness
99
- */
104
+ * The dictionary of schemas to JSON Path transform expressions for creating indexes
105
+ * from the payloads within a Bound Witness
106
+ */
100
107
  get schemaTransforms() {
101
108
  var _a;
102
109
  return ((_a = this.config) == null ? void 0 : _a.schemaTransforms) ?? {
@@ -122,23 +129,33 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends impor
122
129
  async divineHandler(payloads = []) {
123
130
  const queries = payloads.filter((0, import_payload_model.isPayloadOfSchemaType)(this.divinerQuerySchema));
124
131
  if (queries.length > 0) {
125
- const results = await Promise.all(
126
- queries.map(async (query) => {
127
- const fields = await (0, import_diviner_jsonpath_aggregate_memory.reducePayloads)(
128
- [query],
129
- this.payloadTransformers,
130
- this.indexQuerySchema
131
- );
132
- fields.schemas = [this.indexSchema];
133
- delete fields.sources;
134
- return await new import_payload_builder.PayloadBuilder({ schema: this.indexQuerySchema }).fields(fields).build();
135
- })
136
- );
132
+ const results = await Promise.all(queries.map(async (query) => {
133
+ const fields = await (0, import_diviner_jsonpath_aggregate_memory.reducePayloads)([
134
+ query
135
+ ], this.payloadTransformers, this.indexQuerySchema);
136
+ fields.schemas = [
137
+ this.indexSchema
138
+ ];
139
+ delete fields.sources;
140
+ return await new import_payload_builder.PayloadBuilder({
141
+ schema: this.indexQuerySchema
142
+ }).fields(fields).build();
143
+ }));
137
144
  return results;
138
145
  }
139
146
  return [];
140
147
  }
141
148
  };
149
+ __name(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner");
150
+ __publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "configSchema", import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema);
151
+ __publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "configSchemas", [
152
+ import_diviner_model2.DivinerConfigSchema,
153
+ import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema
154
+ ]);
155
+ __publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "labels", {
156
+ "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
157
+ });
158
+ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner;
142
159
 
143
160
  // src/IndexCandidateToIndexDiviner/Diviner.ts
144
161
  var import_array = require("@xylabs/array");
@@ -152,35 +169,30 @@ var import_diviner_temporal_indexing_model3 = require("@xyo-network/diviner-temp
152
169
  var import_hash = require("@xyo-network/hash");
153
170
  var import_payload_builder2 = require("@xyo-network/payload-builder");
154
171
  var moduleName = "TemporalIndexingDivinerIndexCandidateToIndexDiviner";
155
- var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends import_abstract_diviner2.AbstractDiviner {
156
- static configSchema = import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema;
157
- static configSchemas = [import_diviner_model3.DivinerConfigSchema, import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema];
158
- static labels = {
159
- "network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
160
- };
172
+ var _TemporalIndexingDivinerIndexCandidateToIndexDiviner = class _TemporalIndexingDivinerIndexCandidateToIndexDiviner extends import_abstract_diviner2.AbstractDiviner {
161
173
  _indexableSchemas;
162
174
  _payloadTransformers;
163
175
  /**
164
- * List of indexable schemas for this diviner
165
- */
176
+ * List of indexable schemas for this diviner
177
+ */
166
178
  get indexableSchemas() {
167
179
  if (!this._indexableSchemas)
168
180
  this._indexableSchemas = Object.keys(this.schemaTransforms);
169
181
  return this._indexableSchemas;
170
182
  }
171
183
  /**
172
- * Dictionary of schemas to payload transformers for creating indexes
173
- * from the payloads within a Bound Witness
174
- */
184
+ * Dictionary of schemas to payload transformers for creating indexes
185
+ * from the payloads within a Bound Witness
186
+ */
175
187
  get payloadTransformers() {
176
188
  if (!this._payloadTransformers)
177
189
  this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory2.jsonPathToTransformersDictionary)(this.schemaTransforms);
178
190
  return this._payloadTransformers;
179
191
  }
180
192
  /**
181
- * The dictionary of schemas to JSON Path transform expressions for creating indexes
182
- * from the payloads within a Bound Witness
183
- */
193
+ * The dictionary of schemas to JSON Path transform expressions for creating indexes
194
+ * from the payloads within a Bound Witness
195
+ */
184
196
  get schemaTransforms() {
185
197
  var _a;
186
198
  return (0, import_assert.assertEx)((_a = this.config) == null ? void 0 : _a.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`);
@@ -200,57 +212,80 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends import_a
200
212
  });
201
213
  const indexablePayloads2 = indexablePayloadHashes.map((hash) => payloadDictionary[hash]).filter(import_exists.exists);
202
214
  if (indexablePayloads2.length === this.indexableSchemas.length)
203
- indexableTuples.push([bw, ...indexablePayloads2]);
215
+ indexableTuples.push([
216
+ bw,
217
+ ...indexablePayloads2
218
+ ]);
204
219
  return indexableTuples;
205
220
  }, []);
206
- const indexes = await Promise.all(
207
- validIndexableTuples.map(async ([bw, ...sourcePayloads]) => {
208
- const indexFields = sourcePayloads.flatMap((payload) => {
209
- const transformers = this.payloadTransformers[payload.schema];
210
- return transformers ? transformers.map((transform) => transform(payload)) : [];
211
- });
212
- const sources = Object.keys(await import_hash.PayloadHasher.toMap([bw, ...sourcePayloads]));
213
- return await new import_payload_builder2.PayloadBuilder({ schema: import_diviner_temporal_indexing_model3.TemporalIndexingDivinerResultIndexSchema }).fields(Object.assign({ sources }, ...indexFields)).build();
214
- })
215
- );
221
+ const indexes = await Promise.all(validIndexableTuples.map(async ([bw, ...sourcePayloads]) => {
222
+ const indexFields = sourcePayloads.flatMap((payload) => {
223
+ const transformers = this.payloadTransformers[payload.schema];
224
+ return transformers ? transformers.map((transform) => transform(payload)) : [];
225
+ });
226
+ const sources = Object.keys(await import_hash.PayloadHasher.toMap([
227
+ bw,
228
+ ...sourcePayloads
229
+ ]));
230
+ return await new import_payload_builder2.PayloadBuilder({
231
+ schema: import_diviner_temporal_indexing_model3.TemporalIndexingDivinerResultIndexSchema
232
+ }).fields(Object.assign({
233
+ sources
234
+ }, ...indexFields)).build();
235
+ }));
216
236
  return indexes.flat();
217
237
  }
218
238
  return [];
219
239
  }
220
240
  /**
221
- * Identifies if a payload is one that is indexed by this diviner
222
- * @param x The candidate payload
223
- * @returns True if the payload is one indexed by this diviner, false otherwise
224
- */
241
+ * Identifies if a payload is one that is indexed by this diviner
242
+ * @param x The candidate payload
243
+ * @returns True if the payload is one indexed by this diviner, false otherwise
244
+ */
225
245
  isIndexablePayload = (x) => {
226
246
  return this.indexableSchemas.includes(x == null ? void 0 : x.schema);
227
247
  };
228
248
  /**
229
- * Identifies if a schema is one that is indexed by this diviner
230
- * @param schema The candidate schema
231
- * @returns True if this schema is one indexed by this diviner, false otherwise
232
- */
249
+ * Identifies if a schema is one that is indexed by this diviner
250
+ * @param schema The candidate schema
251
+ * @returns True if this schema is one indexed by this diviner, false otherwise
252
+ */
233
253
  isIndexableSchema = (schema) => {
234
254
  return typeof schema === "string" ? this.indexableSchemas.includes(schema) : false;
235
255
  };
236
256
  };
257
+ __name(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "TemporalIndexingDivinerIndexCandidateToIndexDiviner");
258
+ __publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "configSchema", import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema);
259
+ __publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "configSchemas", [
260
+ import_diviner_model3.DivinerConfigSchema,
261
+ import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema
262
+ ]);
263
+ __publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "labels", {
264
+ "network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
265
+ });
266
+ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = _TemporalIndexingDivinerIndexCandidateToIndexDiviner;
237
267
 
238
268
  // src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts
239
269
  var import_abstract_diviner3 = require("@xyo-network/abstract-diviner");
240
270
  var import_diviner_model4 = require("@xyo-network/diviner-model");
241
271
  var import_diviner_payload_model2 = require("@xyo-network/diviner-payload-model");
242
272
  var import_diviner_temporal_indexing_model4 = require("@xyo-network/diviner-temporal-indexing-model");
243
- var TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = class extends import_abstract_diviner3.AbstractDiviner {
244
- static configSchema = import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema;
245
- static configSchemas = [import_diviner_model4.DivinerConfigSchema, import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema];
246
- static labels = {
247
- "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
248
- };
273
+ var _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = class _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends import_abstract_diviner3.AbstractDiviner {
249
274
  async divineHandler(payloads = []) {
250
275
  const responses = payloads.filter((p) => !(0, import_diviner_payload_model2.isPayloadDivinerQueryPayload)(p));
251
276
  return await Promise.resolve(responses);
252
277
  }
253
278
  };
279
+ __name(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner");
280
+ __publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "configSchema", import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema);
281
+ __publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "configSchemas", [
282
+ import_diviner_model4.DivinerConfigSchema,
283
+ import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema
284
+ ]);
285
+ __publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "labels", {
286
+ "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
287
+ });
288
+ var TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner;
254
289
 
255
290
  // src/StateToIndexCandidateDiviner/Diviner.ts
256
291
  var import_assert2 = require("@xylabs/assert");
@@ -268,46 +303,75 @@ var import_payload_model2 = require("@xyo-network/payload-model");
268
303
  var import_witness_timestamp = require("@xyo-network/witness-timestamp");
269
304
  var order = "asc";
270
305
  var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
271
- var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_abstract_diviner4.AbstractDiviner {
272
- static configSchema = import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema;
273
- static configSchemas = [import_diviner_model5.DivinerConfigSchema, import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema];
274
- static labels = {
275
- "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
276
- };
306
+ var _TemporalIndexingDivinerStateToIndexCandidateDiviner = class _TemporalIndexingDivinerStateToIndexCandidateDiviner extends import_abstract_diviner4.AbstractDiviner {
277
307
  get payloadDivinerLimit() {
278
308
  return this.config.payloadDivinerLimit ?? 1e3;
279
309
  }
280
310
  /**
281
- * The required payload_schemas within BoundWitnesses to identify index candidates
282
- */
311
+ * The required payload_schemas within BoundWitnesses to identify index candidates
312
+ */
283
313
  get payload_schemas() {
284
314
  var _a;
285
315
  const schemas = (_a = this.config.filter) == null ? void 0 : _a.payload_schemas;
286
- return [import_witness_timestamp.TimestampSchema, ...schemas ?? []];
316
+ return [
317
+ import_witness_timestamp.TimestampSchema,
318
+ ...schemas ?? []
319
+ ];
287
320
  }
288
321
  async divineHandler(payloads = []) {
289
322
  const lastState = payloads.find(import_module_model.isModuleState);
290
323
  if (!lastState)
291
- return [{ schema: import_module_model.ModuleStateSchema, state: { offset: 0 } }];
324
+ return [
325
+ {
326
+ schema: import_module_model.ModuleStateSchema,
327
+ state: {
328
+ offset: 0
329
+ }
330
+ }
331
+ ];
292
332
  const { offset } = lastState.state;
293
333
  const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
294
334
  if (!boundWitnessDiviner)
295
- return [lastState];
296
- const query = await new import_payload_builder3.PayloadBuilder({ schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema }).fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas }).build();
297
- const batch = await boundWitnessDiviner.divine([query]);
335
+ return [
336
+ lastState
337
+ ];
338
+ const query = await new import_payload_builder3.PayloadBuilder({
339
+ schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema
340
+ }).fields({
341
+ limit: this.payloadDivinerLimit,
342
+ offset,
343
+ order,
344
+ payload_schemas: this.payload_schemas
345
+ }).build();
346
+ const batch = await boundWitnessDiviner.divine([
347
+ query
348
+ ]);
298
349
  if (batch.length === 0)
299
- return [lastState];
350
+ return [
351
+ lastState
352
+ ];
300
353
  const sourceArchivist = await this.getArchivistForStore();
301
354
  if (!sourceArchivist)
302
- return [lastState];
355
+ return [
356
+ lastState
357
+ ];
303
358
  const indexCandidates = (await Promise.all(batch.filter(import_boundwitness_model2.isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))).filter(import_exists2.exists).flat();
304
- const nextState = { schema: import_module_model.ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } };
305
- return [nextState, ...indexCandidates];
359
+ const nextState = {
360
+ schema: import_module_model.ModuleStateSchema,
361
+ state: {
362
+ ...lastState.state,
363
+ offset: offset + batch.length
364
+ }
365
+ };
366
+ return [
367
+ nextState,
368
+ ...indexCandidates
369
+ ];
306
370
  }
307
371
  /**
308
- * Retrieves the archivist for the payloadStore
309
- * @returns The archivist for the payloadStore or undefined if not resolvable
310
- */
372
+ * Retrieves the archivist for the payloadStore
373
+ * @returns The archivist for the payloadStore or undefined if not resolvable
374
+ */
311
375
  async getArchivistForStore() {
312
376
  var _a, _b;
313
377
  const name = (0, import_assert2.assertEx)((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.archivist, () => `${moduleName2}: Config for payloadStore.archivist not specified`);
@@ -317,15 +381,12 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_a
317
381
  return import_archivist_wrapper.ArchivistWrapper.wrap(mod, this.account);
318
382
  }
319
383
  /**
320
- * Retrieves the BoundWitness Diviner for the payloadStore
321
- * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable
322
- */
384
+ * Retrieves the BoundWitness Diviner for the payloadStore
385
+ * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable
386
+ */
323
387
  async getBoundWitnessDivinerForStore() {
324
388
  var _a, _b;
325
- const name = (0, import_assert2.assertEx)(
326
- (_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner,
327
- () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`
328
- );
389
+ const name = (0, import_assert2.assertEx)((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner, () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`);
329
390
  const mod = await this.resolve(name);
330
391
  if (!mod)
331
392
  return void 0;
@@ -346,9 +407,22 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_a
346
407
  if (filteredResults.includes(void 0))
347
408
  return void 0;
348
409
  const indexCandidates = filteredResults.filter(import_exists2.exists);
349
- return [bw, ...indexCandidates];
410
+ return [
411
+ bw,
412
+ ...indexCandidates
413
+ ];
350
414
  }
351
415
  };
416
+ __name(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "TemporalIndexingDivinerStateToIndexCandidateDiviner");
417
+ __publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "configSchema", import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema);
418
+ __publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "configSchemas", [
419
+ import_diviner_model5.DivinerConfigSchema,
420
+ import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema
421
+ ]);
422
+ __publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "labels", {
423
+ "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
424
+ });
425
+ var TemporalIndexingDivinerStateToIndexCandidateDiviner = _TemporalIndexingDivinerStateToIndexCandidateDiviner;
352
426
  // Annotate the CommonJS export names for ESM import in node:
353
427
  0 && (module.exports = {
354
428
  TemporalIndexingDiviner,
@@ -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/abstract-diviner'\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 { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\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'\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 // Find the remaining indexable payloads\n const indexablePayloadPositions = this.indexableSchemas.map((schema) => bw.payload_schemas.indexOf(schema))\n const indexablePayloadHashes = indexablePayloadPositions.map((index) => bw.payload_hashes?.[index])\n const indexablePayloads = indexablePayloadHashes.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 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/abstract-diviner'\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 { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\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":["import_diviner_model","import_diviner_temporal_indexing_model","import_abstract_diviner","import_diviner_jsonpath_aggregate_memory","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","indexablePayloads","import_abstract_diviner","import_diviner_model","import_diviner_payload_model","import_diviner_temporal_indexing_model","import_assert","import_exists","import_abstract_diviner","import_boundwitness_model","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_model","moduleName"]}
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/abstract-diviner'\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 { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\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'\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 // Find the remaining indexable payloads\n const indexablePayloadPositions = this.indexableSchemas.map((schema) => bw.payload_schemas.indexOf(schema))\n const indexablePayloadHashes = indexablePayloadPositions.map((index) => bw.payload_hashes?.[index])\n const indexablePayloads = indexablePayloadHashes.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 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/abstract-diviner'\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 { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\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_abstract_diviner","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","indexablePayloadPositions","map","schema","indexOf","indexablePayloadHashes","index","payload_hashes","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_abstract_diviner","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_abstract_diviner","import_boundwitness_model","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"]}