import {z} from 'zod' export type ItemOriginModel = 'brute' | 'phishing' | 'stealer' | 'autoreg' | 'personal' | 'resale' | 'dummy' | 'self_registration' | 'retrieve_via_support'; export type GetApiRiotArgs = {after?: string | undefined, pmin?: number | undefined, pmax?: number | undefined, title?: string | undefined, order_by?: ('price_to_up' | 'price_to_down' | 'pdate_to_down' | 'pdate_to_up' | 'pdate_to_down_upload' | 'pdate_to_up_upload' | 'edate_to_up' | 'edate_to_down' | 'ddate_to_up' | 'ddate_to_down' | 'auto_buy_diff_to_up' | 'auto_buy_diff_to_down') | undefined, 'tag_id[]'?: Array | undefined, 'not_tag_id[]'?: Array | undefined, 'public_tag_id[]'?: Array | undefined, 'not_public_tag_id[]'?: Array | undefined, 'origin[]'?: ('brute' | 'phishing' | 'stealer' | 'autoreg' | 'personal' | 'resale' | 'dummy' | 'self_registration' | 'retrieve_via_support') | undefined, 'not_origin[]'?: Array | undefined, user_id?: number | undefined, nsb?: boolean | undefined, sb?: boolean | undefined, nsb_by_me?: boolean | undefined, sb_by_me?: boolean | undefined, currency?: ('rub' | 'uah' | 'kzt' | 'byn' | 'usd' | 'eur' | 'gbp' | 'cny' | 'try' | 'jpy' | 'brl') | undefined, email_login_data?: boolean | undefined, 'email_provider[]'?: (Array<'other' | 'rambler' | 'outlook' | 'firstmail' | 'notletters' | 'mail_ru'>) | undefined, 'not_email_provider[]'?: ('other' | 'rambler' | 'outlook' | 'firstmail' | 'notletters' | 'mail_ru') | undefined, parse_same_item_ids?: boolean | undefined, 'email_type[]'?: (Array<'autoreg' | 'native' | 'no'>) | undefined, item_domain?: string | undefined, rmin?: (3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27) | undefined, rmax?: (3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27) | undefined, last_rmin?: (3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27) | undefined, last_rmax?: (3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27) | undefined, previous_rmin?: (3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27) | undefined, previous_rmax?: (3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27) | undefined, 'weaponSkin[]'?: Array | undefined, 'buddy[]'?: Array | undefined, 'agent[]'?: Array | undefined, 'champion[]'?: Array | undefined, 'skin[]'?: Array | undefined, 'country[]'?: Array | undefined, 'not_country[]'?: Array | undefined, daybreak?: number | undefined, valorant_level_min?: number | undefined, valorant_level_max?: number | undefined, lol_level_min?: number | undefined, lol_level_max?: number | undefined, inv_min?: number | undefined, inv_max?: number | undefined, vp_min?: number | undefined, vp_max?: number | undefined, valorant_smin?: number | undefined, valorant_smax?: number | undefined, 'valorant_rank_type[]'?: (Array<'ranked' | 'ranked_ready' | 'unrated'>) | undefined, amin?: number | undefined, amax?: number | undefined, 'valorant_region[]'?: Array | undefined, 'valorant_not_region[]'?: Array | undefined, 'lol_region[]'?: Array | undefined, 'lol_not_region[]'?: Array | undefined, knife?: boolean | undefined, lol_smin?: number | undefined, lol_smax?: number | undefined, champion_min?: number | undefined, champion_max?: number | undefined, win_rate_min?: number | undefined, win_rate_max?: number | undefined, blue_min?: number | undefined, blue_max?: number | undefined, orange_min?: number | undefined, orange_max?: number | undefined, mythic_min?: number | undefined, mythic_max?: number | undefined, riot_min?: number | undefined, riot_max?: number | undefined, email?: ('yes' | 'no' | 'nomatter') | undefined, tel?: ('yes' | 'no' | 'nomatter') | undefined, valorant_knife_min?: number | undefined, valorant_knife_max?: number | undefined, rp_min?: number | undefined, rp_max?: number | undefined, fa_min?: number | undefined, fa_max?: number | undefined, 'lol_rank[]'?: (Array<'Unranked' | 'IRON IV' | 'IRON III' | 'IRON II' | 'IRON I' | 'BRONZE IV' | 'BRONZE III' | 'BRONZE II' | 'BRONZE I' | 'SILVER IV' | 'SILVER III' | 'SILVER II' | 'SILVER I' | 'GOLD IV' | 'GOLD III' | 'GOLD II' | 'GOLD I' | 'PLATINUM IV' | 'PLATINUM III' | 'PLATINUM II' | 'PLATINUM I' | 'EMERALD IV' | 'EMERALD III' | 'EMERALD II' | 'EMERALD I' | 'DIAMOND IV' | 'DIAMOND III' | 'DIAMOND II' | 'DIAMOND I' | 'MASTER I' | 'GRANDMASTER I' | 'CHALLENGER I'>) | undefined, 'riot_game[]'?: (Array<'league-of-legends' | 'valorant'>) | undefined}; export type GetApiRiotOptions = {baseUrl?: string | undefined, HTTPBearer?: string | undefined, fetch?: typeof fetch | undefined}; export const respSystemInfo = z.object({rate_limit: z.object({limit: z.number().int(), remaining: z.number().int(), reset: z.number().int(), bucket: z.string().optional()}), visitor_id: z.number().int(), time: z.number().int(), log_id: z.number().int()}); export const getApiRiotResponse = z.object({items: z.array(z.object({item_id: z.number().int(), item_state: z.string(), category_id: z.number().int(), published_date: z.number().int(), title: z.string(), description: z.string(), price: z.number().int(), update_stat_date: z.number().int(), refreshed_date: z.number().int(), edit_date: z.number().int(), pending_deletion_date: z.number().int(), view_count: z.number().int(), is_sticky: z.number().int(), item_origin: z.string(), extended_guarantee: z.number().int(), nsb: z.number().int(), allow_ask_discount: z.number().int(), title_en: z.string(), description_en: z.string(), email_type: z.string(), email_provider: z.string().nullable(), item_domain: z.string(), resale_item_origin: z.string(), auto_bump_period: z.number().int(), guarantee_duration: z.number().int(), rub_price: z.number().int(), discount: z.object({ask_date: z.number().int(), ask_item_id: z.number().int(), ask_user_id: z.number().int(), auto_buy: z.boolean(), auto_buy_max_price: z.number().int(), balance_id: z.string(), discount_accepted: z.boolean(), discount_price: z.number().int(), message: z.string()}).nullable(), riot_item_id: z.number().int(), riot_id: z.string(), riot_account_verified: z.number().int(), riot_email_verified: z.number().int(), riot_country: z.string(), riot_password_change: z.number().int(), riot_phone_verified: z.number().int(), riot_last_activity: z.number().int(), riot_valorant_wallet_vp: z.number().int(), riot_valorant_wallet_rp: z.number().int(), riot_valorant_wallet_fa: z.number().int(), riot_valorant_level: z.number().int(), riot_username: z.string(), riot_valorant_rank: z.number().int(), riot_valorant_region: z.string(), riot_valorant_skin_count: z.number().int(), riot_valorant_agent_count: z.number().int(), riot_valorant_previous_rank: z.number().int(), riot_valorant_last_rank: z.number().int(), riot_valorant_rank_type: z.string(), riot_valorant_inventory_value: z.number().int(), riot_valorant_knife_count: z.number().int(), riot_lol_region: z.string(), riot_lol_skin_count: z.number().int(), riot_lol_champion_count: z.number().int(), riot_lol_level: z.number().int(), riot_lol_wallet_blue: z.number().int(), riot_lol_wallet_orange: z.number().int(), riot_lol_wallet_mythic: z.number().int(), riot_lol_wallet_riot: z.number().int(), riot_lol_rank: z.string(), riot_lol_rank_win_rate: z.number().int(), feedback_data: z.string(), max_discount_percent: z.number().int(), priceWithSellerFee: z.number().int(), category: z.object({category_id: z.number().int(), category_title: z.string(), category_name: z.string(), category_url: z.string()}), guarantee: z.object({duration: z.number().int(), class: z.string(), durationPhrase: z.string(), endDate: z.number().int().nullable(), active: z.number().int().nullable(), cancelled: z.number().int().nullable(), remainingTime: z.number().int().nullable()}), canViewLoginData: z.boolean(), canViewTempEmail: z.boolean(), canUpdateItemStats: z.boolean(), canReportItem: z.boolean(), canViewItemViews: z.boolean(), canManagePublicTag: z.boolean(), canViewEmailLoginData: z.boolean(), copyFormatData: z.object({title_link: z.string()}), showGetEmailCodeButton: z.boolean(), canOpenItem: z.boolean(), canCloseItem: z.boolean(), canEditItem: z.boolean(), canDeleteItem: z.boolean(), canStickItem: z.boolean(), canUnstickItem: z.boolean(), canBumpItem: z.boolean(), canNotBumpItemReason: z.string(), canAutoBump: z.boolean(), buyer: z.unknown(), isPersonalAccount: z.boolean(), canBuyItem: z.boolean(), price_currency: z.string(), priceWithSellerFeeLabel: z.string(), canValidateAccount: z.boolean(), canChangeOwner: z.boolean(), canResellItem: z.boolean(), valorantRegionPhrase: z.string(), valorantRankTitle: z.string(), valorantRankImgPath: z.string(), valorantPreviousRankTitle: z.string(), valorantLastRankTitle: z.string(), isSmallExf: z.boolean(), account_last_activity: z.number().int(), valorantInventory: z.object({WeaponSkins: z.array(z.string()), Agent: z.array(z.string()), Buddy: z.array(z.string())}), lolInventory: z.object({Champion: z.array(z.number().int()), Skin: z.record(z.string(), z.number().int())}), canViewAccountLink: z.boolean(), accountLinks: z.array(z.object({link: z.string(), text: z.string(), iconClass: z.string()})), accountLink: z.string(), imagePreviewLinks: z.object({download: z.object({weapons: z.string(), agents: z.string(), buddies: z.string(), champions: z.string(), skins: z.string()}), direct: z.object({weapons: z.string(), agents: z.string(), buddies: z.string(), champions: z.string(), skins: z.string()})}), emailLoginUrl: z.string(), canChangePassword: z.boolean(), canChangeEmailPassword: z.boolean(), uniqueKeyExists: z.boolean(), itemOriginPhrase: z.string(), sold_items_category_count: z.number().int(), restore_items_category_count: z.number().int(), tags: z.array(z.record(z.string(), z.object({tag_id: z.number().int(), title: z.string(), isDefault: z.boolean(), forOwnedAccountsOnly: z.boolean(), bc: z.string()}))).nullable(), public_tag: z.object({background_color: z.string(), tag_id: z.number().int(), title: z.string()}).nullable(), note_text: z.string().nullable(), descriptionHtml: z.string(), descriptionEnHtml: z.string(), descriptionPlain: z.string(), descriptionEnPlain: z.string(), seller: z.object({user_id: z.number().int(), sold_items_count: z.number().int(), active_items_count: z.number().int(), restore_data: z.string(), username: z.string(), avatar_date: z.number().int(), is_banned: z.number().int(), display_style_group_id: z.number().int(), restore_percents: z.number().int().nullable()}), lolRegionPhrase: z.string()})), totalItems: z.number().int(), totalItemsPrice: z.unknown(), hasNextPage: z.boolean(), nextCursor: z.string(), perPage: z.number().int(), page: z.number().int(), wasCached: z.boolean(), cacheTTL: z.number().int(), lastModified: z.number().int(), serverTime: z.number().int(), searchUrl: z.string(), search: z.string(), stickyItems: z.array(z.unknown()), publishedPeriodLabelPhrase: z.string(), filterDatesDefault: z.boolean(), published_startDate: z.string(), published_endDate: z.string(), filter_by_published_date: z.boolean(), published_period_label: z.string(), system_info: respSystemInfo}); 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 }; /** * Riot * * GET /riot */ export const getApiRiot = async (args: GetApiRiotArgs, options?: GetApiRiotOptions) => { const {baseUrl = "https://api.lzt.market", fetch: fetchFn = fetch, HTTPBearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.after != null) query.append("after", String(args.after)) if (args.pmin != null) query.append("pmin", String(args.pmin)) if (args.pmax != null) query.append("pmax", String(args.pmax)) if (args.title != null) query.append("title", String(args.title)) if (args.order_by != null) query.append("order_by", String(args.order_by)) for (const item of args['tag_id[]'] ?? []) query.append("tag_id[]", String(item)) for (const item of args['not_tag_id[]'] ?? []) query.append("not_tag_id[]", String(item)) for (const item of args['public_tag_id[]'] ?? []) query.append("public_tag_id[]", String(item)) for (const item of args['not_public_tag_id[]'] ?? []) query.append("not_public_tag_id[]", String(item)) if (args['origin[]'] != null) query.append("origin[]", String(args['origin[]'])) for (const item of args['not_origin[]'] ?? []) query.append("not_origin[]", String(item)) if (args.user_id != null) query.append("user_id", String(args.user_id)) if (args.nsb != null) query.append("nsb", String(args.nsb)) if (args.sb != null) query.append("sb", String(args.sb)) if (args.nsb_by_me != null) query.append("nsb_by_me", String(args.nsb_by_me)) if (args.sb_by_me != null) query.append("sb_by_me", String(args.sb_by_me)) if (args.currency != null) query.append("currency", String(args.currency)) if (args.email_login_data != null) query.append("email_login_data", String(args.email_login_data)) for (const item of args['email_provider[]'] ?? []) query.append("email_provider[]", String(item)) if (args['not_email_provider[]'] != null) query.append("not_email_provider[]", String(args['not_email_provider[]'])) if (args.parse_same_item_ids != null) query.append("parse_same_item_ids", String(args.parse_same_item_ids)) for (const item of args['email_type[]'] ?? []) query.append("email_type[]", String(item)) if (args.item_domain != null) query.append("item_domain", String(args.item_domain)) if (args.rmin != null) query.append("rmin", String(args.rmin)) if (args.rmax != null) query.append("rmax", String(args.rmax)) if (args.last_rmin != null) query.append("last_rmin", String(args.last_rmin)) if (args.last_rmax != null) query.append("last_rmax", String(args.last_rmax)) if (args.previous_rmin != null) query.append("previous_rmin", String(args.previous_rmin)) if (args.previous_rmax != null) query.append("previous_rmax", String(args.previous_rmax)) for (const item of args['weaponSkin[]'] ?? []) query.append("weaponSkin[]", String(item)) for (const item of args['buddy[]'] ?? []) query.append("buddy[]", String(item)) for (const item of args['agent[]'] ?? []) query.append("agent[]", String(item)) for (const item of args['champion[]'] ?? []) query.append("champion[]", String(item)) for (const item of args['skin[]'] ?? []) query.append("skin[]", String(item)) for (const item of args['country[]'] ?? []) query.append("country[]", String(item)) for (const item of args['not_country[]'] ?? []) query.append("not_country[]", String(item)) if (args.daybreak != null) query.append("daybreak", String(args.daybreak)) if (args.valorant_level_min != null) query.append("valorant_level_min", String(args.valorant_level_min)) if (args.valorant_level_max != null) query.append("valorant_level_max", String(args.valorant_level_max)) if (args.lol_level_min != null) query.append("lol_level_min", String(args.lol_level_min)) if (args.lol_level_max != null) query.append("lol_level_max", String(args.lol_level_max)) if (args.inv_min != null) query.append("inv_min", String(args.inv_min)) if (args.inv_max != null) query.append("inv_max", String(args.inv_max)) if (args.vp_min != null) query.append("vp_min", String(args.vp_min)) if (args.vp_max != null) query.append("vp_max", String(args.vp_max)) if (args.valorant_smin != null) query.append("valorant_smin", String(args.valorant_smin)) if (args.valorant_smax != null) query.append("valorant_smax", String(args.valorant_smax)) for (const item of args['valorant_rank_type[]'] ?? []) query.append("valorant_rank_type[]", String(item)) if (args.amin != null) query.append("amin", String(args.amin)) if (args.amax != null) query.append("amax", String(args.amax)) for (const item of args['valorant_region[]'] ?? []) query.append("valorant_region[]", String(item)) for (const item of args['valorant_not_region[]'] ?? []) query.append("valorant_not_region[]", String(item)) for (const item of args['lol_region[]'] ?? []) query.append("lol_region[]", String(item)) for (const item of args['lol_not_region[]'] ?? []) query.append("lol_not_region[]", String(item)) if (args.knife != null) query.append("knife", String(args.knife)) if (args.lol_smin != null) query.append("lol_smin", String(args.lol_smin)) if (args.lol_smax != null) query.append("lol_smax", String(args.lol_smax)) if (args.champion_min != null) query.append("champion_min", String(args.champion_min)) if (args.champion_max != null) query.append("champion_max", String(args.champion_max)) if (args.win_rate_min != null) query.append("win_rate_min", String(args.win_rate_min)) if (args.win_rate_max != null) query.append("win_rate_max", String(args.win_rate_max)) if (args.blue_min != null) query.append("blue_min", String(args.blue_min)) if (args.blue_max != null) query.append("blue_max", String(args.blue_max)) if (args.orange_min != null) query.append("orange_min", String(args.orange_min)) if (args.orange_max != null) query.append("orange_max", String(args.orange_max)) if (args.mythic_min != null) query.append("mythic_min", String(args.mythic_min)) if (args.mythic_max != null) query.append("mythic_max", String(args.mythic_max)) if (args.riot_min != null) query.append("riot_min", String(args.riot_min)) if (args.riot_max != null) query.append("riot_max", String(args.riot_max)) if (args.email != null) query.append("email", String(args.email)) if (args.tel != null) query.append("tel", String(args.tel)) if (args.valorant_knife_min != null) query.append("valorant_knife_min", String(args.valorant_knife_min)) if (args.valorant_knife_max != null) query.append("valorant_knife_max", String(args.valorant_knife_max)) if (args.rp_min != null) query.append("rp_min", String(args.rp_min)) if (args.rp_max != null) query.append("rp_max", String(args.rp_max)) if (args.fa_min != null) query.append("fa_min", String(args.fa_min)) if (args.fa_max != null) query.append("fa_max", String(args.fa_max)) for (const item of args['lol_rank[]'] ?? []) query.append("lol_rank[]", String(item)) for (const item of args['riot_game[]'] ?? []) query.append("riot_game[]", String(item)) if (HTTPBearer !== undefined) headers.set('authorization', `Bearer ${HTTPBearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/riot${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(getApiRiotResponse, await res.json()) };