Merged in chore/add-error-details-for-sentry (pull request #3378)
Include more details when throwing errors for debugging in Sentry * WIP throw errors with more details for debugging in Sentry * Fix throwing response-data * Clearer message when a response fails * Add message to errors * better typings * . * Try to send profileID and membershipNumber to Sentry when we fail to parse the apiResponse * rename notFound -> notFoundError * Merge branch 'master' of bitbucket.org:scandic-swap/web into chore/add-error-details-for-sentry Approved-by: Linus Flood
This commit is contained in:
@@ -1,10 +1,20 @@
|
||||
import * as Sentry from "@sentry/nextjs"
|
||||
|
||||
import { createCounter } from "@scandic-hotels/common/telemetry"
|
||||
|
||||
import * as api from "../../../api"
|
||||
import { cache } from "../../../DUPLICATED/cache"
|
||||
import { serverErrorByStatus, sessionExpiredError } from "../../../errors"
|
||||
import {
|
||||
extractResponseDetails,
|
||||
serverErrorByStatus,
|
||||
sessionExpiredError,
|
||||
} from "../../../errors"
|
||||
import { getBasicUserSchema } from "../output"
|
||||
|
||||
import type z from "zod"
|
||||
|
||||
import type { DeepPartial } from "../../../types/deepPartial"
|
||||
|
||||
export const getBasicUser = cache(
|
||||
async ({
|
||||
token,
|
||||
@@ -30,12 +40,17 @@ export const getBasicUser = cache(
|
||||
if (!apiResponse.ok) {
|
||||
await metricsGetBasicUser.httpError(apiResponse)
|
||||
|
||||
throw serverErrorByStatus(apiResponse.status, apiResponse)
|
||||
throw serverErrorByStatus(
|
||||
apiResponse.status,
|
||||
await extractResponseDetails(apiResponse),
|
||||
"getBasicUser failed"
|
||||
)
|
||||
}
|
||||
const apiJson = await apiResponse.json()
|
||||
|
||||
const verifiedData = getBasicUserSchema.safeParse(apiJson)
|
||||
if (!verifiedData.success) {
|
||||
addUserToSentry(apiJson)
|
||||
metricsGetBasicUser.validationError(verifiedData.error)
|
||||
throw verifiedData.error
|
||||
}
|
||||
@@ -45,3 +60,18 @@ export const getBasicUser = cache(
|
||||
return verifiedData.data
|
||||
}
|
||||
)
|
||||
|
||||
function addUserToSentry(apiJson: unknown) {
|
||||
const typedData = apiJson as DeepPartial<z.input<typeof getBasicUserSchema>>
|
||||
if (
|
||||
typeof typedData?.profileId === "undefined" ||
|
||||
typeof typedData?.membershipNumber === "undefined"
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
Sentry.setUser({
|
||||
id: typedData?.profileId,
|
||||
username: typedData?.membershipNumber,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user