Payments and Checkouts made dead simple with Supabase Edge Functions.
npm install @polar-sh/supabasePayments and Checkouts made dead simple with Supabase Edge Functions.
npm install @polar-sh/supabase
Create a Checkout handler which takes care of redirections.
``typescript
// supabase/functions/checkout/index.ts
import { Checkout } from "@polar-sh/supabase";
const handler = Checkout({
accessToken: Deno.env.get("POLAR_ACCESS_TOKEN"),
successUrl: Deno.env.get("SUCCESS_URL"),
returnUrl: "https://myapp.com", // Optional Return URL, which renders a Back-button in the Checkout
server: "sandbox", // Use sandbox if you're testing Polar - omit the parameter or pass 'production' otherwise
theme: "dark", // Enforces the theme - System-preferred theme will be set if left omitted
});
Deno.serve(handler);
`
Pass query params to this route.
- products ?products=123?products=123&customerId=xxx
- customerId (optional) ?products=123&customerExternalId=xxx
- customerExternalId (optional) ?products=123&customerEmail=janedoe@gmail.com
- customerEmail (optional) ?products=123&customerName=Jane
- customerName (optional) URL-Encoded JSON string
- customerBillingAddress (optional) ?products=123&customerTaxId=xxx
- customerTaxId (optional) ?products=123&customerIpAddress=192.168.1.1
- customerIpAddress (optional) URL-Encoded JSON string
- customerMetadata (optional) ?products=123&allowDiscountCodes=true
- allowDiscountCodes (optional) ?products=123&discountId=xxx
- discountId (optional) ?products=123&seats=5
- seats (optional) - Number of seats for seat-based productsURL-Encoded JSON string
- metadata (optional)
Create a customer portal where your customer can view orders and subscriptions.
`typescript
// supabase/functions/portal/index.ts
import { CustomerPortal } from "@polar-sh/supabase";
const handler = CustomerPortal({
accessToken: Deno.env.get("POLAR_ACCESS_TOKEN")!,
getCustomerId: async (req: Request) => {
// Function to resolve a Polar Customer ID
// You can extract customer ID from auth headers, cookies, etc.
return "123";
},
returnUrl: "https://myapp.com", // Optional Return URL, which renders a Back-button in the Customer Portal
server: "sandbox", // Use sandbox if you're testing Polar - omit the parameter or pass 'production' otherwise
});
Deno.serve(handler);
`
A simple utility which resolves incoming webhook payloads by validating the webhook signature.
`typescript
// supabase/functions/webhooks/index.ts
import { Webhooks } from "@polar-sh/supabase";
const handler = Webhooks({
webhookSecret: Deno.env.get("POLAR_WEBHOOK_SECRET")!,
onPayload: async (payload) => {
// Handle the payload
// No need to return an acknowledge response
},
});
Deno.serve(handler);
`
The Webhook handler also supports granular handlers for easy integration.
- onCheckoutCreated: (payload) => Promise
- onCheckoutUpdated: (payload) => Promise
- onOrderCreated: (payload) => Promise
- onOrderUpdated: (payload) => Promise
- onOrderPaid: (payload) => Promise
- onOrderRefunded: (payload) => Promise
- onRefundCreated: (payload) => Promise
- onRefundUpdated: (payload) => Promise
- onSubscriptionCreated: (payload) => Promise
- onSubscriptionUpdated: (payload) => Promise
- onSubscriptionActive: (payload) => Promise
- onSubscriptionCanceled: (payload) => Promise
- onSubscriptionRevoked: (payload) => Promise
- onSubscriptionUncanceled: (payload) => Promise
- onProductCreated: (payload) => Promise
- onProductUpdated: (payload) => Promise
- onOrganizationUpdated: (payload) => Promise
- onBenefitCreated: (payload) => Promise
- onBenefitUpdated: (payload) => Promise
- onBenefitGrantCreated: (payload) => Promise
- onBenefitGrantUpdated: (payload) => Promise
- onBenefitGrantRevoked: (payload) => Promise
- onCustomerCreated: (payload) => Promise
- onCustomerUpdated: (payload) => Promise
- onCustomerDeleted: (payload) => Promise
- onCustomerStateChanged: (payload) => Promise
This adapter is built to work with Supabase Edge Functions, which run on the Deno runtime. It uses standard Web APIs (Request, Response) that are compatible with edge environments, making it ideal for:
- Supabase Edge Functions
- Deno Deploy
- Other Deno-based edge runtimes
All handlers return standard Response objects and accept standard Request` objects, ensuring maximum compatibility with edge runtimes.