make app usable without account, remove extra stuff

This commit is contained in:
m5r
2023-04-29 18:30:07 +02:00
parent cb35455722
commit 03ae466c66
128 changed files with 617 additions and 14061 deletions

View File

@ -10,20 +10,14 @@ import { formatRelativeDate } from "~/features/core/helpers/date-formatter";
import type { PhoneCallsLoaderData } from "~/features/phone-calls/loaders/calls";
export default function PhoneCallsList() {
const { hasOngoingSubscription, isFetchingCalls, phoneCalls } = useLoaderData<PhoneCallsLoaderData>();
const { isFetchingCalls, phoneCalls } = useLoaderData<PhoneCallsLoaderData>();
if (!hasOngoingSubscription) {
if (!phoneCalls || phoneCalls.length === 0) {
return null;
}
} else {
if (isFetchingCalls || !phoneCalls) {
return <PhoneInitLoader />;
}
if (isFetchingCalls || !phoneCalls) {
return <PhoneInitLoader />;
}
if (phoneCalls.length === 0) {
return hasOngoingSubscription ? <EmptyCalls /> : null;
}
if (phoneCalls.length === 0) {
return <EmptyCalls />;
}
return (

View File

@ -4,7 +4,7 @@ import { parsePhoneNumber } from "awesome-phonenumber";
import { type PhoneCall, Prisma } from "@prisma/client";
import db from "~/utils/db.server";
import { requireLoggedIn } from "~/utils/auth.server";
import { getSession } from "~/utils/session.server";
type PhoneCallMeta = {
formattedPhoneNumber: string;
@ -12,7 +12,6 @@ type PhoneCallMeta = {
};
export type PhoneCallsLoaderData = {
hasOngoingSubscription: boolean;
hasPhoneNumber: boolean;
} & (
| {
@ -26,15 +25,14 @@ export type PhoneCallsLoaderData = {
);
const loader: LoaderFunction = async ({ request }) => {
const { twilio } = await requireLoggedIn(request);
const session = await getSession(request);
const twilio = session.get("twilio");
const phoneNumber = await db.phoneNumber.findUnique({
where: { twilioAccountSid_isCurrent: { twilioAccountSid: twilio?.accountSid ?? "", isCurrent: true } },
});
const hasPhoneNumber = Boolean(phoneNumber);
const hasOngoingSubscription = true; // TODO
if (!phoneNumber || phoneNumber.isFetchingCalls) {
return json<PhoneCallsLoaderData>({
hasOngoingSubscription,
hasPhoneNumber,
isFetchingCalls: phoneNumber?.isFetchingCalls ?? false,
});
@ -46,7 +44,6 @@ const loader: LoaderFunction = async ({ request }) => {
});
return json<PhoneCallsLoaderData>(
{
hasOngoingSubscription,
hasPhoneNumber,
phoneCalls: phoneCalls.map((phoneCall) => ({
...phoneCall,

View File

@ -1,17 +1,17 @@
import { type LoaderFunction } from "@remix-run/node";
import Twilio from "twilio";
import { refreshSessionData, requireLoggedIn } from "~/utils/auth.server";
import { decrypt, encrypt } from "~/utils/encryption";
import db from "~/utils/db.server";
import { commitSession } from "~/utils/session.server";
import { getSession } from "~/utils/session.server";
import getTwilioClient from "~/utils/twilio.server";
import logger from "~/utils/logger.server";
export type TwilioTokenLoaderData = string;
const loader: LoaderFunction = async ({ request }) => {
const { user, twilio } = await requireLoggedIn(request);
const session = await getSession(request);
const twilio = session.get("twilio");
if (!twilio) {
logger.warn("Twilio account is not connected");
return null;
@ -26,7 +26,6 @@ const loader: LoaderFunction = async ({ request }) => {
}
const twilioClient = getTwilioClient(twilioAccount);
let shouldRefreshSession = false;
let { apiKeySid, apiKeySecret } = twilioAccount;
if (apiKeySid && apiKeySecret) {
try {
@ -41,7 +40,6 @@ const loader: LoaderFunction = async ({ request }) => {
}
}
if (!apiKeySid || !apiKeySecret) {
shouldRefreshSession = true;
const apiKey = await twilioClient.newKeys.create({ friendlyName: "Shellphone" });
apiKeySid = apiKey.sid;
apiKeySecret = encrypt(apiKey.secret);
@ -52,7 +50,7 @@ const loader: LoaderFunction = async ({ request }) => {
}
const accessToken = new Twilio.jwt.AccessToken(twilioAccount.accountSid, apiKeySid, decrypt(apiKeySecret), {
identity: `${twilio.accountSid}__${user.id}`,
identity: `shellphone__${twilio.accountSid}`,
ttl: 3600,
});
const grant = new Twilio.jwt.AccessToken.VoiceGrant({
@ -62,11 +60,6 @@ const loader: LoaderFunction = async ({ request }) => {
accessToken.addGrant(grant);
const headers = new Headers({ "Content-Type": "text/plain" });
if (shouldRefreshSession) {
const { session } = await refreshSessionData(request);
headers.set("Set-Cookie", await commitSession(session));
}
return new Response(accessToken.toJwt(), { headers });
};