@mongrov/analytics 0.2.0 → 0.3.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/README.md +64 -5
- package/dist/sync/factory.d.ts +8 -0
- package/dist/sync/factory.d.ts.map +1 -1
- package/dist/sync/factory.js +121 -3
- package/dist/sync/factory.js.map +1 -1
- package/dist/sync/index.d.ts +2 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +2 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/mapper/firmware.d.ts +14 -3
- package/dist/sync/mapper/firmware.d.ts.map +1 -1
- package/dist/sync/mapper/firmware.js +22 -1
- package/dist/sync/mapper/firmware.js.map +1 -1
- package/dist/sync/mapper/ring-config.d.ts +27 -13
- package/dist/sync/mapper/ring-config.d.ts.map +1 -1
- package/dist/sync/mapper/ring-config.js +29 -16
- package/dist/sync/mapper/ring-config.js.map +1 -1
- package/dist/sync/mapper/types.d.ts +35 -3
- package/dist/sync/mapper/types.d.ts.map +1 -1
- package/dist/sync/pending_closes.d.ts +30 -0
- package/dist/sync/pending_closes.d.ts.map +1 -0
- package/dist/sync/pending_closes.js +83 -0
- package/dist/sync/pending_closes.js.map +1 -0
- package/dist/sync/pusher.d.ts +21 -0
- package/dist/sync/pusher.d.ts.map +1 -1
- package/dist/sync/pusher.js +55 -1
- package/dist/sync/pusher.js.map +1 -1
- package/dist/sync/scheduler.d.ts +7 -0
- package/dist/sync/scheduler.d.ts.map +1 -1
- package/dist/sync/scheduler.js +1 -0
- package/dist/sync/scheduler.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -6,11 +6,16 @@ Per-family (or per-tenant) warehouses attached as DuckDB catalogs. Zero-copy
|
|
|
6
6
|
reads against R2 Iceberg tables. Headless core with optional React hooks and
|
|
7
7
|
UI subpaths.
|
|
8
8
|
|
|
9
|
-
Status: **0.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
Status: **0.3.0** — Phases 1 → 7 landed on the core engine plus the full
|
|
10
|
+
`@mongrov/analytics/sync` subpath (mapper → buffer → flusher → watermark →
|
|
11
|
+
pusher → fetcher → scheduler → factory + hooks). T-18 / T-28 integration
|
|
12
|
+
suites green against the MinIO + Iceberg REST docker stack (10 cases + 3
|
|
13
|
+
round trips). 0.3.0 additionally lands SCD-2 `device_config` support:
|
|
14
|
+
`RingConfigTranslator`, `PendingClosesStore`, `R2Pusher.pushCloses`, and
|
|
15
|
+
a rewritten sink that closes prior configs both locally and against the
|
|
16
|
+
remote Iceberg zone. **Breaking**: `DeviceConfigRow` shape changed
|
|
17
|
+
(`metric` → `data_type`, `start_hour`/`end_hour` → `start_time`/`end_time`,
|
|
18
|
+
added `weeks`) — see the `ringConfigTranslator` section below.
|
|
14
19
|
|
|
15
20
|
## Features
|
|
16
21
|
|
|
@@ -423,6 +428,60 @@ export default function App() {
|
|
|
423
428
|
| `backgroundTask?` | `BackgroundTaskPort` | Inject a native background port (defaults to an in-process no-op). |
|
|
424
429
|
| `constraints?` | `ConstraintPort` | Inject Wi-Fi + charging probes (defaults to always-allowed). |
|
|
425
430
|
| `logger?` | `SchedulerLogger` | Debug hook for the scheduler cycle. |
|
|
431
|
+
| `ringConfigTranslator?` | `RingConfigTranslator` | **Required** when `tables` includes `'device_config'`. Consumer-provided translation between firmware metric names (e.g. `'hrv'`) and the schema `data_type` integer, plus firmware monitoring windows → schema `start_time`/`end_time`/`weeks` fields. Enforced at construction via a Zod refinement (throws `z.ZodError` if missing). |
|
|
432
|
+
|
|
433
|
+
### `ringConfigTranslator` (SCD-2 `device_config`)
|
|
434
|
+
|
|
435
|
+
Ring configs land in the warehouse as SCD-2 rows: every automatic-monitoring
|
|
436
|
+
window becomes one row keyed on `(device_id, data_type, valid_from)`, with
|
|
437
|
+
`valid_to = NULL` marking the "open" (currently-effective) config. When the
|
|
438
|
+
firmware reports a changed window for the same `data_type`, the sync manager:
|
|
439
|
+
|
|
440
|
+
1. Pre-fetches every open `device_config` row for the device (single SELECT).
|
|
441
|
+
2. Runs `mapRingConfig` with those rows as `activePriorConfigs` — the mapper
|
|
442
|
+
emits `device_config_closes[]` for any metric that already had an open
|
|
443
|
+
row, alongside the new inserts.
|
|
444
|
+
3. Enqueues the closes to a persistent `PendingClosesStore` (survives crash).
|
|
445
|
+
4. Applies the local UPDATE (`valid_to := now`) against
|
|
446
|
+
`memory.main.device_config`.
|
|
447
|
+
5. Buffers the new open row for normal push through the flusher.
|
|
448
|
+
6. On the next scheduler cycle, `R2Pusher.pushCloses(pending)` issues one
|
|
449
|
+
`UPDATE … WHERE valid_to IS NULL` per pending close against the remote
|
|
450
|
+
Iceberg zone. The `valid_to IS NULL` guard makes replays idempotent.
|
|
451
|
+
|
|
452
|
+
Consumers supply `ringConfigTranslator` because the metric ↔ `data_type`
|
|
453
|
+
mapping and the "how do firmware hours map to `HH:MM` strings + weekday
|
|
454
|
+
bitmasks" choices are app-specific:
|
|
455
|
+
|
|
456
|
+
```ts
|
|
457
|
+
import { type RingConfigTranslator } from '@mongrov/analytics/sync'
|
|
458
|
+
|
|
459
|
+
const ringConfigTranslator: RingConfigTranslator = {
|
|
460
|
+
metricToDataType: (metric) => {
|
|
461
|
+
switch (metric) {
|
|
462
|
+
case 'hrv': return 1
|
|
463
|
+
case 'spo2': return 2
|
|
464
|
+
case 'heart_rate': return 3
|
|
465
|
+
case 'temperature': return 4
|
|
466
|
+
default: throw new Error(`unknown metric: ${metric}`)
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
dataTypeToMetric: (dt) => {
|
|
470
|
+
switch (dt) {
|
|
471
|
+
case 1: return 'hrv'
|
|
472
|
+
case 2: return 'spo2'
|
|
473
|
+
case 3: return 'heart_rate'
|
|
474
|
+
case 4: return 'temperature'
|
|
475
|
+
default: return 'unknown'
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
windowToSchemaFields: (w) => ({
|
|
479
|
+
start_time: `${String(w.start_hour).padStart(2, '0')}:00`,
|
|
480
|
+
end_time: `${String(w.end_hour).padStart(2, '0')}:00`,
|
|
481
|
+
weeks: 0x7F, // Mon..Sun bitmask; adjust to your firmware
|
|
482
|
+
}),
|
|
483
|
+
}
|
|
484
|
+
```
|
|
426
485
|
|
|
427
486
|
### Prefetch policies
|
|
428
487
|
|
package/dist/sync/factory.d.ts
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import type { AnalyticsEngine, AttachContext, KVStore } from '../core/types';
|
|
20
20
|
import type { EventBus } from './events';
|
|
21
21
|
import type { PrefetchPolicy } from './fetcher';
|
|
22
|
+
import type { RingConfigTranslator } from './mapper/types';
|
|
22
23
|
import { type BackgroundTaskPort, type ConstraintPort, type SchedulerLogger } from './scheduler';
|
|
23
24
|
import type { SyncManager } from './manager';
|
|
24
25
|
import type { OverflowPolicy } from './types';
|
|
@@ -56,6 +57,13 @@ export interface CreateSyncManagerConfig {
|
|
|
56
57
|
*/
|
|
57
58
|
rulesEngine?: RulesEngine;
|
|
58
59
|
logger?: SchedulerLogger;
|
|
60
|
+
/**
|
|
61
|
+
* Consumer-provided translation between firmware ring-config semantics
|
|
62
|
+
* and the schema-shaped `device_config` row. **Required** whenever
|
|
63
|
+
* `tables` includes `'device_config'` — enforced at construction by a
|
|
64
|
+
* Zod refinement. See `mapper/types.ts` for the contract.
|
|
65
|
+
*/
|
|
66
|
+
ringConfigTranslator?: RingConfigTranslator;
|
|
59
67
|
}
|
|
60
68
|
/**
|
|
61
69
|
* Assemble a fully wired `SyncManager`. Throws `z.ZodError` if the config is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAG5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAG5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAI/C,OAAO,KAAK,EAIV,oBAAoB,EACrB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAc,WAAW,EAAkC,MAAM,WAAW,CAAA;AAExF,OAAO,KAAK,EAAe,cAAc,EAAe,MAAM,SAAS,CAAA;AAIvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAyCjD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,aAAa,CAAA;IAClB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;IAC9C,cAAc,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC,WAAW,CAAC,EAAE,cAAc,CAAA;IAC5B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,cAAc,CAAA;KACxB,CAAA;IACD,SAAS,CAAC,EAAE;QACV,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW,CAiM9E"}
|
package/dist/sync/factory.js
CHANGED
|
@@ -23,6 +23,7 @@ import { R2Fetcher } from './fetcher';
|
|
|
23
23
|
import { BatchFlusher } from './flusher';
|
|
24
24
|
import { mapFirmwareExport } from './mapper/firmware';
|
|
25
25
|
import { OverflowStore } from './overflow';
|
|
26
|
+
import { PendingClosesStore } from './pending_closes';
|
|
26
27
|
import { R2Pusher } from './pusher';
|
|
27
28
|
import { SyncScheduler, } from './scheduler';
|
|
28
29
|
import { FlushTriggers } from './triggers';
|
|
@@ -41,6 +42,7 @@ const configSchema = z.object({
|
|
|
41
42
|
tables: z.array(z.string().min(1)).min(1),
|
|
42
43
|
columnOrder: z.record(z.string(), z.array(z.string()).readonly()),
|
|
43
44
|
prefetchPolicy: prefetchPolicySchema,
|
|
45
|
+
hasRingConfigTranslator: z.boolean(),
|
|
44
46
|
flush: z.object({
|
|
45
47
|
maxRows: z.number().int().positive().optional(),
|
|
46
48
|
maxAgeMs: z.number().int().positive().optional(),
|
|
@@ -55,6 +57,9 @@ const configSchema = z.object({
|
|
|
55
57
|
requiresWifi: z.boolean().optional(),
|
|
56
58
|
taskName: z.string().optional(),
|
|
57
59
|
}).optional(),
|
|
60
|
+
}).refine(cfg => !cfg.tables.includes('device_config') || cfg.hasRingConfigTranslator, {
|
|
61
|
+
message: 'ringConfigTranslator is required when `tables` includes \'device_config\'',
|
|
62
|
+
path: ['ringConfigTranslator'],
|
|
58
63
|
});
|
|
59
64
|
/**
|
|
60
65
|
* Assemble a fully wired `SyncManager`. Throws `z.ZodError` if the config is
|
|
@@ -65,6 +70,7 @@ export function createSyncManager(config) {
|
|
|
65
70
|
tables: config.tables,
|
|
66
71
|
columnOrder: config.columnOrder,
|
|
67
72
|
prefetchPolicy: config.prefetchPolicy,
|
|
73
|
+
hasRingConfigTranslator: config.ringConfigTranslator !== undefined,
|
|
68
74
|
flush: config.flush,
|
|
69
75
|
overflow: config.overflow,
|
|
70
76
|
scheduler: config.scheduler,
|
|
@@ -133,6 +139,7 @@ export function createSyncManager(config) {
|
|
|
133
139
|
watermark,
|
|
134
140
|
tables: [...config.tables],
|
|
135
141
|
});
|
|
142
|
+
const pendingClosesStore = new PendingClosesStore(config.storage);
|
|
136
143
|
const scheduler = new SyncScheduler({
|
|
137
144
|
backgroundTask: config.backgroundTask ?? noopBackgroundTask(),
|
|
138
145
|
constraints: config.constraints ?? alwaysAllowedConstraints(),
|
|
@@ -141,6 +148,30 @@ export function createSyncManager(config) {
|
|
|
141
148
|
await Promise.all(config.tables.map(t => flusher.flush(t, 'scheduled')));
|
|
142
149
|
},
|
|
143
150
|
pushAll: async (tables, ctx) => pusher.pushAll(tables, ctx),
|
|
151
|
+
pushClosesForDeviceConfig: config.tables.includes('device_config')
|
|
152
|
+
? async (ctx) => {
|
|
153
|
+
const pending = await pendingClosesStore.drain(ctx);
|
|
154
|
+
if (pending.length === 0)
|
|
155
|
+
return;
|
|
156
|
+
try {
|
|
157
|
+
const result = await pusher.pushCloses(pending, ctx);
|
|
158
|
+
if (!result.ok) {
|
|
159
|
+
await pendingClosesStore.requeue(ctx, pending);
|
|
160
|
+
rulesLogger?.warn('sync.factory: pushCloses failed; requeued', {
|
|
161
|
+
count: pending.length,
|
|
162
|
+
code: result.error?.code,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
await pendingClosesStore.requeue(ctx, pending);
|
|
168
|
+
rulesLogger?.warn('sync.factory: pushCloses threw; requeued', {
|
|
169
|
+
count: pending.length,
|
|
170
|
+
err: err instanceof Error ? err.message : String(err),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
: undefined,
|
|
144
175
|
fetchIncremental: async (ctx) => fetcher.fetchIncremental(ctx),
|
|
145
176
|
// Scheduled rules pass runs after the cycle's flush/push/fetch. Fire-
|
|
146
177
|
// and-forget — a throw here would surface as a cycle error, but the
|
|
@@ -179,7 +210,16 @@ export function createSyncManager(config) {
|
|
|
179
210
|
state.scheduler = next;
|
|
180
211
|
notify();
|
|
181
212
|
});
|
|
182
|
-
const sink = createSensorSink({
|
|
213
|
+
const sink = createSensorSink({
|
|
214
|
+
buffer,
|
|
215
|
+
flusher,
|
|
216
|
+
triggers,
|
|
217
|
+
tables: config.tables,
|
|
218
|
+
engine: engineAsHybrid,
|
|
219
|
+
attachCtx: config.ctx,
|
|
220
|
+
translator: config.ringConfigTranslator,
|
|
221
|
+
pendingClosesStore,
|
|
222
|
+
});
|
|
183
223
|
return {
|
|
184
224
|
analytics: config.analytics,
|
|
185
225
|
sink,
|
|
@@ -207,14 +247,92 @@ export function createSyncManager(config) {
|
|
|
207
247
|
prefetch: (ctx) => fetcher.prefetchOnAttach(ctx, config.prefetchPolicy),
|
|
208
248
|
};
|
|
209
249
|
}
|
|
210
|
-
|
|
250
|
+
/**
|
|
251
|
+
* Pre-fetch the currently-open `device_config` rows for the given device
|
|
252
|
+
* so `mapRingConfig` can decide which metrics need SCD-2 closes.
|
|
253
|
+
*
|
|
254
|
+
* Value shape (`DeviceConfigRow`) is not consulted by the mapper — only
|
|
255
|
+
* `.has(dataType)` — but hydrating the row keeps the map future-friendly
|
|
256
|
+
* for logging / diagnostics without a second query.
|
|
257
|
+
*/
|
|
258
|
+
async function fetchActivePriorConfigs(engine, ctx) {
|
|
259
|
+
// Fully-qualified `memory.main.device_config` so this resolves against the
|
|
260
|
+
// local in-memory catalog regardless of the active `USE <iceberg>.default`
|
|
261
|
+
// that `attach()` issues. A 2-part `main.device_config` would resolve
|
|
262
|
+
// against the current (Iceberg) catalog post-attach and miss.
|
|
263
|
+
const rows = await engine.execute(`SELECT device_id, brand, family_id, user_id, data_type, interval_minutes, start_time, end_time, weeks, valid_from, valid_to
|
|
264
|
+
FROM memory.main.device_config
|
|
265
|
+
WHERE device_id = $device_id
|
|
266
|
+
AND family_id = $family_id
|
|
267
|
+
AND user_id = $user_id
|
|
268
|
+
AND valid_to IS NULL`, {
|
|
269
|
+
device_id: ctx.deviceId,
|
|
270
|
+
family_id: ctx.familyId,
|
|
271
|
+
user_id: ctx.userId,
|
|
272
|
+
});
|
|
273
|
+
const map = new Map();
|
|
274
|
+
for (const r of rows) {
|
|
275
|
+
const dataType = Number(r.data_type);
|
|
276
|
+
map.set(dataType, {
|
|
277
|
+
ts: new Date(String(r.valid_from ?? '')),
|
|
278
|
+
brand: String(r.brand ?? ''),
|
|
279
|
+
family_id: String(r.family_id ?? ''),
|
|
280
|
+
user_id: String(r.user_id ?? ''),
|
|
281
|
+
device_id: String(r.device_id ?? ''),
|
|
282
|
+
data_type: dataType,
|
|
283
|
+
interval_minutes: Number(r.interval_minutes),
|
|
284
|
+
start_time: r.start_time == null ? null : String(r.start_time),
|
|
285
|
+
end_time: r.end_time == null ? null : String(r.end_time),
|
|
286
|
+
weeks: r.weeks == null ? null : Number(r.weeks),
|
|
287
|
+
valid_from: new Date(String(r.valid_from ?? '')),
|
|
288
|
+
valid_to: r.valid_to == null ? null : new Date(String(r.valid_to)),
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return map;
|
|
292
|
+
}
|
|
293
|
+
function createSensorSink(deps) {
|
|
294
|
+
const { buffer, flusher, triggers, tables, engine, attachCtx, translator, pendingClosesStore } = deps;
|
|
295
|
+
const handlesConfig = tables.includes('device_config') && translator !== undefined;
|
|
211
296
|
return {
|
|
212
297
|
push: async (batch) => {
|
|
213
298
|
await buffer.push(batch);
|
|
214
299
|
triggers.noteEnqueue(batch.table, Date.now());
|
|
215
300
|
},
|
|
216
301
|
pushFirmware: async (fw, ctx) => {
|
|
217
|
-
|
|
302
|
+
// 1) Pre-fetch open configs for this device so the mapper can decide
|
|
303
|
+
// which metrics need SCD-2 closes. Skipped when we're not
|
|
304
|
+
// subscribed to device_config or no translator is wired.
|
|
305
|
+
const activePriorConfigs = handlesConfig
|
|
306
|
+
? await fetchActivePriorConfigs(engine, ctx)
|
|
307
|
+
: new Map();
|
|
308
|
+
// 2) Map firmware → mapped batch. The mapper requires a translator
|
|
309
|
+
// only when firmware has ring windows; the wrapper in `firmware.ts`
|
|
310
|
+
// enforces that.
|
|
311
|
+
const mapped = mapFirmwareExport(fw, ctx, {
|
|
312
|
+
activePriorConfigs,
|
|
313
|
+
translator,
|
|
314
|
+
});
|
|
315
|
+
// 3) SCD-2 close handling. Enqueue-before-UPDATE keeps the local
|
|
316
|
+
// UPDATE + remote UPDATE replay-safe under crash: both are
|
|
317
|
+
// idempotent via the `valid_to IS NULL` guard.
|
|
318
|
+
if (handlesConfig && mapped.device_config_closes.length > 0) {
|
|
319
|
+
await pendingClosesStore.enqueue(attachCtx, mapped.device_config_closes);
|
|
320
|
+
for (const close of mapped.device_config_closes) {
|
|
321
|
+
// Fully-qualified `memory.main.device_config` — same reason as
|
|
322
|
+
// `fetchActivePriorConfigs` above: sink runs after `attach()` has
|
|
323
|
+
// called `USE <iceberg>.default`, so 2-part names miss.
|
|
324
|
+
await engine.execute(`UPDATE memory.main.device_config
|
|
325
|
+
SET valid_to = $valid_to
|
|
326
|
+
WHERE device_id = $device_id
|
|
327
|
+
AND data_type = $data_type
|
|
328
|
+
AND valid_to IS NULL`, {
|
|
329
|
+
valid_to: close.valid_to.toISOString(),
|
|
330
|
+
device_id: close.device_id,
|
|
331
|
+
data_type: close.data_type,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// 4) Buffer the new inserts across every mapped table.
|
|
218
336
|
const asRows = (rows) => rows;
|
|
219
337
|
const mappedTables = [
|
|
220
338
|
['hrv', asRows(mapped.hrv)],
|
package/dist/sync/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/sync/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAOrD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAKL,aAAa,GACd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAK5C,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAA;AAE1E,MAAM,oBAAoB,GAA8B,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACnF,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9F,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACxC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;CACtC,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjE,cAAc,EAAE,oBAAoB;IACpC,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACpD,CAAC,CAAC,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACtD,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC,QAAQ,EAAE;IACb,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QACxC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC,MAAM,CACP,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAC3E;IACE,OAAO,EAAE,2EAA2E;IACpF,IAAI,EAAE,CAAC,sBAAsB,CAAC;CAC/B,CACF,CAAA;AA4CD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IAC/D,YAAY,CAAC,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,uBAAuB,EAAE,MAAM,CAAC,oBAAoB,KAAK,SAAS;QAClE,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,QAAQ;QACR,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc;QAC/C,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM;KAChC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAiB,EAAE,cAAc,EAAE,EAAE,EAAE,CAAA;IACrD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEnF,0EAA0E;IAC1E,6EAA6E;IAC7E,4EAA4E;IAC5E,qBAAqB;IACrB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;IACtC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAA;IACjC,MAAM,YAAY,GAAgB,CAAC,KAAK,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAChD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACjC,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,WAAW,CAAC,eAAe,CAAC;oBAC1B,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe;oBAC9C,cAAc,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAkB,CAAC;iBACnD,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;oBACxB,WAAW,EAAE,IAAI,CAAC,iDAAiD,EAAE;wBACnE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;wBAC1B,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBACtD,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,YAAY,EAAE,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,SAAoC,CAAA;IAElE,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;QAC/B,MAAM,EAAE,cAAc;QACtB,MAAM;QACN,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW;QACtC,IAAI,EAAE,YAAY;KACnB,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;QACjC,MAAM;QACN,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO;QAC9B,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ;KACjC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;IAE5D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjF,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC;QAC1B,MAAM,EAAE,cAAc;QACtB,SAAS;QACT,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACvC,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC1C,CAAC;YACD,WAAW,EAAE,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC;QAC5B,MAAM,EAAE,cAAc;QACtB,SAAS;QACT,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;KAC3B,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEjE,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC;QAClC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAE;QAC7D,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,wBAAwB,EAAE;QAC7D,WAAW,EAAE;YACX,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;YAC1E,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YAC3D,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAChE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACZ,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAM;oBAChC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;wBACpD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;4BACf,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;4BAC9C,WAAW,EAAE,IAAI,CAAC,2CAA2C,EAAE;gCAC7D,KAAK,EAAE,OAAO,CAAC,MAAM;gCACrB,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI;6BACzB,CAAC,CAAA;wBACJ,CAAC;oBACH,CAAC;oBACD,OAAO,GAAG,EAAE,CAAC;wBACX,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;wBAC9C,WAAW,EAAE,IAAI,CAAC,0CAA0C,EAAE;4BAC5D,KAAK,EAAE,OAAO,CAAC,MAAM;4BACrB,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACtD,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBACH,CAAC,CAAC,SAAS;YACb,gBAAgB,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAC5D,sEAAsE;YACtE,oEAAoE;YACpE,kCAAkC;YAClC,eAAe,EAAE,WAAW;gBAC1B,CAAC,CAAC,KAAK,IAAI,EAAE;oBACT,IAAI,CAAC;wBACH,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAA;oBACvC,CAAC;oBACD,OAAO,GAAG,EAAE,CAAC;wBACX,WAAW,EAAE,IAAI,CAAC,mDAAmD,EAAE;4BACrE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACtD,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBACH,CAAC,CAAC,SAAS;SACd;QACD,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ;QACpC,gBAAgB,EAAE;YAChB,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,gBAAgB;YACnD,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY;SAC5C;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;IAEF,MAAM,KAAK,GAAqB;QAC9B,SAAS,EAAE,MAAM;KAClB,CAAA;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiC,CAAA;IAC5D,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,KAAK,MAAM,EAAE,IAAI,WAAW;YAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC,CAAA;IACD,SAAS,CAAC,SAAS,CAAC,CAAC,IAAoB,EAAE,EAAE;QAC3C,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;QACtB,MAAM,EAAE,CAAA;IACV,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC5B,MAAM;QACN,OAAO;QACP,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,MAAM,CAAC,GAAG;QACrB,UAAU,EAAE,MAAM,CAAC,oBAAoB;QACvC,kBAAkB;KACnB,CAAC,CAAA;IAEF,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI;QACJ,OAAO;QACP,MAAM;QACN,OAAO;QACP,SAAS;QACT,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;QAC3B,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YACf,cAAc,EAAE,EAAE,GAAG,QAAQ,CAAC,cAAc,EAAE;YAC9C,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;SAChD,CAAC;QACF,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;YAChB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACnB,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrC,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;QACzB,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;QACxB,CAAC;QACD,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE;QACxC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC;KACxE,CAAA;AACH,CAAC;AAeD;;;;;;;GAOG;AACH,KAAK,UAAU,uBAAuB,CACpC,MAAoB,EACpB,GAAkB;IAElB,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B;;;;;6BAKyB,EACzB;QACE,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,OAAO,EAAE,GAAG,CAAC,MAAM;KACpB,CACF,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAA;IAC9C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACpC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;YAChB,EAAE,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACxC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAChC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YACpC,SAAS,EAAE,QAAQ;YACnB,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAC5C,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;YAC9D,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACxD,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/C,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YAChD,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;SACnE,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoB;IAC5C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAA;IACrG,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,UAAU,KAAK,SAAS,CAAA;IAElF,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,KAAkB,EAAE,EAAE;YACjC,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxB,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAC/C,CAAC;QACD,YAAY,EAAE,KAAK,EAAE,EAAkB,EAAE,GAAkB,EAAE,EAAE;YAC7D,qEAAqE;YACrE,6DAA6D;YAC7D,4DAA4D;YAC5D,MAAM,kBAAkB,GAAG,aAAa;gBACtC,CAAC,CAAC,MAAM,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC;gBAC5C,CAAC,CAAC,IAAI,GAAG,EAA2B,CAAA;YAEtC,mEAAmE;YACnE,uEAAuE;YACvE,oBAAoB;YACpB,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE;gBACxC,kBAAkB;gBAClB,UAAU;aACX,CAAC,CAAA;YAEF,iEAAiE;YACjE,8DAA8D;YAC9D,kDAAkD;YAClD,IAAI,aAAa,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,MAAM,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAA;gBACxE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;oBAChD,+DAA+D;oBAC/D,kEAAkE;oBAClE,wDAAwD;oBACxD,MAAM,MAAM,CAAC,OAAO,CAClB;;;;qCAIyB,EACzB;wBACE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;wBACtC,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;qBAC3B,CACF,CAAA;gBACH,CAAC;YACH,CAAC;YAED,uDAAuD;YACvD,MAAM,MAAM,GAAG,CAAI,IAAkB,EAA6B,EAAE,CAClE,IAA4C,CAAA;YAC9C,MAAM,YAAY,GAA+C;gBAC/D,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACzC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC3C,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBACnD,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/C,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC3C,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACvC,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC7C,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;aAChD,CAAA;YACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAQ;gBACxC,MAAM,MAAM,CAAC,IAAI,CAAC;oBAChB,KAAK;oBACL,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,IAAI;iBACL,CAAC,CAAA;gBACF,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,GAAkB,EAAE,CAAA;YACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;gBAClD,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAC3B,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,eAAe,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE;YACxC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAA;QAChC,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAA;IACvD,OAAO;QACL,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC;QAClE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;QACrD,YAAY,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;KAC/C,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO;QACL,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QAC5B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KAC3B,CAAA;AACH,CAAC"}
|
package/dist/sync/index.d.ts
CHANGED
|
@@ -29,5 +29,6 @@ export { type ReconstructSleepResult, reconstructSleepSessions, } from './mapper
|
|
|
29
29
|
export { mapSpo2 } from './mapper/spo2';
|
|
30
30
|
export { mapTemperature } from './mapper/temperature';
|
|
31
31
|
export { computeNightOf, parseTimestamp } from './mapper/time';
|
|
32
|
-
export type { ActivityBucketRow, ActivityRow, DeviceConfigRow, DeviceEventRow, FirmwareActivityRow, FirmwareBatteryRow, FirmwareExport, FirmwareHRRow, FirmwareHRVRow, FirmwareMonitoringWindow, FirmwareRingConfig, FirmwareSleepRow, FirmwareSpO2Row, FirmwareTempRow, HeartRateRow, HrvRow, MappedBatch, MapperContext, SleepRawRow, SleepSessionRow, SleepStageRow, Spo2Row, TemperatureRow, } from './mapper/types';
|
|
32
|
+
export type { ActivityBucketRow, ActivityRow, DeviceConfigRow, DeviceEventRow, FirmwareActivityRow, FirmwareBatteryRow, FirmwareExport, FirmwareHRRow, FirmwareHRVRow, FirmwareMonitoringWindow, FirmwareRingConfig, FirmwareSleepRow, FirmwareSpO2Row, FirmwareTempRow, HeartRateRow, HrvRow, MappedBatch, MapperContext, RingConfigTranslator, SleepRawRow, SleepSessionRow, SleepStageRow, Spo2Row, TemperatureRow, } from './mapper/types';
|
|
33
|
+
export { PendingClosesStore } from './pending_closes';
|
|
33
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/sync/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,YAAY,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,UAAU,EACf,QAAQ,EACR,KAAK,cAAc,GACpB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,SAAS,EACT,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAC3E,YAAY,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,YAAY,GACb,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGtE,OAAO,EACL,eAAe,EACf,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,aAAa,EACb,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EACL,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,sBAAsB,EAC3B,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9D,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,MAAM,EACN,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,OAAO,EACP,cAAc,GACf,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/index.js
CHANGED
|
@@ -34,4 +34,6 @@ export { reconstructSleepSessions, } from './mapper/sleep';
|
|
|
34
34
|
export { mapSpo2 } from './mapper/spo2';
|
|
35
35
|
export { mapTemperature } from './mapper/temperature';
|
|
36
36
|
export { computeNightOf, parseTimestamp } from './mapper/time';
|
|
37
|
+
// SCD-2 pending closes (Phase G+).
|
|
38
|
+
export { PendingClosesStore } from './pending_closes';
|
|
37
39
|
//# sourceMappingURL=index.js.map
|
package/dist/sync/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+BAA+B;AAC/B,OAAO,EAAE,YAAY,EAA2B,MAAM,UAAU,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAS1C,8CAA8C;AAC9C,OAAO,EAEL,cAAc,GAEf,MAAM,aAAa,CAAA;AACpB,OAAO,EAEL,QAAQ,GAET,MAAM,UAAU,CAAA;AACjB,OAAO,EAIL,SAAS,GAEV,MAAM,WAAW,CAAA;AAElB,gCAAgC;AAChC,OAAO,EACL,mBAAmB,EACnB,YAAY,EAEZ,gBAAgB,EAGhB,wBAAwB,GAGzB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAsB,MAAM,UAAU,CAAA;AACxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GAEd,MAAM,YAAY,CAAA;AAEnB,wCAAwC;AACxC,OAAO,EAAE,iBAAiB,EAAgC,MAAM,WAAW,CAAA;AAO3E,OAAO,EAAE,YAAY,EAA0B,cAAc,EAAE,MAAM,WAAW,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtE,mCAAmC;AACnC,OAAO,EACL,eAAe,EACf,cAAc,GAKf,MAAM,UAAU,CAAA;AAEjB,uBAAuB;AACvB,OAAO,EAQL,aAAa,GAEd,MAAM,aAAa,CAAA;AAEpB,qBAAqB;AACrB,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAEL,iBAAiB,GAElB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAEL,aAAa,GAEd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+BAA+B;AAC/B,OAAO,EAAE,YAAY,EAA2B,MAAM,UAAU,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAS1C,8CAA8C;AAC9C,OAAO,EAEL,cAAc,GAEf,MAAM,aAAa,CAAA;AACpB,OAAO,EAEL,QAAQ,GAET,MAAM,UAAU,CAAA;AACjB,OAAO,EAIL,SAAS,GAEV,MAAM,WAAW,CAAA;AAElB,gCAAgC;AAChC,OAAO,EACL,mBAAmB,EACnB,YAAY,EAEZ,gBAAgB,EAGhB,wBAAwB,GAGzB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAsB,MAAM,UAAU,CAAA;AACxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GAEd,MAAM,YAAY,CAAA;AAEnB,wCAAwC;AACxC,OAAO,EAAE,iBAAiB,EAAgC,MAAM,WAAW,CAAA;AAO3E,OAAO,EAAE,YAAY,EAA0B,cAAc,EAAE,MAAM,WAAW,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtE,mCAAmC;AACnC,OAAO,EACL,eAAe,EACf,cAAc,GAKf,MAAM,UAAU,CAAA;AAEjB,uBAAuB;AACvB,OAAO,EAQL,aAAa,GAEd,MAAM,aAAa,CAAA;AAEpB,qBAAqB;AACrB,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAEL,iBAAiB,GAElB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAEL,aAAa,GAEd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AA6B9D,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -14,12 +14,23 @@
|
|
|
14
14
|
* shape contract.
|
|
15
15
|
*/
|
|
16
16
|
import { type RingConfigClose } from './ring-config';
|
|
17
|
-
import type { DeviceConfigRow, FirmwareExport, MappedBatch, MapperContext } from './types';
|
|
17
|
+
import type { DeviceConfigRow, FirmwareExport, MappedBatch, MapperContext, RingConfigTranslator } from './types';
|
|
18
18
|
export interface MapFirmwareOptions {
|
|
19
19
|
/** Override for deterministic tests. Defaults to `new Date()`. */
|
|
20
20
|
now?: Date;
|
|
21
|
-
/**
|
|
22
|
-
|
|
21
|
+
/**
|
|
22
|
+
* SCD-2 prior-config map keyed by `data_type` (integer) — see
|
|
23
|
+
* `mapRingConfig`. Required whenever `fw.ring` is non-empty; the mapper
|
|
24
|
+
* skips ring-config translation entirely when this is absent and `fw.ring`
|
|
25
|
+
* has no windows.
|
|
26
|
+
*/
|
|
27
|
+
activePriorConfigs?: ReadonlyMap<number, DeviceConfigRow>;
|
|
28
|
+
/**
|
|
29
|
+
* Consumer-provided translation from firmware ring metrics to schema
|
|
30
|
+
* fields. Required if `fw.ring.automaticMonitoringData` has entries;
|
|
31
|
+
* skipped (empty inserts + closes) if absent.
|
|
32
|
+
*/
|
|
33
|
+
translator?: RingConfigTranslator;
|
|
23
34
|
}
|
|
24
35
|
export interface FirmwareMappedBatch extends MappedBatch {
|
|
25
36
|
device_config_closes: RingConfigClose[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firmware.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/firmware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAInE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,
|
|
1
|
+
{"version":3,"file":"firmware.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/firmware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAInE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,GAAG,CAAC,EAAE,IAAI,CAAA;IACV;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACzD;;;;OAIG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAA;CAClC;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,oBAAoB,EAAE,eAAe,EAAE,CAAA;CACxC;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE,kBAAuB,GAC5B,mBAAmB,CAmBrB"}
|
|
@@ -24,7 +24,7 @@ import { mapTemperature } from './temperature';
|
|
|
24
24
|
export function mapFirmwareExport(fw, ctx, opts = {}) {
|
|
25
25
|
const activity = mapActivity(fw.activitydetails ?? [], ctx);
|
|
26
26
|
const sleep = reconstructSleepSessions(fw.sleep_processed ?? [], ctx);
|
|
27
|
-
const config =
|
|
27
|
+
const config = mapRingConfigIfPossible(fw, ctx, opts);
|
|
28
28
|
return {
|
|
29
29
|
hrv: mapHrv(fw.hrv_table ?? [], ctx),
|
|
30
30
|
heart_rate: mapHeartRate(fw.heartrate ?? [], ctx),
|
|
@@ -40,4 +40,25 @@ export function mapFirmwareExport(fw, ctx, opts = {}) {
|
|
|
40
40
|
device_config_closes: config.closes,
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Guard around `mapRingConfig`. When the firmware has no ring windows and no
|
|
45
|
+
* translator is supplied, we short-circuit to an empty result rather than
|
|
46
|
+
* threading a required-translator error through every synthetic firmware
|
|
47
|
+
* call site that doesn't touch device_config (e.g. unit fixtures for other
|
|
48
|
+
* sub-mappers).
|
|
49
|
+
*/
|
|
50
|
+
function mapRingConfigIfPossible(fw, ctx, opts) {
|
|
51
|
+
const windows = fw.ring?.automaticMonitoringData ?? [];
|
|
52
|
+
if (windows.length === 0 && !opts.translator) {
|
|
53
|
+
return { inserts: [], closes: [] };
|
|
54
|
+
}
|
|
55
|
+
if (!opts.translator) {
|
|
56
|
+
throw new Error('mapFirmwareExport: firmware ring.automaticMonitoringData has entries but no `translator` was provided in options');
|
|
57
|
+
}
|
|
58
|
+
return mapRingConfig(fw.ring ?? { automaticMonitoringData: [] }, ctx, {
|
|
59
|
+
now: opts.now,
|
|
60
|
+
activePriorConfigs: opts.activePriorConfigs,
|
|
61
|
+
translator: opts.translator,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
43
64
|
//# sourceMappingURL=firmware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firmware.js","sourceRoot":"","sources":["../../../src/sync/mapper/firmware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAwB,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"firmware.js","sourceRoot":"","sources":["../../../src/sync/mapper/firmware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAwB,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AA+B9C,MAAM,UAAU,iBAAiB,CAC/B,EAAkB,EAClB,GAAkB,EAClB,OAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IAC3D,MAAM,KAAK,GAAG,wBAAwB,CAAC,EAAE,CAAC,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IACrE,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAErD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC;QACpC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC;QACjD,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC;QACjC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,iBAAiB,IAAI,EAAE,EAAE,GAAG,CAAC;QAC5D,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC;QACrD,aAAa,EAAE,MAAM,CAAC,OAAO;QAC7B,oBAAoB,EAAE,MAAM,CAAC,MAAM;KACpC,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAC9B,EAAkB,EAClB,GAAkB,EAClB,IAAwB;IAExB,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,uBAAuB,IAAI,EAAE,CAAA;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACpC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAA;IACH,CAAC;IACD,OAAO,aAAa,CAClB,EAAE,CAAC,IAAI,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAC1C,GAAG,EACH;QACE,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CACF,CAAA;AACH,CAAC"}
|
|
@@ -7,27 +7,41 @@
|
|
|
7
7
|
* the new insert.
|
|
8
8
|
*
|
|
9
9
|
* Closing prior config (SCD-2 semantics):
|
|
10
|
-
* The mapper accepts an optional `activePriorConfigs` map keyed by
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* can `UPDATE ... SET valid_to =
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* The mapper accepts an optional `activePriorConfigs` map keyed by
|
|
11
|
+
* `data_type` (integer, produced via the translator). For every metric that
|
|
12
|
+
* shows up in the new firmware snapshot, if a prior config was open, the
|
|
13
|
+
* mapper emits a `close` entry so the sink can `UPDATE ... SET valid_to =
|
|
14
|
+
* now()` locally before the INSERT lands, and enqueue the same directive
|
|
15
|
+
* for the next remote push cycle. Metrics present in the prior map but
|
|
16
|
+
* absent from the new firmware are left open (the ring is silent on them,
|
|
17
|
+
* not disabling them).
|
|
16
18
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
+
* Translation:
|
|
20
|
+
* The mapper cannot invent `data_type` integers or `start_time`/`end_time`
|
|
21
|
+
* strings on its own — those are consumer-specific enumerations. Callers
|
|
22
|
+
* MUST pass a `RingConfigTranslator` in `opts` (see `mapper/types.ts`).
|
|
23
|
+
* Without a translator the mapper cannot produce a schema-shaped row, so
|
|
24
|
+
* the option is required — TypeScript enforces this at every call site.
|
|
25
|
+
*
|
|
26
|
+
* The mapper stays pure: no engine access, no clock reads beyond the injected
|
|
27
|
+
* `now` (defaults to `new Date()` for production).
|
|
19
28
|
*/
|
|
20
|
-
import type { DeviceConfigRow, FirmwareRingConfig, MapperContext } from './types';
|
|
29
|
+
import type { DeviceConfigRow, FirmwareRingConfig, MapperContext, RingConfigTranslator } from './types';
|
|
21
30
|
export interface RingConfigClose {
|
|
22
|
-
|
|
31
|
+
device_id: string;
|
|
32
|
+
data_type: number;
|
|
23
33
|
valid_to: Date;
|
|
24
34
|
}
|
|
25
35
|
export interface MapRingConfigResult {
|
|
26
36
|
inserts: DeviceConfigRow[];
|
|
27
37
|
closes: RingConfigClose[];
|
|
28
38
|
}
|
|
29
|
-
export
|
|
39
|
+
export interface MapRingConfigOptions {
|
|
30
40
|
now?: Date;
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
/** Prior open configs for this device, keyed by `data_type`. */
|
|
42
|
+
activePriorConfigs?: ReadonlyMap<number, DeviceConfigRow>;
|
|
43
|
+
/** Required — consumer-provided translation from firmware to schema. */
|
|
44
|
+
translator: RingConfigTranslator;
|
|
45
|
+
}
|
|
46
|
+
export declare function mapRingConfig(fw: FirmwareRingConfig, ctx: MapperContext, opts: MapRingConfigOptions): MapRingConfigResult;
|
|
33
47
|
//# sourceMappingURL=ring-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ring-config.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/ring-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ring-config.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/ring-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,eAAe,EAEf,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,IAAI,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACzD,wEAAwE;IACxE,UAAU,EAAE,oBAAoB,CAAA;CACjC;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,kBAAkB,EACtB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,oBAAoB,GACzB,mBAAmB,CAiBrB"}
|
|
@@ -7,40 +7,53 @@
|
|
|
7
7
|
* the new insert.
|
|
8
8
|
*
|
|
9
9
|
* Closing prior config (SCD-2 semantics):
|
|
10
|
-
* The mapper accepts an optional `activePriorConfigs` map keyed by
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* can `UPDATE ... SET valid_to =
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* The mapper accepts an optional `activePriorConfigs` map keyed by
|
|
11
|
+
* `data_type` (integer, produced via the translator). For every metric that
|
|
12
|
+
* shows up in the new firmware snapshot, if a prior config was open, the
|
|
13
|
+
* mapper emits a `close` entry so the sink can `UPDATE ... SET valid_to =
|
|
14
|
+
* now()` locally before the INSERT lands, and enqueue the same directive
|
|
15
|
+
* for the next remote push cycle. Metrics present in the prior map but
|
|
16
|
+
* absent from the new firmware are left open (the ring is silent on them,
|
|
17
|
+
* not disabling them).
|
|
16
18
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
+
* Translation:
|
|
20
|
+
* The mapper cannot invent `data_type` integers or `start_time`/`end_time`
|
|
21
|
+
* strings on its own — those are consumer-specific enumerations. Callers
|
|
22
|
+
* MUST pass a `RingConfigTranslator` in `opts` (see `mapper/types.ts`).
|
|
23
|
+
* Without a translator the mapper cannot produce a schema-shaped row, so
|
|
24
|
+
* the option is required — TypeScript enforces this at every call site.
|
|
25
|
+
*
|
|
26
|
+
* The mapper stays pure: no engine access, no clock reads beyond the injected
|
|
27
|
+
* `now` (defaults to `new Date()` for production).
|
|
19
28
|
*/
|
|
20
|
-
export function mapRingConfig(fw, ctx, opts
|
|
29
|
+
export function mapRingConfig(fw, ctx, opts) {
|
|
21
30
|
const now = opts.now ?? new Date();
|
|
22
31
|
const prior = opts.activePriorConfigs ?? new Map();
|
|
32
|
+
const translator = opts.translator;
|
|
23
33
|
const inserts = [];
|
|
24
34
|
const closes = [];
|
|
25
35
|
for (const window of fw.automaticMonitoringData ?? []) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
const dataType = translator.metricToDataType(window.metric);
|
|
37
|
+
inserts.push(toRow(window, ctx, now, dataType, translator));
|
|
38
|
+
if (prior.has(dataType)) {
|
|
39
|
+
closes.push({ device_id: ctx.deviceId, data_type: dataType, valid_to: now });
|
|
29
40
|
}
|
|
30
41
|
}
|
|
31
42
|
return { inserts, closes };
|
|
32
43
|
}
|
|
33
|
-
function toRow(window, ctx, now) {
|
|
44
|
+
function toRow(window, ctx, now, dataType, translator) {
|
|
45
|
+
const fields = translator.windowToSchemaFields(window);
|
|
34
46
|
return {
|
|
35
47
|
ts: now,
|
|
36
48
|
brand: ctx.brand,
|
|
37
49
|
family_id: ctx.familyId,
|
|
38
50
|
user_id: ctx.userId,
|
|
39
51
|
device_id: ctx.deviceId,
|
|
40
|
-
|
|
52
|
+
data_type: dataType,
|
|
41
53
|
interval_minutes: window.interval_minutes,
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
start_time: fields.start_time,
|
|
55
|
+
end_time: fields.end_time,
|
|
56
|
+
weeks: fields.weeks,
|
|
44
57
|
valid_from: now,
|
|
45
58
|
valid_to: null,
|
|
46
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ring-config.js","sourceRoot":"","sources":["../../../src/sync/mapper/ring-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ring-config.js","sourceRoot":"","sources":["../../../src/sync/mapper/ring-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AA6BH,MAAM,UAAU,aAAa,CAC3B,EAAsB,EACtB,GAAkB,EAClB,IAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,GAAG,EAA2B,CAAA;IAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;IAElC,MAAM,OAAO,GAAsB,EAAE,CAAA;IACrC,MAAM,MAAM,GAAsB,EAAE,CAAA;IAEpC,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,uBAAuB,IAAI,EAAE,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;QAC3D,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAC5B,CAAC;AAED,SAAS,KAAK,CACZ,MAAgC,EAChC,GAAkB,EAClB,GAAS,EACT,QAAgB,EAChB,UAAgC;IAEhC,MAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACtD,OAAO;QACL,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,OAAO,EAAE,GAAG,CAAC,MAAM;QACnB,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,SAAS,EAAE,QAAQ;QACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,IAAI;KACf,CAAA;AACH,CAAC"}
|
|
@@ -127,14 +127,46 @@ export interface DeviceEventRow extends BaseRow {
|
|
|
127
127
|
event_type: string;
|
|
128
128
|
payload: Record<string, unknown>;
|
|
129
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* `device_config` warehouse row shape (SCD-2). Column names match the DDL in
|
|
132
|
+
* `core/schemas.ts` exactly so that a `row[c]` lookup keyed by
|
|
133
|
+
* `columnOrder.device_config` produces the correct positional appender input.
|
|
134
|
+
*
|
|
135
|
+
* Fields that the firmware doesn't natively speak in schema terms
|
|
136
|
+
* (`data_type`, `start_time`, `end_time`, `weeks`) are produced by a
|
|
137
|
+
* consumer-provided `RingConfigTranslator` (see below).
|
|
138
|
+
*/
|
|
130
139
|
export interface DeviceConfigRow extends BaseRow {
|
|
131
|
-
|
|
140
|
+
data_type: number;
|
|
132
141
|
interval_minutes: number;
|
|
133
|
-
|
|
134
|
-
|
|
142
|
+
start_time: string | null;
|
|
143
|
+
end_time: string | null;
|
|
144
|
+
weeks: number | null;
|
|
135
145
|
valid_from: Date;
|
|
136
146
|
valid_to: Date | null;
|
|
137
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Consumer-provided translation from firmware ring-config semantics to
|
|
150
|
+
* warehouse schema semantics. Required at `createSyncManager()` time whenever
|
|
151
|
+
* the subscribed tables include `'device_config'`.
|
|
152
|
+
*
|
|
153
|
+
* Split into three responsibilities so the mapper can:
|
|
154
|
+
* - materialize `data_type` per insert (`metricToDataType`);
|
|
155
|
+
* - key `activePriorConfigs` by `data_type` when reading local state
|
|
156
|
+
* (`dataTypeToMetric` — round-trips the enum for callers that want to
|
|
157
|
+
* surface metric names in logs or diagnostics);
|
|
158
|
+
* - compute the schema-shaped time fields per firmware window
|
|
159
|
+
* (`windowToSchemaFields`).
|
|
160
|
+
*/
|
|
161
|
+
export interface RingConfigTranslator {
|
|
162
|
+
metricToDataType: (metric: string) => number;
|
|
163
|
+
dataTypeToMetric: (dataType: number) => string;
|
|
164
|
+
windowToSchemaFields: (window: FirmwareMonitoringWindow) => {
|
|
165
|
+
start_time: string | null;
|
|
166
|
+
end_time: string | null;
|
|
167
|
+
weeks: number | null;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
138
170
|
export interface MappedBatch {
|
|
139
171
|
hrv: HrvRow[];
|
|
140
172
|
heart_rate: HeartRateRow[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sync/mapper/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAA;CACrB;AAID,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,uBAAuB,EAAE,wBAAwB,EAAE,CAAA;CACpD;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,IAAI,EAAE,eAAe,EAAE,CAAA;IACvB,iBAAiB,EAAE,eAAe,EAAE,CAAA;IACpC,eAAe,EAAE,mBAAmB,EAAE,CAAA;IACtC,eAAe,EAAE,gBAAgB,EAAE,CAAA;IACnC,aAAa,EAAE,kBAAkB,EAAE,CAAA;IACnC,IAAI,EAAE,kBAAkB,CAAA;CACzB;AAID,UAAU,OAAO;IACf,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,MAAO,SAAQ,OAAO;IACrC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACtC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAe,SAAQ,OAAO;IAC7C,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,IAAI,CAAA;IACd,MAAM,EAAE,IAAI,CAAA;IACZ,QAAQ,EAAE,IAAI,CAAA;CACf;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,OAAO;IAC7C,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,UAAU,EAAE,IAAI,CAAA;IAChB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;IAC5C,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9C,oBAAoB,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK;QAC1D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACrB,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,UAAU,EAAE,YAAY,EAAE,CAAA;IAC1B,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,eAAe,EAAE,iBAAiB,EAAE,CAAA;IACpC,aAAa,EAAE,eAAe,EAAE,CAAA;IAChC,WAAW,EAAE,aAAa,EAAE,CAAA;IAC5B,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,YAAY,EAAE,cAAc,EAAE,CAAA;IAC9B,aAAa,EAAE,eAAe,EAAE,CAAA;CACjC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pending SCD-2 closes queue (T-08 continuation).
|
|
3
|
+
*
|
|
4
|
+
* `mapRingConfig` emits `RingConfigClose[]` whenever a firmware ring-config
|
|
5
|
+
* snapshot supersedes a currently-open `device_config` row. Local UPDATE
|
|
6
|
+
* fires in-line inside `pushFirmware`; the remote UPDATE (against the
|
|
7
|
+
* Iceberg zone via DuckDB) runs on the next scheduler cycle so it inherits
|
|
8
|
+
* the same retry/backoff semantics as the INSERT pusher.
|
|
9
|
+
*
|
|
10
|
+
* Between those two moments the sink parks the close directives here. The
|
|
11
|
+
* enqueue happens *before* local UPDATE so a crash in between leaves a
|
|
12
|
+
* replay-safe record — the remote UPDATE is idempotent thanks to the
|
|
13
|
+
* `valid_to IS NULL` guard in `R2Pusher.pushCloses`.
|
|
14
|
+
*
|
|
15
|
+
* Key convention:
|
|
16
|
+
* `analytics:pending_closes:{brand}:{tenantId}` → JSON array of the
|
|
17
|
+
* serialized close shape.
|
|
18
|
+
*
|
|
19
|
+
* Serialization: `Date → ISO string`, restored to `Date` on drain.
|
|
20
|
+
*/
|
|
21
|
+
import type { AttachContext, KVStore } from '../core/types';
|
|
22
|
+
import type { RingConfigClose } from './mapper/ring-config';
|
|
23
|
+
export declare class PendingClosesStore {
|
|
24
|
+
#private;
|
|
25
|
+
constructor(kv: KVStore);
|
|
26
|
+
enqueue(ctx: Pick<AttachContext, 'brand' | 'tenantId'>, closes: readonly RingConfigClose[]): Promise<void>;
|
|
27
|
+
drain(ctx: Pick<AttachContext, 'brand' | 'tenantId'>): Promise<RingConfigClose[]>;
|
|
28
|
+
requeue(ctx: Pick<AttachContext, 'brand' | 'tenantId'>, closes: readonly RingConfigClose[]): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=pending_closes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending_closes.d.ts","sourceRoot":"","sources":["../../src/sync/pending_closes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA8B3D,qBAAa,kBAAkB;;gBAGjB,EAAE,EAAE,OAAO;IAIjB,OAAO,CACX,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,UAAU,CAAC,EAC9C,MAAM,EAAE,SAAS,eAAe,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;IAQV,KAAK,CACT,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,UAAU,CAAC,GAC7C,OAAO,CAAC,eAAe,EAAE,CAAC;IAQvB,OAAO,CACX,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,UAAU,CAAC,EAC9C,MAAM,EAAE,SAAS,eAAe,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;CAQjB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pending SCD-2 closes queue (T-08 continuation).
|
|
3
|
+
*
|
|
4
|
+
* `mapRingConfig` emits `RingConfigClose[]` whenever a firmware ring-config
|
|
5
|
+
* snapshot supersedes a currently-open `device_config` row. Local UPDATE
|
|
6
|
+
* fires in-line inside `pushFirmware`; the remote UPDATE (against the
|
|
7
|
+
* Iceberg zone via DuckDB) runs on the next scheduler cycle so it inherits
|
|
8
|
+
* the same retry/backoff semantics as the INSERT pusher.
|
|
9
|
+
*
|
|
10
|
+
* Between those two moments the sink parks the close directives here. The
|
|
11
|
+
* enqueue happens *before* local UPDATE so a crash in between leaves a
|
|
12
|
+
* replay-safe record — the remote UPDATE is idempotent thanks to the
|
|
13
|
+
* `valid_to IS NULL` guard in `R2Pusher.pushCloses`.
|
|
14
|
+
*
|
|
15
|
+
* Key convention:
|
|
16
|
+
* `analytics:pending_closes:{brand}:{tenantId}` → JSON array of the
|
|
17
|
+
* serialized close shape.
|
|
18
|
+
*
|
|
19
|
+
* Serialization: `Date → ISO string`, restored to `Date` on drain.
|
|
20
|
+
*/
|
|
21
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
22
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
23
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
24
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
25
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
26
|
+
};
|
|
27
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
28
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
29
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
30
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
31
|
+
};
|
|
32
|
+
var _PendingClosesStore_kv;
|
|
33
|
+
const KEY_PREFIX = 'analytics:pending_closes';
|
|
34
|
+
function key(ctx) {
|
|
35
|
+
return `${KEY_PREFIX}:${ctx.brand}:${ctx.tenantId}`;
|
|
36
|
+
}
|
|
37
|
+
function serialize(close) {
|
|
38
|
+
return {
|
|
39
|
+
device_id: close.device_id,
|
|
40
|
+
data_type: close.data_type,
|
|
41
|
+
valid_to: close.valid_to.toISOString(),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function deserialize(row) {
|
|
45
|
+
return {
|
|
46
|
+
device_id: row.device_id,
|
|
47
|
+
data_type: row.data_type,
|
|
48
|
+
valid_to: new Date(row.valid_to),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export class PendingClosesStore {
|
|
52
|
+
constructor(kv) {
|
|
53
|
+
_PendingClosesStore_kv.set(this, void 0);
|
|
54
|
+
__classPrivateFieldSet(this, _PendingClosesStore_kv, kv, "f");
|
|
55
|
+
}
|
|
56
|
+
async enqueue(ctx, closes) {
|
|
57
|
+
if (closes.length === 0)
|
|
58
|
+
return;
|
|
59
|
+
const k = key(ctx);
|
|
60
|
+
const existing = (await __classPrivateFieldGet(this, _PendingClosesStore_kv, "f").get(k)) ?? [];
|
|
61
|
+
const next = [...existing, ...closes.map(serialize)];
|
|
62
|
+
await __classPrivateFieldGet(this, _PendingClosesStore_kv, "f").set(k, next);
|
|
63
|
+
}
|
|
64
|
+
async drain(ctx) {
|
|
65
|
+
const k = key(ctx);
|
|
66
|
+
const rows = (await __classPrivateFieldGet(this, _PendingClosesStore_kv, "f").get(k)) ?? [];
|
|
67
|
+
if (rows.length === 0)
|
|
68
|
+
return [];
|
|
69
|
+
await __classPrivateFieldGet(this, _PendingClosesStore_kv, "f").delete(k);
|
|
70
|
+
return rows.map(deserialize);
|
|
71
|
+
}
|
|
72
|
+
async requeue(ctx, closes) {
|
|
73
|
+
if (closes.length === 0)
|
|
74
|
+
return;
|
|
75
|
+
const k = key(ctx);
|
|
76
|
+
const existing = (await __classPrivateFieldGet(this, _PendingClosesStore_kv, "f").get(k)) ?? [];
|
|
77
|
+
// Prepend the requeued closes so the next drain retries them first.
|
|
78
|
+
const next = [...closes.map(serialize), ...existing];
|
|
79
|
+
await __classPrivateFieldGet(this, _PendingClosesStore_kv, "f").set(k, next);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
_PendingClosesStore_kv = new WeakMap();
|
|
83
|
+
//# sourceMappingURL=pending_closes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending_closes.js","sourceRoot":"","sources":["../../src/sync/pending_closes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;;;;;;;AAMH,MAAM,UAAU,GAAG,0BAA0B,CAAA;AAQ7C,SAAS,GAAG,CAAC,GAA8C;IACzD,OAAO,GAAG,UAAU,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAA;AACrD,CAAC;AAED,SAAS,SAAS,CAAC,KAAsB;IACvC,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;KACvC,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAoB;IACvC,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;KACjC,CAAA;AACH,CAAC;AAED,MAAM,OAAO,kBAAkB;IAG7B,YAAY,EAAW;QAFd,yCAAY;QAGnB,uBAAA,IAAI,0BAAO,EAAE,MAAA,CAAA;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CACX,GAA8C,EAC9C,MAAkC;QAElC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,QAAQ,GAAG,CAAC,MAAM,uBAAA,IAAI,8BAAI,CAAC,GAAG,CAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjE,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;QACpD,MAAM,uBAAA,IAAI,8BAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK,CACT,GAA8C;QAE9C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,IAAI,GAAG,CAAC,MAAM,uBAAA,IAAI,8BAAI,CAAC,GAAG,CAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;QAChC,MAAM,uBAAA,IAAI,8BAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,GAA8C,EAC9C,MAAkC;QAElC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,QAAQ,GAAG,CAAC,MAAM,uBAAA,IAAI,8BAAI,CAAC,GAAG,CAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjE,oEAAoE;QACpE,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAA;QACpD,MAAM,uBAAA,IAAI,8BAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;CACF"}
|
package/dist/sync/pusher.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ import type { HybridDuckDB } from '../core/engine';
|
|
|
19
19
|
import type { AttachContext } from '../core/types';
|
|
20
20
|
import { SyncError } from './errors';
|
|
21
21
|
import type { PushEmitter } from './events';
|
|
22
|
+
import type { RingConfigClose } from './mapper/ring-config';
|
|
22
23
|
import type { WatermarkStore } from './watermark';
|
|
23
24
|
export interface PushResult {
|
|
24
25
|
table: string;
|
|
@@ -54,6 +55,26 @@ export declare class R2Pusher {
|
|
|
54
55
|
#private;
|
|
55
56
|
constructor(config: R2PusherConfig);
|
|
56
57
|
push(table: string, ctx: AttachContext): Promise<PushResult>;
|
|
58
|
+
/**
|
|
59
|
+
* SCD-2 close directives → remote UPDATE (T-08 continuation).
|
|
60
|
+
*
|
|
61
|
+
* Each close becomes:
|
|
62
|
+
* UPDATE <remote>.device_config
|
|
63
|
+
* SET valid_to = $valid_to
|
|
64
|
+
* WHERE device_id = $device_id
|
|
65
|
+
* AND data_type = $data_type
|
|
66
|
+
* AND family_id = $family_id
|
|
67
|
+
* AND valid_to IS NULL
|
|
68
|
+
*
|
|
69
|
+
* The `valid_to IS NULL` guard makes replaying the same close a no-op,
|
|
70
|
+
* which is what lets the `PendingClosesStore` + scheduler retry cycle
|
|
71
|
+
* survive crashes between local UPDATE and remote UPDATE.
|
|
72
|
+
*
|
|
73
|
+
* 401 handling mirrors `#pushOrCatch`: one `refreshToken()` + retry, then
|
|
74
|
+
* surface `token_expired`. Other errors surface `push_failed` and leave
|
|
75
|
+
* the caller responsible for requeueing.
|
|
76
|
+
*/
|
|
77
|
+
pushCloses(closes: readonly RingConfigClose[], ctx: AttachContext): Promise<PushResult>;
|
|
57
78
|
pushAll(tables: readonly string[], ctx: AttachContext): Promise<PushResult[]>;
|
|
58
79
|
}
|
|
59
80
|
//# sourceMappingURL=pusher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pusher.d.ts","sourceRoot":"","sources":["../../src/sync/pusher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,cAAc,CAAA;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;IACjC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC3D;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAYD,qBAAa,QAAQ;;gBASP,MAAM,EAAE,cAAc;IAU5B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"pusher.d.ts","sourceRoot":"","sources":["../../src/sync/pusher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,cAAc,CAAA;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;IACjC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC3D;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAYD,qBAAa,QAAQ;;gBASP,MAAM,EAAE,cAAc;IAU5B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAwBlE;;;;;;;;;;;;;;;;;;OAkBG;IACG,UAAU,CACd,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,UAAU,CAAC;IAiDhB,OAAO,CACX,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,UAAU,EAAE,CAAC;CAmEzB"}
|
package/dist/sync/pusher.js
CHANGED
|
@@ -26,7 +26,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
26
26
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
27
27
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
28
28
|
};
|
|
29
|
-
var _R2Pusher_instances, _R2Pusher_engine, _R2Pusher_watermark, _R2Pusher_refreshToken, _R2Pusher_is401, _R2Pusher_localTable, _R2Pusher_remoteTable, _R2Pusher_emit, _R2Pusher_pushOrCatch, _R2Pusher_pushOnce, _R2Pusher_toFailure;
|
|
29
|
+
var _R2Pusher_instances, _R2Pusher_engine, _R2Pusher_watermark, _R2Pusher_refreshToken, _R2Pusher_is401, _R2Pusher_localTable, _R2Pusher_remoteTable, _R2Pusher_emit, _R2Pusher_pushOrCatch, _R2Pusher_pushClosesOrCatch, _R2Pusher_pushClosesOnce, _R2Pusher_pushOnce, _R2Pusher_toFailure;
|
|
30
30
|
import { timeColumnFor } from '../core/table_metadata';
|
|
31
31
|
import { SyncError } from './errors';
|
|
32
32
|
const DEFAULT_IS_401 = (err) => {
|
|
@@ -60,6 +60,30 @@ export class R2Pusher {
|
|
|
60
60
|
__classPrivateFieldGet(this, _R2Pusher_emit, "f")?.call(this, result);
|
|
61
61
|
return result;
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* SCD-2 close directives → remote UPDATE (T-08 continuation).
|
|
65
|
+
*
|
|
66
|
+
* Each close becomes:
|
|
67
|
+
* UPDATE <remote>.device_config
|
|
68
|
+
* SET valid_to = $valid_to
|
|
69
|
+
* WHERE device_id = $device_id
|
|
70
|
+
* AND data_type = $data_type
|
|
71
|
+
* AND family_id = $family_id
|
|
72
|
+
* AND valid_to IS NULL
|
|
73
|
+
*
|
|
74
|
+
* The `valid_to IS NULL` guard makes replaying the same close a no-op,
|
|
75
|
+
* which is what lets the `PendingClosesStore` + scheduler retry cycle
|
|
76
|
+
* survive crashes between local UPDATE and remote UPDATE.
|
|
77
|
+
*
|
|
78
|
+
* 401 handling mirrors `#pushOrCatch`: one `refreshToken()` + retry, then
|
|
79
|
+
* surface `token_expired`. Other errors surface `push_failed` and leave
|
|
80
|
+
* the caller responsible for requeueing.
|
|
81
|
+
*/
|
|
82
|
+
async pushCloses(closes, ctx) {
|
|
83
|
+
const result = await __classPrivateFieldGet(this, _R2Pusher_instances, "m", _R2Pusher_pushClosesOrCatch).call(this, closes, ctx);
|
|
84
|
+
__classPrivateFieldGet(this, _R2Pusher_emit, "f")?.call(this, result);
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
63
87
|
async pushAll(tables, ctx) {
|
|
64
88
|
const settled = await Promise.allSettled(tables.map(t => this.push(t, ctx)));
|
|
65
89
|
return settled.map((r, i) => {
|
|
@@ -88,6 +112,36 @@ _R2Pusher_engine = new WeakMap(), _R2Pusher_watermark = new WeakMap(), _R2Pusher
|
|
|
88
112
|
}
|
|
89
113
|
return __classPrivateFieldGet(this, _R2Pusher_instances, "m", _R2Pusher_toFailure).call(this, table, err, 'push_failed');
|
|
90
114
|
}
|
|
115
|
+
}, _R2Pusher_pushClosesOrCatch = async function _R2Pusher_pushClosesOrCatch(closes, ctx) {
|
|
116
|
+
try {
|
|
117
|
+
return await __classPrivateFieldGet(this, _R2Pusher_instances, "m", _R2Pusher_pushClosesOnce).call(this, closes, ctx);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
if (__classPrivateFieldGet(this, _R2Pusher_is401, "f").call(this, err) && __classPrivateFieldGet(this, _R2Pusher_refreshToken, "f")) {
|
|
121
|
+
try {
|
|
122
|
+
await __classPrivateFieldGet(this, _R2Pusher_refreshToken, "f").call(this);
|
|
123
|
+
return await __classPrivateFieldGet(this, _R2Pusher_instances, "m", _R2Pusher_pushClosesOnce).call(this, closes, ctx);
|
|
124
|
+
}
|
|
125
|
+
catch (retryErr) {
|
|
126
|
+
return __classPrivateFieldGet(this, _R2Pusher_instances, "m", _R2Pusher_toFailure).call(this, 'device_config', retryErr, 'token_expired');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return __classPrivateFieldGet(this, _R2Pusher_instances, "m", _R2Pusher_toFailure).call(this, 'device_config', err, 'push_failed');
|
|
130
|
+
}
|
|
131
|
+
}, _R2Pusher_pushClosesOnce = async function _R2Pusher_pushClosesOnce(closes, ctx) {
|
|
132
|
+
if (closes.length === 0) {
|
|
133
|
+
return { table: 'device_config', rowsPushed: 0, ok: true };
|
|
134
|
+
}
|
|
135
|
+
const remote = __classPrivateFieldGet(this, _R2Pusher_remoteTable, "f").call(this, ctx, 'device_config');
|
|
136
|
+
for (const close of closes) {
|
|
137
|
+
await __classPrivateFieldGet(this, _R2Pusher_engine, "f").execute(`UPDATE ${remote} SET valid_to = $valid_to WHERE device_id = $device_id AND data_type = $data_type AND family_id = $family_id AND valid_to IS NULL`, {
|
|
138
|
+
valid_to: close.valid_to.toISOString(),
|
|
139
|
+
device_id: close.device_id,
|
|
140
|
+
data_type: close.data_type,
|
|
141
|
+
family_id: ctx.tenantId,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
return { table: 'device_config', rowsPushed: closes.length, ok: true };
|
|
91
145
|
}, _R2Pusher_pushOnce = async function _R2Pusher_pushOnce(table, ctx) {
|
|
92
146
|
const tsCol = timeColumnFor(table);
|
|
93
147
|
const watermark = await __classPrivateFieldGet(this, _R2Pusher_watermark, "f").get(ctx.brand, ctx.tenantId, table, 'push');
|
package/dist/sync/pusher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pusher.js","sourceRoot":"","sources":["../../src/sync/pusher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"pusher.js","sourceRoot":"","sources":["../../src/sync/pusher.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/scheduler.d.ts
CHANGED
|
@@ -33,6 +33,13 @@ export interface SyncCoordinator {
|
|
|
33
33
|
pushAll: (tables: string[], ctx: AttachContext) => Promise<Array<{
|
|
34
34
|
ok: boolean;
|
|
35
35
|
}>>;
|
|
36
|
+
/**
|
|
37
|
+
* SCD-2 close directives (`device_config.valid_to = now()`) pending
|
|
38
|
+
* against the remote Iceberg zone. Drained + pushed between `pushAll`
|
|
39
|
+
* and `fetchIncremental` so the fetch step sees consistent closes.
|
|
40
|
+
* Optional — only wired when `tables` includes `'device_config'`.
|
|
41
|
+
*/
|
|
42
|
+
pushClosesForDeviceConfig?: (ctx: AttachContext) => Promise<void>;
|
|
36
43
|
fetchIncremental: (ctx: AttachContext) => Promise<Array<{
|
|
37
44
|
ok: boolean;
|
|
38
45
|
}>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/sync/scheduler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/sync/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3E,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACrD;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACjC;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAA;IAClF;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,gBAAgB,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAA;IACzE,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC5D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC3D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAC5D;AAED,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,yDAAyD;IACzD,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,kBAAkB,CAAA;IAClC,WAAW,EAAE,cAAc,CAAA;IAC3B,WAAW,EAAE,eAAe,CAAA;IAC5B,iCAAiC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,qCAAqC;IACrC,GAAG,EAAE,aAAa,CAAA;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,oBAAoB,CAAA;IACvC,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAEzD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAUD,qBAAa,aAAa;;gBAQZ,MAAM,EAAE,mBAAmB;IAgBvC,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI;IAKpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAItC,kDAAkD;IAC5C,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;CA8DzC"}
|
package/dist/sync/scheduler.js
CHANGED
|
@@ -96,6 +96,7 @@ _SyncScheduler_config = new WeakMap(), _SyncScheduler_state = new WeakMap(), _Sy
|
|
|
96
96
|
try {
|
|
97
97
|
await __classPrivateFieldGet(this, _SyncScheduler_config, "f").coordinator.flushAll();
|
|
98
98
|
await __classPrivateFieldGet(this, _SyncScheduler_config, "f").coordinator.pushAll(__classPrivateFieldGet(this, _SyncScheduler_config, "f").tables, __classPrivateFieldGet(this, _SyncScheduler_config, "f").ctx);
|
|
99
|
+
await __classPrivateFieldGet(this, _SyncScheduler_config, "f").coordinator.pushClosesForDeviceConfig?.(__classPrivateFieldGet(this, _SyncScheduler_config, "f").ctx);
|
|
99
100
|
await __classPrivateFieldGet(this, _SyncScheduler_config, "f").coordinator.fetchIncremental(__classPrivateFieldGet(this, _SyncScheduler_config, "f").ctx);
|
|
100
101
|
await __classPrivateFieldGet(this, _SyncScheduler_config, "f").coordinator.onCycleComplete?.();
|
|
101
102
|
__classPrivateFieldGet(this, _SyncScheduler_config, "f").logger.debug('scheduler.cycle.ok');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/sync/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/sync/scheduler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mongrov/analytics",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"description": "DuckDB + R2 Iceberg local analytics for @mongrov apps",
|
|
6
6
|
"license": "MIT",
|
|
@@ -104,8 +104,8 @@
|
|
|
104
104
|
"typescript": "^5.9.3",
|
|
105
105
|
"vitest": "^2.1.9",
|
|
106
106
|
"zod": "^3.23.8",
|
|
107
|
-
"@mongrov/
|
|
108
|
-
"@mongrov/
|
|
107
|
+
"@mongrov/db": "0.3.0",
|
|
108
|
+
"@mongrov/types": "0.4.0"
|
|
109
109
|
},
|
|
110
110
|
"scripts": {
|
|
111
111
|
"build": "tsc -p tsconfig.build.json",
|