@polar-sh/better-auth 1.0.1 → 1.0.2
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/dist/index.cjs +6 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -121,7 +121,7 @@ var portal = () => (polar2) => {
|
|
|
121
121
|
}
|
|
122
122
|
try {
|
|
123
123
|
const customerSession = await polar2.customerSessions.create({
|
|
124
|
-
|
|
124
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
125
125
|
});
|
|
126
126
|
return ctx.json({
|
|
127
127
|
url: customerSession.customerPortalUrl,
|
|
@@ -186,7 +186,7 @@ var portal = () => (polar2) => {
|
|
|
186
186
|
}
|
|
187
187
|
try {
|
|
188
188
|
const customerSession = await polar2.customerSessions.create({
|
|
189
|
-
|
|
189
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
190
190
|
});
|
|
191
191
|
const benefits = await polar2.customerPortal.benefitGrants.list(
|
|
192
192
|
{ customerSession: customerSession.token },
|
|
@@ -251,7 +251,7 @@ var portal = () => (polar2) => {
|
|
|
251
251
|
}
|
|
252
252
|
try {
|
|
253
253
|
const customerSession = await polar2.customerSessions.create({
|
|
254
|
-
|
|
254
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
255
255
|
});
|
|
256
256
|
const subscriptions = await polar2.customerPortal.subscriptions.list(
|
|
257
257
|
{ customerSession: customerSession.token },
|
|
@@ -293,7 +293,7 @@ var portal = () => (polar2) => {
|
|
|
293
293
|
}
|
|
294
294
|
try {
|
|
295
295
|
const customerSession = await polar2.customerSessions.create({
|
|
296
|
-
|
|
296
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
297
297
|
});
|
|
298
298
|
const orders = await polar2.customerPortal.orders.list(
|
|
299
299
|
{ customerSession: customerSession.token },
|
|
@@ -367,7 +367,7 @@ var checkout = (checkoutOptions = {}) => (polar2) => {
|
|
|
367
367
|
}
|
|
368
368
|
try {
|
|
369
369
|
const checkout2 = await polar2.checkouts.create({
|
|
370
|
-
|
|
370
|
+
externalCustomerId: session?.user.id,
|
|
371
371
|
products: productIds,
|
|
372
372
|
successUrl: checkoutOptions.successUrl ? new URL(
|
|
373
373
|
checkoutOptions.successUrl,
|
|
@@ -421,7 +421,7 @@ var usage = (_usageOptions) => (polar2) => {
|
|
|
421
421
|
}
|
|
422
422
|
try {
|
|
423
423
|
const customerSession = await polar2.customerSessions.create({
|
|
424
|
-
|
|
424
|
+
externalCustomerId: ctx.context.session.user.id
|
|
425
425
|
});
|
|
426
426
|
const customerMeters = await polar2.customerPortal.customerMeters.list(
|
|
427
427
|
{ customerSession: customerSession.token },
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/hooks/customer.ts","../src/client.ts","../src/plugins/portal.ts","../src/plugins/checkout.ts","../src/plugins/usage.ts","../src/plugins/webhooks.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"better-auth\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarEndpoints, PolarOptions } from \"./types\";\n\nexport { polarClient } from \"./client\";\n\nexport * from \"./plugins/portal\";\nexport * from \"./plugins/checkout\";\nexport * from \"./plugins/usage\";\nexport * from \"./plugins/webhooks\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\tconst plugins = options.use\n\t\t.map((use) => use(options.client))\n\t\t.reduce((acc, plugin) => {\n\t\t\tObject.assign(acc, plugin);\n\t\t\treturn acc;\n\t\t}, {} as PolarEndpoints);\n\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\t...plugins,\n\t\t},\n\t\tinit() {\n\t\t\treturn {\n\t\t\t\toptions: {\n\t\t\t\t\tdatabaseHooks: {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\tcreate: {\n\t\t\t\t\t\t\t\tafter: onUserCreate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tupdate: {\n\t\t\t\t\t\t\t\tafter: onUserUpdate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t} satisfies BetterAuthPlugin;\n};\n","import type { GenericEndpointContext, User } from \"better-auth\";\nimport { APIError } from \"better-auth/api\";\nimport type { PolarOptions } from \"../types\";\n\nexport const onUserCreate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tconst params = options.getCustomerCreateParams\n\t\t\t\t\t? await options.getCustomerCreateParams({\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t})\n\t\t\t\t\t: {};\n\n\t\t\t\tconst { result: existingCustomers } =\n\t\t\t\t\tawait options.client.customers.list({ email: user.email });\n\t\t\t\tconst existingCustomer = existingCustomers.items[0];\n\n\t\t\t\tif (existingCustomer) {\n\t\t\t\t\tif (existingCustomer.externalId !== user.id) {\n\t\t\t\t\t\tawait options.client.customers.update({\n\t\t\t\t\t\t\tid: existingCustomer.id,\n\t\t\t\t\t\t\tcustomerUpdate: {\n\t\t\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t\t\t\t...params,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst customer = await options.client.customers.create({\n\t\t\t\t\t\t...params,\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconsole.log(customer);\n\t\t\t\t}\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\nexport const onUserUpdate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tawait options.client.customers.updateExternal({\n\t\t\t\t\texternalId: user.id,\n\t\t\t\t\tcustomerUpdateExternalID: {\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t`Polar customer update failed. Error: ${e.message}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar customer update failed. Error: ${e}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n","import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type { polar } from \"./index\";\n\nexport const polarClient = () => {\n\treturn {\n\t\tid: \"polar-client\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof polar>,\n\t} satisfies BetterAuthClientPlugin;\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError } from \"better-auth/api\";\nimport { sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\n\nexport const portal = () => (polar: Polar) => {\n\treturn {\n\t\tportal: createAuthEndpoint(\n\t\t\t\"/customer/portal\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\turl: customerSession.customerPortalUrl,\n\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar customer portal creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Customer portal creation failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tstate: createAuthEndpoint(\n\t\t\t\"/customer/state\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst state = await polar.customers.getStateExternal({\n\t\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(state);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tbenefits: createAuthEndpoint(\n\t\t\t\"/customer/benefits/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst benefits = await polar.customerPortal.benefitGrants.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(benefits);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar benefits list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Benefits list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tsubscriptions: createAuthEndpoint(\n\t\t\t\"/customer/subscriptions/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tactive: z.coerce.boolean().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (ctx.query?.referenceId) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst subscriptions = await polar.subscriptions.list({\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\treferenceId: ctx.query?.referenceId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar subscriptions list with referenceId failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Subscriptions list with referenceId failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst subscriptions = await polar.customerPortal.subscriptions.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\torders: createAuthEndpoint(\n\t\t\t\"/customer/orders/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tproductBillingType: z.enum([\"recurring\", \"one_time\"]).optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst orders = await polar.customerPortal.orders.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tproductBillingType: ctx.query?.productBillingType,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(orders);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar orders list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Orders list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface CheckoutOptions {\n\t/**\n\t * Optional list of slug -> productId mappings for easy slug checkouts\n\t */\n\tproducts?: Product[] | (() => Promise<Product[]>);\n\t/**\n\t * Checkout Success URL\n\t */\n\tsuccessUrl?: string;\n\t/**\n\t * Only allow authenticated customers to checkout\n\t */\n\tauthenticatedUsersOnly?: boolean;\n}\n\nexport const checkout =\n\t(checkoutOptions: CheckoutOptions = {}) =>\n\t(polar: Polar) => {\n\t\treturn {\n\t\t\tcheckout: createAuthEndpoint(\n\t\t\t\t\"/checkout\",\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody: z.object({\n\t\t\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]).optional(),\n\t\t\t\t\t\tslug: z.string().optional(),\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tcustomFieldData: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t\tmetadata: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tasync (ctx) => {\n\t\t\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\t\t\tlet productIds: string[] = [];\n\n\t\t\t\t\tif (ctx.body.slug) {\n\t\t\t\t\t\tconst resolvedProducts = await (typeof checkoutOptions.products ===\n\t\t\t\t\t\t\"function\"\n\t\t\t\t\t\t\t? checkoutOptions.products()\n\t\t\t\t\t\t\t: checkoutOptions.products);\n\n\t\t\t\t\t\tconst productId = resolvedProducts?.find(\n\t\t\t\t\t\t\t(product) => product.slug === ctx.body.slug,\n\t\t\t\t\t\t)?.productId;\n\n\t\t\t\t\t\tif (!productId) {\n\t\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\t\tmessage: \"Product not found\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tproductIds = [productId];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproductIds = Array.isArray(ctx.body.products)\n\t\t\t\t\t\t\t? ctx.body.products.filter((id) => id !== undefined)\n\t\t\t\t\t\t\t: [ctx.body.products].filter((id) => id !== undefined);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkoutOptions.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst checkout = await polar.checkouts.create({\n\t\t\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\t\t\tproducts: productIds,\n\t\t\t\t\t\t\tsuccessUrl: checkoutOptions.successUrl\n\t\t\t\t\t\t\t\t? new URL(\n\t\t\t\t\t\t\t\t\t\tcheckoutOptions.successUrl,\n\t\t\t\t\t\t\t\t\t\tctx.request?.url,\n\t\t\t\t\t\t\t\t\t).toString()\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tmetadata: ctx.body.referenceId\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\treferenceId: ctx.body.referenceId,\n\t\t\t\t\t\t\t\t\t\t...ctx.body.metadata,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: ctx.body.metadata,\n\t\t\t\t\t\t\tcustomFieldData: ctx.body.customFieldData,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\t\turl: checkout.url,\n\t\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar checkout creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Checkout creation failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t};\n\t};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport {\n\tAPIError,\n\tcreateAuthEndpoint,\n\tsessionMiddleware,\n} from \"better-auth/api\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface UsageOptions {\n\t/**\n\t * Products to use for topping up credits\n\t */\n\tcreditProducts?: Product[] | (() => Promise<Product[]>);\n}\n\nexport const usage = (_usageOptions?: UsageOptions) => (polar: Polar) => {\n\treturn {\n\t\tmeters: createAuthEndpoint(\n\t\t\t\"/usage/meters/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t\tquery: z.object({\n\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t}),\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst customerMeters = await polar.customerPortal.customerMeters.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(customerMeters);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar meters list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Meters list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tingestion: createAuthEndpoint(\n\t\t\t\"/usage/ingest\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: z.object({\n\t\t\t\t\tevent: z.string(),\n\t\t\t\t\tmetadata: z.record(\n\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst ingestion = await polar.events.ingest({\n\t\t\t\t\t\tevents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: ctx.body.event,\n\t\t\t\t\t\t\t\tmetadata: ctx.body.metadata,\n\t\t\t\t\t\t\t\texternalCustomerId: ctx.context.session.user.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(ingestion);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar ingestion failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Ingestion failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport type { WebhookBenefitCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitcreatedpayload.js\";\nimport type { WebhookBenefitGrantCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantcreatedpayload.js\";\nimport type { WebhookBenefitGrantRevokedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantrevokedpayload.js\";\nimport type { WebhookBenefitGrantUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantupdatedpayload.js\";\nimport type { WebhookBenefitUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitupdatedpayload.js\";\nimport type { WebhookCheckoutCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutcreatedpayload.js\";\nimport type { WebhookCheckoutUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutupdatedpayload.js\";\nimport type { WebhookCustomerCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomercreatedpayload.js\";\nimport type { WebhookCustomerDeletedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerdeletedpayload.js\";\nimport type { WebhookCustomerStateChangedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerstatechangedpayload.js\";\nimport type { WebhookCustomerUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerupdatedpayload.js\";\nimport type { WebhookOrderCreatedPayload } from \"@polar-sh/sdk/models/components/webhookordercreatedpayload.js\";\nimport type { WebhookOrderPaidPayload } from \"@polar-sh/sdk/models/components/webhookorderpaidpayload.js\";\nimport type { WebhookOrderRefundedPayload } from \"@polar-sh/sdk/models/components/webhookorderrefundedpayload.js\";\nimport type { WebhookOrganizationUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookorganizationupdatedpayload.js\";\nimport type { WebhookProductCreatedPayload } from \"@polar-sh/sdk/models/components/webhookproductcreatedpayload.js\";\nimport type { WebhookProductUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookproductupdatedpayload.js\";\nimport type { WebhookRefundCreatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundcreatedpayload.js\";\nimport type { WebhookRefundUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundupdatedpayload.js\";\nimport type { WebhookSubscriptionActivePayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionactivepayload.js\";\nimport type { WebhookSubscriptionCanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncanceledpayload.js\";\nimport type { WebhookSubscriptionCreatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncreatedpayload.js\";\nimport type { WebhookSubscriptionRevokedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionrevokedpayload.js\";\nimport type { WebhookSubscriptionUncanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionuncanceledpayload.js\";\nimport type { WebhookSubscriptionUpdatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionupdatedpayload.js\";\nimport { validateEvent } from \"@polar-sh/sdk/webhooks.js\";\nimport { APIError, createAuthEndpoint } from \"better-auth/api\";\n\nexport interface WebhooksOptions {\n\t/**\n\t * Webhook Secret\n\t */\n\tsecret: string;\n\t/**\n\t * Generic handler for all webhooks\n\t */\n\tonPayload?: (payload: ReturnType<typeof validateEvent>) => Promise<void>;\n\t/**\n\t * Webhook for checkout created\n\t */\n\tonCheckoutCreated?: (payload: WebhookCheckoutCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for checkout updated\n\t */\n\tonCheckoutUpdated?: (payload: WebhookCheckoutUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order created\n\t */\n\tonOrderCreated?: (payload: WebhookOrderCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order refunded\n\t */\n\tonOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order paid\n\t */\n\tonOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund created\n\t */\n\tonRefundCreated?: (payload: WebhookRefundCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund updated\n\t */\n\tonRefundUpdated?: (payload: WebhookRefundUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for subscription created\n\t */\n\tonSubscriptionCreated?: (\n\t\tpayload: WebhookSubscriptionCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription updated\n\t */\n\tonSubscriptionUpdated?: (\n\t\tpayload: WebhookSubscriptionUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription active\n\t */\n\tonSubscriptionActive?: (\n\t\tpayload: WebhookSubscriptionActivePayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription canceled\n\t */\n\tonSubscriptionCanceled?: (\n\t\tpayload: WebhookSubscriptionCanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription revoked\n\t */\n\tonSubscriptionRevoked?: (\n\t\tpayload: WebhookSubscriptionRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription uncanceled\n\t */\n\tonSubscriptionUncanceled?: (\n\t\tpayload: WebhookSubscriptionUncanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for product created\n\t */\n\tonProductCreated?: (payload: WebhookProductCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for product updated\n\t */\n\tonProductUpdated?: (payload: WebhookProductUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for organization updated\n\t */\n\tonOrganizationUpdated?: (\n\t\tpayload: WebhookOrganizationUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit created\n\t */\n\tonBenefitCreated?: (payload: WebhookBenefitCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit updated\n\t */\n\tonBenefitUpdated?: (payload: WebhookBenefitUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant created\n\t */\n\tonBenefitGrantCreated?: (\n\t\tpayload: WebhookBenefitGrantCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant updated\n\t */\n\tonBenefitGrantUpdated?: (\n\t\tpayload: WebhookBenefitGrantUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant revoked\n\t */\n\tonBenefitGrantRevoked?: (\n\t\tpayload: WebhookBenefitGrantRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for customer created\n\t */\n\tonCustomerCreated?: (payload: WebhookCustomerCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer updated\n\t */\n\tonCustomerUpdated?: (payload: WebhookCustomerUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer deleted\n\t */\n\tonCustomerDeleted?: (payload: WebhookCustomerDeletedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer state changed\n\t */\n\tonCustomerStateChanged?: (\n\t\tpayload: WebhookCustomerStateChangedPayload,\n\t) => Promise<void>;\n}\n\nexport const webhooks = (options: WebhooksOptions) => (_polar: Polar) => {\n\treturn {\n\t\tpolarWebhooks: createAuthEndpoint(\n\t\t\t\"/polar/webhooks\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tmetadata: {\n\t\t\t\t\tisAction: false,\n\t\t\t\t},\n\t\t\t\tcloneRequest: true,\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tconst {\n\t\t\t\t\tsecret,\n\t\t\t\t\tonPayload,\n\t\t\t\t\tonCheckoutCreated,\n\t\t\t\t\tonCheckoutUpdated,\n\t\t\t\t\tonOrderCreated,\n\t\t\t\t\tonOrderPaid,\n\t\t\t\t\tonOrderRefunded,\n\t\t\t\t\tonRefundCreated,\n\t\t\t\t\tonRefundUpdated,\n\t\t\t\t\tonSubscriptionCreated,\n\t\t\t\t\tonSubscriptionUpdated,\n\t\t\t\t\tonSubscriptionActive,\n\t\t\t\t\tonSubscriptionCanceled,\n\t\t\t\t\tonSubscriptionRevoked,\n\t\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\t\tonProductCreated,\n\t\t\t\t\tonProductUpdated,\n\t\t\t\t\tonOrganizationUpdated,\n\t\t\t\t\tonBenefitCreated,\n\t\t\t\t\tonBenefitUpdated,\n\t\t\t\t\tonBenefitGrantCreated,\n\t\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\t\tonCustomerCreated,\n\t\t\t\t\tonCustomerUpdated,\n\t\t\t\t\tonCustomerDeleted,\n\t\t\t\t\tonCustomerStateChanged,\n\t\t\t\t} = options;\n\n\t\t\t\tif (!ctx.request?.body) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t\t}\n\t\t\t\tconst buf = await ctx.request.text();\n\t\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\t\ttry {\n\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t};\n\n\t\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t\t} catch (err: unknown) {\n\t\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (onPayload) {\n\t\t\t\t\t\tonPayload(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.paid\":\n\t\t\t\t\t\t\tif (onOrderPaid) {\n\t\t\t\t\t\t\t\tonOrderPaid(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar webhook failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn ctx.json({ received: true });\n\t\t\t},\n\t\t),\n\t};\n};\n"],"mappings":"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","names":["import_api","polar","import_api","import_plugins","import_zod","polar","checkout","import_api","import_zod","polar","import_api"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/hooks/customer.ts","../src/client.ts","../src/plugins/portal.ts","../src/plugins/checkout.ts","../src/plugins/usage.ts","../src/plugins/webhooks.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"better-auth\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarEndpoints, PolarOptions } from \"./types\";\n\nexport { polarClient } from \"./client\";\n\nexport * from \"./plugins/portal\";\nexport * from \"./plugins/checkout\";\nexport * from \"./plugins/usage\";\nexport * from \"./plugins/webhooks\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\tconst plugins = options.use\n\t\t.map((use) => use(options.client))\n\t\t.reduce((acc, plugin) => {\n\t\t\tObject.assign(acc, plugin);\n\t\t\treturn acc;\n\t\t}, {} as PolarEndpoints);\n\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\t...plugins,\n\t\t},\n\t\tinit() {\n\t\t\treturn {\n\t\t\t\toptions: {\n\t\t\t\t\tdatabaseHooks: {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\tcreate: {\n\t\t\t\t\t\t\t\tafter: onUserCreate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tupdate: {\n\t\t\t\t\t\t\t\tafter: onUserUpdate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t} satisfies BetterAuthPlugin;\n};\n","import type { GenericEndpointContext, User } from \"better-auth\";\nimport { APIError } from \"better-auth/api\";\nimport type { PolarOptions } from \"../types\";\n\nexport const onUserCreate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tconst params = options.getCustomerCreateParams\n\t\t\t\t\t? await options.getCustomerCreateParams({\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t})\n\t\t\t\t\t: {};\n\n\t\t\t\tconst { result: existingCustomers } =\n\t\t\t\t\tawait options.client.customers.list({ email: user.email });\n\t\t\t\tconst existingCustomer = existingCustomers.items[0];\n\n\t\t\t\tif (existingCustomer) {\n\t\t\t\t\tif (existingCustomer.externalId !== user.id) {\n\t\t\t\t\t\tawait options.client.customers.update({\n\t\t\t\t\t\t\tid: existingCustomer.id,\n\t\t\t\t\t\t\tcustomerUpdate: {\n\t\t\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t\t\t\t...params,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst customer = await options.client.customers.create({\n\t\t\t\t\t\t...params,\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconsole.log(customer);\n\t\t\t\t}\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\nexport const onUserUpdate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tawait options.client.customers.updateExternal({\n\t\t\t\t\texternalId: user.id,\n\t\t\t\t\tcustomerUpdateExternalID: {\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t`Polar customer update failed. Error: ${e.message}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar customer update failed. Error: ${e}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n","import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type { polar } from \"./index\";\n\nexport const polarClient = () => {\n\treturn {\n\t\tid: \"polar-client\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof polar>,\n\t} satisfies BetterAuthClientPlugin;\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError } from \"better-auth/api\";\nimport { sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\n\nexport const portal = () => (polar: Polar) => {\n\treturn {\n\t\tportal: createAuthEndpoint(\n\t\t\t\"/customer/portal\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\turl: customerSession.customerPortalUrl,\n\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar customer portal creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Customer portal creation failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tstate: createAuthEndpoint(\n\t\t\t\"/customer/state\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst state = await polar.customers.getStateExternal({\n\t\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(state);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tbenefits: createAuthEndpoint(\n\t\t\t\"/customer/benefits/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst benefits = await polar.customerPortal.benefitGrants.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(benefits);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar benefits list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Benefits list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tsubscriptions: createAuthEndpoint(\n\t\t\t\"/customer/subscriptions/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tactive: z.coerce.boolean().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (ctx.query?.referenceId) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst subscriptions = await polar.subscriptions.list({\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\treferenceId: ctx.query?.referenceId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar subscriptions list with referenceId failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Subscriptions list with referenceId failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst subscriptions = await polar.customerPortal.subscriptions.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\torders: createAuthEndpoint(\n\t\t\t\"/customer/orders/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tproductBillingType: z.enum([\"recurring\", \"one_time\"]).optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst orders = await polar.customerPortal.orders.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tproductBillingType: ctx.query?.productBillingType,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(orders);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar orders list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Orders list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface CheckoutOptions {\n\t/**\n\t * Optional list of slug -> productId mappings for easy slug checkouts\n\t */\n\tproducts?: Product[] | (() => Promise<Product[]>);\n\t/**\n\t * Checkout Success URL\n\t */\n\tsuccessUrl?: string;\n\t/**\n\t * Only allow authenticated customers to checkout\n\t */\n\tauthenticatedUsersOnly?: boolean;\n}\n\nexport const checkout =\n\t(checkoutOptions: CheckoutOptions = {}) =>\n\t(polar: Polar) => {\n\t\treturn {\n\t\t\tcheckout: createAuthEndpoint(\n\t\t\t\t\"/checkout\",\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody: z.object({\n\t\t\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]).optional(),\n\t\t\t\t\t\tslug: z.string().optional(),\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tcustomFieldData: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t\tmetadata: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tasync (ctx) => {\n\t\t\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\t\t\tlet productIds: string[] = [];\n\n\t\t\t\t\tif (ctx.body.slug) {\n\t\t\t\t\t\tconst resolvedProducts = await (typeof checkoutOptions.products ===\n\t\t\t\t\t\t\"function\"\n\t\t\t\t\t\t\t? checkoutOptions.products()\n\t\t\t\t\t\t\t: checkoutOptions.products);\n\n\t\t\t\t\t\tconst productId = resolvedProducts?.find(\n\t\t\t\t\t\t\t(product) => product.slug === ctx.body.slug,\n\t\t\t\t\t\t)?.productId;\n\n\t\t\t\t\t\tif (!productId) {\n\t\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\t\tmessage: \"Product not found\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tproductIds = [productId];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproductIds = Array.isArray(ctx.body.products)\n\t\t\t\t\t\t\t? ctx.body.products.filter((id) => id !== undefined)\n\t\t\t\t\t\t\t: [ctx.body.products].filter((id) => id !== undefined);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkoutOptions.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst checkout = await polar.checkouts.create({\n\t\t\t\t\t\t\texternalCustomerId: session?.user.id,\n\t\t\t\t\t\t\tproducts: productIds,\n\t\t\t\t\t\t\tsuccessUrl: checkoutOptions.successUrl\n\t\t\t\t\t\t\t\t? new URL(\n\t\t\t\t\t\t\t\t\t\tcheckoutOptions.successUrl,\n\t\t\t\t\t\t\t\t\t\tctx.request?.url,\n\t\t\t\t\t\t\t\t\t).toString()\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tmetadata: ctx.body.referenceId\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\treferenceId: ctx.body.referenceId,\n\t\t\t\t\t\t\t\t\t\t...ctx.body.metadata,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: ctx.body.metadata,\n\t\t\t\t\t\t\tcustomFieldData: ctx.body.customFieldData,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\t\turl: checkout.url,\n\t\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar checkout creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Checkout creation failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t};\n\t};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport {\n\tAPIError,\n\tcreateAuthEndpoint,\n\tsessionMiddleware,\n} from \"better-auth/api\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface UsageOptions {\n\t/**\n\t * Products to use for topping up credits\n\t */\n\tcreditProducts?: Product[] | (() => Promise<Product[]>);\n}\n\nexport const usage = (_usageOptions?: UsageOptions) => (polar: Polar) => {\n\treturn {\n\t\tmeters: createAuthEndpoint(\n\t\t\t\"/usage/meters/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t\tquery: z.object({\n\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t}),\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst customerMeters = await polar.customerPortal.customerMeters.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(customerMeters);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar meters list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Meters list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tingestion: createAuthEndpoint(\n\t\t\t\"/usage/ingest\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: z.object({\n\t\t\t\t\tevent: z.string(),\n\t\t\t\t\tmetadata: z.record(\n\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst ingestion = await polar.events.ingest({\n\t\t\t\t\t\tevents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: ctx.body.event,\n\t\t\t\t\t\t\t\tmetadata: ctx.body.metadata,\n\t\t\t\t\t\t\t\texternalCustomerId: ctx.context.session.user.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(ingestion);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar ingestion failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Ingestion failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport type { WebhookBenefitCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitcreatedpayload.js\";\nimport type { WebhookBenefitGrantCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantcreatedpayload.js\";\nimport type { WebhookBenefitGrantRevokedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantrevokedpayload.js\";\nimport type { WebhookBenefitGrantUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantupdatedpayload.js\";\nimport type { WebhookBenefitUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitupdatedpayload.js\";\nimport type { WebhookCheckoutCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutcreatedpayload.js\";\nimport type { WebhookCheckoutUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutupdatedpayload.js\";\nimport type { WebhookCustomerCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomercreatedpayload.js\";\nimport type { WebhookCustomerDeletedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerdeletedpayload.js\";\nimport type { WebhookCustomerStateChangedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerstatechangedpayload.js\";\nimport type { WebhookCustomerUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerupdatedpayload.js\";\nimport type { WebhookOrderCreatedPayload } from \"@polar-sh/sdk/models/components/webhookordercreatedpayload.js\";\nimport type { WebhookOrderPaidPayload } from \"@polar-sh/sdk/models/components/webhookorderpaidpayload.js\";\nimport type { WebhookOrderRefundedPayload } from \"@polar-sh/sdk/models/components/webhookorderrefundedpayload.js\";\nimport type { WebhookOrganizationUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookorganizationupdatedpayload.js\";\nimport type { WebhookProductCreatedPayload } from \"@polar-sh/sdk/models/components/webhookproductcreatedpayload.js\";\nimport type { WebhookProductUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookproductupdatedpayload.js\";\nimport type { WebhookRefundCreatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundcreatedpayload.js\";\nimport type { WebhookRefundUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundupdatedpayload.js\";\nimport type { WebhookSubscriptionActivePayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionactivepayload.js\";\nimport type { WebhookSubscriptionCanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncanceledpayload.js\";\nimport type { WebhookSubscriptionCreatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncreatedpayload.js\";\nimport type { WebhookSubscriptionRevokedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionrevokedpayload.js\";\nimport type { WebhookSubscriptionUncanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionuncanceledpayload.js\";\nimport type { WebhookSubscriptionUpdatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionupdatedpayload.js\";\nimport { validateEvent } from \"@polar-sh/sdk/webhooks.js\";\nimport { APIError, createAuthEndpoint } from \"better-auth/api\";\n\nexport interface WebhooksOptions {\n\t/**\n\t * Webhook Secret\n\t */\n\tsecret: string;\n\t/**\n\t * Generic handler for all webhooks\n\t */\n\tonPayload?: (payload: ReturnType<typeof validateEvent>) => Promise<void>;\n\t/**\n\t * Webhook for checkout created\n\t */\n\tonCheckoutCreated?: (payload: WebhookCheckoutCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for checkout updated\n\t */\n\tonCheckoutUpdated?: (payload: WebhookCheckoutUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order created\n\t */\n\tonOrderCreated?: (payload: WebhookOrderCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order refunded\n\t */\n\tonOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order paid\n\t */\n\tonOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund created\n\t */\n\tonRefundCreated?: (payload: WebhookRefundCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund updated\n\t */\n\tonRefundUpdated?: (payload: WebhookRefundUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for subscription created\n\t */\n\tonSubscriptionCreated?: (\n\t\tpayload: WebhookSubscriptionCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription updated\n\t */\n\tonSubscriptionUpdated?: (\n\t\tpayload: WebhookSubscriptionUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription active\n\t */\n\tonSubscriptionActive?: (\n\t\tpayload: WebhookSubscriptionActivePayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription canceled\n\t */\n\tonSubscriptionCanceled?: (\n\t\tpayload: WebhookSubscriptionCanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription revoked\n\t */\n\tonSubscriptionRevoked?: (\n\t\tpayload: WebhookSubscriptionRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription uncanceled\n\t */\n\tonSubscriptionUncanceled?: (\n\t\tpayload: WebhookSubscriptionUncanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for product created\n\t */\n\tonProductCreated?: (payload: WebhookProductCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for product updated\n\t */\n\tonProductUpdated?: (payload: WebhookProductUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for organization updated\n\t */\n\tonOrganizationUpdated?: (\n\t\tpayload: WebhookOrganizationUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit created\n\t */\n\tonBenefitCreated?: (payload: WebhookBenefitCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit updated\n\t */\n\tonBenefitUpdated?: (payload: WebhookBenefitUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant created\n\t */\n\tonBenefitGrantCreated?: (\n\t\tpayload: WebhookBenefitGrantCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant updated\n\t */\n\tonBenefitGrantUpdated?: (\n\t\tpayload: WebhookBenefitGrantUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant revoked\n\t */\n\tonBenefitGrantRevoked?: (\n\t\tpayload: WebhookBenefitGrantRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for customer created\n\t */\n\tonCustomerCreated?: (payload: WebhookCustomerCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer updated\n\t */\n\tonCustomerUpdated?: (payload: WebhookCustomerUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer deleted\n\t */\n\tonCustomerDeleted?: (payload: WebhookCustomerDeletedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer state changed\n\t */\n\tonCustomerStateChanged?: (\n\t\tpayload: WebhookCustomerStateChangedPayload,\n\t) => Promise<void>;\n}\n\nexport const webhooks = (options: WebhooksOptions) => (_polar: Polar) => {\n\treturn {\n\t\tpolarWebhooks: createAuthEndpoint(\n\t\t\t\"/polar/webhooks\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tmetadata: {\n\t\t\t\t\tisAction: false,\n\t\t\t\t},\n\t\t\t\tcloneRequest: true,\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tconst {\n\t\t\t\t\tsecret,\n\t\t\t\t\tonPayload,\n\t\t\t\t\tonCheckoutCreated,\n\t\t\t\t\tonCheckoutUpdated,\n\t\t\t\t\tonOrderCreated,\n\t\t\t\t\tonOrderPaid,\n\t\t\t\t\tonOrderRefunded,\n\t\t\t\t\tonRefundCreated,\n\t\t\t\t\tonRefundUpdated,\n\t\t\t\t\tonSubscriptionCreated,\n\t\t\t\t\tonSubscriptionUpdated,\n\t\t\t\t\tonSubscriptionActive,\n\t\t\t\t\tonSubscriptionCanceled,\n\t\t\t\t\tonSubscriptionRevoked,\n\t\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\t\tonProductCreated,\n\t\t\t\t\tonProductUpdated,\n\t\t\t\t\tonOrganizationUpdated,\n\t\t\t\t\tonBenefitCreated,\n\t\t\t\t\tonBenefitUpdated,\n\t\t\t\t\tonBenefitGrantCreated,\n\t\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\t\tonCustomerCreated,\n\t\t\t\t\tonCustomerUpdated,\n\t\t\t\t\tonCustomerDeleted,\n\t\t\t\t\tonCustomerStateChanged,\n\t\t\t\t} = options;\n\n\t\t\t\tif (!ctx.request?.body) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t\t}\n\t\t\t\tconst buf = await ctx.request.text();\n\t\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\t\ttry {\n\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t};\n\n\t\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t\t} catch (err: unknown) {\n\t\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (onPayload) {\n\t\t\t\t\t\tonPayload(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.paid\":\n\t\t\t\t\t\t\tif (onOrderPaid) {\n\t\t\t\t\t\t\t\tonOrderPaid(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar webhook failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn ctx.json({ received: true });\n\t\t\t},\n\t\t),\n\t};\n};\n"],"mappings":"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","names":["import_api","polar","import_api","import_plugins","import_zod","polar","checkout","import_api","import_zod","polar","import_api"]}
|
package/dist/index.js
CHANGED
|
@@ -90,7 +90,7 @@ var portal = () => (polar2) => {
|
|
|
90
90
|
}
|
|
91
91
|
try {
|
|
92
92
|
const customerSession = await polar2.customerSessions.create({
|
|
93
|
-
|
|
93
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
94
94
|
});
|
|
95
95
|
return ctx.json({
|
|
96
96
|
url: customerSession.customerPortalUrl,
|
|
@@ -155,7 +155,7 @@ var portal = () => (polar2) => {
|
|
|
155
155
|
}
|
|
156
156
|
try {
|
|
157
157
|
const customerSession = await polar2.customerSessions.create({
|
|
158
|
-
|
|
158
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
159
159
|
});
|
|
160
160
|
const benefits = await polar2.customerPortal.benefitGrants.list(
|
|
161
161
|
{ customerSession: customerSession.token },
|
|
@@ -220,7 +220,7 @@ var portal = () => (polar2) => {
|
|
|
220
220
|
}
|
|
221
221
|
try {
|
|
222
222
|
const customerSession = await polar2.customerSessions.create({
|
|
223
|
-
|
|
223
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
224
224
|
});
|
|
225
225
|
const subscriptions = await polar2.customerPortal.subscriptions.list(
|
|
226
226
|
{ customerSession: customerSession.token },
|
|
@@ -262,7 +262,7 @@ var portal = () => (polar2) => {
|
|
|
262
262
|
}
|
|
263
263
|
try {
|
|
264
264
|
const customerSession = await polar2.customerSessions.create({
|
|
265
|
-
|
|
265
|
+
externalCustomerId: ctx.context.session?.user.id
|
|
266
266
|
});
|
|
267
267
|
const orders = await polar2.customerPortal.orders.list(
|
|
268
268
|
{ customerSession: customerSession.token },
|
|
@@ -336,7 +336,7 @@ var checkout = (checkoutOptions = {}) => (polar2) => {
|
|
|
336
336
|
}
|
|
337
337
|
try {
|
|
338
338
|
const checkout2 = await polar2.checkouts.create({
|
|
339
|
-
|
|
339
|
+
externalCustomerId: session?.user.id,
|
|
340
340
|
products: productIds,
|
|
341
341
|
successUrl: checkoutOptions.successUrl ? new URL(
|
|
342
342
|
checkoutOptions.successUrl,
|
|
@@ -394,7 +394,7 @@ var usage = (_usageOptions) => (polar2) => {
|
|
|
394
394
|
}
|
|
395
395
|
try {
|
|
396
396
|
const customerSession = await polar2.customerSessions.create({
|
|
397
|
-
|
|
397
|
+
externalCustomerId: ctx.context.session.user.id
|
|
398
398
|
});
|
|
399
399
|
const customerMeters = await polar2.customerPortal.customerMeters.list(
|
|
400
400
|
{ customerSession: customerSession.token },
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/customer.ts","../src/client.ts","../src/plugins/portal.ts","../src/plugins/checkout.ts","../src/plugins/usage.ts","../src/plugins/webhooks.ts","../src/index.ts"],"sourcesContent":["import type { GenericEndpointContext, User } from \"better-auth\";\nimport { APIError } from \"better-auth/api\";\nimport type { PolarOptions } from \"../types\";\n\nexport const onUserCreate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tconst params = options.getCustomerCreateParams\n\t\t\t\t\t? await options.getCustomerCreateParams({\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t})\n\t\t\t\t\t: {};\n\n\t\t\t\tconst { result: existingCustomers } =\n\t\t\t\t\tawait options.client.customers.list({ email: user.email });\n\t\t\t\tconst existingCustomer = existingCustomers.items[0];\n\n\t\t\t\tif (existingCustomer) {\n\t\t\t\t\tif (existingCustomer.externalId !== user.id) {\n\t\t\t\t\t\tawait options.client.customers.update({\n\t\t\t\t\t\t\tid: existingCustomer.id,\n\t\t\t\t\t\t\tcustomerUpdate: {\n\t\t\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t\t\t\t...params,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst customer = await options.client.customers.create({\n\t\t\t\t\t\t...params,\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconsole.log(customer);\n\t\t\t\t}\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\nexport const onUserUpdate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tawait options.client.customers.updateExternal({\n\t\t\t\t\texternalId: user.id,\n\t\t\t\t\tcustomerUpdateExternalID: {\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t`Polar customer update failed. Error: ${e.message}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar customer update failed. Error: ${e}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n","import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type { polar } from \"./index\";\n\nexport const polarClient = () => {\n\treturn {\n\t\tid: \"polar-client\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof polar>,\n\t} satisfies BetterAuthClientPlugin;\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError } from \"better-auth/api\";\nimport { sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\n\nexport const portal = () => (polar: Polar) => {\n\treturn {\n\t\tportal: createAuthEndpoint(\n\t\t\t\"/customer/portal\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\turl: customerSession.customerPortalUrl,\n\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar customer portal creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Customer portal creation failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tstate: createAuthEndpoint(\n\t\t\t\"/customer/state\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst state = await polar.customers.getStateExternal({\n\t\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(state);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tbenefits: createAuthEndpoint(\n\t\t\t\"/customer/benefits/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst benefits = await polar.customerPortal.benefitGrants.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(benefits);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar benefits list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Benefits list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tsubscriptions: createAuthEndpoint(\n\t\t\t\"/customer/subscriptions/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tactive: z.coerce.boolean().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (ctx.query?.referenceId) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst subscriptions = await polar.subscriptions.list({\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\treferenceId: ctx.query?.referenceId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar subscriptions list with referenceId failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Subscriptions list with referenceId failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst subscriptions = await polar.customerPortal.subscriptions.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\torders: createAuthEndpoint(\n\t\t\t\"/customer/orders/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tproductBillingType: z.enum([\"recurring\", \"one_time\"]).optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst orders = await polar.customerPortal.orders.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tproductBillingType: ctx.query?.productBillingType,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(orders);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar orders list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Orders list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface CheckoutOptions {\n\t/**\n\t * Optional list of slug -> productId mappings for easy slug checkouts\n\t */\n\tproducts?: Product[] | (() => Promise<Product[]>);\n\t/**\n\t * Checkout Success URL\n\t */\n\tsuccessUrl?: string;\n\t/**\n\t * Only allow authenticated customers to checkout\n\t */\n\tauthenticatedUsersOnly?: boolean;\n}\n\nexport const checkout =\n\t(checkoutOptions: CheckoutOptions = {}) =>\n\t(polar: Polar) => {\n\t\treturn {\n\t\t\tcheckout: createAuthEndpoint(\n\t\t\t\t\"/checkout\",\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody: z.object({\n\t\t\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]).optional(),\n\t\t\t\t\t\tslug: z.string().optional(),\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tcustomFieldData: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t\tmetadata: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tasync (ctx) => {\n\t\t\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\t\t\tlet productIds: string[] = [];\n\n\t\t\t\t\tif (ctx.body.slug) {\n\t\t\t\t\t\tconst resolvedProducts = await (typeof checkoutOptions.products ===\n\t\t\t\t\t\t\"function\"\n\t\t\t\t\t\t\t? checkoutOptions.products()\n\t\t\t\t\t\t\t: checkoutOptions.products);\n\n\t\t\t\t\t\tconst productId = resolvedProducts?.find(\n\t\t\t\t\t\t\t(product) => product.slug === ctx.body.slug,\n\t\t\t\t\t\t)?.productId;\n\n\t\t\t\t\t\tif (!productId) {\n\t\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\t\tmessage: \"Product not found\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tproductIds = [productId];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproductIds = Array.isArray(ctx.body.products)\n\t\t\t\t\t\t\t? ctx.body.products.filter((id) => id !== undefined)\n\t\t\t\t\t\t\t: [ctx.body.products].filter((id) => id !== undefined);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkoutOptions.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst checkout = await polar.checkouts.create({\n\t\t\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\t\t\tproducts: productIds,\n\t\t\t\t\t\t\tsuccessUrl: checkoutOptions.successUrl\n\t\t\t\t\t\t\t\t? new URL(\n\t\t\t\t\t\t\t\t\t\tcheckoutOptions.successUrl,\n\t\t\t\t\t\t\t\t\t\tctx.request?.url,\n\t\t\t\t\t\t\t\t\t).toString()\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tmetadata: ctx.body.referenceId\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\treferenceId: ctx.body.referenceId,\n\t\t\t\t\t\t\t\t\t\t...ctx.body.metadata,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: ctx.body.metadata,\n\t\t\t\t\t\t\tcustomFieldData: ctx.body.customFieldData,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\t\turl: checkout.url,\n\t\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar checkout creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Checkout creation failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t};\n\t};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport {\n\tAPIError,\n\tcreateAuthEndpoint,\n\tsessionMiddleware,\n} from \"better-auth/api\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface UsageOptions {\n\t/**\n\t * Products to use for topping up credits\n\t */\n\tcreditProducts?: Product[] | (() => Promise<Product[]>);\n}\n\nexport const usage = (_usageOptions?: UsageOptions) => (polar: Polar) => {\n\treturn {\n\t\tmeters: createAuthEndpoint(\n\t\t\t\"/usage/meters/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t\tquery: z.object({\n\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t}),\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\tcustomerExternalId: ctx.context.session.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst customerMeters = await polar.customerPortal.customerMeters.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(customerMeters);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar meters list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Meters list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tingestion: createAuthEndpoint(\n\t\t\t\"/usage/ingest\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: z.object({\n\t\t\t\t\tevent: z.string(),\n\t\t\t\t\tmetadata: z.record(\n\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst ingestion = await polar.events.ingest({\n\t\t\t\t\t\tevents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: ctx.body.event,\n\t\t\t\t\t\t\t\tmetadata: ctx.body.metadata,\n\t\t\t\t\t\t\t\texternalCustomerId: ctx.context.session.user.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(ingestion);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar ingestion failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Ingestion failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport type { WebhookBenefitCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitcreatedpayload.js\";\nimport type { WebhookBenefitGrantCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantcreatedpayload.js\";\nimport type { WebhookBenefitGrantRevokedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantrevokedpayload.js\";\nimport type { WebhookBenefitGrantUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantupdatedpayload.js\";\nimport type { WebhookBenefitUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitupdatedpayload.js\";\nimport type { WebhookCheckoutCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutcreatedpayload.js\";\nimport type { WebhookCheckoutUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutupdatedpayload.js\";\nimport type { WebhookCustomerCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomercreatedpayload.js\";\nimport type { WebhookCustomerDeletedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerdeletedpayload.js\";\nimport type { WebhookCustomerStateChangedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerstatechangedpayload.js\";\nimport type { WebhookCustomerUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerupdatedpayload.js\";\nimport type { WebhookOrderCreatedPayload } from \"@polar-sh/sdk/models/components/webhookordercreatedpayload.js\";\nimport type { WebhookOrderPaidPayload } from \"@polar-sh/sdk/models/components/webhookorderpaidpayload.js\";\nimport type { WebhookOrderRefundedPayload } from \"@polar-sh/sdk/models/components/webhookorderrefundedpayload.js\";\nimport type { WebhookOrganizationUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookorganizationupdatedpayload.js\";\nimport type { WebhookProductCreatedPayload } from \"@polar-sh/sdk/models/components/webhookproductcreatedpayload.js\";\nimport type { WebhookProductUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookproductupdatedpayload.js\";\nimport type { WebhookRefundCreatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundcreatedpayload.js\";\nimport type { WebhookRefundUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundupdatedpayload.js\";\nimport type { WebhookSubscriptionActivePayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionactivepayload.js\";\nimport type { WebhookSubscriptionCanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncanceledpayload.js\";\nimport type { WebhookSubscriptionCreatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncreatedpayload.js\";\nimport type { WebhookSubscriptionRevokedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionrevokedpayload.js\";\nimport type { WebhookSubscriptionUncanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionuncanceledpayload.js\";\nimport type { WebhookSubscriptionUpdatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionupdatedpayload.js\";\nimport { validateEvent } from \"@polar-sh/sdk/webhooks.js\";\nimport { APIError, createAuthEndpoint } from \"better-auth/api\";\n\nexport interface WebhooksOptions {\n\t/**\n\t * Webhook Secret\n\t */\n\tsecret: string;\n\t/**\n\t * Generic handler for all webhooks\n\t */\n\tonPayload?: (payload: ReturnType<typeof validateEvent>) => Promise<void>;\n\t/**\n\t * Webhook for checkout created\n\t */\n\tonCheckoutCreated?: (payload: WebhookCheckoutCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for checkout updated\n\t */\n\tonCheckoutUpdated?: (payload: WebhookCheckoutUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order created\n\t */\n\tonOrderCreated?: (payload: WebhookOrderCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order refunded\n\t */\n\tonOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order paid\n\t */\n\tonOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund created\n\t */\n\tonRefundCreated?: (payload: WebhookRefundCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund updated\n\t */\n\tonRefundUpdated?: (payload: WebhookRefundUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for subscription created\n\t */\n\tonSubscriptionCreated?: (\n\t\tpayload: WebhookSubscriptionCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription updated\n\t */\n\tonSubscriptionUpdated?: (\n\t\tpayload: WebhookSubscriptionUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription active\n\t */\n\tonSubscriptionActive?: (\n\t\tpayload: WebhookSubscriptionActivePayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription canceled\n\t */\n\tonSubscriptionCanceled?: (\n\t\tpayload: WebhookSubscriptionCanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription revoked\n\t */\n\tonSubscriptionRevoked?: (\n\t\tpayload: WebhookSubscriptionRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription uncanceled\n\t */\n\tonSubscriptionUncanceled?: (\n\t\tpayload: WebhookSubscriptionUncanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for product created\n\t */\n\tonProductCreated?: (payload: WebhookProductCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for product updated\n\t */\n\tonProductUpdated?: (payload: WebhookProductUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for organization updated\n\t */\n\tonOrganizationUpdated?: (\n\t\tpayload: WebhookOrganizationUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit created\n\t */\n\tonBenefitCreated?: (payload: WebhookBenefitCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit updated\n\t */\n\tonBenefitUpdated?: (payload: WebhookBenefitUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant created\n\t */\n\tonBenefitGrantCreated?: (\n\t\tpayload: WebhookBenefitGrantCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant updated\n\t */\n\tonBenefitGrantUpdated?: (\n\t\tpayload: WebhookBenefitGrantUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant revoked\n\t */\n\tonBenefitGrantRevoked?: (\n\t\tpayload: WebhookBenefitGrantRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for customer created\n\t */\n\tonCustomerCreated?: (payload: WebhookCustomerCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer updated\n\t */\n\tonCustomerUpdated?: (payload: WebhookCustomerUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer deleted\n\t */\n\tonCustomerDeleted?: (payload: WebhookCustomerDeletedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer state changed\n\t */\n\tonCustomerStateChanged?: (\n\t\tpayload: WebhookCustomerStateChangedPayload,\n\t) => Promise<void>;\n}\n\nexport const webhooks = (options: WebhooksOptions) => (_polar: Polar) => {\n\treturn {\n\t\tpolarWebhooks: createAuthEndpoint(\n\t\t\t\"/polar/webhooks\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tmetadata: {\n\t\t\t\t\tisAction: false,\n\t\t\t\t},\n\t\t\t\tcloneRequest: true,\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tconst {\n\t\t\t\t\tsecret,\n\t\t\t\t\tonPayload,\n\t\t\t\t\tonCheckoutCreated,\n\t\t\t\t\tonCheckoutUpdated,\n\t\t\t\t\tonOrderCreated,\n\t\t\t\t\tonOrderPaid,\n\t\t\t\t\tonOrderRefunded,\n\t\t\t\t\tonRefundCreated,\n\t\t\t\t\tonRefundUpdated,\n\t\t\t\t\tonSubscriptionCreated,\n\t\t\t\t\tonSubscriptionUpdated,\n\t\t\t\t\tonSubscriptionActive,\n\t\t\t\t\tonSubscriptionCanceled,\n\t\t\t\t\tonSubscriptionRevoked,\n\t\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\t\tonProductCreated,\n\t\t\t\t\tonProductUpdated,\n\t\t\t\t\tonOrganizationUpdated,\n\t\t\t\t\tonBenefitCreated,\n\t\t\t\t\tonBenefitUpdated,\n\t\t\t\t\tonBenefitGrantCreated,\n\t\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\t\tonCustomerCreated,\n\t\t\t\t\tonCustomerUpdated,\n\t\t\t\t\tonCustomerDeleted,\n\t\t\t\t\tonCustomerStateChanged,\n\t\t\t\t} = options;\n\n\t\t\t\tif (!ctx.request?.body) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t\t}\n\t\t\t\tconst buf = await ctx.request.text();\n\t\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\t\ttry {\n\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t};\n\n\t\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t\t} catch (err: unknown) {\n\t\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (onPayload) {\n\t\t\t\t\t\tonPayload(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.paid\":\n\t\t\t\t\t\t\tif (onOrderPaid) {\n\t\t\t\t\t\t\t\tonOrderPaid(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar webhook failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn ctx.json({ received: true });\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { BetterAuthPlugin } from \"better-auth\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarEndpoints, PolarOptions } from \"./types\";\n\nexport { polarClient } from \"./client\";\n\nexport * from \"./plugins/portal\";\nexport * from \"./plugins/checkout\";\nexport * from \"./plugins/usage\";\nexport * from \"./plugins/webhooks\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\tconst plugins = options.use\n\t\t.map((use) => use(options.client))\n\t\t.reduce((acc, plugin) => {\n\t\t\tObject.assign(acc, plugin);\n\t\t\treturn acc;\n\t\t}, {} as PolarEndpoints);\n\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\t...plugins,\n\t\t},\n\t\tinit() {\n\t\t\treturn {\n\t\t\t\toptions: {\n\t\t\t\t\tdatabaseHooks: {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\tcreate: {\n\t\t\t\t\t\t\t\tafter: onUserCreate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tupdate: {\n\t\t\t\t\t\t\t\tafter: onUserUpdate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t} satisfies BetterAuthPlugin;\n};\n"],"mappings":"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","names":["APIError","polar","APIError","createAuthEndpoint","z","polar","checkout","APIError","createAuthEndpoint","sessionMiddleware","z","polar","APIError","createAuthEndpoint"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/customer.ts","../src/client.ts","../src/plugins/portal.ts","../src/plugins/checkout.ts","../src/plugins/usage.ts","../src/plugins/webhooks.ts","../src/index.ts"],"sourcesContent":["import type { GenericEndpointContext, User } from \"better-auth\";\nimport { APIError } from \"better-auth/api\";\nimport type { PolarOptions } from \"../types\";\n\nexport const onUserCreate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tconst params = options.getCustomerCreateParams\n\t\t\t\t\t? await options.getCustomerCreateParams({\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t})\n\t\t\t\t\t: {};\n\n\t\t\t\tconst { result: existingCustomers } =\n\t\t\t\t\tawait options.client.customers.list({ email: user.email });\n\t\t\t\tconst existingCustomer = existingCustomers.items[0];\n\n\t\t\t\tif (existingCustomer) {\n\t\t\t\t\tif (existingCustomer.externalId !== user.id) {\n\t\t\t\t\t\tawait options.client.customers.update({\n\t\t\t\t\t\t\tid: existingCustomer.id,\n\t\t\t\t\t\t\tcustomerUpdate: {\n\t\t\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t\t\t\t...params,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst customer = await options.client.customers.create({\n\t\t\t\t\t\t...params,\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t\texternalId: user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconsole.log(customer);\n\t\t\t\t}\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\tmessage: `Polar customer creation failed. Error: ${e}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\nexport const onUserUpdate =\n\t(options: PolarOptions) =>\n\tasync (user: User, ctx?: GenericEndpointContext) => {\n\t\tif (ctx && options.createCustomerOnSignUp) {\n\t\t\ttry {\n\t\t\t\tawait options.client.customers.updateExternal({\n\t\t\t\t\texternalId: user.id,\n\t\t\t\t\tcustomerUpdateExternalID: {\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e: unknown) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t`Polar customer update failed. Error: ${e.message}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar customer update failed. Error: ${e}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n","import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type { polar } from \"./index\";\n\nexport const polarClient = () => {\n\treturn {\n\t\tid: \"polar-client\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof polar>,\n\t} satisfies BetterAuthClientPlugin;\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError } from \"better-auth/api\";\nimport { sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\n\nexport const portal = () => (polar: Polar) => {\n\treturn {\n\t\tportal: createAuthEndpoint(\n\t\t\t\"/customer/portal\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\turl: customerSession.customerPortalUrl,\n\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar customer portal creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Customer portal creation failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tstate: createAuthEndpoint(\n\t\t\t\"/customer/state\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst state = await polar.customers.getStateExternal({\n\t\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(state);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tbenefits: createAuthEndpoint(\n\t\t\t\"/customer/benefits/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst benefits = await polar.customerPortal.benefitGrants.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(benefits);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar benefits list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Benefits list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tsubscriptions: createAuthEndpoint(\n\t\t\t\"/customer/subscriptions/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tactive: z.coerce.boolean().optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (ctx.query?.referenceId) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst subscriptions = await polar.subscriptions.list({\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\treferenceId: ctx.query?.referenceId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar subscriptions list with referenceId failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Subscriptions list with referenceId failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst subscriptions = await polar.customerPortal.subscriptions.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tactive: ctx.query?.active,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(subscriptions);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar subscriptions list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar subscriptions list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\torders: createAuthEndpoint(\n\t\t\t\"/customer/orders/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t\t\tproductBillingType: z.enum([\"recurring\", \"one_time\"]).optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session?.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst orders = await polar.customerPortal.orders.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t\tproductBillingType: ctx.query?.productBillingType,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(orders);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar orders list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Orders list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface CheckoutOptions {\n\t/**\n\t * Optional list of slug -> productId mappings for easy slug checkouts\n\t */\n\tproducts?: Product[] | (() => Promise<Product[]>);\n\t/**\n\t * Checkout Success URL\n\t */\n\tsuccessUrl?: string;\n\t/**\n\t * Only allow authenticated customers to checkout\n\t */\n\tauthenticatedUsersOnly?: boolean;\n}\n\nexport const checkout =\n\t(checkoutOptions: CheckoutOptions = {}) =>\n\t(polar: Polar) => {\n\t\treturn {\n\t\t\tcheckout: createAuthEndpoint(\n\t\t\t\t\"/checkout\",\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody: z.object({\n\t\t\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]).optional(),\n\t\t\t\t\t\tslug: z.string().optional(),\n\t\t\t\t\t\treferenceId: z.string().optional(),\n\t\t\t\t\t\tcustomFieldData: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t\tmetadata: z\n\t\t\t\t\t\t\t.record(\n\t\t\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.optional(),\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tasync (ctx) => {\n\t\t\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\t\t\tlet productIds: string[] = [];\n\n\t\t\t\t\tif (ctx.body.slug) {\n\t\t\t\t\t\tconst resolvedProducts = await (typeof checkoutOptions.products ===\n\t\t\t\t\t\t\"function\"\n\t\t\t\t\t\t\t? checkoutOptions.products()\n\t\t\t\t\t\t\t: checkoutOptions.products);\n\n\t\t\t\t\t\tconst productId = resolvedProducts?.find(\n\t\t\t\t\t\t\t(product) => product.slug === ctx.body.slug,\n\t\t\t\t\t\t)?.productId;\n\n\t\t\t\t\t\tif (!productId) {\n\t\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\t\tmessage: \"Product not found\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tproductIds = [productId];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproductIds = Array.isArray(ctx.body.products)\n\t\t\t\t\t\t\t? ctx.body.products.filter((id) => id !== undefined)\n\t\t\t\t\t\t\t: [ctx.body.products].filter((id) => id !== undefined);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkoutOptions.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst checkout = await polar.checkouts.create({\n\t\t\t\t\t\t\texternalCustomerId: session?.user.id,\n\t\t\t\t\t\t\tproducts: productIds,\n\t\t\t\t\t\t\tsuccessUrl: checkoutOptions.successUrl\n\t\t\t\t\t\t\t\t? new URL(\n\t\t\t\t\t\t\t\t\t\tcheckoutOptions.successUrl,\n\t\t\t\t\t\t\t\t\t\tctx.request?.url,\n\t\t\t\t\t\t\t\t\t).toString()\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tmetadata: ctx.body.referenceId\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\treferenceId: ctx.body.referenceId,\n\t\t\t\t\t\t\t\t\t\t...ctx.body.metadata,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: ctx.body.metadata,\n\t\t\t\t\t\t\tcustomFieldData: ctx.body.customFieldData,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\t\turl: checkout.url,\n\t\t\t\t\t\t\tredirect: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t\t`Polar checkout creation failed. Error: ${e.message}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Checkout creation failed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t};\n\t};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport {\n\tAPIError,\n\tcreateAuthEndpoint,\n\tsessionMiddleware,\n} from \"better-auth/api\";\nimport { z } from \"zod\";\nimport type { Product } from \"../types\";\n\nexport interface UsageOptions {\n\t/**\n\t * Products to use for topping up credits\n\t */\n\tcreditProducts?: Product[] | (() => Promise<Product[]>);\n}\n\nexport const usage = (_usageOptions?: UsageOptions) => (polar: Polar) => {\n\treturn {\n\t\tmeters: createAuthEndpoint(\n\t\t\t\"/usage/meters/list\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t\tquery: z.object({\n\t\t\t\t\tpage: z.coerce.number().optional(),\n\t\t\t\t\tlimit: z.coerce.number().optional(),\n\t\t\t\t}),\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst customerSession = await polar.customerSessions.create({\n\t\t\t\t\t\texternalCustomerId: ctx.context.session.user.id,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst customerMeters = await polar.customerPortal.customerMeters.list(\n\t\t\t\t\t\t{ customerSession: customerSession.token },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpage: ctx.query?.page,\n\t\t\t\t\t\t\tlimit: ctx.query?.limit,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ctx.json(customerMeters);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar meters list failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Meters list failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t\tingestion: createAuthEndpoint(\n\t\t\t\"/usage/ingest\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: z.object({\n\t\t\t\t\tevent: z.string(),\n\t\t\t\t\tmetadata: z.record(\n\t\t\t\t\t\tz.string(),\n\t\t\t\t\t\tz.union([z.string(), z.number(), z.boolean()]),\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\tuse: [sessionMiddleware],\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst ingestion = await polar.events.ingest({\n\t\t\t\t\t\tevents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: ctx.body.event,\n\t\t\t\t\t\t\t\tmetadata: ctx.body.metadata,\n\t\t\t\t\t\t\t\texternalCustomerId: ctx.context.session.user.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\n\t\t\t\t\treturn ctx.json(ingestion);\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar ingestion failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Ingestion failed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { Polar } from \"@polar-sh/sdk\";\nimport type { WebhookBenefitCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitcreatedpayload.js\";\nimport type { WebhookBenefitGrantCreatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantcreatedpayload.js\";\nimport type { WebhookBenefitGrantRevokedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantrevokedpayload.js\";\nimport type { WebhookBenefitGrantUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitgrantupdatedpayload.js\";\nimport type { WebhookBenefitUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookbenefitupdatedpayload.js\";\nimport type { WebhookCheckoutCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutcreatedpayload.js\";\nimport type { WebhookCheckoutUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcheckoutupdatedpayload.js\";\nimport type { WebhookCustomerCreatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomercreatedpayload.js\";\nimport type { WebhookCustomerDeletedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerdeletedpayload.js\";\nimport type { WebhookCustomerStateChangedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerstatechangedpayload.js\";\nimport type { WebhookCustomerUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookcustomerupdatedpayload.js\";\nimport type { WebhookOrderCreatedPayload } from \"@polar-sh/sdk/models/components/webhookordercreatedpayload.js\";\nimport type { WebhookOrderPaidPayload } from \"@polar-sh/sdk/models/components/webhookorderpaidpayload.js\";\nimport type { WebhookOrderRefundedPayload } from \"@polar-sh/sdk/models/components/webhookorderrefundedpayload.js\";\nimport type { WebhookOrganizationUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookorganizationupdatedpayload.js\";\nimport type { WebhookProductCreatedPayload } from \"@polar-sh/sdk/models/components/webhookproductcreatedpayload.js\";\nimport type { WebhookProductUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookproductupdatedpayload.js\";\nimport type { WebhookRefundCreatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundcreatedpayload.js\";\nimport type { WebhookRefundUpdatedPayload } from \"@polar-sh/sdk/models/components/webhookrefundupdatedpayload.js\";\nimport type { WebhookSubscriptionActivePayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionactivepayload.js\";\nimport type { WebhookSubscriptionCanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncanceledpayload.js\";\nimport type { WebhookSubscriptionCreatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptioncreatedpayload.js\";\nimport type { WebhookSubscriptionRevokedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionrevokedpayload.js\";\nimport type { WebhookSubscriptionUncanceledPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionuncanceledpayload.js\";\nimport type { WebhookSubscriptionUpdatedPayload } from \"@polar-sh/sdk/models/components/webhooksubscriptionupdatedpayload.js\";\nimport { validateEvent } from \"@polar-sh/sdk/webhooks.js\";\nimport { APIError, createAuthEndpoint } from \"better-auth/api\";\n\nexport interface WebhooksOptions {\n\t/**\n\t * Webhook Secret\n\t */\n\tsecret: string;\n\t/**\n\t * Generic handler for all webhooks\n\t */\n\tonPayload?: (payload: ReturnType<typeof validateEvent>) => Promise<void>;\n\t/**\n\t * Webhook for checkout created\n\t */\n\tonCheckoutCreated?: (payload: WebhookCheckoutCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for checkout updated\n\t */\n\tonCheckoutUpdated?: (payload: WebhookCheckoutUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order created\n\t */\n\tonOrderCreated?: (payload: WebhookOrderCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order refunded\n\t */\n\tonOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>;\n\t/**\n\t * Webhook for order paid\n\t */\n\tonOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund created\n\t */\n\tonRefundCreated?: (payload: WebhookRefundCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for refund updated\n\t */\n\tonRefundUpdated?: (payload: WebhookRefundUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for subscription created\n\t */\n\tonSubscriptionCreated?: (\n\t\tpayload: WebhookSubscriptionCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription updated\n\t */\n\tonSubscriptionUpdated?: (\n\t\tpayload: WebhookSubscriptionUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription active\n\t */\n\tonSubscriptionActive?: (\n\t\tpayload: WebhookSubscriptionActivePayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription canceled\n\t */\n\tonSubscriptionCanceled?: (\n\t\tpayload: WebhookSubscriptionCanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription revoked\n\t */\n\tonSubscriptionRevoked?: (\n\t\tpayload: WebhookSubscriptionRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for subscription uncanceled\n\t */\n\tonSubscriptionUncanceled?: (\n\t\tpayload: WebhookSubscriptionUncanceledPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for product created\n\t */\n\tonProductCreated?: (payload: WebhookProductCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for product updated\n\t */\n\tonProductUpdated?: (payload: WebhookProductUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for organization updated\n\t */\n\tonOrganizationUpdated?: (\n\t\tpayload: WebhookOrganizationUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit created\n\t */\n\tonBenefitCreated?: (payload: WebhookBenefitCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit updated\n\t */\n\tonBenefitUpdated?: (payload: WebhookBenefitUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant created\n\t */\n\tonBenefitGrantCreated?: (\n\t\tpayload: WebhookBenefitGrantCreatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant updated\n\t */\n\tonBenefitGrantUpdated?: (\n\t\tpayload: WebhookBenefitGrantUpdatedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for benefit grant revoked\n\t */\n\tonBenefitGrantRevoked?: (\n\t\tpayload: WebhookBenefitGrantRevokedPayload,\n\t) => Promise<void>;\n\t/**\n\t * Webhook for customer created\n\t */\n\tonCustomerCreated?: (payload: WebhookCustomerCreatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer updated\n\t */\n\tonCustomerUpdated?: (payload: WebhookCustomerUpdatedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer deleted\n\t */\n\tonCustomerDeleted?: (payload: WebhookCustomerDeletedPayload) => Promise<void>;\n\t/**\n\t * Webhook for customer state changed\n\t */\n\tonCustomerStateChanged?: (\n\t\tpayload: WebhookCustomerStateChangedPayload,\n\t) => Promise<void>;\n}\n\nexport const webhooks = (options: WebhooksOptions) => (_polar: Polar) => {\n\treturn {\n\t\tpolarWebhooks: createAuthEndpoint(\n\t\t\t\"/polar/webhooks\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tmetadata: {\n\t\t\t\t\tisAction: false,\n\t\t\t\t},\n\t\t\t\tcloneRequest: true,\n\t\t\t},\n\t\t\tasync (ctx) => {\n\t\t\t\tconst {\n\t\t\t\t\tsecret,\n\t\t\t\t\tonPayload,\n\t\t\t\t\tonCheckoutCreated,\n\t\t\t\t\tonCheckoutUpdated,\n\t\t\t\t\tonOrderCreated,\n\t\t\t\t\tonOrderPaid,\n\t\t\t\t\tonOrderRefunded,\n\t\t\t\t\tonRefundCreated,\n\t\t\t\t\tonRefundUpdated,\n\t\t\t\t\tonSubscriptionCreated,\n\t\t\t\t\tonSubscriptionUpdated,\n\t\t\t\t\tonSubscriptionActive,\n\t\t\t\t\tonSubscriptionCanceled,\n\t\t\t\t\tonSubscriptionRevoked,\n\t\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\t\tonProductCreated,\n\t\t\t\t\tonProductUpdated,\n\t\t\t\t\tonOrganizationUpdated,\n\t\t\t\t\tonBenefitCreated,\n\t\t\t\t\tonBenefitUpdated,\n\t\t\t\t\tonBenefitGrantCreated,\n\t\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\t\tonCustomerCreated,\n\t\t\t\t\tonCustomerUpdated,\n\t\t\t\t\tonCustomerDeleted,\n\t\t\t\t\tonCustomerStateChanged,\n\t\t\t\t} = options;\n\n\t\t\t\tif (!ctx.request?.body) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t\t}\n\t\t\t\tconst buf = await ctx.request.text();\n\t\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\t\ttry {\n\t\t\t\t\tif (!secret) {\n\t\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t\t) as string,\n\t\t\t\t\t};\n\n\t\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t\t} catch (err: unknown) {\n\t\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (onPayload) {\n\t\t\t\t\t\tonPayload(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.paid\":\n\t\t\t\t\t\t\tif (onOrderPaid) {\n\t\t\t\t\t\t\t\tonOrderPaid(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\t\t`Polar webhook failed. Error: ${e.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn ctx.json({ received: true });\n\t\t\t},\n\t\t),\n\t};\n};\n","import type { BetterAuthPlugin } from \"better-auth\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarEndpoints, PolarOptions } from \"./types\";\n\nexport { polarClient } from \"./client\";\n\nexport * from \"./plugins/portal\";\nexport * from \"./plugins/checkout\";\nexport * from \"./plugins/usage\";\nexport * from \"./plugins/webhooks\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\tconst plugins = options.use\n\t\t.map((use) => use(options.client))\n\t\t.reduce((acc, plugin) => {\n\t\t\tObject.assign(acc, plugin);\n\t\t\treturn acc;\n\t\t}, {} as PolarEndpoints);\n\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\t...plugins,\n\t\t},\n\t\tinit() {\n\t\t\treturn {\n\t\t\t\toptions: {\n\t\t\t\t\tdatabaseHooks: {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\tcreate: {\n\t\t\t\t\t\t\t\tafter: onUserCreate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tupdate: {\n\t\t\t\t\t\t\t\tafter: onUserUpdate(options),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t} satisfies BetterAuthPlugin;\n};\n"],"mappings":";AACA,SAAS,gBAAgB;AAGlB,IAAM,eACZ,CAAC,YACD,OAAO,MAAY,QAAiC;AACnD,MAAI,OAAO,QAAQ,wBAAwB;AAC1C,QAAI;AACH,YAAM,SAAS,QAAQ,0BACpB,MAAM,QAAQ,wBAAwB;AAAA,QACtC;AAAA,MACD,CAAC,IACA,CAAC;AAEJ,YAAM,EAAE,QAAQ,kBAAkB,IACjC,MAAM,QAAQ,OAAO,UAAU,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;AAC1D,YAAM,mBAAmB,kBAAkB,MAAM,CAAC;AAElD,UAAI,kBAAkB;AACrB,YAAI,iBAAiB,eAAe,KAAK,IAAI;AAC5C,gBAAM,QAAQ,OAAO,UAAU,OAAO;AAAA,YACrC,IAAI,iBAAiB;AAAA,YACrB,gBAAgB;AAAA,cACf,YAAY,KAAK;AAAA,cACjB,GAAG;AAAA,YACJ;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD,OAAO;AACN,cAAM,WAAW,MAAM,QAAQ,OAAO,UAAU,OAAO;AAAA,UACtD,GAAG;AAAA,UACH,OAAO,KAAK;AAAA,UACZ,MAAM,KAAK;AAAA,UACX,YAAY,KAAK;AAAA,QAClB,CAAC;AAED,gBAAQ,IAAI,QAAQ;AAAA,MACrB;AAAA,IACD,SAAS,GAAY;AACpB,UAAI,aAAa,OAAO;AACvB,cAAM,IAAI,SAAS,yBAAyB;AAAA,UAC3C,SAAS,0CAA0C,EAAE,OAAO;AAAA,QAC7D,CAAC;AAAA,MACF;AAEA,YAAM,IAAI,SAAS,yBAAyB;AAAA,QAC3C,SAAS,0CAA0C,CAAC;AAAA,MACrD,CAAC;AAAA,IACF;AAAA,EACD;AACD;AAEM,IAAM,eACZ,CAAC,YACD,OAAO,MAAY,QAAiC;AACnD,MAAI,OAAO,QAAQ,wBAAwB;AAC1C,QAAI;AACH,YAAM,QAAQ,OAAO,UAAU,eAAe;AAAA,QAC7C,YAAY,KAAK;AAAA,QACjB,0BAA0B;AAAA,UACzB,OAAO,KAAK;AAAA,UACZ,MAAM,KAAK;AAAA,QACZ;AAAA,MACD,CAAC;AAAA,IACF,SAAS,GAAY;AACpB,UAAI,aAAa,OAAO;AACvB,YAAI,QAAQ,OAAO;AAAA,UAClB,wCAAwC,EAAE,OAAO;AAAA,QAClD;AAAA,MACD,OAAO;AACN,YAAI,QAAQ,OAAO,MAAM,wCAAwC,CAAC,EAAE;AAAA,MACrE;AAAA,IACD;AAAA,EACD;AACD;;;ACxEM,IAAM,cAAc,MAAM;AAChC,SAAO;AAAA,IACN,IAAI;AAAA,IACJ,oBAAoB,CAAC;AAAA,EACtB;AACD;;;ACPA,SAAS,YAAAA,iBAAgB;AACzB,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AACnC,SAAS,SAAS;AAEX,IAAM,SAAS,MAAM,CAACC,WAAiB;AAC7C,SAAO;AAAA,IACN,QAAQ;AAAA,MACP;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,KAAK,CAAC,iBAAiB;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ;AACd,YAAI,CAAC,IAAI,QAAQ,SAAS,KAAK,IAAI;AAClC,gBAAM,IAAID,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI;AACH,gBAAM,kBAAkB,MAAMC,OAAM,iBAAiB,OAAO;AAAA,YAC3D,oBAAoB,IAAI,QAAQ,SAAS,KAAK;AAAA,UAC/C,CAAC;AAED,iBAAO,IAAI,KAAK;AAAA,YACf,KAAK,gBAAgB;AAAA,YACrB,UAAU;AAAA,UACX,CAAC;AAAA,QACF,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,iDAAiD,EAAE,OAAO;AAAA,YAC3D;AAAA,UACD;AAEA,gBAAM,IAAID,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,OAAO;AAAA,MACN;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,KAAK,CAAC,iBAAiB;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ;AACd,YAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,IAAI;AACjC,gBAAM,IAAIA,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI;AACH,gBAAM,QAAQ,MAAMC,OAAM,UAAU,iBAAiB;AAAA,YACpD,YAAY,IAAI,QAAQ,SAAS,KAAK;AAAA,UACvC,CAAC;AAED,iBAAO,IAAI,KAAK,KAAK;AAAA,QACtB,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,2CAA2C,EAAE,OAAO;AAAA,YACrD;AAAA,UACD;AAEA,gBAAM,IAAID,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,UAAU;AAAA,MACT;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,OAAO,EACL,OAAO;AAAA,UACP,MAAM,EAAE,OAAO,OAAO,EAAE,SAAS;AAAA,UACjC,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS;AAAA,QACnC,CAAC,EACA,SAAS;AAAA,QACX,KAAK,CAAC,iBAAiB;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ;AACd,YAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,IAAI;AACjC,gBAAM,IAAIA,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI;AACH,gBAAM,kBAAkB,MAAMC,OAAM,iBAAiB,OAAO;AAAA,YAC3D,oBAAoB,IAAI,QAAQ,SAAS,KAAK;AAAA,UAC/C,CAAC;AAED,gBAAM,WAAW,MAAMA,OAAM,eAAe,cAAc;AAAA,YACzD,EAAE,iBAAiB,gBAAgB,MAAM;AAAA,YACzC;AAAA,cACC,MAAM,IAAI,OAAO;AAAA,cACjB,OAAO,IAAI,OAAO;AAAA,YACnB;AAAA,UACD;AAEA,iBAAO,IAAI,KAAK,QAAQ;AAAA,QACzB,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,sCAAsC,EAAE,OAAO;AAAA,YAChD;AAAA,UACD;AAEA,gBAAM,IAAID,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,eAAe;AAAA,MACd;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,OAAO,EACL,OAAO;AAAA,UACP,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,UACjC,MAAM,EAAE,OAAO,OAAO,EAAE,SAAS;AAAA,UACjC,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS;AAAA,UAClC,QAAQ,EAAE,OAAO,QAAQ,EAAE,SAAS;AAAA,QACrC,CAAC,EACA,SAAS;AAAA,QACX,KAAK,CAAC,iBAAiB;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ;AACd,YAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,IAAI;AACjC,gBAAM,IAAIA,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI,IAAI,OAAO,aAAa;AAC3B,cAAI;AACH,kBAAM,gBAAgB,MAAMC,OAAM,cAAc,KAAK;AAAA,cACpD,MAAM,IAAI,OAAO;AAAA,cACjB,OAAO,IAAI,OAAO;AAAA,cAClB,QAAQ,IAAI,OAAO;AAAA,cACnB,UAAU;AAAA,gBACT,aAAa,IAAI,OAAO;AAAA,cACzB;AAAA,YACD,CAAC;AAED,mBAAO,IAAI,KAAK,aAAa;AAAA,UAC9B,SAAS,GAAY;AACpB,oBAAQ,IAAI,CAAC;AACb,gBAAI,aAAa,OAAO;AACvB,kBAAI,QAAQ,OAAO;AAAA,gBAClB,4DAA4D,EAAE,OAAO;AAAA,cACtE;AAAA,YACD;AAEA,kBAAM,IAAID,UAAS,yBAAyB;AAAA,cAC3C,SAAS;AAAA,YACV,CAAC;AAAA,UACF;AAAA,QACD;AAEA,YAAI;AACH,gBAAM,kBAAkB,MAAMC,OAAM,iBAAiB,OAAO;AAAA,YAC3D,oBAAoB,IAAI,QAAQ,SAAS,KAAK;AAAA,UAC/C,CAAC;AAED,gBAAM,gBAAgB,MAAMA,OAAM,eAAe,cAAc;AAAA,YAC9D,EAAE,iBAAiB,gBAAgB,MAAM;AAAA,YACzC;AAAA,cACC,MAAM,IAAI,OAAO;AAAA,cACjB,OAAO,IAAI,OAAO;AAAA,cAClB,QAAQ,IAAI,OAAO;AAAA,YACpB;AAAA,UACD;AAEA,iBAAO,IAAI,KAAK,aAAa;AAAA,QAC9B,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,2CAA2C,EAAE,OAAO;AAAA,YACrD;AAAA,UACD;AAEA,gBAAM,IAAID,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,QAAQ;AAAA,MACP;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,OAAO,EACL,OAAO;AAAA,UACP,MAAM,EAAE,OAAO,OAAO,EAAE,SAAS;AAAA,UACjC,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS;AAAA,UAClC,oBAAoB,EAAE,KAAK,CAAC,aAAa,UAAU,CAAC,EAAE,SAAS;AAAA,QAChE,CAAC,EACA,SAAS;AAAA,QACX,KAAK,CAAC,iBAAiB;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ;AACd,YAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,IAAI;AACjC,gBAAM,IAAIA,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI;AACH,gBAAM,kBAAkB,MAAMC,OAAM,iBAAiB,OAAO;AAAA,YAC3D,oBAAoB,IAAI,QAAQ,SAAS,KAAK;AAAA,UAC/C,CAAC;AAED,gBAAM,SAAS,MAAMA,OAAM,eAAe,OAAO;AAAA,YAChD,EAAE,iBAAiB,gBAAgB,MAAM;AAAA,YACzC;AAAA,cACC,MAAM,IAAI,OAAO;AAAA,cACjB,OAAO,IAAI,OAAO;AAAA,cAClB,oBAAoB,IAAI,OAAO;AAAA,YAChC;AAAA,UACD;AAEA,iBAAO,IAAI,KAAK,MAAM;AAAA,QACvB,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,oCAAoC,EAAE,OAAO;AAAA,YAC9C;AAAA,UACD;AAEA,gBAAM,IAAID,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;;;ACpPA,SAAS,YAAAE,WAAU,yBAAyB;AAC5C,SAAS,sBAAAC,2BAA0B;AACnC,SAAS,KAAAC,UAAS;AAkBX,IAAM,WACZ,CAAC,kBAAmC,CAAC,MACrC,CAACC,WAAiB;AACjB,SAAO;AAAA,IACN,UAAUF;AAAA,MACT;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,MAAMC,GAAE,OAAO;AAAA,UACd,UAAUA,GAAE,MAAM,CAACA,GAAE,MAAMA,GAAE,OAAO,CAAC,GAAGA,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,UAC9D,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,UAC1B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,UACjC,iBAAiBA,GACf;AAAA,YACAA,GAAE,OAAO;AAAA,YACTA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC;AAAA,UAC9C,EACC,SAAS;AAAA,UACX,UAAUA,GACR;AAAA,YACAA,GAAE,OAAO;AAAA,YACTA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC;AAAA,UAC9C,EACC,SAAS;AAAA,QACZ,CAAC;AAAA,MACF;AAAA,MACA,OAAO,QAAQ;AACd,cAAM,UAAU,MAAM,kBAAkB,GAAG;AAE3C,YAAI,aAAuB,CAAC;AAE5B,YAAI,IAAI,KAAK,MAAM;AAClB,gBAAM,mBAAmB,OAAO,OAAO,gBAAgB,aACvD,aACG,gBAAgB,SAAS,IACzB,gBAAgB;AAEnB,gBAAM,YAAY,kBAAkB;AAAA,YACnC,CAAC,YAAY,QAAQ,SAAS,IAAI,KAAK;AAAA,UACxC,GAAG;AAEH,cAAI,CAAC,WAAW;AACf,kBAAM,IAAIF,UAAS,eAAe;AAAA,cACjC,SAAS;AAAA,YACV,CAAC;AAAA,UACF;AAEA,uBAAa,CAAC,SAAS;AAAA,QACxB,OAAO;AACN,uBAAa,MAAM,QAAQ,IAAI,KAAK,QAAQ,IACzC,IAAI,KAAK,SAAS,OAAO,CAAC,OAAO,OAAO,MAAS,IACjD,CAAC,IAAI,KAAK,QAAQ,EAAE,OAAO,CAAC,OAAO,OAAO,MAAS;AAAA,QACvD;AAEA,YAAI,gBAAgB,0BAA0B,CAAC,SAAS,KAAK,IAAI;AAChE,gBAAM,IAAIA,UAAS,gBAAgB;AAAA,YAClC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI;AACH,gBAAMI,YAAW,MAAMD,OAAM,UAAU,OAAO;AAAA,YAC7C,oBAAoB,SAAS,KAAK;AAAA,YAClC,UAAU;AAAA,YACV,YAAY,gBAAgB,aACzB,IAAI;AAAA,cACJ,gBAAgB;AAAA,cAChB,IAAI,SAAS;AAAA,YACd,EAAE,SAAS,IACV;AAAA,YACH,UAAU,IAAI,KAAK,cAChB;AAAA,cACA,aAAa,IAAI,KAAK;AAAA,cACtB,GAAG,IAAI,KAAK;AAAA,YACb,IACC,IAAI,KAAK;AAAA,YACZ,iBAAiB,IAAI,KAAK;AAAA,UAC3B,CAAC;AAED,iBAAO,IAAI,KAAK;AAAA,YACf,KAAKC,UAAS;AAAA,YACd,UAAU;AAAA,UACX,CAAC;AAAA,QACF,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,0CAA0C,EAAE,OAAO;AAAA,YACpD;AAAA,UACD;AAEA,gBAAM,IAAIJ,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;;;ACrHD;AAAA,EACC,YAAAK;AAAA,EACA,sBAAAC;AAAA,EACA,qBAAAC;AAAA,OACM;AACP,SAAS,KAAAC,UAAS;AAUX,IAAM,QAAQ,CAAC,kBAAiC,CAACC,WAAiB;AACxE,SAAO;AAAA,IACN,QAAQH;AAAA,MACP;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,KAAK,CAACC,kBAAiB;AAAA,QACvB,OAAOC,GAAE,OAAO;AAAA,UACf,MAAMA,GAAE,OAAO,OAAO,EAAE,SAAS;AAAA,UACjC,OAAOA,GAAE,OAAO,OAAO,EAAE,SAAS;AAAA,QACnC,CAAC;AAAA,MACF;AAAA,MACA,OAAO,QAAQ;AACd,YAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,IAAI;AACjC,gBAAM,IAAIH,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI;AACH,gBAAM,kBAAkB,MAAMI,OAAM,iBAAiB,OAAO;AAAA,YAC3D,oBAAoB,IAAI,QAAQ,QAAQ,KAAK;AAAA,UAC9C,CAAC;AAED,gBAAM,iBAAiB,MAAMA,OAAM,eAAe,eAAe;AAAA,YAChE,EAAE,iBAAiB,gBAAgB,MAAM;AAAA,YACzC;AAAA,cACC,MAAM,IAAI,OAAO;AAAA,cACjB,OAAO,IAAI,OAAO;AAAA,YACnB;AAAA,UACD;AAEA,iBAAO,IAAI,KAAK,cAAc;AAAA,QAC/B,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,oCAAoC,EAAE,OAAO;AAAA,YAC9C;AAAA,UACD;AAEA,gBAAM,IAAIJ,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,WAAWC;AAAA,MACV;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,MAAME,GAAE,OAAO;AAAA,UACd,OAAOA,GAAE,OAAO;AAAA,UAChB,UAAUA,GAAE;AAAA,YACXA,GAAE,OAAO;AAAA,YACTA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC;AAAA,UAC9C;AAAA,QACD,CAAC;AAAA,QACD,KAAK,CAACD,kBAAiB;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ;AACd,YAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,IAAI;AACjC,gBAAM,IAAIF,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI;AACH,gBAAM,YAAY,MAAMI,OAAM,OAAO,OAAO;AAAA,YAC3C,QAAQ;AAAA,cACP;AAAA,gBACC,MAAM,IAAI,KAAK;AAAA,gBACf,UAAU,IAAI,KAAK;AAAA,gBACnB,oBAAoB,IAAI,QAAQ,QAAQ,KAAK;AAAA,cAC9C;AAAA,YACD;AAAA,UACD,CAAC;AAED,iBAAO,IAAI,KAAK,SAAS;AAAA,QAC1B,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,kCAAkC,EAAE,OAAO;AAAA,YAC5C;AAAA,UACD;AAEA,gBAAM,IAAIJ,UAAS,yBAAyB;AAAA,YAC3C,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;;;AClFA,SAAS,qBAAqB;AAC9B,SAAS,YAAAK,WAAU,sBAAAC,2BAA0B;AAuItC,IAAM,WAAW,CAAC,YAA6B,CAAC,WAAkB;AACxE,SAAO;AAAA,IACN,eAAeA;AAAA,MACd;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR,UAAU;AAAA,UACT,UAAU;AAAA,QACX;AAAA,QACA,cAAc;AAAA,MACf;AAAA,MACA,OAAO,QAAQ;AACd,cAAM;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,IAAI;AAEJ,YAAI,CAAC,IAAI,SAAS,MAAM;AACvB,gBAAM,IAAID,UAAS,uBAAuB;AAAA,QAC3C;AACA,cAAM,MAAM,MAAM,IAAI,QAAQ,KAAK;AACnC,YAAI;AACJ,YAAI;AACH,cAAI,CAAC,QAAQ;AACZ,kBAAM,IAAIA,UAAS,yBAAyB;AAAA,cAC3C,SAAS;AAAA,YACV,CAAC;AAAA,UACF;AAEA,gBAAM,UAAU;AAAA,YACf,cAAc,IAAI,QAAQ,QAAQ,IAAI,YAAY;AAAA,YAClD,qBAAqB,IAAI,QAAQ,QAAQ;AAAA,cACxC;AAAA,YACD;AAAA,YACA,qBAAqB,IAAI,QAAQ,QAAQ;AAAA,cACxC;AAAA,YACD;AAAA,UACD;AAEA,kBAAQ,cAAc,KAAK,SAAS,MAAM;AAAA,QAC3C,SAAS,KAAc;AACtB,cAAI,eAAe,OAAO;AACzB,gBAAI,QAAQ,OAAO,MAAM,GAAG,IAAI,OAAO,EAAE;AACzC,kBAAM,IAAIA,UAAS,eAAe;AAAA,cACjC,SAAS,kBAAkB,IAAI,OAAO;AAAA,YACvC,CAAC;AAAA,UACF;AACA,gBAAM,IAAIA,UAAS,eAAe;AAAA,YACjC,SAAS,kBAAkB,GAAG;AAAA,UAC/B,CAAC;AAAA,QACF;AACA,YAAI;AACH,cAAI,WAAW;AACd,sBAAU,KAAK;AAAA,UAChB;AAEA,kBAAQ,MAAM,MAAM;AAAA,YACnB,KAAK;AACJ,kBAAI,mBAAmB;AACtB,kCAAkB,KAAK;AAAA,cACxB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,mBAAmB;AACtB,kCAAkB,KAAK;AAAA,cACxB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,gBAAgB;AACnB,+BAAe,KAAK;AAAA,cACrB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,aAAa;AAChB,4BAAY,KAAK;AAAA,cAClB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,uBAAuB;AAC1B,sCAAsB,KAAK;AAAA,cAC5B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,uBAAuB;AAC1B,sCAAsB,KAAK;AAAA,cAC5B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,sBAAsB;AACzB,qCAAqB,KAAK;AAAA,cAC3B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,wBAAwB;AAC3B,uCAAuB,KAAK;AAAA,cAC7B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,0BAA0B;AAC7B,yCAAyB,KAAK;AAAA,cAC/B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,uBAAuB;AAC1B,sCAAsB,KAAK;AAAA,cAC5B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,kBAAkB;AACrB,iCAAiB,KAAK;AAAA,cACvB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,kBAAkB;AACrB,iCAAiB,KAAK;AAAA,cACvB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,uBAAuB;AAC1B,sCAAsB,KAAK;AAAA,cAC5B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,kBAAkB;AACrB,iCAAiB,KAAK;AAAA,cACvB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,kBAAkB;AACrB,iCAAiB,KAAK;AAAA,cACvB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,uBAAuB;AAC1B,sCAAsB,KAAK;AAAA,cAC5B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,uBAAuB;AAC1B,sCAAsB,KAAK;AAAA,cAC5B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,uBAAuB;AAC1B,sCAAsB,KAAK;AAAA,cAC5B;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,iBAAiB;AACpB,gCAAgB,KAAK;AAAA,cACtB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,iBAAiB;AACpB,gCAAgB,KAAK;AAAA,cACtB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,iBAAiB;AACpB,gCAAgB,KAAK;AAAA,cACtB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,mBAAmB;AACtB,kCAAkB,KAAK;AAAA,cACxB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,mBAAmB;AACtB,kCAAkB,KAAK;AAAA,cACxB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,mBAAmB;AACtB,kCAAkB,KAAK;AAAA,cACxB;AACA;AAAA,YACD,KAAK;AACJ,kBAAI,wBAAwB;AAC3B,uCAAuB,KAAK;AAAA,cAC7B;AACA;AAAA,UACF;AAAA,QACD,SAAS,GAAY;AACpB,cAAI,aAAa,OAAO;AACvB,gBAAI,QAAQ,OAAO;AAAA,cAClB,gCAAgC,EAAE,OAAO;AAAA,YAC1C;AAAA,UACD,OAAO;AACN,gBAAI,QAAQ,OAAO,MAAM,gCAAgC,CAAC,EAAE;AAAA,UAC7D;AAEA,gBAAM,IAAIA,UAAS,eAAe;AAAA,YACjC,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,eAAO,IAAI,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,MACnC;AAAA,IACD;AAAA,EACD;AACD;;;ACzXO,IAAM,QAAQ,CAAyB,YAAe;AAC5D,QAAM,UAAU,QAAQ,IACtB,IAAI,CAAC,QAAQ,IAAI,QAAQ,MAAM,CAAC,EAChC,OAAO,CAAC,KAAK,WAAW;AACxB,WAAO,OAAO,KAAK,MAAM;AACzB,WAAO;AAAA,EACR,GAAG,CAAC,CAAmB;AAExB,SAAO;AAAA,IACN,IAAI;AAAA,IACJ,WAAW;AAAA,MACV,GAAG;AAAA,IACJ;AAAA,IACA,OAAO;AACN,aAAO;AAAA,QACN,SAAS;AAAA,UACR,eAAe;AAAA,YACd,MAAM;AAAA,cACL,QAAQ;AAAA,gBACP,OAAO,aAAa,OAAO;AAAA,cAC5B;AAAA,cACA,QAAQ;AAAA,gBACP,OAAO,aAAa,OAAO;AAAA,cAC5B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;","names":["APIError","polar","APIError","createAuthEndpoint","z","polar","checkout","APIError","createAuthEndpoint","sessionMiddleware","z","polar","APIError","createAuthEndpoint"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polar-sh/better-auth",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Polar integration for better-auth",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
],
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@biomejs/biome": "1.9.4",
|
|
33
|
-
"@polar-sh/sdk": "^0.
|
|
33
|
+
"@polar-sh/sdk": "^0.34.2",
|
|
34
34
|
"@sindresorhus/tsconfig": "^7.0.0",
|
|
35
35
|
"@types/node": "^20.0.0",
|
|
36
36
|
"better-auth": "^1.2.7",
|