@xyo-network/diviner-temporal-indexing-memory 2.84.19 → 2.85.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/IndexCandidateToIndexDiviner/Diviner.d.cts.map +1 -1
- package/dist/browser/IndexCandidateToIndexDiviner/Diviner.d.mts.map +1 -1
- package/dist/browser/IndexCandidateToIndexDiviner/Diviner.d.ts.map +1 -1
- package/dist/browser/index.cjs +159 -84
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +164 -95
- package/dist/browser/index.js.map +1 -1
- package/dist/node/IndexCandidateToIndexDiviner/Diviner.d.cts.map +1 -1
- package/dist/node/IndexCandidateToIndexDiviner/Diviner.d.mts.map +1 -1
- package/dist/node/IndexCandidateToIndexDiviner/Diviner.d.ts.map +1 -1
- package/dist/node/index.cjs +180 -108
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +185 -119
- package/dist/node/index.js.map +1 -1
- package/package.json +27 -26
- package/src/IndexCandidateToIndexDiviner/Diviner.ts +9 -7
package/dist/node/index.js
CHANGED
|
@@ -1,75 +1,81 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
+
var __publicField = (obj, key, value) => {
|
|
5
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
|
+
return value;
|
|
7
|
+
};
|
|
8
|
+
|
|
1
9
|
// src/Diviner.ts
|
|
2
10
|
import { IndexingDiviner } from "@xyo-network/diviner-indexing-memory";
|
|
3
11
|
import { IndexingDivinerConfigSchema } from "@xyo-network/diviner-indexing-model";
|
|
4
12
|
import { DivinerConfigSchema } from "@xyo-network/diviner-model";
|
|
5
13
|
import { TemporalIndexingDivinerConfigSchema } from "@xyo-network/diviner-temporal-indexing-model";
|
|
6
|
-
var
|
|
7
|
-
static configSchema = TemporalIndexingDivinerConfigSchema;
|
|
8
|
-
static configSchemas = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema];
|
|
14
|
+
var _TemporalIndexingDiviner = class _TemporalIndexingDiviner extends IndexingDiviner {
|
|
9
15
|
async startHandler() {
|
|
10
16
|
await super.startHandler();
|
|
11
17
|
return true;
|
|
12
18
|
}
|
|
13
19
|
};
|
|
20
|
+
__name(_TemporalIndexingDiviner, "TemporalIndexingDiviner");
|
|
21
|
+
__publicField(_TemporalIndexingDiviner, "configSchema", TemporalIndexingDivinerConfigSchema);
|
|
22
|
+
__publicField(_TemporalIndexingDiviner, "configSchemas", [
|
|
23
|
+
TemporalIndexingDivinerConfigSchema,
|
|
24
|
+
IndexingDivinerConfigSchema,
|
|
25
|
+
DivinerConfigSchema
|
|
26
|
+
]);
|
|
27
|
+
var TemporalIndexingDiviner = _TemporalIndexingDiviner;
|
|
14
28
|
|
|
15
29
|
// src/DivinerQueryToIndexQueryDiviner/Diviner.ts
|
|
16
30
|
import { AbstractDiviner } from "@xyo-network/abstract-diviner";
|
|
17
31
|
import { jsonPathToTransformersDictionary, reducePayloads } from "@xyo-network/diviner-jsonpath-aggregate-memory";
|
|
18
32
|
import { DivinerConfigSchema as DivinerConfigSchema2 } from "@xyo-network/diviner-model";
|
|
19
33
|
import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
|
|
20
|
-
import {
|
|
21
|
-
TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,
|
|
22
|
-
TemporalIndexingDivinerResultIndexSchema
|
|
23
|
-
} from "@xyo-network/diviner-temporal-indexing-model";
|
|
34
|
+
import { TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema, TemporalIndexingDivinerResultIndexSchema } from "@xyo-network/diviner-temporal-indexing-model";
|
|
24
35
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
25
36
|
import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
26
|
-
var
|
|
27
|
-
static configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema;
|
|
28
|
-
static configSchemas = [DivinerConfigSchema2, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema];
|
|
29
|
-
static labels = {
|
|
30
|
-
"network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
|
|
31
|
-
};
|
|
37
|
+
var _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner extends AbstractDiviner {
|
|
32
38
|
_indexableSchemas;
|
|
33
39
|
_payloadTransformers;
|
|
34
40
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
* The schema of the diviner query payloads
|
|
42
|
+
*/
|
|
37
43
|
get divinerQuerySchema() {
|
|
38
44
|
return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema;
|
|
39
45
|
}
|
|
40
46
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
* The schema of the index query payloads
|
|
48
|
+
*/
|
|
43
49
|
get indexQuerySchema() {
|
|
44
50
|
return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema;
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
* The schema of the index payloads
|
|
54
|
+
*/
|
|
49
55
|
get indexSchema() {
|
|
50
56
|
return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema;
|
|
51
57
|
}
|
|
52
58
|
/**
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
* List of indexable schemas for this diviner
|
|
60
|
+
*/
|
|
55
61
|
get indexableSchemas() {
|
|
56
62
|
if (!this._indexableSchemas)
|
|
57
63
|
this._indexableSchemas = Object.keys(this.schemaTransforms);
|
|
58
64
|
return this._indexableSchemas;
|
|
59
65
|
}
|
|
60
66
|
/**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
* Dictionary of schemas to payload transformers for creating indexes
|
|
68
|
+
* from the payloads within a Bound Witness
|
|
69
|
+
*/
|
|
64
70
|
get payloadTransformers() {
|
|
65
71
|
if (!this._payloadTransformers)
|
|
66
72
|
this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
|
|
67
73
|
return this._payloadTransformers;
|
|
68
74
|
}
|
|
69
75
|
/**
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
76
|
+
* The dictionary of schemas to JSON Path transform expressions for creating indexes
|
|
77
|
+
* from the payloads within a Bound Witness
|
|
78
|
+
*/
|
|
73
79
|
get schemaTransforms() {
|
|
74
80
|
var _a;
|
|
75
81
|
return ((_a = this.config) == null ? void 0 : _a.schemaTransforms) ?? {
|
|
@@ -95,23 +101,33 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends Abstr
|
|
|
95
101
|
async divineHandler(payloads = []) {
|
|
96
102
|
const queries = payloads.filter(isPayloadOfSchemaType(this.divinerQuerySchema));
|
|
97
103
|
if (queries.length > 0) {
|
|
98
|
-
const results = await Promise.all(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
})
|
|
109
|
-
);
|
|
104
|
+
const results = await Promise.all(queries.map(async (query) => {
|
|
105
|
+
const fields = await reducePayloads([
|
|
106
|
+
query
|
|
107
|
+
], this.payloadTransformers, this.indexQuerySchema);
|
|
108
|
+
fields.schemas = [
|
|
109
|
+
this.indexSchema
|
|
110
|
+
];
|
|
111
|
+
delete fields.sources;
|
|
112
|
+
return await new PayloadBuilder({
|
|
113
|
+
schema: this.indexQuerySchema
|
|
114
|
+
}).fields(fields).build();
|
|
115
|
+
}));
|
|
110
116
|
return results;
|
|
111
117
|
}
|
|
112
118
|
return [];
|
|
113
119
|
}
|
|
114
120
|
};
|
|
121
|
+
__name(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner");
|
|
122
|
+
__publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "configSchema", TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema);
|
|
123
|
+
__publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "configSchemas", [
|
|
124
|
+
DivinerConfigSchema2,
|
|
125
|
+
TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema
|
|
126
|
+
]);
|
|
127
|
+
__publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "labels", {
|
|
128
|
+
"network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
|
|
129
|
+
});
|
|
130
|
+
var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner;
|
|
115
131
|
|
|
116
132
|
// src/IndexCandidateToIndexDiviner/Diviner.ts
|
|
117
133
|
import { containsAll } from "@xylabs/array";
|
|
@@ -121,42 +137,35 @@ import { AbstractDiviner as AbstractDiviner2 } from "@xyo-network/abstract-divin
|
|
|
121
137
|
import { isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
122
138
|
import { jsonPathToTransformersDictionary as jsonPathToTransformersDictionary2 } from "@xyo-network/diviner-jsonpath-aggregate-memory";
|
|
123
139
|
import { DivinerConfigSchema as DivinerConfigSchema3 } from "@xyo-network/diviner-model";
|
|
124
|
-
import {
|
|
125
|
-
TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,
|
|
126
|
-
TemporalIndexingDivinerResultIndexSchema as TemporalIndexingDivinerResultIndexSchema2
|
|
127
|
-
} from "@xyo-network/diviner-temporal-indexing-model";
|
|
140
|
+
import { TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema, TemporalIndexingDivinerResultIndexSchema as TemporalIndexingDivinerResultIndexSchema2 } from "@xyo-network/diviner-temporal-indexing-model";
|
|
128
141
|
import { PayloadHasher } from "@xyo-network/hash";
|
|
129
142
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
143
|
+
import { intraBoundwitnessSchemaCombinations } from "@xyo-network/payload-utils";
|
|
130
144
|
var moduleName = "TemporalIndexingDivinerIndexCandidateToIndexDiviner";
|
|
131
|
-
var
|
|
132
|
-
static configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema;
|
|
133
|
-
static configSchemas = [DivinerConfigSchema3, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema];
|
|
134
|
-
static labels = {
|
|
135
|
-
"network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
|
|
136
|
-
};
|
|
145
|
+
var _TemporalIndexingDivinerIndexCandidateToIndexDiviner = class _TemporalIndexingDivinerIndexCandidateToIndexDiviner extends AbstractDiviner2 {
|
|
137
146
|
_indexableSchemas;
|
|
138
147
|
_payloadTransformers;
|
|
139
148
|
/**
|
|
140
|
-
|
|
141
|
-
|
|
149
|
+
* List of indexable schemas for this diviner
|
|
150
|
+
*/
|
|
142
151
|
get indexableSchemas() {
|
|
143
152
|
if (!this._indexableSchemas)
|
|
144
153
|
this._indexableSchemas = Object.keys(this.schemaTransforms);
|
|
145
154
|
return this._indexableSchemas;
|
|
146
155
|
}
|
|
147
156
|
/**
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
* Dictionary of schemas to payload transformers for creating indexes
|
|
158
|
+
* from the payloads within a Bound Witness
|
|
159
|
+
*/
|
|
151
160
|
get payloadTransformers() {
|
|
152
161
|
if (!this._payloadTransformers)
|
|
153
162
|
this._payloadTransformers = jsonPathToTransformersDictionary2(this.schemaTransforms);
|
|
154
163
|
return this._payloadTransformers;
|
|
155
164
|
}
|
|
156
165
|
/**
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
166
|
+
* The dictionary of schemas to JSON Path transform expressions for creating indexes
|
|
167
|
+
* from the payloads within a Bound Witness
|
|
168
|
+
*/
|
|
160
169
|
get schemaTransforms() {
|
|
161
170
|
var _a;
|
|
162
171
|
return assertEx((_a = this.config) == null ? void 0 : _a.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`);
|
|
@@ -169,64 +178,84 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends Abstract
|
|
|
169
178
|
const validIndexableTuples = bws.reduce((indexableTuples, bw) => {
|
|
170
179
|
if (!containsAll(bw.payload_schemas, this.indexableSchemas))
|
|
171
180
|
return indexableTuples;
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
181
|
+
intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {
|
|
182
|
+
const indexablePayloads2 = combination.map((hash) => payloadDictionary[hash]).filter(exists);
|
|
183
|
+
if (indexablePayloads2.length === this.indexableSchemas.length)
|
|
184
|
+
indexableTuples.push([
|
|
185
|
+
bw,
|
|
186
|
+
...indexablePayloads2
|
|
187
|
+
]);
|
|
176
188
|
});
|
|
177
|
-
const indexablePayloads2 = indexablePayloadHashes.map((hash) => payloadDictionary[hash]).filter(exists);
|
|
178
|
-
if (indexablePayloads2.length === this.indexableSchemas.length)
|
|
179
|
-
indexableTuples.push([bw, ...indexablePayloads2]);
|
|
180
189
|
return indexableTuples;
|
|
181
190
|
}, []);
|
|
182
|
-
const indexes = await Promise.all(
|
|
183
|
-
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
191
|
+
const indexes = await Promise.all(validIndexableTuples.map(async ([bw, ...sourcePayloads]) => {
|
|
192
|
+
const indexFields = sourcePayloads.flatMap((payload) => {
|
|
193
|
+
const transformers = this.payloadTransformers[payload.schema];
|
|
194
|
+
return transformers ? transformers.map((transform) => transform(payload)) : [];
|
|
195
|
+
});
|
|
196
|
+
const sources = Object.keys(await PayloadHasher.toMap([
|
|
197
|
+
bw,
|
|
198
|
+
...sourcePayloads
|
|
199
|
+
]));
|
|
200
|
+
return await new PayloadBuilder2({
|
|
201
|
+
schema: TemporalIndexingDivinerResultIndexSchema2
|
|
202
|
+
}).fields(Object.assign({
|
|
203
|
+
sources
|
|
204
|
+
}, ...indexFields)).build();
|
|
205
|
+
}));
|
|
192
206
|
return indexes.flat();
|
|
193
207
|
}
|
|
194
208
|
return [];
|
|
195
209
|
}
|
|
196
210
|
/**
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
211
|
+
* Identifies if a payload is one that is indexed by this diviner
|
|
212
|
+
* @param x The candidate payload
|
|
213
|
+
* @returns True if the payload is one indexed by this diviner, false otherwise
|
|
214
|
+
*/
|
|
201
215
|
isIndexablePayload = (x) => {
|
|
202
216
|
return this.indexableSchemas.includes(x == null ? void 0 : x.schema);
|
|
203
217
|
};
|
|
204
218
|
/**
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
219
|
+
* Identifies if a schema is one that is indexed by this diviner
|
|
220
|
+
* @param schema The candidate schema
|
|
221
|
+
* @returns True if this schema is one indexed by this diviner, false otherwise
|
|
222
|
+
*/
|
|
209
223
|
isIndexableSchema = (schema) => {
|
|
210
224
|
return typeof schema === "string" ? this.indexableSchemas.includes(schema) : false;
|
|
211
225
|
};
|
|
212
226
|
};
|
|
227
|
+
__name(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "TemporalIndexingDivinerIndexCandidateToIndexDiviner");
|
|
228
|
+
__publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "configSchema", TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema);
|
|
229
|
+
__publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "configSchemas", [
|
|
230
|
+
DivinerConfigSchema3,
|
|
231
|
+
TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema
|
|
232
|
+
]);
|
|
233
|
+
__publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "labels", {
|
|
234
|
+
"network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
|
|
235
|
+
});
|
|
236
|
+
var TemporalIndexingDivinerIndexCandidateToIndexDiviner = _TemporalIndexingDivinerIndexCandidateToIndexDiviner;
|
|
213
237
|
|
|
214
238
|
// src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts
|
|
215
239
|
import { AbstractDiviner as AbstractDiviner3 } from "@xyo-network/abstract-diviner";
|
|
216
240
|
import { DivinerConfigSchema as DivinerConfigSchema4 } from "@xyo-network/diviner-model";
|
|
217
241
|
import { isPayloadDivinerQueryPayload } from "@xyo-network/diviner-payload-model";
|
|
218
242
|
import { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from "@xyo-network/diviner-temporal-indexing-model";
|
|
219
|
-
var
|
|
220
|
-
static configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema;
|
|
221
|
-
static configSchemas = [DivinerConfigSchema4, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema];
|
|
222
|
-
static labels = {
|
|
223
|
-
"network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
|
|
224
|
-
};
|
|
243
|
+
var _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = class _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner3 {
|
|
225
244
|
async divineHandler(payloads = []) {
|
|
226
245
|
const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p));
|
|
227
246
|
return await Promise.resolve(responses);
|
|
228
247
|
}
|
|
229
248
|
};
|
|
249
|
+
__name(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner");
|
|
250
|
+
__publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "configSchema", TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema);
|
|
251
|
+
__publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "configSchemas", [
|
|
252
|
+
DivinerConfigSchema4,
|
|
253
|
+
TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema
|
|
254
|
+
]);
|
|
255
|
+
__publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "labels", {
|
|
256
|
+
"network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
|
|
257
|
+
});
|
|
258
|
+
var TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner;
|
|
230
259
|
|
|
231
260
|
// src/StateToIndexCandidateDiviner/Diviner.ts
|
|
232
261
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
@@ -236,9 +265,7 @@ import { ArchivistWrapper } from "@xyo-network/archivist-wrapper";
|
|
|
236
265
|
import { isBoundWitness as isBoundWitness2 } from "@xyo-network/boundwitness-model";
|
|
237
266
|
import { BoundWitnessDivinerQuerySchema } from "@xyo-network/diviner-boundwitness-model";
|
|
238
267
|
import { DivinerConfigSchema as DivinerConfigSchema5 } from "@xyo-network/diviner-model";
|
|
239
|
-
import {
|
|
240
|
-
TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema
|
|
241
|
-
} from "@xyo-network/diviner-temporal-indexing-model";
|
|
268
|
+
import { TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema } from "@xyo-network/diviner-temporal-indexing-model";
|
|
242
269
|
import { DivinerWrapper } from "@xyo-network/diviner-wrapper";
|
|
243
270
|
import { isModuleState, ModuleStateSchema } from "@xyo-network/module-model";
|
|
244
271
|
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
@@ -246,46 +273,75 @@ import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/pa
|
|
|
246
273
|
import { TimestampSchema } from "@xyo-network/witness-timestamp";
|
|
247
274
|
var order = "asc";
|
|
248
275
|
var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
|
|
249
|
-
var
|
|
250
|
-
static configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema;
|
|
251
|
-
static configSchemas = [DivinerConfigSchema5, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema];
|
|
252
|
-
static labels = {
|
|
253
|
-
"network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
|
|
254
|
-
};
|
|
276
|
+
var _TemporalIndexingDivinerStateToIndexCandidateDiviner = class _TemporalIndexingDivinerStateToIndexCandidateDiviner extends AbstractDiviner4 {
|
|
255
277
|
get payloadDivinerLimit() {
|
|
256
278
|
return this.config.payloadDivinerLimit ?? 1e3;
|
|
257
279
|
}
|
|
258
280
|
/**
|
|
259
|
-
|
|
260
|
-
|
|
281
|
+
* The required payload_schemas within BoundWitnesses to identify index candidates
|
|
282
|
+
*/
|
|
261
283
|
get payload_schemas() {
|
|
262
284
|
var _a;
|
|
263
285
|
const schemas = (_a = this.config.filter) == null ? void 0 : _a.payload_schemas;
|
|
264
|
-
return [
|
|
286
|
+
return [
|
|
287
|
+
TimestampSchema,
|
|
288
|
+
...schemas ?? []
|
|
289
|
+
];
|
|
265
290
|
}
|
|
266
291
|
async divineHandler(payloads = []) {
|
|
267
292
|
const lastState = payloads.find(isModuleState);
|
|
268
293
|
if (!lastState)
|
|
269
|
-
return [
|
|
294
|
+
return [
|
|
295
|
+
{
|
|
296
|
+
schema: ModuleStateSchema,
|
|
297
|
+
state: {
|
|
298
|
+
offset: 0
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
];
|
|
270
302
|
const { offset } = lastState.state;
|
|
271
303
|
const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
|
|
272
304
|
if (!boundWitnessDiviner)
|
|
273
|
-
return [
|
|
274
|
-
|
|
275
|
-
|
|
305
|
+
return [
|
|
306
|
+
lastState
|
|
307
|
+
];
|
|
308
|
+
const query = await new PayloadBuilder3({
|
|
309
|
+
schema: BoundWitnessDivinerQuerySchema
|
|
310
|
+
}).fields({
|
|
311
|
+
limit: this.payloadDivinerLimit,
|
|
312
|
+
offset,
|
|
313
|
+
order,
|
|
314
|
+
payload_schemas: this.payload_schemas
|
|
315
|
+
}).build();
|
|
316
|
+
const batch = await boundWitnessDiviner.divine([
|
|
317
|
+
query
|
|
318
|
+
]);
|
|
276
319
|
if (batch.length === 0)
|
|
277
|
-
return [
|
|
320
|
+
return [
|
|
321
|
+
lastState
|
|
322
|
+
];
|
|
278
323
|
const sourceArchivist = await this.getArchivistForStore();
|
|
279
324
|
if (!sourceArchivist)
|
|
280
|
-
return [
|
|
325
|
+
return [
|
|
326
|
+
lastState
|
|
327
|
+
];
|
|
281
328
|
const indexCandidates = (await Promise.all(batch.filter(isBoundWitness2).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))).filter(exists2).flat();
|
|
282
|
-
const nextState = {
|
|
283
|
-
|
|
329
|
+
const nextState = {
|
|
330
|
+
schema: ModuleStateSchema,
|
|
331
|
+
state: {
|
|
332
|
+
...lastState.state,
|
|
333
|
+
offset: offset + batch.length
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
return [
|
|
337
|
+
nextState,
|
|
338
|
+
...indexCandidates
|
|
339
|
+
];
|
|
284
340
|
}
|
|
285
341
|
/**
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
342
|
+
* Retrieves the archivist for the payloadStore
|
|
343
|
+
* @returns The archivist for the payloadStore or undefined if not resolvable
|
|
344
|
+
*/
|
|
289
345
|
async getArchivistForStore() {
|
|
290
346
|
var _a, _b;
|
|
291
347
|
const name = assertEx2((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.archivist, () => `${moduleName2}: Config for payloadStore.archivist not specified`);
|
|
@@ -295,15 +351,12 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
|
|
|
295
351
|
return ArchivistWrapper.wrap(mod, this.account);
|
|
296
352
|
}
|
|
297
353
|
/**
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
354
|
+
* Retrieves the BoundWitness Diviner for the payloadStore
|
|
355
|
+
* @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable
|
|
356
|
+
*/
|
|
301
357
|
async getBoundWitnessDivinerForStore() {
|
|
302
358
|
var _a, _b;
|
|
303
|
-
const name = assertEx2(
|
|
304
|
-
(_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner,
|
|
305
|
-
() => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`
|
|
306
|
-
);
|
|
359
|
+
const name = assertEx2((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner, () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`);
|
|
307
360
|
const mod = await this.resolve(name);
|
|
308
361
|
if (!mod)
|
|
309
362
|
return void 0;
|
|
@@ -324,9 +377,22 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
|
|
|
324
377
|
if (filteredResults.includes(void 0))
|
|
325
378
|
return void 0;
|
|
326
379
|
const indexCandidates = filteredResults.filter(exists2);
|
|
327
|
-
return [
|
|
380
|
+
return [
|
|
381
|
+
bw,
|
|
382
|
+
...indexCandidates
|
|
383
|
+
];
|
|
328
384
|
}
|
|
329
385
|
};
|
|
386
|
+
__name(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "TemporalIndexingDivinerStateToIndexCandidateDiviner");
|
|
387
|
+
__publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "configSchema", TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema);
|
|
388
|
+
__publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "configSchemas", [
|
|
389
|
+
DivinerConfigSchema5,
|
|
390
|
+
TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema
|
|
391
|
+
]);
|
|
392
|
+
__publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "labels", {
|
|
393
|
+
"network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
|
|
394
|
+
});
|
|
395
|
+
var TemporalIndexingDivinerStateToIndexCandidateDiviner = _TemporalIndexingDivinerStateToIndexCandidateDiviner;
|
|
330
396
|
export {
|
|
331
397
|
TemporalIndexingDiviner,
|
|
332
398
|
TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner,
|
package/dist/node/index.js.map
CHANGED
|
@@ -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'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/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":["IndexingDiviner","IndexingDivinerConfigSchema","DivinerConfigSchema","TemporalIndexingDivinerConfigSchema","TemporalIndexingDiviner","IndexingDiviner","startHandler","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","AbstractDiviner","jsonPathToTransformersDictionary","reducePayloads","DivinerConfigSchema","PayloadDivinerQuerySchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadBuilder","isPayloadOfSchemaType","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","containsAll","assertEx","exists","AbstractDiviner","isBoundWitness","jsonPathToTransformersDictionary","DivinerConfigSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","TemporalIndexingDivinerResultIndexSchema","PayloadHasher","PayloadBuilder","intraBoundwitnessSchemaCombinations","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","AbstractDiviner","DivinerConfigSchema","isPayloadDivinerQueryPayload","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","assertEx","exists","AbstractDiviner","ArchivistWrapper","isBoundWitness","BoundWitnessDivinerQuerySchema","DivinerConfigSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","DivinerWrapper","isModuleState","ModuleStateSchema","PayloadBuilder","isPayloadOfSchemaType","TimestampSchema","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","indexes","findIndex","s","hashes","index","payload_hashes","results","get","indexCandidateIdentityFunctions","isPayloadOfSchemaType","filteredResults","is","includes","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels"]}
|