@intelligo-dev/core 1.0.0-beta.1 → 1.0.0-beta.13

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 (355) hide show
  1. package/NOTICE +6 -0
  2. package/README.md +102 -0
  3. package/dist/attachments/errors.d.ts +7 -0
  4. package/dist/attachments/errors.d.ts.map +1 -0
  5. package/dist/attachments/errors.js +11 -0
  6. package/dist/attachments/errors.js.map +1 -0
  7. package/dist/attachments/index.d.ts +8 -0
  8. package/dist/attachments/index.d.ts.map +1 -0
  9. package/dist/attachments/index.js +7 -0
  10. package/dist/attachments/index.js.map +1 -0
  11. package/dist/attachments/service.d.ts +45 -0
  12. package/dist/attachments/service.d.ts.map +1 -0
  13. package/dist/attachments/service.js +100 -0
  14. package/dist/attachments/service.js.map +1 -0
  15. package/dist/attachments/types.d.ts +6 -0
  16. package/dist/attachments/types.d.ts.map +1 -0
  17. package/dist/attachments/types.js +2 -0
  18. package/dist/attachments/types.js.map +1 -0
  19. package/dist/conversations/errors.d.ts +2 -8
  20. package/dist/conversations/errors.d.ts.map +1 -1
  21. package/dist/conversations/errors.js +2 -8
  22. package/dist/conversations/errors.js.map +1 -1
  23. package/dist/conversations/index.d.ts +4 -12
  24. package/dist/conversations/index.d.ts.map +1 -1
  25. package/dist/conversations/index.js +2 -11
  26. package/dist/conversations/index.js.map +1 -1
  27. package/dist/conversations/service.d.ts +49 -61
  28. package/dist/conversations/service.d.ts.map +1 -1
  29. package/dist/conversations/service.js +110 -83
  30. package/dist/conversations/service.js.map +1 -1
  31. package/dist/conversations/types.d.ts +1 -4
  32. package/dist/conversations/types.d.ts.map +1 -1
  33. package/dist/conversations/types.js +0 -3
  34. package/dist/conversations/types.js.map +1 -1
  35. package/dist/db/client.d.ts +21 -10
  36. package/dist/db/client.d.ts.map +1 -1
  37. package/dist/db/client.js +43 -18
  38. package/dist/db/client.js.map +1 -1
  39. package/dist/db/index.d.ts +3 -3
  40. package/dist/db/index.d.ts.map +1 -1
  41. package/dist/db/index.js +3 -7
  42. package/dist/db/index.js.map +1 -1
  43. package/dist/db/schema/agents.d.ts +14 -51
  44. package/dist/db/schema/agents.d.ts.map +1 -1
  45. package/dist/db/schema/agents.js +9 -21
  46. package/dist/db/schema/agents.js.map +1 -1
  47. package/dist/db/schema/ai.d.ts +86 -1556
  48. package/dist/db/schema/ai.d.ts.map +1 -1
  49. package/dist/db/schema/ai.js +32 -236
  50. package/dist/db/schema/ai.js.map +1 -1
  51. package/dist/db/schema/auth.d.ts +5 -34
  52. package/dist/db/schema/auth.d.ts.map +1 -1
  53. package/dist/db/schema/auth.js +25 -56
  54. package/dist/db/schema/auth.js.map +1 -1
  55. package/dist/db/schema/billing.d.ts +136 -107
  56. package/dist/db/schema/billing.d.ts.map +1 -1
  57. package/dist/db/schema/billing.js +72 -60
  58. package/dist/db/schema/billing.js.map +1 -1
  59. package/dist/db/schema/feature-flags.d.ts +3 -12
  60. package/dist/db/schema/feature-flags.d.ts.map +1 -1
  61. package/dist/db/schema/feature-flags.js +3 -12
  62. package/dist/db/schema/feature-flags.js.map +1 -1
  63. package/dist/db/schema/identity.d.ts +12 -274
  64. package/dist/db/schema/identity.d.ts.map +1 -1
  65. package/dist/db/schema/identity.js +19 -104
  66. package/dist/db/schema/identity.js.map +1 -1
  67. package/dist/db/schema/index.d.ts +8 -15
  68. package/dist/db/schema/index.d.ts.map +1 -1
  69. package/dist/db/schema/index.js +12 -42
  70. package/dist/db/schema/index.js.map +1 -1
  71. package/dist/db/schema/notifications.d.ts +3 -17
  72. package/dist/db/schema/notifications.d.ts.map +1 -1
  73. package/dist/db/schema/notifications.js +3 -17
  74. package/dist/db/schema/notifications.js.map +1 -1
  75. package/dist/db/schema/usage.d.ts +94 -77
  76. package/dist/db/schema/usage.d.ts.map +1 -1
  77. package/dist/db/schema/usage.js +59 -89
  78. package/dist/db/schema/usage.js.map +1 -1
  79. package/dist/db/validate.d.ts +2 -11
  80. package/dist/db/validate.d.ts.map +1 -1
  81. package/dist/db/validate.js +6 -17
  82. package/dist/db/validate.js.map +1 -1
  83. package/dist/db/workspace-queries.d.ts +5 -29
  84. package/dist/db/workspace-queries.d.ts.map +1 -1
  85. package/dist/db/workspace-queries.js +5 -29
  86. package/dist/db/workspace-queries.js.map +1 -1
  87. package/dist/documents/classifier.d.ts +5 -12
  88. package/dist/documents/classifier.d.ts.map +1 -1
  89. package/dist/documents/classifier.js +16 -16
  90. package/dist/documents/classifier.js.map +1 -1
  91. package/dist/documents/errors.d.ts +2 -10
  92. package/dist/documents/errors.d.ts.map +1 -1
  93. package/dist/documents/errors.js +2 -10
  94. package/dist/documents/errors.js.map +1 -1
  95. package/dist/documents/index.d.ts +4 -13
  96. package/dist/documents/index.d.ts.map +1 -1
  97. package/dist/documents/index.js +3 -12
  98. package/dist/documents/index.js.map +1 -1
  99. package/dist/documents/service.d.ts +19 -26
  100. package/dist/documents/service.d.ts.map +1 -1
  101. package/dist/documents/service.js +44 -38
  102. package/dist/documents/service.js.map +1 -1
  103. package/dist/documents/types.d.ts +6 -10
  104. package/dist/documents/types.d.ts.map +1 -1
  105. package/dist/documents/types.js +0 -3
  106. package/dist/documents/types.js.map +1 -1
  107. package/dist/email/brand.d.ts +17 -0
  108. package/dist/email/brand.d.ts.map +1 -0
  109. package/dist/email/brand.js +9 -0
  110. package/dist/email/brand.js.map +1 -0
  111. package/dist/email/index.d.ts +4 -4
  112. package/dist/email/index.js +4 -4
  113. package/dist/email/provider.d.ts +1 -7
  114. package/dist/email/provider.d.ts.map +1 -1
  115. package/dist/email/provider.js +10 -19
  116. package/dist/email/provider.js.map +1 -1
  117. package/dist/email/send.d.ts +12 -12
  118. package/dist/email/send.d.ts.map +1 -1
  119. package/dist/email/send.js +5 -19
  120. package/dist/email/send.js.map +1 -1
  121. package/dist/email/senders.d.ts +17 -30
  122. package/dist/email/senders.d.ts.map +1 -1
  123. package/dist/email/senders.js +33 -47
  124. package/dist/email/senders.js.map +1 -1
  125. package/dist/email/templates/base-layout.d.ts +1 -1
  126. package/dist/email/templates/base-layout.d.ts.map +1 -1
  127. package/dist/email/templates/base-layout.js +4 -6
  128. package/dist/email/templates/base-layout.js.map +1 -1
  129. package/dist/email/templates/index.d.ts +10 -10
  130. package/dist/email/templates/index.d.ts.map +1 -1
  131. package/dist/email/templates/index.js +10 -16
  132. package/dist/email/templates/index.js.map +1 -1
  133. package/dist/email/templates/password-reset.d.ts +2 -2
  134. package/dist/email/templates/password-reset.d.ts.map +1 -1
  135. package/dist/email/templates/password-reset.js +10 -22
  136. package/dist/email/templates/password-reset.js.map +1 -1
  137. package/dist/email/templates/payment-failed.d.ts +2 -2
  138. package/dist/email/templates/payment-failed.d.ts.map +1 -1
  139. package/dist/email/templates/payment-failed.js +11 -24
  140. package/dist/email/templates/payment-failed.js.map +1 -1
  141. package/dist/email/templates/quota-warning.d.ts +4 -4
  142. package/dist/email/templates/quota-warning.d.ts.map +1 -1
  143. package/dist/email/templates/quota-warning.js +19 -39
  144. package/dist/email/templates/quota-warning.js.map +1 -1
  145. package/dist/email/templates/subscription-confirmed.d.ts +2 -2
  146. package/dist/email/templates/subscription-confirmed.d.ts.map +1 -1
  147. package/dist/email/templates/subscription-confirmed.js +13 -28
  148. package/dist/email/templates/subscription-confirmed.js.map +1 -1
  149. package/dist/email/templates/trial-expiry.d.ts +2 -2
  150. package/dist/email/templates/trial-expiry.d.ts.map +1 -1
  151. package/dist/email/templates/trial-expiry.js +12 -36
  152. package/dist/email/templates/trial-expiry.js.map +1 -1
  153. package/dist/email/templates/trial-warning.d.ts +2 -2
  154. package/dist/email/templates/trial-warning.d.ts.map +1 -1
  155. package/dist/email/templates/trial-warning.js +15 -32
  156. package/dist/email/templates/trial-warning.js.map +1 -1
  157. package/dist/email/templates/verify-email.d.ts +2 -2
  158. package/dist/email/templates/verify-email.d.ts.map +1 -1
  159. package/dist/email/templates/verify-email.js +10 -22
  160. package/dist/email/templates/verify-email.js.map +1 -1
  161. package/dist/email/templates/welcome.d.ts +2 -2
  162. package/dist/email/templates/welcome.d.ts.map +1 -1
  163. package/dist/email/templates/welcome.js +13 -20
  164. package/dist/email/templates/welcome.js.map +1 -1
  165. package/dist/email/templates/workspace-invitation.d.ts +2 -2
  166. package/dist/email/templates/workspace-invitation.d.ts.map +1 -1
  167. package/dist/email/templates/workspace-invitation.js +12 -26
  168. package/dist/email/templates/workspace-invitation.js.map +1 -1
  169. package/dist/env.d.ts +5 -10
  170. package/dist/env.d.ts.map +1 -1
  171. package/dist/env.js +41 -31
  172. package/dist/env.js.map +1 -1
  173. package/dist/identity/audit.d.ts +11 -24
  174. package/dist/identity/audit.d.ts.map +1 -1
  175. package/dist/identity/audit.js +13 -27
  176. package/dist/identity/audit.js.map +1 -1
  177. package/dist/identity/errors.d.ts +4 -12
  178. package/dist/identity/errors.d.ts.map +1 -1
  179. package/dist/identity/errors.js +2 -8
  180. package/dist/identity/errors.js.map +1 -1
  181. package/dist/identity/index.d.ts +5 -13
  182. package/dist/identity/index.d.ts.map +1 -1
  183. package/dist/identity/index.js +4 -12
  184. package/dist/identity/index.js.map +1 -1
  185. package/dist/identity/service.d.ts +13 -47
  186. package/dist/identity/service.d.ts.map +1 -1
  187. package/dist/identity/service.js +31 -78
  188. package/dist/identity/service.js.map +1 -1
  189. package/dist/identity/types.d.ts +1 -4
  190. package/dist/identity/types.d.ts.map +1 -1
  191. package/dist/identity/types.js +0 -3
  192. package/dist/identity/types.js.map +1 -1
  193. package/dist/index.d.ts +1 -2
  194. package/dist/index.d.ts.map +1 -1
  195. package/dist/index.js +3 -10
  196. package/dist/index.js.map +1 -1
  197. package/dist/logger.d.ts +7 -18
  198. package/dist/logger.d.ts.map +1 -1
  199. package/dist/logger.js +45 -49
  200. package/dist/logger.js.map +1 -1
  201. package/dist/money.d.ts +95 -0
  202. package/dist/money.d.ts.map +1 -0
  203. package/dist/money.js +208 -0
  204. package/dist/money.js.map +1 -0
  205. package/dist/notifications/index.d.ts +9 -43
  206. package/dist/notifications/index.d.ts.map +1 -1
  207. package/dist/notifications/index.js +9 -49
  208. package/dist/notifications/index.js.map +1 -1
  209. package/dist/notifications/triggers.d.ts +9 -32
  210. package/dist/notifications/triggers.d.ts.map +1 -1
  211. package/dist/notifications/triggers.js +21 -58
  212. package/dist/notifications/triggers.js.map +1 -1
  213. package/dist/notifications/types.d.ts +1 -10
  214. package/dist/notifications/types.d.ts.map +1 -1
  215. package/dist/notifications/types.js +0 -9
  216. package/dist/notifications/types.js.map +1 -1
  217. package/dist/prompt.d.ts +38 -0
  218. package/dist/prompt.d.ts.map +1 -0
  219. package/dist/prompt.js +118 -0
  220. package/dist/prompt.js.map +1 -0
  221. package/dist/registry.d.ts +32 -0
  222. package/dist/registry.d.ts.map +1 -0
  223. package/dist/registry.js +60 -0
  224. package/dist/registry.js.map +1 -0
  225. package/dist/request-context.d.ts +49 -0
  226. package/dist/request-context.d.ts.map +1 -0
  227. package/dist/request-context.js +100 -0
  228. package/dist/request-context.js.map +1 -0
  229. package/dist/storage/index.d.ts +65 -0
  230. package/dist/storage/index.d.ts.map +1 -0
  231. package/dist/storage/index.js +109 -0
  232. package/dist/storage/index.js.map +1 -0
  233. package/package.json +74 -24
  234. package/src/attachments/errors.ts +18 -0
  235. package/src/attachments/index.ts +22 -0
  236. package/src/attachments/service.ts +178 -0
  237. package/src/attachments/types.ts +6 -0
  238. package/src/conversations/errors.ts +45 -0
  239. package/src/conversations/index.ts +39 -0
  240. package/src/conversations/service.ts +594 -0
  241. package/src/conversations/types.ts +15 -0
  242. package/src/db/client.ts +91 -0
  243. package/src/db/index.ts +3 -0
  244. package/src/db/migrations/0000_baseline.sql +652 -0
  245. package/src/db/migrations/0001_reconcile_chain_built_databases.sql +53 -0
  246. package/src/db/migrations/0002_webhook_claim_lease.sql +1 -0
  247. package/src/db/migrations/README.md +74 -36
  248. package/src/db/migrations/legacy-chain.json +197 -0
  249. package/src/db/migrations/meta/0000_snapshot.json +4182 -157
  250. package/src/db/migrations/meta/0002_snapshot.json +2478 -368
  251. package/src/db/migrations/meta/_journal.json +6 -279
  252. package/src/db/schema/agents.ts +57 -0
  253. package/src/db/schema/ai.ts +174 -0
  254. package/src/db/schema/auth.ts +183 -0
  255. package/src/db/schema/billing.ts +209 -0
  256. package/src/db/schema/feature-flags.ts +20 -0
  257. package/src/db/schema/identity.ts +250 -0
  258. package/src/db/schema/index.ts +12 -0
  259. package/src/db/schema/notifications.ts +31 -0
  260. package/src/db/schema/usage.ts +269 -0
  261. package/src/db/validate.ts +63 -0
  262. package/src/db/workspace-queries.ts +64 -0
  263. package/src/documents/classifier.ts +61 -0
  264. package/src/documents/errors.ts +44 -0
  265. package/src/documents/index.ts +24 -0
  266. package/src/documents/service.ts +256 -0
  267. package/src/documents/types.ts +24 -0
  268. package/src/email/brand.ts +24 -0
  269. package/src/email/index.ts +19 -0
  270. package/src/email/provider.ts +278 -0
  271. package/src/email/send.ts +169 -0
  272. package/src/email/senders.ts +292 -0
  273. package/src/email/templates/base-layout.tsx +145 -0
  274. package/src/email/templates/index.ts +28 -0
  275. package/src/email/templates/password-reset.tsx +72 -0
  276. package/src/email/templates/payment-failed.tsx +77 -0
  277. package/src/email/templates/quota-warning.tsx +118 -0
  278. package/src/email/templates/subscription-confirmed.tsx +91 -0
  279. package/src/email/templates/trial-expiry.tsx +124 -0
  280. package/src/email/templates/trial-warning.tsx +104 -0
  281. package/src/email/templates/verify-email.tsx +72 -0
  282. package/src/email/templates/welcome.tsx +64 -0
  283. package/src/email/templates/workspace-invitation.tsx +105 -0
  284. package/src/env.ts +180 -0
  285. package/src/identity/audit.ts +65 -0
  286. package/src/identity/errors.ts +44 -0
  287. package/src/identity/index.ts +26 -0
  288. package/src/identity/service.ts +202 -0
  289. package/src/identity/types.ts +28 -0
  290. package/src/index.ts +4 -0
  291. package/src/logger.ts +198 -0
  292. package/src/money.ts +270 -0
  293. package/src/notifications/index.ts +108 -0
  294. package/src/notifications/triggers.ts +158 -0
  295. package/src/notifications/types.ts +18 -0
  296. package/src/prompt.ts +142 -0
  297. package/src/registry.ts +75 -0
  298. package/src/request-context.ts +137 -0
  299. package/src/storage/index.ts +153 -0
  300. package/dist/db/schema/rag.d.ts +0 -171
  301. package/dist/db/schema/rag.d.ts.map +0 -1
  302. package/dist/db/schema/rag.js +0 -42
  303. package/dist/db/schema/rag.js.map +0 -1
  304. package/src/db/migrations/0000_sharp_night_nurse.sql +0 -52
  305. package/src/db/migrations/0001_hesitant_vapor.sql +0 -40
  306. package/src/db/migrations/0002_numerous_lady_vermin.sql +0 -235
  307. package/src/db/migrations/0003_mighty_jean_grey.sql +0 -37
  308. package/src/db/migrations/0004_cynical_grandmaster.sql +0 -2
  309. package/src/db/migrations/0005_careful_switch.sql +0 -8
  310. package/src/db/migrations/0006_tense_blue_marvel.sql +0 -16
  311. package/src/db/migrations/0007_next_squadron_sinister.sql +0 -1
  312. package/src/db/migrations/0008_powerful_scream.sql +0 -39
  313. package/src/db/migrations/0009_sad_ink.sql +0 -1
  314. package/src/db/migrations/0010_shocking_omega_flight.sql +0 -2
  315. package/src/db/migrations/0011_ambiguous_otto_octavius.sql +0 -151
  316. package/src/db/migrations/0011_hnsw_vector_index.sql +0 -17
  317. package/src/db/migrations/0012_user_profiles.sql +0 -30
  318. package/src/db/migrations/0013_trending_seasonal_columns.sql +0 -9
  319. package/src/db/migrations/0014_add_product_type_to_agents.sql +0 -6
  320. package/src/db/migrations/0015_new_v1_tables.sql +0 -149
  321. package/src/db/migrations/0016_document_types.sql +0 -30
  322. package/src/db/migrations/0017_document_metadata.sql +0 -2
  323. package/src/db/migrations/0018_identity_graph.sql +0 -200
  324. package/src/db/migrations/0019_db_driven_prompts.sql +0 -20
  325. package/src/db/migrations/0020_pending_extractions.sql +0 -35
  326. package/src/db/migrations/0021_rag_documents.sql +0 -39
  327. package/src/db/migrations/0022_user_quotas_usage_jsonb.sql +0 -70
  328. package/src/db/migrations/0023_user_facts_user_scoped_unique.sql +0 -17
  329. package/src/db/migrations/0024_user_memories_hnsw.sql +0 -23
  330. package/src/db/migrations/0025_audit_trigger_errcode.sql +0 -21
  331. package/src/db/migrations/0026_user_profile_snapshots_composite_pk.sql +0 -17
  332. package/src/db/migrations/0027_billing_settings_mnt_columns.sql +0 -54
  333. package/src/db/migrations/0028_trial_credits_normalized_email.sql +0 -37
  334. package/src/db/migrations/0029_usage_records_conversation_idx.sql +0 -13
  335. package/src/db/migrations/0030_pending_extractions_composite_idx.sql +0 -11
  336. package/src/db/migrations/0031_rag_documents_hnsw.sql +0 -16
  337. package/src/db/migrations/0032_rate_limit_unique_idx.sql +0 -16
  338. package/src/db/migrations/0033_pending_extractions_partial_idx.sql +0 -18
  339. package/src/db/migrations/0034_rate_limit_count.sql +0 -9
  340. package/src/db/migrations/0035_credit_reservations.sql +0 -24
  341. package/src/db/migrations/0036_executions_audit_jobs.sql +0 -96
  342. package/src/db/migrations/0037_rate_limit_minute_bucket.sql +0 -46
  343. package/src/db/migrations/0038_user_quotas_generic_usage.sql +0 -25
  344. package/src/db/migrations/0039_platform_admin_impersonation.sql +0 -27
  345. package/src/db/migrations/0040_ee_audit_chain.sql +0 -23
  346. package/src/db/migrations/meta/0001_snapshot.json +0 -631
  347. package/src/db/migrations/meta/0003_snapshot.json +0 -2488
  348. package/src/db/migrations/meta/0004_snapshot.json +0 -2500
  349. package/src/db/migrations/meta/0005_snapshot.json +0 -2548
  350. package/src/db/migrations/meta/0006_snapshot.json +0 -2650
  351. package/src/db/migrations/meta/0007_snapshot.json +0 -2657
  352. package/src/db/migrations/meta/0008_snapshot.json +0 -2719
  353. package/src/db/migrations/meta/0009_snapshot.json +0 -2726
  354. package/src/db/migrations/meta/0010_snapshot.json +0 -2739
  355. package/src/db/migrations/meta/0011_snapshot.json +0 -3886
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/db/schema/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/db/schema/auth.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,11 @@
1
1
  /**
2
- * Billing Database Schema
3
- *
4
- * Tables for managing subscriptions, plans, credits, and finance events.
5
- * Used by Stripe integration for subscription and credit-based billing.
6
- *
7
- * Pattern: snake_case columns in PostgreSQL, camelCase TypeScript API (via Drizzle mapping)
2
+ * Plans, subscriptions, credit ledgers, purchases and Stripe events.
3
+ * Amounts in the credit ledgers are micros of their currency.
8
4
  */
9
5
  /**
10
- * Plans table - DB-configured pricing plans per product
11
- * Allows dynamic plan changes without code deployment
6
+ * The registered plan catalogue, copied into rows so a subscription can
7
+ * reference its plan. The catalogue is the source: the rows are written
8
+ * from it at boot, and an edit made here is overwritten by the next one.
12
9
  */
13
10
  export declare const plans: import("drizzle-orm/pg-core").PgTableWithColumns<{
14
11
  name: "plans";
@@ -255,10 +252,7 @@ export declare const plans: import("drizzle-orm/pg-core").PgTableWithColumns<{
255
252
  };
256
253
  dialect: "pg";
257
254
  }>;
258
- /**
259
- * Subscriptions table - Workspace subscription state
260
- * Each workspace has one active subscription (unique constraint)
261
- */
255
+ /** One subscription per workspace (unique constraint). */
262
256
  export declare const subscriptions: import("drizzle-orm/pg-core").PgTableWithColumns<{
263
257
  name: "subscriptions";
264
258
  schema: undefined;
@@ -470,10 +464,7 @@ export declare const subscriptions: import("drizzle-orm/pg-core").PgTableWithCol
470
464
  };
471
465
  dialect: "pg";
472
466
  }>;
473
- /**
474
- * Credit balances table - Credit mode balance tracking
475
- * Each workspace has one credit balance record (unique constraint on workspaceId)
476
- */
467
+ /** One credit balance per workspace (unique constraint). */
477
468
  export declare const creditBalances: import("drizzle-orm/pg-core").PgTableWithColumns<{
478
469
  name: "credit_balances";
479
470
  schema: undefined;
@@ -512,28 +503,11 @@ export declare const creditBalances: import("drizzle-orm/pg-core").PgTableWithCo
512
503
  identity: undefined;
513
504
  generated: undefined;
514
505
  }, {}, {}>;
515
- balance: import("drizzle-orm/pg-core").PgColumn<{
516
- name: "balance";
517
- tableName: "credit_balances";
518
- dataType: "number";
519
- columnType: "PgInteger";
520
- data: number;
521
- driverParam: string | number;
522
- notNull: true;
523
- hasDefault: true;
524
- isPrimaryKey: false;
525
- isAutoincrement: false;
526
- hasRuntimeDefault: false;
527
- enumValues: undefined;
528
- baseColumn: never;
529
- identity: undefined;
530
- generated: undefined;
531
- }, {}, {}>;
532
- totalPurchased: import("drizzle-orm/pg-core").PgColumn<{
533
- name: "total_purchased";
506
+ balanceMicros: import("drizzle-orm/pg-core").PgColumn<{
507
+ name: "balance_micros";
534
508
  tableName: "credit_balances";
535
509
  dataType: "number";
536
- columnType: "PgInteger";
510
+ columnType: "PgBigInt53";
537
511
  data: number;
538
512
  driverParam: string | number;
539
513
  notNull: true;
@@ -546,11 +520,11 @@ export declare const creditBalances: import("drizzle-orm/pg-core").PgTableWithCo
546
520
  identity: undefined;
547
521
  generated: undefined;
548
522
  }, {}, {}>;
549
- totalUsed: import("drizzle-orm/pg-core").PgColumn<{
550
- name: "total_used";
523
+ totalPurchasedMicros: import("drizzle-orm/pg-core").PgColumn<{
524
+ name: "total_purchased_micros";
551
525
  tableName: "credit_balances";
552
526
  dataType: "number";
553
- columnType: "PgInteger";
527
+ columnType: "PgBigInt53";
554
528
  data: number;
555
529
  driverParam: string | number;
556
530
  notNull: true;
@@ -563,11 +537,11 @@ export declare const creditBalances: import("drizzle-orm/pg-core").PgTableWithCo
563
537
  identity: undefined;
564
538
  generated: undefined;
565
539
  }, {}, {}>;
566
- balanceMnt: import("drizzle-orm/pg-core").PgColumn<{
567
- name: "balance_mnt";
540
+ totalUsedMicros: import("drizzle-orm/pg-core").PgColumn<{
541
+ name: "total_used_micros";
568
542
  tableName: "credit_balances";
569
543
  dataType: "number";
570
- columnType: "PgInteger";
544
+ columnType: "PgBigInt53";
571
545
  data: number;
572
546
  driverParam: string | number;
573
547
  notNull: true;
@@ -580,36 +554,19 @@ export declare const creditBalances: import("drizzle-orm/pg-core").PgTableWithCo
580
554
  identity: undefined;
581
555
  generated: undefined;
582
556
  }, {}, {}>;
583
- totalPurchasedMnt: import("drizzle-orm/pg-core").PgColumn<{
584
- name: "total_purchased_mnt";
585
- tableName: "credit_balances";
586
- dataType: "number";
587
- columnType: "PgInteger";
588
- data: number;
589
- driverParam: string | number;
590
- notNull: true;
591
- hasDefault: true;
592
- isPrimaryKey: false;
593
- isAutoincrement: false;
594
- hasRuntimeDefault: false;
595
- enumValues: undefined;
596
- baseColumn: never;
597
- identity: undefined;
598
- generated: undefined;
599
- }, {}, {}>;
600
- totalUsedMnt: import("drizzle-orm/pg-core").PgColumn<{
601
- name: "total_used_mnt";
557
+ currency: import("drizzle-orm/pg-core").PgColumn<{
558
+ name: "currency";
602
559
  tableName: "credit_balances";
603
- dataType: "number";
604
- columnType: "PgInteger";
605
- data: number;
606
- driverParam: string | number;
560
+ dataType: "string";
561
+ columnType: "PgText";
562
+ data: string;
563
+ driverParam: string;
607
564
  notNull: true;
608
565
  hasDefault: true;
609
566
  isPrimaryKey: false;
610
567
  isAutoincrement: false;
611
568
  hasRuntimeDefault: false;
612
- enumValues: undefined;
569
+ enumValues: [string, ...string[]];
613
570
  baseColumn: never;
614
571
  identity: undefined;
615
572
  generated: undefined;
@@ -635,11 +592,8 @@ export declare const creditBalances: import("drizzle-orm/pg-core").PgTableWithCo
635
592
  dialect: "pg";
636
593
  }>;
637
594
  /**
638
- * Billing Settings — singleton table holding the live FX rate and
639
- * margin multiplier. Read once per request (cached 60s in-process) so
640
- * model price changes and FX moves can be deployed without a code push.
641
- *
642
- * Convention: exactly one row with id = "default".
595
+ * Singleton (id = "default") holding the FX rate and margin, so they change
596
+ * without a deploy. Read per request, cached 60s in-process.
643
597
  */
644
598
  export declare const billingSettings: import("drizzle-orm/pg-core").PgTableWithColumns<{
645
599
  name: "billing_settings";
@@ -662,11 +616,28 @@ export declare const billingSettings: import("drizzle-orm/pg-core").PgTableWithC
662
616
  identity: undefined;
663
617
  generated: undefined;
664
618
  }, {}, {}>;
665
- usdToMntRate: import("drizzle-orm/pg-core").PgColumn<{
666
- name: "usd_to_mnt_rate";
619
+ currency: import("drizzle-orm/pg-core").PgColumn<{
620
+ name: "currency";
621
+ tableName: "billing_settings";
622
+ dataType: "string";
623
+ columnType: "PgText";
624
+ data: string;
625
+ driverParam: string;
626
+ notNull: true;
627
+ hasDefault: true;
628
+ isPrimaryKey: false;
629
+ isAutoincrement: false;
630
+ hasRuntimeDefault: false;
631
+ enumValues: [string, ...string[]];
632
+ baseColumn: never;
633
+ identity: undefined;
634
+ generated: undefined;
635
+ }, {}, {}>;
636
+ usdRateMicros: import("drizzle-orm/pg-core").PgColumn<{
637
+ name: "usd_rate_micros";
667
638
  tableName: "billing_settings";
668
639
  dataType: "number";
669
- columnType: "PgInteger";
640
+ columnType: "PgBigInt53";
670
641
  data: number;
671
642
  driverParam: string | number;
672
643
  notNull: true;
@@ -679,8 +650,8 @@ export declare const billingSettings: import("drizzle-orm/pg-core").PgTableWithC
679
650
  identity: undefined;
680
651
  generated: undefined;
681
652
  }, {}, {}>;
682
- marginMultiplierBp: import("drizzle-orm/pg-core").PgColumn<{
683
- name: "margin_multiplier_bp";
653
+ marginBp: import("drizzle-orm/pg-core").PgColumn<{
654
+ name: "margin_bp";
684
655
  tableName: "billing_settings";
685
656
  dataType: "number";
686
657
  columnType: "PgInteger";
@@ -716,10 +687,7 @@ export declare const billingSettings: import("drizzle-orm/pg-core").PgTableWithC
716
687
  };
717
688
  dialect: "pg";
718
689
  }>;
719
- /**
720
- * Credit purchases table - One-time credit purchases
721
- * Tracks all credit purchase transactions
722
- */
690
+ /** One-time credit purchases. */
723
691
  export declare const creditPurchases: import("drizzle-orm/pg-core").PgTableWithColumns<{
724
692
  name: "credit_purchases";
725
693
  schema: undefined;
@@ -758,14 +726,14 @@ export declare const creditPurchases: import("drizzle-orm/pg-core").PgTableWithC
758
726
  identity: undefined;
759
727
  generated: undefined;
760
728
  }, {}, {}>;
761
- amount: import("drizzle-orm/pg-core").PgColumn<{
762
- name: "amount";
729
+ priceMinor: import("drizzle-orm/pg-core").PgColumn<{
730
+ name: "price_minor";
763
731
  tableName: "credit_purchases";
764
732
  dataType: "number";
765
733
  columnType: "PgInteger";
766
734
  data: number;
767
735
  driverParam: string | number;
768
- notNull: true;
736
+ notNull: false;
769
737
  hasDefault: false;
770
738
  isPrimaryKey: false;
771
739
  isAutoincrement: false;
@@ -775,14 +743,31 @@ export declare const creditPurchases: import("drizzle-orm/pg-core").PgTableWithC
775
743
  identity: undefined;
776
744
  generated: undefined;
777
745
  }, {}, {}>;
778
- credits: import("drizzle-orm/pg-core").PgColumn<{
779
- name: "credits";
746
+ priceCurrency: import("drizzle-orm/pg-core").PgColumn<{
747
+ name: "price_currency";
748
+ tableName: "credit_purchases";
749
+ dataType: "string";
750
+ columnType: "PgText";
751
+ data: string;
752
+ driverParam: string;
753
+ notNull: false;
754
+ hasDefault: false;
755
+ isPrimaryKey: false;
756
+ isAutoincrement: false;
757
+ hasRuntimeDefault: false;
758
+ enumValues: [string, ...string[]];
759
+ baseColumn: never;
760
+ identity: undefined;
761
+ generated: undefined;
762
+ }, {}, {}>;
763
+ grantedMicros: import("drizzle-orm/pg-core").PgColumn<{
764
+ name: "granted_micros";
780
765
  tableName: "credit_purchases";
781
766
  dataType: "number";
782
- columnType: "PgInteger";
767
+ columnType: "PgBigInt53";
783
768
  data: number;
784
769
  driverParam: string | number;
785
- notNull: true;
770
+ notNull: false;
786
771
  hasDefault: false;
787
772
  isPrimaryKey: false;
788
773
  isAutoincrement: false;
@@ -792,6 +777,23 @@ export declare const creditPurchases: import("drizzle-orm/pg-core").PgTableWithC
792
777
  identity: undefined;
793
778
  generated: undefined;
794
779
  }, {}, {}>;
780
+ grantedCurrency: import("drizzle-orm/pg-core").PgColumn<{
781
+ name: "granted_currency";
782
+ tableName: "credit_purchases";
783
+ dataType: "string";
784
+ columnType: "PgText";
785
+ data: string;
786
+ driverParam: string;
787
+ notNull: false;
788
+ hasDefault: false;
789
+ isPrimaryKey: false;
790
+ isAutoincrement: false;
791
+ hasRuntimeDefault: false;
792
+ enumValues: [string, ...string[]];
793
+ baseColumn: never;
794
+ identity: undefined;
795
+ generated: undefined;
796
+ }, {}, {}>;
795
797
  stripePaymentIntentId: import("drizzle-orm/pg-core").PgColumn<{
796
798
  name: "stripe_payment_intent_id";
797
799
  tableName: "credit_purchases";
@@ -863,10 +865,7 @@ export declare const creditPurchases: import("drizzle-orm/pg-core").PgTableWithC
863
865
  };
864
866
  dialect: "pg";
865
867
  }>;
866
- /**
867
- * Finance events table - Audit trail for all Stripe events
868
- * Ensures idempotent webhook processing and financial audit trail
869
- */
868
+ /** Every Stripe event, for idempotent webhook processing and audit. */
870
869
  export declare const financeEvents: import("drizzle-orm/pg-core").PgTableWithColumns<{
871
870
  name: "finance_events";
872
871
  schema: undefined;
@@ -939,8 +938,8 @@ export declare const financeEvents: import("drizzle-orm/pg-core").PgTableWithCol
939
938
  identity: undefined;
940
939
  generated: undefined;
941
940
  }, {}, {}>;
942
- amount: import("drizzle-orm/pg-core").PgColumn<{
943
- name: "amount";
941
+ amountMinor: import("drizzle-orm/pg-core").PgColumn<{
942
+ name: "amount_minor";
944
943
  tableName: "finance_events";
945
944
  dataType: "number";
946
945
  columnType: "PgInteger";
@@ -990,6 +989,23 @@ export declare const financeEvents: import("drizzle-orm/pg-core").PgTableWithCol
990
989
  identity: undefined;
991
990
  generated: undefined;
992
991
  }, {}, {}>;
992
+ claimedAt: import("drizzle-orm/pg-core").PgColumn<{
993
+ name: "claimed_at";
994
+ tableName: "finance_events";
995
+ dataType: "date";
996
+ columnType: "PgTimestamp";
997
+ data: Date;
998
+ driverParam: string;
999
+ notNull: false;
1000
+ hasDefault: false;
1001
+ isPrimaryKey: false;
1002
+ isAutoincrement: false;
1003
+ hasRuntimeDefault: false;
1004
+ enumValues: undefined;
1005
+ baseColumn: never;
1006
+ identity: undefined;
1007
+ generated: undefined;
1008
+ }, {}, {}>;
993
1009
  processedAt: import("drizzle-orm/pg-core").PgColumn<{
994
1010
  name: "processed_at";
995
1011
  tableName: "finance_events";
@@ -1028,16 +1044,12 @@ export declare const financeEvents: import("drizzle-orm/pg-core").PgTableWithCol
1028
1044
  dialect: "pg";
1029
1045
  }>;
1030
1046
  /**
1031
- * Credit reservations table — closes the checkQuota → recordTokenUsage
1032
- * TOCTOU window (B-06). Admission inserts a reservation for the
1033
- * worst-case MNT estimate inside the same transaction that sums the
1034
- * other active reservations, so N concurrent requests can't all be
1035
- * admitted against the same balance. recordTokenUsage settles the
1036
- * reservation; abandoned reservations expire via expires_at and are
1037
- * ignored by the sum (cleanup cron deletes them).
1038
- *
1039
- * This is the seed of the Phase 2 `credit_reservations` table from the
1040
- * v2 architecture plan (ADR-0004).
1047
+ * Closes the admission → settlement race. Admission inserts a reservation
1048
+ * for the worst-case estimate inside the same transaction that sums the
1049
+ * other active reservations, so concurrent requests cannot all be admitted
1050
+ * against the same balance. Settlement closes the reservation; abandoned
1051
+ * ones expire via `expires_at`, are ignored by the sum, and are deleted by
1052
+ * a cleanup job.
1041
1053
  */
1042
1054
  export declare const creditReservations: import("drizzle-orm/pg-core").PgTableWithColumns<{
1043
1055
  name: "credit_reservations";
@@ -1094,15 +1106,15 @@ export declare const creditReservations: import("drizzle-orm/pg-core").PgTableWi
1094
1106
  identity: undefined;
1095
1107
  generated: undefined;
1096
1108
  }, {}, {}>;
1097
- estimatedMnt: import("drizzle-orm/pg-core").PgColumn<{
1098
- name: "estimated_mnt";
1109
+ estimatedMicros: import("drizzle-orm/pg-core").PgColumn<{
1110
+ name: "estimated_micros";
1099
1111
  tableName: "credit_reservations";
1100
1112
  dataType: "number";
1101
- columnType: "PgInteger";
1113
+ columnType: "PgBigInt53";
1102
1114
  data: number;
1103
1115
  driverParam: string | number;
1104
1116
  notNull: true;
1105
- hasDefault: false;
1117
+ hasDefault: true;
1106
1118
  isPrimaryKey: false;
1107
1119
  isAutoincrement: false;
1108
1120
  hasRuntimeDefault: false;
@@ -1111,6 +1123,23 @@ export declare const creditReservations: import("drizzle-orm/pg-core").PgTableWi
1111
1123
  identity: undefined;
1112
1124
  generated: undefined;
1113
1125
  }, {}, {}>;
1126
+ currency: import("drizzle-orm/pg-core").PgColumn<{
1127
+ name: "currency";
1128
+ tableName: "credit_reservations";
1129
+ dataType: "string";
1130
+ columnType: "PgText";
1131
+ data: string;
1132
+ driverParam: string;
1133
+ notNull: true;
1134
+ hasDefault: true;
1135
+ isPrimaryKey: false;
1136
+ isAutoincrement: false;
1137
+ hasRuntimeDefault: false;
1138
+ enumValues: [string, ...string[]];
1139
+ baseColumn: never;
1140
+ identity: undefined;
1141
+ generated: undefined;
1142
+ }, {}, {}>;
1114
1143
  status: import("drizzle-orm/pg-core").PgColumn<{
1115
1144
  name: "status";
1116
1145
  tableName: "credit_reservations";
@@ -1 +1 @@
1
- {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../../src/db/schema/billing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../../src/db/schema/billing.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,27 @@
1
1
  /**
2
- * Billing Database Schema
3
- *
4
- * Tables for managing subscriptions, plans, credits, and finance events.
5
- * Used by Stripe integration for subscription and credit-based billing.
6
- *
7
- * Pattern: snake_case columns in PostgreSQL, camelCase TypeScript API (via Drizzle mapping)
2
+ * Plans, subscriptions, credit ledgers, purchases and Stripe events.
3
+ * Amounts in the credit ledgers are micros of their currency.
8
4
  */
9
- import { pgTable, text, timestamp, integer, boolean, index, unique, } from "drizzle-orm/pg-core";
10
- import { organization } from "./auth";
5
+ import { pgTable, text, timestamp, integer, bigint, boolean, index, unique, } from "drizzle-orm/pg-core";
6
+ import { organization } from "./auth.js";
11
7
  /**
12
- * Plans table - DB-configured pricing plans per product
13
- * Allows dynamic plan changes without code deployment
8
+ * The registered plan catalogue, copied into rows so a subscription can
9
+ * reference its plan. The catalogue is the source: the rows are written
10
+ * from it at boot, and an edit made here is overwritten by the next one.
14
11
  */
15
12
  export const plans = pgTable("plans", {
16
13
  id: text("id").primaryKey(),
17
14
  name: text("name").notNull(),
18
15
  slug: text("slug").notNull().unique(),
19
16
  description: text("description"),
20
- priceMonthly: integer("price_monthly").notNull(), // cents, 0 for free
21
- priceYearly: integer("price_yearly").notNull(), // cents
17
+ /**
18
+ * Whole major units — 29 is twenty-nine of the currency, not cents —
19
+ * rounded from the catalogue's price. 0 for free. The row names no
20
+ * currency; readers take the deployment's billing currency.
21
+ */
22
+ priceMonthly: integer("price_monthly").notNull(),
23
+ /** Whole major units, as `priceMonthly`. 0 when the plan has no yearly price. */
24
+ priceYearly: integer("price_yearly").notNull(),
22
25
  stripePriceIdMonthly: text("stripe_price_id_monthly"),
23
26
  stripePriceIdYearly: text("stripe_price_id_yearly"),
24
27
  features: text("features").notNull(), // JSON string array
@@ -28,10 +31,7 @@ export const plans = pgTable("plans", {
28
31
  createdAt: timestamp("created_at").notNull().defaultNow(),
29
32
  updatedAt: timestamp("updated_at").notNull().defaultNow(),
30
33
  });
31
- /**
32
- * Subscriptions table - Workspace subscription state
33
- * Each workspace has one active subscription (unique constraint)
34
- */
34
+ /** One subscription per workspace (unique constraint). */
35
35
  export const subscriptions = pgTable("subscriptions", {
36
36
  id: text("id").primaryKey(),
37
37
  workspaceId: text("workspace_id")
@@ -53,60 +53,65 @@ export const subscriptions = pgTable("subscriptions", {
53
53
  index("subscriptions_workspace_id_idx").on(table.workspaceId),
54
54
  unique("subscriptions_workspace_id_unique").on(table.workspaceId),
55
55
  ]);
56
- /**
57
- * Credit balances table - Credit mode balance tracking
58
- * Each workspace has one credit balance record (unique constraint on workspaceId)
59
- */
56
+ /** One credit balance per workspace (unique constraint). */
60
57
  export const creditBalances = pgTable("credit_balances", {
61
58
  id: text("id").primaryKey(),
62
59
  workspaceId: text("workspace_id")
63
60
  .notNull()
64
61
  .unique()
65
62
  .references(() => organization.id, { onDelete: "cascade" }),
66
- balance: integer("balance").notNull().default(0), // legacy USD-cents column
67
- totalPurchased: integer("total_purchased").notNull().default(0),
68
- totalUsed: integer("total_used").notNull().default(0),
69
- /** Authoritative MNT credit balance (top-ups + carry-over) */
70
- balanceMnt: integer("balance_mnt").notNull().default(0),
71
- totalPurchasedMnt: integer("total_purchased_mnt").notNull().default(0),
72
- totalUsedMnt: integer("total_used_mnt").notNull().default(0),
63
+ /** The balance, in micros of `currency`. */
64
+ balanceMicros: bigint("balance_micros", { mode: "number" })
65
+ .notNull()
66
+ .default(0),
67
+ totalPurchasedMicros: bigint("total_purchased_micros", { mode: "number" })
68
+ .notNull()
69
+ .default(0),
70
+ totalUsedMicros: bigint("total_used_micros", { mode: "number" })
71
+ .notNull()
72
+ .default(0),
73
+ /** What this ledger is denominated in; a write in another is refused. */
74
+ currency: text("currency").notNull().default("USD"),
73
75
  updatedAt: timestamp("updated_at").notNull().defaultNow(),
74
76
  });
75
77
  /**
76
- * Billing Settings — singleton table holding the live FX rate and
77
- * margin multiplier. Read once per request (cached 60s in-process) so
78
- * model price changes and FX moves can be deployed without a code push.
79
- *
80
- * Convention: exactly one row with id = "default".
78
+ * Singleton (id = "default") holding the FX rate and margin, so they change
79
+ * without a deploy. Read per request, cached 60s in-process.
81
80
  */
82
81
  export const billingSettings = pgTable("billing_settings", {
83
82
  id: text("id").primaryKey(),
84
- /** USD → MNT conversion rate, e.g., 3450 */
85
- usdToMntRate: integer("usd_to_mnt_rate").notNull().default(3450),
86
- /** Markup applied to raw model cost (×100, store as integer for precision) */
87
- marginMultiplierBp: integer("margin_multiplier_bp").notNull().default(400), // 400 = 4.00x
83
+ /** The deployment's billing currency — every ledger row is in this. */
84
+ currency: text("currency").notNull().default("USD"),
85
+ /** What one USD costs in it, in micros: 1_000_000 is a USD deployment. */
86
+ usdRateMicros: bigint("usd_rate_micros", { mode: "number" })
87
+ .notNull()
88
+ .default(1000000),
89
+ /** Margin over provider cost, in basis points of a multiplier: 40_000 = 4×. */
90
+ marginBp: integer("margin_bp").notNull().default(40000),
88
91
  updatedAt: timestamp("updated_at").notNull().defaultNow(),
89
92
  });
90
- /**
91
- * Credit purchases table - One-time credit purchases
92
- * Tracks all credit purchase transactions
93
- */
93
+ /** One-time credit purchases. */
94
94
  export const creditPurchases = pgTable("credit_purchases", {
95
95
  id: text("id").primaryKey(),
96
96
  workspaceId: text("workspace_id")
97
97
  .notNull()
98
98
  .references(() => organization.id, { onDelete: "cascade" }),
99
- amount: integer("amount").notNull(), // cents paid
100
- credits: integer("credits").notNull(), // credits received
99
+ /** What the buyer paid, in minor units of `priceCurrency`. */
100
+ priceMinor: integer("price_minor"),
101
+ priceCurrency: text("price_currency"),
102
+ /**
103
+ * What the workspace was granted, in micros of `grantedCurrency`.
104
+ * Separate from the price on purpose: a pack sold for $5 grants an
105
+ * amount of the billing currency, which is a different unit.
106
+ */
107
+ grantedMicros: bigint("granted_micros", { mode: "number" }),
108
+ grantedCurrency: text("granted_currency"),
101
109
  stripePaymentIntentId: text("stripe_payment_intent_id"),
102
110
  stripeCheckoutSessionId: text("stripe_checkout_session_id"),
103
111
  status: text("status").notNull().default("pending"), // pending|completed|failed
104
112
  createdAt: timestamp("created_at").notNull().defaultNow(),
105
113
  }, (table) => [index("credit_purchases_workspace_id_idx").on(table.workspaceId)]);
106
- /**
107
- * Finance events table - Audit trail for all Stripe events
108
- * Ensures idempotent webhook processing and financial audit trail
109
- */
114
+ /** Every Stripe event, for idempotent webhook processing and audit. */
110
115
  export const financeEvents = pgTable("finance_events", {
111
116
  id: text("id").primaryKey(),
112
117
  workspaceId: text("workspace_id").references(() => organization.id, {
@@ -114,32 +119,39 @@ export const financeEvents = pgTable("finance_events", {
114
119
  }),
115
120
  stripeEventId: text("stripe_event_id").notNull().unique(),
116
121
  type: text("type").notNull(), // e.g., "checkout.session.completed", "invoice.paid"
117
- amount: integer("amount"), // cents
118
- currency: text("currency").default("usd"),
122
+ /** Stripe's own amount, in the minor units of `currency`. */
123
+ amountMinor: integer("amount_minor"),
124
+ currency: text("currency").default("USD"),
119
125
  metadata: text("metadata"), // JSON string
126
+ /**
127
+ * When a delivery took the event for processing. A lease: a claim
128
+ * older than the webhook's lease is taken as a delivery that died.
129
+ */
130
+ claimedAt: timestamp("claimed_at"),
131
+ /** Set once the handlers finished; the event is never run again. */
120
132
  processedAt: timestamp("processed_at"),
121
133
  createdAt: timestamp("created_at").notNull().defaultNow(),
122
134
  });
123
135
  /**
124
- * Credit reservations table — closes the checkQuota → recordTokenUsage
125
- * TOCTOU window (B-06). Admission inserts a reservation for the
126
- * worst-case MNT estimate inside the same transaction that sums the
127
- * other active reservations, so N concurrent requests can't all be
128
- * admitted against the same balance. recordTokenUsage settles the
129
- * reservation; abandoned reservations expire via expires_at and are
130
- * ignored by the sum (cleanup cron deletes them).
131
- *
132
- * This is the seed of the Phase 2 `credit_reservations` table from the
133
- * v2 architecture plan (ADR-0004).
136
+ * Closes the admission → settlement race. Admission inserts a reservation
137
+ * for the worst-case estimate inside the same transaction that sums the
138
+ * other active reservations, so concurrent requests cannot all be admitted
139
+ * against the same balance. Settlement closes the reservation; abandoned
140
+ * ones expire via `expires_at`, are ignored by the sum, and are deleted by
141
+ * a cleanup job.
134
142
  */
135
143
  export const creditReservations = pgTable("credit_reservations", {
136
144
  id: text("id").primaryKey(),
137
145
  workspaceId: text("workspace_id")
138
146
  .notNull()
139
147
  .references(() => organization.id, { onDelete: "cascade" }),
140
- /** Correlates admission with settlement — future execution id. */
148
+ /** Correlates admission with settlement. */
141
149
  requestId: text("request_id").notNull().unique(),
142
- estimatedMnt: integer("estimated_mnt").notNull(),
150
+ /** The hold, in micros of `currency`. */
151
+ estimatedMicros: bigint("estimated_micros", { mode: "number" })
152
+ .notNull()
153
+ .default(0),
154
+ currency: text("currency").notNull().default("USD"),
143
155
  status: text("status").notNull().default("active"), // active | settled
144
156
  createdAt: timestamp("created_at").notNull().defaultNow(),
145
157
  expiresAt: timestamp("expires_at").notNull(),