import {z} from 'zod' export type GetApiMerchantsMerchantIdArgs = {merchant_id: string, 'include_fields[]'?: (Array<'current_theme_key' | 'instagram_username' | 'admin_status'>) | undefined}; export type GetApiMerchantsMerchantIdOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const taxRegion = z.object({id: z.string().optional(), region: z.string().optional(), rate: z.number().optional(), type: z.string().optional(), default_rate: z.number().optional(), default_rate_range: z.array(z.number()).optional()}); export const merchantTax = z.object({id: z.string().optional(), name: z.string().optional(), merchant_id: z.string().optional(), country: z.string().optional(), is_default_rates: z.boolean().optional(), enable_inclusive: z.boolean().optional(), allow_inclusive_tax: z.boolean().optional(), service_charge_taxable: z.boolean().optional(), emoji_flag: z.string().optional(), sales: z.object({general: taxRegion.optional(), details: z.array(taxRegion).optional()}).optional(), delivery: z.object({general: taxRegion.optional(), details: z.array(taxRegion).optional()}).optional(), service_charge: z.object({general: taxRegion.optional(), details: z.array(taxRegion).optional()}).optional()}); export const merchant = z.object({id: z.string().optional(), base_country_code: z.string().optional(), base_currency_code: z.string().optional(), name: z.string().optional(), email: z.string().optional(), handle: z.string().optional(), custom_domain: z.string().optional(), current_plan_key: z.string().optional(), default_language_code: z.string().optional(), staff_id: z.string().optional(), rollout_keys: z.array(z.string()).optional(), supported_languages: z.array(z.string()).optional(), logo_media: z.object({id: z.string().optional(), alt_translations: z.object({en: z.string().optional(), "zh-hant": z.string().optional(), "zh-cn": z.string().optional(), vi: z.string().optional(), ms: z.string().optional(), ja: z.string().optional(), th: z.string().optional(), id: z.string().optional(), de: z.string().optional(), fr: z.string().optional()}).optional(), images: z.object({}).optional()}).optional(), kyc_status: z.enum(["not_yet_applied", "basic_account_pending", "basic_account_verified", "basic_account_rejected", "basic_account_reviewed", "advanced_account_pending", "advanced_account_verified", "advanced_account_rejected", "advanced_account_failed"]).optional(), admin_status: z.enum(["normal", "suspended"]).optional(), sl_payment_merchant_id: z.string().optional(), sl_payment_mcc: z.string().optional(), sl_payment_billing_descriptor_name: z.string().optional(), product_lines: z.object({}).optional(), tags: z.array(z.string()).optional(), emails: z.object({}).optional(), phones: z.object({}).optional(), pos_payment_id: z.string().optional(), pos_delivery_option_id: z.string().optional(), brand_home_url: z.string().optional(), taxes: z.array(merchantTax).optional(), current_theme_key: z.string().optional(), instagram_username: z.string().optional(), whitelisted_ip_addresses: z.array(z.object({_id: z.string().optional(), name: z.string().optional(), address: z.string().optional(), updated_at: z.string().optional(), created_at: z.string().optional()})).optional()}); 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 }; /** * Get Merchant * * GET /merchants/{merchant_id} */ export const getApiMerchantsMerchantId = async (args: GetApiMerchantsMerchantIdArgs, options?: GetApiMerchantsMerchantIdOptions) => { const {baseUrl = "https://open.shopline.io/v1", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") for (const item of args['include_fields[]'] ?? []) query.append("include_fields[]", String(item)) if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/merchants/${encodeURIComponent(String(args.merchant_id))}${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(merchant, await res.json()) };