@dodopayments/convex 0.2.1 → 0.2.2

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
@@ -96,22 +96,24 @@ export const dodo = new DodoPayments(components.dodopayments, {
96
96
  if (!identity) {
97
97
  return null; // User is not logged in
98
98
  }
99
-
99
+
100
100
  // Use ctx.runQuery() to lookup user from your database
101
101
  const user = await ctx.runQuery(internal.users.getByAuthId, {
102
102
  authId: identity.subject,
103
103
  });
104
-
104
+
105
105
  if (!user) {
106
106
  return null; // User not found in database
107
107
  }
108
-
108
+
109
109
  return {
110
110
  dodoCustomerId: user.dodoCustomerId, // Replace user.dodoCustomerId with your field storing Dodo Payments customer ID
111
111
  };
112
112
  },
113
113
  apiKey: process.env.DODO_PAYMENTS_API_KEY!,
114
- environment: process.env.DODO_PAYMENTS_ENVIRONMENT as "test_mode" | "live_mode",
114
+ environment: process.env.DODO_PAYMENTS_ENVIRONMENT as
115
+ | "test_mode"
116
+ | "live_mode",
115
117
  });
116
118
 
117
119
  // Export the API methods for use in your app
@@ -185,11 +187,13 @@ import { v } from "convex/values";
185
187
  import { checkout } from "./dodo";
186
188
 
187
189
  export const createCheckout = action({
188
- args: {
189
- product_cart: v.array(v.object({
190
- product_id: v.string(),
191
- quantity: v.number(),
192
- })),
190
+ args: {
191
+ product_cart: v.array(
192
+ v.object({
193
+ product_id: v.string(),
194
+ quantity: v.number(),
195
+ }),
196
+ ),
193
197
  returnUrl: v.optional(v.string()),
194
198
  },
195
199
  handler: async (ctx, args) => {
@@ -311,16 +315,16 @@ export const dodo = new DodoPayments(components.dodopayments, {
311
315
  if (!identity) {
312
316
  return null; // User is not logged in
313
317
  }
314
-
318
+
315
319
  // Use ctx.runQuery() to lookup user from your database
316
320
  const user = await ctx.runQuery(internal.users.getByAuthId, {
317
321
  authId: identity.subject,
318
322
  });
319
-
323
+
320
324
  if (!user) {
321
325
  return null; // User not found in database
322
326
  }
323
-
327
+
324
328
  return {
325
329
  dodoCustomerId: user.dodoCustomerId, // Replace user.dodoCustomerId with your field storing Dodo Payments customer ID
326
330
  };
@@ -341,7 +345,7 @@ import { checkout } from "./dodo";
341
345
 
342
346
  // Checkout session with full feature support
343
347
  export const createCheckout = action({
344
- args: {
348
+ args: {
345
349
  product_cart: v.array(v.object({
346
350
  product_id: v.string(),
347
351
  quantity: v.number(),
@@ -1,6 +1,6 @@
1
1
  import { action } from './_generated/server.js';
2
2
  import { v } from 'convex/values';
3
- import { buildCheckoutUrl } from '../core/dist/checkout/checkout.js';
3
+ import { buildCheckoutUrl } from '../packages/core/dist/checkout/checkout.js';
4
4
  import DodoPayments from 'dodopayments';
5
5
 
6
6
  const checkoutSessionPayloadValidator = v.object({
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sources":["../../src/component/lib.ts"],"sourcesContent":["import { action } from \"../component/_generated/server\";\nimport { v } from \"convex/values\";\nimport { \n buildCheckoutUrl, \n type CheckoutSessionPayload\n} from \"@dodopayments/core/checkout\";\nimport DodoPayments from \"dodopayments\";\n\nconst checkoutSessionPayloadValidator = v.object({\n product_cart: v.array(v.object({\n product_id: v.string(),\n quantity: v.number(),\n })),\n customer: v.optional(v.object({\n email: v.optional(v.string()),\n name: v.optional(v.string()),\n phone_number: v.optional(v.string()),\n })),\n billing_address: v.optional(v.object({\n street: v.optional(v.string()),\n city: v.optional(v.string()),\n state: v.optional(v.string()),\n country: v.string(),\n zipcode: v.optional(v.string()),\n })),\n return_url: v.optional(v.string()),\n allowed_payment_method_types: v.optional(v.array(v.string())),\n billing_currency: v.optional(v.string()),\n show_saved_payment_methods: v.optional(v.boolean()),\n confirm: v.optional(v.boolean()),\n discount_code: v.optional(v.string()),\n metadata: v.optional(v.record(v.string(), v.string())),\n customization: v.optional(v.object({\n theme: v.optional(v.string()),\n show_order_details: v.optional(v.boolean()),\n show_on_demand_tag: v.optional(v.boolean()),\n })),\n feature_flags: v.optional(v.object({\n allow_currency_selection: v.optional(v.boolean()),\n allow_discount_code: v.optional(v.boolean()),\n allow_phone_number_collection: v.optional(v.boolean()),\n allow_tax_id: v.optional(v.boolean()),\n always_create_new_customer: v.optional(v.boolean()),\n })),\n subscription_data: v.optional(v.object({\n trial_period_days: v.optional(v.number()),\n })),\n});\n\nexport const checkout = action({\n args: {\n payload: checkoutSessionPayloadValidator,\n apiKey: v.string(),\n environment: v.union(v.literal(\"test_mode\"), v.literal(\"live_mode\")),\n },\n returns: v.object({ checkout_url: v.string() }),\n handler: async (_, { payload, apiKey, environment }): Promise<{ checkout_url: string }> => {\n const checkoutUrl = await buildCheckoutUrl({\n sessionPayload: payload as CheckoutSessionPayload,\n bearerToken: apiKey,\n environment,\n type: \"session\",\n });\n return { checkout_url: checkoutUrl };\n },\n});\n\nexport const customerPortal = action({\n args: {\n dodoCustomerId: v.string(),\n send_email: v.optional(v.boolean()),\n apiKey: v.string(),\n environment: v.union(v.literal(\"test_mode\"), v.literal(\"live_mode\")),\n },\n returns: v.object({ portal_url: v.string() }),\n handler: async (_, { dodoCustomerId, send_email, apiKey, environment }): Promise<{ portal_url: string }> => {\n if (!dodoCustomerId) {\n throw new Error(\"dodoCustomerId is required for customerPortal.\");\n }\n\n const dodopayments = new DodoPayments({\n bearerToken: apiKey,\n environment,\n });\n \n const params = {\n send_email: Boolean(send_email),\n };\n\n const session = await dodopayments.customers.customerPortal.create(dodoCustomerId, params);\n return { portal_url: session.link };\n },\n});"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib.js","sources":["../../src/component/lib.ts"],"sourcesContent":["import { action } from \"../component/_generated/server\";\nimport { v } from \"convex/values\";\nimport {\n buildCheckoutUrl,\n type CheckoutSessionPayload,\n} from \"@dodopayments/core/checkout\";\nimport DodoPayments from \"dodopayments\";\n\nconst checkoutSessionPayloadValidator = v.object({\n product_cart: v.array(\n v.object({\n product_id: v.string(),\n quantity: v.number(),\n }),\n ),\n customer: v.optional(\n v.object({\n email: v.optional(v.string()),\n name: v.optional(v.string()),\n phone_number: v.optional(v.string()),\n }),\n ),\n billing_address: v.optional(\n v.object({\n street: v.optional(v.string()),\n city: v.optional(v.string()),\n state: v.optional(v.string()),\n country: v.string(),\n zipcode: v.optional(v.string()),\n }),\n ),\n return_url: v.optional(v.string()),\n allowed_payment_method_types: v.optional(v.array(v.string())),\n billing_currency: v.optional(v.string()),\n show_saved_payment_methods: v.optional(v.boolean()),\n confirm: v.optional(v.boolean()),\n discount_code: v.optional(v.string()),\n metadata: v.optional(v.record(v.string(), v.string())),\n customization: v.optional(\n v.object({\n theme: v.optional(v.string()),\n show_order_details: v.optional(v.boolean()),\n show_on_demand_tag: v.optional(v.boolean()),\n }),\n ),\n feature_flags: v.optional(\n v.object({\n allow_currency_selection: v.optional(v.boolean()),\n allow_discount_code: v.optional(v.boolean()),\n allow_phone_number_collection: v.optional(v.boolean()),\n allow_tax_id: v.optional(v.boolean()),\n always_create_new_customer: v.optional(v.boolean()),\n }),\n ),\n subscription_data: v.optional(\n v.object({\n trial_period_days: v.optional(v.number()),\n }),\n ),\n});\n\nexport const checkout = action({\n args: {\n payload: checkoutSessionPayloadValidator,\n apiKey: v.string(),\n environment: v.union(v.literal(\"test_mode\"), v.literal(\"live_mode\")),\n },\n returns: v.object({ checkout_url: v.string() }),\n handler: async (\n _,\n { payload, apiKey, environment },\n ): Promise<{ checkout_url: string }> => {\n const checkoutUrl = await buildCheckoutUrl({\n sessionPayload: payload as CheckoutSessionPayload,\n bearerToken: apiKey,\n environment,\n type: \"session\",\n });\n return { checkout_url: checkoutUrl };\n },\n});\n\nexport const customerPortal = action({\n args: {\n dodoCustomerId: v.string(),\n send_email: v.optional(v.boolean()),\n apiKey: v.string(),\n environment: v.union(v.literal(\"test_mode\"), v.literal(\"live_mode\")),\n },\n returns: v.object({ portal_url: v.string() }),\n handler: async (\n _,\n { dodoCustomerId, send_email, apiKey, environment },\n ): Promise<{ portal_url: string }> => {\n if (!dodoCustomerId) {\n throw new Error(\"dodoCustomerId is required for customerPortal.\");\n }\n\n const dodopayments = new DodoPayments({\n bearerToken: apiKey,\n environment,\n });\n\n const params = {\n send_email: Boolean(send_email),\n };\n\n const session = await dodopayments.customers.customerPortal.create(\n dodoCustomerId,\n params,\n );\n return { portal_url: session.link };\n },\n});\n"],"names":[],"mappings":"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"}