replace twilio connect with account sid/auth token form

This commit is contained in:
m5r
2022-06-09 00:33:19 +02:00
parent c047e169f2
commit e8ba6a63ab
19 changed files with 437 additions and 208 deletions

View File

@ -4,6 +4,7 @@ import insertPhoneCallsQueue from "./insert-phone-calls.server";
import fetchMessagesQueue from "./fetch-messages.server";
import insertMessagesQueue from "./insert-messages.server";
import setTwilioWebhooksQueue from "./set-twilio-webhooks.server";
import setTwilioApiKeyQueue from "./set-twilio-api-key.server";
export default [
deleteUserDataQueue,
@ -12,4 +13,5 @@ export default [
fetchMessagesQueue,
insertMessagesQueue,
setTwilioWebhooksQueue,
setTwilioApiKeyQueue,
];

View File

@ -0,0 +1,36 @@
import { Queue } from "~/utils/queue.server";
import db from "~/utils/db.server";
import getTwilioClient from "~/utils/twilio.server";
import { encrypt } from "~/utils/encryption";
type Payload = {
accountSid: string;
};
export default Queue<Payload>("set twilio api key", async ({ data }) => {
const accountSid = data.accountSid;
const twilioAccount = await db.twilioAccount.findUnique({ where: { accountSid } });
if (!twilioAccount) {
return;
}
const twilioClient = getTwilioClient(twilioAccount);
const friendlyName = "Shellphone API key";
await new Promise((resolve) => {
twilioClient.api.keys.each({ done: resolve }, (apiKey) => {
if (apiKey.friendlyName === friendlyName) {
apiKey.remove();
}
});
});
const apiKey = await twilioClient.newKeys.create({ friendlyName });
await db.twilioAccount.update({
where: { accountSid },
data: {
apiKeySid: apiKey.sid,
apiKeySecret: encrypt(apiKey.secret),
},
});
});

View File

@ -1,9 +1,10 @@
import type twilio from "twilio";
import twilio from "twilio";
import type { ApplicationInstance } from "twilio/lib/rest/api/v2010/account/application";
import { Queue } from "~/utils/queue.server";
import db from "~/utils/db.server";
import getTwilioClient, { getTwiMLName, smsUrl, voiceUrl } from "~/utils/twilio.server";
import { getTwiMLName, smsUrl, voiceUrl } from "~/utils/twilio.server";
import { decrypt } from "~/utils/encryption";
type Payload = {
phoneNumberId: string;
@ -18,7 +19,7 @@ export default Queue<Payload>("set twilio webhooks", async ({ data }) => {
organization: {
select: {
twilioAccount: {
select: { accountSid: true, subAccountSid: true, twimlAppSid: true },
select: { accountSid: true, twimlAppSid: true, authToken: true },
},
},
},
@ -29,7 +30,8 @@ export default Queue<Payload>("set twilio webhooks", async ({ data }) => {
}
const twilioAccount = phoneNumber.organization.twilioAccount;
const twilioClient = getTwilioClient(twilioAccount);
const authToken = decrypt(twilioAccount.authToken);
const twilioClient = twilio(twilioAccount.accountSid, authToken);
const twimlApp = await getTwimlApplication(twilioClient, twilioAccount.twimlAppSid);
const twimlAppSid = twimlApp.sid;