@dodopayments/better-auth 1.6.1 → 1.6.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/dist/{chunk-65YIVTFE.js → chunk-6VDYFSNJ.js} +6 -6
- package/dist/chunk-6VDYFSNJ.js.map +1 -0
- package/dist/{chunk-TOPOAYYO.js → chunk-EGRIWRWP.js} +6 -3
- package/dist/chunk-EGRIWRWP.js.map +1 -0
- package/dist/{chunk-HHIXOUFD.js → chunk-XXIDSJPK.js} +4 -4
- package/dist/chunk-XXIDSJPK.js.map +1 -0
- package/dist/{chunk-DTOB4IQZ.js → chunk-YCUWFLKK.js} +15 -12
- package/dist/chunk-YCUWFLKK.js.map +1 -0
- package/dist/{chunk-ARA27DRZ.js → chunk-ZA3TNX5K.js} +11 -9
- package/dist/chunk-ZA3TNX5K.js.map +1 -0
- package/dist/client.d.cts +1 -2
- package/dist/client.d.ts +1 -2
- package/dist/hooks/customer.d.cts +1 -2
- package/dist/hooks/customer.d.ts +1 -2
- package/dist/index.cjs +36 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/plugins/checkout.cjs +5 -5
- package/dist/plugins/checkout.cjs.map +1 -1
- package/dist/plugins/checkout.d.cts +2 -3
- package/dist/plugins/checkout.d.ts +2 -3
- package/dist/plugins/checkout.js +1 -1
- package/dist/plugins/portal.cjs +18 -12
- package/dist/plugins/portal.cjs.map +1 -1
- package/dist/plugins/portal.d.cts +2 -3
- package/dist/plugins/portal.d.ts +2 -3
- package/dist/plugins/portal.js +2 -2
- package/dist/plugins/usage.cjs +14 -9
- package/dist/plugins/usage.cjs.map +1 -1
- package/dist/plugins/usage.d.cts +6 -107
- package/dist/plugins/usage.d.ts +6 -107
- package/dist/plugins/usage.js +2 -2
- package/dist/plugins/webhooks.cjs +3 -3
- package/dist/plugins/webhooks.cjs.map +1 -1
- package/dist/plugins/webhooks.d.cts +2 -3
- package/dist/plugins/webhooks.d.ts +2 -3
- package/dist/plugins/webhooks.js +1 -1
- package/dist/{types-3pb2RGTM.d.cts → types-D0tVSLaf.d.cts} +110 -9
- package/dist/{types-DygjjcRn.d.ts → types-D0tVSLaf.d.ts} +110 -9
- package/dist/types.d.cts +1 -2
- package/dist/types.d.ts +1 -2
- package/dist/utils.cjs +5 -2
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +8 -1
- package/dist/utils.d.ts +8 -1
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-65YIVTFE.js.map +0 -1
- package/dist/chunk-ARA27DRZ.js.map +0 -1
- package/dist/chunk-DTOB4IQZ.js.map +0 -1
- package/dist/chunk-HHIXOUFD.js.map +0 -1
- package/dist/chunk-TOPOAYYO.js.map +0 -1
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
checkoutSessionPayloadSchema,
|
|
7
7
|
dynamicCheckoutBodySchema
|
|
8
8
|
} from "@dodopayments/core/checkout";
|
|
9
|
-
var checkout = (checkoutOptions = {}) => (
|
|
9
|
+
var checkout = (checkoutOptions = {}) => (options) => {
|
|
10
10
|
return {
|
|
11
11
|
/**
|
|
12
12
|
* @deprecated
|
|
@@ -64,8 +64,8 @@ var checkout = (checkoutOptions = {}) => (dodopayments) => {
|
|
|
64
64
|
...ctx.body.metadata
|
|
65
65
|
} : ctx.body.metadata
|
|
66
66
|
},
|
|
67
|
-
bearerToken:
|
|
68
|
-
environment:
|
|
67
|
+
bearerToken: options.client.bearerToken,
|
|
68
|
+
environment: options.client.baseURL.includes("test") ? "test_mode" : "live_mode",
|
|
69
69
|
returnUrl: checkoutOptions.successUrl ? new URL(
|
|
70
70
|
checkoutOptions.successUrl,
|
|
71
71
|
ctx.request?.url
|
|
@@ -145,8 +145,8 @@ var checkout = (checkoutOptions = {}) => (dodopayments) => {
|
|
|
145
145
|
ctx.request?.url
|
|
146
146
|
).toString() : void 0
|
|
147
147
|
},
|
|
148
|
-
bearerToken:
|
|
149
|
-
environment:
|
|
148
|
+
bearerToken: options.client.bearerToken,
|
|
149
|
+
environment: options.client.baseURL.includes("test") ? "test_mode" : "live_mode",
|
|
150
150
|
type: "session"
|
|
151
151
|
});
|
|
152
152
|
const redirectUrl = new URL(checkoutUrl);
|
|
@@ -172,4 +172,4 @@ var checkout = (checkoutOptions = {}) => (dodopayments) => {
|
|
|
172
172
|
export {
|
|
173
173
|
checkout
|
|
174
174
|
};
|
|
175
|
-
//# sourceMappingURL=chunk-
|
|
175
|
+
//# sourceMappingURL=chunk-6VDYFSNJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/checkout.ts"],"sourcesContent":["import type { DodoPaymentsOptions } from \"../types\";\nimport { APIError, createAuthEndpoint, getSessionFromCtx } from \"better-auth/api\";\nimport { z } from \"zod/v3\";\nimport type { CreateCheckoutResponse, Product } from \"../types\";\nimport {\n buildCheckoutUrl,\n checkoutSessionPayloadSchema,\n dynamicCheckoutBodySchema,\n} from \"@dodopayments/core/checkout\";\n\nexport interface CheckoutOptions {\n /**\n * Optional list of slug -> productId mappings for easy slug checkouts\n */\n products?: Product[] | (() => Promise<Product[]>);\n /**\n * Checkout Success URL\n */\n successUrl?: string;\n /**\n * Only allow authenticated customers to checkout\n */\n authenticatedUsersOnly?: boolean;\n}\n\nexport const checkout =\n (checkoutOptions: CheckoutOptions = {}) =>\n (options: DodoPaymentsOptions) => {\n return {\n /**\n * @deprecated\n */\n dodoCheckout: createAuthEndpoint(\n \"/dodopayments/checkout\",\n {\n method: \"POST\",\n body: dynamicCheckoutBodySchema.extend({\n slug: z.string().optional(),\n referenceId: z.string().optional(),\n }),\n requireRequest: true,\n },\n async (ctx): Promise<CreateCheckoutResponse> => {\n const session = await getSessionFromCtx(ctx);\n\n let dodoPaymentsProductId: string | undefined;\n\n if (ctx.body?.slug) {\n const resolvedProducts =\n typeof checkoutOptions.products === \"function\"\n ? await checkoutOptions.products()\n : checkoutOptions.products;\n\n const productId = resolvedProducts?.find(\n (product) => product.slug === ctx.body.slug,\n )?.productId;\n\n if (!productId) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"Product not found\",\n });\n }\n\n dodoPaymentsProductId = productId;\n } else {\n dodoPaymentsProductId = ctx.body.product_id;\n }\n\n if (checkoutOptions.authenticatedUsersOnly && !session?.user.id) {\n throw new APIError(\"UNAUTHORIZED\", {\n message: \"You must be logged in to checkout\",\n });\n }\n\n try {\n const checkoutUrl = await buildCheckoutUrl({\n body: {\n ...ctx.body,\n product_id: dodoPaymentsProductId,\n customer: {\n email: session?.user.email,\n name: session?.user.name,\n ...ctx.body.customer,\n },\n product_cart: dodoPaymentsProductId\n ? [\n {\n product_id: dodoPaymentsProductId,\n quantity: 1,\n },\n ]\n : undefined,\n metadata: ctx.body.referenceId\n ? {\n referenceId: ctx.body.referenceId,\n ...ctx.body.metadata,\n }\n : ctx.body.metadata,\n },\n bearerToken: options.client.bearerToken,\n environment: options.client.baseURL.includes(\"test\")\n ? \"test_mode\"\n : \"live_mode\",\n returnUrl: checkoutOptions.successUrl\n ? new URL(\n checkoutOptions.successUrl,\n ctx.request?.url,\n ).toString()\n : undefined,\n type: \"dynamic\",\n });\n\n const redirectUrl = new URL(checkoutUrl);\n\n return ctx.json({\n url: redirectUrl.toString(),\n redirect: true,\n });\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `DodoPayments checkout creation failed. Error: ${e.message}`,\n );\n }\n\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"Checkout creation failed\",\n });\n }\n },\n ),\n dodoCheckoutSession: createAuthEndpoint(\n \"/dodopayments/checkout-session\",\n {\n method: \"POST\",\n body: checkoutSessionPayloadSchema\n .extend({\n slug: z.string().optional(),\n referenceId: z.string().optional(),\n })\n .partial({\n product_cart: true,\n }),\n requireRequest: true,\n },\n async (ctx): Promise<CreateCheckoutResponse> => {\n const session = await getSessionFromCtx(ctx);\n\n let dodoPaymentsProductId: string | undefined;\n\n if (ctx.body?.slug) {\n const resolvedProducts =\n typeof checkoutOptions.products === \"function\"\n ? await checkoutOptions.products()\n : checkoutOptions.products;\n\n const productId = resolvedProducts?.find(\n (product) => product.slug === ctx.body.slug,\n )?.productId;\n\n if (!productId) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"Product not found\",\n });\n }\n\n dodoPaymentsProductId = productId;\n }\n\n if (checkoutOptions.authenticatedUsersOnly && !session?.user.id) {\n throw new APIError(\"UNAUTHORIZED\", {\n message: \"You must be logged in to checkout\",\n });\n }\n\n // Ensure we have a product_cart\n const product_cart = dodoPaymentsProductId\n ? [{ product_id: dodoPaymentsProductId, quantity: 1 }]\n : ctx.body.product_cart;\n\n if (!product_cart || product_cart.length === 0) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"Neither product_cart nor slug was provided\",\n });\n }\n\n try {\n const checkoutUrl = await buildCheckoutUrl({\n sessionPayload: {\n ...ctx.body,\n product_cart,\n customer: session?.user.email\n ? {\n email: session?.user.email,\n name: session?.user.name,\n }\n : ctx.body.customer,\n metadata: ctx.body.referenceId\n ? {\n referenceId: ctx.body.referenceId,\n ...ctx.body.metadata,\n }\n : ctx.body.metadata,\n return_url: checkoutOptions.successUrl\n ? new URL(\n checkoutOptions.successUrl,\n ctx.request?.url,\n ).toString()\n : undefined,\n },\n bearerToken: options.client.bearerToken,\n environment: options.client.baseURL.includes(\"test\")\n ? \"test_mode\"\n : \"live_mode\",\n type: \"session\",\n });\n\n const redirectUrl = new URL(checkoutUrl);\n\n return ctx.json({\n url: redirectUrl.toString(),\n redirect: true,\n });\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `DodoPayments checkout creation failed. Error: ${e.message}`,\n );\n }\n\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"Checkout session creation failed\",\n });\n }\n },\n ),\n };\n };\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/utils.ts
|
|
2
|
-
async function getOrCreateCustomerId(dodopayments, session, internalAdapter) {
|
|
2
|
+
async function getOrCreateCustomerId(dodopayments, session, internalAdapter, getCustomerParams) {
|
|
3
3
|
const dodoCustomerId = session.user["dodoCustomerId"];
|
|
4
4
|
if (dodoCustomerId) return dodoCustomerId;
|
|
5
5
|
const customers = await dodopayments.customers.list({
|
|
@@ -7,9 +7,12 @@ async function getOrCreateCustomerId(dodopayments, session, internalAdapter) {
|
|
|
7
7
|
});
|
|
8
8
|
let customer = customers.items[0];
|
|
9
9
|
if (!customer) {
|
|
10
|
+
const additionalParams = getCustomerParams ? await getCustomerParams(session.user) : void 0;
|
|
10
11
|
customer = await dodopayments.customers.create({
|
|
11
12
|
email: session.user.email,
|
|
12
|
-
name: session.user.name
|
|
13
|
+
name: session.user.name,
|
|
14
|
+
metadata: additionalParams?.metadata,
|
|
15
|
+
phone_number: additionalParams?.phone_number
|
|
13
16
|
}, { idempotencyKey: session.user.id });
|
|
14
17
|
}
|
|
15
18
|
internalAdapter.updateUser(session.user.id, { dodoCustomerId: customer.customer_id }).catch(() => {
|
|
@@ -20,4 +23,4 @@ async function getOrCreateCustomerId(dodopayments, session, internalAdapter) {
|
|
|
20
23
|
export {
|
|
21
24
|
getOrCreateCustomerId
|
|
22
25
|
};
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-EGRIWRWP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["import type { DodoPayments } from \"dodopayments\";\nimport type { User } from \"better-auth\";\n\nexport async function getOrCreateCustomerId(\n dodopayments: DodoPayments,\n session: { user: { id: string; email: string; name: string } & Record<string, unknown> },\n internalAdapter: { updateUser: (id: string, data: Record<string, unknown>) => Promise<unknown> },\n getCustomerParams?: (user: User) => { metadata?: Record<string, string>; phone_number?: string | null } | Promise<{ metadata?: Record<string, string>; phone_number?: string | null }>,\n): Promise<string> {\n const dodoCustomerId = session.user[\"dodoCustomerId\"] as string | undefined;\n if (dodoCustomerId) return dodoCustomerId;\n\n // Fallback to get customer from email if dodoCustomerId doesn't exist\n const customers = await dodopayments.customers.list({\n email: session.user.email,\n });\n let customer = customers.items[0];\n\n if (!customer) {\n const additionalParams = getCustomerParams\n ? await getCustomerParams(session.user as User)\n : undefined;\n\n customer = await dodopayments.customers.create({\n email: session.user.email,\n name: session.user.name,\n metadata: additionalParams?.metadata,\n phone_number: additionalParams?.phone_number,\n }, { idempotencyKey: session.user.id });\n }\n\n internalAdapter\n .updateUser(session.user.id, { dodoCustomerId: customer.customer_id })\n .catch(() => {});\n\n return customer.customer_id;\n}\n"],"mappings":";AAGA,eAAsB,sBACpB,cACA,SACA,iBACA,mBACiB;AACjB,QAAM,iBAAiB,QAAQ,KAAK,gBAAgB;AACpD,MAAI,eAAgB,QAAO;AAG3B,QAAM,YAAY,MAAM,aAAa,UAAU,KAAK;AAAA,IAClD,OAAO,QAAQ,KAAK;AAAA,EACtB,CAAC;AACD,MAAI,WAAW,UAAU,MAAM,CAAC;AAEhC,MAAI,CAAC,UAAU;AACb,UAAM,mBAAmB,oBACrB,MAAM,kBAAkB,QAAQ,IAAY,IAC5C;AAEJ,eAAW,MAAM,aAAa,UAAU,OAAO;AAAA,MAC7C,OAAO,QAAQ,KAAK;AAAA,MACpB,MAAM,QAAQ,KAAK;AAAA,MACnB,UAAU,kBAAkB;AAAA,MAC5B,cAAc,kBAAkB;AAAA,IAClC,GAAG,EAAE,gBAAgB,QAAQ,KAAK,GAAG,CAAC;AAAA,EACxC;AAEA,kBACG,WAAW,QAAQ,KAAK,IAAI,EAAE,gBAAgB,SAAS,YAAY,CAAC,EACpE,MAAM,MAAM;AAAA,EAAC,CAAC;AAEjB,SAAO,SAAS;AAClB;","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "@dodopayments/core/webhook";
|
|
5
5
|
import { APIError, createAuthEndpoint } from "better-auth/api";
|
|
6
6
|
import { verifyWebhookPayload } from "@dodopayments/core/webhook";
|
|
7
|
-
var webhooks = (
|
|
7
|
+
var webhooks = (webhookOptions) => (_options) => {
|
|
8
8
|
return {
|
|
9
9
|
dodopaymentsWebhooks: createAuthEndpoint(
|
|
10
10
|
"/dodopayments/webhooks",
|
|
@@ -16,7 +16,7 @@ var webhooks = (options) => (_dodopayments) => {
|
|
|
16
16
|
cloneRequest: true
|
|
17
17
|
},
|
|
18
18
|
async (ctx) => {
|
|
19
|
-
const { webhookKey } =
|
|
19
|
+
const { webhookKey } = webhookOptions;
|
|
20
20
|
if (!ctx.request?.body) {
|
|
21
21
|
throw new APIError("INTERNAL_SERVER_ERROR");
|
|
22
22
|
}
|
|
@@ -54,7 +54,7 @@ var webhooks = (options) => (_dodopayments) => {
|
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
56
|
try {
|
|
57
|
-
await handleWebhookPayload(event,
|
|
57
|
+
await handleWebhookPayload(event, webhookOptions);
|
|
58
58
|
} catch (e) {
|
|
59
59
|
if (e instanceof Error) {
|
|
60
60
|
ctx.context.logger.error(
|
|
@@ -77,4 +77,4 @@ var webhooks = (options) => (_dodopayments) => {
|
|
|
77
77
|
export {
|
|
78
78
|
webhooks
|
|
79
79
|
};
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
//# sourceMappingURL=chunk-XXIDSJPK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/webhooks.ts"],"sourcesContent":["import type { DodoPaymentsOptions } from \"../types\";\nimport {\n handleWebhookPayload,\n WebhookHandlerConfig,\n} from \"@dodopayments/core/webhook\";\nimport { APIError, createAuthEndpoint } from \"better-auth/api\";\nimport { WebhookPayload } from \"@dodopayments/core/schemas\";\nimport { verifyWebhookPayload } from \"@dodopayments/core/webhook\";\nimport type { WebhookResponse } from \"../types\";\n\nexport const webhooks =\n (webhookOptions: WebhookHandlerConfig) => (_options: DodoPaymentsOptions) => {\n return {\n dodopaymentsWebhooks: createAuthEndpoint(\n \"/dodopayments/webhooks\",\n {\n method: \"POST\",\n metadata: {\n isAction: false,\n },\n cloneRequest: true,\n },\n async (ctx): Promise<WebhookResponse> => {\n const { webhookKey } = webhookOptions;\n\n if (!ctx.request?.body) {\n throw new APIError(\"INTERNAL_SERVER_ERROR\");\n }\n const buf = await ctx.request.text();\n let event: WebhookPayload;\n try {\n if (!webhookKey) {\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"DodoPayments webhook webhookKey not found\",\n });\n }\n\n const headers = {\n \"webhook-id\": ctx.request.headers.get(\"webhook-id\") as string,\n \"webhook-timestamp\": ctx.request.headers.get(\n \"webhook-timestamp\",\n ) as string,\n \"webhook-signature\": ctx.request.headers.get(\n \"webhook-signature\",\n ) as string,\n };\n\n event = await verifyWebhookPayload({\n webhookKey,\n headers,\n body: buf,\n });\n } catch (err: unknown) {\n if (err instanceof Error) {\n ctx.context.logger.error(`Webhook Error: ${err.message}`);\n throw new APIError(\"BAD_REQUEST\", {\n message: `Webhook Error: ${err.message}`,\n });\n }\n\n throw new APIError(\"BAD_REQUEST\", {\n message: `Webhook Error: ${err}`,\n });\n }\n\n try {\n await handleWebhookPayload(event, webhookOptions);\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `DodoPayments webhook failed. Error: ${e.message}`,\n );\n }\n\n ctx.context.logger.error(\n `DodoPayments webhook failed. Error: ${e}`,\n );\n\n throw new APIError(\"BAD_REQUEST\", {\n message: \"Webhook error: See server logs for more information.\",\n });\n }\n\n return ctx.json({ received: true });\n },\n ),\n };\n };\n"],"mappings":";AACA;AAAA,EACE;AAAA,OAEK;AACP,SAAS,UAAU,0BAA0B;AAE7C,SAAS,4BAA4B;AAG9B,IAAM,WACX,CAAC,mBAAyC,CAAC,aAAkC;AAC3E,SAAO;AAAA,IACL,sBAAsB;AAAA,MACpB;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,UAAU;AAAA,UACR,UAAU;AAAA,QACZ;AAAA,QACA,cAAc;AAAA,MAChB;AAAA,MACA,OAAO,QAAkC;AACvC,cAAM,EAAE,WAAW,IAAI;AAEvB,YAAI,CAAC,IAAI,SAAS,MAAM;AACtB,gBAAM,IAAI,SAAS,uBAAuB;AAAA,QAC5C;AACA,cAAM,MAAM,MAAM,IAAI,QAAQ,KAAK;AACnC,YAAI;AACJ,YAAI;AACF,cAAI,CAAC,YAAY;AACf,kBAAM,IAAI,SAAS,yBAAyB;AAAA,cAC1C,SAAS;AAAA,YACX,CAAC;AAAA,UACH;AAEA,gBAAM,UAAU;AAAA,YACd,cAAc,IAAI,QAAQ,QAAQ,IAAI,YAAY;AAAA,YAClD,qBAAqB,IAAI,QAAQ,QAAQ;AAAA,cACvC;AAAA,YACF;AAAA,YACA,qBAAqB,IAAI,QAAQ,QAAQ;AAAA,cACvC;AAAA,YACF;AAAA,UACF;AAEA,kBAAQ,MAAM,qBAAqB;AAAA,YACjC;AAAA,YACA;AAAA,YACA,MAAM;AAAA,UACR,CAAC;AAAA,QACH,SAAS,KAAc;AACrB,cAAI,eAAe,OAAO;AACxB,gBAAI,QAAQ,OAAO,MAAM,kBAAkB,IAAI,OAAO,EAAE;AACxD,kBAAM,IAAI,SAAS,eAAe;AAAA,cAChC,SAAS,kBAAkB,IAAI,OAAO;AAAA,YACxC,CAAC;AAAA,UACH;AAEA,gBAAM,IAAI,SAAS,eAAe;AAAA,YAChC,SAAS,kBAAkB,GAAG;AAAA,UAChC,CAAC;AAAA,QACH;AAEA,YAAI;AACF,gBAAM,qBAAqB,OAAO,cAAc;AAAA,QAClD,SAAS,GAAY;AACnB,cAAI,aAAa,OAAO;AACtB,gBAAI,QAAQ,OAAO;AAAA,cACjB,uCAAuC,EAAE,OAAO;AAAA,YAClD;AAAA,UACF;AAEA,cAAI,QAAQ,OAAO;AAAA,YACjB,uCAAuC,CAAC;AAAA,UAC1C;AAEA,gBAAM,IAAI,SAAS,eAAe;AAAA,YAChC,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAEA,eAAO,IAAI,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getOrCreateCustomerId
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EGRIWRWP.js";
|
|
4
4
|
|
|
5
5
|
// src/plugins/portal.ts
|
|
6
6
|
import { APIError, createAuthEndpoint, sessionMiddleware } from "better-auth/api";
|
|
7
7
|
import { z } from "zod/v3";
|
|
8
|
-
var portal = () => (
|
|
8
|
+
var portal = () => (options) => {
|
|
9
9
|
return {
|
|
10
10
|
dodoPortal: createAuthEndpoint(
|
|
11
11
|
"/dodopayments/customer/portal",
|
|
@@ -26,11 +26,12 @@ var portal = () => (dodopayments) => {
|
|
|
26
26
|
}
|
|
27
27
|
try {
|
|
28
28
|
const customerId = await getOrCreateCustomerId(
|
|
29
|
-
|
|
29
|
+
options.client,
|
|
30
30
|
ctx.context.session,
|
|
31
|
-
ctx.context.internalAdapter
|
|
31
|
+
ctx.context.internalAdapter,
|
|
32
|
+
options.getCustomerParams
|
|
32
33
|
);
|
|
33
|
-
const customerSession = await
|
|
34
|
+
const customerSession = await options.client.customers.customerPortal.create(customerId);
|
|
34
35
|
return ctx.json({
|
|
35
36
|
url: customerSession.link,
|
|
36
37
|
redirect: true
|
|
@@ -78,11 +79,12 @@ var portal = () => (dodopayments) => {
|
|
|
78
79
|
}
|
|
79
80
|
try {
|
|
80
81
|
const customerId = await getOrCreateCustomerId(
|
|
81
|
-
|
|
82
|
+
options.client,
|
|
82
83
|
ctx.context.session,
|
|
83
|
-
ctx.context.internalAdapter
|
|
84
|
+
ctx.context.internalAdapter,
|
|
85
|
+
options.getCustomerParams
|
|
84
86
|
);
|
|
85
|
-
const subscriptions = await
|
|
87
|
+
const subscriptions = await options.client.subscriptions.list({
|
|
86
88
|
customer_id: customerId,
|
|
87
89
|
// page number is 0-indexed
|
|
88
90
|
page_number: ctx.query?.page ? ctx.query.page - 1 : void 0,
|
|
@@ -138,11 +140,12 @@ var portal = () => (dodopayments) => {
|
|
|
138
140
|
}
|
|
139
141
|
try {
|
|
140
142
|
const customerId = await getOrCreateCustomerId(
|
|
141
|
-
|
|
143
|
+
options.client,
|
|
142
144
|
ctx.context.session,
|
|
143
|
-
ctx.context.internalAdapter
|
|
145
|
+
ctx.context.internalAdapter,
|
|
146
|
+
options.getCustomerParams
|
|
144
147
|
);
|
|
145
|
-
const payments = await
|
|
148
|
+
const payments = await options.client.payments.list({
|
|
146
149
|
customer_id: customerId,
|
|
147
150
|
// page number is 0-indexed
|
|
148
151
|
page_number: ctx.query?.page ? ctx.query.page - 1 : void 0,
|
|
@@ -168,4 +171,4 @@ var portal = () => (dodopayments) => {
|
|
|
168
171
|
export {
|
|
169
172
|
portal
|
|
170
173
|
};
|
|
171
|
-
//# sourceMappingURL=chunk-
|
|
174
|
+
//# sourceMappingURL=chunk-YCUWFLKK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/portal.ts"],"sourcesContent":["import { APIError, createAuthEndpoint, sessionMiddleware } from \"better-auth/api\";\nimport { z } from \"zod/v3\";\nimport type {\n CustomerPortalResponse,\n DodoPaymentsOptions,\n PaymentItems,\n SubscriptionItems,\n} from \"../types\";\nimport { getOrCreateCustomerId } from \"../utils\";\n\nexport const portal = () => (options: DodoPaymentsOptions) => {\n return {\n dodoPortal: createAuthEndpoint(\n \"/dodopayments/customer/portal\",\n {\n method: \"GET\",\n use: [sessionMiddleware],\n },\n async (ctx): Promise<CustomerPortalResponse> => {\n if (!ctx.context.session?.user.id) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"User not found\",\n });\n }\n\n if (!ctx.context.session?.user.emailVerified) {\n throw new APIError(\"UNAUTHORIZED\", {\n message: \"User email not verified\",\n });\n }\n\n try {\n const customerId = await getOrCreateCustomerId(\n options.client,\n ctx.context.session,\n ctx.context.internalAdapter,\n options.getCustomerParams,\n );\n\n const customerSession =\n await options.client.customers.customerPortal.create(customerId);\n\n return ctx.json({\n url: customerSession.link,\n redirect: true,\n });\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `DodoPayments customer portal creation failed. Error: ${e.message}`,\n );\n }\n\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"Customer portal creation failed\",\n });\n }\n },\n ),\n dodoSubscriptions: createAuthEndpoint(\n \"/dodopayments/customer/subscriptions/list\",\n {\n method: \"GET\",\n query: z\n .object({\n page: z.coerce.number().optional(),\n limit: z.coerce.number().optional(),\n status: z\n .enum([\n \"active\",\n \"cancelled\",\n \"on_hold\",\n \"pending\",\n \"failed\",\n \"expired\",\n ])\n .optional(),\n })\n .optional(),\n use: [sessionMiddleware],\n },\n async (ctx): Promise<SubscriptionItems> => {\n if (!ctx.context.session.user.id) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"User not found\",\n });\n }\n\n if (!ctx.context.session?.user.emailVerified) {\n throw new APIError(\"UNAUTHORIZED\", {\n message: \"User email not verified\",\n });\n }\n\n try {\n const customerId = await getOrCreateCustomerId(\n options.client,\n ctx.context.session,\n ctx.context.internalAdapter,\n options.getCustomerParams,\n );\n\n const subscriptions = await options.client.subscriptions.list({\n customer_id: customerId,\n // page number is 0-indexed\n page_number: ctx.query?.page ? ctx.query.page - 1 : undefined,\n page_size: ctx.query?.limit,\n status: ctx.query?.status,\n });\n\n return ctx.json({ items: subscriptions.items });\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `DodoPayments subscriptions list failed. Error: ${e.message}`,\n );\n }\n\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"DodoPayments subscriptions list failed\",\n });\n }\n },\n ),\n dodoPayments: createAuthEndpoint(\n \"/dodopayments/customer/payments/list\",\n {\n method: \"GET\",\n query: z\n .object({\n page: z.coerce.number().optional(),\n limit: z.coerce.number().optional(),\n status: z\n .enum([\n \"succeeded\",\n \"failed\",\n \"cancelled\",\n \"processing\",\n \"requires_customer_action\",\n \"requires_merchant_action\",\n \"requires_payment_method\",\n \"requires_confirmation\",\n \"requires_capture\",\n \"partially_captured\",\n \"partially_captured_and_capturable\",\n ])\n .optional(),\n })\n .optional(),\n use: [sessionMiddleware],\n },\n async (ctx): Promise<PaymentItems> => {\n if (!ctx.context.session.user.id) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"User not found\",\n });\n }\n\n if (!ctx.context.session?.user.emailVerified) {\n throw new APIError(\"UNAUTHORIZED\", {\n message: \"User email not verified\",\n });\n }\n\n try {\n const customerId = await getOrCreateCustomerId(\n options.client,\n ctx.context.session,\n ctx.context.internalAdapter,\n options.getCustomerParams,\n );\n\n const payments = await options.client.payments.list({\n customer_id: customerId,\n // page number is 0-indexed\n page_number: ctx.query?.page ? ctx.query.page - 1 : undefined,\n page_size: ctx.query?.limit,\n status: ctx.query?.status,\n });\n\n return ctx.json({ items: payments.items });\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `DodoPayments orders list failed. Error: ${e.message}`,\n );\n }\n\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"Orders list failed\",\n });\n }\n },\n ),\n };\n};\n\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getOrCreateCustomerId
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EGRIWRWP.js";
|
|
4
4
|
|
|
5
5
|
// src/plugins/usage.ts
|
|
6
6
|
import {
|
|
@@ -17,7 +17,7 @@ var EventInputSchema = z.object({
|
|
|
17
17
|
"Custom Timestamp. Defaults to current timestamp in UTC. Timestamps that are older that 1 hour or after 5 mins from current timestamp will be rejected."
|
|
18
18
|
)
|
|
19
19
|
});
|
|
20
|
-
var usage = () => (
|
|
20
|
+
var usage = () => (options) => {
|
|
21
21
|
return {
|
|
22
22
|
// Ingest usage data
|
|
23
23
|
dodoUsageIngest: createAuthEndpoint(
|
|
@@ -40,11 +40,12 @@ var usage = () => (dodopayments) => {
|
|
|
40
40
|
}
|
|
41
41
|
try {
|
|
42
42
|
const customerId = await getOrCreateCustomerId(
|
|
43
|
-
|
|
43
|
+
options.client,
|
|
44
44
|
ctx.context.session,
|
|
45
|
-
ctx.context.internalAdapter
|
|
45
|
+
ctx.context.internalAdapter,
|
|
46
|
+
options.getCustomerParams
|
|
46
47
|
);
|
|
47
|
-
const result = await
|
|
48
|
+
const result = await options.client.usageEvents.ingest({
|
|
48
49
|
events: [
|
|
49
50
|
{
|
|
50
51
|
event_id: ctx.body.event_id,
|
|
@@ -96,11 +97,12 @@ var usage = () => (dodopayments) => {
|
|
|
96
97
|
}
|
|
97
98
|
try {
|
|
98
99
|
const customerId = await getOrCreateCustomerId(
|
|
99
|
-
|
|
100
|
+
options.client,
|
|
100
101
|
ctx.context.session,
|
|
101
|
-
ctx.context.internalAdapter
|
|
102
|
+
ctx.context.internalAdapter,
|
|
103
|
+
options.getCustomerParams
|
|
102
104
|
);
|
|
103
|
-
const meters = await
|
|
105
|
+
const meters = await options.client.usageEvents.list({
|
|
104
106
|
customer_id: customerId,
|
|
105
107
|
...ctx.query
|
|
106
108
|
});
|
|
@@ -123,4 +125,4 @@ var usage = () => (dodopayments) => {
|
|
|
123
125
|
export {
|
|
124
126
|
usage
|
|
125
127
|
};
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
128
|
+
//# sourceMappingURL=chunk-ZA3TNX5K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/usage.ts"],"sourcesContent":["import {\n APIError,\n createAuthEndpoint,\n sessionMiddleware,\n} from \"better-auth/api\";\nimport type { DodoPaymentsOptions } from \"../types\";\nimport { Event } from \"dodopayments/resources/usage-events.mjs\";\nimport { z } from \"zod/v3\";\nimport { getOrCreateCustomerId } from \"../utils\";\n\nconst EventInputSchema = z.object({\n event_id: z.string(),\n event_name: z.string(),\n metadata: z\n .record(z.union([z.string(), z.number(), z.boolean()]))\n .nullable()\n .optional(),\n timestamp: z\n // NOTE: coerce because the date object gets converted to a string over network requests\n // but we still want to enforce that it's a Date type\n .date({ coerce: true })\n .transform((d) => d.toISOString())\n .optional()\n .describe(\n \"Custom Timestamp. Defaults to current timestamp in UTC.\\\n Timestamps that are older that 1 hour or after 5 mins from\\\n current timestamp will be rejected.\",\n ),\n});\n\nexport const usage = () => (options: DodoPaymentsOptions) => {\n return {\n // Ingest usage data\n dodoUsageIngest: createAuthEndpoint(\n \"/dodopayments/usage/ingest\",\n {\n method: \"POST\",\n body: EventInputSchema,\n use: [sessionMiddleware],\n },\n async (ctx): Promise<{ ingested_count: number }> => {\n if (!ctx.context.session?.user?.id) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"User not found\",\n });\n }\n\n if (!ctx.context.session?.user.emailVerified) {\n throw new APIError(\"UNAUTHORIZED\", {\n message: \"User email not verified\",\n });\n }\n\n try {\n const customerId = await getOrCreateCustomerId(\n options.client,\n ctx.context.session,\n ctx.context.internalAdapter,\n options.getCustomerParams,\n );\n\n const result = await options.client.usageEvents.ingest({\n events: [\n {\n event_id: ctx.body.event_id,\n customer_id: customerId,\n event_name: ctx.body.event_name,\n timestamp: ctx.body.timestamp,\n metadata: ctx.body.metadata,\n },\n ],\n });\n\n return ctx.json({ ingested_count: result.ingested_count });\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `User usage ingestion error: ${e.message}`,\n );\n }\n\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"Failed to record the user usage\",\n });\n }\n },\n ),\n\n // List usage meters\n dodoUsageMetersList: createAuthEndpoint(\n \"/dodopayments/usage/meters/list\",\n {\n method: \"GET\",\n query: z\n .object({\n page_number: z.coerce.number().optional(),\n page_size: z.coerce.number().optional(),\n event_name: z.string().optional(),\n meter_id: z.string().optional(),\n start: z.string().optional(),\n end: z.string().optional(),\n })\n .optional(),\n use: [sessionMiddleware],\n },\n async (ctx): Promise<{ items: Event[] }> => {\n if (!ctx.context.session?.user?.id) {\n throw new APIError(\"BAD_REQUEST\", {\n message: \"User not found\",\n });\n }\n\n if (!ctx.context.session?.user.emailVerified) {\n throw new APIError(\"UNAUTHORIZED\", {\n message: \"User email not verified\",\n });\n }\n\n try {\n const customerId = await getOrCreateCustomerId(\n options.client,\n ctx.context.session,\n ctx.context.internalAdapter,\n options.getCustomerParams,\n );\n\n const meters = await options.client.usageEvents.list({\n customer_id: customerId,\n ...ctx.query,\n });\n\n return ctx.json({ items: meters.items });\n } catch (e: unknown) {\n if (e instanceof Error) {\n ctx.context.logger.error(\n `User usage meter list error: ${e.message}`,\n );\n }\n\n throw new APIError(\"INTERNAL_SERVER_ERROR\", {\n message: \"Failed to fetch the user usage\",\n });\n }\n },\n ),\n };\n};\n\n"],"mappings":"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","names":[]}
|
package/dist/client.d.cts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
export { dodopaymentsClient } from './index.cjs';
|
|
2
|
-
export { C as CreateCheckoutResponse, a as CustomerPortalResponse, e as DodoPaymentsEndpoints, D as DodoPaymentsOptions, P as PaymentItems, b as Product, S as SubscriptionItems, W as WebhookResponse } from './types-
|
|
2
|
+
export { C as CreateCheckoutResponse, a as CustomerPortalResponse, e as DodoPaymentsEndpoints, D as DodoPaymentsOptions, P as PaymentItems, b as Product, S as SubscriptionItems, W as WebhookResponse } from './types-D0tVSLaf.cjs';
|
|
3
3
|
import 'dodopayments/resources/usage-events.mjs';
|
|
4
4
|
import 'better-auth';
|
|
5
5
|
import 'zod/v3';
|
|
6
|
-
import './plugins/usage.cjs';
|
|
7
6
|
import 'dodopayments';
|
|
8
7
|
import '@dodopayments/core/webhook';
|
package/dist/client.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
export { dodopaymentsClient } from './index.js';
|
|
2
|
-
export { C as CreateCheckoutResponse, a as CustomerPortalResponse, e as DodoPaymentsEndpoints, D as DodoPaymentsOptions, P as PaymentItems, b as Product, S as SubscriptionItems, W as WebhookResponse } from './types-
|
|
2
|
+
export { C as CreateCheckoutResponse, a as CustomerPortalResponse, e as DodoPaymentsEndpoints, D as DodoPaymentsOptions, P as PaymentItems, b as Product, S as SubscriptionItems, W as WebhookResponse } from './types-D0tVSLaf.js';
|
|
3
3
|
import 'dodopayments/resources/usage-events.mjs';
|
|
4
4
|
import 'better-auth';
|
|
5
5
|
import 'zod/v3';
|
|
6
|
-
import './plugins/usage.js';
|
|
7
6
|
import 'dodopayments';
|
|
8
7
|
import '@dodopayments/core/webhook';
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { User, GenericEndpointContext } from 'better-auth';
|
|
2
|
-
import { D as DodoPaymentsOptions } from '../types-
|
|
2
|
+
import { D as DodoPaymentsOptions } from '../types-D0tVSLaf.cjs';
|
|
3
3
|
import 'dodopayments';
|
|
4
4
|
import 'zod/v3';
|
|
5
5
|
import '@dodopayments/core/webhook';
|
|
6
|
-
import '../plugins/usage.cjs';
|
|
7
6
|
import 'dodopayments/resources/usage-events.mjs';
|
|
8
7
|
|
|
9
8
|
declare const onUserCreate: (options: DodoPaymentsOptions) => (user: User, ctx: GenericEndpointContext | null) => Promise<void>;
|
package/dist/hooks/customer.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { User, GenericEndpointContext } from 'better-auth';
|
|
2
|
-
import { D as DodoPaymentsOptions } from '../types-
|
|
2
|
+
import { D as DodoPaymentsOptions } from '../types-D0tVSLaf.js';
|
|
3
3
|
import 'dodopayments';
|
|
4
4
|
import 'zod/v3';
|
|
5
5
|
import '@dodopayments/core/webhook';
|
|
6
|
-
import '../plugins/usage.js';
|
|
7
6
|
import 'dodopayments/resources/usage-events.mjs';
|
|
8
7
|
|
|
9
8
|
declare const onUserCreate: (options: DodoPaymentsOptions) => (user: User, ctx: GenericEndpointContext | null) => Promise<void>;
|
package/dist/index.cjs
CHANGED
|
@@ -127,7 +127,7 @@ var import_api2 = require("better-auth/api");
|
|
|
127
127
|
var import_v3 = require("zod/v3");
|
|
128
128
|
|
|
129
129
|
// src/utils.ts
|
|
130
|
-
async function getOrCreateCustomerId(dodopayments2, session, internalAdapter) {
|
|
130
|
+
async function getOrCreateCustomerId(dodopayments2, session, internalAdapter, getCustomerParams) {
|
|
131
131
|
const dodoCustomerId = session.user["dodoCustomerId"];
|
|
132
132
|
if (dodoCustomerId) return dodoCustomerId;
|
|
133
133
|
const customers = await dodopayments2.customers.list({
|
|
@@ -135,9 +135,12 @@ async function getOrCreateCustomerId(dodopayments2, session, internalAdapter) {
|
|
|
135
135
|
});
|
|
136
136
|
let customer = customers.items[0];
|
|
137
137
|
if (!customer) {
|
|
138
|
+
const additionalParams = getCustomerParams ? await getCustomerParams(session.user) : void 0;
|
|
138
139
|
customer = await dodopayments2.customers.create({
|
|
139
140
|
email: session.user.email,
|
|
140
|
-
name: session.user.name
|
|
141
|
+
name: session.user.name,
|
|
142
|
+
metadata: additionalParams?.metadata,
|
|
143
|
+
phone_number: additionalParams?.phone_number
|
|
141
144
|
}, { idempotencyKey: session.user.id });
|
|
142
145
|
}
|
|
143
146
|
internalAdapter.updateUser(session.user.id, { dodoCustomerId: customer.customer_id }).catch(() => {
|
|
@@ -146,7 +149,7 @@ async function getOrCreateCustomerId(dodopayments2, session, internalAdapter) {
|
|
|
146
149
|
}
|
|
147
150
|
|
|
148
151
|
// src/plugins/portal.ts
|
|
149
|
-
var portal = () => (
|
|
152
|
+
var portal = () => (options) => {
|
|
150
153
|
return {
|
|
151
154
|
dodoPortal: (0, import_api2.createAuthEndpoint)(
|
|
152
155
|
"/dodopayments/customer/portal",
|
|
@@ -167,11 +170,12 @@ var portal = () => (dodopayments2) => {
|
|
|
167
170
|
}
|
|
168
171
|
try {
|
|
169
172
|
const customerId = await getOrCreateCustomerId(
|
|
170
|
-
|
|
173
|
+
options.client,
|
|
171
174
|
ctx.context.session,
|
|
172
|
-
ctx.context.internalAdapter
|
|
175
|
+
ctx.context.internalAdapter,
|
|
176
|
+
options.getCustomerParams
|
|
173
177
|
);
|
|
174
|
-
const customerSession = await
|
|
178
|
+
const customerSession = await options.client.customers.customerPortal.create(customerId);
|
|
175
179
|
return ctx.json({
|
|
176
180
|
url: customerSession.link,
|
|
177
181
|
redirect: true
|
|
@@ -219,11 +223,12 @@ var portal = () => (dodopayments2) => {
|
|
|
219
223
|
}
|
|
220
224
|
try {
|
|
221
225
|
const customerId = await getOrCreateCustomerId(
|
|
222
|
-
|
|
226
|
+
options.client,
|
|
223
227
|
ctx.context.session,
|
|
224
|
-
ctx.context.internalAdapter
|
|
228
|
+
ctx.context.internalAdapter,
|
|
229
|
+
options.getCustomerParams
|
|
225
230
|
);
|
|
226
|
-
const subscriptions = await
|
|
231
|
+
const subscriptions = await options.client.subscriptions.list({
|
|
227
232
|
customer_id: customerId,
|
|
228
233
|
// page number is 0-indexed
|
|
229
234
|
page_number: ctx.query?.page ? ctx.query.page - 1 : void 0,
|
|
@@ -279,11 +284,12 @@ var portal = () => (dodopayments2) => {
|
|
|
279
284
|
}
|
|
280
285
|
try {
|
|
281
286
|
const customerId = await getOrCreateCustomerId(
|
|
282
|
-
|
|
287
|
+
options.client,
|
|
283
288
|
ctx.context.session,
|
|
284
|
-
ctx.context.internalAdapter
|
|
289
|
+
ctx.context.internalAdapter,
|
|
290
|
+
options.getCustomerParams
|
|
285
291
|
);
|
|
286
|
-
const payments = await
|
|
292
|
+
const payments = await options.client.payments.list({
|
|
287
293
|
customer_id: customerId,
|
|
288
294
|
// page number is 0-indexed
|
|
289
295
|
page_number: ctx.query?.page ? ctx.query.page - 1 : void 0,
|
|
@@ -310,7 +316,7 @@ var portal = () => (dodopayments2) => {
|
|
|
310
316
|
var import_api3 = require("better-auth/api");
|
|
311
317
|
var import_v32 = require("zod/v3");
|
|
312
318
|
var import_checkout = require("@dodopayments/core/checkout");
|
|
313
|
-
var checkout = (checkoutOptions = {}) => (
|
|
319
|
+
var checkout = (checkoutOptions = {}) => (options) => {
|
|
314
320
|
return {
|
|
315
321
|
/**
|
|
316
322
|
* @deprecated
|
|
@@ -368,8 +374,8 @@ var checkout = (checkoutOptions = {}) => (dodopayments2) => {
|
|
|
368
374
|
...ctx.body.metadata
|
|
369
375
|
} : ctx.body.metadata
|
|
370
376
|
},
|
|
371
|
-
bearerToken:
|
|
372
|
-
environment:
|
|
377
|
+
bearerToken: options.client.bearerToken,
|
|
378
|
+
environment: options.client.baseURL.includes("test") ? "test_mode" : "live_mode",
|
|
373
379
|
returnUrl: checkoutOptions.successUrl ? new URL(
|
|
374
380
|
checkoutOptions.successUrl,
|
|
375
381
|
ctx.request?.url
|
|
@@ -449,8 +455,8 @@ var checkout = (checkoutOptions = {}) => (dodopayments2) => {
|
|
|
449
455
|
ctx.request?.url
|
|
450
456
|
).toString() : void 0
|
|
451
457
|
},
|
|
452
|
-
bearerToken:
|
|
453
|
-
environment:
|
|
458
|
+
bearerToken: options.client.bearerToken,
|
|
459
|
+
environment: options.client.baseURL.includes("test") ? "test_mode" : "live_mode",
|
|
454
460
|
type: "session"
|
|
455
461
|
});
|
|
456
462
|
const redirectUrl = new URL(checkoutUrl);
|
|
@@ -477,7 +483,7 @@ var checkout = (checkoutOptions = {}) => (dodopayments2) => {
|
|
|
477
483
|
var import_webhook = require("@dodopayments/core/webhook");
|
|
478
484
|
var import_api4 = require("better-auth/api");
|
|
479
485
|
var import_webhook2 = require("@dodopayments/core/webhook");
|
|
480
|
-
var webhooks = (
|
|
486
|
+
var webhooks = (webhookOptions) => (_options) => {
|
|
481
487
|
return {
|
|
482
488
|
dodopaymentsWebhooks: (0, import_api4.createAuthEndpoint)(
|
|
483
489
|
"/dodopayments/webhooks",
|
|
@@ -489,7 +495,7 @@ var webhooks = (options) => (_dodopayments) => {
|
|
|
489
495
|
cloneRequest: true
|
|
490
496
|
},
|
|
491
497
|
async (ctx) => {
|
|
492
|
-
const { webhookKey } =
|
|
498
|
+
const { webhookKey } = webhookOptions;
|
|
493
499
|
if (!ctx.request?.body) {
|
|
494
500
|
throw new import_api4.APIError("INTERNAL_SERVER_ERROR");
|
|
495
501
|
}
|
|
@@ -527,7 +533,7 @@ var webhooks = (options) => (_dodopayments) => {
|
|
|
527
533
|
});
|
|
528
534
|
}
|
|
529
535
|
try {
|
|
530
|
-
await (0, import_webhook.handleWebhookPayload)(event,
|
|
536
|
+
await (0, import_webhook.handleWebhookPayload)(event, webhookOptions);
|
|
531
537
|
} catch (e) {
|
|
532
538
|
if (e instanceof Error) {
|
|
533
539
|
ctx.context.logger.error(
|
|
@@ -558,7 +564,7 @@ var EventInputSchema = import_v33.z.object({
|
|
|
558
564
|
"Custom Timestamp. Defaults to current timestamp in UTC. Timestamps that are older that 1 hour or after 5 mins from current timestamp will be rejected."
|
|
559
565
|
)
|
|
560
566
|
});
|
|
561
|
-
var usage = () => (
|
|
567
|
+
var usage = () => (options) => {
|
|
562
568
|
return {
|
|
563
569
|
// Ingest usage data
|
|
564
570
|
dodoUsageIngest: (0, import_api5.createAuthEndpoint)(
|
|
@@ -581,11 +587,12 @@ var usage = () => (dodopayments2) => {
|
|
|
581
587
|
}
|
|
582
588
|
try {
|
|
583
589
|
const customerId = await getOrCreateCustomerId(
|
|
584
|
-
|
|
590
|
+
options.client,
|
|
585
591
|
ctx.context.session,
|
|
586
|
-
ctx.context.internalAdapter
|
|
592
|
+
ctx.context.internalAdapter,
|
|
593
|
+
options.getCustomerParams
|
|
587
594
|
);
|
|
588
|
-
const result = await
|
|
595
|
+
const result = await options.client.usageEvents.ingest({
|
|
589
596
|
events: [
|
|
590
597
|
{
|
|
591
598
|
event_id: ctx.body.event_id,
|
|
@@ -637,11 +644,12 @@ var usage = () => (dodopayments2) => {
|
|
|
637
644
|
}
|
|
638
645
|
try {
|
|
639
646
|
const customerId = await getOrCreateCustomerId(
|
|
640
|
-
|
|
647
|
+
options.client,
|
|
641
648
|
ctx.context.session,
|
|
642
|
-
ctx.context.internalAdapter
|
|
649
|
+
ctx.context.internalAdapter,
|
|
650
|
+
options.getCustomerParams
|
|
643
651
|
);
|
|
644
|
-
const meters = await
|
|
652
|
+
const meters = await options.client.usageEvents.list({
|
|
645
653
|
customer_id: customerId,
|
|
646
654
|
...ctx.query
|
|
647
655
|
});
|
|
@@ -663,7 +671,7 @@ var usage = () => (dodopayments2) => {
|
|
|
663
671
|
|
|
664
672
|
// src/index.ts
|
|
665
673
|
var dodopayments = (options) => {
|
|
666
|
-
const plugins = options.use.map((use) => use(options
|
|
674
|
+
const plugins = options.use.map((use) => use(options)).reduce((acc, plugin) => {
|
|
667
675
|
Object.assign(acc, plugin);
|
|
668
676
|
return acc;
|
|
669
677
|
}, {});
|