replace twilio connect with account sid/auth token form
This commit is contained in:
@ -9,10 +9,7 @@ import authenticator from "./authenticator.server";
|
||||
import { AuthenticationError, NotFoundError } from "./errors";
|
||||
import { commitSession, destroySession, getSession } from "./session.server";
|
||||
|
||||
type SessionTwilioAccount = Pick<
|
||||
TwilioAccount,
|
||||
"accountSid" | "subAccountSid" | "subAccountAuthToken" | "apiKeySid" | "apiKeySecret" | "twimlAppSid"
|
||||
>;
|
||||
type SessionTwilioAccount = Pick<TwilioAccount, "accountSid" | "authToken">;
|
||||
type SessionOrganization = Pick<Organization, "id"> & { role: MembershipRole; membershipId: string };
|
||||
type SessionPhoneNumber = Pick<PhoneNumber, "id" | "number">;
|
||||
export type SessionUser = Pick<User, "id" | "role" | "email" | "fullName">;
|
||||
@ -20,7 +17,7 @@ export type SessionData = {
|
||||
user: SessionUser;
|
||||
organization: SessionOrganization;
|
||||
phoneNumber: SessionPhoneNumber | null;
|
||||
twilioAccount: SessionTwilioAccount | null;
|
||||
twilio: SessionTwilioAccount | null;
|
||||
};
|
||||
|
||||
const SP = new SecurePassword();
|
||||
@ -62,6 +59,7 @@ export async function login({ form }: FormStrategyVerifyParams): Promise<Session
|
||||
try {
|
||||
return await buildSessionData(user.id);
|
||||
} catch (error: any) {
|
||||
logger.error(error);
|
||||
if (error instanceof AuthenticationError) {
|
||||
throw error;
|
||||
}
|
||||
@ -178,14 +176,7 @@ async function buildSessionData(id: string): Promise<SessionData> {
|
||||
select: {
|
||||
id: true,
|
||||
twilioAccount: {
|
||||
select: {
|
||||
accountSid: true,
|
||||
subAccountSid: true,
|
||||
subAccountAuthToken: true,
|
||||
apiKeySid: true,
|
||||
apiKeySecret: true,
|
||||
twimlAppSid: true,
|
||||
},
|
||||
select: { accountSid: true, authToken: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -214,6 +205,6 @@ async function buildSessionData(id: string): Promise<SessionData> {
|
||||
user: rest,
|
||||
organization,
|
||||
phoneNumber,
|
||||
twilioAccount,
|
||||
twilio: twilioAccount,
|
||||
};
|
||||
}
|
||||
|
@ -4,20 +4,17 @@ import type { CallInstance } from "twilio/lib/rest/api/v2010/account/call";
|
||||
import { type TwilioAccount, CallStatus, Direction, MessageStatus } from "@prisma/client";
|
||||
|
||||
import serverConfig from "~/config/config.server";
|
||||
import { decrypt } from "~/utils/encryption";
|
||||
|
||||
export default function getTwilioClient({
|
||||
accountSid,
|
||||
subAccountSid,
|
||||
subAccountAuthToken,
|
||||
}: Pick<TwilioAccount, "accountSid" | "subAccountSid"> &
|
||||
Partial<Pick<TwilioAccount, "subAccountAuthToken">>): twilio.Twilio {
|
||||
if (!subAccountSid || !accountSid) {
|
||||
authToken,
|
||||
}: Pick<TwilioAccount, "accountSid" | "authToken">): twilio.Twilio {
|
||||
if (!accountSid || !authToken) {
|
||||
throw new Error("unreachable");
|
||||
}
|
||||
|
||||
return twilio(subAccountSid, serverConfig.twilio.authToken, {
|
||||
accountSid,
|
||||
});
|
||||
return twilio(accountSid, decrypt(authToken));
|
||||
}
|
||||
|
||||
export const smsUrl = `https://${serverConfig.app.baseUrl}/webhook/message`;
|
||||
|
@ -32,3 +32,16 @@ export function validate<Data, Schema = z.Schema<Data>["_type"]>(
|
||||
errors,
|
||||
};
|
||||
}
|
||||
|
||||
type FormFailureData<Validations extends Record<string, z.Schema>, Action extends keyof Validations> = {
|
||||
errors: FormError<Validations[Action]>;
|
||||
submitted?: never;
|
||||
};
|
||||
type FormSuccessData = {
|
||||
errors?: never;
|
||||
submitted: true;
|
||||
};
|
||||
export type FormActionData<Validations extends Record<string, z.Schema>, Action extends keyof Validations> = Record<
|
||||
Action,
|
||||
FormSuccessData | FormFailureData<Validations, Action>
|
||||
>;
|
||||
|
Reference in New Issue
Block a user