import { dt } from "@scandic-hotels/common/dt" import { createCounter } from "@scandic-hotels/common/telemetry" import * as api from "../../../api" import { cache } from "../../../DUPLICATED/cache" import { creditCardsSchema } from "../output" import type { Session } from "next-auth" export const getCreditCards = cache( async ({ session, onlyNonExpired, }: { session: Session onlyNonExpired?: boolean }) => { const getCreditCardsCounter = createCounter("user.getCreditCards") const metricsGetCreditCards = getCreditCardsCounter.init({ onlyNonExpired, }) metricsGetCreditCards.start() const apiResponse = await api.get( api.endpoints.v2.Profile.CreditCard.creditCard, { headers: { Authorization: `Bearer ${session.token.access_token}`, }, } ) if (!apiResponse.ok) { await metricsGetCreditCards.httpError(apiResponse) return null } const apiJson = await apiResponse.json() const verifiedData = creditCardsSchema.safeParse(apiJson) if (!verifiedData.success) { metricsGetCreditCards.validationError(verifiedData.error) return null } const result = verifiedData.data.data.filter((card) => { if (onlyNonExpired) { try { const expirationDate = dt(card.expirationDate).startOf("day") const currentDate = dt().startOf("day") return expirationDate > currentDate } catch (_) { return false } } return true }) metricsGetCreditCards.success() return result } )