export type BillClosedEvent = {webhookType: string, eventTime: string, orderId: string, tableNumber: number, closeTime: string, openTime: string, orderNumber: number, resultSum: number, orderStatus: string, totalSum: number, waiterId: string, waiter: string, discounts: {list?: (Array<{id?: string | undefined, name?: string | undefined, sum?: number | undefined, code?: number | undefined}>) | undefined}, guests: Array<{name?: string | undefined, id?: string | undefined, dishes?: (Array<{taxCategoryId?: string | undefined, taxCategory?: string | undefined, positionId?: string | undefined, name?: string | undefined, count?: number | undefined, sum?: number | undefined, price?: number | undefined, categoryId?: string | undefined, category?: string | undefined, orderNumber?: number | undefined, type?: string | undefined, dishId?: string | undefined, linkedTo?: string | undefined, rawSum?: number | undefined, additionalInfo?: ({system?: string | undefined, course?: number | undefined, comment?: string | undefined, status?: string | undefined, productGroupExternalId?: string | undefined}) | undefined}>) | undefined}>, isBanquetOrder: boolean, isDelivery: boolean, bonusSum: number, splitAvailable: boolean, rewardAvailable: boolean, billTime: string, paidSum: number, discountSum: number, tableId: string, pricingTime?: string | undefined, version: number, payments: Array<{paymentTypeName?: string | undefined, sum?: number | undefined, paymentTypeKind?: string | undefined, additionalInfo?: ({system?: string | undefined, externalId?: string | undefined, status?: string | undefined, typeId?: string | undefined, isPrepay?: boolean | undefined, isExternal?: boolean | undefined}) | undefined}>, additionalInfo: {system?: string | undefined, tablesDetails?: (Array<{externalId?: string | undefined, name?: string | undefined, fullName?: string | undefined, number?: number | undefined, seatingCapacity?: number | undefined, description?: string | undefined, isActive?: boolean | undefined}>) | undefined, waiterDetails?: (Array<{externalId?: string | undefined, name?: string | undefined, phone?: string | undefined, pinCode?: string | undefined}>) | undefined}, orderType: string}; export type CreateApiApiShaketopayComUaCallbackWebhookArgs = {restoId: string, body: BillClosedEvent}; export type CreateApiApiShaketopayComUaCallbackWebhookOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; /** * Відправка вебхука при отриманні фінального статусу замовлення. * * POST //api.shaketopay.com.ua/callback/webhook */ export const createApiApiShaketopayComUaCallbackWebhook = async (args: CreateApiApiShaketopayComUaCallbackWebhookArgs, options: CreateApiApiShaketopayComUaCallbackWebhookOptions) => { 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)) const url = `${baseUrl.replace(/\/+$/, '')}//api.shaketopay.com.ua/callback/webhook${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 };