Files
flxn-app/src/lib/twilio/index.ts
2025-09-29 15:13:41 -05:00

58 lines
1.5 KiB
TypeScript

import twilio, { type Twilio } from "twilio";
let client: Twilio;
function getEnvVars() {
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const serviceSid = process.env.TWILIO_SERVICE_SID;
if (!accountSid || !authToken || !serviceSid) {
throw new Error(`Missing env vars. accountSid: ${!!accountSid}, authToken: ${!!authToken}, serviceSid: ${!!serviceSid}`);
}
return { accountSid, authToken, serviceSid };
}
function getTwilioClient() {
if (!client) {
const { accountSid, authToken } = getEnvVars();
client = twilio(accountSid, authToken);
}
return client;
}
export async function sendVerifyCode(phoneNumber: string, code: string) {
const { serviceSid } = getEnvVars();
const twilioClient = getTwilioClient();
const verification = await twilioClient!.verify.v2
.services(serviceSid)
.verifications.create({
channel: "sms",
customCode: code,
to: phoneNumber,
});
if (verification.status !== "pending") {
throw new Error("Unknown error sending verification code");
}
return verification.sid;
}
export async function updateVerify(sid: string) {
const { serviceSid } = getEnvVars();
const twilioClient = getTwilioClient();
const verification = await twilioClient!.verify.v2
.services(serviceSid)
.verifications(sid)
.update({ status: "approved" });
if (verification.status !== "approved") {
throw new Error("Unknown error updating verification");
}
}