From 5287eb794aef89db37d0de625065946d4f78d254 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 31 Dec 2024 11:42:12 -0500 Subject: [PATCH] move twilio client to local on requests --- .env | 6 +++--- src/app.d.ts | 7 +++++++ src/hooks.server.ts | 12 ++++++++++++ src/lib/server/twilio/index.ts | 2 +- src/lib/server/twilio/twilio.client.ts | 4 ---- src/lib/server/twilio/twilio.config.ts | 19 +++++++++---------- src/routes/app/sms/+page.server.ts | 7 +++---- 7 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 src/hooks.server.ts delete mode 100644 src/lib/server/twilio/twilio.client.ts diff --git a/.env b/.env index 1b7676a..a706777 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ # TWILIO -VITE_TWILIO_ACCOUNT_SID= -VITE_TWILIO_AUTH_TOKEN= -VITE_TWILIO_PHONE_NUMBER= +TWILIO_ACCOUNT_SID= +TWILIO_AUTH_TOKEN= +TWILIO_PHONE_NUMBER= # PRISMA DATABASE_URL="postgres://hestia:test123@localhost:5432/hestia" \ No newline at end of file diff --git a/src/app.d.ts b/src/app.d.ts index 7cce717..e181dff 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,4 +1,7 @@ // See https://svelte.dev/docs/kit/types#app.d.ts + +import type { TwilioConfiguration } from '$lib/server/twilio'; + // for information about these interfaces declare global { namespace App { @@ -6,6 +9,10 @@ declare global { interface Locals { user: import('lucia').User | null; session: import('lucia').Session | null; + twilio: { + config: TwilioConfiguration; + client: import('twilio').Twilio; + }; } // interface PageData {} // interface PageState {} diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..19a15dc --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,12 @@ +import { TwilioConfig } from '$lib/server/twilio'; +import twilio from 'twilio'; + +export async function handle({ event, resolve }) { + const twilioConfig = TwilioConfig(); + const twilioClient = twilio(twilioConfig.twilio_account_sid, twilioConfig.twilio_auth_token); + event.locals.twilio = { + config: twilioConfig, + client: twilioClient, + }; + return await resolve(event); +} diff --git a/src/lib/server/twilio/index.ts b/src/lib/server/twilio/index.ts index 5fdbe46..57dfde3 100644 --- a/src/lib/server/twilio/index.ts +++ b/src/lib/server/twilio/index.ts @@ -1 +1 @@ -export * from './twilio.client'; +export * from './twilio.config'; diff --git a/src/lib/server/twilio/twilio.client.ts b/src/lib/server/twilio/twilio.client.ts deleted file mode 100644 index 004523f..0000000 --- a/src/lib/server/twilio/twilio.client.ts +++ /dev/null @@ -1,4 +0,0 @@ -import twilio from 'twilio'; -import { TwilioConfig } from './twilio.config'; - -export const twilioClient = twilio(TwilioConfig.twilio_account_sid, TwilioConfig.twilio_auth_token); diff --git a/src/lib/server/twilio/twilio.config.ts b/src/lib/server/twilio/twilio.config.ts index 2539030..e49f0cf 100644 --- a/src/lib/server/twilio/twilio.config.ts +++ b/src/lib/server/twilio/twilio.config.ts @@ -1,3 +1,4 @@ +import { env } from '$env/dynamic/private'; import { PhoneRegex } from '$lib/regex'; import { logger } from '$lib/server/logger'; import { z } from 'zod'; @@ -8,24 +9,22 @@ export interface TwilioConfiguration { twilio_phone_number: string; } -const LoadConfig = (): TwilioConfiguration => { +export const TwilioConfig = (): TwilioConfiguration => { const { success, data, error } = z .object({ - VITE_TWILIO_ACCOUNT_SID: z.string(), - VITE_TWILIO_AUTH_TOKEN: z.string(), - VITE_TWILIO_PHONE_NUMBER: z.string().regex(PhoneRegex), + TWILIO_ACCOUNT_SID: z.string().min(1), + TWILIO_AUTH_TOKEN: z.string().min(1), + TWILIO_PHONE_NUMBER: z.string().regex(PhoneRegex), }) - .safeParse(import.meta.env); + .safeParse(env); if (!success) { logger.error(error.message); } return { - twilio_account_sid: data!.VITE_TWILIO_ACCOUNT_SID, - twilio_auth_token: data!.VITE_TWILIO_AUTH_TOKEN, - twilio_phone_number: data!.VITE_TWILIO_PHONE_NUMBER, + twilio_account_sid: data!.TWILIO_ACCOUNT_SID, + twilio_auth_token: data!.TWILIO_AUTH_TOKEN, + twilio_phone_number: data!.TWILIO_PHONE_NUMBER, }; }; - -export const TwilioConfig = LoadConfig(); diff --git a/src/routes/app/sms/+page.server.ts b/src/routes/app/sms/+page.server.ts index 096cbf2..bf9de3f 100644 --- a/src/routes/app/sms/+page.server.ts +++ b/src/routes/app/sms/+page.server.ts @@ -1,7 +1,5 @@ import { PhoneRegex } from '$lib/regex'; import { logger } from '$lib/server/logger'; -import { twilioClient } from '$lib/server/twilio'; -import { TwilioConfig } from '$lib/server/twilio/twilio.config'; import { fail, type Actions } from '@sveltejs/kit'; import zod from 'zod'; @@ -31,11 +29,12 @@ export const actions = { return fail(400, { error: 'invalid_message' }); } + const twilio = event.locals.twilio; try { - const result = await twilioClient.messages.create({ + const result = await twilio.client.messages.create({ to: phone, body: message, - from: TwilioConfig.twilio_phone_number, + from: twilio.config.twilio_phone_number, }); logger.debug(result); } catch (e) {