@uptimizr/db 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/AGENTS.md +103 -1
  2. package/README.md +100 -3
  3. package/dist/cli/createProject.js +23 -6
  4. package/dist/cli/createProject.js.map +1 -1
  5. package/dist/cli/seed.js +12 -4
  6. package/dist/cli/seed.js.map +1 -1
  7. package/dist/duckdb/audit.d.ts +13 -0
  8. package/dist/duckdb/audit.d.ts.map +1 -0
  9. package/dist/duckdb/audit.js +67 -0
  10. package/dist/duckdb/audit.js.map +1 -0
  11. package/dist/duckdb/migrations.d.ts.map +1 -1
  12. package/dist/duckdb/migrations.js +97 -0
  13. package/dist/duckdb/migrations.js.map +1 -1
  14. package/dist/duckdb/projects.d.ts +9 -5
  15. package/dist/duckdb/projects.d.ts.map +1 -1
  16. package/dist/duckdb/projects.js +54 -24
  17. package/dist/duckdb/projects.js.map +1 -1
  18. package/dist/duckdb/queries.d.ts +7 -0
  19. package/dist/duckdb/queries.d.ts.map +1 -1
  20. package/dist/duckdb/queries.js +10 -1
  21. package/dist/duckdb/queries.js.map +1 -1
  22. package/dist/duckdb/sceneRegions.d.ts +24 -0
  23. package/dist/duckdb/sceneRegions.d.ts.map +1 -0
  24. package/dist/duckdb/sceneRegions.js +72 -0
  25. package/dist/duckdb/sceneRegions.js.map +1 -0
  26. package/dist/index.d.ts +8 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +18 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/metadata.d.ts +195 -9
  31. package/dist/metadata.d.ts.map +1 -1
  32. package/dist/metadata.js +192 -0
  33. package/dist/metadata.js.map +1 -1
  34. package/dist/parity/compare.d.ts +22 -0
  35. package/dist/parity/compare.d.ts.map +1 -1
  36. package/dist/parity/compare.js +31 -0
  37. package/dist/parity/compare.js.map +1 -1
  38. package/dist/query/aggregations.d.ts +8 -0
  39. package/dist/query/aggregations.d.ts.map +1 -1
  40. package/dist/query/aggregations.js +78 -0
  41. package/dist/query/aggregations.js.map +1 -1
  42. package/dist/query/coerce.d.ts +94 -0
  43. package/dist/query/coerce.d.ts.map +1 -0
  44. package/dist/query/coerce.js +191 -0
  45. package/dist/query/coerce.js.map +1 -0
  46. package/dist/query/summary/cluster.d.ts +78 -0
  47. package/dist/query/summary/cluster.d.ts.map +1 -0
  48. package/dist/query/summary/cluster.js +200 -0
  49. package/dist/query/summary/cluster.js.map +1 -0
  50. package/dist/query/summary/columns.d.ts +66 -0
  51. package/dist/query/summary/columns.d.ts.map +1 -0
  52. package/dist/query/summary/columns.js +98 -0
  53. package/dist/query/summary/columns.js.map +1 -0
  54. package/dist/query/summary/format.d.ts +31 -0
  55. package/dist/query/summary/format.d.ts.map +1 -0
  56. package/dist/query/summary/format.js +119 -0
  57. package/dist/query/summary/format.js.map +1 -0
  58. package/dist/query/summary/index.d.ts +19 -0
  59. package/dist/query/summary/index.d.ts.map +1 -0
  60. package/dist/query/summary/index.js +16 -0
  61. package/dist/query/summary/index.js.map +1 -0
  62. package/dist/query/summary/reading.d.ts +26 -0
  63. package/dist/query/summary/reading.d.ts.map +1 -0
  64. package/dist/query/summary/reading.js +169 -0
  65. package/dist/query/summary/reading.js.map +1 -0
  66. package/dist/query/summary/schema.d.ts +217 -0
  67. package/dist/query/summary/schema.d.ts.map +1 -0
  68. package/dist/query/summary/schema.js +167 -0
  69. package/dist/query/summary/schema.js.map +1 -0
  70. package/dist/query/summary/stats.d.ts +33 -0
  71. package/dist/query/summary/stats.d.ts.map +1 -0
  72. package/dist/query/summary/stats.js +73 -0
  73. package/dist/query/summary/stats.js.map +1 -0
  74. package/dist/query/summary/summarize.d.ts +57 -0
  75. package/dist/query/summary/summarize.d.ts.map +1 -0
  76. package/dist/query/summary/summarize.js +424 -0
  77. package/dist/query/summary/summarize.js.map +1 -0
  78. package/dist/query/summary/types.d.ts +223 -0
  79. package/dist/query/summary/types.d.ts.map +1 -0
  80. package/dist/query/summary/types.js +8 -0
  81. package/dist/query/summary/types.js.map +1 -0
  82. package/dist/query/types.d.ts +13 -0
  83. package/dist/query/types.d.ts.map +1 -1
  84. package/llms.txt +7 -3
  85. package/package.json +8 -2
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/duckdb/projects.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAiBpD,sCAAsC;AACtC,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASxF;AAED,6DAA6D;AAC7D,wBAAsB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAS1F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,gBAA0B,GACrC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CAiChD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAOhC"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/duckdb/projects.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EAIV,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAiBpD,sCAAsC;AACtC,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASxF;AAED,6DAA6D;AAC7D,wBAAsB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAS1F;AAiCD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CA2BhD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAehC"}
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { apiKeyPrefix, generateApiKey, hashApiKey, } from "../metadata.js";
2
+ import { apiKeyPrefix, generateApiKey, hashApiKey, parseApiKeyCapabilities, toApiKeyColumns, toApiKeyRateLimit, } from "../metadata.js";
3
3
  export { hashApiKey, apiKeyPrefix, generateApiKey };
4
4
  /** Create a project and return it. */
5
5
  export async function createProject(client, name) {
@@ -17,39 +17,69 @@ export async function getProject(client, id) {
17
17
  ? { id: row.id, name: row.name, orgId: null, createdAt: new Date(row.created_at_ms) }
18
18
  : null;
19
19
  }
20
+ /** Columns every API-key read selects, mapped by {@link toApiKeyRecord}. */
21
+ const API_KEY_COLS = `id, project_id, key_prefix, epoch_ms(created_at) AS created_at_ms,
22
+ epoch_ms(revoked_at) AS revoked_at_ms, capability, capabilities, label,
23
+ rate_limit_max, rate_limit_window_ms`;
24
+ function toApiKeyRecord(row) {
25
+ return {
26
+ id: row.id,
27
+ projectId: row.project_id,
28
+ keyPrefix: row.key_prefix,
29
+ createdAt: new Date(row.created_at_ms),
30
+ revokedAt: row.revoked_at_ms == null ? null : new Date(row.revoked_at_ms),
31
+ capabilities: parseApiKeyCapabilities(row.capabilities, row.capability),
32
+ label: row.label ?? null,
33
+ rateLimit: toApiKeyRateLimit(row.rate_limit_max, row.rate_limit_window_ms),
34
+ };
35
+ }
20
36
  /**
21
37
  * Issue a new API key for a project. Returns both the record and the plaintext
22
38
  * key — the plaintext is shown to the caller exactly once and never stored.
39
+ *
40
+ * The legacy singular `capability` column is written alongside the set (its
41
+ * first token) so a collector still running older code keeps resolving the key.
23
42
  */
24
- export async function createApiKey(client, projectId, capability = "query") {
43
+ export async function createApiKey(client, projectId, options = {}) {
25
44
  const key = generateApiKey();
26
45
  const id = randomUUID();
27
- await client.run(`INSERT INTO api_keys (id, project_id, key_hash, key_prefix, capability)
28
- VALUES ($id, $projectId, $keyHash, $keyPrefix, $capability)`, { id, projectId, keyHash: hashApiKey(key), keyPrefix: apiKeyPrefix(key), capability });
29
- const rows = await client.all(`SELECT id, project_id, key_prefix, epoch_ms(created_at) AS created_at_ms,
30
- epoch_ms(revoked_at) AS revoked_at_ms, capability
31
- FROM api_keys WHERE id = $id`, { id });
32
- const row = rows[0];
33
- return {
34
- key,
35
- record: {
36
- id: row.id,
37
- projectId: row.project_id,
38
- keyPrefix: row.key_prefix,
39
- createdAt: new Date(row.created_at_ms),
40
- revokedAt: row.revoked_at_ms === null ? null : new Date(row.revoked_at_ms),
41
- capability: row.capability,
42
- },
43
- };
46
+ const cols = toApiKeyColumns(options);
47
+ await client.run(`INSERT INTO api_keys (id, project_id, key_hash, key_prefix, capability, capabilities,
48
+ label, rate_limit_max, rate_limit_window_ms)
49
+ VALUES ($id, $projectId, $keyHash, $keyPrefix, $capability, $capabilities,
50
+ CAST($label AS VARCHAR), CAST($rateLimitMax AS BIGINT),
51
+ CAST($rateLimitWindowMs AS BIGINT))`, {
52
+ id,
53
+ projectId,
54
+ keyHash: hashApiKey(key),
55
+ keyPrefix: apiKeyPrefix(key),
56
+ capability: cols.capabilities.split(",")[0],
57
+ capabilities: cols.capabilities,
58
+ label: cols.label,
59
+ rateLimitMax: cols.rateLimitMax,
60
+ rateLimitWindowMs: cols.rateLimitWindowMs,
61
+ });
62
+ const rows = await client.all(`SELECT ${API_KEY_COLS} FROM api_keys WHERE id = $id`, { id });
63
+ return { key, record: toApiKeyRecord(rows[0]) };
44
64
  }
45
65
  /**
46
- * Resolve a plaintext API key to its (non-revoked) project id and capability, or
47
- * `null` when the key is unknown or revoked. The collector uses this to
48
- * authenticate and scope read requests at the boundary.
66
+ * Resolve a plaintext API key to its (non-revoked) project id, key id,
67
+ * capability set and per-key rate limit, or `null` when the key is unknown or
68
+ * revoked. The collector uses this to authenticate and scope requests at the
69
+ * boundary, and to attribute audit rows to a key without ever logging the key.
49
70
  */
50
71
  export async function resolveApiKey(client, plaintext) {
51
- const rows = await client.all(`SELECT project_id, capability FROM api_keys WHERE key_hash = $keyHash AND revoked_at IS NULL`, { keyHash: hashApiKey(plaintext) });
72
+ const rows = await client.all(`SELECT ${API_KEY_COLS} FROM api_keys WHERE key_hash = $keyHash AND revoked_at IS NULL`, { keyHash: hashApiKey(plaintext) });
52
73
  const row = rows[0];
53
- return row ? { projectId: row.project_id, capability: row.capability } : null;
74
+ if (!row)
75
+ return null;
76
+ const record = toApiKeyRecord(row);
77
+ return {
78
+ projectId: record.projectId,
79
+ keyId: record.id,
80
+ capabilities: record.capabilities,
81
+ label: record.label,
82
+ rateLimit: record.rateLimit,
83
+ };
54
84
  }
55
85
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/duckdb/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/duckdb/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,uBAAuB,EACvB,eAAe,EACf,iBAAiB,GAKlB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAiBpD,sCAAsC;AACtC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAoB,EAAE,IAAY;IACpE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,MAAM,CAAC,GAAG,CAAC,qDAAqD,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,qFAAqF,EACrF,EAAE,EAAE,EAAE,CACP,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACrB,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAoB,EAAE,EAAU;IAC/D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,qFAAqF,EACrF,EAAE,EAAE,EAAE,CACP,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,GAAG;QACR,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QACrF,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,4EAA4E;AAC5E,MAAM,YAAY,GAAG;;iDAE4B,CAAC;AAelD,SAAS,cAAc,CAAC,GAAkB;IACxC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QACtC,SAAS,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QACzE,YAAY,EAAE,uBAAuB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC;QACvE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI;QACxB,SAAS,EAAE,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,oBAAoB,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAoB,EACpB,SAAiB,EACjB,UAA+B,EAAE;IAEjC,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,CAAC,GAAG,CACd;;;;iDAI6C,EAC7C;QACE,EAAE;QACF,SAAS;QACT,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC;QACxB,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC;QAC5B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE;QAC5C,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CACF,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,UAAU,YAAY,+BAA+B,EACrD,EAAE,EAAE,EAAE,CACP,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAoB,EACpB,SAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,UAAU,YAAY,iEAAiE,EACvF,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CACnC,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,EAAE;QAChB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;AACJ,CAAC"}
@@ -5,6 +5,13 @@ import type { DuckdbClient } from "./client.js";
5
5
  * against the DuckDB store and return typed rows. Values are already converted to
6
6
  * plain JS by the client (bigint→number, list→array, timestamp→string), so rows
7
7
  * match the shapes produced by the ClickHouse `runQuery`.
8
+ *
9
+ * This is the single point where rows leave the DuckDB driver, so it is where
10
+ * {@link coerceRows} runs (ADR 0051 §2): every column the spec's registry metric
11
+ * declares numeric is a number by the time it is returned. DuckDB already returns
12
+ * numbers, so the pass is allocation-free here — it is applied all the same so
13
+ * that *every* store upholds the same contract and a future driver or type-map
14
+ * regression is caught by the parity suite rather than by a consumer.
8
15
  */
9
16
  export declare function runDuckdbQuery<T>(client: DuckdbClient, spec: QuerySpec): Promise<T[]>;
10
17
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/duckdb/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAE3F"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/duckdb/queries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAG3F"}
@@ -1,10 +1,19 @@
1
+ import { coerceRows } from "../query/coerce.js";
1
2
  /**
2
3
  * Execute a dialect-agnostic {@link QuerySpec} (rendered with `duckdbDialect`)
3
4
  * against the DuckDB store and return typed rows. Values are already converted to
4
5
  * plain JS by the client (bigint→number, list→array, timestamp→string), so rows
5
6
  * match the shapes produced by the ClickHouse `runQuery`.
7
+ *
8
+ * This is the single point where rows leave the DuckDB driver, so it is where
9
+ * {@link coerceRows} runs (ADR 0051 §2): every column the spec's registry metric
10
+ * declares numeric is a number by the time it is returned. DuckDB already returns
11
+ * numbers, so the pass is allocation-free here — it is applied all the same so
12
+ * that *every* store upholds the same contract and a future driver or type-map
13
+ * regression is caught by the parity suite rather than by a consumer.
6
14
  */
7
15
  export async function runDuckdbQuery(client, spec) {
8
- return client.all(spec.query, spec.query_params);
16
+ const rows = await client.all(spec.query, spec.query_params);
17
+ return coerceRows(spec.metric, rows);
9
18
  }
10
19
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/duckdb/queries.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,MAAoB,EAAE,IAAe;IAC3E,OAAO,MAAM,CAAC,GAAG,CAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAuC,CAAC,CAAC;AACjF,CAAC"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/duckdb/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,MAAoB,EAAE,IAAe;IAC3E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAuC,CAAC,CAAC;IAC3F,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { SceneRegion } from "@uptimizr/schema";
2
+ import type { SceneRegionRecord, SceneRegionSummary } from "../metadata.js";
3
+ import type { DuckdbClient } from "./client.js";
4
+ export type { SceneRegionRecord, SceneRegionSummary };
5
+ /**
6
+ * Replace the whole region set of `(projectId, sceneId)` with `regions` and
7
+ * return the stored rows.
8
+ *
9
+ * Replace-the-set (rather than per-region upsert) keeps the authoring surface a
10
+ * single idempotent `PUT`: the caller declares what the scene's regions *are*,
11
+ * so removing a region is just leaving it out. The delete + insert runs inside
12
+ * one DuckDB transaction on the exclusive connection, so a concurrent reader
13
+ * never observes a half-replaced set (and a failed insert leaves the previous
14
+ * set intact).
15
+ */
16
+ export declare function putSceneRegions(client: DuckdbClient, projectId: string, sceneId: string, regions: readonly SceneRegion[]): Promise<SceneRegionRecord[]>;
17
+ /** Read one scene's regions, ordered by region id (stable for callers/diffs). */
18
+ export declare function getSceneRegions(client: DuckdbClient, projectId: string, sceneId: string): Promise<SceneRegionRecord[]>;
19
+ /**
20
+ * Project-wide region names (no boxes) — the whole spatial vocabulary in one
21
+ * read, for a scene/region picker or an agent's project context.
22
+ */
23
+ export declare function listSceneRegions(client: DuckdbClient, projectId: string): Promise<SceneRegionSummary[]>;
24
+ //# sourceMappingURL=sceneRegions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sceneRegions.d.ts","sourceRoot":"","sources":["../../src/duckdb/sceneRegions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AAsCtD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA8B9B;AAED,iFAAiF;AACjF,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAQ9B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAY/B"}
@@ -0,0 +1,72 @@
1
+ const SELECT_COLS = `project_id, scene_id, region_id, label, description, bounds,
2
+ epoch_ms(updated_at) AS updated_at_ms`;
3
+ function rowToRegion(row) {
4
+ return {
5
+ projectId: row.project_id,
6
+ sceneId: row.scene_id,
7
+ regionId: row.region_id,
8
+ label: row.label,
9
+ description: row.description,
10
+ bounds: JSON.parse(row.bounds),
11
+ updatedAt: new Date(row.updated_at_ms),
12
+ };
13
+ }
14
+ /**
15
+ * Replace the whole region set of `(projectId, sceneId)` with `regions` and
16
+ * return the stored rows.
17
+ *
18
+ * Replace-the-set (rather than per-region upsert) keeps the authoring surface a
19
+ * single idempotent `PUT`: the caller declares what the scene's regions *are*,
20
+ * so removing a region is just leaving it out. The delete + insert runs inside
21
+ * one DuckDB transaction on the exclusive connection, so a concurrent reader
22
+ * never observes a half-replaced set (and a failed insert leaves the previous
23
+ * set intact).
24
+ */
25
+ export async function putSceneRegions(client, projectId, sceneId, regions) {
26
+ await client.exclusive(async (con) => {
27
+ await con.run("BEGIN TRANSACTION");
28
+ try {
29
+ await con.run(`DELETE FROM scene_regions WHERE project_id = $projectId AND scene_id = $sceneId`, { projectId, sceneId });
30
+ for (const region of regions) {
31
+ await con.run(`INSERT INTO scene_regions
32
+ (project_id, scene_id, region_id, label, description, bounds, updated_at)
33
+ VALUES ($projectId, $sceneId, $regionId, $label, $description, $bounds, now())`, {
34
+ projectId,
35
+ sceneId,
36
+ regionId: region.id,
37
+ label: region.label,
38
+ description: region.description ?? null,
39
+ bounds: JSON.stringify(region.bounds),
40
+ });
41
+ }
42
+ await con.run("COMMIT");
43
+ }
44
+ catch (err) {
45
+ await con.run("ROLLBACK");
46
+ throw err;
47
+ }
48
+ });
49
+ return getSceneRegions(client, projectId, sceneId);
50
+ }
51
+ /** Read one scene's regions, ordered by region id (stable for callers/diffs). */
52
+ export async function getSceneRegions(client, projectId, sceneId) {
53
+ const rows = await client.all(`SELECT ${SELECT_COLS} FROM scene_regions
54
+ WHERE project_id = $projectId AND scene_id = $sceneId
55
+ ORDER BY region_id`, { projectId, sceneId });
56
+ return rows.map(rowToRegion);
57
+ }
58
+ /**
59
+ * Project-wide region names (no boxes) — the whole spatial vocabulary in one
60
+ * read, for a scene/region picker or an agent's project context.
61
+ */
62
+ export async function listSceneRegions(client, projectId) {
63
+ const rows = await client.all(`SELECT scene_id, region_id, label FROM scene_regions
64
+ WHERE project_id = $projectId
65
+ ORDER BY scene_id, region_id`, { projectId });
66
+ return rows.map((row) => ({
67
+ sceneId: row.scene_id,
68
+ regionId: row.region_id,
69
+ label: row.label,
70
+ }));
71
+ }
72
+ //# sourceMappingURL=sceneRegions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sceneRegions.js","sourceRoot":"","sources":["../../src/duckdb/sceneRegions.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,GAAG;6CACyB,CAAC;AAE9C,SAAS,WAAW,CAAC,GAAc;IACjC,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAS;QACtC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;KACvC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,SAAiB,EACjB,OAAe,EACf,OAA+B;IAE/B,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,GAAG,CACX,iFAAiF,EACjF,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;YACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,GAAG,CAAC,GAAG,CACX;;0FAEgF,EAChF;oBACE,SAAS;oBACT,OAAO;oBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;oBACvC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;iBACtC,CACF,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,SAAiB,EACjB,OAAe;IAEf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,UAAU,WAAW;;wBAED,EACpB,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAoB,EACpB,SAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B;;kCAE8B,EAC9B,EAAE,SAAS,EAAE,CACd,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC,CAAC;AACN,CAAC"}
package/dist/index.d.ts CHANGED
@@ -16,7 +16,8 @@ export type { EventRow, SessionMeta } from "./events.js";
16
16
  export { toNodeSampleRow, nodeSampleRowToEvent } from "./events.js";
17
17
  export type { NodeSampleRow } from "./events.js";
18
18
  export { hashApiKey, apiKeyPrefix, generateApiKey } from "./metadata.js";
19
- export type { Project, ApiKeyRecord, ApiKeyCapability, ResolvedApiKey, SceneRepresentation, SceneRepresentationKind, SceneRepresentationSummary, } from "./metadata.js";
19
+ export { API_KEY_CAPABILITIES, AUDIT_PARAMS_MAX_LENGTH, AUDIT_TOOL_MAX_LENGTH, DEFAULT_API_KEY_CAPABILITIES, clampAuditTool, hasCapability, isApiKeyCapability, parseApiKeyCapabilities, parseCapabilityList, serializeApiKeyCapabilities, serializeAuditParams, toApiKeyColumns, toApiKeyRateLimit, } from "./metadata.js";
20
+ export type { Project, AgentAuditEntry, AgentAuditInput, ApiKeyRecord, ApiKeyCapability, ApiKeyRateLimit, AuditQueryOptions, AuditSurface, CreateApiKeyOptions, ResolvedApiKey, SceneRepresentation, SceneRepresentationKind, SceneRepresentationSummary, SceneRegionRecord, SceneRegionSummary, } from "./metadata.js";
20
21
  export type { Dialect, ParamType, AsofJoinSpec } from "./query/dialect.js";
21
22
  export { duckdbDialect, toDuckdbTimestamp } from "./query/duckdbDialect.js";
22
23
  export { clickhouseDialect, toClickhouseTimestamp } from "./query/clickhouseDialect.js";
@@ -25,6 +26,9 @@ export { mssqlDialect, toMssqlTimestamp, toTsql, mssqlVectorElement, MSSQL_NEARE
25
26
  export { renderNativeAsofJoin, renderNearestRowJoin, toPositionalParams, } from "./query/relational.js";
26
27
  export type { NearestRowJoinTokens, PositionalQuery } from "./query/relational.js";
27
28
  export { buildListSessions, buildPointerHeatmap, buildMeshUvHeatmap, buildWorldHeatmap, buildWorldHeatmapStats, buildGazeHeatmap, buildGazeHeatmapStats, buildCameraDirectionHeatmap, buildViewCoverageHistogram, buildCameraPositionHeatmap, defaultCellSizeForBounds, buildSessionTrajectory, buildAggregateTrajectories, buildClickGazeRay, buildFlowHeatmap, buildTopMeshes, buildTopMeshesBySource, buildTopMeshesTrend, buildMeshDwell, buildMeshBlindSpots, buildMeshInteractionKinds, buildReachability, buildTopInputActions, buildDeadClicks, buildRageClicks, buildHoverDwell, buildCompileStalls, buildResourceSummary, buildCapabilityChanges, buildCameraGestures, buildPerfSummary, buildRenderScaleTruth, buildPerfDistribution, buildFpsHistogram, buildFrameTimePercentiles, buildJankRate, buildPerfChurn, buildPerfByDevice, buildPerfByScene, buildResourcePercentiles, buildStabilityCounts, buildGraphicsDiagnosticCounts, buildErrorHeatmap, buildBoundaryHeatmap, buildBoundaryHeatmapStats, buildBoundaryContacts, buildRenderingTechnology, buildPerfDaily, buildEventsDaily, buildDistinctScenes, buildTimeseries, buildEventTypeCounts, buildSceneCoverage, buildPerfHeatmap, buildCameraDistance, buildNavigationStats, buildBacktrackRatio, buildXrRotationRate, buildXrSourceUsage, buildXrAbandonment, buildXrLocomotionComfort, buildTrackingQuality, buildInteractionsBySource, buildArPlacementTimeToPlace, buildArPlacementAttempts, buildArPlacementSurfaces, buildFunnel, buildSceneRetention, buildLoadBounceFunnel, buildVariantLeaderboard, } from "./query/aggregations.js";
29
+ export { coerceRows, numericColumns, numericColumnsOfMetric } from "./query/coerce.js";
30
+ export type { CoerceRowsOptions } from "./query/coerce.js";
31
+ export * from "./query/summary/index.js";
28
32
  export type { QuerySpec, RangeOptions, SceneOptions, SourceOptions, SessionOptions, MeshOptions, RegionOptions, ErrorHeatmapOptions, WorldAabb, CameraModeOptions, TimeseriesOptions, SessionSummaryRow, HeatmapBinRow, WorldHeatmapBinRow, SpatialStatsRow, PositionBinRow, TrajectoryPointRow, AggregateTrajectoryPointRow, DirectionBinRow, ViewCoverageHistogramRow, ClickGazeRayRow, FlowLinkRow, MeshCountRow, MeshDwellRow, MeshBlindSpotRow, MeshInteractionKindRow, ReachabilityBinRow, MeshSourceCountRow, MeshTrendPointRow, InputActionCountRow, DeadClickRow, RageClickRow, HoverDwellRow, CompileStallRow, ArPlacementTimeToPlaceRow, ArPlacementAttemptsRow, ArPlacementSurfaceRow, ResourceSummaryRow, CapabilityChangeRow, CameraGestureRow, PerfSummaryRow, RenderScaleTruthRow, PerfDistributionRow, FpsHistogramRow, FrameTimePercentileRow, JankRateRow, PerfChurnOptions, PerfChurnRow, PerfByDeviceRow, PerfBySceneRow, ResourcePercentileRow, StabilityCountRow, GraphicsDiagnosticCountRow, RenderingTechnologyRow, PerfDailyRow, EventsDailyRow, SceneRow, TimeseriesBucketRow, EventTypeCountRow, CoverageVoxelRow, PerfHeatmapVoxelRow, CameraDistanceBucketRow, NavigationStatsRow, BacktrackRatioRow, XrRotationRateRow, XrSourceUsageRow, XrAbandonmentRow, XrLocomotionRow, BoundaryContactsRow, TrackingQualityRow, InteractionSourceRow, FunnelStepInput, FunnelOptions, FunnelStepResultRow, SceneRetentionOptions, SceneRetentionRow, LoadBounceFunnelOptions, LoadBounceBandRow, VariantLeaderboardOptions, VariantLeaderboardRow, } from "./query/types.js";
29
33
  export { createDuckdbClient, convertValue } from "./duckdb/client.js";
30
34
  export type { DuckdbClient, DuckdbRow } from "./duckdb/client.js";
@@ -32,9 +36,11 @@ export { DUCKDB_MIGRATIONS, migrateDuckdb } from "./duckdb/migrations.js";
32
36
  export { runDuckdbQuery } from "./duckdb/queries.js";
33
37
  export { insertEvents as duckdbInsertEvents, getSessionEvents as duckdbGetSessionEvents, streamSessionEvents as duckdbStreamSessionEvents, getSessionMeta as duckdbGetSessionMeta, } from "./duckdb/events.js";
34
38
  export { createProject as duckdbCreateProject, getProject as duckdbGetProject, createApiKey as duckdbCreateApiKey, resolveApiKey as duckdbResolveApiKey, } from "./duckdb/projects.js";
39
+ export { recordAudit as duckdbRecordAudit, listAudit as duckdbListAudit, pruneAudit as duckdbPruneAudit, } from "./duckdb/audit.js";
35
40
  export { upsertSceneProxy as duckdbUpsertSceneProxy, getSceneRepresentation as duckdbGetSceneRepresentation, listSceneRepresentations as duckdbListSceneRepresentations, } from "./duckdb/sceneRegistry.js";
41
+ export { putSceneRegions as duckdbPutSceneRegions, getSceneRegions as duckdbGetSceneRegions, listSceneRegions as duckdbListSceneRegions, } from "./duckdb/sceneRegions.js";
36
42
  export { PARITY_PROJECT_ID, PARITY_T0, PARITY_RANGE, PARITY_DAY_RANGE, PARITY_DAY, PARITY_EVENTS, } from "./parity/fixtures.js";
37
- export { PARITY_ABS_TOLERANCE, PARITY_REL_TOLERANCE, diffParity } from "./parity/compare.js";
43
+ export { PARITY_ABS_TOLERANCE, PARITY_REL_TOLERANCE, diffParity, numericColumnsForSpec, } from "./parity/compare.js";
38
44
  export type { ParityRow, ParityCompareOptions } from "./parity/compare.js";
39
45
  export { PARITY_CASES } from "./parity/cases.js";
40
46
  export type { ParityCase } from "./parity/cases.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -16,6 +16,9 @@ export { toEventRow, formatUtcTimestamp } from "./events.js";
16
16
  export { toNodeSampleRow, nodeSampleRowToEvent } from "./events.js";
17
17
  // --- Engine-neutral metadata helpers and types (ADR 0020) ---
18
18
  export { hashApiKey, apiKeyPrefix, generateApiKey } from "./metadata.js";
19
+ // Agent-scoped key capabilities, per-key rate limits and the audit log
20
+ // (#309, ADR 0051 §7).
21
+ export { API_KEY_CAPABILITIES, AUDIT_PARAMS_MAX_LENGTH, AUDIT_TOOL_MAX_LENGTH, DEFAULT_API_KEY_CAPABILITIES, clampAuditTool, hasCapability, isApiKeyCapability, parseApiKeyCapabilities, parseCapabilityList, serializeApiKeyCapabilities, serializeAuditParams, toApiKeyColumns, toApiKeyRateLimit, } from "./metadata.js";
19
22
  export { duckdbDialect, toDuckdbTimestamp } from "./query/duckdbDialect.js";
20
23
  export { clickhouseDialect, toClickhouseTimestamp } from "./query/clickhouseDialect.js";
21
24
  export { postgresDialect, toPostgresTimestamp, POSTGRES_NEAREST_ROW_JOIN, } from "./query/postgresDialect.js";
@@ -24,17 +27,31 @@ export { mssqlDialect, toMssqlTimestamp, toTsql, mssqlVectorElement, MSSQL_NEARE
24
27
  // Server — #84, #85): ASOF emulation and named→positional param rewriting.
25
28
  export { renderNativeAsofJoin, renderNearestRowJoin, toPositionalParams, } from "./query/relational.js";
26
29
  export { buildListSessions, buildPointerHeatmap, buildMeshUvHeatmap, buildWorldHeatmap, buildWorldHeatmapStats, buildGazeHeatmap, buildGazeHeatmapStats, buildCameraDirectionHeatmap, buildViewCoverageHistogram, buildCameraPositionHeatmap, defaultCellSizeForBounds, buildSessionTrajectory, buildAggregateTrajectories, buildClickGazeRay, buildFlowHeatmap, buildTopMeshes, buildTopMeshesBySource, buildTopMeshesTrend, buildMeshDwell, buildMeshBlindSpots, buildMeshInteractionKinds, buildReachability, buildTopInputActions, buildDeadClicks, buildRageClicks, buildHoverDwell, buildCompileStalls, buildResourceSummary, buildCapabilityChanges, buildCameraGestures, buildPerfSummary, buildRenderScaleTruth, buildPerfDistribution, buildFpsHistogram, buildFrameTimePercentiles, buildJankRate, buildPerfChurn, buildPerfByDevice, buildPerfByScene, buildResourcePercentiles, buildStabilityCounts, buildGraphicsDiagnosticCounts, buildErrorHeatmap, buildBoundaryHeatmap, buildBoundaryHeatmapStats, buildBoundaryContacts, buildRenderingTechnology, buildPerfDaily, buildEventsDaily, buildDistinctScenes, buildTimeseries, buildEventTypeCounts, buildSceneCoverage, buildPerfHeatmap, buildCameraDistance, buildNavigationStats, buildBacktrackRatio, buildXrRotationRate, buildXrSourceUsage, buildXrAbandonment, buildXrLocomotionComfort, buildTrackingQuality, buildInteractionsBySource, buildArPlacementTimeToPlace, buildArPlacementAttempts, buildArPlacementSurfaces, buildFunnel, buildSceneRetention, buildLoadBounceFunnel, buildVariantLeaderboard, } from "./query/aggregations.js";
30
+ // --- Numeric coercion at the store edge (ADR 0051 §2) ---
31
+ // Applied by every store's query runner so the collector always emits numbers.
32
+ // Lives on the root barrel rather than the browser-safe `/query` subpath because
33
+ // it reads the metric registry, which ships as its own dependency-free package
34
+ // (`@uptimizr/metrics`) so a browser bundle opts into that data explicitly.
35
+ export { coerceRows, numericColumns, numericColumnsOfMetric } from "./query/coerce.js";
36
+ // --- Agent-shaped result envelopes (ADR 0051 §2, design sketch §B.1) ---
37
+ // `format=table | summary`: pure, registry-driven summarisation of a metric's
38
+ // rows. Re-exported here for the collector's convenience; also published on its
39
+ // own browser-safe `@uptimizr/db/summary` subpath, which — like `/registry` —
40
+ // carries no DuckDB driver and no `node:` import.
41
+ export * from "./query/summary/index.js";
27
42
  // --- DuckDB (OSS single-file store, ADR 0020) ---
28
43
  export { createDuckdbClient, convertValue } from "./duckdb/client.js";
29
44
  export { DUCKDB_MIGRATIONS, migrateDuckdb } from "./duckdb/migrations.js";
30
45
  export { runDuckdbQuery } from "./duckdb/queries.js";
31
46
  export { insertEvents as duckdbInsertEvents, getSessionEvents as duckdbGetSessionEvents, streamSessionEvents as duckdbStreamSessionEvents, getSessionMeta as duckdbGetSessionMeta, } from "./duckdb/events.js";
32
47
  export { createProject as duckdbCreateProject, getProject as duckdbGetProject, createApiKey as duckdbCreateApiKey, resolveApiKey as duckdbResolveApiKey, } from "./duckdb/projects.js";
48
+ export { recordAudit as duckdbRecordAudit, listAudit as duckdbListAudit, pruneAudit as duckdbPruneAudit, } from "./duckdb/audit.js";
33
49
  export { upsertSceneProxy as duckdbUpsertSceneProxy, getSceneRepresentation as duckdbGetSceneRepresentation, listSceneRepresentations as duckdbListSceneRepresentations, } from "./duckdb/sceneRegistry.js";
50
+ export { putSceneRegions as duckdbPutSceneRegions, getSceneRegions as duckdbGetSceneRegions, listSceneRegions as duckdbListSceneRegions, } from "./duckdb/sceneRegions.js";
34
51
  // --- Cross-engine parity harness (ADR 0020) ---
35
52
  // Shared fixtures, golden expectations, and a tolerance-aware comparator. OSS
36
53
  // runs DuckDB-vs-golden; the scale tier reuses these to run DuckDB-vs-ClickHouse.
37
54
  export { PARITY_PROJECT_ID, PARITY_T0, PARITY_RANGE, PARITY_DAY_RANGE, PARITY_DAY, PARITY_EVENTS, } from "./parity/fixtures.js";
38
- export { PARITY_ABS_TOLERANCE, PARITY_REL_TOLERANCE, diffParity } from "./parity/compare.js";
55
+ export { PARITY_ABS_TOLERANCE, PARITY_REL_TOLERANCE, diffParity, numericColumnsForSpec, } from "./parity/compare.js";
39
56
  export { PARITY_CASES } from "./parity/cases.js";
40
57
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}