mirror of
https://github.com/lukevella/rallly.git
synced 2025-04-29 02:06:34 +02:00
♻️ Migrate trpc route to app directory (#1488)
This commit is contained in:
parent
285860ec9e
commit
a896d16c3c
4 changed files with 51 additions and 69 deletions
|
@ -44,7 +44,7 @@
|
|||
"@trpc/server": "^10.13.0",
|
||||
"@upstash/qstash": "^2.7.17",
|
||||
"@upstash/ratelimit": "^1.2.1",
|
||||
"@vercel/functions": "^1.0.2",
|
||||
"@vercel/functions": "^1.5.2",
|
||||
"@vercel/kv": "^2.0.0",
|
||||
"accept-language-parser": "^1.5.0",
|
||||
"autoprefixer": "^10.4.13",
|
||||
|
@ -77,7 +77,6 @@
|
|||
"react-i18next": "^12.1.4",
|
||||
"react-remove-scroll": "^2.5.6",
|
||||
"react-use": "^17.4.0",
|
||||
"request-ip": "^3.3.0",
|
||||
"smoothscroll-polyfill": "^0.4.4",
|
||||
"spacetime": "^7.4.7",
|
||||
"superjson": "^2.0.0",
|
||||
|
@ -91,7 +90,6 @@
|
|||
"@types/color-hash": "^1.0.2",
|
||||
"@types/lodash": "^4.14.178",
|
||||
"@types/react-big-calendar": "^1.8.8",
|
||||
"@types/request-ip": "^0.0.41",
|
||||
"@types/smoothscroll-polyfill": "^0.3.1",
|
||||
"cheerio": "^1.0.0-rc.12",
|
||||
"cross-env": "^7.0.3",
|
||||
|
|
46
apps/web/src/app/api/trpc/[trpc]/route.ts
Normal file
46
apps/web/src/app/api/trpc/[trpc]/route.ts
Normal file
|
@ -0,0 +1,46 @@
|
|||
import * as Sentry from "@sentry/nextjs";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
|
||||
import { ipAddress } from "@vercel/functions";
|
||||
|
||||
import { getServerSession } from "@/auth";
|
||||
import type { TRPCContext } from "@/trpc/context";
|
||||
import { appRouter } from "@/trpc/routers";
|
||||
import { getEmailClient } from "@/utils/emails";
|
||||
|
||||
const handler = (request: Request) => {
|
||||
return fetchRequestHandler({
|
||||
endpoint: "/api/trpc",
|
||||
req: request,
|
||||
router: appRouter,
|
||||
createContext: async () => {
|
||||
const session = await getServerSession();
|
||||
|
||||
if (!session?.user) {
|
||||
throw new TRPCError({
|
||||
code: "UNAUTHORIZED",
|
||||
message: "Unauthorized",
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
user: {
|
||||
id: session.user.id,
|
||||
isGuest: session.user.email === null,
|
||||
locale: session.user.locale ?? undefined,
|
||||
image: session.user.image ?? undefined,
|
||||
getEmailClient: () =>
|
||||
getEmailClient(session.user?.locale ?? undefined),
|
||||
},
|
||||
ip: ipAddress(request) ?? undefined,
|
||||
} satisfies TRPCContext;
|
||||
},
|
||||
onError({ error }) {
|
||||
if (error.code === "INTERNAL_SERVER_ERROR") {
|
||||
Sentry.captureException(error);
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export { handler as GET, handler as POST };
|
|
@ -1,50 +0,0 @@
|
|||
import { posthogApiHandler } from "@rallly/posthog/server";
|
||||
import * as Sentry from "@sentry/nextjs";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { createNextApiHandler } from "@trpc/server/adapters/next";
|
||||
import requestIp from "request-ip";
|
||||
|
||||
import { getServerSession } from "@/auth";
|
||||
import type { TRPCContext } from "@/trpc/context";
|
||||
import type { AppRouter } from "@/trpc/routers";
|
||||
import { appRouter } from "@/trpc/routers";
|
||||
import { getEmailClient } from "@/utils/emails";
|
||||
import { composeApiHandlers } from "@/utils/next";
|
||||
|
||||
export const config = {
|
||||
api: {
|
||||
externalResolver: true,
|
||||
},
|
||||
};
|
||||
|
||||
const trpcApiHandler = createNextApiHandler<AppRouter>({
|
||||
router: appRouter,
|
||||
createContext: async (opts) => {
|
||||
const session = await getServerSession(opts.req, opts.res);
|
||||
|
||||
if (!session) {
|
||||
throw new TRPCError({
|
||||
code: "UNAUTHORIZED",
|
||||
message: "Unauthorized",
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
user: {
|
||||
id: session.user.id,
|
||||
isGuest: session.user.email === null,
|
||||
locale: session.user.locale ?? undefined,
|
||||
image: session.user.image ?? undefined,
|
||||
getEmailClient: () => getEmailClient(session.user.locale ?? undefined),
|
||||
},
|
||||
ip: requestIp.getClientIp(opts.req) ?? undefined,
|
||||
} satisfies TRPCContext;
|
||||
},
|
||||
onError({ error }) {
|
||||
if (error.code === "INTERNAL_SERVER_ERROR") {
|
||||
Sentry.captureException(error);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export default composeApiHandlers(trpcApiHandler, posthogApiHandler);
|
20
yarn.lock
20
yarn.lock
|
@ -6784,13 +6784,6 @@
|
|||
"@types/scheduler" "*"
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@types/request-ip@^0.0.41":
|
||||
version "0.0.41"
|
||||
resolved "https://registry.yarnpkg.com/@types/request-ip/-/request-ip-0.0.41.tgz#c22a3244df2573402989346062851b06b7a5ac4e"
|
||||
integrity sha512-Qzz0PM2nSZej4lsLzzNfADIORZhhxO7PED0fXpg4FjXiHuJ/lMyUg+YFF5q8x9HPZH3Gl6N+NOM8QZjItNgGKg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/scheduler@*":
|
||||
version "0.16.2"
|
||||
resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz"
|
||||
|
@ -7023,10 +7016,10 @@
|
|||
resolved "https://registry.yarnpkg.com/@vercel/functions/-/functions-1.4.1.tgz#d1a81c27f7eb5b5b2ca412a8a4e682e4cfbea32d"
|
||||
integrity sha512-987mKpoDCI18x2rDjrDbiuGOtxDMK/UhfhDZoN3A2SAt40BMaj8HEKwVqL6fOian5j/3RZcOuJnMOpatQGgpjw==
|
||||
|
||||
"@vercel/functions@^1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@vercel/functions/-/functions-1.0.2.tgz#c26ed4e3b0ed701e28c4ebd71c76b1bfe14db02a"
|
||||
integrity sha512-j3udyHOv/05Y8o3WQ/ANMWa1aYagsY5B3ouImiwgYsz5z4CBUHTY5dk74oQAXYr+bgoVDpdDlmxkpnxGzKEdLQ==
|
||||
"@vercel/functions@^1.5.2":
|
||||
version "1.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@vercel/functions/-/functions-1.5.2.tgz#9adf248fc76e082055e70543791842a1e460eb40"
|
||||
integrity sha512-9XuynFoM/J1X+LSahgjhuAZCbZ96vm9mpXapCkSS1MX890U7zLh7n2RW/2KLNuxsXt8u8h2dOCw+Njtg+7pXgQ==
|
||||
|
||||
"@vercel/kv@^2.0.0":
|
||||
version "2.0.0"
|
||||
|
@ -13131,11 +13124,6 @@ replace-ext@^1.0.0:
|
|||
resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz"
|
||||
integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==
|
||||
|
||||
request-ip@^3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-3.3.0.tgz#863451e8fec03847d44f223e30a5d63e369fa611"
|
||||
integrity sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==
|
||||
|
||||
require-in-the-middle@^7.1.1:
|
||||
version "7.3.0"
|
||||
resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz#ce64a1083647dc07b3273b348357efac8a9945c9"
|
||||
|
|
Loading…
Add table
Reference in a new issue