import {z} from 'zod' export type GetApiStoresStoreIdAffiliatesArgs = {storeId: string, query?: string | undefined, isEnabled?: boolean | undefined, email?: string | undefined, link?: string | undefined, balanceFrom?: number | undefined, balanceTo?: number | undefined, returnPercentageFrom?: number | undefined, returnPercentageTo?: number | undefined, percentageOffFrom?: number | undefined, percentageOffTo?: number | undefined, referredOrdersFrom?: number | undefined, referredOrdersTo?: number | undefined, allTimeEarnedFrom?: number | undefined, allTimeEarnedTo?: number | undefined, payoutCountFrom?: number | undefined, payoutCountTo?: number | undefined, dateFrom?: string | undefined, dateTo?: string | undefined, Filters?: string | undefined, Sorts?: string | undefined, Page?: number | undefined, PageSize?: number | undefined}; export type GetApiStoresStoreIdAffiliatesOptions = {baseUrl?: string | undefined, bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const displayAffiliate = z.object({id: z.string(), dateCreated: z.string(), isEnabled: z.boolean(), customerId: z.string(), emailAddress: z.string(), link: z.string(), returnPercentage: z.number().int().nullable().optional(), percentageOff: z.number().int().nullable().optional(), balance: z.number(), allTimeEarned: z.number(), referredOrders: z.number().int(), conversionRate: z.number()}); export const displayAffiliatePaginatedResponse = z.object({success: z.boolean(), pages: z.number().int(), data: z.array(displayAffiliate)}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * List store affiliates. * * GET /stores/{storeId}/affiliates */ export const getApiStoresStoreIdAffiliates = async (args: GetApiStoresStoreIdAffiliatesArgs, options?: GetApiStoresStoreIdAffiliatesOptions) => { const {baseUrl = "https://api.komerza.com", fetch: fetchFn = fetch, bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.query != null) query.append("query", String(args.query)) if (args.isEnabled != null) query.append("isEnabled", String(args.isEnabled)) if (args.email != null) query.append("email", String(args.email)) if (args.link != null) query.append("link", String(args.link)) if (args.balanceFrom != null) query.append("balanceFrom", String(args.balanceFrom)) if (args.balanceTo != null) query.append("balanceTo", String(args.balanceTo)) if (args.returnPercentageFrom != null) query.append("returnPercentageFrom", String(args.returnPercentageFrom)) if (args.returnPercentageTo != null) query.append("returnPercentageTo", String(args.returnPercentageTo)) if (args.percentageOffFrom != null) query.append("percentageOffFrom", String(args.percentageOffFrom)) if (args.percentageOffTo != null) query.append("percentageOffTo", String(args.percentageOffTo)) if (args.referredOrdersFrom != null) query.append("referredOrdersFrom", String(args.referredOrdersFrom)) if (args.referredOrdersTo != null) query.append("referredOrdersTo", String(args.referredOrdersTo)) if (args.allTimeEarnedFrom != null) query.append("allTimeEarnedFrom", String(args.allTimeEarnedFrom)) if (args.allTimeEarnedTo != null) query.append("allTimeEarnedTo", String(args.allTimeEarnedTo)) if (args.payoutCountFrom != null) query.append("payoutCountFrom", String(args.payoutCountFrom)) if (args.payoutCountTo != null) query.append("payoutCountTo", String(args.payoutCountTo)) if (args.dateFrom != null) query.append("dateFrom", String(args.dateFrom)) if (args.dateTo != null) query.append("dateTo", String(args.dateTo)) if (args.Filters != null) query.append("Filters", String(args.Filters)) if (args.Sorts != null) query.append("Sorts", String(args.Sorts)) if (args.Page != null) query.append("Page", String(args.Page)) if (args.PageSize != null) query.append("PageSize", String(args.PageSize)) if (bearer !== undefined) headers.set('authorization', `Bearer ${bearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/stores/${encodeURIComponent(String(args.storeId))}/affiliates${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(displayAffiliatePaginatedResponse, await res.json()) };