import {z} from 'zod' export type ExtraModel = {proxy?: string | undefined, close_item?: boolean | undefined, region?: string | undefined, service?: ('windscribeVPN' | 'tunnelbearVPN' | 'vanishVPN' | 'mullvadVPN' | 'PIAVPN' | 'AdguardVPN' | 'pureVPN' | 'ultraVPN' | 'cyberghostVPN' | 'vyprVPN' | 'hotspotShieldVPN' | 'planetVPN' | 'telegram' | 'discord' | 'discord_trial' | 'chatgpt' | 'claude' | 'cursor' | 'grok' | 'kimi' | 'openrouter' | 'perplexity' | 'windsurf') | undefined, system?: ('laser' | 'scroll' | 'magic') | undefined, confirmationCode?: string | undefined, cookies?: string | undefined, login_without_cookies?: boolean | undefined, cookie_login?: boolean | undefined, mfa_file?: string | undefined, parse_dota2?: boolean | undefined, uplay_games?: boolean | undefined, ea_games?: boolean | undefined, ark?: boolean | undefined, ark_ascended?: boolean | undefined, warframe?: boolean | undefined, the_quarry?: boolean | undefined, brawlhalla?: boolean | undefined, genshin_currency?: number | undefined, honkai_currency?: number | undefined, zenless_currency?: number | undefined, password?: string | undefined, telegramClient?: string | undefined, telegramJson?: string | undefined, checkChannels?: boolean | undefined, checkSpam?: boolean | undefined, checkHypixelBan?: boolean | undefined}; export type CreateApiItemIdGoodsCheckArgs = {item_id: number, body: {random_proxy?: boolean | undefined, login?: string | undefined, password?: string | undefined, login_password?: string | undefined, has_email_login_data?: boolean | undefined, email_login_data?: string | undefined, email_type?: ('native' | 'autoreg') | undefined, extra?: ExtraModel | undefined}}; export type CreateApiItemIdGoodsCheckOptions = {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 createApiItemIdGoodsCheckResponse = z.object({status: z.string(), item: 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(), login: z.string(), temp_email: z.string(), view_count: z.number().int(), is_sticky: z.number().int(), information: z.string(), 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(), information_en: z.string(), email_type: z.string(), email_provider: z.string(), item_domain: z.string(), resale_item_origin: z.string(), user_allow_ask_discount: z.number().int(), max_discount_percent: z.number().int(), market_custom_title: z.string(), feedback_data: z.string(), buyer_avatar_date: z.number().int(), buyer_user_group_id: z.number().int(), priceWithSellerFee: z.number().int(), guarantee: z.object({duration: z.number().int(), class: z.string(), durationPhrase: z.string(), endDate: z.number().int(), active: z.boolean(), cancelled: z.boolean(), remainingTime: z.number().int(), remainingTimePhrase: z.string()}), canViewLoginData: z.boolean(), canUpdateItemStats: z.boolean(), canReportItem: z.boolean(), loginData: z.object({raw: z.string(), encodedRaw: z.string(), login: z.string(), password: z.string(), encodedPassword: z.string(), oldPassword: z.string(), encodedOldPassword: z.unknown()}), canViewEmailLoginData: z.boolean(), emailLoginData: z.object({raw: z.string(), encodedRaw: z.string(), login: z.string(), password: z.string(), encodedPassword: z.string(), oldPassword: z.string(), encodedOldPassword: z.string()}), showGetEmailCodeButton: z.boolean(), getEmailCodeDisplayLogin: z.string(), buyer: z.object({user_id: z.number().int(), operation_date: z.number().int(), visitorIsBuyer: z.boolean(), username: z.string(), is_banned: z.number().int(), display_style_group_id: z.number().int(), uniq_username_css: z.string(), user_group_id: z.number().int()}), isPersonalAccount: z.boolean(), sold_items_category_count: z.number().int(), restore_items_category_count: z.number().int(), rub_price: z.number().int(), price_currency: z.string(), canValidateAccount: z.boolean(), canResellItemAfterPurchase: z.boolean(), account_last_activity: z.number().int(), displayConvertedBalance: z.boolean(), canViewAccountLink: z.boolean(), accountLinks: z.array(z.object({link: z.string(), text: z.string(), iconClass: z.string()})), accountLink: z.string(), emailLoginUrl: z.string(), canChangePassword: z.boolean(), itemOriginPhrase: z.string(), visitorIsAuthor: z.boolean(), canAskDiscount: z.boolean(), tags: z.object({"1": z.object({tag_id: z.number().int(), title: z.string(), isDefault: z.boolean(), forOwnedAccountsOnly: z.boolean(), bc: z.string()})}), customFields: z.array(z.unknown()), externalAuth: z.array(z.unknown()), isTrusted: z.boolean(), isBirthdayToday: z.boolean(), isIgnored: z.boolean(), deposit: z.number().int(), extraPrices: z.array(z.object({currency: z.string(), price: z.string()})), canViewAccountLoginAndTempEmail: z.boolean(), bumpSettings: z.object({canBumpItem: z.boolean(), canBumpItemGlobally: z.boolean(), shortErrorPhrase: z.unknown(), errorPhrase: z.unknown()}), canCheckGuarantee: z.boolean(), needToRequireVideoToViewLoginData: z.boolean(), descriptionHtml: z.string(), descriptionEnHtml: z.string(), descriptionPlain: z.string(), descriptionEnPlain: z.string(), seller: z.object({user_id: z.number().int(), username: z.string(), avatar_date: z.number().int(), is_banned: z.number().int(), display_style_group_id: z.number().int(), joined_date: z.number().int(), sold_items_count: z.number().int(), active_items_count: z.number().int(), restore_data: z.string(), restore_percents: z.number().int(), isOnline: z.boolean()})}), 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 }; /** * Check Account Details * * POST /{item_id}/goods/check */ export const createApiItemIdGoodsCheck = async (args: CreateApiItemIdGoodsCheckArgs, options?: CreateApiItemIdGoodsCheckOptions) => { const {baseUrl = "https://api.lzt.market", fetch: fetchFn = fetch, HTTPBearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (HTTPBearer !== undefined) headers.set('authorization', `Bearer ${HTTPBearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/${encodeURIComponent(String(args.item_id))}/goods/check${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 validateResponse(createApiItemIdGoodsCheckResponse, await res.json()) };