From 03ae466c66d00efe9c798aad7afaa4010c1045b3 Mon Sep 17 00:00:00 2001 From: m5r Date: Sat, 29 Apr 2023 18:30:07 +0200 Subject: [PATCH] make app usable without account, remove extra stuff --- .dockerignore | 5 +- .github/workflows/main.yml | 37 - .gitignore | 4 - app/config/config.client.ts | 1 - app/config/config.server.ts | 29 - app/cron-jobs/daily-backup.ts | 4 - app/cron-jobs/index.ts | 3 - app/cron-jobs/monthly-backup.ts | 4 - app/cron-jobs/purge-expired-sessions.ts | 14 - app/cron-jobs/weekly-backup.ts | 4 - app/features/auth/actions/forgot-password.ts | 63 - app/features/auth/actions/register.ts | 59 - app/features/auth/actions/reset-password.ts | 56 - app/features/auth/actions/sign-in.ts | 23 - app/features/auth/loaders/forgot-password.ts | 11 - app/features/auth/loaders/register.ts | 25 - app/features/auth/loaders/reset-password.ts | 23 - app/features/auth/loaders/sign-in.ts | 25 - app/features/auth/pages/forgot-password.tsx | 49 - app/features/auth/pages/register.tsx | 75 - app/features/auth/pages/reset-password.tsx | 55 - app/features/auth/pages/sign-in.tsx | 71 - app/features/auth/validations.ts | 40 - .../actions/notifications-subscription.ts | 14 +- app/features/core/components/button.tsx | 26 - .../core/components/inactive-subscription.tsx | 35 - app/features/core/components/select.tsx | 68 - app/features/core/components/spinner.css | 15 - app/features/core/components/spinner.tsx | 15 - app/features/keypad/loaders/keypad.ts | 8 +- .../messages/actions/messages.$recipient.tsx | 10 +- .../messages/loaders/messages.$recipient.ts | 5 +- app/features/messages/loaders/messages.ts | 5 +- .../components/phone-calls-list.tsx | 18 +- app/features/phone-calls/loaders/calls.ts | 9 +- .../phone-calls/loaders/twilio-token.ts | 15 +- app/features/public-area/actions/index.ts | 23 - .../public-area/components/button.tsx | 41 - .../public-area/components/call-to-action.tsx | 67 - .../public-area/components/container.tsx | 10 - app/features/public-area/components/faqs.tsx | 142 - .../public-area/components/fields.tsx | 27 - .../public-area/components/header.tsx | 34 - app/features/public-area/components/hero.tsx | 38 - app/features/public-area/components/logo.tsx | 3 - .../public-area/components/nav-link.tsx | 13 - .../images/background-call-to-action.jpg | Bin 166094 -> 0 bytes .../images/background-call-to-action.webp | Bin 38140 -> 0 bytes .../public-area/images/background-faqs.jpg | Bin 75878 -> 0 bytes .../public-area/images/background-faqs.webp | Bin 16516 -> 0 bytes app/features/public-area/pages/index.tsx | 17 - app/features/settings/actions/account.ts | 130 - app/features/settings/actions/phone.ts | 48 +- .../components/account/danger-zone.tsx | 91 - .../account/profile-informations.tsx | 85 - .../components/account/update-password.tsx | 69 - .../components/billing/billing-history.tsx | 172 - .../components/billing/paddle-link.tsx | 18 - .../settings/components/billing/plans.tsx | 139 - .../components/billing/switch-plan-modal.tsx | 52 - .../settings/components/phone/help-modal.tsx | 13 - .../components/phone/phone-number-form.tsx | 2 +- .../components/phone/twilio-connect.tsx | 6 +- app/features/settings/loaders/phone.ts | 7 +- app/mailers/forgot-password-mailer.server.ts | 21 - .../renderer/html/components/footer.html | 16 - .../renderer/html/components/header.html | 15 - .../renderer/html/custom/postmark/buttons.css | 32 - .../renderer/html/custom/postmark/index.css | 65 - app/mailers/renderer/html/custom/reset.css | 10 - .../renderer/html/custom/utilities.css | 3 - app/mailers/renderer/html/layouts/main.html | 75 - .../html/templates/forgot-password.html | 93 - .../renderer/html/templates/tailwind.css | 18 - .../html/templates/team-invitation.html | 81 - app/mailers/renderer/renderer.server.ts | 219 - app/mailers/team-invitation-mailer.server.ts | 26 - app/queues/delete-user-data.server.ts | 51 - app/queues/index.ts | 2 - app/queues/notify-incoming-message.server.ts | 15 +- app/queues/set-twilio-webhooks.server.ts | 7 +- app/routes/__app.tsx | 6 + app/routes/__app/calls.tsx | 17 +- app/routes/__app/keypad.tsx | 18 +- app/routes/__app/settings.tsx | 13 - app/routes/__app/settings/account.tsx | 18 - app/routes/__app/settings/billing.tsx | 66 - app/routes/__app/settings/index.tsx | 2 +- app/routes/__app/settings/support.tsx | 9 - app/routes/__auth.tsx | 16 - app/routes/__auth/forgot-password.tsx | 15 - app/routes/__auth/register.tsx | 15 - app/routes/__auth/reset-password.tsx | 15 - app/routes/__auth/sign-in.tsx | 15 - app/routes/__auth/sign-out.tsx | 9 - app/routes/healthcheck.ts | 2 +- app/routes/index.tsx | 20 +- app/routes/webhook/call.ts | 67 +- app/routes/webhook/message.ts | 22 +- app/utils/auth.server.ts | 204 - app/utils/authenticator.server.ts | 11 - app/utils/backup-db.server.ts | 95 - app/utils/discord.server.ts | 12 - app/utils/errors.ts | 22 - app/utils/mailchimp.server.ts | 22 - app/utils/mailer.server.ts | 39 - app/utils/organization.server.ts | 24 - app/utils/queue.server.ts | 23 - app/utils/session.server.ts | 29 +- app/utils/token.server.ts | 10 - app/utils/validation.server.ts | 4 +- cypress/fixtures/example.json | 1 - cypress/integration/dashboard.ts | 20 - cypress/integration/onboarding.ts | 27 - cypress/plugins/index.ts | 22 - cypress/support/commands.ts | 0 cypress/support/index.ts | 7 - cypress/tsconfig.json | 26 - fly.dev.toml | 1 - package-lock.json | 10226 +--------------- package.json | 28 +- .../20220517184134_init/migration.sql | 234 - .../20230429105137_init/migration.sql | 117 + prisma/schema.prisma | 132 +- prisma/seed.ts | 52 - server/index.ts | 3 +- server/queues.ts | 22 +- tsconfig.json | 1 - 128 files changed, 617 insertions(+), 14061 deletions(-) delete mode 100644 app/config/config.client.ts delete mode 100644 app/cron-jobs/daily-backup.ts delete mode 100644 app/cron-jobs/index.ts delete mode 100644 app/cron-jobs/monthly-backup.ts delete mode 100644 app/cron-jobs/purge-expired-sessions.ts delete mode 100644 app/cron-jobs/weekly-backup.ts delete mode 100644 app/features/auth/actions/forgot-password.ts delete mode 100644 app/features/auth/actions/register.ts delete mode 100644 app/features/auth/actions/reset-password.ts delete mode 100644 app/features/auth/actions/sign-in.ts delete mode 100644 app/features/auth/loaders/forgot-password.ts delete mode 100644 app/features/auth/loaders/register.ts delete mode 100644 app/features/auth/loaders/reset-password.ts delete mode 100644 app/features/auth/loaders/sign-in.ts delete mode 100644 app/features/auth/pages/forgot-password.tsx delete mode 100644 app/features/auth/pages/register.tsx delete mode 100644 app/features/auth/pages/reset-password.tsx delete mode 100644 app/features/auth/pages/sign-in.tsx delete mode 100644 app/features/auth/validations.ts delete mode 100644 app/features/core/components/button.tsx delete mode 100644 app/features/core/components/inactive-subscription.tsx delete mode 100644 app/features/core/components/select.tsx delete mode 100644 app/features/core/components/spinner.css delete mode 100644 app/features/core/components/spinner.tsx delete mode 100644 app/features/public-area/actions/index.ts delete mode 100644 app/features/public-area/components/button.tsx delete mode 100644 app/features/public-area/components/call-to-action.tsx delete mode 100644 app/features/public-area/components/container.tsx delete mode 100644 app/features/public-area/components/faqs.tsx delete mode 100644 app/features/public-area/components/fields.tsx delete mode 100644 app/features/public-area/components/header.tsx delete mode 100644 app/features/public-area/components/hero.tsx delete mode 100644 app/features/public-area/components/logo.tsx delete mode 100644 app/features/public-area/components/nav-link.tsx delete mode 100644 app/features/public-area/images/background-call-to-action.jpg delete mode 100644 app/features/public-area/images/background-call-to-action.webp delete mode 100644 app/features/public-area/images/background-faqs.jpg delete mode 100644 app/features/public-area/images/background-faqs.webp delete mode 100644 app/features/public-area/pages/index.tsx delete mode 100644 app/features/settings/actions/account.ts delete mode 100644 app/features/settings/components/account/danger-zone.tsx delete mode 100644 app/features/settings/components/account/profile-informations.tsx delete mode 100644 app/features/settings/components/account/update-password.tsx delete mode 100644 app/features/settings/components/billing/billing-history.tsx delete mode 100644 app/features/settings/components/billing/paddle-link.tsx delete mode 100644 app/features/settings/components/billing/plans.tsx delete mode 100644 app/features/settings/components/billing/switch-plan-modal.tsx delete mode 100644 app/mailers/forgot-password-mailer.server.ts delete mode 100644 app/mailers/renderer/html/components/footer.html delete mode 100644 app/mailers/renderer/html/components/header.html delete mode 100644 app/mailers/renderer/html/custom/postmark/buttons.css delete mode 100644 app/mailers/renderer/html/custom/postmark/index.css delete mode 100644 app/mailers/renderer/html/custom/reset.css delete mode 100644 app/mailers/renderer/html/custom/utilities.css delete mode 100644 app/mailers/renderer/html/layouts/main.html delete mode 100644 app/mailers/renderer/html/templates/forgot-password.html delete mode 100644 app/mailers/renderer/html/templates/tailwind.css delete mode 100644 app/mailers/renderer/html/templates/team-invitation.html delete mode 100644 app/mailers/renderer/renderer.server.ts delete mode 100644 app/mailers/team-invitation-mailer.server.ts delete mode 100644 app/queues/delete-user-data.server.ts delete mode 100644 app/routes/__app/settings/account.tsx delete mode 100644 app/routes/__app/settings/billing.tsx delete mode 100644 app/routes/__app/settings/support.tsx delete mode 100644 app/routes/__auth.tsx delete mode 100644 app/routes/__auth/forgot-password.tsx delete mode 100644 app/routes/__auth/register.tsx delete mode 100644 app/routes/__auth/reset-password.tsx delete mode 100644 app/routes/__auth/sign-in.tsx delete mode 100644 app/routes/__auth/sign-out.tsx delete mode 100644 app/utils/auth.server.ts delete mode 100644 app/utils/authenticator.server.ts delete mode 100644 app/utils/backup-db.server.ts delete mode 100644 app/utils/discord.server.ts delete mode 100644 app/utils/errors.ts delete mode 100644 app/utils/mailchimp.server.ts delete mode 100644 app/utils/mailer.server.ts delete mode 100644 app/utils/organization.server.ts delete mode 100644 app/utils/token.server.ts delete mode 100644 cypress/fixtures/example.json delete mode 100644 cypress/integration/dashboard.ts delete mode 100644 cypress/integration/onboarding.ts delete mode 100644 cypress/plugins/index.ts delete mode 100644 cypress/support/commands.ts delete mode 100644 cypress/support/index.ts delete mode 100644 cypress/tsconfig.json delete mode 100644 prisma/migrations/20220517184134_init/migration.sql create mode 100644 prisma/migrations/20230429105137_init/migration.sql delete mode 100644 prisma/seed.ts diff --git a/.dockerignore b/.dockerignore index 29ff348..7522c89 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,12 +1,9 @@ node_modules .env /.idea -/cypress/videos -/cypress/screenshots -/coverage # build artifacts /.cache /public/build /build -/server/index.js \ No newline at end of file +/server/index.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f9c2116..5efa7de 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,40 +25,3 @@ jobs: node-version: 16 - run: npm ci - run: npx tsc - - deploy_development: - if: github.ref == 'refs/heads/master' - needs: [lint, typecheck] - name: Deploy development environment - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: superfly/flyctl-actions@master - env: - FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} - with: - args: "deploy --strategy rolling -c ./fly.dev.toml" - - uses: appleboy/discord-action@master - with: - webhook_id: ${{ secrets.DISCORD_WEBHOOK_ID }} - webhook_token: ${{ secrets.DISCORD_WEBHOOK_TOKEN }} - args: "https://dev.shellphone.app deployed with commit `${{ github.event.head_commit.message }}` (`${{ github.sha }}`) from branch `${{ github.ref }}`" - - - deploy_production: - if: github.ref == 'refs/heads/production' - needs: [lint, typecheck] - name: Deploy production environment - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: superfly/flyctl-actions@master - env: - FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} - with: - args: "deploy --strategy rolling" - - uses: appleboy/discord-action@master - with: - webhook_id: ${{ secrets.DISCORD_WEBHOOK_ID }} - webhook_token: ${{ secrets.DISCORD_WEBHOOK_TOKEN }} - args: "https://www.shellphone.app deployed with commit `${{ github.event.head_commit.message }}` (`${{ github.sha }}`) from branch `${{ github.ref }}`" diff --git a/.gitignore b/.gitignore index 595c16c..eef4f19 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,3 @@ node_modules /.idea .env - -/cypress/videos -/cypress/screenshots -/coverage \ No newline at end of file diff --git a/app/config/config.client.ts b/app/config/config.client.ts deleted file mode 100644 index ff8b4c5..0000000 --- a/app/config/config.client.ts +++ /dev/null @@ -1 +0,0 @@ -export default {}; diff --git a/app/config/config.server.ts b/app/config/config.server.ts index 025fb72..4baf0b5 100644 --- a/app/config/config.server.ts +++ b/app/config/config.server.ts @@ -40,22 +40,6 @@ invariant( typeof process.env.WEB_PUSH_VAPID_PUBLIC_KEY === "string", `Please define the "WEB_PUSH_VAPID_PUBLIC_KEY" environment variable`, ); -invariant( - typeof process.env.MAILCHIMP_API_KEY === "string", - `Please define the "MAILCHIMP_API_KEY" environment variable`, -); -invariant( - typeof process.env.MAILCHIMP_AUDIENCE_ID === "string", - `Please define the "MAILCHIMP_AUDIENCE_ID" environment variable`, -); -invariant( - typeof process.env.DISCORD_WEBHOOK_ID === "string", - `Please define the "DISCORD_WEBHOOK_ID" environment variable`, -); -invariant( - typeof process.env.DISCORD_WEBHOOK_TOKEN === "string", - `Please define the "DISCORD_WEBHOOK_TOKEN" environment variable`, -); export default { app: { @@ -66,24 +50,11 @@ export default { }, aws: { region: process.env.AWS_REGION, - ses: { - accessKeyId: process.env.AWS_SES_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SES_ACCESS_KEY_SECRET, - fromEmail: process.env.AWS_SES_FROM_EMAIL, - }, s3: { accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_S3_ACCESS_KEY_SECRET, }, }, - discord: { - webhookId: process.env.DISCORD_WEBHOOK_ID, - webhookToken: process.env.DISCORD_WEBHOOK_TOKEN, - }, - mailchimp: { - apiKey: process.env.MAILCHIMP_API_KEY, - audienceId: process.env.MAILCHIMP_AUDIENCE_ID, - }, redis: { url: process.env.REDIS_URL, password: process.env.REDIS_PASSWORD, diff --git a/app/cron-jobs/daily-backup.ts b/app/cron-jobs/daily-backup.ts deleted file mode 100644 index 0a65e15..0000000 --- a/app/cron-jobs/daily-backup.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { CronJob } from "~/utils/queue.server"; -import backup from "~/utils/backup-db.server"; - -export default CronJob("daily db backup", () => backup("daily"), "0 0 * * *"); diff --git a/app/cron-jobs/index.ts b/app/cron-jobs/index.ts deleted file mode 100644 index 50707bc..0000000 --- a/app/cron-jobs/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import registerPurgeExpiredSession from "./purge-expired-sessions"; - -export default [registerPurgeExpiredSession]; diff --git a/app/cron-jobs/monthly-backup.ts b/app/cron-jobs/monthly-backup.ts deleted file mode 100644 index a401dae..0000000 --- a/app/cron-jobs/monthly-backup.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { CronJob } from "~/utils/queue.server"; -import backup from "~/utils/backup-db.server"; - -export default CronJob("monthly db backup", () => backup("monthly"), "0 0 1 * *"); diff --git a/app/cron-jobs/purge-expired-sessions.ts b/app/cron-jobs/purge-expired-sessions.ts deleted file mode 100644 index 1be6cdc..0000000 --- a/app/cron-jobs/purge-expired-sessions.ts +++ /dev/null @@ -1,14 +0,0 @@ -import db from "~/utils/db.server"; -import { CronJob } from "~/utils/queue.server"; - -export default CronJob( - "purge expired sessions", - async () => { - await db.session.deleteMany({ - where: { - expiresAt: { lt: new Date() }, - }, - }); - }, - "0 0 * * *", -); diff --git a/app/cron-jobs/weekly-backup.ts b/app/cron-jobs/weekly-backup.ts deleted file mode 100644 index e4b9800..0000000 --- a/app/cron-jobs/weekly-backup.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { CronJob } from "~/utils/queue.server"; -import backup from "~/utils/backup-db.server"; - -export default CronJob("weekly db backup", () => backup("weekly"), "0 0 * * 0"); diff --git a/app/features/auth/actions/forgot-password.ts b/app/features/auth/actions/forgot-password.ts deleted file mode 100644 index e3546bf..0000000 --- a/app/features/auth/actions/forgot-password.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { type ActionFunction, json } from "@remix-run/node"; -import { type User, TokenType } from "@prisma/client"; - -import db from "~/utils/db.server"; -import { type FormError, validate } from "~/utils/validation.server"; -import { sendForgotPasswordEmail } from "~/mailers/forgot-password-mailer.server"; -import { generateToken, hashToken } from "~/utils/token.server"; -import { ForgotPassword } from "../validations"; - -const RESET_PASSWORD_TOKEN_EXPIRATION_IN_HOURS = 24; - -type ForgotPasswordFailureActionData = { errors: FormError; submitted?: never }; -type ForgotPasswordSuccessfulActionData = { errors?: never; submitted: true }; -export type ForgotPasswordActionData = ForgotPasswordFailureActionData | ForgotPasswordSuccessfulActionData; - -const action: ActionFunction = async ({ request }) => { - const formData = Object.fromEntries(await request.formData()); - const validation = validate(ForgotPassword, formData); - if (validation.errors) { - return json({ errors: validation.errors }); - } - - const { email } = validation.data; - const user = await db.user.findUnique({ where: { email: email.toLowerCase() } }); - - // always wait the same amount of time so attackers can't tell the difference whether a user is found - await Promise.all([updatePassword(user), new Promise((resolve) => setTimeout(resolve, 750))]); - - // return the same result whether a password reset email was sent or not - return json({ submitted: true }); -}; - -export default action; - -async function updatePassword(user: User | null) { - const membership = await db.membership.findFirst({ where: { userId: user?.id } }); - if (!user || !membership) { - return; - } - - const token = generateToken(); - const hashedToken = hashToken(token); - const expiresAt = new Date(); - expiresAt.setHours(expiresAt.getHours() + RESET_PASSWORD_TOKEN_EXPIRATION_IN_HOURS); - - await db.token.deleteMany({ where: { type: TokenType.RESET_PASSWORD, userId: user.id } }); - await db.token.create({ - data: { - user: { connect: { id: user.id } }, - membership: { connect: { id: membership.id } }, - type: TokenType.RESET_PASSWORD, - expiresAt, - hashedToken, - sentTo: user.email, - }, - }); - - await sendForgotPasswordEmail({ - to: user.email, - token, - userName: user.fullName, - }); -} diff --git a/app/features/auth/actions/register.ts b/app/features/auth/actions/register.ts deleted file mode 100644 index 2404ec1..0000000 --- a/app/features/auth/actions/register.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { type ActionFunction, json } from "@remix-run/node"; -import { GlobalRole, MembershipRole } from "@prisma/client"; - -import db from "~/utils/db.server"; -import logger from "~/utils/logger.server"; -import { authenticate, hashPassword } from "~/utils/auth.server"; -import { type FormError, validate } from "~/utils/validation.server"; -import { Register } from "../validations"; - -export type RegisterActionData = { - errors: FormError; -}; - -const action: ActionFunction = async ({ request }) => { - const formData = Object.fromEntries(await request.formData()); - const validation = validate(Register, formData); - if (validation.errors) { - return json({ errors: validation.errors }); - } - - const { fullName, email, password } = validation.data; - const hashedPassword = await hashPassword(password.trim()); - try { - await db.user.create({ - data: { - fullName: fullName.trim(), - email: email.toLowerCase().trim(), - hashedPassword, - role: GlobalRole.CUSTOMER, - memberships: { - create: { - role: MembershipRole.OWNER, - organization: { - create: {} - }, - }, - }, - }, - }); - } catch (error: any) { - logger.error(error); - - if (error.code === "P2002") { - if (error.meta.target[0] === "email") { - return json({ - errors: { general: "An account with this email address already exists" }, - }); - } - } - - return json({ - errors: { general: `An unexpected error happened${error.code ? `\nCode: ${error.code}` : ""}` }, - }); - } - - return authenticate({ email, password, request, failureRedirect: "/register" }); -}; - -export default action; diff --git a/app/features/auth/actions/reset-password.ts b/app/features/auth/actions/reset-password.ts deleted file mode 100644 index 1ddb2b2..0000000 --- a/app/features/auth/actions/reset-password.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { type ActionFunction, json, redirect } from "@remix-run/node"; -import { TokenType } from "@prisma/client"; - -import db from "~/utils/db.server"; -import logger from "~/utils/logger.server"; -import { type FormError, validate } from "~/utils/validation.server"; -import { authenticate, hashPassword } from "~/utils/auth.server"; -import { ResetPasswordError } from "~/utils/errors"; -import { hashToken } from "~/utils/token.server"; -import { ResetPassword } from "../validations"; - -export type ResetPasswordActionData = { errors: FormError }; - -const action: ActionFunction = async ({ request }) => { - const searchParams = new URL(request.url).searchParams; - const token = searchParams.get("token"); - if (!token) { - return redirect("/forgot-password"); - } - - const formData = Object.fromEntries(await request.formData()); - const validation = validate(ResetPassword, { ...formData, token }); - if (validation.errors) { - return json({ errors: validation.errors }); - } - - const hashedToken = hashToken(token); - const savedToken = await db.token.findFirst({ - where: { hashedToken, type: TokenType.RESET_PASSWORD }, - include: { user: true }, - }); - if (!savedToken) { - logger.warn(`No token found with hashedToken=${hashedToken}`); - throw new ResetPasswordError(); - } - - await db.token.delete({ where: { id: savedToken.id } }); - - if (savedToken.expiresAt < new Date()) { - logger.warn(`Token with hashedToken=${hashedToken} is expired since ${savedToken.expiresAt.toUTCString()}`); - throw new ResetPasswordError(); - } - - const password = validation.data.password.trim(); - const hashedPassword = await hashPassword(password); - const { email } = await db.user.update({ - where: { id: savedToken.userId }, - data: { hashedPassword }, - }); - - await db.session.deleteMany({ where: { userId: savedToken.userId } }); - - return authenticate({ email, password, request }); -}; - -export default action; diff --git a/app/features/auth/actions/sign-in.ts b/app/features/auth/actions/sign-in.ts deleted file mode 100644 index b36156f..0000000 --- a/app/features/auth/actions/sign-in.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type ActionFunction, json } from "@remix-run/node"; - -import { SignIn } from "../validations"; -import { type FormError, validate } from "~/utils/validation.server"; -import { authenticate } from "~/utils/auth.server"; - -export type SignInActionData = { errors: FormError }; - -const action: ActionFunction = async ({ request }) => { - const formData = Object.fromEntries(await request.clone().formData()); - const validation = validate(SignIn, formData); - if (validation.errors) { - return json({ errors: validation.errors }); - } - - const searchParams = new URL(request.url).searchParams; - const redirectTo = searchParams.get("redirectTo"); - const successRedirect = redirectTo ? decodeURIComponent(redirectTo) : null; - const { email, password } = validation.data; - return authenticate({ email, password, request, successRedirect }); -}; - -export default action; diff --git a/app/features/auth/loaders/forgot-password.ts b/app/features/auth/loaders/forgot-password.ts deleted file mode 100644 index 0c7edb4..0000000 --- a/app/features/auth/loaders/forgot-password.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { LoaderFunction } from "@remix-run/node"; - -import { requireLoggedOut } from "~/utils/auth.server"; - -const loader: LoaderFunction = async ({ request }) => { - await requireLoggedOut(request); - - return null; -}; - -export default loader; diff --git a/app/features/auth/loaders/register.ts b/app/features/auth/loaders/register.ts deleted file mode 100644 index ce6a626..0000000 --- a/app/features/auth/loaders/register.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { type LoaderFunction, json } from "@remix-run/node"; - -import { getErrorMessage, requireLoggedOut } from "~/utils/auth.server"; -import { commitSession, getSession } from "~/utils/session.server"; - -export type RegisterLoaderData = { errors: { general: string } } | null; - -const loader: LoaderFunction = async ({ request }) => { - const session = await getSession(request); - const errorMessage = getErrorMessage(session); - if (errorMessage) { - return json( - { errors: { general: errorMessage } }, - { - headers: { "Set-Cookie": await commitSession(session) }, - }, - ); - } - - await requireLoggedOut(request); - - return null; -}; - -export default loader; diff --git a/app/features/auth/loaders/reset-password.ts b/app/features/auth/loaders/reset-password.ts deleted file mode 100644 index 81975cb..0000000 --- a/app/features/auth/loaders/reset-password.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type LoaderFunction, redirect } from "@remix-run/node"; - -import { requireLoggedOut } from "~/utils/auth.server"; -import { commitSession, getSession } from "~/utils/session.server"; - -const loader: LoaderFunction = async ({ request }) => { - const session = await getSession(request); - const searchParams = new URL(request.url).searchParams; - const token = searchParams.get("token"); - if (!token) { - return redirect("/forgot-password"); - } - - await requireLoggedOut(request); - - return new Response(null, { - headers: { - "Set-Cookie": await commitSession(session), - }, - }); -}; - -export default loader; diff --git a/app/features/auth/loaders/sign-in.ts b/app/features/auth/loaders/sign-in.ts deleted file mode 100644 index 4c04c91..0000000 --- a/app/features/auth/loaders/sign-in.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { type LoaderFunction, json } from "@remix-run/node"; - -import { getErrorMessage, requireLoggedOut } from "~/utils/auth.server"; -import { commitSession, getSession } from "~/utils/session.server"; - -export type SignInLoaderData = { errors: { general: string } } | null; - -const loader: LoaderFunction = async ({ request }) => { - const session = await getSession(request); - const errorMessage = getErrorMessage(session); - if (errorMessage) { - return json( - { errors: { general: errorMessage } }, - { - headers: { "Set-Cookie": await commitSession(session) }, - }, - ); - } - - await requireLoggedOut(request); - - return null; -}; - -export default loader; diff --git a/app/features/auth/pages/forgot-password.tsx b/app/features/auth/pages/forgot-password.tsx deleted file mode 100644 index a1107ad..0000000 --- a/app/features/auth/pages/forgot-password.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Form, useActionData, useTransition } from "@remix-run/react"; - -import type { ForgotPasswordActionData } from "../actions/forgot-password"; -import LabeledTextField from "~/features/core/components/labeled-text-field"; -import Button from "~/features/core/components/button"; - -export default function ForgotPasswordPage() { - const actionData = useActionData(); - const transition = useTransition(); - const isSubmitting = transition.state === "submitting"; - - return ( -
-
-

- Forgot your password? -

-
- -
- {actionData?.submitted ? ( -

- If your email is in our system, you will receive instructions to reset your password shortly. -

- ) : ( - <> - - - - - )} - -
- ); -} diff --git a/app/features/auth/pages/register.tsx b/app/features/auth/pages/register.tsx deleted file mode 100644 index 5ae4dcc..0000000 --- a/app/features/auth/pages/register.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { Form, Link, useActionData, useLoaderData, useTransition } from "@remix-run/react"; - -import type { RegisterActionData } from "../actions/register"; -import type { RegisterLoaderData } from "../loaders/register"; -import LabeledTextField from "~/features/core/components/labeled-text-field"; -import Alert from "~/features/core/components/alert"; -import Button from "~/features/core/components/button"; - -export default function RegisterPage() { - const loaderData = useLoaderData(); - const actionData = useActionData(); - const transition = useTransition(); - const isSubmitting = transition.state === "submitting"; - const topErrorMessage = loaderData?.errors?.general || actionData?.errors?.general; - - return ( -
-
-

- Create your account -

-

- - Already have an account? - -

-
- -
- {topErrorMessage ? ( -
- -
- ) : null} - - - - - - - -
- ); -} diff --git a/app/features/auth/pages/reset-password.tsx b/app/features/auth/pages/reset-password.tsx deleted file mode 100644 index 258245a..0000000 --- a/app/features/auth/pages/reset-password.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Form, useActionData, useSearchParams, useTransition } from "@remix-run/react"; -import clsx from "clsx"; - -import type { ResetPasswordActionData } from "../actions/reset-password"; -import LabeledTextField from "~/features/core/components/labeled-text-field"; - -export default function ForgotPasswordPage() { - const [searchParams] = useSearchParams(); - const actionData = useActionData(); - const transition = useTransition(); - const isSubmitting = transition.state === "submitting"; - - return ( -
-
-

Set a new password

-
- -
- - - - - - -
- ); -} diff --git a/app/features/auth/pages/sign-in.tsx b/app/features/auth/pages/sign-in.tsx deleted file mode 100644 index 0485f4d..0000000 --- a/app/features/auth/pages/sign-in.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { Form, Link, useActionData, useLoaderData, useSearchParams, useTransition } from "@remix-run/react"; - -import type { SignInActionData } from "../actions/sign-in"; -import type { SignInLoaderData } from "../loaders/sign-in"; -import LabeledTextField from "~/features/core/components/labeled-text-field"; -import Alert from "~/features/core/components/alert"; -import Button from "~/features/core/components/button"; - -export default function SignInPage() { - const [searchParams] = useSearchParams(); - const loaderData = useLoaderData(); - const actionData = useActionData(); - const transition = useTransition(); - const isSubmitting = transition.state === "submitting"; - return ( -
-
-

Welcome back!

- {/*

- Need an account?  - - Create yours for free - -

*/} -
- -
- {loaderData?.errors ? ( -
- -
- ) : null} - - - - - Forgot your password? - - } - /> - - - -
- ); -} diff --git a/app/features/auth/validations.ts b/app/features/auth/validations.ts deleted file mode 100644 index 9a469b5..0000000 --- a/app/features/auth/validations.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { z } from "zod"; - -export const password = z.string().min(10).max(100); - -export const Register = z.object({ - fullName: z.string().nonempty(), - email: z.string().email(), - password, -}); - -export const SignIn = z.object({ - email: z.string().email(), - password, -}); - -export const ForgotPassword = z.object({ - email: z.string().email(), -}); - -export const ResetPassword = z - .object({ - password: password, - passwordConfirmation: password, - token: z.string(), - }) - .refine((data) => data.password === data.passwordConfirmation, { - message: "Passwords don't match", - path: ["passwordConfirmation"], // set the path of the error - }); - -export const AcceptInvitation = z.object({ - fullName: z.string(), - email: z.string().email(), - password, - token: z.string(), -}); - -export const AcceptAuthedInvitation = z.object({ - token: z.string(), -}); diff --git a/app/features/core/actions/notifications-subscription.ts b/app/features/core/actions/notifications-subscription.ts index 4cd8431..2fa6c9e 100644 --- a/app/features/core/actions/notifications-subscription.ts +++ b/app/features/core/actions/notifications-subscription.ts @@ -5,7 +5,7 @@ import { z } from "zod"; import db from "~/utils/db.server"; import logger from "~/utils/logger.server"; import { validate } from "~/utils/validation.server"; -import { requireLoggedIn } from "~/utils/auth.server"; +import { getSession } from "~/utils/session.server"; const action: ActionFunction = async ({ request }) => { const formData = await request.clone().formData(); @@ -31,7 +31,6 @@ const action: ActionFunction = async ({ request }) => { export default action; async function subscribe(request: Request) { - const { organization } = await requireLoggedIn(request); const formData = await request.formData(); const body = { subscription: JSON.parse(formData.get("subscription")?.toString() ?? "{}"), @@ -42,17 +41,16 @@ async function subscribe(request: Request) { } const { subscription } = validation.data; - const membership = await db.membership.findFirst({ - where: { id: organization.membershipId }, - }); - if (!membership) { - return notFound("Phone number not found"); + const session = await getSession(request); + const twilio = session.get("twilio"); + if (!twilio) { + throw new Error("unreachable"); } try { await db.notificationSubscription.create({ data: { - membershipId: membership.id, + twilioAccountSid: twilio.accountSid, endpoint: subscription.endpoint, expirationTime: subscription.expirationTime, keys_p256dh: subscription.keys.p256dh, diff --git a/app/features/core/components/button.tsx b/app/features/core/components/button.tsx deleted file mode 100644 index ab33a1f..0000000 --- a/app/features/core/components/button.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import type { ButtonHTMLAttributes, FunctionComponent } from "react"; -import { useTransition } from "@remix-run/react"; -import clsx from "clsx"; - -type Props = ButtonHTMLAttributes; - -const Button: FunctionComponent = ({ children, ...props }) => { - const transition = useTransition(); - - return ( - - ); -} - -export default Button; diff --git a/app/features/core/components/inactive-subscription.tsx b/app/features/core/components/inactive-subscription.tsx deleted file mode 100644 index 800498a..0000000 --- a/app/features/core/components/inactive-subscription.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useNavigate } from "@remix-run/react"; -import { IoSettings, IoAlertCircleOutline } from "react-icons/io5"; - -export default function InactiveSubscription() { - const navigate = useNavigate(); - - return ( -
- -
-
-
-
-
- ); -} diff --git a/app/features/core/components/select.tsx b/app/features/core/components/select.tsx deleted file mode 100644 index b4de76c..0000000 --- a/app/features/core/components/select.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { Fragment } from "react"; -import { Listbox, Transition } from "@headlessui/react"; -import { HiCheck as CheckIcon, HiSelector as SelectorIcon } from "react-icons/hi"; -import clsx from "clsx"; - -type Option = { name: string; value: string }; - -type Props = { - options: Option[]; - onChange: (selectedValue: Option) => void; - value: Option; -}; - -export default function Select({ options, onChange, value }: Props) { - return ( - -
- - {value.name} - - - - - - {options.map((option, index) => ( - - clsx( - "cursor-default select-none relative py-2 pl-10 pr-4", - active ? "text-amber-900 bg-amber-100" : "text-gray-900", - ) - } - value={option} - > - {({ selected, active }) => ( - <> - - {option.name} - - {selected ? ( - - - ) : null} - - )} - - ))} - - -
-
- ); -} diff --git a/app/features/core/components/spinner.css b/app/features/core/components/spinner.css deleted file mode 100644 index 2bc3648..0000000 --- a/app/features/core/components/spinner.css +++ /dev/null @@ -1,15 +0,0 @@ -.ring { - display: inline-block; - width: 50px; - height: 50px; - border: 3px solid rgba(0, 0, 0, 0.15); - border-radius: 50%; - border-top-color: currentColor; - animation: spin 1s ease-in-out infinite; -} - -@keyframes spin { - to { - transform: rotate(360deg); - } -} diff --git a/app/features/core/components/spinner.tsx b/app/features/core/components/spinner.tsx deleted file mode 100644 index 509c93d..0000000 --- a/app/features/core/components/spinner.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import type { LinksFunction } from "@remix-run/node"; - -import styles from "./spinner.css"; - -export const links: LinksFunction = () => [ - { rel: "stylesheet", href: styles }, -]; - -export default function Spinner() { - return ( -
-
-
- ); -} diff --git a/app/features/keypad/loaders/keypad.ts b/app/features/keypad/loaders/keypad.ts index c0d2d98..4e460bb 100644 --- a/app/features/keypad/loaders/keypad.ts +++ b/app/features/keypad/loaders/keypad.ts @@ -2,21 +2,20 @@ import type { LoaderFunction } from "@remix-run/node"; import { json } from "superjson-remix"; import { Prisma } from "@prisma/client"; -import { requireLoggedIn } from "~/utils/auth.server"; import db from "~/utils/db.server"; +import { getSession } from "~/utils/session.server"; export type KeypadLoaderData = { - hasOngoingSubscription: boolean; hasPhoneNumber: boolean; lastRecipientCalled?: string; }; 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 hasOngoingSubscription = true; // TODO const hasPhoneNumber = Boolean(phoneNumber); const lastCall = phoneNumber && @@ -26,7 +25,6 @@ const loader: LoaderFunction = async ({ request }) => { })); return json( { - hasOngoingSubscription, hasPhoneNumber, lastRecipientCalled: lastCall?.recipient, }, diff --git a/app/features/messages/actions/messages.$recipient.tsx b/app/features/messages/actions/messages.$recipient.tsx index c2aa8ca..ba8f47c 100644 --- a/app/features/messages/actions/messages.$recipient.tsx +++ b/app/features/messages/actions/messages.$recipient.tsx @@ -2,19 +2,21 @@ import { type ActionFunction } from "@remix-run/node"; import { json } from "superjson-remix"; import db from "~/utils/db.server"; -import { requireLoggedIn } from "~/utils/auth.server"; import getTwilioClient, { translateMessageDirection, translateMessageStatus } from "~/utils/twilio.server"; +import { getSession } from "~/utils/session.server"; -export type NewMessageActionData = {}; +type NewMessageActionData = {}; const action: ActionFunction = async ({ params, request }) => { - const { twilio } = await requireLoggedIn(request); + const session = await getSession(request); + const twilio = session.get("twilio"); if (!twilio) { throw new Error("unreachable"); } + const [phoneNumber, twilioAccount] = await Promise.all([ db.phoneNumber.findUnique({ - where: { twilioAccountSid_isCurrent: { twilioAccountSid: twilio.accountSid ?? "", isCurrent: true } }, + where: { twilioAccountSid_isCurrent: { twilioAccountSid: twilio.accountSid, isCurrent: true } }, }), db.twilioAccount.findUnique({ where: { accountSid: twilio.accountSid } }), ]); diff --git a/app/features/messages/loaders/messages.$recipient.ts b/app/features/messages/loaders/messages.$recipient.ts index 05a5b26..23a0482 100644 --- a/app/features/messages/loaders/messages.$recipient.ts +++ b/app/features/messages/loaders/messages.$recipient.ts @@ -4,8 +4,8 @@ import { parsePhoneNumber } from "awesome-phonenumber"; import { type Message, type PhoneNumber, Prisma } from "@prisma/client"; import db from "~/utils/db.server"; -import { requireLoggedIn } from "~/utils/auth.server"; import { redirect } from "@remix-run/node"; +import { getSession } from "~/utils/session.server"; type ConversationType = { recipient: string; @@ -19,7 +19,8 @@ export type ConversationLoaderData = { }; const loader: LoaderFunction = async ({ request, params }) => { - const { twilio } = await requireLoggedIn(request); + const session = await getSession(request); + const twilio = session.get("twilio"); if (!twilio) { return redirect("/messages"); } diff --git a/app/features/messages/loaders/messages.ts b/app/features/messages/loaders/messages.ts index de56e29..f15239d 100644 --- a/app/features/messages/loaders/messages.ts +++ b/app/features/messages/loaders/messages.ts @@ -4,7 +4,7 @@ import { parsePhoneNumber } from "awesome-phonenumber"; import { type Message, type PhoneNumber, Prisma } from "@prisma/client"; import db from "~/utils/db.server"; -import { requireLoggedIn } from "~/utils/auth.server"; +import { getSession } from "~/utils/session.server"; export type MessagesLoaderData = { hasPhoneNumber: boolean; @@ -19,7 +19,8 @@ type Conversation = { }; 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 } }, }); diff --git a/app/features/phone-calls/components/phone-calls-list.tsx b/app/features/phone-calls/components/phone-calls-list.tsx index 4587ebb..1aad4e3 100644 --- a/app/features/phone-calls/components/phone-calls-list.tsx +++ b/app/features/phone-calls/components/phone-calls-list.tsx @@ -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(); + const { isFetchingCalls, phoneCalls } = useLoaderData(); - if (!hasOngoingSubscription) { - if (!phoneCalls || phoneCalls.length === 0) { - return null; - } - } else { - if (isFetchingCalls || !phoneCalls) { - return ; - } + if (isFetchingCalls || !phoneCalls) { + return ; + } - if (phoneCalls.length === 0) { - return hasOngoingSubscription ? : null; - } + if (phoneCalls.length === 0) { + return ; } return ( diff --git a/app/features/phone-calls/loaders/calls.ts b/app/features/phone-calls/loaders/calls.ts index 630451e..d218671 100644 --- a/app/features/phone-calls/loaders/calls.ts +++ b/app/features/phone-calls/loaders/calls.ts @@ -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({ - hasOngoingSubscription, hasPhoneNumber, isFetchingCalls: phoneNumber?.isFetchingCalls ?? false, }); @@ -46,7 +44,6 @@ const loader: LoaderFunction = async ({ request }) => { }); return json( { - hasOngoingSubscription, hasPhoneNumber, phoneCalls: phoneCalls.map((phoneCall) => ({ ...phoneCall, diff --git a/app/features/phone-calls/loaders/twilio-token.ts b/app/features/phone-calls/loaders/twilio-token.ts index 5b74c14..4748fa0 100644 --- a/app/features/phone-calls/loaders/twilio-token.ts +++ b/app/features/phone-calls/loaders/twilio-token.ts @@ -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 }); }; diff --git a/app/features/public-area/actions/index.ts b/app/features/public-area/actions/index.ts deleted file mode 100644 index e2fcf77..0000000 --- a/app/features/public-area/actions/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type ActionFunction, json } from "@remix-run/node"; - -import { addSubscriber } from "~/utils/mailchimp.server"; -import { executeWebhook } from "~/utils/discord.server"; - -export type JoinWaitlistActionData = { submitted: true }; - -const action: ActionFunction = async ({ request }) => { - const formData = await request.formData(); - const email = formData.get("email"); - if (!formData.get("email") || typeof email !== "string") { - throw new Error("Something wrong happened"); - } - - // await addSubscriber(email); - const res = await executeWebhook(email); - console.log(res.status); - console.log(await res.text()); - - return json({ submitted: true }); -}; - -export default action; diff --git a/app/features/public-area/components/button.tsx b/app/features/public-area/components/button.tsx deleted file mode 100644 index 3b86bc8..0000000 --- a/app/features/public-area/components/button.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import type { ButtonHTMLAttributes } from "react"; -import clsx from "clsx"; - -const baseStyles = { - solid: "group inline-flex items-center justify-center rounded-full py-2 px-4 text-sm font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2", - outline: "group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none", -}; - -const variantStyles = { - solid: { - slate: "bg-slate-900 text-white hover:bg-slate-700 hover:text-slate-100 active:bg-slate-800 active:text-slate-300 focus-visible:outline-slate-900", - primary: - "bg-primary-600 text-white hover:text-slate-100 hover:bg-primary-500 active:bg-primary-800 active:text-primary-100 focus-visible:outline-primary-600", - white: "bg-white text-slate-900 hover:bg-primary-50 active:bg-primary-200 active:text-slate-600 focus-visible:outline-white", - }, - outline: { - slate: "ring-slate-200 text-slate-700 hover:text-slate-900 hover:ring-slate-300 active:bg-slate-100 active:text-slate-600 focus-visible:outline-primary-600 focus-visible:ring-slate-300", - white: "ring-slate-700 text-white hover:ring-slate-500 active:ring-slate-700 active:text-slate-400 focus-visible:outline-white", - }, -}; - -type Props = ButtonHTMLAttributes & - ( - | { - variant: "solid"; - color: "slate" | "primary" | "white"; - } - | { - variant: "outline"; - color: "slate" | "white"; - } - ) & { - className?: string; - }; - -export default function Button({ variant, color, className, ...props }: Props) { - // @ts-ignore - const fullClassName = clsx(baseStyles[variant], variantStyles[variant][color], className); - - return - - )} - - - - ); -} diff --git a/app/features/public-area/components/container.tsx b/app/features/public-area/components/container.tsx deleted file mode 100644 index aa49c61..0000000 --- a/app/features/public-area/components/container.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { HTMLAttributes } from "react"; -import clsx from "clsx"; - -type Props = HTMLAttributes & { - className?: string; -}; - -export default function Container({ className, ...props }: Props) { - return
; -} diff --git a/app/features/public-area/components/faqs.tsx b/app/features/public-area/components/faqs.tsx deleted file mode 100644 index 771eeb5..0000000 --- a/app/features/public-area/components/faqs.tsx +++ /dev/null @@ -1,142 +0,0 @@ -import type { FunctionComponent, PropsWithChildren } from "react"; -import { Disclosure, Transition } from "@headlessui/react"; -import clsx from "clsx"; - -import Container from "./container"; - -import backgroundImage from "../images/background-faqs.webp"; - -export default function Faqs() { - return ( -
- - -
-

- Frequently asked questions -

-
-
    - - Shellphone is your go-to app to use your phone number over the internet. It integrates - seamlessly with Twilio to provide the best experience for your personal cloud phone. - - - Shellphone is still in its early stages and we're working hard to make it as easy-to-use as - possible. Currently, you must have a Twilio account to set up your personal cloud phone with - Shellphone. - - - Chances are you're currently using an eSIM-compatible device. eSIMs are a reasonable way of - using a phone number internationally but they are still subject to some irky limitations. For - example, you can only use an eSIM on one device at a time and you are still subject to - exorbitant rates from your carrier. - - - Some banks and online services refuse to send two-factor authentication messages to a virtual - phone number and we do not have a solution around this yet. Moreover, Twilio does not support - receiving incoming SMS from external Alphanumeric Sender IDs is to protect accounts getting - bombarded from spam messages from these IDs which are used to send one-way SMS. -
    - With that said, we have successfully received 2FA messages from many services including WhatsApp - and Uber. We recognize this is a common problem for people who want to switch to a virtual phone - number and we are doing our best to find a long-term solution to receive 2FA messages. -
    -
-
-
- ); -} - -function FAQs() { - return ( -
-
-
-

Questions & Answers

-
- -
    - - Shellphone is your go-to app to use your phone number over the internet. It integrates - seamlessly with Twilio to provide the best experience for your personal cloud phone. - - - Shellphone is still in its early stages and we're working hard to make it as easy-to-use as - possible. Currently, you must have a Twilio account to set up your personal cloud phone with - Shellphone. - - - Chances are you're currently using an eSIM-compatible device. eSIMs are a reasonable way of - using a phone number internationally but they are still subject to some irky limitations. For - example, you can only use an eSIM on one device at a time and you are still subject to - exorbitant rates from your carrier. - -
-
-
- ); -} - -const Accordion: FunctionComponent> = ({ title, children }) => { - return ( - - {({ open }) => ( - <> - - - - - - {title} - - - - -

{children}

-
-
- - )} -
- ); -}; diff --git a/app/features/public-area/components/fields.tsx b/app/features/public-area/components/fields.tsx deleted file mode 100644 index b8f6661..0000000 --- a/app/features/public-area/components/fields.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import type { InputHTMLAttributes, HTMLAttributes, PropsWithChildren } from "react"; - -const formClasses = - "block w-full appearance-none rounded-md border border-gray-200 bg-gray-50 px-3 py-2 text-gray-900 placeholder-gray-400 focus:border-blue-500 focus:bg-white focus:outline-none focus:ring-blue-500 sm:text-sm"; - -function Label({ id, children }: PropsWithChildren>) { - return ( - - ); -} - -export function TextField({ - id, - label, - type = "text", - className = "", - ...props -}: InputHTMLAttributes & { label?: string }) { - return ( -
- {label && } - -
- ); -} diff --git a/app/features/public-area/components/header.tsx b/app/features/public-area/components/header.tsx deleted file mode 100644 index fa71974..0000000 --- a/app/features/public-area/components/header.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Link } from "@remix-run/react"; - -import Button from "./button"; -import Container from "./container"; -import Logo from "./logo"; -import NavLink from "./nav-link"; - -export default function Header() { - return ( -
- - - -
- ); -} diff --git a/app/features/public-area/components/hero.tsx b/app/features/public-area/components/hero.tsx deleted file mode 100644 index 6f8173f..0000000 --- a/app/features/public-area/components/hero.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import Button from "./button"; -import Container from "./container"; - -/* -height: calc(100vh - 120px); -display: flex; -flex-direction: column; -justify-content: center; -margin-top: -120px; - */ - -export default function Hero() { - return ( - -

- - Calling your bank from abroad - {" "} - just got{" "} - - - easier - {" "} - ! -

-

- Coming soon, the personal cloud phone for digital nomads! Take your phone number anywhere you go 🌏 -

-
- ); -} diff --git a/app/features/public-area/components/logo.tsx b/app/features/public-area/components/logo.tsx deleted file mode 100644 index 1e860a6..0000000 --- a/app/features/public-area/components/logo.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Logo() { - return Shellphone logo; -} diff --git a/app/features/public-area/components/nav-link.tsx b/app/features/public-area/components/nav-link.tsx deleted file mode 100644 index cf90fa7..0000000 --- a/app/features/public-area/components/nav-link.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import type { PropsWithChildren } from "react"; -import { Link } from "@remix-run/react"; - -export default function NavLink({ href, children }: PropsWithChildren<{ href: string }>) { - return ( - - {children} - - ); -} diff --git a/app/features/public-area/images/background-call-to-action.jpg b/app/features/public-area/images/background-call-to-action.jpg deleted file mode 100644 index 13d8ee5938ae0e366c813b44b5c64a16c176a627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166094 zcmeFa|8pDHl_z@ps+-ejP;VPZ11d5;QK5wTN{`&rn|KI#?@bBw^uYE1>^?%#l z)%|aehQmj{5&Oo!|Mw>Ghc@twTgXRy{@y=yi0~ooBM$k9U;F_5@6b&k^d%zjp}#oz z@Yg1Bh-0_K$tzm!VUlYA2?EeiHrl0XWvL zpZ{5${SRaOvl!FogW%xZax4e`IStAk3j_aT9R_!Bgn0L}KOcgDA;ps6)g9-b+2~xE z#GEUUeVu#o`fH{T&cE6uK=(s&#vN35hf2Dq$Ti)6CPc`v?tVEI_w3JzeH09g{N>;f zwiJv0)#+FJ2wTwqFZ1f)gD(&FD?C0z{+w+Byc072cqp*;SN7$=4+B|*Wygc&bjQIX*Y_mdL+7jRm{AA(aU7Nd zEmNMLqQE!hHbLtQLBtQn2+L4*hx*ke*Q6r~Y#@ZOEMhp2)E?vxn20lqJ1kv3FpFQ^ z5gs@!MBH6$Afa=Q^~#)UI9#(Ye{~1;dCy(L030NNlbpK}A5)b_vq^!cT+`2er57R< z0T%`a0f8+jPmcP0FxbkYc&vp&GRY%U4}FzkCL%7lh8>s)EQEL9B5evFqlksE!E(gF z;;%MgOLlpP(MsLGTdc$I1)6dHAiM=5W9i2lm4U0iy5yQZ(4`g?5iQUyXea_z0{bkGgf9iOVve*pe>N4y;I7 zM0f|JluM8tcJ&hf#4Y}>c%cBED2FycSc9Y7onBk zuOD?-iVU_S76Bhoy|;!-4%kg@mPV@u+2LV?1mX`|p5N~Qe}ubS+XhD5b-Py3igR%0 zE~Y0Zf$soz;e5lYvY>%(39iqo!~JteAx5h#r4sJ?6)Vt^ zKspVx|K!A3hh#)Ecn|qOpH|OvL=qG$>V|=`x2YCmF({OV=3t~X|ChADlRx2)bEN>9 zKW}|$`A`VS@>8|#0yn5;`4G`yr^?7Y%Pm@%(9w$_jG* z6l8%)gnj@Y9eBk!ufzmk033tKhu0?{ibr*X1~D>aMlDcsLmxObLcgQ2|7l;l5I4uM7{kK)6(wSDOw&3rn6-ZO z@xOY6EkaHwB$|^QU01wb-WfzP%%*DH%+rz>RV1kg%qzo!LVn^&{8yj&^j|)9#zA)? z#$9}_NV{m1CuqSj%gymcnU+Ds^Kkk*2?nebdJq$yh1F4}t7wq25b9i`>T@NlhIolr zu^xVi5flymNeEOiiI4%E!ZdgRKo+EbKiA7}*3}0x4Mqf}<988}1o5b^ykDo9=s1dl0QEu!h0Z) z0ts{Sy9gQ)K=!k!MsW_p@5z&CIpf|Wql}CJ8oGx?8^Rozx<7>|6LEkZ(P6NYZl8c3 zG(=zYVjKyPGUu*n2N4J@P67L!1GVK|_OH-^dgqWBu7I@QEyP(Fcy%ch#11u^JUQ=E z>Qz4LO3?q50fQ96!+?9RLIHUD@)<}h@16tHA&?aR7&E8S#0)HA8ZA3A#@u|YVtWq) z0i6C^zC-T2d~oA$eQ`agfNTZhY2gL-w>I

NY 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�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 yx6;{3%joNoH@ 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

orfpA(s7dXGhcTYKX=UpWVjo7_C)?CW?a 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 z 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 -

-
- - - -
- - ); -} diff --git a/app/features/settings/actions/account.ts b/app/features/settings/actions/account.ts deleted file mode 100644 index 0ea46fe..0000000 --- a/app/features/settings/actions/account.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { type ActionFunction, json, redirect } from "@remix-run/node"; -import { badRequest } from "remix-utils"; -import { z } from "zod"; -import SecurePassword from "secure-password"; - -import db from "~/utils/db.server"; -import logger from "~/utils/logger.server"; -import { hashPassword, requireLoggedIn, verifyPassword } from "~/utils/auth.server"; -import { type FormError, validate } from "~/utils/validation.server"; -import { destroySession, getSession } from "~/utils/session.server"; -import deleteUserQueue from "~/queues/delete-user-data.server"; - -const action: ActionFunction = async ({ request }) => { - const formData = Object.fromEntries(await request.formData()); - if (!formData._action) { - const errorMessage = "POST /settings/phone without any _action"; - logger.error(errorMessage); - return badRequest({ errorMessage }); - } - - switch (formData._action as Action) { - case "deleteUser": - return deleteUser(request); - case "changePassword": - return changePassword(request, formData); - case "updateUser": - return updateUser(request, formData); - default: - const errorMessage = `POST /settings/phone with an invalid _action=${formData._action}`; - logger.error(errorMessage); - return badRequest({ errorMessage }); - } -}; - -export default action; - -async function deleteUser(request: Request) { - const { - user: { id }, - } = await requireLoggedIn(request); - - await db.user.update({ - where: { id }, - data: { hashedPassword: "pending deletion" }, - }); - await deleteUserQueue.add(`delete user ${id}`, { userId: id }); - - return redirect("/", { - headers: { - "Set-Cookie": await destroySession(await getSession(request)), - }, - }); -} - -type ChangePasswordFailureActionData = { errors: FormError; submitted?: never }; -type ChangePasswordSuccessfulActionData = { errors?: never; submitted: true }; -export type ChangePasswordActionData = { - changePassword: ChangePasswordFailureActionData | ChangePasswordSuccessfulActionData; -}; - -async function changePassword(request: Request, formData: unknown) { - const validation = validate(validations.changePassword, formData); - if (validation.errors) { - return json({ - changePassword: { errors: validation.errors }, - }); - } - - const { - user: { id }, - } = await requireLoggedIn(request); - const user = await db.user.findUnique({ where: { id } }); - const { currentPassword, newPassword } = validation.data; - const verificationResult = await verifyPassword(user!.hashedPassword!, currentPassword); - if ([SecurePassword.INVALID, SecurePassword.INVALID_UNRECOGNIZED_HASH, false].includes(verificationResult)) { - return json({ - changePassword: { errors: { currentPassword: "Current password is incorrect" } }, - }); - } - - const hashedPassword = await hashPassword(newPassword.trim()); - await db.user.update({ - where: { id: user!.id }, - data: { hashedPassword }, - }); - - return json({ - changePassword: { submitted: true }, - }); -} - -type UpdateUserFailureActionData = { errors: FormError; submitted?: never }; -type UpdateUserSuccessfulActionData = { errors?: never; submitted: true }; -export type UpdateUserActionData = { - updateUser: UpdateUserFailureActionData | UpdateUserSuccessfulActionData; -}; - -async function updateUser(request: Request, formData: unknown) { - const validation = validate(validations.updateUser, formData); - if (validation.errors) { - return json({ - updateUser: { errors: validation.errors }, - }); - } - - const { user } = await requireLoggedIn(request); - const { email, fullName } = validation.data; - await db.user.update({ - where: { id: user.id }, - data: { email, fullName }, - }); - - return json({ - updateUser: { submitted: true }, - }); -} - -type Action = "deleteUser" | "updateUser" | "changePassword"; - -const validations = { - deleteUser: null, - changePassword: z.object({ - currentPassword: z.string(), - newPassword: z.string().min(10).max(100), - }), - updateUser: z.object({ - fullName: z.string(), - email: z.string(), - }), -} as const; diff --git a/app/features/settings/actions/phone.ts b/app/features/settings/actions/phone.ts index 87e06d4..87d290b 100644 --- a/app/features/settings/actions/phone.ts +++ b/app/features/settings/actions/phone.ts @@ -5,8 +5,7 @@ import type { Prisma } from "@prisma/client"; import db from "~/utils/db.server"; import { type FormActionData, validate } from "~/utils/validation.server"; -import { refreshSessionData, requireLoggedIn } from "~/utils/auth.server"; -import { commitSession } from "~/utils/session.server"; +import { commitSession, getSession } from "~/utils/session.server"; import setTwilioWebhooksQueue from "~/queues/set-twilio-webhooks.server"; import logger from "~/utils/logger.server"; import { encrypt } from "~/utils/encryption"; @@ -40,7 +39,8 @@ const action: ActionFunction = async ({ request }) => { export type SetPhoneNumberActionData = FormActionData; async function setPhoneNumber(request: Request, formData: unknown) { - const { organization, twilio } = await requireLoggedIn(request); + const session = await getSession(request); + const twilio = session.get("twilio"); if (!twilio) { return badRequest({ setPhoneNumber: { @@ -72,7 +72,6 @@ async function setPhoneNumber(request: Request, formData: unknown) { }); await setTwilioWebhooksQueue.add(`set twilio webhooks for phoneNumberId=${validation.data.phoneNumberSid}`, { phoneNumberId: validation.data.phoneNumberSid, - organizationId: organization.id, }); return json({ setPhoneNumber: { submitted: true } }); @@ -81,7 +80,8 @@ async function setPhoneNumber(request: Request, formData: unknown) { export type SetTwilioCredentialsActionData = FormActionData; async function setTwilioCredentials(request: Request, formData: unknown) { - const { organization, twilio } = await requireLoggedIn(request); + const session = await getSession(request); + const twilio = session.get("twilio"); const validation = validate(validations.setTwilioCredentials, formData); if (validation.errors) { return badRequest({ setTwilioCredentials: { errors: validation.errors } }); @@ -99,10 +99,10 @@ async function setTwilioCredentials(request: Request, formData: unknown) { throw error; } - let session: Session | undefined; if (twilio) { + console.log("fail"); await db.twilioAccount.delete({ where: { accountSid: twilio?.accountSid } }); - session = (await refreshSessionData(request)).session; + session.unset("twilio"); } return json( @@ -112,11 +112,9 @@ async function setTwilioCredentials(request: Request, formData: unknown) { }, }, { - headers: session - ? { - "Set-Cookie": await commitSession(session), - } - : {}, + headers: { + "Set-Cookie": await commitSession(session), + }, }, ); } @@ -128,13 +126,8 @@ async function setTwilioCredentials(request: Request, formData: unknown) { const [phoneNumbers] = await Promise.all([ twilioClient.incomingPhoneNumbers.list(), db.twilioAccount.upsert({ - where: { organizationId: organization.id }, - create: { - organization: { - connect: { id: organization.id }, - }, - ...data, - }, + where: { accountSid: twilioAccountSid }, + create: data, update: data, }), ]); @@ -143,11 +136,11 @@ async function setTwilioCredentials(request: Request, formData: unknown) { accountSid: twilioAccountSid, }); await Promise.all( - phoneNumbers.map(async (phoneNumber) => { + phoneNumbers.map(async (phoneNumber, index) => { const phoneNumberId = phoneNumber.sid; logger.info(`Importing phone number with id=${phoneNumberId}`); try { - await db.phoneNumber.create({ + await db.phoneNumber.createMany({ data: { id: phoneNumberId, twilioAccountSid, @@ -156,6 +149,7 @@ async function setTwilioCredentials(request: Request, formData: unknown) { isFetchingCalls: true, isFetchingMessages: true, }, + skipDuplicates: true, }); await Promise.all([ @@ -177,19 +171,25 @@ async function setTwilioCredentials(request: Request, formData: unknown) { }), ); - const { session } = await refreshSessionData(request); + session.set("twilio", { accountSid: twilioAccountSid, authToken }); + console.log("{ accountSid: twilioAccountSid, authToken }", { accountSid: twilioAccountSid, authToken }); + console.log("session", session.get("twilio"), session.data); + const setCookie = await commitSession(session); + console.log("set twilio in session", setCookie); + return json( { setTwilioCredentials: { submitted: true } }, { headers: { - "Set-Cookie": await commitSession(session), + "Set-Cookie": setCookie, }, }, ); } async function refreshPhoneNumbers(request: Request) { - const { twilio } = await requireLoggedIn(request); + const session = await getSession(request); + const twilio = session.get("twilio"); if (!twilio) { throw new Error("unreachable"); } diff --git a/app/features/settings/components/account/danger-zone.tsx b/app/features/settings/components/account/danger-zone.tsx deleted file mode 100644 index c8fc24e..0000000 --- a/app/features/settings/components/account/danger-zone.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { useRef, useState } from "react"; -import { Form, useTransition } from "@remix-run/react"; -import clsx from "clsx"; - -import Button from "../button"; -import SettingsSection from "../settings-section"; -import Modal, { ModalTitle } from "~/features/core/components/modal"; - -export default function DangerZone() { - const transition = useTransition(); - const isCurrentFormTransition = transition.submission?.formData.get("_action") === "deleteUser"; - const isDeletingUser = isCurrentFormTransition && transition.state === "submitting"; - const [isConfirmationModalOpen, setIsConfirmationModalOpen] = useState(false); - const modalCancelButtonRef = useRef(null); - - const closeModal = () => { - if (isDeletingUser) { - return; - } - - setIsConfirmationModalOpen(false); - }; - - return ( - -
-

- Once you delete your account, all of its data will be permanently deleted and any ongoing - subscription will be cancelled. -

- - - - -
- - -
-
- Delete my account -
-

- Are you sure you want to delete your account? Your subscription will be cancelled and - your data permanently deleted. -

-

- You are free to create a new account with the same email address if you ever wish to - come back. -

-
-
-
-
-
- - -
- -
-
-
- ); -} diff --git a/app/features/settings/components/account/profile-informations.tsx b/app/features/settings/components/account/profile-informations.tsx deleted file mode 100644 index 6dca7a2..0000000 --- a/app/features/settings/components/account/profile-informations.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import type { FunctionComponent } from "react"; -import { Form, useActionData, useTransition } from "@remix-run/react"; - -import type { UpdateUserActionData } from "~/features/settings/actions/account"; -import useSession from "~/features/core/hooks/use-session"; -import Alert from "~/features/core/components/alert"; -import Button from "../button"; -import SettingsSection from "../settings-section"; - -const ProfileInformations: FunctionComponent = () => { - const { user } = useSession(); - const transition = useTransition(); - const actionData = useActionData()?.updateUser; - - const errors = actionData?.errors; - const topErrorMessage = errors?.general; - const isError = typeof topErrorMessage !== "undefined"; - const isSuccess = actionData?.submitted; - const isCurrentFormTransition = transition.submission?.formData.get("_action") === "updateUser"; - const isSubmitting = isCurrentFormTransition && transition.state === "submitting"; - - return ( -
- - -
- } - > - {isError ? ( -
- -
- ) : null} - - {isSuccess && ( -
- -
- )} - -
- -
- -
-
- -
- -
- -
-
- - - - - ); -}; - -export default ProfileInformations; diff --git a/app/features/settings/components/account/update-password.tsx b/app/features/settings/components/account/update-password.tsx deleted file mode 100644 index 4762774..0000000 --- a/app/features/settings/components/account/update-password.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import type { FunctionComponent } from "react"; -import { Form, useActionData, useTransition } from "@remix-run/react"; - -import type { ChangePasswordActionData } from "~/features/settings/actions/account"; -import Alert from "~/features/core/components/alert"; -import LabeledTextField from "~/features/core/components/labeled-text-field"; -import Button from "../button"; -import SettingsSection from "../settings-section"; - -const UpdatePassword: FunctionComponent = () => { - const transition = useTransition(); - const actionData = useActionData()?.changePassword; - - const topErrorMessage = actionData?.errors?.general; - const isError = typeof topErrorMessage !== "undefined"; - const isSuccess = actionData?.submitted; - const isCurrentFormTransition = transition.submission?.formData.get("_action") === "changePassword"; - const isSubmitting = isCurrentFormTransition && transition.state === "submitting"; - - return ( -
- - -
- } - > - {isError ? ( -
- -
- ) : null} - - {isSuccess ? ( -
- -
- ) : null} - - - - - - - - - ); -}; - -export default UpdatePassword; diff --git a/app/features/settings/components/billing/billing-history.tsx b/app/features/settings/components/billing/billing-history.tsx deleted file mode 100644 index 82f9f59..0000000 --- a/app/features/settings/components/billing/billing-history.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import { IoChevronBack, IoChevronForward } from "react-icons/io5"; -import clsx from "clsx"; - -import usePaymentsHistory from "../../hooks/use-payments-history"; - -export default function BillingHistory() { - const { - payments, - count, - skip, - pagesNumber, - currentPage, - lastPage, - hasPreviousPage, - hasNextPage, - goToPreviousPage, - goToNextPage, - setPage, - } = usePaymentsHistory(); - - if (payments.length === 0) { - return null; - } - - return ( -
-
-

Billing history

-
-
-
-
-
- - - - - - - - - - - {payments.map((payment) => ( - - - - - - - ))} - -
- Date - - Amount - - Status - - View receipt -
- - - {Intl.NumberFormat(undefined, { - style: "currency", - currency: payment.currency, - currencyDisplay: "narrowSymbol", - }).format(payment.amount)} - - {payment.is_paid === 1 ? "Paid" : "Upcoming"} - - {typeof payment.receipt_url !== "undefined" ? ( - - View receipt - - ) : null} -
- -
-
- -

- Page {currentPage} of{" "} - {lastPage} -

- -
-
-
-

- Showing {skip + 1} to{" "} - {skip + payments.length} of{" "} - {count} results -

-
-
- -
-
-
-
-
-
-
-
- ); -} diff --git a/app/features/settings/components/billing/paddle-link.tsx b/app/features/settings/components/billing/paddle-link.tsx deleted file mode 100644 index 567df50..0000000 --- a/app/features/settings/components/billing/paddle-link.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { FunctionComponent, MouseEventHandler } from "react"; -import { HiExternalLink } from "react-icons/hi"; - -type Props = { - onClick: MouseEventHandler; - text: string; -}; - -const PaddleLink: FunctionComponent = ({ onClick, text }) => ( - -); - -export default PaddleLink; diff --git a/app/features/settings/components/billing/plans.tsx b/app/features/settings/components/billing/plans.tsx deleted file mode 100644 index 4b2ea4a..0000000 --- a/app/features/settings/components/billing/plans.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { useState } from "react"; -import clsx from "clsx"; -import { type Subscription, SubscriptionStatus } from "@prisma/client"; - -import SwitchPlanModal from "./switch-plan-modal"; - -export type Plan = typeof pricing["tiers"][number]; - -function useSubscription() { - return { - hasActiveSubscription: false, - subscription: null as any, - subscribe: () => void 0, - changePlan: () => void 0, - }; -} - -export default function Plans() { - const { hasActiveSubscription, subscription, subscribe, changePlan } = useSubscription(); - const [nextPlan, setNextPlan] = useState(null); - const [isSwitchPlanModalOpen, setIsSwitchPlanModalOpen] = useState(false); - - return ( - <> -
- {pricing.tiers.map((tier) => { - const isCurrentTier = subscription?.paddlePlanId === tier.planId; - const isActiveTier = hasActiveSubscription && isCurrentTier; - const cta = getCTA({ subscription, tier }); - - return ( -
-
-

{tier.title}

- {tier.yearly ? ( -

- Get 2 months free! -

- ) : null} -

- {tier.price}€ - {tier.frequency} -

- {tier.yearly ? ( -

Billed yearly ({tier.price * 12}€)

- ) : null} -

{tier.description}

-
- - -
- ); - })} -
- - { - // changePlan({ planId: nextPlan.planId }); - // Panelbear.track(`Subscribe to ${nextPlan.title}`); - setIsSwitchPlanModalOpen(false); - }} - closeModal={() => setIsSwitchPlanModalOpen(false)} - /> - - ); -} - -function getCTA({ - subscription, - tier, -}: { - subscription?: Subscription; - tier: typeof pricing["tiers"][number]; -}): string { - if (!subscription) { - return "Subscribe"; - } - - const isCancelling = subscription.status === SubscriptionStatus.deleted; - if (isCancelling) { - return "Resubscribe"; - } - - const isCurrentTier = subscription.paddlePlanId === tier.planId; - const hasActiveSubscription = subscription.status !== SubscriptionStatus.deleted; - const isActiveTier = hasActiveSubscription && isCurrentTier; - if (isActiveTier) { - return "Current plan"; - } - - return `Switch to ${tier.title}`; -} - -const pricing = { - tiers: [ - { - title: "Yearly", - planId: 727544, - price: 12.5, - frequency: "/month", - description: "Text and call anyone, anywhere in the world, all year long.", - yearly: true, - }, - { - title: "Monthly", - planId: 727540, - price: 15, - frequency: "/month", - description: "Text and call anyone, anywhere in the world.", - yearly: false, - }, - ], -}; diff --git a/app/features/settings/components/billing/switch-plan-modal.tsx b/app/features/settings/components/billing/switch-plan-modal.tsx deleted file mode 100644 index ad758eb..0000000 --- a/app/features/settings/components/billing/switch-plan-modal.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import type { FunctionComponent } from "react"; -import { useRef } from "react"; - -import Modal, { ModalTitle } from "~/features/core/components/modal"; -import type { Plan } from "./plans"; - -type Props = { - isOpen: boolean; - nextPlan: Plan | null; - confirm: (nextPlan: Plan) => void; - closeModal: () => void; -}; - -const SwitchPlanModal: FunctionComponent = ({ isOpen, nextPlan, confirm, closeModal }) => { - const confirmButtonRef = useRef(null); - - return ( - -
-
- Are you sure you want to switch to {nextPlan?.title}? -
-

- You're about to switch to the {nextPlan?.title} plan. You will be - billed immediately a prorated amount and the next billing date will be recalculated from - today. -

-
-
-
-
- - -
-
- ); -}; - -export default SwitchPlanModal; diff --git a/app/features/settings/components/phone/help-modal.tsx b/app/features/settings/components/phone/help-modal.tsx index f037ce7..3ac8536 100644 --- a/app/features/settings/components/phone/help-modal.tsx +++ b/app/features/settings/components/phone/help-modal.tsx @@ -16,19 +16,6 @@ const HelpModal: FunctionComponent = ({ isHelpModalOpen, closeModal }) =>
Need some help?
-

- Try{" "} - - reconnecting your Twilio account - to refresh the phone numbers. -

-

- If you are stuck, pick a date & time on{" "} - - our calendly - {" "} - and we will help you get started! -

Don't miss out on free $10 Twilio credit by using{" "} diff --git a/app/features/settings/components/phone/phone-number-form.tsx b/app/features/settings/components/phone/phone-number-form.tsx index b9eb080..40559a1 100644 --- a/app/features/settings/components/phone/phone-number-form.tsx +++ b/app/features/settings/components/phone/phone-number-form.tsx @@ -25,7 +25,7 @@ export default function PhoneNumberForm() { const topErrorMessage = errors?.general ?? errors?.phoneNumberSid; const isError = typeof topErrorMessage !== "undefined"; const currentPhoneNumber = availablePhoneNumbers.find((phoneNumber) => phoneNumber.isCurrent === true); - const hasFilledTwilioCredentials = twilio !== null; + const hasFilledTwilioCredentials = twilio != null; if (!hasFilledTwilioCredentials) { return null; diff --git a/app/features/settings/components/phone/twilio-connect.tsx b/app/features/settings/components/phone/twilio-connect.tsx index 2ee76e1..8f0b5b5 100644 --- a/app/features/settings/components/phone/twilio-connect.tsx +++ b/app/features/settings/components/phone/twilio-connect.tsx @@ -13,9 +13,11 @@ import Button from "~/features/settings/components/button"; export default function TwilioConnect() { const { twilio } = useSession(); + console.log("twilio", twilio); const [isHelpModalOpen, setIsHelpModalOpen] = useState(false); const transition = useTransition(); - const actionData = useActionData()?.setTwilioCredentials; + const actionData = useActionData() + ?.setTwilioCredentials as SetTwilioCredentialsActionData["setTwilioCredentials"]; const { accountSid, authToken } = useLoaderData(); const topErrorMessage = actionData?.errors?.general; @@ -50,7 +52,7 @@ export default function TwilioConnect() {

- {twilio !== null ? ( + {twilio != null ? (

✓ Your Twilio account is connected to Shellphone.

) : null} diff --git a/app/features/settings/loaders/phone.ts b/app/features/settings/loaders/phone.ts index a724016..c871853 100644 --- a/app/features/settings/loaders/phone.ts +++ b/app/features/settings/loaders/phone.ts @@ -2,9 +2,9 @@ import { type LoaderArgs, json } from "@remix-run/node"; import { type PhoneNumber, Prisma } from "@prisma/client"; import db from "~/utils/db.server"; -import { requireLoggedIn } from "~/utils/auth.server"; import logger from "~/utils/logger.server"; import { decrypt } from "~/utils/encryption"; +import { getSession } from "~/utils/session.server"; export type PhoneSettingsLoaderData = { accountSid?: string; @@ -13,14 +13,15 @@ export type PhoneSettingsLoaderData = { }; const loader = async ({ request }: LoaderArgs) => { - const { organization, twilio } = await requireLoggedIn(request); + const session = await getSession(request); + const twilio = session.get("twilio"); if (!twilio) { logger.warn("Twilio account is not connected"); return json({ phoneNumbers: [] }); } const phoneNumbers = await db.phoneNumber.findMany({ - where: { twilioAccount: { organizationId: organization.id } }, + where: { twilioAccount: { accountSid: twilio.accountSid } }, select: { id: true, number: true, isCurrent: true }, orderBy: { id: Prisma.SortOrder.desc }, }); diff --git a/app/mailers/forgot-password-mailer.server.ts b/app/mailers/forgot-password-mailer.server.ts deleted file mode 100644 index 6dfbab9..0000000 --- a/app/mailers/forgot-password-mailer.server.ts +++ /dev/null @@ -1,21 +0,0 @@ -import sendEmail from "~/utils/mailer.server"; -import serverConfig from "~/config/config.server"; -import { render } from "./renderer/renderer.server"; - -type Params = { - to: string; - token: string; - userName: string; -}; - -export async function sendForgotPasswordEmail({ to, token, userName }: Params) { - const origin = serverConfig.app.baseUrl; - const resetUrl = `${origin}/reset-password?token=${token}`; - const html = await render("forgot-password", { action_url: resetUrl, name: userName }); - - return sendEmail({ - recipients: to, - subject: "Reset your password", - html, - }); -} diff --git a/app/mailers/renderer/html/components/footer.html b/app/mailers/renderer/html/components/footer.html deleted file mode 100644 index be2e686..0000000 --- a/app/mailers/renderer/html/components/footer.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/app/mailers/renderer/html/components/header.html b/app/mailers/renderer/html/components/header.html deleted file mode 100644 index 665367f..0000000 --- a/app/mailers/renderer/html/components/header.html +++ /dev/null @@ -1,15 +0,0 @@ - - -
- - diff --git a/app/mailers/renderer/html/custom/postmark/buttons.css b/app/mailers/renderer/html/custom/postmark/buttons.css deleted file mode 100644 index 053f490..0000000 --- a/app/mailers/renderer/html/custom/postmark/buttons.css +++ /dev/null @@ -1,32 +0,0 @@ -.button { - @apply inline-block text-white no-underline; - background-color: #3869d4; - border-top: 10px solid #3869d4; - border-right: 18px solid #3869d4; - border-bottom: 10px solid #3869d4; - border-left: 18px solid #3869d4; - border-radius: 3px; - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16); -} - -.button--green { - background-color: #22bc66; - border-top: 10px solid #22bc66; - border-right: 18px solid #22bc66; - border-bottom: 10px solid #22bc66; - border-left: 18px solid #22bc66; -} - -.button--red { - background-color: #ff6136; - border-top: 10px solid #ff6136; - border-right: 18px solid #ff6136; - border-bottom: 10px solid #ff6136; - border-left: 18px solid #ff6136; -} - -@screen sm { - .button { - @apply w-full text-center !important; - } -} diff --git a/app/mailers/renderer/html/custom/postmark/index.css b/app/mailers/renderer/html/custom/postmark/index.css deleted file mode 100644 index 31770c3..0000000 --- a/app/mailers/renderer/html/custom/postmark/index.css +++ /dev/null @@ -1,65 +0,0 @@ -@import "buttons"; - -.purchase_heading { - border-bottom-width: 1px; - border-bottom-color: #eaeaec; - border-bottom-style: solid; -} - -.purchase_heading p { - @apply text-xxs leading-24 m-0; - color: #85878e; -} - -.purchase_footer { - @apply pt-16 text-base align-middle; - border-top-width: 1px; - border-top-color: #eaeaec; - border-top-style: solid; -} - -.body-sub { - @apply mt-25 pt-25 border-t; - border-top-color: #eaeaec; - border-top-style: solid; -} - -.discount { - @apply w-full p-24 bg-gray-postmark-lightest; - border: 2px dashed #cbcccf; -} - -.email-masthead { - @apply py-24 text-base text-center; -} - -@screen dark { - body, - .email-body, - .email-body_inner, - .email-content, - .email-wrapper, - .email-masthead, - .email-footer { - @apply bg-gray-postmark-darker text-white !important; - } - - p, - ul, - ol, - blockquote, - h1, - h2, - h3 { - @apply text-white !important; - } - - .attributes_content, - .discount { - @apply bg-gray-postmark-darkest !important; - } - - .email-masthead_name { - text-shadow: none !important; - } -} diff --git a/app/mailers/renderer/html/custom/reset.css b/app/mailers/renderer/html/custom/reset.css deleted file mode 100644 index 84bd249..0000000 --- a/app/mailers/renderer/html/custom/reset.css +++ /dev/null @@ -1,10 +0,0 @@ -body { - @apply m-0 p-0 w-full; - word-break: break-word; - -webkit-font-smoothing: antialiased; -} - -img { - border: 0; - @apply max-w-full leading-full align-middle; -} diff --git a/app/mailers/renderer/html/custom/utilities.css b/app/mailers/renderer/html/custom/utilities.css deleted file mode 100644 index 94a73b0..0000000 --- a/app/mailers/renderer/html/custom/utilities.css +++ /dev/null @@ -1,3 +0,0 @@ -.mso-leading-exactly { - mso-line-height-rule: exactly; -} diff --git a/app/mailers/renderer/html/layouts/main.html b/app/mailers/renderer/html/layouts/main.html deleted file mode 100644 index ffc1980..0000000 --- a/app/mailers/renderer/html/layouts/main.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - {{{ page.title }}} - - - - - - - - - - - - - - -
- -
- - diff --git a/app/mailers/renderer/html/templates/forgot-password.html b/app/mailers/renderer/html/templates/forgot-password.html deleted file mode 100644 index 7295f49..0000000 --- a/app/mailers/renderer/html/templates/forgot-password.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -bodyClass: bg-gray-postmark-lighter ---- - - - - - - - - - - diff --git a/app/mailers/renderer/html/templates/tailwind.css b/app/mailers/renderer/html/templates/tailwind.css deleted file mode 100644 index 74e5146..0000000 --- a/app/mailers/renderer/html/templates/tailwind.css +++ /dev/null @@ -1,18 +0,0 @@ -/* Your custom CSS resets for email */ -@import "app/mailers/renderer/html/custom/reset"; - -/* Tailwind components that are generated by plugins */ -@import "tailwindcss/components"; - -/** - * @import here any custom components - classes that you'd want loaded - * before the Tailwind utilities, so that the utilities could still - * override them. -*/ -@import "app/mailers/renderer/html/custom/postmark"; - -/* Tailwind utility classes */ -@import "tailwindcss/utilities"; - -/* Your custom utility classes */ -@import "app/mailers/renderer/html/custom/utilities"; diff --git a/app/mailers/renderer/html/templates/team-invitation.html b/app/mailers/renderer/html/templates/team-invitation.html deleted file mode 100644 index b564853..0000000 --- a/app/mailers/renderer/html/templates/team-invitation.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -bodyClass: bg-gray-postmark-lighter ---- - - - - - - - - - - diff --git a/app/mailers/renderer/renderer.server.ts b/app/mailers/renderer/renderer.server.ts deleted file mode 100644 index 6c0293d..0000000 --- a/app/mailers/renderer/renderer.server.ts +++ /dev/null @@ -1,219 +0,0 @@ -import fs from "fs"; -import path from "path"; -// @ts-ignore -import Maizzle from "@maizzle/framework"; - -export async function render(templateName: string, locals: Record = {}) { - const { template, options } = getMaizzleParams(templateName, locals); - const { html } = await Maizzle.render(template, options); - - return html; -} - -function getMaizzleParams(templateName: string, locals: Record) { - const template = fs - .readFileSync(path.resolve(process.cwd(), "./app/mailers/renderer/html/templates", `${templateName}.html`)) - .toString(); - const tailwindCss = fs - .readFileSync(path.resolve(process.cwd(), "./app/mailers/renderer/html/templates/tailwind.css")) - .toString(); - - const options = { - tailwind: { - css: tailwindCss, - config: { - mode: "jit", - theme: { - screens: { - sm: { max: "600px" }, - dark: { raw: "(prefers-color-scheme: dark)" }, - }, - extend: { - colors: { - gray: { - "postmark-lightest": "#F4F4F7", - "postmark-lighter": "#F2F4F6", - "postmark-light": "#A8AAAF", - "postmark-dark": "#51545E", - "postmark-darker": "#333333", - "postmark-darkest": "#222222", - "postmark-meta": "#85878E", - }, - blue: { - postmark: "#3869D4", - }, - }, - spacing: { - screen: "100vw", - full: "100%", - px: "1px", - 0: "0", - 2: "2px", - 3: "3px", - 4: "4px", - 5: "5px", - 6: "6px", - 7: "7px", - 8: "8px", - 9: "9px", - 10: "10px", - 11: "11px", - 12: "12px", - 14: "14px", - 16: "16px", - 20: "20px", - 21: "21px", - 24: "24px", - 25: "25px", - 28: "28px", - 30: "30px", - 32: "32px", - 35: "35px", - 36: "36px", - 40: "40px", - 44: "44px", - 45: "45px", - 48: "48px", - 52: "52px", - 56: "56px", - 60: "60px", - 64: "64px", - 72: "72px", - 80: "80px", - 96: "96px", - 570: "570px", - 600: "600px", - "1/2": "50%", - "1/3": "33.333333%", - "2/3": "66.666667%", - "1/4": "25%", - "2/4": "50%", - "3/4": "75%", - "1/5": "20%", - "2/5": "40%", - "3/5": "60%", - "4/5": "80%", - "1/6": "16.666667%", - "2/6": "33.333333%", - "3/6": "50%", - "4/6": "66.666667%", - "5/6": "83.333333%", - "1/12": "8.333333%", - "2/12": "16.666667%", - "3/12": "25%", - "4/12": "33.333333%", - "5/12": "41.666667%", - "6/12": "50%", - "7/12": "58.333333%", - "8/12": "66.666667%", - "9/12": "75%", - "10/12": "83.333333%", - "11/12": "91.666667%", - }, - borderRadius: { - none: "0px", - sm: "2px", - DEFAULT: "4px", - md: "6px", - lg: "8px", - xl: "12px", - "2xl": "16px", - "3xl": "24px", - full: "9999px", - }, - fontFamily: { - sans: ['"Nunito Sans"', "-apple-system", '"Segoe UI"', "sans-serif"], - serif: ["Constantia", "Georgia", "serif"], - mono: ["Menlo", "Consolas", "monospace"], - }, - fontSize: { - 0: "0", - xxs: "12px", - xs: "13px", - sm: "14px", - base: "16px", - lg: "18px", - xl: "20px", - "2xl": "24px", - "3xl": "30px", - "4xl": "36px", - "5xl": "48px", - "6xl": "60px", - "7xl": "72px", - "8xl": "96px", - "9xl": "128px", - }, - inset: (theme: TailwindThemeHelper) => ({ - ...theme("spacing"), - }), - letterSpacing: (theme: TailwindThemeHelper) => ({ - ...theme("spacing"), - }), - lineHeight: (theme: TailwindThemeHelper) => ({ - ...theme("spacing"), - }), - maxHeight: (theme: TailwindThemeHelper) => ({ - ...theme("spacing"), - }), - maxWidth: (theme: TailwindThemeHelper) => ({ - ...theme("spacing"), - xs: "160px", - sm: "192px", - md: "224px", - lg: "256px", - xl: "288px", - "2xl": "336px", - "3xl": "384px", - "4xl": "448px", - "5xl": "512px", - "6xl": "576px", - "7xl": "640px", - }), - minHeight: (theme: TailwindThemeHelper) => ({ - ...theme("spacing"), - }), - minWidth: (theme: TailwindThemeHelper) => ({ - ...theme("spacing"), - }), - }, - }, - corePlugins: { - animation: false, - backgroundOpacity: false, - borderOpacity: false, - divideOpacity: false, - placeholderOpacity: false, - textOpacity: false, - }, - }, - }, - maizzle: { - build: { - posthtml: { - expressions: { - locals, - }, - }, - }, - company: { - name: "Capsule Corp.", - address: `
39 Robinson Rd, #11-01
Singapore 068911`, - product: "Remixtape", - sender: "Mokhtar", - mailto: "mokhtar@remixtape.dev", - }, - googleFonts: "family=Nunito+Sans:wght@400;700", - year: () => new Date().getFullYear(), - inlineCSS: true, - prettify: true, - removeUnusedCSS: true, - }, - }; - - return { - template, - options, - }; -} - -type TailwindThemeHelper = (str: string) => {}; diff --git a/app/mailers/team-invitation-mailer.server.ts b/app/mailers/team-invitation-mailer.server.ts deleted file mode 100644 index 0cebce0..0000000 --- a/app/mailers/team-invitation-mailer.server.ts +++ /dev/null @@ -1,26 +0,0 @@ -import sendEmail from "~/utils/mailer.server"; -import serverConfig from "~/config/config.server"; -import { render } from "./renderer/renderer.server"; - -type Params = { - to: string; - token: string; - userName: string; - organizationName: string; -}; - -export async function sendTeamInvitationEmail({ to, token, userName, organizationName }: Params) { - const origin = serverConfig.app.baseUrl; - const invitationUrl = `${origin}/accept-invitation?token=${token}`; - const html = await render("team-invitation", { - action_url: invitationUrl, - invitation_sender_name: userName, - invitation_sender_organization_name: organizationName, - }); - - return sendEmail({ - recipients: to, - subject: `${userName} has invited you to work with them in Remixtape`, - html, - }); -} diff --git a/app/queues/delete-user-data.server.ts b/app/queues/delete-user-data.server.ts deleted file mode 100644 index c34de22..0000000 --- a/app/queues/delete-user-data.server.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { MembershipRole } from "@prisma/client"; - -import { Queue } from "~/utils/queue.server"; -import db from "~/utils/db.server"; -import logger from "~/utils/logger.server"; -import { deleteOrganizationEntities } from "~/utils/organization.server"; - -type Payload = { - userId: string; -}; - -export default Queue("delete user data", async ({ data }) => { - const { userId } = data; - const user = await db.user.findUnique({ - where: { id: userId }, - include: { - memberships: { - include: { organization: true }, - }, - }, - }); - if (!user) { - return; - } - - await Promise.all( - user.memberships.map(async (membership) => { - switch (membership.role) { - case MembershipRole.OWNER: { - await deleteOrganizationEntities(membership.organization); - break; - } - case MembershipRole.USER: { - await db.membership.delete({ where: { id: membership.id } }); - break; - } - } - }), - ); - - try { - await db.user.delete({ where: { id: user.id } }); - } catch (error: any) { - if (error.code === "P2025") { - logger.warn("Could not delete user because it has already been deleted"); - return; - } - - throw error; - } -}); diff --git a/app/queues/index.ts b/app/queues/index.ts index 9d04937..3925f19 100644 --- a/app/queues/index.ts +++ b/app/queues/index.ts @@ -1,4 +1,3 @@ -import deleteUserDataQueue from "./delete-user-data.server"; import fetchPhoneCallsQueue from "./fetch-phone-calls.server"; import insertPhoneCallsQueue from "./insert-phone-calls.server"; import fetchMessagesQueue from "./fetch-messages.server"; @@ -7,7 +6,6 @@ import setTwilioWebhooksQueue from "./set-twilio-webhooks.server"; import setTwilioApiKeyQueue from "./set-twilio-api-key.server"; export default [ - deleteUserDataQueue, fetchPhoneCallsQueue, insertPhoneCallsQueue, fetchMessagesQueue, diff --git a/app/queues/notify-incoming-message.server.ts b/app/queues/notify-incoming-message.server.ts index f41a199..0ad8bfd 100644 --- a/app/queues/notify-incoming-message.server.ts +++ b/app/queues/notify-incoming-message.server.ts @@ -16,15 +16,7 @@ export default Queue("notify incoming message", async ({ data }) => { where: { id: phoneNumberId }, select: { twilioAccount: { - include: { - organization: { - select: { - memberships: { - select: { notificationSubscription: true }, - }, - }, - }, - }, + include: { notificationSubscriptions: true }, }, }, }); @@ -32,10 +24,7 @@ export default Queue("notify incoming message", async ({ data }) => { logger.warn(`No phone number found with id=${phoneNumberId}`); return; } - const subscriptions = phoneNumber.twilioAccount.organization.memberships.flatMap( - (membership) => membership.notificationSubscription, - ); - + const subscriptions = phoneNumber.twilioAccount.notificationSubscriptions; const twilioClient = getTwilioClient(phoneNumber.twilioAccount); const message = await twilioClient.messages.get(messageSid).fetch(); const payload = buildMessageNotificationPayload(message); diff --git a/app/queues/set-twilio-webhooks.server.ts b/app/queues/set-twilio-webhooks.server.ts index e072fe5..716d577 100644 --- a/app/queues/set-twilio-webhooks.server.ts +++ b/app/queues/set-twilio-webhooks.server.ts @@ -8,13 +8,12 @@ import { decrypt } from "~/utils/encryption"; type Payload = { phoneNumberId: string; - organizationId: string; }; export default Queue("set twilio webhooks", async ({ data }) => { - const { phoneNumberId, organizationId } = data; + const { phoneNumberId } = data; const phoneNumber = await db.phoneNumber.findFirst({ - where: { id: phoneNumberId, twilioAccount: { organizationId } }, + where: { id: phoneNumberId }, include: { twilioAccount: { select: { accountSid: true, twimlAppSid: true, authToken: true }, @@ -33,7 +32,7 @@ export default Queue("set twilio webhooks", async ({ data }) => { await Promise.all([ db.twilioAccount.update({ - where: { organizationId }, + where: { accountSid: twilioAccount.accountSid }, data: { twimlAppSid }, }), twilioClient.incomingPhoneNumbers.get(phoneNumber.id).update({ diff --git a/app/routes/__app.tsx b/app/routes/__app.tsx index af8e5ec..d1dd6da 100644 --- a/app/routes/__app.tsx +++ b/app/routes/__app.tsx @@ -2,6 +2,7 @@ import { type LinksFunction, type LoaderFunction, json } from "@remix-run/node"; import { Outlet, useCatch, useMatches } from "@remix-run/react"; import serverConfig from "~/config/config.server"; +import type { SessionData } from "~/utils/session.server"; import Footer from "~/features/core/components/footer"; import ServiceWorkerUpdateNotifier from "~/features/core/components/service-worker-update-notifier"; import Notification from "~/features/core/components/notification"; @@ -9,6 +10,7 @@ import useServiceWorkerRevalidate from "~/features/core/hooks/use-service-worker import useDevice from "~/features/phone-calls/hooks/use-device"; import footerStyles from "~/features/core/components/footer.css"; import appStyles from "~/styles/app.css"; +import { getSession } from "~/utils/session.server"; export const links: LinksFunction = () => [ { rel: "stylesheet", href: appStyles }, @@ -16,11 +18,15 @@ export const links: LinksFunction = () => [ ]; export type AppLoaderData = { + sessionData: SessionData; config: { webPushPublicKey: string }; }; export const loader: LoaderFunction = async ({ request }) => { + const session = await getSession(request); + return json({ + sessionData: { twilio: session.data.twilio }, config: { webPushPublicKey: serverConfig.webPush.publicKey, }, diff --git a/app/routes/__app/calls.tsx b/app/routes/__app/calls.tsx index 6970abb..a096871 100644 --- a/app/routes/__app/calls.tsx +++ b/app/routes/__app/calls.tsx @@ -3,7 +3,6 @@ import { useLoaderData } from "superjson-remix"; import MissingTwilioCredentials from "~/features/core/components/missing-twilio-credentials"; import PageTitle from "~/features/core/components/page-title"; -import InactiveSubscription from "~/features/core/components/inactive-subscription"; import PhoneCallsList from "~/features/phone-calls/components/phone-calls-list"; import callsLoader, { type PhoneCallsLoaderData } from "~/features/phone-calls/loaders/calls"; import { getSeoMeta } from "~/utils/seo"; @@ -15,7 +14,7 @@ export const meta: MetaFunction = () => ({ export const loader = callsLoader; export default function PhoneCalls() { - const { hasPhoneNumber, hasOngoingSubscription } = useLoaderData(); + const { hasPhoneNumber } = useLoaderData(); if (!hasPhoneNumber) { return ( @@ -26,20 +25,6 @@ export default function PhoneCalls() { ); } - if (!hasOngoingSubscription) { - return ( - <> - -
- -
- -
-
- - ); - } - return ( <> diff --git a/app/routes/__app/keypad.tsx b/app/routes/__app/keypad.tsx index 289b183..99062c9 100644 --- a/app/routes/__app/keypad.tsx +++ b/app/routes/__app/keypad.tsx @@ -11,7 +11,6 @@ import useOnBackspacePress from "~/features/keypad/hooks/use-on-backspace-press" import Keypad from "~/features/keypad/components/keypad"; import BlurredKeypad from "~/features/keypad/components/blurred-keypad"; import MissingTwilioCredentials from "~/features/core/components/missing-twilio-credentials"; -import InactiveSubscription from "~/features/core/components/inactive-subscription"; import { getSeoMeta } from "~/utils/seo"; import { usePhoneNumber, usePressDigit, useRemoveDigit } from "~/features/keypad/hooks/atoms"; @@ -22,17 +21,13 @@ export const meta: MetaFunction = () => ({ export const loader = keypadLoader; export default function KeypadPage() { - const { hasOngoingSubscription, hasPhoneNumber, lastRecipientCalled } = useLoaderData(); + const { hasPhoneNumber, lastRecipientCalled } = useLoaderData(); const navigate = useNavigate(); const [phoneNumber, setPhoneNumber] = usePhoneNumber(); const removeDigit = useRemoveDigit(); const pressDigit = usePressDigit(); const onBackspacePress = useOnBackspacePress(); useKeyPress((key) => { - if (!hasOngoingSubscription) { - return; - } - if (key === "Backspace") { return removeDigit(); } @@ -49,15 +44,6 @@ export default function KeypadPage() { ); } - if (!hasOngoingSubscription) { - return ( - <> - - - - ); - } - return ( <>
@@ -68,7 +54,7 @@ export default function KeypadPage() {