将此提示词复制到 AI 编程助手中,让它将适配器添加到你的项目中。如需同时向代理提供 Dodo Payments 文档和技能,请安装 Agent Plugin。
You are a skilled developer helping to integrate the @dodopayments/better-auth adapter into a typescript web application with better-auth. This adapter enables seamless payment processing through Dodo Payments with automatic customer management, checkout flows, and webhook handling.STAGE 1: BASIC SETUPThis stage covers the foundational setup needed before implementing any plugins. Complete this stage first.STEP 1: InstallationInstall the required dependencies:npm install @dodopayments/better-auth dodopayments better-auth zodSTEP 2: Environment Variables SetupYou will need to complete these external setup tasks. I will provide you with a TODO list for the actions you need to take outside of the code:TODO LIST FOR USER:1. Generate Dodo Payments API Key: - Go to your Dodo Payments Dashboard > Developer > API Keys - Create a new API key (or use existing) - Copy the API key value - Set environment variable: DODO_PAYMENTS_API_KEY=your_api_key_here2. Generate Better Auth Secret: - Generate a random secret key (32+ characters) - Set environment variable: BETTER_AUTH_SECRET=your_better_auth_secret_here3. Set Application URL: - For development: BETTER_AUTH_URL=http://localhost:3000 - For production: BETTER_AUTH_URL=https://your-domain.com4. Webhook Secret (only if implementing webhooks plugin): - This will be provided after you specify your domain name in Stage 2 - Set environment variable: DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_hereAdd these environment variables to your .env file:DODO_PAYMENTS_API_KEY=your_api_key_hereDODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_hereBETTER_AUTH_URL=http://localhost:3000BETTER_AUTH_SECRET=your_better_auth_secret_hereSTEP 3: Server ConfigurationCreate or update your better-auth setup file (src/lib/auth.ts):import { betterAuth } from "better-auth";import { dodopayments } from "@dodopayments/better-auth";import DodoPayments from "dodopayments";// Create DodoPayments clientexport const dodoPayments = new DodoPayments({ bearerToken: process.env.DODO_PAYMENTS_API_KEY!, environment: "test_mode", // Change to "live_mode" for production});// Configure better-auth with dodopayments adapterexport const auth = betterAuth({ plugins: [ dodopayments({ client: dodoPayments, createCustomerOnSignUp: true, // Auto-create customers on signup use: [], // We'll add plugins here in Stage 2 // Optional: attach metadata or phone_number to DodoPayments customer records // getCustomerParams: (user) => ({ // metadata: { userId: user.id }, // phone_number: user.phoneNumber ?? null, // }), }), ],});The plugin adds a dodoCustomerId field to the Better Auth user table. Update the database schema with the Better Auth CLI after adding the plugin.STEP 4: Client ConfigurationCreate or update your auth client file (src/lib/auth-client.ts):import { createAuthClient } from "better-auth/react";import { dodopaymentsClient } from "@dodopayments/better-auth/client";export const authClient = createAuthClient({ baseURL: process.env.BETTER_AUTH_URL || "http://localhost:3000", plugins: [dodopaymentsClient()],});STAGE 2: PLUGIN IMPLEMENTATIONAfter completing Stage 1, you can selectively implement any of these plugins based on your needs. Each plugin is independent and can be added or removed as needed.PLUGIN SELECTION:Before implementing any plugins, ask the user which plugins they want to implement:"Which plugins would you like to implement? You can choose any combination of:1. CHECKOUT - Enables secure payment processing and checkout flows2. PORTAL - Provides customer self-service portal for subscriptions and payments3. USAGE - Tracks metered events and exposes usage history for billing beyond included allowances4. WEBHOOKS - Handles real-time payment events from Dodo PaymentsPlease specify which plugins you want (e.g., 'checkout and usage', 'all four', 'just portal', etc.)"If the user doesn't respond or you cannot prompt the user, implement all four plugins by default.Based on the user's selection, implement only the requested plugins from the sections below:CHECKOUT PLUGINPurpose: Enables secure payment processing using Checkout Sessions (preferred) with product slug mapping. A legacy checkout endpoint is also exposed for backward compatibility but is deprecated.SETUP TODO LIST FOR USER:1. Create products in Dodo Payments Dashboard: - Go to Dodo Payments Dashboard > Products - Create your products (e.g., subscription plans, one-time purchases) - Copy each product ID (starts with "pdt_") - Note down the product names for creating friendly slugs2. Plan your checkout URLs: - Decide on your success URL (e.g., "/dashboard/success", "/thank-you") - Ensure this URL exists in your applicationConfiguration:Add checkout to your imports in src/lib/auth.ts:import { dodopayments, checkout } from "@dodopayments/better-auth";Add checkout plugin to the use array in your dodopayments configuration:use: [ checkout({ products: [ { productId: "pdt_xxxxxxxxxxxxxxxxxxxxx", // Your actual product ID from Dodo Payments slug: "premium-plan", // Friendly slug for checkout }, // Add more products as needed ], successUrl: "/dashboard/success", // Your success page URL authenticatedUsersOnly: true, // Require login for checkout }),],Usage Example (Preferred - Checkout Sessions):const { data: session, error } = await authClient.dodopayments.checkoutSession({ // Use the slug from your configuration OR provide product_cart directly slug: "premium-plan", // product_cart: [{ product_id: "pdt_xxxxxxxxxxxxxxxxxxxxx", quantity: 1 }], referenceId: "order_123", // Optional reference});if (session) { window.location.href = session.url;}Deprecated (Legacy Checkout):const { data: checkout, error } = await authClient.dodopayments.checkout({ slug: "premium-plan", customer: { email: "customer@example.com", name: "John Doe", }, billing: { city: "San Francisco", country: "US", state: "CA", street: "123 Market St", zipcode: "94103", },});if (checkout) { window.location.href = checkout.url;}Options:- products: Array of products or async function returning products- successUrl: URL to redirect after successful payment- authenticatedUsersOnly: Require user authentication (default: false)PORTAL PLUGINPurpose: Provides customer self-service capabilities for managing subscriptions and viewing payment history.Configuration:Add portal to your imports in src/lib/auth.ts:import { dodopayments, portal } from "@dodopayments/better-auth";Add portal plugin to the use array in your dodopayments configuration:use: [ portal(),],Usage Examples:// Access customer portalconst { data: customerPortal, error: portalError } = await authClient.dodopayments.customer.portal();if (customerPortal && customerPortal.redirect) { window.location.href = customerPortal.url;}// List customer subscriptionsconst { data: subscriptions, error: subscriptionsError } = await authClient.dodopayments.customer.subscriptions.list({ query: { limit: 10, page: 1, status: "active", },});// List customer paymentsconst { data: payments, error: paymentsError } = await authClient.dodopayments.customer.payments.list({ query: { limit: 10, page: 1, status: "succeeded", },});Note: All portal methods require user authentication and a verified email address.USAGE PLUGIN (METERED BILLING)Purpose: Records metered events (like API requests) for usage-based plans and surfaces recent usage history per customer.SETUP TODO LIST FOR USER:1. Create or identify usage meters in the Dodo Payments Dashboard: - Dashboard > Products > Meters - Copy the meter IDs (prefixed with mtr_) used by your usage-based plans2. Decide which event names and metadata you will capture (e.g., api_request, route, method)3. Ensure BetterAuth users verify their email addresses (the plugin enforces this before ingesting usage)Configuration:Add usage to your imports in src/lib/auth.ts: import { dodopayments, usage } from "@dodopayments/better-auth";Add the plugin to the use array: use: [ usage(), ],Usage Examples: // Record a metered event for the signed-in customer const { error: ingestError } = await authClient.dodopayments.usage.ingest({ event_id: crypto.randomUUID(), event_name: "api_request", metadata: { route: "/reports", method: "GET", }, // Optional Date or ISO string; defaults to now timestamp: new Date(), }); if (ingestError) { console.error("Failed to record usage", ingestError); } // List recent usage for the current customer const { data: usage, error: usageError } = await authClient.dodopayments.usage.meters.list({ query: { page_size: 20, meter_id: "mtr_yourMeterId", // optional filter }, }); if (usage?.items) { usage.items.forEach((event) => { console.log(event.event_name, event.timestamp, event.metadata); }); }Notes: The plugin exposes authClient.dodopayments.usage.ingest and authClient.dodopayments.usage.meters.list. Timestamps older than one hour or more than five minutes in the future are rejected. If you do not pass meter_id when listing usage, all of the customer's usage events are returned. With meter_id, only the events that match that meter are returned.WEBHOOKS PLUGINPurpose: Handles real-time payment events from Dodo Payments with secure signature verification.BEFORE CONFIGURATION - Setup Webhook URL:First, I need your domain name to generate the webhook URL and provide you with setup instructions.STEP 1: Domain Name InputWhat is your domain name? Please provide:- For production: your domain name (e.g., "myapp.com", "api.mycompany.com")- For staging: your staging domain (e.g., "staging.myapp.com")- For development: use "localhost:3000" (or your local port)STEP 2: After receiving your domain name, I will:- Generate your webhook URL: https://[YOUR-DOMAIN]/api/auth/dodopayments/webhooks- Provide you with a TODO list for webhook setup in Dodo Payments dashboard- Give you the exact environment variable setup instructionsWEBHOOK SETUP TODO LIST (will be provided after domain input):1. Configure webhook in Dodo Payments Dashboard: - Go to Dodo Payments Dashboard > Developer > Webhooks - Click "Add Webhook" or "Create Webhook" - Enter webhook URL: https://[YOUR-DOMAIN]/api/auth/dodopayments/webhooks - Select events you want to receive (or select all) - Copy the generated webhook secret2. Set webhook secret in your environment: - For production: Set DODO_PAYMENTS_WEBHOOK_KEY in your hosting provider environment - For staging: Set DODO_PAYMENTS_WEBHOOK_KEY in your staging environment - For development: Add DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_here to your .env file3. Deploy your application with the webhook secret configuredSTEP 3: Add webhooks to your imports in src/lib/auth.ts:import { dodopayments, webhooks } from "@dodopayments/better-auth";STEP 4: Add webhooks plugin to the use array in your dodopayments configuration:use: [ webhooks({ webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY!, // Generic handler for all webhook events onPayload: async (payload) => { console.log("Received webhook:", payload.type); }, // Payment event handlers onPaymentSucceeded: async (payload) => { console.log("Payment succeeded:", payload); }, onPaymentFailed: async (payload) => { console.log("Payment failed:", payload); }, onPaymentProcessing: async (payload) => { console.log("Payment processing:", payload); }, onPaymentCancelled: async (payload) => { console.log("Payment cancelled:", payload); }, // Refund event handlers onRefundSucceeded: async (payload) => { console.log("Refund succeeded:", payload); }, onRefundFailed: async (payload) => { console.log("Refund failed:", payload); }, // Dispute event handlers onDisputeOpened: async (payload) => { console.log("Dispute opened:", payload); }, onDisputeExpired: async (payload) => { console.log("Dispute expired:", payload); }, onDisputeAccepted: async (payload) => { console.log("Dispute accepted:", payload); }, onDisputeCancelled: async (payload) => { console.log("Dispute cancelled:", payload); }, onDisputeChallenged: async (payload) => { console.log("Dispute challenged:", payload); }, onDisputeWon: async (payload) => { console.log("Dispute won:", payload); }, onDisputeLost: async (payload) => { console.log("Dispute lost:", payload); }, // Subscription event handlers onSubscriptionActive: async (payload) => { console.log("Subscription active:", payload); }, onSubscriptionOnHold: async (payload) => { console.log("Subscription on hold:", payload); }, onSubscriptionRenewed: async (payload) => { console.log("Subscription renewed:", payload); }, onSubscriptionPlanChanged: async (payload) => { console.log("Subscription plan changed:", payload); }, onSubscriptionCancelled: async (payload) => { console.log("Subscription cancelled:", payload); }, onSubscriptionFailed: async (payload) => { console.log("Subscription failed:", payload); }, onSubscriptionExpired: async (payload) => { console.log("Subscription expired:", payload); }, onSubscriptionUpdated: async (payload) => { console.log("Subscription updated:", payload); }, // License key event handlers onLicenseKeyCreated: async (payload) => { console.log("License key created:", payload); }, // Abandoned checkout event handlers onAbandonedCheckoutDetected: async (payload) => { console.log("Abandoned checkout detected:", payload); }, onAbandonedCheckoutRecovered: async (payload) => { console.log("Abandoned checkout recovered:", payload); }, // Dunning event handlers onDunningStarted: async (payload) => { console.log("Dunning started:", payload); }, onDunningRecovered: async (payload) => { console.log("Dunning recovered:", payload); }, // Credit event handlers onCreditAdded: async (payload) => { console.log("Credit added:", payload); }, onCreditDeducted: async (payload) => { console.log("Credit deducted:", payload); }, onCreditExpired: async (payload) => { console.log("Credit expired:", payload); }, onCreditRolledOver: async (payload) => { console.log("Credit rolled over:", payload); }, onCreditRolloverForfeited: async (payload) => { console.log("Credit rollover forfeited:", payload); }, onCreditOverageCharged: async (payload) => { console.log("Credit overage charged:", payload); }, onCreditManualAdjustment: async (payload) => { console.log("Credit manual adjustment:", payload); }, onCreditBalanceLow: async (payload) => { console.log("Credit balance low:", payload); }, }),],Supported Webhook Event Handlers:- onPayload: Generic handler for all webhook events- onPaymentSucceeded: Payment completed successfully- onPaymentFailed: Payment failed- onPaymentProcessing: Payment is being processed- onPaymentCancelled: Payment was cancelled- onRefundSucceeded: Refund completed successfully- onRefundFailed: Refund failed- onDisputeOpened: Dispute was opened- onDisputeExpired: Dispute expired- onDisputeAccepted: Dispute was accepted- onDisputeCancelled: Dispute was cancelled- onDisputeChallenged: Dispute was challenged- onDisputeWon: Dispute was won- onDisputeLost: Dispute was lost- onSubscriptionActive: Subscription became active- onSubscriptionOnHold: Subscription was put on hold- onSubscriptionRenewed: Subscription was renewed- onSubscriptionPlanChanged: Subscription plan was changed- onSubscriptionCancelled: Subscription was cancelled- onSubscriptionFailed: Subscription failed- onSubscriptionExpired: Subscription expired- onSubscriptionUpdated: Subscription was updated- onSubscriptionPaused: Subscription was paused- onSubscriptionUnpaused: Subscription was unpaused- onSubscriptionUpdatePaymentMethod: Subscription payment method was updated- onLicenseKeyCreated: License key was created- onAbandonedCheckoutDetected: Abandoned checkout was detected- onAbandonedCheckoutRecovered: Abandoned checkout was recovered- onDunningStarted: Dunning process started- onDunningRecovered: Dunning process recovered- onCreditAdded: Credits were added- onCreditDeducted: Credits were deducted- onCreditExpired: Credits expired- onCreditRolledOver: Credits were rolled over- onCreditRolloverForfeited: Credit rollover was forfeited- onCreditOverageCharged: Credit overage was charged- onCreditOverageReset: Credit overage was reset- onCreditManualAdjustment: Manual credit adjustment was made- onCreditBalanceLow: Credit balance is low- onEntitlementGrantCreated: Entitlement grant was created- onEntitlementGrantDelivered: Entitlement grant was delivered- onEntitlementGrantFailed: Entitlement grant failed- onEntitlementGrantRevoked: Entitlement grant was revoked- onPayoutCreated: Payout was created- onPayoutOnHold: Payout was put on hold- onPayoutInProgress: Payout is in progress- onPayoutFailed: Payout failed- onPayoutSuccess: Payout succeededCOMBINING SELECTED PLUGINS:After implementing the user's selected plugins, update your src/lib/auth.ts file to include all chosen plugins in the imports and use array:Example for all four plugins: import { dodopayments, checkout, portal, usage, webhooks, } from "@dodopayments/better-auth"; use: [ checkout({ // checkout configuration }), portal(), usage(), webhooks({ // webhook configuration }), ];Example for checkout + portal + usage: import { dodopayments, checkout, portal, usage } from "@dodopayments/better-auth"; use: [ checkout({ // checkout configuration }), portal(), usage(), ];Example for just webhooks: import { dodopayments, webhooks } from "@dodopayments/better-auth"; use: [ webhooks({ // webhook configuration }), ];IMPORTANT NOTES:1. Complete Stage 1 before implementing any plugins2. Ask the user which plugins they want to implement, or implement all four if no response3. Only implement the plugins the user specifically requested4. ALWAYS provide TODO lists for external actions the user needs to complete: - API key generation and environment variable setup - Product creation in Dodo Payments dashboard (for checkout plugin) - Usage meter configuration and API event definition (for usage plugin) - Webhook setup in Dodo Payments dashboard (for webhooks plugin) - Domain name collection for webhook URL generation5. For webhook plugin: Ask for the user's domain name and generate the exact webhook URL: https://[domain]/api/auth/dodopayments/webhooks6. The usage plugin requires the BetterAuth session user to exist and have a verified email before ingesting or listing usage7. All client methods return { data, error } objects for proper error handling8. Use test_mode for development and live_mode for production9. The webhook endpoint is automatically created and secured with signature verification (if webhooks plugin is selected)10. Customer portal and subscription listing require user authentication and a verified email (if portal plugin is selected)11. Handle errors appropriately and test webhook functionality in development before going live12. Present all external setup tasks as clear TODO lists with specific environment variable names13. Use getCustomerParams to attach metadata or phone_number to DodoPayments customer records — the function receives the BetterAuth User object and runs on every customer creation and update
最后修改于 2026年9月26日
此页面对您有帮助吗?
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Dodo Payments Documentation","description":"Documentation for Dodo Payments — the all-in-one payments, billing, and merchant of record platform for SaaS, AI, and digital products.","colors":{"primary":"#779812","light":"#C6FE1E","dark":"#166534"},"logo":{"light":"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/light.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=23f7a052f7ecb9d6570b7c95ee359a97","dark":"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/dark.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=cd6c20238a54526436f21c43fee51b26"},"favicon":"https://mintcdn.com/dodopayments/doYQc9oUE-WNz0cs/favicon.svg?fit=max\u0026auto=format\u0026n=doYQc9oUE-WNz0cs\u0026q=85\u0026s=271c6cc8ce7d6bf4d7f2b9cca029e004","background":{"color":{"light":"#FFFFFF","dark":"#0D0D0D"}},"navbar":{"links":[{"icon":"link","href":"https://docs.dodopayments.com/llms-full.txt","label":"llms-full.txt"},{"icon":"discord","href":"https://discord.gg/bYqAp4ayYh","label":"Community"},{"icon":"house","href":"https://app.dodopayments.com/","label":"Dashboard"}]},"footer":{"socials":{"x":"https://x.com/dodopayments","linkedin":"https://linkedin.com/company/dodopayments","website":"https://dodopayments.com","discord":"https://discord.gg/bYqAp4ayYh","github":"https://github.com/dodopayments","instagram":"https://www.instagram.com/dodo.payments","facebook":"https://www.facebook.com/profile.php?id=61565515607280"}},"seo":{"metatags":{"og:site_name":"Dodo Payments Documentation","twitter:card":"summary_large_image"},"indexing":"navigable"},"fonts":{"heading":{"family":"ApfelGrotezk","weight":400,"source":"fonts/ApfelGrotezk-Regular.woff2","format":"woff2"},"body":{"family":"Inter","weight":400,"source":"fonts/Inter-Variable.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","cursor"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":"introduction"},{"language":"es","href":"es/introduction"},{"language":"ar","href":"ar/introduction"},{"language":"fr","href":"fr/introduction"},{"language":"de","href":"de/introduction"},{"language":"id","href":"id/introduction"},{"language":"ja","href":"ja/introduction"},{"language":"ko","href":"ko/introduction"},{"language":"pt-BR","href":"pt-BR/introduction"},{"language":"vi","href":"vi/introduction"},{"language":"cn","href":"cn/introduction"},{"language":"hi","href":"hi/introduction"},{"language":"it","href":"it/introduction"},{"language":"sv","href":"sv/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dodopayments","hasAudioNarration":false,"actualSubdomain":"dodopayments","customDomains":["docs.dodopayments.com"],"gitSource":{"type":"github","owner":"dodopayments","repo":"dodo-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af61516aad23a11c9aa58ca","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"en","tag":"API Reference","count":181},{"language":"en","tag":"Docs","count":178},{"language":"ar","tag":"Docs","count":153},{"language":"cn","tag":"Docs","count":153},{"language":"de","tag":"Docs","count":153},{"language":"es","tag":"Docs","count":153},{"language":"fr","tag":"Docs","count":153},{"language":"hi","tag":"Docs","count":153},{"language":"id","tag":"Docs","count":153},{"language":"it","tag":"Docs","count":153},{"language":"ja","tag":"Docs","count":153},{"language":"ko","tag":"Docs","count":153},{"language":"pt-BR","tag":"Docs","count":153},{"language":"sv","tag":"Docs","count":153},{"language":"vi","tag":"Docs","count":153},{"language":"ar","tag":"API Reference","count":151},{"language":"cn","tag":"API Reference","count":151},{"language":"de","tag":"API Reference","count":151},{"language":"es","tag":"API Reference","count":151},{"language":"fr","tag":"API Reference","count":151},{"language":"hi","tag":"API Reference","count":151},{"language":"id","tag":"API Reference","count":151},{"language":"it","tag":"API Reference","count":151},{"language":"ja","tag":"API Reference","count":151},{"language":"ko","tag":"API Reference","count":151},{"language":"pt-BR","tag":"API Reference","count":151},{"language":"sv","tag":"API Reference","count":151},{"language":"vi","tag":"API Reference","count":151},{"language":"en","tag":"Features","count":87},{"language":"ar","tag":"Features","count":81},{"language":"cn","tag":"Features","count":81},{"language":"de","tag":"Features","count":81},{"language":"es","tag":"Features","count":81},{"language":"fr","tag":"Features","count":81},{"language":"hi","tag":"Features","count":81},{"language":"id","tag":"Features","count":81},{"language":"it","tag":"Features","count":81},{"language":"ja","tag":"Features","count":81},{"language":"ko","tag":"Features","count":81},{"language":"pt-BR","tag":"Features","count":81},{"language":"sv","tag":"Features","count":81},{"language":"vi","tag":"Features","count":81},{"language":"en","tag":"Integrate","count":75},{"language":"en","tag":"Changelog","count":66},{"language":"ar","tag":"Changelog","count":65},{"language":"cn","tag":"Changelog","count":65},{"language":"de","tag":"Changelog","count":65},{"language":"es","tag":"Changelog","count":65},{"language":"fr","tag":"Changelog","count":65},{"language":"hi","tag":"Changelog","count":65},{"language":"id","tag":"Changelog","count":65},{"language":"it","tag":"Changelog","count":65},{"language":"ja","tag":"Changelog","count":65},{"language":"ko","tag":"Changelog","count":65},{"language":"pt-BR","tag":"Changelog","count":65},{"language":"sv","tag":"Changelog","count":65},{"language":"vi","tag":"Changelog","count":65},{"language":"ar","tag":"Integrate","count":59},{"language":"cn","tag":"Integrate","count":59},{"language":"de","tag":"Integrate","count":59},{"language":"es","tag":"Integrate","count":59},{"language":"fr","tag":"Integrate","count":59},{"language":"hi","tag":"Integrate","count":59},{"language":"id","tag":"Integrate","count":59},{"language":"it","tag":"Integrate","count":59},{"language":"ja","tag":"Integrate","count":59},{"language":"ko","tag":"Integrate","count":59},{"language":"pt-BR","tag":"Integrate","count":59},{"language":"sv","tag":"Integrate","count":59},{"language":"vi","tag":"Integrate","count":59},{"language":"en","tag":"External Integrations","count":33},{"language":"ar","tag":"External Integrations","count":30},{"language":"cn","tag":"External Integrations","count":30},{"language":"de","tag":"External Integrations","count":30},{"language":"es","tag":"External Integrations","count":30},{"language":"fr","tag":"External Integrations","count":30},{"language":"hi","tag":"External Integrations","count":30},{"language":"id","tag":"External Integrations","count":30},{"language":"it","tag":"External Integrations","count":30},{"language":"ja","tag":"External Integrations","count":30},{"language":"ko","tag":"External Integrations","count":30},{"language":"pt-BR","tag":"External Integrations","count":30},{"language":"sv","tag":"External Integrations","count":30},{"language":"vi","tag":"External Integrations","count":30},{"language":"en","tag":"Webhooks","count":24},{"language":"ar","tag":"Webhooks","count":23},{"language":"cn","tag":"Webhooks","count":23},{"language":"de","tag":"Webhooks","count":23},{"language":"es","tag":"Webhooks","count":23},{"language":"fr","tag":"Webhooks","count":23},{"language":"hi","tag":"Webhooks","count":23},{"language":"id","tag":"Webhooks","count":23},{"language":"it","tag":"Webhooks","count":23},{"language":"ja","tag":"Webhooks","count":23},{"language":"ko","tag":"Webhooks","count":23},{"language":"pt-BR","tag":"Webhooks","count":23},{"language":"sv","tag":"Webhooks","count":23},{"language":"vi","tag":"Webhooks","count":23},{"language":"en","tag":"Guides","count":22},{"language":"ar","tag":"Guides","count":22},{"language":"cn","tag":"Guides","count":22},{"language":"de","tag":"Guides","count":22},{"language":"es","tag":"Guides","count":22},{"language":"fr","tag":"Guides","count":22},{"language":"hi","tag":"Guides","count":22},{"language":"id","tag":"Guides","count":22},{"language":"it","tag":"Guides","count":22},{"language":"ja","tag":"Guides","count":22},{"language":"ko","tag":"Guides","count":22},{"language":"pt-BR","tag":"Guides","count":22},{"language":"sv","tag":"Guides","count":22},{"language":"vi","tag":"Guides","count":22},{"language":"en","tag":"Entitlements","count":20},{"language":"ar","tag":"Entitlements","count":20},{"language":"cn","tag":"Entitlements","count":20},{"language":"de","tag":"Entitlements","count":20},{"language":"es","tag":"Entitlements","count":20},{"language":"fr","tag":"Entitlements","count":20},{"language":"hi","tag":"Entitlements","count":20},{"language":"id","tag":"Entitlements","count":20},{"language":"it","tag":"Entitlements","count":20},{"language":"ja","tag":"Entitlements","count":20},{"language":"ko","tag":"Entitlements","count":20},{"language":"pt-BR","tag":"Entitlements","count":20},{"language":"sv","tag":"Entitlements","count":20},{"language":"vi","tag":"Entitlements","count":20},{"language":"en","tag":"Invoices","count":17},{"language":"ar","tag":"Customers","count":16},{"language":"cn","tag":"Customers","count":16},{"language":"de","tag":"Customers","count":16},{"language":"es","tag":"Customers","count":16},{"language":"fr","tag":"Customers","count":16},{"language":"hi","tag":"Customers","count":16},{"language":"id","tag":"Customers","count":16},{"language":"it","tag":"Customers","count":16},{"language":"ja","tag":"Customers","count":16},{"language":"ko","tag":"Customers","count":16},{"language":"pt-BR","tag":"Customers","count":16},{"language":"sv","tag":"Customers","count":16},{"language":"vi","tag":"Customers","count":16}]},"assistantConfig":{"deflection":{"enabled":false,"email":"support@dodopayments.com","showHelpButton":true}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"#content-area{max-width:60rem}h1,h2,h3,h4,h5,h6{letter-spacing:0.05em!important}.welcome-page .card-group{margin:3rem auto 8rem;max-width:70rem;padding-left:1.25rem;padding-right:1.25rem}.welcome-page .card-group .card{padding:1rem}.welcome-hero{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:20vh;text-align:center;margin-top:3rem;margin-bottom:2.5rem}.welcome-hero h1{font-size:2.5rem;font-weight:700;margin-bottom:1rem;line-height:1.2;color:#fff}.welcome-hero p{font-size:1.25rem;max-width:600px;margin:0 auto}.welcome-hero h1{color:rgb(41 42 37 / 1)}.dark .welcome-hero h1{color:rgb(255 255 255 / 1)}.welcome-hero p{color:rgb(83 85 79 / 1)}.dark .welcome-hero p{color:rgb(162 164 158 / 1)}"}],"page":{"pagePath":"cn/developer-resources/better-auth-adaptor","slug":"/cn/developer-resources/better-auth-adaptor","pageMetadata":{"title":"Better Auth 适配器","description":"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。","icon":"code-merge","keywords":["Dodo Payments","Better Auth","认证","Better Auth 插件","支付集成"],"href":"/cn/developer-resources/better-auth-adaptor"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Check,CodeBlock,CodeGroup,Heading,Info,Note,Step,Steps,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Check)_missingMdxReference(`Check`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`概述`,children:`概述`}),`\n`,_jsxs(_components.p,{children:[`Better Auth 适配器 `,_jsx(_components.code,{children:`@dodopayments/better-auth`}),` 是一个将用户连接到 Dodo Payments 的 Better Auth 插件。它提供:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`可选的客户创建功能,或在注册时根据电子邮件关联客户`}),`\n`,_jsx(_components.li,{children:`Checkout 会话(首选的 Checkout 方式),支持产品 slug 映射`}),`\n`,_jsx(_components.li,{children:`自助式 Customer Portal`}),`\n`,_jsx(_components.li,{children:`用于基于用量计费的用量接收和报告端点`}),`\n`,_jsx(_components.li,{children:`带签名验证的 Webhook 事件处理`}),`\n`,_jsx(_components.li,{children:`每个端点对应的 TypeScript 类型`}),`\n`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`要使用此集成,您需要一个 Dodo Payments 帐户和 API 密钥。`})}),`\n`,_jsx(Heading,{level:`1`,id:`先决条件`,children:`先决条件`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Node.js 16 或更高版本`}),`\n`,_jsx(_components.li,{children:`访问 Dodo Payments 控制面板`}),`\n`,_jsxs(_components.li,{children:[`一个使用 `,_jsx(_components.a,{href:`https://www.npmjs.com/package/better-auth`,children:`Better Auth`}),` 1.4 或更高 1.x 版本的现有项目`]}),`\n`]}),`\n`,_jsx(Heading,{level:`1`,id:`安装`,children:`安装`}),`\n`,_jsx(Steps,{children:_jsxs(Step,{title:`Install Dependencies`,children:[_jsx(_components.p,{children:`在项目根目录运行此命令:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @dodopayments/better-auth`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dodopayments`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` better-auth`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` zod`})]}),`\n`]})})}),_jsx(Check,{children:_jsx(_components.p,{children:`适配器、Dodo Payments SDK、Better Auth 和 Zod 已安装。`})})]})}),`\n`,_jsx(Heading,{level:`1`,id:`设置`,children:`设置`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Configure Environment Variables`,children:[_jsxs(_components.p,{children:[`将这些变量添加到 `,_jsx(_components.code,{children:`.env`}),` 文件中。在控制面板的 `,_jsx(_components.strong,{children:`Developer → API Keys`}),` 下创建 API key。添加 Webhook 端点时即可获得 Webhook secret,具体说明请参阅本页面的 Webhooks 部分。`,_jsx(_components.code,{children:`BETTER_AUTH_SECRET`}),` 是一个至少包含 32 个字符的随机字符串。`]}),_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DODO_PAYMENTS_API_KEY=your_api_key_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BETTER_AUTH_URL=http://localhost:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BETTER_AUTH_SECRET=your_better_auth_secret_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(Warning,{children:_jsx(_components.p,{children:`切勿将 API 密钥或密钥提交到版本控制。`})})]}),_jsxs(Step,{title:`Set Up Server-Side Integration`,children:[_jsxs(_components.p,{children:[`创建或更新 `,_jsx(_components.code,{children:`src/lib/auth.ts`}),`:`]}),_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`43`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`43`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`betterAuth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"better-auth\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` checkout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` portal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` webhooks`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` usage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`} `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@dodopayments/better-auth\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` DodoPayments`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"dodopayments\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` dodoPayments`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` DodoPayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` bearerToken:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`DODO_PAYMENTS_API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` environment:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"test_mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// or \"live_mode\" for production`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` auth`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` betterAuth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` plugins:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` dodoPayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` createCustomerOnSignUp:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` use:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` checkout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` products:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` productId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pdt_xxxxxxxxxxxxxxxxxxxxx\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` slug:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"premium-plan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` successUrl:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"/dashboard/success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authenticatedUsersOnly:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` portal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` webhooks`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` webhookKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`DODO_PAYMENTS_WEBHOOK_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` onPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Received webhook:\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` usage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsxs(_components.p,{children:[`该插件会向 Better Auth 的 `,_jsx(_components.code,{children:`user`}),` 表添加 `,_jsx(_components.code,{children:`dodoCustomerId`}),` 字段,用于存储每个用户的 Dodo Payments 客户 ID。添加插件后,使用 `,_jsx(_components.a,{href:`https://www.better-auth.com/docs/concepts/cli`,children:`Better Auth CLI`}),` 更新数据库 schema。`]}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`生产环境请将 `,_jsx(_components.code,{children:`environment`}),` 设置为 `,_jsx(_components.code,{children:`live_mode`}),`。`]})})]}),_jsxs(Step,{title:`Set Up Client-Side Integration`,children:[_jsxs(_components.p,{children:[`创建或更新 `,_jsx(_components.code,{children:`src/lib/auth-client.ts`}),`:`]}),_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`createAuthClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"better-auth/react\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopaymentsClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@dodopayments/better-auth/client\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` authClient`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` createAuthClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` baseURL:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`BETTER_AUTH_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ||`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"http://localhost:3000\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` plugins:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`dodopaymentsClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})]})]}),`\n`,_jsx(Heading,{level:`1`,id:`用量示例`,children:`用量示例`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`对于新的集成,请使用 `,_jsx(_components.code,{children:`authClient.dodopayments.checkoutSession`}),`。旧版 `,_jsx(_components.code,{children:`checkout`}),` 方法已弃用,仅为向后兼容而保留。`]})}),`\n`,_jsx(Heading,{level:`2`,id:`创建-checkout-会话(首选)`,children:`创建 Checkout 会话(首选)`}),`\n`,_jsx(_components.p,{children:`根据已配置的 slug 或产品购物车创建 Checkout 会话,然后将客户重定向到返回的 URL:`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Using a slug`,numberOfLines:`12`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`session`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`checkoutSession`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Option A: use a configured slug`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` slug:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"premium-plan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Your internal ID, stored in the payment metadata as referenceId`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` referenceId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"order_123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`session`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`location`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`href`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` session`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`]})})}),_jsx(CodeBlock,{filename:`Using product cart`,numberOfLines:`16`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`16`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`session`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`checkoutSession`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Option B: pass a product cart directly`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` product_cart:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` product_id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pdt_xxxxxxxxxxxxxxxxxxxxx\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` quantity:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Your internal ID, stored in the payment metadata as referenceId`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` referenceId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"order_123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`session`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`location`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`href`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` session`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`checkoutSession`}),` 会为你填充部分字段:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`账单地址:`}),` 无需预先提供,因为 Checkout 会从客户处收集该信息。如需预填,请传入 `,_jsx(_components.code,{children:`billing_address`}),`。`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`客户:`}),` 对于已登录用户,插件使用其 Better Auth 会话中的电子邮件和姓名,并忽略你传入的任何 `,_jsx(_components.code,{children:`customer`}),` 对象。没有已登录用户时,插件使用 `,_jsx(_components.code,{children:`customer`}),` 对象。`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`其他字段:`}),` 该参数接受与 `,_jsx(_components.a,{href:`https://docs.dodopayments.com/api-reference/checkout-sessions/create`,children:`Create Checkout Session`}),` 端点请求体相同的字段,另外还支持 `,_jsx(_components.code,{children:`slug`}),` 和 `,_jsx(_components.code,{children:`referenceId`}),`。`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`如果未配置 slug,或者既未传入 `,_jsx(_components.code,{children:`slug`}),` 也未传入 `,_jsx(_components.code,{children:`product_cart`}),`,请求将失败并返回 400 错误。`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`返回 URL 来自服务器插件中配置的 `,_jsx(_components.code,{children:`successUrl`}),`,并根据应用的 URL 解析。插件会忽略客户端 payload 中的 `,_jsx(_components.code,{children:`return_url`}),`。`]})}),`\n`,_jsx(Heading,{level:`2`,id:`旧版-checkout(已弃用)`,children:`旧版 Checkout(已弃用)`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`authClient.dodopayments.checkout`}),` 方法已弃用。对于新的实现,请改用 `,_jsx(_components.code,{children:`checkoutSession`}),`。`]})}),`\n`,_jsxs(_components.p,{children:[`旧版方法需要 `,_jsx(_components.code,{children:`billing`}),` 和 `,_jsx(_components.code,{children:`customer`}),`,并通过已弃用的动态 Checkout 流程创建支付链接。你在 `,_jsx(_components.code,{children:`customer`}),` 中设置的字段会覆盖会话中的电子邮件和姓名。`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`19`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`19`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`checkout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`checkout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` slug:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"premium-plan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` customer:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` email:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customer@example.com\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"John Doe\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` billing:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` city:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"San Francisco\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` country:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"US\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` state:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"CA\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` street:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"123 Market St\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` zipcode:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"94103\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` referenceId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"order_123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`checkout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`location`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`href`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` checkout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`访问-customer-portal`,children:`访问 Customer Portal`}),`\n`,_jsx(_components.p,{children:`Portal 端点要求用户已登录且拥有已验证的电子邮件地址。如果用户尚无 Dodo Payments 客户,插件会通过电子邮件查找客户,或创建一个客户。INLINE_CODE_PLACEHOLDER_baf0df18400b3e6_END 会返回 Portal URL:`}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`5`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`customerPortal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`customer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`portal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`customerPortal`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` customerPortal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`redirect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`location`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`href`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` customerPortal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`列出客户数据`,children:`列出客户数据`}),`\n`,_jsxs(_components.p,{children:[`列出已登录客户的订阅和支付记录。`,_jsx(_components.code,{children:`page`}),` 从 1 开始,`,_jsx(_components.code,{children:`status`}),` 用于筛选结果:`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`19`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`19`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Get subscriptions`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`subscriptions`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`subscriptionsError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`customer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`subscriptions`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`list`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` query:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limit:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` page:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` status:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"active\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Get payment history`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`payments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`paymentsError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`customer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`payments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`list`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` query:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limit:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` page:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` status:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"succeeded\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`跟踪计量用量`,children:`跟踪计量用量`}),`\n`,_jsxs(_components.p,{children:[`在服务器上启用 `,_jsx(_components.code,{children:`usage()`}),` 插件,以记录基于用量计费的用量事件,并让客户查看其用量。两种方法都要求用户已登录且拥有已验证的电子邮件地址。`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`authClient.dodopayments.usage.ingest`}),` 为已登录用户记录事件。`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`authClient.dodopayments.usage.meters.list`}),` 列出已登录客户的用量事件。它接受 `,_jsx(_components.code,{children:`page_number`}),`、`,_jsx(_components.code,{children:`page_size`}),`、`,_jsx(_components.code,{children:`event_name`}),`、`,_jsx(_components.code,{children:`meter_id`}),`、`,_jsx(_components.code,{children:`start`}),` 和 `,_jsx(_components.code,{children:`end`}),` 查询参数。`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`30`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`30`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Record a metered event (e.g., an API request)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`ingestError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`usage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`ingest`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` event_id:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` crypto`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`randomUUID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` event_name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"api_request\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` metadata:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` route:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"/reports\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` method:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"GET\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Optional Date; defaults to now if omitted`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` timestamp:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Date`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ingestError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Failed to record usage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ingestError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// List recent usage for the current customer`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`usage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`usageError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`usage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`meters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`list`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` query:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` page_size:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` meter_id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"mtr_yourMeterId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// optional`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`usage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` usage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forEach`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`event_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`timestamp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Dodo Payments 会拒绝时间戳早于当前时间一小时以上或晚于当前时间五分钟以上的事件。`})}),`\n`,_jsxs(_components.p,{children:[`如果省略 `,_jsx(_components.code,{children:`meter_id`}),`,列表会包含客户的所有用量事件。使用 `,_jsx(_components.code,{children:`meter_id`}),` 后,列表仅包含与该 meter 匹配的事件。`]}),`\n`,_jsx(Heading,{level:`1`,id:`webhooks`,children:`Webhooks`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Webhooks 插件会验证每个 Dodo Payments 事件的签名,并调用你的处理程序。默认端点为 `,_jsx(_components.code,{children:`/api/auth/dodopayments/webhooks`}),`。`]})}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Generate and Set Webhook Secret`,children:[_jsxs(_components.p,{children:[`在控制面板中,前往 `,_jsx(_components.strong,{children:`Developer → Webhooks`}),` 并添加端点 URL,例如 `,_jsx(_components.code,{children:`https://\u003cyour-domain>/api/auth/dodopayments/webhooks`}),`。将端点的 signing secret 复制到 `,_jsx(_components.code,{children:`.env`}),` 文件中:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsxs(Step,{title:`Handle Webhook Events`,children:[_jsxs(_components.p,{children:[`为每个要处理的事件传入一个处理程序。`,_jsx(_components.code,{children:`onPayload`}),` 会对每个事件运行:`]}),_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`6`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`webhooks`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` webhookKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`DODO_PAYMENTS_WEBHOOK_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` onPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Received webhook:\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})]})]}),`\n`,_jsxs(_components.p,{children:[`如果签名验证失败或处理程序抛出错误,端点会返回 400。处理程序执行完毕后,端点会返回 `,_jsx(_components.code,{children:`{ received: true }`}),`。`]}),`\n`,_jsx(Heading,{level:`3`,id:`支持的-webhook-事件处理程序`,children:`支持的 Webhook 事件处理程序`}),`\n`,_jsx(_components.p,{children:`每个处理程序都会接收其事件类型对应的已验证 payload:`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`TypeScript`,expandable:`true`,numberOfLines:`48`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`48`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPayload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPaymentSucceeded`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPaymentFailed`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPaymentProcessing`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPaymentCancelled`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onRefundSucceeded`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onRefundFailed`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDisputeOpened`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDisputeExpired`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDisputeAccepted`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDisputeCancelled`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDisputeChallenged`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDisputeWon`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDisputeLost`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionActive`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionOnHold`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionRenewed`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionPlanChanged`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionCancelled`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionFailed`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionExpired`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionUpdated`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionPaused`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionUnpaused`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onSubscriptionUpdatePaymentMethod`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onLicenseKeyCreated`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onAbandonedCheckoutDetected`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onAbandonedCheckoutRecovered`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDunningStarted`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onDunningRecovered`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditAdded`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditDeducted`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditExpired`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditRolledOver`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditRolloverForfeited`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditOverageCharged`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditOverageReset`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditManualAdjustment`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onCreditBalanceLow`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onEntitlementGrantCreated`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onEntitlementGrantDelivered`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onEntitlementGrantFailed`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onEntitlementGrantRevoked`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPayoutCreated`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPayoutOnHold`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPayoutInProgress`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPayoutFailed`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onPayoutSuccess`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`payload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` WebhookPayload`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`void`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`1`,id:`配置参考`,children:`配置参考`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Plugin Options`,id:`plugin-options`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`client`}),`(必需):DodoPayments client 实例`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`createCustomerOnSignUp`}),`(可选):用户注册时创建 Dodo Payments 客户,或关联具有相同电子邮件的现有客户。当用户详细信息发生变化时,插件也会更新客户信息。`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`use`}),`(必需):要启用的插件数组(checkout、portal、usage、webhooks)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`getCustomerParams`}),`(可选):接收 Better Auth `,_jsx(_components.code,{children:`User`}),` 并返回额外字段的函数,用于在创建和更新时附加到 Dodo Payments 客户(例如 `,_jsx(_components.code,{children:`metadata`}),`、`,_jsx(_components.code,{children:`phone_number`}),`)。该函数可以是 async 函数。`]}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` dodoPayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` createCustomerOnSignUp:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` use:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`portal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` getCustomerParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`user`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` metadata:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`userId:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` user`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` phone_number:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` user`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`phoneNumber`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`})`})}),`\n`]})})})]}),_jsx(Accordion,{title:`Checkout Plugin Options`,id:`checkout-plugin-options`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`products`}),`:`,_jsx(_components.code,{children:`{ productId, slug }`}),` 对象数组,或返回一个对象的 async 函数`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`successUrl`}),`:支付成功后用于重定向的 URL`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`authenticatedUsersOnly`}),`:要求用户进行身份验证(默认值:`,_jsx(_components.code,{children:`false`}),`)`]}),`\n`]})})]}),`\n`,_jsx(Heading,{level:`1`,id:`故障排除与提示`,children:`故障排除与提示`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Common Issues`,id:`common-issues`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`API key 无效`}),`:检查 `,_jsx(_components.code,{children:`.env`}),` 中的 `,_jsx(_components.code,{children:`DODO_PAYMENTS_API_KEY`}),`,并确认 key 的模式与 `,_jsx(_components.code,{children:`environment`}),` 匹配。`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Webhook 签名不匹配`}),`:确认 Webhook secret 与 Dodo Payments 控制面板中设置的 secret 匹配。`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`未创建客户`}),`:确认 `,_jsx(_components.code,{children:`createCustomerOnSignUp`}),` 已设置为 `,_jsx(_components.code,{children:`true`}),`。`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Portal 或 usage 请求返回 401`}),`:用户的电子邮件地址尚未验证。`]}),`\n`]})}),_jsx(Accordion,{title:`Best Practices`,id:`best-practices`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`对所有 secret 和 key 使用环境变量。`}),`\n`,_jsxs(_components.li,{children:[`在切换到 `,_jsx(_components.code,{children:`live_mode`}),` 前,先在 `,_jsx(_components.code,{children:`test_mode`}),` 中进行测试。`]}),`\n`,_jsx(_components.li,{children:`记录 Webhook 事件以便调试和审计。`}),`\n`]})})]}),`\n`,_jsx(Heading,{level:`1`,id:`面向-llm-的提示词`,children:`面向 LLM 的提示词`}),`\n`,_jsxs(_components.p,{children:[`将此提示词复制到 AI 编程助手中,让它将适配器添加到你的项目中。如需同时向代理提供 Dodo Payments 文档和技能,请安装 `,_jsx(_components.a,{href:`/developer-resources/build-with-ai-coding-agents`,children:`Agent Plugin`}),`。`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`488`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`488`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`You are a skilled developer helping to integrate the @dodopayments/better-auth adapter into a typescript web application with better-auth. This adapter enables seamless payment processing through Dodo Payments with automatic customer management, checkout flows, and webhook handling.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STAGE 1: BASIC SETUP`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`This stage covers the foundational setup needed before implementing any plugins. Complete this stage first.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 1: Installation`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Install the required dependencies:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`npm install @dodopayments/better-auth dodopayments better-auth zod`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 2: Environment Variables Setup`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`You will need to complete these external setup tasks. I will provide you with a TODO list for the actions you need to take outside of the code:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`TODO LIST FOR USER:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Generate Dodo Payments API Key:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Go to your Dodo Payments Dashboard > Developer > API Keys`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Create a new API key (or use existing)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Copy the API key value`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Set environment variable: DODO_PAYMENTS_API_KEY=your_api_key_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. Generate Better Auth Secret:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Generate a random secret key (32+ characters)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Set environment variable: BETTER_AUTH_SECRET=your_better_auth_secret_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. Set Application URL:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - For development: BETTER_AUTH_URL=http://localhost:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - For production: BETTER_AUTH_URL=https://your-domain.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`4. Webhook Secret (only if implementing webhooks plugin):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - This will be provided after you specify your domain name in Stage 2`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Set environment variable: DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add these environment variables to your .env file:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DODO_PAYMENTS_API_KEY=your_api_key_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BETTER_AUTH_URL=http://localhost:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BETTER_AUTH_SECRET=your_better_auth_secret_here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 3: Server Configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Create or update your better-auth setup file (src/lib/auth.ts):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import { betterAuth } from \"better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import { dodopayments } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import DodoPayments from \"dodopayments\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`// Create DodoPayments client`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`export const dodoPayments = new DodoPayments({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` bearerToken: process.env.DODO_PAYMENTS_API_KEY!,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` environment: \"test_mode\", // Change to \"live_mode\" for production`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`// Configure better-auth with dodopayments adapter`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`export const auth = betterAuth({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` plugins: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` dodopayments({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` client: dodoPayments,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` createCustomerOnSignUp: true, // Auto-create customers on signup`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` use: [], // We'll add plugins here in Stage 2`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Optional: attach metadata or phone_number to DodoPayments customer records`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // getCustomerParams: (user) => ({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // metadata: { userId: user.id },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // phone_number: user.phoneNumber ?? null,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`The plugin adds a dodoCustomerId field to the Better Auth user table. Update the database schema with the Better Auth CLI after adding the plugin.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 4: Client Configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Create or update your auth client file (src/lib/auth-client.ts):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import { createAuthClient } from \"better-auth/react\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import { dodopaymentsClient } from \"@dodopayments/better-auth/client\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`export const authClient = createAuthClient({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` baseURL: process.env.BETTER_AUTH_URL || \"http://localhost:3000\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` plugins: [dodopaymentsClient()],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STAGE 2: PLUGIN IMPLEMENTATION`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`After completing Stage 1, you can selectively implement any of these plugins based on your needs. Each plugin is independent and can be added or removed as needed.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`PLUGIN SELECTION:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Before implementing any plugins, ask the user which plugins they want to implement:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\"Which plugins would you like to implement? You can choose any combination of:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. CHECKOUT - Enables secure payment processing and checkout flows`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. PORTAL - Provides customer self-service portal for subscriptions and payments`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. USAGE - Tracks metered events and exposes usage history for billing beyond included allowances`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`4. WEBHOOKS - Handles real-time payment events from Dodo Payments`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Please specify which plugins you want (e.g., 'checkout and usage', 'all four', 'just portal', etc.)\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`If the user doesn't respond or you cannot prompt the user, implement all four plugins by default.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Based on the user's selection, implement only the requested plugins from the sections below:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`CHECKOUT PLUGIN`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Purpose: Enables secure payment processing using Checkout Sessions (preferred) with product slug mapping. A legacy checkout endpoint is also exposed for backward compatibility but is deprecated.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SETUP TODO LIST FOR USER:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Create products in Dodo Payments Dashboard:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Go to Dodo Payments Dashboard > Products`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Create your products (e.g., subscription plans, one-time purchases)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Copy each product ID (starts with \"pdt_\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Note down the product names for creating friendly slugs`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. Plan your checkout URLs:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Decide on your success URL (e.g., \"/dashboard/success\", \"/thank-you\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Ensure this URL exists in your application`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Configuration:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add checkout to your imports in src/lib/auth.ts:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import { dodopayments, checkout } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add checkout plugin to the use array in your dodopayments configuration:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`use: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` checkout({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` products: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` productId: \"pdt_xxxxxxxxxxxxxxxxxxxxx\", // Your actual product ID from Dodo Payments`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` slug: \"premium-plan\", // Friendly slug for checkout`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Add more products as needed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` successUrl: \"/dashboard/success\", // Your success page URL`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` authenticatedUsersOnly: true, // Require login for checkout`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Usage Example (Preferred - Checkout Sessions):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`const { data: session, error } = await authClient.dodopayments.checkoutSession({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Use the slug from your configuration OR provide product_cart directly`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` slug: \"premium-plan\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // product_cart: [{ product_id: \"pdt_xxxxxxxxxxxxxxxxxxxxx\", quantity: 1 }],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` referenceId: \"order_123\", // Optional reference`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`if (session) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` window.location.href = session.url;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Deprecated (Legacy Checkout):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`const { data: checkout, error } = await authClient.dodopayments.checkout({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` slug: \"premium-plan\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` customer: {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` email: \"customer@example.com\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` name: \"John Doe\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` billing: {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` city: \"San Francisco\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` country: \"US\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` state: \"CA\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` street: \"123 Market St\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` zipcode: \"94103\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`if (checkout) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` window.location.href = checkout.url;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Options:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- products: Array of products or async function returning products`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- successUrl: URL to redirect after successful payment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- authenticatedUsersOnly: Require user authentication (default: false)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`PORTAL PLUGIN`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Purpose: Provides customer self-service capabilities for managing subscriptions and viewing payment history.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Configuration:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add portal to your imports in src/lib/auth.ts:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import { dodopayments, portal } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add portal plugin to the use array in your dodopayments configuration:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`use: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` portal(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Usage Examples:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`// Access customer portal`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`const { data: customerPortal, error: portalError } = await authClient.dodopayments.customer.portal();`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`if (customerPortal \u0026\u0026 customerPortal.redirect) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` window.location.href = customerPortal.url;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`// List customer subscriptions`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`const { data: subscriptions, error: subscriptionsError } = await authClient.dodopayments.customer.subscriptions.list({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` query: {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` limit: 10,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` page: 1,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` status: \"active\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`// List customer payments`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`const { data: payments, error: paymentsError } = await authClient.dodopayments.customer.payments.list({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` query: {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` limit: 10,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` page: 1,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` status: \"succeeded\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Note: All portal methods require user authentication and a verified email address.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`USAGE PLUGIN (METERED BILLING)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Purpose: Records metered events (like API requests) for usage-based plans and surfaces recent usage history per customer.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SETUP TODO LIST FOR USER:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Create or identify usage meters in the Dodo Payments Dashboard:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Dashboard > Products > Meters`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Copy the meter IDs (prefixed with mtr_) used by your usage-based plans`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. Decide which event names and metadata you will capture (e.g., api_request, route, method)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. Ensure BetterAuth users verify their email addresses (the plugin enforces this before ingesting usage)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Configuration:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add usage to your imports in src/lib/auth.ts:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` import { dodopayments, usage } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Add the plugin to the use array:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` use: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` usage(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Usage Examples:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Record a metered event for the signed-in customer`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` const { error: ingestError } = await authClient.dodopayments.usage.ingest({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` event_id: crypto.randomUUID(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` event_name: \"api_request\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` metadata: {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` route: \"/reports\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` method: \"GET\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Optional Date or ISO string; defaults to now`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` timestamp: new Date(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` if (ingestError) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.error(\"Failed to record usage\", ingestError);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // List recent usage for the current customer`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` const { data: usage, error: usageError } =`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` await authClient.dodopayments.usage.meters.list({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` query: {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` page_size: 20,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` meter_id: \"mtr_yourMeterId\", // optional filter`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` if (usage?.items) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` usage.items.forEach((event) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(event.event_name, event.timestamp, event.metadata);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Notes:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` The plugin exposes authClient.dodopayments.usage.ingest and`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` authClient.dodopayments.usage.meters.list. Timestamps older`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` than one hour or more than five minutes in the future are rejected.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` If you do not pass meter_id when listing usage, all of the`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` customer's usage events are returned. With meter_id, only the`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` events that match that meter are returned.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`WEBHOOKS PLUGIN`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Purpose: Handles real-time payment events from Dodo Payments with secure signature verification.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BEFORE CONFIGURATION - Setup Webhook URL:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`First, I need your domain name to generate the webhook URL and provide you with setup instructions.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 1: Domain Name Input`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`What is your domain name? Please provide:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- For production: your domain name (e.g., \"myapp.com\", \"api.mycompany.com\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- For staging: your staging domain (e.g., \"staging.myapp.com\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- For development: use \"localhost:3000\" (or your local port)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 2: After receiving your domain name, I will:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Generate your webhook URL: https://[YOUR-DOMAIN]/api/auth/dodopayments/webhooks`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Provide you with a TODO list for webhook setup in Dodo Payments dashboard`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Give you the exact environment variable setup instructions`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`WEBHOOK SETUP TODO LIST (will be provided after domain input):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Configure webhook in Dodo Payments Dashboard:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Go to Dodo Payments Dashboard > Developer > Webhooks`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Click \"Add Webhook\" or \"Create Webhook\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Enter webhook URL: https://[YOUR-DOMAIN]/api/auth/dodopayments/webhooks`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Select events you want to receive (or select all)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Copy the generated webhook secret`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. Set webhook secret in your environment:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - For production: Set DODO_PAYMENTS_WEBHOOK_KEY in your hosting provider environment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - For staging: Set DODO_PAYMENTS_WEBHOOK_KEY in your staging environment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - For development: Add DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_secret_here to your .env file`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. Deploy your application with the webhook secret configured`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 3: Add webhooks to your imports in src/lib/auth.ts:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import { dodopayments, webhooks } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STEP 4: Add webhooks plugin to the use array in your dodopayments configuration:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`use: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` webhooks({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY!,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Generic handler for all webhook events`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onPayload: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Received webhook:\", payload.type);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Payment event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onPaymentSucceeded: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Payment succeeded:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onPaymentFailed: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Payment failed:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onPaymentProcessing: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Payment processing:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onPaymentCancelled: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Payment cancelled:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Refund event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onRefundSucceeded: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Refund succeeded:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onRefundFailed: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Refund failed:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Dispute event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDisputeOpened: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dispute opened:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDisputeExpired: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dispute expired:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDisputeAccepted: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dispute accepted:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDisputeCancelled: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dispute cancelled:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDisputeChallenged: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dispute challenged:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDisputeWon: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dispute won:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDisputeLost: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dispute lost:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Subscription event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionActive: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription active:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionOnHold: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription on hold:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionRenewed: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription renewed:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionPlanChanged: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription plan changed:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionCancelled: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription cancelled:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionFailed: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription failed:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionExpired: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription expired:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onSubscriptionUpdated: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Subscription updated:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // License key event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onLicenseKeyCreated: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"License key created:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Abandoned checkout event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onAbandonedCheckoutDetected: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Abandoned checkout detected:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onAbandonedCheckoutRecovered: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Abandoned checkout recovered:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Dunning event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDunningStarted: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dunning started:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onDunningRecovered: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Dunning recovered:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Credit event handlers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditAdded: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit added:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditDeducted: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit deducted:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditExpired: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit expired:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditRolledOver: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit rolled over:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditRolloverForfeited: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit rollover forfeited:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditOverageCharged: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit overage charged:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditManualAdjustment: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit manual adjustment:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` onCreditBalanceLow: async (payload) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` console.log(\"Credit balance low:\", payload);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Supported Webhook Event Handlers:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPayload: Generic handler for all webhook events`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPaymentSucceeded: Payment completed successfully`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPaymentFailed: Payment failed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPaymentProcessing: Payment is being processed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPaymentCancelled: Payment was cancelled`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onRefundSucceeded: Refund completed successfully`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onRefundFailed: Refund failed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDisputeOpened: Dispute was opened`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDisputeExpired: Dispute expired`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDisputeAccepted: Dispute was accepted`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDisputeCancelled: Dispute was cancelled`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDisputeChallenged: Dispute was challenged`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDisputeWon: Dispute was won`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDisputeLost: Dispute was lost`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionActive: Subscription became active`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionOnHold: Subscription was put on hold`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionRenewed: Subscription was renewed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionPlanChanged: Subscription plan was changed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionCancelled: Subscription was cancelled`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionFailed: Subscription failed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionExpired: Subscription expired`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionUpdated: Subscription was updated`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionPaused: Subscription was paused`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionUnpaused: Subscription was unpaused`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onSubscriptionUpdatePaymentMethod: Subscription payment method was updated`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onLicenseKeyCreated: License key was created`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onAbandonedCheckoutDetected: Abandoned checkout was detected`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onAbandonedCheckoutRecovered: Abandoned checkout was recovered`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDunningStarted: Dunning process started`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onDunningRecovered: Dunning process recovered`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditAdded: Credits were added`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditDeducted: Credits were deducted`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditExpired: Credits expired`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditRolledOver: Credits were rolled over`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditRolloverForfeited: Credit rollover was forfeited`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditOverageCharged: Credit overage was charged`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditOverageReset: Credit overage was reset`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditManualAdjustment: Manual credit adjustment was made`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onCreditBalanceLow: Credit balance is low`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onEntitlementGrantCreated: Entitlement grant was created`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onEntitlementGrantDelivered: Entitlement grant was delivered`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onEntitlementGrantFailed: Entitlement grant failed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onEntitlementGrantRevoked: Entitlement grant was revoked`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPayoutCreated: Payout was created`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPayoutOnHold: Payout was put on hold`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPayoutInProgress: Payout is in progress`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPayoutFailed: Payout failed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- onPayoutSuccess: Payout succeeded`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`COMBINING SELECTED PLUGINS:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`After implementing the user's selected plugins, update your src/lib/auth.ts file to include all chosen plugins in the imports and use array:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Example for all four plugins:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` import {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` dodopayments,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` checkout,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` portal,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` usage,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` webhooks,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` use: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` checkout({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // checkout configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` portal(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` usage(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` webhooks({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // webhook configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ];`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Example for checkout + portal + usage:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` import { dodopayments, checkout, portal, usage } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` use: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` checkout({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // checkout configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` portal(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` usage(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ];`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Example for just webhooks:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` import { dodopayments, webhooks } from \"@dodopayments/better-auth\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` use: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` webhooks({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // webhook configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ];`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`IMPORTANT NOTES:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Complete Stage 1 before implementing any plugins`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. Ask the user which plugins they want to implement, or implement all four if no response`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. Only implement the plugins the user specifically requested`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`4. ALWAYS provide TODO lists for external actions the user needs to complete:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - API key generation and environment variable setup`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Product creation in Dodo Payments dashboard (for checkout plugin)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Usage meter configuration and API event definition (for usage plugin)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Webhook setup in Dodo Payments dashboard (for webhooks plugin)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Domain name collection for webhook URL generation`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`5. For webhook plugin: Ask for the user's domain name and generate the exact webhook URL: https://[domain]/api/auth/dodopayments/webhooks`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`6. The usage plugin requires the BetterAuth session user to exist and have a verified email before ingesting or listing usage`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`7. All client methods return { data, error } objects for proper error handling`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`8. Use test_mode for development and live_mode for production`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`9. The webhook endpoint is automatically created and secured with signature verification (if webhooks plugin is selected)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`10. Customer portal and subscription listing require user authentication and a verified email (if portal plugin is selected)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`11. Handle errors appropriately and test webhook functionality in development before going live`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`12. Present all external setup tasks as clear TODO lists with specific environment variable names`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`13. Use getCustomerParams to attach metadata or phone_number to DodoPayments customer records — the function receives the BetterAuth User object and runs on every customer creation and update`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Better Auth 适配器","description":"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。","icon":"code-merge","keywords":["Dodo Payments","Better Auth","认证","Better Auth 插件","支付集成"],"href":"/cn/developer-resources/better-auth-adaptor"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"概述","slug":"概述","depth":1,"children":[]},{"title":"先决条件","slug":"先决条件","depth":1,"children":[]},{"title":"安装","slug":"安装","depth":1,"children":[]},{"title":"设置","slug":"设置","depth":1,"children":[]},{"title":"用量示例","slug":"用量示例","depth":1,"children":[]},{"title":"创建 Checkout 会话(首选)","slug":"创建-checkout-会话(首选)","depth":2,"children":[]},{"title":"旧版 Checkout(已弃用)","slug":"旧版-checkout(已弃用)","depth":2,"children":[]},{"title":"访问 Customer Portal","slug":"访问-customer-portal","depth":2,"children":[]},{"title":"列出客户数据","slug":"列出客户数据","depth":2,"children":[]},{"title":"跟踪计量用量","slug":"跟踪计量用量","depth":2,"children":[]},{"title":"Webhooks","slug":"webhooks","depth":1,"children":[{"title":"支持的 Webhook 事件处理程序","slug":"支持的-webhook-事件处理程序","depth":3,"children":[]}]},{"title":"配置参考","slug":"配置参考","depth":1,"children":[]},{"title":"故障排除与提示","slug":"故障排除与提示","depth":1,"children":[]},{"title":"面向 LLM 的提示词","slug":"面向-llm-的提示词","depth":1,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dodopayments/0ee82a08f7b65bcb/seo.js","/_mintlify/custom/dodopayments/6f88c9bbee313616/assistant-loader.js"],"subdomain":"dodopayments","siteName":"Dodo Payments Documentation","title":"Better Auth 适配器 - Dodo Payments Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/developer-resources/better-auth-adaptor","matchLevel":1},"es":{"href":"/es/developer-resources/better-auth-adaptor","matchLevel":1},"ar":{"href":"/ar/developer-resources/better-auth-adaptor","matchLevel":1},"fr":{"href":"/fr/developer-resources/better-auth-adaptor","matchLevel":1},"de":{"href":"/de/developer-resources/better-auth-adaptor","matchLevel":1},"id":{"href":"/id/developer-resources/better-auth-adaptor","matchLevel":1},"ja":{"href":"/ja/developer-resources/better-auth-adaptor","matchLevel":1},"ko":{"href":"/ko/developer-resources/better-auth-adaptor","matchLevel":1},"pt-BR":{"href":"/pt-BR/developer-resources/better-auth-adaptor","matchLevel":1},"vi":{"href":"/vi/developer-resources/better-auth-adaptor","matchLevel":1},"cn":{"href":"/cn/developer-resources/better-auth-adaptor","matchLevel":0},"hi":{"href":"/hi/developer-resources/better-auth-adaptor","matchLevel":1},"it":{"href":"/it/developer-resources/better-auth-adaptor","matchLevel":1},"sv":{"href":"/sv/developer-resources/better-auth-adaptor","matchLevel":1}}},"lastModified":"2026-09-26T16:06:35.295Z","gitLastModified":"2026-09-26T16:03:47.000Z","originalFileLocation":"cn/developer-resources/better-auth-adaptor.mdx","locale":"cn"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Better Auth 适配器 - Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Framework+Adaptors\u0026amp;title=Better+Auth+%E9%80%82%E9%85%8D%E5%99%A8\u0026amp;description=%E5%B0%86+Dodo+Payments+%E6%B7%BB%E5%8A%A0%E5%88%B0+Better+Auth%EF%BC%9A%E5%9C%A8%E6%B3%A8%E5%86%8C%E6%97%B6%E5%88%9B%E5%BB%BA%E5%AE%A2%E6%88%B7%EF%BC%8C%E6%89%93%E5%BC%80%E7%BB%93%E8%B4%A6%E4%BC%9A%E8%AF%9D%E5%92%8C+Customer+Portal%EF%BC%8C%E8%AE%B0%E5%BD%95%E7%94%A8%E9%87%8F%E5%B9%B6%E5%A4%84%E7%90%86+Webhook%E3%80%82\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=208406f3a0e377856daaec7bce9cb52ae6ed63ff4be933680c49fcc0b5e0c57c\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Better Auth 适配器 - Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Framework+Adaptors\u0026amp;title=Better+Auth+%E9%80%82%E9%85%8D%E5%99%A8\u0026amp;description=%E5%B0%86+Dodo+Payments+%E6%B7%BB%E5%8A%A0%E5%88%B0+Better+Auth%EF%BC%9A%E5%9C%A8%E6%B3%A8%E5%86%8C%E6%97%B6%E5%88%9B%E5%BB%BA%E5%AE%A2%E6%88%B7%EF%BC%8C%E6%89%93%E5%BC%80%E7%BB%93%E8%B4%A6%E4%BC%9A%E8%AF%9D%E5%92%8C+Customer+Portal%EF%BC%8C%E8%AE%B0%E5%BD%95%E7%94%A8%E9%87%8F%E5%B9%B6%E5%A4%84%E7%90%86+Webhook%E3%80%82\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=208406f3a0e377856daaec7bce9cb52ae6ed63ff4be933680c49fcc0b5e0c57c\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#779812\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/cn/developer-resources/better-auth-adaptor.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.dodopayments.com/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.dodopayments.com/es/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ar\" href=\"https://docs.dodopayments.com/ar/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://docs.dodopayments.com/fr/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://docs.dodopayments.com/de/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"id\" href=\"https://docs.dodopayments.com/id/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.dodopayments.com/ja/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.dodopayments.com/ko/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.dodopayments.com/pt-BR/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"vi\" href=\"https://docs.dodopayments.com/vi/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"hi\" href=\"https://docs.dodopayments.com/hi/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"it\" href=\"https://docs.dodopayments.com/it/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"sv\" href=\"https://docs.dodopayments.com/sv/developer-resources/better-auth-adaptor\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.dodopayments.com/developer-resources/better-auth-adaptor\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dodopayments.com/#organization\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/light.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=23f7a052f7ecb9d6570b7c95ee359a97\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dodopayments.com#website\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"publisher\":{\"@id\":\"https://docs.dodopayments.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor#webpage\",\"url\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor\",\"name\":\"Better Auth 适配器\",\"description\":\"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。\",\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrate\",\"item\":\"https://docs.dodopayments.com/cn/developer-resources/dodo-payments-sdks\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Framework Adaptors\",\"item\":\"https://docs.dodopayments.com/cn/developer-resources/framework-adaptors\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Better Auth 适配器\",\"item\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor#article\",\"headline\":\"Better Auth 适配器\",\"name\":\"Better Auth 适配器\",\"description\":\"将 Dodo Payments 添加到 Better Auth:在注册时创建客户,打开结账会话和 Customer Portal,记录用量并处理 Webhook。\",\"url\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dodopayments.com/cn/developer-resources/better-auth-adaptor#webpage\"},\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"keywords\":\"Dodo Payments, Better Auth, 认证, Better Auth 插件, 支付集成\",\"publisher\":{\"@id\":\"https://docs.dodopayments.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dodo Payments Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Dodo Payments Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/cn/developer-resources/better-auth-adaptor.md","siteName":"Dodo Payments Documentation","nav":{"global":null,"languages":[{"language":"en","pages":[{"title":"en","href":"/developer-resources/better-auth-adaptor"}]},{"language":"es","pages":[{"title":"es","href":"/es/developer-resources/better-auth-adaptor"}]},{"language":"ar","pages":[{"title":"ar","href":"/ar/developer-resources/better-auth-adaptor"}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/developer-resources/better-auth-adaptor"}]},{"language":"de","pages":[{"title":"de","href":"/de/developer-resources/better-auth-adaptor"}]},{"language":"id","pages":[{"title":"id","href":"/id/developer-resources/better-auth-adaptor"}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/developer-resources/better-auth-adaptor"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/developer-resources/better-auth-adaptor"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/pt-BR/developer-resources/better-auth-adaptor"}]},{"language":"vi","pages":[{"title":"vi","href":"/vi/developer-resources/better-auth-adaptor"}]},{"language":"cn","tabs":[{"tab":"Docs","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"欢迎使用 Dodo Payments","sidebarTitle":"介绍","icon":"rocket","href":"/cn/introduction"},{"title":"使用 AI 代码代理构建","sidebarTitle":"AI 代码代理","icon":"robot","href":"/cn/developer-resources/build-with-ai-coding-agents"},{"title":"迁移到 Dodo Payments","icon":"arrow-right-arrow-left","href":"/cn/migrate-to-dodo"},{"title":"Account Verification","icon":"id-card","href":"/cn/miscellaneous/verification-process"}]},{"group":"Features","pages":[{"sidebarTitle":"产品","title":"产品","icon":"box","href":"/cn/features/products"},{"sidebarTitle":"产品集合","title":"产品集合","icon":"layer-group","href":"/cn/features/product-collections"},{"sidebarTitle":"一次性付款","title":"一次性付款","icon":"credit-card","href":"/cn/features/one-time-payment-products"},{"group":"Subscriptions","icon":"infinity","pages":[{"sidebarTitle":"Subscriptions","title":"Subscriptions","icon":"repeat","href":"/cn/features/subscription"},{"sidebarTitle":"附加组件","title":"订阅的附加组件","icon":"puzzle","href":"/cn/features/addons"},{"title":"按需订阅","icon":"bolt","href":"/cn/developer-resources/ondemand-subscriptions"}]},{"group":"Usage Based Billing","icon":"arrow-trend-up","pages":[{"sidebarTitle":"介绍","title":"按使用量计费","icon":"box","href":"/cn/features/usage-based-billing/introduction"},{"sidebarTitle":"计量器","title":"计量器","icon":"sliders","href":"/cn/features/usage-based-billing/meters"},{"sidebarTitle":"事件摄取","title":"事件摄取","icon":"bolt","href":"/cn/features/usage-based-billing/event-ingestion"},{"group":"Ingestion Blueprints","icon":"copy","pages":[{"sidebarTitle":"介绍","title":"数据摄取蓝图","icon":"box","href":"/cn/features/usage-based-billing/ingestion-blueprints"},{"title":"LLM Blueprint","icon":"brain-circuit","href":"/cn/developer-resources/ingestion-blueprints/llm"},{"title":"API 网关蓝图","icon":"cloud","href":"/cn/developer-resources/ingestion-blueprints/api-gateway"},{"title":"对象存储蓝图","icon":"box-archive","href":"/cn/developer-resources/ingestion-blueprints/object-storage"},{"title":"流媒体蓝图","icon":"tower-broadcast","href":"/cn/developer-resources/ingestion-blueprints/stream"},{"title":"时间范围蓝图","icon":"clock","href":"/cn/developer-resources/ingestion-blueprints/time-range"}]}]},{"sidebarTitle":"Credit-Based Billing","title":"Credit-Based Billing","icon":"coins","tag":"NEW","href":"/cn/features/credit-based-billing"},{"sidebarTitle":"Seat-Based Billing","title":"Seat-Based Billing","icon":"users","href":"/cn/features/seat-based-billing"},{"sidebarTitle":"混合计费","title":"混合计费模型","icon":"layer-group","href":"/cn/features/hybrid-billing"},{"title":"Upsells \u0026 Downsells","icon":"arrow-up-right-dots","href":"/cn/features/upsells-and-downsells"},{"group":"Customers","icon":"user-group","pages":[{"title":"客户管理","icon":"user-group","href":"/cn/features/customers"},{"sidebarTitle":"客户门户","title":"客户门户","icon":"id-card","href":"/cn/features/customer-portal"},{"title":"客户钱包","icon":"wallet","tag":"NEW","href":"/cn/features/customer-wallet"},{"sidebarTitle":"已发送的邮件","title":"客户邮件日志","icon":"envelope","tag":"NEW","href":"/cn/features/email-logs"},{"sidebarTitle":"客户阻止列表","title":"客户阻止列表","icon":"user-slash","tag":"NEW","href":"/cn/features/customer-blocklist"}]},{"sidebarTitle":"Discounts","title":"Discounts","icon":"percent","href":"/cn/features/discount-codes"},{"group":"Recovery","icon":"rotate","tag":"NEW","pages":[{"sidebarTitle":"概览","title":"收入恢复","icon":"rotate","href":"/cn/features/recovery/overview"},{"sidebarTitle":"购物车恢复","title":"购物车恢复","icon":"cart-shopping","href":"/cn/features/recovery/abandoned-cart-recovery"},{"sidebarTitle":"订阅追帐","title":"订阅追帐","icon":"repeat","href":"/cn/features/recovery/subscription-dunning"},{"sidebarTitle":"订阅付款重试","title":"订阅付款重试","icon":"arrow-rotate-right","href":"/cn/features/recovery/payment-retries"},{"sidebarTitle":"手动重试","title":"手动支付重试","icon":"hand-pointer","tag":"NEW","href":"/cn/features/recovery/manual-retry"}]},{"group":"Transactions","icon":"credit-card","pages":[{"title":"Payments","icon":"money-bill-transfer","href":"/cn/features/transactions/payments"},{"title":"退款","icon":"rotate-left","href":"/cn/features/transactions/refunds"},{"title":"Disputes","icon":"circle-exclamation","href":"/cn/features/transactions/disputes"}]},{"group":"Entitlements","icon":"gift","tag":"NEW","pages":[{"title":"介绍","sidebarTitle":"介绍","icon":"box-archive","href":"/cn/features/entitlements/introduction"},{"title":"License Keys","icon":"key","href":"/cn/features/license-keys"},{"title":"数字产品交付","sidebarTitle":"数字产品","icon":"download","href":"/cn/features/digital-product-delivery"},{"title":"功能标志权限","sidebarTitle":"功能标志","icon":"flag","tag":"NEW","href":"/cn/features/entitlements/feature-flags"},{"title":"Discord 权限","sidebarTitle":"Discord","icon":"discord","href":"/cn/features/entitlements/discord"},{"title":"GitHub 权限","sidebarTitle":"GitHub","icon":"github","href":"/cn/features/entitlements/github"},{"title":"Telegram 权限","sidebarTitle":"Telegram","icon":"telegram","href":"/cn/features/entitlements/telegram"},{"title":"Framer Entitlement","sidebarTitle":"Framer","icon":"puzzle-piece","href":"/cn/features/entitlements/framer"},{"title":"Notion 权益","sidebarTitle":"Notion","icon":"book","href":"/cn/features/entitlements/notion"}]},{"group":"Payouts and Balances","icon":"wallet","pages":[{"title":"支付流程","icon":"money-bill","href":"/cn/features/payouts/payout-structure"},{"title":"余额","icon":"file-invoice-dollar","href":"/cn/features/account-summary-payout-wallet"}]},{"group":"Account Management","icon":"user","pages":[{"sidebarTitle":"归档企业","title":"归档企业","icon":"box-archive","tag":"NEW","href":"/cn/features/archive-business"},{"title":"Multi-Brand Setup","icon":"building-columns","href":"/cn/features/multi-brands"},{"title":"发票管理","icon":"file-invoice-dollar","href":"/cn/features/invoice-generation"},{"title":"团队成员","icon":"user-gear","href":"/cn/features/team"},{"title":"通信偏好设置","sidebarTitle":"通信偏好设置","icon":"bell","tag":"NEW","href":"/cn/features/communication-preferences"},{"title":"我的账户","icon":"user-gear","href":"/cn/miscellaneous/accounts"}]},{"group":"Pricing","icon":"dollar-sign","pages":[{"sidebarTitle":"含税定价","title":"含税定价","icon":"file-invoice","href":"/cn/features/tax-inclusive-pricing"},{"sidebarTitle":"随意支付","title":"随意支付定价","icon":"dollar-sign","href":"/cn/features/pay-what-you-want"},{"title":"B2B 付款","icon":"money-bills","href":"/cn/features/b2b-payments"},{"title":"本地化定价","sidebarTitle":"本地化定价","icon":"earth-americas","href":"/cn/features/localized-pricing"},{"sidebarTitle":"购买力平价","title":"Purchasing Power Parity","tag":"NEW","icon":"money-bill-trend-up","href":"/cn/features/purchasing-power-parity"},{"sidebarTitle":"魅力定价","title":"魅力定价","tag":"NEW","icon":"tag","href":"/cn/features/charm-pricing"}]},{"sidebarTitle":"结账","title":"结账功能","icon":"cart-shopping","href":"/cn/features/checkout"},{"sidebarTitle":"设计","title":"设计与主题定制","icon":"palette","tag":"NEW","href":"/cn/features/design"},{"group":"Payment Methods","icon":"money-bill-wave","pages":[{"title":"Payment Methods","sidebarTitle":"Overview","icon":"layer-group","href":"/cn/features/payment-methods"},{"title":"信用卡和借记卡","sidebarTitle":"卡片","icon":"credit-card","href":"/cn/features/payment-methods/cards"},{"title":"Digital Wallets","sidebarTitle":"Digital Wallets","icon":"wallet","href":"/cn/features/payment-methods/digital-wallets"},{"title":"先买后付(BNPL)","sidebarTitle":"BNPL","icon":"calendar-days","href":"/cn/features/payment-methods/bnpl"},{"title":"ACH Direct Debit","sidebarTitle":"ACH Direct Debit","icon":"building-columns","href":"/cn/features/payment-methods/ach"},{"title":"印度支付方式","sidebarTitle":"印度","icon":"indian-rupee-sign","href":"/cn/features/payment-methods/india"},{"title":"European Payment Methods","sidebarTitle":"Europe","icon":"euro-sign","href":"/cn/features/payment-methods/europe"},{"title":"韩国支付方式","sidebarTitle":"韩国","icon":"won-sign","href":"/cn/features/payment-methods/south-korea"},{"title":"亚太地区支付方式","sidebarTitle":"亚太地区","icon":"earth-asia","href":"/cn/features/payment-methods/asia-pacific"},{"title":"Pix","sidebarTitle":"Pix","icon":"brazilian-real-sign","href":"/cn/features/payment-methods/pix"},{"title":"稳定币","sidebarTitle":"稳定币","icon":"dollar-sign","href":"/cn/features/payment-methods/stablecoins"},{"title":"微信支付","sidebarTitle":"微信支付","icon":"comment-dollar","href":"/cn/features/payment-methods/wechat"}]},{"title":"第三方分析","sidebarTitle":"第三方分析","icon":"chart-line","tag":"NEW","href":"/cn/features/analytics"},{"sidebarTitle":"自适应货币","title":"自适应货币","icon":"money-bill-transfer","href":"/cn/features/adaptive-currency"},{"group":"BYOP","icon":"shuffle","tag":"BETA","pages":[{"title":"Bring Your Own Processor (BYOP)","sidebarTitle":"Overview","tag":"BETA","icon":"boxes-stacked","href":"/cn/features/byop"},{"title":"Stripe - 连接 \u0026 原始卡片API访问","sidebarTitle":"Stripe","icon":"stripe","href":"/cn/features/byop/stripe"},{"title":"Adyen - Connect \u0026 Raw Card API Access","sidebarTitle":"Adyen","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/adyen.svg","href":"/cn/features/byop/adyen"}]},{"title":"商店前台","icon":"store","href":"/cn/features/storefront"},{"title":"合作伙伴","icon":"users-line","href":"/cn/features/affiliates"},{"title":"Moderation API","icon":"shield-check","tag":"NEW","href":"/cn/features/moderation"},{"title":"在 iOS 上销售数字商品","icon":"mobile","href":"/cn/features/appstore-digital-goods"},{"title":"仪表板分析","sidebarTitle":"仪表板分析","icon":"chart-line","href":"/cn/features/analytics-and-reporting"},{"title":"报告","sidebarTitle":"报告","icon":"file-invoice","href":"/cn/features/reports"}]},{"group":"Integrate","pages":[{"group":"SDKs","icon":"box-open","pages":[{"sidebarTitle":"Overview","title":"官方 SDK","icon":"box","href":"/cn/developer-resources/dodo-payments-sdks"},{"title":"TypeScript","icon":"js","href":"/cn/developer-resources/sdks/typescript"},{"title":"Python","icon":"python","href":"/cn/developer-resources/sdks/python"},{"title":"Go","icon":"golang","href":"/cn/developer-resources/sdks/go"},{"title":"Ruby","icon":"gem","href":"/cn/developer-resources/sdks/ruby"},{"title":"Java","icon":"java","href":"/cn/developer-resources/sdks/java"},{"title":"Kotlin","icon":"k","href":"/cn/developer-resources/sdks/kotlin"},{"title":"PHP","icon":"php","href":"/cn/developer-resources/sdks/php"},{"title":"C#","icon":"c","href":"/cn/developer-resources/sdks/csharp"},{"title":"Rust","icon":"rust","href":"/cn/developer-resources/sdks/rust"}]},{"group":"Mobile Checkout SDKs","icon":"mobile","pages":[{"title":"Mobile Integration Guide","sidebarTitle":"Integration Guide","icon":"mobile","href":"/cn/developer-resources/mobile-integration"},{"title":"Android","sidebarTitle":"Android","tag":"NEW","icon":"android","href":"/cn/developer-resources/sdks/android"},{"title":"iOS","sidebarTitle":"iOS","tag":"NEW","icon":"apple","href":"/cn/developer-resources/sdks/ios"},{"title":"React Native","sidebarTitle":"React Native","tag":"NEW","icon":"react","href":"/cn/developer-resources/sdks/react-native"},{"title":"Flutter","sidebarTitle":"Flutter","tag":"NEW","icon":"layer-group","href":"/cn/developer-resources/sdks/flutter"}]},{"group":"Framework Adaptors","icon":"frame","pages":[{"sidebarTitle":"概述","title":"框架适配器概述","icon":"box","href":"/cn/developer-resources/framework-adaptors"},{"title":"Next.js 适配器","description":"使用 @dodopayments/nextjs package 将 Dodo Payments checkout、Customer Portal 和 webhook route handlers 添加到 Next.js App Router 项目。","icon":"code-merge","href":"/cn/developer-resources/nextjs-adaptor"},{"title":"Better Auth 适配器","icon":"code-merge","href":"/cn/developer-resources/better-auth-adaptor"},{"title":"凸包组件","description":"通过 @dodopayments/convex component 将 Dodo Payments checkout、Customer Portal 和 webhook 处理添加到您的 Convex 后端。","icon":"code-merge","href":"/cn/developer-resources/convex-component"},{"title":"TanStack Adaptor","icon":"code-merge","href":"/cn/developer-resources/tanstack-adaptor"},{"title":"Nuxt 适配器","icon":"code-merge","href":"/cn/developer-resources/nuxt-adaptor"},{"title":"Express 适配器","icon":"code-merge","href":"/cn/developer-resources/express-adaptor"},{"title":"Astro 适配器","icon":"code-merge","href":"/cn/developer-resources/astro-adaptor"},{"title":"SvelteKit 适配器","icon":"code-merge","href":"/cn/developer-resources/sveltekit-adaptor"},{"title":"Hono 适配器","icon":"code-merge","href":"/cn/developer-resources/hono-adaptor"},{"title":"Remix 适配器","icon":"code-merge","href":"/cn/developer-resources/remix-adaptor"},{"title":"Fastify 适配器","icon":"code-merge","href":"/cn/developer-resources/fastify-adaptor"},{"title":"Bun 适配器","icon":"code-merge","href":"/cn/developer-resources/bun-adaptor"}]},{"group":"Webhooks","icon":"webhook","pages":[{"sidebarTitle":"概述","title":"Webhooks","icon":"webhook","href":"/cn/developer-resources/webhooks"},{"title":"Webhook 事件指南","icon":"bell","href":"/cn/developer-resources/webhooks/intents/webhook-events-guide"},{"group":"Webhook Payloads","icon":"code","pages":[{"title":"支付","icon":"credit-card","href":"/cn/developer-resources/webhooks/intents/payment"},{"sidebarTitle":"订阅","title":"订阅 Webhook","icon":"repeat","href":"/cn/developer-resources/webhooks/intents/subscription"},{"title":"退款","icon":"rotate-left","href":"/cn/developer-resources/webhooks/intents/refund"},{"sidebarTitle":"争议","title":"争议 Webhook","icon":"circle-exclamation","href":"/cn/developer-resources/webhooks/intents/dispute"},{"title":"许可证密钥","icon":"key","href":"/cn/developer-resources/webhooks/intents/license-key"},{"title":"权限授予","icon":"gift","href":"/cn/developer-resources/webhooks/intents/entitlement-grant"},{"sidebarTitle":"基于额度的计费","title":"基于额度的计费 Webhook","icon":"coins","href":"/cn/developer-resources/webhooks/intents/credit"},{"title":"恢复","icon":"rotate","href":"/cn/developer-resources/webhooks/intents/recovery"},{"sidebarTitle":"打款","title":"打款 Webhooks","icon":"money-bill-transfer","href":"/cn/developer-resources/webhooks/intents/payout"}]},{"group":"Deploy to Cloud","icon":"rocket","pages":[{"title":"Vercel Functions","icon":"triangle","href":"/cn/developer-resources/webhooks/examples/vercel-example"},{"title":"Cloudflare Workers","icon":"cloud","href":"/cn/developer-resources/webhooks/examples/cloudflare-example"},{"title":"Supabase Edge Functions","icon":"bolt","href":"/cn/developer-resources/webhooks/examples/supabase-example"},{"title":"Netlify 函数","icon":"diamond","href":"/cn/developer-resources/webhooks/examples/netlify-example"}]}]},{"group":"Testing \u0026 Demo Tools","icon":"flask","pages":[{"title":"测试模式与实时模式","icon":"toggle-on","href":"/cn/miscellaneous/test-mode-vs-live-mode"},{"title":"测试流程","icon":"flask","href":"/cn/miscellaneous/testing-process"},{"title":"Atlas 演示产品","icon":"palette","href":"/cn/features/atlas-demo-website"}]},{"group":"Boilerplates","icon":"box-open","pages":[{"sidebarTitle":"Expo","title":"Expo Boilerplate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/expo.svg","tag":"NEW","href":"/cn/developer-resources/expo-boilerplate"},{"sidebarTitle":"Supabase","title":"Supabase 模板","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/supabase.svg","href":"/cn/developer-resources/supabase-boilerplate"},{"sidebarTitle":"Figma 插件","title":"Figma 插件","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/figma.svg","href":"/cn/integrations/figma-plugin"},{"sidebarTitle":"Next.js","title":"Next.js 最小化模板","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/nextjs.svg","href":"/cn/developer-resources/nextjs-boilerplate"},{"sidebarTitle":"Astro","title":"Astro 最小化模板","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/astro.svg","href":"/cn/developer-resources/astro-boilerplate"},{"sidebarTitle":"FastAPI","title":"FastAPI 模板","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/fastapi.svg","tag":"NEW","href":"/cn/developer-resources/fastapi-boilerplate"},{"sidebarTitle":"Go","title":"Go Boilerplate","icon":"golang","tag":"NEW","href":"/cn/developer-resources/go-boilerplate"}]},{"title":"Dodo CLI","icon":"terminal","tag":"NEW","href":"/cn/developer-resources/sdks/cli"},{"title":"覆盖结账","icon":"cart-shopping","href":"/cn/developer-resources/overlay-checkout"},{"title":"内嵌结账","icon":"credit-card","href":"/cn/developer-resources/inline-checkout"},{"title":"计费 SDK","icon":"boxes-stacked","href":"/cn/developer-resources/billingsdk"},{"title":"Dodo Payments MCP Server","icon":"server","href":"/cn/developer-resources/mcp-server"},{"title":"Agent Skills","icon":"wand-magic-sparkles","href":"/cn/developer-resources/agent-skills"},{"sidebarTitle":"数据库同步","title":"与您的数据库同步","icon":"database","href":"/cn/developer-resources/dodo-sync"},{"sidebarTitle":"订阅迁移","title":"迁移到 Dodo Payments 的订阅","icon":"file-import","href":"/cn/miscellaneous/subscription-migration"}]},{"group":"Merchant of Record","pages":[{"sidebarTitle":"什么是 MoR?","title":"介绍","icon":"building-columns","href":"/cn/features/mor-introduction"},{"title":"MoR 与 PG","icon":"scale-balanced","href":"/cn/features/mor-vs-pg"},{"title":"商户受理资格国家","icon":"globe","href":"/cn/miscellaneous/accepted-countries-and-territories"},{"title":"审查与监控政策","icon":"magnifying-glass","href":"/cn/miscellaneous/review-monitoring-policy"},{"sidebarTitle":"Bypass of App Store Fees","title":"Bypassing App Store \u0026 Play Store Fees Using Dodo Payments","icon":"shield-check","href":"/cn/features/bypassing-app-store-fees"}]},{"group":"Miscellaneous","pages":[{"group":"Support Channels","icon":"headset","pages":[{"title":"帮助与支持","icon":"headset","href":"/cn/miscellaneous/help-support"},{"title":"功能请求和路线图","icon":"lightbulb","href":"/cn/features/feature-request"}]},{"title":"移动和桌面应用程序","icon":"mobile","href":"/cn/features/mobile-app"},{"title":"安全报告政策","icon":"shield","href":"/cn/miscellaneous/security-policy"}]}]},{"tab":"Guides","icon":"compass","pages":[{"title":"Guides","href":"/cn/developer-resources/integration-guide"}]},{"tab":"API Reference","icon":"rectangle-code","pages":[{"title":"API Reference","href":"/cn/api-reference/introduction"}]},{"tab":"External Integrations","icon":"plug","pages":[{"title":"External Integrations","href":"/cn/integrations/introduction"}]},{"tab":"Changelog","icon":"calendar-days","pages":[{"title":"Changelog","href":"/cn/changelog/introduction"}]},{"tab":"Community Projects","icon":"users","pages":[{"title":"Community Projects","href":"/cn/community/overview"}]}]},{"language":"hi","pages":[{"title":"hi","href":"/hi/developer-resources/better-auth-adaptor"}]},{"language":"it","pages":[{"title":"it","href":"/it/developer-resources/better-auth-adaptor"}]},{"language":"sv","pages":[{"title":"sv","href":"/sv/developer-resources/better-auth-adaptor"}]}]},"basePath":"","title":"Better Auth 适配器 - Dodo Payments Documentation","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}