convex-affiliates 1.1.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/client/index.d.ts +45 -44
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +162 -159
- package/dist/client/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/index.ts +191 -193
package/README.md
CHANGED
|
@@ -255,14 +255,22 @@ If you're not using `@convex-dev/stripe`, use the standalone handler with built-
|
|
|
255
255
|
// convex/http.ts
|
|
256
256
|
import { httpRouter } from "convex/server";
|
|
257
257
|
import { components } from "./_generated/api";
|
|
258
|
-
import {
|
|
258
|
+
import { createAffiliateApi } from "convex-affiliates";
|
|
259
259
|
|
|
260
260
|
const http = httpRouter();
|
|
261
261
|
|
|
262
|
+
const affiliates = createAffiliateApi(components.affiliates, {
|
|
263
|
+
auth: async (ctx) => {
|
|
264
|
+
const identity = await ctx.auth.getUserIdentity();
|
|
265
|
+
if (!identity) throw new Error("Not authenticated");
|
|
266
|
+
return identity.subject;
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
|
|
262
270
|
http.route({
|
|
263
271
|
path: "/webhooks/stripe",
|
|
264
272
|
method: "POST",
|
|
265
|
-
handler: createStripeWebhookHandler(
|
|
273
|
+
handler: affiliates.createStripeWebhookHandler({
|
|
266
274
|
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
|
|
267
275
|
}),
|
|
268
276
|
});
|
package/dist/client/index.d.ts
CHANGED
|
@@ -168,19 +168,14 @@ export interface CreateAffiliateApiConfig extends AffiliateConfig {
|
|
|
168
168
|
* import { createAffiliateApi } from "convex-affiliates";
|
|
169
169
|
* import { components } from "./_generated/api";
|
|
170
170
|
*
|
|
171
|
-
* export const {
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
* const identity = await ctx.auth.getUserIdentity();
|
|
180
|
-
* if (!identity) throw new Error("Not authenticated");
|
|
181
|
-
* return identity.subject;
|
|
182
|
-
* },
|
|
183
|
-
* });
|
|
171
|
+
* export const { trackClick, register, getPortalData } =
|
|
172
|
+
* createAffiliateApi(components.affiliates, {
|
|
173
|
+
* auth: async (ctx) => {
|
|
174
|
+
* const identity = await ctx.auth.getUserIdentity();
|
|
175
|
+
* if (!identity) throw new Error("Not authenticated");
|
|
176
|
+
* return identity.subject;
|
|
177
|
+
* },
|
|
178
|
+
* });
|
|
184
179
|
* ```
|
|
185
180
|
*/
|
|
186
181
|
export declare function createAffiliateApi(component: ComponentApi, config: CreateAffiliateApiConfig): {
|
|
@@ -950,14 +945,44 @@ export declare function createAffiliateApi(component: ComponentApi, config: Crea
|
|
|
950
945
|
slug: string;
|
|
951
946
|
commissionValue: number;
|
|
952
947
|
}, Promise<import("../component/_generated/dataModel.js").Id<"campaigns">>>;
|
|
948
|
+
/**
|
|
949
|
+
* Register HTTP routes for affiliate functionality.
|
|
950
|
+
* The component reference is already available from the closure.
|
|
951
|
+
*
|
|
952
|
+
* @param http - The Convex HTTP router
|
|
953
|
+
* @param options - Optional configuration (e.g., pathPrefix)
|
|
954
|
+
*
|
|
955
|
+
* @example
|
|
956
|
+
* ```typescript
|
|
957
|
+
* const affiliates = createAffiliateApi(components.affiliates, { ... });
|
|
958
|
+
* affiliates.registerRoutes(http, { pathPrefix: "/affiliates" });
|
|
959
|
+
* ```
|
|
960
|
+
*/
|
|
961
|
+
registerRoutes(http: HttpRouter, options?: {
|
|
962
|
+
pathPrefix?: string;
|
|
963
|
+
}): void;
|
|
964
|
+
/**
|
|
965
|
+
* Create a Stripe webhook handler that processes affiliate-related events.
|
|
966
|
+
* The component reference is already available from the closure.
|
|
967
|
+
*
|
|
968
|
+
* @param webhookConfig - Configuration with webhookSecret
|
|
969
|
+
* @returns An HTTP action handler for Stripe webhooks
|
|
970
|
+
*
|
|
971
|
+
* @example
|
|
972
|
+
* ```typescript
|
|
973
|
+
* const affiliates = createAffiliateApi(components.affiliates, { ... });
|
|
974
|
+
*
|
|
975
|
+
* http.route({
|
|
976
|
+
* path: "/webhooks/stripe",
|
|
977
|
+
* method: "POST",
|
|
978
|
+
* handler: affiliates.createStripeWebhookHandler({
|
|
979
|
+
* webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
|
|
980
|
+
* }),
|
|
981
|
+
* });
|
|
982
|
+
* ```
|
|
983
|
+
*/
|
|
984
|
+
createStripeWebhookHandler(webhookConfig: StripeWebhookConfig): import("convex/server").PublicHttpAction;
|
|
953
985
|
};
|
|
954
|
-
/**
|
|
955
|
-
* Register HTTP routes for affiliate functionality.
|
|
956
|
-
* Useful for public API endpoints and webhook handling.
|
|
957
|
-
*/
|
|
958
|
-
export declare function registerRoutes(http: HttpRouter, component: ComponentApi, options?: {
|
|
959
|
-
pathPrefix?: string;
|
|
960
|
-
}): void;
|
|
961
986
|
export interface StripeWebhookConfig {
|
|
962
987
|
/**
|
|
963
988
|
* Stripe webhook signing secret (whsec_...).
|
|
@@ -966,30 +991,6 @@ export interface StripeWebhookConfig {
|
|
|
966
991
|
*/
|
|
967
992
|
webhookSecret: string;
|
|
968
993
|
}
|
|
969
|
-
/**
|
|
970
|
-
* Create a Stripe webhook handler that processes affiliate-related events.
|
|
971
|
-
* Handles invoice.paid, charge.refunded, and checkout.session.completed events.
|
|
972
|
-
*
|
|
973
|
-
* @example
|
|
974
|
-
* ```typescript
|
|
975
|
-
* import { httpRouter } from "convex/server";
|
|
976
|
-
* import { createStripeWebhookHandler } from "convex-affiliates";
|
|
977
|
-
* import { components } from "./_generated/api";
|
|
978
|
-
*
|
|
979
|
-
* const http = httpRouter();
|
|
980
|
-
*
|
|
981
|
-
* http.route({
|
|
982
|
-
* path: "/webhooks/stripe",
|
|
983
|
-
* method: "POST",
|
|
984
|
-
* handler: createStripeWebhookHandler(components.affiliates, {
|
|
985
|
-
* webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
|
|
986
|
-
* }),
|
|
987
|
-
* });
|
|
988
|
-
*
|
|
989
|
-
* export default http;
|
|
990
|
-
* ```
|
|
991
|
-
*/
|
|
992
|
-
export declare function createStripeWebhookHandler(component: ComponentApi, config: StripeWebhookConfig): import("convex/server").PublicHttpAction;
|
|
993
994
|
/**
|
|
994
995
|
* Options for Stripe event handlers.
|
|
995
996
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.js
CHANGED
|
@@ -14,22 +14,20 @@ import { affiliateStatusValidator, payoutTermValidator, commissionTypeValidator,
|
|
|
14
14
|
* import { createAffiliateApi } from "convex-affiliates";
|
|
15
15
|
* import { components } from "./_generated/api";
|
|
16
16
|
*
|
|
17
|
-
* export const {
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* const identity = await ctx.auth.getUserIdentity();
|
|
26
|
-
* if (!identity) throw new Error("Not authenticated");
|
|
27
|
-
* return identity.subject;
|
|
28
|
-
* },
|
|
29
|
-
* });
|
|
17
|
+
* export const { trackClick, register, getPortalData } =
|
|
18
|
+
* createAffiliateApi(components.affiliates, {
|
|
19
|
+
* auth: async (ctx) => {
|
|
20
|
+
* const identity = await ctx.auth.getUserIdentity();
|
|
21
|
+
* if (!identity) throw new Error("Not authenticated");
|
|
22
|
+
* return identity.subject;
|
|
23
|
+
* },
|
|
24
|
+
* });
|
|
30
25
|
* ```
|
|
31
26
|
*/
|
|
32
27
|
export function createAffiliateApi(component, config) {
|
|
28
|
+
const auth = config.auth;
|
|
29
|
+
const isAdmin = config.isAdmin;
|
|
30
|
+
const hooks = config.hooks;
|
|
33
31
|
const defaults = {
|
|
34
32
|
defaultCommissionType: config.defaultCommissionType ?? "percentage",
|
|
35
33
|
defaultCommissionValue: config.defaultCommissionValue ?? 20,
|
|
@@ -57,14 +55,14 @@ export function createAffiliateApi(component, config) {
|
|
|
57
55
|
};
|
|
58
56
|
// Helper to check admin access
|
|
59
57
|
const requireAdmin = async (ctx) => {
|
|
60
|
-
if (
|
|
61
|
-
const
|
|
62
|
-
if (!
|
|
58
|
+
if (isAdmin) {
|
|
59
|
+
const isAdminResult = await isAdmin(ctx);
|
|
60
|
+
if (!isAdminResult)
|
|
63
61
|
throw new Error("Not authorized - admin access required");
|
|
64
62
|
}
|
|
65
63
|
else {
|
|
66
64
|
// Fall back to just requiring auth
|
|
67
|
-
await
|
|
65
|
+
await auth(ctx);
|
|
68
66
|
}
|
|
69
67
|
};
|
|
70
68
|
// Helper to get affiliate by userId
|
|
@@ -73,7 +71,7 @@ export function createAffiliateApi(component, config) {
|
|
|
73
71
|
};
|
|
74
72
|
// Helper to call lifecycle hooks safely (errors are logged, not thrown)
|
|
75
73
|
async function callHook(hookName, data) {
|
|
76
|
-
const hook =
|
|
74
|
+
const hook = hooks?.[hookName];
|
|
77
75
|
if (hook) {
|
|
78
76
|
try {
|
|
79
77
|
await hook(data);
|
|
@@ -201,7 +199,7 @@ export function createAffiliateApi(component, config) {
|
|
|
201
199
|
customCode: v.optional(v.string()),
|
|
202
200
|
},
|
|
203
201
|
handler: async (ctx, args) => {
|
|
204
|
-
const userId = await
|
|
202
|
+
const userId = await auth(ctx);
|
|
205
203
|
const campaign = await ensureDefaultCampaign(ctx);
|
|
206
204
|
const result = await ctx.runMutation(component.affiliates.register, {
|
|
207
205
|
userId,
|
|
@@ -243,7 +241,7 @@ export function createAffiliateApi(component, config) {
|
|
|
243
241
|
getAffiliate: queryGeneric({
|
|
244
242
|
args: {},
|
|
245
243
|
handler: async (ctx) => {
|
|
246
|
-
const userId = await
|
|
244
|
+
const userId = await auth(ctx);
|
|
247
245
|
return ctx.runQuery(component.affiliates.getByUserId, { userId });
|
|
248
246
|
},
|
|
249
247
|
}),
|
|
@@ -280,7 +278,7 @@ export function createAffiliateApi(component, config) {
|
|
|
280
278
|
payoutEmail: v.optional(v.string()),
|
|
281
279
|
},
|
|
282
280
|
handler: async (ctx, args) => {
|
|
283
|
-
const userId = await
|
|
281
|
+
const userId = await auth(ctx);
|
|
284
282
|
const affiliate = await ctx.runQuery(component.affiliates.getByUserId, {
|
|
285
283
|
userId,
|
|
286
284
|
});
|
|
@@ -313,7 +311,7 @@ export function createAffiliateApi(component, config) {
|
|
|
313
311
|
getPortalData: queryGeneric({
|
|
314
312
|
args: {},
|
|
315
313
|
handler: async (ctx) => {
|
|
316
|
-
const userId = await
|
|
314
|
+
const userId = await auth(ctx);
|
|
317
315
|
return ctx.runQuery(component.analytics.getPortalData, { userId });
|
|
318
316
|
},
|
|
319
317
|
}),
|
|
@@ -345,7 +343,7 @@ export function createAffiliateApi(component, config) {
|
|
|
345
343
|
paginationOpts: paginationOptsValidator,
|
|
346
344
|
},
|
|
347
345
|
handler: async (ctx, args) => {
|
|
348
|
-
const userId = await
|
|
346
|
+
const userId = await auth(ctx);
|
|
349
347
|
const affiliate = await getAffiliateByUserId(ctx, userId);
|
|
350
348
|
if (!affiliate) {
|
|
351
349
|
return { page: [], isDone: true, continueCursor: "" };
|
|
@@ -384,7 +382,7 @@ export function createAffiliateApi(component, config) {
|
|
|
384
382
|
paginationOpts: paginationOptsValidator,
|
|
385
383
|
},
|
|
386
384
|
handler: async (ctx, args) => {
|
|
387
|
-
const userId = await
|
|
385
|
+
const userId = await auth(ctx);
|
|
388
386
|
const affiliate = await getAffiliateByUserId(ctx, userId);
|
|
389
387
|
if (!affiliate) {
|
|
390
388
|
return { page: [], isDone: true, continueCursor: "" };
|
|
@@ -421,7 +419,7 @@ export function createAffiliateApi(component, config) {
|
|
|
421
419
|
limit: v.optional(v.number()),
|
|
422
420
|
},
|
|
423
421
|
handler: async (ctx, args) => {
|
|
424
|
-
const userId = await
|
|
422
|
+
const userId = await auth(ctx);
|
|
425
423
|
const affiliate = await getAffiliateByUserId(ctx, userId);
|
|
426
424
|
if (!affiliate) {
|
|
427
425
|
return [];
|
|
@@ -465,7 +463,7 @@ export function createAffiliateApi(component, config) {
|
|
|
465
463
|
subId: v.optional(v.string()),
|
|
466
464
|
},
|
|
467
465
|
handler: async (ctx, args) => {
|
|
468
|
-
const userId = await
|
|
466
|
+
const userId = await auth(ctx);
|
|
469
467
|
const affiliate = await ctx.runQuery(component.affiliates.getByUserId, {
|
|
470
468
|
userId,
|
|
471
469
|
});
|
|
@@ -857,52 +855,149 @@ export function createAffiliateApi(component, config) {
|
|
|
857
855
|
});
|
|
858
856
|
},
|
|
859
857
|
}),
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
//
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
const
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
858
|
+
// =========================================================================
|
|
859
|
+
// HTTP Routes
|
|
860
|
+
// =========================================================================
|
|
861
|
+
/**
|
|
862
|
+
* Register HTTP routes for affiliate functionality.
|
|
863
|
+
* The component reference is already available from the closure.
|
|
864
|
+
*
|
|
865
|
+
* @param http - The Convex HTTP router
|
|
866
|
+
* @param options - Optional configuration (e.g., pathPrefix)
|
|
867
|
+
*
|
|
868
|
+
* @example
|
|
869
|
+
* ```typescript
|
|
870
|
+
* const affiliates = createAffiliateApi(components.affiliates, { ... });
|
|
871
|
+
* affiliates.registerRoutes(http, { pathPrefix: "/affiliates" });
|
|
872
|
+
* ```
|
|
873
|
+
*/
|
|
874
|
+
registerRoutes(http, options = {}) {
|
|
875
|
+
const prefix = options.pathPrefix ?? "/affiliates";
|
|
876
|
+
http.route({
|
|
877
|
+
path: `${prefix}/affiliate/:code`,
|
|
878
|
+
method: "GET",
|
|
879
|
+
handler: httpActionGeneric(async (ctx, request) => {
|
|
880
|
+
const url = new URL(request.url);
|
|
881
|
+
const code = url.pathname.split("/").pop();
|
|
882
|
+
if (!code) {
|
|
883
|
+
return new Response(JSON.stringify({ error: "Code required" }), {
|
|
884
|
+
status: 400,
|
|
885
|
+
headers: { "Content-Type": "application/json" },
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
const affiliate = await ctx.runQuery(component.affiliates.getByCode, {
|
|
889
|
+
code: code.toUpperCase(),
|
|
890
|
+
});
|
|
891
|
+
if (!affiliate) {
|
|
892
|
+
return new Response(JSON.stringify({ error: "Affiliate not found" }), {
|
|
893
|
+
status: 404,
|
|
894
|
+
headers: { "Content-Type": "application/json" },
|
|
895
|
+
});
|
|
896
|
+
}
|
|
897
|
+
return new Response(JSON.stringify({
|
|
898
|
+
code: affiliate.code,
|
|
899
|
+
displayName: affiliate.displayName,
|
|
900
|
+
valid: affiliate.status === "approved",
|
|
901
|
+
}), {
|
|
902
|
+
status: 200,
|
|
903
|
+
headers: { "Content-Type": "application/json" },
|
|
904
|
+
});
|
|
905
|
+
}),
|
|
886
906
|
});
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
907
|
+
},
|
|
908
|
+
// =========================================================================
|
|
909
|
+
// Stripe Webhook Handler
|
|
910
|
+
// =========================================================================
|
|
911
|
+
/**
|
|
912
|
+
* Create a Stripe webhook handler that processes affiliate-related events.
|
|
913
|
+
* The component reference is already available from the closure.
|
|
914
|
+
*
|
|
915
|
+
* @param webhookConfig - Configuration with webhookSecret
|
|
916
|
+
* @returns An HTTP action handler for Stripe webhooks
|
|
917
|
+
*
|
|
918
|
+
* @example
|
|
919
|
+
* ```typescript
|
|
920
|
+
* const affiliates = createAffiliateApi(components.affiliates, { ... });
|
|
921
|
+
*
|
|
922
|
+
* http.route({
|
|
923
|
+
* path: "/webhooks/stripe",
|
|
924
|
+
* method: "POST",
|
|
925
|
+
* handler: affiliates.createStripeWebhookHandler({
|
|
926
|
+
* webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
|
|
927
|
+
* }),
|
|
928
|
+
* });
|
|
929
|
+
* ```
|
|
930
|
+
*/
|
|
931
|
+
createStripeWebhookHandler(webhookConfig) {
|
|
932
|
+
if (!webhookConfig.webhookSecret) {
|
|
933
|
+
throw new Error("webhookSecret is required for Stripe webhook handler. " +
|
|
934
|
+
"Set STRIPE_WEBHOOK_SECRET in your Convex environment variables.");
|
|
892
935
|
}
|
|
893
|
-
return
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
936
|
+
return httpActionGeneric(async (ctx, request) => {
|
|
937
|
+
const rawBody = await request.text();
|
|
938
|
+
const signature = request.headers.get("stripe-signature");
|
|
939
|
+
if (!signature) {
|
|
940
|
+
return new Response(JSON.stringify({ error: "Missing stripe-signature header" }), { status: 400, headers: { "Content-Type": "application/json" } });
|
|
941
|
+
}
|
|
942
|
+
const isValid = await verifyStripeSignature(rawBody, signature, webhookConfig.webhookSecret);
|
|
943
|
+
if (!isValid) {
|
|
944
|
+
return new Response(JSON.stringify({ error: "Invalid signature" }), {
|
|
945
|
+
status: 401,
|
|
946
|
+
headers: { "Content-Type": "application/json" },
|
|
947
|
+
});
|
|
948
|
+
}
|
|
949
|
+
const event = JSON.parse(rawBody);
|
|
950
|
+
try {
|
|
951
|
+
switch (event.type) {
|
|
952
|
+
case "invoice.paid": {
|
|
953
|
+
const invoice = event.data.object;
|
|
954
|
+
await ctx.runMutation(component.commissions.createFromInvoice, {
|
|
955
|
+
stripeInvoiceId: invoice.id,
|
|
956
|
+
stripeCustomerId: invoice.customer,
|
|
957
|
+
stripeChargeId: invoice.charge,
|
|
958
|
+
stripeSubscriptionId: invoice.subscription,
|
|
959
|
+
stripeProductId: invoice.lines?.data?.[0]?.price?.product,
|
|
960
|
+
amountPaidCents: invoice.amount_paid,
|
|
961
|
+
currency: invoice.currency,
|
|
962
|
+
affiliateCode: invoice.metadata?.affiliate_code,
|
|
963
|
+
});
|
|
964
|
+
break;
|
|
965
|
+
}
|
|
966
|
+
case "charge.refunded": {
|
|
967
|
+
const charge = event.data.object;
|
|
968
|
+
await ctx.runMutation(component.commissions.reverseByCharge, {
|
|
969
|
+
stripeChargeId: charge.id,
|
|
970
|
+
reason: charge.refunds?.data?.[0]?.reason ?? "Charge refunded",
|
|
971
|
+
});
|
|
972
|
+
break;
|
|
973
|
+
}
|
|
974
|
+
case "checkout.session.completed": {
|
|
975
|
+
const session = event.data.object;
|
|
976
|
+
await ctx.runMutation(component.referrals.linkStripeCustomer, {
|
|
977
|
+
stripeCustomerId: session.customer,
|
|
978
|
+
userId: session.client_reference_id,
|
|
979
|
+
affiliateCode: session.metadata?.affiliate_code,
|
|
980
|
+
});
|
|
981
|
+
break;
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
return new Response(JSON.stringify({ received: true }), {
|
|
985
|
+
status: 200,
|
|
986
|
+
headers: { "Content-Type": "application/json" },
|
|
987
|
+
});
|
|
988
|
+
}
|
|
989
|
+
catch (error) {
|
|
990
|
+
console.error("Stripe webhook error:", error);
|
|
991
|
+
return new Response(JSON.stringify({
|
|
992
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
993
|
+
}), { status: 500, headers: { "Content-Type": "application/json" } });
|
|
994
|
+
}
|
|
900
995
|
});
|
|
901
|
-
}
|
|
902
|
-
}
|
|
996
|
+
},
|
|
997
|
+
};
|
|
903
998
|
}
|
|
904
999
|
// =============================================================================
|
|
905
|
-
// Stripe Webhook
|
|
1000
|
+
// Stripe Webhook Signature Verification
|
|
906
1001
|
// =============================================================================
|
|
907
1002
|
/**
|
|
908
1003
|
* Verify Stripe webhook signature without the Stripe SDK.
|
|
@@ -930,98 +1025,6 @@ async function verifyStripeSignature(payload, signature, secret) {
|
|
|
930
1025
|
// Constant-time comparison
|
|
931
1026
|
return sig === expectedSig;
|
|
932
1027
|
}
|
|
933
|
-
/**
|
|
934
|
-
* Create a Stripe webhook handler that processes affiliate-related events.
|
|
935
|
-
* Handles invoice.paid, charge.refunded, and checkout.session.completed events.
|
|
936
|
-
*
|
|
937
|
-
* @example
|
|
938
|
-
* ```typescript
|
|
939
|
-
* import { httpRouter } from "convex/server";
|
|
940
|
-
* import { createStripeWebhookHandler } from "convex-affiliates";
|
|
941
|
-
* import { components } from "./_generated/api";
|
|
942
|
-
*
|
|
943
|
-
* const http = httpRouter();
|
|
944
|
-
*
|
|
945
|
-
* http.route({
|
|
946
|
-
* path: "/webhooks/stripe",
|
|
947
|
-
* method: "POST",
|
|
948
|
-
* handler: createStripeWebhookHandler(components.affiliates, {
|
|
949
|
-
* webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
|
|
950
|
-
* }),
|
|
951
|
-
* });
|
|
952
|
-
*
|
|
953
|
-
* export default http;
|
|
954
|
-
* ```
|
|
955
|
-
*/
|
|
956
|
-
export function createStripeWebhookHandler(component, config) {
|
|
957
|
-
// Validate webhook secret at creation time for helpful error messages
|
|
958
|
-
if (!config.webhookSecret) {
|
|
959
|
-
throw new Error("webhookSecret is required for Stripe webhook handler. " +
|
|
960
|
-
"Set STRIPE_WEBHOOK_SECRET in your Convex environment variables.");
|
|
961
|
-
}
|
|
962
|
-
return httpActionGeneric(async (ctx, request) => {
|
|
963
|
-
// Get raw body for signature verification
|
|
964
|
-
const rawBody = await request.text();
|
|
965
|
-
// Verify signature (required)
|
|
966
|
-
const signature = request.headers.get("stripe-signature");
|
|
967
|
-
if (!signature) {
|
|
968
|
-
return new Response(JSON.stringify({ error: "Missing stripe-signature header" }), { status: 400, headers: { "Content-Type": "application/json" } });
|
|
969
|
-
}
|
|
970
|
-
const isValid = await verifyStripeSignature(rawBody, signature, config.webhookSecret);
|
|
971
|
-
if (!isValid) {
|
|
972
|
-
return new Response(JSON.stringify({ error: "Invalid signature" }), {
|
|
973
|
-
status: 401,
|
|
974
|
-
headers: { "Content-Type": "application/json" },
|
|
975
|
-
});
|
|
976
|
-
}
|
|
977
|
-
const event = JSON.parse(rawBody);
|
|
978
|
-
try {
|
|
979
|
-
switch (event.type) {
|
|
980
|
-
case "invoice.paid": {
|
|
981
|
-
const invoice = event.data.object;
|
|
982
|
-
await ctx.runMutation(component.commissions.createFromInvoice, {
|
|
983
|
-
stripeInvoiceId: invoice.id,
|
|
984
|
-
stripeCustomerId: invoice.customer,
|
|
985
|
-
stripeChargeId: invoice.charge,
|
|
986
|
-
stripeSubscriptionId: invoice.subscription,
|
|
987
|
-
stripeProductId: invoice.lines?.data?.[0]?.price?.product,
|
|
988
|
-
amountPaidCents: invoice.amount_paid,
|
|
989
|
-
currency: invoice.currency,
|
|
990
|
-
affiliateCode: invoice.metadata?.affiliate_code,
|
|
991
|
-
});
|
|
992
|
-
break;
|
|
993
|
-
}
|
|
994
|
-
case "charge.refunded": {
|
|
995
|
-
const charge = event.data.object;
|
|
996
|
-
await ctx.runMutation(component.commissions.reverseByCharge, {
|
|
997
|
-
stripeChargeId: charge.id,
|
|
998
|
-
reason: charge.refunds?.data?.[0]?.reason ?? "Charge refunded",
|
|
999
|
-
});
|
|
1000
|
-
break;
|
|
1001
|
-
}
|
|
1002
|
-
case "checkout.session.completed": {
|
|
1003
|
-
const session = event.data.object;
|
|
1004
|
-
await ctx.runMutation(component.referrals.linkStripeCustomer, {
|
|
1005
|
-
stripeCustomerId: session.customer,
|
|
1006
|
-
userId: session.client_reference_id,
|
|
1007
|
-
affiliateCode: session.metadata?.affiliate_code,
|
|
1008
|
-
});
|
|
1009
|
-
break;
|
|
1010
|
-
}
|
|
1011
|
-
}
|
|
1012
|
-
return new Response(JSON.stringify({ received: true }), {
|
|
1013
|
-
status: 200,
|
|
1014
|
-
headers: { "Content-Type": "application/json" },
|
|
1015
|
-
});
|
|
1016
|
-
}
|
|
1017
|
-
catch (error) {
|
|
1018
|
-
console.error("Stripe webhook error:", error);
|
|
1019
|
-
return new Response(JSON.stringify({
|
|
1020
|
-
error: error instanceof Error ? error.message : "Unknown error",
|
|
1021
|
-
}), { status: 500, headers: { "Content-Type": "application/json" } });
|
|
1022
|
-
}
|
|
1023
|
-
});
|
|
1024
|
-
}
|
|
1025
1028
|
/**
|
|
1026
1029
|
* Get Stripe event handlers for affiliate tracking.
|
|
1027
1030
|
* Optionally merge with your own handlers (affiliate runs first).
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client/index.ts
CHANGED
|
@@ -221,25 +221,23 @@ type _ActionCtx = { runQuery: any; runMutation: any; runAction: any; auth: Auth
|
|
|
221
221
|
* import { createAffiliateApi } from "convex-affiliates";
|
|
222
222
|
* import { components } from "./_generated/api";
|
|
223
223
|
*
|
|
224
|
-
* export const {
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
* const identity = await ctx.auth.getUserIdentity();
|
|
233
|
-
* if (!identity) throw new Error("Not authenticated");
|
|
234
|
-
* return identity.subject;
|
|
235
|
-
* },
|
|
236
|
-
* });
|
|
224
|
+
* export const { trackClick, register, getPortalData } =
|
|
225
|
+
* createAffiliateApi(components.affiliates, {
|
|
226
|
+
* auth: async (ctx) => {
|
|
227
|
+
* const identity = await ctx.auth.getUserIdentity();
|
|
228
|
+
* if (!identity) throw new Error("Not authenticated");
|
|
229
|
+
* return identity.subject;
|
|
230
|
+
* },
|
|
231
|
+
* });
|
|
237
232
|
* ```
|
|
238
233
|
*/
|
|
239
234
|
export function createAffiliateApi(
|
|
240
235
|
component: ComponentApi,
|
|
241
236
|
config: CreateAffiliateApiConfig
|
|
242
237
|
) {
|
|
238
|
+
const auth = config.auth;
|
|
239
|
+
const isAdmin = config.isAdmin;
|
|
240
|
+
const hooks = config.hooks;
|
|
243
241
|
const defaults = {
|
|
244
242
|
defaultCommissionType: config.defaultCommissionType ?? "percentage",
|
|
245
243
|
defaultCommissionValue: config.defaultCommissionValue ?? 20,
|
|
@@ -269,12 +267,12 @@ export function createAffiliateApi(
|
|
|
269
267
|
|
|
270
268
|
// Helper to check admin access
|
|
271
269
|
const requireAdmin = async (ctx: { auth: Auth }) => {
|
|
272
|
-
if (
|
|
273
|
-
const
|
|
274
|
-
if (!
|
|
270
|
+
if (isAdmin) {
|
|
271
|
+
const isAdminResult = await isAdmin(ctx);
|
|
272
|
+
if (!isAdminResult) throw new Error("Not authorized - admin access required");
|
|
275
273
|
} else {
|
|
276
274
|
// Fall back to just requiring auth
|
|
277
|
-
await
|
|
275
|
+
await auth(ctx);
|
|
278
276
|
}
|
|
279
277
|
};
|
|
280
278
|
|
|
@@ -288,7 +286,7 @@ export function createAffiliateApi(
|
|
|
288
286
|
hookName: K,
|
|
289
287
|
data: Parameters<NonNullable<AffiliateHooks[K]>>[0]
|
|
290
288
|
): Promise<void> {
|
|
291
|
-
const hook =
|
|
289
|
+
const hook = hooks?.[hookName];
|
|
292
290
|
if (hook) {
|
|
293
291
|
try {
|
|
294
292
|
await hook(data as never);
|
|
@@ -419,7 +417,7 @@ export function createAffiliateApi(
|
|
|
419
417
|
customCode: v.optional(v.string()),
|
|
420
418
|
},
|
|
421
419
|
handler: async (ctx, args) => {
|
|
422
|
-
const userId = await
|
|
420
|
+
const userId = await auth(ctx);
|
|
423
421
|
const campaign = await ensureDefaultCampaign(ctx);
|
|
424
422
|
const result = await ctx.runMutation(component.affiliates.register, {
|
|
425
423
|
userId,
|
|
@@ -464,7 +462,7 @@ export function createAffiliateApi(
|
|
|
464
462
|
getAffiliate: queryGeneric({
|
|
465
463
|
args: {},
|
|
466
464
|
handler: async (ctx) => {
|
|
467
|
-
const userId = await
|
|
465
|
+
const userId = await auth(ctx);
|
|
468
466
|
return ctx.runQuery(component.affiliates.getByUserId, { userId });
|
|
469
467
|
},
|
|
470
468
|
}),
|
|
@@ -502,7 +500,7 @@ export function createAffiliateApi(
|
|
|
502
500
|
payoutEmail: v.optional(v.string()),
|
|
503
501
|
},
|
|
504
502
|
handler: async (ctx, args) => {
|
|
505
|
-
const userId = await
|
|
503
|
+
const userId = await auth(ctx);
|
|
506
504
|
const affiliate = await ctx.runQuery(component.affiliates.getByUserId, {
|
|
507
505
|
userId,
|
|
508
506
|
});
|
|
@@ -536,7 +534,7 @@ export function createAffiliateApi(
|
|
|
536
534
|
getPortalData: queryGeneric({
|
|
537
535
|
args: {},
|
|
538
536
|
handler: async (ctx) => {
|
|
539
|
-
const userId = await
|
|
537
|
+
const userId = await auth(ctx);
|
|
540
538
|
return ctx.runQuery(component.analytics.getPortalData, { userId });
|
|
541
539
|
},
|
|
542
540
|
}),
|
|
@@ -569,7 +567,7 @@ export function createAffiliateApi(
|
|
|
569
567
|
paginationOpts: paginationOptsValidator,
|
|
570
568
|
},
|
|
571
569
|
handler: async (ctx, args) => {
|
|
572
|
-
const userId = await
|
|
570
|
+
const userId = await auth(ctx);
|
|
573
571
|
const affiliate = await getAffiliateByUserId(ctx, userId);
|
|
574
572
|
if (!affiliate) {
|
|
575
573
|
return { page: [], isDone: true, continueCursor: "" };
|
|
@@ -609,7 +607,7 @@ export function createAffiliateApi(
|
|
|
609
607
|
paginationOpts: paginationOptsValidator,
|
|
610
608
|
},
|
|
611
609
|
handler: async (ctx, args) => {
|
|
612
|
-
const userId = await
|
|
610
|
+
const userId = await auth(ctx);
|
|
613
611
|
const affiliate = await getAffiliateByUserId(ctx, userId);
|
|
614
612
|
if (!affiliate) {
|
|
615
613
|
return { page: [], isDone: true, continueCursor: "" };
|
|
@@ -654,7 +652,7 @@ export function createAffiliateApi(
|
|
|
654
652
|
limit: v.optional(v.number()),
|
|
655
653
|
},
|
|
656
654
|
handler: async (ctx, args) => {
|
|
657
|
-
const userId = await
|
|
655
|
+
const userId = await auth(ctx);
|
|
658
656
|
const affiliate = await getAffiliateByUserId(ctx, userId);
|
|
659
657
|
if (!affiliate) {
|
|
660
658
|
return [];
|
|
@@ -700,7 +698,7 @@ export function createAffiliateApi(
|
|
|
700
698
|
subId: v.optional(v.string()),
|
|
701
699
|
},
|
|
702
700
|
handler: async (ctx, args) => {
|
|
703
|
-
const userId = await
|
|
701
|
+
const userId = await auth(ctx);
|
|
704
702
|
const affiliate = await ctx.runQuery(component.affiliates.getByUserId, {
|
|
705
703
|
userId,
|
|
706
704
|
});
|
|
@@ -1133,69 +1131,184 @@ export function createAffiliateApi(
|
|
|
1133
1131
|
});
|
|
1134
1132
|
},
|
|
1135
1133
|
}),
|
|
1136
|
-
};
|
|
1137
|
-
}
|
|
1138
1134
|
|
|
1139
|
-
//
|
|
1140
|
-
// HTTP Routes
|
|
1141
|
-
//
|
|
1135
|
+
// =========================================================================
|
|
1136
|
+
// HTTP Routes
|
|
1137
|
+
// =========================================================================
|
|
1142
1138
|
|
|
1143
|
-
/**
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1139
|
+
/**
|
|
1140
|
+
* Register HTTP routes for affiliate functionality.
|
|
1141
|
+
* The component reference is already available from the closure.
|
|
1142
|
+
*
|
|
1143
|
+
* @param http - The Convex HTTP router
|
|
1144
|
+
* @param options - Optional configuration (e.g., pathPrefix)
|
|
1145
|
+
*
|
|
1146
|
+
* @example
|
|
1147
|
+
* ```typescript
|
|
1148
|
+
* const affiliates = createAffiliateApi(components.affiliates, { ... });
|
|
1149
|
+
* affiliates.registerRoutes(http, { pathPrefix: "/affiliates" });
|
|
1150
|
+
* ```
|
|
1151
|
+
*/
|
|
1152
|
+
registerRoutes(
|
|
1153
|
+
http: HttpRouter,
|
|
1154
|
+
options: { pathPrefix?: string } = {}
|
|
1155
|
+
): void {
|
|
1156
|
+
const prefix = options.pathPrefix ?? "/affiliates";
|
|
1157
|
+
|
|
1158
|
+
http.route({
|
|
1159
|
+
path: `${prefix}/affiliate/:code`,
|
|
1160
|
+
method: "GET",
|
|
1161
|
+
handler: httpActionGeneric(async (ctx, request) => {
|
|
1162
|
+
const url = new URL(request.url);
|
|
1163
|
+
const code = url.pathname.split("/").pop();
|
|
1164
|
+
|
|
1165
|
+
if (!code) {
|
|
1166
|
+
return new Response(JSON.stringify({ error: "Code required" }), {
|
|
1167
|
+
status: 400,
|
|
1168
|
+
headers: { "Content-Type": "application/json" },
|
|
1169
|
+
});
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
const affiliate = await ctx.runQuery(component.affiliates.getByCode, {
|
|
1173
|
+
code: code.toUpperCase(),
|
|
1174
|
+
});
|
|
1175
|
+
|
|
1176
|
+
if (!affiliate) {
|
|
1177
|
+
return new Response(JSON.stringify({ error: "Affiliate not found" }), {
|
|
1178
|
+
status: 404,
|
|
1179
|
+
headers: { "Content-Type": "application/json" },
|
|
1180
|
+
});
|
|
1181
|
+
}
|
|
1170
1182
|
|
|
1171
|
-
|
|
1172
|
-
|
|
1183
|
+
return new Response(
|
|
1184
|
+
JSON.stringify({
|
|
1185
|
+
code: affiliate.code,
|
|
1186
|
+
displayName: affiliate.displayName,
|
|
1187
|
+
valid: affiliate.status === "approved",
|
|
1188
|
+
}),
|
|
1189
|
+
{
|
|
1190
|
+
status: 200,
|
|
1191
|
+
headers: { "Content-Type": "application/json" },
|
|
1192
|
+
}
|
|
1193
|
+
);
|
|
1194
|
+
}),
|
|
1173
1195
|
});
|
|
1196
|
+
},
|
|
1174
1197
|
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1198
|
+
// =========================================================================
|
|
1199
|
+
// Stripe Webhook Handler
|
|
1200
|
+
// =========================================================================
|
|
1201
|
+
|
|
1202
|
+
/**
|
|
1203
|
+
* Create a Stripe webhook handler that processes affiliate-related events.
|
|
1204
|
+
* The component reference is already available from the closure.
|
|
1205
|
+
*
|
|
1206
|
+
* @param webhookConfig - Configuration with webhookSecret
|
|
1207
|
+
* @returns An HTTP action handler for Stripe webhooks
|
|
1208
|
+
*
|
|
1209
|
+
* @example
|
|
1210
|
+
* ```typescript
|
|
1211
|
+
* const affiliates = createAffiliateApi(components.affiliates, { ... });
|
|
1212
|
+
*
|
|
1213
|
+
* http.route({
|
|
1214
|
+
* path: "/webhooks/stripe",
|
|
1215
|
+
* method: "POST",
|
|
1216
|
+
* handler: affiliates.createStripeWebhookHandler({
|
|
1217
|
+
* webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
|
|
1218
|
+
* }),
|
|
1219
|
+
* });
|
|
1220
|
+
* ```
|
|
1221
|
+
*/
|
|
1222
|
+
createStripeWebhookHandler(webhookConfig: StripeWebhookConfig) {
|
|
1223
|
+
if (!webhookConfig.webhookSecret) {
|
|
1224
|
+
throw new Error(
|
|
1225
|
+
"webhookSecret is required for Stripe webhook handler. " +
|
|
1226
|
+
"Set STRIPE_WEBHOOK_SECRET in your Convex environment variables."
|
|
1227
|
+
);
|
|
1180
1228
|
}
|
|
1181
1229
|
|
|
1182
|
-
return
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1230
|
+
return httpActionGeneric(async (ctx, request) => {
|
|
1231
|
+
const rawBody = await request.text();
|
|
1232
|
+
|
|
1233
|
+
const signature = request.headers.get("stripe-signature");
|
|
1234
|
+
if (!signature) {
|
|
1235
|
+
return new Response(
|
|
1236
|
+
JSON.stringify({ error: "Missing stripe-signature header" }),
|
|
1237
|
+
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1238
|
+
);
|
|
1191
1239
|
}
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1240
|
+
|
|
1241
|
+
const isValid = await verifyStripeSignature(
|
|
1242
|
+
rawBody,
|
|
1243
|
+
signature,
|
|
1244
|
+
webhookConfig.webhookSecret
|
|
1245
|
+
);
|
|
1246
|
+
if (!isValid) {
|
|
1247
|
+
return new Response(JSON.stringify({ error: "Invalid signature" }), {
|
|
1248
|
+
status: 401,
|
|
1249
|
+
headers: { "Content-Type": "application/json" },
|
|
1250
|
+
});
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
const event = JSON.parse(rawBody) as { type: string; data: { object: any } };
|
|
1254
|
+
|
|
1255
|
+
try {
|
|
1256
|
+
switch (event.type) {
|
|
1257
|
+
case "invoice.paid": {
|
|
1258
|
+
const invoice = event.data.object;
|
|
1259
|
+
await ctx.runMutation(component.commissions.createFromInvoice, {
|
|
1260
|
+
stripeInvoiceId: invoice.id,
|
|
1261
|
+
stripeCustomerId: invoice.customer,
|
|
1262
|
+
stripeChargeId: invoice.charge,
|
|
1263
|
+
stripeSubscriptionId: invoice.subscription,
|
|
1264
|
+
stripeProductId: invoice.lines?.data?.[0]?.price?.product,
|
|
1265
|
+
amountPaidCents: invoice.amount_paid,
|
|
1266
|
+
currency: invoice.currency,
|
|
1267
|
+
affiliateCode: invoice.metadata?.affiliate_code,
|
|
1268
|
+
});
|
|
1269
|
+
break;
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
case "charge.refunded": {
|
|
1273
|
+
const charge = event.data.object;
|
|
1274
|
+
await ctx.runMutation(component.commissions.reverseByCharge, {
|
|
1275
|
+
stripeChargeId: charge.id,
|
|
1276
|
+
reason: charge.refunds?.data?.[0]?.reason ?? "Charge refunded",
|
|
1277
|
+
});
|
|
1278
|
+
break;
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
case "checkout.session.completed": {
|
|
1282
|
+
const session = event.data.object;
|
|
1283
|
+
await ctx.runMutation(component.referrals.linkStripeCustomer, {
|
|
1284
|
+
stripeCustomerId: session.customer,
|
|
1285
|
+
userId: session.client_reference_id,
|
|
1286
|
+
affiliateCode: session.metadata?.affiliate_code,
|
|
1287
|
+
});
|
|
1288
|
+
break;
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
return new Response(JSON.stringify({ received: true }), {
|
|
1293
|
+
status: 200,
|
|
1294
|
+
headers: { "Content-Type": "application/json" },
|
|
1295
|
+
});
|
|
1296
|
+
} catch (error) {
|
|
1297
|
+
console.error("Stripe webhook error:", error);
|
|
1298
|
+
return new Response(
|
|
1299
|
+
JSON.stringify({
|
|
1300
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
1301
|
+
}),
|
|
1302
|
+
{ status: 500, headers: { "Content-Type": "application/json" } }
|
|
1303
|
+
);
|
|
1304
|
+
}
|
|
1305
|
+
});
|
|
1306
|
+
},
|
|
1307
|
+
};
|
|
1195
1308
|
}
|
|
1196
1309
|
|
|
1197
1310
|
// =============================================================================
|
|
1198
|
-
// Stripe Webhook
|
|
1311
|
+
// Stripe Webhook Signature Verification
|
|
1199
1312
|
// =============================================================================
|
|
1200
1313
|
|
|
1201
1314
|
/**
|
|
@@ -1250,121 +1363,6 @@ export interface StripeWebhookConfig {
|
|
|
1250
1363
|
webhookSecret: string;
|
|
1251
1364
|
}
|
|
1252
1365
|
|
|
1253
|
-
/**
|
|
1254
|
-
* Create a Stripe webhook handler that processes affiliate-related events.
|
|
1255
|
-
* Handles invoice.paid, charge.refunded, and checkout.session.completed events.
|
|
1256
|
-
*
|
|
1257
|
-
* @example
|
|
1258
|
-
* ```typescript
|
|
1259
|
-
* import { httpRouter } from "convex/server";
|
|
1260
|
-
* import { createStripeWebhookHandler } from "convex-affiliates";
|
|
1261
|
-
* import { components } from "./_generated/api";
|
|
1262
|
-
*
|
|
1263
|
-
* const http = httpRouter();
|
|
1264
|
-
*
|
|
1265
|
-
* http.route({
|
|
1266
|
-
* path: "/webhooks/stripe",
|
|
1267
|
-
* method: "POST",
|
|
1268
|
-
* handler: createStripeWebhookHandler(components.affiliates, {
|
|
1269
|
-
* webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
|
|
1270
|
-
* }),
|
|
1271
|
-
* });
|
|
1272
|
-
*
|
|
1273
|
-
* export default http;
|
|
1274
|
-
* ```
|
|
1275
|
-
*/
|
|
1276
|
-
export function createStripeWebhookHandler(
|
|
1277
|
-
component: ComponentApi,
|
|
1278
|
-
config: StripeWebhookConfig
|
|
1279
|
-
) {
|
|
1280
|
-
// Validate webhook secret at creation time for helpful error messages
|
|
1281
|
-
if (!config.webhookSecret) {
|
|
1282
|
-
throw new Error(
|
|
1283
|
-
"webhookSecret is required for Stripe webhook handler. " +
|
|
1284
|
-
"Set STRIPE_WEBHOOK_SECRET in your Convex environment variables."
|
|
1285
|
-
);
|
|
1286
|
-
}
|
|
1287
|
-
|
|
1288
|
-
return httpActionGeneric(async (ctx, request) => {
|
|
1289
|
-
// Get raw body for signature verification
|
|
1290
|
-
const rawBody = await request.text();
|
|
1291
|
-
|
|
1292
|
-
// Verify signature (required)
|
|
1293
|
-
const signature = request.headers.get("stripe-signature");
|
|
1294
|
-
if (!signature) {
|
|
1295
|
-
return new Response(
|
|
1296
|
-
JSON.stringify({ error: "Missing stripe-signature header" }),
|
|
1297
|
-
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1298
|
-
);
|
|
1299
|
-
}
|
|
1300
|
-
|
|
1301
|
-
const isValid = await verifyStripeSignature(
|
|
1302
|
-
rawBody,
|
|
1303
|
-
signature,
|
|
1304
|
-
config.webhookSecret
|
|
1305
|
-
);
|
|
1306
|
-
if (!isValid) {
|
|
1307
|
-
return new Response(JSON.stringify({ error: "Invalid signature" }), {
|
|
1308
|
-
status: 401,
|
|
1309
|
-
headers: { "Content-Type": "application/json" },
|
|
1310
|
-
});
|
|
1311
|
-
}
|
|
1312
|
-
|
|
1313
|
-
const event = JSON.parse(rawBody) as { type: string; data: { object: any } };
|
|
1314
|
-
|
|
1315
|
-
try {
|
|
1316
|
-
switch (event.type) {
|
|
1317
|
-
case "invoice.paid": {
|
|
1318
|
-
const invoice = event.data.object;
|
|
1319
|
-
await ctx.runMutation(component.commissions.createFromInvoice, {
|
|
1320
|
-
stripeInvoiceId: invoice.id,
|
|
1321
|
-
stripeCustomerId: invoice.customer,
|
|
1322
|
-
stripeChargeId: invoice.charge,
|
|
1323
|
-
stripeSubscriptionId: invoice.subscription,
|
|
1324
|
-
stripeProductId: invoice.lines?.data?.[0]?.price?.product,
|
|
1325
|
-
amountPaidCents: invoice.amount_paid,
|
|
1326
|
-
currency: invoice.currency,
|
|
1327
|
-
affiliateCode: invoice.metadata?.affiliate_code,
|
|
1328
|
-
});
|
|
1329
|
-
break;
|
|
1330
|
-
}
|
|
1331
|
-
|
|
1332
|
-
case "charge.refunded": {
|
|
1333
|
-
const charge = event.data.object;
|
|
1334
|
-
await ctx.runMutation(component.commissions.reverseByCharge, {
|
|
1335
|
-
stripeChargeId: charge.id,
|
|
1336
|
-
reason: charge.refunds?.data?.[0]?.reason ?? "Charge refunded",
|
|
1337
|
-
});
|
|
1338
|
-
break;
|
|
1339
|
-
}
|
|
1340
|
-
|
|
1341
|
-
case "checkout.session.completed": {
|
|
1342
|
-
const session = event.data.object;
|
|
1343
|
-
await ctx.runMutation(component.referrals.linkStripeCustomer, {
|
|
1344
|
-
stripeCustomerId: session.customer,
|
|
1345
|
-
userId: session.client_reference_id,
|
|
1346
|
-
affiliateCode: session.metadata?.affiliate_code,
|
|
1347
|
-
});
|
|
1348
|
-
break;
|
|
1349
|
-
}
|
|
1350
|
-
}
|
|
1351
|
-
|
|
1352
|
-
return new Response(JSON.stringify({ received: true }), {
|
|
1353
|
-
status: 200,
|
|
1354
|
-
headers: { "Content-Type": "application/json" },
|
|
1355
|
-
});
|
|
1356
|
-
} catch (error) {
|
|
1357
|
-
console.error("Stripe webhook error:", error);
|
|
1358
|
-
return new Response(
|
|
1359
|
-
JSON.stringify({
|
|
1360
|
-
error: error instanceof Error ? error.message : "Unknown error",
|
|
1361
|
-
}),
|
|
1362
|
-
{ status: 500, headers: { "Content-Type": "application/json" } }
|
|
1363
|
-
);
|
|
1364
|
-
}
|
|
1365
|
-
});
|
|
1366
|
-
}
|
|
1367
|
-
|
|
1368
1366
|
// =============================================================================
|
|
1369
1367
|
// @convex-dev/stripe Integration
|
|
1370
1368
|
// =============================================================================
|