@xyo-network/diviner-temporal-indexing-memory 2.84.18 → 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.
@@ -1,11 +1,21 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/Diviner.ts
2
5
  import { IndexingDiviner } from "@xyo-network/diviner-indexing-memory";
3
6
  import { IndexingDivinerConfigSchema } from "@xyo-network/diviner-indexing-model";
4
7
  import { DivinerConfigSchema } from "@xyo-network/diviner-model";
5
8
  import { TemporalIndexingDivinerConfigSchema } from "@xyo-network/diviner-temporal-indexing-model";
6
9
  var TemporalIndexingDiviner = class extends IndexingDiviner {
10
+ static {
11
+ __name(this, "TemporalIndexingDiviner");
12
+ }
7
13
  static configSchema = TemporalIndexingDivinerConfigSchema;
8
- static configSchemas = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema];
14
+ static configSchemas = [
15
+ TemporalIndexingDivinerConfigSchema,
16
+ IndexingDivinerConfigSchema,
17
+ DivinerConfigSchema
18
+ ];
9
19
  async startHandler() {
10
20
  await super.startHandler();
11
21
  return true;
@@ -17,59 +27,62 @@ import { AbstractDiviner } from "@xyo-network/abstract-diviner";
17
27
  import { jsonPathToTransformersDictionary, reducePayloads } from "@xyo-network/diviner-jsonpath-aggregate-memory";
18
28
  import { DivinerConfigSchema as DivinerConfigSchema2 } from "@xyo-network/diviner-model";
19
29
  import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
20
- import {
21
- TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,
22
- TemporalIndexingDivinerResultIndexSchema
23
- } from "@xyo-network/diviner-temporal-indexing-model";
30
+ import { TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema, TemporalIndexingDivinerResultIndexSchema } from "@xyo-network/diviner-temporal-indexing-model";
24
31
  import { PayloadBuilder } from "@xyo-network/payload-builder";
25
32
  import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
26
33
  var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends AbstractDiviner {
34
+ static {
35
+ __name(this, "TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner");
36
+ }
27
37
  static configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema;
28
- static configSchemas = [DivinerConfigSchema2, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema];
38
+ static configSchemas = [
39
+ DivinerConfigSchema2,
40
+ TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema
41
+ ];
29
42
  static labels = {
30
43
  "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
31
44
  };
32
45
  _indexableSchemas;
33
46
  _payloadTransformers;
34
47
  /**
35
- * The schema of the diviner query payloads
36
- */
48
+ * The schema of the diviner query payloads
49
+ */
37
50
  get divinerQuerySchema() {
38
51
  return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema;
39
52
  }
40
53
  /**
41
- * The schema of the index query payloads
42
- */
54
+ * The schema of the index query payloads
55
+ */
43
56
  get indexQuerySchema() {
44
57
  return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema;
45
58
  }
46
59
  /**
47
- * The schema of the index payloads
48
- */
60
+ * The schema of the index payloads
61
+ */
49
62
  get indexSchema() {
50
63
  return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema;
51
64
  }
52
65
  /**
53
- * List of indexable schemas for this diviner
54
- */
66
+ * List of indexable schemas for this diviner
67
+ */
55
68
  get indexableSchemas() {
56
69
  if (!this._indexableSchemas)
57
70
  this._indexableSchemas = Object.keys(this.schemaTransforms);
58
71
  return this._indexableSchemas;
59
72
  }
60
73
  /**
61
- * Dictionary of schemas to payload transformers for creating indexes
62
- * from the payloads within a Bound Witness
63
- */
74
+ * Dictionary of schemas to payload transformers for creating indexes
75
+ * from the payloads within a Bound Witness
76
+ */
64
77
  get payloadTransformers() {
65
78
  if (!this._payloadTransformers)
66
79
  this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
67
80
  return this._payloadTransformers;
68
81
  }
69
82
  /**
70
- * The dictionary of schemas to JSON Path transform expressions for creating indexes
71
- * from the payloads within a Bound Witness
72
- */
83
+ * The dictionary of schemas to JSON Path transform expressions for creating indexes
84
+ * from the payloads within a Bound Witness
85
+ */
73
86
  get schemaTransforms() {
74
87
  return this.config?.schemaTransforms ?? {
75
88
  [this.divinerQuerySchema]: [
@@ -94,18 +107,18 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends Abstr
94
107
  async divineHandler(payloads = []) {
95
108
  const queries = payloads.filter(isPayloadOfSchemaType(this.divinerQuerySchema));
96
109
  if (queries.length > 0) {
97
- const results = await Promise.all(
98
- queries.map(async (query) => {
99
- const fields = await reducePayloads(
100
- [query],
101
- this.payloadTransformers,
102
- this.indexQuerySchema
103
- );
104
- fields.schemas = [this.indexSchema];
105
- delete fields.sources;
106
- return await new PayloadBuilder({ schema: this.indexQuerySchema }).fields(fields).build();
107
- })
108
- );
110
+ const results = await Promise.all(queries.map(async (query) => {
111
+ const fields = await reducePayloads([
112
+ query
113
+ ], this.payloadTransformers, this.indexQuerySchema);
114
+ fields.schemas = [
115
+ this.indexSchema
116
+ ];
117
+ delete fields.sources;
118
+ return await new PayloadBuilder({
119
+ schema: this.indexQuerySchema
120
+ }).fields(fields).build();
121
+ }));
109
122
  return results;
110
123
  }
111
124
  return [];
@@ -120,42 +133,45 @@ import { AbstractDiviner as AbstractDiviner2 } from "@xyo-network/abstract-divin
120
133
  import { isBoundWitness } from "@xyo-network/boundwitness-model";
121
134
  import { jsonPathToTransformersDictionary as jsonPathToTransformersDictionary2 } from "@xyo-network/diviner-jsonpath-aggregate-memory";
122
135
  import { DivinerConfigSchema as DivinerConfigSchema3 } from "@xyo-network/diviner-model";
123
- import {
124
- TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,
125
- TemporalIndexingDivinerResultIndexSchema as TemporalIndexingDivinerResultIndexSchema2
126
- } from "@xyo-network/diviner-temporal-indexing-model";
136
+ import { TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema, TemporalIndexingDivinerResultIndexSchema as TemporalIndexingDivinerResultIndexSchema2 } from "@xyo-network/diviner-temporal-indexing-model";
127
137
  import { PayloadHasher } from "@xyo-network/hash";
128
138
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
129
139
  var moduleName = "TemporalIndexingDivinerIndexCandidateToIndexDiviner";
130
140
  var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends AbstractDiviner2 {
141
+ static {
142
+ __name(this, "TemporalIndexingDivinerIndexCandidateToIndexDiviner");
143
+ }
131
144
  static configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema;
132
- static configSchemas = [DivinerConfigSchema3, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema];
145
+ static configSchemas = [
146
+ DivinerConfigSchema3,
147
+ TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema
148
+ ];
133
149
  static labels = {
134
150
  "network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
135
151
  };
136
152
  _indexableSchemas;
137
153
  _payloadTransformers;
138
154
  /**
139
- * List of indexable schemas for this diviner
140
- */
155
+ * List of indexable schemas for this diviner
156
+ */
141
157
  get indexableSchemas() {
142
158
  if (!this._indexableSchemas)
143
159
  this._indexableSchemas = Object.keys(this.schemaTransforms);
144
160
  return this._indexableSchemas;
145
161
  }
146
162
  /**
147
- * Dictionary of schemas to payload transformers for creating indexes
148
- * from the payloads within a Bound Witness
149
- */
163
+ * Dictionary of schemas to payload transformers for creating indexes
164
+ * from the payloads within a Bound Witness
165
+ */
150
166
  get payloadTransformers() {
151
167
  if (!this._payloadTransformers)
152
168
  this._payloadTransformers = jsonPathToTransformersDictionary2(this.schemaTransforms);
153
169
  return this._payloadTransformers;
154
170
  }
155
171
  /**
156
- * The dictionary of schemas to JSON Path transform expressions for creating indexes
157
- * from the payloads within a Bound Witness
158
- */
172
+ * The dictionary of schemas to JSON Path transform expressions for creating indexes
173
+ * from the payloads within a Bound Witness
174
+ */
159
175
  get schemaTransforms() {
160
176
  return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`);
161
177
  }
@@ -171,36 +187,44 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends Abstract
171
187
  const indexablePayloadHashes = indexablePayloadPositions.map((index) => bw.payload_hashes?.[index]);
172
188
  const indexablePayloads2 = indexablePayloadHashes.map((hash) => payloadDictionary[hash]).filter(exists);
173
189
  if (indexablePayloads2.length === this.indexableSchemas.length)
174
- indexableTuples.push([bw, ...indexablePayloads2]);
190
+ indexableTuples.push([
191
+ bw,
192
+ ...indexablePayloads2
193
+ ]);
175
194
  return indexableTuples;
176
195
  }, []);
177
- const indexes = await Promise.all(
178
- validIndexableTuples.map(async ([bw, ...sourcePayloads]) => {
179
- const indexFields = sourcePayloads.flatMap((payload) => {
180
- const transformers = this.payloadTransformers[payload.schema];
181
- return transformers ? transformers.map((transform) => transform(payload)) : [];
182
- });
183
- const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]));
184
- return await new PayloadBuilder2({ schema: TemporalIndexingDivinerResultIndexSchema2 }).fields(Object.assign({ sources }, ...indexFields)).build();
185
- })
186
- );
196
+ const indexes = await Promise.all(validIndexableTuples.map(async ([bw, ...sourcePayloads]) => {
197
+ const indexFields = sourcePayloads.flatMap((payload) => {
198
+ const transformers = this.payloadTransformers[payload.schema];
199
+ return transformers ? transformers.map((transform) => transform(payload)) : [];
200
+ });
201
+ const sources = Object.keys(await PayloadHasher.toMap([
202
+ bw,
203
+ ...sourcePayloads
204
+ ]));
205
+ return await new PayloadBuilder2({
206
+ schema: TemporalIndexingDivinerResultIndexSchema2
207
+ }).fields(Object.assign({
208
+ sources
209
+ }, ...indexFields)).build();
210
+ }));
187
211
  return indexes.flat();
188
212
  }
189
213
  return [];
190
214
  }
191
215
  /**
192
- * Identifies if a payload is one that is indexed by this diviner
193
- * @param x The candidate payload
194
- * @returns True if the payload is one indexed by this diviner, false otherwise
195
- */
216
+ * Identifies if a payload is one that is indexed by this diviner
217
+ * @param x The candidate payload
218
+ * @returns True if the payload is one indexed by this diviner, false otherwise
219
+ */
196
220
  isIndexablePayload = (x) => {
197
221
  return this.indexableSchemas.includes(x?.schema);
198
222
  };
199
223
  /**
200
- * Identifies if a schema is one that is indexed by this diviner
201
- * @param schema The candidate schema
202
- * @returns True if this schema is one indexed by this diviner, false otherwise
203
- */
224
+ * Identifies if a schema is one that is indexed by this diviner
225
+ * @param schema The candidate schema
226
+ * @returns True if this schema is one indexed by this diviner, false otherwise
227
+ */
204
228
  isIndexableSchema = (schema) => {
205
229
  return typeof schema === "string" ? this.indexableSchemas.includes(schema) : false;
206
230
  };
@@ -212,8 +236,14 @@ import { DivinerConfigSchema as DivinerConfigSchema4 } from "@xyo-network/divine
212
236
  import { isPayloadDivinerQueryPayload } from "@xyo-network/diviner-payload-model";
213
237
  import { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from "@xyo-network/diviner-temporal-indexing-model";
214
238
  var TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = class extends AbstractDiviner3 {
239
+ static {
240
+ __name(this, "TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner");
241
+ }
215
242
  static configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema;
216
- static configSchemas = [DivinerConfigSchema4, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema];
243
+ static configSchemas = [
244
+ DivinerConfigSchema4,
245
+ TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema
246
+ ];
217
247
  static labels = {
218
248
  "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
219
249
  };
@@ -231,9 +261,7 @@ import { ArchivistWrapper } from "@xyo-network/archivist-wrapper";
231
261
  import { isBoundWitness as isBoundWitness2 } from "@xyo-network/boundwitness-model";
232
262
  import { BoundWitnessDivinerQuerySchema } from "@xyo-network/diviner-boundwitness-model";
233
263
  import { DivinerConfigSchema as DivinerConfigSchema5 } from "@xyo-network/diviner-model";
234
- import {
235
- TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema
236
- } from "@xyo-network/diviner-temporal-indexing-model";
264
+ import { TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema } from "@xyo-network/diviner-temporal-indexing-model";
237
265
  import { DivinerWrapper } from "@xyo-network/diviner-wrapper";
238
266
  import { isModuleState, ModuleStateSchema } from "@xyo-network/module-model";
239
267
  import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
@@ -242,8 +270,14 @@ import { TimestampSchema } from "@xyo-network/witness-timestamp";
242
270
  var order = "asc";
243
271
  var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
244
272
  var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends AbstractDiviner4 {
273
+ static {
274
+ __name(this, "TemporalIndexingDivinerStateToIndexCandidateDiviner");
275
+ }
245
276
  static configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema;
246
- static configSchemas = [DivinerConfigSchema5, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema];
277
+ static configSchemas = [
278
+ DivinerConfigSchema5,
279
+ TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema
280
+ ];
247
281
  static labels = {
248
282
  "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
249
283
  };
@@ -251,35 +285,69 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
251
285
  return this.config.payloadDivinerLimit ?? 1e3;
252
286
  }
253
287
  /**
254
- * The required payload_schemas within BoundWitnesses to identify index candidates
255
- */
288
+ * The required payload_schemas within BoundWitnesses to identify index candidates
289
+ */
256
290
  get payload_schemas() {
257
291
  const schemas = this.config.filter?.payload_schemas;
258
- return [TimestampSchema, ...schemas ?? []];
292
+ return [
293
+ TimestampSchema,
294
+ ...schemas ?? []
295
+ ];
259
296
  }
260
297
  async divineHandler(payloads = []) {
261
298
  const lastState = payloads.find(isModuleState);
262
299
  if (!lastState)
263
- return [{ schema: ModuleStateSchema, state: { offset: 0 } }];
300
+ return [
301
+ {
302
+ schema: ModuleStateSchema,
303
+ state: {
304
+ offset: 0
305
+ }
306
+ }
307
+ ];
264
308
  const { offset } = lastState.state;
265
309
  const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
266
310
  if (!boundWitnessDiviner)
267
- return [lastState];
268
- const query = await new PayloadBuilder3({ schema: BoundWitnessDivinerQuerySchema }).fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas }).build();
269
- const batch = await boundWitnessDiviner.divine([query]);
311
+ return [
312
+ lastState
313
+ ];
314
+ const query = await new PayloadBuilder3({
315
+ schema: BoundWitnessDivinerQuerySchema
316
+ }).fields({
317
+ limit: this.payloadDivinerLimit,
318
+ offset,
319
+ order,
320
+ payload_schemas: this.payload_schemas
321
+ }).build();
322
+ const batch = await boundWitnessDiviner.divine([
323
+ query
324
+ ]);
270
325
  if (batch.length === 0)
271
- return [lastState];
326
+ return [
327
+ lastState
328
+ ];
272
329
  const sourceArchivist = await this.getArchivistForStore();
273
330
  if (!sourceArchivist)
274
- return [lastState];
331
+ return [
332
+ lastState
333
+ ];
275
334
  const indexCandidates = (await Promise.all(batch.filter(isBoundWitness2).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))).filter(exists2).flat();
276
- const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } };
277
- return [nextState, ...indexCandidates];
335
+ const nextState = {
336
+ schema: ModuleStateSchema,
337
+ state: {
338
+ ...lastState.state,
339
+ offset: offset + batch.length
340
+ }
341
+ };
342
+ return [
343
+ nextState,
344
+ ...indexCandidates
345
+ ];
278
346
  }
279
347
  /**
280
- * Retrieves the archivist for the payloadStore
281
- * @returns The archivist for the payloadStore or undefined if not resolvable
282
- */
348
+ * Retrieves the archivist for the payloadStore
349
+ * @returns The archivist for the payloadStore or undefined if not resolvable
350
+ */
283
351
  async getArchivistForStore() {
284
352
  const name = assertEx2(this.config?.payloadStore?.archivist, () => `${moduleName2}: Config for payloadStore.archivist not specified`);
285
353
  const mod = await this.resolve(name);
@@ -288,14 +356,11 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
288
356
  return ArchivistWrapper.wrap(mod, this.account);
289
357
  }
290
358
  /**
291
- * Retrieves the BoundWitness Diviner for the payloadStore
292
- * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable
293
- */
359
+ * Retrieves the BoundWitness Diviner for the payloadStore
360
+ * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable
361
+ */
294
362
  async getBoundWitnessDivinerForStore() {
295
- const name = assertEx2(
296
- this.config?.payloadStore?.boundWitnessDiviner,
297
- () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`
298
- );
363
+ const name = assertEx2(this.config?.payloadStore?.boundWitnessDiviner, () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`);
299
364
  const mod = await this.resolve(name);
300
365
  if (!mod)
301
366
  return void 0;
@@ -310,7 +375,10 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
310
375
  if (filteredResults.includes(void 0))
311
376
  return void 0;
312
377
  const indexCandidates = filteredResults.filter(exists2);
313
- return [bw, ...indexCandidates];
378
+ return [
379
+ bw,
380
+ ...indexCandidates
381
+ ];
314
382
  }
315
383
  };
316
384
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/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":["DivinerConfigSchema","AbstractDiviner","jsonPathToTransformersDictionary","DivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadBuilder","indexablePayloads","AbstractDiviner","DivinerConfigSchema","assertEx","exists","AbstractDiviner","isBoundWitness","DivinerConfigSchema","PayloadBuilder","isPayloadOfSchemaType","moduleName"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/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":";;;;AAAA,SAASA,uBAAuB;AAChC,SAASC,mCAAmC;AAC5C,SAASC,2BAAkE;AAC3E,SAASC,2CAA0E;AAG5E,IAAMC,0BAAN,cAKGC,gBAAAA;EAXV,OAWUA;;;EACR,OAAyBC,eAAeC;EACxC,OAAyBC,gBAA0B;IAACD;IAAqCE;IAA6BC;;EAEtH,MAAyBC,eAAiC;AACxD,UAAM,MAAMA,aAAAA;AACZ,WAAO;EACT;AACF;;;ACnBA,SAASC,uBAAuB;AAChC,SAASC,kCAAkCC,sBAAsB;AAEjE,SAASC,uBAAAA,4BAA2B;AACpC,SAAqCC,iCAAiC;AACtE,SACEC,oEAEAC,gDACK;AAEP,SAASC,sBAAsB;AAC/B,SAASC,6BAAsC;AAKxC,IAAMC,yDAAN,cAEGC,gBAAAA;EAnBV,OAmBUA;;;EACR,OAAyBC,eAAeC;EACxC,OAAgBC,gBAAgB;IAACC;IAAqBF;;EACtD,OAAOG,SAAiB;IACtB,6BAA6B;EAC/B;EAEQC;EACAC;;;;EAKR,IAAcC,qBAA6B;AACzC,WAAO,KAAKC,OAAOD,sBAAsBE;EAC3C;;;;EAKA,IAAcC,mBAA2B;AACvC,WAAO,KAAKF,OAAOE,oBAAoBD;EACzC;;;;EAKA,IAAcE,cAAsB;AAClC,WAAO,KAAKH,OAAOG,eAAeC;EACpC;;;;EAKA,IAAcC,mBAA6B;AACzC,QAAI,CAAC,KAAKR;AAAmB,WAAKA,oBAAoBS,OAAOC,KAAK,KAAKC,gBAAgB;AACvF,WAAO,KAAKX;EACd;;;;;EAMA,IAAcY,sBAA6D;AACzE,QAAI,CAAC,KAAKX;AAAsB,WAAKA,uBAAuBY,iCAAiC,KAAKF,gBAAgB;AAClH,WAAO,KAAKV;EACd;;;;;EAMA,IAAcU,mBAAmE;AAC/E,WACE,KAAKR,QAAQQ,oBAAoB;MAC/B,CAAC,KAAKT,kBAAkB,GAAG;QACzB;UACEY,cAAc;UACdC,kBAAkB;UAClBC,sBAAsB;QACxB;QACA;UACEF,cAAc;UACdC,kBAAkB;UAClBC,sBAAsB;QACxB;QACA;UACEF,cAAc;UACdC,kBAAkB;UAClBC,sBAAsB;QACxB;;IAEJ;EAEJ;EAEA,MAAyBC,cAAcC,WAAsB,CAAA,GAAwB;AACnF,UAAMC,UAAUD,SAASE,OAAOC,sBAAkD,KAAKnB,kBAAkB,CAAA;AACzG,QAAIiB,QAAQG,SAAS,GAAG;AACtB,YAAMC,UAAU,MAAMC,QAAQC,IAC5BN,QAAQO,IAAI,OAAOC,UAAAA;AACjB,cAAMC,SAAS,MAAMC,eACnB;UAACF;WACD,KAAKf,qBACL,KAAKP,gBAAgB;AAGvBuB,eAAOE,UAAU;UAAC,KAAKxB;;AAEvB,eAAOsB,OAAOG;AAEd,eAAO,MAAM,IAAIC,eAAwB;UAAEC,QAAQ,KAAK5B;QAAiB,CAAA,EAAGuB,OAAOA,MAAAA,EAAQM,MAAK;MAClG,CAAA,CAAA;AAEF,aAAOX;IACT;AACA,WAAO,CAAA;EACT;AACF;;;ACrHA,SAASY,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,mBAAAA,wBAAuB;AAChC,SAAuBC,sBAAsB;AAC7C,SAASC,oCAAAA,yCAAwC;AAEjD,SAASC,uBAAAA,4BAA2B;AACpC,SACEC,iEAGAC,4CAAAA,iDACK;AACP,SAASC,qBAAqB;AAE9B,SAASC,kBAAAA,uBAAsB;AAK/B,IAAMC,aAAa;AAOZ,IAAMC,sDAAN,cAEGC,iBAAAA;EA9BV,OA8BUA;;;EACR,OAAgBC,eAAeC;EAC/B,OAAgBC,gBAAgB;IAACC;IAAqBF;;EACtD,OAAOG,SAAiB;IACtB,6BAA6B;EAC/B;EAEQC;EACAC;;;;EAKR,IAAcC,mBAA6B;AACzC,QAAI,CAAC,KAAKF;AAAmB,WAAKA,oBAAoBG,OAAOC,KAAK,KAAKC,gBAAgB;AACvF,WAAO,KAAKL;EACd;;;;;EAMA,IAAcM,sBAA6D;AACzE,QAAI,CAAC,KAAKL;AAAsB,WAAKA,uBAAuBM,kCAAiC,KAAKF,gBAAgB;AAClH,WAAO,KAAKJ;EACd;;;;;EAMA,IAAcI,mBAAmE;AAC/E,WAAOG,SAAS,KAAKC,QAAQJ,kBAAkB,MAAM,GAAGb,UAAAA,2CAAqD;EAC/G;EAEA,MAAyBkB,cAAcC,WAAsB,CAAA,GAAwB;AACnF,UAAMC,MAAsBD,SAASE,OAAOC,cAAAA;AAC5C,UAAMC,oBAA+BJ,SAASE,OAAO,CAACG,MAAM,KAAKC,mBAAmBD,CAAAA,CAAAA;AACpF,QAAIJ,IAAIM,SAAS,KAAKH,kBAAkBG,SAAS,GAAG;AAClD,YAAMC,oBAAoB,MAAMC,cAAcC,MAAMV,QAAAA;AAEpD,YAAMW,uBAA4CV,IAAIW,OAA4B,CAACC,iBAAiBC,OAAAA;AAElG,YAAI,CAACC,YAAYD,GAAGE,iBAAiB,KAAKzB,gBAAgB;AAAG,iBAAOsB;AAEpE,cAAMI,4BAA4B,KAAK1B,iBAAiB2B,IAAI,CAACC,WAAWL,GAAGE,gBAAgBI,QAAQD,MAAAA,CAAAA;AACnG,cAAME,yBAAyBJ,0BAA0BC,IAAI,CAACI,UAAUR,GAAGS,iBAAiBD,KAAAA,CAAM;AAClG,cAAMlB,qBAAoBiB,uBAAuBH,IAAI,CAACM,SAAShB,kBAAkBgB,IAAAA,CAAK,EAAEtB,OAAOuB,MAAAA;AAG/F,YAAIrB,mBAAkBG,WAAW,KAAKhB,iBAAiBgB;AAAQM,0BAAgBa,KAAK;YAACZ;eAAOV;WAAkB;AAC9G,eAAOS;MACT,GAAG,CAAA,CAAE;AAEL,YAAMc,UAAU,MAAMC,QAAQC,IAC5BlB,qBAAqBO,IAAiD,OAAO,CAACJ,IAAOgB,iBAAAA,MAAe;AAElG,cAAMC,cAAcD,eAAeE,QAAyB,CAACC,YAAAA;AAE3D,gBAAMC,eAAe,KAAKvC,oBAAoBsC,QAAQd,MAAM;AAE5D,iBAAOe,eAAeA,aAAahB,IAAI,CAACiB,cAAcA,UAAUF,OAAAA,CAAAA,IAAY,CAAA;QAC9E,CAAA;AAEA,cAAMG,UAAU5C,OAAOC,KAAK,MAAMgB,cAAcC,MAAM;UAACI;aAAOgB;SAAe,CAAA;AAE7E,eAAO,MAAM,IAAIO,gBAAmD;UAAElB,QAAQmB;QAAyC,CAAA,EACpHC,OAAO/C,OAAOgD,OAAO;UAAEJ;QAAQ,GAAA,GAAML,WAAAA,CAAAA,EACrCU,MAAK;MACV,CAAA,CAAA;AAEF,aAAOd,QAAQe,KAAI;IACrB;AACA,WAAO,CAAA;EACT;;;;;;EAOUpC,qBAAqB,CAACqC,MAAAA;AAC9B,WAAO,KAAKpD,iBAAiBqD,SAASD,GAAGxB,MAAAA;EAC3C;;;;;;EAOU0B,oBAAoB,CAAC1B,WAAAA;AAC7B,WAAO,OAAOA,WAAW,WAAW,KAAK5B,iBAAiBqD,SAASzB,MAAAA,IAAU;EAC/E;AACF;;;AC3HA,SAAS2B,mBAAAA,wBAAuB;AAChC,SAASC,uBAAAA,4BAA2B;AACpC,SAASC,oCAAoC;AAC7C,SAASC,0FAA0F;AAO5F,IAAMC,yEAAN,cAAqFC,iBAAAA;EAV5F,OAU4FA;;;EAC1F,OAAyBC,eAAeC;EACxC,OAAgBC,gBAAgB;IAACC;IAAqBF;;EACtD,OAAOG,SAAiB;IACtB,6BAA6B;EAC/B;EAEA,MAAyBC,cAAcC,WAAsB,CAAA,GAAwB;AAKnF,UAAMC,YAAYD,SAASE,OAAO,CAACC,MAAM,CAACC,6BAA6BD,CAAAA,CAAAA;AACvE,WAAO,MAAME,QAAQC,QAAQL,SAAAA;EAC/B;AACF;;;ACzBA,SAASM,YAAAA,iBAAgB;AACzB,SAASC,UAAAA,eAAc;AACvB,SAASC,mBAAAA,wBAAuB;AAEhC,SAASC,wBAAwB;AACjC,SAAuBC,kBAAAA,uBAAsB;AAC7C,SAA0CC,sCAAsC;AAEhF,SAASC,uBAAAA,4BAA2B;AACpC,SACEC,uEAEK;AACP,SAASC,sBAAsB;AAC/B,SAASC,eAAoCC,yBAAyB;AACtE,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,yBAAAA,8BAAsC;AAC/C,SAAoBC,uBAAuB;AAwB3C,IAAMC,QAAQ;AAKd,IAAMC,cAAa;AAKZ,IAAMC,sDAAN,cAEGC,iBAAAA;EArDV,OAqDUA;;;EACR,OAAyBC,eAAeC;EACxC,OAAgBC,gBAAgB;IAACC;IAAqBF;;EACtD,OAAOG,SAAiB;IACtB,6BAA6B;EAC/B;EAEA,IAAIC,sBAAsB;AACxB,WAAO,KAAKC,OAAOD,uBAAuB;EAC5C;;;;EAKA,IAAcE,kBAA4B;AACxC,UAAMC,UAAU,KAAKF,OAAOG,QAAQF;AACpC,WAAO;MAACG;SAAqBF,WAAW,CAAA;;EAC1C;EAEA,MAAyBG,cAAcC,WAAsB,CAAA,GAAiD;AAE5G,UAAMC,YAAYD,SAASE,KAAKC,aAAAA;AAEhC,QAAI,CAACF;AAAW,aAAO;QAAC;UAAEG,QAAQC;UAAmBC,OAAO;YAAEC,QAAQ;UAAE;QAAE;;AAE1E,UAAM,EAAEA,OAAM,IAAKN,UAAUK;AAE7B,UAAME,sBAAsB,MAAM,KAAKC,+BAA8B;AACrE,QAAI,CAACD;AAAqB,aAAO;QAACP;;AAClC,UAAMS,QAAQ,MAAM,IAAIC,gBAAgD;MAAEP,QAAQQ;IAA+B,CAAA,EAC9GC,OAAO;MAAEC,OAAO,KAAKrB;MAAqBc;MAAQvB;MAAOW,iBAAiB,KAAKA;IAAgB,CAAA,EAC/FoB,MAAK;AACR,UAAMC,QAAQ,MAAMR,oBAAoBS,OAAO;MAACP;KAAM;AACtD,QAAIM,MAAME,WAAW;AAAG,aAAO;QAACjB;;AAEhC,UAAMkB,kBAAkB,MAAM,KAAKC,qBAAoB;AACvD,QAAI,CAACD;AAAiB,aAAO;QAAClB;;AAC9B,UAAMoB,mBACJ,MAAMC,QAAQC,IAAIP,MAAMnB,OAAO2B,eAAAA,EAAgBC,IAAI,CAACC,OAAO,KAAKC,0BAA0BD,IAAIP,eAAAA,CAAAA,CAAAA,GAE7FtB,OAAO+B,OAAAA,EACPC,KAAI;AACP,UAAMC,YAAY;MAAE1B,QAAQC;MAAmBC,OAAO;QAAE,GAAGL,UAAUK;QAAOC,QAAQA,SAASS,MAAME;MAAO;IAAE;AAC5G,WAAO;MAACY;SAAcT;;EACxB;;;;;EAKA,MAAgBD,uBAA8D;AAE5E,UAAMW,OAAeC,UAAS,KAAKtC,QAAQuC,cAAcC,WAAW,MAAM,GAAGjD,WAAAA,mDAA6D;AAE1I,UAAMkD,MAAM,MAAM,KAAKC,QAAQL,IAAAA;AAC/B,QAAI,CAACI;AAAK,aAAOE;AAEjB,WAAOC,iBAAiBC,KAAKJ,KAAK,KAAKK,OAAO;EAChD;;;;;EAMA,MAAgB/B,iCAAsE;AAEpF,UAAMsB,OAAeC,UACnB,KAAKtC,QAAQuC,cAAczB,qBAC3B,MAAM,GAAGvB,WAAAA,6DAAuE;AAGlF,UAAMkD,MAAM,MAAM,KAAKC,QAAQL,IAAAA;AAC/B,QAAI,CAACI;AAAK,aAAOE;AAEjB,WAAOI,eAAeF,KAAKJ,KAAK,KAAKK,OAAO;EAC9C;EAEA,MAAgBb,0BAA0BD,IAAkBQ,WAAqE;AAC/H,UAAMQ,UAAU,KAAK/C,gBAAgB8B,IAAI,CAACrB,WAAWsB,GAAG/B,iBAAiBgD,UAAU,CAACC,MAAMA,MAAMxC,MAAAA,CAAAA;AAChG,UAAMyC,SAASH,QAAQjB,IAAI,CAACqB,UAAUpB,GAAGqB,iBAAiBD,KAAAA,CAAM;AAChE,UAAME,UAAU,MAAMd,UAAUe,IAAIJ,MAAAA;AACpC,UAAMK,kCAAkC,KAAKvD,gBAAgB8B,IAAI0B,sBAAAA;AACjE,UAAMC,kBAAkBF,gCAAgCzB,IAAI,CAAC4B,OAAOL,QAAQ9C,KAAKmD,EAAAA,CAAAA;AACjF,QAAID,gBAAgBE,SAASjB,MAAAA;AAAY,aAAOA;AAChD,UAAMhB,kBAAoC+B,gBAAgBvD,OAAO+B,OAAAA;AACjE,WAAO;MAACF;SAAOL;;EACjB;AACF;","names":["IndexingDiviner","IndexingDivinerConfigSchema","DivinerConfigSchema","TemporalIndexingDivinerConfigSchema","TemporalIndexingDiviner","IndexingDiviner","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","startHandler","AbstractDiviner","jsonPathToTransformersDictionary","reducePayloads","DivinerConfigSchema","PayloadDivinerQuerySchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadBuilder","isPayloadOfSchemaType","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","containsAll","assertEx","exists","AbstractDiviner","isBoundWitness","jsonPathToTransformersDictionary","DivinerConfigSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadHasher","PayloadBuilder","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","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","AbstractDiviner","DivinerConfigSchema","isPayloadDivinerQueryPayload","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","assertEx","exists","AbstractDiviner","ArchivistWrapper","isBoundWitness","BoundWitnessDivinerQuerySchema","DivinerConfigSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","DivinerWrapper","isModuleState","ModuleStateSchema","PayloadBuilder","isPayloadOfSchemaType","TimestampSchema","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","indexes","findIndex","s","hashes","index","payload_hashes","results","get","indexCandidateIdentityFunctions","isPayloadOfSchemaType","filteredResults","is","includes"]}