move twilio client to local on requests

This commit is contained in:
Benjamin Palko 2024-12-31 11:42:12 -05:00
parent 18f1b78ca4
commit 5287eb794a
7 changed files with 35 additions and 22 deletions

6
.env
View file

@ -1,7 +1,7 @@
# TWILIO # TWILIO
VITE_TWILIO_ACCOUNT_SID= TWILIO_ACCOUNT_SID=
VITE_TWILIO_AUTH_TOKEN= TWILIO_AUTH_TOKEN=
VITE_TWILIO_PHONE_NUMBER= TWILIO_PHONE_NUMBER=
# PRISMA # PRISMA
DATABASE_URL="postgres://hestia:test123@localhost:5432/hestia" DATABASE_URL="postgres://hestia:test123@localhost:5432/hestia"

7
src/app.d.ts vendored
View file

@ -1,4 +1,7 @@
// See https://svelte.dev/docs/kit/types#app.d.ts // See https://svelte.dev/docs/kit/types#app.d.ts
import type { TwilioConfiguration } from '$lib/server/twilio';
// for information about these interfaces // for information about these interfaces
declare global { declare global {
namespace App { namespace App {
@ -6,6 +9,10 @@ declare global {
interface Locals { interface Locals {
user: import('lucia').User | null; user: import('lucia').User | null;
session: import('lucia').Session | null; session: import('lucia').Session | null;
twilio: {
config: TwilioConfiguration;
client: import('twilio').Twilio;
};
} }
// interface PageData {} // interface PageData {}
// interface PageState {} // interface PageState {}

12
src/hooks.server.ts Normal file
View file

@ -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);
}

View file

@ -1 +1 @@
export * from './twilio.client'; export * from './twilio.config';

View file

@ -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);

View file

@ -1,3 +1,4 @@
import { env } from '$env/dynamic/private';
import { PhoneRegex } from '$lib/regex'; import { PhoneRegex } from '$lib/regex';
import { logger } from '$lib/server/logger'; import { logger } from '$lib/server/logger';
import { z } from 'zod'; import { z } from 'zod';
@ -8,24 +9,22 @@ export interface TwilioConfiguration {
twilio_phone_number: string; twilio_phone_number: string;
} }
const LoadConfig = (): TwilioConfiguration => { export const TwilioConfig = (): TwilioConfiguration => {
const { success, data, error } = z const { success, data, error } = z
.object({ .object({
VITE_TWILIO_ACCOUNT_SID: z.string(), TWILIO_ACCOUNT_SID: z.string().min(1),
VITE_TWILIO_AUTH_TOKEN: z.string(), TWILIO_AUTH_TOKEN: z.string().min(1),
VITE_TWILIO_PHONE_NUMBER: z.string().regex(PhoneRegex), TWILIO_PHONE_NUMBER: z.string().regex(PhoneRegex),
}) })
.safeParse(import.meta.env); .safeParse(env);
if (!success) { if (!success) {
logger.error(error.message); logger.error(error.message);
} }
return { return {
twilio_account_sid: data!.VITE_TWILIO_ACCOUNT_SID, twilio_account_sid: data!.TWILIO_ACCOUNT_SID,
twilio_auth_token: data!.VITE_TWILIO_AUTH_TOKEN, twilio_auth_token: data!.TWILIO_AUTH_TOKEN,
twilio_phone_number: data!.VITE_TWILIO_PHONE_NUMBER, twilio_phone_number: data!.TWILIO_PHONE_NUMBER,
}; };
}; };
export const TwilioConfig = LoadConfig();

View file

@ -1,7 +1,5 @@
import { PhoneRegex } from '$lib/regex'; import { PhoneRegex } from '$lib/regex';
import { logger } from '$lib/server/logger'; 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 { fail, type Actions } from '@sveltejs/kit';
import zod from 'zod'; import zod from 'zod';
@ -31,11 +29,12 @@ export const actions = {
return fail(400, { error: 'invalid_message' }); return fail(400, { error: 'invalid_message' });
} }
const twilio = event.locals.twilio;
try { try {
const result = await twilioClient.messages.create({ const result = await twilio.client.messages.create({
to: phone, to: phone,
body: message, body: message,
from: TwilioConfig.twilio_phone_number, from: twilio.config.twilio_phone_number,
}); });
logger.debug(result); logger.debug(result);
} catch (e) { } catch (e) {