From 6b35b91ab157109311f697811f383564626f999c Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Tue, 20 Jan 2026 23:25:03 +0000 Subject: [PATCH] stripe --- .../app/api/stripe/webhook/route.ts | 3 ++- stripe_to_invoice/lib/stripe/service.ts | 19 +++++++++++++++++++ stripe_to_invoice/lib/xero/service.ts | 5 +++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 stripe_to_invoice/lib/stripe/service.ts create mode 100644 stripe_to_invoice/lib/xero/service.ts diff --git a/stripe_to_invoice/app/api/stripe/webhook/route.ts b/stripe_to_invoice/app/api/stripe/webhook/route.ts index 52de0b2..1a10a21 100644 --- a/stripe_to_invoice/app/api/stripe/webhook/route.ts +++ b/stripe_to_invoice/app/api/stripe/webhook/route.ts @@ -11,6 +11,7 @@ import { processedStripeEvents, } from "@/lib/schema"; import { eq } from "drizzle-orm"; +import { getXeroClient } from "@/lib/xero/service"; const stripe = getStripe(); @@ -111,7 +112,7 @@ export async function POST(req: NextRequest) { // -------------------------------------------------- // 5️⃣ Init Xero client + refresh token if needed // -------------------------------------------------- - const xero = new XeroClient(); + const xero = getXeroClient(); xero.setTokenSet({ access_token: xeroConn.accessToken, diff --git a/stripe_to_invoice/lib/stripe/service.ts b/stripe_to_invoice/lib/stripe/service.ts new file mode 100644 index 0000000..d455070 --- /dev/null +++ b/stripe_to_invoice/lib/stripe/service.ts @@ -0,0 +1,19 @@ +import Stripe from "stripe"; + +let stripe: Stripe | null = null; + +/** + * Server-only Stripe client. + * Lazy-initialised to avoid build-time crashes. + */ +export function getStripe(): Stripe { + if (!process.env.STRIPE_SECRET_KEY) { + throw new Error("STRIPE_SECRET_KEY missing"); + } + + if (!stripe) { + stripe = new Stripe(process.env.STRIPE_SECRET_KEY); + } + + return stripe; +} diff --git a/stripe_to_invoice/lib/xero/service.ts b/stripe_to_invoice/lib/xero/service.ts new file mode 100644 index 0000000..ce651d2 --- /dev/null +++ b/stripe_to_invoice/lib/xero/service.ts @@ -0,0 +1,5 @@ +import { XeroClient } from "xero-node"; + +export function getXeroClient(): XeroClient { + return new XeroClient(); +} \ No newline at end of file