@carapis/api
Version:
Universal TypeScript/JavaScript client for CARAPIS Vehicles API - Access automotive data from 25+ global marketplaces including Cars.com, AutoScout24, Encar, Auto.ru, and more. Enterprise-grade automotive data extraction with real-time vehicle listings, p
1 lines • 137 kB
Source Map (JSON)
{"version":3,"sources":["../src/generated/vehicles_api/index.ts","../src/generated/vehicles_api/core/bodySerializer.gen.ts","../src/generated/vehicles_api/core/params.gen.ts","../src/generated/vehicles_api/core/auth.gen.ts","../src/generated/vehicles_api/core/pathSerializer.gen.ts","../src/generated/vehicles_api/client/utils.gen.ts","../src/generated/vehicles_api/client/client.gen.ts","../src/generated/vehicles_api/client.gen.ts","../src/generated/vehicles_api/sdk.gen.ts","../src/services/BaseClient.ts","../src/services/api_v1/BaseVehiclesService.ts","../src/services/api_v1/VehiclesService.ts","../src/services/api_v1/BrandsService.ts","../src/services/api_v1/SourcesService.ts","../src/services/api_v1/StatisticsService.ts","../src/services/api_v1/ApiService.ts","../src/client.ts","../src/services/ssr/VehiclesSSRService.ts"],"sourcesContent":["/**\n * Vehicles API - Index\n * Vehicles management\n *\n * Zone: vehicles_api\n * Apps: apps.vehicles_api\n */\n\nexport * from \"./sdk.gen\";\nexport * from \"./types.gen\";\nexport * from \"./client.gen\";\n\n// Re-export main client for convenience\nexport { client as default } from \"./client.gen\";\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n ArrayStyle,\n ObjectStyle,\n SerializerOptions,\n} from \"./pathSerializer.gen\";\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: any) => any;\n\nexport interface QuerySerializerOptions {\n allowReserved?: boolean;\n array?: SerializerOptions<ArrayStyle>;\n object?: SerializerOptions<ObjectStyle>;\n}\n\nconst serializeFormDataPair = (\n data: FormData,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (\n data: URLSearchParams,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\") {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T,\n ): FormData => {\n const data = new FormData();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: <T>(body: T): string =>\n JSON.stringify(body, (_key, value) =>\n typeof value === \"bigint\" ? value.toString() : value,\n ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T,\n ): string => {\n const data = new URLSearchParams();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ntype Slot = \"body\" | \"headers\" | \"path\" | \"query\";\n\nexport type Field =\n | {\n in: Exclude<Slot, \"body\">;\n /**\n * Field name. This is the name we want the user to see and use.\n */\n key: string;\n /**\n * Field mapped name. This is the name we want to use in the request.\n * If omitted, we use the same value as `key`.\n */\n map?: string;\n }\n | {\n in: Extract<Slot, \"body\">;\n /**\n * Key isn't required for bodies.\n */\n key?: string;\n map?: string;\n };\n\nexport interface Fields {\n allowExtra?: Partial<Record<Slot, boolean>>;\n args?: ReadonlyArray<Field>;\n}\n\nexport type FieldsConfig = ReadonlyArray<Field | Fields>;\n\nconst extraPrefixesMap: Record<string, Slot> = {\n $body_: \"body\",\n $headers_: \"headers\",\n $path_: \"path\",\n $query_: \"query\",\n};\nconst extraPrefixes = Object.entries(extraPrefixesMap);\n\ntype KeyMap = Map<\n string,\n {\n in: Slot;\n map?: string;\n }\n>;\n\nconst buildKeyMap = (fields: FieldsConfig, map?: KeyMap): KeyMap => {\n if (!map) {\n map = new Map();\n }\n\n for (const config of fields) {\n if (\"in\" in config) {\n if (config.key) {\n map.set(config.key, {\n in: config.in,\n map: config.map,\n });\n }\n } else if (config.args) {\n buildKeyMap(config.args, map);\n }\n }\n\n return map;\n};\n\ninterface Params {\n body: unknown;\n headers: Record<string, unknown>;\n path: Record<string, unknown>;\n query: Record<string, unknown>;\n}\n\nconst stripEmptySlots = (params: Params) => {\n for (const [slot, value] of Object.entries(params)) {\n if (value && typeof value === \"object\" && !Object.keys(value).length) {\n delete params[slot as Slot];\n }\n }\n};\n\nexport const buildClientParams = (\n args: ReadonlyArray<unknown>,\n fields: FieldsConfig,\n) => {\n const params: Params = {\n body: {},\n headers: {},\n path: {},\n query: {},\n };\n\n const map = buildKeyMap(fields);\n\n let config: FieldsConfig[number] | undefined;\n\n for (const [index, arg] of args.entries()) {\n if (fields[index]) {\n config = fields[index];\n }\n\n if (!config) {\n continue;\n }\n\n if (\"in\" in config) {\n if (config.key) {\n const field = map.get(config.key)!;\n const name = field.map || config.key;\n (params[field.in] as Record<string, unknown>)[name] = arg;\n } else {\n params.body = arg;\n }\n } else {\n for (const [key, value] of Object.entries(arg ?? {})) {\n const field = map.get(key);\n\n if (field) {\n const name = field.map || key;\n (params[field.in] as Record<string, unknown>)[name] = value;\n } else {\n const extra = extraPrefixes.find(([prefix]) =>\n key.startsWith(prefix),\n );\n\n if (extra) {\n const [prefix, slot] = extra;\n (params[slot] as Record<string, unknown>)[\n key.slice(prefix.length)\n ] = value;\n } else {\n for (const [slot, allowed] of Object.entries(\n config.allowExtra ?? {},\n )) {\n if (allowed) {\n (params[slot as Slot] as Record<string, unknown>)[key] = value;\n break;\n }\n }\n }\n }\n }\n }\n }\n\n stripEmptySlots(params);\n\n return params;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: \"header\" | \"query\" | \"cookie\";\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: \"basic\" | \"bearer\";\n type: \"apiKey\" | \"http\";\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n const token =\n typeof callback === \"function\" ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === \"bearer\") {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === \"basic\") {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n extends SerializePrimitiveOptions,\n SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = \"label\" | \"matrix\" | \"simple\";\nexport type ObjectStyle = \"form\" | \"deepObject\";\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"form\":\n return \",\";\n case \"pipeDelimited\":\n return \"|\";\n case \"spaceDelimited\":\n return \"%20\";\n default:\n return \",\";\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}) => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n case \"simple\":\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === \"label\" || style === \"simple\") {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam) => {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}) => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== \"deepObject\" && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? (v as string) : encodeURIComponent(v as string),\n ];\n });\n const joinedValues = values.join(\",\");\n switch (style) {\n case \"form\":\n return `${name}=${joinedValues}`;\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === \"deepObject\" ? `${name}[${key}]` : key,\n value: v as string,\n }),\n )\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from \"../core/auth.gen\";\nimport type {\n QuerySerializer,\n QuerySerializerOptions,\n} from \"../core/bodySerializer.gen\";\nimport { jsonBodySerializer } from \"../core/bodySerializer.gen\";\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"../core/pathSerializer.gen\";\nimport type {\n Client,\n ClientOptions,\n Config,\n RequestOptions,\n} from \"./types.gen\";\n\ninterface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\ntype ArrayStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\ntype MatrixStyle = \"label\" | \"matrix\" | \"simple\";\ntype ArraySeparatorStyle = ArrayStyle | MatrixStyle;\n\nconst defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = \"simple\";\n\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith(\".\")) {\n name = name.substring(1);\n style = \"label\";\n } else if (name.startsWith(\";\")) {\n name = name.substring(1);\n style = \"matrix\";\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value }),\n );\n continue;\n }\n\n if (typeof value === \"object\") {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === \"matrix\") {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === \"label\" ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const createQuerySerializer = <T = unknown>({\n allowReserved,\n array,\n object,\n}: QuerySerializerOptions = {}) => {\n const querySerializer = (queryParams: T) => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved,\n explode: true,\n name,\n style: \"form\",\n value,\n ...array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === \"object\") {\n const serializedObject = serializeObjectParam({\n allowReserved,\n explode: true,\n name,\n style: \"deepObject\",\n value: value as Record<string, unknown>,\n ...object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join(\"&\");\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null,\n): Exclude<Config[\"parseAs\"], \"auto\"> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return \"stream\";\n }\n\n const cleanContent = contentType.split(\";\")[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith(\"application/json\") ||\n cleanContent.endsWith(\"+json\")\n ) {\n return \"json\";\n }\n\n if (cleanContent === \"multipart/form-data\") {\n return \"formData\";\n }\n\n if (\n [\"application/\", \"audio/\", \"image/\", \"video/\"].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return \"blob\";\n }\n\n if (cleanContent.startsWith(\"text/\")) {\n return \"text\";\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get(\"Cookie\")?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, \"security\"> &\n Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? \"Authorization\";\n\n switch (auth.in) {\n case \"query\":\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case \"cookie\":\n options.headers.append(\"Cookie\", `${name}=${token}`);\n break;\n case \"header\":\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\n\nexport const buildUrl: Client[\"buildUrl\"] = (options) => {\n const url = getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === \"function\"\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}) => {\n const pathUrl = _url.startsWith(\"/\") ? _url : `/${_url}`;\n let url = (baseUrl ?? \"\") + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : \"\";\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith(\"/\")) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>[\"headers\"] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header || typeof header !== \"object\") {\n continue;\n }\n\n const iterator =\n header instanceof Headers ? header.entries() : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e. their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === \"object\" ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n response: Res,\n request: Req,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options,\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n _fns: (Interceptor | null)[];\n\n constructor() {\n this._fns = [];\n }\n\n clear() {\n this._fns = [];\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === \"number\") {\n return this._fns[id] ? id : -1;\n } else {\n return this._fns.indexOf(id);\n }\n }\n exists(id: number | Interceptor) {\n const index = this.getInterceptorIndex(id);\n return !!this._fns[index];\n }\n\n eject(id: number | Interceptor) {\n const index = this.getInterceptorIndex(id);\n if (this._fns[index]) {\n this._fns[index] = null;\n }\n }\n\n update(id: number | Interceptor, fn: Interceptor) {\n const index = this.getInterceptorIndex(id);\n if (this._fns[index]) {\n this._fns[index] = fn;\n return id;\n } else {\n return false;\n }\n }\n\n use(fn: Interceptor) {\n this._fns = [...this._fns, fn];\n return this._fns.length - 1;\n }\n}\n\n// `createInterceptors()` response, meant for external use as it does not\n// expose internals\nexport interface Middleware<Req, Res, Err, Options> {\n error: Pick<\n Interceptors<ErrInterceptor<Err, Res, Req, Options>>,\n \"eject\" | \"use\"\n >;\n request: Pick<Interceptors<ReqInterceptor<Req, Options>>, \"eject\" | \"use\">;\n response: Pick<\n Interceptors<ResInterceptor<Res, Req, Options>>,\n \"eject\" | \"use\"\n >;\n}\n\n// do not add `Middleware` as return type so we can use _fns internally\nexport const createInterceptors = <Req, Res, Err, Options>() => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: \"form\",\n },\n object: {\n explode: true,\n style: \"deepObject\",\n },\n});\n\nconst defaultHeaders = {\n \"Content-Type\": \"application/json\",\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: \"auto\",\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Config, ResolvedRequestOptions } from \"./types.gen\";\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from \"./utils.gen\";\n\ntype ReqInit = Omit<RequestInit, \"body\" | \"headers\"> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<\n Request,\n Response,\n unknown,\n ResolvedRequestOptions\n >();\n\n const request: Client[\"request\"] = async (options) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined,\n };\n\n if (opts.security) {\n await setAuthParams({\n ...opts,\n security: opts.security,\n });\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body);\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.serializedBody === undefined || opts.serializedBody === \"\") {\n opts.headers.delete(\"Content-Type\");\n }\n\n const url = buildUrl(opts);\n const requestInit: ReqInit = {\n redirect: \"follow\",\n ...opts,\n body: opts.serializedBody,\n };\n\n let request = new Request(url, requestInit);\n\n for (const fn of interceptors.request._fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n let response = await _fetch(request);\n\n for (const fn of interceptors.response._fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n if (\n response.status === 204 ||\n response.headers.get(\"Content-Length\") === \"0\"\n ) {\n return opts.responseStyle === \"data\"\n ? {}\n : {\n data: {},\n ...result,\n };\n }\n\n const parseAs =\n (opts.parseAs === \"auto\"\n ? getParseAs(response.headers.get(\"Content-Type\"))\n : opts.parseAs) ?? \"json\";\n\n let data: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"formData\":\n case \"json\":\n case \"text\":\n data = await response[parseAs]();\n break;\n case \"stream\":\n return opts.responseStyle === \"data\"\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === \"json\") {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === \"data\"\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n const error = jsonError ?? textError;\n let finalError = error;\n\n for (const fn of interceptors.error._fns) {\n if (fn) {\n finalError = (await fn(error, response, request, opts)) as string;\n }\n }\n\n finalError = finalError || ({} as string);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return opts.responseStyle === \"data\"\n ? undefined\n : {\n error: finalError,\n ...result,\n };\n };\n\n return {\n buildUrl,\n connect: (options) => request({ ...options, method: \"CONNECT\" }),\n delete: (options) => request({ ...options, method: \"DELETE\" }),\n get: (options) => request({ ...options, method: \"GET\" }),\n getConfig,\n head: (options) => request({ ...options, method: \"HEAD\" }),\n interceptors,\n options: (options) => request({ ...options, method: \"OPTIONS\" }),\n patch: (options) => request({ ...options, method: \"PATCH\" }),\n post: (options) => request({ ...options, method: \"POST\" }),\n put: (options) => request({ ...options, method: \"PUT\" }),\n request,\n setConfig,\n trace: (options) => request({ ...options, method: \"TRACE\" }),\n };\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ClientOptions } from \"./types.gen\";\nimport {\n type Config,\n type ClientOptions as DefaultClientOptions,\n createClient,\n createConfig,\n} from \"./client\";\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends DefaultClientOptions = ClientOptions> =\n (\n override?: Config<DefaultClientOptions & T>,\n ) => Config<Required<DefaultClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions>());\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Options as ClientOptions, TDataShape, Client } from \"./client\";\nimport type {\n VehiclesApiImageRetrieveData,\n VehiclesApiImageRetrieveResponses,\n VehiclesApiV1RetrieveData,\n VehiclesApiV1RetrieveResponses,\n VehiclesApiV1BrandsListData,\n VehiclesApiV1BrandsListResponses,\n VehiclesApiV1BrandsModelsListData,\n VehiclesApiV1BrandsModelsListResponses,\n VehiclesApiV1BrandsModelsVehiclesListData,\n VehiclesApiV1BrandsModelsVehiclesListResponses,\n VehiclesApiV1BrandsModelsVehiclesRetrieveData,\n VehiclesApiV1BrandsModelsVehiclesRetrieveResponses,\n VehiclesApiV1BrandsModelsVehiclesCacheInfoRetrieveData,\n VehiclesApiV1BrandsModelsVehiclesCacheInfoRetrieveResponses,\n VehiclesApiV1BrandsModelsRetrieveData,\n VehiclesApiV1BrandsModelsRetrieveResponses,\n VehiclesApiV1BrandsModelsCacheInfoRetrieveData,\n VehiclesApiV1BrandsModelsCacheInfoRetrieveResponses,\n VehiclesApiV1BrandsVehiclesListData,\n VehiclesApiV1BrandsVehiclesListResponses,\n VehiclesApiV1BrandsVehiclesRetrieveData,\n VehiclesApiV1BrandsVehiclesRetrieveResponses,\n VehiclesApiV1BrandsVehiclesCacheInfoRetrieveData,\n VehiclesApiV1BrandsVehiclesCacheInfoRetrieveResponses,\n VehiclesApiV1BrandsRetrieveData,\n VehiclesApiV1BrandsRetrieveResponses,\n VehiclesApiV1BrandsCacheInfoRetrieveData,\n VehiclesApiV1BrandsCacheInfoRetrieveResponses,\n VehiclesApiV1SourcesListData,\n VehiclesApiV1SourcesListResponses,\n VehiclesApiV1SourcesRetrieveData,\n VehiclesApiV1SourcesRetrieveResponses,\n VehiclesApiV1SourcesVehiclesListData,\n VehiclesApiV1SourcesVehiclesListResponses,\n VehiclesApiV1SourcesVehiclesRetrieveData,\n VehiclesApiV1SourcesVehiclesRetrieveResponses,\n VehiclesApiV1SourcesVehiclesCacheInfoRetrieveData,\n VehiclesApiV1SourcesVehiclesCacheInfoRetrieveResponses,\n VehiclesApiV1SourcesCacheInfoRetrieveData,\n VehiclesApiV1SourcesCacheInfoRetrieveResponses,\n VehiclesApiV1StatisticsBrandComparisonRetrieveData,\n VehiclesApiV1StatisticsBrandComparisonRetrieveResponses,\n VehiclesApiV1StatisticsMarketOverviewRetrieveData,\n VehiclesApiV1StatisticsMarketOverviewRetrieveResponses,\n VehiclesApiV1StatisticsPriceTrendsRetrieveData,\n VehiclesApiV1StatisticsPriceTrendsRetrieveResponses,\n VehiclesApiV1StatisticsQualityInsightsRetrieveData,\n VehiclesApiV1StatisticsQualityInsightsRetrieveResponses,\n VehiclesApiV1UrlsTestRetrieveData,\n VehiclesApiV1UrlsTestRetrieveResponses,\n VehiclesApiV1VehiclesListData,\n VehiclesApiV1VehiclesListResponses,\n VehiclesApiV1VehiclesRetrieveData,\n VehiclesApiV1VehiclesRetrieveResponses,\n VehiclesApiV1VehiclesSimilarRetrieveData,\n VehiclesApiV1VehiclesSimilarRetrieveResponses,\n VehiclesApiV1VehiclesCacheInfoRetrieveData,\n VehiclesApiV1VehiclesCacheInfoRetrieveResponses,\n VehiclesApiV1VehiclesExportCsvRetrieveData,\n VehiclesApiV1VehiclesExportCsvRetrieveResponses,\n VehiclesApiV1VehiclesExportExcelRetrieveData,\n VehiclesApiV1VehiclesExportExcelRetrieveResponses,\n VehiclesApiV1VehiclesExportJsonRetrieveData,\n VehiclesApiV1VehiclesExportJsonRetrieveResponses,\n VehiclesApiV1VehiclesStatisticsRetrieveData,\n VehiclesApiV1VehiclesStatisticsRetrieveResponses,\n} from \"./types.gen\";\nimport { client as _heyApiClient } from \"./client.gen\";\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n> = ClientOptions<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * Serve image by UUID\n */\nexport const vehiclesApiImageRetrieve = <ThrowOnError extends boolean = false>(\n options: Options<VehiclesApiImageRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiImageRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n {\n name: \"Authorization\",\n type: \"apiKey\",\n },\n {\n in: \"cookie\",\n name: \"sessionid\",\n type: \"apiKey\",\n },\n ],\n url: \"/api/vehicles_api/image/{image_uuid}/\",\n ...options,\n });\n};\n\n/**\n * API information\n * Get API details, features, and usage information\n */\nexport const vehiclesApiV1Retrieve = <ThrowOnError extends boolean = false>(\n options?: Options<VehiclesApiV1RetrieveData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1RetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/\",\n ...options,\n });\n};\n\n/**\n * List vehicle brands\n * Get list of available vehicle brands\n */\nexport const vehiclesApiV1BrandsList = <ThrowOnError extends boolean = false>(\n options?: Options<VehiclesApiV1BrandsListData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsListResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/\",\n ...options,\n });\n};\n\n/**\n * List brand models\n * Get vehicle models for specific brand\n */\nexport const vehiclesApiV1BrandsModelsList = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1BrandsModelsListData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsModelsListResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/models/\",\n ...options,\n });\n};\n\n/**\n * List brand vehicles\n * Get vehicles from specific brand (and optionally model)\n */\nexport const vehiclesApiV1BrandsModelsVehiclesList = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1BrandsModelsVehiclesListData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsModelsVehiclesListResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/models/{model_id}/vehicles/\",\n ...options,\n });\n};\n\n/**\n * Get brand vehicle\n * Get specific vehicle from brand\n */\nexport const vehiclesApiV1BrandsModelsVehiclesRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1BrandsModelsVehiclesRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsModelsVehiclesRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/models/{model_id}/vehicles/{id}/\",\n ...options,\n });\n};\n\n/**\n * Get cache information\n * Get cache statistics and configuration for this endpoint\n */\nexport const vehiclesApiV1BrandsModelsVehiclesCacheInfoRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n VehiclesApiV1BrandsModelsVehiclesCacheInfoRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsModelsVehiclesCacheInfoRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/models/{model_id}/vehicles/cache-info/\",\n ...options,\n });\n};\n\n/**\n * Get model details\n * Get specific vehicle model information\n */\nexport const vehiclesApiV1BrandsModelsRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1BrandsModelsRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsModelsRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/models/{id}/\",\n ...options,\n });\n};\n\n/**\n * Get cache information\n * Get cache statistics and configuration for this endpoint\n */\nexport const vehiclesApiV1BrandsModelsCacheInfoRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n VehiclesApiV1BrandsModelsCacheInfoRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsModelsCacheInfoRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/models/cache-info/\",\n ...options,\n });\n};\n\n/**\n * List brand vehicles\n * Get vehicles from specific brand (and optionally model)\n */\nexport const vehiclesApiV1BrandsVehiclesList = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1BrandsVehiclesListData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsVehiclesListResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/vehicles/\",\n ...options,\n });\n};\n\n/**\n * Get brand vehicle\n * Get specific vehicle from brand\n */\nexport const vehiclesApiV1BrandsVehiclesRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1BrandsVehiclesRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsVehiclesRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/vehicles/{id}/\",\n ...options,\n });\n};\n\n/**\n * Get cache information\n * Get cache statistics and configuration for this endpoint\n */\nexport const vehiclesApiV1BrandsVehiclesCacheInfoRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n VehiclesApiV1BrandsVehiclesCacheInfoRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsVehiclesCacheInfoRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{brand_id}/vehicles/cache-info/\",\n ...options,\n });\n};\n\n/**\n * Get brand details\n * Get detailed information about a specific brand\n */\nexport const vehiclesApiV1BrandsRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1BrandsRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/{id}/\",\n ...options,\n });\n};\n\n/**\n * Get cache information\n * Get cache statistics and configuration for this endpoint\n */\nexport const vehiclesApiV1BrandsCacheInfoRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<VehiclesApiV1BrandsCacheInfoRetrieveData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1BrandsCacheInfoRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/brands/cache-info/\",\n ...options,\n });\n};\n\n/**\n * List data sources\n * Get list of available vehicle data sources\n */\nexport const vehiclesApiV1SourcesList = <ThrowOnError extends boolean = false>(\n options?: Options<VehiclesApiV1SourcesListData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1SourcesListResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/sources/\",\n ...options,\n });\n};\n\n/**\n * Get source details\n * Get detailed information about a specific data source\n */\nexport const vehiclesApiV1SourcesRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1SourcesRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1SourcesRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/sources/{id}/\",\n ...options,\n });\n};\n\n/**\n * List vehicles from source\n * Get vehicles from specific data source\n */\nexport const vehiclesApiV1SourcesVehiclesList = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1SourcesVehiclesListData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1SourcesVehiclesListResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/sources/{source_id}/vehicles/\",\n ...options,\n });\n};\n\n/**\n * Get vehicle from source\n * Get specific vehicle from data source\n */\nexport const vehiclesApiV1SourcesVehiclesRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1SourcesVehiclesRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1SourcesVehiclesRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/sources/{source_id}/vehicles/{id}/\",\n ...options,\n });\n};\n\n/**\n * Get cache information\n * Get cache statistics and configuration for this endpoint\n */\nexport const vehiclesApiV1SourcesVehiclesCacheInfoRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n VehiclesApiV1SourcesVehiclesCacheInfoRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1SourcesVehiclesCacheInfoRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/sources/{source_id}/vehicles/cache-info/\",\n ...options,\n });\n};\n\n/**\n * Get cache information\n * Get cache statistics and configuration for this endpoint\n */\nexport const vehiclesApiV1SourcesCacheInfoRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<VehiclesApiV1SourcesCacheInfoRetrieveData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1SourcesCacheInfoRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/sources/cache-info/\",\n ...options,\n });\n};\n\n/**\n * Brand comparison\n * Compare statistics across different brands\n */\nexport const vehiclesApiV1StatisticsBrandComparisonRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<\n VehiclesApiV1StatisticsBrandComparisonRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1StatisticsBrandComparisonRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/statistics/brand_comparison/\",\n ...options,\n });\n};\n\n/**\n * Market overview\n * Get overall market statistics and trends\n */\nexport const vehiclesApiV1StatisticsMarketOverviewRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<\n VehiclesApiV1StatisticsMarketOverviewRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1StatisticsMarketOverviewRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/statistics/market_overview/\",\n ...options,\n });\n};\n\n/**\n * Price trends\n * Get price trend analysis across different segments\n */\nexport const vehiclesApiV1StatisticsPriceTrendsRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<\n VehiclesApiV1StatisticsPriceTrendsRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1StatisticsPriceTrendsRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/statistics/price_trends/\",\n ...options,\n });\n};\n\n/**\n * Quality insights\n * Get quality and investment grade analysis\n */\nexport const vehiclesApiV1StatisticsQualityInsightsRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<\n VehiclesApiV1StatisticsQualityInsightsRetrieveData,\n ThrowOnError\n >,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1StatisticsQualityInsightsRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/statistics/quality_insights/\",\n ...options,\n });\n};\n\n/**\n * Test all API URLs\n * Test all API endpoints and return their status. Useful for development and debugging.\n */\nexport const vehiclesApiV1UrlsTestRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<VehiclesApiV1UrlsTestRetrieveData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1UrlsTestRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/urls-test/\",\n ...options,\n });\n};\n\n/**\n * List vehicles\n *\n * Get paginated list of vehicles with advanced filtering.\n *\n * Supports filtering by:\n * - Brand, model, source\n * - Year, price, mileage ranges\n * - Fuel type, transmission, body type\n * - Investment grade, risk level\n * - Location, dealer\n * - Photo availability, LLM analysis\n *\n * Full-text search across title, brand, model, location.\n *\n */\nexport const vehiclesApiV1VehiclesList = <ThrowOnError extends boolean = false>(\n options?: Options<VehiclesApiV1VehiclesListData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1VehiclesListResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/vehicles/\",\n ...options,\n });\n};\n\n/**\n * Get vehicle details\n * Get complete vehicle information including photos and analysis\n */\nexport const vehiclesApiV1VehiclesRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1VehiclesRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1VehiclesRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/vehicles/{id}/\",\n ...options,\n });\n};\n\n/**\n * Find similar vehicles\n * Find vehicles similar to the specified one\n */\nexport const vehiclesApiV1VehiclesSimilarRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<VehiclesApiV1VehiclesSimilarRetrieveData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n VehiclesApiV1VehiclesSimilarRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/vehicles/{id}/similar/\",\n ...options,\n });\n};\n\n/**\n * Get cache information\n * Get cache statistics and configuration for this endpoint\n */\nexport const vehiclesApiV1VehiclesCacheInfoRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<VehiclesApiV1VehiclesCacheInfoRetrieveData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1VehiclesCacheInfoRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/vehicles/cache-info/\",\n ...options,\n });\n};\n\n/**\n * Export vehicles as CSV\n * Export filtered vehicles to CSV format\n */\nexport const vehiclesApiV1VehiclesExportCsvRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<VehiclesApiV1VehiclesExportCsvRetrieveData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1VehiclesExportCsvRetrieveResponses,\n unknown,\n ThrowOnError\n >({\n url: \"/api/vehicles_api/v1/vehicles/export_csv/\",\n ...options,\n });\n};\n\n/**\n * Export vehicles as Excel\n * Export filtered vehicles to Excel format\n */\nexport const vehiclesApiV1VehiclesExportExcelRetrieve = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<VehiclesApiV1VehiclesExportExcelRetrieveData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).get<\n VehiclesApiV1VehiclesExportExcelRetrieveResp