@polar-sh/supabase
v0.4.2
Published
Payments and Checkouts made dead simple with Supabase Edge Functions.
Readme
@polar-sh/supabase
Payments and Checkouts made dead simple with Supabase Edge Functions.
npm install @polar-sh/supabase
Checkout
Create a Checkout handler which takes care of redirections.
// 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);Query Params
Pass query params to this route.
- products
?products=123 - customerId (optional)
?products=123&customerId=xxx - customerExternalId (optional)
?products=123&customerExternalId=xxx - customerEmail (optional)
?products=123&[email protected] - customerName (optional)
?products=123&customerName=Jane - customerBillingAddress (optional)
URL-Encoded JSON string - customerTaxId (optional)
?products=123&customerTaxId=xxx - customerIpAddress (optional)
?products=123&customerIpAddress=192.168.1.1 - customerMetadata (optional)
URL-Encoded JSON string - allowDiscountCodes (optional)
?products=123&allowDiscountCodes=true - discountId (optional)
?products=123&discountId=xxx - seats (optional)
?products=123&seats=5- Number of seats for seat-based products - metadata (optional)
URL-Encoded JSON string
Customer Portal
Create a customer portal where your customer can view orders and subscriptions.
// 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);Webhooks
A simple utility which resolves incoming webhook payloads by validating the webhook signature.
// 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);Payload Handlers
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
Edge Runtime Compatibility
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.
