@mongrov/analytics 0.8.9 → 0.9.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/dist/core/context.d.ts +1 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +0 -10
- package/dist/core/context.js.map +1 -1
- package/dist/core/engine.js.map +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/extensions.d.ts.map +1 -1
- package/dist/core/extensions.js.map +1 -1
- package/dist/core/factory.d.ts.map +1 -1
- package/dist/core/factory.js +3 -3
- package/dist/core/factory.js.map +1 -1
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +1 -2
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/index.d.ts +11 -11
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +15 -15
- package/dist/core/index.js.map +1 -1
- package/dist/core/insight.d.ts.map +1 -1
- package/dist/core/insight.js.map +1 -1
- package/dist/core/machine.d.ts +1 -1
- package/dist/core/machine.d.ts.map +1 -1
- package/dist/core/machine.js.map +1 -1
- package/dist/core/migrations.d.ts +1 -1
- package/dist/core/migrations.d.ts.map +1 -1
- package/dist/core/migrations.js +37 -1
- package/dist/core/migrations.js.map +1 -1
- package/dist/core/persistence.d.ts.map +1 -1
- package/dist/core/persistence.js.map +1 -1
- package/dist/core/retention.d.ts.map +1 -1
- package/dist/core/retention.js.map +1 -1
- package/dist/core/sampling.d.ts +3 -3
- package/dist/core/sampling.d.ts.map +1 -1
- package/dist/core/sampling.js +1 -1
- package/dist/core/sampling.js.map +1 -1
- package/dist/core/schemas.d.ts +32 -0
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +61 -4
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/types.d.ts +26 -26
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/warehouse.d.ts +0 -5
- package/dist/core/warehouse.d.ts.map +1 -1
- package/dist/core/warehouse.js +2 -1
- package/dist/core/warehouse.js.map +1 -1
- package/dist/core/watermark-cache.d.ts +5 -5
- package/dist/core/watermark-cache.d.ts.map +1 -1
- package/dist/core/watermark-cache.js.map +1 -1
- package/dist/rules/__fakes__/fakeClock.d.ts +2 -2
- package/dist/rules/__fakes__/fakeClock.d.ts.map +1 -1
- package/dist/rules/__fakes__/fakeEngine.d.ts +4 -4
- package/dist/rules/__fakes__/fakeEngine.d.ts.map +1 -1
- package/dist/rules/__fakes__/fakeEngine.js.map +1 -1
- package/dist/rules/baseline-reader.d.ts +4 -4
- package/dist/rules/baseline-reader.d.ts.map +1 -1
- package/dist/rules/baseline-reader.js +4 -2
- package/dist/rules/baseline-reader.js.map +1 -1
- package/dist/rules/compiler-cache.d.ts +3 -3
- package/dist/rules/compiler-cache.d.ts.map +1 -1
- package/dist/rules/compiler-cache.js.map +1 -1
- package/dist/rules/compiler.d.ts +1 -2
- package/dist/rules/compiler.d.ts.map +1 -1
- package/dist/rules/compiler.js +8 -7
- package/dist/rules/compiler.js.map +1 -1
- package/dist/rules/defaults/index.d.ts +2 -2
- package/dist/rules/defaults/index.d.ts.map +1 -1
- package/dist/rules/defaults/index.js +2 -2
- package/dist/rules/defaults/index.js.map +1 -1
- package/dist/rules/defaults/loader.d.ts +1 -1
- package/dist/rules/defaults/loader.d.ts.map +1 -1
- package/dist/rules/defaults/loader.js.map +1 -1
- package/dist/rules/defaults/luminx.d.ts.map +1 -1
- package/dist/rules/defaults/luminx.js.map +1 -1
- package/dist/rules/defaults/viva.d.ts.map +1 -1
- package/dist/rules/defaults/viva.js.map +1 -1
- package/dist/rules/defaults/yogaring.d.ts.map +1 -1
- package/dist/rules/defaults/yogaring.js.map +1 -1
- package/dist/rules/defaults/ziva.d.ts.map +1 -1
- package/dist/rules/defaults/ziva.js.map +1 -1
- package/dist/rules/emitter.d.ts +4 -4
- package/dist/rules/emitter.d.ts.map +1 -1
- package/dist/rules/emitter.js.map +1 -1
- package/dist/rules/evaluator.d.ts +3 -3
- package/dist/rules/evaluator.d.ts.map +1 -1
- package/dist/rules/evaluator.js +5 -2
- package/dist/rules/evaluator.js.map +1 -1
- package/dist/rules/factory.d.ts.map +1 -1
- package/dist/rules/factory.js +2 -2
- package/dist/rules/factory.js.map +1 -1
- package/dist/rules/hooks/useRuleRegistry.d.ts +2 -2
- package/dist/rules/hooks/useRuleRegistry.d.ts.map +1 -1
- package/dist/rules/hooks/useRuleRegistry.js +2 -2
- package/dist/rules/hooks/useRuleRegistry.js.map +1 -1
- package/dist/rules/hooks/useRuleViolations.d.ts +2 -2
- package/dist/rules/hooks/useRuleViolations.d.ts.map +1 -1
- package/dist/rules/hooks/useRuleViolations.js +1 -1
- package/dist/rules/hooks/useRuleViolations.js.map +1 -1
- package/dist/rules/index.d.ts +11 -11
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +12 -12
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/registry.d.ts +12 -12
- package/dist/rules/registry.d.ts.map +1 -1
- package/dist/rules/registry.js.map +1 -1
- package/dist/rules/schema.d.ts +6 -6
- package/dist/rules/schema.d.ts.map +1 -1
- package/dist/rules/schema.js.map +1 -1
- package/dist/rules/throttle.d.ts +3 -3
- package/dist/rules/throttle.d.ts.map +1 -1
- package/dist/rules/types.d.ts +16 -16
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/rules/validator.d.ts +2 -2
- package/dist/rules/validator.d.ts.map +1 -1
- package/dist/rules/validator.js.map +1 -1
- package/dist/sync/baseline-compute.d.ts +5 -5
- package/dist/sync/baseline-compute.d.ts.map +1 -1
- package/dist/sync/baseline-compute.js +36 -6
- package/dist/sync/baseline-compute.js.map +1 -1
- package/dist/sync/buffer.d.ts.map +1 -1
- package/dist/sync/buffer.js.map +1 -1
- package/dist/sync/context.d.ts +1 -1
- package/dist/sync/context.d.ts.map +1 -1
- package/dist/sync/context.js +0 -7
- package/dist/sync/context.js.map +1 -1
- package/dist/sync/factory.d.ts +3 -3
- package/dist/sync/factory.d.ts.map +1 -1
- package/dist/sync/factory.js +20 -0
- package/dist/sync/factory.js.map +1 -1
- package/dist/sync/fetcher.d.ts +4 -4
- package/dist/sync/fetcher.d.ts.map +1 -1
- package/dist/sync/fetcher.js +6 -4
- package/dist/sync/fetcher.js.map +1 -1
- package/dist/sync/flusher.d.ts +1 -1
- package/dist/sync/flusher.d.ts.map +1 -1
- package/dist/sync/flusher.js +55 -9
- package/dist/sync/flusher.js.map +1 -1
- package/dist/sync/hooks.d.ts.map +1 -1
- package/dist/sync/hooks.js +2 -2
- package/dist/sync/hooks.js.map +1 -1
- package/dist/sync/index.d.ts +15 -15
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +13 -13
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/manager.d.ts +1 -1
- package/dist/sync/manager.d.ts.map +1 -1
- package/dist/sync/mapper/activity.d.ts.map +1 -1
- package/dist/sync/mapper/activity.js.map +1 -1
- package/dist/sync/mapper/battery.d.ts.map +1 -1
- package/dist/sync/mapper/battery.js.map +1 -1
- package/dist/sync/mapper/firmware.d.ts +1 -1
- package/dist/sync/mapper/firmware.d.ts.map +1 -1
- package/dist/sync/mapper/firmware.js.map +1 -1
- package/dist/sync/mapper/heart-rate.d.ts.map +1 -1
- package/dist/sync/mapper/heart-rate.js.map +1 -1
- package/dist/sync/mapper/hrv.d.ts.map +1 -1
- package/dist/sync/mapper/hrv.js.map +1 -1
- package/dist/sync/mapper/ring-config.d.ts.map +1 -1
- package/dist/sync/mapper/ring-config.js +7 -1
- package/dist/sync/mapper/ring-config.js.map +1 -1
- package/dist/sync/mapper/schema.d.ts.map +1 -1
- package/dist/sync/mapper/schema.js.map +1 -1
- package/dist/sync/mapper/sleep.d.ts +20 -14
- package/dist/sync/mapper/sleep.d.ts.map +1 -1
- package/dist/sync/mapper/sleep.js +23 -20
- package/dist/sync/mapper/sleep.js.map +1 -1
- package/dist/sync/mapper/spo2.d.ts.map +1 -1
- package/dist/sync/mapper/spo2.js.map +1 -1
- package/dist/sync/mapper/temperature.d.ts.map +1 -1
- package/dist/sync/mapper/temperature.js.map +1 -1
- package/dist/sync/mapper/time.js +1 -1
- package/dist/sync/mapper/time.js.map +1 -1
- package/dist/sync/mapper/types.d.ts +1 -8
- package/dist/sync/mapper/types.d.ts.map +1 -1
- package/dist/sync/mapper/types.js +1 -1
- package/dist/sync/overflow.d.ts.map +1 -1
- package/dist/sync/overflow.js.map +1 -1
- package/dist/sync/pending_closes.d.ts.map +1 -1
- package/dist/sync/pending_closes.js.map +1 -1
- package/dist/sync/pusher.d.ts +1 -1
- package/dist/sync/pusher.d.ts.map +1 -1
- package/dist/sync/pusher.js +5 -3
- package/dist/sync/pusher.js.map +1 -1
- package/dist/sync/scheduler.d.ts +1 -1
- package/dist/sync/scheduler.d.ts.map +1 -1
- package/dist/sync/scheduler.js.map +1 -1
- package/dist/sync/triggers.d.ts +1 -1
- package/dist/sync/triggers.d.ts.map +1 -1
- package/dist/sync/watermark.d.ts.map +1 -1
- package/dist/sync/watermark.js.map +1 -1
- package/dist/tools/__fakes__/engine.d.ts.map +1 -1
- package/dist/tools/__fakes__/engine.js.map +1 -1
- package/dist/tools/audit.d.ts.map +1 -1
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/budget.d.ts.map +1 -1
- package/dist/tools/budget.js.map +1 -1
- package/dist/tools/factory.d.ts +7 -7
- package/dist/tools/factory.d.ts.map +1 -1
- package/dist/tools/factory.js +4 -4
- package/dist/tools/factory.js.map +1 -1
- package/dist/tools/formatters/index.d.ts +1 -1
- package/dist/tools/formatters/index.d.ts.map +1 -1
- package/dist/tools/formatters/index.js +1 -1
- package/dist/tools/formatters/index.js.map +1 -1
- package/dist/tools/formatters/spo2.d.ts.map +1 -1
- package/dist/tools/formatters/spo2.js.map +1 -1
- package/dist/tools/formatters/text.d.ts.map +1 -1
- package/dist/tools/formatters/text.js.map +1 -1
- package/dist/tools/impls/activity.d.ts +1 -1
- package/dist/tools/impls/activity.d.ts.map +1 -1
- package/dist/tools/impls/activity.js +2 -2
- package/dist/tools/impls/activity.js.map +1 -1
- package/dist/tools/impls/anomaly.d.ts +1 -1
- package/dist/tools/impls/anomaly.d.ts.map +1 -1
- package/dist/tools/impls/anomaly.js.map +1 -1
- package/dist/tools/impls/compare.d.ts +1 -1
- package/dist/tools/impls/compare.d.ts.map +1 -1
- package/dist/tools/impls/compare.js.map +1 -1
- package/dist/tools/impls/hrv.d.ts +1 -1
- package/dist/tools/impls/hrv.d.ts.map +1 -1
- package/dist/tools/impls/hrv.js +1 -1
- package/dist/tools/impls/hrv.js.map +1 -1
- package/dist/tools/impls/insights.d.ts +1 -1
- package/dist/tools/impls/insights.d.ts.map +1 -1
- package/dist/tools/impls/insights.js +1 -1
- package/dist/tools/impls/insights.js.map +1 -1
- package/dist/tools/impls/sleep.d.ts +1 -1
- package/dist/tools/impls/sleep.d.ts.map +1 -1
- package/dist/tools/impls/sleep.js +1 -1
- package/dist/tools/impls/sleep.js.map +1 -1
- package/dist/tools/impls/spo2.d.ts +1 -1
- package/dist/tools/impls/spo2.d.ts.map +1 -1
- package/dist/tools/impls/spo2.js +2 -2
- package/dist/tools/impls/spo2.js.map +1 -1
- package/dist/tools/index.d.ts +7 -7
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp/index.d.ts +2 -2
- package/dist/tools/mcp/index.d.ts.map +1 -1
- package/dist/tools/mcp/index.js +1 -1
- package/dist/tools/mcp/index.js.map +1 -1
- package/dist/tools/mcp/server.d.ts +1 -1
- package/dist/tools/mcp/server.d.ts.map +1 -1
- package/dist/tools/mcp/server.js.map +1 -1
- package/dist/tools/mcp/transports/http.d.ts +1 -1
- package/dist/tools/mcp/transports/http.d.ts.map +1 -1
- package/dist/tools/mcp/transports/http.js.map +1 -1
- package/dist/tools/mcp/transports/stdio.d.ts +1 -1
- package/dist/tools/mcp/transports/stdio.d.ts.map +1 -1
- package/dist/tools/mcp/transports/stdio.js.map +1 -1
- package/dist/tools/rate-limit.d.ts +1 -1
- package/dist/tools/rate-limit.d.ts.map +1 -1
- package/dist/tools/rate-limit.js.map +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/wrap.d.ts.map +1 -1
- package/dist/tools/wrap.js +0 -2
- package/dist/tools/wrap.js.map +1 -1
- package/package.json +1 -1
package/dist/core/sampling.d.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* safe, and `invalidate()` covers the case where a sync just wrote a new
|
|
29
29
|
* config row.
|
|
30
30
|
*/
|
|
31
|
-
import {
|
|
31
|
+
import type { MetricId, MetricSamplingMinutes } from './metric_metadata';
|
|
32
32
|
import type { AnalyticsEngine, AnalyticsLogger } from './types';
|
|
33
33
|
/** Default memo lifetime. Ring schedules change on the order of never. */
|
|
34
34
|
export declare const SAMPLING_CACHE_TTL_MS: number;
|
|
@@ -52,9 +52,9 @@ export interface SamplingResolver {
|
|
|
52
52
|
* touching the database — the right behaviour for register-time
|
|
53
53
|
* validation, which runs before any device context exists.
|
|
54
54
|
*/
|
|
55
|
-
resolve(metric: MetricId, deviceId?: string)
|
|
55
|
+
resolve: (metric: MetricId, deviceId?: string) => Promise<EffectiveSampling>;
|
|
56
56
|
/** Drop memoized entries for a device (all metrics), or everything. */
|
|
57
|
-
invalidate(deviceId?: string)
|
|
57
|
+
invalidate: (deviceId?: string) => void;
|
|
58
58
|
}
|
|
59
59
|
/** The fallback, with no I/O. */
|
|
60
60
|
export declare function fallbackSampling(metric: MetricId): EffectiveSampling;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampling.d.ts","sourceRoot":"","sources":["../../src/core/sampling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"sampling.d.ts","sourceRoot":"","sources":["../../src/core/sampling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAO/D,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,QAAiB,CAAA;AAEnD,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,OAAO,EAAE,qBAAqB,CAAA;IAC9B,uEAAuE;IACvE,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAAA;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAA;IAC3C,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5E,uEAAuE;IACvE,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAWD,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,iBAAiB,CAKpE;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,sBAAsB,GAC7B,gBAAgB,CA8DlB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,qBAAqB,EAC/B,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAIf"}
|
package/dist/core/sampling.js
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
* safe, and `invalidate()` covers the case where a sync just wrote a new
|
|
29
29
|
* config row.
|
|
30
30
|
*/
|
|
31
|
-
import { METRIC_METADATA, } from './metric_metadata';
|
|
32
31
|
import { describeError } from './errors';
|
|
32
|
+
import { METRIC_METADATA, } from './metric_metadata';
|
|
33
33
|
/** Default memo lifetime. Ring schedules change on the order of never. */
|
|
34
34
|
export const SAMPLING_CACHE_TTL_MS = 10 * 60 * 1000;
|
|
35
35
|
/** The fallback, with no I/O. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampling.js","sourceRoot":"","sources":["../../src/core/sampling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;
|
|
1
|
+
{"version":3,"file":"sampling.js","sourceRoot":"","sources":["../../src/core/sampling.ts"],"names":[],"mappings":"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"}
|
package/dist/core/schemas.d.ts
CHANGED
|
@@ -128,6 +128,29 @@ export declare function qualifyDdl(baseDdl: string, table: TableName, catalog: s
|
|
|
128
128
|
*
|
|
129
129
|
* Exported for tests; call sites should prefer `LOCAL_SCHEMAS`.
|
|
130
130
|
*/
|
|
131
|
+
/**
|
|
132
|
+
* What identifies a row, per table (principle 66).
|
|
133
|
+
*
|
|
134
|
+
* Re-syncing the same data must be a no-op rather than an append. Ten of the
|
|
135
|
+
* twelve sync-written tables had no key at all, so a repeated sync silently
|
|
136
|
+
* duplicated — measured on device as `sleep_stage` 16399 rows for `sleep_raw`
|
|
137
|
+
* 2082 blocks, which then skews the percentiles in `user_baseline`.
|
|
138
|
+
*
|
|
139
|
+
* The tenant triple is spelled out rather than relying on `device_id` to imply
|
|
140
|
+
* it (principle 26 derives device_id from brand + hardware_id, so brand IS
|
|
141
|
+
* recoverable). A key whose scope you have to derive from another principle is
|
|
142
|
+
* one someone will get wrong later.
|
|
143
|
+
*
|
|
144
|
+
* LOCAL ONLY. These become `PRIMARY KEY` in `LOCAL_SCHEMAS`; the Iceberg
|
|
145
|
+
* `SCHEMAS` variant is untouched, matching migration 5's rule that the client
|
|
146
|
+
* never destructively rewrites the attached remote catalog.
|
|
147
|
+
*
|
|
148
|
+
* Absent on purpose:
|
|
149
|
+
* - `tool_call_audit` — an append-only audit log written by `tools/audit.ts`,
|
|
150
|
+
* not by sync. Two identical calls at the same instant are two real events.
|
|
151
|
+
* - `sleep_session`, `device_config` — already carry their own PRIMARY KEY.
|
|
152
|
+
*/
|
|
153
|
+
export declare const IDENTITY_COLUMNS: Readonly<Partial<Record<TableName, readonly string[]>>>;
|
|
131
154
|
export declare function toLocalDdl(baseDdl: string): string;
|
|
132
155
|
/**
|
|
133
156
|
* Local-catalog DDL variants of `SCHEMAS` — same tables, same columns,
|
|
@@ -136,6 +159,15 @@ export declare function toLocalDdl(baseDdl: string): string;
|
|
|
136
159
|
* propagate automatically.
|
|
137
160
|
*/
|
|
138
161
|
export declare const LOCAL_SCHEMAS: Readonly<Record<TableName, string>>;
|
|
162
|
+
/**
|
|
163
|
+
* Inject the declared identity tuple as a `PRIMARY KEY` on the local DDL.
|
|
164
|
+
*
|
|
165
|
+
* A no-op for tables absent from `IDENTITY_COLUMNS`, and for DDL that already
|
|
166
|
+
* declares one — `sleep_session` and `device_config` spell their own key in
|
|
167
|
+
* the base schema, and two PRIMARY KEY clauses is a parser error rather than
|
|
168
|
+
* a merge.
|
|
169
|
+
*/
|
|
170
|
+
export declare function withIdentityKey(table: TableName, localDdl: string): string;
|
|
139
171
|
/**
|
|
140
172
|
* Create every warehouse table under `<catalog>.<table>`, in `TABLE_NAMES` order.
|
|
141
173
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,qEAAqE;AACrE,eAAO,MAAM,WAAW,uPAiBd,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,SAAS,CAEnD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CA4MtD,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,wJAWhB,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF,MAAM,CA2BR;AAsBD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED;;;;;;GAMG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAgBjF,CAAA;AAKJ,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAI7D,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAW,EACtD,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
package/dist/core/schemas.js
CHANGED
|
@@ -345,8 +345,11 @@ const REMOTE_NAMESPACE_VIEW = 'default';
|
|
|
345
345
|
* parameters, so brand/familyId are inlined — escaping is mandatory, not
|
|
346
346
|
* optional, even though both values are server-issued.
|
|
347
347
|
*/
|
|
348
|
+
const SINGLE_QUOTE_RE = /'/g;
|
|
349
|
+
const BARE_IDENT_RE = /^[A-Z_]\w*$/i;
|
|
350
|
+
const PARTITIONED_BY_TAIL_RE = /\)\s*PARTITIONED BY[\s\S]*$/;
|
|
348
351
|
function sqlLiteral(value) {
|
|
349
|
-
return `'${value.replace(
|
|
352
|
+
return `'${value.replace(SINGLE_QUOTE_RE, `''`)}'`;
|
|
350
353
|
}
|
|
351
354
|
/** `DROP VIEW IF EXISTS v_{table}` for detach + brand switch. */
|
|
352
355
|
export function dropViewDdl(table) {
|
|
@@ -377,7 +380,7 @@ export function quoteQualifier(qualifier) {
|
|
|
377
380
|
// churns every emitted statement and makes the SQL harder to read for
|
|
378
381
|
// the common `memory` / `main` case; only names that actually need it
|
|
379
382
|
// get quoted.
|
|
380
|
-
if (
|
|
383
|
+
if (BARE_IDENT_RE.test(part))
|
|
381
384
|
return part;
|
|
382
385
|
return `"${part.split('"').join('""')}"`;
|
|
383
386
|
})
|
|
@@ -398,11 +401,51 @@ export function qualifyDdl(baseDdl, table, catalog) {
|
|
|
398
401
|
*
|
|
399
402
|
* Exported for tests; call sites should prefer `LOCAL_SCHEMAS`.
|
|
400
403
|
*/
|
|
404
|
+
/**
|
|
405
|
+
* What identifies a row, per table (principle 66).
|
|
406
|
+
*
|
|
407
|
+
* Re-syncing the same data must be a no-op rather than an append. Ten of the
|
|
408
|
+
* twelve sync-written tables had no key at all, so a repeated sync silently
|
|
409
|
+
* duplicated — measured on device as `sleep_stage` 16399 rows for `sleep_raw`
|
|
410
|
+
* 2082 blocks, which then skews the percentiles in `user_baseline`.
|
|
411
|
+
*
|
|
412
|
+
* The tenant triple is spelled out rather than relying on `device_id` to imply
|
|
413
|
+
* it (principle 26 derives device_id from brand + hardware_id, so brand IS
|
|
414
|
+
* recoverable). A key whose scope you have to derive from another principle is
|
|
415
|
+
* one someone will get wrong later.
|
|
416
|
+
*
|
|
417
|
+
* LOCAL ONLY. These become `PRIMARY KEY` in `LOCAL_SCHEMAS`; the Iceberg
|
|
418
|
+
* `SCHEMAS` variant is untouched, matching migration 5's rule that the client
|
|
419
|
+
* never destructively rewrites the attached remote catalog.
|
|
420
|
+
*
|
|
421
|
+
* Absent on purpose:
|
|
422
|
+
* - `tool_call_audit` — an append-only audit log written by `tools/audit.ts`,
|
|
423
|
+
* not by sync. Two identical calls at the same instant are two real events.
|
|
424
|
+
* - `sleep_session`, `device_config` — already carry their own PRIMARY KEY.
|
|
425
|
+
*/
|
|
426
|
+
export const IDENTITY_COLUMNS = Object.freeze({
|
|
427
|
+
// One reading per device per instant.
|
|
428
|
+
hrv: ['brand', 'family_id', 'user_id', 'device_id', 'ts'],
|
|
429
|
+
heart_rate: ['brand', 'family_id', 'user_id', 'device_id', 'ts'],
|
|
430
|
+
spo2: ['brand', 'family_id', 'user_id', 'device_id', 'ts'],
|
|
431
|
+
temperature: ['brand', 'family_id', 'user_id', 'device_id', 'ts'],
|
|
432
|
+
activity: ['brand', 'family_id', 'user_id', 'device_id', 'ts'],
|
|
433
|
+
activity_bucket: ['brand', 'family_id', 'user_id', 'device_id', 'ts'],
|
|
434
|
+
device_battery: ['brand', 'family_id', 'user_id', 'device_id', 'ts'],
|
|
435
|
+
// `event_type` is part of identity: a sync_completed and a battery_low can
|
|
436
|
+
// legitimately share a timestamp.
|
|
437
|
+
device_event: ['brand', 'family_id', 'user_id', 'device_id', 'ts', 'event_type'],
|
|
438
|
+
// A stage belongs to a session; the session is part of what identifies it.
|
|
439
|
+
sleep_stage: ['brand', 'family_id', 'user_id', 'device_id', 'session_id', 'ts'],
|
|
440
|
+
sleep_raw: ['brand', 'family_id', 'user_id', 'device_id', 'ts_session_start', 'ts'],
|
|
441
|
+
});
|
|
442
|
+
// The DDL's closing paren, which is where the key clause is spliced in.
|
|
443
|
+
const DDL_TAIL_RE = /\n\);$/;
|
|
401
444
|
export function toLocalDdl(baseDdl) {
|
|
402
445
|
// The clause always terminates the DDL, and its column list contains
|
|
403
446
|
// nested parens (`day(ts)`), so strip from the closing table paren to
|
|
404
447
|
// end-of-string rather than trying to match the paren group.
|
|
405
|
-
return baseDdl.replace(
|
|
448
|
+
return baseDdl.replace(PARTITIONED_BY_TAIL_RE, ');');
|
|
406
449
|
}
|
|
407
450
|
/**
|
|
408
451
|
* Local-catalog DDL variants of `SCHEMAS` — same tables, same columns,
|
|
@@ -410,7 +453,21 @@ export function toLocalDdl(baseDdl) {
|
|
|
410
453
|
* stripped. Derived programmatically so schema changes in `SCHEMAS`
|
|
411
454
|
* propagate automatically.
|
|
412
455
|
*/
|
|
413
|
-
export const LOCAL_SCHEMAS = Object.freeze(Object.fromEntries(TABLE_NAMES.map(table => [table, toLocalDdl(SCHEMAS[table])])));
|
|
456
|
+
export const LOCAL_SCHEMAS = Object.freeze(Object.fromEntries(TABLE_NAMES.map(table => [table, withIdentityKey(table, toLocalDdl(SCHEMAS[table]))])));
|
|
457
|
+
/**
|
|
458
|
+
* Inject the declared identity tuple as a `PRIMARY KEY` on the local DDL.
|
|
459
|
+
*
|
|
460
|
+
* A no-op for tables absent from `IDENTITY_COLUMNS`, and for DDL that already
|
|
461
|
+
* declares one — `sleep_session` and `device_config` spell their own key in
|
|
462
|
+
* the base schema, and two PRIMARY KEY clauses is a parser error rather than
|
|
463
|
+
* a merge.
|
|
464
|
+
*/
|
|
465
|
+
export function withIdentityKey(table, localDdl) {
|
|
466
|
+
const cols = IDENTITY_COLUMNS[table];
|
|
467
|
+
if (!cols || localDdl.includes('PRIMARY KEY'))
|
|
468
|
+
return localDdl;
|
|
469
|
+
return localDdl.replace(DDL_TAIL_RE, `,\n PRIMARY KEY (${cols.join(', ')})\n);`);
|
|
470
|
+
}
|
|
414
471
|
/**
|
|
415
472
|
* Create every warehouse table under `<catalog>.<table>`, in `TABLE_NAMES` order.
|
|
416
473
|
*
|
package/dist/core/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export interface TokenResponse {
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
export interface TokenVendor {
|
|
37
|
-
fetch(context: TokenContext)
|
|
37
|
+
fetch: (context: TokenContext) => Promise<TokenResponse>;
|
|
38
38
|
}
|
|
39
39
|
/** App-provided family membership. Reads Family.memberIds from RxDB in v1. */
|
|
40
40
|
export type FamilyMembersProvider = (ctx: {
|
|
@@ -42,10 +42,10 @@ export type FamilyMembersProvider = (ctx: {
|
|
|
42
42
|
familyId: string;
|
|
43
43
|
}) => Promise<string[]>;
|
|
44
44
|
export interface AnalyticsLogger {
|
|
45
|
-
debug(message: string, meta?: Record<string, unknown>)
|
|
46
|
-
info(message: string, meta?: Record<string, unknown>)
|
|
47
|
-
warn(message: string, meta?: Record<string, unknown>)
|
|
48
|
-
error(message: string, meta?: Record<string, unknown>)
|
|
45
|
+
debug: (message: string, meta?: Record<string, unknown>) => void;
|
|
46
|
+
info: (message: string, meta?: Record<string, unknown>) => void;
|
|
47
|
+
warn: (message: string, meta?: Record<string, unknown>) => void;
|
|
48
|
+
error: (message: string, meta?: Record<string, unknown>) => void;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Structural KVStore contract used by the analytics package. Kept local so
|
|
@@ -53,9 +53,9 @@ export interface AnalyticsLogger {
|
|
|
53
53
|
* The app supplies an implementation (typically @mongrov/db KVStore).
|
|
54
54
|
*/
|
|
55
55
|
export interface KVStore {
|
|
56
|
-
get<T = unknown>(key: string)
|
|
57
|
-
set<T = unknown>(key: string, value: T)
|
|
58
|
-
delete(key: string)
|
|
56
|
+
get: <T = unknown>(key: string) => Promise<T | undefined>;
|
|
57
|
+
set: <T = unknown>(key: string, value: T) => Promise<void>;
|
|
58
|
+
delete: (key: string) => Promise<void>;
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* Structural EventBus contract from @mongrov/data-access. Optional peer:
|
|
@@ -63,9 +63,9 @@ export interface KVStore {
|
|
|
63
63
|
* semantics documented in data-access/spec.md.
|
|
64
64
|
*/
|
|
65
65
|
export interface EventBus {
|
|
66
|
-
emit<T>(name: string, payload: T)
|
|
67
|
-
subscribe<T>(name: string, handler: (payload: T) => void)
|
|
68
|
-
subscribePattern<T>(pattern: string, handler: (name: string, payload: T) => void)
|
|
66
|
+
emit: <T>(name: string, payload: T) => void;
|
|
67
|
+
subscribe: <T>(name: string, handler: (payload: T) => void) => Unsubscribe;
|
|
68
|
+
subscribePattern: <T>(pattern: string, handler: (name: string, payload: T) => void) => Unsubscribe;
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
71
|
* Attach mode — whether to wire a remote R2 Iceberg catalog (`'r2'`) or
|
|
@@ -116,16 +116,16 @@ export interface R2AnalyticsConfig extends CommonAnalyticsConfig {
|
|
|
116
116
|
}
|
|
117
117
|
export type AnalyticsConfig = LocalAnalyticsConfig | R2AnalyticsConfig;
|
|
118
118
|
export interface AnalyticsAppender {
|
|
119
|
-
appendRow(values: unknown[])
|
|
120
|
-
flush()
|
|
121
|
-
close()
|
|
119
|
+
appendRow: (values: unknown[]) => void;
|
|
120
|
+
flush: () => void;
|
|
121
|
+
close: () => void;
|
|
122
122
|
}
|
|
123
123
|
export interface AnalyticsEngine {
|
|
124
|
-
attach(ctx: AttachContext)
|
|
125
|
-
detach()
|
|
126
|
-
execute<T = unknown>(sql: string, params?: Record<string, unknown>)
|
|
127
|
-
stream<T = unknown>(sql: string, params?: Record<string, unknown>)
|
|
128
|
-
createAppender(table: string)
|
|
124
|
+
attach: (ctx: AttachContext) => Promise<void>;
|
|
125
|
+
detach: () => Promise<void>;
|
|
126
|
+
execute: <T = unknown>(sql: string, params?: Record<string, unknown>) => Promise<T[]>;
|
|
127
|
+
stream: <T = unknown>(sql: string, params?: Record<string, unknown>) => AsyncIterable<T[]>;
|
|
128
|
+
createAppender: (table: string) => AnalyticsAppender;
|
|
129
129
|
readonly state: AnalyticsState;
|
|
130
130
|
/** Last machine error surfaced; cleared on successful recovery. */
|
|
131
131
|
readonly lastError: Error | null;
|
|
@@ -138,7 +138,7 @@ export interface AnalyticsEngine {
|
|
|
138
138
|
* wiring the R2 pusher/fetcher in local mode.
|
|
139
139
|
*/
|
|
140
140
|
readonly mode: AnalyticsMode;
|
|
141
|
-
subscribe(listener: (s: AnalyticsState) => void)
|
|
141
|
+
subscribe: (listener: (s: AnalyticsState) => void) => Unsubscribe;
|
|
142
142
|
/**
|
|
143
143
|
* Family member userIds for the current attach context (principle 39 —
|
|
144
144
|
* "Rules engine and AI tools share the same source of truth").
|
|
@@ -152,7 +152,7 @@ export interface AnalyticsEngine {
|
|
|
152
152
|
* local mode (no family fanout) — callers treat empty as "no fanout",
|
|
153
153
|
* never as "denied".
|
|
154
154
|
*/
|
|
155
|
-
getFamilyMembers()
|
|
155
|
+
getFamilyMembers: () => Promise<string[]>;
|
|
156
156
|
/**
|
|
157
157
|
* Stamp `dismissed_at` on one insight (Sprint 5 §7b). Backs the app
|
|
158
158
|
* registry's `insight.dismiss` mutation — `@mongrov/data-access` types
|
|
@@ -160,18 +160,18 @@ export interface AnalyticsEngine {
|
|
|
160
160
|
*
|
|
161
161
|
* Authorized by ownership: `userId` must match the insight's owner.
|
|
162
162
|
*/
|
|
163
|
-
dismissInsight(args: {
|
|
163
|
+
dismissInsight: (args: {
|
|
164
164
|
insightId: string;
|
|
165
165
|
userId: string;
|
|
166
|
-
})
|
|
167
|
-
setRetention(days: number)
|
|
166
|
+
}) => Promise<void>;
|
|
167
|
+
setRetention: (days: number) => Promise<void>;
|
|
168
168
|
/**
|
|
169
169
|
* Return the last successfully-attached ctx (persisted via KVStore) if it
|
|
170
170
|
* was written within the freshness window (24h). Apps may pass the result
|
|
171
171
|
* to `attach()` to auto-restore after a cold start.
|
|
172
172
|
*/
|
|
173
|
-
getLastAttach(brand: string)
|
|
174
|
-
close()
|
|
173
|
+
getLastAttach: (brand: string) => Promise<AttachContext | null>;
|
|
174
|
+
close: () => Promise<void>;
|
|
175
175
|
}
|
|
176
176
|
/** Insight categories per spec §Table schema (`insight.kind`). */
|
|
177
177
|
export type InsightKind = 'threshold' | 'pattern' | 'baseline_shift' | 'factor';
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,mCAAmC;AACnC,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA;AAEpC,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAA;AAE1C,+DAA+D;AAC/D,MAAM,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/warehouse.d.ts
CHANGED
|
@@ -52,11 +52,6 @@ export interface AttachResult {
|
|
|
52
52
|
/** Populated only when `tenantScope === 'family'`. */
|
|
53
53
|
familyMemberIds?: string[];
|
|
54
54
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Derive the DuckDB catalog alias for a tenant. Also used as the SECRET name.
|
|
57
|
-
*
|
|
58
|
-
* Sanitised to `[A-Za-z0-9_]` so it's always a valid DuckDB identifier.
|
|
59
|
-
*/
|
|
60
55
|
export declare function warehouseSecretName(tenantId: string): string;
|
|
61
56
|
/**
|
|
62
57
|
* Attach a warehouse for a single tenant zone.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;
|
|
1
|
+
{"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,WAAW,EAEX,WAAW,EACZ,MAAM,SAAS,CAAA;AAgBhB,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX,WAAW,EAAE,WAAW,CAAA;IACxB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,cAAc,EAAE,IAAI,CAAA;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AASD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,YAAY,CAAC,CA0FvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAaf;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAwDD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAEf;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE;IACH,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D"}
|
package/dist/core/warehouse.js
CHANGED
|
@@ -50,8 +50,9 @@ function rootCause(err) {
|
|
|
50
50
|
*
|
|
51
51
|
* Sanitised to `[A-Za-z0-9_]` so it's always a valid DuckDB identifier.
|
|
52
52
|
*/
|
|
53
|
+
const NON_WORD_RE = /\W/g;
|
|
53
54
|
export function warehouseSecretName(tenantId) {
|
|
54
|
-
return `zone_${tenantId.replace(
|
|
55
|
+
return `zone_${tenantId.replace(NON_WORD_RE, '_')}`;
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
57
58
|
* Attach a warehouse for a single tenant zone.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warehouse.js","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;
|
|
1
|
+
{"version":3,"file":"warehouse.js","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,14 +61,14 @@ export interface WatermarkCache {
|
|
|
61
61
|
* `load` is always the source of truth; the cache only ever elides a
|
|
62
62
|
* call to it. When disabled, this is `load()` plus instrumentation.
|
|
63
63
|
*/
|
|
64
|
-
get(brand: string, familyId: string, table: string, load: () => Promise<Date | null>)
|
|
64
|
+
get: (brand: string, familyId: string, table: string, load: () => Promise<Date | null>) => Promise<Date | null>;
|
|
65
65
|
/** Drop one table's entry across all tenants. */
|
|
66
|
-
invalidate(table: string)
|
|
66
|
+
invalidate: (table: string) => void;
|
|
67
67
|
/** Drop everything — used on attach/detach and brand switch. */
|
|
68
|
-
clear()
|
|
69
|
-
stats()
|
|
68
|
+
clear: () => void;
|
|
69
|
+
stats: () => WatermarkCacheStats;
|
|
70
70
|
/** Detach the event-bus subscription. */
|
|
71
|
-
dispose()
|
|
71
|
+
dispose: () => void;
|
|
72
72
|
readonly enabled: boolean;
|
|
73
73
|
}
|
|
74
74
|
export declare function createWatermarkCache(options?: WatermarkCacheOptions): WatermarkCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watermark-cache.d.ts","sourceRoot":"","sources":["../../src/core/watermark-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,OAAQ,CAAA;AAE3C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,iEAAiE;IACjE,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CACpE;AAED,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;
|
|
1
|
+
{"version":3,"file":"watermark-cache.d.ts","sourceRoot":"","sources":["../../src/core/watermark-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,OAAQ,CAAA;AAE3C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,iEAAiE;IACjE,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CACpE;AAED,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAuBD,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,GAAG,EAAE,CACH,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAC7B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IACzB,iDAAiD;IACjD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,gEAAgE;IAChE,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,mBAAmB,CAAA;IAChC,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAgGhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watermark-cache.js","sourceRoot":"","sources":["../../src/core/watermark-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAK,CAAA;AA8B3C,+DAA+D;AAC/D,SAAS,QAAQ,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAa;IAC9D,OAAO,GAAG,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAA;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,MAAgB,EAAE,CAAS;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"watermark-cache.js","sourceRoot":"","sources":["../../src/core/watermark-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Clock } from '../types';
|
|
2
2
|
/** Pinnable clock for throttle tests. Advance via `set(date)`. */
|
|
3
3
|
export declare function createFakeClock(initial: Date | string): Clock & {
|
|
4
|
-
set(t: Date | string)
|
|
5
|
-
advance(ms: number)
|
|
4
|
+
set: (t: Date | string) => void;
|
|
5
|
+
advance: (ms: number) => void;
|
|
6
6
|
};
|
|
7
7
|
//# sourceMappingURL=fakeClock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakeClock.d.ts","sourceRoot":"","sources":["../../../src/rules/__fakes__/fakeClock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAErC,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG;IAC/D,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"fakeClock.d.ts","sourceRoot":"","sources":["../../../src/rules/__fakes__/fakeClock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAErC,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG;IAC/D,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IAC/B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B,CAaA"}
|
|
@@ -5,12 +5,12 @@ export interface FakeEngine extends AnalyticsEngine {
|
|
|
5
5
|
sql: string;
|
|
6
6
|
params: Record<string, unknown>;
|
|
7
7
|
}[];
|
|
8
|
-
__setResult(rows: unknown[])
|
|
9
|
-
__setError(err: Error | null)
|
|
8
|
+
__setResult: (rows: unknown[]) => void;
|
|
9
|
+
__setError: (err: Error | null) => void;
|
|
10
10
|
/** Mutate the reported `state` for tests that exercise the attached-state guard. */
|
|
11
|
-
__setState(state: AnalyticsState)
|
|
11
|
+
__setState: (state: AnalyticsState) => void;
|
|
12
12
|
/** Seed the roster returned by `getFamilyMembers()`. */
|
|
13
|
-
__setFamilyMembers(ids: string[])
|
|
13
|
+
__setFamilyMembers: (ids: string[]) => void;
|
|
14
14
|
}
|
|
15
15
|
export declare function createFakeEngine(): FakeEngine;
|
|
16
16
|
//# sourceMappingURL=fakeEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakeEngine.d.ts","sourceRoot":"","sources":["../../../src/rules/__fakes__/fakeEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEvE,wDAAwD;AACxD,MAAM,WAAW,UAAW,SAAQ,eAAe;IACjD,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAA;IAC3D,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fakeEngine.d.ts","sourceRoot":"","sources":["../../../src/rules/__fakes__/fakeEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEvE,wDAAwD;AACxD,MAAM,WAAW,UAAW,SAAQ,eAAe;IACjD,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAA;IAC3D,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IACtC,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;IACvC,oFAAoF;IACpF,UAAU,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3C,wDAAwD;IACxD,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAC5C;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAuC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakeEngine.js","sourceRoot":"","sources":["../../../src/rules/__fakes__/fakeEngine.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,gBAAgB;IAC9B,IAAI,MAAM,GAAc,EAAE,CAAA;IAC1B,IAAI,SAAS,GAAiB,IAAI,CAAA;IAClC,IAAI,KAAK,GAAmB,UAAU,CAAA;IACtC,IAAI,aAAa,GAAa,EAAE,CAAA;IAChC,MAAM,KAAK,GAAuD,EAAE,CAAA;IAEpE,MAAM,MAAM,GAAe;QACzB,KAAK,CAAC,MAAM,KAAI,CAAC;QACjB,KAAK,CAAC,MAAM,KAAI,CAAC;QACjB,KAAK,CAAC,gBAAgB,KAAK,OAAO,aAAa,CAAA,CAAC,CAAC;QACjD,KAAK,CAAC,cAAc,KAAI,CAAC;QACzB,KAAK,CAAC,OAAO,CAAI,GAAW,EAAE,MAAgC;YAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAA;YACzC,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"fakeEngine.js","sourceRoot":"","sources":["../../../src/rules/__fakes__/fakeEngine.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,gBAAgB;IAC9B,IAAI,MAAM,GAAc,EAAE,CAAA;IAC1B,IAAI,SAAS,GAAiB,IAAI,CAAA;IAClC,IAAI,KAAK,GAAmB,UAAU,CAAA;IACtC,IAAI,aAAa,GAAa,EAAE,CAAA;IAChC,MAAM,KAAK,GAAuD,EAAE,CAAA;IAEpE,MAAM,MAAM,GAAe;QACzB,KAAK,CAAC,MAAM,KAAI,CAAC;QACjB,KAAK,CAAC,MAAM,KAAI,CAAC;QACjB,KAAK,CAAC,gBAAgB,KAAK,OAAO,aAAa,CAAA,CAAC,CAAC;QACjD,KAAK,CAAC,cAAc,KAAI,CAAC;QACzB,KAAK,CAAC,OAAO,CAAI,GAAW,EAAE,MAAgC;YAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAA;YACzC,IAAI,SAAS;gBACX,MAAM,SAAS,CAAA;YACjB,OAAO,MAAa,CAAA;QACtB,CAAC;QACD,MAAM;YACJ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QACD,cAAc;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,KAAK,KAAK,OAAO,KAAK,CAAA,CAAC,CAAC;QAC5B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;QACzB,KAAK,CAAC,YAAY,KAAI,CAAC;QACvB,KAAK,CAAC,aAAa,KAAK,OAAO,IAAI,CAAA,CAAC,CAAC;QACrC,KAAK,CAAC,KAAK,KAAI,CAAC;QAChB,OAAO,EAAE,KAAK;QACd,WAAW,CAAC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAA,CAAC,CAAC;QACrD,UAAU,CAAC,GAAG,IAAI,SAAS,GAAG,GAAG,CAAA,CAAC,CAAC;QACnC,UAAU,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA,CAAC,CAAC;QAC3B,kBAAkB,CAAC,GAAG,IAAI,aAAa,GAAG,GAAG,CAAA,CAAC,CAAC;KAChD,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* batch, every rule x user combination reads a consistent baseline;
|
|
18
18
|
* across batches, fresh reads pick up the latest compute.
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
20
|
+
import type { BaselineWindowDays, MetricId } from '../core/metric_metadata';
|
|
21
21
|
import type { AnalyticsEngine } from '../core/types';
|
|
22
22
|
import type { RulesLogger } from './types';
|
|
23
23
|
export interface Baseline {
|
|
@@ -44,12 +44,12 @@ export interface BaselineReaderConfig {
|
|
|
44
44
|
}
|
|
45
45
|
export interface BaselineReader {
|
|
46
46
|
/** Null when the user has fewer than `BASELINE_MIN_DAYS` days of data. */
|
|
47
|
-
getBaseline(userId: string, metric: MetricId, windowDays: BaselineWindowDays, ctx: {
|
|
47
|
+
getBaseline: (userId: string, metric: MetricId, windowDays: BaselineWindowDays, ctx: {
|
|
48
48
|
brand: string;
|
|
49
49
|
familyId: string;
|
|
50
|
-
})
|
|
50
|
+
}) => Promise<Baseline | null>;
|
|
51
51
|
/** Drop the per-batch cache. Called at the start of each evaluation pass. */
|
|
52
|
-
resetCache()
|
|
52
|
+
resetCache: () => void;
|
|
53
53
|
}
|
|
54
54
|
export declare function createBaselineReader(config: BaselineReaderConfig): BaselineReader;
|
|
55
55
|
//# sourceMappingURL=baseline-reader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline-reader.d.ts","sourceRoot":"","sources":["../../src/rules/baseline-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"baseline-reader.d.ts","sourceRoot":"","sources":["../../src/rules/baseline-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAO1C,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,WAAW,EAAE,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,kBAAkB,EAC9B,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KACrC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;IAC7B,6EAA6E;IAC7E,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AAaD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,GAC3B,cAAc,CA2GhB"}
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* batch, every rule x user combination reads a consistent baseline;
|
|
18
18
|
* across batches, fresh reads pick up the latest compute.
|
|
19
19
|
*/
|
|
20
|
-
import { buildBaselineSql } from '../sync/baseline-compute';
|
|
21
20
|
import { BASELINE_MIN_DAYS, } from '../core/metric_metadata';
|
|
21
|
+
import { buildBaselineSql } from '../sync/baseline-compute';
|
|
22
22
|
export function createBaselineReader(config) {
|
|
23
23
|
const { analytics, logger } = config;
|
|
24
24
|
const cache = new Map();
|
|
@@ -74,7 +74,9 @@ export function createBaselineReader(config) {
|
|
|
74
74
|
result = await computeOnRead(userId, metric, windowDays, ctx);
|
|
75
75
|
if (result !== null) {
|
|
76
76
|
logger?.debug('rules.baseline: stored row absent, computed on read', {
|
|
77
|
-
userId,
|
|
77
|
+
userId,
|
|
78
|
+
metric,
|
|
79
|
+
windowDays,
|
|
78
80
|
});
|
|
79
81
|
}
|
|
80
82
|
}
|