@hasna/economy 0.3.9 → 0.3.12

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 (142) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/cli/brains.d.ts +3 -0
  3. package/dist/cli/brains.d.ts.map +1 -0
  4. package/dist/cli/commands/brief.d.ts +11 -0
  5. package/dist/cli/commands/brief.d.ts.map +1 -0
  6. package/dist/cli/commands/completion.d.ts +2 -0
  7. package/dist/cli/commands/completion.d.ts.map +1 -0
  8. package/dist/cli/commands/extras.d.ts +4 -0
  9. package/dist/cli/commands/extras.d.ts.map +1 -0
  10. package/dist/cli/commands/menubar.d.ts +7 -0
  11. package/dist/cli/commands/menubar.d.ts.map +1 -0
  12. package/dist/cli/commands/notification.d.ts +8 -0
  13. package/dist/cli/commands/notification.d.ts.map +1 -0
  14. package/dist/cli/commands/todos.d.ts +29 -0
  15. package/dist/cli/commands/todos.d.ts.map +1 -0
  16. package/dist/cli/commands/tui.d.ts +26 -0
  17. package/dist/cli/commands/tui.d.ts.map +1 -0
  18. package/dist/cli/commands/watch.d.ts +10 -0
  19. package/dist/cli/commands/watch.d.ts.map +1 -0
  20. package/dist/cli/index.d.ts +3 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/index.js +12204 -0
  23. package/dist/db/cloud.d.ts +45 -0
  24. package/dist/db/cloud.d.ts.map +1 -0
  25. package/dist/db/database.d.ts +157 -0
  26. package/dist/db/database.d.ts.map +1 -0
  27. package/dist/db/dialect.d.ts +13 -0
  28. package/dist/db/dialect.d.ts.map +1 -0
  29. package/dist/db/pg-migrate.d.ts +30 -0
  30. package/dist/db/pg-migrate.d.ts.map +1 -0
  31. package/dist/db/pg-migrations.d.ts +7 -0
  32. package/dist/db/pg-migrations.d.ts.map +1 -0
  33. package/dist/db/pg-sync-worker.d.ts +2 -0
  34. package/dist/db/pg-sync-worker.d.ts.map +1 -0
  35. package/dist/db/sqlite-adapter.d.ts +36 -0
  36. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  37. package/dist/db/sync-pg.d.ts +43 -0
  38. package/dist/db/sync-pg.d.ts.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +3406 -0
  42. package/dist/ingest/billing.d.ts +27 -0
  43. package/dist/ingest/billing.d.ts.map +1 -0
  44. package/dist/ingest/claude-quota.d.ts +5 -0
  45. package/dist/ingest/claude-quota.d.ts.map +1 -0
  46. package/dist/ingest/claude.d.ts +18 -0
  47. package/dist/ingest/claude.d.ts.map +1 -0
  48. package/dist/ingest/codex-quota.d.ts +5 -0
  49. package/dist/ingest/codex-quota.d.ts.map +1 -0
  50. package/dist/ingest/codex.d.ts +8 -0
  51. package/dist/ingest/codex.d.ts.map +1 -0
  52. package/dist/ingest/cursor.d.ts +6 -0
  53. package/dist/ingest/cursor.d.ts.map +1 -0
  54. package/dist/ingest/gemini.d.ts +6 -0
  55. package/dist/ingest/gemini.d.ts.map +1 -0
  56. package/dist/ingest/hermes.d.ts +6 -0
  57. package/dist/ingest/hermes.d.ts.map +1 -0
  58. package/dist/ingest/loops.d.ts +6 -0
  59. package/dist/ingest/loops.d.ts.map +1 -0
  60. package/dist/ingest/opencode.d.ts +7 -0
  61. package/dist/ingest/opencode.d.ts.map +1 -0
  62. package/dist/ingest/otel.d.ts +33 -0
  63. package/dist/ingest/otel.d.ts.map +1 -0
  64. package/dist/ingest/pi.d.ts +7 -0
  65. package/dist/ingest/pi.d.ts.map +1 -0
  66. package/dist/ingest/plugin.d.ts +17 -0
  67. package/dist/ingest/plugin.d.ts.map +1 -0
  68. package/dist/lib/accounts.d.ts +11 -0
  69. package/dist/lib/accounts.d.ts.map +1 -0
  70. package/dist/lib/agents.d.ts +11 -0
  71. package/dist/lib/agents.d.ts.map +1 -0
  72. package/dist/lib/analytics.d.ts +68 -0
  73. package/dist/lib/analytics.d.ts.map +1 -0
  74. package/dist/lib/billing-diff.d.ts +61 -0
  75. package/dist/lib/billing-diff.d.ts.map +1 -0
  76. package/dist/lib/brief.d.ts +72 -0
  77. package/dist/lib/brief.d.ts.map +1 -0
  78. package/dist/lib/cloud-ingest.d.ts +57 -0
  79. package/dist/lib/cloud-ingest.d.ts.map +1 -0
  80. package/dist/lib/cloud-storage.d.ts +48 -0
  81. package/dist/lib/cloud-storage.d.ts.map +1 -0
  82. package/dist/lib/config.d.ts +13 -0
  83. package/dist/lib/config.d.ts.map +1 -0
  84. package/dist/lib/contracts-client/index.d.ts +3 -0
  85. package/dist/lib/contracts-client/index.d.ts.map +1 -0
  86. package/dist/lib/contracts-client/storage.d.ts +3 -0
  87. package/dist/lib/contracts-client/storage.d.ts.map +1 -0
  88. package/dist/lib/contracts-client/transport.d.ts +2 -0
  89. package/dist/lib/contracts-client/transport.d.ts.map +1 -0
  90. package/dist/lib/gatherer.d.ts +21 -0
  91. package/dist/lib/gatherer.d.ts.map +1 -0
  92. package/dist/lib/model-config.d.ts +8 -0
  93. package/dist/lib/model-config.d.ts.map +1 -0
  94. package/dist/lib/open-projects.d.ts +27 -0
  95. package/dist/lib/open-projects.d.ts.map +1 -0
  96. package/dist/lib/package-metadata.d.ts +8 -0
  97. package/dist/lib/package-metadata.d.ts.map +1 -0
  98. package/dist/lib/paths.d.ts +20 -0
  99. package/dist/lib/paths.d.ts.map +1 -0
  100. package/dist/lib/periods.d.ts +6 -0
  101. package/dist/lib/periods.d.ts.map +1 -0
  102. package/dist/lib/pricing.d.ts +13 -0
  103. package/dist/lib/pricing.d.ts.map +1 -0
  104. package/dist/lib/savings.d.ts +17 -0
  105. package/dist/lib/savings.d.ts.map +1 -0
  106. package/dist/lib/serve-auth.d.ts +4 -0
  107. package/dist/lib/serve-auth.d.ts.map +1 -0
  108. package/dist/lib/spikes.d.ts +18 -0
  109. package/dist/lib/spikes.d.ts.map +1 -0
  110. package/dist/lib/store/index.d.ts +303 -0
  111. package/dist/lib/store/index.d.ts.map +1 -0
  112. package/dist/lib/sync-all.d.ts +28 -0
  113. package/dist/lib/sync-all.d.ts.map +1 -0
  114. package/dist/lib/sync-maintenance.d.ts +15 -0
  115. package/dist/lib/sync-maintenance.d.ts.map +1 -0
  116. package/dist/lib/watch-paths.d.ts +3 -0
  117. package/dist/lib/watch-paths.d.ts.map +1 -0
  118. package/dist/lib/webhooks.d.ts +3 -0
  119. package/dist/lib/webhooks.d.ts.map +1 -0
  120. package/dist/mcp/http.d.ts +14 -0
  121. package/dist/mcp/http.d.ts.map +1 -0
  122. package/dist/mcp/index.d.ts +3 -0
  123. package/dist/mcp/index.d.ts.map +1 -0
  124. package/dist/mcp/index.js +5997 -0
  125. package/dist/mcp/server.d.ts +4 -0
  126. package/dist/mcp/server.d.ts.map +1 -0
  127. package/dist/openapi.d.ts +3 -0
  128. package/dist/openapi.d.ts.map +1 -0
  129. package/dist/otel/index.d.ts +3 -0
  130. package/dist/otel/index.d.ts.map +1 -0
  131. package/dist/otel/index.js +1464 -0
  132. package/dist/server/index.d.ts +3 -0
  133. package/dist/server/index.d.ts.map +1 -0
  134. package/dist/server/index.js +8360 -0
  135. package/dist/server/pg-sync-worker.js +31 -0
  136. package/dist/server/serve.d.ts +42 -0
  137. package/dist/server/serve.d.ts.map +1 -0
  138. package/dist/types/index.d.ts +240 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/docs/cli.md +3 -3
  141. package/docs/mcp.md +1 -1
  142. package/package.json +7 -5
@@ -0,0 +1,45 @@
1
+ import type { AuthQueryClient } from '@hasna/contracts/auth';
2
+ import type { ServerDataBackend } from '@hasna/contracts/schemas';
3
+ import pg from 'pg';
4
+ import type { DbAdapter, SqliteAdapter as Database } from './sqlite-adapter.js';
5
+ /** The environment shape the backend resolver reads. */
6
+ type Env = Record<string, string | undefined>;
7
+ /** Resolve the Postgres DSN from the standard env aliases. */
8
+ export declare function getCloudDatabaseUrl(env?: Env): string | undefined;
9
+ /**
10
+ * Resolve the server data backend from database configuration ALONE.
11
+ *
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.
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.
22
+ */
23
+ export declare function resolveEconomyServerBackend(env?: Env): ServerDataBackend;
24
+ /** True when the serve reads and writes PostgreSQL directly. */
25
+ export declare function isPostgresBackend(env?: Env): boolean;
26
+ /** HMAC signing secret for API-key verification (server-held, never in a token). */
27
+ export declare function resolveSigningSecret(): string | undefined;
28
+ /**
29
+ * Open a pooled Postgres connection to the shared RDS. Returns a value typed as
30
+ * the SQLite `Database` the query layer expects — safe because `SyncPgAdapter`
31
+ * implements the identical `DbAdapter` surface those functions rely on.
32
+ */
33
+ export declare function openCloudDatabase(dsn?: string | undefined): Database;
34
+ /** A raw pg Pool for auxiliary async work (API-key store, migrations). */
35
+ export declare function createCloudPool(dsn?: string | undefined): pg.Pool;
36
+ /**
37
+ * Adapt a pg Pool to the `@hasna/contracts/auth` `AuthQueryClient` surface
38
+ * (many/get/execute). This backs the `ApiKeyStore` without pulling in the
39
+ * generic vendored kit — economy's storage is this pg pool.
40
+ */
41
+ export declare function authClientFromPool(pool: pg.Pool): AuthQueryClient;
42
+ /** Ordered PG migrations applied by the migration runner (index = version). */
43
+ export declare function cloudMigrations(): string[];
44
+ export type { DbAdapter };
45
+ //# sourceMappingURL=cloud.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,157 @@
1
+ import { SqliteAdapter as Database } from './sqlite-adapter.js';
2
+ import type { EconomyRequest, EconomySession, EconomyProject, CostCenter, CostCenterBreakdown, CostCenterKind, Budget, BudgetStatus, CostSummary, ZeroCostModelBreakdown, ModelBreakdown, ProjectBreakdown, AgentBreakdown, AccountBreakdown, Period, Agent, SessionFilter } from '../types/index.js';
3
+ export declare function getMachineId(): string;
4
+ export declare function getDataDir(): string;
5
+ export declare function getDbPath(): string;
6
+ export declare function openDatabase(dbPath?: string, skipSeed?: boolean): Database;
7
+ export declare function upsertCostCenter(db: Database, center: CostCenter): void;
8
+ export declare function getCostCenter(db: Database, id: string): CostCenter | null;
9
+ export declare function upsertRequest(db: Database, req: EconomyRequest): void;
10
+ export declare function upsertSession(db: Database, session: EconomySession): void;
11
+ export declare function rollupSession(db: Database, sessionId: string): void;
12
+ export declare function querySessions(db: Database, filter?: SessionFilter): EconomySession[];
13
+ export declare function queryTopSessions(db: Database, n?: number, agent?: string, since?: string): EconomySession[];
14
+ export declare function querySummary(db: Database, period: Period, machine?: string, allMachines?: boolean, agent?: Agent): CostSummary;
15
+ export declare function queryZeroCostTokenizedModels(db: Database, limit?: number): ZeroCostModelBreakdown[];
16
+ export declare function queryModelBreakdown(db: Database): ModelBreakdown[];
17
+ export declare function queryAgentBreakdown(db: Database, period?: Period, machine?: string): AgentBreakdown[];
18
+ export declare function queryProjectBreakdown(db: Database, period?: Period, machine?: string): ProjectBreakdown[];
19
+ export declare function queryAccountBreakdown(db: Database, period?: Period, machine?: string): AccountBreakdown[];
20
+ export declare function queryCostCenterBreakdown(db: Database, period?: Period, filter?: {
21
+ kind?: CostCenterKind;
22
+ machine?: string;
23
+ since?: string;
24
+ }): CostCenterBreakdown[];
25
+ export declare function queryProjectBreakdownSince(db: Database, since: string, machine?: string): ProjectBreakdown[];
26
+ export declare function queryAgentBreakdownSince(db: Database, since: string): AgentBreakdown[];
27
+ export declare function queryModelBreakdownSince(db: Database, since: string): ModelBreakdown[];
28
+ export declare function queryAccountBreakdownSince(db: Database, since: string): AccountBreakdown[];
29
+ export declare function queryDailyBreakdown(db: Database, days?: number, machine?: string): Array<{
30
+ date: string;
31
+ cost_usd: number;
32
+ agent: string;
33
+ }>;
34
+ export declare function queryHourlyBreakdown(db: Database, machine?: string, hours?: number): Array<{
35
+ hour: string;
36
+ cost_usd: number;
37
+ agent: string;
38
+ }>;
39
+ export declare function upsertProject(db: Database, project: EconomyProject): void;
40
+ export declare function getProject(db: Database, path: string): EconomyProject | null;
41
+ export declare function listProjects(db: Database): EconomyProject[];
42
+ export declare function deleteProject(db: Database, path: string): void;
43
+ export declare function upsertBudget(db: Database, budget: Budget): void;
44
+ export declare function listBudgets(db: Database): Budget[];
45
+ export declare function deleteBudget(db: Database, id: string): void;
46
+ export declare function getBudgetStatuses(db: Database): BudgetStatus[];
47
+ export interface Goal {
48
+ id: string;
49
+ period: 'day' | 'week' | 'month' | 'year';
50
+ project_path: string | null;
51
+ agent: string | null;
52
+ limit_usd: number;
53
+ created_at: string;
54
+ updated_at: string;
55
+ }
56
+ export interface GoalStatus extends Goal {
57
+ current_spend_usd: number;
58
+ percent_used: number;
59
+ is_on_track: boolean;
60
+ is_at_risk: boolean;
61
+ is_over: boolean;
62
+ }
63
+ export declare function upsertGoal(db: Database, goal: Goal): void;
64
+ export declare function deleteGoal(db: Database, id: string): void;
65
+ export declare function listGoals(db: Database): Goal[];
66
+ export declare function getGoalStatuses(db: Database): GoalStatus[];
67
+ export declare function getIngestState(db: Database, source: string, key: string): string | null;
68
+ export declare function setIngestState(db: Database, source: string, key: string, value: string): void;
69
+ export declare function queryRequestsSince(db: Database, since: string): EconomyRequest[];
70
+ export interface FeedbackRecord {
71
+ message: string;
72
+ email?: string | null;
73
+ category?: string | null;
74
+ version?: string | null;
75
+ machine_id?: string | null;
76
+ }
77
+ /** Persist a feedback row. Used by both the LocalStore and the serve endpoint. */
78
+ export declare function insertFeedback(db: Database, record: FeedbackRecord): void;
79
+ export interface BillingDaily {
80
+ date: string;
81
+ provider: 'anthropic' | 'openai' | string;
82
+ description: string;
83
+ cost_usd: number;
84
+ updated_at: string;
85
+ }
86
+ export declare function upsertBillingDaily(db: Database, row: BillingDaily): void;
87
+ export declare function clearBillingRange(db: Database, provider: string, fromDate: string, toDate: string): void;
88
+ export declare function queryBillingSummary(db: Database, period: Period): {
89
+ total_usd: number;
90
+ by_provider: Record<string, number>;
91
+ };
92
+ /**
93
+ * How many provider billing rows exist for a period. A $0.00 actual total is
94
+ * ambiguous on its own — it is produced both by "billing agrees with telemetry
95
+ * at zero" and by "billing was never imported" — and only this count separates
96
+ * them.
97
+ */
98
+ export declare function countBillingRecords(db: Database, period: Period): number;
99
+ export interface SessionDetail {
100
+ session: Record<string, unknown>;
101
+ requests: Array<Record<string, unknown>>;
102
+ }
103
+ /**
104
+ * Fetch a single session (by exact id or id-prefix) plus its per-request rows,
105
+ * ordered oldest-first. Returns null when no session matches. Backs the CLI
106
+ * `session <id>` command and the MCP `get_session_detail` tool via the Store.
107
+ */
108
+ export declare function getSessionDetail(db: Database, id: string): SessionDetail | null;
109
+ export interface MachineInfo {
110
+ machine_id: string;
111
+ sessions: number;
112
+ requests: number;
113
+ total_cost_usd: number;
114
+ last_active: string;
115
+ }
116
+ export declare function listMachines(db: Database, period?: Period): MachineInfo[];
117
+ export interface DbModelPricing {
118
+ model: string;
119
+ input_per_1m: number;
120
+ output_per_1m: number;
121
+ cache_read_per_1m: number;
122
+ cache_write_per_1m: number;
123
+ cache_write_1h_per_1m?: number;
124
+ cache_storage_per_1m_hour?: number;
125
+ updated_at: string;
126
+ }
127
+ export declare function upsertModelPricing(db: Database, p: DbModelPricing): void;
128
+ export declare function getModelPricing(db: Database, model: string): DbModelPricing | null;
129
+ export declare function listModelPricing(db: Database): DbModelPricing[];
130
+ export declare function deleteModelPricing(db: Database, model: string): void;
131
+ export declare function seedModelPricing(db: Database, defaults: Record<string, {
132
+ inputPer1M: number;
133
+ outputPer1M: number;
134
+ cacheReadPer1M: number;
135
+ cacheWritePer1M: number;
136
+ cacheWrite1hPer1M?: number;
137
+ cacheStoragePer1MHour?: number;
138
+ }>): void;
139
+ export declare function upsertSubscription(db: Database, sub: import('../types/index.js').Subscription): void;
140
+ export declare function listSubscriptions(db: Database): import('../types/index.js').Subscription[];
141
+ export declare function deleteSubscription(db: Database, id: string): void;
142
+ export declare function upsertUsageSnapshot(db: Database, snap: Omit<import('../types/index.js').UsageSnapshot, 'id' | 'updated_at'> & {
143
+ id?: string;
144
+ updated_at?: string;
145
+ }): void;
146
+ export declare function queryUsageSnapshots(db: Database, opts?: {
147
+ agent?: string;
148
+ date?: string;
149
+ since?: string;
150
+ }): import('../types/index.js').UsageSnapshot[];
151
+ export declare function listMachineRegistry(db: Database): import('../types/index.js').MachineRegistry[];
152
+ export declare function dedupeRequests(db: Database): number;
153
+ export declare function bulkIngest(db: Database, body: Record<string, unknown>): {
154
+ ingested: Record<string, number>;
155
+ total: number;
156
+ };
157
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type Dialect = 'sqlite' | 'pg';
2
+ /**
3
+ * Translate SQLite-flavored SQL to PostgreSQL.
4
+ * When `dialect` is "sqlite", returns the SQL unchanged.
5
+ */
6
+ export declare function translateSql(sql: string, dialect: Dialect): string;
7
+ /**
8
+ * Flatten params for PG — bun:sqlite accepts either variadic params or a single
9
+ * array; pg always wants a flat array. Also maps `undefined` -> `null`, which pg
10
+ * would otherwise reject.
11
+ */
12
+ export declare function translateParams(params: any[]): any[];
13
+ //# sourceMappingURL=dialect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/db/dialect.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAA;AAErC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAGlE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAGpD"}
@@ -0,0 +1,30 @@
1
+ export interface PgMigrationResult {
2
+ service: string;
3
+ applied: number[];
4
+ alreadyApplied: number[];
5
+ errors: string[];
6
+ totalMigrations: number;
7
+ }
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;
17
+ /**
18
+ * Apply an ordered array of SQL migrations to a PostgreSQL database.
19
+ *
20
+ * The statements are executed verbatim: `PG_MIGRATIONS` is already Postgres DDL,
21
+ * so it is NOT passed through the SQLite->PG translator in `dialect.ts` (doing so
22
+ * would be a no-op today — `pg-migrations.test.ts` asserts that — and simply
23
+ * wrong for any future Postgres-native statement).
24
+ *
25
+ * @param connectionString - PG connection string (postgres://...)
26
+ * @param migrations - Ordered array of SQL strings. Index = version number.
27
+ * @param service - Service name for result reporting.
28
+ */
29
+ export declare function applyPgMigrations(connectionString: string, migrations: string[], service?: string): Promise<PgMigrationResult>;
30
+ //# sourceMappingURL=pg-migrate.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * PostgreSQL migrations for economy cloud sync.
3
+ *
4
+ * Equivalent to the SQLite schema in database.ts, translated for PostgreSQL.
5
+ */
6
+ export declare const PG_MIGRATIONS: string[];
7
+ //# sourceMappingURL=pg-migrations.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pg-sync-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-sync-worker.d.ts","sourceRoot":"","sources":["../../src/db/pg-sync-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { Database } from 'bun:sqlite';
2
+ export interface RunResult {
3
+ changes: number;
4
+ lastInsertRowid: number | bigint;
5
+ }
6
+ export interface PreparedStatement {
7
+ run(...params: any[]): RunResult;
8
+ get(...params: any[]): any;
9
+ all(...params: any[]): any[];
10
+ finalize(): void;
11
+ }
12
+ export interface DbAdapter {
13
+ run(sql: string, ...params: any[]): RunResult;
14
+ get(sql: string, ...params: any[]): any;
15
+ all(sql: string, ...params: any[]): any[];
16
+ exec(sql: string): void;
17
+ prepare(sql: string): PreparedStatement;
18
+ close(): void;
19
+ transaction<T>(fn: () => T): T;
20
+ }
21
+ export declare class SqliteAdapter implements DbAdapter {
22
+ private db;
23
+ constructor(path: string);
24
+ run(sql: string, ...params: any[]): RunResult;
25
+ get(sql: string, ...params: any[]): any;
26
+ all(sql: string, ...params: any[]): any[];
27
+ exec(sql: string): void;
28
+ /** Passthrough to bun:sqlite's `.query()` for callers that use `db.query()`. */
29
+ query(sql: string): import("bun:sqlite").Statement<unknown, import("bun:sqlite").SQLQueryBindings[] | [null] | [string] | [number] | [bigint] | [false] | [true] | [Uint8Array<ArrayBufferLike>] | [Uint8ClampedArray<ArrayBufferLike>] | [Uint16Array<ArrayBufferLike>] | [Uint32Array<ArrayBufferLike>] | [Int8Array<ArrayBufferLike>] | [Int16Array<ArrayBufferLike>] | [Int32Array<ArrayBufferLike>] | [BigUint64Array<ArrayBufferLike>] | [BigInt64Array<ArrayBufferLike>] | [Float16Array<ArrayBufferLike>] | [Float32Array<ArrayBufferLike>] | [Float64Array<ArrayBufferLike>] | [Record<string, string | number | bigint | boolean | NodeJS.TypedArray<ArrayBufferLike> | null>]>;
30
+ prepare(sql: string): PreparedStatement;
31
+ close(): void;
32
+ transaction<T>(fn: () => T): T;
33
+ /** Expose the underlying bun:sqlite Database for advanced usage. */
34
+ get raw(): Database;
35
+ }
36
+ //# sourceMappingURL=sqlite-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/db/sqlite-adapter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,GAAG,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IAChC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;IAC1B,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IAC5B,QAAQ,IAAI,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;IACvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;IACvC,KAAK,IAAI,IAAI,CAAA;IACb,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;CAC/B;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,EAAE,CAAU;gBAER,IAAI,EAAE,MAAM;IAWxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS;IAK7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG;IAIvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE;IAIzC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,gFAAgF;IAChF,KAAK,CAAC,GAAG,EAAE,MAAM;IAIjB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IAmBvC,KAAK,IAAI,IAAI;IAIb,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B,oEAAoE;IACpE,IAAI,GAAG,IAAI,QAAQ,CAElB;CACF"}
@@ -0,0 +1,43 @@
1
+ import type { DbAdapter, PreparedStatement, RunResult } from './sqlite-adapter.js';
2
+ /**
3
+ * Translate the closed set of SQLite date/time idioms the economy query layer
4
+ * uses into Postgres equivalents. Runs AFTER `translateSql` (so `?` are already
5
+ * `$n`). Timestamp columns are stored as ISO-8601 TEXT in both dialects, so bare
6
+ * `DATE(col)` casts through `timestamptz`. Ordered most-specific first.
7
+ */
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;
17
+ export declare class SyncPgAdapter implements DbAdapter {
18
+ private readonly worker;
19
+ private readonly port;
20
+ private counter;
21
+ 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;
34
+ private query;
35
+ run(sql: string, ...params: unknown[]): RunResult;
36
+ get(sql: string, ...params: unknown[]): unknown;
37
+ all(sql: string, ...params: unknown[]): unknown[];
38
+ exec(sql: string): void;
39
+ prepare(sql: string): PreparedStatement;
40
+ transaction<T>(fn: () => T): T;
41
+ close(): void;
42
+ }
43
+ //# sourceMappingURL=sync-pg.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ export * from './types/index.js';
2
+ export * from './lib/store/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA"}