import { resolver, NotFoundError } from "blitz"; import Twilio from "twilio"; import db from "db"; import getCurrentPhoneNumber from "../../phone-numbers/queries/get-current-phone-number"; export default resolver.pipe(resolver.authorize(), async (_ = null, context) => { const phoneNumber = await getCurrentPhoneNumber({}, context); if (!phoneNumber) { throw new NotFoundError(); } const organization = await db.organization.findFirst({ where: { id: phoneNumber.organizationId }, }); if ( !organization || !organization.twilioAccountSid || !organization.twilioAuthToken || !organization.twilioApiKey || !organization.twilioApiSecret || !organization.twimlAppSid ) { throw new NotFoundError(); } const accessToken = new Twilio.jwt.AccessToken( organization.twilioAccountSid, organization.twilioApiKey, organization.twilioApiSecret, { identity: `${context.session.orgId}__${context.session.userId}`, ttl: 3600 }, ); const grant = new Twilio.jwt.AccessToken.VoiceGrant({ outgoingApplicationSid: organization.twimlAppSid, incomingAllow: true, }); accessToken.addGrant(grant); return accessToken.toJwt(); });