Something went wrong. Try again.
a tool for shared writing and social publishing
Something went wrong. Try again.
1.8 kB · 71 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172"use server";
import { randomBytes } from "crypto";import { drizzle } from "drizzle-orm/node-postgres";import postgres from "postgres";import { phone_number_auth_tokens } from "drizzle/schema";import twilio from "twilio";import { pool } from "supabase/pool";
async function sendAuthCode({ country_code, phone_number, code,}: { country_code: string; phone_number: string; code: string;}) { let phoneNumber = `+${country_code}${phone_number}`; const accountSid = process.env.TWILIO_ACCOUNT_SID; const authToken = process.env.TWILIO_AUTH_TOKEN; const client = twilio(accountSid, authToken); if (country_code === "1") { const message = await client.messages.create({ body: `${code} is your verification code
@leaflet.pub #${code}`, from: `+18449523391`, to: phoneNumber, }); console.log(message); } else { const message = await client.messages.create({ contentSid: "HX5ebfae4d2a423808486e773e8a22488d", contentVariables: JSON.stringify({ 1: code }), from: "whatsapp:+18449523391", messagingServiceSid: "MGffbf9a66770350b25caf3b80b9aac481", to: `whatsapp:${phoneNumber}`, }); }}
export async function createPhoneAuthToken({ phone_number, country_code,}: { phone_number: string; country_code: string;}) { const client = await pool.connect(); const db = drizzle(client);
const code = randomBytes(3).toString("hex").toUpperCase();
const [token] = await db .insert(phone_number_auth_tokens) .values({ phone_number, country_code, confirmation_code: code, confirmed: false, }) .returning({ id: phone_number_auth_tokens.id, });
await sendAuthCode({ country_code, phone_number, code });
client.release(); return token.id;}