@intelligo-dev/core 1.0.0-beta.1

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 (254) hide show
  1. package/LICENSE +201 -0
  2. package/dist/conversations/errors.d.ts +31 -0
  3. package/dist/conversations/errors.d.ts.map +1 -0
  4. package/dist/conversations/errors.js +25 -0
  5. package/dist/conversations/errors.js.map +1 -0
  6. package/dist/conversations/index.d.ts +13 -0
  7. package/dist/conversations/index.d.ts.map +1 -0
  8. package/dist/conversations/index.js +12 -0
  9. package/dist/conversations/index.js.map +1 -0
  10. package/dist/conversations/service.d.ts +132 -0
  11. package/dist/conversations/service.d.ts.map +1 -0
  12. package/dist/conversations/service.js +347 -0
  13. package/dist/conversations/service.js.map +1 -0
  14. package/dist/conversations/types.d.ts +10 -0
  15. package/dist/conversations/types.d.ts.map +1 -0
  16. package/dist/conversations/types.js +5 -0
  17. package/dist/conversations/types.js.map +1 -0
  18. package/dist/db/client.d.ts +19 -0
  19. package/dist/db/client.d.ts.map +1 -0
  20. package/dist/db/client.js +52 -0
  21. package/dist/db/client.js.map +1 -0
  22. package/dist/db/index.d.ts +4 -0
  23. package/dist/db/index.d.ts.map +1 -0
  24. package/dist/db/index.js +8 -0
  25. package/dist/db/index.js.map +1 -0
  26. package/dist/db/schema/agents.d.ts +400 -0
  27. package/dist/db/schema/agents.d.ts.map +1 -0
  28. package/dist/db/schema/agents.js +39 -0
  29. package/dist/db/schema/agents.js.map +1 -0
  30. package/dist/db/schema/ai.d.ts +2222 -0
  31. package/dist/db/schema/ai.d.ts.map +1 -0
  32. package/dist/db/schema/ai.js +313 -0
  33. package/dist/db/schema/ai.js.map +1 -0
  34. package/dist/db/schema/auth.d.ts +1222 -0
  35. package/dist/db/schema/auth.d.ts.map +1 -0
  36. package/dist/db/schema/auth.js +162 -0
  37. package/dist/db/schema/auth.js.map +1 -0
  38. package/dist/db/schema/billing.d.ts +1199 -0
  39. package/dist/db/schema/billing.d.ts.map +1 -0
  40. package/dist/db/schema/billing.js +150 -0
  41. package/dist/db/schema/billing.js.map +1 -0
  42. package/dist/db/schema/feature-flags.d.ts +143 -0
  43. package/dist/db/schema/feature-flags.d.ts.map +1 -0
  44. package/dist/db/schema/feature-flags.js +25 -0
  45. package/dist/db/schema/feature-flags.js.map +1 -0
  46. package/dist/db/schema/identity.d.ts +1295 -0
  47. package/dist/db/schema/identity.d.ts.map +1 -0
  48. package/dist/db/schema/identity.js +258 -0
  49. package/dist/db/schema/identity.js.map +1 -0
  50. package/dist/db/schema/index.d.ts +16 -0
  51. package/dist/db/schema/index.d.ts.map +1 -0
  52. package/dist/db/schema/index.js +43 -0
  53. package/dist/db/schema/index.js.map +1 -0
  54. package/dist/db/schema/notifications.d.ts +182 -0
  55. package/dist/db/schema/notifications.d.ts.map +1 -0
  56. package/dist/db/schema/notifications.js +38 -0
  57. package/dist/db/schema/notifications.js.map +1 -0
  58. package/dist/db/schema/rag.d.ts +171 -0
  59. package/dist/db/schema/rag.d.ts.map +1 -0
  60. package/dist/db/schema/rag.js +42 -0
  61. package/dist/db/schema/rag.js.map +1 -0
  62. package/dist/db/schema/usage.d.ts +1193 -0
  63. package/dist/db/schema/usage.d.ts.map +1 -0
  64. package/dist/db/schema/usage.js +224 -0
  65. package/dist/db/schema/usage.js.map +1 -0
  66. package/dist/db/validate.d.ts +19 -0
  67. package/dist/db/validate.d.ts.map +1 -0
  68. package/dist/db/validate.js +58 -0
  69. package/dist/db/validate.js.map +1 -0
  70. package/dist/db/workspace-queries.d.ts +75 -0
  71. package/dist/db/workspace-queries.d.ts.map +1 -0
  72. package/dist/db/workspace-queries.js +78 -0
  73. package/dist/db/workspace-queries.js.map +1 -0
  74. package/dist/documents/classifier.d.ts +31 -0
  75. package/dist/documents/classifier.d.ts.map +1 -0
  76. package/dist/documents/classifier.js +41 -0
  77. package/dist/documents/classifier.js.map +1 -0
  78. package/dist/documents/errors.d.ts +32 -0
  79. package/dist/documents/errors.d.ts.map +1 -0
  80. package/dist/documents/errors.js +27 -0
  81. package/dist/documents/errors.js.map +1 -0
  82. package/dist/documents/index.d.ts +14 -0
  83. package/dist/documents/index.d.ts.map +1 -0
  84. package/dist/documents/index.js +13 -0
  85. package/dist/documents/index.js.map +1 -0
  86. package/dist/documents/service.d.ts +54 -0
  87. package/dist/documents/service.d.ts.map +1 -0
  88. package/dist/documents/service.js +146 -0
  89. package/dist/documents/service.js.map +1 -0
  90. package/dist/documents/types.d.ts +27 -0
  91. package/dist/documents/types.d.ts.map +1 -0
  92. package/dist/documents/types.js +5 -0
  93. package/dist/documents/types.js.map +1 -0
  94. package/dist/email/index.d.ts +5 -0
  95. package/dist/email/index.d.ts.map +1 -0
  96. package/dist/email/index.js +5 -0
  97. package/dist/email/index.js.map +1 -0
  98. package/dist/email/provider.d.ts +68 -0
  99. package/dist/email/provider.d.ts.map +1 -0
  100. package/dist/email/provider.js +199 -0
  101. package/dist/email/provider.js.map +1 -0
  102. package/dist/email/send.d.ts +47 -0
  103. package/dist/email/send.d.ts.map +1 -0
  104. package/dist/email/send.js +110 -0
  105. package/dist/email/send.js.map +1 -0
  106. package/dist/email/senders.d.ts +93 -0
  107. package/dist/email/senders.d.ts.map +1 -0
  108. package/dist/email/senders.js +232 -0
  109. package/dist/email/senders.js.map +1 -0
  110. package/dist/email/templates/base-layout.d.ts +7 -0
  111. package/dist/email/templates/base-layout.d.ts.map +1 -0
  112. package/dist/email/templates/base-layout.js +69 -0
  113. package/dist/email/templates/base-layout.js.map +1 -0
  114. package/dist/email/templates/index.d.ts +11 -0
  115. package/dist/email/templates/index.d.ts.map +1 -0
  116. package/dist/email/templates/index.js +17 -0
  117. package/dist/email/templates/index.js.map +1 -0
  118. package/dist/email/templates/password-reset.d.ts +7 -0
  119. package/dist/email/templates/password-reset.d.ts.map +1 -0
  120. package/dist/email/templates/password-reset.js +59 -0
  121. package/dist/email/templates/password-reset.js.map +1 -0
  122. package/dist/email/templates/payment-failed.d.ts +8 -0
  123. package/dist/email/templates/payment-failed.d.ts.map +1 -0
  124. package/dist/email/templates/payment-failed.js +62 -0
  125. package/dist/email/templates/payment-failed.js.map +1 -0
  126. package/dist/email/templates/quota-warning.d.ts +11 -0
  127. package/dist/email/templates/quota-warning.d.ts.map +1 -0
  128. package/dist/email/templates/quota-warning.js +82 -0
  129. package/dist/email/templates/quota-warning.js.map +1 -0
  130. package/dist/email/templates/subscription-confirmed.d.ts +9 -0
  131. package/dist/email/templates/subscription-confirmed.d.ts.map +1 -0
  132. package/dist/email/templates/subscription-confirmed.js +72 -0
  133. package/dist/email/templates/subscription-confirmed.js.map +1 -0
  134. package/dist/email/templates/trial-expiry.d.ts +9 -0
  135. package/dist/email/templates/trial-expiry.d.ts.map +1 -0
  136. package/dist/email/templates/trial-expiry.js +86 -0
  137. package/dist/email/templates/trial-expiry.js.map +1 -0
  138. package/dist/email/templates/trial-warning.d.ts +11 -0
  139. package/dist/email/templates/trial-warning.d.ts.map +1 -0
  140. package/dist/email/templates/trial-warning.js +70 -0
  141. package/dist/email/templates/trial-warning.js.map +1 -0
  142. package/dist/email/templates/verify-email.d.ts +7 -0
  143. package/dist/email/templates/verify-email.d.ts.map +1 -0
  144. package/dist/email/templates/verify-email.js +59 -0
  145. package/dist/email/templates/verify-email.js.map +1 -0
  146. package/dist/email/templates/welcome.d.ts +7 -0
  147. package/dist/email/templates/welcome.d.ts.map +1 -0
  148. package/dist/email/templates/welcome.js +51 -0
  149. package/dist/email/templates/welcome.js.map +1 -0
  150. package/dist/email/templates/workspace-invitation.d.ts +10 -0
  151. package/dist/email/templates/workspace-invitation.d.ts.map +1 -0
  152. package/dist/email/templates/workspace-invitation.js +79 -0
  153. package/dist/email/templates/workspace-invitation.js.map +1 -0
  154. package/dist/env.d.ts +21 -0
  155. package/dist/env.d.ts.map +1 -0
  156. package/dist/env.js +129 -0
  157. package/dist/env.js.map +1 -0
  158. package/dist/identity/audit.d.ts +39 -0
  159. package/dist/identity/audit.d.ts.map +1 -0
  160. package/dist/identity/audit.js +51 -0
  161. package/dist/identity/audit.js.map +1 -0
  162. package/dist/identity/errors.d.ts +32 -0
  163. package/dist/identity/errors.d.ts.map +1 -0
  164. package/dist/identity/errors.js +25 -0
  165. package/dist/identity/errors.js.map +1 -0
  166. package/dist/identity/index.d.ts +16 -0
  167. package/dist/identity/index.d.ts.map +1 -0
  168. package/dist/identity/index.js +15 -0
  169. package/dist/identity/index.js.map +1 -0
  170. package/dist/identity/service.d.ts +70 -0
  171. package/dist/identity/service.d.ts.map +1 -0
  172. package/dist/identity/service.js +179 -0
  173. package/dist/identity/service.js.map +1 -0
  174. package/dist/identity/types.d.ts +27 -0
  175. package/dist/identity/types.d.ts.map +1 -0
  176. package/dist/identity/types.js +5 -0
  177. package/dist/identity/types.js.map +1 -0
  178. package/dist/index.d.ts +3 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +11 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/logger.d.ts +50 -0
  183. package/dist/logger.d.ts.map +1 -0
  184. package/dist/logger.js +183 -0
  185. package/dist/logger.js.map +1 -0
  186. package/dist/notifications/index.d.ts +86 -0
  187. package/dist/notifications/index.d.ts.map +1 -0
  188. package/dist/notifications/index.js +112 -0
  189. package/dist/notifications/index.js.map +1 -0
  190. package/dist/notifications/triggers.d.ts +68 -0
  191. package/dist/notifications/triggers.d.ts.map +1 -0
  192. package/dist/notifications/triggers.js +145 -0
  193. package/dist/notifications/triggers.js.map +1 -0
  194. package/dist/notifications/types.d.ts +19 -0
  195. package/dist/notifications/types.d.ts.map +1 -0
  196. package/dist/notifications/types.js +11 -0
  197. package/dist/notifications/types.js.map +1 -0
  198. package/package.json +101 -0
  199. package/src/db/migrations/0000_sharp_night_nurse.sql +52 -0
  200. package/src/db/migrations/0001_hesitant_vapor.sql +40 -0
  201. package/src/db/migrations/0002_numerous_lady_vermin.sql +235 -0
  202. package/src/db/migrations/0003_mighty_jean_grey.sql +37 -0
  203. package/src/db/migrations/0004_cynical_grandmaster.sql +2 -0
  204. package/src/db/migrations/0005_careful_switch.sql +8 -0
  205. package/src/db/migrations/0006_tense_blue_marvel.sql +16 -0
  206. package/src/db/migrations/0007_next_squadron_sinister.sql +1 -0
  207. package/src/db/migrations/0008_powerful_scream.sql +39 -0
  208. package/src/db/migrations/0009_sad_ink.sql +1 -0
  209. package/src/db/migrations/0010_shocking_omega_flight.sql +2 -0
  210. package/src/db/migrations/0011_ambiguous_otto_octavius.sql +151 -0
  211. package/src/db/migrations/0011_hnsw_vector_index.sql +17 -0
  212. package/src/db/migrations/0012_user_profiles.sql +30 -0
  213. package/src/db/migrations/0013_trending_seasonal_columns.sql +9 -0
  214. package/src/db/migrations/0014_add_product_type_to_agents.sql +6 -0
  215. package/src/db/migrations/0015_new_v1_tables.sql +149 -0
  216. package/src/db/migrations/0016_document_types.sql +30 -0
  217. package/src/db/migrations/0017_document_metadata.sql +2 -0
  218. package/src/db/migrations/0018_identity_graph.sql +200 -0
  219. package/src/db/migrations/0019_db_driven_prompts.sql +20 -0
  220. package/src/db/migrations/0020_pending_extractions.sql +35 -0
  221. package/src/db/migrations/0021_rag_documents.sql +39 -0
  222. package/src/db/migrations/0022_user_quotas_usage_jsonb.sql +70 -0
  223. package/src/db/migrations/0023_user_facts_user_scoped_unique.sql +17 -0
  224. package/src/db/migrations/0024_user_memories_hnsw.sql +23 -0
  225. package/src/db/migrations/0025_audit_trigger_errcode.sql +21 -0
  226. package/src/db/migrations/0026_user_profile_snapshots_composite_pk.sql +17 -0
  227. package/src/db/migrations/0027_billing_settings_mnt_columns.sql +54 -0
  228. package/src/db/migrations/0028_trial_credits_normalized_email.sql +37 -0
  229. package/src/db/migrations/0029_usage_records_conversation_idx.sql +13 -0
  230. package/src/db/migrations/0030_pending_extractions_composite_idx.sql +11 -0
  231. package/src/db/migrations/0031_rag_documents_hnsw.sql +16 -0
  232. package/src/db/migrations/0032_rate_limit_unique_idx.sql +16 -0
  233. package/src/db/migrations/0033_pending_extractions_partial_idx.sql +18 -0
  234. package/src/db/migrations/0034_rate_limit_count.sql +9 -0
  235. package/src/db/migrations/0035_credit_reservations.sql +24 -0
  236. package/src/db/migrations/0036_executions_audit_jobs.sql +96 -0
  237. package/src/db/migrations/0037_rate_limit_minute_bucket.sql +46 -0
  238. package/src/db/migrations/0038_user_quotas_generic_usage.sql +25 -0
  239. package/src/db/migrations/0039_platform_admin_impersonation.sql +27 -0
  240. package/src/db/migrations/0040_ee_audit_chain.sql +23 -0
  241. package/src/db/migrations/README.md +57 -0
  242. package/src/db/migrations/meta/0000_snapshot.json +348 -0
  243. package/src/db/migrations/meta/0001_snapshot.json +631 -0
  244. package/src/db/migrations/meta/0002_snapshot.json +2269 -0
  245. package/src/db/migrations/meta/0003_snapshot.json +2488 -0
  246. package/src/db/migrations/meta/0004_snapshot.json +2500 -0
  247. package/src/db/migrations/meta/0005_snapshot.json +2548 -0
  248. package/src/db/migrations/meta/0006_snapshot.json +2650 -0
  249. package/src/db/migrations/meta/0007_snapshot.json +2657 -0
  250. package/src/db/migrations/meta/0008_snapshot.json +2719 -0
  251. package/src/db/migrations/meta/0009_snapshot.json +2726 -0
  252. package/src/db/migrations/meta/0010_snapshot.json +2739 -0
  253. package/src/db/migrations/meta/0011_snapshot.json +3886 -0
  254. package/src/db/migrations/meta/_journal.json +300 -0
@@ -0,0 +1,1193 @@
1
+ /**
2
+ * Usage Tracking Database Schema
3
+ *
4
+ * Tables for tracking per-request token consumption and aggregated monthly usage.
5
+ * Used by the quota enforcement engine to check limits before AI requests
6
+ * and record consumption atomically after completion.
7
+ *
8
+ * Pattern: snake_case columns in PostgreSQL, camelCase TypeScript API (via Drizzle mapping)
9
+ */
10
+ /**
11
+ * Usage Records table - Per-request token tracking (QUOTA-05)
12
+ *
13
+ * Every AI request creates one record with input/output/total tokens,
14
+ * the model used, and the agent that handled it. This provides the
15
+ * detailed breakdown for per-model and per-agent reporting (QUOTA-07).
16
+ */
17
+ export declare const usageRecords: import("drizzle-orm/pg-core").PgTableWithColumns<{
18
+ name: "usage_records";
19
+ schema: undefined;
20
+ columns: {
21
+ id: import("drizzle-orm/pg-core").PgColumn<{
22
+ name: "id";
23
+ tableName: "usage_records";
24
+ dataType: "string";
25
+ columnType: "PgText";
26
+ data: string;
27
+ driverParam: string;
28
+ notNull: true;
29
+ hasDefault: false;
30
+ isPrimaryKey: true;
31
+ isAutoincrement: false;
32
+ hasRuntimeDefault: false;
33
+ enumValues: [string, ...string[]];
34
+ baseColumn: never;
35
+ identity: undefined;
36
+ generated: undefined;
37
+ }, {}, {}>;
38
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
39
+ name: "workspace_id";
40
+ tableName: "usage_records";
41
+ dataType: "string";
42
+ columnType: "PgText";
43
+ data: string;
44
+ driverParam: string;
45
+ notNull: true;
46
+ hasDefault: false;
47
+ isPrimaryKey: false;
48
+ isAutoincrement: false;
49
+ hasRuntimeDefault: false;
50
+ enumValues: [string, ...string[]];
51
+ baseColumn: never;
52
+ identity: undefined;
53
+ generated: undefined;
54
+ }, {}, {}>;
55
+ userId: import("drizzle-orm/pg-core").PgColumn<{
56
+ name: "user_id";
57
+ tableName: "usage_records";
58
+ dataType: "string";
59
+ columnType: "PgText";
60
+ data: string;
61
+ driverParam: string;
62
+ notNull: true;
63
+ hasDefault: false;
64
+ isPrimaryKey: false;
65
+ isAutoincrement: false;
66
+ hasRuntimeDefault: false;
67
+ enumValues: [string, ...string[]];
68
+ baseColumn: never;
69
+ identity: undefined;
70
+ generated: undefined;
71
+ }, {}, {}>;
72
+ type: import("drizzle-orm/pg-core").PgColumn<{
73
+ name: "type";
74
+ tableName: "usage_records";
75
+ dataType: "string";
76
+ columnType: "PgText";
77
+ data: string;
78
+ driverParam: string;
79
+ notNull: true;
80
+ hasDefault: false;
81
+ isPrimaryKey: false;
82
+ isAutoincrement: false;
83
+ hasRuntimeDefault: false;
84
+ enumValues: [string, ...string[]];
85
+ baseColumn: never;
86
+ identity: undefined;
87
+ generated: undefined;
88
+ }, {}, {}>;
89
+ model: import("drizzle-orm/pg-core").PgColumn<{
90
+ name: "model";
91
+ tableName: "usage_records";
92
+ dataType: "string";
93
+ columnType: "PgText";
94
+ data: string;
95
+ driverParam: string;
96
+ notNull: false;
97
+ hasDefault: false;
98
+ isPrimaryKey: false;
99
+ isAutoincrement: false;
100
+ hasRuntimeDefault: false;
101
+ enumValues: [string, ...string[]];
102
+ baseColumn: never;
103
+ identity: undefined;
104
+ generated: undefined;
105
+ }, {}, {}>;
106
+ agent: import("drizzle-orm/pg-core").PgColumn<{
107
+ name: "agent";
108
+ tableName: "usage_records";
109
+ dataType: "string";
110
+ columnType: "PgText";
111
+ data: string;
112
+ driverParam: string;
113
+ notNull: false;
114
+ hasDefault: false;
115
+ isPrimaryKey: false;
116
+ isAutoincrement: false;
117
+ hasRuntimeDefault: false;
118
+ enumValues: [string, ...string[]];
119
+ baseColumn: never;
120
+ identity: undefined;
121
+ generated: undefined;
122
+ }, {}, {}>;
123
+ inputTokens: import("drizzle-orm/pg-core").PgColumn<{
124
+ name: "input_tokens";
125
+ tableName: "usage_records";
126
+ dataType: "number";
127
+ columnType: "PgInteger";
128
+ data: number;
129
+ driverParam: string | number;
130
+ notNull: true;
131
+ hasDefault: true;
132
+ isPrimaryKey: false;
133
+ isAutoincrement: false;
134
+ hasRuntimeDefault: false;
135
+ enumValues: undefined;
136
+ baseColumn: never;
137
+ identity: undefined;
138
+ generated: undefined;
139
+ }, {}, {}>;
140
+ outputTokens: import("drizzle-orm/pg-core").PgColumn<{
141
+ name: "output_tokens";
142
+ tableName: "usage_records";
143
+ dataType: "number";
144
+ columnType: "PgInteger";
145
+ data: number;
146
+ driverParam: string | number;
147
+ notNull: true;
148
+ hasDefault: true;
149
+ isPrimaryKey: false;
150
+ isAutoincrement: false;
151
+ hasRuntimeDefault: false;
152
+ enumValues: undefined;
153
+ baseColumn: never;
154
+ identity: undefined;
155
+ generated: undefined;
156
+ }, {}, {}>;
157
+ totalTokens: import("drizzle-orm/pg-core").PgColumn<{
158
+ name: "total_tokens";
159
+ tableName: "usage_records";
160
+ dataType: "number";
161
+ columnType: "PgInteger";
162
+ data: number;
163
+ driverParam: string | number;
164
+ notNull: true;
165
+ hasDefault: true;
166
+ isPrimaryKey: false;
167
+ isAutoincrement: false;
168
+ hasRuntimeDefault: false;
169
+ enumValues: undefined;
170
+ baseColumn: never;
171
+ identity: undefined;
172
+ generated: undefined;
173
+ }, {}, {}>;
174
+ cost: import("drizzle-orm/pg-core").PgColumn<{
175
+ name: "cost";
176
+ tableName: "usage_records";
177
+ dataType: "number";
178
+ columnType: "PgReal";
179
+ data: number;
180
+ driverParam: string | number;
181
+ notNull: true;
182
+ hasDefault: true;
183
+ isPrimaryKey: false;
184
+ isAutoincrement: false;
185
+ hasRuntimeDefault: false;
186
+ enumValues: undefined;
187
+ baseColumn: never;
188
+ identity: undefined;
189
+ generated: undefined;
190
+ }, {}, {}>;
191
+ marginMultiplier: import("drizzle-orm/pg-core").PgColumn<{
192
+ name: "margin_multiplier";
193
+ tableName: "usage_records";
194
+ dataType: "number";
195
+ columnType: "PgReal";
196
+ data: number;
197
+ driverParam: string | number;
198
+ notNull: true;
199
+ hasDefault: true;
200
+ isPrimaryKey: false;
201
+ isAutoincrement: false;
202
+ hasRuntimeDefault: false;
203
+ enumValues: undefined;
204
+ baseColumn: never;
205
+ identity: undefined;
206
+ generated: undefined;
207
+ }, {}, {}>;
208
+ fxRate: import("drizzle-orm/pg-core").PgColumn<{
209
+ name: "fx_rate";
210
+ tableName: "usage_records";
211
+ dataType: "number";
212
+ columnType: "PgReal";
213
+ data: number;
214
+ driverParam: string | number;
215
+ notNull: true;
216
+ hasDefault: true;
217
+ isPrimaryKey: false;
218
+ isAutoincrement: false;
219
+ hasRuntimeDefault: false;
220
+ enumValues: undefined;
221
+ baseColumn: never;
222
+ identity: undefined;
223
+ generated: undefined;
224
+ }, {}, {}>;
225
+ chargedMnt: import("drizzle-orm/pg-core").PgColumn<{
226
+ name: "charged_mnt";
227
+ tableName: "usage_records";
228
+ dataType: "number";
229
+ columnType: "PgInteger";
230
+ data: number;
231
+ driverParam: string | number;
232
+ notNull: true;
233
+ hasDefault: true;
234
+ isPrimaryKey: false;
235
+ isAutoincrement: false;
236
+ hasRuntimeDefault: false;
237
+ enumValues: undefined;
238
+ baseColumn: never;
239
+ identity: undefined;
240
+ generated: undefined;
241
+ }, {}, {}>;
242
+ requestId: import("drizzle-orm/pg-core").PgColumn<{
243
+ name: "request_id";
244
+ tableName: "usage_records";
245
+ dataType: "string";
246
+ columnType: "PgText";
247
+ data: string;
248
+ driverParam: string;
249
+ notNull: false;
250
+ hasDefault: false;
251
+ isPrimaryKey: false;
252
+ isAutoincrement: false;
253
+ hasRuntimeDefault: false;
254
+ enumValues: [string, ...string[]];
255
+ baseColumn: never;
256
+ identity: undefined;
257
+ generated: undefined;
258
+ }, {}, {}>;
259
+ executionId: import("drizzle-orm/pg-core").PgColumn<{
260
+ name: "execution_id";
261
+ tableName: "usage_records";
262
+ dataType: "string";
263
+ columnType: "PgText";
264
+ data: string;
265
+ driverParam: string;
266
+ notNull: false;
267
+ hasDefault: false;
268
+ isPrimaryKey: false;
269
+ isAutoincrement: false;
270
+ hasRuntimeDefault: false;
271
+ enumValues: [string, ...string[]];
272
+ baseColumn: never;
273
+ identity: undefined;
274
+ generated: undefined;
275
+ }, {}, {}>;
276
+ conversationId: import("drizzle-orm/pg-core").PgColumn<{
277
+ name: "conversation_id";
278
+ tableName: "usage_records";
279
+ dataType: "string";
280
+ columnType: "PgText";
281
+ data: string;
282
+ driverParam: string;
283
+ notNull: false;
284
+ hasDefault: false;
285
+ isPrimaryKey: false;
286
+ isAutoincrement: false;
287
+ hasRuntimeDefault: false;
288
+ enumValues: [string, ...string[]];
289
+ baseColumn: never;
290
+ identity: undefined;
291
+ generated: undefined;
292
+ }, {}, {}>;
293
+ metadata: import("drizzle-orm/pg-core").PgColumn<{
294
+ name: "metadata";
295
+ tableName: "usage_records";
296
+ dataType: "string";
297
+ columnType: "PgText";
298
+ data: string;
299
+ driverParam: string;
300
+ notNull: false;
301
+ hasDefault: false;
302
+ isPrimaryKey: false;
303
+ isAutoincrement: false;
304
+ hasRuntimeDefault: false;
305
+ enumValues: [string, ...string[]];
306
+ baseColumn: never;
307
+ identity: undefined;
308
+ generated: undefined;
309
+ }, {}, {}>;
310
+ recordedAt: import("drizzle-orm/pg-core").PgColumn<{
311
+ name: "recorded_at";
312
+ tableName: "usage_records";
313
+ dataType: "date";
314
+ columnType: "PgTimestamp";
315
+ data: Date;
316
+ driverParam: string;
317
+ notNull: true;
318
+ hasDefault: true;
319
+ isPrimaryKey: false;
320
+ isAutoincrement: false;
321
+ hasRuntimeDefault: false;
322
+ enumValues: undefined;
323
+ baseColumn: never;
324
+ identity: undefined;
325
+ generated: undefined;
326
+ }, {}, {}>;
327
+ };
328
+ dialect: "pg";
329
+ }>;
330
+ /**
331
+ * Monthly Usage table - Aggregated monthly totals for fast quota checks
332
+ *
333
+ * Instead of SUM(totalTokens) on every request, we increment a counter atomically.
334
+ * One row per workspace per billing period. The usage_records table provides
335
+ * the detailed breakdown for reporting; this table provides O(1) quota checks.
336
+ */
337
+ export declare const monthlyUsage: import("drizzle-orm/pg-core").PgTableWithColumns<{
338
+ name: "monthly_usage";
339
+ schema: undefined;
340
+ columns: {
341
+ id: import("drizzle-orm/pg-core").PgColumn<{
342
+ name: "id";
343
+ tableName: "monthly_usage";
344
+ dataType: "string";
345
+ columnType: "PgText";
346
+ data: string;
347
+ driverParam: string;
348
+ notNull: true;
349
+ hasDefault: false;
350
+ isPrimaryKey: true;
351
+ isAutoincrement: false;
352
+ hasRuntimeDefault: false;
353
+ enumValues: [string, ...string[]];
354
+ baseColumn: never;
355
+ identity: undefined;
356
+ generated: undefined;
357
+ }, {}, {}>;
358
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
359
+ name: "workspace_id";
360
+ tableName: "monthly_usage";
361
+ dataType: "string";
362
+ columnType: "PgText";
363
+ data: string;
364
+ driverParam: string;
365
+ notNull: true;
366
+ hasDefault: false;
367
+ isPrimaryKey: false;
368
+ isAutoincrement: false;
369
+ hasRuntimeDefault: false;
370
+ enumValues: [string, ...string[]];
371
+ baseColumn: never;
372
+ identity: undefined;
373
+ generated: undefined;
374
+ }, {}, {}>;
375
+ periodStart: import("drizzle-orm/pg-core").PgColumn<{
376
+ name: "period_start";
377
+ tableName: "monthly_usage";
378
+ dataType: "date";
379
+ columnType: "PgTimestamp";
380
+ data: Date;
381
+ driverParam: string;
382
+ notNull: true;
383
+ hasDefault: false;
384
+ isPrimaryKey: false;
385
+ isAutoincrement: false;
386
+ hasRuntimeDefault: false;
387
+ enumValues: undefined;
388
+ baseColumn: never;
389
+ identity: undefined;
390
+ generated: undefined;
391
+ }, {}, {}>;
392
+ periodEnd: import("drizzle-orm/pg-core").PgColumn<{
393
+ name: "period_end";
394
+ tableName: "monthly_usage";
395
+ dataType: "date";
396
+ columnType: "PgTimestamp";
397
+ data: Date;
398
+ driverParam: string;
399
+ notNull: true;
400
+ hasDefault: false;
401
+ isPrimaryKey: false;
402
+ isAutoincrement: false;
403
+ hasRuntimeDefault: false;
404
+ enumValues: undefined;
405
+ baseColumn: never;
406
+ identity: undefined;
407
+ generated: undefined;
408
+ }, {}, {}>;
409
+ tokensUsed: import("drizzle-orm/pg-core").PgColumn<{
410
+ name: "tokens_used";
411
+ tableName: "monthly_usage";
412
+ dataType: "number";
413
+ columnType: "PgInteger";
414
+ data: number;
415
+ driverParam: string | number;
416
+ notNull: true;
417
+ hasDefault: true;
418
+ isPrimaryKey: false;
419
+ isAutoincrement: false;
420
+ hasRuntimeDefault: false;
421
+ enumValues: undefined;
422
+ baseColumn: never;
423
+ identity: undefined;
424
+ generated: undefined;
425
+ }, {}, {}>;
426
+ chargedMnt: import("drizzle-orm/pg-core").PgColumn<{
427
+ name: "charged_mnt";
428
+ tableName: "monthly_usage";
429
+ dataType: "number";
430
+ columnType: "PgInteger";
431
+ data: number;
432
+ driverParam: string | number;
433
+ notNull: true;
434
+ hasDefault: true;
435
+ isPrimaryKey: false;
436
+ isAutoincrement: false;
437
+ hasRuntimeDefault: false;
438
+ enumValues: undefined;
439
+ baseColumn: never;
440
+ identity: undefined;
441
+ generated: undefined;
442
+ }, {}, {}>;
443
+ requestCount: import("drizzle-orm/pg-core").PgColumn<{
444
+ name: "request_count";
445
+ tableName: "monthly_usage";
446
+ dataType: "number";
447
+ columnType: "PgInteger";
448
+ data: number;
449
+ driverParam: string | number;
450
+ notNull: true;
451
+ hasDefault: true;
452
+ isPrimaryKey: false;
453
+ isAutoincrement: false;
454
+ hasRuntimeDefault: false;
455
+ enumValues: undefined;
456
+ baseColumn: never;
457
+ identity: undefined;
458
+ generated: undefined;
459
+ }, {}, {}>;
460
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
461
+ name: "updated_at";
462
+ tableName: "monthly_usage";
463
+ dataType: "date";
464
+ columnType: "PgTimestamp";
465
+ data: Date;
466
+ driverParam: string;
467
+ notNull: true;
468
+ hasDefault: true;
469
+ isPrimaryKey: false;
470
+ isAutoincrement: false;
471
+ hasRuntimeDefault: false;
472
+ enumValues: undefined;
473
+ baseColumn: never;
474
+ identity: undefined;
475
+ generated: undefined;
476
+ }, {}, {}>;
477
+ };
478
+ dialect: "pg";
479
+ }>;
480
+ /**
481
+ * Trial Credits table - One-time trial credit allocation per workspace (TRIAL-01)
482
+ *
483
+ * Each new workspace receives 100K trial tokens on creation.
484
+ * The unique constraint on workspace_id enforces one trial per workspace (TRIAL-07).
485
+ * Trial credits are separate from purchased credits (credit_balances).
486
+ * They act as a fallback when plan quota is exceeded or credit balance is zero.
487
+ *
488
+ * Status flow: active → depleted (credits hit 0) or active → converted (paid plan)
489
+ */
490
+ export declare const trialCredits: import("drizzle-orm/pg-core").PgTableWithColumns<{
491
+ name: "trial_credits";
492
+ schema: undefined;
493
+ columns: {
494
+ id: import("drizzle-orm/pg-core").PgColumn<{
495
+ name: "id";
496
+ tableName: "trial_credits";
497
+ dataType: "string";
498
+ columnType: "PgText";
499
+ data: string;
500
+ driverParam: string;
501
+ notNull: true;
502
+ hasDefault: false;
503
+ isPrimaryKey: true;
504
+ isAutoincrement: false;
505
+ hasRuntimeDefault: false;
506
+ enumValues: [string, ...string[]];
507
+ baseColumn: never;
508
+ identity: undefined;
509
+ generated: undefined;
510
+ }, {}, {}>;
511
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
512
+ name: "workspace_id";
513
+ tableName: "trial_credits";
514
+ dataType: "string";
515
+ columnType: "PgText";
516
+ data: string;
517
+ driverParam: string;
518
+ notNull: true;
519
+ hasDefault: false;
520
+ isPrimaryKey: false;
521
+ isAutoincrement: false;
522
+ hasRuntimeDefault: false;
523
+ enumValues: [string, ...string[]];
524
+ baseColumn: never;
525
+ identity: undefined;
526
+ generated: undefined;
527
+ }, {}, {}>;
528
+ initialCredits: import("drizzle-orm/pg-core").PgColumn<{
529
+ name: "initial_credits";
530
+ tableName: "trial_credits";
531
+ dataType: "number";
532
+ columnType: "PgInteger";
533
+ data: number;
534
+ driverParam: string | number;
535
+ notNull: true;
536
+ hasDefault: true;
537
+ isPrimaryKey: false;
538
+ isAutoincrement: false;
539
+ hasRuntimeDefault: false;
540
+ enumValues: undefined;
541
+ baseColumn: never;
542
+ identity: undefined;
543
+ generated: undefined;
544
+ }, {}, {}>;
545
+ creditsUsed: import("drizzle-orm/pg-core").PgColumn<{
546
+ name: "credits_used";
547
+ tableName: "trial_credits";
548
+ dataType: "number";
549
+ columnType: "PgInteger";
550
+ data: number;
551
+ driverParam: string | number;
552
+ notNull: true;
553
+ hasDefault: true;
554
+ isPrimaryKey: false;
555
+ isAutoincrement: false;
556
+ hasRuntimeDefault: false;
557
+ enumValues: undefined;
558
+ baseColumn: never;
559
+ identity: undefined;
560
+ generated: undefined;
561
+ }, {}, {}>;
562
+ creditsRemaining: import("drizzle-orm/pg-core").PgColumn<{
563
+ name: "credits_remaining";
564
+ tableName: "trial_credits";
565
+ dataType: "number";
566
+ columnType: "PgInteger";
567
+ data: number;
568
+ driverParam: string | number;
569
+ notNull: true;
570
+ hasDefault: true;
571
+ isPrimaryKey: false;
572
+ isAutoincrement: false;
573
+ hasRuntimeDefault: false;
574
+ enumValues: undefined;
575
+ baseColumn: never;
576
+ identity: undefined;
577
+ generated: undefined;
578
+ }, {}, {}>;
579
+ initialCreditsMnt: import("drizzle-orm/pg-core").PgColumn<{
580
+ name: "initial_credits_mnt";
581
+ tableName: "trial_credits";
582
+ dataType: "number";
583
+ columnType: "PgInteger";
584
+ data: number;
585
+ driverParam: string | number;
586
+ notNull: true;
587
+ hasDefault: true;
588
+ isPrimaryKey: false;
589
+ isAutoincrement: false;
590
+ hasRuntimeDefault: false;
591
+ enumValues: undefined;
592
+ baseColumn: never;
593
+ identity: undefined;
594
+ generated: undefined;
595
+ }, {}, {}>;
596
+ creditsUsedMnt: import("drizzle-orm/pg-core").PgColumn<{
597
+ name: "credits_used_mnt";
598
+ tableName: "trial_credits";
599
+ dataType: "number";
600
+ columnType: "PgInteger";
601
+ data: number;
602
+ driverParam: string | number;
603
+ notNull: true;
604
+ hasDefault: true;
605
+ isPrimaryKey: false;
606
+ isAutoincrement: false;
607
+ hasRuntimeDefault: false;
608
+ enumValues: undefined;
609
+ baseColumn: never;
610
+ identity: undefined;
611
+ generated: undefined;
612
+ }, {}, {}>;
613
+ creditsRemainingMnt: import("drizzle-orm/pg-core").PgColumn<{
614
+ name: "credits_remaining_mnt";
615
+ tableName: "trial_credits";
616
+ dataType: "number";
617
+ columnType: "PgInteger";
618
+ data: number;
619
+ driverParam: string | number;
620
+ notNull: true;
621
+ hasDefault: true;
622
+ isPrimaryKey: false;
623
+ isAutoincrement: false;
624
+ hasRuntimeDefault: false;
625
+ enumValues: undefined;
626
+ baseColumn: never;
627
+ identity: undefined;
628
+ generated: undefined;
629
+ }, {}, {}>;
630
+ status: import("drizzle-orm/pg-core").PgColumn<{
631
+ name: "status";
632
+ tableName: "trial_credits";
633
+ dataType: "string";
634
+ columnType: "PgText";
635
+ data: string;
636
+ driverParam: string;
637
+ notNull: true;
638
+ hasDefault: true;
639
+ isPrimaryKey: false;
640
+ isAutoincrement: false;
641
+ hasRuntimeDefault: false;
642
+ enumValues: [string, ...string[]];
643
+ baseColumn: never;
644
+ identity: undefined;
645
+ generated: undefined;
646
+ }, {}, {}>;
647
+ provisionedAt: import("drizzle-orm/pg-core").PgColumn<{
648
+ name: "provisioned_at";
649
+ tableName: "trial_credits";
650
+ dataType: "date";
651
+ columnType: "PgTimestamp";
652
+ data: Date;
653
+ driverParam: string;
654
+ notNull: true;
655
+ hasDefault: true;
656
+ isPrimaryKey: false;
657
+ isAutoincrement: false;
658
+ hasRuntimeDefault: false;
659
+ enumValues: undefined;
660
+ baseColumn: never;
661
+ identity: undefined;
662
+ generated: undefined;
663
+ }, {}, {}>;
664
+ trialEndDate: import("drizzle-orm/pg-core").PgColumn<{
665
+ name: "trial_end_date";
666
+ tableName: "trial_credits";
667
+ dataType: "date";
668
+ columnType: "PgTimestamp";
669
+ data: Date;
670
+ driverParam: string;
671
+ notNull: false;
672
+ hasDefault: false;
673
+ isPrimaryKey: false;
674
+ isAutoincrement: false;
675
+ hasRuntimeDefault: false;
676
+ enumValues: undefined;
677
+ baseColumn: never;
678
+ identity: undefined;
679
+ generated: undefined;
680
+ }, {}, {}>;
681
+ depletedAt: import("drizzle-orm/pg-core").PgColumn<{
682
+ name: "depleted_at";
683
+ tableName: "trial_credits";
684
+ dataType: "date";
685
+ columnType: "PgTimestamp";
686
+ data: Date;
687
+ driverParam: string;
688
+ notNull: false;
689
+ hasDefault: false;
690
+ isPrimaryKey: false;
691
+ isAutoincrement: false;
692
+ hasRuntimeDefault: false;
693
+ enumValues: undefined;
694
+ baseColumn: never;
695
+ identity: undefined;
696
+ generated: undefined;
697
+ }, {}, {}>;
698
+ convertedAt: import("drizzle-orm/pg-core").PgColumn<{
699
+ name: "converted_at";
700
+ tableName: "trial_credits";
701
+ dataType: "date";
702
+ columnType: "PgTimestamp";
703
+ data: Date;
704
+ driverParam: string;
705
+ notNull: false;
706
+ hasDefault: false;
707
+ isPrimaryKey: false;
708
+ isAutoincrement: false;
709
+ hasRuntimeDefault: false;
710
+ enumValues: undefined;
711
+ baseColumn: never;
712
+ identity: undefined;
713
+ generated: undefined;
714
+ }, {}, {}>;
715
+ createdByIp: import("drizzle-orm/pg-core").PgColumn<{
716
+ name: "created_by_ip";
717
+ tableName: "trial_credits";
718
+ dataType: "string";
719
+ columnType: "PgText";
720
+ data: string;
721
+ driverParam: string;
722
+ notNull: false;
723
+ hasDefault: false;
724
+ isPrimaryKey: false;
725
+ isAutoincrement: false;
726
+ hasRuntimeDefault: false;
727
+ enumValues: [string, ...string[]];
728
+ baseColumn: never;
729
+ identity: undefined;
730
+ generated: undefined;
731
+ }, {}, {}>;
732
+ createdByEmail: import("drizzle-orm/pg-core").PgColumn<{
733
+ name: "created_by_email";
734
+ tableName: "trial_credits";
735
+ dataType: "string";
736
+ columnType: "PgText";
737
+ data: string;
738
+ driverParam: string;
739
+ notNull: false;
740
+ hasDefault: false;
741
+ isPrimaryKey: false;
742
+ isAutoincrement: false;
743
+ hasRuntimeDefault: false;
744
+ enumValues: [string, ...string[]];
745
+ baseColumn: never;
746
+ identity: undefined;
747
+ generated: undefined;
748
+ }, {}, {}>;
749
+ normalizedEmail: import("drizzle-orm/pg-core").PgColumn<{
750
+ name: "normalized_email";
751
+ tableName: "trial_credits";
752
+ dataType: "string";
753
+ columnType: "PgText";
754
+ data: string;
755
+ driverParam: string;
756
+ notNull: false;
757
+ hasDefault: false;
758
+ isPrimaryKey: false;
759
+ isAutoincrement: false;
760
+ hasRuntimeDefault: false;
761
+ enumValues: [string, ...string[]];
762
+ baseColumn: never;
763
+ identity: undefined;
764
+ generated: undefined;
765
+ }, {}, {}>;
766
+ };
767
+ dialect: "pg";
768
+ }>;
769
+ /**
770
+ * Rate Limit Entries table - Sliding window rate limiting (QUOTA-10)
771
+ *
772
+ * One row per (workspace, endpoint, minute bucket), with a counter.
773
+ * Each request upserts the row and atomically increments `count`, so N
774
+ * concurrent requests observe 1..N and exactly `limit` are admitted.
775
+ *
776
+ * An earlier version used ON CONFLICT DO NOTHING, which admitted
777
+ * exactly ONE request per minute on every plan — the per-plan limit was
778
+ * never consulted. See packages/billing/src/rate-limit.ts.
779
+ *
780
+ * Old buckets are deleted by the billing-maintenance cron.
781
+ *
782
+ * Database-backed rate limiting is the correct choice for <10K users
783
+ * (no Redis dependency, per architecture decisions).
784
+ */
785
+ export declare const rateLimitEntries: import("drizzle-orm/pg-core").PgTableWithColumns<{
786
+ name: "rate_limit_entries";
787
+ schema: undefined;
788
+ columns: {
789
+ id: import("drizzle-orm/pg-core").PgColumn<{
790
+ name: "id";
791
+ tableName: "rate_limit_entries";
792
+ dataType: "string";
793
+ columnType: "PgText";
794
+ data: string;
795
+ driverParam: string;
796
+ notNull: true;
797
+ hasDefault: false;
798
+ isPrimaryKey: true;
799
+ isAutoincrement: false;
800
+ hasRuntimeDefault: false;
801
+ enumValues: [string, ...string[]];
802
+ baseColumn: never;
803
+ identity: undefined;
804
+ generated: undefined;
805
+ }, {}, {}>;
806
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
807
+ name: "workspace_id";
808
+ tableName: "rate_limit_entries";
809
+ dataType: "string";
810
+ columnType: "PgText";
811
+ data: string;
812
+ driverParam: string;
813
+ notNull: true;
814
+ hasDefault: false;
815
+ isPrimaryKey: false;
816
+ isAutoincrement: false;
817
+ hasRuntimeDefault: false;
818
+ enumValues: [string, ...string[]];
819
+ baseColumn: never;
820
+ identity: undefined;
821
+ generated: undefined;
822
+ }, {}, {}>;
823
+ endpoint: import("drizzle-orm/pg-core").PgColumn<{
824
+ name: "endpoint";
825
+ tableName: "rate_limit_entries";
826
+ dataType: "string";
827
+ columnType: "PgText";
828
+ data: string;
829
+ driverParam: string;
830
+ notNull: true;
831
+ hasDefault: true;
832
+ isPrimaryKey: false;
833
+ isAutoincrement: false;
834
+ hasRuntimeDefault: false;
835
+ enumValues: [string, ...string[]];
836
+ baseColumn: never;
837
+ identity: undefined;
838
+ generated: undefined;
839
+ }, {}, {}>;
840
+ requestedAt: import("drizzle-orm/pg-core").PgColumn<{
841
+ name: "requested_at";
842
+ tableName: "rate_limit_entries";
843
+ dataType: "date";
844
+ columnType: "PgTimestamp";
845
+ data: Date;
846
+ driverParam: string;
847
+ notNull: true;
848
+ hasDefault: true;
849
+ isPrimaryKey: false;
850
+ isAutoincrement: false;
851
+ hasRuntimeDefault: false;
852
+ enumValues: undefined;
853
+ baseColumn: never;
854
+ identity: undefined;
855
+ generated: undefined;
856
+ }, {}, {}>;
857
+ minuteBucket: import("drizzle-orm/pg-core").PgColumn<{
858
+ name: "minute_bucket";
859
+ tableName: "rate_limit_entries";
860
+ dataType: "date";
861
+ columnType: "PgTimestamp";
862
+ data: Date;
863
+ driverParam: string;
864
+ notNull: true;
865
+ hasDefault: false;
866
+ isPrimaryKey: false;
867
+ isAutoincrement: false;
868
+ hasRuntimeDefault: false;
869
+ enumValues: undefined;
870
+ baseColumn: never;
871
+ identity: undefined;
872
+ generated: undefined;
873
+ }, {}, {}>;
874
+ count: import("drizzle-orm/pg-core").PgColumn<{
875
+ name: "count";
876
+ tableName: "rate_limit_entries";
877
+ dataType: "number";
878
+ columnType: "PgInteger";
879
+ data: number;
880
+ driverParam: string | number;
881
+ notNull: true;
882
+ hasDefault: true;
883
+ isPrimaryKey: false;
884
+ isAutoincrement: false;
885
+ hasRuntimeDefault: false;
886
+ enumValues: undefined;
887
+ baseColumn: never;
888
+ identity: undefined;
889
+ generated: undefined;
890
+ }, {}, {}>;
891
+ };
892
+ dialect: "pg";
893
+ }>;
894
+ /**
895
+ * Notification History table - Tracks sent notifications for deduplication
896
+ *
897
+ * Records each notification sent (quota warnings, trial alerts) with a
898
+ * period-based deduplication key. The unique constraint on
899
+ * (workspaceId, type, periodKey) prevents sending the same notification
900
+ * twice in the same billing period.
901
+ *
902
+ * Phase 14 will update the channel from "console" to "email" and use
903
+ * Resend for actual delivery. For now, notifications are logged to console.
904
+ */
905
+ export declare const notificationHistory: import("drizzle-orm/pg-core").PgTableWithColumns<{
906
+ name: "notification_history";
907
+ schema: undefined;
908
+ columns: {
909
+ id: import("drizzle-orm/pg-core").PgColumn<{
910
+ name: "id";
911
+ tableName: "notification_history";
912
+ dataType: "string";
913
+ columnType: "PgText";
914
+ data: string;
915
+ driverParam: string;
916
+ notNull: true;
917
+ hasDefault: false;
918
+ isPrimaryKey: true;
919
+ isAutoincrement: false;
920
+ hasRuntimeDefault: false;
921
+ enumValues: [string, ...string[]];
922
+ baseColumn: never;
923
+ identity: undefined;
924
+ generated: undefined;
925
+ }, {}, {}>;
926
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
927
+ name: "workspace_id";
928
+ tableName: "notification_history";
929
+ dataType: "string";
930
+ columnType: "PgText";
931
+ data: string;
932
+ driverParam: string;
933
+ notNull: true;
934
+ hasDefault: false;
935
+ isPrimaryKey: false;
936
+ isAutoincrement: false;
937
+ hasRuntimeDefault: false;
938
+ enumValues: [string, ...string[]];
939
+ baseColumn: never;
940
+ identity: undefined;
941
+ generated: undefined;
942
+ }, {}, {}>;
943
+ type: import("drizzle-orm/pg-core").PgColumn<{
944
+ name: "type";
945
+ tableName: "notification_history";
946
+ dataType: "string";
947
+ columnType: "PgText";
948
+ data: string;
949
+ driverParam: string;
950
+ notNull: true;
951
+ hasDefault: false;
952
+ isPrimaryKey: false;
953
+ isAutoincrement: false;
954
+ hasRuntimeDefault: false;
955
+ enumValues: [string, ...string[]];
956
+ baseColumn: never;
957
+ identity: undefined;
958
+ generated: undefined;
959
+ }, {}, {}>;
960
+ periodKey: import("drizzle-orm/pg-core").PgColumn<{
961
+ name: "period_key";
962
+ tableName: "notification_history";
963
+ dataType: "string";
964
+ columnType: "PgText";
965
+ data: string;
966
+ driverParam: string;
967
+ notNull: true;
968
+ hasDefault: false;
969
+ isPrimaryKey: false;
970
+ isAutoincrement: false;
971
+ hasRuntimeDefault: false;
972
+ enumValues: [string, ...string[]];
973
+ baseColumn: never;
974
+ identity: undefined;
975
+ generated: undefined;
976
+ }, {}, {}>;
977
+ sentAt: import("drizzle-orm/pg-core").PgColumn<{
978
+ name: "sent_at";
979
+ tableName: "notification_history";
980
+ dataType: "date";
981
+ columnType: "PgTimestamp";
982
+ data: Date;
983
+ driverParam: string;
984
+ notNull: true;
985
+ hasDefault: true;
986
+ isPrimaryKey: false;
987
+ isAutoincrement: false;
988
+ hasRuntimeDefault: false;
989
+ enumValues: undefined;
990
+ baseColumn: never;
991
+ identity: undefined;
992
+ generated: undefined;
993
+ }, {}, {}>;
994
+ channel: import("drizzle-orm/pg-core").PgColumn<{
995
+ name: "channel";
996
+ tableName: "notification_history";
997
+ dataType: "string";
998
+ columnType: "PgText";
999
+ data: string;
1000
+ driverParam: string;
1001
+ notNull: true;
1002
+ hasDefault: true;
1003
+ isPrimaryKey: false;
1004
+ isAutoincrement: false;
1005
+ hasRuntimeDefault: false;
1006
+ enumValues: [string, ...string[]];
1007
+ baseColumn: never;
1008
+ identity: undefined;
1009
+ generated: undefined;
1010
+ }, {}, {}>;
1011
+ metadata: import("drizzle-orm/pg-core").PgColumn<{
1012
+ name: "metadata";
1013
+ tableName: "notification_history";
1014
+ dataType: "string";
1015
+ columnType: "PgText";
1016
+ data: string;
1017
+ driverParam: string;
1018
+ notNull: false;
1019
+ hasDefault: false;
1020
+ isPrimaryKey: false;
1021
+ isAutoincrement: false;
1022
+ hasRuntimeDefault: false;
1023
+ enumValues: [string, ...string[]];
1024
+ baseColumn: never;
1025
+ identity: undefined;
1026
+ generated: undefined;
1027
+ }, {}, {}>;
1028
+ };
1029
+ dialect: "pg";
1030
+ }>;
1031
+ /**
1032
+ * User Quotas table — per-user, per-action usage counters.
1033
+ *
1034
+ * One row per user (not per period — one-time payment model). Counters
1035
+ * live in the `usage` JSONB map and increment atomically in SQL, so a
1036
+ * quota check is O(1) with no SUM over usage_records.
1037
+ */
1038
+ export declare const userQuotas: import("drizzle-orm/pg-core").PgTableWithColumns<{
1039
+ name: "user_quotas";
1040
+ schema: undefined;
1041
+ columns: {
1042
+ id: import("drizzle-orm/pg-core").PgColumn<{
1043
+ name: "id";
1044
+ tableName: "user_quotas";
1045
+ dataType: "string";
1046
+ columnType: "PgText";
1047
+ data: string;
1048
+ driverParam: string;
1049
+ notNull: true;
1050
+ hasDefault: false;
1051
+ isPrimaryKey: true;
1052
+ isAutoincrement: false;
1053
+ hasRuntimeDefault: false;
1054
+ enumValues: [string, ...string[]];
1055
+ baseColumn: never;
1056
+ identity: undefined;
1057
+ generated: undefined;
1058
+ }, {}, {}>;
1059
+ userId: import("drizzle-orm/pg-core").PgColumn<{
1060
+ name: "user_id";
1061
+ tableName: "user_quotas";
1062
+ dataType: "string";
1063
+ columnType: "PgText";
1064
+ data: string;
1065
+ driverParam: string;
1066
+ notNull: true;
1067
+ hasDefault: false;
1068
+ isPrimaryKey: false;
1069
+ isAutoincrement: false;
1070
+ hasRuntimeDefault: false;
1071
+ enumValues: [string, ...string[]];
1072
+ baseColumn: never;
1073
+ identity: undefined;
1074
+ generated: undefined;
1075
+ }, {}, {}>;
1076
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
1077
+ name: "workspace_id";
1078
+ tableName: "user_quotas";
1079
+ dataType: "string";
1080
+ columnType: "PgText";
1081
+ data: string;
1082
+ driverParam: string;
1083
+ notNull: true;
1084
+ hasDefault: false;
1085
+ isPrimaryKey: false;
1086
+ isAutoincrement: false;
1087
+ hasRuntimeDefault: false;
1088
+ enumValues: [string, ...string[]];
1089
+ baseColumn: never;
1090
+ identity: undefined;
1091
+ generated: undefined;
1092
+ }, {}, {}>;
1093
+ plan: import("drizzle-orm/pg-core").PgColumn<{
1094
+ name: "plan";
1095
+ tableName: "user_quotas";
1096
+ dataType: "string";
1097
+ columnType: "PgText";
1098
+ data: string;
1099
+ driverParam: string;
1100
+ notNull: true;
1101
+ hasDefault: true;
1102
+ isPrimaryKey: false;
1103
+ isAutoincrement: false;
1104
+ hasRuntimeDefault: false;
1105
+ enumValues: [string, ...string[]];
1106
+ baseColumn: never;
1107
+ identity: undefined;
1108
+ generated: undefined;
1109
+ }, {}, {}>;
1110
+ usage: import("drizzle-orm/pg-core").PgColumn<{
1111
+ name: "usage";
1112
+ tableName: "user_quotas";
1113
+ dataType: "json";
1114
+ columnType: "PgJsonb";
1115
+ data: unknown;
1116
+ driverParam: unknown;
1117
+ notNull: true;
1118
+ hasDefault: true;
1119
+ isPrimaryKey: false;
1120
+ isAutoincrement: false;
1121
+ hasRuntimeDefault: false;
1122
+ enumValues: undefined;
1123
+ baseColumn: never;
1124
+ identity: undefined;
1125
+ generated: undefined;
1126
+ }, {}, {}>;
1127
+ totalCostUsd: import("drizzle-orm/pg-core").PgColumn<{
1128
+ name: "total_cost_usd";
1129
+ tableName: "user_quotas";
1130
+ dataType: "number";
1131
+ columnType: "PgReal";
1132
+ data: number;
1133
+ driverParam: string | number;
1134
+ notNull: true;
1135
+ hasDefault: true;
1136
+ isPrimaryKey: false;
1137
+ isAutoincrement: false;
1138
+ hasRuntimeDefault: false;
1139
+ enumValues: undefined;
1140
+ baseColumn: never;
1141
+ identity: undefined;
1142
+ generated: undefined;
1143
+ }, {}, {}>;
1144
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
1145
+ name: "created_at";
1146
+ tableName: "user_quotas";
1147
+ dataType: "date";
1148
+ columnType: "PgTimestamp";
1149
+ data: Date;
1150
+ driverParam: string;
1151
+ notNull: true;
1152
+ hasDefault: true;
1153
+ isPrimaryKey: false;
1154
+ isAutoincrement: false;
1155
+ hasRuntimeDefault: false;
1156
+ enumValues: undefined;
1157
+ baseColumn: never;
1158
+ identity: undefined;
1159
+ generated: undefined;
1160
+ }, {}, {}>;
1161
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
1162
+ name: "updated_at";
1163
+ tableName: "user_quotas";
1164
+ dataType: "date";
1165
+ columnType: "PgTimestamp";
1166
+ data: Date;
1167
+ driverParam: string;
1168
+ notNull: true;
1169
+ hasDefault: true;
1170
+ isPrimaryKey: false;
1171
+ isAutoincrement: false;
1172
+ hasRuntimeDefault: false;
1173
+ enumValues: undefined;
1174
+ baseColumn: never;
1175
+ identity: undefined;
1176
+ generated: undefined;
1177
+ }, {}, {}>;
1178
+ };
1179
+ dialect: "pg";
1180
+ }>;
1181
+ export type UserQuota = typeof userQuotas.$inferSelect;
1182
+ export type InsertUserQuota = typeof userQuotas.$inferInsert;
1183
+ export type UsageRecord = typeof usageRecords.$inferSelect;
1184
+ export type InsertUsageRecord = typeof usageRecords.$inferInsert;
1185
+ export type MonthlyUsage = typeof monthlyUsage.$inferSelect;
1186
+ export type InsertMonthlyUsage = typeof monthlyUsage.$inferInsert;
1187
+ export type TrialCredit = typeof trialCredits.$inferSelect;
1188
+ export type InsertTrialCredit = typeof trialCredits.$inferInsert;
1189
+ export type RateLimitEntry = typeof rateLimitEntries.$inferSelect;
1190
+ export type InsertRateLimitEntry = typeof rateLimitEntries.$inferInsert;
1191
+ export type NotificationHistoryRecord = typeof notificationHistory.$inferSelect;
1192
+ export type InsertNotificationHistoryRecord = typeof notificationHistory.$inferInsert;
1193
+ //# sourceMappingURL=usage.d.ts.map