@x12i/memorix-service 3.9.2 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/analytics/content-allow.d.ts +17 -0
  2. package/dist/analytics/content-allow.d.ts.map +1 -0
  3. package/dist/analytics/content-allow.js +39 -0
  4. package/dist/analytics/content-allow.js.map +1 -0
  5. package/dist/analytics/definition.d.ts +179 -0
  6. package/dist/analytics/definition.d.ts.map +1 -0
  7. package/dist/analytics/definition.js +524 -0
  8. package/dist/analytics/definition.js.map +1 -0
  9. package/dist/analytics/engine.d.ts +63 -0
  10. package/dist/analytics/engine.d.ts.map +1 -0
  11. package/dist/analytics/engine.js +181 -0
  12. package/dist/analytics/engine.js.map +1 -0
  13. package/dist/analytics/host.d.ts +15 -0
  14. package/dist/analytics/host.d.ts.map +1 -0
  15. package/dist/analytics/host.js +143 -0
  16. package/dist/analytics/host.js.map +1 -0
  17. package/dist/analytics/index-store.d.ts +98 -0
  18. package/dist/analytics/index-store.d.ts.map +1 -0
  19. package/dist/analytics/index-store.js +295 -0
  20. package/dist/analytics/index-store.js.map +1 -0
  21. package/dist/analytics/materializer.d.ts +88 -0
  22. package/dist/analytics/materializer.d.ts.map +1 -0
  23. package/dist/analytics/materializer.js +364 -0
  24. package/dist/analytics/materializer.js.map +1 -0
  25. package/dist/analytics/pipeline-port.d.ts +10 -0
  26. package/dist/analytics/pipeline-port.d.ts.map +1 -0
  27. package/dist/analytics/pipeline-port.js +42 -0
  28. package/dist/analytics/pipeline-port.js.map +1 -0
  29. package/dist/analytics/projector.d.ts +60 -0
  30. package/dist/analytics/projector.d.ts.map +1 -0
  31. package/dist/analytics/projector.js +270 -0
  32. package/dist/analytics/projector.js.map +1 -0
  33. package/dist/analytics/property-index.d.ts +87 -0
  34. package/dist/analytics/property-index.d.ts.map +1 -0
  35. package/dist/analytics/property-index.js +537 -0
  36. package/dist/analytics/property-index.js.map +1 -0
  37. package/dist/analytics/state.d.ts +83 -0
  38. package/dist/analytics/state.d.ts.map +1 -0
  39. package/dist/analytics/state.js +273 -0
  40. package/dist/analytics/state.js.map +1 -0
  41. package/dist/analytics/tracker.d.ts +215 -0
  42. package/dist/analytics/tracker.d.ts.map +1 -0
  43. package/dist/analytics/tracker.js +1515 -0
  44. package/dist/analytics/tracker.js.map +1 -0
  45. package/dist/app.d.ts.map +1 -1
  46. package/dist/app.js +6 -0
  47. package/dist/app.js.map +1 -1
  48. package/dist/content-census-countex.d.ts +15 -0
  49. package/dist/content-census-countex.d.ts.map +1 -0
  50. package/dist/content-census-countex.js +18 -0
  51. package/dist/content-census-countex.js.map +1 -0
  52. package/dist/datasource-backfill.d.ts +2 -0
  53. package/dist/datasource-backfill.d.ts.map +1 -1
  54. package/dist/datasource-backfill.js +5 -1
  55. package/dist/datasource-backfill.js.map +1 -1
  56. package/dist/index.d.ts +4 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +3 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/openapi/openapi.json +955 -210
  61. package/dist/platform.d.ts +6 -0
  62. package/dist/platform.d.ts.map +1 -1
  63. package/dist/platform.js +69 -4
  64. package/dist/platform.js.map +1 -1
  65. package/dist/routes/analytics-counters.d.ts +8 -0
  66. package/dist/routes/analytics-counters.d.ts.map +1 -0
  67. package/dist/routes/analytics-counters.js +100 -0
  68. package/dist/routes/analytics-counters.js.map +1 -0
  69. package/dist/routes/analytics-indexes.d.ts +8 -0
  70. package/dist/routes/analytics-indexes.d.ts.map +1 -0
  71. package/dist/routes/analytics-indexes.js +80 -0
  72. package/dist/routes/analytics-indexes.js.map +1 -0
  73. package/dist/routes/data.d.ts.map +1 -1
  74. package/dist/routes/data.js +22 -0
  75. package/dist/routes/data.js.map +1 -1
  76. package/dist/routes/datasource-backfill.d.ts.map +1 -1
  77. package/dist/routes/datasource-backfill.js +8 -1
  78. package/dist/routes/datasource-backfill.js.map +1 -1
  79. package/openapi/openapi.json +955 -210
  80. package/package.json +5 -5
@@ -0,0 +1,295 @@
1
+ const RECORD_INDEX = "analytics_index_rows_record";
2
+ const LOOKUP_INDEX = "analytics_index_rows_lookup";
3
+ function sameValue(a, b) {
4
+ return JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
5
+ }
6
+ function matches(value, predicate) {
7
+ if (predicate.op === "exists") {
8
+ const present = value !== null && value !== undefined;
9
+ return predicate.value === true ? present : !present;
10
+ }
11
+ if (predicate.op === "in") {
12
+ return Array.isArray(predicate.value) && predicate.value.some((v) => sameValue(v, value));
13
+ }
14
+ return sameValue(value, predicate.value);
15
+ }
16
+ function rowId(indexId, generation, property, recordId) {
17
+ return `${indexId}#${generation}|${encodeURIComponent(property)}|${encodeURIComponent(recordId)}`;
18
+ }
19
+ export function createMemoryPropertyIndexStore() {
20
+ const indexes = new Map();
21
+ const rows = new Map();
22
+ const clone = (v) => structuredClone(v);
23
+ const select = (indexId, generation, property) => [...rows.values()]
24
+ .filter((r) => r.indexId === indexId && r.generation === generation && r.property === property)
25
+ .sort((a, b) => a.recordId.localeCompare(b.recordId));
26
+ return {
27
+ async listIndexes() {
28
+ return [...indexes.values()].map(clone);
29
+ },
30
+ async getIndex(id) {
31
+ const row = indexes.get(id);
32
+ return row ? clone(row) : null;
33
+ },
34
+ async saveIndex(record) {
35
+ indexes.set(record.id, clone(record));
36
+ },
37
+ async patchIndex(id, patch, generation) {
38
+ const row = indexes.get(id);
39
+ if (!row || (generation !== undefined && row.generation !== generation))
40
+ return false;
41
+ Object.assign(row, clone(patch));
42
+ return true;
43
+ },
44
+ async deleteIndex(id) {
45
+ indexes.delete(id);
46
+ for (const [key, row] of rows) {
47
+ if (row.indexId === id)
48
+ rows.delete(key);
49
+ }
50
+ },
51
+ async writeRecord(indexId, generation, recordId, values) {
52
+ const keep = new Set(Object.keys(values));
53
+ for (const [key, row] of rows) {
54
+ if (row.indexId === indexId && row.generation === generation && row.recordId === recordId && !keep.has(row.property)) {
55
+ rows.delete(key);
56
+ }
57
+ }
58
+ for (const [property, value] of Object.entries(values)) {
59
+ rows.set(rowId(indexId, generation, property, recordId), {
60
+ indexId,
61
+ generation,
62
+ property,
63
+ recordId,
64
+ value: value === undefined ? null : clone(value),
65
+ });
66
+ }
67
+ },
68
+ async deleteRecord(indexId, generation, recordId) {
69
+ for (const [key, row] of rows) {
70
+ if (row.indexId === indexId && row.generation === generation && row.recordId === recordId)
71
+ rows.delete(key);
72
+ }
73
+ },
74
+ async dropRows(indexId, belowGeneration) {
75
+ for (const [key, row] of rows) {
76
+ if (row.indexId !== indexId)
77
+ continue;
78
+ if (belowGeneration === undefined || row.generation < belowGeneration)
79
+ rows.delete(key);
80
+ }
81
+ },
82
+ async pageRecords({ indexId, generation, property, afterRecordId, limit }) {
83
+ const ids = select(indexId, generation, property)
84
+ .map((r) => r.recordId)
85
+ .filter((id) => !afterRecordId || id > afterRecordId);
86
+ return { recordIds: ids.slice(0, limit), hasMore: ids.length > limit };
87
+ },
88
+ async valuesFor(indexId, generation, recordIds) {
89
+ const wanted = new Set(recordIds);
90
+ const out = new Map();
91
+ for (const id of recordIds)
92
+ out.set(id, {});
93
+ for (const row of rows.values()) {
94
+ if (row.indexId !== indexId || row.generation !== generation || !wanted.has(row.recordId))
95
+ continue;
96
+ out.get(row.recordId)[row.property] = clone(row.value);
97
+ }
98
+ return out;
99
+ },
100
+ async matchRecords({ indexId, generation, property, predicate, afterRecordId, limit }) {
101
+ const ids = select(indexId, generation, property)
102
+ .filter((r) => matches(r.value, predicate) && (!afterRecordId || r.recordId > afterRecordId))
103
+ .map((r) => r.recordId);
104
+ return { recordIds: ids.slice(0, limit), hasMore: ids.length > limit };
105
+ },
106
+ async countRecords({ indexId, generation, property, predicate }) {
107
+ return select(indexId, generation, property).filter((r) => matches(r.value, predicate)).length;
108
+ },
109
+ async recordIdsFor({ indexId, generation, property, predicate }) {
110
+ return select(indexId, generation, property)
111
+ .filter((r) => matches(r.value, predicate))
112
+ .map((r) => r.recordId);
113
+ },
114
+ async explainMatch() {
115
+ return null;
116
+ },
117
+ };
118
+ }
119
+ function mongoPredicate(predicate) {
120
+ if (predicate.op === "exists") {
121
+ return predicate.value === true ? { value: { $ne: null } } : { value: null };
122
+ }
123
+ if (predicate.op === "in")
124
+ return { value: { $in: predicate.value } };
125
+ return { value: predicate.value ?? null };
126
+ }
127
+ function walkStages(node, out) {
128
+ if (!node || typeof node !== "object")
129
+ return;
130
+ const stage = node.stage;
131
+ if (typeof stage === "string")
132
+ out.push(stage);
133
+ const rec = node;
134
+ if (rec.inputStage)
135
+ walkStages(rec.inputStage, out);
136
+ for (const child of rec.inputStages ?? [])
137
+ walkStages(child, out);
138
+ if (rec.thenStage)
139
+ walkStages(rec.thenStage, out);
140
+ }
141
+ export function createMongoPropertyIndexStore(db) {
142
+ const indexesCol = db.collection("analytics_indexes");
143
+ const rowsCol = db.collection("analytics_index_rows");
144
+ let indexed = null;
145
+ const ensureIndexes = () => (indexed ??= Promise.all([
146
+ rowsCol.createIndex({ indexId: 1, generation: 1, property: 1, recordId: 1 }, { name: RECORD_INDEX, unique: true }),
147
+ rowsCol.createIndex({ indexId: 1, generation: 1, property: 1, value: 1, recordId: 1 }, { name: LOOKUP_INDEX }),
148
+ ]).then(() => undefined));
149
+ const strip = (doc) => {
150
+ const { _id, ...rest } = doc;
151
+ void _id;
152
+ return rest;
153
+ };
154
+ return {
155
+ async listIndexes() {
156
+ return (await indexesCol.find({}).toArray()).map((d) => strip(d));
157
+ },
158
+ async getIndex(id) {
159
+ const doc = await indexesCol.findOne({ _id: id });
160
+ return doc ? strip(doc) : null;
161
+ },
162
+ async saveIndex(record) {
163
+ await indexesCol.replaceOne({ _id: record.id }, record, { upsert: true });
164
+ },
165
+ async patchIndex(id, patch, generation) {
166
+ const { id: ignored, ...fields } = patch;
167
+ void ignored;
168
+ const res = await indexesCol.updateOne(generation === undefined ? { _id: id } : { _id: id, generation }, { $set: fields });
169
+ return res.matchedCount > 0;
170
+ },
171
+ async deleteIndex(id) {
172
+ await indexesCol.deleteOne({ _id: id });
173
+ await rowsCol.deleteMany({ indexId: id });
174
+ },
175
+ async writeRecord(indexId, generation, recordId, values) {
176
+ await ensureIndexes();
177
+ const properties = Object.keys(values);
178
+ await rowsCol.deleteMany({
179
+ indexId,
180
+ generation,
181
+ recordId,
182
+ ...(properties.length ? { property: { $nin: properties } } : {}),
183
+ });
184
+ if (properties.length === 0)
185
+ return;
186
+ await rowsCol.bulkWrite(properties.map((property) => ({
187
+ updateOne: {
188
+ filter: { _id: rowId(indexId, generation, property, recordId) },
189
+ update: {
190
+ $set: {
191
+ indexId,
192
+ generation,
193
+ property,
194
+ recordId,
195
+ value: values[property] === undefined ? null : values[property],
196
+ },
197
+ },
198
+ upsert: true,
199
+ },
200
+ })), { ordered: false });
201
+ },
202
+ async deleteRecord(indexId, generation, recordId) {
203
+ await rowsCol.deleteMany({ indexId, generation, recordId });
204
+ },
205
+ async dropRows(indexId, belowGeneration) {
206
+ await rowsCol.deleteMany(belowGeneration === undefined ? { indexId } : { indexId, generation: { $lt: belowGeneration } });
207
+ },
208
+ async pageRecords({ indexId, generation, property, afterRecordId, limit }) {
209
+ await ensureIndexes();
210
+ const filter = { indexId, generation, property };
211
+ if (afterRecordId)
212
+ filter.recordId = { $gt: afterRecordId };
213
+ const docs = await rowsCol
214
+ .find(filter)
215
+ .hint(RECORD_INDEX)
216
+ .sort({ recordId: 1 })
217
+ .limit(limit + 1)
218
+ .project({ recordId: 1 })
219
+ .toArray();
220
+ return { recordIds: docs.slice(0, limit).map((d) => d.recordId), hasMore: docs.length > limit };
221
+ },
222
+ async valuesFor(indexId, generation, recordIds) {
223
+ const out = new Map();
224
+ for (const id of recordIds)
225
+ out.set(id, {});
226
+ if (recordIds.length === 0)
227
+ return out;
228
+ const docs = await rowsCol.find({ indexId, generation, recordId: { $in: recordIds } }).toArray();
229
+ for (const doc of docs) {
230
+ const bag = out.get(doc.recordId);
231
+ if (bag)
232
+ bag[doc.property] = doc.value;
233
+ }
234
+ return out;
235
+ },
236
+ async matchRecords({ indexId, generation, property, predicate, afterRecordId, limit }) {
237
+ await ensureIndexes();
238
+ const filter = { indexId, generation, property, ...mongoPredicate(predicate) };
239
+ if (afterRecordId)
240
+ filter.recordId = { $gt: afterRecordId };
241
+ const docs = await rowsCol
242
+ .find(filter)
243
+ .hint(LOOKUP_INDEX)
244
+ .sort({ recordId: 1 })
245
+ .limit(limit + 1)
246
+ .project({ recordId: 1 })
247
+ .toArray();
248
+ return { recordIds: docs.slice(0, limit).map((d) => d.recordId), hasMore: docs.length > limit };
249
+ },
250
+ async countRecords({ indexId, generation, property, predicate }) {
251
+ await ensureIndexes();
252
+ return rowsCol.countDocuments({ indexId, generation, property, ...mongoPredicate(predicate) }, { hint: LOOKUP_INDEX });
253
+ },
254
+ async recordIdsFor({ indexId, generation, property, predicate }) {
255
+ await ensureIndexes();
256
+ const docs = await rowsCol
257
+ .find({ indexId, generation, property, ...mongoPredicate(predicate) })
258
+ .hint(LOOKUP_INDEX)
259
+ .sort({ recordId: 1 })
260
+ .project({ recordId: 1 })
261
+ .toArray();
262
+ return docs.map((d) => d.recordId);
263
+ },
264
+ async explainMatch({ indexId, generation, property, predicate }) {
265
+ await ensureIndexes();
266
+ const filter = { indexId, generation, property, ...mongoPredicate(predicate) };
267
+ const explained = (await rowsCol
268
+ .find(filter)
269
+ .hint(LOOKUP_INDEX)
270
+ .sort({ recordId: 1 })
271
+ .explain("executionStats"));
272
+ const stages = [];
273
+ walkStages(explained.executionStats?.executionStages, stages);
274
+ const totalRows = await rowsCol.countDocuments({ indexId, generation, property });
275
+ return {
276
+ stages,
277
+ docsExamined: explained.executionStats?.totalDocsExamined ?? 0,
278
+ nReturned: explained.executionStats?.nReturned ?? 0,
279
+ totalRows,
280
+ };
281
+ },
282
+ };
283
+ }
284
+ export function mongoPropertyIndexFactory(dbFor) {
285
+ const cache = new Map();
286
+ return (orgId) => {
287
+ let store = cache.get(orgId);
288
+ if (!store) {
289
+ store = createMongoPropertyIndexStore(dbFor(orgId));
290
+ cache.set(orgId, store);
291
+ }
292
+ return store;
293
+ };
294
+ }
295
+ //# sourceMappingURL=index-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-store.js","sourceRoot":"","sources":["../../src/analytics/index-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Pure shaping: Countex cells of one covering pair → the materialized analytics body.
3
+ * No storage access; the tracker supplies cells, windows, daily series, and leader rows.
4
+ */
5
+ import { type CounterDefinition } from "./definition.js";
6
+ import type { AnalyticsCell } from "./engine.js";
7
+ export type Metric = {
8
+ value: number | null;
9
+ produced: boolean;
10
+ };
11
+ export type Delta = {
12
+ current: number;
13
+ previous: number;
14
+ change: number;
15
+ produced: boolean;
16
+ };
17
+ export type TrendPoint = {
18
+ at: string;
19
+ scope?: Record<string, string>;
20
+ value: number;
21
+ };
22
+ export type Trend = {
23
+ key: string;
24
+ label: string;
25
+ window: "snapshots" | "7d" | "30d";
26
+ points: TrendPoint[];
27
+ };
28
+ export type LeaderRow = Record<string, unknown>;
29
+ export type GroupBlock = {
30
+ produced: boolean;
31
+ subject: string;
32
+ buckets: Record<string, Record<string, unknown>>;
33
+ };
34
+ export type PairSummary = {
35
+ measures: Record<string, Metric>;
36
+ groups: Record<string, Record<string, Metric> | GroupBlock>;
37
+ ratios: Record<string, Metric>;
38
+ derived: Record<string, Metric>;
39
+ splits: Record<string, Record<string, Record<string, Metric>>>;
40
+ unwinds: Record<string, Array<Record<string, unknown>>>;
41
+ coverage: Array<{
42
+ stepId: string;
43
+ present: number;
44
+ expected: number;
45
+ produced: boolean;
46
+ }>;
47
+ transitions: Record<string, Array<{
48
+ from: unknown;
49
+ to: unknown;
50
+ count: number;
51
+ }>>;
52
+ presence: Record<string, number>;
53
+ };
54
+ /** Ids ranked by how many counted subjects reference them (ties by id). */
55
+ export declare function topLeaderIds(cells: AnalyticsCell[], leaderKey: string, limit: number): Array<{
56
+ id: string;
57
+ count: number;
58
+ }>;
59
+ export declare function summarizePair(def: CounterDefinition, cells: AnalyticsCell[], opts: {
60
+ live: boolean;
61
+ organizationWide: boolean;
62
+ }): PairSummary;
63
+ export declare function scopeValuesOf(def: CounterDefinition, pair: [string, string] | null): Record<string, string>;
64
+ export declare function hasScopePlaceholder(def: CounterDefinition, template: string): boolean;
65
+ export declare function resolveRecordIds(def: CounterDefinition, pair: [string, string] | null): {
66
+ current: string;
67
+ history: string | null;
68
+ };
69
+ export type EnvelopeInput = {
70
+ definition: CounterDefinition;
71
+ counter: {
72
+ id: string;
73
+ generation: number;
74
+ status: string;
75
+ hash: string;
76
+ origin: string;
77
+ };
78
+ generatedAt: string;
79
+ pair: [string, string] | null;
80
+ current: PairSummary;
81
+ previous: PairSummary | null;
82
+ /** Per window, the count of each metric whose event time falls inside it. */
83
+ windows: Partial<Record<"24h" | "7d" | "30d", Map<string, number>>>;
84
+ trends: Trend[];
85
+ leaders: Record<string, LeaderRow[]>;
86
+ };
87
+ export declare function buildEnvelope(input: EnvelopeInput): Record<string, unknown>;
88
+ //# sourceMappingURL=materializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materializer.d.ts","sourceRoot":"","sources":["../../src/analytics/materializer.ts"],"names":[],"mappings":"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"}