@uptimizr/collector-server 2.0.1 → 2.2.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.
- package/AGENTS.md +187 -11
- package/README.md +91 -7
- package/dist/__tests__/support/registryRequests.d.ts +2 -1
- package/dist/__tests__/support/registryRequests.d.ts.map +1 -1
- package/dist/__tests__/support/registryRequests.js +17 -1
- package/dist/__tests__/support/registryRequests.js.map +1 -1
- package/dist/__tests__/support/subscriptionFixtures.d.ts +63 -0
- package/dist/__tests__/support/subscriptionFixtures.d.ts.map +1 -0
- package/dist/__tests__/support/subscriptionFixtures.js +17 -0
- package/dist/__tests__/support/subscriptionFixtures.js.map +1 -0
- package/dist/agentReport.d.ts +256 -0
- package/dist/agentReport.d.ts.map +1 -0
- package/dist/agentReport.js +861 -0
- package/dist/agentReport.js.map +1 -0
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +112 -5
- package/dist/app.js.map +1 -1
- package/dist/audit.d.ts +5 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +24 -4
- package/dist/audit.js.map +1 -1
- package/dist/auth.d.ts +41 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +47 -0
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +133 -13
- package/dist/cli.js.map +1 -1
- package/dist/cliStore.d.ts +31 -2
- package/dist/cliStore.d.ts.map +1 -1
- package/dist/cliStore.js +34 -0
- package/dist/cliStore.js.map +1 -1
- package/dist/clickhouseStore.d.ts.map +1 -1
- package/dist/clickhouseStore.js +44 -2
- package/dist/clickhouseStore.js.map +1 -1
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/connectionLimiter.d.ts +23 -0
- package/dist/connectionLimiter.d.ts.map +1 -0
- package/dist/connectionLimiter.js +24 -0
- package/dist/connectionLimiter.js.map +1 -0
- package/dist/duckdbStore.d.ts.map +1 -1
- package/dist/duckdbStore.js +44 -1
- package/dist/duckdbStore.js.map +1 -1
- package/dist/internalDispatch.d.ts +36 -0
- package/dist/internalDispatch.d.ts.map +1 -0
- package/dist/internalDispatch.js +50 -0
- package/dist/internalDispatch.js.map +1 -0
- package/dist/memoryStore.d.ts.map +1 -1
- package/dist/memoryStore.js +314 -1
- package/dist/memoryStore.js.map +1 -1
- package/dist/mssqlStore.d.ts.map +1 -1
- package/dist/mssqlStore.js +44 -2
- package/dist/mssqlStore.js.map +1 -1
- package/dist/postgresStore.d.ts.map +1 -1
- package/dist/postgresStore.js +44 -2
- package/dist/postgresStore.js.map +1 -1
- package/dist/projectMetadata.d.ts +82 -0
- package/dist/projectMetadata.d.ts.map +1 -0
- package/dist/projectMetadata.js +50 -0
- package/dist/projectMetadata.js.map +1 -0
- package/dist/routes/context.d.ts +135 -0
- package/dist/routes/context.d.ts.map +1 -0
- package/dist/routes/context.js +306 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/insights.d.ts +36 -0
- package/dist/routes/insights.d.ts.map +1 -0
- package/dist/routes/insights.js +810 -0
- package/dist/routes/insights.js.map +1 -0
- package/dist/routes/live.d.ts +8 -0
- package/dist/routes/live.d.ts.map +1 -1
- package/dist/routes/live.js +8 -7
- package/dist/routes/live.js.map +1 -1
- package/dist/routes/mcp.d.ts +36 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +262 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/meta.d.ts +16 -2
- package/dist/routes/meta.d.ts.map +1 -1
- package/dist/routes/meta.js +699 -10
- package/dist/routes/meta.js.map +1 -1
- package/dist/routes/metadata.d.ts +31 -0
- package/dist/routes/metadata.d.ts.map +1 -0
- package/dist/routes/metadata.js +163 -0
- package/dist/routes/metadata.js.map +1 -0
- package/dist/routes/narrative.d.ts +36 -0
- package/dist/routes/narrative.d.ts.map +1 -0
- package/dist/routes/narrative.js +95 -0
- package/dist/routes/narrative.js.map +1 -0
- package/dist/routes/panels.d.ts +44 -0
- package/dist/routes/panels.d.ts.map +1 -0
- package/dist/routes/panels.js +108 -0
- package/dist/routes/panels.js.map +1 -0
- package/dist/routes/query-dsl.d.ts +50 -0
- package/dist/routes/query-dsl.d.ts.map +1 -0
- package/dist/routes/query-dsl.js +359 -0
- package/dist/routes/query-dsl.js.map +1 -0
- package/dist/routes/query.d.ts +36 -0
- package/dist/routes/query.d.ts.map +1 -1
- package/dist/routes/query.js +101 -13
- package/dist/routes/query.js.map +1 -1
- package/dist/routes/subscriptions.d.ts +52 -0
- package/dist/routes/subscriptions.d.ts.map +1 -0
- package/dist/routes/subscriptions.js +290 -0
- package/dist/routes/subscriptions.js.map +1 -0
- package/dist/store.d.ts +113 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/subscriptions/cli.d.ts +36 -0
- package/dist/subscriptions/cli.d.ts.map +1 -0
- package/dist/subscriptions/cli.js +143 -0
- package/dist/subscriptions/cli.js.map +1 -0
- package/dist/subscriptions/delivery.d.ts +101 -0
- package/dist/subscriptions/delivery.d.ts.map +1 -0
- package/dist/subscriptions/delivery.js +165 -0
- package/dist/subscriptions/delivery.js.map +1 -0
- package/dist/subscriptions/evaluate.d.ts +119 -0
- package/dist/subscriptions/evaluate.d.ts.map +1 -0
- package/dist/subscriptions/evaluate.js +326 -0
- package/dist/subscriptions/evaluate.js.map +1 -0
- package/dist/subscriptions/scheduler.d.ts +97 -0
- package/dist/subscriptions/scheduler.d.ts.map +1 -0
- package/dist/subscriptions/scheduler.js +332 -0
- package/dist/subscriptions/scheduler.js.map +1 -0
- package/dist/subscriptions/stream.d.ts +40 -0
- package/dist/subscriptions/stream.d.ts.map +1 -0
- package/dist/subscriptions/stream.js +38 -0
- package/dist/subscriptions/stream.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +25 -0
- package/dist/version.js.map +1 -0
- package/dist/webhookSignature.d.ts +64 -0
- package/dist/webhookSignature.d.ts.map +1 -0
- package/dist/webhookSignature.js +91 -0
- package/dist/webhookSignature.js.map +1 -0
- package/llms.txt +39 -2
- package/package.json +17 -14
package/dist/config.d.ts
CHANGED
|
@@ -61,6 +61,55 @@ export interface CollectorConfig {
|
|
|
61
61
|
* on to audit every authenticated request without exception.
|
|
62
62
|
*/
|
|
63
63
|
auditDashboardRequests: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Serve MCP over Streamable HTTP at `/mcp` (ADR 0051 §7). **Off by default**:
|
|
66
|
+
* it is an additional authenticated, long-lived surface, so an operator opts
|
|
67
|
+
* into it rather than discovering it. When off the route is not registered at
|
|
68
|
+
* all — `/mcp` simply 404s.
|
|
69
|
+
*/
|
|
70
|
+
mcpHttpEnabled: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Max concurrent MCP sessions across the collector, the `/mcp` equivalent of
|
|
73
|
+
* {@link liveMaxConnections}. Each session holds an MCP server and may hold an
|
|
74
|
+
* open SSE stream, so the count is bounded; a request that would open the
|
|
75
|
+
* (cap + 1)-th session is refused with `503`.
|
|
76
|
+
*/
|
|
77
|
+
mcpMaxSessions: number;
|
|
78
|
+
/**
|
|
79
|
+
* How long an MCP session may go without a request before it is closed and
|
|
80
|
+
* evicted, in ms. Streamable HTTP has no keep-alive a server can rely on —
|
|
81
|
+
* a client that disappears without `DELETE /mcp` would otherwise hold its slot
|
|
82
|
+
* forever.
|
|
83
|
+
*/
|
|
84
|
+
mcpSessionTtlMs: number;
|
|
85
|
+
/**
|
|
86
|
+
* Run the conditional-subscription scheduler (#311, ADR 0051 §6). **On by
|
|
87
|
+
* default**, and free until a project actually has an enabled subscription:
|
|
88
|
+
* the scheduler's whole startup cost is one store read, and it schedules
|
|
89
|
+
* nothing when that read comes back empty. Set `COLLECTOR_SUBSCRIPTIONS=0` to
|
|
90
|
+
* keep the API (create, list, test) while running no timers at all — the right
|
|
91
|
+
* setting when several collector instances share one database and only one of
|
|
92
|
+
* them should evaluate.
|
|
93
|
+
*/
|
|
94
|
+
subscriptions: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* How many subscription evaluations may run at once (default 4). Each is one
|
|
97
|
+
* grouped store read, so this is the knob that keeps a hundred standing
|
|
98
|
+
* subscriptions from behaving like a hundred concurrent dashboard users.
|
|
99
|
+
*/
|
|
100
|
+
subscriptionsMaxConcurrent: number;
|
|
101
|
+
/**
|
|
102
|
+
* Hosts a subscription webhook may POST to (`COLLECTOR_WEBHOOK_ALLOWED_HOSTS`,
|
|
103
|
+
* comma-separated; `*` allows any host).
|
|
104
|
+
*
|
|
105
|
+
* **Empty by default, which disables webhook egress entirely.** A subscription
|
|
106
|
+
* is created over HTTP by an `annotate`-capable key, so its URL is
|
|
107
|
+
* request-controlled input to an outbound request — the scheme check in
|
|
108
|
+
* `parseWebhookUrl` is not on its own an SSRF boundary. Naming the hosts is
|
|
109
|
+
* the operator's explicit consent to reach them; until then a firing is still
|
|
110
|
+
* recorded and fanned out over SSE, and nothing leaves the process.
|
|
111
|
+
*/
|
|
112
|
+
webhookAllowedHosts: string[];
|
|
64
113
|
/**
|
|
65
114
|
* Absolute path to a pre-built static dashboard (`out/`) to serve as an
|
|
66
115
|
* all-in-one bundle. Unset (the default) keeps the collector headless.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uFAAuF;IACvF,yBAAyB,EAAE,OAAO,CAAC;IACnC,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,0BAA0B,EAAE,OAAO,CAAC;IACpC,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC;;;;;;;OAOG;IACH,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,OAAO,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC1B;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uFAAuF;IACvF,yBAAyB,EAAE,OAAO,CAAC;IACnC,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,0BAA0B,EAAE,OAAO,CAAC;IACpC,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC;;;;;;;OAOG;IACH,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,OAAO,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC1B;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;;;OAKG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,0BAA0B,EAAE,MAAM,CAAC;IACnC;;;;;;;;;;OAUG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AA+C9C,wBAAgB,UAAU,CAAC,GAAG,GAAE,GAAiB,GAAG,eAAe,CAiDlE"}
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,15 @@ import { resolve } from "node:path";
|
|
|
2
2
|
function bool(value) {
|
|
3
3
|
return value === "1" || value?.toLowerCase() === "true";
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* Read a strictly positive numeric setting, falling back to `fallback` when it
|
|
7
|
+
* is unset, unparseable or non-positive. Used for the caps a zero or a typo
|
|
8
|
+
* must not silently turn into "no sessions allowed".
|
|
9
|
+
*/
|
|
10
|
+
function positive(value, fallback) {
|
|
11
|
+
const n = Number(value);
|
|
12
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
13
|
+
}
|
|
5
14
|
/**
|
|
6
15
|
* Parse `COLLECTOR_TRUST_PROXY` into a value Fastify's `trustProxy` accepts:
|
|
7
16
|
* a boolean, or an IP/subnet/comma-separated list passed through verbatim.
|
|
@@ -63,6 +72,18 @@ export function loadConfig(env = process.env) {
|
|
|
63
72
|
cspMode: env.COLLECTOR_CSP === "off" ? "off" : "strict",
|
|
64
73
|
auditRetentionDays: Math.max(0, Number(env.AUDIT_RETENTION_DAYS ?? 30) || 0),
|
|
65
74
|
auditDashboardRequests: bool(env.AUDIT_DASHBOARD_REQUESTS),
|
|
75
|
+
mcpHttpEnabled: bool(env.COLLECTOR_MCP_HTTP),
|
|
76
|
+
mcpMaxSessions: positive(env.COLLECTOR_MCP_MAX_SESSIONS, 50),
|
|
77
|
+
mcpSessionTtlMs: positive(env.COLLECTOR_MCP_SESSION_TTL_MS, 1_800_000),
|
|
78
|
+
// Default on: an operator who never creates a subscription pays one store
|
|
79
|
+
// read at boot, and `0`/`false` turns the scheduler off without touching the
|
|
80
|
+
// API surface.
|
|
81
|
+
subscriptions: env.COLLECTOR_SUBSCRIPTIONS == null ? true : bool(env.COLLECTOR_SUBSCRIPTIONS),
|
|
82
|
+
subscriptionsMaxConcurrent: Math.max(1, Number(env.COLLECTOR_SUBSCRIPTIONS_MAX_CONCURRENT ?? 4) || 4),
|
|
83
|
+
webhookAllowedHosts: (env.COLLECTOR_WEBHOOK_ALLOWED_HOSTS ?? "")
|
|
84
|
+
.split(",")
|
|
85
|
+
.map((s) => s.trim())
|
|
86
|
+
.filter(Boolean),
|
|
66
87
|
dashboardDir: env.COLLECTOR_DASHBOARD_DIR ? resolve(env.COLLECTOR_DASHBOARD_DIR) : undefined,
|
|
67
88
|
};
|
|
68
89
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A shared budget for held-open SSE connections (ADR 0032 §6).
|
|
3
|
+
*
|
|
4
|
+
* The live endpoints and the conditional-subscription stream (#311) are the
|
|
5
|
+
* same kind of resource: a socket the collector keeps open, a subscriber on an
|
|
6
|
+
* in-process bus, and a heartbeat timer. `LIVE_MAX_CONNECTIONS` is meant to
|
|
7
|
+
* bound *that*, so they draw on one counter rather than one each — otherwise the
|
|
8
|
+
* setting silently means "up to 2 × max", and grows every time another SSE
|
|
9
|
+
* surface is added.
|
|
10
|
+
*/
|
|
11
|
+
export interface ConnectionLimiter {
|
|
12
|
+
/** Take a slot, or `false` when the budget is exhausted. */
|
|
13
|
+
acquire(): boolean;
|
|
14
|
+
/** Return a slot. Never drops below zero, so a double release is harmless. */
|
|
15
|
+
release(): void;
|
|
16
|
+
/** Slots currently held (for tests). */
|
|
17
|
+
readonly open: number;
|
|
18
|
+
/** The configured ceiling. */
|
|
19
|
+
readonly max: number;
|
|
20
|
+
}
|
|
21
|
+
/** Create a limiter over `max` concurrent connections. */
|
|
22
|
+
export declare function createConnectionLimiter(max: number): ConnectionLimiter;
|
|
23
|
+
//# sourceMappingURL=connectionLimiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionLimiter.d.ts","sourceRoot":"","sources":["../src/connectionLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,OAAO,IAAI,OAAO,CAAC;IACnB,8EAA8E;IAC9E,OAAO,IAAI,IAAI,CAAC;IAChB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,0DAA0D;AAC1D,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAmBtE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Create a limiter over `max` concurrent connections. */
|
|
2
|
+
export function createConnectionLimiter(max) {
|
|
3
|
+
const ceiling = Math.max(0, Math.trunc(max));
|
|
4
|
+
let open = 0;
|
|
5
|
+
return {
|
|
6
|
+
acquire() {
|
|
7
|
+
if (open >= ceiling)
|
|
8
|
+
return false;
|
|
9
|
+
open += 1;
|
|
10
|
+
return true;
|
|
11
|
+
},
|
|
12
|
+
release() {
|
|
13
|
+
if (open > 0)
|
|
14
|
+
open -= 1;
|
|
15
|
+
},
|
|
16
|
+
get open() {
|
|
17
|
+
return open;
|
|
18
|
+
},
|
|
19
|
+
get max() {
|
|
20
|
+
return ceiling;
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=connectionLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionLimiter.js","sourceRoot":"","sources":["../src/connectionLimiter.ts"],"names":[],"mappings":"AAqBA,0DAA0D;AAC1D,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO;QACL,OAAO;YACL,IAAI,IAAI,IAAI,OAAO;gBAAE,OAAO,KAAK,CAAC;YAClC,IAAI,IAAI,CAAC,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,IAAI,IAAI,GAAG,CAAC;gBAAE,IAAI,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI;YACN,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAG;YACL,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duckdbStore.d.ts","sourceRoot":"","sources":["../src/duckdbStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"duckdbStore.d.ts","sourceRoot":"","sources":["../src/duckdbStore.ts"],"names":[],"mappings":"AAoLA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA8S9E"}
|
package/dist/duckdbStore.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildCameraDirectionHeatmap, buildViewCoverageHistogram, buildCameraDistance, buildCameraPositionHeatmap, buildClickGazeRay, buildDeadClicks, buildRageClicks, buildHoverDwell, buildCompileStalls, buildArPlacementTimeToPlace, buildArPlacementAttempts, buildArPlacementSurfaces, buildResourceSummary, buildCapabilityChanges, buildCameraGestures, buildDistinctScenes, buildEventTypeCounts, buildFlowHeatmap, buildFunnel, buildSceneRetention, buildLoadBounceFunnel, buildVariantLeaderboard, buildListSessions, buildNavigationStats, buildBacktrackRatio, buildXrRotationRate, buildXrSourceUsage, buildXrAbandonment, buildXrLocomotionComfort, buildTrackingQuality, buildInteractionsBySource, buildMeshDwell, buildMeshBlindSpots, buildMeshInteractionKinds, buildReachability, buildPerfSummary, buildPerfDistribution, buildFpsHistogram, buildFrameTimePercentiles, buildJankRate, buildPerfChurn, buildPerfByDevice, buildPerfByScene, buildResourcePercentiles, buildStabilityCounts, buildGraphicsDiagnosticCounts, buildErrorHeatmap, buildBoundaryHeatmap, buildBoundaryHeatmapStats, buildBoundaryContacts, buildRenderingTechnology, buildPointerHeatmap, buildMeshUvHeatmap, buildSceneCoverage, buildPerfHeatmap, buildSessionTrajectory, buildAggregateTrajectories, buildRenderScaleTruth, buildTimeseries, buildTopMeshes, buildTopMeshesBySource, buildTopMeshesTrend, buildTopInputActions, buildWorldHeatmap, buildWorldHeatmapStats, buildGazeHeatmap, buildGazeHeatmapStats, createDuckdbClient, duckdbDialect, duckdbGetSceneRegions, duckdbGetSceneRepresentation, duckdbGetSessionEvents, duckdbGetSessionMeta, duckdbGetProject, duckdbInsertEvents, duckdbListSceneRegions, duckdbListSceneRepresentations, duckdbPutSceneRegions, duckdbResolveApiKey, duckdbRecordAudit, duckdbListAudit, duckdbPruneAudit, duckdbStreamSessionEvents, duckdbUpsertSceneProxy, migrateDuckdb, readDbSettings, runDuckdbQuery, } from "@uptimizr/db";
|
|
1
|
+
import { buildCameraDirectionHeatmap, buildViewCoverageHistogram, buildCameraDistance, buildCameraPositionHeatmap, buildClickGazeRay, buildCustomEventVocabulary, buildDeadClicks, buildRageClicks, buildHoverDwell, buildCompileStalls, buildArPlacementTimeToPlace, buildArPlacementAttempts, buildArPlacementSurfaces, buildResourceSummary, buildCapabilityChanges, buildCameraGestures, buildDistinctScenes, buildEventTypeCounts, buildMetricBuckets, toMetricBucketRows, buildFlowHeatmap, buildFunnel, buildSceneRetention, buildLoadBounceFunnel, buildVariantLeaderboard, buildListSessions, buildNavigationStats, buildBacktrackRatio, buildXrRotationRate, buildXrSourceUsage, buildXrAbandonment, buildXrLocomotionComfort, buildTrackingQuality, buildInteractionsBySource, buildMeshDwell, buildMeshBlindSpots, buildMeshInteractionKinds, buildReachability, buildPerfSummary, buildPerfDistribution, buildFpsHistogram, buildFrameTimePercentiles, buildJankRate, buildPerfChurn, buildPerfByDevice, buildPerfByScene, buildResourcePercentiles, buildStabilityCounts, buildGraphicsDiagnosticCounts, buildErrorHeatmap, buildBoundaryHeatmap, buildBoundaryHeatmapStats, buildBoundaryContacts, buildRenderingTechnology, buildPointerHeatmap, buildMeshUvHeatmap, buildSceneCoverage, buildPerfHeatmap, buildSessionTrajectory, buildAggregateTrajectories, buildRenderScaleTruth, buildTimeseries, buildTopMeshes, buildTopMeshesBySource, buildTopMeshesTrend, buildTopInputActions, foldCustomEventVocabulary, buildWorldHeatmap, buildWorldHeatmapStats, buildGazeHeatmap, buildGazeHeatmapStats, createDuckdbClient, compileMetric, duckdbDialect, duckdbCreateAnnotation, duckdbCreateSavedAnalysis, duckdbDeleteAnnotation, duckdbDeleteGlossaryEntry, duckdbDeleteSavedAnalysis, duckdbCreatePanelSpec, duckdbListPanelSpecs, duckdbUpdatePanelSpec, duckdbDeletePanelSpec, duckdbGetSceneRegions, duckdbGetSceneRepresentation, duckdbGetSessionEvents, duckdbGetSessionMeta, duckdbGetProject, duckdbInsertEvents, duckdbListAnnotations, duckdbListGlossary, duckdbListSavedAnalyses, duckdbListSceneRegions, duckdbListSceneRepresentations, duckdbPutGlossaryEntry, duckdbPutSceneRegions, duckdbListSubscriptions, duckdbListEnabledSubscriptions, duckdbGetSubscription, duckdbCreateSubscription, duckdbSetSubscriptionEnabled, duckdbDeleteSubscription, duckdbRecordSubscriptionOutcome, duckdbGetWebhookSecret, duckdbRecordSubscriptionEvent, duckdbListSubscriptionEvents, duckdbResolveApiKey, duckdbRecordAudit, duckdbListAudit, duckdbPruneAudit, duckdbStreamSessionEvents, duckdbUpsertSceneProxy, migrateDuckdb, readDbSettings, runDuckdbQuery, } from "@uptimizr/db";
|
|
2
2
|
/**
|
|
3
3
|
* OSS default store (ADR 0020): a single persisted DuckDB file holding both
|
|
4
4
|
* events and metadata, with the **full** analytics surface — no stubbed
|
|
@@ -15,12 +15,23 @@ export async function createDuckdbStore(path) {
|
|
|
15
15
|
const db = await createDuckdbClient(filePath);
|
|
16
16
|
await migrateDuckdb(db);
|
|
17
17
|
return {
|
|
18
|
+
engine: "duckdb",
|
|
18
19
|
resolveApiKey: (key) => duckdbResolveApiKey(db, key),
|
|
19
20
|
recordAudit: (entry) => duckdbRecordAudit(db, entry),
|
|
20
21
|
listAudit: (projectId, opts) => duckdbListAudit(db, projectId, opts),
|
|
21
22
|
pruneAudit: (cutoffMs) => duckdbPruneAudit(db, cutoffMs),
|
|
22
23
|
projectExists: async (projectId) => (await duckdbGetProject(db, projectId)) !== null,
|
|
23
24
|
insertEvents: (events) => duckdbInsertEvents(db, [...events]),
|
|
25
|
+
// Query DSL v1 (ADR 0051 §3): any registry metric, compiled onto its own
|
|
26
|
+
// aggregation builder and run through the same DuckDB path — and therefore
|
|
27
|
+
// the same parity coverage and the same numeric coercion — as the canned
|
|
28
|
+
// aggregates below.
|
|
29
|
+
runMetric: (projectId, metric, options) => runDuckdbQuery(db, compileMetric(metric, projectId, options, duckdbDialect)),
|
|
30
|
+
// `explain: true` (#304): the same compilation, not executed.
|
|
31
|
+
describeMetric: (projectId, metric, options) => ({
|
|
32
|
+
dialect: duckdbDialect.name,
|
|
33
|
+
spec: compileMetric(metric, projectId, options, duckdbDialect),
|
|
34
|
+
}),
|
|
24
35
|
listSessions: (projectId, opts = {}) => runDuckdbQuery(db, buildListSessions(projectId, opts, duckdbDialect)),
|
|
25
36
|
pointerHeatmap: (projectId, opts = {}) => runDuckdbQuery(db, buildPointerHeatmap(projectId, opts, duckdbDialect)),
|
|
26
37
|
meshUvHeatmap: (projectId, opts = {}) => runDuckdbQuery(db, buildMeshUvHeatmap(projectId, opts, duckdbDialect)),
|
|
@@ -90,9 +101,18 @@ export async function createDuckdbStore(path) {
|
|
|
90
101
|
trackingQuality: (projectId, opts = {}) => runDuckdbQuery(db, buildTrackingQuality(projectId, opts, duckdbDialect)),
|
|
91
102
|
interactionsBySource: (projectId, opts = {}) => runDuckdbQuery(db, buildInteractionsBySource(projectId, opts, duckdbDialect)),
|
|
92
103
|
topInputActions: (projectId, opts = {}) => runDuckdbQuery(db, buildTopInputActions(projectId, opts, duckdbDialect)),
|
|
104
|
+
// Discovered custom-event vocabulary (ADR 0051 §5): the SQL counts and
|
|
105
|
+
// samples, the pure fold turns the sampled payloads into prop types. The
|
|
106
|
+
// raw payload stops here and never reaches a route.
|
|
107
|
+
customEventVocabulary: async (projectId, opts = {}) => foldCustomEventVocabulary(await runDuckdbQuery(db, buildCustomEventVocabulary(projectId, opts, duckdbDialect))),
|
|
93
108
|
scenes: (projectId, opts = {}) => runDuckdbQuery(db, buildDistinctScenes(projectId, opts, duckdbDialect)),
|
|
94
109
|
timeseries: (projectId, opts = {}) => runDuckdbQuery(db, buildTimeseries(projectId, opts, duckdbDialect)),
|
|
95
110
|
eventTypeCounts: (projectId, opts = {}) => runDuckdbQuery(db, buildEventTypeCounts(projectId, opts, duckdbDialect)),
|
|
111
|
+
// The one bucket series behind `baseline` and `movers` (ADR 0051 §4). The
|
|
112
|
+
// spec carries no registry metric of its own, so the store edge has no row
|
|
113
|
+
// schema to coerce it against — `toMetricBucketRows` parses the numbers,
|
|
114
|
+
// which is what keeps the engines that string-encode 64-bit counts honest.
|
|
115
|
+
metricBuckets: async (projectId, opts) => toMetricBucketRows(await runDuckdbQuery(db, buildMetricBuckets(projectId, opts, duckdbDialect))),
|
|
96
116
|
funnel: (projectId, opts) => runDuckdbQuery(db, buildFunnel(projectId, opts, duckdbDialect)),
|
|
97
117
|
sceneRetention: (projectId, opts) => runDuckdbQuery(db, buildSceneRetention(projectId, opts, duckdbDialect)),
|
|
98
118
|
loadBounceFunnel: (projectId, opts = {}) => runDuckdbQuery(db, buildLoadBounceFunnel(projectId, opts, duckdbDialect)),
|
|
@@ -106,6 +126,29 @@ export async function createDuckdbStore(path) {
|
|
|
106
126
|
putSceneRegions: (projectId, sceneId, regions) => duckdbPutSceneRegions(db, projectId, sceneId, regions),
|
|
107
127
|
getSceneRegions: (projectId, sceneId) => duckdbGetSceneRegions(db, projectId, sceneId),
|
|
108
128
|
listSceneRegions: (projectId) => duckdbListSceneRegions(db, projectId),
|
|
129
|
+
createAnnotation: (projectId, input) => duckdbCreateAnnotation(db, projectId, input),
|
|
130
|
+
listAnnotations: (projectId, opts) => duckdbListAnnotations(db, projectId, opts),
|
|
131
|
+
deleteAnnotation: (projectId, id) => duckdbDeleteAnnotation(db, projectId, id),
|
|
132
|
+
putGlossaryEntry: (projectId, input) => duckdbPutGlossaryEntry(db, projectId, input),
|
|
133
|
+
listGlossary: (projectId, opts) => duckdbListGlossary(db, projectId, opts),
|
|
134
|
+
deleteGlossaryEntry: (projectId, term) => duckdbDeleteGlossaryEntry(db, projectId, term),
|
|
135
|
+
createSavedAnalysis: (projectId, input) => duckdbCreateSavedAnalysis(db, projectId, input),
|
|
136
|
+
listSavedAnalyses: (projectId, opts) => duckdbListSavedAnalyses(db, projectId, opts),
|
|
137
|
+
deleteSavedAnalysis: (projectId, id) => duckdbDeleteSavedAnalysis(db, projectId, id),
|
|
138
|
+
createPanelSpec: (projectId, input) => duckdbCreatePanelSpec(db, projectId, input),
|
|
139
|
+
listPanelSpecs: (projectId, opts) => duckdbListPanelSpecs(db, projectId, opts),
|
|
140
|
+
updatePanelSpec: (projectId, id, input) => duckdbUpdatePanelSpec(db, projectId, id, input),
|
|
141
|
+
deletePanelSpec: (projectId, id) => duckdbDeletePanelSpec(db, projectId, id),
|
|
142
|
+
listSubscriptions: (projectId) => duckdbListSubscriptions(db, projectId),
|
|
143
|
+
listEnabledSubscriptions: (limit) => duckdbListEnabledSubscriptions(db, limit),
|
|
144
|
+
getSubscription: (projectId, id) => duckdbGetSubscription(db, projectId, id),
|
|
145
|
+
createSubscription: (projectId, sub) => duckdbCreateSubscription(db, projectId, sub),
|
|
146
|
+
setSubscriptionEnabled: (projectId, id, enabled) => duckdbSetSubscriptionEnabled(db, projectId, id, enabled),
|
|
147
|
+
deleteSubscription: (projectId, id) => duckdbDeleteSubscription(db, projectId, id),
|
|
148
|
+
recordSubscriptionOutcome: (projectId, id, outcome) => duckdbRecordSubscriptionOutcome(db, projectId, id, outcome),
|
|
149
|
+
getWebhookSecret: (projectId, id) => duckdbGetWebhookSecret(db, projectId, id),
|
|
150
|
+
recordSubscriptionEvent: (entry) => duckdbRecordSubscriptionEvent(db, entry),
|
|
151
|
+
listSubscriptionEvents: (projectId, id, opts) => duckdbListSubscriptionEvents(db, projectId, id, opts),
|
|
109
152
|
async close() {
|
|
110
153
|
await db.close();
|
|
111
154
|
},
|
package/dist/duckdbStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duckdbStore.js","sourceRoot":"","sources":["../src/duckdbStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"duckdbStore.js","sourceRoot":"","sources":["../src/duckdbStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FastifyRequest } from "fastify";
|
|
2
|
+
/**
|
|
3
|
+
* In-process dispatch marker for the collector-hosted MCP transport
|
|
4
|
+
* (ADR 0051 §7, design sketch §G.1).
|
|
5
|
+
*
|
|
6
|
+
* `routes/mcp.ts` answers a `tools/call` by **re-entering the collector's own
|
|
7
|
+
* Fastify app** with `app.inject()` rather than opening a loopback socket back
|
|
8
|
+
* to itself. That keeps a tool call on exactly the same code path as the HTTP
|
|
9
|
+
* read it wraps — the capability check, the project scoping, the Zod
|
|
10
|
+
* querystring validation, the result-envelope hook and the audit hook all run
|
|
11
|
+
* once, in one place, so the MCP surface cannot drift from the HTTP one. It
|
|
12
|
+
* also means the collector never has to know its own externally reachable URL,
|
|
13
|
+
* and no request-controlled value is ever turned into a network destination.
|
|
14
|
+
*
|
|
15
|
+
* Two things must still differ for an inner, MCP-originated request:
|
|
16
|
+
*
|
|
17
|
+
* 1. its audit row is the record of a **tool call**, so it is tagged
|
|
18
|
+
* `surface: "mcp-http"` instead of `"http"`; and
|
|
19
|
+
* 2. the outer `POST /mcp` has already spent the caller's rate-limit budget, so
|
|
20
|
+
* charging the inner read again would halve every key's effective allowance.
|
|
21
|
+
*
|
|
22
|
+
* Both hang off this header. Its value is a 256-bit random token minted once
|
|
23
|
+
* per collector process, held only in memory and never sent anywhere: a remote
|
|
24
|
+
* client cannot guess it, so it can neither forge an `mcp-http` audit row nor
|
|
25
|
+
* exempt itself from the rate limiter by sending the header.
|
|
26
|
+
*/
|
|
27
|
+
export declare const INTERNAL_DISPATCH_HEADER = "x-uptimizr-internal-dispatch";
|
|
28
|
+
/** Mint the per-process dispatch token. Never logged, never leaves the process. */
|
|
29
|
+
export declare function newInternalDispatchToken(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Whether this request is the collector dispatching to itself on behalf of an
|
|
32
|
+
* MCP session. `false` whenever no token was minted (the hosted transport is
|
|
33
|
+
* off), so the check costs nothing on a default deployment.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isInternalDispatch(request: FastifyRequest, token: string | undefined): boolean;
|
|
36
|
+
//# sourceMappingURL=internalDispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internalDispatch.d.ts","sourceRoot":"","sources":["../src/internalDispatch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,wBAAwB,iCAAiC,CAAC;AAEvE,mFAAmF;AACnF,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAS9F"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { randomBytes, timingSafeEqual } from "node:crypto";
|
|
3
|
+
/**
|
|
4
|
+
* In-process dispatch marker for the collector-hosted MCP transport
|
|
5
|
+
* (ADR 0051 §7, design sketch §G.1).
|
|
6
|
+
*
|
|
7
|
+
* `routes/mcp.ts` answers a `tools/call` by **re-entering the collector's own
|
|
8
|
+
* Fastify app** with `app.inject()` rather than opening a loopback socket back
|
|
9
|
+
* to itself. That keeps a tool call on exactly the same code path as the HTTP
|
|
10
|
+
* read it wraps — the capability check, the project scoping, the Zod
|
|
11
|
+
* querystring validation, the result-envelope hook and the audit hook all run
|
|
12
|
+
* once, in one place, so the MCP surface cannot drift from the HTTP one. It
|
|
13
|
+
* also means the collector never has to know its own externally reachable URL,
|
|
14
|
+
* and no request-controlled value is ever turned into a network destination.
|
|
15
|
+
*
|
|
16
|
+
* Two things must still differ for an inner, MCP-originated request:
|
|
17
|
+
*
|
|
18
|
+
* 1. its audit row is the record of a **tool call**, so it is tagged
|
|
19
|
+
* `surface: "mcp-http"` instead of `"http"`; and
|
|
20
|
+
* 2. the outer `POST /mcp` has already spent the caller's rate-limit budget, so
|
|
21
|
+
* charging the inner read again would halve every key's effective allowance.
|
|
22
|
+
*
|
|
23
|
+
* Both hang off this header. Its value is a 256-bit random token minted once
|
|
24
|
+
* per collector process, held only in memory and never sent anywhere: a remote
|
|
25
|
+
* client cannot guess it, so it can neither forge an `mcp-http` audit row nor
|
|
26
|
+
* exempt itself from the rate limiter by sending the header.
|
|
27
|
+
*/
|
|
28
|
+
export const INTERNAL_DISPATCH_HEADER = "x-uptimizr-internal-dispatch";
|
|
29
|
+
/** Mint the per-process dispatch token. Never logged, never leaves the process. */
|
|
30
|
+
export function newInternalDispatchToken() {
|
|
31
|
+
return randomBytes(32).toString("base64url");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether this request is the collector dispatching to itself on behalf of an
|
|
35
|
+
* MCP session. `false` whenever no token was minted (the hosted transport is
|
|
36
|
+
* off), so the check costs nothing on a default deployment.
|
|
37
|
+
*/
|
|
38
|
+
export function isInternalDispatch(request, token) {
|
|
39
|
+
if (token == null)
|
|
40
|
+
return false;
|
|
41
|
+
const header = request.headers[INTERNAL_DISPATCH_HEADER];
|
|
42
|
+
if (typeof header !== "string")
|
|
43
|
+
return false;
|
|
44
|
+
const supplied = Buffer.from(header, "utf8");
|
|
45
|
+
const expected = Buffer.from(token, "utf8");
|
|
46
|
+
// `timingSafeEqual` throws on a length mismatch, so compare lengths first —
|
|
47
|
+
// the token's length is fixed and public, so leaking it reveals nothing.
|
|
48
|
+
return supplied.length === expected.length && timingSafeEqual(supplied, expected);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=internalDispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internalDispatch.js","sourceRoot":"","sources":["../src/internalDispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AAEvE,mFAAmF;AACnF,MAAM,UAAU,wBAAwB;IACtC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAuB,EAAE,KAAyB;IACnF,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACzD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,4EAA4E;IAC5E,yEAAyE;IACzE,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryStore.d.ts","sourceRoot":"","sources":["../src/memoryStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memoryStore.d.ts","sourceRoot":"","sources":["../src/memoryStore.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIV,gBAAgB,EAUjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgBjD,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC3C,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,MAAM,EACN,YAAwB,EACxB,KAAoB,GACrB,EAAE,kBAAkB,GAAG,cAAc,CAgxBrC"}
|