18 lines
1.6 KiB
TypeScript
18 lines
1.6 KiB
TypeScript
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<unknown>(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<unknown>(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
|
|
}
|