Skip to content

Commit 07b0c8c

Browse files
committed
fix(mothership): validate complete billing protocol headers
1 parent 2d6db97 commit 07b0c8c

1 file changed

Lines changed: 30 additions & 6 deletions

File tree

‎apps/sim/lib/mothership/generated/billing.ts‎

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,36 @@ export const BillingCallbackBody = z
3333
});
3434
export type BillingCallbackBody = z.infer<typeof BillingCallbackBody>;
3535

36-
export const BillingCallbackHeaders = z.object({
37-
[BillingProtocolHeaders.protocol]: z.enum(Object.values(BillingProtocol)).optional(),
38-
[BillingProtocolHeaders.requestId]: z.string().uuid().optional(),
39-
[BillingProtocolHeaders.attribution]: z.string().max(8192).optional(),
40-
[BillingProtocolHeaders.accountDecision]: z.string().max(2048).optional(),
41-
});
36+
export const BillingCallbackHeaders = z
37+
.object({
38+
[BillingProtocolHeaders.protocol]: z.enum(Object.values(BillingProtocol)).optional(),
39+
[BillingProtocolHeaders.requestId]: z.string().uuid().optional(),
40+
[BillingProtocolHeaders.attribution]: z.string().min(1).max(8192).optional(),
41+
[BillingProtocolHeaders.accountDecision]: z.string().min(1).max(2048).optional(),
42+
})
43+
.superRefine((headers, context) => {
44+
const protocol = headers[BillingProtocolHeaders.protocol];
45+
const requestId = headers[BillingProtocolHeaders.requestId];
46+
const attribution = headers[BillingProtocolHeaders.attribution];
47+
const decision = headers[BillingProtocolHeaders.accountDecision];
48+
let valid = false;
49+
switch (protocol) {
50+
case undefined:
51+
valid = !requestId && !attribution && !decision;
52+
break;
53+
case BillingProtocol.attributed:
54+
valid = Boolean(requestId && attribution && !decision);
55+
break;
56+
case BillingProtocol.direct:
57+
valid = Boolean(requestId && decision && !attribution);
58+
break;
59+
case BillingProtocol.previous:
60+
valid = Boolean(attribution && !requestId && !decision);
61+
break;
62+
}
63+
if (!valid)
64+
context.addIssue({ code: "custom", message: "Incomplete or conflicting billing protocol headers" });
65+
});
4266

4367
export const BillingCallbackResult = z.object({
4468
success: z.boolean(),

0 commit comments

Comments
 (0)