@dodopayments/express 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,9 +26,9 @@ import { checkoutHandler } from "@dodopayments/express";
26
26
  app.get(
27
27
  "/api/checkout",
28
28
  checkoutHandler({
29
- bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
30
- returnUrl: process.env.RETURN_URL!,
31
- environment: "test_mode",
29
+ bearerToken: process.env.DODO_PAYMENTS_API_KEY,
30
+ returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
31
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
32
32
  type: "static",
33
33
  }),
34
34
  );
@@ -36,12 +36,22 @@ app.get(
36
36
  app.post(
37
37
  "/api/checkout",
38
38
  checkoutHandler({
39
- bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
40
- returnUrl: process.env.RETURN_URL!,
41
- environment: "test_mode",
39
+ bearerToken: process.env.DODO_PAYMENTS_API_KEY,
40
+ returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
41
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
42
42
  type: "dynamic",
43
43
  }),
44
44
  );
45
+
46
+ app.post(
47
+ "/api/checkout",
48
+ checkoutHandler({
49
+ bearerToken: process.env.DODO_PAYMENTS_API_KEY,
50
+ returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
51
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
52
+ type: "session",
53
+ }),
54
+ );
45
55
  ```
46
56
 
47
57
  ---
@@ -121,28 +131,36 @@ Here's how you should structure your response:
121
131
 
122
132
  **If Checkout Route Handler is selected:**
123
133
 
124
- **Purpose**: This handler redirects users to the Dodo Payments checkout page.
134
+ **Purpose**: This handler manages different types of checkout flows. All checkout types (static, dynamic, and sessions) return JSON responses with checkout URLs for programmatic handling.
125
135
 
126
136
  **Integration**:
127
- Create two routes in your Express app — one for static (GET) and one for dynamic (POST) checkout.
137
+ Create routes in your Express app for static (GET), dynamic (POST), and checkout sessions (POST).
128
138
 
129
139
 
130
140
  import { checkoutHandler } from '@dodopayments/express';
131
141
 
132
142
  app.get('/api/checkout', checkoutHandler({
133
- bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
134
- returnUrl: process.env.RETURN_URL!,
135
- environment: "test_mode",
143
+ bearerToken: process.env.DODO_PAYMENTS_API_KEY,
144
+ returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
145
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
136
146
  type: "static"
137
147
  }));
138
148
 
139
149
  app.post('/api/checkout', checkoutHandler({
140
- bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
141
- returnUrl: process.env.RETURN_URL!,
142
- environment: "test_mode",
150
+ bearerToken: process.env.DODO_PAYMENTS_API_KEY,
151
+ returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
152
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
143
153
  type: "dynamic"
144
154
  }));
145
155
 
156
+ // For checkout sessions
157
+ app.post('/api/checkout', checkoutHandler({
158
+ bearerToken: process.env.DODO_PAYMENTS_API_KEY,
159
+ returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
160
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
161
+ type: "session"
162
+ }));
163
+
146
164
  Config Options:
147
165
 
148
166
  bearerToken: Your Dodo Payments API key (recommended to be stored in DODO_PAYMENTS_API_KEY env variable).
@@ -151,7 +169,7 @@ Config Options:
151
169
 
152
170
  environment: "test_mode" or "live_mode"
153
171
 
154
- type: "static" (GET) or "dynamic" (POST)
172
+ type: "static" (GET), "dynamic" (POST), or "session" (POST)
155
173
 
156
174
  GET (static checkout) expects query parameters:
157
175
 
@@ -159,12 +177,29 @@ GET (static checkout) expects query parameters:
159
177
 
160
178
  quantity, customer fields (fullName, email, etc.), and metadata (metadata_*) are optional.
161
179
 
180
+ Returns: {"checkout_url": "https://checkout.dodopayments.com/..."}
181
+
162
182
  POST (dynamic checkout) expects a JSON body with payment details (one-time or subscription). Reference the docs for the full POST schema:
163
183
 
164
184
  One-time payments: https://docs.dodopayments.com/api-reference/payments/post-payments
165
185
 
166
186
  Subscriptions: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions
167
187
 
188
+ Returns: {"checkout_url": "https://checkout.dodopayments.com/..."}
189
+
190
+ POST (checkout sessions) - (Recommended) A more customizable checkout experience:
191
+
192
+ Expects a JSON body with product_cart array and customer details.
193
+
194
+ One-time payments: https://docs.dodopayments.com/api-reference/payments/post-payments
195
+
196
+ Subscriptions: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions
197
+
198
+ Required fields for checkout sessions:
199
+ product_cart (array): Array of products with product_id and quantity
200
+
201
+ Returns: {"checkout_url": "https://checkout.dodopayments.com/session/..."}
202
+
168
203
  If Customer Portal Route Handler is selected:
169
204
 
170
205
  Purpose: This route allows customers to manage their subscriptions via the Dodo Payments portal.
@@ -174,8 +209,8 @@ Integration:
174
209
  import { CustomerPortal } from "@dodopayments/express";
175
210
 
176
211
  app.get('/api/customer-portal', CustomerPortal({
177
- bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
178
- environment: "test_mode",
212
+ bearerToken: process.env.DODO_PAYMENTS_API_KEY,
213
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
179
214
  }));
180
215
 
181
216
  Query Parameters:
@@ -195,7 +230,7 @@ Integration:
195
230
  import { Webhooks } from "@dodopayments/express";
196
231
 
197
232
  app.post('/api/webhook', Webhooks({
198
- webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_SECRET!,
233
+ webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY,
199
234
  onPayload: async (payload) => {
200
235
  // Handle generic payload
201
236
  },
@@ -232,7 +267,7 @@ You may pass in any of the following handlers:
232
267
 
233
268
  onDisputeOpened, onDisputeExpired, onDisputeAccepted, onDisputeCancelled, onDisputeChallenged, onDisputeWon, onDisputeLost
234
269
 
235
- onSubscriptionActive, onSubscriptionOnHold, onSubscriptionRenewed, onSubscriptionPaused, onSubscriptionPlanChanged, onSubscriptionCancelled, onSubscriptionFailed, onSubscriptionExpired
270
+ onSubscriptionActive, onSubscriptionOnHold, onSubscriptionRenewed, onSubscriptionPlanChanged, onSubscriptionCancelled, onSubscriptionFailed, onSubscriptionExpired
236
271
 
237
272
  onLicenseKeyCreated
238
273
 
@@ -241,13 +276,14 @@ Environment Variable Setup:
241
276
  Make sure to define these environment variables in your project:
242
277
 
243
278
  DODO_PAYMENTS_API_KEY=your-api-key
244
- RETURN_URL=https://yourapp.com/success
245
- DODO_PAYMENTS_WEBHOOK_SECRET=your-webhook-secret
279
+ DODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secret
280
+ DODO_PAYMENTS_ENVIRONMENT="test_mode" or "live_mode"
281
+ DODO_PAYMENTS_RETURN_URL=your-return-url
246
282
 
247
283
  Use these inside your code as:
248
284
 
249
- process.env.DODO_PAYMENTS_API_KEY!
250
- process.env.DODO_PAYMENTS_WEBHOOK_SECRET!
285
+ process.env.DODO_PAYMENTS_API_KEY
286
+ process.env.DODO_PAYMENTS_WEBHOOK_SECRET
251
287
 
252
288
  Security Note: Do NOT commit secrets to version control. Use .env files locally and secrets managers in deployment environments (e.g., AWS, Vercel, Heroku, etc.).
253
289
  ```
@@ -1,3 +1,3 @@
1
1
  import type { Request, Response } from "express";
2
2
  import { CheckoutHandlerConfig } from "@dodopayments/core/checkout";
3
- export declare function checkoutHandler(config: CheckoutHandlerConfig): (req: Request, res: Response) => Response<any, Record<string, any>> | Promise<void | Response<any, Record<string, any>>>;
3
+ export declare function checkoutHandler(config: CheckoutHandlerConfig): (req: Request, res: Response) => Response<any, Record<string, any>> | Promise<Response<any, Record<string, any>>>;