@polar-sh/better-auth 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -117,8 +117,10 @@ const auth = betterAuth({
|
|
|
117
117
|
polar({
|
|
118
118
|
client: polarClient,
|
|
119
119
|
createCustomerOnSignUp: true,
|
|
120
|
-
getCustomerCreateParams?: ({ user
|
|
121
|
-
|
|
120
|
+
getCustomerCreateParams?: ({ user }, request) => ({
|
|
121
|
+
metadata: {
|
|
122
|
+
myCustomProperty: 123
|
|
123
|
+
}
|
|
122
124
|
}),
|
|
123
125
|
use: [
|
|
124
126
|
// This is where you add Polar plugins
|
|
@@ -196,7 +198,7 @@ await authClient.checkout({
|
|
|
196
198
|
// Any Polar Product ID can be passed here
|
|
197
199
|
products: ["e651f46d-ac20-4f26-b769-ad088b123df2"],
|
|
198
200
|
// Or, if you setup "products" in the Checkout Config, you can pass the slug
|
|
199
|
-
slug: '
|
|
201
|
+
slug: 'pro',
|
|
200
202
|
// Reference ID will be saved as `referenceId` in the metadata of the checkout, order & subscription object
|
|
201
203
|
referenceId: organizationId
|
|
202
204
|
});
|
|
@@ -291,7 +293,7 @@ const { data: orders } = await authClient.customer.orders.list({
|
|
|
291
293
|
This method lists the subscriptions associated with authenticated user/customer.
|
|
292
294
|
|
|
293
295
|
```typescript
|
|
294
|
-
const { data: subscriptions } = await authClient.customer.
|
|
296
|
+
const { data: subscriptions } = await authClient.customer.subscriptions.list({
|
|
295
297
|
query: {
|
|
296
298
|
page: 1,
|
|
297
299
|
limit: 10,
|
package/dist/index.cjs
CHANGED
|
@@ -34,9 +34,8 @@ var import_api = require("better-auth/api");
|
|
|
34
34
|
var onUserCreate = (options) => async (user, ctx) => {
|
|
35
35
|
if (ctx && options.createCustomerOnSignUp) {
|
|
36
36
|
try {
|
|
37
|
-
const params = options.getCustomerCreateParams
|
|
38
|
-
user
|
|
39
|
-
session: ctx.context.session.session
|
|
37
|
+
const params = options.getCustomerCreateParams ? await options.getCustomerCreateParams({
|
|
38
|
+
user
|
|
40
39
|
}) : {};
|
|
41
40
|
const { result: existingCustomers } = await options.client.customers.list({ email: user.email });
|
|
42
41
|
const existingCustomer = existingCustomers.items[0];
|
|
@@ -51,12 +50,13 @@ var onUserCreate = (options) => async (user, ctx) => {
|
|
|
51
50
|
});
|
|
52
51
|
}
|
|
53
52
|
} else {
|
|
54
|
-
await options.client.customers.create({
|
|
53
|
+
const customer = await options.client.customers.create({
|
|
55
54
|
...params,
|
|
56
55
|
email: user.email,
|
|
57
56
|
name: user.name,
|
|
58
57
|
externalId: user.id
|
|
59
58
|
});
|
|
59
|
+
console.log(customer);
|
|
60
60
|
}
|
|
61
61
|
} catch (e) {
|
|
62
62
|
if (e instanceof Error) {
|
|
@@ -216,7 +216,7 @@ var portal = () => (polar2) => {
|
|
|
216
216
|
referenceId: import_zod.z.string().optional(),
|
|
217
217
|
page: import_zod.z.coerce.number().optional(),
|
|
218
218
|
limit: import_zod.z.coerce.number().optional(),
|
|
219
|
-
active: import_zod.z.boolean().optional()
|
|
219
|
+
active: import_zod.z.coerce.boolean().optional()
|
|
220
220
|
}).optional(),
|
|
221
221
|
use: [import_api3.sessionMiddleware]
|
|
222
222
|
},
|
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 =\n\t\t\t\t\toptions.getCustomerCreateParams && ctx.context.session\n\t\t\t\t\t\t? await options.getCustomerCreateParams({\n\t\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\t\tsession: ctx.context.session.session,\n\t\t\t\t\t\t\t})\n\t\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\tawait 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\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.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\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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -9,7 +9,7 @@ import * as _polar_sh_sdk_models_operations_customerportalcustomermeterslist_js
|
|
|
9
9
|
import * as zod from 'zod';
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import * as better_auth from 'better-auth';
|
|
12
|
-
import { User
|
|
12
|
+
import { User } from 'better-auth';
|
|
13
13
|
import { Polar } from '@polar-sh/sdk';
|
|
14
14
|
import { WebhookBenefitCreatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitcreatedpayload.js';
|
|
15
15
|
import { WebhookBenefitGrantCreatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitgrantcreatedpayload.js';
|
|
@@ -800,7 +800,6 @@ interface PolarOptions {
|
|
|
800
800
|
*/
|
|
801
801
|
getCustomerCreateParams?: (data: {
|
|
802
802
|
user: User;
|
|
803
|
-
session: Session;
|
|
804
803
|
}, request?: Request) => Promise<{
|
|
805
804
|
metadata?: Record<string, string>;
|
|
806
805
|
}>;
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import * as _polar_sh_sdk_models_operations_customerportalcustomermeterslist_js
|
|
|
9
9
|
import * as zod from 'zod';
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import * as better_auth from 'better-auth';
|
|
12
|
-
import { User
|
|
12
|
+
import { User } from 'better-auth';
|
|
13
13
|
import { Polar } from '@polar-sh/sdk';
|
|
14
14
|
import { WebhookBenefitCreatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitcreatedpayload.js';
|
|
15
15
|
import { WebhookBenefitGrantCreatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitgrantcreatedpayload.js';
|
|
@@ -800,7 +800,6 @@ interface PolarOptions {
|
|
|
800
800
|
*/
|
|
801
801
|
getCustomerCreateParams?: (data: {
|
|
802
802
|
user: User;
|
|
803
|
-
session: Session;
|
|
804
803
|
}, request?: Request) => Promise<{
|
|
805
804
|
metadata?: Record<string, string>;
|
|
806
805
|
}>;
|
package/dist/index.js
CHANGED
|
@@ -3,9 +3,8 @@ import { APIError } from "better-auth/api";
|
|
|
3
3
|
var onUserCreate = (options) => async (user, ctx) => {
|
|
4
4
|
if (ctx && options.createCustomerOnSignUp) {
|
|
5
5
|
try {
|
|
6
|
-
const params = options.getCustomerCreateParams
|
|
7
|
-
user
|
|
8
|
-
session: ctx.context.session.session
|
|
6
|
+
const params = options.getCustomerCreateParams ? await options.getCustomerCreateParams({
|
|
7
|
+
user
|
|
9
8
|
}) : {};
|
|
10
9
|
const { result: existingCustomers } = await options.client.customers.list({ email: user.email });
|
|
11
10
|
const existingCustomer = existingCustomers.items[0];
|
|
@@ -20,12 +19,13 @@ var onUserCreate = (options) => async (user, ctx) => {
|
|
|
20
19
|
});
|
|
21
20
|
}
|
|
22
21
|
} else {
|
|
23
|
-
await options.client.customers.create({
|
|
22
|
+
const customer = await options.client.customers.create({
|
|
24
23
|
...params,
|
|
25
24
|
email: user.email,
|
|
26
25
|
name: user.name,
|
|
27
26
|
externalId: user.id
|
|
28
27
|
});
|
|
28
|
+
console.log(customer);
|
|
29
29
|
}
|
|
30
30
|
} catch (e) {
|
|
31
31
|
if (e instanceof Error) {
|
|
@@ -185,7 +185,7 @@ var portal = () => (polar2) => {
|
|
|
185
185
|
referenceId: z.string().optional(),
|
|
186
186
|
page: z.coerce.number().optional(),
|
|
187
187
|
limit: z.coerce.number().optional(),
|
|
188
|
-
active: z.boolean().optional()
|
|
188
|
+
active: z.coerce.boolean().optional()
|
|
189
189
|
}).optional(),
|
|
190
190
|
use: [sessionMiddleware]
|
|
191
191
|
},
|
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 =\n\t\t\t\t\toptions.getCustomerCreateParams && ctx.context.session\n\t\t\t\t\t\t? await options.getCustomerCreateParams({\n\t\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\t\tsession: ctx.context.session.session,\n\t\t\t\t\t\t\t})\n\t\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\tawait 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\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.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\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"]}
|