@hasna/economy 0.3.28 → 0.5.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 (216) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/README.md +18 -22
  4. package/SECURITY.md +1 -1
  5. package/dist/chunks/agent-registry-store-tpnhx3wj.js +39 -0
  6. package/dist/chunks/billing-bkpxy4kv.js +13 -0
  7. package/dist/chunks/config-j9mv3ehk.js +15 -0
  8. package/dist/chunks/index-2hwzmfgv.js +3407 -0
  9. package/dist/chunks/index-axh32d30.js +1313 -0
  10. package/dist/chunks/index-emvs5ph2.js +2085 -0
  11. package/dist/chunks/index-ez9thsr7.js +3440 -0
  12. package/dist/chunks/index-hesxq90g.js +62 -0
  13. package/dist/chunks/index-k540hfww.js +258 -0
  14. package/dist/chunks/index-kgy9b6bf.js +451 -0
  15. package/dist/chunks/index-kn5572kd.js +124 -0
  16. package/dist/chunks/index-p35cyhc4.js +4 -0
  17. package/dist/chunks/index-w3bvv0ns.js +26 -0
  18. package/dist/chunks/index-zpvea08j.js +3372 -0
  19. package/dist/chunks/menubar-6xtkt17h.js +296 -0
  20. package/dist/chunks/open-projects-6z4pq6mx.js +39 -0
  21. package/dist/chunks/pricing-f80p81gr.js +29 -0
  22. package/dist/chunks/pricing-vf2pycmh.js +30 -0
  23. package/dist/chunks/pricing-y21mcjsa.js +30 -0
  24. package/dist/chunks/serve-0k69e4h9.js +4655 -0
  25. package/dist/chunks/sqlite-store-501f32ts.js +258 -0
  26. package/dist/chunks/sqlite-store-fq4natnf.js +256 -0
  27. package/dist/chunks/sqlite-store-st99garx.js +258 -0
  28. package/dist/chunks/third-party-sqlite-5e85fxa2.js +11 -0
  29. package/dist/chunks/tui-7f8f951w.js +22 -0
  30. package/dist/chunks/watch-mm1j39vy.js +196 -0
  31. package/dist/chunks/webhooks-k4fh2t9c.js +109 -0
  32. package/dist/cli/commands/brief.d.ts.map +1 -1
  33. package/dist/cli/commands/extras.d.ts.map +1 -1
  34. package/dist/cli/commands/journal.d.ts +3 -0
  35. package/dist/cli/commands/journal.d.ts.map +1 -0
  36. package/dist/cli/commands/menubar.d.ts +97 -4
  37. package/dist/cli/commands/menubar.d.ts.map +1 -1
  38. package/dist/cli/commands/tui.d.ts +1 -1
  39. package/dist/cli/commands/tui.d.ts.map +1 -1
  40. package/dist/cli/commands/watch.d.ts.map +1 -1
  41. package/dist/cli/index.js +1524 -9998
  42. package/dist/db/cloud.d.ts +18 -12
  43. package/dist/db/cloud.d.ts.map +1 -1
  44. package/dist/db/database.d.ts +33 -12
  45. package/dist/db/database.d.ts.map +1 -1
  46. package/dist/db/ingest-concurrency-worker.d.ts +2 -0
  47. package/dist/db/ingest-concurrency-worker.d.ts.map +1 -0
  48. package/dist/db/ingest-errors.d.ts +9 -0
  49. package/dist/db/ingest-errors.d.ts.map +1 -0
  50. package/dist/db/ingest-schema.d.ts +3 -0
  51. package/dist/db/ingest-schema.d.ts.map +1 -0
  52. package/dist/db/ingest-specs.d.ts +8 -0
  53. package/dist/db/ingest-specs.d.ts.map +1 -0
  54. package/dist/db/ingest-test-contract.d.ts +3 -0
  55. package/dist/db/ingest-test-contract.d.ts.map +1 -0
  56. package/dist/db/ingest-validation.d.ts +12 -0
  57. package/dist/db/ingest-validation.d.ts.map +1 -0
  58. package/dist/db/ingest.d.ts +27 -0
  59. package/dist/db/ingest.d.ts.map +1 -0
  60. package/dist/db/legacy-schema.d.ts +7 -0
  61. package/dist/db/legacy-schema.d.ts.map +1 -0
  62. package/dist/db/observation-contract.d.ts +3 -0
  63. package/dist/db/observation-contract.d.ts.map +1 -0
  64. package/dist/db/observation-provenance.d.ts +23 -0
  65. package/dist/db/observation-provenance.d.ts.map +1 -0
  66. package/dist/db/observation-schema.d.ts +24 -0
  67. package/dist/db/observation-schema.d.ts.map +1 -0
  68. package/dist/db/pg-connection.d.ts +10 -0
  69. package/dist/db/pg-connection.d.ts.map +1 -0
  70. package/dist/db/pg-migrate.d.ts +4 -9
  71. package/dist/db/pg-migrate.d.ts.map +1 -1
  72. package/dist/db/pg-migrations.d.ts.map +1 -1
  73. package/dist/db/pg-protocol.d.ts +28 -0
  74. package/dist/db/pg-protocol.d.ts.map +1 -0
  75. package/dist/db/sqlite-store.d.ts +4 -0
  76. package/dist/db/sqlite-store.d.ts.map +1 -0
  77. package/dist/db/sync-pg.d.ts +17 -21
  78. package/dist/db/sync-pg.d.ts.map +1 -1
  79. package/dist/db/third-party-sqlite.d.ts +10 -0
  80. package/dist/db/third-party-sqlite.d.ts.map +1 -0
  81. package/dist/index.d.ts +3 -0
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1281 -2405
  84. package/dist/ingest/claude-quota.d.ts.map +1 -1
  85. package/dist/ingest/claude.d.ts.map +1 -1
  86. package/dist/ingest/codex-quota.d.ts.map +1 -1
  87. package/dist/ingest/codex.d.ts +25 -0
  88. package/dist/ingest/codex.d.ts.map +1 -1
  89. package/dist/ingest/collection-outcome.d.ts +17 -0
  90. package/dist/ingest/collection-outcome.d.ts.map +1 -0
  91. package/dist/ingest/cursor.d.ts.map +1 -1
  92. package/dist/ingest/gemini.d.ts.map +1 -1
  93. package/dist/ingest/hermes.d.ts +1 -1
  94. package/dist/ingest/hermes.d.ts.map +1 -1
  95. package/dist/ingest/loops.d.ts +9 -0
  96. package/dist/ingest/loops.d.ts.map +1 -1
  97. package/dist/ingest/opencode.d.ts +1 -1
  98. package/dist/ingest/opencode.d.ts.map +1 -1
  99. package/dist/ingest/pi.d.ts +1 -1
  100. package/dist/ingest/pi.d.ts.map +1 -1
  101. package/dist/ingest/quota-observation.d.ts +16 -0
  102. package/dist/ingest/quota-observation.d.ts.map +1 -0
  103. package/dist/ingest/source-time.d.ts +4 -0
  104. package/dist/ingest/source-time.d.ts.map +1 -0
  105. package/dist/lib/accounts-store.d.ts +109 -0
  106. package/dist/lib/accounts-store.d.ts.map +1 -0
  107. package/dist/lib/accounts.d.ts +2 -1
  108. package/dist/lib/accounts.d.ts.map +1 -1
  109. package/dist/lib/analytics.d.ts.map +1 -1
  110. package/dist/lib/api-display-url.d.ts +19 -0
  111. package/dist/lib/api-display-url.d.ts.map +1 -0
  112. package/dist/lib/autosync-gate.d.ts +22 -0
  113. package/dist/lib/autosync-gate.d.ts.map +1 -0
  114. package/dist/lib/billing-diff.d.ts +18 -40
  115. package/dist/lib/billing-diff.d.ts.map +1 -1
  116. package/dist/lib/brief.d.ts +2 -0
  117. package/dist/lib/brief.d.ts.map +1 -1
  118. package/dist/lib/budget-decimal.d.ts +14 -0
  119. package/dist/lib/budget-decimal.d.ts.map +1 -0
  120. package/dist/lib/cloud-ingest.d.ts +30 -1
  121. package/dist/lib/cloud-ingest.d.ts.map +1 -1
  122. package/dist/lib/cloud-storage.d.ts +166 -10
  123. package/dist/lib/cloud-storage.d.ts.map +1 -1
  124. package/dist/lib/gatherer.d.ts.map +1 -1
  125. package/dist/lib/ingest-batches.d.ts +21 -0
  126. package/dist/lib/ingest-batches.d.ts.map +1 -0
  127. package/dist/lib/ingest-journal-client.d.ts +37 -0
  128. package/dist/lib/ingest-journal-client.d.ts.map +1 -0
  129. package/dist/lib/ingest-journal-lock.d.ts +5 -0
  130. package/dist/lib/ingest-journal-lock.d.ts.map +1 -0
  131. package/dist/lib/ingest-journal-maintenance.d.ts +92 -0
  132. package/dist/lib/ingest-journal-maintenance.d.ts.map +1 -0
  133. package/dist/lib/ingest-journal-operation.d.ts +55 -0
  134. package/dist/lib/ingest-journal-operation.d.ts.map +1 -0
  135. package/dist/lib/ingest-journal.d.ts +73 -0
  136. package/dist/lib/ingest-journal.d.ts.map +1 -0
  137. package/dist/lib/money-display.d.ts +13 -0
  138. package/dist/lib/money-display.d.ts.map +1 -0
  139. package/dist/lib/periods.d.ts +12 -0
  140. package/dist/lib/periods.d.ts.map +1 -1
  141. package/dist/lib/pricing.d.ts +14 -0
  142. package/dist/lib/pricing.d.ts.map +1 -1
  143. package/dist/lib/savings.d.ts +64 -7
  144. package/dist/lib/savings.d.ts.map +1 -1
  145. package/dist/lib/serve-auth.d.ts.map +1 -1
  146. package/dist/lib/store/index.d.ts +29 -22
  147. package/dist/lib/store/index.d.ts.map +1 -1
  148. package/dist/lib/summary-contract.d.ts +32 -0
  149. package/dist/lib/summary-contract.d.ts.map +1 -0
  150. package/dist/lib/summary-test-contract.d.ts +3 -0
  151. package/dist/lib/summary-test-contract.d.ts.map +1 -0
  152. package/dist/lib/sync-all.d.ts +4 -0
  153. package/dist/lib/sync-all.d.ts.map +1 -1
  154. package/dist/lib/sync-maintenance.d.ts.map +1 -1
  155. package/dist/lib/sync-report.d.ts +4 -0
  156. package/dist/lib/sync-report.d.ts.map +1 -0
  157. package/dist/lib/test-keychain-fixture.d.ts +9 -0
  158. package/dist/lib/test-keychain-fixture.d.ts.map +1 -0
  159. package/dist/mcp/agent-registry-store.d.ts +30 -0
  160. package/dist/mcp/agent-registry-store.d.ts.map +1 -0
  161. package/dist/mcp/agent-registry.d.ts +78 -0
  162. package/dist/mcp/agent-registry.d.ts.map +1 -0
  163. package/dist/mcp/harness.d.ts +26 -0
  164. package/dist/mcp/harness.d.ts.map +1 -0
  165. package/dist/mcp/index.js +3219 -3357
  166. package/dist/mcp/ingest-journal-tool.d.ts +2 -0
  167. package/dist/mcp/ingest-journal-tool.d.ts.map +1 -0
  168. package/dist/mcp/server.d.ts.map +1 -1
  169. package/dist/openapi.d.ts.map +1 -1
  170. package/dist/otel/index.js +2197 -121
  171. package/dist/server/human-auth.d.ts +20 -0
  172. package/dist/server/human-auth.d.ts.map +1 -0
  173. package/dist/server/index.js +10477 -6378
  174. package/dist/server/legacy-inventory.d.ts +52 -0
  175. package/dist/server/legacy-inventory.d.ts.map +1 -0
  176. package/dist/server/legacy-operations.d.ts +64 -0
  177. package/dist/server/legacy-operations.d.ts.map +1 -0
  178. package/dist/server/legacy-plan.d.ts +55 -0
  179. package/dist/server/legacy-plan.d.ts.map +1 -0
  180. package/dist/server/legacy-preservation.d.ts +58 -0
  181. package/dist/server/legacy-preservation.d.ts.map +1 -0
  182. package/dist/server/pg-sync-worker.js +195 -21
  183. package/dist/server/serve.d.ts +20 -18
  184. package/dist/server/serve.d.ts.map +1 -1
  185. package/dist/server/service-admission.d.ts +10 -0
  186. package/dist/server/service-admission.d.ts.map +1 -0
  187. package/dist/server/service-dispatcher.d.ts +45 -0
  188. package/dist/server/service-dispatcher.d.ts.map +1 -0
  189. package/dist/server/service-operations.d.ts +5 -0
  190. package/dist/server/service-operations.d.ts.map +1 -0
  191. package/dist/server/service-protocol.d.ts +50 -0
  192. package/dist/server/service-protocol.d.ts.map +1 -0
  193. package/dist/server/service-worker.d.ts +2 -0
  194. package/dist/server/service-worker.d.ts.map +1 -0
  195. package/dist/server/service-worker.js +8029 -0
  196. package/dist/types/index.d.ts +66 -0
  197. package/dist/types/index.d.ts.map +1 -1
  198. package/docs/README.md +1 -1
  199. package/docs/cli.md +2 -3
  200. package/docs/configuration.md +25 -12
  201. package/docs/cost-reporting.md +49 -0
  202. package/docs/historical-data-reconciliation.md +203 -0
  203. package/docs/ingest-journal.md +108 -0
  204. package/docs/ingestion.md +61 -5
  205. package/docs/mcp.md +5 -3
  206. package/docs/native-budget-save.md +84 -0
  207. package/docs/native-human-auth.md +102 -0
  208. package/docs/otel.md +8 -2
  209. package/docs/rest-api.md +4 -4
  210. package/package.json +17 -20
  211. package/postinstall.js +52 -1
  212. package/dashboard/README.md +0 -26
  213. package/dist/cli/brains.d.ts +0 -3
  214. package/dist/cli/brains.d.ts.map +0 -1
  215. package/dist/lib/test-hermetic-accounts.d.ts +0 -6
  216. package/dist/lib/test-hermetic-accounts.d.ts.map +0 -1
@@ -1,5 +1,4 @@
1
1
  import type { AuthQueryClient } from '@hasna/contracts/auth';
2
- import type { ServerDataBackend } from '@hasna/contracts/schemas';
3
2
  import pg from 'pg';
4
3
  import type { DbAdapter, SqliteAdapter as Database } from './sqlite-adapter.js';
5
4
  /** The environment shape the backend resolver reads. */
@@ -9,18 +8,25 @@ export declare function getCloudDatabaseUrl(env?: Env): string | undefined;
9
8
  /**
10
9
  * Resolve the server data backend from database configuration ALONE.
11
10
  *
12
- * `@hasna/contracts` 0.9.0 removed the deployment-mode axis: the only switch is
13
- * the server's data backend, `sqlite | postgresql`, and a present database URL
14
- * is what selects `postgresql`. Retired `STORAGE_MODE` / `MODE` variables are
15
- * rejected with a migration hint rather than normalized or silently mapped
16
- * (CONTRACT.md section 2), so a half-migrated deployment fails loudly at startup
17
- * instead of quietly serving the wrong store.
11
+ * `@hasna/contracts` 1.0.2 narrowed its published `ServerDataBackendSchema` to
12
+ * `z.literal("postgresql")` — SQLite is legacy-import input, never a LIVE
13
+ * backend, so the contract's health vocabulary only speaks the authoritative
14
+ * arm. Economy's serve still runs a real on-box SQLite backend in local mode,
15
+ * so the resolver keeps its own two-arm union and the runtime reports the
16
+ * honest backend on `/health` (the contract schema is asserted against the
17
+ * postgresql arm in `foundation-probe.contract.test.ts`).
18
18
  *
19
- * The rejection stays local because economy also honours the bare `DATABASE_URL`
20
- * alias, which the contract's own resolver does not read — deferring to it
21
- * wholesale would silently downgrade such a deployment to sqlite.
19
+ * The retired deployment-mode axis stays gone: the only switch is the server's
20
+ * data backend, `sqlite | postgresql`, and a present database URL is what
21
+ * selects `postgresql`. Stale `STORAGE_MODE` / `MODE` variables (still exported
22
+ * by some station wrappers) are ignored entirely — they never select a backend
23
+ * and never fail startup (owner directive 2026-08-15). The resolver stays local
24
+ * because economy also honours the bare `DATABASE_URL` alias, which the
25
+ * contract's own resolver does not read — deferring to it wholesale would
26
+ * silently downgrade such a deployment to sqlite.
22
27
  */
23
- export declare function resolveEconomyServerBackend(env?: Env): ServerDataBackend;
28
+ export type EconomyServerBackend = 'sqlite' | 'postgresql';
29
+ export declare function resolveEconomyServerBackend(env?: Env): EconomyServerBackend;
24
30
  /** True when the serve reads and writes PostgreSQL directly. */
25
31
  export declare function isPostgresBackend(env?: Env): boolean;
26
32
  /** HMAC signing secret for API-key verification (server-held, never in a token). */
@@ -32,7 +38,7 @@ export declare function resolveSigningSecret(): string | undefined;
32
38
  */
33
39
  export declare function openCloudDatabase(dsn?: string | undefined): Database;
34
40
  /** A raw pg Pool for auxiliary async work (API-key store, migrations). */
35
- export declare function createCloudPool(dsn?: string | undefined): pg.Pool;
41
+ export declare function createCloudPool(dsn?: string | undefined, options?: Pick<pg.PoolConfig, 'max' | 'connectionTimeoutMillis' | 'query_timeout' | 'statement_timeout'>): pg.Pool;
36
42
  /**
37
43
  * Adapt a pg Pool to the `@hasna/contracts/auth` `AuthQueryClient` surface
38
44
  * (many/get/execute). This backs the `ApiKeyStore` without pulling in the
@@ -1 +1 @@
1
- {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/db/cloud.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAK/E,wDAAwD;AACxD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAqB7C,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,GAAG,SAAS,CAO9E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,GAAiB,GAAG,iBAAiB,CAGrF;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,GAAiB,GAAG,OAAO,CAEjE;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,qBAAwB,GAAG,QAAQ,CASvE;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,GAAG,qBAAwB,GAAG,EAAE,CAAC,IAAI,CAWpE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,eAAe,CAcjE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED,YAAY,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/db/cloud.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAK/E,wDAAwD;AACxD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAE7C,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,GAAG,SAAS,CAO9E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,YAAY,CAAA;AAE1D,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,GAAiB,GAAG,oBAAoB,CAExF;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,GAAiB,GAAG,OAAO,CAEjE;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,qBAAwB,GAAG,QAAQ,CASvE;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,GAAG,qBAAwB,EAAE,OAAO,GAAE,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,GAAG,yBAAyB,GAAG,eAAe,GAAG,mBAAmB,CAAM,GAAG,EAAE,CAAC,IAAI,CAWlL;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,eAAe,CAcjE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED,YAAY,EAAE,SAAS,EAAE,CAAA"}
@@ -1,4 +1,16 @@
1
- import { SqliteAdapter as Database } from './sqlite-adapter.js';
1
+ import { type IngestContext, type IngestResult } from './ingest.js';
2
+ import type { SqliteAdapter as Database } from './sqlite-adapter.js';
3
+ export type PathKind = "config" | "data" | "state" | "cache";
4
+ export interface PathsResolverOptions {
5
+ app: string;
6
+ internal?: boolean;
7
+ platform?: string;
8
+ home?: string;
9
+ env?: Record<string, string | undefined>;
10
+ }
11
+ export declare function dataDir(options: PathsResolverOptions): string;
12
+ /** The resolver (XDG / macOS) CACHE root for an app; `HASNA_CACHE_HOME` overrides it. */
13
+ export declare function cacheDir(options: PathsResolverOptions): string;
2
14
  import type { EconomyRequest, EconomySession, EconomyProject, CostCenter, CostCenterBreakdown, CostCenterKind, Budget, BudgetStatus, CostSummary, ZeroCostModelBreakdown, ModelBreakdown, ProjectBreakdown, AgentBreakdown, AccountBreakdown, Period, Agent, SessionFilter } from '../types/index.js';
3
15
  export declare function getMachineId(): string;
4
16
  /**
@@ -42,7 +54,7 @@ export declare function getExactDataRoot(): string | undefined;
42
54
  */
43
55
  export declare function getDataDir(): string;
44
56
  export declare function getDbPath(): string;
45
- export declare function openDatabase(dbPath?: string, skipSeed?: boolean): Database;
57
+ export declare function initSchema(db: Database): void;
46
58
  export declare function upsertCostCenter(db: Database, center: CostCenter): void;
47
59
  export declare function getCostCenter(db: Database, id: string): CostCenter | null;
48
60
  export declare function upsertRequest(db: Database, req: EconomyRequest): void;
@@ -82,7 +94,7 @@ export declare function deleteProject(db: Database, path: string): void;
82
94
  export declare function upsertBudget(db: Database, budget: Budget): void;
83
95
  export declare function listBudgets(db: Database): Budget[];
84
96
  export declare function deleteBudget(db: Database, id: string): void;
85
- export declare function getBudgetStatuses(db: Database): BudgetStatus[];
97
+ export declare function getBudgetStatuses(db: Database, now?: Date): BudgetStatus[];
86
98
  export interface Goal {
87
99
  id: string;
88
100
  period: 'day' | 'week' | 'month' | 'year';
@@ -104,6 +116,14 @@ export declare function deleteGoal(db: Database, id: string): void;
104
116
  export declare function listGoals(db: Database): Goal[];
105
117
  export declare function getGoalStatuses(db: Database): GoalStatus[];
106
118
  export declare function getIngestState(db: Database, source: string, key: string): string | null;
119
+ /**
120
+ * Load every ingest_state row for one source into a Map. Ingest loops that
121
+ * check one key per corpus file (e.g. tens of thousands of session jsonl
122
+ * files) must use this instead of calling getIngestState per file — one
123
+ * prepared query per file turns an O(n) scan into an O(n) query blowup that
124
+ * dominates the whole ingest pass.
125
+ */
126
+ export declare function loadIngestState(db: Database, source: string): Map<string, string>;
107
127
  export declare function setIngestState(db: Database, source: string, key: string, value: string): void;
108
128
  export declare function queryRequestsSince(db: Database, since: string): EconomyRequest[];
109
129
  export interface FeedbackRecord {
@@ -124,10 +144,7 @@ export interface BillingDaily {
124
144
  }
125
145
  export declare function upsertBillingDaily(db: Database, row: BillingDaily): void;
126
146
  export declare function clearBillingRange(db: Database, provider: string, fromDate: string, toDate: string): void;
127
- export declare function queryBillingSummary(db: Database, period: Period): {
128
- total_usd: number;
129
- by_provider: Record<string, number>;
130
- };
147
+ export declare function queryBillingSummary(db: Database, period: Period): import('../types/index.js').BillingSummary;
131
148
  /**
132
149
  * How many provider billing rows exist for a period. A $0.00 actual total is
133
150
  * ambiguous on its own — it is produced both by "billing agrees with telemetry
@@ -175,22 +192,26 @@ export declare function seedModelPricing(db: Database, defaults: Record<string,
175
192
  cacheWrite1hPer1M?: number;
176
193
  cacheStoragePer1MHour?: number;
177
194
  }>): void;
178
- export declare function upsertSubscription(db: Database, sub: import('../types/index.js').Subscription): void;
195
+ export declare function upsertSubscription(db: Database, sub: import('../types/index.js').Subscription, mode?: 'configuration' | 'quota_observation'): void;
179
196
  export declare function listSubscriptions(db: Database): import('../types/index.js').Subscription[];
180
197
  export declare function deleteSubscription(db: Database, id: string): void;
181
198
  export declare function upsertUsageSnapshot(db: Database, snap: Omit<import('../types/index.js').UsageSnapshot, 'id' | 'updated_at'> & {
182
199
  id?: string;
183
200
  updated_at?: string;
184
201
  }): void;
202
+ export declare function upsertScanReceipt(db: Database, receipt: import('../types/index.js').ScanReceipt): void;
203
+ export declare function queryScanReceipts(db: Database, options?: {
204
+ machine_id?: string;
205
+ source?: string;
206
+ limit?: number;
207
+ }): import('../types/index.js').ScanReceipt[];
185
208
  export declare function queryUsageSnapshots(db: Database, opts?: {
186
209
  agent?: string;
187
210
  date?: string;
188
211
  since?: string;
212
+ before?: string;
189
213
  }): import('../types/index.js').UsageSnapshot[];
190
214
  export declare function listMachineRegistry(db: Database): import('../types/index.js').MachineRegistry[];
191
215
  export declare function dedupeRequests(db: Database): number;
192
- export declare function bulkIngest(db: Database, body: Record<string, unknown>): {
193
- ingested: Record<string, number>;
194
- total: number;
195
- };
216
+ export declare function bulkIngest(db: Database, body: Record<string, unknown>, context?: IngestContext): IngestResult;
196
217
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ingest-concurrency-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-concurrency-worker.d.ts","sourceRoot":"","sources":["../../src/db/ingest-concurrency-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /** Safe, authored field diagnostics. Never include a submitted value or SQL. */
2
+ export declare class IngestError extends Error {
3
+ readonly status: 400 | 409 | 413;
4
+ readonly code: 'INVALID_INGEST' | 'INGEST_CONFLICT' | 'INGEST_TOO_LARGE';
5
+ readonly field: string;
6
+ readonly expected: string;
7
+ constructor(status: 400 | 409 | 413, code: 'INVALID_INGEST' | 'INGEST_CONFLICT' | 'INGEST_TOO_LARGE', field: string, expected: string);
8
+ }
9
+ //# sourceMappingURL=ingest-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-errors.d.ts","sourceRoot":"","sources":["../../src/db/ingest-errors.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qBAAa,WAAY,SAAQ,KAAK;IAElC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,kBAAkB;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAHhB,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACvB,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,kBAAkB,EAC/D,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM;CAK5B"}
@@ -0,0 +1,3 @@
1
+ /** Additive SQL shared by SQLite initialization and one appended PG migration. */
2
+ export declare const INGEST_SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS ingest_session_locks (\n session_id TEXT PRIMARY KEY\n);\n CREATE TABLE IF NOT EXISTS ingest_batches (\n operation_key TEXT PRIMARY KEY,\n actor_id TEXT NOT NULL,\n payload_hash TEXT NOT NULL,\n response_json TEXT NOT NULL,\n created_at TEXT NOT NULL\n );\n CREATE TABLE IF NOT EXISTS ingest_preimages (\n id TEXT PRIMARY KEY,\n operation_key TEXT NOT NULL REFERENCES ingest_batches(operation_key),\n table_name TEXT NOT NULL,\n entity_key TEXT NOT NULL,\n record_json TEXT NOT NULL,\n record_sha256 TEXT NOT NULL,\n recorded_at TEXT NOT NULL,\n UNIQUE (operation_key, table_name, entity_key)\n );\n CREATE INDEX IF NOT EXISTS idx_ingest_preimages_entity\n ON ingest_preimages(table_name, entity_key);\n";
3
+ //# sourceMappingURL=ingest-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-schema.d.ts","sourceRoot":"","sources":["../../src/db/ingest-schema.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,ixBAuB7B,CAAA"}
@@ -0,0 +1,8 @@
1
+ export interface IngestSpec {
2
+ table: string;
3
+ pk: string[];
4
+ columns: string[];
5
+ map: (row: Record<string, unknown>, now: string) => unknown[];
6
+ }
7
+ export declare function ingestSpecs(): IngestSpec[];
8
+ //# sourceMappingURL=ingest-specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-specs.d.ts","sourceRoot":"","sources":["../../src/db/ingest-specs.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,EAAE,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,EAAE,CAAA;CAC9D;AASD,wBAAgB,WAAW,IAAI,UAAU,EAAE,CA4H1C"}
@@ -0,0 +1,3 @@
1
+ import type { DbAdapter } from './sqlite-adapter.js';
2
+ export declare function verifyIngestContract(db: DbAdapter, scope: string): void;
3
+ //# sourceMappingURL=ingest-test-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-test-contract.d.ts","sourceRoot":"","sources":["../../src/db/ingest-test-contract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAKpD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA0EvE"}
@@ -0,0 +1,12 @@
1
+ import { type IngestSpec } from './ingest-specs.js';
2
+ export declare const MAX_INGEST_ROWS = 10000;
3
+ export declare const MAX_INGEST_BYTES: number;
4
+ export declare function stableJson(value: unknown): string;
5
+ export declare function canonicalIngestBodyHash(body: Record<string, unknown>): string;
6
+ export interface ValidatedIngest {
7
+ spec: IngestSpec;
8
+ rows: Record<string, unknown>[];
9
+ }
10
+ /** Validate the entire command before SQL. No coercion of invalid input to zero. */
11
+ export declare function validateIngest(body: Record<string, unknown>): ValidatedIngest[];
12
+ //# sourceMappingURL=ingest-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-validation.d.ts","sourceRoot":"","sources":["../../src/db/ingest-validation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGhE,eAAO,MAAM,eAAe,QAAQ,CAAA;AACpC,eAAO,MAAM,gBAAgB,QAAkB,CAAA;AAa/C,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOjD;AACD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE7E;AAiBD,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CAAE;AACtF,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,EAAE,CAiF/E"}
@@ -0,0 +1,27 @@
1
+ import type { DbAdapter } from './sqlite-adapter.js';
2
+ export interface IngestResult {
3
+ ingested: Record<string, number>;
4
+ total: number;
5
+ stale: number;
6
+ unchanged: number;
7
+ operation_key: string;
8
+ replayed: boolean;
9
+ }
10
+ export interface IngestContext {
11
+ actorId?: string;
12
+ }
13
+ /** A command is atomic, including its receipt, predecessor snapshots and rollups.
14
+ * Failed/ambiguous SQL is never replayed here. Callers reconcile by resubmitting
15
+ * the identical command/key, whose committed receipt is returned unchanged. */
16
+ export declare function ingestCommand(db: DbAdapter, body: Record<string, unknown>, rollup: (db: DbAdapter, sessionId: string) => void, context?: IngestContext): IngestResult;
17
+ export type IngestReceiptResult = {
18
+ status: 'absent';
19
+ body_hash: string;
20
+ } | {
21
+ status: 'committed';
22
+ body_hash: string;
23
+ receipt: IngestResult;
24
+ };
25
+ /** Read-only: absent is a current observation, never proof an uncertain write cannot later commit. */
26
+ export declare function reconcileIngestReceipt(db: DbAdapter, idempotencyKey: string, bodyHash: string, context: IngestContext): IngestReceiptResult;
27
+ //# sourceMappingURL=ingest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/db/ingest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAKpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB;AACD,MAAM,WAAW,aAAa;IAAG,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AASnD;;+EAE+E;AAC/E,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,CA+K/F;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAA;AACrE,sGAAsG;AACtG,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,mBAAmB,CAiB3I"}
@@ -0,0 +1,7 @@
1
+ /** Reconciliation is an overlay: original requests and sessions stay in place.
2
+ * Apply and rollback histories are append-only; active dispositions are derived. */
3
+ export declare const LEGACY_LEDGER_SQL = "\nCREATE TABLE IF NOT EXISTS legacy_reconciliations (\n operation_key TEXT PRIMARY KEY NOT NULL,\n payload_sha256 TEXT NOT NULL CHECK(length(payload_sha256)=64),\n plan_sha256 TEXT NOT NULL CHECK(length(plan_sha256)=64),\n capsule_sha256 TEXT NOT NULL CHECK(length(capsule_sha256)=64),\n capsule_json TEXT NOT NULL,\n actor_ref TEXT NOT NULL,\n authority_ref TEXT NOT NULL,\n created_at TEXT NOT NULL,\n response_json TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS legacy_reconciliation_targets (\n operation_key TEXT NOT NULL REFERENCES legacy_reconciliations(operation_key),\n request_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n disposition TEXT NOT NULL CHECK(disposition IN ('quarantine_aggregate','mark_billing_unknown')),\n original_sha256 TEXT NOT NULL CHECK(length(original_sha256)=64),\n PRIMARY KEY(operation_key,request_id)\n);\nCREATE INDEX IF NOT EXISTS idx_legacy_targets_request ON legacy_reconciliation_targets(request_id);\nCREATE INDEX IF NOT EXISTS idx_legacy_targets_session ON legacy_reconciliation_targets(session_id);\nCREATE TABLE IF NOT EXISTS legacy_rollbacks (\n operation_key TEXT PRIMARY KEY NOT NULL,\n apply_key TEXT NOT NULL UNIQUE REFERENCES legacy_reconciliations(operation_key),\n payload_sha256 TEXT NOT NULL CHECK(length(payload_sha256)=64),\n actor_ref TEXT NOT NULL,\n authority_ref TEXT NOT NULL,\n created_at TEXT NOT NULL,\n response_json TEXT NOT NULL\n);\n";
4
+ export declare const LEGACY_VIEWS_SQL: string;
5
+ export declare const LEGACY_SQLITE_SQL: string;
6
+ export declare const LEGACY_PG_SQL: string;
7
+ //# sourceMappingURL=legacy-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-schema.d.ts","sourceRoot":"","sources":["../../src/db/legacy-schema.ts"],"names":[],"mappings":"AAAA;oFACoF;AACpF,eAAO,MAAM,iBAAiB,s5CA+B7B,CAAA;AA2BD,eAAO,MAAM,gBAAgB,QAW5B,CAAA;AAOD,eAAO,MAAM,iBAAiB,QAuB7B,CAAA;AAKD,eAAO,MAAM,aAAa,QA+CzB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { SqliteAdapter } from './sqlite-adapter.js';
2
+ export declare function verifyObservationContract(db: SqliteAdapter, prefix: string): void;
3
+ //# sourceMappingURL=observation-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-contract.d.ts","sourceRoot":"","sources":["../../src/db/observation-contract.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAOxD,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAgG1E"}
@@ -0,0 +1,23 @@
1
+ export type ValueKind = 'gauge' | 'cumulative' | 'delta' | 'unknown';
2
+ export type AmountBasis = 'unknown' | 'observed' | 'configured';
3
+ /** Fixed collector diagnostics: never store provider responses or arbitrary error text. */
4
+ export declare const SCAN_ERROR_CODES: readonly ["SOURCE_MISSING", "SOURCE_UNREADABLE", "SOURCE_INVALID", "LEGACY_AGGREGATE_REQUIRES_MIGRATION", "USAGE_EVENTS_UNAVAILABLE", "USAGE_EVENTS_INCOMPLETE", "PROVIDER_CREDENTIAL_UNAVAILABLE", "PROVIDER_CREDENTIAL_UNREADABLE", "PROVIDER_AUTH_REFUSED", "PROVIDER_REFUSED", "PROVIDER_UNAVAILABLE", "ACCOUNT_IDENTITY_UNAVAILABLE", "SUBSCRIPTION_QUOTA_NOT_APPLICABLE", "TEAM_USAGE_ATTRIBUTION_UNAVAILABLE", "CROSS_APP_LOCAL_READ_REFUSED", "COLLECTION_FAILED"];
5
+ export declare function observationId(input: {
6
+ provider: string;
7
+ account_key: string;
8
+ machine_id: string;
9
+ metric: string;
10
+ observed_at: string;
11
+ }): string;
12
+ export declare function subscriptionId(input: {
13
+ provider: string;
14
+ account_key: string;
15
+ }): string;
16
+ export declare function scanReceiptId(input: {
17
+ machine_id: string;
18
+ source: string;
19
+ attempted_at: string;
20
+ }): string;
21
+ /** Validate meaning, never convert a cumulative measurement into a delta. */
22
+ export declare function validateObservationProvenance(table: string, row: Record<string, unknown>, path: string): void;
23
+ //# sourceMappingURL=observation-provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-provenance.d.ts","sourceRoot":"","sources":["../../src/db/observation-provenance.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAA;AACpE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAA;AAC/D,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,4cAMnB,CAAA;AAEV,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE/I;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEvF;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEzG;AAOD,6EAA6E;AAC7E,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CA8B7G"}
@@ -0,0 +1,24 @@
1
+ /** Additive only: legacy values are retained, provenance defaults to unknown. */
2
+ export declare const OBSERVATION_COLUMNS: {
3
+ readonly usage_snapshots: {
4
+ readonly provider: "TEXT NOT NULL DEFAULT ''";
5
+ readonly account_key: "TEXT NOT NULL DEFAULT ''";
6
+ readonly observed_at: "TEXT";
7
+ readonly source_timestamp: "TEXT";
8
+ readonly window_start: "TEXT";
9
+ readonly window_end: "TEXT";
10
+ readonly reset_at: "TEXT";
11
+ readonly window_seconds: "INTEGER";
12
+ readonly value_kind: "TEXT NOT NULL DEFAULT 'unknown'";
13
+ };
14
+ readonly subscriptions: {
15
+ readonly account_key: "TEXT NOT NULL DEFAULT ''";
16
+ readonly observed_station: "TEXT";
17
+ readonly observed_at: "TEXT";
18
+ readonly fee_basis: "TEXT NOT NULL DEFAULT 'unknown'";
19
+ readonly included_basis: "TEXT NOT NULL DEFAULT 'unknown'";
20
+ };
21
+ };
22
+ export declare const SCAN_RECEIPTS_SQL = "CREATE TABLE IF NOT EXISTS scan_receipts (\n id TEXT PRIMARY KEY, machine_id TEXT NOT NULL, source TEXT NOT NULL,\n attempted_at TEXT NOT NULL, completed_at TEXT NOT NULL, status TEXT NOT NULL,\n latest_event_at TEXT, parser_version TEXT NOT NULL, error_code TEXT,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_scan_receipts_machine_source\n ON scan_receipts(machine_id, source, completed_at);";
23
+ export declare const OBSERVATION_PG_MIGRATIONS: string[];
24
+ //# sourceMappingURL=observation-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-schema.d.ts","sourceRoot":"","sources":["../../src/db/observation-schema.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;CAUtB,CAAA;AACV,eAAO,MAAM,iBAAiB,oaAOwB,CAAA;AACtD,eAAO,MAAM,yBAAyB,UAIrC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import pg from 'pg';
2
+ /**
3
+ * Preserve node-postgres's existing DSN/environment resolution, including
4
+ * sslrootcert, sslcert and sslkey. Materialize it once so reparsing a DSN cannot
5
+ * overwrite the TLS verifier. Encrypted connections always verify CA and host,
6
+ * including require/no-verify modes; explicitly plaintext configurations retain
7
+ * their existing semantics. No connection is opened by this resolver.
8
+ */
9
+ export declare function resolvePgConnection(dsn: string): pg.PoolConfig;
10
+ //# sourceMappingURL=pg-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-connection.d.ts","sourceRoot":"","sources":["../../src/db/pg-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAGnB;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,UAAU,CAiB9D"}
@@ -1,3 +1,4 @@
1
+ import pg from 'pg';
1
2
  export interface PgMigrationResult {
2
3
  service: string;
3
4
  applied: number[];
@@ -5,15 +6,9 @@ export interface PgMigrationResult {
5
6
  errors: string[];
6
7
  totalMigrations: number;
7
8
  }
8
- /**
9
- * TLS settings for a Postgres DSN. RDS presents a certificate chain the default
10
- * Node trust store does not carry, so `sslmode=require`/`ssl=true` DSNs opt into
11
- * encryption without chain verification — matching how every other economy
12
- * Postgres connection in this repo is dialled.
13
- */
14
- export declare function resolvePgSsl(dsn: string): {
15
- rejectUnauthorized: false;
16
- } | undefined;
9
+ /** Compatibility export; full pool setup must use resolvePgConnection so the
10
+ * DSN cannot overwrite this verified TLS configuration during pg reparsing. */
11
+ export declare function resolvePgSsl(dsn: string): pg.PoolConfig['ssl'];
17
12
  /**
18
13
  * Apply an ordered array of SQL migrations to a PostgreSQL database.
19
14
  *
@@ -1 +1 @@
1
- {"version":3,"file":"pg-migrate.d.ts","sourceRoot":"","sources":["../../src/db/pg-migrate.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,kBAAkB,EAAE,KAAK,CAAA;CAAE,GAAG,SAAS,CAEnF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,SAAY,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAwC5B"}
1
+ {"version":3,"file":"pg-migrate.d.ts","sourceRoot":"","sources":["../../src/db/pg-migrate.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,MAAM,IAAI,CAAA;AAGnB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;+EAC+E;AAC/E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAE9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,SAAY,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAsD5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"pg-migrations.d.ts","sourceRoot":"","sources":["../../src/db/pg-migrations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,aAAa,EAAE,MAAM,EAwQjC,CAAC"}
1
+ {"version":3,"file":"pg-migrations.d.ts","sourceRoot":"","sources":["../../src/db/pg-migrations.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,eAAO,MAAM,aAAa,EAAE,MAAM,EA+QjC,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type PgOperation = 'query' | 'begin' | 'commit' | 'rollback' | 'savepoint' | 'release' | 'rollbackTo';
2
+ export interface PgResult {
3
+ rows: Array<Record<string, unknown>>;
4
+ rowCount: number;
5
+ }
6
+ export type PgReply = ({
7
+ id: number;
8
+ ok: true;
9
+ } & PgResult) | {
10
+ id: number;
11
+ ok: false;
12
+ error: string;
13
+ code: string;
14
+ fatal: boolean;
15
+ };
16
+ export interface PgRequest {
17
+ id: number;
18
+ operation: PgOperation;
19
+ sql?: string;
20
+ params: unknown[];
21
+ deadline: number;
22
+ transactionId: number | null;
23
+ depth: number;
24
+ signal: SharedArrayBuffer;
25
+ }
26
+ /** Comparable monotonic milliseconds across threads, unaffected by clock steps. */
27
+ export declare function pgNow(): number;
28
+ //# sourceMappingURL=pg-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-protocol.d.ts","sourceRoot":"","sources":["../../src/db/pg-protocol.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,CAAA;AAC5G,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AACpF,MAAM,MAAM,OAAO,GAAG,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,QAAQ,CAAC,GACvD;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAC1E,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,WAAW,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AACD,mFAAmF;AACnF,wBAAgB,KAAK,IAAI,MAAM,CAAsD"}
@@ -0,0 +1,4 @@
1
+ import { SqliteAdapter as Database } from './sqlite-adapter.js';
2
+ export * from './database.js';
3
+ export declare function openDatabase(dbPath?: string, skipSeed?: boolean): Database;
4
+ //# sourceMappingURL=sqlite-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../src/db/sqlite-store.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAI/D,cAAc,eAAe,CAAA;AAkC7B,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,QAAQ,CAwBxE"}
@@ -6,31 +6,27 @@ import type { DbAdapter, PreparedStatement, RunResult } from './sqlite-adapter.j
6
6
  * `DATE(col)` casts through `timestamptz`. Ordered most-specific first.
7
7
  */
8
8
  export declare function translateSqliteDates(sql: string): string;
9
- /**
10
- * Connection-level failures where the query provably never executed (the pool
11
- * could not hand out or keep a live backend). These are safe to retry once —
12
- * the pg pool discards the dead client and dials a fresh one on the next query,
13
- * so a single retry transparently absorbs RDS failover / idle-drop / connect
14
- * timeout blips instead of surfacing a 500 the caller has to retry by hand.
15
- */
16
- export declare function isTransientConnError(message: string): boolean;
9
+ export interface SyncPgOptions {
10
+ /** Includes worker startup, connection acquisition, execution and reply delivery. */
11
+ queryTimeoutMs?: number;
12
+ /** Total time allowed across a transaction callback and all nested work. */
13
+ transactionTimeoutMs?: number;
14
+ }
17
15
  export declare class SyncPgAdapter implements DbAdapter {
18
16
  private readonly worker;
19
17
  private readonly port;
20
- private counter;
18
+ private readonly lifecycle;
21
19
  private readonly sleeper;
22
- constructor(dsn: string);
23
- /**
24
- * Drain the reply matching `expectedId`. The reply is enqueued on the port
25
- * before the worker notifies, but cross-thread delivery can lag under CPU
26
- * pressure — so poll on a wall-clock deadline (yielding via a 1ms Atomics.wait
27
- * between empty reads) rather than a fixed iteration count, which could give
28
- * up prematurely on a busy box and throw a spurious 500. Replies whose id does
29
- * not match are stale results of a previously abandoned (timed-out) query;
30
- * discard them so the port never cross-talks between requests.
31
- */
32
- private drainReply;
33
- private queryOnce;
20
+ private readonly queryTimeoutMs;
21
+ private readonly transactionTimeoutMs;
22
+ private counter;
23
+ private transactionId;
24
+ private transactionDeadline;
25
+ private depth;
26
+ private closed;
27
+ constructor(dsn: string, options?: SyncPgOptions);
28
+ private abandon;
29
+ private request;
34
30
  private query;
35
31
  run(sql: string, ...params: unknown[]): RunResult;
36
32
  get(sql: string, ...params: unknown[]): unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"sync-pg.d.ts","sourceRoot":"","sources":["../../src/db/sync-pg.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAIlF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiCxD;AAaD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAY7D;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,OAAO,CAAI;IAInB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;gBAEvD,GAAG,EAAE,MAAM;IAYvB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,KAAK;IAcb,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;IAIjD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO;IAG/C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IAGjD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAGvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IASvC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"sync-pg.d.ts","sourceRoot":"","sources":["../../src/db/sync-pg.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAIlF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiCxD;AAwBD,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAUD,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,mBAAmB,CAAW;IACtC,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,MAAM,CAAQ;gBAEV,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IAiBpD,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,OAAO;IAkDf,OAAO,CAAC,KAAK;IAGb,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;IAIjD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO;IAC/C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IACjD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IAQvC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAgC9B,KAAK,IAAI,IAAI;CACd"}
@@ -0,0 +1,10 @@
1
+ import { Database } from 'bun:sqlite';
2
+ export type ThirdPartyDatabase = Database;
3
+ /**
4
+ * Open a third-party SQLite file. Read-only first (the owning tool may hold a
5
+ * write lock); callers that need the writable retry pass `readonly: false`.
6
+ */
7
+ export declare function openThirdPartySqlite(path: string, options?: {
8
+ readonly?: boolean;
9
+ }): Database;
10
+ //# sourceMappingURL=third-party-sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"third-party-sqlite.d.ts","sourceRoot":"","sources":["../../src/db/third-party-sqlite.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAEzC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,QAAQ,CAEjG"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  export * from './types/index.js';
2
2
  export * from './lib/store/index.js';
3
+ export { ingestJournal } from './lib/ingest-journal-client.js';
4
+ export { ingestJournalOperationSchema } from './lib/ingest-journal-operation.js';
5
+ export type { IngestJournalOperation } from './lib/ingest-journal-operation.js';
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA"}