From d4157960f4542e761021b8748cd7fb5f517447de Mon Sep 17 00:00:00 2001 From: Rudra Patel <85089368+RudraPatel2003@users.noreply.github.com> Date: Fri, 11 Oct 2024 00:06:35 -0400 Subject: [PATCH] feat: Set up email development (#3) --- README.md | 18 +- package.json | 9 +- pnpm-lock.yaml | 1542 ++++++++++++++++++- src/app/api/auth/[...nextauth]/route.ts | 4 +- src/app/test/account/page.tsx | 2 +- src/emails/notion-magic-link.tsx | 150 ++ src/emails/plaid-verify-identity.tsx | 158 ++ src/emails/static/notion-logo.png | Bin 0 -> 1929 bytes src/emails/static/plaid-logo.png | Bin 0 -> 3987 bytes src/emails/static/plaid.png | Bin 0 -> 3987 bytes src/emails/static/stripe-logo.png | Bin 0 -> 1813 bytes src/emails/static/vercel-arrow.png | Bin 0 -> 426 bytes src/emails/static/vercel-logo.png | Bin 0 -> 1178 bytes src/emails/static/vercel-team.png | Bin 0 -> 3122 bytes src/emails/static/vercel-user.png | Bin 0 -> 55726 bytes src/emails/stripe-welcome.tsx | 154 ++ src/emails/vercel-invite-user.tsx | 154 ++ src/server/api/emails/actions.ts | 15 + src/server/api/emails/helpers.ts | 46 + src/server/api/{User => users}/mutations.ts | 0 src/server/api/{User => users}/queries.ts | 0 src/types/environment.d.ts | 15 + 22 files changed, 2212 insertions(+), 55 deletions(-) create mode 100644 src/emails/notion-magic-link.tsx create mode 100644 src/emails/plaid-verify-identity.tsx create mode 100644 src/emails/static/notion-logo.png create mode 100644 src/emails/static/plaid-logo.png create mode 100644 src/emails/static/plaid.png create mode 100644 src/emails/static/stripe-logo.png create mode 100644 src/emails/static/vercel-arrow.png create mode 100644 src/emails/static/vercel-logo.png create mode 100644 src/emails/static/vercel-team.png create mode 100644 src/emails/static/vercel-user.png create mode 100644 src/emails/stripe-welcome.tsx create mode 100644 src/emails/vercel-invite-user.tsx create mode 100644 src/server/api/emails/actions.ts create mode 100644 src/server/api/emails/helpers.ts rename src/server/api/{User => users}/mutations.ts (100%) rename src/server/api/{User => users}/queries.ts (100%) create mode 100644 src/types/environment.d.ts diff --git a/README.md b/README.md index b970e1e..60d2b69 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,15 @@ Create a `.env.local` file in the root directory of the project and add the foll MONGODB_URI=mongodb+srv://:@scf-cluster.ukm7k.mongodb.net/scf-test?retryWrites=true&w=majority&appName=SCF-Cluster NEXTAUTH_URL=http://localhost:3000/ NEXTAUTH_SECRET= +SCF_GMAIL=utkscf@gmail.com +SCF_GMAIL_APP_PASSWORD= ``` -Please contact leadership to obtain the database credentials and the NEXTAUTH_SECRET. +Please contact leadership to obtain the following: + +- `MONGODB_URI` username and password +- `NEXTAUTH_SECRET` +- `SCF_GMAIL_APP_PASSWORD` ### Running the App @@ -66,13 +72,23 @@ The `pnpm run format` command can be used to fix formatting errors. ### Testing +#### Testing components and actions + For your convenience, there are many tools available to test out components, actions, etc. `/test/client/page.tsx` is a page that can be accessed at `/test/client` and is used to test out client-side components. `/test/server/page.tsx` is a page that can be accessed at `/test/server` and is used to test out server-side components. +#### Testing accounts + `/test/account/page.tsx` is a page that can be accessed at `/test/account` and is used to make test accounts. +#### Testing emails + +Run `pnpm run email-dev` to preview the emails that live in the `src/emails` directory. + +#### Debugging + The `.vscode/launch.json` file is configured to run Next.js in debug mode. This can let you step through your code line by line and inspect variables. To start debug mode, navigate to the `Run and Debug` tab in VSCode, select the mode, and click the green play button. diff --git a/package.json b/package.json index fabab18..bb89284 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,10 @@ "start": "next start", "lint": "next lint", "format": "prettier --write src", - "check-format": "prettier --check src" + "check-format": "prettier --check src", + "email-dev": "email dev --dir ./src/emails", + "email-build": "email build --dir ./src/emails", + "email-export": "email export --dir ./src/emails" }, "dependencies": { "@emotion/cache": "^11.13.1", @@ -17,18 +20,22 @@ "@hookform/resolvers": "^3.9.0", "@mui/material": "^6.1.2", "@mui/material-nextjs": "^6.1.2", + "@react-email/components": "^0.0.25", "bcrypt": "^5.1.1", "mongoose": "^8.7.0", "next": "14.2.14", "next-auth": "^4.24.8", + "nodemailer": "^6.9.15", "react": "^18", "react-dom": "^18", + "react-email": "^3.0.1", "react-hook-form": "^7.53.0", "zod": "^3.23.8" }, "devDependencies": { "@types/bcrypt": "^5.0.2", "@types/node": "^20", + "@types/nodemailer": "^6.4.16", "@types/react": "^18", "@types/react-dom": "^18", "@typescript-eslint/eslint-plugin": "^8.8.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6fb8b33..65e8984 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,10 @@ importers: version: 6.1.3(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/material-nextjs': specifier: ^6.1.2 - version: 6.1.3(@emotion/cache@11.13.1)(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(next@14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 6.1.3(@emotion/cache@11.13.1)(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(next@14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@react-email/components': + specifier: ^0.0.25 + version: 0.0.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -34,16 +37,22 @@ importers: version: 8.7.1 next: specifier: 14.2.14 - version: 14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-auth: specifier: ^4.24.8 - version: 4.24.8(next@14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 4.24.8(next@14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.15)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + nodemailer: + specifier: ^6.9.15 + version: 6.9.15 react: specifier: ^18 version: 18.3.1 react-dom: specifier: ^18 version: 18.3.1(react@18.3.1) + react-email: + specifier: ^3.0.1 + version: 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-hook-form: specifier: ^7.53.0 version: 7.53.0(react@18.3.1) @@ -57,6 +66,9 @@ importers: '@types/node': specifier: ^20 version: 20.16.11 + '@types/nodemailer': + specifier: ^6.4.16 + version: 6.4.16 '@types/react': specifier: ^18 version: 18.3.11 @@ -90,18 +102,44 @@ importers: packages: + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@babel/code-frame@7.25.7': resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.25.8': + resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.5': + resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.25.7': resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.7': resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.7': resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} @@ -110,12 +148,25 @@ packages: resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.25.7': resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.7': - resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} + '@babel/parser@7.24.5': + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.25.8': + resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -131,8 +182,8 @@ packages: resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.7': - resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} + '@babel/types@7.25.8': + resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} engines: {node: '>=6.9.0'} '@emotion/babel-plugin@11.12.0': @@ -189,6 +240,144 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@esbuild/aix-ppc64@0.19.11': + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.19.11': + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.19.11': + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.19.11': + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.19.11': + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.11': + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.19.11': + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.11': + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.19.11': + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.19.11': + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.19.11': + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.19.11': + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.19.11': + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.19.11': + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.11': + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.19.11': + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.19.11': + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.19.11': + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.19.11': + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.19.11': + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.19.11': + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.19.11': + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.19.11': + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -355,6 +544,9 @@ packages: '@next/env@14.2.14': resolution: {integrity: sha512-/0hWQfiaD5//LvGNgc8PjvyqV50vGK0cADYzaoOOGN8fxzBn3iAiaq3S0tCRnFBldq0LVveLcxCTi41ZoYgAgg==} + '@next/env@14.2.3': + resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} + '@next/eslint-plugin-next@14.2.14': resolution: {integrity: sha512-kV+OsZ56xhj0rnTn6HegyTGkoa16Mxjrpk7pjWumyB2P8JVQb8S9qtkjy/ye0GnTr4JWtWG4x/2qN40lKZ3iVQ==} @@ -364,54 +556,108 @@ packages: cpu: [arm64] os: [darwin] + '@next/swc-darwin-arm64@14.2.3': + resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@next/swc-darwin-x64@14.2.14': resolution: {integrity: sha512-cC9/I+0+SK5L1k9J8CInahduTVWGMXhQoXFeNvF0uNs3Bt1Ub0Azb8JzTU9vNCr0hnaMqiWu/Z0S1hfKc3+dww==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@next/swc-darwin-x64@14.2.3': + resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@next/swc-linux-arm64-gnu@14.2.14': resolution: {integrity: sha512-RMLOdA2NU4O7w1PQ3Z9ft3PxD6Htl4uB2TJpocm+4jcllHySPkFaUIFacQ3Jekcg6w+LBaFvjSPthZHiPmiAUg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-gnu@14.2.3': + resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-arm64-musl@14.2.14': resolution: {integrity: sha512-WgLOA4hT9EIP7jhlkPnvz49iSOMdZgDJVvbpb8WWzJv5wBD07M2wdJXLkDYIpZmCFfo/wPqFsFR4JS4V9KkQ2A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-musl@14.2.3': + resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-x64-gnu@14.2.14': resolution: {integrity: sha512-lbn7svjUps1kmCettV/R9oAvEW+eUI0lo0LJNFOXoQM5NGNxloAyFRNByYeZKL3+1bF5YE0h0irIJfzXBq9Y6w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-gnu@14.2.3': + resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-linux-x64-musl@14.2.14': resolution: {integrity: sha512-7TcQCvLQ/hKfQRgjxMN4TZ2BRB0P7HwrGAYL+p+m3u3XcKTraUFerVbV3jkNZNwDeQDa8zdxkKkw2els/S5onQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-musl@14.2.3': + resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-win32-arm64-msvc@14.2.14': resolution: {integrity: sha512-8i0Ou5XjTLEje0oj0JiI0Xo9L/93ghFtAUYZ24jARSeTMXLUx8yFIdhS55mTExq5Tj4/dC2fJuaT4e3ySvXU1A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@next/swc-win32-arm64-msvc@14.2.3': + resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@next/swc-win32-ia32-msvc@14.2.14': resolution: {integrity: sha512-2u2XcSaDEOj+96eXpyjHjtVPLhkAFw2nlaz83EPeuK4obF+HmtDJHqgR1dZB7Gb6V/d55FL26/lYVd0TwMgcOQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] + '@next/swc-win32-ia32-msvc@14.2.3': + resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + '@next/swc-win32-x64-msvc@14.2.14': resolution: {integrity: sha512-MZom+OvZ1NZxuRovKt1ApevjiUJTcU2PmdJKL66xUPaJeRywnbGGRWUlaAOwunD6dX+pm83vj979NTC8QXjGWg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@next/swc-win32-x64-msvc@14.2.3': + resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -428,6 +674,9 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@one-ini/wasm@0.1.1': + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + '@panva/hkdf@1.2.1': resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} @@ -442,12 +691,143 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@react-email/body@0.0.10': + resolution: {integrity: sha512-dMJyL9aU25ieatdPtVjCyQ/WHZYHwNc+Hy/XpF8Cc18gu21cUynVEeYQzFSeigDRMeBQ3PGAyjVDPIob7YlGwA==} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/button@0.0.17': + resolution: {integrity: sha512-ioHdsk+BpGS/PqjU6JS7tUrVy9yvbUx92Z+Cem2+MbYp55oEwQ9VHf7u4f5NoM0gdhfKSehBwRdYlHt/frEMcg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/code-block@0.0.9': + resolution: {integrity: sha512-Zrhc71VYrSC1fVXJuaViKoB/dBjxLw6nbE53Bm/eUuZPdnnZ1+ZUIh8jfaRKC5MzMjgnLGQTweGXVnfIrhyxtQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/code-inline@0.0.4': + resolution: {integrity: sha512-zj3oMQiiUCZbddSNt3k0zNfIBFK0ZNDIzzDyBaJKy6ZASTtWfB+1WFX0cpTX8q0gUiYK+A94rk5Qp68L6YXjXQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/column@0.0.12': + resolution: {integrity: sha512-Rsl7iSdDaeHZO938xb+0wR5ud0Z3MVfdtPbNKJNojZi2hApwLAQXmDrnn/AcPDM5Lpl331ZljJS8vHTWxxkvKw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/components@0.0.25': + resolution: {integrity: sha512-lnfVVrThEcET5NPoeaXvrz9UxtWpGRcut2a07dLbyKgNbP7vj/cXTI5TuHtanCvhCddFpMDnElNRghDOfPzwUg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/container@0.0.14': + resolution: {integrity: sha512-NgoaJJd9tTtsrveL86Ocr/AYLkGyN3prdXKd/zm5fQpfDhy/NXezyT3iF6VlwAOEUIu64ErHpAJd+P6ygR+vjg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/font@0.0.8': + resolution: {integrity: sha512-fSBEqYyVPAyyACBBHcs3wEYzNknpHMuwcSAAKE8fOoDfGqURr/vSxKPdh4tOa9z7G4hlcEfgGrCYEa2iPT22cw==} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/head@0.0.11': + resolution: {integrity: sha512-skw5FUgyamIMK+LN+fZQ5WIKQYf0dPiRAvsUAUR2eYoZp9oRsfkIpFHr0GWPkKAYjFEj+uJjaxQ/0VzQH7svVg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/heading@0.0.14': + resolution: {integrity: sha512-jZM7IVuZOXa0G110ES8OkxajPTypIKlzlO1K1RIe1auk76ukQRiCg1IRV4HZlWk1GGUbec5hNxsvZa2kU8cb9w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/hr@0.0.10': + resolution: {integrity: sha512-3AA4Yjgl3zEid/KVx6uf6TuLJHVZvUc2cG9Wm9ZpWeAX4ODA+8g9HyuC0tfnjbRsVMhMcCGiECuWWXINi+60vA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/html@0.0.10': + resolution: {integrity: sha512-06uiuSKJBWQJfhCKv4MPupELei4Lepyz9Sth7Yq7Fq29CAeB1ejLgKkGqn1I+FZ72hQxPLdYF4iq4yloKv3JCg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/img@0.0.10': + resolution: {integrity: sha512-pJ8glJjDNaJ53qoM95pvX9SK05yh0bNQY/oyBKmxlBDdUII6ixuMc3SCwYXPMl+tgkQUyDgwEBpSTrLAnjL3hA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/link@0.0.10': + resolution: {integrity: sha512-tva3wvAWSR10lMJa9fVA09yRn7pbEki0ZZpHE6GD1jKbFhmzt38VgLO9B797/prqoDZdAr4rVK7LJFcdPx3GwA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/markdown@0.0.12': + resolution: {integrity: sha512-wsuvj1XAb6O63aizCLNEeqVgKR3oFjAwt9vjfg2y2oh4G1dZeo8zonZM2x1fmkEkBZhzwSHraNi70jSXhA3A9w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/preview@0.0.11': + resolution: {integrity: sha512-7O/CT4b16YlSGrj18htTPx3Vbhu2suCGv/cSe5c+fuSrIM/nMiBSZ3Js16Vj0XJbAmmmlVmYFZw9L20wXJ+LjQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/render@1.0.1': + resolution: {integrity: sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/row@0.0.10': + resolution: {integrity: sha512-jPyEhG3gsLX+Eb9U+A30fh0gK6hXJwF4ghJ+ZtFQtlKAKqHX+eCpWlqB3Xschd/ARJLod8WAswg0FB+JD9d0/A==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/section@0.0.14': + resolution: {integrity: sha512-+fYWLb4tPU1A/+GE5J1+SEMA7/wR3V30lQ+OR9t2kAJqNrARDbMx0bLnYnR1QL5TiFRz0pCF05SQUobk6gHEDQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/tailwind@0.1.0': + resolution: {integrity: sha512-qysVUEY+M3SKUvu35XDpzn7yokhqFOT3tPU6Mj/pgc62TL5tQFj6msEbBtwoKs2qO3WZvai0DIHdLhaOxBQSow==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/text@0.0.10': + resolution: {integrity: sha512-wNAnxeEAiFs6N+SxS0y6wTJWfewEzUETuyS2aZmT00xk50VijwyFRuhm4sYSjusMyshevomFwz5jNISCxRsGWw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} '@rushstack/eslint-patch@1.10.4': resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + '@selderee/plugin-htmlparser2@0.11.0': + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -457,12 +837,21 @@ packages: '@types/bcrypt@5.0.2': resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} + '@types/cookie@0.4.1': + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + + '@types/cors@2.8.17': + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} '@types/node@20.16.11': resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/nodemailer@6.4.16': + resolution: {integrity: sha512-uz6hN6Pp0upXMcilM61CoKyjT7sskBoOWpptkjjJp8jIMlTdc3xG01U7proKkXzruMS4hS0zqtHNkNPFB20rKQ==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -547,6 +936,14 @@ packages: abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -584,6 +981,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} @@ -652,10 +1053,24 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + bcrypt@5.1.1: resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} engines: {node: '>= 10.0.0'} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -666,10 +1081,18 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bson@6.8.0: resolution: {integrity: sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==} engines: {node: '>=16.20.1'} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -693,13 +1116,29 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -721,19 +1160,41 @@ packages: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -760,6 +1221,10 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} + debounce@2.0.0: + resolution: {integrity: sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==} + engines: {node: '>=18'} + debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -784,6 +1249,13 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -810,19 +1282,52 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + editorconfig@1.0.4: + resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} + engines: {node: '>=14'} + hasBin: true + + electron-to-chromium@1.5.36: + resolution: {integrity: sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.5.5: + resolution: {integrity: sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==} + engines: {node: '>=10.2.0'} + enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -860,6 +1365,15 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild@0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -996,6 +1510,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1051,6 +1568,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1066,6 +1588,10 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -1090,6 +1616,15 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + glob@10.3.4: + resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -1151,10 +1686,20 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1174,6 +1719,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -1196,6 +1744,10 @@ packages: is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -1238,6 +1790,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -1282,6 +1838,10 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -1307,9 +1867,21 @@ packages: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jose@4.15.9: resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} + js-beautify@1.15.1: + resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} + engines: {node: '>=14'} + hasBin: true + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1338,6 +1910,11 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -1356,6 +1933,9 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} + leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1370,6 +1950,10 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -1377,6 +1961,9 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -1385,6 +1972,16 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} + marked@7.0.4: + resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==} + engines: {node: '>= 16'} + hasBin: true + + md-to-react-email@5.0.2: + resolution: {integrity: sha512-x6kkpdzIzUhecda/yahltfEl53mH26QdWu4abUF9+S0Jgam8P//Ciro8cdhyMHnT5MQUJYrIbO6ORM2UxPiNNA==} + peerDependencies: + react: 18.x + memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} @@ -1396,9 +1993,25 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -1480,6 +2093,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + next-auth@4.24.8: resolution: {integrity: sha512-SLt3+8UCtklsotnz2p+nB4aN3IHNmpsQFAZ24VLxGotWGzSxkBh192zxNhm/J5wgkcrDWVp0bwqvW0HksK/Lcw==} peerDependencies: @@ -1512,6 +2129,24 @@ packages: sass: optional: true + next@14.2.3: + resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + node-addon-api@5.1.0: resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} @@ -1524,11 +2159,27 @@ packages: encoding: optional: true + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + nodemailer@6.9.15: + resolution: {integrity: sha512-AHf04ySLC6CIfuRtRiEYtGEXgRfa6INgWGluDhnxTZhHSKvrBu7lc1VVchQ0d8nPc4cFaZoPq8vkyNoZr0TpGQ==} + engines: {node: '>=6.0.0'} + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} hasBin: true + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. @@ -1583,6 +2234,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + openid-client@5.7.0: resolution: {integrity: sha512-4GCCGZt1i2kTHpwvaC/sCpTpQqDnBzDzuJcJMbH+y1Q5qI8U8RBvoSh28svarXszZHR5BAMXbJPX1PGPRE3VOA==} @@ -1590,6 +2245,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1598,6 +2257,9 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1606,6 +2268,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1629,6 +2294,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} @@ -1668,9 +2336,16 @@ packages: pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1683,6 +2358,11 @@ packages: peerDependencies: react: ^18.3.1 + react-email@3.0.1: + resolution: {integrity: sha512-G4Bkx2ULIScy/0Z8nnWywHt0W1iTkaYCdh9rWNuQ3eVZ6B3ttTUDE9uUy3VNQ8dtQbmG0cpt8+XmImw7mMBW6Q==} + engines: {node: '>=18.0.0'} + hasBin: true + react-hook-form@7.53.0: resolution: {integrity: sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==} engines: {node: '>=18.0.0'} @@ -1695,6 +2375,9 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-promise-suspense@0.3.4: + resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==} + react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -1709,6 +2392,10 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + reflect.getprototypeof@1.0.6: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} @@ -1735,6 +2422,10 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -1761,6 +2452,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1803,6 +2497,17 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + socket.io-adapter@2.5.5: + resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.7.5: + resolution: {integrity: sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==} + engines: {node: '>=10.2.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1975,6 +2680,12 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -1985,6 +2696,13 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -2037,6 +2755,21 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -2053,22 +2786,74 @@ packages: snapshots: + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@babel/code-frame@7.25.7': dependencies: '@babel/highlight': 7.25.7 picocolors: 1.1.0 + '@babel/compat-data@7.25.8': {} + + '@babel/core@7.24.5': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.24.5) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.24.5 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 + '@babel/helper-compilation-targets@7.25.7': + dependencies: + '@babel/compat-data': 7.25.8 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-module-imports@7.25.7': dependencies: '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 transitivePeerDependencies: - supports-color @@ -2076,6 +2861,13 @@ snapshots: '@babel/helper-validator-identifier@7.25.7': {} + '@babel/helper-validator-option@7.25.7': {} + + '@babel/helpers@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + '@babel/highlight@7.25.7': dependencies: '@babel/helper-validator-identifier': 7.25.7 @@ -2083,9 +2875,13 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.0 - '@babel/parser@7.25.7': + '@babel/parser@7.24.5': + dependencies: + '@babel/types': 7.25.8 + + '@babel/parser@7.25.8': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 '@babel/runtime@7.25.7': dependencies: @@ -2094,22 +2890,22 @@ snapshots: '@babel/template@7.25.7': dependencies: '@babel/code-frame': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 '@babel/traverse@7.25.7': dependencies: '@babel/code-frame': 7.25.7 '@babel/generator': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/parser': 7.25.8 '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/types': 7.25.8 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.7': + '@babel/types@7.25.8': dependencies: '@babel/helper-string-parser': 7.25.7 '@babel/helper-validator-identifier': 7.25.7 @@ -2198,6 +2994,75 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} + '@esbuild/aix-ppc64@0.19.11': + optional: true + + '@esbuild/android-arm64@0.19.11': + optional: true + + '@esbuild/android-arm@0.19.11': + optional: true + + '@esbuild/android-x64@0.19.11': + optional: true + + '@esbuild/darwin-arm64@0.19.11': + optional: true + + '@esbuild/darwin-x64@0.19.11': + optional: true + + '@esbuild/freebsd-arm64@0.19.11': + optional: true + + '@esbuild/freebsd-x64@0.19.11': + optional: true + + '@esbuild/linux-arm64@0.19.11': + optional: true + + '@esbuild/linux-arm@0.19.11': + optional: true + + '@esbuild/linux-ia32@0.19.11': + optional: true + + '@esbuild/linux-loong64@0.19.11': + optional: true + + '@esbuild/linux-mips64el@0.19.11': + optional: true + + '@esbuild/linux-ppc64@0.19.11': + optional: true + + '@esbuild/linux-riscv64@0.19.11': + optional: true + + '@esbuild/linux-s390x@0.19.11': + optional: true + + '@esbuild/linux-x64@0.19.11': + optional: true + + '@esbuild/netbsd-x64@0.19.11': + optional: true + + '@esbuild/openbsd-x64@0.19.11': + optional: true + + '@esbuild/sunos-x64@0.19.11': + optional: true + + '@esbuild/win32-arm64@0.19.11': + optional: true + + '@esbuild/win32-ia32@0.19.11': + optional: true + + '@esbuild/win32-x64@0.19.11': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -2284,11 +3149,11 @@ snapshots: '@mui/core-downloads-tracker@6.1.3': {} - '@mui/material-nextjs@6.1.3(@emotion/cache@11.13.1)(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(next@14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@mui/material-nextjs@6.1.3(@emotion/cache@11.13.1)(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(next@14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 '@emotion/react': 11.13.3(@types/react@18.3.11)(react@18.3.1) - next: 14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 optionalDependencies: '@emotion/cache': 11.13.1 @@ -2371,6 +3236,8 @@ snapshots: '@next/env@14.2.14': {} + '@next/env@14.2.3': {} + '@next/eslint-plugin-next@14.2.14': dependencies: glob: 10.3.10 @@ -2378,57 +3245,205 @@ snapshots: '@next/swc-darwin-arm64@14.2.14': optional: true + '@next/swc-darwin-arm64@14.2.3': + optional: true + '@next/swc-darwin-x64@14.2.14': optional: true - '@next/swc-linux-arm64-gnu@14.2.14': - optional: true + '@next/swc-darwin-x64@14.2.3': + optional: true + + '@next/swc-linux-arm64-gnu@14.2.14': + optional: true + + '@next/swc-linux-arm64-gnu@14.2.3': + optional: true + + '@next/swc-linux-arm64-musl@14.2.14': + optional: true + + '@next/swc-linux-arm64-musl@14.2.3': + optional: true + + '@next/swc-linux-x64-gnu@14.2.14': + optional: true + + '@next/swc-linux-x64-gnu@14.2.3': + optional: true + + '@next/swc-linux-x64-musl@14.2.14': + optional: true + + '@next/swc-linux-x64-musl@14.2.3': + optional: true + + '@next/swc-win32-arm64-msvc@14.2.14': + optional: true + + '@next/swc-win32-arm64-msvc@14.2.3': + optional: true + + '@next/swc-win32-ia32-msvc@14.2.14': + optional: true + + '@next/swc-win32-ia32-msvc@14.2.3': + optional: true + + '@next/swc-win32-x64-msvc@14.2.14': + optional: true + + '@next/swc-win32-x64-msvc@14.2.3': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@one-ini/wasm@0.1.1': {} + + '@panva/hkdf@1.2.1': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@popperjs/core@2.11.8': {} + + '@react-email/body@0.0.10(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@react-email/button@0.0.17(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@react-email/code-block@0.0.9(react@18.3.1)': + dependencies: + prismjs: 1.29.0 + react: 18.3.1 + + '@react-email/code-inline@0.0.4(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@react-email/column@0.0.12(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@react-email/components@0.0.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-email/body': 0.0.10(react@18.3.1) + '@react-email/button': 0.0.17(react@18.3.1) + '@react-email/code-block': 0.0.9(react@18.3.1) + '@react-email/code-inline': 0.0.4(react@18.3.1) + '@react-email/column': 0.0.12(react@18.3.1) + '@react-email/container': 0.0.14(react@18.3.1) + '@react-email/font': 0.0.8(react@18.3.1) + '@react-email/head': 0.0.11(react@18.3.1) + '@react-email/heading': 0.0.14(react@18.3.1) + '@react-email/hr': 0.0.10(react@18.3.1) + '@react-email/html': 0.0.10(react@18.3.1) + '@react-email/img': 0.0.10(react@18.3.1) + '@react-email/link': 0.0.10(react@18.3.1) + '@react-email/markdown': 0.0.12(react@18.3.1) + '@react-email/preview': 0.0.11(react@18.3.1) + '@react-email/render': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-email/row': 0.0.10(react@18.3.1) + '@react-email/section': 0.0.14(react@18.3.1) + '@react-email/tailwind': 0.1.0(react@18.3.1) + '@react-email/text': 0.0.10(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - react-dom - '@next/swc-linux-arm64-musl@14.2.14': - optional: true + '@react-email/container@0.0.14(react@18.3.1)': + dependencies: + react: 18.3.1 - '@next/swc-linux-x64-gnu@14.2.14': - optional: true + '@react-email/font@0.0.8(react@18.3.1)': + dependencies: + react: 18.3.1 - '@next/swc-linux-x64-musl@14.2.14': - optional: true + '@react-email/head@0.0.11(react@18.3.1)': + dependencies: + react: 18.3.1 - '@next/swc-win32-arm64-msvc@14.2.14': - optional: true + '@react-email/heading@0.0.14(react@18.3.1)': + dependencies: + react: 18.3.1 - '@next/swc-win32-ia32-msvc@14.2.14': - optional: true + '@react-email/hr@0.0.10(react@18.3.1)': + dependencies: + react: 18.3.1 - '@next/swc-win32-x64-msvc@14.2.14': - optional: true + '@react-email/html@0.0.10(react@18.3.1)': + dependencies: + react: 18.3.1 - '@nodelib/fs.scandir@2.1.5': + '@react-email/img@0.0.10(react@18.3.1)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + react: 18.3.1 - '@nodelib/fs.stat@2.0.5': {} + '@react-email/link@0.0.10(react@18.3.1)': + dependencies: + react: 18.3.1 - '@nodelib/fs.walk@1.2.8': + '@react-email/markdown@0.0.12(react@18.3.1)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + md-to-react-email: 5.0.2(react@18.3.1) + react: 18.3.1 - '@nolyfill/is-core-module@1.0.39': {} + '@react-email/preview@0.0.11(react@18.3.1)': + dependencies: + react: 18.3.1 - '@panva/hkdf@1.2.1': {} + '@react-email/render@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + html-to-text: 9.0.5 + js-beautify: 1.15.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-promise-suspense: 0.3.4 - '@pkgjs/parseargs@0.11.0': - optional: true + '@react-email/row@0.0.10(react@18.3.1)': + dependencies: + react: 18.3.1 - '@pkgr/core@0.1.1': {} + '@react-email/section@0.0.14(react@18.3.1)': + dependencies: + react: 18.3.1 - '@popperjs/core@2.11.8': {} + '@react-email/tailwind@0.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@react-email/text@0.0.10(react@18.3.1)': + dependencies: + react: 18.3.1 '@rtsao/scc@1.1.0': {} '@rushstack/eslint-patch@1.10.4': {} + '@selderee/plugin-htmlparser2@0.11.0': + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + + '@socket.io/component-emitter@3.1.2': {} + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.5': @@ -2440,12 +3455,22 @@ snapshots: dependencies: '@types/node': 20.16.11 + '@types/cookie@0.4.1': {} + + '@types/cors@2.8.17': + dependencies: + '@types/node': 20.16.11 + '@types/json5@0.0.29': {} '@types/node@20.16.11': dependencies: undici-types: 6.19.8 + '@types/nodemailer@6.4.16': + dependencies: + '@types/node': 20.16.11 + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.13': {} @@ -2554,6 +3579,13 @@ snapshots: abbrev@1.1.1: {} + abbrev@2.0.0: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 @@ -2587,6 +3619,11 @@ snapshots: ansi-styles@6.2.1: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + aproba@2.0.0: {} are-we-there-yet@2.0.0: @@ -2683,6 +3720,10 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + + base64id@2.0.0: {} + bcrypt@5.1.1: dependencies: '@mapbox/node-pre-gyp': 1.0.11 @@ -2691,6 +3732,14 @@ snapshots: - encoding - supports-color + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -2704,8 +3753,20 @@ snapshots: dependencies: fill-range: 7.1.1 + browserslist@4.24.0: + dependencies: + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.36 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) + bson@6.8.0: {} + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -2733,10 +3794,30 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chownr@2.0.0: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + client-only@0.0.1: {} + clone@1.0.4: {} + clsx@2.1.1: {} color-convert@1.9.3: @@ -2753,14 +3834,32 @@ snapshots: color-support@1.1.3: {} + commander@10.0.1: {} + + commander@11.1.0: {} + concat-map@0.0.1: {} + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + console-control-strings@1.1.0: {} convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} + + cookie@0.4.2: {} + cookie@0.5.0: {} + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -2797,6 +3896,8 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 + debounce@2.0.0: {} + debug@3.2.7: dependencies: ms: 2.1.3 @@ -2828,6 +3929,12 @@ snapshots: deep-is@0.1.4: {} + deepmerge@4.3.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 @@ -2857,17 +3964,65 @@ snapshots: '@babel/runtime': 7.25.7 csstype: 3.1.3 + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + eastasianwidth@0.2.0: {} + editorconfig@1.0.4: + dependencies: + '@one-ini/wasm': 0.1.1 + commander: 10.0.1 + minimatch: 9.0.1 + semver: 7.6.3 + + electron-to-chromium@1.5.36: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + engine.io-parser@5.2.3: {} + + engine.io@6.5.5: + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 20.16.11 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.4.2 + cors: 2.8.5 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + entities@4.5.0: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -2976,6 +4131,34 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild@0.19.11: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.11 + '@esbuild/android-arm': 0.19.11 + '@esbuild/android-arm64': 0.19.11 + '@esbuild/android-x64': 0.19.11 + '@esbuild/darwin-arm64': 0.19.11 + '@esbuild/darwin-x64': 0.19.11 + '@esbuild/freebsd-arm64': 0.19.11 + '@esbuild/freebsd-x64': 0.19.11 + '@esbuild/linux-arm': 0.19.11 + '@esbuild/linux-arm64': 0.19.11 + '@esbuild/linux-ia32': 0.19.11 + '@esbuild/linux-loong64': 0.19.11 + '@esbuild/linux-mips64el': 0.19.11 + '@esbuild/linux-ppc64': 0.19.11 + '@esbuild/linux-riscv64': 0.19.11 + '@esbuild/linux-s390x': 0.19.11 + '@esbuild/linux-x64': 0.19.11 + '@esbuild/netbsd-x64': 0.19.11 + '@esbuild/openbsd-x64': 0.19.11 + '@esbuild/sunos-x64': 0.19.11 + '@esbuild/win32-arm64': 0.19.11 + '@esbuild/win32-ia32': 0.19.11 + '@esbuild/win32-x64': 0.19.11 + + escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} @@ -3194,6 +4377,8 @@ snapshots: esutils@2.0.3: {} + fast-deep-equal@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -3252,6 +4437,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} function.prototype.name@1.1.6: @@ -3275,6 +4463,8 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gensync@1.0.0-beta.2: {} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -3309,6 +4499,23 @@ snapshots: minipass: 7.1.2 path-scurry: 1.11.1 + glob@10.3.4: + dependencies: + foreground-child: 3.3.0 + jackspeak: 2.3.6 + minimatch: 9.0.5 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -3365,6 +4572,21 @@ snapshots: dependencies: react-is: 16.13.1 + html-to-text@9.0.5: + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -3372,6 +4594,8 @@ snapshots: transitivePeerDependencies: - supports-color + ieee754@1.2.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: @@ -3388,6 +4612,8 @@ snapshots: inherits@2.0.4: {} + ini@1.3.8: {} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 @@ -3414,6 +4640,10 @@ snapshots: dependencies: has-bigints: 1.0.2 + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 @@ -3453,6 +4683,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-interactive@1.0.0: {} + is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -3488,6 +4720,8 @@ snapshots: dependencies: which-typed-array: 1.1.15 + is-unicode-supported@0.1.0: {} + is-weakmap@2.0.2: {} is-weakref@1.0.2: @@ -3517,8 +4751,24 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jose@4.15.9: {} + js-beautify@1.15.1: + dependencies: + config-chain: 1.1.13 + editorconfig: 1.0.4 + glob: 10.4.5 + js-cookie: 3.0.5 + nopt: 7.2.1 + + js-cookie@3.0.5: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -3539,6 +4789,8 @@ snapshots: dependencies: minimist: 1.2.8 + json5@2.2.3: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -3558,6 +4810,8 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 + leac@0.6.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -3571,12 +4825,21 @@ snapshots: lodash.merge@4.6.2: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 lru-cache@10.4.3: {} + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -3585,6 +4848,13 @@ snapshots: dependencies: semver: 6.3.1 + marked@7.0.4: {} + + md-to-react-email@5.0.2(react@18.3.1): + dependencies: + marked: 7.0.4 + react: 18.3.1 + memory-pager@1.5.0: {} merge2@1.4.1: {} @@ -3594,10 +4864,22 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 + minimatch@9.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -3663,13 +4945,15 @@ snapshots: natural-compare@1.4.0: {} - next-auth@4.24.8(next@14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + negotiator@0.6.3: {} + + next-auth@4.24.8(next@14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nodemailer@6.9.15)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 '@panva/hkdf': 1.2.1 cookie: 0.5.0 jose: 4.15.9 - next: 14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) oauth: 0.9.15 openid-client: 5.7.0 preact: 10.24.2 @@ -3677,8 +4961,10 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) uuid: 8.3.2 + optionalDependencies: + nodemailer: 6.9.15 - next@14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.14(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.14 '@swc/helpers': 0.5.5 @@ -3688,7 +4974,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.5)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.14 '@next/swc-darwin-x64': 14.2.14 @@ -3703,16 +4989,51 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@next/env': 14.2.3 + '@swc/helpers': 0.5.5 + busboy: 1.6.0 + caniuse-lite: 1.0.30001667 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.5)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 14.2.3 + '@next/swc-darwin-x64': 14.2.3 + '@next/swc-linux-arm64-gnu': 14.2.3 + '@next/swc-linux-arm64-musl': 14.2.3 + '@next/swc-linux-x64-gnu': 14.2.3 + '@next/swc-linux-x64-musl': 14.2.3 + '@next/swc-win32-arm64-msvc': 14.2.3 + '@next/swc-win32-ia32-msvc': 14.2.3 + '@next/swc-win32-x64-msvc': 14.2.3 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + node-addon-api@5.1.0: {} node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + node-releases@2.0.18: {} + + nodemailer@6.9.15: {} + nopt@5.0.0: dependencies: abbrev: 1.1.1 + nopt@7.2.1: + dependencies: + abbrev: 2.0.0 + + normalize-path@3.0.0: {} + npmlog@5.0.1: dependencies: are-we-there-yet: 2.0.0 @@ -3773,6 +5094,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + openid-client@5.7.0: dependencies: jose: 4.15.9 @@ -3789,6 +5114,18 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -3797,6 +5134,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -3808,6 +5147,11 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parseley@0.12.1: + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -3823,6 +5167,8 @@ snapshots: path-type@4.0.0: {} + peberminta@0.9.0: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -3852,12 +5198,16 @@ snapshots: pretty-format@3.8.0: {} + prismjs@1.29.0: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + proto-list@1.2.4: {} + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -3868,6 +5218,33 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-email@3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/core': 7.24.5 + '@babel/parser': 7.24.5 + chalk: 4.1.2 + chokidar: 3.6.0 + commander: 11.1.0 + debounce: 2.0.0 + esbuild: 0.19.11 + glob: 10.3.4 + log-symbols: 4.1.0 + mime-types: 2.1.35 + next: 14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + normalize-path: 3.0.0 + ora: 5.4.1 + socket.io: 4.7.5 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@playwright/test' + - babel-plugin-macros + - bufferutil + - react + - react-dom + - sass + - supports-color + - utf-8-validate + react-hook-form@7.53.0(react@18.3.1): dependencies: react: 18.3.1 @@ -3876,6 +5253,10 @@ snapshots: react-is@18.3.1: {} + react-promise-suspense@0.3.4: + dependencies: + fast-deep-equal: 2.0.1 + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 @@ -3895,6 +5276,10 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + reflect.getprototypeof@1.0.6: dependencies: call-bind: 1.0.7 @@ -3930,6 +5315,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + reusify@1.0.4: {} rimraf@3.0.2: @@ -3959,6 +5349,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + selderee@0.11.0: + dependencies: + parseley: 0.12.1 + semver@6.3.1: {} semver@7.6.3: {} @@ -4000,6 +5394,36 @@ snapshots: signal-exit@4.1.0: {} + socket.io-adapter@2.5.5: + dependencies: + debug: 4.3.7 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + socket.io@4.7.5: + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.7 + engine.io: 6.5.5 + socket.io-adapter: 2.5.5 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + source-map-js@1.2.1: {} source-map@0.5.7: {} @@ -4086,10 +5510,12 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.1(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 + optionalDependencies: + '@babel/core': 7.24.5 stylis@4.2.0: {} @@ -4195,6 +5621,12 @@ snapshots: undici-types@6.19.8: {} + update-browserslist-db@1.1.1(browserslist@4.24.0): + dependencies: + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -4203,6 +5635,12 @@ snapshots: uuid@8.3.2: {} + vary@1.1.2: {} + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + webidl-conversions@3.0.1: {} webidl-conversions@7.0.0: {} @@ -4279,6 +5717,10 @@ snapshots: wrappy@1.0.2: {} + ws@8.17.1: {} + + yallist@3.1.1: {} + yallist@4.0.0: {} yaml@1.10.2: {} diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts index 38e0cdf..3530955 100644 --- a/src/app/api/auth/[...nextauth]/route.ts +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -1,4 +1,4 @@ -import { getUserByEmail } from "@/server/api/User/queries"; +import { getUserByEmail } from "@/server/api/users/queries"; import NextAuth, { NextAuthOptions } from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; import bcrypt from "bcrypt"; @@ -58,7 +58,7 @@ export const authOptions: NextAuthOptions = { }, pages: { signIn: "/auth/login", - error: "/auth/login", + error: "/auth/login", // The login page will parse the error query parameter passed in }, secret: process.env.NEXTAUTH_SECRET, }; diff --git a/src/app/test/account/page.tsx b/src/app/test/account/page.tsx index f233187..1532fbd 100644 --- a/src/app/test/account/page.tsx +++ b/src/app/test/account/page.tsx @@ -12,7 +12,7 @@ import { Box } from "@mui/material"; import { z } from "zod"; import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; -import { createUser } from "@/server/api/User/mutations"; +import { createUser } from "@/server/api/users/mutations"; import { User } from "@/types"; import apiErrors from "@/utils/constants/apiErrors"; diff --git a/src/emails/notion-magic-link.tsx b/src/emails/notion-magic-link.tsx new file mode 100644 index 0000000..f0266a0 --- /dev/null +++ b/src/emails/notion-magic-link.tsx @@ -0,0 +1,150 @@ +import { + Body, + Container, + Head, + Heading, + Html, + Img, + Link, + Preview, + Text, +} from "@react-email/components"; +import * as React from "react"; + +type NotionMagicLinkEmailProps = { + loginCode?: string; +}; + +const baseUrl = process.env.VERCEL_URL + ? `https://${process.env.VERCEL_URL}` + : ""; + +export const NotionMagicLinkEmail = ({ + loginCode, +}: NotionMagicLinkEmailProps) => ( + + + Log in with this magic link + + + Login + + Click here to log in with this magic link + + + Or, copy and paste this temporary login code: + + {loginCode} + + If you didn't try to login, you can safely ignore this email. + + + Hint: You can set a permanent password in Settings & members → My + account. + + Notion's Logo + + + Notion.so + + , the all-in-one-workspace +
+ for your notes, tasks, wikis, and databases. +
+
+ + +); + +NotionMagicLinkEmail.PreviewProps = { + loginCode: "sparo-ndigo-amurt-secan", +} as NotionMagicLinkEmailProps; + +export default NotionMagicLinkEmail; + +const main = { + backgroundColor: "#ffffff", +}; + +const container = { + paddingLeft: "12px", + paddingRight: "12px", + margin: "0 auto", +}; + +const h1 = { + color: "#333", + fontFamily: + "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif", + fontSize: "24px", + fontWeight: "bold", + margin: "40px 0", + padding: "0", +}; + +const link = { + color: "#2754C5", + fontFamily: + "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif", + fontSize: "14px", + textDecoration: "underline", +}; + +const text = { + color: "#333", + fontFamily: + "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif", + fontSize: "14px", + margin: "24px 0", +}; + +const footer = { + color: "#898989", + fontFamily: + "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif", + fontSize: "12px", + lineHeight: "22px", + marginTop: "12px", + marginBottom: "24px", +}; + +const code = { + display: "inline-block", + padding: "16px 4.5%", + width: "90.5%", + backgroundColor: "#f4f4f4", + borderRadius: "5px", + border: "1px solid #eee", + color: "#333", +}; diff --git a/src/emails/plaid-verify-identity.tsx b/src/emails/plaid-verify-identity.tsx new file mode 100644 index 0000000..d23185d --- /dev/null +++ b/src/emails/plaid-verify-identity.tsx @@ -0,0 +1,158 @@ +import { + Body, + Container, + Head, + Heading, + Html, + Img, + Link, + Section, + Text, +} from "@react-email/components"; +import * as React from "react"; + +type PlaidVerifyIdentityEmailProps = { + validationCode?: string; +}; + +const baseUrl = process.env.VERCEL_URL + ? `https://${process.env.VERCEL_URL}` + : ""; + +export const PlaidVerifyIdentityEmail = ({ + validationCode, +}: PlaidVerifyIdentityEmailProps) => ( + + + + + Plaid + Verify Your Identity + + Enter the following code to finish linking Venmo. + +
+ {validationCode} +
+ Not expecting this email? + + Contact{" "} + + login@plaid.com + {" "} + if you did not request this code. + +
+ Securely powered by Plaid. + + +); + +PlaidVerifyIdentityEmail.PreviewProps = { + validationCode: "144833", +} as PlaidVerifyIdentityEmailProps; + +export default PlaidVerifyIdentityEmail; + +const main = { + backgroundColor: "#ffffff", + fontFamily: "HelveticaNeue,Helvetica,Arial,sans-serif", +}; + +const container = { + backgroundColor: "#ffffff", + border: "1px solid #eee", + borderRadius: "5px", + boxShadow: "0 5px 10px rgba(20,50,70,.2)", + marginTop: "20px", + maxWidth: "360px", + margin: "0 auto", + padding: "68px 0 130px", +}; + +const logo = { + margin: "0 auto", +}; + +const tertiary = { + color: "#0a85ea", + fontSize: "11px", + fontWeight: 700, + fontFamily: "HelveticaNeue,Helvetica,Arial,sans-serif", + height: "16px", + letterSpacing: "0", + lineHeight: "16px", + margin: "16px 8px 8px 8px", + textTransform: "uppercase" as const, + textAlign: "center" as const, +}; + +const secondary = { + color: "#000", + display: "inline-block", + fontFamily: "HelveticaNeue-Medium,Helvetica,Arial,sans-serif", + fontSize: "20px", + fontWeight: 500, + lineHeight: "24px", + marginBottom: "0", + marginTop: "0", + textAlign: "center" as const, +}; + +const codeContainer = { + background: "rgba(0,0,0,.05)", + borderRadius: "4px", + margin: "16px auto 14px", + verticalAlign: "middle", + width: "280px", +}; + +const code = { + color: "#000", + display: "inline-block", + fontFamily: "HelveticaNeue-Bold", + fontSize: "32px", + fontWeight: 700, + letterSpacing: "6px", + lineHeight: "40px", + paddingBottom: "8px", + paddingTop: "8px", + margin: "0 auto", + width: "100%", + textAlign: "center" as const, +}; + +const paragraph = { + color: "#444", + fontSize: "15px", + fontFamily: "HelveticaNeue,Helvetica,Arial,sans-serif", + letterSpacing: "0", + lineHeight: "23px", + padding: "0 40px", + margin: "0", + textAlign: "center" as const, +}; + +const link = { + color: "#444", + textDecoration: "underline", +}; + +const footer = { + color: "#000", + fontSize: "12px", + fontWeight: 800, + letterSpacing: "0", + lineHeight: "23px", + margin: "0", + marginTop: "20px", + fontFamily: "HelveticaNeue,Helvetica,Arial,sans-serif", + textAlign: "center" as const, + textTransform: "uppercase" as const, +}; diff --git a/src/emails/static/notion-logo.png b/src/emails/static/notion-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..57cddee9b737055f418bd95f126093204bb09e3f GIT binary patch literal 1929 zcmV;42X^?0P)hmX z+?la#F$UPeFocWj!A>VJ$i_%Io=9I`NJdtFt_Ztqq}li>{sjSA#zgT>*+a+D*CSz2 zo8V-a`#^*c37{HJHteNjyeeMl8k=m)vT=x&0Fx5W>np}R=|co~%ElBkF@n#MA)j8jkR*I=aKiH3a_e>Qx-l3VxCQ+!437_eqQi@6wMPggqDTZ zoy#VO2l>R6Nca{N36lspxU)HLi9xpdA`-h6#mXv6!d<4Z+S>)3@ijQBc( zl?wuJIA8W;F;ka~GgQj43+34L61A1E!zY}#aN_(nC_lL`H)B*|6d7l%F?fjm1*Vdq zjR>Gh!UI7xm}rc1sqxO3F_Yz>Z34)$@T=r|{R-X*G@JXIHYK1;7EmR)lfVCQhWUsa zAVB0e#}ovKqUCK95FlLRZIxqnrPQA37pC$mXKk7=g8*hw4RI)_X6hJ^>e}X_iUR>^ z8ZXrt(|4redIw!2fNF>?8jo_WCZP}@75bNIj0tqG3i#BL1mfxg>|p%33GfqBA2$I2 z5C8xH01yBG0f0#R05M>q9IH#$sw^Dk{rv|JARKTb@`o~}grA29(7^Lfy|*y`S^lDi zl*m{Kqg}(e2LX;JnS0mw6QR`<{Cz#&So51lx5UQh*RufuJ{vl*5Ei)(FNEGU!I;qN zdAr=|t6)N`0&G5ge9PRv=O7hQ^j9{%vXebJ%|DY#-E5256_M_&+2CkSONrY?N;DH6Cl!q#`-z;_2q^-rq!1}*{bLK-ol5}-;1T4|nkscX zH32xmmMnsI8$bfev4}wmKmffIfB+F=)O8sE0jf#C5Cnh}fB+F=BKiX$0Hgo}h!uk_ zN&yHExfH}ifEA=5ZUX#Zbj!Z(L4Ytp^~&1Lyyh-80_?N#NZ1<~fB@lP$!L~Zb)qVW zwF;OKeNOOF5Gw(A1fY7_CTJ;$xesv1Xdb!J6 z1!x7+^#+El+9uE-fQM2rC;BYcPZxmzHL+rJPvrz91t37=QUC&cfR}_+ZQ@{_E&>5Q zW69{A$bA9D@mjV!=yf;881q%=$Jn+5%RhxJM z0>s@LfCL0A1#=J}Zmd{`_b>thB9{UXpc;5d_y_{TjU{X0#f>0<|55+~L=4I{F$fSS zDBHwd5?~7(YkLE;E)!q}8*9P)0-LT9AccM7=?$Efgt!&#TS*G$T_ixB=m2`GLXVhb z1lV`2++pu~4B1$n6SNeZY08~0^}qQ_-REq)vG>gzmhAmLebY7k+*uyGNPrN^9q!Tp z)c8Ga_=OJT8$2LOM2BUTBJCpt6CwRaerCd*A$1a&sa2^hu+ zdebFgbA|;ZK42gc>#5B$uq+>#iOg~UJ6H+nL&eat#`neXsP6nz>>Zrv18ald=|_@` z4Ne%dUy!g(+P=sh;b-x-X4U<4cp3TC<8V6C81q8onLZ=U#ua4*kn@32MHchPd$LeT zs9sj&RhJsi>^io#B0%m5F9v$VBf(=yB3a~BV~uA5dhj03#ufo`k4rGmUgAi4zgRlS zpKSb%`SuQ6a{q1XWE3}zFzCj#ZMNn404Cqoub#`xlB5RZ9z4L z>V2wrl6qfk1ju^?_l%}(T4ao^#yh?8z8DE0Cx;VFa@cwA0|4jvPk;dc68z~C(;byw P00000NkvXXu0mjfWmII? literal 0 HcmV?d00001 diff --git a/src/emails/static/plaid-logo.png b/src/emails/static/plaid-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ce9d08cb23a9d033c9be3c5a28cefae06214bf52 GIT binary patch literal 3987 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 Q`MOc)X&Y$~G#!!u13Bs91poj5 literal 0 HcmV?d00001 diff --git a/src/emails/static/vercel-user.png b/src/emails/static/vercel-user.png new file mode 100644 index 0000000000000000000000000000000000000000..81beac6945a486f6c03edaad5e035a1c6a67026b GIT binary patch literal 55726 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

b_4NZ02x!e-&bvaid>@c6qBDycI@ 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

N10A(43%#Xj0Fa8KtC0cBko)!Tx5rY*_)wkZy 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 literal 0 HcmV?d00001 diff --git a/src/emails/stripe-welcome.tsx b/src/emails/stripe-welcome.tsx new file mode 100644 index 0000000..f0c2c0b --- /dev/null +++ b/src/emails/stripe-welcome.tsx @@ -0,0 +1,154 @@ +import { + Body, + Button, + Container, + Head, + Hr, + Html, + Img, + Link, + Preview, + Section, + Text, +} from "@react-email/components"; +import * as React from "react"; + +const baseUrl = process.env.VERCEL_URL + ? `https://${process.env.VERCEL_URL}` + : ""; + +export const StripeWelcomeEmail = () => ( + + + + You're now ready to make live transactions with Stripe! + + + +

+ Stripe +
+ + Thanks for submitting your account information. You're now + ready to make live transactions with Stripe! + + + You can view your payments and a variety of other information about + your account right from your dashboard. + + +
+ + If you haven't finished your integration, you might find our{" "} + + docs + {" "} + handy. + + + Once You're ready to start accepting payments, you'll just + need to use your live{" "} + + API keys + {" "} + instead of your test API keys. Your account can simultaneously be + used for both test and live requests, so you can continue testing + while accepting live payments. Check out our{" "} + + tutorial about account basics + + . + + + Finally, we've put together a{" "} + + quick checklist + {" "} + to ensure your website conforms to card network standards. + + + We'll be here to help you with any step along the way. You can + find answers to most questions and get in touch with us on our{" "} + + support site + + . + + — The Stripe team +
+ + Stripe, 354 Oyster Point Blvd, South San Francisco, CA 94080 + +
+ + + +); + +export default StripeWelcomeEmail; + +const main = { + backgroundColor: "#f6f9fc", + fontFamily: + '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif', +}; + +const container = { + backgroundColor: "#ffffff", + margin: "0 auto", + padding: "20px 0 48px", + marginBottom: "64px", +}; + +const box = { + padding: "0 48px", +}; + +const hr = { + borderColor: "#e6ebf1", + margin: "20px 0", +}; + +const paragraph = { + color: "#525f7f", + + fontSize: "16px", + lineHeight: "24px", + textAlign: "left" as const, +}; + +const anchor = { + color: "#556cd6", +}; + +const button = { + backgroundColor: "#656ee8", + borderRadius: "5px", + color: "#fff", + fontSize: "16px", + fontWeight: "bold", + textDecoration: "none", + textAlign: "center" as const, + display: "block", + width: "100%", + padding: "10px", +}; + +const footer = { + color: "#8898aa", + fontSize: "12px", + lineHeight: "16px", +}; diff --git a/src/emails/vercel-invite-user.tsx b/src/emails/vercel-invite-user.tsx new file mode 100644 index 0000000..a530b27 --- /dev/null +++ b/src/emails/vercel-invite-user.tsx @@ -0,0 +1,154 @@ +import { + Body, + Button, + Container, + Column, + Head, + Heading, + Hr, + Html, + Img, + Link, + Preview, + Row, + Section, + Text, + Tailwind, +} from "@react-email/components"; +import * as React from "react"; + +type VercelInviteUserEmailProps = { + username?: string; + userImage?: string; + invitedByUsername?: string; + invitedByEmail?: string; + teamName?: string; + teamImage?: string; + inviteLink?: string; + inviteFromIp?: string; + inviteFromLocation?: string; +}; + +const baseUrl = process.env.VERCEL_URL + ? `https://${process.env.VERCEL_URL}` + : ""; + +export const VercelInviteUserEmail = ({ + username, + userImage, + invitedByUsername, + invitedByEmail, + teamName, + teamImage, + inviteLink, + inviteFromIp, + inviteFromLocation, +}: VercelInviteUserEmailProps) => { + const previewText = `Join ${invitedByUsername} on Vercel`; + + return ( + + + {previewText} + + + +
+ Vercel +
+ + Join {teamName} on Vercel + + + Hello {username}, + + + {invitedByUsername} ( + + {invitedByEmail} + + ) has invited you to the {teamName} team on{" "} + Vercel. + +
+ + + + + + invited you to + + + + + +
+
+ +
+ + or copy and paste this URL into your browser:{" "} + + {inviteLink} + + +
+ + This invitation was intended for{" "} + {username}. This invite was + sent from {inviteFromIp}{" "} + located in{" "} + {inviteFromLocation}. If you + were not expecting this invitation, you can ignore this email. If + you are concerned about your account's safety, please reply + to this email to get in touch with us. + +
+ +
+ + ); +}; + +VercelInviteUserEmail.PreviewProps = { + username: "alanturing", + userImage: `${baseUrl}/static/vercel-user.png`, + invitedByUsername: "Alan", + invitedByEmail: "alan.turing@example.com", + teamName: "Enigma", + teamImage: `${baseUrl}/static/vercel-team.png`, + inviteLink: "https://vercel.com/teams/invite/foo", + inviteFromIp: "204.13.186.218", + inviteFromLocation: "São Paulo, Brazil", +} as VercelInviteUserEmailProps; + +export default VercelInviteUserEmail; diff --git a/src/server/api/emails/actions.ts b/src/server/api/emails/actions.ts new file mode 100644 index 0000000..a812678 --- /dev/null +++ b/src/server/api/emails/actions.ts @@ -0,0 +1,15 @@ +"use server"; + +import sendEmail from "@/server/api/emails/helpers"; + +export async function sendPasswordResetEmail(recipient_email: string) { + const html = `

Hello ${recipient_email}

`; + + await sendEmail(recipient_email, "Please reset your password", html); +} + +export async function sendWelcomeEmail(recipient_email: string) { + const html = `

Hello ${recipient_email}

`; + + await sendEmail(recipient_email, "Welcome to SCF", html); +} diff --git a/src/server/api/emails/helpers.ts b/src/server/api/emails/helpers.ts new file mode 100644 index 0000000..a649002 --- /dev/null +++ b/src/server/api/emails/helpers.ts @@ -0,0 +1,46 @@ +import { createTransport } from "nodemailer"; + +function getTransporter() { + const email = process.env.SCF_GMAIL; + const password = process.env.SCF_GMAIL_APP_PASSWORD; + + if (!email || !password) { + throw new Error( + "Missing environment variables SCF_GMAIL or SCF_GMAIL_APP_PASSWORD", + ); + } + + const transporter = createTransport({ + service: "gmail", + host: "smtp.gmail.com", + port: 465, + secure: true, + auth: { + user: email, + pass: password, + }, + }); + + return transporter; +} + +export default async function sendEmail( + recipient: string, + subject: string, + html: string, +) { + const transporter = getTransporter(); + + const email = process.env.SCF_GMAIL; + + const mailOptions = { + from: `St. Christopher Truckers Relief Fund <${email}>`, + to: recipient, + subject, + html, + }; + + const response = await transporter.sendMail(mailOptions); + + return response; +} diff --git a/src/server/api/User/mutations.ts b/src/server/api/users/mutations.ts similarity index 100% rename from src/server/api/User/mutations.ts rename to src/server/api/users/mutations.ts diff --git a/src/server/api/User/queries.ts b/src/server/api/users/queries.ts similarity index 100% rename from src/server/api/User/queries.ts rename to src/server/api/users/queries.ts diff --git a/src/types/environment.d.ts b/src/types/environment.d.ts new file mode 100644 index 0000000..c09389e --- /dev/null +++ b/src/types/environment.d.ts @@ -0,0 +1,15 @@ +/* eslint-disable @typescript-eslint/consistent-type-definitions */ + +declare global { + namespace NodeJS { + interface ProcessEnv { + MONGODB_URI: string; + NEXTAUTH_URL: string; + NEXTAUTH_SECRET: string; + SCF_GMAIL: string; + SCF_GMAIL_APP_PASSWORD: string; + } + } +} + +export {};