From 9089aa270b83b3f7693ed6cb03fb1355093e5a19 Mon Sep 17 00:00:00 2001 From: OllyNicholass Date: Tue, 17 Sep 2024 19:29:43 +0100 Subject: [PATCH] refactor(#29): centralise stripe client --- .env.example | 2 +- src/lib/utils/stripe.ts | 4 ++++ src/lib/utils/supabase/admin.ts | 4 ++-- src/routes/api/checkout/+server.ts | 5 +---- src/routes/api/checkout/status/+server.ts | 4 +--- src/routes/api/webhook/stripe/+server.ts | 20 ++++++++----------- src/routes/products/+server.ts | 4 +--- src/routes/products/[productId]/+server.ts | 4 +--- .../products/prices/[priceId]/+server.ts | 4 +--- 9 files changed, 20 insertions(+), 31 deletions(-) create mode 100644 src/lib/utils/stripe.ts diff --git a/.env.example b/.env.example index 03f7833..af0a1e7 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,3 @@ PUBLIC_SUPABASE_URL="" PUBLIC_SUPABASE_ANON_KEY="" -PUBLIC_STRIPE_SECRET_KEY="" \ No newline at end of file +STRIPE_SECRET_KEY="" \ No newline at end of file diff --git a/src/lib/utils/stripe.ts b/src/lib/utils/stripe.ts new file mode 100644 index 0000000..c4346ba --- /dev/null +++ b/src/lib/utils/stripe.ts @@ -0,0 +1,4 @@ +import Stripe from 'stripe' +import { STRIPE_SECRET_KEY } from '$env/static/private' + +export const stripe = new Stripe(STRIPE_SECRET_KEY) diff --git a/src/lib/utils/supabase/admin.ts b/src/lib/utils/supabase/admin.ts index 9fb94c3..02294db 100644 --- a/src/lib/utils/supabase/admin.ts +++ b/src/lib/utils/supabase/admin.ts @@ -1,8 +1,9 @@ import { createClient } from '@supabase/supabase-js'; import stripe from 'stripe'; import type { Database, Tables, TablesInsert } from '$lib/types/supabase'; -import { PUBLIC_SUPABASE_URL, PUBLIC_STRIPE_SECRET_KEY } from '$env/static/public'; +import { PUBLIC_SUPABASE_URL } from '$env/static/public'; import { SUPABASE_SERVICE_ROLE_KEY } from '$env/static/private'; +import { stripe as stripeClient } from '$lib/utils/stripe'; const toDateTime = (secs: number) => { const t = new Date(+0); // Unix epoch start. @@ -10,7 +11,6 @@ const toDateTime = (secs: number) => { return t; }; -const stripeClient = new stripe(PUBLIC_STRIPE_SECRET_KEY); type Product = Tables<'products'>; type Price = Tables<'prices'>; diff --git a/src/routes/api/checkout/+server.ts b/src/routes/api/checkout/+server.ts index 28f0a8d..19c3965 100644 --- a/src/routes/api/checkout/+server.ts +++ b/src/routes/api/checkout/+server.ts @@ -1,8 +1,5 @@ import { type RequestHandler, redirect } from '@sveltejs/kit'; -import { PUBLIC_STRIPE_SECRET_KEY } from '$env/static/public'; -import stripe from 'stripe'; - -const stripeClient = new stripe(PUBLIC_STRIPE_SECRET_KEY); +import { stripe as stripeClient } from '$lib/utils/stripe'; // Create a checkout session export const POST: RequestHandler = async ({ request, cookies }) => { diff --git a/src/routes/api/checkout/status/+server.ts b/src/routes/api/checkout/status/+server.ts index dde7781..86bc0db 100644 --- a/src/routes/api/checkout/status/+server.ts +++ b/src/routes/api/checkout/status/+server.ts @@ -1,8 +1,6 @@ import { json } from '@sveltejs/kit'; -import { PUBLIC_STRIPE_SECRET_KEY } from '$env/static/public'; -import stripe from 'stripe'; import type { RequestHandler } from './$types'; -const stripeClient = new stripe(PUBLIC_STRIPE_SECRET_KEY); +import { stripe as stripeClient } from '$lib/utils/stripe'; export const GET: RequestHandler = async ({ cookies }) => { const sessionId = cookies.get('checkout_session_id'); diff --git a/src/routes/api/webhook/stripe/+server.ts b/src/routes/api/webhook/stripe/+server.ts index eb79fd8..aee2f91 100644 --- a/src/routes/api/webhook/stripe/+server.ts +++ b/src/routes/api/webhook/stripe/+server.ts @@ -1,6 +1,5 @@ import type { RequestHandler } from '@sveltejs/kit'; import stripe from 'stripe'; -import { STRIPE_SECRET_KEY } from '$env/static/private'; import { STRIPE_ENDPOINT_SECRET } from '$env/static/private'; import { deletePriceRecord, @@ -9,8 +8,7 @@ import { upsertPriceRecord, upsertProductRecord } from '$lib/utils/supabase/admin'; - -const stripeClient = new stripe(STRIPE_SECRET_KEY); +import { stripe as stripeClient } from '$lib/utils/stripe'; export const POST: RequestHandler = async ({ request }) => { const body = await request.text(); @@ -36,6 +34,7 @@ export const POST: RequestHandler = async ({ request }) => { } switch (event.type) { + // Product events case 'product.created': case 'product.updated': await upsertProductRecord(event.data.object as stripe.Product); @@ -45,8 +44,8 @@ export const POST: RequestHandler = async ({ request }) => { break; case 'price.created': case 'price.updated': - await upsertPriceRecord(event.data.object as stripe.Price); - break; + await upsertPrice(event.data.object) + break case 'price.deleted': await deletePriceRecord(event.data.object as stripe.Price); break; @@ -76,15 +75,12 @@ export const POST: RequestHandler = async ({ request }) => { break; } default: - console.error(`Unhandled event type ${event.type}`); + console.log(`Unhandled event type ${event.type}`) } - - // Return a response to acknowledge receipt of the event - return new Response(JSON.stringify({ received: true }), { - status: 200 - }); } catch (err) { const message = err instanceof Error ? err.message : 'An unknown error has occurred'; return new Response(`Webhook Error: ${message}`, { status: 500 }); } -}; + + return json({received: true}) +} diff --git a/src/routes/products/+server.ts b/src/routes/products/+server.ts index 70e129d..5668d47 100644 --- a/src/routes/products/+server.ts +++ b/src/routes/products/+server.ts @@ -1,7 +1,5 @@ import { json } from '@sveltejs/kit'; -import { PUBLIC_STRIPE_SECRET_KEY } from '$env/static/public'; -import stripe from 'stripe'; -const stripeClient = new stripe(PUBLIC_STRIPE_SECRET_KEY); +import { stripe as stripeClient } from '$lib/utils/stripe'; export const GET = async () => { const products = await stripeClient.products.list({ diff --git a/src/routes/products/[productId]/+server.ts b/src/routes/products/[productId]/+server.ts index 9a56d5c..f2bead5 100644 --- a/src/routes/products/[productId]/+server.ts +++ b/src/routes/products/[productId]/+server.ts @@ -1,7 +1,5 @@ import { json } from '@sveltejs/kit'; -import { PUBLIC_STRIPE_SECRET_KEY } from '$env/static/public'; -import stripe from 'stripe'; -const stripeClient = new stripe(PUBLIC_STRIPE_SECRET_KEY); +import { stripe as stripeClient } from '$lib/utils/stripe'; export const GET = async ({ params }) => { const { productId } = params; diff --git a/src/routes/products/prices/[priceId]/+server.ts b/src/routes/products/prices/[priceId]/+server.ts index b1fca62..ce2c847 100644 --- a/src/routes/products/prices/[priceId]/+server.ts +++ b/src/routes/products/prices/[priceId]/+server.ts @@ -1,7 +1,5 @@ import { json } from '@sveltejs/kit'; -import { PUBLIC_STRIPE_SECRET_KEY } from '$env/static/public'; -import stripe from 'stripe'; -const stripeClient = new stripe(PUBLIC_STRIPE_SECRET_KEY); +import { stripe as stripeClient } from '$lib/utils/stripe'; export const GET = async ({ params }) => { const { priceId } = params;