export type Email1 = {value: string}; export type Phone = {value: string}; export type ContactPoint = Email1 | Phone; export type ByContactPoints = {contactPoints?: Array | undefined, displayName: string}; export type ById = {userId: string}; export type UserReference = ByContactPoints | ById; export type MapString = {[key: string]: string}; export type DeliveryAttemptFailed = {orderId: string, fulfillmentId?: string | undefined, reason?: string | undefined}; export type OrderCanceled = {orderId: string, reason?: string | undefined}; export type Money = {amount: number, currency: string}; export type LineItem = {label: string, reference?: string | undefined, quantity: number, amount: Money}; export type OrderCreated = {orderId: string, total: Money, lineItems?: Array | undefined}; export type FulfillmentLineItem = {label: string, reference?: string | undefined, quantity: number}; export type OrderDelivered = {orderId: string, fulfillmentId?: string | undefined, lineItems?: Array | undefined}; export type OrderDrafted = {orderId: string, total: Money, lineItems?: Array | undefined, note?: string | undefined}; export type OrderFulfilled = {orderId: string, fulfillmentId?: string | undefined, trackingNumber?: string | undefined, trackingUrl?: string | undefined, lineItems?: Array | undefined}; export type RefundCreated = {orderId: string, refundId?: string | undefined, total: Money, lineItems?: Array | undefined}; export type ReturnReceived = {orderId: string, returnId?: string | undefined, lineItems?: Array | undefined}; export type ReturnRequested = {orderId: string, returnId?: string | undefined, reason?: string | undefined, lineItems?: Array | undefined}; export type CommerceEventPayload = DeliveryAttemptFailed | OrderCanceled | OrderCreated | OrderDelivered | OrderDrafted | OrderFulfilled | RefundCreated | ReturnReceived | ReturnRequested; export type CommerceEvent = {eventId: string, eventTimestamp: string, user: UserReference, author?: UserReference | undefined, origin?: string | undefined, metadata?: MapString | undefined, payload: CommerceEventPayload}; export type CreateApiBetaCommerceEventsArgs = {body: CommerceEvent}; export type CreateApiBetaCommerceEventsOptions = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; /** * Submit commerce event * * POST /beta/commerce-events */ export const createApiBetaCommerceEvents = async (args: CreateApiBetaCommerceEventsArgs, options?: CreateApiBetaCommerceEventsOptions) => { const {baseUrl = "https://dev.dixa.io", fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") if (ApiKeyAuth !== undefined) headers.set("Authorization", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/beta/commerce-events${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 };