Skip to content

that-ambuj/dodo-nextjs-adapter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dodo Next.js Adapter

for ai agents: see llm-prompt.txt

A TypeScript library that exports Next.js Checkout components for seamless checkout experiences.

Installation

# Not published on npm yet
npm install dodo-nextjs-adapter zod next

# Use the latest version from GitHub if you want to try out
npm install dodo-nextjs-adapter@https://github.com/that-ambuj/nextjs-adapter zod next

Quick Start

All the examples below assume you're using Next.js App Router.

1. Checkout Route Handler

// app/checkout/route.ts
import { Checkout } from 'dodo-nextjs-adapter'

export const GET = Checkout({
  // Can be omitted if DODO_PAYMENTS_API_KEY environment variable is set.
  bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
  // URL to redirect to after successful checkout, can be omitted.
  successUrl: process.env.SUCCESS_URL!,
  // Omit or set to "live_mode" for production
  environment: "test_mode"
})

Query Parameters

The checkout route supports the following query parameters:

  • productId - Product identifier (required, e.g., ?productId=pdt_nZuwz45WAs64n3l07zpQR)
  • customerEmail - Customer email (optional, e.g., ?products=123&[email protected])
  • customerName - Customer name (optional, e.g., ?products=123&customerName=Jane)

2. Customer Portal Route Handler

// app/customer-portal/route.ts
import { CustomerPortal } from 'dodo-nextjs-adapter'

export const GET = CustomerPortal({
  // Can be omitted if DODO_PAYMENTS_API_KEY environment variable is set.
  bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
  // Omit or set to "live_mode" for production
  environment: "test_mode",
  // Write logic to get customerId from request here
  getCustomerId: (req: NextRequest) => ""
})

3. Webhook Route Handler

// app/api/webhook/dodo-payments/route.ts
import { Webhook } from 'dodo-nextjs-adapter'

export const POST = Webhook({
  webhookSecret: process.env.DODO_WEBHOOK_SECRET!,
  onPayload: async (payload) => {
    // handle the payload
  }
  // ... other event handlers for granular control
})

Supported Webhook Event Handlers

The Webhook function accepts an object with various onEventName properties, where EventName corresponds to the type of webhook event. Each handler is an async function that receives the parsed payload for that specific event type. Below is a comprehensive list of all supported event handlers with their function signatures:

  • onPayload?: (payload: WebhookPayload) => Promise<void>;
  • onPaymentSucceeded?: (payload: WebhookPayload) => Promise<void>;
  • onPaymentFailed?: (payload: WebhookPayload) => Promise<void>;
  • onPaymentProcessing?: (payload: WebhookPayload) => Promise<void>;
  • onPaymentCancelled?: (payload: WebhookPayload) => Promise<void>;
  • onRefundSucceeded?: (payload: WebhookPayload) => Promise<void>;
  • onRefundFailed?: (payload: WebhookPayload) => Promise<void>;
  • onDisputeOpened?: (payload: WebhookPayload) => Promise<void>;
  • onDisputeExpired?: (payload: WebhookPayload) => Promise<void>;
  • onDisputeAccepted?: (payload: WebhookPayload) => Promise<void>;
  • onDisputeCancelled?: (payload: WebhookPayload) => Promise<void>;
  • onDisputeChallenged?: (payload: WebhookPayload) => Promise<void>;
  • onDisputeWon?: (payload: WebhookPayload) => Promise<void>;
  • onDisputeLost?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionActive?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionOnHold?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionRenewed?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionPaused?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionPlanChanged?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionCancelled?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionFailed?: (payload: WebhookPayload) => Promise<void>;
  • onSubscriptionExpired?: (payload: WebhookPayload) => Promise<void>;
  • onLicenseKeyCreated?: (payload: WebhookPayload) => Promise<void>;

## Development

This library is built with:

- **TypeScript** - Type safety and better developer experience
- **tsup** - Fast TypeScript bundler

### Building

```bash
pnpm build

Development Mode

pnpm dev

Environment Variables

You can set DODO_PAYMENTS_API_KEY environment variable to use your API key and omit the bearerToken parameter.

DODO_PAYMENTS_API_KEY=your-api-key

License

ISC

About

Next.js Adapter for Dodo Payments in 3 lines

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •