@vm0/cli 9.278.0 → 9.278.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.
- package/{agent-HUDTEGLK.js → agent-4F3XAJWN.js} +12 -6
- package/agent-4F3XAJWN.js.map +1 -0
- package/{banking-BMZONEXP.js → banking-CWQFQKZB.js} +61 -7
- package/banking-CWQFQKZB.js.map +1 -0
- package/{browser-LQP445CU.js → browser-BI6UFWPH.js} +4 -5
- package/browser-BI6UFWPH.js.map +1 -0
- package/{chat-UF7QAWUT.js → chat-MKIW4FPP.js} +24 -16
- package/chat-MKIW4FPP.js.map +1 -0
- package/chunk-2SJTFDC2.js +189 -0
- package/chunk-2SJTFDC2.js.map +1 -0
- package/chunk-4FTIKZKP.js +64 -0
- package/chunk-4FTIKZKP.js.map +1 -0
- package/chunk-7UZXNER2.js +568 -0
- package/chunk-7UZXNER2.js.map +1 -0
- package/chunk-A6ZRMNM3.js +102 -0
- package/chunk-A6ZRMNM3.js.map +1 -0
- package/{chunk-QC63TUJC.js → chunk-C62A6LD6.js} +2 -2
- package/chunk-CCTF3YVW.js +52 -0
- package/chunk-CCTF3YVW.js.map +1 -0
- package/chunk-CD2BLKGC.js +188 -0
- package/chunk-CD2BLKGC.js.map +1 -0
- package/chunk-CEJGHPF3.js +55 -0
- package/chunk-CEJGHPF3.js.map +1 -0
- package/chunk-DUA6CF7E.js +2053 -0
- package/chunk-DUA6CF7E.js.map +1 -0
- package/chunk-E2TQAKNL.js +1300 -0
- package/chunk-E2TQAKNL.js.map +1 -0
- package/{chunk-5ZZI2LSO.js → chunk-GHKWW4NC.js} +5 -5
- package/chunk-GV3PG6CZ.js +114 -0
- package/chunk-GV3PG6CZ.js.map +1 -0
- package/chunk-GY7D76EZ.js +81 -0
- package/chunk-GY7D76EZ.js.map +1 -0
- package/chunk-HHHHZMTA.js +434 -0
- package/chunk-HHHHZMTA.js.map +1 -0
- package/chunk-HZYOJTEE.js +1275 -0
- package/chunk-HZYOJTEE.js.map +1 -0
- package/chunk-J3ZRXVI6.js +740 -0
- package/chunk-J3ZRXVI6.js.map +1 -0
- package/chunk-JJWFO27K.js +31 -0
- package/chunk-JJWFO27K.js.map +1 -0
- package/chunk-JV6LM2YC.js +39 -0
- package/chunk-JV6LM2YC.js.map +1 -0
- package/chunk-KER77KJB.js +105 -0
- package/chunk-KER77KJB.js.map +1 -0
- package/{chunk-V5ZVB7RJ.js → chunk-KKO2XGLQ.js} +1 -6
- package/chunk-KKO2XGLQ.js.map +1 -0
- package/chunk-LIYPTQAO.js +198 -0
- package/chunk-LIYPTQAO.js.map +1 -0
- package/chunk-LYLDVUHT.js +131 -0
- package/chunk-LYLDVUHT.js.map +1 -0
- package/chunk-PFWBO2VK.js +801 -0
- package/chunk-PFWBO2VK.js.map +1 -0
- package/chunk-RTCRU35A.js +194 -0
- package/chunk-RTCRU35A.js.map +1 -0
- package/{chunk-F2AM4RWA.js → chunk-RTEEWZUT.js} +2 -2
- package/{chunk-F2AM4RWA.js.map → chunk-RTEEWZUT.js.map} +1 -1
- package/{chunk-BRV4D3P2.js → chunk-RUKMHBNQ.js} +2 -2
- package/chunk-SA4DYSBR.js +31 -0
- package/chunk-SA4DYSBR.js.map +1 -0
- package/chunk-SJPOFQJU.js +792 -0
- package/chunk-SJPOFQJU.js.map +1 -0
- package/{chunk-V7A6ZFHR.js → chunk-SMPSKBAP.js} +25 -774
- package/chunk-SMPSKBAP.js.map +1 -0
- package/{chunk-E53W6UVQ.js → chunk-T2X2EGV2.js} +4 -4
- package/chunk-T2X2EGV2.js.map +1 -0
- package/chunk-U2GQH6AD.js +309 -0
- package/chunk-U2GQH6AD.js.map +1 -0
- package/chunk-U6A2RPHO.js +66 -0
- package/chunk-U6A2RPHO.js.map +1 -0
- package/chunk-UIXUGVZB.js +362 -0
- package/chunk-UIXUGVZB.js.map +1 -0
- package/chunk-XRZKJACM.js +49 -0
- package/chunk-XRZKJACM.js.map +1 -0
- package/chunk-YDS3X7KB.js +202 -0
- package/chunk-YDS3X7KB.js.map +1 -0
- package/{chunk-A6TMOGPR.js → chunk-ZKNJW4K6.js} +1412 -334
- package/chunk-ZKNJW4K6.js.map +1 -0
- package/chunk-ZXSCBS77.js +90 -0
- package/chunk-ZXSCBS77.js.map +1 -0
- package/{computer-use-RRD7BCCK.js → computer-use-6AEVW47F.js} +9 -7
- package/computer-use-6AEVW47F.js.map +1 -0
- package/{connector-XX7UU6XE.js → connector-XDQ6JEBU.js} +25 -13
- package/connector-XDQ6JEBU.js.map +1 -0
- package/{credit-GDNNAQRO.js → credit-JPQA5XPA.js} +8 -10
- package/credit-JPQA5XPA.js.map +1 -0
- package/{developer-support-IISP5UBI.js → developer-support-V7NZOU2P.js} +27 -7
- package/developer-support-V7NZOU2P.js.map +1 -0
- package/{doctor-IZM2TJOH.js → doctor-FJO24TG3.js} +13 -11
- package/doctor-FJO24TG3.js.map +1 -0
- package/{feishu-XB7SQBSI.js → feishu-PNOAM33Q.js} +99 -9
- package/feishu-PNOAM33Q.js.map +1 -0
- package/{finance-OGWHKQLU.js → finance-55OJ6GYP.js} +49 -9
- package/finance-55OJ6GYP.js.map +1 -0
- package/{generate-AA2PVOYQ.js → generate-XUKBK523.js} +26 -21
- package/generate-XUKBK523.js.map +1 -0
- package/{github-VJVIBTVF.js → github-V4MD2PMM.js} +83 -8
- package/github-V4MD2PMM.js.map +1 -0
- package/{goal-7SYVHDTK.js → goal-FS5FJKVU.js} +69 -13
- package/goal-FS5FJKVU.js.map +1 -0
- package/{host-UVQMIOBA.js → host-GITTJ6PR.js} +124 -10
- package/host-GITTJ6PR.js.map +1 -0
- package/{logs-PIS4X24E.js → logs-EEUIGYUD.js} +51 -11
- package/logs-EEUIGYUD.js.map +1 -0
- package/{mail-L33OSQ2R.js → mail-G4SAJSBD.js} +39 -8
- package/mail-G4SAJSBD.js.map +1 -0
- package/{maps-D5XTXU5U.js → maps-7ANNU3BX.js} +65 -11
- package/maps-7ANNU3BX.js.map +1 -0
- package/{model-ZFMRECDM.js → model-DSPDCJLB.js} +6 -6
- package/model-DSPDCJLB.js.map +1 -0
- package/{model-provider-EZZ2DRYZ.js → model-provider-RZQ45PNG.js} +6 -6
- package/model-provider-RZQ45PNG.js.map +1 -0
- package/package.json +1 -1
- package/{people-search-PFTIO2QS.js → people-search-I7PUMF5M.js} +22 -6
- package/people-search-I7PUMF5M.js.map +1 -0
- package/{phone-6SG5ZUNL.js → phone-SSAPGMTW.js} +90 -9
- package/phone-SSAPGMTW.js.map +1 -0
- package/{recognize-LLU6J3SW.js → recognize-D7VORZBN.js} +27 -9
- package/recognize-D7VORZBN.js.map +1 -0
- package/{resource-FGUSXS4G.js → resource-76IV3TMW.js} +21 -7
- package/resource-76IV3TMW.js.map +1 -0
- package/{scrape-BAUZ2YFD.js → scrape-JBDLNTLB.js} +22 -6
- package/scrape-JBDLNTLB.js.map +1 -0
- package/{search-DLO5RXRM.js → search-UNZNUTZX.js} +29 -9
- package/search-UNZNUTZX.js.map +1 -0
- package/{slack-CVATPKP3.js → slack-AAH6GG2W.js} +103 -11
- package/slack-AAH6GG2W.js.map +1 -0
- package/{teams-ZZYO6YIK.js → teams-6OPXE4TX.js} +90 -9
- package/teams-6OPXE4TX.js.map +1 -0
- package/{telegram-VY7T4YAR.js → telegram-RRZG73RT.js} +101 -10
- package/telegram-RRZG73RT.js.map +1 -0
- package/{upgrade-GFA4ZUU4.js → upgrade-I5IL4UQL.js} +3 -4
- package/upgrade-I5IL4UQL.js.map +1 -0
- package/{video-STFG7BET.js → video-HV44W4X7.js} +5 -4
- package/video-HV44W4X7.js.map +1 -0
- package/{weather-ISJEHJWR.js → weather-EQ7CSADB.js} +70 -16
- package/weather-EQ7CSADB.js.map +1 -0
- package/{web-YN4CVHK7.js → web-6LIMWEOZ.js} +5 -5
- package/web-6LIMWEOZ.js.map +1 -0
- package/{web-search-PC7IECND.js → web-search-AT7WONZN.js} +22 -6
- package/web-search-AT7WONZN.js.map +1 -0
- package/{whoami-KXFXZGM6.js → whoami-RKTLLSI4.js} +16 -7
- package/whoami-RKTLLSI4.js.map +1 -0
- package/{workflow-O7YZHB7A.js → workflow-ZH32P622.js} +135 -39
- package/workflow-ZH32P622.js.map +1 -0
- package/zero.js +40 -40
- package/agent-HUDTEGLK.js.map +0 -1
- package/banking-BMZONEXP.js.map +0 -1
- package/browser-LQP445CU.js.map +0 -1
- package/chat-UF7QAWUT.js.map +0 -1
- package/chunk-2W73DZDW.js +0 -32
- package/chunk-2W73DZDW.js.map +0 -1
- package/chunk-6PN6QGIM.js +0 -11405
- package/chunk-6PN6QGIM.js.map +0 -1
- package/chunk-A6TMOGPR.js.map +0 -1
- package/chunk-ANOLYIPL.js +0 -10
- package/chunk-ANOLYIPL.js.map +0 -1
- package/chunk-E53W6UVQ.js.map +0 -1
- package/chunk-V5ZVB7RJ.js.map +0 -1
- package/chunk-V7A6ZFHR.js.map +0 -1
- package/computer-use-RRD7BCCK.js.map +0 -1
- package/connector-XX7UU6XE.js.map +0 -1
- package/credit-GDNNAQRO.js.map +0 -1
- package/developer-support-IISP5UBI.js.map +0 -1
- package/doctor-IZM2TJOH.js.map +0 -1
- package/feishu-XB7SQBSI.js.map +0 -1
- package/finance-OGWHKQLU.js.map +0 -1
- package/generate-AA2PVOYQ.js.map +0 -1
- package/github-VJVIBTVF.js.map +0 -1
- package/goal-7SYVHDTK.js.map +0 -1
- package/host-UVQMIOBA.js.map +0 -1
- package/logs-PIS4X24E.js.map +0 -1
- package/mail-L33OSQ2R.js.map +0 -1
- package/maps-D5XTXU5U.js.map +0 -1
- package/model-ZFMRECDM.js.map +0 -1
- package/model-provider-EZZ2DRYZ.js.map +0 -1
- package/people-search-PFTIO2QS.js.map +0 -1
- package/phone-6SG5ZUNL.js.map +0 -1
- package/recognize-LLU6J3SW.js.map +0 -1
- package/resource-FGUSXS4G.js.map +0 -1
- package/scrape-BAUZ2YFD.js.map +0 -1
- package/search-DLO5RXRM.js.map +0 -1
- package/slack-CVATPKP3.js.map +0 -1
- package/teams-ZZYO6YIK.js.map +0 -1
- package/telegram-VY7T4YAR.js.map +0 -1
- package/upgrade-GFA4ZUU4.js.map +0 -1
- package/video-STFG7BET.js.map +0 -1
- package/weather-ISJEHJWR.js.map +0 -1
- package/web-YN4CVHK7.js.map +0 -1
- package/web-search-PC7IECND.js.map +0 -1
- package/whoami-KXFXZGM6.js.map +0 -1
- package/workflow-O7YZHB7A.js.map +0 -1
- /package/{chunk-QC63TUJC.js.map → chunk-C62A6LD6.js.map} +0 -0
- /package/{chunk-5ZZI2LSO.js.map → chunk-GHKWW4NC.js.map} +0 -0
- /package/{chunk-BRV4D3P2.js.map → chunk-RUKMHBNQ.js.map} +0 -0
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from "node:module";
|
|
3
|
+
const require = __createRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
authHeadersSchema
|
|
6
|
+
} from "./chunk-JV6LM2YC.js";
|
|
7
|
+
import {
|
|
8
|
+
apiErrorSchema,
|
|
9
|
+
external_exports,
|
|
10
|
+
initContract
|
|
11
|
+
} from "./chunk-GHKWW4NC.js";
|
|
12
|
+
import {
|
|
13
|
+
init_esm_shims
|
|
14
|
+
} from "./chunk-AUWSMG4F.js";
|
|
15
|
+
|
|
16
|
+
// ../../packages/api-contracts/src/contracts/zero-billing.ts
|
|
17
|
+
init_esm_shims();
|
|
18
|
+
|
|
19
|
+
// ../../packages/api-contracts/src/contracts/zero-attribution.ts
|
|
20
|
+
init_esm_shims();
|
|
21
|
+
var c = initContract();
|
|
22
|
+
var SOURCE_TYPES = [
|
|
23
|
+
"paid",
|
|
24
|
+
"organic_search",
|
|
25
|
+
"referral",
|
|
26
|
+
"direct",
|
|
27
|
+
"internal",
|
|
28
|
+
"unknown"
|
|
29
|
+
];
|
|
30
|
+
var adAttributionMetadataSchema = external_exports.object({
|
|
31
|
+
source_type: external_exports.enum(SOURCE_TYPES).optional(),
|
|
32
|
+
referrer_domain: external_exports.string().min(1).max(253).optional(),
|
|
33
|
+
landing_host: external_exports.string().min(1).max(253).optional(),
|
|
34
|
+
landing_path: external_exports.string().min(1).max(500).optional(),
|
|
35
|
+
vm0_source: external_exports.string().min(1).max(100).optional(),
|
|
36
|
+
utm_source: external_exports.string().min(1).max(100).optional(),
|
|
37
|
+
utm_medium: external_exports.string().min(1).max(100).optional(),
|
|
38
|
+
utm_campaign: external_exports.string().min(1).max(200).optional(),
|
|
39
|
+
utm_content: external_exports.string().min(1).max(200).optional(),
|
|
40
|
+
utm_term: external_exports.string().min(1).max(200).optional(),
|
|
41
|
+
vm0_experiment: external_exports.string().min(1).max(100).optional(),
|
|
42
|
+
vm0_variant: external_exports.string().min(1).max(100).optional(),
|
|
43
|
+
lp_variant: external_exports.string().min(1).max(100).optional(),
|
|
44
|
+
gclid: external_exports.string().min(1).max(200).optional(),
|
|
45
|
+
gbraid: external_exports.string().min(1).max(200).optional(),
|
|
46
|
+
wbraid: external_exports.string().min(1).max(200).optional(),
|
|
47
|
+
// GA4's browser client ID is read from the first-party _ga cookie. It is
|
|
48
|
+
// carried separately from ad click IDs so server-side GA4 events can be
|
|
49
|
+
// joined back to the browser session without treating every visitor as a
|
|
50
|
+
// Google Ads conversion.
|
|
51
|
+
ga_client_id: external_exports.string().min(1).max(100).optional(),
|
|
52
|
+
gclid_present: external_exports.literal("true").optional(),
|
|
53
|
+
gbraid_present: external_exports.literal("true").optional(),
|
|
54
|
+
wbraid_present: external_exports.literal("true").optional()
|
|
55
|
+
}).strict();
|
|
56
|
+
var recordSignupAttributionRequestSchema = external_exports.object({
|
|
57
|
+
attribution: adAttributionMetadataSchema
|
|
58
|
+
});
|
|
59
|
+
var recordSignupAttributionResponseSchema = external_exports.object({
|
|
60
|
+
recorded: external_exports.boolean()
|
|
61
|
+
});
|
|
62
|
+
var zeroAttributionContract = c.router({
|
|
63
|
+
recordSignup: {
|
|
64
|
+
method: "POST",
|
|
65
|
+
path: "/api/zero/attribution/signup",
|
|
66
|
+
headers: authHeadersSchema,
|
|
67
|
+
body: recordSignupAttributionRequestSchema,
|
|
68
|
+
responses: {
|
|
69
|
+
200: recordSignupAttributionResponseSchema,
|
|
70
|
+
400: apiErrorSchema,
|
|
71
|
+
401: apiErrorSchema,
|
|
72
|
+
500: apiErrorSchema
|
|
73
|
+
},
|
|
74
|
+
summary: "Record first-touch signup attribution on the current user"
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// ../../packages/api-contracts/src/contracts/zero-billing.ts
|
|
79
|
+
var c2 = initContract();
|
|
80
|
+
var autoRechargeSchema = external_exports.object({
|
|
81
|
+
enabled: external_exports.boolean(),
|
|
82
|
+
threshold: external_exports.number().nullable(),
|
|
83
|
+
amount: external_exports.number().nullable()
|
|
84
|
+
});
|
|
85
|
+
var creditExpirySchema = external_exports.object({
|
|
86
|
+
expiringNextCycle: external_exports.number(),
|
|
87
|
+
nextExpiryDate: external_exports.string().nullable()
|
|
88
|
+
});
|
|
89
|
+
var creditBreakdownSegmentSchema = external_exports.object({
|
|
90
|
+
category: external_exports.enum(["plan", "free", "promotional", "payAsYouGo"]),
|
|
91
|
+
label: external_exports.string(),
|
|
92
|
+
credits: external_exports.number(),
|
|
93
|
+
// Only set on `plan` segments. Lets the UI decide whether a segment
|
|
94
|
+
// represents the current plan or leftover credits from a previous plan
|
|
95
|
+
// without round-tripping through the `label` string.
|
|
96
|
+
tier: external_exports.enum(["pro", "team"]).optional()
|
|
97
|
+
});
|
|
98
|
+
var creditGrantSchema = external_exports.object({
|
|
99
|
+
id: external_exports.string(),
|
|
100
|
+
source: external_exports.string(),
|
|
101
|
+
label: external_exports.string(),
|
|
102
|
+
amount: external_exports.number(),
|
|
103
|
+
remaining: external_exports.number(),
|
|
104
|
+
createdAt: external_exports.string(),
|
|
105
|
+
expiresAt: external_exports.string()
|
|
106
|
+
});
|
|
107
|
+
var scheduledBillingChangeSchema = external_exports.object({
|
|
108
|
+
type: external_exports.enum(["cancel", "downgrade"]),
|
|
109
|
+
targetTier: external_exports.enum(["limited-free-1", "pro-suspend", "pro", "team"]).nullable(),
|
|
110
|
+
effectiveDate: external_exports.string().nullable()
|
|
111
|
+
});
|
|
112
|
+
var concurrencySubscriptionSchema = external_exports.object({
|
|
113
|
+
id: external_exports.string(),
|
|
114
|
+
quantity: external_exports.number().int().nonnegative(),
|
|
115
|
+
currentPeriodEnd: external_exports.string().nullable(),
|
|
116
|
+
cancelAtPeriodEnd: external_exports.boolean()
|
|
117
|
+
});
|
|
118
|
+
var usageAllowanceWindowSchema = external_exports.object({
|
|
119
|
+
kind: external_exports.enum(["short", "weekly"]),
|
|
120
|
+
windowSeconds: external_exports.number().int().positive(),
|
|
121
|
+
unitLimit: external_exports.number(),
|
|
122
|
+
consumedUnits: external_exports.number(),
|
|
123
|
+
remainingUnits: external_exports.number(),
|
|
124
|
+
startsAt: external_exports.string().nullable(),
|
|
125
|
+
expiresAt: external_exports.string().nullable()
|
|
126
|
+
});
|
|
127
|
+
var usageAllowanceSchema = external_exports.object({
|
|
128
|
+
windows: external_exports.array(usageAllowanceWindowSchema)
|
|
129
|
+
});
|
|
130
|
+
var billingStatusResponseSchema = external_exports.object({
|
|
131
|
+
tier: external_exports.string(),
|
|
132
|
+
canBuyConcurrency: external_exports.boolean().optional(),
|
|
133
|
+
canBuyCredits: external_exports.boolean().optional(),
|
|
134
|
+
autoRechargeAllowed: external_exports.boolean().optional(),
|
|
135
|
+
supportByok: external_exports.boolean().optional(),
|
|
136
|
+
restrictedVm0Models: external_exports.boolean().optional(),
|
|
137
|
+
videoGenerationAllowed: external_exports.boolean().optional(),
|
|
138
|
+
workflowWebhookAutomationAllowed: external_exports.boolean().optional(),
|
|
139
|
+
credits: external_exports.number(),
|
|
140
|
+
onboardingPaymentPending: external_exports.boolean(),
|
|
141
|
+
subscriptionStatus: external_exports.string().nullable(),
|
|
142
|
+
currentPeriodEnd: external_exports.string().nullable(),
|
|
143
|
+
cancelAtPeriodEnd: external_exports.boolean(),
|
|
144
|
+
scheduledChange: scheduledBillingChangeSchema.nullable(),
|
|
145
|
+
hasSubscription: external_exports.boolean(),
|
|
146
|
+
autoRecharge: autoRechargeSchema,
|
|
147
|
+
creditExpiry: creditExpirySchema,
|
|
148
|
+
creditBreakdown: external_exports.array(creditBreakdownSegmentSchema),
|
|
149
|
+
creditGrants: external_exports.array(creditGrantSchema),
|
|
150
|
+
concurrencyLimit: external_exports.number().int().nonnegative(),
|
|
151
|
+
concurrencySubscriptions: external_exports.array(concurrencySubscriptionSchema),
|
|
152
|
+
usageAllowance: usageAllowanceSchema.nullable().optional()
|
|
153
|
+
});
|
|
154
|
+
var checkoutResponseSchema = external_exports.object({
|
|
155
|
+
url: external_exports.string()
|
|
156
|
+
});
|
|
157
|
+
var checkoutCompleteResponseSchema = external_exports.object({
|
|
158
|
+
completed: external_exports.boolean()
|
|
159
|
+
});
|
|
160
|
+
var redeemCodeResponseSchema = external_exports.object({
|
|
161
|
+
redeemed: external_exports.literal(true)
|
|
162
|
+
});
|
|
163
|
+
var portalResponseSchema = external_exports.object({
|
|
164
|
+
url: external_exports.string()
|
|
165
|
+
});
|
|
166
|
+
var redeemResponseSchema = external_exports.discriminatedUnion("status", [
|
|
167
|
+
external_exports.object({
|
|
168
|
+
status: external_exports.literal("ready"),
|
|
169
|
+
checkoutUrl: external_exports.string().url()
|
|
170
|
+
}),
|
|
171
|
+
external_exports.object({
|
|
172
|
+
status: external_exports.literal("already_granted")
|
|
173
|
+
}),
|
|
174
|
+
external_exports.object({
|
|
175
|
+
status: external_exports.literal("processing")
|
|
176
|
+
}),
|
|
177
|
+
external_exports.object({
|
|
178
|
+
status: external_exports.literal("error"),
|
|
179
|
+
reason: external_exports.enum([
|
|
180
|
+
"campaign_misconfigured",
|
|
181
|
+
"admin_required",
|
|
182
|
+
"billing_unavailable"
|
|
183
|
+
])
|
|
184
|
+
})
|
|
185
|
+
]);
|
|
186
|
+
var checkoutRequestSchema = external_exports.object({
|
|
187
|
+
tier: external_exports.enum(["pro", "team"]),
|
|
188
|
+
successUrl: external_exports.string().url(),
|
|
189
|
+
cancelUrl: external_exports.string().url(),
|
|
190
|
+
trialDays: external_exports.literal(7).optional(),
|
|
191
|
+
adAttribution: adAttributionMetadataSchema.optional()
|
|
192
|
+
});
|
|
193
|
+
var checkoutCompleteRequestSchema = external_exports.object({
|
|
194
|
+
sessionId: external_exports.string().min(1)
|
|
195
|
+
});
|
|
196
|
+
var concurrencyCheckoutRequestSchema = external_exports.object({
|
|
197
|
+
quantity: external_exports.number().int().min(1).max(1e3),
|
|
198
|
+
successUrl: external_exports.string().url(),
|
|
199
|
+
cancelUrl: external_exports.string().url()
|
|
200
|
+
});
|
|
201
|
+
var concurrencySubscriptionCancelResponseSchema = external_exports.object({
|
|
202
|
+
success: external_exports.literal(true),
|
|
203
|
+
currentPeriodEnd: external_exports.string().nullable()
|
|
204
|
+
});
|
|
205
|
+
var concurrencySubscriptionRestoreResponseSchema = external_exports.object({
|
|
206
|
+
success: external_exports.literal(true)
|
|
207
|
+
});
|
|
208
|
+
var creditCheckoutRequestSchema = external_exports.object({
|
|
209
|
+
credits: external_exports.number().int().min(1e3).max(1e7),
|
|
210
|
+
customAmount: external_exports.boolean().optional(),
|
|
211
|
+
successUrl: external_exports.string().url(),
|
|
212
|
+
cancelUrl: external_exports.string().url(),
|
|
213
|
+
autoRecharge: external_exports.object({
|
|
214
|
+
enabled: external_exports.boolean(),
|
|
215
|
+
threshold: external_exports.number().int().positive().max(1e7).optional(),
|
|
216
|
+
amount: external_exports.number().int().min(1e3).max(1e7).optional()
|
|
217
|
+
}).optional()
|
|
218
|
+
}).refine(
|
|
219
|
+
(data) => {
|
|
220
|
+
return data.customAmount !== true || data.autoRecharge === void 0;
|
|
221
|
+
},
|
|
222
|
+
{ message: "auto-recharge is not supported for custom amount checkout" }
|
|
223
|
+
).refine(
|
|
224
|
+
(data) => {
|
|
225
|
+
return data.autoRecharge?.enabled !== true || data.autoRecharge.threshold === void 0 || data.autoRecharge.amount === void 0 || data.autoRecharge.threshold < data.autoRecharge.amount;
|
|
226
|
+
},
|
|
227
|
+
{ message: "threshold must be less than amount to avoid recharge loops" }
|
|
228
|
+
);
|
|
229
|
+
var portalRequestSchema = external_exports.object({
|
|
230
|
+
returnUrl: external_exports.string().url()
|
|
231
|
+
});
|
|
232
|
+
var autoRechargeUpdateRequestSchema = external_exports.object({
|
|
233
|
+
enabled: external_exports.boolean(),
|
|
234
|
+
threshold: external_exports.number().int().positive().max(1e7).optional(),
|
|
235
|
+
amount: external_exports.number().int().min(1e3).max(1e7).optional()
|
|
236
|
+
}).refine(
|
|
237
|
+
(data) => {
|
|
238
|
+
return !data.enabled || data.threshold === void 0 || data.amount === void 0 || data.threshold < data.amount;
|
|
239
|
+
},
|
|
240
|
+
{ message: "threshold must be less than amount to avoid recharge loops" }
|
|
241
|
+
);
|
|
242
|
+
var redeemRequestSchema = external_exports.object({
|
|
243
|
+
successUrl: external_exports.string().url(),
|
|
244
|
+
cancelUrl: external_exports.string().url()
|
|
245
|
+
});
|
|
246
|
+
var redeemCodeRequestSchema = external_exports.object({
|
|
247
|
+
code: external_exports.string().trim().min(1)
|
|
248
|
+
});
|
|
249
|
+
var zeroBillingStatusContract = c2.router({
|
|
250
|
+
get: {
|
|
251
|
+
method: "GET",
|
|
252
|
+
path: "/api/zero/billing/status",
|
|
253
|
+
headers: authHeadersSchema,
|
|
254
|
+
responses: {
|
|
255
|
+
200: billingStatusResponseSchema,
|
|
256
|
+
401: apiErrorSchema,
|
|
257
|
+
403: apiErrorSchema,
|
|
258
|
+
500: apiErrorSchema
|
|
259
|
+
},
|
|
260
|
+
summary: "Get billing status for current org"
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
var zeroBillingCheckoutContract = c2.router({
|
|
264
|
+
create: {
|
|
265
|
+
method: "POST",
|
|
266
|
+
path: "/api/zero/billing/checkout",
|
|
267
|
+
headers: authHeadersSchema,
|
|
268
|
+
body: checkoutRequestSchema,
|
|
269
|
+
responses: {
|
|
270
|
+
200: checkoutResponseSchema,
|
|
271
|
+
400: apiErrorSchema,
|
|
272
|
+
401: apiErrorSchema,
|
|
273
|
+
403: apiErrorSchema,
|
|
274
|
+
500: apiErrorSchema,
|
|
275
|
+
503: apiErrorSchema
|
|
276
|
+
},
|
|
277
|
+
summary: "Create Stripe checkout session"
|
|
278
|
+
},
|
|
279
|
+
complete: {
|
|
280
|
+
method: "POST",
|
|
281
|
+
path: "/api/zero/billing/checkout/complete",
|
|
282
|
+
headers: authHeadersSchema,
|
|
283
|
+
body: checkoutCompleteRequestSchema,
|
|
284
|
+
responses: {
|
|
285
|
+
200: checkoutCompleteResponseSchema,
|
|
286
|
+
400: apiErrorSchema,
|
|
287
|
+
401: apiErrorSchema,
|
|
288
|
+
403: apiErrorSchema,
|
|
289
|
+
500: apiErrorSchema,
|
|
290
|
+
503: apiErrorSchema
|
|
291
|
+
},
|
|
292
|
+
summary: "Complete Stripe checkout session"
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
var zeroBillingConcurrencyCheckoutContract = c2.router({
|
|
296
|
+
create: {
|
|
297
|
+
method: "POST",
|
|
298
|
+
path: "/api/zero/billing/concurrency-checkout",
|
|
299
|
+
headers: authHeadersSchema,
|
|
300
|
+
body: concurrencyCheckoutRequestSchema,
|
|
301
|
+
responses: {
|
|
302
|
+
200: checkoutResponseSchema,
|
|
303
|
+
400: apiErrorSchema,
|
|
304
|
+
401: apiErrorSchema,
|
|
305
|
+
403: apiErrorSchema,
|
|
306
|
+
500: apiErrorSchema,
|
|
307
|
+
503: apiErrorSchema
|
|
308
|
+
},
|
|
309
|
+
summary: "Create Stripe checkout session for concurrency add-on"
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
var zeroBillingConcurrencySubscriptionContract = c2.router({
|
|
313
|
+
cancel: {
|
|
314
|
+
method: "POST",
|
|
315
|
+
path: "/api/zero/billing/concurrency-subscriptions/:subscriptionId/cancel",
|
|
316
|
+
pathParams: external_exports.object({
|
|
317
|
+
subscriptionId: external_exports.string().min(1)
|
|
318
|
+
}),
|
|
319
|
+
headers: authHeadersSchema,
|
|
320
|
+
body: external_exports.object({}),
|
|
321
|
+
responses: {
|
|
322
|
+
200: concurrencySubscriptionCancelResponseSchema,
|
|
323
|
+
401: apiErrorSchema,
|
|
324
|
+
403: apiErrorSchema,
|
|
325
|
+
404: apiErrorSchema,
|
|
326
|
+
500: apiErrorSchema,
|
|
327
|
+
503: apiErrorSchema
|
|
328
|
+
},
|
|
329
|
+
summary: "Cancel a concurrency add-on subscription at period end"
|
|
330
|
+
},
|
|
331
|
+
restore: {
|
|
332
|
+
method: "POST",
|
|
333
|
+
path: "/api/zero/billing/concurrency-subscriptions/:subscriptionId/restore",
|
|
334
|
+
pathParams: external_exports.object({
|
|
335
|
+
subscriptionId: external_exports.string().min(1)
|
|
336
|
+
}),
|
|
337
|
+
headers: authHeadersSchema,
|
|
338
|
+
body: external_exports.object({}),
|
|
339
|
+
responses: {
|
|
340
|
+
200: concurrencySubscriptionRestoreResponseSchema,
|
|
341
|
+
401: apiErrorSchema,
|
|
342
|
+
403: apiErrorSchema,
|
|
343
|
+
404: apiErrorSchema,
|
|
344
|
+
500: apiErrorSchema,
|
|
345
|
+
503: apiErrorSchema
|
|
346
|
+
},
|
|
347
|
+
summary: "Restore a concurrency add-on subscription"
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
var zeroBillingCreditCheckoutContract = c2.router({
|
|
351
|
+
create: {
|
|
352
|
+
method: "POST",
|
|
353
|
+
path: "/api/zero/billing/credit-checkout",
|
|
354
|
+
headers: authHeadersSchema,
|
|
355
|
+
body: creditCheckoutRequestSchema,
|
|
356
|
+
responses: {
|
|
357
|
+
200: checkoutResponseSchema,
|
|
358
|
+
400: apiErrorSchema,
|
|
359
|
+
401: apiErrorSchema,
|
|
360
|
+
403: apiErrorSchema,
|
|
361
|
+
500: apiErrorSchema,
|
|
362
|
+
503: apiErrorSchema
|
|
363
|
+
},
|
|
364
|
+
summary: "Create Stripe checkout session for credits"
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
var zeroBillingPortalContract = c2.router({
|
|
368
|
+
create: {
|
|
369
|
+
method: "POST",
|
|
370
|
+
path: "/api/zero/billing/portal",
|
|
371
|
+
headers: authHeadersSchema,
|
|
372
|
+
body: portalRequestSchema,
|
|
373
|
+
responses: {
|
|
374
|
+
200: portalResponseSchema,
|
|
375
|
+
400: apiErrorSchema,
|
|
376
|
+
401: apiErrorSchema,
|
|
377
|
+
403: apiErrorSchema,
|
|
378
|
+
500: apiErrorSchema,
|
|
379
|
+
503: apiErrorSchema
|
|
380
|
+
},
|
|
381
|
+
summary: "Create Stripe billing portal session"
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
var zeroBillingAutoRechargeContract = c2.router({
|
|
385
|
+
get: {
|
|
386
|
+
method: "GET",
|
|
387
|
+
path: "/api/zero/billing/auto-recharge",
|
|
388
|
+
headers: authHeadersSchema,
|
|
389
|
+
responses: {
|
|
390
|
+
200: autoRechargeSchema,
|
|
391
|
+
401: apiErrorSchema,
|
|
392
|
+
500: apiErrorSchema
|
|
393
|
+
},
|
|
394
|
+
summary: "Get auto-recharge configuration"
|
|
395
|
+
},
|
|
396
|
+
update: {
|
|
397
|
+
method: "PUT",
|
|
398
|
+
path: "/api/zero/billing/auto-recharge",
|
|
399
|
+
headers: authHeadersSchema,
|
|
400
|
+
body: autoRechargeUpdateRequestSchema,
|
|
401
|
+
responses: {
|
|
402
|
+
200: autoRechargeSchema,
|
|
403
|
+
400: apiErrorSchema,
|
|
404
|
+
401: apiErrorSchema,
|
|
405
|
+
403: apiErrorSchema,
|
|
406
|
+
500: apiErrorSchema
|
|
407
|
+
},
|
|
408
|
+
summary: "Update auto-recharge configuration"
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
var invoiceSchema = external_exports.object({
|
|
412
|
+
id: external_exports.string(),
|
|
413
|
+
number: external_exports.string().nullable(),
|
|
414
|
+
date: external_exports.number(),
|
|
415
|
+
amount: external_exports.number(),
|
|
416
|
+
status: external_exports.string().nullable(),
|
|
417
|
+
hostedInvoiceUrl: external_exports.string().nullable()
|
|
418
|
+
});
|
|
419
|
+
var billingInvoicesResponseSchema = external_exports.object({
|
|
420
|
+
invoices: external_exports.array(invoiceSchema),
|
|
421
|
+
// Optional while the frontend can overlap with API deployments that do not expose ZIP downloads yet.
|
|
422
|
+
receiptDownloadsSupported: external_exports.literal(true).optional()
|
|
423
|
+
});
|
|
424
|
+
var billingReceiptsMonthSchema = external_exports.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/u);
|
|
425
|
+
function billingMonthIndex(month) {
|
|
426
|
+
return Number(month.slice(0, 4)) * 12 + Number(month.slice(5, 7)) - 1;
|
|
427
|
+
}
|
|
428
|
+
var zeroBillingInvoicesContract = c2.router({
|
|
429
|
+
get: {
|
|
430
|
+
method: "GET",
|
|
431
|
+
path: "/api/zero/billing/invoices",
|
|
432
|
+
headers: authHeadersSchema,
|
|
433
|
+
responses: {
|
|
434
|
+
200: billingInvoicesResponseSchema,
|
|
435
|
+
401: apiErrorSchema,
|
|
436
|
+
403: apiErrorSchema,
|
|
437
|
+
500: apiErrorSchema
|
|
438
|
+
},
|
|
439
|
+
summary: "Get invoices for current org"
|
|
440
|
+
},
|
|
441
|
+
downloadReceipts: {
|
|
442
|
+
method: "GET",
|
|
443
|
+
path: "/api/zero/billing/invoices/receipts",
|
|
444
|
+
headers: authHeadersSchema,
|
|
445
|
+
query: external_exports.object({
|
|
446
|
+
startMonth: billingReceiptsMonthSchema,
|
|
447
|
+
endMonth: billingReceiptsMonthSchema
|
|
448
|
+
}).refine((query) => {
|
|
449
|
+
return query.startMonth <= query.endMonth;
|
|
450
|
+
}, "startMonth must not be after endMonth").refine((query) => {
|
|
451
|
+
return billingMonthIndex(query.endMonth) - billingMonthIndex(query.startMonth) < 3;
|
|
452
|
+
}, "Receipt downloads are limited to three consecutive months"),
|
|
453
|
+
responses: {
|
|
454
|
+
200: c2.otherResponse({
|
|
455
|
+
contentType: "application/zip",
|
|
456
|
+
body: c2.type()
|
|
457
|
+
}),
|
|
458
|
+
401: apiErrorSchema,
|
|
459
|
+
403: apiErrorSchema,
|
|
460
|
+
404: apiErrorSchema,
|
|
461
|
+
500: apiErrorSchema,
|
|
462
|
+
502: apiErrorSchema
|
|
463
|
+
},
|
|
464
|
+
summary: "Download monthly receipts for current org"
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
var downgradeRequestSchema = external_exports.object({
|
|
468
|
+
targetTier: external_exports.enum(["limited-free-1", "pro-suspend", "pro"]),
|
|
469
|
+
returnUrl: external_exports.string().url().optional()
|
|
470
|
+
});
|
|
471
|
+
var downgradeResponseSchema = external_exports.union([
|
|
472
|
+
external_exports.object({
|
|
473
|
+
success: external_exports.boolean(),
|
|
474
|
+
effectiveDate: external_exports.string().nullable()
|
|
475
|
+
}),
|
|
476
|
+
external_exports.object({
|
|
477
|
+
status: external_exports.literal("payment_method_required"),
|
|
478
|
+
checkoutUrl: external_exports.string().url()
|
|
479
|
+
})
|
|
480
|
+
]);
|
|
481
|
+
var restoreRequestSchema = external_exports.object({
|
|
482
|
+
returnUrl: external_exports.string().url().optional()
|
|
483
|
+
});
|
|
484
|
+
var restoreResponseSchema = external_exports.discriminatedUnion("status", [
|
|
485
|
+
external_exports.object({
|
|
486
|
+
status: external_exports.literal("restored")
|
|
487
|
+
}),
|
|
488
|
+
external_exports.object({
|
|
489
|
+
status: external_exports.literal("payment_method_required"),
|
|
490
|
+
checkoutUrl: external_exports.string().url()
|
|
491
|
+
})
|
|
492
|
+
]);
|
|
493
|
+
var zeroBillingDowngradeContract = c2.router({
|
|
494
|
+
create: {
|
|
495
|
+
method: "POST",
|
|
496
|
+
path: "/api/zero/billing/downgrade",
|
|
497
|
+
headers: authHeadersSchema,
|
|
498
|
+
body: downgradeRequestSchema,
|
|
499
|
+
responses: {
|
|
500
|
+
200: downgradeResponseSchema,
|
|
501
|
+
400: apiErrorSchema,
|
|
502
|
+
401: apiErrorSchema,
|
|
503
|
+
403: apiErrorSchema,
|
|
504
|
+
409: apiErrorSchema,
|
|
505
|
+
500: apiErrorSchema,
|
|
506
|
+
503: apiErrorSchema
|
|
507
|
+
},
|
|
508
|
+
summary: "Downgrade subscription to a lower tier"
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
var zeroBillingRestoreContract = c2.router({
|
|
512
|
+
create: {
|
|
513
|
+
method: "POST",
|
|
514
|
+
path: "/api/zero/billing/restore",
|
|
515
|
+
headers: authHeadersSchema,
|
|
516
|
+
body: restoreRequestSchema,
|
|
517
|
+
responses: {
|
|
518
|
+
200: restoreResponseSchema,
|
|
519
|
+
401: apiErrorSchema,
|
|
520
|
+
403: apiErrorSchema,
|
|
521
|
+
409: apiErrorSchema,
|
|
522
|
+
500: apiErrorSchema,
|
|
523
|
+
503: apiErrorSchema
|
|
524
|
+
},
|
|
525
|
+
summary: "Restore a subscription scheduled for cancellation"
|
|
526
|
+
}
|
|
527
|
+
});
|
|
528
|
+
var zeroBillingRedeemContract = c2.router({
|
|
529
|
+
create: {
|
|
530
|
+
method: "POST",
|
|
531
|
+
path: "/api/zero/billing/redeem/:campaign",
|
|
532
|
+
pathParams: external_exports.object({
|
|
533
|
+
campaign: external_exports.string()
|
|
534
|
+
}),
|
|
535
|
+
headers: authHeadersSchema,
|
|
536
|
+
body: redeemRequestSchema,
|
|
537
|
+
responses: {
|
|
538
|
+
200: redeemResponseSchema,
|
|
539
|
+
400: apiErrorSchema,
|
|
540
|
+
401: apiErrorSchema,
|
|
541
|
+
500: apiErrorSchema
|
|
542
|
+
},
|
|
543
|
+
summary: "Redeem a one-time campaign"
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
var zeroBillingRedeemCodeContract = c2.router({
|
|
547
|
+
create: {
|
|
548
|
+
method: "POST",
|
|
549
|
+
path: "/api/zero/billing/redeem-code",
|
|
550
|
+
headers: authHeadersSchema,
|
|
551
|
+
body: redeemCodeRequestSchema,
|
|
552
|
+
responses: {
|
|
553
|
+
200: redeemCodeResponseSchema,
|
|
554
|
+
400: apiErrorSchema,
|
|
555
|
+
401: apiErrorSchema,
|
|
556
|
+
403: apiErrorSchema,
|
|
557
|
+
500: apiErrorSchema,
|
|
558
|
+
503: apiErrorSchema
|
|
559
|
+
},
|
|
560
|
+
summary: "Redeem an onboarding billing code"
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
export {
|
|
565
|
+
zeroBillingStatusContract,
|
|
566
|
+
zeroBillingCreditCheckoutContract
|
|
567
|
+
};
|
|
568
|
+
//# sourceMappingURL=chunk-7UZXNER2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/api-contracts/src/contracts/zero-billing.ts","../../../packages/api-contracts/src/contracts/zero-attribution.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { adAttributionMetadataSchema } from \"./zero-attribution\";\n\nconst c = initContract();\n\n// ---------------------------------------------------------------------------\n// Response schemas\n// ---------------------------------------------------------------------------\n\nconst autoRechargeSchema = z.object({\n enabled: z.boolean(),\n threshold: z.number().nullable(),\n amount: z.number().nullable(),\n});\n\nconst creditExpirySchema = z.object({\n expiringNextCycle: z.number(),\n nextExpiryDate: z.string().nullable(),\n});\n\nconst creditBreakdownSegmentSchema = z.object({\n category: z.enum([\"plan\", \"free\", \"promotional\", \"payAsYouGo\"]),\n label: z.string(),\n credits: z.number(),\n // Only set on `plan` segments. Lets the UI decide whether a segment\n // represents the current plan or leftover credits from a previous plan\n // without round-tripping through the `label` string.\n tier: z.enum([\"pro\", \"team\"]).optional(),\n});\n\nconst creditGrantSchema = z.object({\n id: z.string(),\n source: z.string(),\n label: z.string(),\n amount: z.number(),\n remaining: z.number(),\n createdAt: z.string(),\n expiresAt: z.string(),\n});\n\nconst scheduledBillingChangeSchema = z.object({\n type: z.enum([\"cancel\", \"downgrade\"]),\n targetTier: z\n .enum([\"limited-free-1\", \"pro-suspend\", \"pro\", \"team\"])\n .nullable(),\n effectiveDate: z.string().nullable(),\n});\n\nconst concurrencySubscriptionSchema = z.object({\n id: z.string(),\n quantity: z.number().int().nonnegative(),\n currentPeriodEnd: z.string().nullable(),\n cancelAtPeriodEnd: z.boolean(),\n});\n\nconst usageAllowanceWindowSchema = z.object({\n kind: z.enum([\"short\", \"weekly\"]),\n windowSeconds: z.number().int().positive(),\n unitLimit: z.number(),\n consumedUnits: z.number(),\n remainingUnits: z.number(),\n startsAt: z.string().nullable(),\n expiresAt: z.string().nullable(),\n});\n\nconst usageAllowanceSchema = z.object({\n windows: z.array(usageAllowanceWindowSchema),\n});\n\nconst billingStatusResponseSchema = z.object({\n tier: z.string(),\n canBuyConcurrency: z.boolean().optional(),\n canBuyCredits: z.boolean().optional(),\n autoRechargeAllowed: z.boolean().optional(),\n supportByok: z.boolean().optional(),\n restrictedVm0Models: z.boolean().optional(),\n videoGenerationAllowed: z.boolean().optional(),\n workflowWebhookAutomationAllowed: z.boolean().optional(),\n credits: z.number(),\n onboardingPaymentPending: z.boolean(),\n subscriptionStatus: z.string().nullable(),\n currentPeriodEnd: z.string().nullable(),\n cancelAtPeriodEnd: z.boolean(),\n scheduledChange: scheduledBillingChangeSchema.nullable(),\n hasSubscription: z.boolean(),\n autoRecharge: autoRechargeSchema,\n creditExpiry: creditExpirySchema,\n creditBreakdown: z.array(creditBreakdownSegmentSchema),\n creditGrants: z.array(creditGrantSchema),\n concurrencyLimit: z.number().int().nonnegative(),\n concurrencySubscriptions: z.array(concurrencySubscriptionSchema),\n usageAllowance: usageAllowanceSchema.nullable().optional(),\n});\n\nconst checkoutResponseSchema = z.object({\n url: z.string(),\n});\n\nconst checkoutCompleteResponseSchema = z.object({\n completed: z.boolean(),\n});\n\nconst redeemCodeResponseSchema = z.object({\n redeemed: z.literal(true),\n});\n\nconst portalResponseSchema = z.object({\n url: z.string(),\n});\n\nconst redeemResponseSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"ready\"),\n checkoutUrl: z.string().url(),\n }),\n z.object({\n status: z.literal(\"already_granted\"),\n }),\n z.object({\n status: z.literal(\"processing\"),\n }),\n z.object({\n status: z.literal(\"error\"),\n reason: z.enum([\n \"campaign_misconfigured\",\n \"admin_required\",\n \"billing_unavailable\",\n ]),\n }),\n]);\n\n// ---------------------------------------------------------------------------\n// Request schemas\n// ---------------------------------------------------------------------------\n\nconst checkoutRequestSchema = z.object({\n tier: z.enum([\"pro\", \"team\"]),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n trialDays: z.literal(7).optional(),\n adAttribution: adAttributionMetadataSchema.optional(),\n});\n\nconst checkoutCompleteRequestSchema = z.object({\n sessionId: z.string().min(1),\n});\n\nconst concurrencyCheckoutRequestSchema = z.object({\n quantity: z.number().int().min(1).max(1000),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n});\n\nconst concurrencySubscriptionCancelResponseSchema = z.object({\n success: z.literal(true),\n currentPeriodEnd: z.string().nullable(),\n});\n\nconst concurrencySubscriptionRestoreResponseSchema = z.object({\n success: z.literal(true),\n});\n\nconst creditCheckoutRequestSchema = z\n .object({\n credits: z.number().int().min(1000).max(10_000_000),\n customAmount: z.boolean().optional(),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n autoRecharge: z\n .object({\n enabled: z.boolean(),\n threshold: z.number().int().positive().max(10_000_000).optional(),\n amount: z.number().int().min(1000).max(10_000_000).optional(),\n })\n .optional(),\n })\n .refine(\n (data) => {\n return data.customAmount !== true || data.autoRecharge === undefined;\n },\n { message: \"auto-recharge is not supported for custom amount checkout\" },\n )\n .refine(\n (data) => {\n return (\n data.autoRecharge?.enabled !== true ||\n data.autoRecharge.threshold === undefined ||\n data.autoRecharge.amount === undefined ||\n data.autoRecharge.threshold < data.autoRecharge.amount\n );\n },\n { message: \"threshold must be less than amount to avoid recharge loops\" },\n );\n\nconst portalRequestSchema = z.object({\n returnUrl: z.string().url(),\n});\n\nconst autoRechargeUpdateRequestSchema = z\n .object({\n enabled: z.boolean(),\n threshold: z.number().int().positive().max(10_000_000).optional(),\n amount: z.number().int().min(1000).max(10_000_000).optional(),\n })\n .refine(\n (data) => {\n return (\n !data.enabled ||\n data.threshold === undefined ||\n data.amount === undefined ||\n data.threshold < data.amount\n );\n },\n { message: \"threshold must be less than amount to avoid recharge loops\" },\n );\n\nconst redeemRequestSchema = z.object({\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n});\n\nconst redeemCodeRequestSchema = z.object({\n code: z.string().trim().min(1),\n});\n\n// ---------------------------------------------------------------------------\n// Contracts\n// ---------------------------------------------------------------------------\n\n/**\n * Zero contract for GET /api/zero/billing/status\n */\nexport const zeroBillingStatusContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/status\",\n headers: authHeadersSchema,\n responses: {\n 200: billingStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get billing status for current org\",\n },\n});\n\nexport type ZeroBillingStatusContract = typeof zeroBillingStatusContract;\n\n/**\n * Zero contract for POST /api/zero/billing/checkout\n */\nexport const zeroBillingCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/checkout\",\n headers: authHeadersSchema,\n body: checkoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session\",\n },\n complete: {\n method: \"POST\",\n path: \"/api/zero/billing/checkout/complete\",\n headers: authHeadersSchema,\n body: checkoutCompleteRequestSchema,\n responses: {\n 200: checkoutCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Complete Stripe checkout session\",\n },\n});\n\nexport type ZeroBillingCheckoutContract = typeof zeroBillingCheckoutContract;\n\n/**\n * Zero contract for POST /api/zero/billing/concurrency-checkout\n */\nexport const zeroBillingConcurrencyCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/concurrency-checkout\",\n headers: authHeadersSchema,\n body: concurrencyCheckoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session for concurrency add-on\",\n },\n});\n\nexport type ZeroBillingConcurrencyCheckoutContract =\n typeof zeroBillingConcurrencyCheckoutContract;\n\n/**\n * Zero contract for concurrency subscriptions.\n */\nexport const zeroBillingConcurrencySubscriptionContract = c.router({\n cancel: {\n method: \"POST\",\n path: \"/api/zero/billing/concurrency-subscriptions/:subscriptionId/cancel\",\n pathParams: z.object({\n subscriptionId: z.string().min(1),\n }),\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: concurrencySubscriptionCancelResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Cancel a concurrency add-on subscription at period end\",\n },\n restore: {\n method: \"POST\",\n path: \"/api/zero/billing/concurrency-subscriptions/:subscriptionId/restore\",\n pathParams: z.object({\n subscriptionId: z.string().min(1),\n }),\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: concurrencySubscriptionRestoreResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Restore a concurrency add-on subscription\",\n },\n});\n\nexport type ZeroBillingConcurrencySubscriptionContract =\n typeof zeroBillingConcurrencySubscriptionContract;\n\n/**\n * Zero contract for POST /api/zero/billing/credit-checkout\n */\nexport const zeroBillingCreditCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/credit-checkout\",\n headers: authHeadersSchema,\n body: creditCheckoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session for credits\",\n },\n});\n\nexport type ZeroBillingCreditCheckoutContract =\n typeof zeroBillingCreditCheckoutContract;\n\n/**\n * Zero contract for POST /api/zero/billing/portal\n */\nexport const zeroBillingPortalContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/portal\",\n headers: authHeadersSchema,\n body: portalRequestSchema,\n responses: {\n 200: portalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe billing portal session\",\n },\n});\n\nexport type ZeroBillingPortalContract = typeof zeroBillingPortalContract;\n\n/**\n * Zero contract for /api/zero/billing/auto-recharge\n */\nexport const zeroBillingAutoRechargeContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n responses: {\n 200: autoRechargeSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get auto-recharge configuration\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n body: autoRechargeUpdateRequestSchema,\n responses: {\n 200: autoRechargeSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update auto-recharge configuration\",\n },\n});\n\nexport type ZeroBillingAutoRechargeContract =\n typeof zeroBillingAutoRechargeContract;\n\n/**\n * Zero contract for GET /api/zero/billing/invoices\n */\nconst invoiceSchema = z.object({\n id: z.string(),\n number: z.string().nullable(),\n date: z.number(),\n amount: z.number(),\n status: z.string().nullable(),\n hostedInvoiceUrl: z.string().nullable(),\n});\n\nconst billingInvoicesResponseSchema = z.object({\n invoices: z.array(invoiceSchema),\n // Optional while the frontend can overlap with API deployments that do not expose ZIP downloads yet.\n receiptDownloadsSupported: z.literal(true).optional(),\n});\n\nconst billingReceiptsMonthSchema = z.string().regex(/^\\d{4}-(0[1-9]|1[0-2])$/u);\n\nfunction billingMonthIndex(month: string): number {\n return Number(month.slice(0, 4)) * 12 + Number(month.slice(5, 7)) - 1;\n}\n\nexport const zeroBillingInvoicesContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/invoices\",\n headers: authHeadersSchema,\n responses: {\n 200: billingInvoicesResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get invoices for current org\",\n },\n downloadReceipts: {\n method: \"GET\",\n path: \"/api/zero/billing/invoices/receipts\",\n headers: authHeadersSchema,\n query: z\n .object({\n startMonth: billingReceiptsMonthSchema,\n endMonth: billingReceiptsMonthSchema,\n })\n .refine((query) => {\n return query.startMonth <= query.endMonth;\n }, \"startMonth must not be after endMonth\")\n .refine((query) => {\n return (\n billingMonthIndex(query.endMonth) -\n billingMonthIndex(query.startMonth) <\n 3\n );\n }, \"Receipt downloads are limited to three consecutive months\"),\n responses: {\n 200: c.otherResponse({\n contentType: \"application/zip\",\n body: c.type<Blob>(),\n }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Download monthly receipts for current org\",\n },\n});\n\nexport type ZeroBillingInvoicesContract = typeof zeroBillingInvoicesContract;\n\n// ---------------------------------------------------------------------------\n// Downgrade\n// ---------------------------------------------------------------------------\n\nconst downgradeRequestSchema = z.object({\n targetTier: z.enum([\"limited-free-1\", \"pro-suspend\", \"pro\"]),\n returnUrl: z.string().url().optional(),\n});\n\nconst downgradeResponseSchema = z.union([\n z.object({\n success: z.boolean(),\n effectiveDate: z.string().nullable(),\n }),\n z.object({\n status: z.literal(\"payment_method_required\"),\n checkoutUrl: z.string().url(),\n }),\n]);\n\nconst restoreRequestSchema = z.object({\n returnUrl: z.string().url().optional(),\n});\n\nconst restoreResponseSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"restored\"),\n }),\n z.object({\n status: z.literal(\"payment_method_required\"),\n checkoutUrl: z.string().url(),\n }),\n]);\n\n/**\n * Zero contract for POST /api/zero/billing/downgrade\n */\nexport const zeroBillingDowngradeContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/downgrade\",\n headers: authHeadersSchema,\n body: downgradeRequestSchema,\n responses: {\n 200: downgradeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Downgrade subscription to a lower tier\",\n },\n});\n\nexport type ZeroBillingDowngradeContract = typeof zeroBillingDowngradeContract;\n\n/**\n * Zero contract for POST /api/zero/billing/restore\n */\nexport const zeroBillingRestoreContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/restore\",\n headers: authHeadersSchema,\n body: restoreRequestSchema,\n responses: {\n 200: restoreResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Restore a subscription scheduled for cancellation\",\n },\n});\n\nexport type ZeroBillingRestoreContract = typeof zeroBillingRestoreContract;\n\n/**\n * Zero contract for POST /api/zero/billing/redeem/:campaign\n *\n * One-time campaign redemption. The handler validates the campaign whitelist,\n * creates (or resumes) a Stripe Checkout session, and returns a discriminated\n * union so a single landing page on the platform can render the appropriate\n * state (ready / already_granted / processing / error).\n */\nexport const zeroBillingRedeemContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/redeem/:campaign\",\n pathParams: z.object({\n campaign: z.string(),\n }),\n headers: authHeadersSchema,\n body: redeemRequestSchema,\n responses: {\n 200: redeemResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Redeem a one-time campaign\",\n },\n});\n\nexport type ZeroBillingRedeemContract = typeof zeroBillingRedeemContract;\n\n/**\n * Zero contract for POST /api/zero/billing/redeem-code\n *\n * Proxies onboarding invite codes to the Atom redeem endpoint. The platform\n * waits for billing status to update through realtime before completing\n * onboarding.\n */\nexport const zeroBillingRedeemCodeContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/redeem-code\",\n headers: authHeadersSchema,\n body: redeemCodeRequestSchema,\n responses: {\n 200: redeemCodeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Redeem an onboarding billing code\",\n },\n});\n\nexport type ZeroBillingRedeemCodeContract =\n typeof zeroBillingRedeemCodeContract;\n\n// Inferred types from Zod schemas\nexport type BillingStatusResponse = z.infer<typeof billingStatusResponseSchema>;\nexport type AutoRechargeConfig = z.infer<typeof autoRechargeSchema>;\nexport type CheckoutResponse = z.infer<typeof checkoutResponseSchema>;\nexport type RedeemCodeResponse = z.infer<typeof redeemCodeResponseSchema>;\nexport type ConcurrencyCheckoutRequest = z.infer<\n typeof concurrencyCheckoutRequestSchema\n>;\nexport type CreditCheckoutRequest = z.infer<typeof creditCheckoutRequestSchema>;\nexport type PortalResponse = z.infer<typeof portalResponseSchema>;\nexport type BillingInvoice = z.infer<typeof invoiceSchema>;\nexport type BillingInvoicesResponse = z.infer<\n typeof billingInvoicesResponseSchema\n>;\nexport type DowngradeResponse = z.infer<typeof downgradeResponseSchema>;\nexport type RestoreResponse = z.infer<typeof restoreResponseSchema>;\nexport type RedeemRequest = z.infer<typeof redeemRequestSchema>;\nexport type RedeemCodeRequest = z.infer<typeof redeemCodeRequestSchema>;\nexport type RedeemResponse = z.infer<typeof redeemResponseSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n// Canonical acquisition source-type taxonomy. Single source of truth shared by\n// the web classifier (apps/web), the app capture layer (apps/platform), and the\n// signup contract below, so the enum can't drift across the three.\nexport const SOURCE_TYPES = [\n \"paid\",\n \"organic_search\",\n \"referral\",\n \"direct\",\n \"internal\",\n \"unknown\",\n] as const;\n\nexport type SourceType = (typeof SOURCE_TYPES)[number];\n\n// First-party, root-domain (.vm0.ai) cookie carrying first-touch acquisition\n// attribution across the www.vm0.ai -> app.vm0.ai subdomain hop. Written by the\n// marketing site (consent-gated), read by the app on first load.\nexport const ACQUISITION_ATTRIBUTION_COOKIE = \"vm0_attribution\";\n\nexport const adAttributionMetadataSchema = z\n .object({\n source_type: z.enum(SOURCE_TYPES).optional(),\n referrer_domain: z.string().min(1).max(253).optional(),\n landing_host: z.string().min(1).max(253).optional(),\n landing_path: z.string().min(1).max(500).optional(),\n vm0_source: z.string().min(1).max(100).optional(),\n utm_source: z.string().min(1).max(100).optional(),\n utm_medium: z.string().min(1).max(100).optional(),\n utm_campaign: z.string().min(1).max(200).optional(),\n utm_content: z.string().min(1).max(200).optional(),\n utm_term: z.string().min(1).max(200).optional(),\n vm0_experiment: z.string().min(1).max(100).optional(),\n vm0_variant: z.string().min(1).max(100).optional(),\n lp_variant: z.string().min(1).max(100).optional(),\n gclid: z.string().min(1).max(200).optional(),\n gbraid: z.string().min(1).max(200).optional(),\n wbraid: z.string().min(1).max(200).optional(),\n // GA4's browser client ID is read from the first-party _ga cookie. It is\n // carried separately from ad click IDs so server-side GA4 events can be\n // joined back to the browser session without treating every visitor as a\n // Google Ads conversion.\n ga_client_id: z.string().min(1).max(100).optional(),\n gclid_present: z.literal(\"true\").optional(),\n gbraid_present: z.literal(\"true\").optional(),\n wbraid_present: z.literal(\"true\").optional(),\n })\n .strict();\n\nconst recordSignupAttributionRequestSchema = z.object({\n attribution: adAttributionMetadataSchema,\n});\n\nconst recordSignupAttributionResponseSchema = z.object({\n recorded: z.boolean(),\n});\n\nexport const zeroAttributionContract = c.router({\n recordSignup: {\n method: \"POST\",\n path: \"/api/zero/attribution/signup\",\n headers: authHeadersSchema,\n body: recordSignupAttributionRequestSchema,\n responses: {\n 200: recordSignupAttributionResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Record first-touch signup attribution on the current user\",\n },\n});\n\nexport type AdAttributionMetadata = z.infer<typeof adAttributionMetadataSchema>;\nexport type RecordSignupAttributionRequest = z.infer<\n typeof recordSignupAttributionRequestSchema\n>;\nexport type RecordSignupAttributionResponse = z.infer<\n typeof recordSignupAttributionResponseSchema\n>;\nexport type ZeroAttributionContract = typeof zeroAttributionContract;\n"],"mappings":"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","names":["c"]}
|