UNPKG

@polar-sh/better-auth

Version:

Polar integration for better-auth

823 lines (814 loc) 35.9 kB
import * as better_auth_client from 'better-auth/client'; import { BetterFetchOption } from 'better-auth/client'; import { PolarEmbedCheckout } from '@polar-sh/checkout/embed'; export { PolarEmbedCheckout } from '@polar-sh/checkout/embed'; import * as better_auth from 'better-auth'; import { User } from 'better-auth'; import { Polar } from '@polar-sh/sdk'; import * as z from 'zod/v4'; import * as _polar_sh_sdk_models_operations_customerportalorderslist_js from '@polar-sh/sdk/models/operations/customerportalorderslist.js'; import * as _polar_sh_sdk_models_operations_customerportalsubscriptionslist_js from '@polar-sh/sdk/models/operations/customerportalsubscriptionslist.js'; import * as _polar_sh_sdk_models_operations_subscriptionslist_js from '@polar-sh/sdk/models/operations/subscriptionslist.js'; import * as _polar_sh_sdk_types_operations_js from '@polar-sh/sdk/types/operations.js'; import * as _polar_sh_sdk_models_operations_customerportalbenefitgrantslist_js from '@polar-sh/sdk/models/operations/customerportalbenefitgrantslist.js'; import * as _polar_sh_sdk_models_components_customerstate_js from '@polar-sh/sdk/models/components/customerstate.js'; import * as _polar_sh_sdk_models_components_eventsingestresponse_js from '@polar-sh/sdk/models/components/eventsingestresponse.js'; import * as _polar_sh_sdk_models_operations_customerportalcustomermeterslist_js from '@polar-sh/sdk/models/operations/customerportalcustomermeterslist.js'; import { WebhookBenefitCreatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitcreatedpayload'; import { WebhookBenefitGrantCreatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitgrantcreatedpayload'; import { WebhookBenefitGrantRevokedPayload } from '@polar-sh/sdk/models/components/webhookbenefitgrantrevokedpayload'; import { WebhookBenefitGrantUpdatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitgrantupdatedpayload'; import { WebhookBenefitUpdatedPayload } from '@polar-sh/sdk/models/components/webhookbenefitupdatedpayload'; import { WebhookCheckoutCreatedPayload } from '@polar-sh/sdk/models/components/webhookcheckoutcreatedpayload'; import { WebhookCheckoutUpdatedPayload } from '@polar-sh/sdk/models/components/webhookcheckoutupdatedpayload'; import { WebhookCustomerCreatedPayload } from '@polar-sh/sdk/models/components/webhookcustomercreatedpayload'; import { WebhookCustomerDeletedPayload } from '@polar-sh/sdk/models/components/webhookcustomerdeletedpayload'; import { WebhookCustomerStateChangedPayload } from '@polar-sh/sdk/models/components/webhookcustomerstatechangedpayload'; import { WebhookCustomerUpdatedPayload } from '@polar-sh/sdk/models/components/webhookcustomerupdatedpayload'; import { WebhookOrderCreatedPayload } from '@polar-sh/sdk/models/components/webhookordercreatedpayload'; import { WebhookOrderPaidPayload } from '@polar-sh/sdk/models/components/webhookorderpaidpayload'; import { WebhookOrderRefundedPayload } from '@polar-sh/sdk/models/components/webhookorderrefundedpayload'; import { WebhookOrderUpdatedPayload } from '@polar-sh/sdk/models/components/webhookorderupdatedpayload'; import { WebhookOrganizationUpdatedPayload } from '@polar-sh/sdk/models/components/webhookorganizationupdatedpayload'; import { WebhookProductCreatedPayload } from '@polar-sh/sdk/models/components/webhookproductcreatedpayload'; import { WebhookProductUpdatedPayload } from '@polar-sh/sdk/models/components/webhookproductupdatedpayload'; import { WebhookRefundCreatedPayload } from '@polar-sh/sdk/models/components/webhookrefundcreatedpayload'; import { WebhookRefundUpdatedPayload } from '@polar-sh/sdk/models/components/webhookrefundupdatedpayload'; import { WebhookSubscriptionActivePayload } from '@polar-sh/sdk/models/components/webhooksubscriptionactivepayload'; import { WebhookSubscriptionCanceledPayload } from '@polar-sh/sdk/models/components/webhooksubscriptioncanceledpayload'; import { WebhookSubscriptionCreatedPayload } from '@polar-sh/sdk/models/components/webhooksubscriptioncreatedpayload'; import { WebhookSubscriptionRevokedPayload } from '@polar-sh/sdk/models/components/webhooksubscriptionrevokedpayload'; import { WebhookSubscriptionUncanceledPayload } from '@polar-sh/sdk/models/components/webhooksubscriptionuncanceledpayload'; import { WebhookSubscriptionUpdatedPayload } from '@polar-sh/sdk/models/components/webhooksubscriptionupdatedpayload'; import { validateEvent } from '@polar-sh/sdk/webhooks'; import * as zod_v4_core from 'zod/v4/core'; interface PortalConfig { returnUrl?: string; /** * Portal theme */ theme?: "light" | "dark"; } declare const portal: ({ returnUrl, theme }?: PortalConfig) => (polar: Polar) => { portal: better_auth.StrictEndpoint<"/customer/portal", { method: ("POST" | "GET")[]; body: z.ZodOptional<z.ZodObject<{ redirect: z.ZodOptional<z.ZodBoolean>; }, z.core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, { url: string; redirect: boolean; }>; state: better_auth.StrictEndpoint<"/customer/state", { method: "GET"; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_models_components_customerstate_js.CustomerState>; benefits: better_auth.StrictEndpoint<"/customer/benefits/list", { method: "GET"; query: z.ZodOptional<z.ZodObject<{ page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; }, z.core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalbenefitgrantslist_js.CustomerPortalBenefitGrantsListResponse, { page: number; }>>; subscriptions: better_auth.StrictEndpoint<"/customer/subscriptions/list", { method: "GET"; query: z.ZodOptional<z.ZodObject<{ referenceId: z.ZodOptional<z.ZodString>; page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; active: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; }, z.core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_subscriptionslist_js.SubscriptionsListResponse, { page: number; }> | _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalsubscriptionslist_js.CustomerPortalSubscriptionsListResponse, { page: number; }>>; orders: better_auth.StrictEndpoint<"/customer/orders/list", { method: "GET"; query: z.ZodOptional<z.ZodObject<{ page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; productBillingType: z.ZodOptional<z.ZodEnum<{ recurring: "recurring"; one_time: "one_time"; }>>; }, z.core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalorderslist_js.CustomerPortalOrdersListResponse, { page: number; }>>; }; interface UsageOptions { /** * Products to use for topping up credits */ creditProducts?: Product[] | (() => Promise<Product[]>); } declare const usage: (_usageOptions?: UsageOptions) => (polar: Polar) => { meters: better_auth.StrictEndpoint<"/usage/meters/list", { method: "GET"; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; query: z.ZodObject<{ page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; }, z.core.$strip>; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalcustomermeterslist_js.CustomerPortalCustomerMetersListResponse, { page: number; }>>; ingestion: better_auth.StrictEndpoint<"/usage/ingest", { method: "POST"; body: z.ZodObject<{ event: z.ZodString; metadata: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>; }, z.core.$strip>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_models_components_eventsingestresponse_js.EventsIngestResponse>; }; interface WebhooksOptions { /** * Webhook Secret */ secret: string; /** * Generic handler for all webhooks */ onPayload?: (payload: ReturnType<typeof validateEvent>) => Promise<void>; /** * Webhook for checkout created */ onCheckoutCreated?: (payload: WebhookCheckoutCreatedPayload) => Promise<void>; /** * Webhook for checkout updated */ onCheckoutUpdated?: (payload: WebhookCheckoutUpdatedPayload) => Promise<void>; /** * Webhook for order created */ onOrderCreated?: (payload: WebhookOrderCreatedPayload) => Promise<void>; /** * Webhook for order refunded */ onOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>; /** * Webhook for order paid */ onOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>; /** * Webhook for order updated */ onOrderUpdated?: (payload: WebhookOrderUpdatedPayload) => Promise<void>; /** * Webhook for refund created */ onRefundCreated?: (payload: WebhookRefundCreatedPayload) => Promise<void>; /** * Webhook for refund updated */ onRefundUpdated?: (payload: WebhookRefundUpdatedPayload) => Promise<void>; /** * Webhook for subscription created */ onSubscriptionCreated?: (payload: WebhookSubscriptionCreatedPayload) => Promise<void>; /** * Webhook for subscription updated */ onSubscriptionUpdated?: (payload: WebhookSubscriptionUpdatedPayload) => Promise<void>; /** * Webhook for subscription active */ onSubscriptionActive?: (payload: WebhookSubscriptionActivePayload) => Promise<void>; /** * Webhook for subscription canceled */ onSubscriptionCanceled?: (payload: WebhookSubscriptionCanceledPayload) => Promise<void>; /** * Webhook for subscription revoked */ onSubscriptionRevoked?: (payload: WebhookSubscriptionRevokedPayload) => Promise<void>; /** * Webhook for subscription uncanceled */ onSubscriptionUncanceled?: (payload: WebhookSubscriptionUncanceledPayload) => Promise<void>; /** * Webhook for product created */ onProductCreated?: (payload: WebhookProductCreatedPayload) => Promise<void>; /** * Webhook for product updated */ onProductUpdated?: (payload: WebhookProductUpdatedPayload) => Promise<void>; /** * Webhook for organization updated */ onOrganizationUpdated?: (payload: WebhookOrganizationUpdatedPayload) => Promise<void>; /** * Webhook for benefit created */ onBenefitCreated?: (payload: WebhookBenefitCreatedPayload) => Promise<void>; /** * Webhook for benefit updated */ onBenefitUpdated?: (payload: WebhookBenefitUpdatedPayload) => Promise<void>; /** * Webhook for benefit grant created */ onBenefitGrantCreated?: (payload: WebhookBenefitGrantCreatedPayload) => Promise<void>; /** * Webhook for benefit grant updated */ onBenefitGrantUpdated?: (payload: WebhookBenefitGrantUpdatedPayload) => Promise<void>; /** * Webhook for benefit grant revoked */ onBenefitGrantRevoked?: (payload: WebhookBenefitGrantRevokedPayload) => Promise<void>; /** * Webhook for customer created */ onCustomerCreated?: (payload: WebhookCustomerCreatedPayload) => Promise<void>; /** * Webhook for customer updated */ onCustomerUpdated?: (payload: WebhookCustomerUpdatedPayload) => Promise<void>; /** * Webhook for customer deleted */ onCustomerDeleted?: (payload: WebhookCustomerDeletedPayload) => Promise<void>; /** * Webhook for customer state changed */ onCustomerStateChanged?: (payload: WebhookCustomerStateChangedPayload) => Promise<void>; } declare const webhooks: (options: WebhooksOptions) => (_polar: Polar) => { polarWebhooks: better_auth.StrictEndpoint<"/polar/webhooks", { method: "POST"; metadata: { isAction: false; }; cloneRequest: true; }, { received: boolean; }>; }; type Product = { /** * Product Id from Polar Product */ productId: string; /** * Easily identifiable slug for the product */ slug: string; }; type PolarPlugin = ReturnType<typeof checkout> | ReturnType<typeof usage> | ReturnType<typeof portal> | ReturnType<typeof webhooks>; type PolarPlugins = [PolarPlugin, ...PolarPlugin[]]; interface PolarOptions { /** * Polar Client */ client: Polar; /** * Enable customer creation when a user signs up */ createCustomerOnSignUp?: boolean; /** * A custom function to get the customer create * params * @param data - data containing user and session * @returns */ getCustomerCreateParams?: (data: { user: Partial<User>; }, request?: Request) => Promise<{ metadata?: Record<string, string | number | boolean>; }>; /** * Use Polar plugins */ use: PolarPlugins; } interface CheckoutOptions { /** * Optional list of slug -> productId mappings for easy slug checkouts */ products?: Product[] | (() => Promise<Product[]>); /** * Checkout Success URL */ successUrl?: string; /** * Checkout Return URL */ returnUrl?: string; /** * Only allow authenticated customers to checkout */ authenticatedUsersOnly?: boolean; /** * Checkout theme */ theme?: "light" | "dark"; } declare const CheckoutParams: z.ZodObject<{ products: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodString]>>; slug: z.ZodOptional<z.ZodString>; referenceId: z.ZodOptional<z.ZodString>; customFieldData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>; metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>; allowDiscountCodes: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; discountId: z.ZodOptional<z.ZodString>; redirect: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; embedOrigin: z.ZodOptional<z.ZodURL>; successUrl: z.ZodOptional<z.ZodString>; returnUrl: z.ZodOptional<z.ZodString>; allowTrial: z.ZodOptional<z.ZodBoolean>; trialInterval: z.ZodOptional<z.ZodEnum<{ day: "day"; week: "week"; month: "month"; year: "year"; }>>; trialIntervalCount: z.ZodOptional<z.ZodNumber>; }, z.core.$strip>; type CheckoutParams = z.infer<typeof CheckoutParams>; declare const checkout: (checkoutOptions?: CheckoutOptions) => (polar: Polar) => { checkout: better_auth.StrictEndpoint<"/checkout", { method: "POST"; body: z.ZodObject<{ products: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodString]>>; slug: z.ZodOptional<z.ZodString>; referenceId: z.ZodOptional<z.ZodString>; customFieldData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>; metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>; allowDiscountCodes: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; discountId: z.ZodOptional<z.ZodString>; redirect: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; embedOrigin: z.ZodOptional<z.ZodURL>; successUrl: z.ZodOptional<z.ZodString>; returnUrl: z.ZodOptional<z.ZodString>; allowTrial: z.ZodOptional<z.ZodBoolean>; trialInterval: z.ZodOptional<z.ZodEnum<{ day: "day"; week: "week"; month: "month"; year: "year"; }>>; trialIntervalCount: z.ZodOptional<z.ZodNumber>; }, z.core.$strip>; }, { url: string; redirect: boolean; }>; }; declare const polar: <O extends PolarOptions>(options: O) => { id: "polar"; endpoints: { checkout: better_auth.StrictEndpoint<"/checkout", { method: "POST"; body: z.ZodObject<{ products: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodString]>>; slug: z.ZodOptional<z.ZodString>; referenceId: z.ZodOptional<z.ZodString>; customFieldData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>; metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>; allowDiscountCodes: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; discountId: z.ZodOptional<z.ZodString>; redirect: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; embedOrigin: z.ZodOptional<z.ZodURL>; successUrl: z.ZodOptional<z.ZodString>; returnUrl: z.ZodOptional<z.ZodString>; allowTrial: z.ZodOptional<z.ZodBoolean>; trialInterval: z.ZodOptional<z.ZodEnum<{ day: "day"; week: "week"; month: "month"; year: "year"; }>>; trialIntervalCount: z.ZodOptional<z.ZodNumber>; }, zod_v4_core.$strip>; }, { url: string; redirect: boolean; }>; } | { meters: better_auth.StrictEndpoint<"/usage/meters/list", { method: "GET"; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; query: z.ZodObject<{ page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; }, zod_v4_core.$strip>; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalcustomermeterslist_js.CustomerPortalCustomerMetersListResponse, { page: number; }>>; ingestion: better_auth.StrictEndpoint<"/usage/ingest", { method: "POST"; body: z.ZodObject<{ event: z.ZodString; metadata: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>; }, zod_v4_core.$strip>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_models_components_eventsingestresponse_js.EventsIngestResponse>; } | { portal: better_auth.StrictEndpoint<"/customer/portal", { method: ("POST" | "GET")[]; body: z.ZodOptional<z.ZodObject<{ redirect: z.ZodOptional<z.ZodBoolean>; }, zod_v4_core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, { url: string; redirect: boolean; }>; state: better_auth.StrictEndpoint<"/customer/state", { method: "GET"; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_models_components_customerstate_js.CustomerState>; benefits: better_auth.StrictEndpoint<"/customer/benefits/list", { method: "GET"; query: z.ZodOptional<z.ZodObject<{ page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; }, zod_v4_core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalbenefitgrantslist_js.CustomerPortalBenefitGrantsListResponse, { page: number; }>>; subscriptions: better_auth.StrictEndpoint<"/customer/subscriptions/list", { method: "GET"; query: z.ZodOptional<z.ZodObject<{ referenceId: z.ZodOptional<z.ZodString>; page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; active: z.ZodOptional<z.ZodCoercedBoolean<unknown>>; }, zod_v4_core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_subscriptionslist_js.SubscriptionsListResponse, { page: number; }> | _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalsubscriptionslist_js.CustomerPortalSubscriptionsListResponse, { page: number; }>>; orders: better_auth.StrictEndpoint<"/customer/orders/list", { method: "GET"; query: z.ZodOptional<z.ZodObject<{ page: z.ZodOptional<z.ZodCoercedNumber<unknown>>; limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>; productBillingType: z.ZodOptional<z.ZodEnum<{ recurring: "recurring"; one_time: "one_time"; }>>; }, zod_v4_core.$strip>>; use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{ session: { session: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; userId: string; expiresAt: Date; token: string; ipAddress?: string | null | undefined; userAgent?: string | null | undefined; }; user: Record<string, any> & { id: string; createdAt: Date; updatedAt: Date; email: string; emailVerified: boolean; name: string; image?: string | null | undefined; }; }; }>)[]; }, _polar_sh_sdk_types_operations_js.PageIterator<_polar_sh_sdk_models_operations_customerportalorderslist_js.CustomerPortalOrdersListResponse, { page: number; }>>; } | { polarWebhooks: better_auth.StrictEndpoint<"/polar/webhooks", { method: "POST"; metadata: { isAction: false; }; cloneRequest: true; }, { received: boolean; }>; }; init(): { options: { databaseHooks: { user: { create: { before: (user: Partial<better_auth.User>, context: better_auth.GenericEndpointContext | null) => Promise<void>; after: (user: better_auth.User, context: better_auth.GenericEndpointContext | null) => Promise<void>; }; update: { after: (user: better_auth.User, context: better_auth.GenericEndpointContext | null) => Promise<void>; }; delete: { after: (user: better_auth.User, context: better_auth.GenericEndpointContext | null) => Promise<void>; }; }; }; }; }; }; declare const polarClient: () => { id: "polar-client"; $InferServerPlugin: ReturnType<typeof polar>; getActions: ($fetch: better_auth_client.BetterFetch) => { checkoutEmbed: (data: Omit<CheckoutParams, "redirect" | "embedOrigin">, fetchOptions?: BetterFetchOption) => Promise<PolarEmbedCheckout>; }; }; export { type CheckoutOptions as C, type PortalConfig as P, type UsageOptions as U, type WebhooksOptions as W, portal as a, CheckoutParams as b, checkout as c, polar as p, polarClient, usage as u, webhooks as w };