import { createCounter } from "@scandic-hotels/common/telemetry" import * as api from "../../../api" import { cache } from "../../../DUPLICATED/cache" import { serverErrorByStatus, sessionExpiredError } from "../../../errors" import { getBasicUserSchema } from "../output" export const getBasicUser = cache( async ({ token, }: { token: { expires_at?: number; access_token: string } }) => { const getBasicUserCounter = createCounter("user.getBasicUser") const metricsGetBasicUser = getBasicUserCounter.init() metricsGetBasicUser.start() const now = Date.now() if (token.expires_at && token.expires_at < now) { throw sessionExpiredError() } const apiResponse = await api.get(api.endpoints.v2.Profile.basicProfile, { headers: { Authorization: `Bearer ${token.access_token}`, }, }) if (!apiResponse.ok) { await metricsGetBasicUser.httpError(apiResponse) throw serverErrorByStatus(apiResponse.status, apiResponse) } const apiJson = await apiResponse.json() const verifiedData = getBasicUserSchema.safeParse(apiJson) if (!verifiedData.success) { metricsGetBasicUser.validationError(verifiedData.error) throw verifiedData.error } metricsGetBasicUser.success() return verifiedData.data } )