From 4258a0493dccc004e7ea7385d6d782928978526a Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Tue, 22 Aug 2023 21:26:26 -0600 Subject: [PATCH 1/3] User Created Email --- src/components/templates/Goodbye.tsx | 52 ------------------------- src/components/templates/Welcome.tsx | 58 ++++++++++++++-------------- src/pages/api/webhooks/index.ts | 22 ++++++++--- src/server/webhookHelpers.ts | 19 ++++++++- src/utils/types.ts | 14 ++++--- 5 files changed, 72 insertions(+), 93 deletions(-) delete mode 100644 src/components/templates/Goodbye.tsx diff --git a/src/components/templates/Goodbye.tsx b/src/components/templates/Goodbye.tsx deleted file mode 100644 index 3e2f310..0000000 --- a/src/components/templates/Goodbye.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { - Body, - Container, - Head, - Heading, - Hr, - Html, - Img, - Preview, - Section, - Tailwind, - Text, -} from "@react-email/components"; -import * as React from "react"; - -interface GoodbyeTemplateProps { - name: string; -} - -const baseUrl = process.env.VERCEL_URL - ? `https://${process.env.VERCEL_URL}` - : "http://localhost:3000"; - -export const Goodbye = ({ name }: GoodbyeTemplateProps) => ( - - - Sorry to see you go... 😭 - - - -
- {`Sprint -
- Farewell, {name}... - {"Were sorry to see you go."} - - Your data has been deleted, including all room history, user data, - votes, etc. - -
- — The Sprint Padawan team -
- -
- -); diff --git a/src/components/templates/Welcome.tsx b/src/components/templates/Welcome.tsx index 1602f00..1c46510 100644 --- a/src/components/templates/Welcome.tsx +++ b/src/components/templates/Welcome.tsx @@ -8,7 +8,7 @@ import { Img, Preview, Section, - Tailwind, + // Tailwind, Text, } from "@react-email/components"; import * as React from "react"; @@ -25,33 +25,33 @@ export const Welcome = ({ name }: WelcomeTemplateProps) => ( 🎉 Welcome to Sprint Padawan! 🎉 - - - -
- {`Sprint -
- - 🎉 Welcome to Sprint Padawan, {name}! 🎉 - - - Hello {name}, - - Thank you for signing up for Sprint Padawan! - - If at any point you encounter issues, please let me know at - support@sprintpadawan.dev. - -
- — The Sprint Padawan team -
- -
+ {/* */} + + +
+ {`Sprint +
+ + 🎉 Welcome to Sprint Padawan, {name}! 🎉 + + + Hello {name}, + + Thank you for signing up for Sprint Padawan! + + If at any point you encounter issues, please let me know at + support@sprintpadawan.dev. + +
+ — The Sprint Padawan team +
+ + {/*
*/} ); diff --git a/src/pages/api/webhooks/index.ts b/src/pages/api/webhooks/index.ts index a6ca28e..3b52c9d 100644 --- a/src/pages/api/webhooks/index.ts +++ b/src/pages/api/webhooks/index.ts @@ -3,7 +3,11 @@ import { onUserCreatedHandler, onUserDeletedHandler, } from "~/server/webhookHelpers"; -import { WebhookEventBodySchema, WebhookEvents } from "~/utils/types"; +import { + WebhookEventBody, + WebhookEventBodySchema, + WebhookEvents, +} from "~/utils/types"; export const config = { runtime: "edge", @@ -12,12 +16,17 @@ export const config = { export default async function handler(req: NextRequest) { try { - const requestBody = WebhookEventBodySchema.parse(await req.json()); + const eventBody = (await req.json()) as WebhookEventBody; + const { data, type } = WebhookEventBodySchema.parse(eventBody); let success = false; - switch (requestBody.type) { + switch (type) { case WebhookEvents.USER_CREATED: - success = await onUserCreatedHandler(requestBody.data.id); + success = await onUserCreatedHandler( + data.id, + `${data.first_name} ${data.last_name}`, + data.email_addresses?.map((email) => email.email_address) || [] + ); if (success) { return NextResponse.json( { result: "USER CREATED" }, @@ -31,7 +40,7 @@ export default async function handler(req: NextRequest) { } case WebhookEvents.USER_DELETED: - success = await onUserDeletedHandler(requestBody.data.id); + success = await onUserDeletedHandler(data.id); return NextResponse.json( { result: "USER DELETED" }, @@ -44,7 +53,8 @@ export default async function handler(req: NextRequest) { { status: 400, statusText: "INVALID WEBHOOK EVENT TYPE" } ); } - } catch { + } catch (error) { + console.log(error); return NextResponse.json( { result: "INVALID WEBHOOK EVENT BODY" }, { status: 400, statusText: "INVALID WEBHOOK EVENT BODY" } diff --git a/src/server/webhookHelpers.ts b/src/server/webhookHelpers.ts index 2e6c7f5..e6b51f1 100644 --- a/src/server/webhookHelpers.ts +++ b/src/server/webhookHelpers.ts @@ -2,6 +2,10 @@ import { eq } from "drizzle-orm"; import { db } from "./db"; import { rooms } from "./schema"; import { env } from "~/env.mjs"; +import { Welcome } from "~/components/templates/Welcome"; +import { Resend } from "resend"; + +const resend = new Resend(env.RESEND_API_KEY); export const onUserDeletedHandler = async (userId: string) => { try { @@ -13,7 +17,11 @@ export const onUserDeletedHandler = async (userId: string) => { } }; -export const onUserCreatedHandler = async (userId: string) => { +export const onUserCreatedHandler = async ( + userId: string, + userName: string, + userEmails: string[] +) => { const userUpdateResponse = await fetch( `https://api.clerk.com/v1/users/${userId}/metadata`, { @@ -33,5 +41,14 @@ export const onUserCreatedHandler = async (userId: string) => { } ); + userEmails.forEach((userEmail) => { + void resend.sendEmail({ + from: "no-reply@sprintpadawan.dev", + to: userEmail, + subject: "🎉 Welcome to Sprint Padawan! 🎉", + react: Welcome({ name: userName }), + }); + }); + return userUpdateResponse.ok; }; diff --git a/src/utils/types.ts b/src/utils/types.ts index a41fb24..1c3f2d9 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -23,14 +23,18 @@ export const WebhookEventBodySchema = z.object({ .array( z.object({ email_address: z.string().email(), - id: z.string(), - verification: z.object({ - status: z.string(), - strategy: z.string(), - }), + id: z.string().optional(), + verification: z + .object({ + status: z.string().optional(), + strategy: z.string().optional(), + }) + .optional(), }) ) .optional(), + first_name: z.string().optional(), + last_name: z.string().optional(), }), type: z.string(), }); From 6f81cbbf77e3a3253b4f2d31d014b0f639f7c551 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Tue, 22 Aug 2023 21:52:38 -0600 Subject: [PATCH 2/3] Fix --- src/components/templates/Welcome.tsx | 20 +++++++------------- src/pages/api/webhooks/index.ts | 1 + 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/components/templates/Welcome.tsx b/src/components/templates/Welcome.tsx index 1c46510..6d4cf2f 100644 --- a/src/components/templates/Welcome.tsx +++ b/src/components/templates/Welcome.tsx @@ -8,7 +8,6 @@ import { Img, Preview, Section, - // Tailwind, Text, } from "@react-email/components"; import * as React from "react"; @@ -25,33 +24,28 @@ export const Welcome = ({ name }: WelcomeTemplateProps) => ( 🎉 Welcome to Sprint Padawan! 🎉 - {/* */} - - -
+ + +
{`Sprint
- + 🎉 Welcome to Sprint Padawan, {name}! 🎉 - - Hello {name}, - + Hello {name}, Thank you for signing up for Sprint Padawan! If at any point you encounter issues, please let me know at support@sprintpadawan.dev. -
- — The Sprint Padawan team +
+ — Atridad Lahiji
- {/* */} ); diff --git a/src/pages/api/webhooks/index.ts b/src/pages/api/webhooks/index.ts index 3b52c9d..6200bc1 100644 --- a/src/pages/api/webhooks/index.ts +++ b/src/pages/api/webhooks/index.ts @@ -17,6 +17,7 @@ export const config = { export default async function handler(req: NextRequest) { try { const eventBody = (await req.json()) as WebhookEventBody; + console.log(eventBody); const { data, type } = WebhookEventBodySchema.parse(eventBody); let success = false; From 86a41d3f5cad27bde7298c60b64bb49fe001efd4 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Tue, 22 Aug 2023 23:27:06 -0600 Subject: [PATCH 3/3] More fix --- package.json | 12 +-- pnpm-lock.yaml | 158 ++++++++++++++++---------------- src/pages/api/webhooks/index.ts | 3 +- src/server/unkey.ts | 4 +- 4 files changed, 89 insertions(+), 88 deletions(-) diff --git a/package.json b/package.json index 01c415d..31ac1a6 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@trpc/next": "10.37.1", "@trpc/react-query": "10.37.1", "@trpc/server": "10.37.1", - "@unkey/api": "^0.6.11", + "@unkey/api": "^0.6.13", "@upstash/ratelimit": "^0.4.3", "@upstash/redis": "^1.22.0", "ably": "^1.2.43", @@ -46,11 +46,11 @@ "devDependencies": { "@types/eslint": "^8.44.2", "@types/json2csv": "^5.0.3", - "@types/node": "^20.5.1", - "@types/react": "^18.2.20", - "@typescript-eslint/eslint-plugin": "^6.4.0", - "@typescript-eslint/parser": "^6.4.0", - "daisyui": "^3.5.1", + "@types/node": "^20.5.3", + "@types/react": "^18.2.21", + "@typescript-eslint/eslint-plugin": "^6.4.1", + "@typescript-eslint/parser": "^6.4.1", + "daisyui": "^3.6.1", "drizzle-kit": "^0.19.13", "eslint": "^8.47.0", "eslint-config-next": "^13.4.19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df184ac..c623fc3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,8 +36,8 @@ dependencies: specifier: 10.37.1 version: 10.37.1 '@unkey/api': - specifier: ^0.6.11 - version: 0.6.11 + specifier: ^0.6.13 + version: 0.6.13 '@upstash/ratelimit': specifier: ^0.4.3 version: 0.4.3 @@ -101,20 +101,20 @@ devDependencies: specifier: ^5.0.3 version: 5.0.3 '@types/node': - specifier: ^20.5.1 - version: 20.5.1 + specifier: ^20.5.3 + version: 20.5.3 '@types/react': - specifier: ^18.2.20 - version: 18.2.20 + specifier: ^18.2.21 + version: 18.2.21 '@typescript-eslint/eslint-plugin': - specifier: ^6.4.0 - version: 6.4.0(@typescript-eslint/parser@6.4.0)(eslint@8.47.0)(typescript@5.1.6) + specifier: ^6.4.1 + version: 6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.6) '@typescript-eslint/parser': - specifier: ^6.4.0 - version: 6.4.0(eslint@8.47.0)(typescript@5.1.6) + specifier: ^6.4.1 + version: 6.4.1(eslint@8.47.0)(typescript@5.1.6) daisyui: - specifier: ^3.5.1 - version: 3.5.1 + specifier: ^3.6.1 + version: 3.6.1 drizzle-kit: specifier: ^0.19.13 version: 0.19.13 @@ -1563,7 +1563,7 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: false /@types/cacheable-request@6.0.3: @@ -1571,14 +1571,14 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 20.5.1 + '@types/node': 20.5.3 '@types/responselike': 1.0.0 dev: false /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: false /@types/cookies@0.7.7: @@ -1587,7 +1587,7 @@ packages: '@types/connect': 3.4.35 '@types/express': 4.17.14 '@types/keygrip': 1.0.2 - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: false /@types/eslint@8.44.2: @@ -1604,7 +1604,7 @@ packages: /@types/express-serve-static-core@4.17.35: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: - '@types/node': 20.5.1 + '@types/node': 20.5.3 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -1634,7 +1634,7 @@ packages: /@types/json2csv@5.0.3: resolution: {integrity: sha512-ZJEv6SzhPhgpBpxZU4n/TZekbZqI4EcyXXRwms1lAITG2kIAtj85PfNYafUOY1zy8bWs5ujaub0GU4copaA0sw==} dependencies: - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: true /@types/json5@0.0.29: @@ -1648,7 +1648,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: false /@types/mime@1.3.2: @@ -1662,7 +1662,7 @@ packages: /@types/node-fetch@2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 20.5.1 + '@types/node': 20.5.3 form-data: 3.0.1 dev: false @@ -1674,8 +1674,8 @@ packages: resolution: {integrity: sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==} dev: false - /@types/node@20.5.1: - resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + /@types/node@20.5.3: + resolution: {integrity: sha512-ITI7rbWczR8a/S6qjAW7DMqxqFMjjTo61qZVWJ1ubPvbIQsL5D/TvwjYEalM8Kthpe3hTzOGrF2TGbAu2uyqeA==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -1684,7 +1684,7 @@ packages: /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 20.5.1 + '@types/node': 20.5.3 pg-protocol: 1.6.0 pg-types: 2.2.0 dev: false @@ -1701,8 +1701,8 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: false - /@types/react@18.2.20: - resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} + /@types/react@18.2.21: + resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 @@ -1712,7 +1712,7 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: false /@types/scheduler@0.16.3: @@ -1727,7 +1727,7 @@ packages: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: false /@types/serve-static@1.15.2: @@ -1735,11 +1735,11 @@ packages: dependencies: '@types/http-errors': 2.0.1 '@types/mime': 3.0.1 - '@types/node': 20.5.1 + '@types/node': 20.5.3 dev: false - /@typescript-eslint/eslint-plugin@6.4.0(@typescript-eslint/parser@6.4.0)(eslint@8.47.0)(typescript@5.1.6): - resolution: {integrity: sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==} + /@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1)(eslint@8.47.0)(typescript@5.1.6): + resolution: {integrity: sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1750,11 +1750,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.4.0(eslint@8.47.0)(typescript@5.1.6) - '@typescript-eslint/scope-manager': 6.4.0 - '@typescript-eslint/type-utils': 6.4.0(eslint@8.47.0)(typescript@5.1.6) - '@typescript-eslint/utils': 6.4.0(eslint@8.47.0)(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.4.0 + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.4.1 + '@typescript-eslint/type-utils': 6.4.1(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.4.1 debug: 4.3.4 eslint: 8.47.0 graphemer: 1.4.0 @@ -1767,8 +1767,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.4.0(eslint@8.47.0)(typescript@5.1.6): - resolution: {integrity: sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==} + /@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.1.6): + resolution: {integrity: sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1777,10 +1777,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.4.0 - '@typescript-eslint/types': 6.4.0 - '@typescript-eslint/typescript-estree': 6.4.0(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.4.0 + '@typescript-eslint/scope-manager': 6.4.1 + '@typescript-eslint/types': 6.4.1 + '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.4.1 debug: 4.3.4 eslint: 8.47.0 typescript: 5.1.6 @@ -1788,16 +1788,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.4.0: - resolution: {integrity: sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==} + /@typescript-eslint/scope-manager@6.4.1: + resolution: {integrity: sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.4.0 - '@typescript-eslint/visitor-keys': 6.4.0 + '@typescript-eslint/types': 6.4.1 + '@typescript-eslint/visitor-keys': 6.4.1 dev: true - /@typescript-eslint/type-utils@6.4.0(eslint@8.47.0)(typescript@5.1.6): - resolution: {integrity: sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==} + /@typescript-eslint/type-utils@6.4.1(eslint@8.47.0)(typescript@5.1.6): + resolution: {integrity: sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1806,8 +1806,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.4.0(typescript@5.1.6) - '@typescript-eslint/utils': 6.4.0(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.6) + '@typescript-eslint/utils': 6.4.1(eslint@8.47.0)(typescript@5.1.6) debug: 4.3.4 eslint: 8.47.0 ts-api-utils: 1.0.2(typescript@5.1.6) @@ -1816,13 +1816,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.4.0: - resolution: {integrity: sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==} + /@typescript-eslint/types@6.4.1: + resolution: {integrity: sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.4.0(typescript@5.1.6): - resolution: {integrity: sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==} + /@typescript-eslint/typescript-estree@6.4.1(typescript@5.1.6): + resolution: {integrity: sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1830,8 +1830,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.4.0 - '@typescript-eslint/visitor-keys': 6.4.0 + '@typescript-eslint/types': 6.4.1 + '@typescript-eslint/visitor-keys': 6.4.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1842,8 +1842,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.4.0(eslint@8.47.0)(typescript@5.1.6): - resolution: {integrity: sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==} + /@typescript-eslint/utils@6.4.1(eslint@8.47.0)(typescript@5.1.6): + resolution: {integrity: sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1851,9 +1851,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.4.0 - '@typescript-eslint/types': 6.4.0 - '@typescript-eslint/typescript-estree': 6.4.0(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.4.1 + '@typescript-eslint/types': 6.4.1 + '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.1.6) eslint: 8.47.0 semver: 7.5.4 transitivePeerDependencies: @@ -1861,16 +1861,16 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.4.0: - resolution: {integrity: sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==} + /@typescript-eslint/visitor-keys@6.4.1: + resolution: {integrity: sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.4.0 + '@typescript-eslint/types': 6.4.1 eslint-visitor-keys: 3.4.3 dev: true - /@unkey/api@0.6.11: - resolution: {integrity: sha512-KmltppyG6WIZttav5hQav8XCZ+6hHufvofZWAbrfJv+EO68vRSGajTfxDEKi2KQi6QT39jRdcC91ZIF5+gno0w==} + /@unkey/api@0.6.13: + resolution: {integrity: sha512-fYIph+wLd+lIuYqc2qXjQ52Zm/jDOhsLiZgOPNOlYzESU1ouU5Tm/9PNYb9lXgzeTqL3rU/EWtR8GoLHu/BfjA==} dev: false /@upstash/core-analytics@0.0.6: @@ -2545,8 +2545,8 @@ packages: type: 1.2.0 dev: true - /daisyui@3.5.1: - resolution: {integrity: sha512-7GG+9QXnr2qQMCqnyFU8TxpaOYJigXiEtmzoivmiiZZHvxqIwYdaMAkgivqTVxEgy3Hot3m1suzZjmt1zUrvmA==} + /daisyui@3.6.1: + resolution: {integrity: sha512-H330IdmNoQy0i6ImktBIvIVsyYujl1N2R73rDiWFjgIGPzXIFRMFh2PcmErcSzpLJmZ28jPMEwQJEJaNp6uN5g==} engines: {node: '>=16.9.0'} dependencies: colord: 2.9.3 @@ -3133,11 +3133,11 @@ packages: dependencies: '@next/eslint-plugin-next': 13.4.19 '@rushstack/eslint-patch': 1.3.3 - '@typescript-eslint/parser': 6.4.0(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.6) eslint: 8.47.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.47.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.47.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.47.0) eslint-plugin-react: 7.33.2(eslint@8.47.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.47.0) @@ -3157,7 +3157,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.47.0): + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.47.0): resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3167,8 +3167,8 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.47.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) fast-glob: 3.3.1 get-tsconfig: 4.7.0 is-core-module: 2.13.0 @@ -3180,7 +3180,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3201,16 +3201,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.4.0(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.6) debug: 3.2.7 eslint: 8.47.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.47.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.47.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -3220,7 +3220,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.4.0(eslint@8.47.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.4.1(eslint@8.47.0)(typescript@5.1.6) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 @@ -3229,7 +3229,7 @@ packages: doctrine: 2.1.0 eslint: 8.47.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 diff --git a/src/pages/api/webhooks/index.ts b/src/pages/api/webhooks/index.ts index 6200bc1..974346e 100644 --- a/src/pages/api/webhooks/index.ts +++ b/src/pages/api/webhooks/index.ts @@ -4,7 +4,7 @@ import { onUserDeletedHandler, } from "~/server/webhookHelpers"; import { - WebhookEventBody, + type WebhookEventBody, WebhookEventBodySchema, WebhookEvents, } from "~/utils/types"; @@ -17,7 +17,6 @@ export const config = { export default async function handler(req: NextRequest) { try { const eventBody = (await req.json()) as WebhookEventBody; - console.log(eventBody); const { data, type } = WebhookEventBodySchema.parse(eventBody); let success = false; diff --git a/src/server/unkey.ts b/src/server/unkey.ts index b4f49ba..554e11a 100644 --- a/src/server/unkey.ts +++ b/src/server/unkey.ts @@ -9,7 +9,9 @@ export const validateApiKey = async (key: string) => { const res = await unkey.keys.verify({ key, }); - return res.valid; + // @ts-ignore This is broken... + const isValid = res.result?.valid || (res.valid as boolean); + return isValid; } catch { return false; }