From 7de8a184b7766de5513d3ada395e2e890d73a487 Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Wed, 21 Aug 2024 15:43:19 +0200 Subject: [PATCH 1/5] fix: improve logging for api requests --- server/routers/hotels/query.ts | 38 +++++++---- server/routers/user/query.ts | 111 +++++++++++++++++++-------------- 2 files changed, 92 insertions(+), 57 deletions(-) diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index d6f400abf..3c76cfdd9 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -32,6 +32,7 @@ export const hotelQueryRouter = router({ params.include = include.join(",") } + console.log("api.hotels.hotel start") const apiResponse = await api.get( `${api.endpoints.v1.hotels}/${hotelId}`, { @@ -44,16 +45,17 @@ export const hotelQueryRouter = router({ ) if (!apiResponse.ok) { - console.info(`API Response Failed - Getting Hotel`) - console.error(apiResponse) + console.error("api.hotels.hotel error, ", JSON.stringify(apiResponse)) return null } const apiJson = await apiResponse.json() const validatedHotelData = getHotelDataSchema.safeParse(apiJson) if (!validatedHotelData.success) { - console.error(`Get Individual Hotel Data - Verified Data Error`) - console.error(validatedHotelData.error) + console.error( + "api.hotels.hotel validation error ", + JSON.stringify(validatedHotelData.error) + ) throw badRequestError() } @@ -72,7 +74,7 @@ export const hotelQueryRouter = router({ return validatedRoom.data }) : [] - + console.log("api.hotels.hotel success") return { hotel: validatedHotelData.data.data.attributes, roomCategories: roomCategories, @@ -88,25 +90,39 @@ export const hotelQueryRouter = router({ // const apiLang = toApiLang(language) // params.set("hotelId", hotelId.toString()) // params.set("language", apiLang) - + console.log("api.hotels.rates start") const validatedHotelData = getRatesSchema.safeParse(tempRatesData) + if (!tempRatesData) { + console.error("api.hotels.rates error, ", {}) + return null + } if (!validatedHotelData.success) { - console.error(`Get Individual Rates Data - Verified Data Error`) - console.error(validatedHotelData.error) + console.error( + "api.hotels.rates validation error ", + JSON.stringify(validatedHotelData.error) + ) throw badRequestError() } - + console.log("api.hotels.rates success") return validatedHotelData.data }), getFilters: publicProcedure .input(getFiltersInputSchema) .query(async ({ input, ctx }) => { + console.log("api.hotels.filters start") + + if (!tempFilterData) { + console.error("api.hotels.filters error, ", {}) + return null + } const validateFilterData = getFiltersSchema.safeParse(tempFilterData) if (!validateFilterData.success) { - console.info(`Get Individual Filter Data - Verified Data Error`) - console.error(validateFilterData.error) + console.error( + "api.hotels.filters validation error", + JSON.stringify(validateFilterData.error) + ) throw badRequestError() } diff --git a/server/routers/user/query.ts b/server/routers/user/query.ts index 763758e3d..5118e11fe 100644 --- a/server/routers/user/query.ts +++ b/server/routers/user/query.ts @@ -42,7 +42,7 @@ async function getVerifiedUser({ session }: { session: Session }) { if (session.token.expires_at && session.token.expires_at < now) { return { error: true, cause: "token_expired" } as const } - + console.info("api.user.profile start,") const apiResponse = await api.get(api.endpoints.v1.profile, { cache: "no-store", headers: { @@ -51,6 +51,7 @@ async function getVerifiedUser({ session }: { session: Session }) { }) if (!apiResponse.ok) { + console.error("api.user.profile error ", JSON.stringify(apiResponse)) if (apiResponse.status === 401) { return { error: true, cause: "unauthorized" } as const } else if (apiResponse.status === 403) { @@ -67,19 +68,16 @@ async function getVerifiedUser({ session }: { session: Session }) { const apiJson = await apiResponse.json() if (!apiJson.data?.attributes) { - console.error(`User has no data - (user: ${JSON.stringify(session.user)})`) + console.error("api.user.profile data error") return null } const verifiedData = getUserSchema.safeParse(apiJson.data.attributes) if (!verifiedData.success) { - console.error( - `Failed to validate User - (User: ${JSON.stringify(session.user)})` - ) - console.error(verifiedData.error) + console.error("api.user.profile validation error") return null } - + console.info("api.user.profile success") return verifiedData } @@ -109,6 +107,7 @@ async function updateStaysBookingUrl( lang: Lang ) { // Tenporary API call needed till we have user name in ctx session data + console.info("api.user.profile start") const apiResponse = await api.get(api.endpoints.v1.profile, { cache: "no-store", headers: { @@ -145,6 +144,7 @@ async function updateStaysBookingUrl( } if (apiResponse.ok) { + console.info("api.user.profile success") const apiJson = await apiResponse.json() if (apiJson.data?.attributes) { return data.map((d) => { @@ -170,6 +170,8 @@ async function updateStaysBookingUrl( }) } } + console.info("api.user.profile error", JSON.stringify(apiResponse)) + return data } @@ -279,6 +281,7 @@ export const userQueryRouter = router({ const params = new URLSearchParams() params.set("limit", "1") + console.info("api.booking.stays.past start") const previousStaysResponse = await api.get( api.endpoints.v1.previousStays, { @@ -291,9 +294,9 @@ export const userQueryRouter = router({ if (!previousStaysResponse.ok) { console.error( - `API Response Failed - Getting Previous Stays for tracking user` + "api.booking.stays.past error ", + JSON.stringify(previousStaysResponse) ) - console.error(previousStaysResponse) return notLoggedInUserTrackingData } @@ -301,10 +304,13 @@ export const userQueryRouter = router({ const verifiedPreviousStaysData = getStaysSchema.safeParse(previousStaysApiJson) if (!verifiedPreviousStaysData.success) { - console.error(`Failed to validate Previous Stays Data for tracking user`) - console.error(verifiedPreviousStaysData.error) + console.error( + "api.booking.stays.past validation error, ", + JSON.stringify(verifiedPreviousStaysData.error) + ) return notLoggedInUserTrackingData } + console.info("api.booking.stays.past success") const membership = getMembership(verifiedUserData.data.memberships) @@ -317,7 +323,6 @@ export const userQueryRouter = router({ totalPointsAvailableToSpend: membership?.currentPoints, loginAction: "login success", } - return loggedInUserTrackingData }), benefits: router({ @@ -340,6 +345,7 @@ export const userQueryRouter = router({ if (cursor) { params.offset = cursor } + console.info("api.booking.stays.past start") const apiResponse = await api.get( api.endpoints.v1.previousStays, @@ -362,9 +368,10 @@ export const userQueryRouter = router({ // default: // throw internalServerError(apiResponse) // } - console.error(`API Response Failed - Getting Previous Stays`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(apiResponse) + console.error( + "api.booking.stays.past error ", + JSON.stringify(apiResponse) + ) return null } @@ -372,12 +379,14 @@ export const userQueryRouter = router({ const verifiedData = getStaysSchema.safeParse(apiJson) if (!verifiedData.success) { - console.error(`Failed to validate Previous Stays Data`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(verifiedData.error) + console.error( + "api.booking.stays.past validation error ", + JSON.stringify(verifiedData.error) + ) + return null } - + console.info("api.booking.stays.past success") const nextCursor = verifiedData.data.links && verifiedData.data.links.offset < verifiedData.data.links.totalCount @@ -405,7 +414,7 @@ export const userQueryRouter = router({ if (cursor) { params.offset = cursor } - + console.info("api.booking.stays.future start") const apiResponse = await api.get( api.endpoints.v1.upcomingStays, { @@ -427,21 +436,23 @@ export const userQueryRouter = router({ // default: // throw internalServerError(apiResponse) // } - console.error(`API Response Failed - Getting Upcoming Stays`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(apiResponse) + console.error( + "api.booking.stays.future error ", + JSON.stringify(apiResponse) + ) return null } const apiJson = await apiResponse.json() const verifiedData = getStaysSchema.safeParse(apiJson) if (!verifiedData.success) { - console.error(`Failed to validate Upcoming Stays Data`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(verifiedData.error) + console.error( + "api.booking.stays.future validation error ", + JSON.stringify(verifiedData.error) + ) return null } - + console.info("api.booking.stays.future success") const nextCursor = verifiedData.data.links && verifiedData.data.links.offset < verifiedData.data.links.totalCount @@ -465,6 +476,7 @@ export const userQueryRouter = router({ .input(friendTransactionsInput) .query(async ({ ctx, input }) => { const { limit, page } = input + console.info("api.transaction.friendTransactions start") const apiResponse = await api.get(api.endpoints.v1.friendTransactions, { cache: undefined, // override defaultOptions headers: { @@ -484,21 +496,24 @@ export const userQueryRouter = router({ // default: // throw internalServerError() // } - console.error(`API Response Failed - Getting Friend Transactions`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(apiResponse) + console.error( + "api.transaction.friendTransactions error ", + JSON.stringify(apiResponse) + ) return null } const apiJson = await apiResponse.json() const verifiedData = getFriendTransactionsSchema.safeParse(apiJson) if (!verifiedData.success) { - console.error(`Failed to validate Friend Transactions Data`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(verifiedData.error) + console.error( + "api.transaction.friendTransactions validation error ", + JSON.stringify(verifiedData.error) + ) return null } + console.info("api.transaction.friendTransactions success") const updatedData = await updateStaysBookingUrl( verifiedData.data.data, ctx.session.token.access_token, @@ -565,6 +580,7 @@ export const userQueryRouter = router({ }), creditCards: protectedProcedure.query(async function ({ ctx }) { + console.info("api.profile.creditCards start") const apiResponse = await api.get(api.endpoints.v1.creditCards, { cache: "no-store", headers: { @@ -573,25 +589,28 @@ export const userQueryRouter = router({ }) if (!apiResponse.ok) { - console.error(`API Response Failed - Getting Creadit Cards`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(apiResponse) + console.error( + "api.profile.creditCards error ", + JSON.stringify(apiResponse) + ) return null } const apiJson = await apiResponse.json() const verifiedData = creditCardsSchema.safeParse(apiJson) if (!verifiedData.success) { - console.error(`Failed to validate Credit Cards Data`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(verifiedData.error) + console.error( + "api.profile.creditCards validation error ", + JSON.stringify(verifiedData.error) + ) return null } - + console.info("api.profile.creditCards success") return verifiedData.data.data }), membershipCards: protectedProcedure.query(async function ({ ctx }) { + console.info("api.profile start") const apiResponse = await api.get(api.endpoints.v1.profile, { cache: "no-store", headers: { @@ -610,9 +629,7 @@ export const userQueryRouter = router({ // default: // throw internalServerError() // } - console.error(`API Response Failed - Getting Membership Cards`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(apiResponse) + console.log("api.profile error ", JSON.stringify(apiResponse)) } const apiJson = await apiResponse.json() @@ -622,11 +639,13 @@ export const userQueryRouter = router({ ) if (!verifiedData.success) { - console.error(`Failed to validate Memberships Cards Data`) - console.error(`User: (${JSON.stringify(ctx.session.user)})`) - console.error(verifiedData.error) + console.error( + "api.profile validation error ", + JSON.stringify(verifiedData) + ) return null } + console.info("api.profile success") const cards = getMembershipCards(verifiedData.data) return cards From d603f53240bfff0a57e67cf016cf6feeceb78b5d Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Wed, 21 Aug 2024 16:01:50 +0200 Subject: [PATCH 2/5] fix: add improved logging for contentstack requests --- .../routers/contentstack/accountPage/query.ts | 11 ++- server/routers/contentstack/base/query.ts | 77 ++++++++++++++++--- .../routers/contentstack/hotelPage/query.ts | 10 ++- .../contentstack/languageSwitcher/query.ts | 14 +++- .../routers/contentstack/loyaltyPage/query.ts | 23 ++++-- .../contentstack/myPages/navigation/query.ts | 24 +++--- server/routers/hotels/query.ts | 16 ++-- 7 files changed, 131 insertions(+), 44 deletions(-) diff --git a/server/routers/contentstack/accountPage/query.ts b/server/routers/contentstack/accountPage/query.ts index 14b94eb0c..a9bd59be6 100644 --- a/server/routers/contentstack/accountPage/query.ts +++ b/server/routers/contentstack/accountPage/query.ts @@ -67,7 +67,7 @@ export const accountPageQueryRouter = router({ generateTags(lang, connections), generateTag(lang, validatedAccountPageRefs.data.account_page.system.uid), ].flat() - + console.info("contentstack.accountPage start ", { lang, uid }) const response = await request( GetAccountPage, { @@ -78,6 +78,7 @@ export const accountPageQueryRouter = router({ ) if (!response.data) { + console.error("contentstack.accountPage not found error", { lang, uid }) throw notFound(response) } @@ -86,11 +87,13 @@ export const accountPageQueryRouter = router({ ) if (!validatedAccountPage.success) { - console.error(`Failed to validate Account Page - (uid: ${uid})`) - console.error(validatedAccountPage.error) + console.error( + "contentstack.accountPage validation error", + JSON.stringify(validatedAccountPage.error) + ) return null } - + console.info("contentstack.accountPage success ", { lang, uid }) // TODO: Make returned data nicer const content = validatedAccountPage.data.account_page.content.map( (block) => { diff --git a/server/routers/contentstack/base/query.ts b/server/routers/contentstack/base/query.ts index 4884a59a0..fc2b5c569 100644 --- a/server/routers/contentstack/base/query.ts +++ b/server/routers/contentstack/base/query.ts @@ -33,12 +33,17 @@ import { export const baseQueryRouter = router({ contact: contentstackBaseProcedure.query(async ({ ctx }) => { const { lang } = ctx - + console.info("contentstack.config start ", JSON.stringify({ lang })) const response = await request(GetContactConfig, { locale: lang, }) if (!response.data) { + console.error( + "contentstack.config not found error ", + JSON.stringify({ lang }), + JSON.stringify(response) + ) throw notFound(response) } @@ -48,21 +53,33 @@ export const baseQueryRouter = router({ if (!validatedContactConfigConfig.success) { console.error( - `Failed to validate Contact Config Data - (lang: ${ctx.lang})` + "contentstack.config validation error ", + JSON.stringify({ lang }), + JSON.stringify(validatedContactConfigConfig.error) ) - console.error(validatedContactConfigConfig.error) return null } - + console.info("contentstack.config success ", JSON.stringify({ lang })) return validatedContactConfigConfig.data.all_contact_config.items[0] }), header: contentstackBaseProcedure .input(langInput) .query(async ({ input }) => { + console.info( + "contentstack.header.ref start ", + JSON.stringify({ lang: input.lang }) + ) const responseRef = await request(GetCurrentHeaderRef, { locale: input.lang, }) + console.info( + "contentstack.header. start ", + JSON.stringify({ + lang: input.lang, + }) + ) + // There's currently no error handling/validation for the responseRef, should it be added? const response = await request( GetCurrentHeader, { locale: input.lang }, @@ -77,6 +94,13 @@ export const baseQueryRouter = router({ ) if (!response.data) { + console.error( + "contentstack.header not found error ", + JSON.stringify({ + lang: input.lang, + }), + JSON.stringify(response) + ) throw notFound(response) } @@ -85,11 +109,21 @@ export const baseQueryRouter = router({ ) if (!validatedHeaderConfig.success) { - console.error(`Failed to validate Header - (lang: ${input.lang})`) - console.error(validatedHeaderConfig.error) + console.error( + "contentstack.header validation error", + JSON.stringify({ + lang: input.lang, + }), + JSON.stringify(validatedHeaderConfig.error) + ) return null } - + console.info( + "contentstack.header success ", + JSON.stringify({ + lang: input.lang, + }) + ) const logo = validatedHeaderConfig.data.all_current_header.items[0].logoConnection .edges?.[0]?.node @@ -102,10 +136,17 @@ export const baseQueryRouter = router({ footer: contentstackBaseProcedure .input(langInput) .query(async ({ input }) => { + console.info("contentstack.footer.ref start ", { lang: input.lang }) const responseRef = await request(GetCurrentFooterRef, { locale: input.lang, }) - + // There's currently no error handling/validation for the responseRef, should it be added? + console.info( + "contentstack.footer start ", + JSON.stringify({ + lang: input.lang, + }) + ) const response = await request( GetCurrentFooter, { @@ -121,16 +162,30 @@ export const baseQueryRouter = router({ } ) + if (!response.data) { + console.error( + "contentstack.footer not found error ", + JSON.stringify({ + lang: input.lang, + }), + JSON.stringify(response) + ) + throw notFound(response) + } + const validatedFooterConfig = validateFooterConfigSchema.safeParse( response.data ) if (!validatedFooterConfig.success) { - console.error(`Failed to validate Footer - (lang: ${input.lang})`) - console.error(validatedFooterConfig.error) + console.error( + "contentstack.footer validation error", + JSON.stringify({ lang: input.lang }), + JSON.stringify(validatedFooterConfig.error) + ) return null } - + console.info("contentstack.footer success ", { lang: input.lang }) return validatedFooterConfig.data.all_current_footer.items[0] }), }) diff --git a/server/routers/contentstack/hotelPage/query.ts b/server/routers/contentstack/hotelPage/query.ts index d434c6b6f..4e4c5bd04 100644 --- a/server/routers/contentstack/hotelPage/query.ts +++ b/server/routers/contentstack/hotelPage/query.ts @@ -8,11 +8,16 @@ import { HotelPage, HotelPageDataRaw, validateHotelPageSchema } from "./output" export const hotelPageQueryRouter = router({ get: contentstackBaseProcedure.query(async ({ ctx }) => { const { lang, uid } = ctx + console.info("contentstack.hotelPage start ", JSON.stringify({ lang, uid })) const response = await request(GetHotelPage, { locale: lang, uid, }) if (!response.data) { + console.error( + "contentstack.hotelPage not found error", + JSON.stringify({ lang, uid }) + ) throw notFound(response) } @@ -20,9 +25,10 @@ export const hotelPageQueryRouter = router({ if (!validatedHotelPage.success) { console.error( - `Failed to validate Hotel Page - (uid: ${uid}, lang: ${lang})` + "contentstack.hotelPage validation error", + JSON.stringify({ lang, uid }), + JSON.stringify(validatedHotelPage.error) ) - console.error(validatedHotelPage.error) return null } diff --git a/server/routers/contentstack/languageSwitcher/query.ts b/server/routers/contentstack/languageSwitcher/query.ts index 35b8a3ded..eed700bd9 100644 --- a/server/routers/contentstack/languageSwitcher/query.ts +++ b/server/routers/contentstack/languageSwitcher/query.ts @@ -131,6 +131,14 @@ export const languageSwitcherQueryRouter = router({ if (!ctx.uid || !ctx.lang) { return { lang: ctx.lang, urls: baseUrls } } + console.info( + "contentstack.languageSwitcher start ", + JSON.stringify({ + uid: ctx.uid, + lang: ctx.lang, + contentType: ctx.contentType, + }) + ) const res = await getLanguageSwitcher({ contentType: ctx.contentType!, uid: ctx.uid, @@ -155,12 +163,12 @@ export const languageSwitcherQueryRouter = router({ if (!validatedLanguageSwitcherData.success) { console.error( - `Failed to validate Language Switcher Data - (contentType: ${ctx.contentType}, lang: ${ctx.lang}, uid: ${ctx.uid})` + "contentstack.languageSwitcher validation error", + JSON.stringify(validatedLanguageSwitcherData.error) ) - console.error(validatedLanguageSwitcherData.error) return null } - + console.info("contentstack.languageSwitcher success") return { lang: ctx.lang, urls, diff --git a/server/routers/contentstack/loyaltyPage/query.ts b/server/routers/contentstack/loyaltyPage/query.ts index 34bc7aa24..49e5ada8b 100644 --- a/server/routers/contentstack/loyaltyPage/query.ts +++ b/server/routers/contentstack/loyaltyPage/query.ts @@ -37,7 +37,7 @@ import { export const loyaltyPageQueryRouter = router({ get: contentstackExtendedProcedureUID.query(async ({ ctx }) => { const { lang, uid } = ctx - + console.info("contentstack.loyaltyPage.refs start ", { lang, uid }) const refsResponse = await request( GetLoyaltyPageRefs, { @@ -50,6 +50,10 @@ export const loyaltyPageQueryRouter = router({ ) if (!refsResponse.data) { + console.error("contentstack.loyaltyPage.refs not found error", { + lang, + uid, + }) throw notFound(refsResponse) } @@ -59,19 +63,20 @@ export const loyaltyPageQueryRouter = router({ validateLoyaltyPageRefsSchema.safeParse(cleanedData) if (!validatedLoyaltyPageRefs.success) { console.error( - `Failed to validate Loyaltypage Refs - (lang: ${lang}, uid: ${uid})` + "contentstack.loyaltyPage.refs validation error", + { lang, uid }, + JSON.stringify(validatedLoyaltyPageRefs.error) ) - console.error(validatedLoyaltyPageRefs.error) return null } - + console.info("contentstack.loyaltyPage.refs success ", { lang, uid }) const connections = getConnections(validatedLoyaltyPageRefs.data) const tags = [ generateTags(lang, connections), generateTag(lang, validatedLoyaltyPageRefs.data.loyalty_page.system.uid), ].flat() - + console.info("contentstack.loyaltyPage start ", { lang, uid }) const response = await request( GetLoyaltyPage, { @@ -82,6 +87,7 @@ export const loyaltyPageQueryRouter = router({ ) if (!response.data) { + console.error("contentstack.loyaltyPage not found error", { lang, uid }) throw notFound(response) } @@ -191,9 +197,10 @@ export const loyaltyPageQueryRouter = router({ validateLoyaltyPageSchema.safeParse(loyaltyPage) if (!validatedLoyaltyPage.success) { console.error( - `Failed to validate Loyaltypage Data - (lang: ${lang}, uid: ${uid})` + "contentstack.loyaltyPage validation error", + { lang, uid }, + JSON.stringify(validatedLoyaltyPage.error) ) - console.error(validatedLoyaltyPage.error) return null } @@ -205,7 +212,7 @@ export const loyaltyPageQueryRouter = router({ channel: TrackingChannelEnum["scandic-friends"], pageType: "loyaltycontentpage", } - + console.info("contentstack.loyaltyPage success ", { lang, uid }) // Assert LoyaltyPage type to get correct typings for RTE fields return { loyaltyPage, diff --git a/server/routers/contentstack/myPages/navigation/query.ts b/server/routers/contentstack/myPages/navigation/query.ts index c8ef87de4..3fc682583 100644 --- a/server/routers/contentstack/myPages/navigation/query.ts +++ b/server/routers/contentstack/myPages/navigation/query.ts @@ -61,7 +61,7 @@ export function mapMenuItems(menuItems: MenuItems) { export const navigationQueryRouter = router({ get: contentstackBaseProcedure.query(async function ({ ctx }) { const { lang } = ctx - + console.info("contentstack.myPages.navigation.ref start ", { lang }) const refsResponse = await request( GetNavigationMyPagesRefs, { locale: lang }, @@ -71,19 +71,21 @@ export const navigationQueryRouter = router({ ) if (!refsResponse.data) { + console.error("contentstack.myPages.navigation.ref not found error ", { + lang, + }) throw notFound(refsResponse) } const validatedMyPagesNavigationRefs = navigationRefsPayloadSchema.safeParse(refsResponse.data) if (!validatedMyPagesNavigationRefs.success) { - console.error( - `Failed to validate My Pages Navigation Refs - (lang: ${lang}` - ) - console.error(validatedMyPagesNavigationRefs.error) + console.error("contentstack.myPages.navigation.ref validation error ", { + lang, + }) return null } - + console.info("contentstack.myPages.navigation.ref success ", { lang }) const connections = getConnections(validatedMyPagesNavigationRefs.data) const tags = [ @@ -94,7 +96,7 @@ export const navigationQueryRouter = router({ .system.uid ), ].flat() - + console.info("contentstack.myPages.navigation start ", { lang }) const response = await request( GetNavigationMyPages, { locale: lang }, @@ -102,6 +104,9 @@ export const navigationQueryRouter = router({ ) if (!response.data) { + console.error("contentstack.myPages.navigation not found error ", { + lang, + }) throw notFound(response) } @@ -110,9 +115,10 @@ export const navigationQueryRouter = router({ ) if (!validatedMyPagesNavigation.success) { console.error( - `Failed to validate My Pages Navigation Data - (lang: ${lang}` + "contentstack.myPages.navigation validation error ", + JSON.stringify({ lang }), + JSON.stringify(validatedMyPagesNavigation.error) ) - console.error(validatedMyPagesNavigation.error) return null } diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 3c76cfdd9..9120bd184 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -32,7 +32,7 @@ export const hotelQueryRouter = router({ params.include = include.join(",") } - console.log("api.hotels.hotel start") + console.info("api.hotels.hotel start") const apiResponse = await api.get( `${api.endpoints.v1.hotels}/${hotelId}`, { @@ -74,7 +74,7 @@ export const hotelQueryRouter = router({ return validatedRoom.data }) : [] - console.log("api.hotels.hotel success") + console.info("api.hotels.hotel success") return { hotel: validatedHotelData.data.data.attributes, roomCategories: roomCategories, @@ -90,12 +90,13 @@ export const hotelQueryRouter = router({ // const apiLang = toApiLang(language) // params.set("hotelId", hotelId.toString()) // params.set("language", apiLang) - console.log("api.hotels.rates start") + console.info("api.hotels.rates start") const validatedHotelData = getRatesSchema.safeParse(tempRatesData) if (!tempRatesData) { console.error("api.hotels.rates error, ", {}) - return null + //Can't return null here since consuming component does not handle null yet + // return null } if (!validatedHotelData.success) { console.error( @@ -104,17 +105,18 @@ export const hotelQueryRouter = router({ ) throw badRequestError() } - console.log("api.hotels.rates success") + console.info("api.hotels.rates success") return validatedHotelData.data }), getFilters: publicProcedure .input(getFiltersInputSchema) .query(async ({ input, ctx }) => { - console.log("api.hotels.filters start") + console.info("api.hotels.filters start") if (!tempFilterData) { console.error("api.hotels.filters error, ", {}) - return null + //Can't return null here since consuming component does not handle null yet + // return null } const validateFilterData = getFiltersSchema.safeParse(tempFilterData) From 8340f1ff6c1816260ab70d571fe77f2f00be1822 Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Thu, 22 Aug 2024 10:25:06 +0200 Subject: [PATCH 3/5] fix: structure logged data --- .../routers/contentstack/accountPage/query.ts | 41 +++++-- server/routers/contentstack/base/query.ts | 85 ++++++++------ .../routers/contentstack/hotelPage/query.ts | 25 ++++- .../contentstack/languageSwitcher/query.ts | 30 ++++- .../routers/contentstack/loyaltyPage/query.ts | 60 +++++++--- .../contentstack/myPages/navigation/query.ts | 68 +++++++++--- server/routers/hotels/query.ts | 79 +++++++++---- server/routers/user/query.ts | 105 ++++++++++++------ 8 files changed, 357 insertions(+), 136 deletions(-) diff --git a/server/routers/contentstack/accountPage/query.ts b/server/routers/contentstack/accountPage/query.ts index a9bd59be6..20aa33dfd 100644 --- a/server/routers/contentstack/accountPage/query.ts +++ b/server/routers/contentstack/accountPage/query.ts @@ -35,7 +35,10 @@ import { RTEDocument } from "@/types/rte/node" export const accountPageQueryRouter = router({ get: contentstackExtendedProcedureUID.query(async ({ ctx }) => { const { lang, uid } = ctx - + console.info( + "contentstack.accountPage.refs start", + JSON.stringify({ query: { lang, uid } }) + ) const refsResponse = await request( GetAccountPageRefs, { @@ -48,6 +51,10 @@ export const accountPageQueryRouter = router({ ) if (!refsResponse.data) { + console.error( + "contentstack.accountPage.refs not found error", + JSON.stringify({ query: { lang, uid }, error: refsResponse }) + ) throw notFound(refsResponse) } @@ -56,8 +63,13 @@ export const accountPageQueryRouter = router({ const validatedAccountPageRefs = validateAccountPageRefsSchema.safeParse(cleanedData) if (!validatedAccountPageRefs.success) { - console.error(`Failed to validate My Page Refs - (uid: ${uid})`) - console.error(validatedAccountPageRefs.error) + console.error( + "contentstack.accountPage.refs validation error", + JSON.stringify({ + query: { lang, uid }, + error: validatedAccountPageRefs.error, + }) + ) return null } @@ -67,7 +79,10 @@ export const accountPageQueryRouter = router({ generateTags(lang, connections), generateTag(lang, validatedAccountPageRefs.data.account_page.system.uid), ].flat() - console.info("contentstack.accountPage start ", { lang, uid }) + console.info( + "contentstack.accountPage start", + JSON.stringify({ query: { lang, uid } }) + ) const response = await request( GetAccountPage, { @@ -78,7 +93,13 @@ export const accountPageQueryRouter = router({ ) if (!response.data) { - console.error("contentstack.accountPage not found error", { lang, uid }) + console.error( + "contentstack.accountPage not found error", + JSON.stringify({ + query: { lang, uid }, + error: response, + }) + ) throw notFound(response) } @@ -89,11 +110,17 @@ export const accountPageQueryRouter = router({ if (!validatedAccountPage.success) { console.error( "contentstack.accountPage validation error", - JSON.stringify(validatedAccountPage.error) + JSON.stringify({ + query: { lang, uid }, + error: validatedAccountPage.error, + }) ) return null } - console.info("contentstack.accountPage success ", { lang, uid }) + console.info( + "contentstack.accountPage success", + JSON.stringify({ query: { lang, uid } }) + ) // TODO: Make returned data nicer const content = validatedAccountPage.data.account_page.content.map( (block) => { diff --git a/server/routers/contentstack/base/query.ts b/server/routers/contentstack/base/query.ts index fc2b5c569..fdf1aad8d 100644 --- a/server/routers/contentstack/base/query.ts +++ b/server/routers/contentstack/base/query.ts @@ -33,16 +33,18 @@ import { export const baseQueryRouter = router({ contact: contentstackBaseProcedure.query(async ({ ctx }) => { const { lang } = ctx - console.info("contentstack.config start ", JSON.stringify({ lang })) + console.info( + "contentstack.config start", + JSON.stringify({ query: { lang } }) + ) const response = await request(GetContactConfig, { locale: lang, }) if (!response.data) { console.error( - "contentstack.config not found error ", - JSON.stringify({ lang }), - JSON.stringify(response) + "contentstack.config not found error", + JSON.stringify({ query: { lang }, error: response }) ) throw notFound(response) } @@ -53,29 +55,34 @@ export const baseQueryRouter = router({ if (!validatedContactConfigConfig.success) { console.error( - "contentstack.config validation error ", - JSON.stringify({ lang }), - JSON.stringify(validatedContactConfigConfig.error) + "contentstack.config validation error", + JSON.stringify({ + query: { lang }, + error: validatedContactConfigConfig.error, + }) ) return null } - console.info("contentstack.config success ", JSON.stringify({ lang })) + console.info( + "contentstack.config success", + JSON.stringify({ query: { lang } }) + ) return validatedContactConfigConfig.data.all_contact_config.items[0] }), header: contentstackBaseProcedure .input(langInput) .query(async ({ input }) => { console.info( - "contentstack.header.ref start ", - JSON.stringify({ lang: input.lang }) + "contentstack.header.ref start", + JSON.stringify({ query: { lang: input.lang } }) ) const responseRef = await request(GetCurrentHeaderRef, { locale: input.lang, }) console.info( - "contentstack.header. start ", + "contentstack.header start", JSON.stringify({ - lang: input.lang, + query: { lang: input.lang }, }) ) @@ -95,11 +102,13 @@ export const baseQueryRouter = router({ if (!response.data) { console.error( - "contentstack.header not found error ", + "contentstack.header not found error", JSON.stringify({ - lang: input.lang, - }), - JSON.stringify(response) + query: { + lang: input.lang, + }, + error: response, + }) ) throw notFound(response) } @@ -112,16 +121,18 @@ export const baseQueryRouter = router({ console.error( "contentstack.header validation error", JSON.stringify({ - lang: input.lang, - }), - JSON.stringify(validatedHeaderConfig.error) + query: { + lang: input.lang, + }, + error: validatedHeaderConfig.error, + }) ) return null } console.info( - "contentstack.header success ", + "contentstack.header success", JSON.stringify({ - lang: input.lang, + query: { lang: input.lang }, }) ) const logo = @@ -136,15 +147,20 @@ export const baseQueryRouter = router({ footer: contentstackBaseProcedure .input(langInput) .query(async ({ input }) => { - console.info("contentstack.footer.ref start ", { lang: input.lang }) + console.info( + "contentstack.footer.ref start", + JSON.stringify({ query: { lang: input.lang } }) + ) const responseRef = await request(GetCurrentFooterRef, { locale: input.lang, }) // There's currently no error handling/validation for the responseRef, should it be added? console.info( - "contentstack.footer start ", + "contentstack.footer start", JSON.stringify({ - lang: input.lang, + query: { + lang: input.lang, + }, }) ) const response = await request( @@ -164,11 +180,13 @@ export const baseQueryRouter = router({ if (!response.data) { console.error( - "contentstack.footer not found error ", + "contentstack.footer not found error", JSON.stringify({ - lang: input.lang, - }), - JSON.stringify(response) + query: { + lang: input.lang, + }, + error: response, + }) ) throw notFound(response) } @@ -180,12 +198,17 @@ export const baseQueryRouter = router({ if (!validatedFooterConfig.success) { console.error( "contentstack.footer validation error", - JSON.stringify({ lang: input.lang }), - JSON.stringify(validatedFooterConfig.error) + JSON.stringify({ + query: { lang: input.lang }, + error: validatedFooterConfig.error, + }) ) return null } - console.info("contentstack.footer success ", { lang: input.lang }) + console.info( + "contentstack.footer success", + JSON.stringify({ query: { lang: input.lang } }) + ) return validatedFooterConfig.data.all_current_footer.items[0] }), }) diff --git a/server/routers/contentstack/hotelPage/query.ts b/server/routers/contentstack/hotelPage/query.ts index 4e4c5bd04..00f4774b0 100644 --- a/server/routers/contentstack/hotelPage/query.ts +++ b/server/routers/contentstack/hotelPage/query.ts @@ -8,7 +8,12 @@ import { HotelPage, HotelPageDataRaw, validateHotelPageSchema } from "./output" export const hotelPageQueryRouter = router({ get: contentstackBaseProcedure.query(async ({ ctx }) => { const { lang, uid } = ctx - console.info("contentstack.hotelPage start ", JSON.stringify({ lang, uid })) + console.info( + "contentstack.hotelPage start", + JSON.stringify({ + query: { lang, uid }, + }) + ) const response = await request(GetHotelPage, { locale: lang, uid, @@ -16,7 +21,10 @@ export const hotelPageQueryRouter = router({ if (!response.data) { console.error( "contentstack.hotelPage not found error", - JSON.stringify({ lang, uid }) + JSON.stringify({ + query: { lang, uid }, + error: response, + }) ) throw notFound(response) } @@ -26,8 +34,10 @@ export const hotelPageQueryRouter = router({ if (!validatedHotelPage.success) { console.error( "contentstack.hotelPage validation error", - JSON.stringify({ lang, uid }), - JSON.stringify(validatedHotelPage.error) + JSON.stringify({ + query: { lang, uid }, + error: validatedHotelPage.error, + }) ) return null } @@ -35,7 +45,12 @@ export const hotelPageQueryRouter = router({ const hotelPage = { ...validatedHotelPage.data.hotel_page, } as HotelPage - + console.info( + "contentstack.hotelPage success", + JSON.stringify({ + query: { lang, uid }, + }) + ) return hotelPage }), }) diff --git a/server/routers/contentstack/languageSwitcher/query.ts b/server/routers/contentstack/languageSwitcher/query.ts index eed700bd9..bcab646cb 100644 --- a/server/routers/contentstack/languageSwitcher/query.ts +++ b/server/routers/contentstack/languageSwitcher/query.ts @@ -132,11 +132,13 @@ export const languageSwitcherQueryRouter = router({ return { lang: ctx.lang, urls: baseUrls } } console.info( - "contentstack.languageSwitcher start ", + "contentstack.languageSwitcher start", JSON.stringify({ - uid: ctx.uid, - lang: ctx.lang, - contentType: ctx.contentType, + query: { + uid: ctx.uid, + lang: ctx.lang, + contentType: ctx.contentType, + }, }) ) const res = await getLanguageSwitcher({ @@ -164,11 +166,27 @@ export const languageSwitcherQueryRouter = router({ if (!validatedLanguageSwitcherData.success) { console.error( "contentstack.languageSwitcher validation error", - JSON.stringify(validatedLanguageSwitcherData.error) + JSON.stringify({ + query: { + uid: ctx.uid, + lang: ctx.lang, + contentType: ctx.contentType, + }, + error: validatedLanguageSwitcherData.error, + }) ) return null } - console.info("contentstack.languageSwitcher success") + console.info( + "contentstack.languageSwitcher success", + JSON.stringify({ + query: { + uid: ctx.uid, + lang: ctx.lang, + contentType: ctx.contentType, + }, + }) + ) return { lang: ctx.lang, urls, diff --git a/server/routers/contentstack/loyaltyPage/query.ts b/server/routers/contentstack/loyaltyPage/query.ts index 49e5ada8b..bbda342a7 100644 --- a/server/routers/contentstack/loyaltyPage/query.ts +++ b/server/routers/contentstack/loyaltyPage/query.ts @@ -37,7 +37,12 @@ import { export const loyaltyPageQueryRouter = router({ get: contentstackExtendedProcedureUID.query(async ({ ctx }) => { const { lang, uid } = ctx - console.info("contentstack.loyaltyPage.refs start ", { lang, uid }) + console.info( + "contentstack.loyaltyPage.refs start", + JSON.stringify({ + query: { lang, uid }, + }) + ) const refsResponse = await request( GetLoyaltyPageRefs, { @@ -50,10 +55,16 @@ export const loyaltyPageQueryRouter = router({ ) if (!refsResponse.data) { - console.error("contentstack.loyaltyPage.refs not found error", { - lang, - uid, - }) + console.error( + "contentstack.loyaltyPage.refs not found error", + JSON.stringify({ + query: { + lang, + uid, + }, + error: JSON.stringify(refsResponse), + }) + ) throw notFound(refsResponse) } @@ -64,19 +75,31 @@ export const loyaltyPageQueryRouter = router({ if (!validatedLoyaltyPageRefs.success) { console.error( "contentstack.loyaltyPage.refs validation error", - { lang, uid }, - JSON.stringify(validatedLoyaltyPageRefs.error) + JSON.stringify({ + query: { lang, uid }, + error: validatedLoyaltyPageRefs.error, + }) ) return null } - console.info("contentstack.loyaltyPage.refs success ", { lang, uid }) + console.info( + "contentstack.loyaltyPage.refs success", + JSON.stringify({ + query: { lang, uid }, + }) + ) const connections = getConnections(validatedLoyaltyPageRefs.data) const tags = [ generateTags(lang, connections), generateTag(lang, validatedLoyaltyPageRefs.data.loyalty_page.system.uid), ].flat() - console.info("contentstack.loyaltyPage start ", { lang, uid }) + console.info( + "contentstack.loyaltyPage start", + JSON.stringify({ + query: { lang, uid }, + }) + ) const response = await request( GetLoyaltyPage, { @@ -87,7 +110,13 @@ export const loyaltyPageQueryRouter = router({ ) if (!response.data) { - console.error("contentstack.loyaltyPage not found error", { lang, uid }) + console.error( + "contentstack.loyaltyPage not found error", + JSON.stringify({ + query: { lang, uid }, + error: response, + }) + ) throw notFound(response) } @@ -198,8 +227,10 @@ export const loyaltyPageQueryRouter = router({ if (!validatedLoyaltyPage.success) { console.error( "contentstack.loyaltyPage validation error", - { lang, uid }, - JSON.stringify(validatedLoyaltyPage.error) + JSON.stringify({ + query: { lang, uid }, + error: validatedLoyaltyPage.error, + }) ) return null } @@ -212,7 +243,10 @@ export const loyaltyPageQueryRouter = router({ channel: TrackingChannelEnum["scandic-friends"], pageType: "loyaltycontentpage", } - console.info("contentstack.loyaltyPage success ", { lang, uid }) + console.info( + "contentstack.loyaltyPage success", + JSON.stringify({ query: { lang, uid } }) + ) // Assert LoyaltyPage type to get correct typings for RTE fields return { loyaltyPage, diff --git a/server/routers/contentstack/myPages/navigation/query.ts b/server/routers/contentstack/myPages/navigation/query.ts index 3fc682583..5c751df88 100644 --- a/server/routers/contentstack/myPages/navigation/query.ts +++ b/server/routers/contentstack/myPages/navigation/query.ts @@ -1,3 +1,5 @@ +import { error } from "console" + import { GetNavigationMyPages, GetNavigationMyPagesRefs, @@ -61,7 +63,10 @@ export function mapMenuItems(menuItems: MenuItems) { export const navigationQueryRouter = router({ get: contentstackBaseProcedure.query(async function ({ ctx }) { const { lang } = ctx - console.info("contentstack.myPages.navigation.ref start ", { lang }) + console.info( + "contentstack.myPages.navigation.refs start", + JSON.stringify({ query: { lang } }) + ) const refsResponse = await request( GetNavigationMyPagesRefs, { locale: lang }, @@ -71,21 +76,36 @@ export const navigationQueryRouter = router({ ) if (!refsResponse.data) { - console.error("contentstack.myPages.navigation.ref not found error ", { - lang, - }) + console.error( + "contentstack.myPages.navigation.refs not found error", + JSON.stringify({ + query: { + lang, + }, + error: refsResponse, + }) + ) throw notFound(refsResponse) } const validatedMyPagesNavigationRefs = navigationRefsPayloadSchema.safeParse(refsResponse.data) if (!validatedMyPagesNavigationRefs.success) { - console.error("contentstack.myPages.navigation.ref validation error ", { - lang, - }) + console.error( + "contentstack.myPages.navigation.refs validation error", + JSON.stringify({ + query: { + lang, + }, + error: validatedMyPagesNavigationRefs.error, + }) + ) return null } - console.info("contentstack.myPages.navigation.ref success ", { lang }) + console.info( + "contentstack.myPages.navigation.refs success", + JSON.stringify({ query: { lang } }) + ) const connections = getConnections(validatedMyPagesNavigationRefs.data) const tags = [ @@ -96,7 +116,10 @@ export const navigationQueryRouter = router({ .system.uid ), ].flat() - console.info("contentstack.myPages.navigation start ", { lang }) + console.info( + "contentstack.myPages.navigation start", + JSON.stringify({ query: { lang } }) + ) const response = await request( GetNavigationMyPages, { locale: lang }, @@ -104,8 +127,11 @@ export const navigationQueryRouter = router({ ) if (!response.data) { - console.error("contentstack.myPages.navigation not found error ", { - lang, + console.error("contentstack.myPages.navigation not found error", { + query: { + lang, + }, + error: response, }) throw notFound(response) } @@ -115,9 +141,11 @@ export const navigationQueryRouter = router({ ) if (!validatedMyPagesNavigation.success) { console.error( - "contentstack.myPages.navigation validation error ", - JSON.stringify({ lang }), - JSON.stringify(validatedMyPagesNavigation.error) + "contentstack.myPages.navigation.payload validation error", + JSON.stringify({ + query: { lang }, + error: validatedMyPagesNavigation.error, + }) ) return null } @@ -133,12 +161,20 @@ export const navigationQueryRouter = router({ const validatedNav = getNavigationSchema.safeParse(nav) if (!validatedNav.success) { console.error( - `Failed to validate My Pages Navigation Return Data - (lang: ${lang}` + "contentstack.myPages.navigation validation error", + JSON.stringify({ + query: { lang }, + error: validatedNav.error, + }) ) + console.error(validatedNav.error) return null } - + console.info( + "contentstack.myPages.navigation success", + JSON.stringify({ query: { lang } }) + ) return validatedNav.data }), }) diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 9120bd184..0494178cc 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -32,7 +32,12 @@ export const hotelQueryRouter = router({ params.include = include.join(",") } - console.info("api.hotels.hotel start") + console.info( + "api.hotels.hotel start", + JSON.stringify({ + query: { hotelId, params: params.toString() }, + }) + ) const apiResponse = await api.get( `${api.endpoints.v1.hotels}/${hotelId}`, { @@ -45,7 +50,13 @@ export const hotelQueryRouter = router({ ) if (!apiResponse.ok) { - console.error("api.hotels.hotel error, ", JSON.stringify(apiResponse)) + console.error( + "api.hotels.hotel error", + JSON.stringify({ + query: { hotelId, params: params.toString() }, + error: apiResponse, + }) + ) return null } const apiJson = await apiResponse.json() @@ -53,8 +64,11 @@ export const hotelQueryRouter = router({ if (!validatedHotelData.success) { console.error( - "api.hotels.hotel validation error ", - JSON.stringify(validatedHotelData.error) + "api.hotels.hotel validation error", + JSON.stringify({ + query: { hotelId, params: params.toString() }, + error: validatedHotelData.error, + }) ) throw badRequestError() } @@ -63,18 +77,28 @@ export const hotelQueryRouter = router({ const roomCategories = included ? included - .filter((item) => item.type === "roomcategories") - .map((roomCategory) => { - const validatedRoom = roomSchema.safeParse(roomCategory) - if (!validatedRoom.success) { - console.error(`Get Room Category Data - Verified Data Error`) - console.error(validatedRoom.error) - throw badRequestError() - } - return validatedRoom.data - }) + .filter((item) => item.type === "roomcategories") + .map((roomCategory) => { + const validatedRoom = roomSchema.safeParse(roomCategory) + if (!validatedRoom.success) { + console.error( + "api.hotels.hotel validation error", + JSON.stringify({ + query: { hotelId, params: params.toString() }, + error: validatedRoom.error, + }) + ) + throw badRequestError() + } + return validatedRoom.data + }) : [] - console.info("api.hotels.hotel success") + console.info( + "api.hotels.hotel success", + JSON.stringify({ + query: { hotelId, params: params.toString() }, + }) + ) return { hotel: validatedHotelData.data.data.attributes, roomCategories: roomCategories, @@ -90,31 +114,36 @@ export const hotelQueryRouter = router({ // const apiLang = toApiLang(language) // params.set("hotelId", hotelId.toString()) // params.set("language", apiLang) - console.info("api.hotels.rates start") + console.info("api.hotels.rates start", JSON.stringify({})) const validatedHotelData = getRatesSchema.safeParse(tempRatesData) if (!tempRatesData) { - console.error("api.hotels.rates error, ", {}) + console.error("api.hotels.rates error", JSON.stringify({ error: null })) //Can't return null here since consuming component does not handle null yet // return null } if (!validatedHotelData.success) { console.error( - "api.hotels.rates validation error ", - JSON.stringify(validatedHotelData.error) + "api.hotels.rates validation error", + JSON.stringify({ + error: validatedHotelData.error, + }) ) throw badRequestError() } - console.info("api.hotels.rates success") + console.info("api.hotels.rates success", JSON.stringify({})) return validatedHotelData.data }), getFilters: publicProcedure .input(getFiltersInputSchema) .query(async ({ input, ctx }) => { - console.info("api.hotels.filters start") + console.info("api.hotels.filters start", JSON.stringify({})) if (!tempFilterData) { - console.error("api.hotels.filters error, ", {}) + console.error( + "api.hotels.filters error", + JSON.stringify({ error: null }) + ) //Can't return null here since consuming component does not handle null yet // return null } @@ -123,11 +152,13 @@ export const hotelQueryRouter = router({ if (!validateFilterData.success) { console.error( "api.hotels.filters validation error", - JSON.stringify(validateFilterData.error) + JSON.stringify({ + error: validateFilterData.error, + }) ) throw badRequestError() } - + console.info("api.hotels.rates success", JSON.stringify({})) return validateFilterData.data }), }) diff --git a/server/routers/user/query.ts b/server/routers/user/query.ts index 5118e11fe..df489f2b7 100644 --- a/server/routers/user/query.ts +++ b/server/routers/user/query.ts @@ -42,7 +42,7 @@ async function getVerifiedUser({ session }: { session: Session }) { if (session.token.expires_at && session.token.expires_at < now) { return { error: true, cause: "token_expired" } as const } - console.info("api.user.profile start,") + console.info("api.user.profile start", JSON.stringify({})) const apiResponse = await api.get(api.endpoints.v1.profile, { cache: "no-store", headers: { @@ -51,7 +51,12 @@ async function getVerifiedUser({ session }: { session: Session }) { }) if (!apiResponse.ok) { - console.error("api.user.profile error ", JSON.stringify(apiResponse)) + console.error( + "api.user.profile error", + JSON.stringify({ + error: apiResponse, + }) + ) if (apiResponse.status === 401) { return { error: true, cause: "unauthorized" } as const } else if (apiResponse.status === 403) { @@ -68,16 +73,16 @@ async function getVerifiedUser({ session }: { session: Session }) { const apiJson = await apiResponse.json() if (!apiJson.data?.attributes) { - console.error("api.user.profile data error") + console.error("api.user.profile data error", JSON.stringify({})) // not passing the data to avoid logging sensitive data return null } const verifiedData = getUserSchema.safeParse(apiJson.data.attributes) if (!verifiedData.success) { - console.error("api.user.profile validation error") + console.error("api.user.profile validation error", JSON.stringify({})) // not passing the data to avoid logging sensitive data return null } - console.info("api.user.profile success") + console.info("api.user.profile success", JSON.stringify({})) return verifiedData } @@ -107,7 +112,7 @@ async function updateStaysBookingUrl( lang: Lang ) { // Tenporary API call needed till we have user name in ctx session data - console.info("api.user.profile start") + console.info("api.user.profile start", JSON.stringify({})) const apiResponse = await api.get(api.endpoints.v1.profile, { cache: "no-store", headers: { @@ -144,7 +149,7 @@ async function updateStaysBookingUrl( } if (apiResponse.ok) { - console.info("api.user.profile success") + console.info("api.user.profile success", JSON.stringify({})) const apiJson = await apiResponse.json() if (apiJson.data?.attributes) { return data.map((d) => { @@ -170,7 +175,7 @@ async function updateStaysBookingUrl( }) } } - console.info("api.user.profile error", JSON.stringify(apiResponse)) + console.info("api.user.profile error", JSON.stringify({ error: apiResponse })) return data } @@ -281,7 +286,10 @@ export const userQueryRouter = router({ const params = new URLSearchParams() params.set("limit", "1") - console.info("api.booking.stays.past start") + console.info( + "api.booking.stays.past start", + JSON.stringify({ query: { params } }) + ) const previousStaysResponse = await api.get( api.endpoints.v1.previousStays, { @@ -294,8 +302,8 @@ export const userQueryRouter = router({ if (!previousStaysResponse.ok) { console.error( - "api.booking.stays.past error ", - JSON.stringify(previousStaysResponse) + "api.booking.stays.past error", + JSON.stringify({ error: previousStaysResponse }) ) return notLoggedInUserTrackingData } @@ -306,11 +314,11 @@ export const userQueryRouter = router({ if (!verifiedPreviousStaysData.success) { console.error( "api.booking.stays.past validation error, ", - JSON.stringify(verifiedPreviousStaysData.error) + JSON.stringify({ error: verifiedPreviousStaysData.error }) ) return notLoggedInUserTrackingData } - console.info("api.booking.stays.past success") + console.info("api.booking.stays.past success", JSON.stringify({})) const membership = getMembership(verifiedUserData.data.memberships) @@ -345,7 +353,10 @@ export const userQueryRouter = router({ if (cursor) { params.offset = cursor } - console.info("api.booking.stays.past start") + console.info( + "api.booking.stays.past start", + JSON.stringify({ query: { params: params.toString() } }) + ) const apiResponse = await api.get( api.endpoints.v1.previousStays, @@ -370,7 +381,10 @@ export const userQueryRouter = router({ // } console.error( "api.booking.stays.past error ", - JSON.stringify(apiResponse) + JSON.stringify({ + query: { params: params.toString() }, + error: apiResponse, + }) ) return null } @@ -381,12 +395,18 @@ export const userQueryRouter = router({ if (!verifiedData.success) { console.error( "api.booking.stays.past validation error ", - JSON.stringify(verifiedData.error) + JSON.stringify({ + query: { params: params.toString() }, + error: verifiedData.error, + }) ) return null } - console.info("api.booking.stays.past success") + console.info( + "api.booking.stays.past success", + JSON.stringify({ query: { params: params.toString() } }) + ) const nextCursor = verifiedData.data.links && verifiedData.data.links.offset < verifiedData.data.links.totalCount @@ -414,7 +434,10 @@ export const userQueryRouter = router({ if (cursor) { params.offset = cursor } - console.info("api.booking.stays.future start") + console.info( + "api.booking.stays.future start", + JSON.stringify({ query: { params: params.toString() } }) + ) const apiResponse = await api.get( api.endpoints.v1.upcomingStays, { @@ -438,7 +461,10 @@ export const userQueryRouter = router({ // } console.error( "api.booking.stays.future error ", - JSON.stringify(apiResponse) + JSON.stringify({ + query: { params: params.toString() }, + error: apiResponse, + }) ) return null } @@ -448,11 +474,16 @@ export const userQueryRouter = router({ if (!verifiedData.success) { console.error( "api.booking.stays.future validation error ", - JSON.stringify(verifiedData.error) + JSON.stringify({ + query: { params: params.toString() }, + error: verifiedData.error, + }) ) return null } - console.info("api.booking.stays.future success") + console.info("api.booking.stays.future success", { + query: { params: params.toString() }, + }) const nextCursor = verifiedData.data.links && verifiedData.data.links.offset < verifiedData.data.links.totalCount @@ -476,7 +507,10 @@ export const userQueryRouter = router({ .input(friendTransactionsInput) .query(async ({ ctx, input }) => { const { limit, page } = input - console.info("api.transaction.friendTransactions start") + console.info( + "api.transaction.friendTransactions start", + JSON.stringify({}) + ) const apiResponse = await api.get(api.endpoints.v1.friendTransactions, { cache: undefined, // override defaultOptions headers: { @@ -498,7 +532,7 @@ export const userQueryRouter = router({ // } console.error( "api.transaction.friendTransactions error ", - JSON.stringify(apiResponse) + JSON.stringify({ error: apiResponse }) ) return null } @@ -508,12 +542,15 @@ export const userQueryRouter = router({ if (!verifiedData.success) { console.error( "api.transaction.friendTransactions validation error ", - JSON.stringify(verifiedData.error) + JSON.stringify({ error: verifiedData.error }) ) return null } - console.info("api.transaction.friendTransactions success") + console.info( + "api.transaction.friendTransactions success", + JSON.stringify({}) + ) const updatedData = await updateStaysBookingUrl( verifiedData.data.data, ctx.session.token.access_token, @@ -580,7 +617,7 @@ export const userQueryRouter = router({ }), creditCards: protectedProcedure.query(async function ({ ctx }) { - console.info("api.profile.creditCards start") + console.info("api.profile.creditCards start", JSON.stringify({})) const apiResponse = await api.get(api.endpoints.v1.creditCards, { cache: "no-store", headers: { @@ -591,7 +628,7 @@ export const userQueryRouter = router({ if (!apiResponse.ok) { console.error( "api.profile.creditCards error ", - JSON.stringify(apiResponse) + JSON.stringify({ error: apiResponse }) ) return null } @@ -601,16 +638,16 @@ export const userQueryRouter = router({ if (!verifiedData.success) { console.error( "api.profile.creditCards validation error ", - JSON.stringify(verifiedData.error) + JSON.stringify({ error: verifiedData.error }) ) return null } - console.info("api.profile.creditCards success") + console.info("api.profile.creditCards success", JSON.stringify({})) return verifiedData.data.data }), membershipCards: protectedProcedure.query(async function ({ ctx }) { - console.info("api.profile start") + console.info("api.profile start", JSON.stringify({})) const apiResponse = await api.get(api.endpoints.v1.profile, { cache: "no-store", headers: { @@ -629,7 +666,7 @@ export const userQueryRouter = router({ // default: // throw internalServerError() // } - console.log("api.profile error ", JSON.stringify(apiResponse)) + console.log("api.profile error", JSON.stringify({ error: apiResponse })) } const apiJson = await apiResponse.json() @@ -640,12 +677,12 @@ export const userQueryRouter = router({ if (!verifiedData.success) { console.error( - "api.profile validation error ", - JSON.stringify(verifiedData) + "api.profile validation error", + JSON.stringify({ error: verifiedData }) ) return null } - console.info("api.profile success") + console.info("api.profile success", JSON.stringify({})) const cards = getMembershipCards(verifiedData.data) return cards From 7cd6367c15209ca53b68250603e34f1e8d3deab3 Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Thu, 22 Aug 2024 15:27:51 +0200 Subject: [PATCH 4/5] fix: change bad JSON.stringify:s --- .../routers/contentstack/accountPage/query.ts | 13 ++++--- server/routers/contentstack/base/query.ts | 17 +++++---- .../routers/contentstack/hotelPage/query.ts | 5 +-- .../routers/contentstack/loyaltyPage/query.ts | 10 +++--- .../contentstack/myPages/navigation/query.ts | 10 +++--- server/routers/hotels/query.ts | 5 ++- server/routers/user/query.ts | 36 +++++++++++++++---- 7 files changed, 69 insertions(+), 27 deletions(-) diff --git a/server/routers/contentstack/accountPage/query.ts b/server/routers/contentstack/accountPage/query.ts index 20aa33dfd..7948c78ad 100644 --- a/server/routers/contentstack/accountPage/query.ts +++ b/server/routers/contentstack/accountPage/query.ts @@ -51,11 +51,15 @@ export const accountPageQueryRouter = router({ ) if (!refsResponse.data) { + const notFoundError = notFound(refsResponse) console.error( "contentstack.accountPage.refs not found error", - JSON.stringify({ query: { lang, uid }, error: refsResponse }) + JSON.stringify({ + query: { lang, uid }, + error: { code: notFoundError.code }, + }) ) - throw notFound(refsResponse) + throw notFoundError } const cleanedData = removeEmptyObjects(refsResponse.data) @@ -93,14 +97,15 @@ export const accountPageQueryRouter = router({ ) if (!response.data) { + const notFoundError = notFound(response) console.error( "contentstack.accountPage not found error", JSON.stringify({ query: { lang, uid }, - error: response, + error: { code: notFoundError.code }, }) ) - throw notFound(response) + throw notFoundError } const validatedAccountPage = validateAccountPageSchema.safeParse( diff --git a/server/routers/contentstack/base/query.ts b/server/routers/contentstack/base/query.ts index fdf1aad8d..8627d57cc 100644 --- a/server/routers/contentstack/base/query.ts +++ b/server/routers/contentstack/base/query.ts @@ -1,3 +1,5 @@ +import { error } from "console" + import { GetContactConfig } from "@/lib/graphql/Query/ContactConfig.graphql" import { GetCurrentFooter, @@ -42,11 +44,12 @@ export const baseQueryRouter = router({ }) if (!response.data) { + const notFoundError = notFound(response) console.error( "contentstack.config not found error", - JSON.stringify({ query: { lang }, error: response }) + JSON.stringify({ query: { lang }, error: { code: notFoundError.code } }) ) - throw notFound(response) + throw notFoundError } const validatedContactConfigConfig = validateContactConfigSchema.safeParse( @@ -101,16 +104,17 @@ export const baseQueryRouter = router({ ) if (!response.data) { + const notFoundError = notFound(response) console.error( "contentstack.header not found error", JSON.stringify({ query: { lang: input.lang, }, - error: response, + error: { code: notFoundError.code }, }) ) - throw notFound(response) + throw notFoundError } const validatedHeaderConfig = validateHeaderConfigSchema.safeParse( @@ -179,16 +183,17 @@ export const baseQueryRouter = router({ ) if (!response.data) { + const notFoundError = notFound(response) console.error( "contentstack.footer not found error", JSON.stringify({ query: { lang: input.lang, }, - error: response, + error: { code: notFoundError.code }, }) ) - throw notFound(response) + throw notFoundError } const validatedFooterConfig = validateFooterConfigSchema.safeParse( diff --git a/server/routers/contentstack/hotelPage/query.ts b/server/routers/contentstack/hotelPage/query.ts index 00f4774b0..bf1f4ca6e 100644 --- a/server/routers/contentstack/hotelPage/query.ts +++ b/server/routers/contentstack/hotelPage/query.ts @@ -19,14 +19,15 @@ export const hotelPageQueryRouter = router({ uid, }) if (!response.data) { + const notFoundError = notFound(response) console.error( "contentstack.hotelPage not found error", JSON.stringify({ query: { lang, uid }, - error: response, + error: { code: notFoundError.code }, }) ) - throw notFound(response) + throw notFoundError } const validatedHotelPage = validateHotelPageSchema.safeParse(response.data) diff --git a/server/routers/contentstack/loyaltyPage/query.ts b/server/routers/contentstack/loyaltyPage/query.ts index bbda342a7..a0c901dd4 100644 --- a/server/routers/contentstack/loyaltyPage/query.ts +++ b/server/routers/contentstack/loyaltyPage/query.ts @@ -55,6 +55,7 @@ export const loyaltyPageQueryRouter = router({ ) if (!refsResponse.data) { + const notFoundError = notFound(refsResponse) console.error( "contentstack.loyaltyPage.refs not found error", JSON.stringify({ @@ -62,10 +63,10 @@ export const loyaltyPageQueryRouter = router({ lang, uid, }, - error: JSON.stringify(refsResponse), + error: { code: notFoundError.code }, }) ) - throw notFound(refsResponse) + throw notFoundError } const cleanedData = removeEmptyObjects(refsResponse.data) @@ -110,14 +111,15 @@ export const loyaltyPageQueryRouter = router({ ) if (!response.data) { + const notFoundError = notFound(response) console.error( "contentstack.loyaltyPage not found error", JSON.stringify({ query: { lang, uid }, - error: response, + error: { code: notFoundError.code }, }) ) - throw notFound(response) + throw notFoundError } const blocks = response.data.loyalty_page.blocks diff --git a/server/routers/contentstack/myPages/navigation/query.ts b/server/routers/contentstack/myPages/navigation/query.ts index 5c751df88..ef9def606 100644 --- a/server/routers/contentstack/myPages/navigation/query.ts +++ b/server/routers/contentstack/myPages/navigation/query.ts @@ -76,16 +76,17 @@ export const navigationQueryRouter = router({ ) if (!refsResponse.data) { + const notFoundError = notFound(refsResponse) console.error( "contentstack.myPages.navigation.refs not found error", JSON.stringify({ query: { lang, }, - error: refsResponse, + error: { code: notFoundError.code }, }) ) - throw notFound(refsResponse) + throw notFoundError } const validatedMyPagesNavigationRefs = @@ -127,13 +128,14 @@ export const navigationQueryRouter = router({ ) if (!response.data) { + const notFoundError = notFound(response) console.error("contentstack.myPages.navigation not found error", { query: { lang, }, - error: response, + error: { code: notFoundError.code }, }) - throw notFound(response) + throw notFoundError } const validatedMyPagesNavigation = navigationPayloadSchema.safeParse( diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 0494178cc..41529c738 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -54,7 +54,10 @@ export const hotelQueryRouter = router({ "api.hotels.hotel error", JSON.stringify({ query: { hotelId, params: params.toString() }, - error: apiResponse, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + }, }) ) return null diff --git a/server/routers/user/query.ts b/server/routers/user/query.ts index df489f2b7..57e4ccd8a 100644 --- a/server/routers/user/query.ts +++ b/server/routers/user/query.ts @@ -54,7 +54,10 @@ async function getVerifiedUser({ session }: { session: Session }) { console.error( "api.user.profile error", JSON.stringify({ - error: apiResponse, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + }, }) ) if (apiResponse.status === 401) { @@ -303,7 +306,12 @@ export const userQueryRouter = router({ if (!previousStaysResponse.ok) { console.error( "api.booking.stays.past error", - JSON.stringify({ error: previousStaysResponse }) + JSON.stringify({ + error: { + status: previousStaysResponse.status, + statusText: previousStaysResponse.statusText, + }, + }) ) return notLoggedInUserTrackingData } @@ -383,7 +391,10 @@ export const userQueryRouter = router({ "api.booking.stays.past error ", JSON.stringify({ query: { params: params.toString() }, - error: apiResponse, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + }, }) ) return null @@ -463,7 +474,10 @@ export const userQueryRouter = router({ "api.booking.stays.future error ", JSON.stringify({ query: { params: params.toString() }, - error: apiResponse, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + }, }) ) return null @@ -532,7 +546,12 @@ export const userQueryRouter = router({ // } console.error( "api.transaction.friendTransactions error ", - JSON.stringify({ error: apiResponse }) + JSON.stringify({ + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + }, + }) ) return null } @@ -628,7 +647,12 @@ export const userQueryRouter = router({ if (!apiResponse.ok) { console.error( "api.profile.creditCards error ", - JSON.stringify({ error: apiResponse }) + JSON.stringify({ + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + }, + }) ) return null } From 9497e8eef3ee13cbe76fec2aef396049376ff272 Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Fri, 23 Aug 2024 08:36:14 +0200 Subject: [PATCH 5/5] fix: add apiResponse.text() to logging --- lib/graphql/_request.ts | 10 +-- server/routers/contentstack/base/query.ts | 8 +-- .../contentstack/myPages/navigation/query.ts | 2 - server/routers/hotels/query.ts | 2 + server/routers/user/mutation.ts | 68 ++++++++++++++++--- server/routers/user/query.ts | 22 +++++- 6 files changed, 86 insertions(+), 26 deletions(-) diff --git a/lib/graphql/_request.ts b/lib/graphql/_request.ts index b3253f26b..5df74dce6 100644 --- a/lib/graphql/_request.ts +++ b/lib/graphql/_request.ts @@ -46,10 +46,10 @@ export async function request( } } - const print = (await import("graphql/language/printer")).print - const nr = Math.random() - console.log(`START REQUEST ${nr}`) - console.time(`OUTGOING REQUEST ${nr}`) + // const print = (await import("graphql/language/printer")).print + // const nr = Math.random() + // console.log(`START REQUEST ${nr}`) + // console.time(`OUTGOING REQUEST ${nr}`) // console.log(`Sending reqeust to ${env.CMS_URL}`) // console.log(`Query:`, print(query as DocumentNode)) // console.log(`Variables:`, variables) @@ -63,7 +63,7 @@ export async function request( variables, }) - console.timeEnd(`OUTGOING REQUEST ${nr}`) + // console.timeEnd(`OUTGOING REQUEST ${nr}`) // console.log({ response }) return { data: response } diff --git a/server/routers/contentstack/base/query.ts b/server/routers/contentstack/base/query.ts index 8627d57cc..d4952cc3f 100644 --- a/server/routers/contentstack/base/query.ts +++ b/server/routers/contentstack/base/query.ts @@ -1,5 +1,3 @@ -import { error } from "console" - import { GetContactConfig } from "@/lib/graphql/Query/ContactConfig.graphql" import { GetCurrentFooter, @@ -11,11 +9,7 @@ import { } from "@/lib/graphql/Query/CurrentHeader.graphql" import { request } from "@/lib/graphql/request" import { notFound } from "@/server/errors/trpc" -import { - contentstackBaseProcedure, - publicProcedure, - router, -} from "@/server/trpc" +import { contentstackBaseProcedure, router } from "@/server/trpc" import { generateTag } from "@/utils/generateTag" diff --git a/server/routers/contentstack/myPages/navigation/query.ts b/server/routers/contentstack/myPages/navigation/query.ts index ef9def606..38d60aa78 100644 --- a/server/routers/contentstack/myPages/navigation/query.ts +++ b/server/routers/contentstack/myPages/navigation/query.ts @@ -1,5 +1,3 @@ -import { error } from "console" - import { GetNavigationMyPages, GetNavigationMyPagesRefs, diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 41529c738..3f9d6ec33 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -50,6 +50,7 @@ export const hotelQueryRouter = router({ ) if (!apiResponse.ok) { + const text = await apiResponse.text() console.error( "api.hotels.hotel error", JSON.stringify({ @@ -57,6 +58,7 @@ export const hotelQueryRouter = router({ error: { status: apiResponse.status, statusText: apiResponse.statusText, + text, }, }) ) diff --git a/server/routers/user/mutation.ts b/server/routers/user/mutation.ts index cf568725c..21b266464 100644 --- a/server/routers/user/mutation.ts +++ b/server/routers/user/mutation.ts @@ -14,6 +14,10 @@ export const userMutationRouter = router({ ctx, input, }) { + console.info( + "api.user.creditCard.add start", + JSON.stringify({ query: { language: input.language } }) + ) const apiResponse = await api.post(api.endpoints.v1.intiateSaveCard, { headers: { Authorization: `Bearer ${ctx.session.token.access_token}`, @@ -26,24 +30,43 @@ export const userMutationRouter = router({ }) if (!apiResponse.ok) { - console.info(`API Response Failed - Initiating add Creadit Card flow`) - console.error(apiResponse) + const text = await apiResponse.text() + console.error( + "api.user.creditCard.add error", + JSON.stringify({ + query: { language: input.language }, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + error: text, + }, + }) + ) return null } const apiJson = await apiResponse.json() const verifiedData = initiateSaveCardSchema.safeParse(apiJson) if (!verifiedData.success) { - console.error(`Failed to initiate save card data`) - console.error(verifiedData.error) + console.error( + "api.user.creditCard.add validation error", + JSON.stringify({ + query: { language: input.language }, + error: verifiedData.error, + }) + ) return null } - + console.info( + "api.user.creditCard.add success", + JSON.stringify({ query: { language: input.language } }) + ) return verifiedData.data.data }), save: protectedProcedure .input(saveCreditCardInput) .mutation(async function ({ ctx, input }) { + console.info("api.user.creditCard.save start", JSON.stringify({})) const apiResponse = await api.post( `${api.endpoints.v1.creditCards}/${input.transactionId}`, { @@ -54,16 +77,29 @@ export const userMutationRouter = router({ ) if (!apiResponse.ok) { - console.error(`API Response Failed - Save card`) - console.error(apiResponse) + const text = await apiResponse.text() + console.error( + "api.user.creditCard.save error", + JSON.stringify({ + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + text, + }, + }) + ) return false } - + console.info("api.user.creditCard.save success", JSON.stringify({})) return true }), delete: protectedProcedure .input(deleteCreditCardInput) .mutation(async function ({ ctx, input }) { + console.info( + "api.user.creditCard.delete start", + JSON.stringify({ query: {} }) + ) const apiResponse = await api.remove( `${api.endpoints.v1.creditCards}/${input.creditCardId}`, { @@ -74,11 +110,21 @@ export const userMutationRouter = router({ ) if (!apiResponse.ok) { - console.error(`API Response Failed - Delete credit card`) - console.error(apiResponse) + const text = await apiResponse.text() + console.error( + "api.user.creditCard.delete error", + JSON.stringify({ + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + text, + }, + query: {}, + }) + ) return false } - + console.info("api.user.creditCard.delete success", JSON.stringify({})) return true }), }), diff --git a/server/routers/user/query.ts b/server/routers/user/query.ts index 57e4ccd8a..bf2c2eac4 100644 --- a/server/routers/user/query.ts +++ b/server/routers/user/query.ts @@ -51,12 +51,14 @@ async function getVerifiedUser({ session }: { session: Session }) { }) if (!apiResponse.ok) { + const text = await apiResponse.text() console.error( "api.user.profile error", JSON.stringify({ error: { status: apiResponse.status, statusText: apiResponse.statusText, + text, }, }) ) @@ -387,6 +389,7 @@ export const userQueryRouter = router({ // default: // throw internalServerError(apiResponse) // } + const text = await apiResponse.text() console.error( "api.booking.stays.past error ", JSON.stringify({ @@ -394,6 +397,7 @@ export const userQueryRouter = router({ error: { status: apiResponse.status, statusText: apiResponse.statusText, + text, }, }) ) @@ -470,6 +474,7 @@ export const userQueryRouter = router({ // default: // throw internalServerError(apiResponse) // } + const text = await apiResponse.text() console.error( "api.booking.stays.future error ", JSON.stringify({ @@ -477,6 +482,7 @@ export const userQueryRouter = router({ error: { status: apiResponse.status, statusText: apiResponse.statusText, + text, }, }) ) @@ -544,12 +550,14 @@ export const userQueryRouter = router({ // default: // throw internalServerError() // } + const text = await apiResponse.text() console.error( "api.transaction.friendTransactions error ", JSON.stringify({ error: { status: apiResponse.status, statusText: apiResponse.statusText, + text, }, }) ) @@ -645,12 +653,14 @@ export const userQueryRouter = router({ }) if (!apiResponse.ok) { + const text = await apiResponse.text() console.error( "api.profile.creditCards error ", JSON.stringify({ error: { status: apiResponse.status, statusText: apiResponse.statusText, + text, }, }) ) @@ -690,7 +700,17 @@ export const userQueryRouter = router({ // default: // throw internalServerError() // } - console.log("api.profile error", JSON.stringify({ error: apiResponse })) + const text = await apiResponse.text() + console.log( + "api.profile error", + JSON.stringify({ + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + text, + }, + }) + ) } const apiJson = await apiResponse.json()