import { z } from "zod" import { createLogger } from "@scandic-hotels/common/logger/createLogger" import * as api from "../../../api" import { protectedProcedure } from "../../../procedures" import { getOTPState } from "./otp/getOTPState" import { getSasToken } from "./getSasToken" const outputSchema = z.object({ linkingState: z.enum(["unlinked", "notLinked", "error"]), }) const sasLogger = createLogger("SAS") export const unlinkAccount = protectedProcedure .output(outputSchema) .mutation(async function ({ ctx }) { const sasAuthToken = await getSasToken() const { referenceId } = await getOTPState() const apiResponse = await api.post(api.endpoints.v2.Profile.unlink, { headers: { Authorization: `Bearer ${ctx.session.token.access_token}`, }, body: { partner: "sas_eb", partnerSpecific: { eurobonusAccessToken: sasAuthToken, eurobonusOtpReferenceId: referenceId, }, }, }) if (apiResponse.status === 204 || apiResponse.status === 202) { sasLogger.debug("unlink account success") return { linkingState: "unlinked" } } if (apiResponse.status === 400) { const result = await apiResponse.json() sasLogger.debug("unlink account error with response", result) return { linkingState: "error" } } if (apiResponse.status === 404) { sasLogger.debug("tried unlinking an account that was not linked") return { linkingState: "notLinked" } } sasLogger.debug( `unlink account error with status code ${apiResponse.status} and response ${await apiResponse.text()}` ) return { linkingState: "error" } })