@x12i/analytix 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,24 @@
1
+ import type { AnalytixRunResult } from "@x12i/analytix-contracts";
2
+ import type { ExecutionRecord } from "./runtime-store.js";
3
+ export type ExplainNode = {
4
+ analyticId: string;
5
+ analyticType?: string;
6
+ dependsOn: string[];
7
+ cache?: AnalytixRunResult["meta"]["cache"];
8
+ probes?: AnalytixRunResult["meta"]["probes"];
9
+ execution?: Pick<ExecutionRecord, "durationMs" | "cacheHit">;
10
+ };
11
+ export type ExplainGraph = {
12
+ nodes: ExplainNode[];
13
+ edges: Array<{
14
+ from: string;
15
+ to: string;
16
+ }>;
17
+ };
18
+ export declare function buildExplainGraph(rootId: string, resolveDependencies: (analyticId: string) => string[], resolveMeta: (analyticId: string) => {
19
+ analyticType?: string;
20
+ cache?: AnalytixRunResult["meta"]["cache"];
21
+ probes?: AnalytixRunResult["meta"]["probes"];
22
+ execution?: Pick<ExecutionRecord, "durationMs" | "cacheHit">;
23
+ }): ExplainGraph;
24
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../src/explain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,EAAE,EACrD,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;CAC9D,GACA,YAAY,CA6Bd"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildExplainGraph = buildExplainGraph;
4
+ function buildExplainGraph(rootId, resolveDependencies, resolveMeta) {
5
+ const visited = new Set();
6
+ const nodes = [];
7
+ const edges = [];
8
+ const walk = (analyticId) => {
9
+ if (visited.has(analyticId))
10
+ return;
11
+ visited.add(analyticId);
12
+ const dependsOn = resolveDependencies(analyticId);
13
+ const meta = resolveMeta(analyticId);
14
+ nodes.push({
15
+ analyticId,
16
+ analyticType: meta.analyticType,
17
+ dependsOn,
18
+ cache: meta.cache,
19
+ probes: meta.probes,
20
+ execution: meta.execution,
21
+ });
22
+ for (const dep of dependsOn) {
23
+ edges.push({ from: dep, to: analyticId });
24
+ walk(dep);
25
+ }
26
+ };
27
+ walk(rootId);
28
+ return { nodes, edges };
29
+ }
30
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../src/explain.ts"],"names":[],"mappings":";;AAiBA,8CAsCC;AAtCD,SAAgB,iBAAiB,CAC/B,MAAc,EACd,mBAAqD,EACrD,WAKC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAwC,EAAE,CAAC;IAEtD,MAAM,IAAI,GAAG,CAAC,UAAkB,EAAE,EAAE;QAClC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,OAAO;QACpC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAExB,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAErC,KAAK,CAAC,IAAI,CAAC;YACT,UAAU;YACV,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { AnalytixRunResult, AnalyticType } from "@x12i/analytix-contracts";
2
+ import { createTraceId } from "./trace.js";
3
+ import { isMockMode, mockLog, setMockMode } from "./mock-log.js";
4
+ import { RuntimeStore, ExecutionRecord } from "./runtime-store.js";
5
+ import { ExplainGraph } from "./explain.js";
6
+ import { loadAnalytixEnv } from "./load-env.js";
7
+ export interface ExecutionOptions {
8
+ bypassCache?: boolean;
9
+ explain?: boolean;
10
+ playgroundAdmin?: boolean;
11
+ traceId?: string;
12
+ }
13
+ export interface AnalytixCoreOptions {
14
+ mockMode?: boolean;
15
+ runtimeStore?: RuntimeStore;
16
+ }
17
+ export type ResolvedDefinition = {
18
+ def: any;
19
+ type: AnalyticType;
20
+ id: string;
21
+ };
22
+ export { createTraceId, setMockMode, isMockMode, mockLog, loadAnalytixEnv };
23
+ export type { RuntimeStore, ExecutionRecord, ExplainGraph };
24
+ export { buildExplainGraph } from "./explain.js";
25
+ export { InMemoryRuntimeStore } from "./runtime-store.js";
26
+ export declare class AnalytixCore {
27
+ private runtimeStore;
28
+ private sourceDbs;
29
+ private lastRunMeta;
30
+ constructor(options?: AnalytixCoreOptions);
31
+ static create(options?: AnalytixCoreOptions): Promise<AnalytixCore>;
32
+ private isMongoStore;
33
+ private hydrateCacheKey;
34
+ private hydrateTierKey;
35
+ getRuntimeStore(): RuntimeStore;
36
+ setMockSourceData(collection: string, data: any[]): void;
37
+ getMockSourceData(collection: string): any[];
38
+ static interpolatePipeline(pipeline: any[], params: Record<string, any>): any[];
39
+ static computeCacheKey(type: AnalyticType, id: string, version: number, params: Record<string, any>, extra?: string[]): string;
40
+ static tierParamsKey(params: Record<string, any>): string;
41
+ resolveDefinition(id: string, pinnedVersion?: number): Promise<ResolvedDefinition | null>;
42
+ extractDependencies(def: any, type: AnalyticType): string[];
43
+ run(ref: string, params?: Record<string, any>, options?: ExecutionOptions): Promise<AnalytixRunResult>;
44
+ runTier(tierId: string, params: Record<string, any>, options?: ExecutionOptions): Promise<Record<string, unknown>>;
45
+ explain(ref: string, _params?: Record<string, any>): Promise<ExplainGraph & {
46
+ analyticId: string;
47
+ traceId: string;
48
+ }>;
49
+ private buildJsContext;
50
+ private recordExecution;
51
+ private rememberMeta;
52
+ private mockMongoAggregate;
53
+ }
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,484 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.AnalytixCore = exports.InMemoryRuntimeStore = exports.buildExplainGraph = exports.loadAnalytixEnv = exports.mockLog = exports.isMockMode = exports.setMockMode = exports.createTraceId = void 0;
37
+ const crypto = __importStar(require("node:crypto"));
38
+ const analytix_catalox_1 = require("@x12i/analytix-catalox");
39
+ const analytix_functions_1 = require("@x12i/analytix-functions");
40
+ const analytix_matrix_1 = require("@x12i/analytix-matrix");
41
+ const analytix_tiers_1 = require("@x12i/analytix-tiers");
42
+ const analytix_contracts_1 = require("@x12i/analytix-contracts");
43
+ const trace_js_1 = require("./trace.js");
44
+ Object.defineProperty(exports, "createTraceId", { enumerable: true, get: function () { return trace_js_1.createTraceId; } });
45
+ const mock_log_js_1 = require("./mock-log.js");
46
+ Object.defineProperty(exports, "isMockMode", { enumerable: true, get: function () { return mock_log_js_1.isMockMode; } });
47
+ Object.defineProperty(exports, "mockLog", { enumerable: true, get: function () { return mock_log_js_1.mockLog; } });
48
+ Object.defineProperty(exports, "setMockMode", { enumerable: true, get: function () { return mock_log_js_1.setMockMode; } });
49
+ const runtime_store_js_1 = require("./runtime-store.js");
50
+ const mongo_runtime_store_js_1 = require("./mongo-runtime-store.js");
51
+ const load_env_js_1 = require("./load-env.js");
52
+ Object.defineProperty(exports, "loadAnalytixEnv", { enumerable: true, get: function () { return load_env_js_1.loadAnalytixEnv; } });
53
+ var explain_js_1 = require("./explain.js");
54
+ Object.defineProperty(exports, "buildExplainGraph", { enumerable: true, get: function () { return explain_js_1.buildExplainGraph; } });
55
+ var runtime_store_js_2 = require("./runtime-store.js");
56
+ Object.defineProperty(exports, "InMemoryRuntimeStore", { enumerable: true, get: function () { return runtime_store_js_2.InMemoryRuntimeStore; } });
57
+ class AnalytixCore {
58
+ runtimeStore;
59
+ sourceDbs = new Map();
60
+ lastRunMeta = new Map();
61
+ constructor(options = {}) {
62
+ (0, load_env_js_1.loadAnalytixEnv)();
63
+ if (options.mockMode !== undefined) {
64
+ (0, mock_log_js_1.setMockMode)(options.mockMode);
65
+ }
66
+ else {
67
+ (0, mock_log_js_1.setMockMode)(process.env.ANALYTIX_API_MODE === "mock");
68
+ }
69
+ this.runtimeStore = options.runtimeStore ?? new runtime_store_js_1.InMemoryRuntimeStore();
70
+ if ((0, mock_log_js_1.isMockMode)()) {
71
+ (0, mock_log_js_1.mockLog)("core", "AnalytixCore running in mock mode — in-memory runtime store, simulated external services");
72
+ }
73
+ }
74
+ static async create(options = {}) {
75
+ const { createRuntimeStoreFromEnv } = await import("./mongo-runtime-store.js");
76
+ (0, load_env_js_1.loadAnalytixEnv)();
77
+ const mockMode = options.mockMode ?? process.env.ANALYTIX_API_MODE === "mock";
78
+ const runtimeStore = options.runtimeStore ?? (await createRuntimeStoreFromEnv());
79
+ return new AnalytixCore({ ...options, mockMode, runtimeStore });
80
+ }
81
+ isMongoStore() {
82
+ return this.runtimeStore instanceof mongo_runtime_store_js_1.MongoBackedRuntimeStore;
83
+ }
84
+ async hydrateCacheKey(cacheKey) {
85
+ if (this.runtimeStore instanceof mongo_runtime_store_js_1.MongoBackedRuntimeStore) {
86
+ await this.runtimeStore.hydrateCache(cacheKey);
87
+ }
88
+ }
89
+ async hydrateTierKey(tierId, paramsKey) {
90
+ if (this.runtimeStore instanceof mongo_runtime_store_js_1.MongoBackedRuntimeStore) {
91
+ await this.runtimeStore.hydrateTier(tierId, paramsKey);
92
+ }
93
+ }
94
+ getRuntimeStore() {
95
+ return this.runtimeStore;
96
+ }
97
+ setMockSourceData(collection, data) {
98
+ this.sourceDbs.set(collection, data);
99
+ (0, mock_log_js_1.mockLog)("source-db", "loaded mock source collection", { collection, rows: data.length });
100
+ }
101
+ getMockSourceData(collection) {
102
+ return this.sourceDbs.get(collection) || [];
103
+ }
104
+ static interpolatePipeline(pipeline, params) {
105
+ const interpolateValue = (val) => {
106
+ if (typeof val === "string") {
107
+ const matches = val.match(/\{\{param\.(\w+)(?:\|(\w+))?\}\}/);
108
+ if (matches) {
109
+ const paramName = matches[1];
110
+ const type = matches[2];
111
+ const rawVal = params[paramName];
112
+ if (rawVal === undefined)
113
+ return val;
114
+ if (type === "number")
115
+ return Number(rawVal);
116
+ if (type === "boolean")
117
+ return rawVal === "true" || rawVal === true;
118
+ return rawVal;
119
+ }
120
+ }
121
+ else if (Array.isArray(val)) {
122
+ return val.map(interpolateValue);
123
+ }
124
+ else if (typeof val === "object" && val !== null) {
125
+ const res = {};
126
+ for (const [k, v] of Object.entries(val)) {
127
+ res[k] = interpolateValue(v);
128
+ }
129
+ return res;
130
+ }
131
+ return val;
132
+ };
133
+ return pipeline.map(interpolateValue);
134
+ }
135
+ static computeCacheKey(type, id, version, params, extra = []) {
136
+ const sortParams = (p) => {
137
+ const keys = Object.keys(p).sort();
138
+ return JSON.stringify(keys.map((k) => [k, typeof p[k] === "object" && p[k] !== null ? sortParams(p[k]) : p[k]]));
139
+ };
140
+ const hash = crypto.createHash("sha256");
141
+ hash.update(`${type}:${id}:${version}:${sortParams(params)}:${extra.join(":")}`);
142
+ return hash.digest("hex");
143
+ }
144
+ static tierParamsKey(params) {
145
+ return AnalytixCore.computeCacheKey("query", "tier-params", 0, params);
146
+ }
147
+ async resolveDefinition(id, pinnedVersion) {
148
+ const queryDef = await analytix_catalox_1.registry.get("analytix_queries", id, pinnedVersion);
149
+ if (queryDef)
150
+ return { def: queryDef, type: "query", id };
151
+ const functionDef = await analytix_catalox_1.registry.get("analytix_functions", id, pinnedVersion);
152
+ if (functionDef) {
153
+ const execType = functionDef.execution?.type;
154
+ return {
155
+ def: functionDef,
156
+ type: execType === "funcx" ? "funcxFunction" : "jsFunction",
157
+ id,
158
+ };
159
+ }
160
+ const matrixDef = await analytix_catalox_1.registry.get("analytix_matrixes", id, pinnedVersion);
161
+ if (matrixDef)
162
+ return { def: matrixDef, type: "matrix", id };
163
+ const tierDef = await analytix_catalox_1.registry.get("analytix_tiers", id, pinnedVersion);
164
+ if (tierDef)
165
+ return { def: tierDef, type: "composite", id };
166
+ return null;
167
+ }
168
+ extractDependencies(def, type) {
169
+ const deps = [];
170
+ if (type === "jsFunction" || type === "funcxFunction") {
171
+ deps.push(...(def.input?.analyticRefs || def.input?.fromAnalyticRefs || []));
172
+ }
173
+ if ((type === "query" || type === "matrix") && def.tierRef) {
174
+ deps.push(def.tierRef);
175
+ }
176
+ return deps.map((dep) => (0, analytix_contracts_1.parseAnalyticRef)(dep).id);
177
+ }
178
+ async run(ref, params = {}, options = {}) {
179
+ const { id, version: pinnedVersion } = (0, analytix_contracts_1.parseAnalyticRef)(ref);
180
+ const traceId = options.traceId ?? (0, trace_js_1.createTraceId)();
181
+ const resolved = await this.resolveDefinition(id, pinnedVersion);
182
+ if (!resolved)
183
+ throw new Error("ANALYTIC_NOT_FOUND");
184
+ const { def, type } = resolved;
185
+ if (def.status === "archived")
186
+ throw new Error("ANALYTIC_ARCHIVED");
187
+ if (def.status === "draft" && !options.playgroundAdmin)
188
+ throw new Error("ANALYTIC_NOT_ACTIVE");
189
+ if (def.tierRef && (type === "query" || type === "matrix")) {
190
+ await this.runTier(def.tierRef, params, { ...options, traceId });
191
+ }
192
+ const fingerprintExtra = def.code?.fingerprint || def.execution?.funcxFunctionId || "";
193
+ const cacheKey = AnalytixCore.computeCacheKey(type, id, def.version, params, [fingerprintExtra]);
194
+ if (!options.bypassCache && def.cacheRef) {
195
+ await this.hydrateCacheKey(cacheKey);
196
+ const cached = this.runtimeStore.getCache(cacheKey);
197
+ if (cached) {
198
+ let changed = false;
199
+ if (def.probeRef) {
200
+ const probe = await analytix_catalox_1.registry.get("analytix_probe_profiles", def.probeRef);
201
+ if (probe && probe.strategy === "none")
202
+ changed = true;
203
+ }
204
+ if (!changed) {
205
+ this.recordExecution({
206
+ analyticId: id,
207
+ analyticType: type,
208
+ traceId,
209
+ cacheKey,
210
+ cacheHit: true,
211
+ startedAt: new Date().toISOString(),
212
+ finishedAt: new Date().toISOString(),
213
+ durationMs: 0,
214
+ });
215
+ const hitResult = {
216
+ ...cached,
217
+ meta: {
218
+ ...cached.meta,
219
+ cache: { hit: true, key: cacheKey, reason: "fresh" },
220
+ execution: { ...cached.meta.execution, traceId },
221
+ },
222
+ };
223
+ this.rememberMeta(id, hitResult);
224
+ return hitResult;
225
+ }
226
+ }
227
+ }
228
+ const startedAt = new Date().toISOString();
229
+ let data = null;
230
+ let funcxTrace = undefined;
231
+ let tierMeta;
232
+ if (type === "query") {
233
+ const collection = def.aggregate.collection;
234
+ const pipeline = AnalytixCore.interpolatePipeline(def.aggregate.pipeline, params);
235
+ data = await this.mockMongoAggregate(collection, pipeline);
236
+ if ((0, mock_log_js_1.isMockMode)() && def.target === "source") {
237
+ (0, mock_log_js_1.mockLog)("source-db", "query executed against in-memory mock source (real Mongo bypass — mock mode only)", {
238
+ analyticId: id,
239
+ collection,
240
+ });
241
+ }
242
+ }
243
+ else if (type === "jsFunction") {
244
+ data = await analytix_functions_1.AnalytixFunctionRunner.runJs(def, this.buildJsContext(params, options, traceId), [], (0, mock_log_js_1.isMockMode)());
245
+ }
246
+ else if (type === "funcxFunction") {
247
+ const res = await analytix_functions_1.AnalytixFunctionRunner.runFuncx(def, { traceId }, params, (0, mock_log_js_1.isMockMode)());
248
+ data = res.output;
249
+ funcxTrace = res.trace;
250
+ }
251
+ else if (type === "matrix") {
252
+ const records = this.getMockSourceData(def.sourceRef || "events");
253
+ data = analytix_matrix_1.MatrixExecutor.run(def, records);
254
+ }
255
+ else if (type === "composite" && def.levels) {
256
+ const tierResult = await this.runTier(def.tierId || id, params, { ...options, traceId });
257
+ data = tierResult;
258
+ tierMeta = {
259
+ tierId: def.tierId || id,
260
+ level: def.levels.length,
261
+ usedMaterializedInputs: Object.keys(tierResult),
262
+ };
263
+ }
264
+ const finishedAt = new Date().toISOString();
265
+ const durationMs = new Date(finishedAt).getTime() - new Date(startedAt).getTime();
266
+ const runResult = {
267
+ analyticId: id,
268
+ analyticType: type,
269
+ version: def.version,
270
+ status: def.status,
271
+ data,
272
+ meta: {
273
+ cache: { hit: false, key: cacheKey, reason: "miss" },
274
+ probes: def.probeRef ? [{ profileId: def.probeRef, ran: true, changed: false }] : [],
275
+ tier: tierMeta,
276
+ execution: { durationMs, startedAt, finishedAt, traceId },
277
+ funcx: funcxTrace,
278
+ },
279
+ };
280
+ if (def.cacheRef) {
281
+ this.runtimeStore.setCache(cacheKey, runResult);
282
+ }
283
+ this.recordExecution({
284
+ analyticId: id,
285
+ analyticType: type,
286
+ traceId,
287
+ cacheKey,
288
+ cacheHit: false,
289
+ startedAt,
290
+ finishedAt,
291
+ durationMs,
292
+ });
293
+ this.rememberMeta(id, runResult);
294
+ return runResult;
295
+ }
296
+ async runTier(tierId, params, options = {}) {
297
+ const tierDef = await analytix_catalox_1.registry.get("analytix_tiers", tierId);
298
+ if (!tierDef)
299
+ throw new Error("TIER_NOT_FOUND");
300
+ const paramsKey = AnalytixCore.tierParamsKey(params);
301
+ await this.hydrateTierKey(tierId, paramsKey);
302
+ const cached = this.runtimeStore.getTierOutput(tierId, paramsKey);
303
+ if (cached && typeof cached === "object" && cached !== null && !options.bypassCache) {
304
+ (0, mock_log_js_1.mockLog)("tiers", "reusing materialized tier outputs from in-memory store", { tierId });
305
+ return cached;
306
+ }
307
+ const allAnalytics = tierDef.levels.flatMap((level) => level.analytics.map((ref) => (0, analytix_contracts_1.parseAnalyticRef)(ref).id));
308
+ const depMap = new Map();
309
+ for (const analyticId of allAnalytics) {
310
+ const resolved = await this.resolveDefinition(analyticId);
311
+ if (resolved) {
312
+ depMap.set(analyticId, this.extractDependencies(resolved.def, resolved.type));
313
+ }
314
+ }
315
+ const order = analytix_tiers_1.TierEngine.compileTierDag(tierDef, (analyticId) => depMap.get(analyticId) || []);
316
+ const materializationStore = new Map();
317
+ const outputs = await analytix_tiers_1.TierEngine.executeTier(tierDef, order, async (analyticId) => {
318
+ const result = await this.run(analyticId, params, { ...options, traceId: options.traceId ?? (0, trace_js_1.createTraceId)() });
319
+ return result.data;
320
+ }, materializationStore);
321
+ for (const [analyticId, output] of Object.entries(outputs)) {
322
+ this.runtimeStore.setTierOutput(tierId, paramsKey, analyticId, output);
323
+ }
324
+ return outputs;
325
+ }
326
+ async explain(ref, _params = {}) {
327
+ const { id } = (0, analytix_contracts_1.parseAnalyticRef)(ref);
328
+ const traceId = (0, trace_js_1.createTraceId)("exp");
329
+ const enrichedNodes = [];
330
+ const edges = [];
331
+ const visited = new Set();
332
+ const walk = async (analyticId) => {
333
+ if (visited.has(analyticId))
334
+ return;
335
+ visited.add(analyticId);
336
+ const resolved = await this.resolveDefinition(analyticId);
337
+ const dependsOn = resolved ? this.extractDependencies(resolved.def, resolved.type) : [];
338
+ const meta = this.lastRunMeta.get(analyticId);
339
+ enrichedNodes.push({
340
+ analyticId,
341
+ analyticType: resolved?.type,
342
+ dependsOn,
343
+ cache: meta?.cache,
344
+ probes: meta?.probes,
345
+ execution: meta?.execution,
346
+ });
347
+ for (const dep of dependsOn) {
348
+ edges.push({ from: dep, to: analyticId });
349
+ await walk(dep);
350
+ }
351
+ };
352
+ await walk(id);
353
+ return { analyticId: id, traceId, nodes: enrichedNodes, edges };
354
+ }
355
+ buildJsContext(params, options, traceId) {
356
+ return {
357
+ params,
358
+ input: null,
359
+ analytix: {
360
+ run: async (nestedRef, nestedParams) => this.run(nestedRef, nestedParams, { ...options, traceId }),
361
+ getCachedResult: async (nestedRef, nestedParams) => {
362
+ const { id, version } = (0, analytix_contracts_1.parseAnalyticRef)(nestedRef);
363
+ const resolved = await this.resolveDefinition(id, version);
364
+ if (!resolved)
365
+ return null;
366
+ const key = AnalytixCore.computeCacheKey(resolved.type, id, resolved.def.version, nestedParams || {}, [resolved.def.code?.fingerprint || ""]);
367
+ await this.hydrateCacheKey(key);
368
+ return this.runtimeStore.getCache(key);
369
+ },
370
+ getTierOutput: async (tierId, tierParams) => {
371
+ const paramsKey = AnalytixCore.tierParamsKey(tierParams || {});
372
+ return this.runtimeStore.getTierOutput(tierId, paramsKey);
373
+ },
374
+ getTrend: async () => {
375
+ (0, mock_log_js_1.mockLog)("trends", "getTrend returns empty — trend snapshots not implemented (mock mode stub)");
376
+ return [];
377
+ },
378
+ runMatrix: async (matrixId, matrixParams) => {
379
+ const result = await this.run(matrixId, matrixParams, { traceId });
380
+ return result.data;
381
+ },
382
+ },
383
+ logger: {
384
+ info: (_m) => { },
385
+ warn: (_m) => { },
386
+ error: (_m) => { },
387
+ },
388
+ utils: {
389
+ hash: (val) => crypto.createHash("sha256").update(JSON.stringify(val)).digest("hex"),
390
+ now: () => new Date().toISOString(),
391
+ },
392
+ };
393
+ }
394
+ recordExecution(record) {
395
+ this.runtimeStore.addExecution(record);
396
+ }
397
+ rememberMeta(analyticId, result) {
398
+ this.lastRunMeta.set(analyticId, {
399
+ cache: result.meta.cache,
400
+ probes: result.meta.probes,
401
+ execution: { durationMs: result.meta.execution.durationMs, cacheHit: result.meta.cache.hit },
402
+ });
403
+ }
404
+ async mockMongoAggregate(collectionName, pipeline) {
405
+ let records = this.getMockSourceData(collectionName);
406
+ for (const stage of pipeline) {
407
+ if (stage.$match) {
408
+ records = records.filter((r) => {
409
+ for (const [key, filterVal] of Object.entries(stage.$match)) {
410
+ const val = r[key];
411
+ if (filterVal && typeof filterVal === "object" && filterVal !== null && "$in" in filterVal) {
412
+ const inList = filterVal.$in;
413
+ if (!inList.includes(val))
414
+ return false;
415
+ }
416
+ else if (filterVal && typeof filterVal === "object" && filterVal !== null && "$gte" in filterVal) {
417
+ const range = filterVal;
418
+ if (String(val) < String(range.$gte) || (range.$lte !== undefined && String(val) > String(range.$lte)))
419
+ return false;
420
+ }
421
+ else {
422
+ if (val !== filterVal)
423
+ return false;
424
+ }
425
+ }
426
+ return true;
427
+ });
428
+ }
429
+ else if (stage.$group) {
430
+ const idExpr = stage.$group._id;
431
+ const groups = new Map();
432
+ for (const r of records) {
433
+ let groupKey = "";
434
+ if (typeof idExpr === "string" && idExpr.startsWith("$")) {
435
+ const field = idExpr.substring(1);
436
+ if (field.includes(".")) {
437
+ const parts = field.split(".");
438
+ groupKey = r[parts[0]]?.[parts[1]] || "";
439
+ }
440
+ else {
441
+ groupKey = r[field] || "";
442
+ }
443
+ }
444
+ if (!groups.has(groupKey))
445
+ groups.set(groupKey, []);
446
+ groups.get(groupKey).push(r);
447
+ }
448
+ const groupedResult = [];
449
+ for (const [key, items] of groups.entries()) {
450
+ const resObj = { _id: key };
451
+ for (const [aggKey, aggExpr] of Object.entries(stage.$group)) {
452
+ if (aggKey === "_id")
453
+ continue;
454
+ if (aggExpr && typeof aggExpr === "object" && "$sum" in aggExpr) {
455
+ resObj[aggKey] = items.length;
456
+ }
457
+ }
458
+ groupedResult.push(resObj);
459
+ }
460
+ records = groupedResult;
461
+ }
462
+ else if (stage.$project) {
463
+ records = records.map((r) => {
464
+ const res = {};
465
+ for (const [projKey, projVal] of Object.entries(stage.$project)) {
466
+ if (projKey === "_id" && projVal === 0)
467
+ continue;
468
+ if (typeof projVal === "string" && projVal.startsWith("$")) {
469
+ const field = projVal.substring(1);
470
+ res[projKey] = r[field];
471
+ }
472
+ else if (projVal === 1) {
473
+ res[projKey] = r[projKey];
474
+ }
475
+ }
476
+ return res;
477
+ });
478
+ }
479
+ }
480
+ return records;
481
+ }
482
+ }
483
+ exports.AnalytixCore = AnalytixCore;
484
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function loadAnalytixEnv(): void;
2
+ export declare function resolveAnalytixStoreKind(): "memory" | "mongo";
3
+ export declare function isFuncxLiveEnabled(): boolean;
4
+ //# sourceMappingURL=load-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-env.d.ts","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"AA6DA,wBAAgB,eAAe,IAAI,IAAI,CAStC;AAED,wBAAgB,wBAAwB,IAAI,QAAQ,GAAG,OAAO,CAK7D;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAI5C"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadAnalytixEnv = loadAnalytixEnv;
7
+ exports.resolveAnalytixStoreKind = resolveAnalytixStoreKind;
8
+ exports.isFuncxLiveEnabled = isFuncxLiveEnabled;
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ function findEnvPath() {
12
+ let dir = process.cwd();
13
+ while (dir !== node_path_1.default.dirname(dir)) {
14
+ const candidate = node_path_1.default.join(dir, ".env");
15
+ if (node_fs_1.default.existsSync(candidate))
16
+ return candidate;
17
+ dir = node_path_1.default.dirname(dir);
18
+ }
19
+ return null;
20
+ }
21
+ function parseEnvFile(filePath) {
22
+ const content = node_fs_1.default.readFileSync(filePath, "utf-8");
23
+ for (const line of content.split("\n")) {
24
+ const trimmed = line.trim();
25
+ if (!trimmed || trimmed.startsWith("#"))
26
+ continue;
27
+ const eq = trimmed.indexOf("=");
28
+ if (eq <= 0)
29
+ continue;
30
+ const key = trimmed.slice(0, eq).trim();
31
+ let value = trimmed.slice(eq + 1).trim();
32
+ if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
33
+ value = value.slice(1, -1);
34
+ }
35
+ if (process.env[key] === undefined) {
36
+ process.env[key] = value;
37
+ }
38
+ }
39
+ }
40
+ /** Map host env names to Analytix config (does not overwrite explicit ANALYTIX_* values). */
41
+ function applyEnvAliases() {
42
+ const alias = (target, ...sources) => {
43
+ if (process.env[target])
44
+ return;
45
+ for (const source of sources) {
46
+ const value = process.env[source];
47
+ if (value !== undefined && value !== "") {
48
+ process.env[target] = value;
49
+ return;
50
+ }
51
+ }
52
+ };
53
+ alias("ANALYTIX_MONGO_URI", "MONGO_URI", "ANALYTIX_MONGO_URI");
54
+ alias("OPENROUTER_API_KEY", "OPEN_ROUTER_KEY", "OPENROUTER_API_KEY", "X_OPENROUTER_KEY");
55
+ alias("ANALYTIX_API_KEY", "ANALYTIX_API_KEY");
56
+ if (!process.env.ANALYTIX_API_MODE) {
57
+ if (process.env.ANALYTIX_MONGO_URI && process.env.FUNCX_LIVE_TESTS === "1") {
58
+ process.env.ANALYTIX_API_MODE = "live";
59
+ }
60
+ }
61
+ if (!process.env.ANALYTIX_STORE && process.env.ANALYTIX_MONGO_URI && process.env.ANALYTIX_API_MODE === "live") {
62
+ process.env.ANALYTIX_STORE = "mongo";
63
+ }
64
+ }
65
+ let loaded = false;
66
+ function loadAnalytixEnv() {
67
+ if (loaded)
68
+ return;
69
+ loaded = true;
70
+ const envPath = findEnvPath();
71
+ if (envPath) {
72
+ parseEnvFile(envPath);
73
+ }
74
+ applyEnvAliases();
75
+ }
76
+ function resolveAnalytixStoreKind() {
77
+ loadAnalytixEnv();
78
+ if (process.env.ANALYTIX_API_MODE === "mock")
79
+ return "memory";
80
+ if (process.env.ANALYTIX_STORE === "mongo" && process.env.ANALYTIX_MONGO_URI)
81
+ return "mongo";
82
+ return "memory";
83
+ }
84
+ function isFuncxLiveEnabled() {
85
+ loadAnalytixEnv();
86
+ if (process.env.ANALYTIX_API_MODE === "mock")
87
+ return false;
88
+ return process.env.FUNCX_LIVE_TESTS === "1" || process.env.FUNCX_ACTIVIX_ENABLED === "1";
89
+ }
90
+ //# sourceMappingURL=load-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-env.js","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function setMockMode(enabled: boolean): void;
2
+ export declare function isMockMode(): boolean;
3
+ export declare function mockLog(scope: string, message: string, detail?: Record<string, unknown>): void;
4
+ //# sourceMappingURL=mock-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-log.d.ts","sourceRoot":"","sources":["../src/mock-log.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAMpC;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAI9F"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setMockMode = setMockMode;
4
+ exports.isMockMode = isMockMode;
5
+ exports.mockLog = mockLog;
6
+ let mockModeEnabled = false;
7
+ function setMockMode(enabled) {
8
+ mockModeEnabled = enabled;
9
+ }
10
+ function isMockMode() {
11
+ if (mockModeEnabled)
12
+ return true;
13
+ if (typeof process !== "undefined" && process.env.ANALYTIX_API_MODE === "mock") {
14
+ return true;
15
+ }
16
+ return false;
17
+ }
18
+ function mockLog(scope, message, detail) {
19
+ if (!isMockMode())
20
+ return;
21
+ const suffix = detail ? ` ${JSON.stringify(detail)}` : "";
22
+ console.warn(`[mock:${scope}] ${message}${suffix}`);
23
+ }
24
+ //# sourceMappingURL=mock-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-log.js","sourceRoot":"","sources":["../src/mock-log.ts"],"names":[],"mappings":";;AAEA,kCAEC;AAED,gCAMC;AAED,0BAIC;AAlBD,IAAI,eAAe,GAAG,KAAK,CAAC;AAE5B,SAAgB,WAAW,CAAC,OAAgB;IAC1C,eAAe,GAAG,OAAO,CAAC;AAC5B,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,eAAe;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,OAAO,CAAC,KAAa,EAAE,OAAe,EAAE,MAAgC;IACtF,IAAI,CAAC,UAAU,EAAE;QAAE,OAAO;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { AnalytixRunResult } from "@x12i/analytix-contracts";
2
+ import type { ExecutionRecord, RuntimeStore } from "./runtime-store.js";
3
+ export declare class MongoRuntimeStore {
4
+ private uri;
5
+ private client;
6
+ private db;
7
+ constructor(uri: string);
8
+ connect(): Promise<void>;
9
+ private col;
10
+ getCacheAsync(key: string): Promise<AnalytixRunResult | null>;
11
+ setCacheAsync(key: string, result: AnalytixRunResult): Promise<void>;
12
+ addExecutionAsync(record: ExecutionRecord): Promise<void>;
13
+ getTierOutputAsync(tierId: string, paramsKey: string): Promise<Record<string, unknown> | null>;
14
+ setTierOutputAsync(tierId: string, paramsKey: string, analyticId: string, output: unknown): Promise<void>;
15
+ close(): Promise<void>;
16
+ }
17
+ /** Sync RuntimeStore facade over Mongo with in-memory read-through cache for hot paths. */
18
+ export declare class MongoBackedRuntimeStore implements RuntimeStore {
19
+ private mongo;
20
+ private cacheMirror;
21
+ private tierMirror;
22
+ constructor(mongo: MongoRuntimeStore);
23
+ init(): Promise<void>;
24
+ getCache(key: string): AnalytixRunResult | null;
25
+ setCache(key: string, result: AnalytixRunResult): void;
26
+ addExecution(record: ExecutionRecord): void;
27
+ listExecutions(_filter?: {
28
+ traceId?: string;
29
+ analyticId?: string;
30
+ }): ExecutionRecord[];
31
+ getTierOutput(tierId: string, paramsKey: string): unknown | null;
32
+ getTierAnalyticOutput(tierId: string, paramsKey: string, analyticId: string): unknown | null;
33
+ setTierOutput(tierId: string, paramsKey: string, analyticId: string, output: unknown): void;
34
+ hydrateCache(key: string): Promise<void>;
35
+ hydrateTier(tierId: string, paramsKey: string): Promise<void>;
36
+ }
37
+ export declare function createRuntimeStoreFromEnv(): Promise<RuntimeStore>;
38
+ //# sourceMappingURL=mongo-runtime-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-runtime-store.d.ts","sourceRoot":"","sources":["../src/mongo-runtime-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIxE,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,EAAE,CAAmB;gBAET,GAAG,EAAE,MAAM;IAKzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,OAAO,CAAC,GAAG;IAKL,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAM7D,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAW9F,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IASzG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAED,2FAA2F;AAC3F,qBAAa,uBAAwB,YAAW,YAAY;IAI9C,OAAO,CAAC,KAAK;IAHzB,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,UAAU,CAA8C;gBAE5C,KAAK,EAAE,iBAAiB;IAEtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAI/C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAKtD,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI3C,cAAc,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,EAAE;IAItF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAIhE,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAK5F,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAQrF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIpE;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,YAAY,CAAC,CAsBvE"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MongoBackedRuntimeStore = exports.MongoRuntimeStore = void 0;
4
+ exports.createRuntimeStoreFromEnv = createRuntimeStoreFromEnv;
5
+ const DB_NAME = process.env.ANALYTIX_MONGO_DB || "analytix";
6
+ class MongoRuntimeStore {
7
+ uri;
8
+ client;
9
+ db = null;
10
+ constructor(uri) {
11
+ this.uri = uri;
12
+ const { MongoClient: Client } = require("mongodb");
13
+ this.client = new Client(uri);
14
+ }
15
+ async connect() {
16
+ if (this.db)
17
+ return;
18
+ await this.client.connect();
19
+ this.db = this.client.db(DB_NAME);
20
+ await this.db.collection("analytix_results").createIndex({ cacheKey: 1 }, { unique: true });
21
+ await this.db.collection("analytix_executions").createIndex({ traceId: 1 });
22
+ await this.db.collection("analytix_tier_outputs").createIndex({ tierId: 1, paramsKey: 1, analyticId: 1 });
23
+ }
24
+ col(name) {
25
+ if (!this.db)
26
+ throw new Error("MongoRuntimeStore not connected");
27
+ return this.db.collection(name);
28
+ }
29
+ async getCacheAsync(key) {
30
+ await this.connect();
31
+ const doc = await this.col("analytix_results").findOne({ cacheKey: key });
32
+ return doc ? doc.result : null;
33
+ }
34
+ async setCacheAsync(key, result) {
35
+ await this.connect();
36
+ await this.col("analytix_results").updateOne({ cacheKey: key }, { $set: { cacheKey: key, result, updatedAt: new Date().toISOString() } }, { upsert: true });
37
+ }
38
+ async addExecutionAsync(record) {
39
+ await this.connect();
40
+ await this.col("analytix_executions").insertOne({ ...record, createdAt: new Date().toISOString() });
41
+ }
42
+ async getTierOutputAsync(tierId, paramsKey) {
43
+ await this.connect();
44
+ const docs = await this.col("analytix_tier_outputs").find({ tierId, paramsKey }).toArray();
45
+ if (!docs.length)
46
+ return null;
47
+ const bucket = {};
48
+ for (const doc of docs) {
49
+ bucket[doc.analyticId] = doc.output;
50
+ }
51
+ return bucket;
52
+ }
53
+ async setTierOutputAsync(tierId, paramsKey, analyticId, output) {
54
+ await this.connect();
55
+ await this.col("analytix_tier_outputs").updateOne({ tierId, paramsKey, analyticId }, { $set: { tierId, paramsKey, analyticId, output, updatedAt: new Date().toISOString() } }, { upsert: true });
56
+ }
57
+ async close() {
58
+ await this.client.close();
59
+ this.db = null;
60
+ }
61
+ }
62
+ exports.MongoRuntimeStore = MongoRuntimeStore;
63
+ /** Sync RuntimeStore facade over Mongo with in-memory read-through cache for hot paths. */
64
+ class MongoBackedRuntimeStore {
65
+ mongo;
66
+ cacheMirror = new Map();
67
+ tierMirror = new Map();
68
+ constructor(mongo) {
69
+ this.mongo = mongo;
70
+ }
71
+ async init() {
72
+ await this.mongo.connect();
73
+ }
74
+ getCache(key) {
75
+ return this.cacheMirror.get(key) ?? null;
76
+ }
77
+ setCache(key, result) {
78
+ this.cacheMirror.set(key, result);
79
+ void this.mongo.setCacheAsync(key, result);
80
+ }
81
+ addExecution(record) {
82
+ void this.mongo.addExecutionAsync(record);
83
+ }
84
+ listExecutions(_filter) {
85
+ return [];
86
+ }
87
+ getTierOutput(tierId, paramsKey) {
88
+ return this.tierMirror.get(`${tierId}:${paramsKey}`) ?? null;
89
+ }
90
+ getTierAnalyticOutput(tierId, paramsKey, analyticId) {
91
+ const bucket = this.tierMirror.get(`${tierId}:${paramsKey}`);
92
+ return bucket?.[analyticId] ?? null;
93
+ }
94
+ setTierOutput(tierId, paramsKey, analyticId, output) {
95
+ const bucketKey = `${tierId}:${paramsKey}`;
96
+ const bucket = this.tierMirror.get(bucketKey) ?? {};
97
+ bucket[analyticId] = output;
98
+ this.tierMirror.set(bucketKey, bucket);
99
+ void this.mongo.setTierOutputAsync(tierId, paramsKey, analyticId, output);
100
+ }
101
+ async hydrateCache(key) {
102
+ const cached = await this.mongo.getCacheAsync(key);
103
+ if (cached)
104
+ this.cacheMirror.set(key, cached);
105
+ }
106
+ async hydrateTier(tierId, paramsKey) {
107
+ const bucket = await this.mongo.getTierOutputAsync(tierId, paramsKey);
108
+ if (bucket)
109
+ this.tierMirror.set(`${tierId}:${paramsKey}`, bucket);
110
+ }
111
+ }
112
+ exports.MongoBackedRuntimeStore = MongoBackedRuntimeStore;
113
+ async function createRuntimeStoreFromEnv() {
114
+ const { loadAnalytixEnv, resolveAnalytixStoreKind } = await import("./load-env.js");
115
+ const { InMemoryRuntimeStore } = await import("./runtime-store.js");
116
+ const { mockLog } = await import("./mock-log.js");
117
+ loadAnalytixEnv();
118
+ if (resolveAnalytixStoreKind() === "mongo") {
119
+ const uri = process.env.ANALYTIX_MONGO_URI;
120
+ const mongo = new MongoRuntimeStore(uri);
121
+ const store = new MongoBackedRuntimeStore(mongo);
122
+ await store.init();
123
+ console.info("[analytix] Runtime store: MongoDB (live mode)");
124
+ return store;
125
+ }
126
+ if (process.env.ANALYTIX_API_MODE !== "mock") {
127
+ mockLog("runtime-store", "using in-memory runtime store — set ANALYTIX_STORE=mongo with MONGO_URI for persistence");
128
+ }
129
+ else {
130
+ mockLog("runtime-store", "using in-memory runtime store (mock mode)");
131
+ }
132
+ return new InMemoryRuntimeStore();
133
+ }
134
+ //# sourceMappingURL=mongo-runtime-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-runtime-store.js","sourceRoot":"","sources":["../src/mongo-runtime-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { AnalytixRunResult } from "@x12i/analytix-contracts";
2
+ export interface ExecutionRecord {
3
+ analyticId: string;
4
+ analyticType: string;
5
+ traceId: string;
6
+ cacheKey: string;
7
+ cacheHit: boolean;
8
+ startedAt: string;
9
+ finishedAt: string;
10
+ durationMs: number;
11
+ }
12
+ export interface RuntimeStore {
13
+ getCache(key: string): AnalytixRunResult | null;
14
+ setCache(key: string, result: AnalytixRunResult): void;
15
+ addExecution(record: ExecutionRecord): void;
16
+ listExecutions(filter?: {
17
+ traceId?: string;
18
+ analyticId?: string;
19
+ }): ExecutionRecord[];
20
+ getTierOutput(tierId: string, paramsKey: string): unknown | null;
21
+ setTierOutput(tierId: string, paramsKey: string, analyticId: string, output: unknown): void;
22
+ getTierAnalyticOutput(tierId: string, paramsKey: string, analyticId: string): unknown | null;
23
+ }
24
+ export declare class InMemoryRuntimeStore implements RuntimeStore {
25
+ private cache;
26
+ private executions;
27
+ private tierOutputs;
28
+ getCache(key: string): AnalytixRunResult | null;
29
+ setCache(key: string, result: AnalytixRunResult): void;
30
+ addExecution(record: ExecutionRecord): void;
31
+ listExecutions(filter?: {
32
+ traceId?: string;
33
+ analyticId?: string;
34
+ }): ExecutionRecord[];
35
+ private tierKey;
36
+ getTierOutput(tierId: string, paramsKey: string): unknown | null;
37
+ getTierAnalyticOutput(tierId: string, paramsKey: string, analyticId: string): unknown | null;
38
+ setTierOutput(tierId: string, paramsKey: string, analyticId: string, output: unknown): void;
39
+ }
40
+ //# sourceMappingURL=runtime-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-store.d.ts","sourceRoot":"","sources":["../src/runtime-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvD,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5C,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,EAAE,CAAC;IACtF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACjE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5F,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CAC9F;AAED,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAA8C;IAEjE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAI/C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAQtD,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAS3C,cAAc,CAAC,MAAM,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,eAAe,EAAE;IAQzF,OAAO,CAAC,OAAO;IAIf,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAIhE,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAM5F,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;CAU5F"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InMemoryRuntimeStore = void 0;
4
+ const mock_log_js_1 = require("./mock-log.js");
5
+ class InMemoryRuntimeStore {
6
+ cache = new Map();
7
+ executions = [];
8
+ tierOutputs = new Map();
9
+ getCache(key) {
10
+ return this.cache.get(key) ?? null;
11
+ }
12
+ setCache(key, result) {
13
+ this.cache.set(key, result);
14
+ (0, mock_log_js_1.mockLog)("runtime-store", "cached analytic result in memory (Mongo bypass — mock mode only)", {
15
+ cacheKey: key.slice(0, 12),
16
+ analyticId: result.analyticId,
17
+ });
18
+ }
19
+ addExecution(record) {
20
+ this.executions.push(record);
21
+ (0, mock_log_js_1.mockLog)("runtime-store", "recorded execution in memory (analytix_executions bypass — mock mode only)", {
22
+ analyticId: record.analyticId,
23
+ traceId: record.traceId,
24
+ cacheHit: record.cacheHit,
25
+ });
26
+ }
27
+ listExecutions(filter = {}) {
28
+ return this.executions.filter((record) => {
29
+ if (filter.traceId && record.traceId !== filter.traceId)
30
+ return false;
31
+ if (filter.analyticId && record.analyticId !== filter.analyticId)
32
+ return false;
33
+ return true;
34
+ });
35
+ }
36
+ tierKey(tierId, paramsKey, analyticId) {
37
+ return `${tierId}:${paramsKey}:${analyticId}`;
38
+ }
39
+ getTierOutput(tierId, paramsKey) {
40
+ return this.tierOutputs.get(`${tierId}:${paramsKey}`) ?? null;
41
+ }
42
+ getTierAnalyticOutput(tierId, paramsKey, analyticId) {
43
+ const bucket = this.tierOutputs.get(`${tierId}:${paramsKey}`);
44
+ if (!bucket)
45
+ return null;
46
+ return bucket[analyticId] ?? null;
47
+ }
48
+ setTierOutput(tierId, paramsKey, analyticId, output) {
49
+ const bucketKey = `${tierId}:${paramsKey}`;
50
+ const bucket = this.tierOutputs.get(bucketKey) ?? {};
51
+ bucket[analyticId] = output;
52
+ this.tierOutputs.set(bucketKey, bucket);
53
+ (0, mock_log_js_1.mockLog)("runtime-store", "stored tier output in memory (analytix_tier_outputs bypass — mock mode only)", {
54
+ tierId,
55
+ analyticId,
56
+ });
57
+ }
58
+ }
59
+ exports.InMemoryRuntimeStore = InMemoryRuntimeStore;
60
+ //# sourceMappingURL=runtime-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-store.js","sourceRoot":"","sources":["../src/runtime-store.ts"],"names":[],"mappings":";;;AACA,+CAAwC;AAuBxC,MAAa,oBAAoB;IACvB,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC7C,UAAU,GAAsB,EAAE,CAAC;IACnC,WAAW,GAAG,IAAI,GAAG,EAAmC,CAAC;IAEjE,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,MAAyB;QAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,IAAA,qBAAO,EAAC,eAAe,EAAE,kEAAkE,EAAE;YAC3F,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,MAAuB;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAA,qBAAO,EAAC,eAAe,EAAE,4EAA4E,EAAE;YACrG,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,SAAoD,EAAE;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACvC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YACtE,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;gBAAE,OAAO,KAAK,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,MAAc,EAAE,SAAiB,EAAE,UAAkB;QACnE,OAAO,GAAG,MAAM,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,SAAiB;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC;IAChE,CAAC;IAED,qBAAqB,CAAC,MAAc,EAAE,SAAiB,EAAE,UAAkB;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,SAAiB,EAAE,UAAkB,EAAE,MAAe;QAClF,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,IAAA,qBAAO,EAAC,eAAe,EAAE,8EAA8E,EAAE;YACvG,MAAM;YACN,UAAU;SACX,CAAC,CAAC;IACL,CAAC;CACF;AA1DD,oDA0DC"}
@@ -0,0 +1,2 @@
1
+ export declare function createTraceId(prefix?: string): string;
2
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,MAAM,SAAQ,GAAG,MAAM,CAEpD"}
package/dist/trace.js ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createTraceId = createTraceId;
37
+ const crypto = __importStar(require("node:crypto"));
38
+ function createTraceId(prefix = "trc") {
39
+ return `${prefix}_${crypto.randomBytes(12).toString("hex")}`;
40
+ }
41
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,sCAEC;AAJD,oDAAsC;AAEtC,SAAgB,aAAa,CAAC,MAAM,GAAG,KAAK;IAC1C,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@x12i/analytix",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "dependencies": {
7
+ "mongodb": "^6.16.0",
8
+ "@x12i/analytix-contracts": "^1.0.0",
9
+ "@x12i/analytix-catalox": "^1.0.0",
10
+ "@x12i/analytix-functions": "^1.0.0",
11
+ "@x12i/analytix-matrix": "^1.0.0",
12
+ "@x12i/analytix-tiers": "^1.0.0"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public",
19
+ "registry": "https://registry.npmjs.org/"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc -p tsconfig.json"
23
+ }
24
+ }