Merged in feat/sw-2859-set-up-shared-trpc-package (pull request #2319)
feat(SW-2859): Create trpc package * Add isEdge, safeTry and dataCache to new common package * Add eslint and move prettier config * Clean up tests * Create trpc package and move initialization * Move errors and a few procedures * Move telemetry to common package * Move tokenManager to common package * Add Sentry to procedures * Clean up procedures * Fix self-referencing imports * Add exports to packages and lint rule to prevent relative imports * Add env to trpc package * Add eslint to trpc package * Apply lint rules * Use direct imports from trpc package * Add lint-staged config to trpc * Move lang enum to common * Restructure trpc package folder structure * Fix lang imports Approved-by: Linus Flood
This commit is contained in:
@@ -2,7 +2,8 @@ import "server-only"
|
||||
|
||||
import { ClientError, type GraphQLClient } from "graphql-request"
|
||||
|
||||
import { Lang } from "@/constants/languages"
|
||||
import { Lang } from "@scandic-hotels/common/constants/language"
|
||||
|
||||
import { env } from "@/env/server"
|
||||
|
||||
import type { DocumentNode } from "graphql"
|
||||
|
||||
@@ -8,10 +8,11 @@ import {
|
||||
import { httpLink, loggerLink, TRPCClientError } from "@trpc/client"
|
||||
import { useState } from "react"
|
||||
|
||||
import { SessionExpiredError } from "@scandic-hotels/trpc/errors"
|
||||
import { transformer } from "@scandic-hotels/trpc/transformer"
|
||||
|
||||
import { login } from "@/constants/routes/handleAuth"
|
||||
import { env } from "@/env/client"
|
||||
import { SessionExpiredError } from "@/server/errors/trpc"
|
||||
import { transformer } from "@/server/transformer"
|
||||
|
||||
import useLang from "@/hooks/useLang"
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ import { cache } from "@/utils/cache"
|
||||
|
||||
import { serverClient } from "../server"
|
||||
|
||||
import type { Lang } from "@scandic-hotels/common/constants/language"
|
||||
|
||||
import type { Country } from "@/types/enums/country"
|
||||
import type {
|
||||
AncillaryPackagesInput,
|
||||
@@ -18,7 +20,6 @@ import type {
|
||||
CityCoordinatesInput,
|
||||
HotelInput,
|
||||
} from "@/types/trpc/routers/hotel/hotel"
|
||||
import type { Lang } from "@/constants/languages"
|
||||
import type { GetHotelsByCSFilterInput } from "@/server/routers/hotels/input"
|
||||
import type { GetSavedPaymentCardsInput } from "@/server/routers/user/input"
|
||||
|
||||
|
||||
@@ -1,18 +1,57 @@
|
||||
import * as Sentry from "@sentry/nextjs"
|
||||
import { TRPCError } from "@trpc/server"
|
||||
import { cookies, headers } from "next/headers"
|
||||
import { redirect } from "next/navigation"
|
||||
|
||||
import { Lang } from "@/constants/languages"
|
||||
import { Lang } from "@scandic-hotels/common/constants/language"
|
||||
import { createCallerFactory } from "@scandic-hotels/trpc"
|
||||
import { createContext } from "@scandic-hotels/trpc/context"
|
||||
|
||||
import { login } from "@/constants/routes/handleAuth"
|
||||
import { webviews } from "@/constants/routes/webviews"
|
||||
import { appRouter } from "@/server"
|
||||
import { createContext } from "@/server/context"
|
||||
import { createCallerFactory } from "@/server/trpc"
|
||||
|
||||
import { auth } from "@/auth"
|
||||
|
||||
import type { Session } from "next-auth"
|
||||
|
||||
const createCaller = createCallerFactory(appRouter)
|
||||
|
||||
export async function createAppContext() {
|
||||
const headersList = await headers()
|
||||
const cookie = await cookies()
|
||||
const webviewTokenCookie = cookie.get("webviewToken")
|
||||
const loginType = headersList.get("loginType")
|
||||
|
||||
const ctx = createContext({
|
||||
lang: headersList.get("x-lang") as Lang,
|
||||
pathname: headersList.get("x-pathname")!,
|
||||
uid: headersList.get("x-uid"),
|
||||
url: headersList.get("x-url")!,
|
||||
webToken: webviewTokenCookie?.value,
|
||||
contentType: headersList.get("x-contenttype")!,
|
||||
auth: async () => {
|
||||
const session = await auth()
|
||||
const webToken = webviewTokenCookie?.value
|
||||
if (!session?.token && !webToken) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
session ||
|
||||
({
|
||||
token: { access_token: webToken, loginType },
|
||||
} as Session)
|
||||
)
|
||||
},
|
||||
})
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
export async function serverClient() {
|
||||
const ctx = await createContext()
|
||||
const ctx = await createAppContext()
|
||||
|
||||
return createCaller(ctx, {
|
||||
onError: ({ ctx, error, input, path, type }) => {
|
||||
console.error(`[serverClient] error for ${type}: ${path}`, error)
|
||||
|
||||
Reference in New Issue
Block a user