@polar-sh/better-auth 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -55,7 +55,8 @@ const auth = betterAuth({
55
55
  slug: "pro" // Custom slug for easy reference in Checkout URL, e.g. /checkout/pro
56
56
  }
57
57
  ],
58
- successUrl: "/success?checkout_id={CHECKOUT_ID}"
58
+ successUrl: "/success?checkout_id={CHECKOUT_ID}",
59
+ authenticatedUsersOnly: true
59
60
  },
60
61
  // Incoming Webhooks handler will be installed at /polar/webhooks
61
62
  webhooks: {
@@ -81,6 +82,7 @@ const auth = betterAuth({
81
82
  - `checkout.enabled`: Enable checkout functionality. Deployed as GET endpoint at /checkout
82
83
  - `checkout.products`: Array of products or function returning products. Slug passed will then be passable as route param.
83
84
  - `checkout.successUrl`: URL to redirect to after successful checkout
85
+ - `checkout.authenticatedUsersOnly`: Only allow authenticated users to access the checkout
84
86
 
85
87
  ### Webhook Handlers
86
88
 
@@ -99,6 +101,7 @@ The plugin supports handlers for all Polar webhook events:
99
101
  - `onCheckoutCreated` - Triggered when a checkout is created
100
102
  - `onCheckoutUpdated` - Triggered when a checkout is updated
101
103
  - `onOrderCreated` - Triggered when an order is created
104
+ - `onOrderPaid` - Triggered when an order is paid
102
105
  - `onOrderRefunded` - Triggered when an order is refunded
103
106
  - `onRefundCreated` - Triggered when a refund is created
104
107
  - `onRefundUpdated` - Triggered when a refund is updated
@@ -144,8 +147,10 @@ When checkouts are enabled, you're able to initialize Checkout Sessions on the `
144
147
 
145
148
  If you pass an array of products to the configuration, you're able to use the slug as a reference instead of using the product id.
146
149
 
147
- ### Checkouts with product id
150
+ ### Checkouts with products
148
151
 
149
152
  All your organization products are eligible for checkouts, even if they're not passed to the products-configuration.
150
153
 
151
- You can initialize a checkout session like following - `/checkout?productId=123-456-789`
154
+ You can initialize a checkout session like following - `/checkout?products=123-456-789`
155
+
156
+ You can pass multiple products like - `/checkout?products=123-456-789&products=987-654-321`
package/dist/index.cjs CHANGED
@@ -44,6 +44,11 @@ var checkout = (options) => (0, import_plugins.createAuthEndpoint)(
44
44
  }
45
45
  const products = ctx.query.products;
46
46
  const session = await (0, import_api.getSessionFromCtx)(ctx);
47
+ if (options.checkout.authenticatedUsersOnly && !session?.user.id) {
48
+ throw new import_api.APIError("UNAUTHORIZED", {
49
+ message: "You must be logged in to checkout"
50
+ });
51
+ }
47
52
  try {
48
53
  const checkout2 = await options.client.checkouts.create({
49
54
  customerExternalId: session?.user.id,
@@ -87,6 +92,11 @@ var checkoutWithSlug = (options) => (0, import_plugins.createAuthEndpoint)(
87
92
  });
88
93
  }
89
94
  const session = await (0, import_api.getSessionFromCtx)(ctx);
95
+ if (options.checkout.authenticatedUsersOnly && !session?.user.id) {
96
+ throw new import_api.APIError("UNAUTHORIZED", {
97
+ message: "You must be logged in to checkout"
98
+ });
99
+ }
90
100
  try {
91
101
  const checkout2 = await options.client.checkouts.create({
92
102
  customerExternalId: session?.user.id,
@@ -204,6 +214,7 @@ var webhooks = (options) => (0, import_plugins4.createAuthEndpoint)(
204
214
  onCheckoutCreated,
205
215
  onCheckoutUpdated,
206
216
  onOrderCreated,
217
+ onOrderPaid,
207
218
  onOrderRefunded,
208
219
  onRefundCreated,
209
220
  onRefundUpdated,
@@ -278,6 +289,11 @@ var webhooks = (options) => (0, import_plugins4.createAuthEndpoint)(
278
289
  onOrderCreated(event);
279
290
  }
280
291
  break;
292
+ case "order.paid":
293
+ if (onOrderPaid) {
294
+ onOrderPaid(event);
295
+ }
296
+ break;
281
297
  case "subscription.created":
282
298
  if (onSubscriptionCreated) {
283
299
  onSubscriptionCreated(event);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/endpoints/checkout.ts","../src/endpoints/customerPortal.ts","../src/endpoints/customerState.ts","../src/endpoints/webhooks.ts","../src/hooks/customer.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"better-auth\";\nimport { checkout, checkoutWithSlug } from \"./endpoints/checkout\";\nimport { customerPortal } from \"./endpoints/customerPortal\";\nimport { customerState } from \"./endpoints/customerState\";\nimport { webhooks } from \"./endpoints/webhooks\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarOptions } from \"./types\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\tpolarCheckout: checkout(options),\n\t\t\tpolarCheckoutWithSlug: checkoutWithSlug(options),\n\t\t\tpolarWebhooks: webhooks(options),\n\t\t\tpolarCustomerPortal: customerPortal(options),\n\t\t\tpolarCustomerState: customerState(options),\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 { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { PolarOptions } from \"../types\";\n\nexport const checkout = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tquery: z.object({\n\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = ctx.query.products;\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: Array.isArray(products) ? products : [products],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n\nexport const checkoutWithSlug = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout/:slug\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tparams: z.object({\n\t\t\t\tslug: z.string(),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = await (typeof options.checkout.products === \"function\"\n\t\t\t\t? options.checkout.products()\n\t\t\t\t: options.checkout.products);\n\n\t\t\tconst productId = products.find(\n\t\t\t\t(product) => product.slug === ctx.params?.[\"slug\"],\n\t\t\t)?.productId;\n\n\t\t\tif (!productId) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Product Id not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: [productId],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerPortal = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/portal\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.enableCustomerPortal) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Customer portal is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst customerSession = await options.client.customerSessions.create({\n\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(customerSession.customerPortalUrl);\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 portal 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: \"Customer portal creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerState = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/state\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst state = await options.client.customers.getStateExternal({\n\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.json(state);\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 subscriptions list 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: \"Subscriptions list failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { validateEvent } from \"@polar-sh/sdk/webhooks\";\nimport { APIError } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const webhooks = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/polar/webhooks\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tmetadata: {\n\t\t\t\tisAction: false,\n\t\t\t},\n\t\t\tcloneRequest: true,\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst { webhooks } = options;\n\n\t\t\tif (!webhooks) {\n\t\t\t\tthrow new APIError(\"NOT_FOUND\", {\n\t\t\t\t\tmessage: \"Webhooks not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tsecret,\n\t\t\t\tonPayload,\n\t\t\t\tonCheckoutCreated,\n\t\t\t\tonCheckoutUpdated,\n\t\t\t\tonOrderCreated,\n\t\t\t\tonOrderRefunded,\n\t\t\t\tonRefundCreated,\n\t\t\t\tonRefundUpdated,\n\t\t\t\tonSubscriptionCreated,\n\t\t\t\tonSubscriptionUpdated,\n\t\t\t\tonSubscriptionActive,\n\t\t\t\tonSubscriptionCanceled,\n\t\t\t\tonSubscriptionRevoked,\n\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\tonProductCreated,\n\t\t\t\tonProductUpdated,\n\t\t\t\tonOrganizationUpdated,\n\t\t\t\tonBenefitCreated,\n\t\t\t\tonBenefitUpdated,\n\t\t\t\tonBenefitGrantCreated,\n\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\tonCustomerCreated,\n\t\t\t\tonCustomerUpdated,\n\t\t\t\tonCustomerDeleted,\n\t\t\t\tonCustomerStateChanged,\n\t\t\t} = webhooks;\n\n\t\t\tif (!ctx.request?.body) {\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t}\n\t\t\tconst buf = await ctx.request.text();\n\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\ttry {\n\t\t\t\tif (!secret) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst headers = {\n\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t) as string,\n\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t) as string,\n\t\t\t\t};\n\n\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t} catch (err: unknown) {\n\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (onPayload) {\n\t\t\t\t\tonPayload(event);\n\t\t\t\t}\n\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\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(`Polar webhook failed. Error: ${e.message}`);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn ctx.json({ received: true });\n\t\t},\n\t);\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},\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\t// Throw a better auth ApiError to ensure the user isn't created\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\tcustomerUpdate: {\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"],"mappings":"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","names":["checkout","import_api","import_plugins","import_api","import_plugins","import_api","import_plugins","webhooks","import_api"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/endpoints/checkout.ts","../src/endpoints/customerPortal.ts","../src/endpoints/customerState.ts","../src/endpoints/webhooks.ts","../src/hooks/customer.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"better-auth\";\nimport { checkout, checkoutWithSlug } from \"./endpoints/checkout\";\nimport { customerPortal } from \"./endpoints/customerPortal\";\nimport { customerState } from \"./endpoints/customerState\";\nimport { webhooks } from \"./endpoints/webhooks\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarOptions } from \"./types\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\tpolarCheckout: checkout(options),\n\t\t\tpolarCheckoutWithSlug: checkoutWithSlug(options),\n\t\t\tpolarWebhooks: webhooks(options),\n\t\t\tpolarCustomerPortal: customerPortal(options),\n\t\t\tpolarCustomerState: customerState(options),\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 { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { PolarOptions } from \"../types\";\n\nexport const checkout = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tquery: z.object({\n\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = ctx.query.products;\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\tif (options.checkout.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: Array.isArray(products) ? products : [products],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n\nexport const checkoutWithSlug = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout/:slug\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tparams: z.object({\n\t\t\t\tslug: z.string(),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = await (typeof options.checkout.products === \"function\"\n\t\t\t\t? options.checkout.products()\n\t\t\t\t: options.checkout.products);\n\n\t\t\tconst productId = products.find(\n\t\t\t\t(product) => product.slug === ctx.params?.[\"slug\"],\n\t\t\t)?.productId;\n\n\t\t\tif (!productId) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Product Id not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\tif (options.checkout.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: [productId],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerPortal = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/portal\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.enableCustomerPortal) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Customer portal is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst customerSession = await options.client.customerSessions.create({\n\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(customerSession.customerPortalUrl);\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 portal 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: \"Customer portal creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerState = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/state\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst state = await options.client.customers.getStateExternal({\n\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.json(state);\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 subscriptions list 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: \"Subscriptions list failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { validateEvent } from \"@polar-sh/sdk/webhooks\";\nimport { APIError } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const webhooks = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/polar/webhooks\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tmetadata: {\n\t\t\t\tisAction: false,\n\t\t\t},\n\t\t\tcloneRequest: true,\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst { webhooks } = options;\n\n\t\t\tif (!webhooks) {\n\t\t\t\tthrow new APIError(\"NOT_FOUND\", {\n\t\t\t\t\tmessage: \"Webhooks not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tsecret,\n\t\t\t\tonPayload,\n\t\t\t\tonCheckoutCreated,\n\t\t\t\tonCheckoutUpdated,\n\t\t\t\tonOrderCreated,\n\t\t\t\tonOrderPaid,\n\t\t\t\tonOrderRefunded,\n\t\t\t\tonRefundCreated,\n\t\t\t\tonRefundUpdated,\n\t\t\t\tonSubscriptionCreated,\n\t\t\t\tonSubscriptionUpdated,\n\t\t\t\tonSubscriptionActive,\n\t\t\t\tonSubscriptionCanceled,\n\t\t\t\tonSubscriptionRevoked,\n\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\tonProductCreated,\n\t\t\t\tonProductUpdated,\n\t\t\t\tonOrganizationUpdated,\n\t\t\t\tonBenefitCreated,\n\t\t\t\tonBenefitUpdated,\n\t\t\t\tonBenefitGrantCreated,\n\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\tonCustomerCreated,\n\t\t\t\tonCustomerUpdated,\n\t\t\t\tonCustomerDeleted,\n\t\t\t\tonCustomerStateChanged,\n\t\t\t} = webhooks;\n\n\t\t\tif (!ctx.request?.body) {\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t}\n\t\t\tconst buf = await ctx.request.text();\n\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\ttry {\n\t\t\t\tif (!secret) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst headers = {\n\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t) as string,\n\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t) as string,\n\t\t\t\t};\n\n\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t} catch (err: unknown) {\n\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (onPayload) {\n\t\t\t\t\tonPayload(event);\n\t\t\t\t}\n\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.paid\":\n\t\t\t\t\t\tif (onOrderPaid) {\n\t\t\t\t\t\t\tonOrderPaid(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\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(`Polar webhook failed. Error: ${e.message}`);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn ctx.json({ received: true });\n\t\t},\n\t);\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},\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\tcustomerUpdate: {\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"],"mappings":"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","names":["checkout","import_api","import_plugins","import_api","import_plugins","import_api","import_plugins","webhooks","import_api"]}
package/dist/index.d.cts CHANGED
@@ -15,6 +15,7 @@ import { WebhookCustomerDeletedPayload } from '@polar-sh/sdk/models/components/w
15
15
  import { WebhookCustomerStateChangedPayload } from '@polar-sh/sdk/models/components/webhookcustomerstatechangedpayload.js';
16
16
  import { WebhookCustomerUpdatedPayload } from '@polar-sh/sdk/models/components/webhookcustomerupdatedpayload.js';
17
17
  import { WebhookOrderCreatedPayload } from '@polar-sh/sdk/models/components/webhookordercreatedpayload.js';
18
+ import { WebhookOrderPaidPayload } from '@polar-sh/sdk/models/components/webhookorderpaidpayload.js';
18
19
  import { WebhookOrderRefundedPayload } from '@polar-sh/sdk/models/components/webhookorderrefundedpayload.js';
19
20
  import { WebhookOrganizationUpdatedPayload } from '@polar-sh/sdk/models/components/webhookorganizationupdatedpayload.js';
20
21
  import { WebhookProductCreatedPayload } from '@polar-sh/sdk/models/components/webhookproductcreatedpayload.js';
@@ -80,6 +81,10 @@ interface PolarOptions {
80
81
  * Checkout Success URL
81
82
  */
82
83
  successUrl?: string;
84
+ /**
85
+ * Only allow authenticated customers to checkout
86
+ */
87
+ authenticatedUsersOnly?: boolean;
83
88
  };
84
89
  /**
85
90
  * Webhooks
@@ -109,6 +114,10 @@ interface PolarOptions {
109
114
  * Webhook for order refunded
110
115
  */
111
116
  onOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>;
117
+ /**
118
+ * Webhook for order paid
119
+ */
120
+ onOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>;
112
121
  /**
113
122
  * Webhook for refund created
114
123
  */
@@ -196,24 +205,29 @@ declare const polar: <O extends PolarOptions>(options: O) => {
196
205
  id: "polar";
197
206
  endpoints: {
198
207
  polarCheckout: {
199
- <C extends [{
208
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
209
+ body?: undefined;
210
+ } & {
211
+ method?: "GET" | undefined;
212
+ } & {
200
213
  query: {
201
214
  products: string | string[];
202
215
  };
203
- body?: undefined;
204
- method?: "GET" | undefined;
205
- params?: Record<string, any> | undefined;
206
- request?: Request | undefined;
207
- headers?: HeadersInit | undefined;
208
- asResponse?: boolean | undefined;
209
- returnHeaders?: boolean | undefined;
210
- use?: better_auth.Middleware[] | undefined;
211
- path?: string | undefined;
212
- }]>(...inputCtx: C): Promise<C extends [{
213
- asResponse: true;
214
- }] ? Response : C extends [{
215
- returnHeaders: true;
216
- }] ? {
216
+ } & {
217
+ params?: Record<string, any>;
218
+ } & {
219
+ request?: Request;
220
+ } & {
221
+ headers?: HeadersInit;
222
+ } & {
223
+ asResponse?: boolean;
224
+ returnHeaders?: boolean;
225
+ use?: better_auth.Middleware[];
226
+ path?: string;
227
+ } & {
228
+ asResponse?: AsResponse | undefined;
229
+ returnHeaders?: ReturnHeaders | undefined;
230
+ }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
217
231
  headers: Headers;
218
232
  response: better_auth.APIError;
219
233
  } : better_auth.APIError>;
@@ -232,24 +246,29 @@ declare const polar: <O extends PolarOptions>(options: O) => {
232
246
  path: "/checkout";
233
247
  };
234
248
  polarCheckoutWithSlug: {
235
- <C extends [{
236
- params: {
237
- slug: string;
238
- };
249
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
239
250
  body?: undefined;
251
+ } & {
240
252
  method?: "GET" | undefined;
253
+ } & {
241
254
  query?: Record<string, any> | undefined;
242
- request?: Request | undefined;
243
- headers?: HeadersInit | undefined;
244
- asResponse?: boolean | undefined;
245
- returnHeaders?: boolean | undefined;
246
- use?: better_auth.Middleware[] | undefined;
247
- path?: string | undefined;
248
- }]>(...inputCtx: C): Promise<C extends [{
249
- asResponse: true;
250
- }] ? Response : C extends [{
251
- returnHeaders: true;
252
- }] ? {
255
+ } & {
256
+ params: {
257
+ slug: string;
258
+ };
259
+ } & {
260
+ request?: Request;
261
+ } & {
262
+ headers?: HeadersInit;
263
+ } & {
264
+ asResponse?: boolean;
265
+ returnHeaders?: boolean;
266
+ use?: better_auth.Middleware[];
267
+ path?: string;
268
+ } & {
269
+ asResponse?: AsResponse | undefined;
270
+ returnHeaders?: ReturnHeaders | undefined;
271
+ }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
253
272
  headers: Headers;
254
273
  response: better_auth.APIError;
255
274
  } : better_auth.APIError>;
@@ -268,22 +287,27 @@ declare const polar: <O extends PolarOptions>(options: O) => {
268
287
  path: "/checkout/:slug";
269
288
  };
270
289
  polarWebhooks: {
271
- <C extends [({
290
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
272
291
  body?: undefined;
292
+ } & {
273
293
  method?: "POST" | undefined;
294
+ } & {
274
295
  query?: Record<string, any> | undefined;
275
- params?: Record<string, any> | undefined;
276
- request?: Request | undefined;
277
- headers?: HeadersInit | undefined;
278
- asResponse?: boolean | undefined;
279
- returnHeaders?: boolean | undefined;
280
- use?: better_auth.Middleware[] | undefined;
281
- path?: string | undefined;
282
- } | undefined)?]>(...inputCtx: C): Promise<C extends [{
283
- asResponse: true;
284
- }] ? Response : C extends [{
285
- returnHeaders: true;
286
- }] ? {
296
+ } & {
297
+ params?: Record<string, any>;
298
+ } & {
299
+ request?: Request;
300
+ } & {
301
+ headers?: HeadersInit;
302
+ } & {
303
+ asResponse?: boolean;
304
+ returnHeaders?: boolean;
305
+ use?: better_auth.Middleware[];
306
+ path?: string;
307
+ } & {
308
+ asResponse?: AsResponse | undefined;
309
+ returnHeaders?: ReturnHeaders | undefined;
310
+ }) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
287
311
  headers: Headers;
288
312
  response: {
289
313
  received: boolean;
@@ -303,36 +327,33 @@ declare const polar: <O extends PolarOptions>(options: O) => {
303
327
  path: "/polar/webhooks";
304
328
  };
305
329
  polarCustomerPortal: {
306
- <C extends [({
330
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
307
331
  body?: undefined;
332
+ } & {
308
333
  method?: "GET" | undefined;
334
+ } & {
309
335
  query?: Record<string, any> | undefined;
310
- params?: Record<string, any> | undefined;
311
- request?: Request | undefined;
312
- headers?: HeadersInit | undefined;
313
- asResponse?: boolean | undefined;
314
- returnHeaders?: boolean | undefined;
315
- use?: better_auth.Middleware[] | undefined;
316
- path?: string | undefined;
317
- } | undefined)?]>(...inputCtx: C): Promise<C extends [{
318
- asResponse: true;
319
- }] ? Response : C extends [{
320
- returnHeaders: true;
321
- }] ? {
336
+ } & {
337
+ params?: Record<string, any>;
338
+ } & {
339
+ request?: Request;
340
+ } & {
341
+ headers?: HeadersInit;
342
+ } & {
343
+ asResponse?: boolean;
344
+ returnHeaders?: boolean;
345
+ use?: better_auth.Middleware[];
346
+ path?: string;
347
+ } & {
348
+ asResponse?: AsResponse | undefined;
349
+ returnHeaders?: ReturnHeaders | undefined;
350
+ }) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
322
351
  headers: Headers;
323
352
  response: better_auth.APIError;
324
353
  } : better_auth.APIError>;
325
354
  options: {
326
355
  method: "GET";
327
- use: ((inputContext: {
328
- body?: any;
329
- query?: Record<string, any> | undefined;
330
- request?: Request | undefined;
331
- headers?: Headers | undefined;
332
- asResponse?: boolean | undefined;
333
- returnHeaders?: boolean | undefined;
334
- use?: better_auth.Middleware[] | undefined;
335
- }) => Promise<{
356
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
336
357
  session: {
337
358
  session: Record<string, any> & {
338
359
  id: string;
@@ -361,36 +382,33 @@ declare const polar: <O extends PolarOptions>(options: O) => {
361
382
  path: "/portal";
362
383
  };
363
384
  polarCustomerState: {
364
- <C extends [({
385
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
365
386
  body?: undefined;
387
+ } & {
366
388
  method?: "GET" | undefined;
389
+ } & {
367
390
  query?: Record<string, any> | undefined;
368
- params?: Record<string, any> | undefined;
369
- request?: Request | undefined;
370
- headers?: HeadersInit | undefined;
371
- asResponse?: boolean | undefined;
372
- returnHeaders?: boolean | undefined;
373
- use?: better_auth.Middleware[] | undefined;
374
- path?: string | undefined;
375
- } | undefined)?]>(...inputCtx: C): Promise<C extends [{
376
- asResponse: true;
377
- }] ? Response : C extends [{
378
- returnHeaders: true;
379
- }] ? {
391
+ } & {
392
+ params?: Record<string, any>;
393
+ } & {
394
+ request?: Request;
395
+ } & {
396
+ headers?: HeadersInit;
397
+ } & {
398
+ asResponse?: boolean;
399
+ returnHeaders?: boolean;
400
+ use?: better_auth.Middleware[];
401
+ path?: string;
402
+ } & {
403
+ asResponse?: AsResponse | undefined;
404
+ returnHeaders?: ReturnHeaders | undefined;
405
+ }) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
380
406
  headers: Headers;
381
407
  response: _polar_sh_sdk_models_components_customerstate_js.CustomerState;
382
408
  } : _polar_sh_sdk_models_components_customerstate_js.CustomerState>;
383
409
  options: {
384
410
  method: "GET";
385
- use: ((inputContext: {
386
- body?: any;
387
- query?: Record<string, any> | undefined;
388
- request?: Request | undefined;
389
- headers?: Headers | undefined;
390
- asResponse?: boolean | undefined;
391
- returnHeaders?: boolean | undefined;
392
- use?: better_auth.Middleware[] | undefined;
393
- }) => Promise<{
411
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
394
412
  session: {
395
413
  session: Record<string, any> & {
396
414
  id: string;
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ import { WebhookCustomerDeletedPayload } from '@polar-sh/sdk/models/components/w
15
15
  import { WebhookCustomerStateChangedPayload } from '@polar-sh/sdk/models/components/webhookcustomerstatechangedpayload.js';
16
16
  import { WebhookCustomerUpdatedPayload } from '@polar-sh/sdk/models/components/webhookcustomerupdatedpayload.js';
17
17
  import { WebhookOrderCreatedPayload } from '@polar-sh/sdk/models/components/webhookordercreatedpayload.js';
18
+ import { WebhookOrderPaidPayload } from '@polar-sh/sdk/models/components/webhookorderpaidpayload.js';
18
19
  import { WebhookOrderRefundedPayload } from '@polar-sh/sdk/models/components/webhookorderrefundedpayload.js';
19
20
  import { WebhookOrganizationUpdatedPayload } from '@polar-sh/sdk/models/components/webhookorganizationupdatedpayload.js';
20
21
  import { WebhookProductCreatedPayload } from '@polar-sh/sdk/models/components/webhookproductcreatedpayload.js';
@@ -80,6 +81,10 @@ interface PolarOptions {
80
81
  * Checkout Success URL
81
82
  */
82
83
  successUrl?: string;
84
+ /**
85
+ * Only allow authenticated customers to checkout
86
+ */
87
+ authenticatedUsersOnly?: boolean;
83
88
  };
84
89
  /**
85
90
  * Webhooks
@@ -109,6 +114,10 @@ interface PolarOptions {
109
114
  * Webhook for order refunded
110
115
  */
111
116
  onOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>;
117
+ /**
118
+ * Webhook for order paid
119
+ */
120
+ onOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>;
112
121
  /**
113
122
  * Webhook for refund created
114
123
  */
@@ -196,24 +205,29 @@ declare const polar: <O extends PolarOptions>(options: O) => {
196
205
  id: "polar";
197
206
  endpoints: {
198
207
  polarCheckout: {
199
- <C extends [{
208
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
209
+ body?: undefined;
210
+ } & {
211
+ method?: "GET" | undefined;
212
+ } & {
200
213
  query: {
201
214
  products: string | string[];
202
215
  };
203
- body?: undefined;
204
- method?: "GET" | undefined;
205
- params?: Record<string, any> | undefined;
206
- request?: Request | undefined;
207
- headers?: HeadersInit | undefined;
208
- asResponse?: boolean | undefined;
209
- returnHeaders?: boolean | undefined;
210
- use?: better_auth.Middleware[] | undefined;
211
- path?: string | undefined;
212
- }]>(...inputCtx: C): Promise<C extends [{
213
- asResponse: true;
214
- }] ? Response : C extends [{
215
- returnHeaders: true;
216
- }] ? {
216
+ } & {
217
+ params?: Record<string, any>;
218
+ } & {
219
+ request?: Request;
220
+ } & {
221
+ headers?: HeadersInit;
222
+ } & {
223
+ asResponse?: boolean;
224
+ returnHeaders?: boolean;
225
+ use?: better_auth.Middleware[];
226
+ path?: string;
227
+ } & {
228
+ asResponse?: AsResponse | undefined;
229
+ returnHeaders?: ReturnHeaders | undefined;
230
+ }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
217
231
  headers: Headers;
218
232
  response: better_auth.APIError;
219
233
  } : better_auth.APIError>;
@@ -232,24 +246,29 @@ declare const polar: <O extends PolarOptions>(options: O) => {
232
246
  path: "/checkout";
233
247
  };
234
248
  polarCheckoutWithSlug: {
235
- <C extends [{
236
- params: {
237
- slug: string;
238
- };
249
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
239
250
  body?: undefined;
251
+ } & {
240
252
  method?: "GET" | undefined;
253
+ } & {
241
254
  query?: Record<string, any> | undefined;
242
- request?: Request | undefined;
243
- headers?: HeadersInit | undefined;
244
- asResponse?: boolean | undefined;
245
- returnHeaders?: boolean | undefined;
246
- use?: better_auth.Middleware[] | undefined;
247
- path?: string | undefined;
248
- }]>(...inputCtx: C): Promise<C extends [{
249
- asResponse: true;
250
- }] ? Response : C extends [{
251
- returnHeaders: true;
252
- }] ? {
255
+ } & {
256
+ params: {
257
+ slug: string;
258
+ };
259
+ } & {
260
+ request?: Request;
261
+ } & {
262
+ headers?: HeadersInit;
263
+ } & {
264
+ asResponse?: boolean;
265
+ returnHeaders?: boolean;
266
+ use?: better_auth.Middleware[];
267
+ path?: string;
268
+ } & {
269
+ asResponse?: AsResponse | undefined;
270
+ returnHeaders?: ReturnHeaders | undefined;
271
+ }): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
253
272
  headers: Headers;
254
273
  response: better_auth.APIError;
255
274
  } : better_auth.APIError>;
@@ -268,22 +287,27 @@ declare const polar: <O extends PolarOptions>(options: O) => {
268
287
  path: "/checkout/:slug";
269
288
  };
270
289
  polarWebhooks: {
271
- <C extends [({
290
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
272
291
  body?: undefined;
292
+ } & {
273
293
  method?: "POST" | undefined;
294
+ } & {
274
295
  query?: Record<string, any> | undefined;
275
- params?: Record<string, any> | undefined;
276
- request?: Request | undefined;
277
- headers?: HeadersInit | undefined;
278
- asResponse?: boolean | undefined;
279
- returnHeaders?: boolean | undefined;
280
- use?: better_auth.Middleware[] | undefined;
281
- path?: string | undefined;
282
- } | undefined)?]>(...inputCtx: C): Promise<C extends [{
283
- asResponse: true;
284
- }] ? Response : C extends [{
285
- returnHeaders: true;
286
- }] ? {
296
+ } & {
297
+ params?: Record<string, any>;
298
+ } & {
299
+ request?: Request;
300
+ } & {
301
+ headers?: HeadersInit;
302
+ } & {
303
+ asResponse?: boolean;
304
+ returnHeaders?: boolean;
305
+ use?: better_auth.Middleware[];
306
+ path?: string;
307
+ } & {
308
+ asResponse?: AsResponse | undefined;
309
+ returnHeaders?: ReturnHeaders | undefined;
310
+ }) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
287
311
  headers: Headers;
288
312
  response: {
289
313
  received: boolean;
@@ -303,36 +327,33 @@ declare const polar: <O extends PolarOptions>(options: O) => {
303
327
  path: "/polar/webhooks";
304
328
  };
305
329
  polarCustomerPortal: {
306
- <C extends [({
330
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
307
331
  body?: undefined;
332
+ } & {
308
333
  method?: "GET" | undefined;
334
+ } & {
309
335
  query?: Record<string, any> | undefined;
310
- params?: Record<string, any> | undefined;
311
- request?: Request | undefined;
312
- headers?: HeadersInit | undefined;
313
- asResponse?: boolean | undefined;
314
- returnHeaders?: boolean | undefined;
315
- use?: better_auth.Middleware[] | undefined;
316
- path?: string | undefined;
317
- } | undefined)?]>(...inputCtx: C): Promise<C extends [{
318
- asResponse: true;
319
- }] ? Response : C extends [{
320
- returnHeaders: true;
321
- }] ? {
336
+ } & {
337
+ params?: Record<string, any>;
338
+ } & {
339
+ request?: Request;
340
+ } & {
341
+ headers?: HeadersInit;
342
+ } & {
343
+ asResponse?: boolean;
344
+ returnHeaders?: boolean;
345
+ use?: better_auth.Middleware[];
346
+ path?: string;
347
+ } & {
348
+ asResponse?: AsResponse | undefined;
349
+ returnHeaders?: ReturnHeaders | undefined;
350
+ }) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
322
351
  headers: Headers;
323
352
  response: better_auth.APIError;
324
353
  } : better_auth.APIError>;
325
354
  options: {
326
355
  method: "GET";
327
- use: ((inputContext: {
328
- body?: any;
329
- query?: Record<string, any> | undefined;
330
- request?: Request | undefined;
331
- headers?: Headers | undefined;
332
- asResponse?: boolean | undefined;
333
- returnHeaders?: boolean | undefined;
334
- use?: better_auth.Middleware[] | undefined;
335
- }) => Promise<{
356
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
336
357
  session: {
337
358
  session: Record<string, any> & {
338
359
  id: string;
@@ -361,36 +382,33 @@ declare const polar: <O extends PolarOptions>(options: O) => {
361
382
  path: "/portal";
362
383
  };
363
384
  polarCustomerState: {
364
- <C extends [({
385
+ <AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0?: ({
365
386
  body?: undefined;
387
+ } & {
366
388
  method?: "GET" | undefined;
389
+ } & {
367
390
  query?: Record<string, any> | undefined;
368
- params?: Record<string, any> | undefined;
369
- request?: Request | undefined;
370
- headers?: HeadersInit | undefined;
371
- asResponse?: boolean | undefined;
372
- returnHeaders?: boolean | undefined;
373
- use?: better_auth.Middleware[] | undefined;
374
- path?: string | undefined;
375
- } | undefined)?]>(...inputCtx: C): Promise<C extends [{
376
- asResponse: true;
377
- }] ? Response : C extends [{
378
- returnHeaders: true;
379
- }] ? {
391
+ } & {
392
+ params?: Record<string, any>;
393
+ } & {
394
+ request?: Request;
395
+ } & {
396
+ headers?: HeadersInit;
397
+ } & {
398
+ asResponse?: boolean;
399
+ returnHeaders?: boolean;
400
+ use?: better_auth.Middleware[];
401
+ path?: string;
402
+ } & {
403
+ asResponse?: AsResponse | undefined;
404
+ returnHeaders?: ReturnHeaders | undefined;
405
+ }) | undefined): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
380
406
  headers: Headers;
381
407
  response: _polar_sh_sdk_models_components_customerstate_js.CustomerState;
382
408
  } : _polar_sh_sdk_models_components_customerstate_js.CustomerState>;
383
409
  options: {
384
410
  method: "GET";
385
- use: ((inputContext: {
386
- body?: any;
387
- query?: Record<string, any> | undefined;
388
- request?: Request | undefined;
389
- headers?: Headers | undefined;
390
- asResponse?: boolean | undefined;
391
- returnHeaders?: boolean | undefined;
392
- use?: better_auth.Middleware[] | undefined;
393
- }) => Promise<{
411
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
394
412
  session: {
395
413
  session: Record<string, any> & {
396
414
  id: string;
package/dist/index.js CHANGED
@@ -18,6 +18,11 @@ var checkout = (options) => createAuthEndpoint(
18
18
  }
19
19
  const products = ctx.query.products;
20
20
  const session = await getSessionFromCtx(ctx);
21
+ if (options.checkout.authenticatedUsersOnly && !session?.user.id) {
22
+ throw new APIError("UNAUTHORIZED", {
23
+ message: "You must be logged in to checkout"
24
+ });
25
+ }
21
26
  try {
22
27
  const checkout2 = await options.client.checkouts.create({
23
28
  customerExternalId: session?.user.id,
@@ -61,6 +66,11 @@ var checkoutWithSlug = (options) => createAuthEndpoint(
61
66
  });
62
67
  }
63
68
  const session = await getSessionFromCtx(ctx);
69
+ if (options.checkout.authenticatedUsersOnly && !session?.user.id) {
70
+ throw new APIError("UNAUTHORIZED", {
71
+ message: "You must be logged in to checkout"
72
+ });
73
+ }
64
74
  try {
65
75
  const checkout2 = await options.client.checkouts.create({
66
76
  customerExternalId: session?.user.id,
@@ -178,6 +188,7 @@ var webhooks = (options) => createAuthEndpoint4(
178
188
  onCheckoutCreated,
179
189
  onCheckoutUpdated,
180
190
  onOrderCreated,
191
+ onOrderPaid,
181
192
  onOrderRefunded,
182
193
  onRefundCreated,
183
194
  onRefundUpdated,
@@ -252,6 +263,11 @@ var webhooks = (options) => createAuthEndpoint4(
252
263
  onOrderCreated(event);
253
264
  }
254
265
  break;
266
+ case "order.paid":
267
+ if (onOrderPaid) {
268
+ onOrderPaid(event);
269
+ }
270
+ break;
255
271
  case "subscription.created":
256
272
  if (onSubscriptionCreated) {
257
273
  onSubscriptionCreated(event);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/endpoints/checkout.ts","../src/endpoints/customerPortal.ts","../src/endpoints/customerState.ts","../src/endpoints/webhooks.ts","../src/hooks/customer.ts","../src/index.ts"],"sourcesContent":["import { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { PolarOptions } from \"../types\";\n\nexport const checkout = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tquery: z.object({\n\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = ctx.query.products;\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: Array.isArray(products) ? products : [products],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n\nexport const checkoutWithSlug = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout/:slug\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tparams: z.object({\n\t\t\t\tslug: z.string(),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = await (typeof options.checkout.products === \"function\"\n\t\t\t\t? options.checkout.products()\n\t\t\t\t: options.checkout.products);\n\n\t\t\tconst productId = products.find(\n\t\t\t\t(product) => product.slug === ctx.params?.[\"slug\"],\n\t\t\t)?.productId;\n\n\t\t\tif (!productId) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Product Id not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: [productId],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerPortal = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/portal\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.enableCustomerPortal) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Customer portal is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst customerSession = await options.client.customerSessions.create({\n\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(customerSession.customerPortalUrl);\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 portal 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: \"Customer portal creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerState = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/state\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst state = await options.client.customers.getStateExternal({\n\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.json(state);\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 subscriptions list 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: \"Subscriptions list failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { validateEvent } from \"@polar-sh/sdk/webhooks\";\nimport { APIError } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const webhooks = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/polar/webhooks\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tmetadata: {\n\t\t\t\tisAction: false,\n\t\t\t},\n\t\t\tcloneRequest: true,\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst { webhooks } = options;\n\n\t\t\tif (!webhooks) {\n\t\t\t\tthrow new APIError(\"NOT_FOUND\", {\n\t\t\t\t\tmessage: \"Webhooks not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tsecret,\n\t\t\t\tonPayload,\n\t\t\t\tonCheckoutCreated,\n\t\t\t\tonCheckoutUpdated,\n\t\t\t\tonOrderCreated,\n\t\t\t\tonOrderRefunded,\n\t\t\t\tonRefundCreated,\n\t\t\t\tonRefundUpdated,\n\t\t\t\tonSubscriptionCreated,\n\t\t\t\tonSubscriptionUpdated,\n\t\t\t\tonSubscriptionActive,\n\t\t\t\tonSubscriptionCanceled,\n\t\t\t\tonSubscriptionRevoked,\n\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\tonProductCreated,\n\t\t\t\tonProductUpdated,\n\t\t\t\tonOrganizationUpdated,\n\t\t\t\tonBenefitCreated,\n\t\t\t\tonBenefitUpdated,\n\t\t\t\tonBenefitGrantCreated,\n\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\tonCustomerCreated,\n\t\t\t\tonCustomerUpdated,\n\t\t\t\tonCustomerDeleted,\n\t\t\t\tonCustomerStateChanged,\n\t\t\t} = webhooks;\n\n\t\t\tif (!ctx.request?.body) {\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t}\n\t\t\tconst buf = await ctx.request.text();\n\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\ttry {\n\t\t\t\tif (!secret) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst headers = {\n\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t) as string,\n\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t) as string,\n\t\t\t\t};\n\n\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t} catch (err: unknown) {\n\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (onPayload) {\n\t\t\t\t\tonPayload(event);\n\t\t\t\t}\n\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\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(`Polar webhook failed. Error: ${e.message}`);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn ctx.json({ received: true });\n\t\t},\n\t);\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},\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\t// Throw a better auth ApiError to ensure the user isn't created\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\tcustomerUpdate: {\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 { BetterAuthPlugin } from \"better-auth\";\nimport { checkout, checkoutWithSlug } from \"./endpoints/checkout\";\nimport { customerPortal } from \"./endpoints/customerPortal\";\nimport { customerState } from \"./endpoints/customerState\";\nimport { webhooks } from \"./endpoints/webhooks\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarOptions } from \"./types\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\tpolarCheckout: checkout(options),\n\t\t\tpolarCheckoutWithSlug: checkoutWithSlug(options),\n\t\t\tpolarWebhooks: webhooks(options),\n\t\t\tpolarCustomerPortal: customerPortal(options),\n\t\t\tpolarCustomerState: customerState(options),\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":["checkout","APIError","createAuthEndpoint","APIError","sessionMiddleware","createAuthEndpoint","APIError","createAuthEndpoint","webhooks","APIError"]}
1
+ {"version":3,"sources":["../src/endpoints/checkout.ts","../src/endpoints/customerPortal.ts","../src/endpoints/customerState.ts","../src/endpoints/webhooks.ts","../src/hooks/customer.ts","../src/index.ts"],"sourcesContent":["import { APIError, getSessionFromCtx } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport { z } from \"zod\";\nimport type { PolarOptions } from \"../types\";\n\nexport const checkout = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tquery: z.object({\n\t\t\t\tproducts: z.union([z.array(z.string()), z.string()]),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = ctx.query.products;\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\tif (options.checkout.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: Array.isArray(products) ? products : [products],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n\nexport const checkoutWithSlug = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/checkout/:slug\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tparams: z.object({\n\t\t\t\tslug: z.string(),\n\t\t\t}),\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.checkout?.enabled) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Checkout is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst products = await (typeof options.checkout.products === \"function\"\n\t\t\t\t? options.checkout.products()\n\t\t\t\t: options.checkout.products);\n\n\t\t\tconst productId = products.find(\n\t\t\t\t(product) => product.slug === ctx.params?.[\"slug\"],\n\t\t\t)?.productId;\n\n\t\t\tif (!productId) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Product Id not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\tif (options.checkout.authenticatedUsersOnly && !session?.user.id) {\n\t\t\t\tthrow new APIError(\"UNAUTHORIZED\", {\n\t\t\t\t\tmessage: \"You must be logged in to checkout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst checkout = await options.client.checkouts.create({\n\t\t\t\t\tcustomerExternalId: session?.user.id,\n\t\t\t\t\tproducts: [productId],\n\t\t\t\t\tsuccessUrl: options.checkout.successUrl\n\t\t\t\t\t\t? new URL(options.checkout.successUrl, ctx.request?.url).toString()\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(checkout.url);\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 checkout 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: \"Checkout creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerPortal = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/portal\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!options.enableCustomerPortal) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Customer portal is not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!ctx.context.session?.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst customerSession = await options.client.customerSessions.create({\n\t\t\t\t\tcustomerExternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.redirect(customerSession.customerPortalUrl);\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 portal 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: \"Customer portal creation failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { APIError, sessionMiddleware } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const customerState = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/state\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [sessionMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tif (!ctx.context.session.user.id) {\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst state = await options.client.customers.getStateExternal({\n\t\t\t\t\texternalId: ctx.context.session?.user.id,\n\t\t\t\t});\n\n\t\t\t\treturn ctx.json(state);\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 subscriptions list 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: \"Subscriptions list failed\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t);\n","import { validateEvent } from \"@polar-sh/sdk/webhooks\";\nimport { APIError } from \"better-auth/api\";\nimport { createAuthEndpoint } from \"better-auth/plugins\";\nimport type { PolarOptions } from \"../types\";\n\nexport const webhooks = (options: PolarOptions) =>\n\tcreateAuthEndpoint(\n\t\t\"/polar/webhooks\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tmetadata: {\n\t\t\t\tisAction: false,\n\t\t\t},\n\t\t\tcloneRequest: true,\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst { webhooks } = options;\n\n\t\t\tif (!webhooks) {\n\t\t\t\tthrow new APIError(\"NOT_FOUND\", {\n\t\t\t\t\tmessage: \"Webhooks not enabled\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tsecret,\n\t\t\t\tonPayload,\n\t\t\t\tonCheckoutCreated,\n\t\t\t\tonCheckoutUpdated,\n\t\t\t\tonOrderCreated,\n\t\t\t\tonOrderPaid,\n\t\t\t\tonOrderRefunded,\n\t\t\t\tonRefundCreated,\n\t\t\t\tonRefundUpdated,\n\t\t\t\tonSubscriptionCreated,\n\t\t\t\tonSubscriptionUpdated,\n\t\t\t\tonSubscriptionActive,\n\t\t\t\tonSubscriptionCanceled,\n\t\t\t\tonSubscriptionRevoked,\n\t\t\t\tonSubscriptionUncanceled,\n\t\t\t\tonProductCreated,\n\t\t\t\tonProductUpdated,\n\t\t\t\tonOrganizationUpdated,\n\t\t\t\tonBenefitCreated,\n\t\t\t\tonBenefitUpdated,\n\t\t\t\tonBenefitGrantCreated,\n\t\t\t\tonBenefitGrantUpdated,\n\t\t\t\tonBenefitGrantRevoked,\n\t\t\t\tonCustomerCreated,\n\t\t\t\tonCustomerUpdated,\n\t\t\t\tonCustomerDeleted,\n\t\t\t\tonCustomerStateChanged,\n\t\t\t} = webhooks;\n\n\t\t\tif (!ctx.request?.body) {\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\");\n\t\t\t}\n\t\t\tconst buf = await ctx.request.text();\n\t\t\tlet event: ReturnType<typeof validateEvent>;\n\t\t\ttry {\n\t\t\t\tif (!secret) {\n\t\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\tmessage: \"Polar webhook secret not found\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst headers = {\n\t\t\t\t\t\"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n\t\t\t\t\t\"webhook-timestamp\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-timestamp\",\n\t\t\t\t\t) as string,\n\t\t\t\t\t\"webhook-signature\": ctx.request.headers.get(\n\t\t\t\t\t\t\"webhook-signature\",\n\t\t\t\t\t) as string,\n\t\t\t\t};\n\n\t\t\t\tevent = validateEvent(buf, headers, secret);\n\t\t\t} catch (err: unknown) {\n\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\tctx.context.logger.error(`${err.message}`);\n\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\tmessage: `Webhook Error: ${err.message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: `Webhook Error: ${err}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (onPayload) {\n\t\t\t\t\tonPayload(event);\n\t\t\t\t}\n\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"checkout.created\":\n\t\t\t\t\t\tif (onCheckoutCreated) {\n\t\t\t\t\t\t\tonCheckoutCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"checkout.updated\":\n\t\t\t\t\t\tif (onCheckoutUpdated) {\n\t\t\t\t\t\t\tonCheckoutUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.created\":\n\t\t\t\t\t\tif (onOrderCreated) {\n\t\t\t\t\t\t\tonOrderCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.paid\":\n\t\t\t\t\t\tif (onOrderPaid) {\n\t\t\t\t\t\t\tonOrderPaid(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.created\":\n\t\t\t\t\t\tif (onSubscriptionCreated) {\n\t\t\t\t\t\t\tonSubscriptionCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.updated\":\n\t\t\t\t\t\tif (onSubscriptionUpdated) {\n\t\t\t\t\t\t\tonSubscriptionUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.active\":\n\t\t\t\t\t\tif (onSubscriptionActive) {\n\t\t\t\t\t\t\tonSubscriptionActive(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.canceled\":\n\t\t\t\t\t\tif (onSubscriptionCanceled) {\n\t\t\t\t\t\t\tonSubscriptionCanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.uncanceled\":\n\t\t\t\t\t\tif (onSubscriptionUncanceled) {\n\t\t\t\t\t\t\tonSubscriptionUncanceled(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subscription.revoked\":\n\t\t\t\t\t\tif (onSubscriptionRevoked) {\n\t\t\t\t\t\t\tonSubscriptionRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.created\":\n\t\t\t\t\t\tif (onProductCreated) {\n\t\t\t\t\t\t\tonProductCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"product.updated\":\n\t\t\t\t\t\tif (onProductUpdated) {\n\t\t\t\t\t\t\tonProductUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"organization.updated\":\n\t\t\t\t\t\tif (onOrganizationUpdated) {\n\t\t\t\t\t\t\tonOrganizationUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.created\":\n\t\t\t\t\t\tif (onBenefitCreated) {\n\t\t\t\t\t\t\tonBenefitCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit.updated\":\n\t\t\t\t\t\tif (onBenefitUpdated) {\n\t\t\t\t\t\t\tonBenefitUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.created\":\n\t\t\t\t\t\tif (onBenefitGrantCreated) {\n\t\t\t\t\t\t\tonBenefitGrantCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.updated\":\n\t\t\t\t\t\tif (onBenefitGrantUpdated) {\n\t\t\t\t\t\t\tonBenefitGrantUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"benefit_grant.revoked\":\n\t\t\t\t\t\tif (onBenefitGrantRevoked) {\n\t\t\t\t\t\t\tonBenefitGrantRevoked(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"order.refunded\":\n\t\t\t\t\t\tif (onOrderRefunded) {\n\t\t\t\t\t\t\tonOrderRefunded(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.created\":\n\t\t\t\t\t\tif (onRefundCreated) {\n\t\t\t\t\t\t\tonRefundCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"refund.updated\":\n\t\t\t\t\t\tif (onRefundUpdated) {\n\t\t\t\t\t\t\tonRefundUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.created\":\n\t\t\t\t\t\tif (onCustomerCreated) {\n\t\t\t\t\t\t\tonCustomerCreated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.updated\":\n\t\t\t\t\t\tif (onCustomerUpdated) {\n\t\t\t\t\t\t\tonCustomerUpdated(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.deleted\":\n\t\t\t\t\t\tif (onCustomerDeleted) {\n\t\t\t\t\t\t\tonCustomerDeleted(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"customer.state_changed\":\n\t\t\t\t\t\tif (onCustomerStateChanged) {\n\t\t\t\t\t\t\tonCustomerStateChanged(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\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(`Polar webhook failed. Error: ${e.message}`);\n\t\t\t\t} else {\n\t\t\t\t\tctx.context.logger.error(`Polar webhook failed. Error: ${e}`);\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\tmessage: \"Webhook error: See server logs for more information.\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn ctx.json({ received: true });\n\t\t},\n\t);\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},\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\tcustomerUpdate: {\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 { BetterAuthPlugin } from \"better-auth\";\nimport { checkout, checkoutWithSlug } from \"./endpoints/checkout\";\nimport { customerPortal } from \"./endpoints/customerPortal\";\nimport { customerState } from \"./endpoints/customerState\";\nimport { webhooks } from \"./endpoints/webhooks\";\nimport { onUserCreate, onUserUpdate } from \"./hooks/customer\";\nimport type { PolarOptions } from \"./types\";\n\nexport const polar = <O extends PolarOptions>(options: O) => {\n\treturn {\n\t\tid: \"polar\",\n\t\tendpoints: {\n\t\t\tpolarCheckout: checkout(options),\n\t\t\tpolarCheckoutWithSlug: checkoutWithSlug(options),\n\t\t\tpolarWebhooks: webhooks(options),\n\t\t\tpolarCustomerPortal: customerPortal(options),\n\t\t\tpolarCustomerState: customerState(options),\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":["checkout","APIError","createAuthEndpoint","APIError","sessionMiddleware","createAuthEndpoint","APIError","createAuthEndpoint","webhooks","APIError"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polar-sh/better-auth",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Polar integration for better-auth",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -30,7 +30,7 @@
30
30
  ],
31
31
  "devDependencies": {
32
32
  "@biomejs/biome": "1.9.4",
33
- "@polar-sh/sdk": "^0.32.11",
33
+ "@polar-sh/sdk": "^0.32.13",
34
34
  "@sindresorhus/tsconfig": "^7.0.0",
35
35
  "@types/node": "^20.0.0",
36
36
  "better-auth": "^1.2.0",
@@ -41,7 +41,7 @@
41
41
  "zod": "^3.24.2"
42
42
  },
43
43
  "peerDependencies": {
44
- "@polar-sh/sdk": "^0.32.11",
44
+ "@polar-sh/sdk": "^0.32.13",
45
45
  "better-auth": "^1.2.0"
46
46
  },
47
47
  "scripts": {