@wopr-network/platform-core 0.1.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 (694) hide show
  1. package/biome.json +61 -0
  2. package/dist/admin/admin-audit-log-repository.d.ts +33 -0
  3. package/dist/admin/admin-audit-log-repository.js +102 -0
  4. package/dist/admin/audit-log.d.ts +49 -0
  5. package/dist/admin/audit-log.js +63 -0
  6. package/dist/admin/index.d.ts +6 -0
  7. package/dist/admin/index.js +3 -0
  8. package/dist/admin/role-store.d.ts +37 -0
  9. package/dist/admin/role-store.js +106 -0
  10. package/dist/auth/api-key-repository.d.ts +11 -0
  11. package/dist/auth/api-key-repository.js +33 -0
  12. package/dist/auth/api-key-repository.test.d.ts +1 -0
  13. package/dist/auth/api-key-repository.test.js +46 -0
  14. package/dist/auth/auth.test.d.ts +1 -0
  15. package/dist/auth/auth.test.js +140 -0
  16. package/dist/auth/better-auth.d.ts +42 -0
  17. package/dist/auth/better-auth.js +196 -0
  18. package/dist/auth/index.d.ts +186 -0
  19. package/dist/auth/index.js +422 -0
  20. package/dist/auth/login-history-repository.d.ts +14 -0
  21. package/dist/auth/login-history-repository.js +15 -0
  22. package/dist/auth/login-history-repository.test.d.ts +1 -0
  23. package/dist/auth/login-history-repository.test.js +47 -0
  24. package/dist/auth/middleware.d.ts +55 -0
  25. package/dist/auth/middleware.js +101 -0
  26. package/dist/auth/middleware.test.d.ts +1 -0
  27. package/dist/auth/middleware.test.js +213 -0
  28. package/dist/auth/scoped-tokens.test.d.ts +1 -0
  29. package/dist/auth/scoped-tokens.test.js +306 -0
  30. package/dist/auth/tenant-access.test.d.ts +1 -0
  31. package/dist/auth/tenant-access.test.js +62 -0
  32. package/dist/auth/user-creator.d.ts +9 -0
  33. package/dist/auth/user-creator.js +47 -0
  34. package/dist/auth/user-creator.test.d.ts +1 -0
  35. package/dist/auth/user-creator.test.js +78 -0
  36. package/dist/auth/user-role-repository.d.ts +31 -0
  37. package/dist/auth/user-role-repository.js +53 -0
  38. package/dist/auth/user-role-repository.test.d.ts +1 -0
  39. package/dist/auth/user-role-repository.test.js +122 -0
  40. package/dist/billing/drizzle-webhook-seen-repository.d.ts +10 -0
  41. package/dist/billing/drizzle-webhook-seen-repository.js +28 -0
  42. package/dist/billing/index.d.ts +7 -0
  43. package/dist/billing/index.js +7 -0
  44. package/dist/billing/payment-processor.d.ts +127 -0
  45. package/dist/billing/payment-processor.js +8 -0
  46. package/dist/billing/payment-processor.test.d.ts +1 -0
  47. package/dist/billing/payment-processor.test.js +71 -0
  48. package/dist/billing/payram/cents-credits-boundary.test.d.ts +1 -0
  49. package/dist/billing/payram/cents-credits-boundary.test.js +75 -0
  50. package/dist/billing/payram/charge-store.d.ts +41 -0
  51. package/dist/billing/payram/charge-store.js +72 -0
  52. package/dist/billing/payram/charge-store.test.d.ts +1 -0
  53. package/dist/billing/payram/charge-store.test.js +64 -0
  54. package/dist/billing/payram/checkout.d.ts +15 -0
  55. package/dist/billing/payram/checkout.js +24 -0
  56. package/dist/billing/payram/checkout.test.d.ts +1 -0
  57. package/dist/billing/payram/checkout.test.js +74 -0
  58. package/dist/billing/payram/client.d.ts +7 -0
  59. package/dist/billing/payram/client.js +15 -0
  60. package/dist/billing/payram/client.test.d.ts +1 -0
  61. package/dist/billing/payram/client.test.js +52 -0
  62. package/dist/billing/payram/index.d.ts +8 -0
  63. package/dist/billing/payram/index.js +4 -0
  64. package/dist/billing/payram/types.d.ts +40 -0
  65. package/dist/billing/payram/types.js +1 -0
  66. package/dist/billing/payram/webhook.d.ts +19 -0
  67. package/dist/billing/payram/webhook.js +67 -0
  68. package/dist/billing/payram/webhook.test.d.ts +7 -0
  69. package/dist/billing/payram/webhook.test.js +248 -0
  70. package/dist/billing/stripe/cents-credits-boundary.test.d.ts +1 -0
  71. package/dist/billing/stripe/cents-credits-boundary.test.js +62 -0
  72. package/dist/billing/stripe/checkout.d.ts +20 -0
  73. package/dist/billing/stripe/checkout.js +63 -0
  74. package/dist/billing/stripe/checkout.test.d.ts +1 -0
  75. package/dist/billing/stripe/checkout.test.js +148 -0
  76. package/dist/billing/stripe/client.d.ts +14 -0
  77. package/dist/billing/stripe/client.js +33 -0
  78. package/dist/billing/stripe/client.test.d.ts +1 -0
  79. package/dist/billing/stripe/client.test.js +58 -0
  80. package/dist/billing/stripe/credit-prices.d.ts +63 -0
  81. package/dist/billing/stripe/credit-prices.js +81 -0
  82. package/dist/billing/stripe/credit-prices.test.d.ts +1 -0
  83. package/dist/billing/stripe/credit-prices.test.js +87 -0
  84. package/dist/billing/stripe/index.d.ts +14 -0
  85. package/dist/billing/stripe/index.js +8 -0
  86. package/dist/billing/stripe/payment-methods-detach-all.test.d.ts +1 -0
  87. package/dist/billing/stripe/payment-methods-detach-all.test.js +40 -0
  88. package/dist/billing/stripe/payment-methods.d.ts +25 -0
  89. package/dist/billing/stripe/payment-methods.js +53 -0
  90. package/dist/billing/stripe/payment-methods.test.d.ts +1 -0
  91. package/dist/billing/stripe/payment-methods.test.js +122 -0
  92. package/dist/billing/stripe/portal.d.ts +10 -0
  93. package/dist/billing/stripe/portal.js +16 -0
  94. package/dist/billing/stripe/portal.test.d.ts +1 -0
  95. package/dist/billing/stripe/portal.test.js +48 -0
  96. package/dist/billing/stripe/setup-intent.d.ts +16 -0
  97. package/dist/billing/stripe/setup-intent.js +22 -0
  98. package/dist/billing/stripe/setup-intent.test.d.ts +1 -0
  99. package/dist/billing/stripe/setup-intent.test.js +58 -0
  100. package/dist/billing/stripe/stripe-payment-processor.d.ts +49 -0
  101. package/dist/billing/stripe/stripe-payment-processor.js +166 -0
  102. package/dist/billing/stripe/stripe-payment-processor.test.d.ts +1 -0
  103. package/dist/billing/stripe/stripe-payment-processor.test.js +413 -0
  104. package/dist/billing/stripe/tenant-store.d.ts +56 -0
  105. package/dist/billing/stripe/tenant-store.js +119 -0
  106. package/dist/billing/stripe/tenant-store.test.d.ts +1 -0
  107. package/dist/billing/stripe/tenant-store.test.js +97 -0
  108. package/dist/billing/stripe/types.d.ts +49 -0
  109. package/dist/billing/stripe/types.js +1 -0
  110. package/dist/billing/webhook-seen-repository.d.ts +14 -0
  111. package/dist/billing/webhook-seen-repository.js +13 -0
  112. package/dist/config/billing-env.test.d.ts +1 -0
  113. package/dist/config/billing-env.test.js +48 -0
  114. package/dist/config/index.d.ts +46 -0
  115. package/dist/config/index.js +38 -0
  116. package/dist/config/logger.d.ts +2 -0
  117. package/dist/config/logger.js +11 -0
  118. package/dist/config/provider-endpoints.d.ts +6 -0
  119. package/dist/config/provider-endpoints.js +12 -0
  120. package/dist/credits/auto-topup-charge.d.ts +27 -0
  121. package/dist/credits/auto-topup-charge.js +139 -0
  122. package/dist/credits/auto-topup-charge.test.d.ts +1 -0
  123. package/dist/credits/auto-topup-charge.test.js +242 -0
  124. package/dist/credits/auto-topup-event-log-repository.d.ts +16 -0
  125. package/dist/credits/auto-topup-event-log-repository.js +18 -0
  126. package/dist/credits/auto-topup-event-log-repository.test.d.ts +1 -0
  127. package/dist/credits/auto-topup-event-log-repository.test.js +83 -0
  128. package/dist/credits/auto-topup-schedule.d.ts +27 -0
  129. package/dist/credits/auto-topup-schedule.js +66 -0
  130. package/dist/credits/auto-topup-schedule.test.d.ts +1 -0
  131. package/dist/credits/auto-topup-schedule.test.js +145 -0
  132. package/dist/credits/auto-topup-settings-repository.d.ts +54 -0
  133. package/dist/credits/auto-topup-settings-repository.js +184 -0
  134. package/dist/credits/auto-topup-settings-repository.test.d.ts +1 -0
  135. package/dist/credits/auto-topup-settings-repository.test.js +104 -0
  136. package/dist/credits/auto-topup-usage.d.ts +22 -0
  137. package/dist/credits/auto-topup-usage.js +56 -0
  138. package/dist/credits/auto-topup-usage.test.d.ts +1 -0
  139. package/dist/credits/auto-topup-usage.test.js +181 -0
  140. package/dist/credits/credit-expiry-cron.d.ts +19 -0
  141. package/dist/credits/credit-expiry-cron.js +50 -0
  142. package/dist/credits/credit-expiry-cron.test.d.ts +1 -0
  143. package/dist/credits/credit-expiry-cron.test.js +67 -0
  144. package/dist/credits/credit-ledger-extra.test.d.ts +1 -0
  145. package/dist/credits/credit-ledger-extra.test.js +40 -0
  146. package/dist/credits/credit-ledger.bench.d.ts +1 -0
  147. package/dist/credits/credit-ledger.bench.js +33 -0
  148. package/dist/credits/credit-ledger.d.ts +130 -0
  149. package/dist/credits/credit-ledger.js +293 -0
  150. package/dist/credits/credit-ledger.test.d.ts +4 -0
  151. package/dist/credits/credit-ledger.test.js +203 -0
  152. package/dist/credits/credit-transaction-repository.d.ts +17 -0
  153. package/dist/credits/credit-transaction-repository.js +35 -0
  154. package/dist/credits/credit-transaction-repository.test.d.ts +1 -0
  155. package/dist/credits/credit-transaction-repository.test.js +232 -0
  156. package/dist/credits/credit.d.ts +75 -0
  157. package/dist/credits/credit.js +139 -0
  158. package/dist/credits/credit.test.d.ts +1 -0
  159. package/dist/credits/credit.test.js +196 -0
  160. package/dist/credits/dividend-cron.d.ts +29 -0
  161. package/dist/credits/dividend-cron.js +88 -0
  162. package/dist/credits/dividend-cron.test.d.ts +1 -0
  163. package/dist/credits/dividend-cron.test.js +128 -0
  164. package/dist/credits/dividend-repository.d.ts +29 -0
  165. package/dist/credits/dividend-repository.js +126 -0
  166. package/dist/credits/dividend-repository.test.d.ts +1 -0
  167. package/dist/credits/dividend-repository.test.js +176 -0
  168. package/dist/credits/index.d.ts +9 -0
  169. package/dist/credits/index.js +5 -0
  170. package/dist/credits/repository-types.d.ts +29 -0
  171. package/dist/credits/repository-types.js +1 -0
  172. package/dist/credits/signup-grant.d.ts +12 -0
  173. package/dist/credits/signup-grant.js +35 -0
  174. package/dist/credits/signup-grant.test.d.ts +1 -0
  175. package/dist/credits/signup-grant.test.js +51 -0
  176. package/dist/credits/tenant-customer-repository.d.ts +30 -0
  177. package/dist/credits/tenant-customer-repository.js +5 -0
  178. package/dist/db/auth-user-repository.d.ts +46 -0
  179. package/dist/db/auth-user-repository.js +90 -0
  180. package/dist/db/credit-column.d.ts +27 -0
  181. package/dist/db/credit-column.js +13 -0
  182. package/dist/db/index.d.ts +14 -0
  183. package/dist/db/index.js +8 -0
  184. package/dist/db/schema/account-deletion-requests.d.ts +203 -0
  185. package/dist/db/schema/account-deletion-requests.js +36 -0
  186. package/dist/db/schema/account-export-requests.d.ts +148 -0
  187. package/dist/db/schema/account-export-requests.js +19 -0
  188. package/dist/db/schema/admin-audit.d.ts +194 -0
  189. package/dist/db/schema/admin-audit.js +21 -0
  190. package/dist/db/schema/admin-users.d.ts +177 -0
  191. package/dist/db/schema/admin-users.js +23 -0
  192. package/dist/db/schema/affiliate-fraud.d.ts +160 -0
  193. package/dist/db/schema/affiliate-fraud.js +18 -0
  194. package/dist/db/schema/affiliate.d.ts +277 -0
  195. package/dist/db/schema/affiliate.js +32 -0
  196. package/dist/db/schema/coupon-codes.d.ts +143 -0
  197. package/dist/db/schema/coupon-codes.js +17 -0
  198. package/dist/db/schema/credit-auto-topup-settings.d.ts +232 -0
  199. package/dist/db/schema/credit-auto-topup-settings.js +27 -0
  200. package/dist/db/schema/credit-auto-topup.d.ts +130 -0
  201. package/dist/db/schema/credit-auto-topup.js +21 -0
  202. package/dist/db/schema/credits.d.ts +283 -0
  203. package/dist/db/schema/credits.js +38 -0
  204. package/dist/db/schema/dividend-distributions.d.ts +130 -0
  205. package/dist/db/schema/dividend-distributions.js +19 -0
  206. package/dist/db/schema/email-notifications.d.ts +99 -0
  207. package/dist/db/schema/email-notifications.js +21 -0
  208. package/dist/db/schema/index.d.ts +33 -0
  209. package/dist/db/schema/index.js +33 -0
  210. package/dist/db/schema/meter-events.d.ts +599 -0
  211. package/dist/db/schema/meter-events.js +55 -0
  212. package/dist/db/schema/notification-preferences.d.ts +165 -0
  213. package/dist/db/schema/notification-preferences.js +18 -0
  214. package/dist/db/schema/notification-queue.d.ts +236 -0
  215. package/dist/db/schema/notification-queue.js +40 -0
  216. package/dist/db/schema/org-memberships.d.ts +63 -0
  217. package/dist/db/schema/org-memberships.js +15 -0
  218. package/dist/db/schema/organization-members.d.ts +235 -0
  219. package/dist/db/schema/organization-members.js +27 -0
  220. package/dist/db/schema/payram.d.ts +164 -0
  221. package/dist/db/schema/payram.js +21 -0
  222. package/dist/db/schema/platform-api-keys.d.ts +143 -0
  223. package/dist/db/schema/platform-api-keys.js +20 -0
  224. package/dist/db/schema/promotion-redemptions.d.ts +143 -0
  225. package/dist/db/schema/promotion-redemptions.js +18 -0
  226. package/dist/db/schema/promotions.d.ts +445 -0
  227. package/dist/db/schema/promotions.js +48 -0
  228. package/dist/db/schema/provider-credentials.d.ts +201 -0
  229. package/dist/db/schema/provider-credentials.js +36 -0
  230. package/dist/db/schema/rate-limit-entries.d.ts +75 -0
  231. package/dist/db/schema/rate-limit-entries.js +7 -0
  232. package/dist/db/schema/secret-audit-log.d.ts +109 -0
  233. package/dist/db/schema/secret-audit-log.js +15 -0
  234. package/dist/db/schema/session-usage.d.ts +194 -0
  235. package/dist/db/schema/session-usage.js +19 -0
  236. package/dist/db/schema/spending-limits.d.ts +92 -0
  237. package/dist/db/schema/spending-limits.js +8 -0
  238. package/dist/db/schema/tenant-addons.d.ts +58 -0
  239. package/dist/db/schema/tenant-addons.js +9 -0
  240. package/dist/db/schema/tenant-api-keys.d.ts +131 -0
  241. package/dist/db/schema/tenant-api-keys.js +21 -0
  242. package/dist/db/schema/tenant-capability-settings.d.ts +79 -0
  243. package/dist/db/schema/tenant-capability-settings.js +12 -0
  244. package/dist/db/schema/tenant-customers.d.ts +303 -0
  245. package/dist/db/schema/tenant-customers.js +25 -0
  246. package/dist/db/schema/tenants.d.ts +126 -0
  247. package/dist/db/schema/tenants.js +18 -0
  248. package/dist/db/schema/user-roles.d.ts +98 -0
  249. package/dist/db/schema/user-roles.js +18 -0
  250. package/dist/db/schema/webhook-seen-events.d.ts +58 -0
  251. package/dist/db/schema/webhook-seen-events.js +9 -0
  252. package/dist/email/billing-emails.d.ts +51 -0
  253. package/dist/email/billing-emails.js +163 -0
  254. package/dist/email/billing-emails.test.d.ts +1 -0
  255. package/dist/email/billing-emails.test.js +162 -0
  256. package/dist/email/client.d.ts +51 -0
  257. package/dist/email/client.js +102 -0
  258. package/dist/email/client.test.d.ts +1 -0
  259. package/dist/email/client.test.js +120 -0
  260. package/dist/email/drizzle-billing-email-repository.d.ts +21 -0
  261. package/dist/email/drizzle-billing-email-repository.js +36 -0
  262. package/dist/email/drizzle-billing-email-repository.test.d.ts +1 -0
  263. package/dist/email/drizzle-billing-email-repository.test.js +42 -0
  264. package/dist/email/index.d.ts +33 -0
  265. package/dist/email/index.js +22 -0
  266. package/dist/email/notification-preferences-store.d.ts +12 -0
  267. package/dist/email/notification-preferences-store.js +82 -0
  268. package/dist/email/notification-preferences-store.test.d.ts +1 -0
  269. package/dist/email/notification-preferences-store.test.js +86 -0
  270. package/dist/email/notification-queue-store.d.ts +25 -0
  271. package/dist/email/notification-queue-store.js +97 -0
  272. package/dist/email/notification-queue-store.test.d.ts +1 -0
  273. package/dist/email/notification-queue-store.test.js +177 -0
  274. package/dist/email/notification-repository-types.d.ts +70 -0
  275. package/dist/email/notification-repository-types.js +6 -0
  276. package/dist/email/notification-service.d.ts +41 -0
  277. package/dist/email/notification-service.js +196 -0
  278. package/dist/email/notification-service.test.d.ts +1 -0
  279. package/dist/email/notification-service.test.js +160 -0
  280. package/dist/email/notification-templates.d.ts +18 -0
  281. package/dist/email/notification-templates.js +574 -0
  282. package/dist/email/notification-templates.test.d.ts +1 -0
  283. package/dist/email/notification-templates.test.js +238 -0
  284. package/dist/email/notification-worker.d.ts +24 -0
  285. package/dist/email/notification-worker.js +109 -0
  286. package/dist/email/notification-worker.test.d.ts +1 -0
  287. package/dist/email/notification-worker.test.js +153 -0
  288. package/dist/email/require-verified.d.ts +25 -0
  289. package/dist/email/require-verified.js +52 -0
  290. package/dist/email/require-verified.test.d.ts +1 -0
  291. package/dist/email/require-verified.test.js +62 -0
  292. package/dist/email/resend-adapter.d.ts +47 -0
  293. package/dist/email/resend-adapter.js +137 -0
  294. package/dist/email/resend-adapter.test.d.ts +1 -0
  295. package/dist/email/resend-adapter.test.js +190 -0
  296. package/dist/email/templates.d.ts +22 -0
  297. package/dist/email/templates.js +359 -0
  298. package/dist/email/templates.test.d.ts +1 -0
  299. package/dist/email/templates.test.js +170 -0
  300. package/dist/email/verification.d.ts +42 -0
  301. package/dist/email/verification.js +83 -0
  302. package/dist/email/verification.test.d.ts +1 -0
  303. package/dist/email/verification.test.js +141 -0
  304. package/dist/index.d.ts +13 -0
  305. package/dist/index.js +23 -0
  306. package/dist/metering/aggregator.d.ts +54 -0
  307. package/dist/metering/aggregator.js +123 -0
  308. package/dist/metering/aggregator.test.d.ts +1 -0
  309. package/dist/metering/aggregator.test.js +179 -0
  310. package/dist/metering/dlq.d.ts +31 -0
  311. package/dist/metering/dlq.js +82 -0
  312. package/dist/metering/dlq.test.d.ts +1 -0
  313. package/dist/metering/dlq.test.js +117 -0
  314. package/dist/metering/drizzle-usage-summary-repository.d.ts +67 -0
  315. package/dist/metering/drizzle-usage-summary-repository.js +98 -0
  316. package/dist/metering/emitter.d.ts +66 -0
  317. package/dist/metering/emitter.js +185 -0
  318. package/dist/metering/emitter.test.d.ts +1 -0
  319. package/dist/metering/emitter.test.js +171 -0
  320. package/dist/metering/index.d.ts +11 -0
  321. package/dist/metering/index.js +5 -0
  322. package/dist/metering/load-test.bench.d.ts +1 -0
  323. package/dist/metering/load-test.bench.js +103 -0
  324. package/dist/metering/meter-event-repository.d.ts +33 -0
  325. package/dist/metering/meter-event-repository.js +58 -0
  326. package/dist/metering/meter-repositories.test.d.ts +1 -0
  327. package/dist/metering/meter-repositories.test.js +419 -0
  328. package/dist/metering/metering.test.d.ts +1 -0
  329. package/dist/metering/metering.test.js +1046 -0
  330. package/dist/metering/reconciliation-cron.d.ts +37 -0
  331. package/dist/metering/reconciliation-cron.js +85 -0
  332. package/dist/metering/reconciliation-cron.test.d.ts +1 -0
  333. package/dist/metering/reconciliation-cron.test.js +162 -0
  334. package/dist/metering/reconciliation-repository.d.ts +27 -0
  335. package/dist/metering/reconciliation-repository.js +43 -0
  336. package/dist/metering/reconciliation-repository.test.d.ts +1 -0
  337. package/dist/metering/reconciliation-repository.test.js +160 -0
  338. package/dist/metering/types.d.ts +88 -0
  339. package/dist/metering/types.js +1 -0
  340. package/dist/metering/wal.d.ts +49 -0
  341. package/dist/metering/wal.js +124 -0
  342. package/dist/metering/wal.test.d.ts +1 -0
  343. package/dist/metering/wal.test.js +175 -0
  344. package/dist/middleware/csrf.d.ts +24 -0
  345. package/dist/middleware/csrf.js +80 -0
  346. package/dist/middleware/csrf.test.d.ts +1 -0
  347. package/dist/middleware/csrf.test.js +152 -0
  348. package/dist/middleware/drizzle-rate-limit-repository.d.ts +9 -0
  349. package/dist/middleware/drizzle-rate-limit-repository.js +52 -0
  350. package/dist/middleware/drizzle-rate-limit-repository.test.d.ts +1 -0
  351. package/dist/middleware/drizzle-rate-limit-repository.test.js +74 -0
  352. package/dist/middleware/get-client-ip.d.ts +22 -0
  353. package/dist/middleware/get-client-ip.js +51 -0
  354. package/dist/middleware/get-client-ip.test.d.ts +1 -0
  355. package/dist/middleware/get-client-ip.test.js +40 -0
  356. package/dist/middleware/index.d.ts +5 -0
  357. package/dist/middleware/index.js +4 -0
  358. package/dist/middleware/rate-limit-repository.d.ts +19 -0
  359. package/dist/middleware/rate-limit-repository.js +1 -0
  360. package/dist/middleware/rate-limit.d.ts +57 -0
  361. package/dist/middleware/rate-limit.js +109 -0
  362. package/dist/middleware/rate-limit.test.d.ts +1 -0
  363. package/dist/middleware/rate-limit.test.js +247 -0
  364. package/dist/security/credential-vault/audit-repository.d.ts +27 -0
  365. package/dist/security/credential-vault/audit-repository.js +42 -0
  366. package/dist/security/credential-vault/audit-repository.test.d.ts +1 -0
  367. package/dist/security/credential-vault/audit-repository.test.js +78 -0
  368. package/dist/security/credential-vault/credential-repository.d.ts +94 -0
  369. package/dist/security/credential-vault/credential-repository.js +145 -0
  370. package/dist/security/credential-vault/credential-repository.test.d.ts +1 -0
  371. package/dist/security/credential-vault/credential-repository.test.js +206 -0
  372. package/dist/security/credential-vault/index.d.ts +12 -0
  373. package/dist/security/credential-vault/index.js +6 -0
  374. package/dist/security/credential-vault/key-rotation.d.ts +18 -0
  375. package/dist/security/credential-vault/key-rotation.js +52 -0
  376. package/dist/security/credential-vault/key-rotation.test.d.ts +1 -0
  377. package/dist/security/credential-vault/key-rotation.test.js +95 -0
  378. package/dist/security/credential-vault/migrate-plaintext.d.ts +15 -0
  379. package/dist/security/credential-vault/migrate-plaintext.js +80 -0
  380. package/dist/security/credential-vault/migrate-plaintext.test.d.ts +1 -0
  381. package/dist/security/credential-vault/migrate-plaintext.test.js +111 -0
  382. package/dist/security/credential-vault/migration-check.d.ts +15 -0
  383. package/dist/security/credential-vault/migration-check.js +71 -0
  384. package/dist/security/credential-vault/migration-check.test.d.ts +1 -0
  385. package/dist/security/credential-vault/migration-check.test.js +457 -0
  386. package/dist/security/credential-vault/store.d.ts +106 -0
  387. package/dist/security/credential-vault/store.js +181 -0
  388. package/dist/security/credential-vault/store.test.d.ts +1 -0
  389. package/dist/security/credential-vault/store.test.js +482 -0
  390. package/dist/security/encryption.d.ts +22 -0
  391. package/dist/security/encryption.js +53 -0
  392. package/dist/security/encryption.test.d.ts +1 -0
  393. package/dist/security/encryption.test.js +95 -0
  394. package/dist/security/host-validation.d.ts +11 -0
  395. package/dist/security/host-validation.js +108 -0
  396. package/dist/security/host-validation.test.d.ts +1 -0
  397. package/dist/security/host-validation.test.js +106 -0
  398. package/dist/security/index.d.ts +11 -0
  399. package/dist/security/index.js +11 -0
  400. package/dist/security/key-audit.d.ts +16 -0
  401. package/dist/security/key-audit.js +35 -0
  402. package/dist/security/key-audit.test.d.ts +1 -0
  403. package/dist/security/key-audit.test.js +50 -0
  404. package/dist/security/key-injection.d.ts +28 -0
  405. package/dist/security/key-injection.js +57 -0
  406. package/dist/security/key-injection.test.d.ts +1 -0
  407. package/dist/security/key-injection.test.js +97 -0
  408. package/dist/security/key-validation.d.ts +16 -0
  409. package/dist/security/key-validation.js +78 -0
  410. package/dist/security/key-validation.test.d.ts +1 -0
  411. package/dist/security/key-validation.test.js +87 -0
  412. package/dist/security/redirect-allowlist.d.ts +6 -0
  413. package/dist/security/redirect-allowlist.js +36 -0
  414. package/dist/security/redirect-allowlist.test.d.ts +1 -0
  415. package/dist/security/redirect-allowlist.test.js +55 -0
  416. package/dist/security/tenant-keys/capability-settings-store.d.ts +22 -0
  417. package/dist/security/tenant-keys/capability-settings-store.js +33 -0
  418. package/dist/security/tenant-keys/capability-settings-store.test.d.ts +1 -0
  419. package/dist/security/tenant-keys/capability-settings-store.test.js +77 -0
  420. package/dist/security/tenant-keys/index.d.ts +10 -0
  421. package/dist/security/tenant-keys/index.js +5 -0
  422. package/dist/security/tenant-keys/key-resolution-repository.d.ts +15 -0
  423. package/dist/security/tenant-keys/key-resolution-repository.js +18 -0
  424. package/dist/security/tenant-keys/key-resolution-repository.test.d.ts +1 -0
  425. package/dist/security/tenant-keys/key-resolution-repository.test.js +72 -0
  426. package/dist/security/tenant-keys/key-resolution.d.ts +39 -0
  427. package/dist/security/tenant-keys/key-resolution.js +59 -0
  428. package/dist/security/tenant-keys/key-resolution.test.d.ts +1 -0
  429. package/dist/security/tenant-keys/key-resolution.test.js +97 -0
  430. package/dist/security/tenant-keys/org-key-resolution.d.ts +30 -0
  431. package/dist/security/tenant-keys/org-key-resolution.js +50 -0
  432. package/dist/security/tenant-keys/org-key-resolution.test.d.ts +1 -0
  433. package/dist/security/tenant-keys/org-key-resolution.test.js +103 -0
  434. package/dist/security/tenant-keys/tenant-key-repository.d.ts +36 -0
  435. package/dist/security/tenant-keys/tenant-key-repository.js +96 -0
  436. package/dist/security/tenant-keys/tenant-key-repository.test.d.ts +1 -0
  437. package/dist/security/tenant-keys/tenant-key-repository.test.js +114 -0
  438. package/dist/security/types.d.ts +35 -0
  439. package/dist/security/types.js +15 -0
  440. package/dist/tenancy/drizzle-org-repository.d.ts +40 -0
  441. package/dist/tenancy/drizzle-org-repository.js +126 -0
  442. package/dist/tenancy/index.d.ts +6 -0
  443. package/dist/tenancy/index.js +3 -0
  444. package/dist/tenancy/org-member-repository.d.ts +57 -0
  445. package/dist/tenancy/org-member-repository.js +99 -0
  446. package/dist/tenancy/org-repository.test.d.ts +1 -0
  447. package/dist/tenancy/org-repository.test.js +143 -0
  448. package/dist/tenancy/org-service.d.ts +70 -0
  449. package/dist/tenancy/org-service.js +223 -0
  450. package/dist/tenancy/org-service.test.d.ts +1 -0
  451. package/dist/tenancy/org-service.test.js +550 -0
  452. package/dist/test/db.d.ts +33 -0
  453. package/dist/test/db.js +65 -0
  454. package/dist/trpc/index.d.ts +1 -0
  455. package/dist/trpc/index.js +1 -0
  456. package/dist/trpc/init.d.ts +49 -0
  457. package/dist/trpc/init.js +108 -0
  458. package/dist/trpc/init.test.d.ts +1 -0
  459. package/dist/trpc/init.test.js +154 -0
  460. package/drizzle/migrations/0000_slippery_mandrill.sql +559 -0
  461. package/drizzle/migrations/meta/0000_snapshot.json +4374 -0
  462. package/drizzle/migrations/meta/_journal.json +13 -0
  463. package/drizzle.config.ts +41 -0
  464. package/package.json +64 -0
  465. package/src/admin/admin-audit-log-repository.ts +135 -0
  466. package/src/admin/audit-log.ts +111 -0
  467. package/src/admin/index.ts +6 -0
  468. package/src/admin/role-store.ts +134 -0
  469. package/src/auth/api-key-repository.test.ts +63 -0
  470. package/src/auth/api-key-repository.ts +46 -0
  471. package/src/auth/auth.test.ts +166 -0
  472. package/src/auth/better-auth.ts +216 -0
  473. package/src/auth/index.ts +520 -0
  474. package/src/auth/login-history-repository.test.ts +54 -0
  475. package/src/auth/login-history-repository.ts +28 -0
  476. package/src/auth/middleware.test.ts +264 -0
  477. package/src/auth/middleware.ts +117 -0
  478. package/src/auth/scoped-tokens.test.ts +362 -0
  479. package/src/auth/tenant-access.test.ts +69 -0
  480. package/src/auth/user-creator.test.ts +98 -0
  481. package/src/auth/user-creator.ts +54 -0
  482. package/src/auth/user-role-repository.test.ts +149 -0
  483. package/src/auth/user-role-repository.ts +67 -0
  484. package/src/billing/drizzle-webhook-seen-repository.ts +34 -0
  485. package/src/billing/index.ts +22 -0
  486. package/src/billing/payment-processor.test.ts +93 -0
  487. package/src/billing/payment-processor.ts +150 -0
  488. package/src/billing/payram/cents-credits-boundary.test.ts +84 -0
  489. package/src/billing/payram/charge-store.test.ts +84 -0
  490. package/src/billing/payram/charge-store.ts +109 -0
  491. package/src/billing/payram/checkout.test.ts +99 -0
  492. package/src/billing/payram/checkout.ts +40 -0
  493. package/src/billing/payram/client.test.ts +62 -0
  494. package/src/billing/payram/client.ts +21 -0
  495. package/src/billing/payram/index.ts +14 -0
  496. package/src/billing/payram/types.ts +44 -0
  497. package/src/billing/payram/webhook.test.ts +318 -0
  498. package/src/billing/payram/webhook.ts +97 -0
  499. package/src/billing/stripe/cents-credits-boundary.test.ts +70 -0
  500. package/src/billing/stripe/checkout.test.ts +186 -0
  501. package/src/billing/stripe/checkout.ts +82 -0
  502. package/src/billing/stripe/client.test.ts +64 -0
  503. package/src/billing/stripe/client.ts +39 -0
  504. package/src/billing/stripe/credit-prices.test.ts +114 -0
  505. package/src/billing/stripe/credit-prices.ts +113 -0
  506. package/src/billing/stripe/index.ts +14 -0
  507. package/src/billing/stripe/payment-methods-detach-all.test.ts +53 -0
  508. package/src/billing/stripe/payment-methods.test.ts +157 -0
  509. package/src/billing/stripe/payment-methods.ts +76 -0
  510. package/src/billing/stripe/portal.test.ts +63 -0
  511. package/src/billing/stripe/portal.ts +25 -0
  512. package/src/billing/stripe/setup-intent.test.ts +78 -0
  513. package/src/billing/stripe/setup-intent.ts +34 -0
  514. package/src/billing/stripe/stripe-payment-processor.test.ts +517 -0
  515. package/src/billing/stripe/stripe-payment-processor.ts +255 -0
  516. package/src/billing/stripe/tenant-store.test.ts +124 -0
  517. package/src/billing/stripe/tenant-store.ts +151 -0
  518. package/src/billing/stripe/types.ts +53 -0
  519. package/src/billing/webhook-seen-repository.ts +24 -0
  520. package/src/config/billing-env.test.ts +54 -0
  521. package/src/config/index.ts +44 -0
  522. package/src/config/logger.ts +12 -0
  523. package/src/config/provider-endpoints.ts +14 -0
  524. package/src/credits/auto-topup-charge.test.ts +292 -0
  525. package/src/credits/auto-topup-charge.ts +171 -0
  526. package/src/credits/auto-topup-event-log-repository.test.ts +99 -0
  527. package/src/credits/auto-topup-event-log-repository.ts +30 -0
  528. package/src/credits/auto-topup-schedule.test.ts +179 -0
  529. package/src/credits/auto-topup-schedule.ts +93 -0
  530. package/src/credits/auto-topup-settings-repository.test.ts +123 -0
  531. package/src/credits/auto-topup-settings-repository.ts +245 -0
  532. package/src/credits/auto-topup-usage.test.ts +220 -0
  533. package/src/credits/auto-topup-usage.ts +68 -0
  534. package/src/credits/credit-expiry-cron.test.ts +125 -0
  535. package/src/credits/credit-expiry-cron.ts +76 -0
  536. package/src/credits/credit-ledger-extra.test.ts +57 -0
  537. package/src/credits/credit-ledger.bench.ts +56 -0
  538. package/src/credits/credit-ledger.test.ts +276 -0
  539. package/src/credits/credit-ledger.ts +450 -0
  540. package/src/credits/credit-transaction-repository.test.ts +274 -0
  541. package/src/credits/credit-transaction-repository.ts +62 -0
  542. package/src/credits/credit.test.ts +234 -0
  543. package/src/credits/credit.ts +160 -0
  544. package/src/credits/dividend-cron.test.ts +158 -0
  545. package/src/credits/dividend-cron.ts +127 -0
  546. package/src/credits/dividend-repository.test.ts +223 -0
  547. package/src/credits/dividend-repository.ts +182 -0
  548. package/src/credits/index.ts +25 -0
  549. package/src/credits/repository-types.ts +33 -0
  550. package/src/credits/signup-grant.test.ts +63 -0
  551. package/src/credits/signup-grant.ts +44 -0
  552. package/src/credits/tenant-customer-repository.ts +28 -0
  553. package/src/db/auth-user-repository.ts +124 -0
  554. package/src/db/credit-column.ts +17 -0
  555. package/src/db/index.ts +21 -0
  556. package/src/db/schema/account-deletion-requests.ts +41 -0
  557. package/src/db/schema/account-export-requests.ts +24 -0
  558. package/src/db/schema/admin-audit.ts +26 -0
  559. package/src/db/schema/admin-users.ts +31 -0
  560. package/src/db/schema/affiliate-fraud.ts +23 -0
  561. package/src/db/schema/affiliate.ts +38 -0
  562. package/src/db/schema/coupon-codes.ts +22 -0
  563. package/src/db/schema/credit-auto-topup-settings.ts +32 -0
  564. package/src/db/schema/credit-auto-topup.ts +26 -0
  565. package/src/db/schema/credits.ts +44 -0
  566. package/src/db/schema/dividend-distributions.ts +24 -0
  567. package/src/db/schema/email-notifications.ts +26 -0
  568. package/src/db/schema/index.ts +33 -0
  569. package/src/db/schema/meter-events.ts +70 -0
  570. package/src/db/schema/notification-preferences.ts +19 -0
  571. package/src/db/schema/notification-queue.ts +45 -0
  572. package/src/db/schema/org-memberships.ts +20 -0
  573. package/src/db/schema/organization-members.ts +37 -0
  574. package/src/db/schema/payram.ts +26 -0
  575. package/src/db/schema/platform-api-keys.ts +25 -0
  576. package/src/db/schema/promotion-redemptions.ts +23 -0
  577. package/src/db/schema/promotions.ts +57 -0
  578. package/src/db/schema/provider-credentials.ts +41 -0
  579. package/src/db/schema/rate-limit-entries.ts +12 -0
  580. package/src/db/schema/secret-audit-log.ts +20 -0
  581. package/src/db/schema/session-usage.ts +24 -0
  582. package/src/db/schema/spending-limits.ts +9 -0
  583. package/src/db/schema/tenant-addons.ts +14 -0
  584. package/src/db/schema/tenant-api-keys.ts +26 -0
  585. package/src/db/schema/tenant-capability-settings.ts +17 -0
  586. package/src/db/schema/tenant-customers.ts +35 -0
  587. package/src/db/schema/tenants.ts +23 -0
  588. package/src/db/schema/user-roles.ts +23 -0
  589. package/src/db/schema/webhook-seen-events.ts +14 -0
  590. package/src/email/billing-emails.test.ts +198 -0
  591. package/src/email/billing-emails.ts +211 -0
  592. package/src/email/client.test.ts +149 -0
  593. package/src/email/client.ts +137 -0
  594. package/src/email/drizzle-billing-email-repository.test.ts +52 -0
  595. package/src/email/drizzle-billing-email-repository.ts +59 -0
  596. package/src/email/index.ts +57 -0
  597. package/src/email/notification-preferences-store.test.ts +102 -0
  598. package/src/email/notification-preferences-store.ts +90 -0
  599. package/src/email/notification-queue-store.test.ts +215 -0
  600. package/src/email/notification-queue-store.ts +127 -0
  601. package/src/email/notification-repository-types.ts +101 -0
  602. package/src/email/notification-service.test.ts +178 -0
  603. package/src/email/notification-service.ts +265 -0
  604. package/src/email/notification-templates.test.ts +261 -0
  605. package/src/email/notification-templates.ts +727 -0
  606. package/src/email/notification-worker.test.ts +189 -0
  607. package/src/email/notification-worker.ts +133 -0
  608. package/src/email/require-verified.ts +65 -0
  609. package/src/email/resend-adapter.test.ts +253 -0
  610. package/src/email/resend-adapter.ts +157 -0
  611. package/src/email/templates.test.ts +217 -0
  612. package/src/email/templates.ts +469 -0
  613. package/src/email/verification.test.ts +185 -0
  614. package/src/email/verification.ts +110 -0
  615. package/src/index.ts +51 -0
  616. package/src/metering/aggregator.test.ts +239 -0
  617. package/src/metering/aggregator.ts +160 -0
  618. package/src/metering/dlq.test.ts +134 -0
  619. package/src/metering/dlq.ts +102 -0
  620. package/src/metering/drizzle-usage-summary-repository.ts +167 -0
  621. package/src/metering/emitter.test.ts +202 -0
  622. package/src/metering/emitter.ts +227 -0
  623. package/src/metering/index.ts +21 -0
  624. package/src/metering/load-test.bench.ts +130 -0
  625. package/src/metering/meter-event-repository.ts +87 -0
  626. package/src/metering/meter-repositories.test.ts +491 -0
  627. package/src/metering/metering.test.ts +1317 -0
  628. package/src/metering/reconciliation-cron.test.ts +202 -0
  629. package/src/metering/reconciliation-cron.ts +134 -0
  630. package/src/metering/reconciliation-repository.test.ts +196 -0
  631. package/src/metering/reconciliation-repository.ts +83 -0
  632. package/src/metering/types.ts +93 -0
  633. package/src/metering/wal.test.ts +222 -0
  634. package/src/metering/wal.ts +139 -0
  635. package/src/middleware/csrf.test.ts +178 -0
  636. package/src/middleware/csrf.ts +101 -0
  637. package/src/middleware/drizzle-rate-limit-repository.test.ts +97 -0
  638. package/src/middleware/drizzle-rate-limit-repository.ts +57 -0
  639. package/src/middleware/get-client-ip.test.ts +49 -0
  640. package/src/middleware/get-client-ip.ts +62 -0
  641. package/src/middleware/index.ts +12 -0
  642. package/src/middleware/rate-limit-repository.ts +22 -0
  643. package/src/middleware/rate-limit.test.ts +338 -0
  644. package/src/middleware/rate-limit.ts +169 -0
  645. package/src/security/credential-vault/audit-repository.test.ts +91 -0
  646. package/src/security/credential-vault/audit-repository.ts +64 -0
  647. package/src/security/credential-vault/credential-repository.test.ts +264 -0
  648. package/src/security/credential-vault/credential-repository.ts +233 -0
  649. package/src/security/credential-vault/index.ts +26 -0
  650. package/src/security/credential-vault/key-rotation.test.ts +139 -0
  651. package/src/security/credential-vault/key-rotation.ts +70 -0
  652. package/src/security/credential-vault/migrate-plaintext.test.ts +138 -0
  653. package/src/security/credential-vault/migrate-plaintext.ts +101 -0
  654. package/src/security/credential-vault/migration-check.test.ts +533 -0
  655. package/src/security/credential-vault/migration-check.ts +88 -0
  656. package/src/security/credential-vault/store.test.ts +569 -0
  657. package/src/security/credential-vault/store.ts +284 -0
  658. package/src/security/encryption.test.ts +114 -0
  659. package/src/security/encryption.ts +65 -0
  660. package/src/security/host-validation.test.ts +136 -0
  661. package/src/security/host-validation.ts +116 -0
  662. package/src/security/index.ts +59 -0
  663. package/src/security/key-audit.test.ts +57 -0
  664. package/src/security/key-audit.ts +45 -0
  665. package/src/security/key-injection.test.ts +131 -0
  666. package/src/security/key-injection.ts +71 -0
  667. package/src/security/key-validation.test.ts +111 -0
  668. package/src/security/key-validation.ts +84 -0
  669. package/src/security/redirect-allowlist.test.ts +70 -0
  670. package/src/security/redirect-allowlist.ts +35 -0
  671. package/src/security/tenant-keys/capability-settings-store.test.ts +98 -0
  672. package/src/security/tenant-keys/capability-settings-store.ts +53 -0
  673. package/src/security/tenant-keys/index.ts +10 -0
  674. package/src/security/tenant-keys/key-resolution-repository.test.ts +95 -0
  675. package/src/security/tenant-keys/key-resolution-repository.ts +31 -0
  676. package/src/security/tenant-keys/key-resolution.test.ts +173 -0
  677. package/src/security/tenant-keys/key-resolution.ts +87 -0
  678. package/src/security/tenant-keys/org-key-resolution.test.ts +217 -0
  679. package/src/security/tenant-keys/org-key-resolution.ts +76 -0
  680. package/src/security/tenant-keys/tenant-key-repository.test.ts +143 -0
  681. package/src/security/tenant-keys/tenant-key-repository.ts +130 -0
  682. package/src/security/types.ts +43 -0
  683. package/src/tenancy/drizzle-org-repository.ts +169 -0
  684. package/src/tenancy/index.ts +6 -0
  685. package/src/tenancy/org-member-repository.ts +159 -0
  686. package/src/tenancy/org-repository.test.ts +172 -0
  687. package/src/tenancy/org-service.test.ts +634 -0
  688. package/src/tenancy/org-service.ts +290 -0
  689. package/src/test/db.ts +97 -0
  690. package/src/trpc/index.ts +11 -0
  691. package/src/trpc/init.test.ts +196 -0
  692. package/src/trpc/init.ts +138 -0
  693. package/tsconfig.json +20 -0
  694. package/vitest.config.ts +8 -0
@@ -0,0 +1,559 @@
1
+ CREATE TYPE "public"."promotion_status" AS ENUM('draft', 'scheduled', 'active', 'paused', 'expired', 'cancelled');--> statement-breakpoint
2
+ CREATE TYPE "public"."promotion_type" AS ENUM('bonus_on_purchase', 'coupon_fixed', 'coupon_unique', 'batch_grant');--> statement-breakpoint
3
+ CREATE TYPE "public"."promotion_user_segment" AS ENUM('all', 'new_users', 'existing_users', 'tenant_list');--> statement-breakpoint
4
+ CREATE TYPE "public"."promotion_value_type" AS ENUM('flat_credits', 'percent_of_purchase');--> statement-breakpoint
5
+ CREATE TABLE "account_deletion_requests" (
6
+ "id" text PRIMARY KEY NOT NULL,
7
+ "tenant_id" text NOT NULL,
8
+ "requested_by" text NOT NULL,
9
+ "status" text DEFAULT 'pending' NOT NULL,
10
+ "delete_after" text NOT NULL,
11
+ "reason" text,
12
+ "cancel_reason" text,
13
+ "completed_at" text,
14
+ "deletion_summary" text,
15
+ "created_at" text DEFAULT (now()) NOT NULL,
16
+ "updated_at" text DEFAULT (now()) NOT NULL
17
+ );
18
+ --> statement-breakpoint
19
+ CREATE TABLE "account_export_requests" (
20
+ "id" text PRIMARY KEY NOT NULL,
21
+ "tenant_id" text NOT NULL,
22
+ "requested_by" text NOT NULL,
23
+ "status" text DEFAULT 'pending' NOT NULL,
24
+ "format" text DEFAULT 'json' NOT NULL,
25
+ "download_url" text,
26
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
27
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
28
+ );
29
+ --> statement-breakpoint
30
+ CREATE TABLE "admin_audit_log" (
31
+ "id" text PRIMARY KEY NOT NULL,
32
+ "admin_user" text NOT NULL,
33
+ "action" text NOT NULL,
34
+ "category" text NOT NULL,
35
+ "target_tenant" text,
36
+ "target_user" text,
37
+ "details" text DEFAULT '{}' NOT NULL,
38
+ "ip_address" text,
39
+ "user_agent" text,
40
+ "created_at" bigint DEFAULT (extract(epoch from now()) * 1000)::bigint NOT NULL,
41
+ "outcome" text
42
+ );
43
+ --> statement-breakpoint
44
+ CREATE TABLE "admin_users" (
45
+ "id" text PRIMARY KEY NOT NULL,
46
+ "email" text NOT NULL,
47
+ "name" text,
48
+ "tenant_id" text NOT NULL,
49
+ "status" text DEFAULT 'active' NOT NULL,
50
+ "role" text DEFAULT 'user' NOT NULL,
51
+ "credit_balance_cents" integer DEFAULT 0 NOT NULL,
52
+ "agent_count" integer DEFAULT 0 NOT NULL,
53
+ "last_seen" bigint,
54
+ "created_at" bigint NOT NULL,
55
+ CONSTRAINT "chk_admin_users_status" CHECK ("admin_users"."status" IN ('active', 'suspended', 'grace_period', 'dormant', 'banned')),
56
+ CONSTRAINT "chk_admin_users_role" CHECK ("admin_users"."role" IN ('platform_admin', 'tenant_admin', 'user'))
57
+ );
58
+ --> statement-breakpoint
59
+ CREATE TABLE "affiliate_codes" (
60
+ "tenant_id" text PRIMARY KEY NOT NULL,
61
+ "code" text NOT NULL,
62
+ "created_at" text DEFAULT (now()) NOT NULL,
63
+ CONSTRAINT "affiliate_codes_code_unique" UNIQUE("code")
64
+ );
65
+ --> statement-breakpoint
66
+ CREATE TABLE "affiliate_referrals" (
67
+ "id" text PRIMARY KEY NOT NULL,
68
+ "referrer_tenant_id" text NOT NULL,
69
+ "referred_tenant_id" text NOT NULL,
70
+ "code" text NOT NULL,
71
+ "signed_up_at" text DEFAULT (now()) NOT NULL,
72
+ "first_purchase_at" text,
73
+ "match_amount_cents" integer,
74
+ "matched_at" text,
75
+ "payout_suppressed" boolean DEFAULT false NOT NULL,
76
+ "suppression_reason" text,
77
+ "signup_ip" text,
78
+ "signup_email" text,
79
+ CONSTRAINT "affiliate_referrals_referred_tenant_id_unique" UNIQUE("referred_tenant_id")
80
+ );
81
+ --> statement-breakpoint
82
+ CREATE TABLE "affiliate_fraud_events" (
83
+ "id" text PRIMARY KEY NOT NULL,
84
+ "referral_id" text NOT NULL,
85
+ "referrer_tenant_id" text NOT NULL,
86
+ "referred_tenant_id" text NOT NULL,
87
+ "verdict" text NOT NULL,
88
+ "signals" text NOT NULL,
89
+ "signal_details" text NOT NULL,
90
+ "phase" text NOT NULL,
91
+ "created_at" text DEFAULT (now()) NOT NULL
92
+ );
93
+ --> statement-breakpoint
94
+ CREATE TABLE "coupon_codes" (
95
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
96
+ "promotion_id" uuid NOT NULL,
97
+ "code" text NOT NULL,
98
+ "assigned_tenant_id" text,
99
+ "assigned_email" text,
100
+ "redeemed_at" timestamp with time zone,
101
+ "redeemed_by_tenant_id" text,
102
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
103
+ CONSTRAINT "coupon_codes_code_unique" UNIQUE("code")
104
+ );
105
+ --> statement-breakpoint
106
+ CREATE TABLE "credit_auto_topup" (
107
+ "id" text PRIMARY KEY NOT NULL,
108
+ "tenant_id" text NOT NULL,
109
+ "amount_cents" integer NOT NULL,
110
+ "status" text NOT NULL,
111
+ "failure_reason" text,
112
+ "payment_reference" text,
113
+ "created_at" text DEFAULT (now()) NOT NULL
114
+ );
115
+ --> statement-breakpoint
116
+ CREATE TABLE "credit_auto_topup_settings" (
117
+ "tenant_id" text PRIMARY KEY NOT NULL,
118
+ "usage_enabled" boolean DEFAULT false NOT NULL,
119
+ "usage_threshold_cents" integer DEFAULT 100 NOT NULL,
120
+ "usage_topup_cents" integer DEFAULT 500 NOT NULL,
121
+ "usage_consecutive_failures" integer DEFAULT 0 NOT NULL,
122
+ "usage_charge_in_flight" boolean DEFAULT false NOT NULL,
123
+ "schedule_enabled" boolean DEFAULT false NOT NULL,
124
+ "schedule_amount_cents" integer DEFAULT 500 NOT NULL,
125
+ "schedule_interval_hours" integer DEFAULT 168 NOT NULL,
126
+ "schedule_next_at" text,
127
+ "schedule_consecutive_failures" integer DEFAULT 0 NOT NULL,
128
+ "created_at" text DEFAULT (now()) NOT NULL,
129
+ "updated_at" text DEFAULT (now()) NOT NULL
130
+ );
131
+ --> statement-breakpoint
132
+ CREATE TABLE "credit_balances" (
133
+ "tenant_id" text PRIMARY KEY NOT NULL,
134
+ "balance_credits" bigint DEFAULT 0 NOT NULL,
135
+ "last_updated" text DEFAULT (now()) NOT NULL
136
+ );
137
+ --> statement-breakpoint
138
+ CREATE TABLE "credit_transactions" (
139
+ "id" text PRIMARY KEY NOT NULL,
140
+ "tenant_id" text NOT NULL,
141
+ "amount_credits" bigint NOT NULL,
142
+ "balance_after_credits" bigint NOT NULL,
143
+ "type" text NOT NULL,
144
+ "description" text,
145
+ "reference_id" text,
146
+ "funding_source" text,
147
+ "attributed_user_id" text,
148
+ "created_at" text DEFAULT (now()) NOT NULL,
149
+ "expires_at" text,
150
+ "stripe_fingerprint" text,
151
+ CONSTRAINT "credit_transactions_reference_id_unique" UNIQUE("reference_id")
152
+ );
153
+ --> statement-breakpoint
154
+ CREATE TABLE "dividend_distributions" (
155
+ "id" text PRIMARY KEY NOT NULL,
156
+ "tenant_id" text NOT NULL,
157
+ "date" text NOT NULL,
158
+ "amount_cents" integer NOT NULL,
159
+ "pool_cents" integer NOT NULL,
160
+ "active_users" integer NOT NULL,
161
+ "created_at" text DEFAULT (now()) NOT NULL
162
+ );
163
+ --> statement-breakpoint
164
+ CREATE TABLE "email_notifications" (
165
+ "id" text PRIMARY KEY NOT NULL,
166
+ "tenant_id" text NOT NULL,
167
+ "email_type" text NOT NULL,
168
+ "sent_at" text DEFAULT (now()) NOT NULL,
169
+ "sent_date" text NOT NULL,
170
+ CONSTRAINT "uniq_email_per_day" UNIQUE("tenant_id","email_type","sent_date")
171
+ );
172
+ --> statement-breakpoint
173
+ CREATE TABLE "billing_period_summaries" (
174
+ "id" text PRIMARY KEY NOT NULL,
175
+ "tenant" text NOT NULL,
176
+ "capability" text NOT NULL,
177
+ "provider" text NOT NULL,
178
+ "event_count" integer NOT NULL,
179
+ "total_cost" bigint NOT NULL,
180
+ "total_charge" bigint NOT NULL,
181
+ "total_duration" integer DEFAULT 0 NOT NULL,
182
+ "period_start" bigint NOT NULL,
183
+ "period_end" bigint NOT NULL,
184
+ "updated_at" bigint NOT NULL
185
+ );
186
+ --> statement-breakpoint
187
+ CREATE TABLE "meter_events" (
188
+ "id" text PRIMARY KEY NOT NULL,
189
+ "tenant" text NOT NULL,
190
+ "cost" bigint NOT NULL,
191
+ "charge" bigint NOT NULL,
192
+ "capability" text NOT NULL,
193
+ "provider" text NOT NULL,
194
+ "timestamp" bigint NOT NULL,
195
+ "session_id" text,
196
+ "duration" integer,
197
+ "usage_units" real,
198
+ "usage_unit_type" text,
199
+ "tier" text,
200
+ "metadata" text
201
+ );
202
+ --> statement-breakpoint
203
+ CREATE TABLE "usage_summaries" (
204
+ "id" text PRIMARY KEY NOT NULL,
205
+ "tenant" text NOT NULL,
206
+ "capability" text NOT NULL,
207
+ "provider" text NOT NULL,
208
+ "event_count" integer NOT NULL,
209
+ "total_cost" bigint NOT NULL,
210
+ "total_charge" bigint NOT NULL,
211
+ "total_duration" integer DEFAULT 0 NOT NULL,
212
+ "window_start" bigint NOT NULL,
213
+ "window_end" bigint NOT NULL
214
+ );
215
+ --> statement-breakpoint
216
+ CREATE TABLE "notification_preferences" (
217
+ "tenant_id" text PRIMARY KEY NOT NULL,
218
+ "billing_low_balance" boolean DEFAULT true NOT NULL,
219
+ "billing_receipts" boolean DEFAULT true NOT NULL,
220
+ "billing_auto_topup" boolean DEFAULT true NOT NULL,
221
+ "agent_channel_disconnect" boolean DEFAULT true NOT NULL,
222
+ "agent_status_changes" boolean DEFAULT false NOT NULL,
223
+ "account_role_changes" boolean DEFAULT true NOT NULL,
224
+ "account_team_invites" boolean DEFAULT true NOT NULL,
225
+ "updated_at" bigint DEFAULT (extract(epoch from now()))::bigint NOT NULL
226
+ );
227
+ --> statement-breakpoint
228
+ CREATE TABLE "notification_queue" (
229
+ "id" text PRIMARY KEY NOT NULL,
230
+ "tenant_id" text NOT NULL,
231
+ "email_type" text NOT NULL,
232
+ "recipient_email" text NOT NULL,
233
+ "payload" text DEFAULT '{}' NOT NULL,
234
+ "status" text DEFAULT 'pending' NOT NULL,
235
+ "attempts" integer DEFAULT 0 NOT NULL,
236
+ "max_attempts" integer DEFAULT 3 NOT NULL,
237
+ "last_attempt_at" bigint,
238
+ "last_error" text,
239
+ "retry_after" bigint,
240
+ "created_at" bigint DEFAULT (extract(epoch from now()) * 1000)::bigint NOT NULL,
241
+ "sent_at" bigint
242
+ );
243
+ --> statement-breakpoint
244
+ CREATE TABLE "org_memberships" (
245
+ "org_tenant_id" text NOT NULL,
246
+ "member_tenant_id" text NOT NULL,
247
+ "created_at" bigint NOT NULL,
248
+ CONSTRAINT "org_memberships_org_tenant_id_member_tenant_id_pk" PRIMARY KEY("org_tenant_id","member_tenant_id")
249
+ );
250
+ --> statement-breakpoint
251
+ CREATE TABLE "organization_invites" (
252
+ "id" text PRIMARY KEY NOT NULL,
253
+ "org_id" text NOT NULL,
254
+ "email" text NOT NULL,
255
+ "role" text DEFAULT 'member' NOT NULL,
256
+ "invited_by" text NOT NULL,
257
+ "token" text NOT NULL,
258
+ "expires_at" bigint NOT NULL,
259
+ "created_at" bigint DEFAULT (extract(epoch from now()) * 1000)::bigint NOT NULL,
260
+ CONSTRAINT "organization_invites_token_unique" UNIQUE("token")
261
+ );
262
+ --> statement-breakpoint
263
+ CREATE TABLE "organization_members" (
264
+ "id" text PRIMARY KEY NOT NULL,
265
+ "org_id" text NOT NULL,
266
+ "user_id" text NOT NULL,
267
+ "role" text DEFAULT 'member' NOT NULL,
268
+ "joined_at" bigint DEFAULT (extract(epoch from now()) * 1000)::bigint NOT NULL
269
+ );
270
+ --> statement-breakpoint
271
+ CREATE TABLE "payram_charges" (
272
+ "reference_id" text PRIMARY KEY NOT NULL,
273
+ "tenant_id" text NOT NULL,
274
+ "amount_usd_cents" integer NOT NULL,
275
+ "status" text DEFAULT 'OPEN' NOT NULL,
276
+ "currency" text,
277
+ "filled_amount" text,
278
+ "created_at" text DEFAULT (now()) NOT NULL,
279
+ "updated_at" text DEFAULT (now()) NOT NULL,
280
+ "credited_at" text
281
+ );
282
+ --> statement-breakpoint
283
+ CREATE TABLE "platform_api_keys" (
284
+ "id" text PRIMARY KEY NOT NULL,
285
+ "key_hash" text NOT NULL,
286
+ "user_id" text NOT NULL,
287
+ "roles" text NOT NULL,
288
+ "label" text DEFAULT '' NOT NULL,
289
+ "expires_at" bigint,
290
+ "revoked_at" bigint,
291
+ "created_at" bigint NOT NULL
292
+ );
293
+ --> statement-breakpoint
294
+ CREATE TABLE "promotion_redemptions" (
295
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
296
+ "promotion_id" uuid NOT NULL,
297
+ "tenant_id" text NOT NULL,
298
+ "coupon_code_id" uuid,
299
+ "credits_granted" integer NOT NULL,
300
+ "credit_transaction_id" text NOT NULL,
301
+ "purchase_amount_credits" integer,
302
+ "redeemed_at" timestamp with time zone DEFAULT now() NOT NULL
303
+ );
304
+ --> statement-breakpoint
305
+ CREATE TABLE "promotions" (
306
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
307
+ "name" text NOT NULL,
308
+ "type" "promotion_type" NOT NULL,
309
+ "status" "promotion_status" DEFAULT 'draft' NOT NULL,
310
+ "starts_at" timestamp with time zone,
311
+ "ends_at" timestamp with time zone,
312
+ "value_type" "promotion_value_type" NOT NULL,
313
+ "value_amount" integer NOT NULL,
314
+ "max_value_credits" integer,
315
+ "first_purchase_only" boolean DEFAULT false NOT NULL,
316
+ "min_purchase_credits" integer,
317
+ "user_segment" "promotion_user_segment" DEFAULT 'all' NOT NULL,
318
+ "eligible_tenant_ids" text[],
319
+ "total_use_limit" integer,
320
+ "per_user_limit" integer DEFAULT 1 NOT NULL,
321
+ "budget_credits" integer,
322
+ "total_uses" integer DEFAULT 0 NOT NULL,
323
+ "total_credits_granted" integer DEFAULT 0 NOT NULL,
324
+ "coupon_code" text,
325
+ "coupon_batch_id" uuid,
326
+ "created_by" text NOT NULL,
327
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
328
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
329
+ "notes" text,
330
+ CONSTRAINT "promotions_coupon_code_unique" UNIQUE("coupon_code")
331
+ );
332
+ --> statement-breakpoint
333
+ CREATE TABLE "provider_credentials" (
334
+ "id" text PRIMARY KEY NOT NULL,
335
+ "provider" text NOT NULL,
336
+ "key_name" text NOT NULL,
337
+ "encrypted_value" text NOT NULL,
338
+ "auth_type" text NOT NULL,
339
+ "auth_header" text,
340
+ "is_active" boolean DEFAULT true NOT NULL,
341
+ "last_validated" text,
342
+ "created_at" text DEFAULT (now()) NOT NULL,
343
+ "rotated_at" text,
344
+ "created_by" text NOT NULL
345
+ );
346
+ --> statement-breakpoint
347
+ CREATE TABLE "rate_limit_entries" (
348
+ "key" text NOT NULL,
349
+ "scope" text NOT NULL,
350
+ "count" integer DEFAULT 0 NOT NULL,
351
+ "window_start" bigint NOT NULL,
352
+ CONSTRAINT "rate_limit_entries_key_scope_pk" PRIMARY KEY("key","scope")
353
+ );
354
+ --> statement-breakpoint
355
+ CREATE TABLE "secret_audit_log" (
356
+ "id" text PRIMARY KEY NOT NULL,
357
+ "credential_id" text NOT NULL,
358
+ "accessed_at" bigint DEFAULT (extract(epoch from now()) * 1000)::bigint NOT NULL,
359
+ "accessed_by" text NOT NULL,
360
+ "action" text NOT NULL,
361
+ "ip" text
362
+ );
363
+ --> statement-breakpoint
364
+ CREATE TABLE "session_usage" (
365
+ "id" text PRIMARY KEY NOT NULL,
366
+ "session_id" text NOT NULL,
367
+ "user_id" text,
368
+ "page" text,
369
+ "input_tokens" integer DEFAULT 0 NOT NULL,
370
+ "output_tokens" integer DEFAULT 0 NOT NULL,
371
+ "cached_tokens" integer DEFAULT 0 NOT NULL,
372
+ "cache_write_tokens" integer DEFAULT 0 NOT NULL,
373
+ "model" text NOT NULL,
374
+ "cost_usd" double precision DEFAULT 0 NOT NULL,
375
+ "created_at" bigint NOT NULL
376
+ );
377
+ --> statement-breakpoint
378
+ CREATE TABLE "tenant_spending_limits" (
379
+ "tenant_id" text PRIMARY KEY NOT NULL,
380
+ "global_alert_at" real,
381
+ "global_hard_cap" real,
382
+ "per_capability_json" text,
383
+ "updated_at" bigint NOT NULL
384
+ );
385
+ --> statement-breakpoint
386
+ CREATE TABLE "tenant_addons" (
387
+ "tenant_id" text NOT NULL,
388
+ "addon_key" text NOT NULL,
389
+ "enabled_at" timestamp with time zone DEFAULT now() NOT NULL,
390
+ CONSTRAINT "tenant_addons_tenant_id_addon_key_pk" PRIMARY KEY("tenant_id","addon_key")
391
+ );
392
+ --> statement-breakpoint
393
+ CREATE TABLE "tenant_api_keys" (
394
+ "id" text PRIMARY KEY NOT NULL,
395
+ "tenant_id" text NOT NULL,
396
+ "provider" text NOT NULL,
397
+ "label" text DEFAULT '' NOT NULL,
398
+ "encrypted_key" text NOT NULL,
399
+ "created_at" bigint NOT NULL,
400
+ "updated_at" bigint NOT NULL
401
+ );
402
+ --> statement-breakpoint
403
+ CREATE TABLE "tenant_capability_settings" (
404
+ "tenant_id" text NOT NULL,
405
+ "capability" text NOT NULL,
406
+ "mode" text DEFAULT 'hosted' NOT NULL,
407
+ "updated_at" bigint NOT NULL,
408
+ CONSTRAINT "tenant_capability_settings_tenant_id_capability_pk" PRIMARY KEY("tenant_id","capability")
409
+ );
410
+ --> statement-breakpoint
411
+ CREATE TABLE "stripe_usage_reports" (
412
+ "id" text PRIMARY KEY NOT NULL,
413
+ "tenant" text NOT NULL,
414
+ "capability" text NOT NULL,
415
+ "provider" text NOT NULL,
416
+ "period_start" bigint NOT NULL,
417
+ "period_end" bigint NOT NULL,
418
+ "event_name" text NOT NULL,
419
+ "value_cents" integer NOT NULL,
420
+ "reported_at" bigint NOT NULL
421
+ );
422
+ --> statement-breakpoint
423
+ CREATE TABLE "tenant_customers" (
424
+ "tenant" text PRIMARY KEY NOT NULL,
425
+ "processor_customer_id" text NOT NULL,
426
+ "processor" text DEFAULT 'stripe' NOT NULL,
427
+ "tier" text DEFAULT 'free' NOT NULL,
428
+ "billing_hold" integer DEFAULT 0 NOT NULL,
429
+ "inference_mode" text DEFAULT 'byok' NOT NULL,
430
+ "created_at" bigint NOT NULL,
431
+ "updated_at" bigint NOT NULL,
432
+ CONSTRAINT "tenant_customers_processor_customer_id_unique" UNIQUE("processor_customer_id")
433
+ );
434
+ --> statement-breakpoint
435
+ CREATE TABLE "tenants" (
436
+ "id" text PRIMARY KEY NOT NULL,
437
+ "name" text NOT NULL,
438
+ "slug" text,
439
+ "type" text NOT NULL,
440
+ "owner_id" text NOT NULL,
441
+ "billing_email" text,
442
+ "created_at" bigint DEFAULT (extract(epoch from now()) * 1000)::bigint NOT NULL,
443
+ CONSTRAINT "tenants_slug_unique" UNIQUE("slug"),
444
+ CONSTRAINT "chk_tenants_type" CHECK ("tenants"."type" IN ('personal', 'org'))
445
+ );
446
+ --> statement-breakpoint
447
+ CREATE TABLE "user_roles" (
448
+ "user_id" text NOT NULL,
449
+ "tenant_id" text NOT NULL,
450
+ "role" text NOT NULL,
451
+ "granted_by" text,
452
+ "granted_at" bigint NOT NULL,
453
+ CONSTRAINT "user_roles_user_id_tenant_id_pk" PRIMARY KEY("user_id","tenant_id")
454
+ );
455
+ --> statement-breakpoint
456
+ CREATE TABLE "webhook_seen_events" (
457
+ "event_id" text NOT NULL,
458
+ "source" text NOT NULL,
459
+ "seen_at" bigint NOT NULL,
460
+ CONSTRAINT "webhook_seen_events_event_id_source_pk" PRIMARY KEY("event_id","source")
461
+ );
462
+ --> statement-breakpoint
463
+ ALTER TABLE "coupon_codes" ADD CONSTRAINT "coupon_codes_promotion_id_promotions_id_fk" FOREIGN KEY ("promotion_id") REFERENCES "public"."promotions"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
464
+ ALTER TABLE "promotion_redemptions" ADD CONSTRAINT "promotion_redemptions_promotion_id_promotions_id_fk" FOREIGN KEY ("promotion_id") REFERENCES "public"."promotions"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
465
+ ALTER TABLE "promotion_redemptions" ADD CONSTRAINT "promotion_redemptions_coupon_code_id_coupon_codes_id_fk" FOREIGN KEY ("coupon_code_id") REFERENCES "public"."coupon_codes"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
466
+ CREATE INDEX "idx_acct_del_tenant" ON "account_deletion_requests" USING btree ("tenant_id");--> statement-breakpoint
467
+ CREATE INDEX "idx_acct_del_status" ON "account_deletion_requests" USING btree ("status");--> statement-breakpoint
468
+ CREATE INDEX "idx_acct_del_delete_after" ON "account_deletion_requests" USING btree ("status","delete_after");--> statement-breakpoint
469
+ CREATE INDEX "idx_acct_export_tenant" ON "account_export_requests" USING btree ("tenant_id");--> statement-breakpoint
470
+ CREATE INDEX "idx_acct_export_status" ON "account_export_requests" USING btree ("status");--> statement-breakpoint
471
+ CREATE INDEX "idx_admin_audit_admin" ON "admin_audit_log" USING btree ("admin_user","created_at");--> statement-breakpoint
472
+ CREATE INDEX "idx_admin_audit_tenant" ON "admin_audit_log" USING btree ("target_tenant","created_at");--> statement-breakpoint
473
+ CREATE INDEX "idx_admin_audit_action" ON "admin_audit_log" USING btree ("action","created_at");--> statement-breakpoint
474
+ CREATE INDEX "idx_admin_users_email" ON "admin_users" USING btree ("email");--> statement-breakpoint
475
+ CREATE INDEX "idx_admin_users_tenant" ON "admin_users" USING btree ("tenant_id");--> statement-breakpoint
476
+ CREATE INDEX "idx_admin_users_status" ON "admin_users" USING btree ("status");--> statement-breakpoint
477
+ CREATE INDEX "idx_admin_users_role" ON "admin_users" USING btree ("role");--> statement-breakpoint
478
+ CREATE INDEX "idx_admin_users_created" ON "admin_users" USING btree ("created_at");--> statement-breakpoint
479
+ CREATE INDEX "idx_admin_users_last_seen" ON "admin_users" USING btree ("last_seen");--> statement-breakpoint
480
+ CREATE INDEX "idx_affiliate_ref_referrer" ON "affiliate_referrals" USING btree ("referrer_tenant_id");--> statement-breakpoint
481
+ CREATE INDEX "idx_affiliate_ref_code" ON "affiliate_referrals" USING btree ("code");--> statement-breakpoint
482
+ CREATE INDEX "idx_fraud_referrer" ON "affiliate_fraud_events" USING btree ("referrer_tenant_id");--> statement-breakpoint
483
+ CREATE INDEX "idx_fraud_referred" ON "affiliate_fraud_events" USING btree ("referred_tenant_id");--> statement-breakpoint
484
+ CREATE INDEX "idx_fraud_verdict" ON "affiliate_fraud_events" USING btree ("verdict");--> statement-breakpoint
485
+ CREATE UNIQUE INDEX "uq_fraud_referral_phase" ON "affiliate_fraud_events" USING btree ("referral_id","phase");--> statement-breakpoint
486
+ CREATE INDEX "coupon_codes_promotion_idx" ON "coupon_codes" USING btree ("promotion_id");--> statement-breakpoint
487
+ CREATE INDEX "coupon_codes_assigned_tenant_idx" ON "coupon_codes" USING btree ("assigned_tenant_id");--> statement-breakpoint
488
+ CREATE INDEX "idx_auto_topup_tenant" ON "credit_auto_topup" USING btree ("tenant_id");--> statement-breakpoint
489
+ CREATE INDEX "idx_auto_topup_status" ON "credit_auto_topup" USING btree ("status");--> statement-breakpoint
490
+ CREATE INDEX "idx_auto_topup_created" ON "credit_auto_topup" USING btree ("created_at");--> statement-breakpoint
491
+ CREATE INDEX "idx_auto_topup_tenant_created" ON "credit_auto_topup" USING btree ("tenant_id","created_at");--> statement-breakpoint
492
+ CREATE INDEX "idx_auto_topup_settings_usage" ON "credit_auto_topup_settings" USING btree ("usage_enabled");--> statement-breakpoint
493
+ CREATE INDEX "idx_auto_topup_settings_schedule" ON "credit_auto_topup_settings" USING btree ("schedule_enabled","schedule_next_at");--> statement-breakpoint
494
+ CREATE INDEX "idx_credit_tx_tenant" ON "credit_transactions" USING btree ("tenant_id");--> statement-breakpoint
495
+ CREATE INDEX "idx_credit_tx_type" ON "credit_transactions" USING btree ("type");--> statement-breakpoint
496
+ CREATE INDEX "idx_credit_tx_ref" ON "credit_transactions" USING btree ("reference_id");--> statement-breakpoint
497
+ CREATE INDEX "idx_credit_tx_created" ON "credit_transactions" USING btree ("created_at");--> statement-breakpoint
498
+ CREATE INDEX "idx_credit_tx_tenant_created" ON "credit_transactions" USING btree ("tenant_id","created_at");--> statement-breakpoint
499
+ CREATE INDEX "idx_credit_tx_expires" ON "credit_transactions" USING btree ("expires_at");--> statement-breakpoint
500
+ CREATE INDEX "idx_credit_tx_fingerprint" ON "credit_transactions" USING btree ("stripe_fingerprint") WHERE "credit_transactions"."stripe_fingerprint" IS NOT NULL;--> statement-breakpoint
501
+ CREATE INDEX "idx_dividend_dist_tenant" ON "dividend_distributions" USING btree ("tenant_id");--> statement-breakpoint
502
+ CREATE INDEX "idx_dividend_dist_date" ON "dividend_distributions" USING btree ("date");--> statement-breakpoint
503
+ CREATE INDEX "idx_dividend_dist_tenant_date" ON "dividend_distributions" USING btree ("tenant_id","date");--> statement-breakpoint
504
+ CREATE INDEX "idx_email_notif_tenant" ON "email_notifications" USING btree ("tenant_id");--> statement-breakpoint
505
+ CREATE INDEX "idx_email_notif_type" ON "email_notifications" USING btree ("email_type");--> statement-breakpoint
506
+ CREATE UNIQUE INDEX "idx_billing_period_unique" ON "billing_period_summaries" USING btree ("tenant","capability","provider","period_start");--> statement-breakpoint
507
+ CREATE INDEX "idx_billing_period_tenant" ON "billing_period_summaries" USING btree ("tenant","period_start");--> statement-breakpoint
508
+ CREATE INDEX "idx_billing_period_window" ON "billing_period_summaries" USING btree ("period_start","period_end");--> statement-breakpoint
509
+ CREATE INDEX "idx_meter_tenant" ON "meter_events" USING btree ("tenant");--> statement-breakpoint
510
+ CREATE INDEX "idx_meter_timestamp" ON "meter_events" USING btree ("timestamp");--> statement-breakpoint
511
+ CREATE INDEX "idx_meter_capability" ON "meter_events" USING btree ("capability");--> statement-breakpoint
512
+ CREATE INDEX "idx_meter_session" ON "meter_events" USING btree ("session_id");--> statement-breakpoint
513
+ CREATE INDEX "idx_meter_tenant_timestamp" ON "meter_events" USING btree ("tenant","timestamp");--> statement-breakpoint
514
+ CREATE INDEX "idx_meter_tier" ON "meter_events" USING btree ("tier");--> statement-breakpoint
515
+ CREATE INDEX "idx_summary_tenant" ON "usage_summaries" USING btree ("tenant","window_start");--> statement-breakpoint
516
+ CREATE INDEX "idx_summary_window" ON "usage_summaries" USING btree ("window_start","window_end");--> statement-breakpoint
517
+ CREATE INDEX "idx_notif_queue_tenant" ON "notification_queue" USING btree ("tenant_id");--> statement-breakpoint
518
+ CREATE INDEX "idx_notif_queue_status" ON "notification_queue" USING btree ("status");--> statement-breakpoint
519
+ CREATE INDEX "idx_notif_queue_type" ON "notification_queue" USING btree ("email_type");--> statement-breakpoint
520
+ CREATE INDEX "idx_notif_queue_retry" ON "notification_queue" USING btree ("status","retry_after");--> statement-breakpoint
521
+ CREATE UNIQUE INDEX "idx_org_memberships_member_unique" ON "org_memberships" USING btree ("member_tenant_id");--> statement-breakpoint
522
+ CREATE INDEX "idx_org_memberships_org" ON "org_memberships" USING btree ("org_tenant_id");--> statement-breakpoint
523
+ CREATE INDEX "idx_org_invites_org_id" ON "organization_invites" USING btree ("org_id");--> statement-breakpoint
524
+ CREATE INDEX "idx_org_invites_token" ON "organization_invites" USING btree ("token");--> statement-breakpoint
525
+ CREATE INDEX "idx_org_members_org_id" ON "organization_members" USING btree ("org_id");--> statement-breakpoint
526
+ CREATE INDEX "idx_org_members_user_id" ON "organization_members" USING btree ("user_id");--> statement-breakpoint
527
+ CREATE UNIQUE INDEX "org_members_org_user_unique" ON "organization_members" USING btree ("org_id","user_id");--> statement-breakpoint
528
+ CREATE INDEX "idx_payram_charges_tenant" ON "payram_charges" USING btree ("tenant_id");--> statement-breakpoint
529
+ CREATE INDEX "idx_payram_charges_status" ON "payram_charges" USING btree ("status");--> statement-breakpoint
530
+ CREATE INDEX "idx_payram_charges_created" ON "payram_charges" USING btree ("created_at");--> statement-breakpoint
531
+ CREATE UNIQUE INDEX "idx_platform_api_keys_hash" ON "platform_api_keys" USING btree ("key_hash");--> statement-breakpoint
532
+ CREATE INDEX "idx_platform_api_keys_user" ON "platform_api_keys" USING btree ("user_id");--> statement-breakpoint
533
+ CREATE INDEX "promotion_redemptions_promotion_idx" ON "promotion_redemptions" USING btree ("promotion_id");--> statement-breakpoint
534
+ CREATE INDEX "promotion_redemptions_tenant_idx" ON "promotion_redemptions" USING btree ("tenant_id");--> statement-breakpoint
535
+ CREATE INDEX "promotions_status_idx" ON "promotions" USING btree ("status");--> statement-breakpoint
536
+ CREATE INDEX "promotions_coupon_code_idx" ON "promotions" USING btree ("coupon_code");--> statement-breakpoint
537
+ CREATE INDEX "idx_provider_creds_provider" ON "provider_credentials" USING btree ("provider");--> statement-breakpoint
538
+ CREATE INDEX "idx_provider_creds_active" ON "provider_credentials" USING btree ("provider","is_active");--> statement-breakpoint
539
+ CREATE INDEX "idx_provider_creds_created_by" ON "provider_credentials" USING btree ("created_by");--> statement-breakpoint
540
+ CREATE INDEX "idx_rate_limit_window" ON "rate_limit_entries" USING btree ("window_start");--> statement-breakpoint
541
+ CREATE INDEX "idx_secret_audit_credential" ON "secret_audit_log" USING btree ("credential_id","accessed_at");--> statement-breakpoint
542
+ CREATE INDEX "idx_secret_audit_accessed_by" ON "secret_audit_log" USING btree ("accessed_by");--> statement-breakpoint
543
+ CREATE INDEX "idx_session_usage_session" ON "session_usage" USING btree ("session_id");--> statement-breakpoint
544
+ CREATE INDEX "idx_session_usage_user" ON "session_usage" USING btree ("user_id");--> statement-breakpoint
545
+ CREATE INDEX "idx_session_usage_created" ON "session_usage" USING btree ("created_at");--> statement-breakpoint
546
+ CREATE INDEX "idx_session_usage_page" ON "session_usage" USING btree ("page");--> statement-breakpoint
547
+ CREATE INDEX "idx_tenant_addons_tenant" ON "tenant_addons" USING btree ("tenant_id");--> statement-breakpoint
548
+ CREATE UNIQUE INDEX "idx_tenant_keys_tenant_provider" ON "tenant_api_keys" USING btree ("tenant_id","provider");--> statement-breakpoint
549
+ CREATE INDEX "idx_tenant_keys_tenant" ON "tenant_api_keys" USING btree ("tenant_id");--> statement-breakpoint
550
+ CREATE INDEX "idx_tenant_keys_provider" ON "tenant_api_keys" USING btree ("provider");--> statement-breakpoint
551
+ CREATE UNIQUE INDEX "idx_stripe_usage_unique" ON "stripe_usage_reports" USING btree ("tenant","capability","provider","period_start");--> statement-breakpoint
552
+ CREATE INDEX "idx_stripe_usage_tenant" ON "stripe_usage_reports" USING btree ("tenant","reported_at");--> statement-breakpoint
553
+ CREATE INDEX "idx_tenant_customers_processor" ON "tenant_customers" USING btree ("processor_customer_id");--> statement-breakpoint
554
+ CREATE INDEX "idx_tenants_slug" ON "tenants" USING btree ("slug");--> statement-breakpoint
555
+ CREATE INDEX "idx_tenants_owner" ON "tenants" USING btree ("owner_id");--> statement-breakpoint
556
+ CREATE INDEX "idx_tenants_type" ON "tenants" USING btree ("type");--> statement-breakpoint
557
+ CREATE INDEX "idx_user_roles_tenant" ON "user_roles" USING btree ("tenant_id");--> statement-breakpoint
558
+ CREATE INDEX "idx_user_roles_role" ON "user_roles" USING btree ("role");--> statement-breakpoint
559
+ CREATE INDEX "idx_webhook_seen_expires" ON "webhook_seen_events" USING btree ("seen_at");