import {z} from 'zod' export type GetApiV3AccountsActivityArgs = {timestamp_max?: string | undefined, timestamp_min?: string | undefined, limit?: number | undefined, market_id?: Array | undefined, order_id?: Array | undefined, pagination_last_seq?: string | undefined, pagination_last_subseq?: string | undefined, sort?: ('seq,subseq' | '-seq,-subseq') | undefined, source?: (Array<'admin.credit' | 'admin.debit' | 'bonus.credit' | 'bonus.debit' | 'commission.update' | 'contract.reduce' | 'contract.resettle' | 'contract.settle' | 'contract.unsettle' | 'contract.void' | 'contract.unvoid' | 'contract.unreduce' | 'deposit' | 'deposit.approve' | 'deposit.deny' | 'deposit.request' | 'execution.reduce' | 'execution.settle' | 'execution.unsettle' | 'execution.unvoid' | 'execution.void' | 'market.partial_unsettle' | 'market.resettle' | 'market.settle' | 'market.unsettle' | 'market.unvoid' | 'market.void' | 'order.book.accept' | 'order.book.cancel' | 'order.book.reduce_qty' | 'order.book.reject' | 'order.cancel.reject' | 'order.cancel_replace.book.accept' | 'order.cancel_replace.book.reject' | 'order.create' | 'order.execute' | 'order.execute.confirm' | 'order.execute.void' | 'order.pending.replace' | 'order.reduce' | 'order.reject.account_suspended' | 'order.reject.insufficient_funds' | 'order.reject.invalid_quantity' | 'order.reject.limit_exceeded' | 'order.reject.market_not_found' | 'order.reject.stake_limit_exceeded' | 'order.settle' | 'order.unsettle' | 'order.unvoid' | 'order.void' | 'withdraw' | 'withdrawal.approve' | 'withdrawal.deny' | 'withdrawal.request' | 'cash_out.complete' | 'cash_out.request'>) | undefined, event_info?: boolean | undefined, include_promotion_data?: boolean | undefined}; export type GetApiV3AccountsActivityOptions = {baseUrl?: string | undefined, apiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV3AccountsActivityResponse = z.object({account_activity: z.array(z.object({amount: z.string().nullable().optional(), bet_token_type: z.enum(["free_bet", "boost_bet", "null"]).nullable().optional(), bonus_bet: z.boolean().optional(), bonus_change: z.string().nullable().optional(), commission: z.string().nullable().optional(), contract_id: z.string().nullable().optional(), event_id: z.string().nullable().optional(), exposure: z.string().nullable().optional(), extra: z.string().nullable().optional(), label: z.string().nullable().optional(), market_id: z.string().nullable().optional(), money: z.string().nullable().optional(), money_change: z.string().nullable().optional(), order_id: z.string().nullable().optional(), price: z.number().int().nullable().optional(), quantity: z.number().int().gte(0).lte(4294967295).nullable().optional(), quantity_change: z.number().int().nullable().optional(), quantity_user_currency: z.number().int().gte(0).lte(4294967295).nullable().optional(), quantity_user_currency_change: z.number().int().nullable().optional(), seq: z.number().int().optional(), side: z.enum(["buy", "sell"]).nullable().optional(), source: z.enum(["admin.credit", "admin.debit", "bonus.credit", "bonus.debit", "commission.update", "contract.reduce", "contract.resettle", "contract.settle", "contract.unsettle", "contract.void", "contract.unvoid", "contract.unreduce", "deposit", "deposit.approve", "deposit.deny", "deposit.request", "execution.reduce", "execution.settle", "execution.unsettle", "execution.unvoid", "execution.void", "market.partial_unsettle", "market.resettle", "market.settle", "market.unsettle", "market.unvoid", "market.void", "order.book.accept", "order.book.cancel", "order.book.reduce_qty", "order.book.reject", "order.cancel.reject", "order.cancel_replace.book.accept", "order.cancel_replace.book.reject", "order.create", "order.execute", "order.execute.confirm", "order.execute.void", "order.pending.replace", "order.reduce", "order.reject.account_suspended", "order.reject.insufficient_funds", "order.reject.invalid_quantity", "order.reject.limit_exceeded", "order.reject.market_not_found", "order.reject.stake_limit_exceeded", "order.settle", "order.unsettle", "order.unvoid", "order.void", "withdraw", "withdrawal.approve", "withdrawal.deny", "withdrawal.request", "cash_out.complete", "cash_out.request"]).optional(), subseq: z.number().int().optional(), timestamp: z.string().optional()})), contracts: z.array(z.object({name: z.string(), state_or_outcome: z.enum(["live", "open", "new", "halted", "winner", "loser", "deadheat", "reduced", "voided", "unavailable"])})).optional(), events: z.array(z.object({full_slug: z.string(), name: z.string(), parent_id: z.string().nullable(), slug: z.string(), state: z.enum(["new", "upcoming", "live", "ended", "settled", "cancelled", "suspended"]), type: z.union([z.enum(["american_football_match", "american_football_outright", "baseball_match", "baseball_outright", "basketball_esports_match", "basketball_match", "boxing_match", "call_of_duty_match", "cricket_match", "cricket_outright", "csgo_match", "current_affairs", "cycling", "darts_match", "darts_outright", "dota_2_match", "football_esports_match", "football_match", "football_outright", "golf_match", "golf_outright", "greyhound_racing_race", "handball_match", "horse_racing_race", "ice_hockey_match", "league_of_legends_match", "mma_match", "motorsports_race", "motorsports_outright", "politics", "politics_outright", "rowing", "rugby_league_match", "rugby_league_outright", "rugby_union_match", "rugby_union_outright", "sailing_race", "sailing_outright", "snooker_match", "snooker_outright", "table_tennis_match", "table_tennis_outright", "tennis_match", "tennis_outright", "volleyball_match", "generic", "top_level_event", "tv_entertainment"]), z.object({domain: z.enum(["accumulator", "american_football", "australian_rules", "baseball", "basketball", "basketball_esports", "boxing", "call_of_duty", "chess", "cricket", "csgo", "current_affairs", "cycling", "darts", "dota_2", "esports", "football", "football_esports", "golf", "greyhound_racing", "handball", "horse_racing", "ice_hockey", "king_of_glory", "league_of_legends", "lol_wild_rift", "mma", "motorsports", "olympics", "overwatch", "poker", "politics", "pubg", "rainbow_six_siege", "rocket_league", "rowing", "rugby_league", "rugby_union", "sailing", "snooker", "starcraft", "starcraft_2", "tv_and_entertainment", "table_tennis", "tennis", "valorant", "volleyball", "winter_sports", "gaelic_football", "gaelic_hurling", "manual_mapping"]), scope: z.enum(["root", "round", "category_root", "category", "single_event", "acca_root", "acca_category", "acca", "outright_root", "outright_category", "outright", "tour", "antepost_root", "antepost_category", "antepost"])})])})).optional(), markets: z.array(z.object({contract_selections: z.array(z.number().int()).nullable(), market_type: z.object({name: z.string(), param: z.string().optional(), params: z.object({}).optional()}).nullable(), name: z.string()})).optional(), pagination: z.object({next_page: z.string().nullable()}).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 }; /** * Retrieve statement information for your account. * * GET /v3/accounts/activity/ */ export const getApiV3AccountsActivity = async (args: GetApiV3AccountsActivityArgs, options?: GetApiV3AccountsActivityOptions) => { const {baseUrl = "https://api.smarkets.com", fetch: fetchFn = fetch, apiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.timestamp_max != null) query.append("timestamp_max", String(args.timestamp_max)) if (args.timestamp_min != null) query.append("timestamp_min", String(args.timestamp_min)) if (args.limit != null) query.append("limit", String(args.limit)) for (const item of args.market_id ?? []) query.append("market_id", String(item)) for (const item of args.order_id ?? []) query.append("order_id", String(item)) if (args.pagination_last_seq != null) query.append("pagination_last_seq", String(args.pagination_last_seq)) if (args.pagination_last_subseq != null) query.append("pagination_last_subseq", String(args.pagination_last_subseq)) if (args.sort != null) query.append("sort", String(args.sort)) for (const item of args.source ?? []) query.append("source", String(item)) if (args.event_info != null) query.append("event_info", String(args.event_info)) if (args.include_promotion_data != null) query.append("include_promotion_data", String(args.include_promotion_data)) if (apiKey !== undefined) headers.set("Authorization", apiKey) const url = `${baseUrl.replace(/\/+$/, '')}/v3/accounts/activity/${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(getApiV3AccountsActivityResponse, await res.json()) };