@corgelabs/corge 0.0.1 → 1.0.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 (341) hide show
  1. package/dist/ai/index.d.ts +3 -0
  2. package/dist/ai/index.d.ts.map +1 -0
  3. package/dist/ai/index.js +3 -0
  4. package/dist/ai/index.js.map +1 -0
  5. package/dist/ai/schema.d.ts +83 -0
  6. package/dist/ai/schema.d.ts.map +1 -0
  7. package/dist/ai/schema.js +19 -0
  8. package/dist/ai/schema.js.map +1 -0
  9. package/dist/ai/service.d.ts +14 -0
  10. package/dist/ai/service.d.ts.map +1 -0
  11. package/dist/ai/service.js +266 -0
  12. package/dist/ai/service.js.map +1 -0
  13. package/dist/ai/utils.d.ts +10 -0
  14. package/dist/ai/utils.d.ts.map +1 -0
  15. package/dist/ai/utils.js +27 -0
  16. package/dist/ai/utils.js.map +1 -0
  17. package/dist/attachments/index.d.ts +4 -0
  18. package/dist/attachments/index.d.ts.map +1 -0
  19. package/dist/attachments/index.js +4 -0
  20. package/dist/attachments/index.js.map +1 -0
  21. package/dist/attachments/routes.d.ts +75 -0
  22. package/dist/attachments/routes.d.ts.map +1 -0
  23. package/dist/attachments/routes.js +18 -0
  24. package/dist/attachments/routes.js.map +1 -0
  25. package/dist/attachments/schema.d.ts +61 -0
  26. package/dist/attachments/schema.d.ts.map +1 -0
  27. package/dist/attachments/schema.js +30 -0
  28. package/dist/attachments/schema.js.map +1 -0
  29. package/dist/attachments/service.d.ts +27 -0
  30. package/dist/attachments/service.d.ts.map +1 -0
  31. package/dist/attachments/service.js +224 -0
  32. package/dist/attachments/service.js.map +1 -0
  33. package/dist/attachments/utils.d.ts +9 -0
  34. package/dist/attachments/utils.d.ts.map +1 -0
  35. package/dist/attachments/utils.js +80 -0
  36. package/dist/attachments/utils.js.map +1 -0
  37. package/dist/auth/index.d.ts +4 -0
  38. package/dist/auth/index.d.ts.map +1 -0
  39. package/dist/auth/index.js +4 -0
  40. package/dist/auth/index.js.map +1 -0
  41. package/dist/auth/oidc.d.ts +25 -0
  42. package/dist/auth/oidc.d.ts.map +1 -0
  43. package/dist/auth/oidc.js +298 -0
  44. package/dist/auth/oidc.js.map +1 -0
  45. package/dist/auth/recovery.d.ts +41 -0
  46. package/dist/auth/recovery.d.ts.map +1 -0
  47. package/dist/auth/recovery.js +250 -0
  48. package/dist/auth/recovery.js.map +1 -0
  49. package/dist/auth/routes.d.ts +226 -0
  50. package/dist/auth/routes.d.ts.map +1 -0
  51. package/dist/auth/routes.js +96 -0
  52. package/dist/auth/routes.js.map +1 -0
  53. package/dist/auth/schema.d.ts +158 -0
  54. package/dist/auth/schema.d.ts.map +1 -0
  55. package/dist/auth/schema.js +82 -0
  56. package/dist/auth/schema.js.map +1 -0
  57. package/dist/auth/service.d.ts +96 -0
  58. package/dist/auth/service.d.ts.map +1 -0
  59. package/dist/auth/service.js +129 -0
  60. package/dist/auth/service.js.map +1 -0
  61. package/dist/auth/session.d.ts +51 -0
  62. package/dist/auth/session.d.ts.map +1 -0
  63. package/dist/auth/session.js +344 -0
  64. package/dist/auth/session.js.map +1 -0
  65. package/dist/auth/utils.d.ts +17 -0
  66. package/dist/auth/utils.d.ts.map +1 -0
  67. package/dist/auth/utils.js +96 -0
  68. package/dist/auth/utils.js.map +1 -0
  69. package/dist/bin/corge.js +542 -0
  70. package/dist/chat/context.d.ts +10 -0
  71. package/dist/chat/context.d.ts.map +1 -0
  72. package/dist/chat/context.js +221 -0
  73. package/dist/chat/context.js.map +1 -0
  74. package/dist/chat/index.d.ts +4 -0
  75. package/dist/chat/index.d.ts.map +1 -0
  76. package/dist/chat/index.js +4 -0
  77. package/dist/chat/index.js.map +1 -0
  78. package/dist/chat/routes.d.ts +160 -0
  79. package/dist/chat/routes.d.ts.map +1 -0
  80. package/dist/chat/routes.js +210 -0
  81. package/dist/chat/routes.js.map +1 -0
  82. package/dist/chat/schema.d.ts +285 -0
  83. package/dist/chat/schema.d.ts.map +1 -0
  84. package/dist/chat/schema.js +74 -0
  85. package/dist/chat/schema.js.map +1 -0
  86. package/dist/chat/service.d.ts +64 -0
  87. package/dist/chat/service.d.ts.map +1 -0
  88. package/dist/chat/service.js +279 -0
  89. package/dist/chat/service.js.map +1 -0
  90. package/dist/chat/stream.d.ts +53 -0
  91. package/dist/chat/stream.d.ts.map +1 -0
  92. package/dist/chat/stream.js +339 -0
  93. package/dist/chat/stream.js.map +1 -0
  94. package/dist/chat/utils.d.ts +61 -0
  95. package/dist/chat/utils.d.ts.map +1 -0
  96. package/dist/chat/utils.js +285 -0
  97. package/dist/chat/utils.js.map +1 -0
  98. package/dist/cli/builder.d.ts +6 -0
  99. package/dist/cli/builder.d.ts.map +1 -0
  100. package/dist/cli/builder.js +91 -0
  101. package/dist/cli/builder.js.map +1 -0
  102. package/dist/cli/deployer.d.ts +2 -0
  103. package/dist/cli/deployer.d.ts.map +1 -0
  104. package/dist/cli/deployer.js +152 -0
  105. package/dist/cli/deployer.js.map +1 -0
  106. package/dist/cli/dev-server.d.ts +2 -0
  107. package/dist/cli/dev-server.d.ts.map +1 -0
  108. package/dist/cli/dev-server.js +70 -0
  109. package/dist/cli/dev-server.js.map +1 -0
  110. package/dist/cli/env.d.ts +4 -0
  111. package/dist/cli/env.d.ts.map +1 -0
  112. package/dist/cli/env.js +68 -0
  113. package/dist/cli/env.js.map +1 -0
  114. package/dist/cli/init.d.ts +6 -0
  115. package/dist/cli/init.d.ts.map +1 -0
  116. package/dist/cli/init.js +97 -0
  117. package/dist/cli/init.js.map +1 -0
  118. package/dist/config.d.ts +262 -0
  119. package/dist/config.d.ts.map +1 -0
  120. package/dist/config.js +212 -0
  121. package/dist/config.js.map +1 -0
  122. package/dist/db/index.d.ts +3 -0
  123. package/dist/db/index.d.ts.map +1 -0
  124. package/dist/db/index.js +3 -0
  125. package/dist/db/index.js.map +1 -0
  126. package/dist/db/schema.d.ts +410 -0
  127. package/dist/db/schema.d.ts.map +1 -0
  128. package/dist/db/schema.js +294 -0
  129. package/dist/db/schema.js.map +1 -0
  130. package/dist/db/service.d.ts +42 -0
  131. package/dist/db/service.d.ts.map +1 -0
  132. package/dist/db/service.js +372 -0
  133. package/dist/db/service.js.map +1 -0
  134. package/dist/db/utils.d.ts +25 -0
  135. package/dist/db/utils.d.ts.map +1 -0
  136. package/dist/db/utils.js +188 -0
  137. package/dist/db/utils.js.map +1 -0
  138. package/dist/emails/index.d.ts +4 -0
  139. package/dist/emails/index.d.ts.map +1 -0
  140. package/dist/emails/index.js +4 -0
  141. package/dist/emails/index.js.map +1 -0
  142. package/dist/emails/routes.d.ts +191 -0
  143. package/dist/emails/routes.d.ts.map +1 -0
  144. package/dist/emails/routes.js +39 -0
  145. package/dist/emails/routes.js.map +1 -0
  146. package/dist/emails/schema.d.ts +237 -0
  147. package/dist/emails/schema.d.ts.map +1 -0
  148. package/dist/emails/schema.js +98 -0
  149. package/dist/emails/schema.js.map +1 -0
  150. package/dist/emails/service.d.ts +22 -0
  151. package/dist/emails/service.d.ts.map +1 -0
  152. package/dist/emails/service.js +337 -0
  153. package/dist/emails/service.js.map +1 -0
  154. package/dist/emails/utils.d.ts +49 -0
  155. package/dist/emails/utils.d.ts.map +1 -0
  156. package/dist/emails/utils.js +341 -0
  157. package/dist/emails/utils.js.map +1 -0
  158. package/dist/files/index.d.ts +4 -0
  159. package/dist/files/index.d.ts.map +1 -0
  160. package/dist/files/index.js +4 -0
  161. package/dist/files/index.js.map +1 -0
  162. package/dist/files/routes.d.ts +72 -0
  163. package/dist/files/routes.d.ts.map +1 -0
  164. package/dist/files/routes.js +38 -0
  165. package/dist/files/routes.js.map +1 -0
  166. package/dist/files/schema.d.ts +57 -0
  167. package/dist/files/schema.d.ts.map +1 -0
  168. package/dist/files/schema.js +39 -0
  169. package/dist/files/schema.js.map +1 -0
  170. package/dist/files/service.d.ts +27 -0
  171. package/dist/files/service.d.ts.map +1 -0
  172. package/dist/files/service.js +175 -0
  173. package/dist/files/service.js.map +1 -0
  174. package/dist/files/utils.d.ts +3 -0
  175. package/dist/files/utils.d.ts.map +1 -0
  176. package/dist/files/utils.js +63 -0
  177. package/dist/files/utils.js.map +1 -0
  178. package/dist/index.d.ts +875 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +9919 -0
  181. package/dist/index.js.map +7 -0
  182. package/dist/payments/billing.d.ts +29 -0
  183. package/dist/payments/billing.d.ts.map +1 -0
  184. package/dist/payments/billing.js +378 -0
  185. package/dist/payments/billing.js.map +1 -0
  186. package/dist/payments/index.d.ts +4 -0
  187. package/dist/payments/index.d.ts.map +1 -0
  188. package/dist/payments/index.js +4 -0
  189. package/dist/payments/index.js.map +1 -0
  190. package/dist/payments/routes.d.ts +340 -0
  191. package/dist/payments/routes.d.ts.map +1 -0
  192. package/dist/payments/routes.js +56 -0
  193. package/dist/payments/routes.js.map +1 -0
  194. package/dist/payments/schema.d.ts +412 -0
  195. package/dist/payments/schema.d.ts.map +1 -0
  196. package/dist/payments/schema.js +260 -0
  197. package/dist/payments/schema.js.map +1 -0
  198. package/dist/payments/service.d.ts +31 -0
  199. package/dist/payments/service.d.ts.map +1 -0
  200. package/dist/payments/service.js +322 -0
  201. package/dist/payments/service.js.map +1 -0
  202. package/dist/payments/utils.d.ts +61 -0
  203. package/dist/payments/utils.d.ts.map +1 -0
  204. package/dist/payments/utils.js +369 -0
  205. package/dist/payments/utils.js.map +1 -0
  206. package/dist/router/guard.d.ts +19 -0
  207. package/dist/router/guard.d.ts.map +1 -0
  208. package/dist/router/guard.js +243 -0
  209. package/dist/router/guard.js.map +1 -0
  210. package/dist/router/index.d.ts +3 -0
  211. package/dist/router/index.d.ts.map +1 -0
  212. package/dist/router/index.js +3 -0
  213. package/dist/router/index.js.map +1 -0
  214. package/dist/router/schema.d.ts +103 -0
  215. package/dist/router/schema.d.ts.map +1 -0
  216. package/dist/router/schema.js +282 -0
  217. package/dist/router/schema.js.map +1 -0
  218. package/dist/router/service.d.ts +25 -0
  219. package/dist/router/service.d.ts.map +1 -0
  220. package/dist/router/service.js +339 -0
  221. package/dist/router/service.js.map +1 -0
  222. package/dist/tasks/index.d.ts +4 -0
  223. package/dist/tasks/index.d.ts.map +1 -0
  224. package/dist/tasks/index.js +4 -0
  225. package/dist/tasks/index.js.map +1 -0
  226. package/dist/tasks/routes.d.ts +54 -0
  227. package/dist/tasks/routes.d.ts.map +1 -0
  228. package/dist/tasks/routes.js +195 -0
  229. package/dist/tasks/routes.js.map +1 -0
  230. package/dist/tasks/schema.d.ts +261 -0
  231. package/dist/tasks/schema.d.ts.map +1 -0
  232. package/dist/tasks/schema.js +35 -0
  233. package/dist/tasks/schema.js.map +1 -0
  234. package/dist/tasks/service.d.ts +32 -0
  235. package/dist/tasks/service.d.ts.map +1 -0
  236. package/dist/tasks/service.js +201 -0
  237. package/dist/tasks/service.js.map +1 -0
  238. package/dist/tasks/steps.d.ts +18 -0
  239. package/dist/tasks/steps.d.ts.map +1 -0
  240. package/dist/tasks/steps.js +365 -0
  241. package/dist/tasks/steps.js.map +1 -0
  242. package/dist/tasks/utils.d.ts +75 -0
  243. package/dist/tasks/utils.d.ts.map +1 -0
  244. package/dist/tasks/utils.js +311 -0
  245. package/dist/tasks/utils.js.map +1 -0
  246. package/dist/tasks/watcher.d.ts +13 -0
  247. package/dist/tasks/watcher.d.ts.map +1 -0
  248. package/dist/tasks/watcher.js +255 -0
  249. package/dist/tasks/watcher.js.map +1 -0
  250. package/dist/tasks/worker.d.ts +28 -0
  251. package/dist/tasks/worker.d.ts.map +1 -0
  252. package/dist/tasks/worker.js +326 -0
  253. package/dist/tasks/worker.js.map +1 -0
  254. package/dist/utils/index.d.ts +3 -0
  255. package/dist/utils/index.d.ts.map +1 -0
  256. package/dist/utils/index.js +3 -0
  257. package/dist/utils/index.js.map +1 -0
  258. package/dist/utils/schema.d.ts +79 -0
  259. package/dist/utils/schema.d.ts.map +1 -0
  260. package/dist/utils/schema.js +41 -0
  261. package/dist/utils/schema.js.map +1 -0
  262. package/dist/utils/service.d.ts +32 -0
  263. package/dist/utils/service.d.ts.map +1 -0
  264. package/dist/utils/service.js +384 -0
  265. package/dist/utils/service.js.map +1 -0
  266. package/docs/SDK_SPEC.md +1645 -0
  267. package/infra/firestore.base.indexes.json +138 -0
  268. package/infra/firestore.base.rules +152 -0
  269. package/infra/storage.base.rules +8 -0
  270. package/package.json +58 -13
  271. package/src/ai/index.ts +2 -0
  272. package/src/ai/schema.ts +64 -0
  273. package/src/ai/service.ts +317 -0
  274. package/src/ai/utils.ts +38 -0
  275. package/src/attachments/index.ts +3 -0
  276. package/src/attachments/routes.ts +28 -0
  277. package/src/attachments/schema.ts +45 -0
  278. package/src/attachments/service.ts +315 -0
  279. package/src/attachments/utils.ts +115 -0
  280. package/src/auth/index.ts +3 -0
  281. package/src/auth/oidc.ts +419 -0
  282. package/src/auth/recovery.ts +365 -0
  283. package/src/auth/routes.ts +142 -0
  284. package/src/auth/schema.ts +181 -0
  285. package/src/auth/service.ts +183 -0
  286. package/src/auth/session.ts +414 -0
  287. package/src/auth/utils.ts +106 -0
  288. package/src/chat/context.ts +310 -0
  289. package/src/chat/index.ts +3 -0
  290. package/src/chat/routes.ts +264 -0
  291. package/src/chat/schema.ts +295 -0
  292. package/src/chat/service.ts +360 -0
  293. package/src/chat/stream.ts +481 -0
  294. package/src/chat/utils.ts +370 -0
  295. package/src/cli/builder.ts +93 -0
  296. package/src/cli/deployer.ts +184 -0
  297. package/src/cli/dev-server.ts +77 -0
  298. package/src/cli/env.ts +89 -0
  299. package/src/cli/init.ts +121 -0
  300. package/src/config.ts +447 -0
  301. package/src/db/index.ts +2 -0
  302. package/src/db/schema.ts +409 -0
  303. package/src/db/service.ts +477 -0
  304. package/src/db/utils.ts +250 -0
  305. package/src/emails/index.ts +3 -0
  306. package/src/emails/routes.ts +64 -0
  307. package/src/emails/schema.ts +239 -0
  308. package/src/emails/service.ts +488 -0
  309. package/src/emails/utils.ts +449 -0
  310. package/src/files/index.ts +3 -0
  311. package/src/files/routes.ts +44 -0
  312. package/src/files/schema.ts +76 -0
  313. package/src/files/service.ts +238 -0
  314. package/src/files/utils.ts +77 -0
  315. package/src/index.ts +425 -0
  316. package/src/payments/billing.ts +488 -0
  317. package/src/payments/index.ts +3 -0
  318. package/src/payments/routes.ts +92 -0
  319. package/src/payments/schema.ts +401 -0
  320. package/src/payments/service.ts +445 -0
  321. package/src/payments/utils.ts +472 -0
  322. package/src/router/guard.ts +319 -0
  323. package/src/router/index.ts +2 -0
  324. package/src/router/schema.ts +458 -0
  325. package/src/router/service.ts +453 -0
  326. package/src/tasks/index.ts +11 -0
  327. package/src/tasks/routes.ts +230 -0
  328. package/src/tasks/schema.ts +310 -0
  329. package/src/tasks/service.ts +254 -0
  330. package/src/tasks/steps.ts +472 -0
  331. package/src/tasks/utils.ts +445 -0
  332. package/src/tasks/watcher.ts +307 -0
  333. package/src/tasks/worker.ts +461 -0
  334. package/src/utils/index.ts +2 -0
  335. package/src/utils/schema.ts +69 -0
  336. package/src/utils/service.ts +461 -0
  337. package/tests/e2e.test.ts +2531 -0
  338. package/tsconfig.base.json +12 -0
  339. package/README.md +0 -2
  340. package/index.d.ts +0 -1
  341. package/index.js +0 -1
@@ -0,0 +1,412 @@
1
+ import { z } from 'zod';
2
+ import { type EnvScopedString, type PaymentProvider, type PaymentsConfig } from '../config';
3
+ import { type EntryId } from '../db';
4
+ export type { EnvScopedString, PaymentProvider, PaymentsConfig };
5
+ export interface ProviderPlanMapping {
6
+ stripe?: {
7
+ priceId: EnvScopedString;
8
+ meterEventName?: string;
9
+ };
10
+ dodo?: {
11
+ productId: EnvScopedString;
12
+ meterEventName?: string;
13
+ };
14
+ }
15
+ export interface PlanQuotaSpec {
16
+ aiTokens?: number | null;
17
+ metrics?: Record<string, number>;
18
+ overage?: {
19
+ enabled: boolean;
20
+ maxOverageTokens?: number;
21
+ unitTokens?: number;
22
+ rateCents?: number;
23
+ };
24
+ }
25
+ export interface PlanDefinition {
26
+ id?: string;
27
+ name: string;
28
+ description?: string;
29
+ interval: 'month' | 'year' | 'free';
30
+ amount: number;
31
+ currency?: Lowercase<string>;
32
+ providers?: ProviderPlanMapping;
33
+ quota?: PlanQuotaSpec;
34
+ quotas?: PlanQuotaSpec;
35
+ metadata?: Record<string, string>;
36
+ }
37
+ export type PlansMap = Record<string, PlanDefinition>;
38
+ export interface ProductDefinition {
39
+ id?: string;
40
+ name: string;
41
+ description?: string;
42
+ amount: number;
43
+ currency?: Lowercase<string>;
44
+ providers?: {
45
+ stripe?: {
46
+ priceId?: EnvScopedString;
47
+ productId?: EnvScopedString;
48
+ };
49
+ dodo?: {
50
+ productId: EnvScopedString;
51
+ };
52
+ };
53
+ grants?: {
54
+ aiTokens?: number;
55
+ credits?: number;
56
+ metrics?: Record<string, number>;
57
+ };
58
+ metadata?: Record<string, string>;
59
+ }
60
+ export type ProductsMap = Record<string, ProductDefinition>;
61
+ export declare const registerPlans: (plans?: PlansMap, reset?: boolean) => void;
62
+ export declare const registerProducts: (products?: ProductsMap, reset?: boolean) => void;
63
+ export declare const clearPaymentDefinitions: () => void;
64
+ export declare const definePlans: <T extends PlansMap>(plans: T) => T;
65
+ export declare const defineProducts: <T extends ProductsMap>(products: T) => T;
66
+ export declare const getPlanDefinition: (id: string) => (PlanDefinition & {
67
+ id: string;
68
+ quota: PlanQuotaSpec;
69
+ }) | undefined;
70
+ export declare const getProductDefinition: (id: string) => (ProductDefinition & {
71
+ id: string;
72
+ }) | undefined;
73
+ export declare const getRegisteredPlans: () => Record<string, PlanDefinition & {
74
+ id: string;
75
+ quota: PlanQuotaSpec;
76
+ }>;
77
+ export declare const getRegisteredProducts: () => Record<string, ProductDefinition & {
78
+ id: string;
79
+ }>;
80
+ export declare const subscriptionStatusSchema: z.ZodEnum<{
81
+ active: "active";
82
+ cancelled: "cancelled";
83
+ expired: "expired";
84
+ none: "none";
85
+ on_hold: "on_hold";
86
+ past_due: "past_due";
87
+ trialing: "trialing";
88
+ }>;
89
+ export type SubscriptionStatus = z.infer<typeof subscriptionStatusSchema>;
90
+ export declare const paymentTransactionTypeSchema: z.ZodEnum<{
91
+ "checkout.completed": "checkout.completed";
92
+ "invoice.created": "invoice.created";
93
+ "invoice.paid": "invoice.paid";
94
+ "payment.failed": "payment.failed";
95
+ "payment.succeeded": "payment.succeeded";
96
+ "subscription.active": "subscription.active";
97
+ "subscription.cancelled": "subscription.cancelled";
98
+ "subscription.past_due": "subscription.past_due";
99
+ "subscription.renewed": "subscription.renewed";
100
+ "subscription.tier_changed": "subscription.tier_changed";
101
+ }>;
102
+ export type PaymentTransactionType = z.infer<typeof paymentTransactionTypeSchema>;
103
+ export declare const customLineItemSchema: z.ZodObject<{
104
+ name: z.ZodString;
105
+ description: z.ZodOptional<z.ZodString>;
106
+ amount: z.ZodNumber;
107
+ currency: z.ZodOptional<z.ZodString>;
108
+ quantity: z.ZodDefault<z.ZodNumber>;
109
+ }, z.core.$strip>;
110
+ export type CustomLineItem = z.input<typeof customLineItemSchema>;
111
+ export declare const createCheckoutInput: z.ZodObject<{
112
+ product: z.ZodOptional<z.ZodString>;
113
+ plan: z.ZodOptional<z.ZodString>;
114
+ custom: z.ZodOptional<z.ZodObject<{
115
+ name: z.ZodString;
116
+ description: z.ZodOptional<z.ZodString>;
117
+ amount: z.ZodNumber;
118
+ currency: z.ZodOptional<z.ZodString>;
119
+ quantity: z.ZodDefault<z.ZodNumber>;
120
+ }, z.core.$strip>>;
121
+ quantity: z.ZodDefault<z.ZodNumber>;
122
+ successUrl: z.ZodOptional<z.ZodString>;
123
+ cancelUrl: z.ZodOptional<z.ZodString>;
124
+ idempotencyKey: z.ZodOptional<z.ZodString>;
125
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
126
+ }, z.core.$strip>;
127
+ export type CreateCheckoutInput = z.input<typeof createCheckoutInput>;
128
+ export declare const checkoutSessionResultSchema: z.ZodObject<{
129
+ checkoutId: z.ZodString;
130
+ url: z.ZodString;
131
+ provider: z.ZodEnum<{
132
+ dodo: "dodo";
133
+ stripe: "stripe";
134
+ }>;
135
+ expiresAt: z.ZodOptional<z.ZodString>;
136
+ }, z.core.$strip>;
137
+ export type CheckoutSessionResult = z.infer<typeof checkoutSessionResultSchema>;
138
+ export declare const createPaymentLinkInput: z.ZodObject<{
139
+ product: z.ZodOptional<z.ZodString>;
140
+ plan: z.ZodOptional<z.ZodString>;
141
+ custom: z.ZodOptional<z.ZodObject<{
142
+ name: z.ZodString;
143
+ description: z.ZodOptional<z.ZodString>;
144
+ amount: z.ZodNumber;
145
+ currency: z.ZodOptional<z.ZodString>;
146
+ quantity: z.ZodDefault<z.ZodNumber>;
147
+ }, z.core.$strip>>;
148
+ quantity: z.ZodDefault<z.ZodNumber>;
149
+ returnUrl: z.ZodOptional<z.ZodString>;
150
+ idempotencyKey: z.ZodOptional<z.ZodString>;
151
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
152
+ }, z.core.$strip>;
153
+ export type CreatePaymentLinkInput = z.input<typeof createPaymentLinkInput>;
154
+ export declare const paymentLinkResultSchema: z.ZodObject<{
155
+ paymentLinkId: z.ZodString;
156
+ url: z.ZodString;
157
+ provider: z.ZodEnum<{
158
+ dodo: "dodo";
159
+ stripe: "stripe";
160
+ }>;
161
+ }, z.core.$strip>;
162
+ export type PaymentLinkResult = z.infer<typeof paymentLinkResultSchema>;
163
+ export declare const createInvoiceInput: z.ZodObject<{
164
+ product: z.ZodOptional<z.ZodString>;
165
+ custom: z.ZodOptional<z.ZodObject<{
166
+ name: z.ZodString;
167
+ description: z.ZodOptional<z.ZodString>;
168
+ amount: z.ZodNumber;
169
+ currency: z.ZodOptional<z.ZodString>;
170
+ quantity: z.ZodDefault<z.ZodNumber>;
171
+ }, z.core.$strip>>;
172
+ quantity: z.ZodDefault<z.ZodNumber>;
173
+ daysUntilDue: z.ZodDefault<z.ZodNumber>;
174
+ idempotencyKey: z.ZodOptional<z.ZodString>;
175
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
176
+ }, z.core.$strip>;
177
+ export type CreateInvoiceInput = z.input<typeof createInvoiceInput>;
178
+ export declare const invoiceResultSchema: z.ZodObject<{
179
+ invoiceId: z.ZodString;
180
+ status: z.ZodEnum<{
181
+ draft: "draft";
182
+ open: "open";
183
+ paid: "paid";
184
+ void: "void";
185
+ }>;
186
+ amount: z.ZodNumber;
187
+ currency: z.ZodString;
188
+ hostedInvoiceUrl: z.ZodString;
189
+ pdfUrl: z.ZodOptional<z.ZodString>;
190
+ provider: z.ZodEnum<{
191
+ dodo: "dodo";
192
+ stripe: "stripe";
193
+ }>;
194
+ }, z.core.$strip>;
195
+ export type InvoiceResult = z.infer<typeof invoiceResultSchema>;
196
+ export declare const directChargeInput: z.ZodObject<{
197
+ product: z.ZodOptional<z.ZodString>;
198
+ custom: z.ZodOptional<z.ZodObject<{
199
+ name: z.ZodString;
200
+ description: z.ZodOptional<z.ZodString>;
201
+ amount: z.ZodNumber;
202
+ currency: z.ZodOptional<z.ZodString>;
203
+ quantity: z.ZodDefault<z.ZodNumber>;
204
+ }, z.core.$strip>>;
205
+ amount: z.ZodOptional<z.ZodNumber>;
206
+ currency: z.ZodOptional<z.ZodString>;
207
+ description: z.ZodOptional<z.ZodString>;
208
+ paymentMethodId: z.ZodOptional<z.ZodString>;
209
+ idempotencyKey: z.ZodOptional<z.ZodString>;
210
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
211
+ }, z.core.$strip>;
212
+ export type DirectChargeInput = z.input<typeof directChargeInput>;
213
+ export declare const chargeResultSchema: z.ZodObject<{
214
+ chargeId: z.ZodString;
215
+ status: z.ZodEnum<{
216
+ failed: "failed";
217
+ requires_action: "requires_action";
218
+ succeeded: "succeeded";
219
+ }>;
220
+ amount: z.ZodNumber;
221
+ currency: z.ZodString;
222
+ provider: z.ZodEnum<{
223
+ dodo: "dodo";
224
+ stripe: "stripe";
225
+ }>;
226
+ checkoutUrl: z.ZodOptional<z.ZodString>;
227
+ clientSecret: z.ZodOptional<z.ZodString>;
228
+ }, z.core.$strip>;
229
+ export type ChargeResult = z.infer<typeof chargeResultSchema>;
230
+ export declare const subscribeInput: z.ZodObject<{
231
+ plan: z.ZodString;
232
+ returnUrl: z.ZodOptional<z.ZodString>;
233
+ idempotencyKey: z.ZodOptional<z.ZodString>;
234
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
235
+ }, z.core.$strip>;
236
+ export type SubscribeInput = z.input<typeof subscribeInput>;
237
+ export declare const subscribeResultSchema: z.ZodObject<{
238
+ subscriptionId: z.ZodString;
239
+ planId: z.ZodString;
240
+ status: z.ZodEnum<{
241
+ active: "active";
242
+ requires_action: "requires_action";
243
+ trialing: "trialing";
244
+ }>;
245
+ provider: z.ZodEnum<{
246
+ dodo: "dodo";
247
+ stripe: "stripe";
248
+ }>;
249
+ checkoutUrl: z.ZodOptional<z.ZodString>;
250
+ }, z.core.$strip>;
251
+ export type SubscribeResult = z.infer<typeof subscribeResultSchema>;
252
+ export declare const changeTierInput: z.ZodObject<{
253
+ plan: z.ZodString;
254
+ proration: z.ZodDefault<z.ZodEnum<{
255
+ next_cycle: "next_cycle";
256
+ none: "none";
257
+ prorated_immediately: "prorated_immediately";
258
+ }>>;
259
+ idempotencyKey: z.ZodOptional<z.ZodString>;
260
+ }, z.core.$strip>;
261
+ export type ChangeTierInput = z.input<typeof changeTierInput>;
262
+ export declare const cancelSubscriptionInput: z.ZodObject<{
263
+ immediately: z.ZodDefault<z.ZodBoolean>;
264
+ reason: z.ZodOptional<z.ZodString>;
265
+ idempotencyKey: z.ZodOptional<z.ZodString>;
266
+ }, z.core.$strip>;
267
+ export type CancelSubscriptionInput = z.input<typeof cancelSubscriptionInput>;
268
+ export declare const subscriptionRecordSchema: z.ZodObject<{
269
+ subscriptionId: z.ZodString;
270
+ planId: z.ZodString;
271
+ status: z.ZodEnum<{
272
+ active: "active";
273
+ cancelled: "cancelled";
274
+ expired: "expired";
275
+ none: "none";
276
+ on_hold: "on_hold";
277
+ past_due: "past_due";
278
+ trialing: "trialing";
279
+ }>;
280
+ provider: z.ZodEnum<{
281
+ dodo: "dodo";
282
+ stripe: "stripe";
283
+ }>;
284
+ cancelAtPeriodEnd: z.ZodBoolean;
285
+ currentPeriodStart: z.ZodOptional<z.ZodString>;
286
+ currentPeriodEnd: z.ZodOptional<z.ZodString>;
287
+ }, z.core.$strip>;
288
+ export type SubscriptionRecord = z.infer<typeof subscriptionRecordSchema>;
289
+ export declare const recordUsageInput: z.ZodObject<{
290
+ metric: z.ZodDefault<z.ZodString>;
291
+ amount: z.ZodNumber;
292
+ inputTokens: z.ZodOptional<z.ZodNumber>;
293
+ outputTokens: z.ZodOptional<z.ZodNumber>;
294
+ model: z.ZodOptional<z.ZodString>;
295
+ idempotencyKey: z.ZodOptional<z.ZodString>;
296
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
297
+ }, z.core.$strip>;
298
+ export type RecordUsageInput = z.input<typeof recordUsageInput>;
299
+ export declare const usageStatusResultSchema: z.ZodObject<{
300
+ userId: z.ZodString;
301
+ periodKey: z.ZodString;
302
+ planId: z.ZodString;
303
+ aiTokensUsed: z.ZodNumber;
304
+ aiTokensLimit: z.ZodNullable<z.ZodNumber>;
305
+ bonusAiTokens: z.ZodNumber;
306
+ overageTokensReported: z.ZodNumber;
307
+ overageEnabled: z.ZodBoolean;
308
+ maxOverageTokens: z.ZodOptional<z.ZodNumber>;
309
+ metricsUsed: z.ZodRecord<z.ZodString, z.ZodNumber>;
310
+ metricsLimits: z.ZodRecord<z.ZodString, z.ZodNumber>;
311
+ bonusMetrics: z.ZodRecord<z.ZodString, z.ZodNumber>;
312
+ }, z.core.$strip>;
313
+ export type UsageStatusResult = z.infer<typeof usageStatusResultSchema>;
314
+ export declare const usageSummarySchema: z.ZodObject<{
315
+ userId: z.ZodString;
316
+ periodKey: z.ZodString;
317
+ planId: z.ZodString;
318
+ aiTokensUsed: z.ZodNumber;
319
+ aiTokensLimit: z.ZodNullable<z.ZodNumber>;
320
+ bonusAiTokens: z.ZodNumber;
321
+ overageTokensReported: z.ZodNumber;
322
+ overageEnabled: z.ZodBoolean;
323
+ maxOverageTokens: z.ZodOptional<z.ZodNumber>;
324
+ metricsUsed: z.ZodRecord<z.ZodString, z.ZodNumber>;
325
+ metricsLimits: z.ZodRecord<z.ZodString, z.ZodNumber>;
326
+ bonusMetrics: z.ZodRecord<z.ZodString, z.ZodNumber>;
327
+ }, z.core.$strip>;
328
+ export type UsageSummary = UsageStatusResult;
329
+ export declare const quotaCheckResultSchema: z.ZodObject<{
330
+ allowed: z.ZodBoolean;
331
+ metric: z.ZodString;
332
+ used: z.ZodNumber;
333
+ limit: z.ZodNullable<z.ZodNumber>;
334
+ bonusRemaining: z.ZodNumber;
335
+ overageEnabled: z.ZodBoolean;
336
+ remaining: z.ZodNullable<z.ZodNumber>;
337
+ }, z.core.$strip>;
338
+ export type QuotaCheckResult = z.infer<typeof quotaCheckResultSchema>;
339
+ export declare const customerBillingSummarySchema: z.ZodObject<{
340
+ userId: z.ZodString;
341
+ planId: z.ZodString;
342
+ plan: z.ZodObject<{
343
+ id: z.ZodString;
344
+ name: z.ZodString;
345
+ interval: z.ZodEnum<{
346
+ free: "free";
347
+ month: "month";
348
+ year: "year";
349
+ }>;
350
+ amount: z.ZodNumber;
351
+ currency: z.ZodString;
352
+ }, z.core.$strip>;
353
+ status: z.ZodEnum<{
354
+ active: "active";
355
+ cancelled: "cancelled";
356
+ expired: "expired";
357
+ none: "none";
358
+ on_hold: "on_hold";
359
+ past_due: "past_due";
360
+ trialing: "trialing";
361
+ }>;
362
+ subscriptionId: z.ZodOptional<z.ZodString>;
363
+ activeProvider: z.ZodOptional<z.ZodEnum<{
364
+ dodo: "dodo";
365
+ stripe: "stripe";
366
+ }>>;
367
+ currentPeriodStart: z.ZodOptional<z.ZodString>;
368
+ currentPeriodEnd: z.ZodOptional<z.ZodString>;
369
+ cancelAtPeriodEnd: z.ZodBoolean;
370
+ bonusAiTokens: z.ZodNumber;
371
+ credits: z.ZodNumber;
372
+ bonusMetrics: z.ZodRecord<z.ZodString, z.ZodNumber>;
373
+ }, z.core.$strip>;
374
+ export type CustomerBillingSummary = z.infer<typeof customerBillingSummarySchema>;
375
+ export declare const paymentWebhookParamsSchema: z.ZodObject<{
376
+ provider: z.ZodEnum<{
377
+ dodo: "dodo";
378
+ stripe: "stripe";
379
+ }>;
380
+ }, z.core.$strip>;
381
+ export type PaymentWebhookParams = z.infer<typeof paymentWebhookParamsSchema>;
382
+ export declare const paymentWebhookResultSchema: z.ZodObject<{
383
+ received: z.ZodLiteral<true>;
384
+ eventId: z.ZodString;
385
+ handled: z.ZodBoolean;
386
+ deduplicated: z.ZodOptional<z.ZodBoolean>;
387
+ }, z.core.$strip>;
388
+ export type PaymentWebhookResult = z.infer<typeof paymentWebhookResultSchema>;
389
+ export interface PaymentCallOptions {
390
+ provider?: PaymentProvider;
391
+ userId?: EntryId;
392
+ idempotencyKey?: string;
393
+ }
394
+ export interface NormalizedPaymentWebhook {
395
+ eventId: string;
396
+ paymentId?: string;
397
+ rawEventType: string;
398
+ txType: PaymentTransactionType | null;
399
+ userId?: string;
400
+ customerId?: string;
401
+ subscriptionId?: string;
402
+ subscriptionStatus?: SubscriptionStatus;
403
+ planId?: string;
404
+ productId?: string;
405
+ amount?: number;
406
+ currency?: string;
407
+ currentPeriodStart?: string;
408
+ currentPeriodEnd?: string;
409
+ cancelAtPeriodEnd?: boolean;
410
+ resetPeriodUsage?: boolean;
411
+ }
412
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/payments/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAe,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACxG,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAE7C,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,CAAA;AAEhE,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,eAAe,CAAA;QACxB,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,eAAe,CAAA;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;CACF;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAA;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAC5B,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAC5B,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE;YACP,OAAO,CAAC,EAAE,eAAe,CAAA;YACzB,SAAS,CAAC,EAAE,eAAe,CAAA;SAC5B,CAAA;QACD,IAAI,CAAC,EAAE;YACL,SAAS,EAAE,eAAe,CAAA;SAC3B,CAAA;KACF,CAAA;IACD,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACjC,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;AAK3D,eAAO,MAAM,aAAa,WAAY,QAAQ,sBAAkB,IAW/D,CAAA;AAED,eAAO,MAAM,gBAAgB,cAAe,WAAW,sBAAkB,IAUxE,CAAA;AAED,eAAO,MAAM,uBAAuB,QAAO,IAI1C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,SAAS,CAAC,KAAG,CAM1D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,WAAW,YAAY,CAAC,KAAG,CAMnE,CAAA;AAED,eAAO,MAAM,iBAAiB,OAAQ,MAAM,KAAG,CAAC,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC,GAAG,SACpF,CAAA;AAErB,eAAO,MAAM,oBAAoB,OAAQ,MAAM,KAAG,CAAC,iBAAiB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SACjE,CAAA;AAExB,eAAO,MAAM,kBAAkB,QAAO,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAoB,CAAA;AAE9H,eAAO,MAAM,qBAAqB,QAAO,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAuB,CAAA;AAEjH,eAAO,MAAM,wBAAwB;;;;;;;;EAQnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,eAAO,MAAM,4BAA4B;;;;;;;;;;;EAWvC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEjF,eAAO,MAAM,oBAAoB;;;;;;iBAM/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;iBAa5B,CAAA;AACJ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAErE,eAAO,MAAM,2BAA2B;;;;;;;;iBAKtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE/E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;iBAY/B,CAAA;AACJ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,eAAO,MAAM,uBAAuB;;;;;;;iBAIlC,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;iBAW3B,CAAA;AACJ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAQ9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;iBAa1B,CAAA;AACJ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;iBAQ7B,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,eAAO,MAAM,cAAc;;;;;iBAKzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;iBAMhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,eAAO,MAAM,eAAe;;;;;;;;iBAI1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;iBAQnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,eAAO,MAAM,gBAAgB;;;;;;;;iBAQ3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;iBAalC,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AACvE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;iBAA0B,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAA;AAE5C,eAAO,MAAM,sBAAsB;;;;;;;;iBAQjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBvC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEjF,eAAO,MAAM,0BAA0B;;;;;iBAErC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,eAAO,MAAM,0BAA0B;;;;;iBAKrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B"}
@@ -0,0 +1,260 @@
1
+ import { z } from 'zod';
2
+ import { CORE_CONFIG } from '../config';
3
+ import { entryId } from '../db';
4
+ const registeredPlans = {};
5
+ const registeredProducts = {};
6
+ export const registerPlans = (plans, reset = false) => {
7
+ if (reset) {
8
+ for (const k of Object.keys(registeredPlans))
9
+ delete registeredPlans[k];
10
+ }
11
+ if (!plans)
12
+ return;
13
+ const entries = Object.entries(plans);
14
+ for (const [k, def] of entries) {
15
+ const quota = def.quota ?? def.quotas ?? {};
16
+ registeredPlans[k] = { ...def, id: def.id ?? k, quota, quotas: quota };
17
+ }
18
+ if (entries.length > 0)
19
+ CORE_CONFIG.payments.enabled = true;
20
+ };
21
+ export const registerProducts = (products, reset = false) => {
22
+ if (reset) {
23
+ for (const k of Object.keys(registeredProducts))
24
+ delete registeredProducts[k];
25
+ }
26
+ if (!products)
27
+ return;
28
+ const entries = Object.entries(products);
29
+ for (const [k, def] of entries) {
30
+ registeredProducts[k] = { ...def, id: def.id ?? k };
31
+ }
32
+ if (entries.length > 0)
33
+ CORE_CONFIG.payments.enabled = true;
34
+ };
35
+ export const clearPaymentDefinitions = () => {
36
+ for (const k of Object.keys(registeredPlans))
37
+ delete registeredPlans[k];
38
+ for (const k of Object.keys(registeredProducts))
39
+ delete registeredProducts[k];
40
+ CORE_CONFIG.payments.enabled = false;
41
+ };
42
+ export const definePlans = (plans) => {
43
+ const normalized = Object.fromEntries(Object.entries(plans).map(([k, def]) => [k, { ...def, id: def.id ?? k }]));
44
+ registerPlans(normalized, false);
45
+ return normalized;
46
+ };
47
+ export const defineProducts = (products) => {
48
+ const normalized = Object.fromEntries(Object.entries(products).map(([k, def]) => [k, { ...def, id: def.id ?? k }]));
49
+ registerProducts(normalized, false);
50
+ return normalized;
51
+ };
52
+ export const getPlanDefinition = (id) => registeredPlans[id];
53
+ export const getProductDefinition = (id) => registeredProducts[id];
54
+ export const getRegisteredPlans = () => registeredPlans;
55
+ export const getRegisteredProducts = () => registeredProducts;
56
+ export const subscriptionStatusSchema = z.enum([
57
+ 'none',
58
+ 'active',
59
+ 'trialing',
60
+ 'past_due',
61
+ 'on_hold',
62
+ 'cancelled',
63
+ 'expired'
64
+ ]);
65
+ export const paymentTransactionTypeSchema = z.enum([
66
+ 'checkout.completed',
67
+ 'payment.succeeded',
68
+ 'payment.failed',
69
+ 'invoice.created',
70
+ 'invoice.paid',
71
+ 'subscription.active',
72
+ 'subscription.renewed',
73
+ 'subscription.tier_changed',
74
+ 'subscription.cancelled',
75
+ 'subscription.past_due'
76
+ ]);
77
+ export const customLineItemSchema = z.object({
78
+ name: z.string().min(1).max(200),
79
+ description: z.string().max(1000).optional(),
80
+ amount: z.number().int().positive(),
81
+ currency: z.string().length(3).toLowerCase().optional(),
82
+ quantity: z.number().int().positive().default(1)
83
+ });
84
+ export const createCheckoutInput = z
85
+ .object({
86
+ product: z.string().optional(),
87
+ plan: z.string().optional(),
88
+ custom: customLineItemSchema.optional(),
89
+ quantity: z.number().int().positive().default(1),
90
+ successUrl: z.string().url().optional(),
91
+ cancelUrl: z.string().url().optional(),
92
+ idempotencyKey: z.string().max(200).optional(),
93
+ metadata: z.record(z.string(), z.string()).optional()
94
+ })
95
+ .refine((v) => Number(Boolean(v.product)) + Number(Boolean(v.plan)) + Number(Boolean(v.custom)) === 1, {
96
+ message: 'Provide exactly one of: product, plan, or custom'
97
+ });
98
+ export const checkoutSessionResultSchema = z.object({
99
+ checkoutId: z.string(),
100
+ url: z.string().url(),
101
+ provider: z.enum(['stripe', 'dodo']),
102
+ expiresAt: z.string().datetime().optional()
103
+ });
104
+ export const createPaymentLinkInput = z
105
+ .object({
106
+ product: z.string().optional(),
107
+ plan: z.string().optional(),
108
+ custom: customLineItemSchema.optional(),
109
+ quantity: z.number().int().positive().default(1),
110
+ returnUrl: z.string().url().optional(),
111
+ idempotencyKey: z.string().max(200).optional(),
112
+ metadata: z.record(z.string(), z.string()).optional()
113
+ })
114
+ .refine((v) => Number(Boolean(v.product)) + Number(Boolean(v.plan)) + Number(Boolean(v.custom)) === 1, {
115
+ message: 'Provide exactly one of: product, plan, or custom'
116
+ });
117
+ export const paymentLinkResultSchema = z.object({
118
+ paymentLinkId: z.string(),
119
+ url: z.string().url(),
120
+ provider: z.enum(['stripe', 'dodo'])
121
+ });
122
+ export const createInvoiceInput = z
123
+ .object({
124
+ product: z.string().optional(),
125
+ custom: customLineItemSchema.optional(),
126
+ quantity: z.number().int().positive().default(1),
127
+ daysUntilDue: z.number().int().positive().max(365).default(30),
128
+ idempotencyKey: z.string().max(200).optional(),
129
+ metadata: z.record(z.string(), z.string()).optional()
130
+ })
131
+ .refine((v) => Number(Boolean(v.product)) + Number(Boolean(v.custom)) === 1, {
132
+ message: 'Provide exactly one of: product or custom'
133
+ });
134
+ export const invoiceResultSchema = z.object({
135
+ invoiceId: z.string(),
136
+ status: z.enum(['open', 'paid', 'draft', 'void']),
137
+ amount: z.number().int().nonnegative(),
138
+ currency: z.string(),
139
+ hostedInvoiceUrl: z.string().url(),
140
+ pdfUrl: z.string().url().optional(),
141
+ provider: z.enum(['stripe', 'dodo'])
142
+ });
143
+ export const directChargeInput = z
144
+ .object({
145
+ product: z.string().optional(),
146
+ custom: customLineItemSchema.optional(),
147
+ amount: z.number().int().positive().optional(),
148
+ currency: z.string().length(3).toLowerCase().optional(),
149
+ description: z.string().max(1000).optional(),
150
+ paymentMethodId: z.string().optional(),
151
+ idempotencyKey: z.string().max(200).optional(),
152
+ metadata: z.record(z.string(), z.string()).optional()
153
+ })
154
+ .refine((v) => Boolean(v.product || v.custom || v.amount), {
155
+ message: 'Provide product, custom, or amount'
156
+ });
157
+ export const chargeResultSchema = z.object({
158
+ chargeId: z.string(),
159
+ status: z.enum(['succeeded', 'requires_action', 'failed']),
160
+ amount: z.number().int().nonnegative(),
161
+ currency: z.string(),
162
+ provider: z.enum(['stripe', 'dodo']),
163
+ checkoutUrl: z.string().url().optional(),
164
+ clientSecret: z.string().optional()
165
+ });
166
+ export const subscribeInput = z.object({
167
+ plan: z.string().min(1),
168
+ returnUrl: z.string().url().optional(),
169
+ idempotencyKey: z.string().max(200).optional(),
170
+ metadata: z.record(z.string(), z.string()).optional()
171
+ });
172
+ export const subscribeResultSchema = z.object({
173
+ subscriptionId: z.string(),
174
+ planId: z.string(),
175
+ status: z.enum(['active', 'trialing', 'requires_action']),
176
+ provider: z.enum(['stripe', 'dodo']),
177
+ checkoutUrl: z.string().url().optional()
178
+ });
179
+ export const changeTierInput = z.object({
180
+ plan: z.string().min(1),
181
+ proration: z.enum(['prorated_immediately', 'next_cycle', 'none']).default('prorated_immediately'),
182
+ idempotencyKey: z.string().max(200).optional()
183
+ });
184
+ export const cancelSubscriptionInput = z.object({
185
+ immediately: z.boolean().default(false),
186
+ reason: z.string().max(500).optional(),
187
+ idempotencyKey: z.string().max(200).optional()
188
+ });
189
+ export const subscriptionRecordSchema = z.object({
190
+ subscriptionId: z.string(),
191
+ planId: z.string(),
192
+ status: subscriptionStatusSchema,
193
+ provider: z.enum(['stripe', 'dodo']),
194
+ cancelAtPeriodEnd: z.boolean(),
195
+ currentPeriodStart: z.string().datetime().optional(),
196
+ currentPeriodEnd: z.string().datetime().optional()
197
+ });
198
+ export const recordUsageInput = z.object({
199
+ metric: z.string().default('ai_tokens'),
200
+ amount: z.number().positive(),
201
+ inputTokens: z.number().int().nonnegative().optional(),
202
+ outputTokens: z.number().int().nonnegative().optional(),
203
+ model: z.string().optional(),
204
+ idempotencyKey: z.string().max(200).optional(),
205
+ metadata: z.record(z.string(), z.string()).optional()
206
+ });
207
+ export const usageStatusResultSchema = z.object({
208
+ userId: entryId,
209
+ periodKey: z.string(),
210
+ planId: z.string(),
211
+ aiTokensUsed: z.number().int().nonnegative(),
212
+ aiTokensLimit: z.number().int().nonnegative().nullable(),
213
+ bonusAiTokens: z.number().int().nonnegative(),
214
+ overageTokensReported: z.number().int().nonnegative(),
215
+ overageEnabled: z.boolean(),
216
+ maxOverageTokens: z.number().int().positive().optional(),
217
+ metricsUsed: z.record(z.string(), z.number()),
218
+ metricsLimits: z.record(z.string(), z.number()),
219
+ bonusMetrics: z.record(z.string(), z.number())
220
+ });
221
+ export const usageSummarySchema = usageStatusResultSchema;
222
+ export const quotaCheckResultSchema = z.object({
223
+ allowed: z.boolean(),
224
+ metric: z.string(),
225
+ used: z.number().nonnegative(),
226
+ limit: z.number().nonnegative().nullable(),
227
+ bonusRemaining: z.number().nonnegative(),
228
+ overageEnabled: z.boolean(),
229
+ remaining: z.number().nullable()
230
+ });
231
+ export const customerBillingSummarySchema = z.object({
232
+ userId: entryId,
233
+ planId: z.string(),
234
+ plan: z.object({
235
+ id: z.string(),
236
+ name: z.string(),
237
+ interval: z.enum(['month', 'year', 'free']),
238
+ amount: z.number(),
239
+ currency: z.string()
240
+ }),
241
+ status: subscriptionStatusSchema,
242
+ subscriptionId: z.string().optional(),
243
+ activeProvider: z.enum(['stripe', 'dodo']).optional(),
244
+ currentPeriodStart: z.string().datetime().optional(),
245
+ currentPeriodEnd: z.string().datetime().optional(),
246
+ cancelAtPeriodEnd: z.boolean(),
247
+ bonusAiTokens: z.number().int().nonnegative(),
248
+ credits: z.number().nonnegative(),
249
+ bonusMetrics: z.record(z.string(), z.number())
250
+ });
251
+ export const paymentWebhookParamsSchema = z.object({
252
+ provider: z.enum(['stripe', 'dodo'])
253
+ });
254
+ export const paymentWebhookResultSchema = z.object({
255
+ received: z.literal(true),
256
+ eventId: z.string(),
257
+ handled: z.boolean(),
258
+ deduplicated: z.boolean().optional()
259
+ });
260
+ //# sourceMappingURL=schema.js.map