@dodopayments/nuxt 0.1.4 → 0.1.5

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
@@ -209,6 +209,15 @@ Dynamic Checkout (POST): Parameters are sent as a JSON body. Supports both one-t
209
209
  - Docs - One Time Payment Product: https://docs.dodopayments.com/api-reference/payments/post-payments
210
210
  - Docs - Subscription Product: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions
211
211
 
212
+ Checkout Sessions (POST) - (Recommended) A more customizable checkout experience:
213
+ - Parameters are sent as a JSON body. Supports both one-time and recurring payments.
214
+ - Returns: {"checkout_url": "https://checkout.dodopayments.com/session/..."}
215
+ - For a complete list of supported POST body fields, refer to:
216
+ - Docs - One Time Payment Product: https://docs.dodopayments.com/api-reference/payments/post-payments
217
+ - Docs - Subscription Product: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions
218
+ - Required fields for checkout sessions:
219
+ - product_cart (array): Array of products with product_id and quantity
220
+
212
221
  Error Handling: If productId is missing or other query parameters are invalid, the handler will return a 400 response.
213
222
 
214
223
  If Customer Portal API Route is selected:
@@ -291,7 +300,6 @@ Event Routing: Calls the appropriate event handler based on the payload type. Su
291
300
  - onSubscriptionActive?: (payload: WebhookPayload) => Promise<void>
292
301
  - onSubscriptionOnHold?: (payload: WebhookPayload) => Promise<void>
293
302
  - onSubscriptionRenewed?: (payload: WebhookPayload) => Promise<void>
294
- - onSubscriptionPaused?: (payload: WebhookPayload) => Promise<void>
295
303
  - onSubscriptionPlanChanged?: (payload: WebhookPayload) => Promise<void>
296
304
  - onSubscriptionCancelled?: (payload: WebhookPayload) => Promise<void>
297
305
  - onSubscriptionFailed?: (payload: WebhookPayload) => Promise<void>
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dodopayments/nuxt",
3
3
  "configKey": "dodopayments",
4
- "version": "0.1.4",
4
+ "version": "0.1.5",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.1",
7
7
  "unbuild": "3.5.0"
@@ -1,31 +1,65 @@
1
1
  import {
2
2
  buildCheckoutUrl,
3
3
  checkoutQuerySchema,
4
- dynamicCheckoutBodySchema
4
+ dynamicCheckoutBodySchema,
5
+ checkoutSessionPayloadSchema
5
6
  } from "@dodopayments/core/checkout";
6
- import { getQuery, readBody, sendRedirect, createError } from "h3";
7
+ import { getQuery, readBody, createError } from "h3";
7
8
  export function checkoutHandler(config) {
8
9
  return async (event) => {
9
10
  if (event.method === "POST") {
10
11
  const body = await readBody(event);
11
- const { success, data, error } = dynamicCheckoutBodySchema.safeParse(body);
12
- if (!success) {
12
+ if (config.type === "dynamic") {
13
+ const { success, data, error } = dynamicCheckoutBodySchema.safeParse(body);
14
+ if (!success) {
15
+ throw createError({
16
+ statusCode: 400,
17
+ statusMessage: "Invalid request body",
18
+ data: error.format()
19
+ });
20
+ }
21
+ try {
22
+ const url = await buildCheckoutUrl({ body: data, ...config, type: "dynamic" });
23
+ return { checkout_url: url };
24
+ } catch (error2) {
25
+ throw createError({ statusCode: 400, statusMessage: error2.message });
26
+ }
27
+ } else {
28
+ const { success, data, error } = checkoutSessionPayloadSchema.safeParse(body);
29
+ if (!success) {
30
+ throw createError({
31
+ statusCode: 400,
32
+ statusMessage: "Invalid checkout session payload",
33
+ data: error.format()
34
+ });
35
+ }
36
+ try {
37
+ const url = await buildCheckoutUrl({
38
+ sessionPayload: data,
39
+ ...config,
40
+ type: "session"
41
+ });
42
+ return { checkout_url: url };
43
+ } catch (error2) {
44
+ throw createError({ statusCode: 400, statusMessage: error2.message });
45
+ }
46
+ }
47
+ } else {
48
+ const queryParams = getQuery(event);
49
+ if (!queryParams.productId) {
13
50
  throw createError({
14
51
  statusCode: 400,
15
- statusMessage: "Invalid request body",
16
- data: error.format()
52
+ statusMessage: "Please provide productId query parameter"
17
53
  });
18
54
  }
19
- try {
20
- const url = await buildCheckoutUrl({ body: data, ...config, type: "dynamic" });
21
- return sendRedirect(event, url, 302);
22
- } catch (error2) {
23
- throw createError({ statusCode: 400, statusMessage: error2.message });
24
- }
25
- } else {
26
- const queryParams = getQuery(event);
27
55
  const { success, data, error } = checkoutQuerySchema.safeParse(queryParams);
28
56
  if (!success) {
57
+ if (error.errors.some((e) => e.path.toString() === "productId")) {
58
+ throw createError({
59
+ statusCode: 400,
60
+ statusMessage: "Please provide productId query parameter"
61
+ });
62
+ }
29
63
  throw createError({
30
64
  statusCode: 400,
31
65
  statusMessage: "Invalid query parameters",
@@ -34,7 +68,7 @@ export function checkoutHandler(config) {
34
68
  }
35
69
  try {
36
70
  const url = await buildCheckoutUrl({ queryParams: data, ...config });
37
- return sendRedirect(event, url, 302);
71
+ return { checkout_url: url };
38
72
  } catch (error2) {
39
73
  throw createError({ statusCode: 400, statusMessage: error2.message });
40
74
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dodopayments/nuxt",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Dodo Payments Nuxt integration",
5
5
  "type": "module",
6
6
  "publishConfig": {