diff --git a/packages/polar-betterauth/package.json b/packages/polar-betterauth/package.json index b9f3562..1937941 100644 --- a/packages/polar-betterauth/package.json +++ b/packages/polar-betterauth/package.json @@ -1,6 +1,6 @@ { "name": "@polar-sh/better-auth", - "version": "1.1.3", + "version": "1.1.4", "description": "Polar integration for better-auth", "main": "./dist/index.cjs", "module": "./dist/index.js", diff --git a/packages/polar-betterauth/src/plugins/checkout.ts b/packages/polar-betterauth/src/plugins/checkout.ts index a597379..319e5b5 100644 --- a/packages/polar-betterauth/src/plugins/checkout.ts +++ b/packages/polar-betterauth/src/plugins/checkout.ts @@ -57,6 +57,8 @@ export const checkout = .optional(), allowDiscountCodes: z.coerce.boolean().optional().default(true), discountId: z.string().optional(), + redirect: z.coerce.boolean().optional().default(true), + successQueryParams: z.record(z.string(), z.string()).optional(), }), }, async (ctx) => { @@ -98,11 +100,19 @@ export const checkout = externalCustomerId: session?.user.id, products: productIds, successUrl: checkoutOptions.successUrl - ? new URL( + ? (() => { + const url = new URL( checkoutOptions.successUrl, - ctx.request?.url, - ).toString() - : undefined, + ctx.request?.url + ); + if (ctx.body.successQueryParams) { + Object.entries(ctx.body.successQueryParams).forEach(([key, value]) => { + url.searchParams.set(key, value); + }); + } + return url.toString(); + })() + : undefined, metadata: ctx.body.referenceId ? { referenceId: ctx.body.referenceId, @@ -122,7 +132,7 @@ export const checkout = return ctx.json({ url: redirectUrl.toString(), - redirect: true, + redirect: ctx.body?.redirect ?? true, }); } catch (e: unknown) { if (e instanceof Error) { diff --git a/packages/polar-betterauth/src/plugins/portal.ts b/packages/polar-betterauth/src/plugins/portal.ts index 2831cfe..2318595 100644 --- a/packages/polar-betterauth/src/plugins/portal.ts +++ b/packages/polar-betterauth/src/plugins/portal.ts @@ -11,6 +11,9 @@ export const portal = () => (polar: Polar) => { { method: "GET", use: [sessionMiddleware], + query: z.object({ + redirect: z.coerce.boolean().optional().default(true) + }).optional(), }, async (ctx) => { if (!ctx.context.session?.user.id) { @@ -26,7 +29,7 @@ export const portal = () => (polar: Polar) => { return ctx.json({ url: customerSession.customerPortalUrl, - redirect: true, + redirect: ctx.query?.redirect ?? true, }); } catch (e: unknown) { if (e instanceof Error) {