import {alertsOutboxOverviewSchema,alertsOutboxRetrySchema,alertsOutboxRetryReceiptSchema} from "@mmapp/contracts/alerts" import {requestJson} from "./http-client" export async function getAlertsOutbox(base:string,options?:{signal?:AbortSignal}){ const signal=options?.signal?AbortSignal.any([options.signal,AbortSignal.timeout(30_000)]):AbortSignal.timeout(30_000);signal.throwIfAborted() const parsed=alertsOutboxOverviewSchema.safeParse(await requestJson(base,"/api/alerts/outbox",{signal,cache:"no-store"}));signal.throwIfAborted() if(!parsed.success)throw Error("Состояние очереди не подтверждено сервером") return parsed.data } export async function retryAlertsOutbox(base:string,id:string,input:unknown,options?:{signal?:AbortSignal}){ const body=alertsOutboxRetrySchema.safeParse(input);if(!body.success||!id.trim()||id.length>200)throw Error("Проверьте подтверждение и версию сообщения") const signal=options?.signal?AbortSignal.any([options.signal,AbortSignal.timeout(30_000)]):AbortSignal.timeout(30_000);signal.throwIfAborted() const raw=await requestJson(base,"/api/alerts/outbox/"+encodeURIComponent(id)+"/retry",{method:"POST",body:JSON.stringify(body.data),signal,cache:"no-store"});signal.throwIfAborted() const parsed=alertsOutboxRetryReceiptSchema.safeParse(raw) if(!parsed.success||parsed.data.id!==id||parsed.data.resolutionVersion!==body.data.expectedVersion+1)throw Error("Постановка сообщения в очередь не подтверждена сервером") return parsed.data }