export type JsonNode = Record; export type DishIikoResponse = {category?: string | undefined, categoryId?: string | undefined, checkNumber?: string | undefined, count: number, dishId?: string | undefined, linkedTo?: string | undefined, hidden?: boolean | undefined, name?: string | undefined, orderNumber?: string | undefined, positionId?: string | undefined, sum: string, taxCategory?: string | undefined, taxCategoryId?: string | undefined, type?: string | undefined}; export type GuestIikoResponse = {dishes: Array, name?: string | undefined}; export type IikoOrderResponse = {billId?: string | undefined, bonusSum?: number | undefined, created?: string | undefined, discounts?: JsonNode | undefined, guests: Array, isBanquetOrder?: boolean | undefined, isDelivery?: boolean | undefined, orderNumber: string, paymentType?: string | undefined, pricingTime?: string | undefined, rawSum?: number | undefined, rootBillId?: string | undefined, splitAvailable?: boolean | undefined, state?: string | undefined, tableId?: string | undefined, totalSum: number, waiter?: string | undefined, waiterId?: string | undefined, billAmountForTips?: number | undefined}; export type GetBillContentsResponse = {errorCode?: string | undefined, errorMessage?: string | undefined, orders?: Array | undefined, rID?: string | undefined, state: 'FAIL' | 'SUCCESS', substate?: string | undefined, tableNumber: unknown}; export type CreateApiCallbackGetBillArgs = {restoId: string, signature: string, body: GetBillContentsResponse}; export type CreateApiCallbackGetBillOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; /** * Сервіс передачі інформації про знайдений рахунок * * POST /callback/getBill */ export const createApiCallbackGetBill = async (args: CreateApiCallbackGetBillArgs, options: CreateApiCallbackGetBillOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") if (args.restoId != null) headers.set("restoId", String(args.restoId)) if (args.signature != null) headers.set("signature", String(args.signature)) const url = `${baseUrl.replace(/\/+$/, '')}/callback/getBill${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return undefined };