@mongrov/analytics 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/README.md +23 -10
  2. package/UPGRADING.md +456 -0
  3. package/dist/core/device-events.d.ts +14 -0
  4. package/dist/core/device-events.d.ts.map +1 -0
  5. package/dist/core/device-events.js +13 -0
  6. package/dist/core/device-events.js.map +1 -0
  7. package/dist/core/errors.d.ts +1 -1
  8. package/dist/core/errors.d.ts.map +1 -1
  9. package/dist/core/errors.js.map +1 -1
  10. package/dist/core/extensions.d.ts +21 -4
  11. package/dist/core/extensions.d.ts.map +1 -1
  12. package/dist/core/extensions.js +21 -4
  13. package/dist/core/extensions.js.map +1 -1
  14. package/dist/core/factory.d.ts.map +1 -1
  15. package/dist/core/factory.js +125 -23
  16. package/dist/core/factory.js.map +1 -1
  17. package/dist/core/hooks.js +1 -1
  18. package/dist/core/hooks.js.map +1 -1
  19. package/dist/core/index.d.ts +13 -1
  20. package/dist/core/index.d.ts.map +1 -1
  21. package/dist/core/index.js +18 -0
  22. package/dist/core/index.js.map +1 -1
  23. package/dist/core/insight.d.ts +44 -0
  24. package/dist/core/insight.d.ts.map +1 -0
  25. package/dist/core/insight.js +62 -0
  26. package/dist/core/insight.js.map +1 -0
  27. package/dist/core/metric_metadata.d.ts +55 -0
  28. package/dist/core/metric_metadata.d.ts.map +1 -1
  29. package/dist/core/metric_metadata.js +35 -7
  30. package/dist/core/metric_metadata.js.map +1 -1
  31. package/dist/core/migrations.d.ts.map +1 -1
  32. package/dist/core/migrations.js +103 -2
  33. package/dist/core/migrations.js.map +1 -1
  34. package/dist/core/retention.d.ts +44 -13
  35. package/dist/core/retention.d.ts.map +1 -1
  36. package/dist/core/retention.js +49 -22
  37. package/dist/core/retention.js.map +1 -1
  38. package/dist/core/sampling.d.ts +70 -0
  39. package/dist/core/sampling.d.ts.map +1 -0
  40. package/dist/core/sampling.js +107 -0
  41. package/dist/core/sampling.js.map +1 -0
  42. package/dist/core/schemas.d.ts +73 -2
  43. package/dist/core/schemas.d.ts.map +1 -1
  44. package/dist/core/schemas.js +160 -5
  45. package/dist/core/schemas.js.map +1 -1
  46. package/dist/core/table_metadata.d.ts.map +1 -1
  47. package/dist/core/table_metadata.js +3 -0
  48. package/dist/core/table_metadata.js.map +1 -1
  49. package/dist/core/types.d.ts +45 -10
  50. package/dist/core/types.d.ts.map +1 -1
  51. package/dist/core/warehouse.d.ts +28 -0
  52. package/dist/core/warehouse.d.ts.map +1 -1
  53. package/dist/core/warehouse.js +44 -0
  54. package/dist/core/warehouse.js.map +1 -1
  55. package/dist/core/watermark-cache.d.ts +75 -0
  56. package/dist/core/watermark-cache.d.ts.map +1 -0
  57. package/dist/core/watermark-cache.js +0 -0
  58. package/dist/core/watermark-cache.js.map +1 -0
  59. package/dist/rules/__fakes__/fakeEngine.d.ts +2 -0
  60. package/dist/rules/__fakes__/fakeEngine.d.ts.map +1 -1
  61. package/dist/rules/__fakes__/fakeEngine.js +4 -0
  62. package/dist/rules/__fakes__/fakeEngine.js.map +1 -1
  63. package/dist/rules/baseline-reader.d.ts +55 -0
  64. package/dist/rules/baseline-reader.d.ts.map +1 -0
  65. package/dist/rules/baseline-reader.js +111 -0
  66. package/dist/rules/baseline-reader.js.map +1 -0
  67. package/dist/rules/compiler.d.ts +36 -1
  68. package/dist/rules/compiler.d.ts.map +1 -1
  69. package/dist/rules/compiler.js +185 -39
  70. package/dist/rules/compiler.js.map +1 -1
  71. package/dist/rules/defaults/luminx.d.ts.map +1 -1
  72. package/dist/rules/defaults/luminx.js +8 -0
  73. package/dist/rules/defaults/luminx.js.map +1 -1
  74. package/dist/rules/defaults/viva.d.ts.map +1 -1
  75. package/dist/rules/defaults/viva.js +7 -0
  76. package/dist/rules/defaults/viva.js.map +1 -1
  77. package/dist/rules/defaults/yogaring.d.ts.map +1 -1
  78. package/dist/rules/defaults/yogaring.js +7 -0
  79. package/dist/rules/defaults/yogaring.js.map +1 -1
  80. package/dist/rules/defaults/ziva.d.ts.map +1 -1
  81. package/dist/rules/defaults/ziva.js +100 -24
  82. package/dist/rules/defaults/ziva.js.map +1 -1
  83. package/dist/rules/evaluator.d.ts +14 -3
  84. package/dist/rules/evaluator.d.ts.map +1 -1
  85. package/dist/rules/evaluator.js +157 -5
  86. package/dist/rules/evaluator.js.map +1 -1
  87. package/dist/rules/factory.d.ts.map +1 -1
  88. package/dist/rules/factory.js +5 -1
  89. package/dist/rules/factory.js.map +1 -1
  90. package/dist/rules/index.d.ts +2 -1
  91. package/dist/rules/index.d.ts.map +1 -1
  92. package/dist/rules/index.js +2 -1
  93. package/dist/rules/index.js.map +1 -1
  94. package/dist/rules/schema.d.ts +75 -4
  95. package/dist/rules/schema.d.ts.map +1 -1
  96. package/dist/rules/schema.js +44 -0
  97. package/dist/rules/schema.js.map +1 -1
  98. package/dist/rules/types.d.ts +16 -1
  99. package/dist/rules/types.d.ts.map +1 -1
  100. package/dist/rules/validator.d.ts.map +1 -1
  101. package/dist/rules/validator.js +89 -0
  102. package/dist/rules/validator.js.map +1 -1
  103. package/dist/sync/baseline-compute.d.ts +63 -0
  104. package/dist/sync/baseline-compute.d.ts.map +1 -0
  105. package/dist/sync/baseline-compute.js +211 -0
  106. package/dist/sync/baseline-compute.js.map +1 -0
  107. package/dist/sync/events.d.ts +19 -5
  108. package/dist/sync/events.d.ts.map +1 -1
  109. package/dist/sync/events.js +17 -0
  110. package/dist/sync/events.js.map +1 -1
  111. package/dist/sync/factory.d.ts +54 -8
  112. package/dist/sync/factory.d.ts.map +1 -1
  113. package/dist/sync/factory.js +145 -46
  114. package/dist/sync/factory.js.map +1 -1
  115. package/dist/sync/fetcher.d.ts +15 -2
  116. package/dist/sync/fetcher.d.ts.map +1 -1
  117. package/dist/sync/fetcher.js +43 -7
  118. package/dist/sync/fetcher.js.map +1 -1
  119. package/dist/sync/flusher.d.ts +52 -2
  120. package/dist/sync/flusher.d.ts.map +1 -1
  121. package/dist/sync/flusher.js +78 -9
  122. package/dist/sync/flusher.js.map +1 -1
  123. package/dist/sync/index.d.ts +3 -1
  124. package/dist/sync/index.d.ts.map +1 -1
  125. package/dist/sync/index.js +1 -0
  126. package/dist/sync/index.js.map +1 -1
  127. package/dist/sync/mapper/activity.d.ts.map +1 -1
  128. package/dist/sync/mapper/activity.js +2 -1
  129. package/dist/sync/mapper/activity.js.map +1 -1
  130. package/dist/sync/mapper/firmware.d.ts +3 -12
  131. package/dist/sync/mapper/firmware.d.ts.map +1 -1
  132. package/dist/sync/mapper/firmware.js +2 -8
  133. package/dist/sync/mapper/firmware.js.map +1 -1
  134. package/dist/sync/mapper/ring-config.d.ts +76 -28
  135. package/dist/sync/mapper/ring-config.d.ts.map +1 -1
  136. package/dist/sync/mapper/ring-config.js +118 -35
  137. package/dist/sync/mapper/ring-config.js.map +1 -1
  138. package/dist/sync/mapper/schema.d.ts +669 -0
  139. package/dist/sync/mapper/schema.d.ts.map +1 -0
  140. package/dist/sync/mapper/schema.js +160 -0
  141. package/dist/sync/mapper/schema.js.map +1 -0
  142. package/dist/sync/mapper/sleep.d.ts +58 -13
  143. package/dist/sync/mapper/sleep.d.ts.map +1 -1
  144. package/dist/sync/mapper/sleep.js +141 -44
  145. package/dist/sync/mapper/sleep.js.map +1 -1
  146. package/dist/sync/mapper/types.d.ts +118 -29
  147. package/dist/sync/mapper/types.d.ts.map +1 -1
  148. package/dist/sync/pending_closes.js +2 -2
  149. package/dist/sync/pending_closes.js.map +1 -1
  150. package/dist/sync/pusher.js +2 -2
  151. package/dist/sync/pusher.js.map +1 -1
  152. package/dist/sync/scheduler.d.ts +7 -0
  153. package/dist/sync/scheduler.d.ts.map +1 -1
  154. package/dist/sync/scheduler.js +14 -0
  155. package/dist/sync/scheduler.js.map +1 -1
  156. package/dist/tools/__fakes__/engine.d.ts +2 -0
  157. package/dist/tools/__fakes__/engine.d.ts.map +1 -1
  158. package/dist/tools/__fakes__/engine.js +10 -0
  159. package/dist/tools/__fakes__/engine.js.map +1 -1
  160. package/dist/tools/authorize.d.ts +19 -12
  161. package/dist/tools/authorize.d.ts.map +1 -1
  162. package/dist/tools/authorize.js +31 -40
  163. package/dist/tools/authorize.js.map +1 -1
  164. package/dist/tools/factory.d.ts +2 -0
  165. package/dist/tools/factory.d.ts.map +1 -1
  166. package/dist/tools/factory.js +12 -1
  167. package/dist/tools/factory.js.map +1 -1
  168. package/dist/tools/formatters/copy-guidelines.d.ts +57 -0
  169. package/dist/tools/formatters/copy-guidelines.d.ts.map +1 -0
  170. package/dist/tools/formatters/copy-guidelines.js +110 -0
  171. package/dist/tools/formatters/copy-guidelines.js.map +1 -0
  172. package/dist/tools/formatters/index.d.ts +14 -0
  173. package/dist/tools/formatters/index.d.ts.map +1 -0
  174. package/dist/tools/formatters/index.js +14 -0
  175. package/dist/tools/formatters/index.js.map +1 -0
  176. package/dist/tools/formatters/spo2.d.ts +21 -0
  177. package/dist/tools/formatters/spo2.d.ts.map +1 -0
  178. package/dist/tools/formatters/spo2.js +79 -0
  179. package/dist/tools/formatters/spo2.js.map +1 -0
  180. package/dist/tools/{formatters.d.ts → formatters/text.d.ts} +1 -1
  181. package/dist/tools/formatters/text.d.ts.map +1 -0
  182. package/dist/tools/{formatters.js → formatters/text.js} +1 -1
  183. package/dist/tools/formatters/text.js.map +1 -0
  184. package/dist/tools/impls/activity.d.ts +2 -2
  185. package/dist/tools/impls/activity.js +7 -3
  186. package/dist/tools/impls/activity.js.map +1 -1
  187. package/dist/tools/impls/anomaly.d.ts +2 -2
  188. package/dist/tools/impls/anomaly.js +8 -4
  189. package/dist/tools/impls/anomaly.js.map +1 -1
  190. package/dist/tools/impls/compare.d.ts +2 -2
  191. package/dist/tools/impls/compare.js +8 -4
  192. package/dist/tools/impls/compare.js.map +1 -1
  193. package/dist/tools/impls/hrv.d.ts +2 -2
  194. package/dist/tools/impls/hrv.js +6 -2
  195. package/dist/tools/impls/hrv.js.map +1 -1
  196. package/dist/tools/impls/insights.d.ts +4 -4
  197. package/dist/tools/impls/insights.d.ts.map +1 -1
  198. package/dist/tools/impls/insights.js +10 -3
  199. package/dist/tools/impls/insights.js.map +1 -1
  200. package/dist/tools/impls/sleep.d.ts +2 -2
  201. package/dist/tools/impls/sleep.js +6 -2
  202. package/dist/tools/impls/sleep.js.map +1 -1
  203. package/dist/tools/impls/spo2.d.ts +52 -0
  204. package/dist/tools/impls/spo2.d.ts.map +1 -0
  205. package/dist/tools/impls/spo2.js +65 -0
  206. package/dist/tools/impls/spo2.js.map +1 -0
  207. package/dist/tools/index.d.ts +1 -0
  208. package/dist/tools/index.d.ts.map +1 -1
  209. package/dist/tools/index.js +4 -0
  210. package/dist/tools/index.js.map +1 -1
  211. package/dist/tools/mcp/guard.d.ts +28 -11
  212. package/dist/tools/mcp/guard.d.ts.map +1 -1
  213. package/dist/tools/mcp/guard.js +45 -15
  214. package/dist/tools/mcp/guard.js.map +1 -1
  215. package/dist/tools/mcp/index.d.ts +1 -1
  216. package/dist/tools/mcp/index.d.ts.map +1 -1
  217. package/dist/tools/mcp/index.js +1 -1
  218. package/dist/tools/mcp/index.js.map +1 -1
  219. package/dist/tools/mcp/server.d.ts.map +1 -1
  220. package/dist/tools/mcp/server.js +4 -0
  221. package/dist/tools/mcp/server.js.map +1 -1
  222. package/dist/tools/mcp/transports/http.d.ts.map +1 -1
  223. package/dist/tools/mcp/transports/http.js +4 -0
  224. package/dist/tools/mcp/transports/http.js.map +1 -1
  225. package/package.json +8 -5
  226. package/dist/tools/formatters.d.ts.map +0 -1
  227. package/dist/tools/formatters.js.map +0 -1
@@ -1,59 +1,142 @@
1
1
  /**
2
- * Ring config mapper (T-08).
2
+ * Ring config mapper (T-08, Sprint 5 T-09/T-10).
3
3
  *
4
4
  * Firmware `ring.automaticMonitoringData[]` describes which metrics the ring
5
- * currently samples (interval + active hours). We store these as SCD-2-style
6
- * rows in `device_config`, with `valid_from = now()` and `valid_to = null` on
7
- * the new insert.
5
+ * currently samples and on what schedule. We store these as SCD-2-style rows
6
+ * in `device_config`, with `valid_from = now()` and `valid_to = null` on the
7
+ * new insert.
8
+ *
9
+ * ## The firmware boundary (principles 20 + 21)
10
+ *
11
+ * The vendor struct is `AutomaticMonitoring_J2301A` (JStyle J2301A SDK):
12
+ *
13
+ * ```c
14
+ * int mode;
15
+ * int startTime_Hour; int startTime_Minutes;
16
+ * int endTime_Hour; int endTime_Minutes;
17
+ * MyWeeks_J2301A weeks; // 7 booleans
18
+ * int intervalTime;
19
+ * int dataType; // 1 = heartRate, 2 = spo2, 3 = temperature, 4 = HRV
20
+ * ```
21
+ *
22
+ * Everything firmware-shaped is translated here and nothing crosses into
23
+ * the warehouse: `dataType` becomes our metric id, split hour/minute fields
24
+ * become `HH:MM` strings, and the seven-boolean `weeks` struct becomes a
25
+ * bitmask. Principle 21 is explicit that firmware enums must not reach the
26
+ * schema, so `device_config` stores `metric`, never `data_type`.
27
+ *
28
+ * Prior versions inverted this: the mapper's input type had already
29
+ * discarded `dataType`, so a consumer-supplied `RingConfigTranslator` had
30
+ * to invent the enum back from our own metric names — the schema ended up
31
+ * holding a firmware integer that the app, not the firmware, produced.
8
32
  *
9
33
  * Closing prior config (SCD-2 semantics):
10
34
  * 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).
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).
35
+ * metric. For every metric present in the new snapshot, if a prior config
36
+ * was open, it emits a `close` entry so the sink can `UPDATE ... SET
37
+ * valid_to = now()` before the INSERT lands. Metrics present in the prior
38
+ * map but absent from the new snapshot are left open — the ring is silent
39
+ * on them, not disabling them.
28
40
  */
29
- export function mapRingConfig(fw, ctx, opts) {
41
+ /**
42
+ * Firmware `dataType` → our metric id (Sprint 5 T-09).
43
+ *
44
+ * Verbatim from the vendor header's own comment. Note this is a **1:1**
45
+ * map: `dataType = 2` is SpO₂ alone, and temperature is its own code 3.
46
+ * The Sprint 5 spec described 2 as "spo2 + temperature (shared schedule)"
47
+ * requiring a fan-out to two rows; the SDK does not agree, so there is
48
+ * nothing to fan out.
49
+ *
50
+ * (Whether firmware *slaves* the two schedules together in practice is a
51
+ * separate, still-open question — but it would not change this mapping,
52
+ * only mean the ring reports two windows with identical timings.)
53
+ */
54
+ export const FIRMWARE_DATA_TYPE_TO_METRIC = Object.freeze({
55
+ 1: 'heart_rate',
56
+ 2: 'spo2',
57
+ 3: 'temperature',
58
+ 4: 'hrv',
59
+ });
60
+ /** Reverse map, for diagnostics and for keying prior-config reads. */
61
+ export const METRIC_TO_FIRMWARE_DATA_TYPE = Object.freeze(Object.fromEntries(Object.entries(FIRMWARE_DATA_TYPE_TO_METRIC).map(([dt, m]) => [m, Number(dt)])));
62
+ /**
63
+ * Translate a firmware `dataType` to the metric(s) it schedules.
64
+ *
65
+ * Returns an array for forward-compatibility — if a future firmware
66
+ * revision genuinely does share one code across metrics, this signature
67
+ * absorbs it without a breaking change.
68
+ *
69
+ * @throws on an unknown code, with the raw value in the message. Silently
70
+ * dropping an unrecognised code would mean a metric the ring is actively
71
+ * sampling never appears in `device_config`, and every cadence-dependent
72
+ * consumer would fall back to the `metric_metadata` default without
73
+ * anyone noticing.
74
+ */
75
+ export function firmwareDataTypeToMetrics(dataType) {
76
+ const metric = FIRMWARE_DATA_TYPE_TO_METRIC[dataType];
77
+ if (metric === undefined) {
78
+ const known = Object.entries(FIRMWARE_DATA_TYPE_TO_METRIC)
79
+ .map(([dt, m]) => `${dt}=${m}`)
80
+ .join(', ');
81
+ throw new Error(`mapRingConfig: unknown firmware dataType ${dataType}. `
82
+ + `Known values: ${known}. A new value means the ring firmware added a `
83
+ + `monitored metric — add it to FIRMWARE_DATA_TYPE_TO_METRIC and to `
84
+ + `METRIC_METADATA rather than dropping it.`);
85
+ }
86
+ return [metric];
87
+ }
88
+ /** Vendor weekday order, LSB = Sunday. */
89
+ const WEEKDAY_ORDER = [
90
+ 'sunday', 'monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday',
91
+ ];
92
+ /**
93
+ * Seven booleans → a 7-bit mask for `device_config.weeks`.
94
+ * Bit 0 = Sunday … bit 6 = Saturday. All-days is `0x7F`.
95
+ */
96
+ export function weekdaysToBitmask(weeks) {
97
+ if (!weeks)
98
+ return null;
99
+ let mask = 0;
100
+ WEEKDAY_ORDER.forEach((day, i) => {
101
+ if (weeks[day])
102
+ mask |= 1 << i;
103
+ });
104
+ return mask;
105
+ }
106
+ /** `HH:MM`, zero-padded. Null when the firmware supplied out-of-range values. */
107
+ export function formatClockTime(hour, minutes) {
108
+ if (!Number.isInteger(hour) || hour < 0 || hour > 23)
109
+ return null;
110
+ if (!Number.isInteger(minutes) || minutes < 0 || minutes > 59)
111
+ return null;
112
+ return `${String(hour).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;
113
+ }
114
+ export function mapRingConfig(fw, ctx, opts = {}) {
30
115
  const now = opts.now ?? new Date();
31
116
  const prior = opts.activePriorConfigs ?? new Map();
32
- const translator = opts.translator;
33
117
  const inserts = [];
34
118
  const closes = [];
35
119
  for (const window of fw.automaticMonitoringData ?? []) {
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 });
120
+ for (const metric of firmwareDataTypeToMetrics(window.dataType)) {
121
+ inserts.push(toRow(window, ctx, now, metric));
122
+ if (prior.has(metric)) {
123
+ closes.push({ device_id: ctx.deviceId, metric, valid_to: now });
124
+ }
40
125
  }
41
126
  }
42
127
  return { inserts, closes };
43
128
  }
44
- function toRow(window, ctx, now, dataType, translator) {
45
- const fields = translator.windowToSchemaFields(window);
129
+ function toRow(window, ctx, now, metric) {
46
130
  return {
47
- ts: now,
48
131
  brand: ctx.brand,
49
132
  family_id: ctx.familyId,
50
133
  user_id: ctx.userId,
51
134
  device_id: ctx.deviceId,
52
- data_type: dataType,
53
- interval_minutes: window.interval_minutes,
54
- start_time: fields.start_time,
55
- end_time: fields.end_time,
56
- weeks: fields.weeks,
135
+ metric,
136
+ interval_minutes: window.intervalTime,
137
+ start_time: formatClockTime(window.startTime_Hour, window.startTime_Minutes),
138
+ end_time: formatClockTime(window.endTime_Hour, window.endTime_Minutes),
139
+ weeks: weekdaysToBitmask(window.weeks),
57
140
  valid_from: now,
58
141
  valid_to: null,
59
142
  };
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"ring-config.js","sourceRoot":"","sources":["../../../src/sync/mapper/ring-config.ts"],"names":[],"mappings":"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"}