diff --git a/package.json b/package.json index 572a433..1379b98 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ }, "dependencies": { "@ably-labs/react-hooks": "^2.1.1", - "@clerk/nextjs": "^4.23.2", + "@clerk/nextjs": "^4.23.3", "@neondatabase/serverless": "^0.6.0", "@paralleldrive/cuid2": "^2.2.2", "@react-email/components": "^0.0.7", @@ -37,7 +37,6 @@ "react-dom": "18.2.0", "react-email": "^1.9.4", "react-icons": "^4.10.1", - "resend": "^1.0.0", "sharp": "^0.32.5", "superjson": "1.13.1", "zod": "^3.22.2" @@ -49,15 +48,15 @@ "@types/react": "^18.2.21", "@typescript-eslint/eslint-plugin": "^6.4.1", "@typescript-eslint/parser": "^6.4.1", + "bufferutil": "^4.0.7", "daisyui": "^3.6.3", "drizzle-kit": "^0.19.13", "eslint": "^8.48.0", "eslint-config-next": "^13.4.19", "pg": "^8.11.3", "tailwindcss": "^3.3.3", - "typescript": "^5.2.2" - }, - "ct3aMetadata": { - "initVersion": "7.5.9" + "typescript": "^5.2.2", + "utf-8-validate": "5.0.2", + "ws": "^8.13.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98c5a6c..b523c86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,10 +7,10 @@ settings: dependencies: '@ably-labs/react-hooks': specifier: ^2.1.1 - version: 2.1.1(react-dom@18.2.0)(react@18.2.0) + version: 2.1.1(bufferutil@4.0.7)(react-dom@18.2.0)(react@18.2.0)(utf-8-validate@5.0.2) '@clerk/nextjs': - specifier: ^4.23.2 - version: 4.23.2(next@13.4.19)(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.23.3 + version: 4.23.3(next@13.4.19)(react-dom@18.2.0)(react@18.2.0) '@neondatabase/serverless': specifier: ^0.6.0 version: 0.6.0 @@ -77,9 +77,6 @@ dependencies: react-icons: specifier: ^4.10.1 version: 4.10.1(react@18.2.0) - resend: - specifier: ^1.0.0 - version: 1.0.0 sharp: specifier: ^0.32.5 version: 0.32.5 @@ -109,6 +106,9 @@ devDependencies: '@typescript-eslint/parser': specifier: ^6.4.1 version: 6.4.1(eslint@8.48.0)(typescript@5.2.2) + bufferutil: + specifier: ^4.0.7 + version: 4.0.7 daisyui: specifier: ^3.6.3 version: 3.6.3 @@ -130,6 +130,12 @@ devDependencies: typescript: specifier: ^5.2.2 version: 5.2.2 + utf-8-validate: + specifier: 5.0.2 + version: 5.0.2 + ws: + specifier: ^8.13.0 + version: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.2) packages: @@ -138,13 +144,13 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@ably-labs/react-hooks@2.1.1(react-dom@18.2.0)(react@18.2.0): + /@ably-labs/react-hooks@2.1.1(bufferutil@4.0.7)(react-dom@18.2.0)(react@18.2.0)(utf-8-validate@5.0.2): resolution: {integrity: sha512-Bunqu9GDFInZLpFMfWhUboU1g4W5UXzDfeAqI9ueNIF3p9KIMS7LfgjKBfXsC0DtAWkBgCjL22PvNToiHP92Ig==} peerDependencies: react: '>=18.1.0' react-dom: '>=18.1.0' dependencies: - ably: 1.2.43 + ably: 1.2.43(bufferutil@4.0.7)(utf-8-validate@5.0.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -191,11 +197,11 @@ packages: dependencies: regenerator-runtime: 0.14.0 - /@clerk/backend@0.27.0: - resolution: {integrity: sha512-Sj541JrpqAn1A/UwdyDBxFV3stq2A/Pe/8HdPTG3Cct6briPyavfi46O5s1+L3BSvUcKUY+UbM0+8VsoCNFi4w==} + /@clerk/backend@0.28.0: + resolution: {integrity: sha512-2HbpJljKhz6642cyIcL3NE/QUQM1Ty4Vm7h9Pc/PsmuINfb6DI2HaP29INb6bt8GiY9xbrJcGOkMfBS9iHCTMQ==} engines: {node: '>=14'} dependencies: - '@clerk/types': 3.49.0 + '@clerk/types': 3.50.0 '@peculiar/webcrypto': 1.4.1 '@types/node': 16.18.6 cookie: 0.5.0 @@ -205,24 +211,24 @@ packages: tslib: 2.4.1 dev: false - /@clerk/clerk-react@4.23.2(react@18.2.0): - resolution: {integrity: sha512-6MJa8ecr22qHhTfdkMMIJGctMBqj01fLJ4vmfZvr22tIkwkPXoeYJd5XcFKuSoO2dXc1eHD/F9i/HdCqGm68gw==} + /@clerk/clerk-react@4.24.0(react@18.2.0): + resolution: {integrity: sha512-D2NtrMrDuoLvgTn0jtZEpmCn13heMkmdy30HzoOxmNOmHiVuQ16L/eZyCO1HH1DH2pcJnpXIuC0OdQg26DDK6g==} engines: {node: '>=14'} peerDependencies: react: '>=16' dependencies: - '@clerk/shared': 0.21.0(react@18.2.0) - '@clerk/types': 3.49.0 + '@clerk/shared': 0.22.0(react@18.2.0) + '@clerk/types': 3.50.0 react: 18.2.0 tslib: 2.4.1 dev: false - /@clerk/clerk-sdk-node@4.12.2: - resolution: {integrity: sha512-7xYPsLSeGO5XoP0No/9m2dsCMezwtmiYGKOwWzt41ZzJNFlU0rfqYF3VOZEsbtQlc3ZXeU+67ItjoJYrf3kT6A==} + /@clerk/clerk-sdk-node@4.12.3: + resolution: {integrity: sha512-IchaYk1tfT+bJz6LeC+WGJlFB0y1HNQbxnPKfsZMojZgWe68cK1TDF/n5w+4FKjUiRj2vNbewDoVUZhKZrRPnw==} engines: {node: '>=14'} dependencies: - '@clerk/backend': 0.27.0 - '@clerk/types': 3.49.0 + '@clerk/backend': 0.28.0 + '@clerk/types': 3.50.0 '@types/cookies': 0.7.7 '@types/express': 4.17.14 '@types/node-fetch': 2.6.2 @@ -231,18 +237,18 @@ packages: tslib: 2.4.1 dev: false - /@clerk/nextjs@4.23.2(next@13.4.19)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-99bSVu9r1E9MxybO/6mmPAufSKq4KU7SFeMVkylX7UF8sy5t/LE9cLHyc+9jitcCGgZNai9Om4sj1WIgkNOP8w==} + /@clerk/nextjs@4.23.3(next@13.4.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-q8CWhPnqzG6KHII0thghQGhR/kZhEISupr0AuJDSrp7X0dpeFo0BdaBDOwD6MLe5c1wzJSr3yXGnyaxf3yj8FA==} engines: {node: '>=14'} peerDependencies: next: '>=10' react: ^17.0.2 || ^18.0.0-0 react-dom: ^17.0.2 || ^18.0.0-0 dependencies: - '@clerk/backend': 0.27.0 - '@clerk/clerk-react': 4.23.2(react@18.2.0) - '@clerk/clerk-sdk-node': 4.12.2 - '@clerk/types': 3.49.0 + '@clerk/backend': 0.28.0 + '@clerk/clerk-react': 4.24.0(react@18.2.0) + '@clerk/clerk-sdk-node': 4.12.3 + '@clerk/types': 3.50.0 next: 13.4.19(react-dom@18.2.0)(react@18.2.0) path-to-regexp: 6.2.1 react: 18.2.0 @@ -250,19 +256,19 @@ packages: tslib: 2.4.1 dev: false - /@clerk/shared@0.21.0(react@18.2.0): - resolution: {integrity: sha512-tkV2OAddFMPBHDjcMbtNNrV3NQD+hGKf2hn3TKv1mRJNZ2oR5Bfk8r0bkaqwoqxX8ndkbHLCa9gwR8SWO7GGow==} + /@clerk/shared@0.22.0(react@18.2.0): + resolution: {integrity: sha512-AHPypu9gZ3v44PRqiMA56c+YNLc2IzLaPUyiYFYU+xeH/R+wqzGp7OxZoZr/kmzgA8taiVl/bjixWgpuZwzI3A==} peerDependencies: react: '>=16' dependencies: glob-to-regexp: 0.4.1 js-cookie: 3.0.1 react: 18.2.0 - swr: 1.3.0(react@18.2.0) + swr: 2.2.0(react@18.2.0) dev: false - /@clerk/types@3.49.0: - resolution: {integrity: sha512-vAx5R/iYfsgIaIDMiDr6ZKQnAneAmRrUVYz6KCtPG6/hnEAnRYhwXpEUi89e5G0BFmuUfSxe/N/Anfc1PNteXQ==} + /@clerk/types@3.50.0: + resolution: {integrity: sha512-3TWalDWPTFToXC/W07QUIBN96TA+4dR3YLBvwr9U2Z4RVG9in9HW4CTC6aHTnJ2kVtTcgDkXjDKeVKS1GjPCcA==} engines: {node: '>=14'} dependencies: csstype: 3.1.1 @@ -280,17 +286,17 @@ packages: resolution: {integrity: sha512-ps5qF0tMxWRVu+V5gvCRrQNqlY92aTnIKdq27gm9LZMSdaKYZt6AVvSK1dlUMzs6Rt0Jm80b+eWct6xShBKhIw==} dev: true - /@esbuild-kit/core-utils@3.1.0: - resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} + /@esbuild-kit/core-utils@3.2.2: + resolution: {integrity: sha512-Ub6LaRaAgF80dTSzUdXpFLM1pVDdmEVB9qb5iAzSpyDlX/mfJTFGOnZ516O05p5uWWteNviMKi4PAyEuRxI5gA==} dependencies: - esbuild: 0.17.19 + esbuild: 0.18.20 source-map-support: 0.5.21 dev: true /@esbuild-kit/esm-loader@2.5.5: resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} dependencies: - '@esbuild-kit/core-utils': 3.1.0 + '@esbuild-kit/core-utils': 3.2.2 get-tsconfig: 4.7.0 dev: true @@ -303,15 +309,6 @@ packages: dev: false optional: true - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -330,15 +327,6 @@ packages: dev: false optional: true - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -357,15 +345,6 @@ packages: dev: false optional: true - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -384,15 +363,6 @@ packages: dev: false optional: true - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -411,15 +381,6 @@ packages: dev: false optional: true - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -438,15 +399,6 @@ packages: dev: false optional: true - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -465,15 +417,6 @@ packages: dev: false optional: true - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -492,15 +435,6 @@ packages: dev: false optional: true - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -519,15 +453,6 @@ packages: dev: false optional: true - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -546,15 +471,6 @@ packages: dev: false optional: true - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -573,15 +489,6 @@ packages: dev: false optional: true - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -600,15 +507,6 @@ packages: dev: false optional: true - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -627,15 +525,6 @@ packages: dev: false optional: true - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -654,15 +543,6 @@ packages: dev: false optional: true - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -681,15 +561,6 @@ packages: dev: false optional: true - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -708,15 +579,6 @@ packages: dev: false optional: true - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -735,15 +597,6 @@ packages: dev: false optional: true - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -762,15 +615,6 @@ packages: dev: false optional: true - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -789,15 +633,6 @@ packages: dev: false optional: true - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -816,15 +651,6 @@ packages: dev: false optional: true - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -843,15 +669,6 @@ packages: dev: false optional: true - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -870,15 +687,6 @@ packages: dev: false optional: true - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -1716,8 +1524,8 @@ packages: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} dev: true - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.1: + resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} dev: true /@types/send@0.17.1: @@ -1847,7 +1655,7 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 + '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 6.4.1 '@typescript-eslint/types': 6.4.1 '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) @@ -1899,13 +1707,13 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: false - /ably@1.2.43: + /ably@1.2.43(bufferutil@4.0.7)(utf-8-validate@5.0.2): resolution: {integrity: sha512-HZ99Nd98KzYToNUD4+ysHp4+vMp1NmYTi59yqGpejHo/VffTgg0pereoib0nRRAHYUhGUGys5HGwR5yHYESWDA==} engines: {node: '>=5.10.x'} dependencies: '@ably/msgpack-js': 0.4.0 got: 11.8.6 - ws: 5.2.3 + ws: 5.2.3(bufferutil@4.0.7)(utf-8-validate@5.0.2) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -2242,6 +2050,13 @@ packages: engines: {node: '>=0.2.0'} dev: false + /bufferutil@4.0.7: + resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.6.1 + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -3044,36 +2859,6 @@ packages: '@esbuild/win32-x64': 0.16.4 dev: false - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: true - /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -3233,7 +3018,7 @@ packages: minimatch: 3.1.2 object.fromentries: 2.0.6 object.groupby: 1.0.0 - object.values: 1.1.6 + object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -3262,7 +3047,7 @@ packages: jsx-ast-utils: 3.3.5 language-tags: 1.0.5 minimatch: 3.1.2 - object.entries: 1.1.6 + object.entries: 1.1.7 object.fromentries: 2.0.6 semver: 6.3.1 dev: true @@ -3291,10 +3076,10 @@ packages: estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.6 + object.entries: 1.1.7 object.fromentries: 2.0.6 object.hasown: 1.1.2 - object.values: 1.1.6 + object.values: 1.1.7 prop-types: 15.8.1 resolve: 2.0.0-next.4 semver: 6.3.1 @@ -4285,7 +4070,7 @@ packages: array-includes: 3.1.6 array.prototype.flat: 1.3.1 object.assign: 4.1.4 - object.values: 1.1.6 + object.values: 1.1.7 dev: true /keyv@4.5.3: @@ -4599,18 +4384,6 @@ packages: resolution: {integrity: sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==} dev: false - /node-fetch@2.6.12: - resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -4623,6 +4396,14 @@ packages: whatwg-url: 5.0.0 dev: false + /node-gyp-build@3.7.0: + resolution: {integrity: sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==} + hasBin: true + + /node-gyp-build@4.6.1: + resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} + hasBin: true + /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: false @@ -4692,8 +4473,8 @@ packages: object-keys: 1.1.1 dev: true - /object.entries@1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -4726,8 +4507,8 @@ packages: es-abstract: 1.22.1 dev: true - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -5029,7 +4810,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.28 - yaml: 2.3.1 + yaml: 2.3.2 dev: true /postcss-nested@6.0.0(postcss@8.4.21): @@ -5359,17 +5140,6 @@ packages: functions-have-names: 1.2.3 dev: true - /resend@1.0.0: - resolution: {integrity: sha512-8LEE4gncmcm8bsvxvahZFpFk5hxUrKdagqWoX/MRXVU2YZ9coYxqZDeDYXG9pexz1A694bjE1hiQbBAA+bHAow==} - engines: {node: '>=16'} - dependencies: - '@react-email/render': 0.0.7 - node-fetch: 2.6.12 - type-fest: 3.13.0 - transitivePeerDependencies: - - encoding - dev: false - /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: false @@ -5793,12 +5563,13 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /swr@1.3.0(react@18.2.0): - resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} + /swr@2.2.0(react@18.2.0): + resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 dependencies: react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) dev: false /tailwindcss@3.2.7(postcss@8.4.21): @@ -6043,11 +5814,6 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@3.13.0: - resolution: {integrity: sha512-Gur3yQGM9qiLNs0KPP7LPgeRbio2QTt4xXouobMCarR0/wyW3F+F/+OWwshg3NG0Adon7uQfSZBpB46NfhoF1A==} - engines: {node: '>=14.16'} - dev: false - /type@1.2.0: resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} dev: true @@ -6163,6 +5929,12 @@ packages: react: 18.2.0 dev: false + /utf-8-validate@5.0.2: + resolution: {integrity: sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==} + requiresBuild: true + dependencies: + node-gyp-build: 3.7.0 + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -6279,7 +6051,7 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /ws@5.2.3: + /ws@5.2.3(bufferutil@4.0.7)(utf-8-validate@5.0.2): resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==} peerDependencies: bufferutil: ^4.0.1 @@ -6291,8 +6063,26 @@ packages: optional: true dependencies: async-limiter: 1.0.1 + bufferutil: 4.0.7 + utf-8-validate: 5.0.2 dev: false + /ws@8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.2): + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + 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 + dependencies: + bufferutil: 4.0.7 + utf-8-validate: 5.0.2 + dev: true + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -6305,8 +6095,8 @@ packages: engines: {node: '>= 6'} dev: false - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + /yaml@2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} engines: {node: '>= 14'} dev: true diff --git a/src/components/Footer.tsx b/src/app/_components/Footer.tsx similarity index 93% rename from src/components/Footer.tsx rename to src/app/_components/Footer.tsx index 03d153e..ed59472 100644 --- a/src/components/Footer.tsx +++ b/src/app/_components/Footer.tsx @@ -1,5 +1,7 @@ +"use client"; + import { GiTechnoHeart } from "react-icons/gi"; -import packagejson from "../../package.json"; +import packagejson from "../../../package.json"; const Footer = () => { return ( diff --git a/src/components/Navbar.tsx b/src/app/_components/Navbar.tsx similarity index 91% rename from src/components/Navbar.tsx rename to src/app/_components/Navbar.tsx index 8524ddb..1efac23 100644 --- a/src/components/Navbar.tsx +++ b/src/app/_components/Navbar.tsx @@ -1,7 +1,9 @@ +"use client"; + import { UserButton, useUser } from "@clerk/nextjs"; import Image from "next/image"; import Link from "next/link"; -import { useRouter } from "next/router"; +import { useRouter, usePathname } from "next/navigation"; import { env } from "~/env.mjs"; interface NavbarProps { @@ -11,9 +13,10 @@ interface NavbarProps { const Navbar = ({ title }: NavbarProps) => { const { isLoaded, isSignedIn } = useUser(); const router = useRouter(); + const pathname = usePathname(); const navigationMenu = () => { - if (router.pathname !== "/dashboard" && isSignedIn) { + if (pathname !== "/dashboard" && isSignedIn) { return ( Dashboard diff --git a/src/components/RoomList.tsx b/src/app/_components/RoomList.tsx similarity index 94% rename from src/components/RoomList.tsx rename to src/app/_components/RoomList.tsx index f59bf7a..5763669 100644 --- a/src/components/RoomList.tsx +++ b/src/app/_components/RoomList.tsx @@ -1,10 +1,14 @@ +"use client"; + import Link from "next/link"; import { configureAbly, useChannel } from "@ably-labs/react-hooks"; import { useState } from "react"; import { IoEnterOutline, IoTrashBinOutline } from "react-icons/io5"; import { env } from "~/env.mjs"; -import { api } from "~/utils/api"; import { useUser } from "@clerk/nextjs"; +import { trpc } from "../_trpc/client"; + +export const dynamic = "force-dynamic"; const RoomList = () => { const { isSignedIn, user } = useUser(); @@ -25,11 +29,11 @@ const RoomList = () => { const [roomName, setRoomName] = useState(""); const { data: roomsFromDb, refetch: refetchRoomsFromDb } = - api.room.getAll.useQuery(undefined, { + trpc.room.getAll.useQuery(undefined, { enabled: isSignedIn, }); - const createRoom = api.room.create.useMutation({}); + const createRoom = trpc.room.create.useMutation({}); const createRoomHandler = () => { createRoom.mutate({ name: roomName }); @@ -39,7 +43,7 @@ const RoomList = () => { false; }; - const deleteRoom = api.room.delete.useMutation({}); + const deleteRoom = trpc.room.delete.useMutation({}); const deleteRoomHandler = (roomId: string) => { if (isSignedIn) { diff --git a/src/app/_trpc/Provider.tsx b/src/app/_trpc/Provider.tsx new file mode 100644 index 0000000..4f531ff --- /dev/null +++ b/src/app/_trpc/Provider.tsx @@ -0,0 +1,27 @@ +"use client"; + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { httpLink } from "@trpc/client"; +import React, { useState } from "react"; +import superjson from "superjson"; + +import { trpc } from "./client"; + +export default function Provider({ children }: { children: React.ReactNode }) { + const [queryClient] = useState(() => new QueryClient({})); + const [trpcClient] = useState(() => + trpc.createClient({ + links: [ + httpLink({ + url: "/api/trpc", + }), + ], + transformer: superjson, + }) + ); + return ( + + {children} + + ); +} diff --git a/src/app/_trpc/client.ts b/src/app/_trpc/client.ts new file mode 100644 index 0000000..dec3bb5 --- /dev/null +++ b/src/app/_trpc/client.ts @@ -0,0 +1,5 @@ +import { createTRPCReact } from "@trpc/react-query"; + +import { type AppRouter } from "~/server/trpc"; + +export const trpc = createTRPCReact({}); diff --git a/src/pages/api/private/ping.ts b/src/app/api/private/ping/route.ts similarity index 56% rename from src/pages/api/private/ping.ts rename to src/app/api/private/ping/route.ts index ca89e26..bf4b910 100644 --- a/src/pages/api/private/ping.ts +++ b/src/app/api/private/ping/route.ts @@ -1,13 +1,13 @@ import { NextResponse } from "next/server"; -export const config = { - runtime: "edge", - regions: ["pdx1"], -}; +export const runtime = "edge"; +export const preferredRegion = ["pdx1"]; -export default function handler() { +function handler() { return NextResponse.json( { message: "Private Pong!" }, { status: 200, statusText: "SUCCESS" } ); } + +export { handler as GET }; diff --git a/src/pages/api/public/ping.ts b/src/app/api/public/ping/route.ts similarity index 56% rename from src/pages/api/public/ping.ts rename to src/app/api/public/ping/route.ts index e5b6a76..a1e4d0c 100644 --- a/src/pages/api/public/ping.ts +++ b/src/app/api/public/ping/route.ts @@ -1,13 +1,13 @@ import { NextResponse } from "next/server"; -export const config = { - runtime: "edge", - regions: ["pdx1"], -}; +export const runtime = "edge"; +export const preferredRegion = ["pdx1"]; -export default function handler() { +function handler() { return NextResponse.json( { message: "Public Pong!" }, { status: 200, statusText: "SUCCESS" } ); } + +export { handler as GET }; diff --git a/src/app/api/trpc/[trpc]/route.ts b/src/app/api/trpc/[trpc]/route.ts new file mode 100644 index 0000000..d718e85 --- /dev/null +++ b/src/app/api/trpc/[trpc]/route.ts @@ -0,0 +1,20 @@ +import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; + +import { appRouter } from "~/server/trpc"; +import { createTRPCContext } from "~/server/trpc/trpc"; + +export const runtime = "edge"; +export const preferredRegion = ["pdx1"]; + +const handler = (req: Request) => + fetchRequestHandler({ + endpoint: "/api/trpc", + req, + router: appRouter, + createContext: createTRPCContext, + batching: { + enabled: false, + }, + }); + +export { handler as GET, handler as POST }; diff --git a/src/pages/api/webhooks/index.ts b/src/app/api/webhooks/route.ts similarity index 81% rename from src/pages/api/webhooks/index.ts rename to src/app/api/webhooks/route.ts index 3448640..ac5c10f 100644 --- a/src/pages/api/webhooks/index.ts +++ b/src/app/api/webhooks/route.ts @@ -9,12 +9,10 @@ import { WebhookEvents, } from "~/utils/types"; -export const config = { - runtime: "edge", - regions: ["pdx1"], -}; +export const runtime = "edge"; +export const preferredRegion = ["pdx1"]; -export default async function handler(req: NextRequest) { +async function handler(req: NextRequest) { try { const eventBody = (await req.json()) as WebhookEventBody; const { data, type } = WebhookEventBodySchema.parse(eventBody); @@ -22,11 +20,7 @@ export default async function handler(req: NextRequest) { switch (type) { case WebhookEvents.USER_CREATED: - success = await onUserCreatedHandler( - data.id, - data.email_addresses?.map((email) => email.email_address) || [], - `${data.first_name} ${data.last_name}` - ); + success = await onUserCreatedHandler(data.id); if (success) { return NextResponse.json( { result: "USER CREATED" }, @@ -61,3 +55,5 @@ export default async function handler(req: NextRequest) { ); } } + +export { handler as POST }; diff --git a/src/pages/dashboard/index.tsx b/src/app/dashboard/page.tsx similarity index 97% rename from src/pages/dashboard/index.tsx rename to src/app/dashboard/page.tsx index f6a691d..53ca088 100644 --- a/src/pages/dashboard/index.tsx +++ b/src/app/dashboard/page.tsx @@ -1,7 +1,9 @@ +"use client"; + import type { NextPage } from "next"; import Head from "next/head"; -import RoomList from "~/components/RoomList"; +import RoomList from "~/app/_components/RoomList"; import Link from "next/link"; import { useEffect, useState } from "react"; diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..5b982a7 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,29 @@ +import { ClerkProvider } from "@clerk/nextjs"; +import Footer from "~/app/_components/Footer"; +import Navbar from "~/app/_components/Navbar"; +import "~/styles/globals.css"; +import Provider from "./_trpc/Provider"; + +export const metadata = { + title: "Next.js 13 with Clerk", +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + +
+ {children} +
+