@anyformat/sdk 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/index.cjs +142 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +99 -29
- package/dist/index.d.ts +99 -29
- package/dist/index.js +140 -49
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/builder.ts","../src/result.ts","../src/errors.ts","../src/sdk/core/bodySerializer.gen.ts","../src/sdk/core/params.gen.ts","../src/sdk/core/serverSentEvents.gen.ts","../src/sdk/core/pathSerializer.gen.ts","../src/sdk/core/utils.gen.ts","../src/sdk/core/auth.gen.ts","../src/sdk/client/utils.gen.ts","../src/sdk/client/client.gen.ts","../src/sdk/client.gen.ts","../src/sdk/sdk.gen.ts","../src/run.ts","../src/client.ts","../src/schema.ts"],"sourcesContent":["export { Anyformat } from \"./client\";\nexport type { AnyformatOptions } from \"./client\";\nexport { Schema } from \"./schema\";\nexport type { Field } from \"./schema\";\nexport { WorkflowBuilder } from \"./builder\";\nexport type { Branch } from \"./builder\";\nexport { Run } from \"./run\";\nexport type { WaitOptions } from \"./run\";\nexport { Result } from \"./result\";\nexport {\n AnyformatError,\n APIError,\n BadRequest,\n Forbidden,\n NotFound,\n RateLimited,\n SDKTimeout,\n ServerError,\n Unauthorized,\n WorkflowBuilderError,\n} from \"./errors\";\n\n// Generated wire types, for advanced/typed use.\nexport type {\n BooleanField,\n ClassifyCategory,\n DateField,\n DatetimeField,\n EnumField,\n EnumOption,\n ExtractedField,\n Extraction,\n ExtractionSchema,\n FloatField,\n IntegerField,\n MultiSelectField,\n ObjectField,\n ResultsResponse,\n SplitterRule,\n StringField,\n ValidationRule,\n WorkflowCreateRequest,\n} from \"./sdk\";\n","import { readFileSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport { Run } from \"./run\";\nimport { toApiError, WorkflowBuilderError } from \"./errors\";\nimport { v2CreateWorkflow } from \"./sdk\";\nimport type { Client as HeyClient } from \"./sdk/client\";\nimport type {\n ClassifyCategory,\n ClassifyNode,\n Edge,\n ExtractNode,\n LookupFileUpload,\n ParseNode,\n SplitterNode,\n SplitterRule,\n ValidateNode,\n ValidationRule,\n WorkflowCreateRequest,\n} from \"./sdk\";\nimport type { Field } from \"./schema\";\n\ntype ParseMode = \"standard\" | \"agentic\";\n\n/** Source-port label routing into an extract/validate node. */\nexport type Branch = string | ClassifyCategory | SplitterRule;\n\ninterface ParseOptions {\n mode?: ParseMode;\n promptHint?: string;\n figureEnhancement?: boolean;\n id?: string;\n}\n\n/**\n * Fluent assembler for a typed workflow graph — a faithful TS port of the\n * Python `WorkflowBuilder`. `parse`/`classify`/`split` are singletons;\n * `extract`/`validate` are repeatable and carry their edge metadata. Call\n * `build()` (or `create()`/`run()`) to emit the wire request.\n */\nexport class WorkflowBuilder {\n private parseNode: ParseNode | null = null;\n private classifyNode: ClassifyNode | null = null;\n private splitNode: SplitterNode | null = null;\n private splitRouteFrom: string | null = null;\n private readonly extracts: Array<[ExtractNode, string | null]> = [];\n private readonly validates: Array<[ValidateNode, string]> = [];\n private readonly idCounters: Record<string, number> = {};\n\n constructor(\n private readonly client: HeyClient,\n private readonly name: string,\n private readonly description?: string,\n ) {}\n\n private nextId(kind: string): string {\n this.idCounters[kind] = (this.idCounters[kind] ?? 0) + 1;\n return `${kind}_${this.idCounters[kind]}`;\n }\n\n private require(condition: unknown, message: string): void {\n if (!condition) throw new WorkflowBuilderError(message);\n }\n\n parse(opts: ParseOptions = {}): this {\n this.require(this.parseNode === null, \"parse() can only be called once\");\n this.parseNode = {\n type: \"parse\",\n id: opts.id ?? this.nextId(\"parse\"),\n mode: opts.mode ?? \"standard\",\n ...(opts.promptHint !== undefined ? { prompt_hint: opts.promptHint } : {}),\n figure_enhancement: opts.figureEnhancement ?? false,\n };\n return this;\n }\n\n classify(categories: ClassifyCategory[], opts: { id?: string } = {}): this {\n this.require(this.parseNode !== null, \"classify() requires parse() first\");\n this.require(this.classifyNode === null, \"classify() can only be called once\");\n this.require(categories.length > 0, \"classify() requires at least one category\");\n this.classifyNode = { type: \"classify\", id: opts.id ?? this.nextId(\"classify\"), categories };\n return this;\n }\n\n split(rules: SplitterRule[], opts: { routeFrom?: string | ClassifyCategory; id?: string } = {}): this {\n this.require(this.parseNode !== null, \"split() requires parse() first\");\n this.require(this.splitNode === null, \"split() can only be called once\");\n this.require(rules.length > 0, \"split() requires at least one rule\");\n this.require(\n !(opts.routeFrom !== undefined && this.classifyNode === null),\n \"routeFrom is only valid after classify()\",\n );\n this.require(\n !(this.classifyNode !== null && opts.routeFrom === undefined),\n \"split(rules, { routeFrom }) is required when chaining after classify() — specify which classify branch routes into the splitter\",\n );\n this.splitRouteFrom = this.normalizeClassifyBranch(opts.routeFrom, \"routeFrom\");\n this.splitNode = { type: \"splitter\", id: opts.id ?? this.nextId(\"split\"), rules };\n return this;\n }\n\n extract(\n fields: Field[],\n opts: { branch?: Branch; id?: string; lookupFiles?: string[]; lookupSuggestion?: string } = {},\n ): this {\n this.require(this.parseNode !== null, \"extract() requires parse() first\");\n this.require(fields.length > 0, \"extract() requires at least one field\");\n const hasRouter = this.classifyNode !== null || this.splitNode !== null;\n this.require(\n !(hasRouter && opts.branch === undefined),\n \"extract(fields, { branch }) is required when classify() or split() is used\",\n );\n this.require(\n !(!hasRouter && opts.branch !== undefined),\n \"extract(fields, { branch }) is only valid after classify() or split()\",\n );\n const branchId = this.normalizeExtractBranch(opts.branch);\n const lookupFileUploads: LookupFileUpload[] = (opts.lookupFiles ?? []).map((filePath) => ({\n filename: basename(filePath),\n content: readFileSync(filePath).toString(\"base64\"),\n }));\n const node: ExtractNode = {\n type: \"extract\",\n id: opts.id ?? this.nextId(\"extract\"),\n extraction_schema: { fields },\n ...(lookupFileUploads.length > 0 ? { lookup_file_uploads: lookupFileUploads } : {}),\n ...(opts.lookupSuggestion !== undefined ? { lookup_suggestion: opts.lookupSuggestion } : {}),\n };\n this.extracts.push([node, branchId]);\n return this;\n }\n\n validate(rules: ValidationRule[], opts: { branch?: Branch; id?: string } = {}): this {\n this.require(this.parseNode !== null, \"validate() requires parse() first\");\n this.require(this.extracts.length > 0, \"validate() requires extract() first\");\n this.require(rules.length > 0, \"validate() requires at least one rule\");\n\n let sourceExtractId: string;\n if (opts.branch !== undefined) {\n const branchId = this.normalizeExtractBranch(opts.branch);\n const matching = this.extracts.filter(([, b]) => b === branchId);\n this.require(matching.length > 0, `validate(branch) did not match any extract`);\n sourceExtractId = matching[matching.length - 1]![0].id;\n } else {\n sourceExtractId = this.extracts[this.extracts.length - 1]![0].id;\n }\n const node: ValidateNode = { type: \"validate\", id: opts.id ?? this.nextId(\"validate\"), rules };\n this.validates.push([node, sourceExtractId]);\n return this;\n }\n\n private normalizeClassifyBranch(value: string | ClassifyCategory | undefined, kwarg: string): string | null {\n if (value === undefined) return null;\n const categories = this.classifyNode?.categories ?? [];\n if (typeof value !== \"string\") {\n if (!categories.some((c) => c.id === value.id)) {\n throw new WorkflowBuilderError(`${kwarg}=${value.id} is not one of the registered classify categories`);\n }\n return value.id;\n }\n if (!categories.some((c) => c.id === value)) {\n throw new WorkflowBuilderError(`${kwarg}=${value} does not match any classify category id`);\n }\n return value;\n }\n\n private normalizeExtractBranch(value: Branch | undefined): string | null {\n if (value === undefined) return null;\n const router: Array<{ id: string }> = this.splitNode?.rules ?? this.classifyNode?.categories ?? [];\n if (typeof value !== \"string\") {\n if (!router.some((item) => item.id === value.id)) {\n const expected = this.splitNode ? \"splitter rule\" : \"classify category\";\n throw new WorkflowBuilderError(`branch=${value.id} is not one of the registered ${expected} objects`);\n }\n return value.id;\n }\n if (!router.some((item) => item.id === value)) {\n throw new WorkflowBuilderError(`branch=${value} does not match any router id`);\n }\n return value;\n }\n\n /** Assemble the wire request (branch-routed edges). Pure — no network. */\n build(): WorkflowCreateRequest {\n if (this.parseNode === null) throw new WorkflowBuilderError(\"build() requires parse()\");\n const parseId = this.parseNode.id;\n const nodes: WorkflowCreateRequest[\"nodes\"] = [this.parseNode];\n const edges: Edge[] = [];\n\n if (this.classifyNode !== null) {\n nodes.push(this.classifyNode);\n edges.push({ source: parseId, target: this.classifyNode.id });\n }\n\n if (this.splitNode !== null) {\n nodes.push(this.splitNode);\n if (this.classifyNode !== null) {\n edges.push({ source: this.classifyNode.id, target: this.splitNode.id, branch: this.splitRouteFrom });\n } else {\n edges.push({ source: parseId, target: this.splitNode.id });\n }\n }\n\n const routerId = this.splitNode?.id ?? this.classifyNode?.id ?? null;\n for (const [node, branchId] of this.extracts) {\n nodes.push(node);\n edges.push(\n routerId === null\n ? { source: parseId, target: node.id }\n : { source: routerId, target: node.id, branch: branchId },\n );\n }\n\n for (const [node, sourceExtractId] of this.validates) {\n nodes.push(node);\n edges.push({ source: sourceExtractId, target: node.id });\n }\n\n return { name: this.name, description: this.description, nodes, edges };\n }\n\n /** Persist the workflow and return its id. */\n async create(): Promise<string> {\n const res = await v2CreateWorkflow({ client: this.client, body: this.build() });\n if (res.error) throw toApiError(res.response?.status ?? 500, res.error);\n return res.data!.id;\n }\n\n /** Create the workflow, submit a document, and return a pending `Run`. */\n run(file: Blob | File | null = null, opts: { text?: string } = {}): Run {\n this.require(\n !(file === null && opts.text === undefined),\n \"run() requires a document — pass a file or opts.text\",\n );\n // A bare Blob carries no filename, so the multipart upload reaches the\n // server as application/octet-stream and the worker can't detect the file\n // type — extraction then fails server-side with an opaque error. Require a\n // named File. Duck-typed on `.name` because `File` isn't a global on Node 18.\n if (file !== null) {\n const filename = (file as { name?: unknown }).name;\n this.require(\n typeof filename === \"string\" && filename.length > 0,\n 'run() needs a named file so the server can detect its type — pass a File, e.g. new File([bytes], \"invoice.pdf\"), not a bare Blob',\n );\n }\n return new Run(this.client, this.build(), file, opts.text ?? null);\n }\n}\n","import type { ExtractedField, Extraction, ResultsResponse } from \"./sdk\";\n\n/** Typed wrapper over a completed run's results. */\nexport class Result {\n constructor(readonly raw: ResultsResponse) {}\n\n get collectionId(): string {\n return this.raw.collection_id;\n }\n\n get extractions(): Extraction[] {\n return this.raw.extractions ?? [];\n }\n\n /**\n * Convenience accessor for a top-level scalar field on the first\n * extraction (linear workflows). Returns `undefined` for missing fields\n * or list-valued fields — read `extractions` directly for those.\n */\n field(name: string): ExtractedField | undefined {\n const value = this.extractions[0]?.fields?.[name];\n return value !== undefined && !Array.isArray(value) ? value : undefined;\n }\n}\n","export class AnyformatError extends Error {}\n\nexport class APIError extends AnyformatError {\n constructor(\n readonly status: number,\n message: string,\n readonly body?: unknown,\n ) {\n super(message);\n this.name = new.target.name;\n }\n}\n\nexport class BadRequest extends APIError {}\nexport class Unauthorized extends APIError {}\nexport class Forbidden extends APIError {}\nexport class NotFound extends APIError {}\nexport class RateLimited extends APIError {}\nexport class ServerError extends APIError {}\n\nexport class SDKTimeout extends AnyformatError {}\n\n/** Raised by the fluent `WorkflowBuilder` for builder-API misuse. */\nexport class WorkflowBuilderError extends AnyformatError {}\n\nexport function toApiError(status: number, body?: unknown): APIError {\n const message = `AnyFormat API error (${status})`;\n switch (status) {\n case 400:\n return new BadRequest(status, message, body);\n case 401:\n return new Unauthorized(status, message, body);\n case 403:\n return new Forbidden(status, message, body);\n case 404:\n return new NotFound(status, message, body);\n case 429:\n return new RateLimited(status, message, body);\n default:\n return status >= 500\n ? new ServerError(status, message, body)\n : new APIError(status, message, body);\n }\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (data: FormData, key: string, value: unknown): 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 = (data: URLSearchParams, key: string, value: unknown): 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: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).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: (body: unknown): string =>\n JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).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 | {\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 `in` is omitted, `map` aliases `key` to the transport layer.\n */\n map: Slot;\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 in?: never;\n map: Slot;\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 ('key' in config) {\n map.set(config.key, {\n map: config.map,\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' && !Array.isArray(value) && !Object.keys(value).length) {\n delete params[slot as Slot];\n }\n }\n};\n\nexport const buildClientParams = (args: ReadonlyArray<unknown>, fields: FieldsConfig) => {\n const params: Params = {\n body: Object.create(null),\n headers: Object.create(null),\n path: Object.create(null),\n query: Object.create(null),\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 if (field.in) {\n (params[field.in] as Record<string, unknown>)[name] = arg;\n }\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 if (field.in) {\n const name = field.map || key;\n (params[field.in] as Record<string, unknown>)[name] = value;\n } else {\n params[field.map] = value;\n }\n } else {\n const extra = extraPrefixes.find(([prefix]) => key.startsWith(prefix));\n\n if (extra) {\n const [prefix, slot] = extra;\n (params[slot] as Record<string, unknown>)[key.slice(prefix.length)] = value;\n } else if ('allowExtra' in config && config.allowExtra) {\n for (const [slot, allowed] of Object.entries(config.allowExtra)) {\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\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\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 = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.replace(/^retry:\\s*/, ''), 10);\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> extends SerializePrimitiveOptions, 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' ? separator + joinedValues : 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 = [...values, key, allowReserved ? (v as string) : encodeURIComponent(v as string)];\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' ? separator + joinedValues : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const 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(match, serializeArrayParam({ explode, name, style, value }));\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 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 function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}) {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if ('serializedBody' in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== '';\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e., client-axios)\n return options.body !== '' ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\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 = 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\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type { Client, ClientOptions, Config, RequestOptions } from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\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 const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.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 = (contentType: string | null): 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 (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\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) => cleanContent.startsWith(type))\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 async function setAuthParams(\n options: Pick<RequestOptions, 'auth' | 'query' | 'security'> & {\n headers: Headers;\n },\n): Promise<void> {\n for (const auth of options.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 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\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\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\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) {\n continue;\n }\n\n const iterator = header instanceof Headers ? headersEntries(header) : 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 may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => 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: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\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 { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type { Client, Config, RequestOptions, 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<Request, Response, unknown, ResolvedRequestOptions>();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends 'data' | 'fields' = 'fields',\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\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 as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams(opts);\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client['request'] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n 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\n 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 const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (response.status === 204 || response.headers.get('Content-Length') === '0') {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'json': {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\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 throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n url,\n });\n };\n\n const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type ClientOptions, type Config, createClient, createConfig } from './client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\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 ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>({ baseUrl: 'https://api-dev.anyformat.ai' }));\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { CreateWebhookV2WebhooksPostData, CreateWebhookV2WebhooksPostErrors, CreateWebhookV2WebhooksPostResponses, DeleteFileV2FilesCollectionIdDeleteData, DeleteFileV2FilesCollectionIdDeleteErrors, DeleteFileV2FilesCollectionIdDeleteResponses, DeleteWebhookV2WebhooksWebhookIdDeleteData, DeleteWebhookV2WebhooksWebhookIdDeleteErrors, DeleteWebhookV2WebhooksWebhookIdDeleteResponses, HealthCheckHealthGetData, HealthCheckHealthGetResponses, ListWebhooksV2WebhooksGetData, ListWebhooksV2WebhooksGetErrors, ListWebhooksV2WebhooksGetResponses, V2CreateWorkflowData, V2CreateWorkflowErrors, V2CreateWorkflowFileData, V2CreateWorkflowFileErrors, V2CreateWorkflowFileResponses, V2CreateWorkflowResponses, V2DeleteWorkflowData, V2DeleteWorkflowErrors, V2DeleteWorkflowResponses, V2GetFileResultsData, V2GetFileResultsErrors, V2GetFileResultsResponses, V2GetWorkflowData, V2GetWorkflowErrors, V2GetWorkflowResponses, V2ListWorkflowFilesData, V2ListWorkflowFilesErrors, V2ListWorkflowFilesResponses, V2ListWorkflowRunsData, V2ListWorkflowRunsErrors, V2ListWorkflowRunsResponses, V2ListWorkflowsData, V2ListWorkflowsErrors, V2ListWorkflowsResponses, V2RunWorkflowData, V2RunWorkflowErrors, V2RunWorkflowResponses, V2UploadFileData, V2UploadFileErrors, V2UploadFileResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {\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 * Health Check\n *\n * Returns 200 OK if the service is running. No authentication required.\n *\n * Use this endpoint to verify API connectivity before making authenticated calls.\n */\nexport const healthCheckHealthGet = <ThrowOnError extends boolean = false>(options?: Options<HealthCheckHealthGetData, ThrowOnError>) => (options?.client ?? client).get<HealthCheckHealthGetResponses, unknown, ThrowOnError>({ url: '/health/', ...options });\n\n/**\n * Delete file collection\n *\n * Delete a file collection and all its files permanently.\n *\n * This removes all uploaded files and any extraction results associated with\n * the collection. This action is irreversible.\n */\nexport const deleteFileV2FilesCollectionIdDelete = <ThrowOnError extends boolean = false>(options: Options<DeleteFileV2FilesCollectionIdDeleteData, ThrowOnError>) => (options.client ?? client).delete<DeleteFileV2FilesCollectionIdDeleteResponses, DeleteFileV2FilesCollectionIdDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/files/{collection_id}/',\n ...options\n});\n\n/**\n * List webhooks\n *\n * List all webhook subscriptions for the authenticated organization.\n *\n * Returns a list of webhooks. Secrets are excluded from the list response\n * for security — they are only returned once, when the webhook is created.\n */\nexport const listWebhooksV2WebhooksGet = <ThrowOnError extends boolean = false>(options?: Options<ListWebhooksV2WebhooksGetData, ThrowOnError>) => (options?.client ?? client).get<ListWebhooksV2WebhooksGetResponses, ListWebhooksV2WebhooksGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/webhooks/',\n ...options\n});\n\n/**\n * Create webhook\n *\n * Create a new webhook subscription for your organization.\n *\n * The webhook URL must use HTTPS. AnyFormat will send POST requests to this URL\n * when the subscribed events occur. The response includes a `secret` that you\n * should use to verify webhook signatures.\n *\n * Supported events:\n * - `extraction.completed` — fired when a file extraction finishes successfully.\n * - `extraction.failed` — fired when a file extraction fails.\n */\nexport const createWebhookV2WebhooksPost = <ThrowOnError extends boolean = false>(options: Options<CreateWebhookV2WebhooksPostData, ThrowOnError>) => (options.client ?? client).post<CreateWebhookV2WebhooksPostResponses, CreateWebhookV2WebhooksPostErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/webhooks/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete webhook\n *\n * Delete a webhook subscription by ID.\n *\n * After deletion, AnyFormat will stop sending events to the webhook URL.\n * This action is irreversible.\n */\nexport const deleteWebhookV2WebhooksWebhookIdDelete = <ThrowOnError extends boolean = false>(options: Options<DeleteWebhookV2WebhooksWebhookIdDeleteData, ThrowOnError>) => (options.client ?? client).delete<DeleteWebhookV2WebhooksWebhookIdDeleteResponses, DeleteWebhookV2WebhooksWebhookIdDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/webhooks/{webhook_id}/',\n ...options\n});\n\n/**\n * List workflows\n *\n * List all workflows in your organization with pagination.\n *\n * Workflows can be filtered by status and sorted by any field.\n */\nexport const v2ListWorkflows = <ThrowOnError extends boolean = false>(options?: Options<V2ListWorkflowsData, ThrowOnError>) => (options?.client ?? client).get<V2ListWorkflowsResponses, V2ListWorkflowsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/',\n ...options\n});\n\n/**\n * Create workflow\n *\n * Create a workflow from a strongly-typed graph (atomic).\n *\n * Provide an explicit list of typed `nodes` (parse / classify / splitter /\n * extract) and `edges` between them. The full workflow — fields, nodes,\n * routing — is created in a single transaction.\n */\nexport const v2CreateWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2CreateWorkflowData, ThrowOnError>) => (options.client ?? client).post<V2CreateWorkflowResponses, V2CreateWorkflowErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete workflow\n *\n * Delete a workflow and all associated file collections and extraction results.\n *\n * This action is irreversible.\n */\nexport const v2DeleteWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2DeleteWorkflowData, ThrowOnError>) => (options.client ?? client).delete<V2DeleteWorkflowResponses, V2DeleteWorkflowErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/',\n ...options\n});\n\n/**\n * Get workflow\n *\n * Retrieve a single workflow by its ID, including its configured extraction fields.\n */\nexport const v2GetWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2GetWorkflowData, ThrowOnError>) => (options.client ?? client).get<V2GetWorkflowResponses, V2GetWorkflowErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/',\n ...options\n});\n\n/**\n * List file collections\n *\n * List file collections for a workflow.\n *\n * A file collection groups one or more uploaded files together. Each collection\n * has a status indicating the extraction progress: `pending`, `processing`,\n * `completed`, or `failed`.\n */\nexport const v2ListWorkflowFiles = <ThrowOnError extends boolean = false>(options: Options<V2ListWorkflowFilesData, ThrowOnError>) => (options.client ?? client).get<V2ListWorkflowFilesResponses, V2ListWorkflowFilesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/files/',\n ...options\n});\n\n/**\n * Create file collection\n *\n * Upload one or more files to a workflow, creating a new file collection.\n *\n * Use this when you want to upload files without immediately running extraction.\n * To upload and extract in one step, use `POST /v2/workflows/{workflow_id}/run/` instead.\n *\n * Supported file types: PDF, PNG, JPG, TIFF, TXT, DOCX, XLSX, CSV, and more.\n */\nexport const v2CreateWorkflowFile = <ThrowOnError extends boolean = false>(options: Options<V2CreateWorkflowFileData, ThrowOnError>) => (options.client ?? client).post<V2CreateWorkflowFileResponses, V2CreateWorkflowFileErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/files/',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * Get file results\n *\n * Retrieve the extraction results for a file collection.\n *\n * Returns the structured data extracted from each file, including field values,\n * confidence scores, and source evidence (text excerpts and page numbers). Also\n * includes a `verification_url` linking to the AnyFormat dashboard for human review.\n *\n * Possible non-200 responses:\n *\n * - **412 `PRECONDITION_FAILED`** — extraction still in progress; retry with backoff.\n * - **422 `EXTRACTION_FAILED`** — extraction did not complete successfully; terminal.\n * Polling will not transition the collection out of this state. Possible\n * next steps: review the document, retry the upload, or open the\n * collection in the AnyFormat dashboard for more context.\n * - **422 `EXTRACTION_CANCELLED`** — extraction was cancelled; terminal.\n * Possible next steps: review the document, retry the upload, or open\n * the collection in the AnyFormat dashboard.\n *\n * Use webhooks (`extraction.completed` event) to avoid polling.\n */\nexport const v2GetFileResults = <ThrowOnError extends boolean = false>(options: Options<V2GetFileResultsData, ThrowOnError>) => (options.client ?? client).get<V2GetFileResultsResponses, V2GetFileResultsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/files/{collection_id}/results/',\n ...options\n});\n\n/**\n * Run workflow\n *\n * Upload a file and immediately run the extraction workflow on it.\n *\n * This is the primary endpoint for document extraction. It creates a file collection,\n * uploads the file, and starts extraction in one step. The response includes a collection\n * `id` that you can use to poll for results via\n * `GET /v2/workflows/{workflow_id}/files/{collection_id}/results/`.\n *\n * Provide the file as a binary upload in the `file` field, or send raw text in the\n * `text` field for text-only extraction.\n */\nexport const v2RunWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2RunWorkflowData, ThrowOnError>) => (options.client ?? client).post<V2RunWorkflowResponses, V2RunWorkflowErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/run/',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * List workflow runs\n *\n * List all extraction runs for a workflow with pagination.\n *\n * Each run corresponds to a file collection that was processed by the workflow.\n * Use the run's `id` (collection UUID) with\n * `GET /v2/workflows/{workflow_id}/files/{id}/results/` to fetch detailed results.\n */\nexport const v2ListWorkflowRuns = <ThrowOnError extends boolean = false>(options: Options<V2ListWorkflowRunsData, ThrowOnError>) => (options.client ?? client).get<V2ListWorkflowRunsResponses, V2ListWorkflowRunsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/runs/',\n ...options\n});\n\n/**\n * Upload file\n *\n * Upload a file to a workflow without running extraction.\n *\n * Use this when you want to stage files for later processing. For upload-and-extract\n * in one step, use `POST /v2/workflows/{workflow_id}/run/` instead.\n */\nexport const v2UploadFile = <ThrowOnError extends boolean = false>(options: Options<V2UploadFileData, ThrowOnError>) => (options.client ?? client).post<V2UploadFileResponses, V2UploadFileErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/upload/',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n","import { Result } from \"./result\";\nimport { SDKTimeout, toApiError } from \"./errors\";\nimport { v2CreateWorkflow, v2GetFileResults, v2RunWorkflow } from \"./sdk\";\nimport type { Client as HeyClient } from \"./sdk/client\";\nimport type { WorkflowCreateRequest } from \"./sdk\";\n\nexport interface WaitOptions {\n /** Overall budget before giving up. Default 120s. */\n timeoutMs?: number;\n /** Delay between result polls. Default 2s. */\n pollMs?: number;\n}\n\n/**\n * A pending run. Lazily creates the workflow, submits the document, and\n * polls for results when `wait()` is awaited.\n */\nexport class Run {\n private workflowId: string | null = null;\n private collectionId: string | null = null;\n\n constructor(\n private readonly client: HeyClient,\n private readonly request: WorkflowCreateRequest,\n private readonly file: Blob | File | null,\n private readonly text: string | null,\n ) {}\n\n /**\n * Create the workflow and submit the document — exactly once per `Run`.\n * Memoized so that retrying `wait()` after an `SDKTimeout` resumes polling\n * the in-flight run instead of creating a duplicate workflow + submission.\n */\n private async submit(): Promise<void> {\n if (this.collectionId !== null) return;\n\n const created = await v2CreateWorkflow({ client: this.client, body: this.request });\n if (created.error) throw toApiError(created.response?.status ?? 500, created.error);\n this.workflowId = created.data!.id;\n\n const submitted = await v2RunWorkflow({\n client: this.client,\n path: { workflow_id: this.workflowId },\n body: { file: this.file, text: this.text },\n });\n if (submitted.error) throw toApiError(submitted.response?.status ?? 500, submitted.error);\n this.collectionId = submitted.data!.id;\n }\n\n async wait(opts: WaitOptions = {}): Promise<Result> {\n const timeoutMs = opts.timeoutMs ?? 120_000;\n const pollMs = opts.pollMs ?? 2_000;\n\n await this.submit();\n\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const results = await v2GetFileResults({\n client: this.client,\n path: { workflow_id: this.workflowId!, collection_id: this.collectionId! },\n });\n // 412 is the API's \"still processing\" signal (retryable) — keep polling.\n if (!results.error) return new Result(results.data!);\n if (results.response?.status !== 412) {\n throw toApiError(results.response?.status ?? 500, results.error);\n }\n await new Promise((resolve) => setTimeout(resolve, pollMs));\n }\n throw new SDKTimeout(`Extraction did not complete within ${timeoutMs}ms`);\n }\n}\n","import { WorkflowBuilder } from \"./builder\";\nimport { createClient, createConfig } from \"./sdk/client\";\nimport type { Client as HeyClient } from \"./sdk/client\";\n\nexport interface AnyformatOptions {\n apiKey: string;\n /** Override the API base URL (defaults to production). */\n baseUrl?: string;\n}\n\n/** Entry point. `new Anyformat({ apiKey }).workflow(\"name\").parse()...` */\nexport class Anyformat {\n /** @internal */\n readonly _client: HeyClient;\n\n constructor(opts: AnyformatOptions) {\n this._client = createClient(\n createConfig({\n baseUrl: opts.baseUrl ?? \"https://api.anyformat.ai\",\n auth: opts.apiKey,\n }),\n );\n }\n\n workflow(name: string, description?: string): WorkflowBuilder {\n return new WorkflowBuilder(this._client, name, description);\n }\n}\n","import type {\n BooleanField,\n DateField,\n DatetimeField,\n EnumField,\n EnumOption,\n ExtractionSchema,\n FloatField,\n IntegerField,\n MultiSelectField,\n ObjectField,\n StringField,\n} from \"./sdk\";\n\n/** Any extraction field — the discriminated union on `data_type`. */\nexport type Field = ExtractionSchema[\"fields\"][number];\n\ntype LookupOpt = { lookup?: boolean };\n\nfunction withLookup<T extends object>(base: T, opts?: LookupOpt): T {\n if (opts?.lookup) return { ...base, lookup: true };\n return base;\n}\n\n/**\n * Factory for extraction-schema fields — the TS mirror of the Python\n * `Schema` facade. Each method returns the typed wire model the API\n * validates against; the discriminator (`data_type`) is filled in for you.\n */\nexport const Schema = {\n string: (name: string, description: string, opts?: LookupOpt): StringField =>\n withLookup({ data_type: \"string\", name, description }, opts),\n integer: (name: string, description: string, opts?: LookupOpt): IntegerField =>\n withLookup({ data_type: \"integer\", name, description }, opts),\n float: (name: string, description: string, opts?: LookupOpt): FloatField =>\n withLookup({ data_type: \"float\", name, description }, opts),\n boolean: (name: string, description: string, opts?: LookupOpt): BooleanField =>\n withLookup({ data_type: \"boolean\", name, description }, opts),\n date: (name: string, description: string, opts?: LookupOpt): DateField =>\n withLookup({ data_type: \"date\", name, description }, opts),\n datetime: (name: string, description: string, opts?: LookupOpt): DatetimeField =>\n withLookup({ data_type: \"datetime\", name, description }, opts),\n enum: (name: string, description: string, options: EnumOption[], opts?: LookupOpt): EnumField =>\n withLookup({ data_type: \"enum\", name, description, enum_options: options }, opts),\n multiSelect: (name: string, description: string, options: EnumOption[], opts?: LookupOpt): MultiSelectField =>\n withLookup({ data_type: \"multi_select\", name, description, enum_options: options }, opts),\n object: (name: string, description: string, fields: Field[], opts?: LookupOpt): ObjectField =>\n withLookup({ data_type: \"object\", name, description, nested_fields: fields }, opts),\n option: (name: string, description: string): EnumOption => ({ name, description }),\n};\n"],"mappings":"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","names":["joinedValues","config","request","url","client","client"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/builder.ts","../src/parse-view.ts","../src/result.ts","../src/errors.ts","../src/sdk/core/bodySerializer.gen.ts","../src/sdk/core/params.gen.ts","../src/sdk/core/serverSentEvents.gen.ts","../src/sdk/core/pathSerializer.gen.ts","../src/sdk/core/utils.gen.ts","../src/sdk/core/auth.gen.ts","../src/sdk/client/utils.gen.ts","../src/sdk/client/client.gen.ts","../src/sdk/client.gen.ts","../src/sdk/sdk.gen.ts","../src/run.ts","../src/workflow.ts","../src/client.ts","../src/schema.ts"],"sourcesContent":["export { Anyformat } from \"./client\";\nexport type { AnyformatOptions } from \"./client\";\nexport { Schema } from \"./schema\";\nexport type { Field, NestedField } from \"./schema\";\nexport { WorkflowBuilder } from \"./builder\";\nexport type { Branch } from \"./builder\";\nexport { Workflow } from \"./workflow\";\nexport { Run } from \"./run\";\nexport type { WaitOptions } from \"./run\";\nexport { Result } from \"./result\";\nexport { ParseView } from \"./parse-view\";\nexport {\n AnyformatError,\n APIError,\n BadRequest,\n Forbidden,\n NotFound,\n RateLimited,\n SDKTimeout,\n ServerError,\n Unauthorized,\n WorkflowBuilderError,\n} from \"./errors\";\n\n// Generated wire types, for advanced/typed use.\nexport type {\n Block,\n BooleanField,\n ClassifyCategory,\n DateField,\n DatetimeField,\n EnumField,\n EnumOption,\n ExtractedField,\n Extraction,\n ExtractionSchema,\n FloatField,\n IntegerField,\n MultiSelectField,\n ObjectField,\n ResultsResponse,\n SplitterRule,\n StringField,\n ValidationRule,\n WorkflowCreateRequest,\n} from \"./sdk\";\n","import { readFileSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport { Workflow } from \"./workflow\";\nimport { toApiError, WorkflowBuilderError } from \"./errors\";\nimport { v2CreateWorkflow, v2UpdateWorkflow } from \"./sdk\";\nimport type { Client as HeyClient } from \"./sdk/client\";\nimport type {\n ClassifyCategory,\n ClassifyNode,\n Edge,\n ExtractNode,\n LookupFileUpload,\n ParseNode,\n SplitterNode,\n SplitterRule,\n ValidateNode,\n ValidationRule,\n WorkflowCreateRequest,\n} from \"./sdk\";\nimport type { Field } from \"./schema\";\n\ntype ParseMode = \"standard\" | \"agentic\";\n\n/** Source-port label routing into an extract/validate node. */\nexport type Branch = string | ClassifyCategory | SplitterRule;\n\ninterface ParseOptions {\n mode?: ParseMode;\n promptHint?: string;\n figureEnhancement?: boolean;\n cache?: boolean;\n id?: string;\n}\n\n/**\n * Fluent assembler for a typed workflow graph — a faithful TS port of the\n * Python `WorkflowBuilder`. `parse`/`classify`/`split` are singletons;\n * `extract`/`validate` are repeatable and carry their edge metadata. Call\n * `build()` (or `create()`) to emit the wire request — submit with\n * `Workflow.run(file)` on the handle that `create()` returns.\n */\nexport class WorkflowBuilder {\n private parseNode: ParseNode | null = null;\n private classifyNode: ClassifyNode | null = null;\n private splitNode: SplitterNode | null = null;\n private splitRouteFrom: string | null = null;\n private readonly extracts: Array<[ExtractNode, string | null]> = [];\n private readonly validates: Array<[ValidateNode, string]> = [];\n private readonly idCounters: Record<string, number> = {};\n\n constructor(\n private readonly client: HeyClient,\n private readonly name: string,\n private readonly description?: string,\n ) {}\n\n private nextId(kind: string): string {\n this.idCounters[kind] = (this.idCounters[kind] ?? 0) + 1;\n return `${kind}_${this.idCounters[kind]}`;\n }\n\n private require(condition: unknown, message: string): void {\n if (!condition) throw new WorkflowBuilderError(message);\n }\n\n parse(opts: ParseOptions = {}): this {\n this.require(this.parseNode === null, \"parse() can only be called once\");\n this.parseNode = {\n type: \"parse\",\n id: opts.id ?? this.nextId(\"parse\"),\n mode: opts.mode ?? \"standard\",\n ...(opts.promptHint !== undefined ? { prompt_hint: opts.promptHint } : {}),\n figure_enhancement: opts.figureEnhancement ?? false,\n cache: opts.cache ?? true,\n };\n return this;\n }\n\n classify(categories: ClassifyCategory[], opts: { id?: string } = {}): this {\n this.require(this.parseNode !== null, \"classify() requires parse() first\");\n this.require(this.classifyNode === null, \"classify() can only be called once\");\n this.require(categories.length > 0, \"classify() requires at least one category\");\n this.classifyNode = { type: \"classify\", id: opts.id ?? this.nextId(\"classify\"), categories };\n return this;\n }\n\n split(rules: SplitterRule[], opts: { routeFrom?: string | ClassifyCategory; id?: string } = {}): this {\n this.require(this.parseNode !== null, \"split() requires parse() first\");\n this.require(this.splitNode === null, \"split() can only be called once\");\n this.require(rules.length > 0, \"split() requires at least one rule\");\n this.require(\n !(opts.routeFrom !== undefined && this.classifyNode === null),\n \"routeFrom is only valid after classify()\",\n );\n this.require(\n !(this.classifyNode !== null && opts.routeFrom === undefined),\n \"split(rules, { routeFrom }) is required when chaining after classify() — specify which classify branch routes into the splitter\",\n );\n this.splitRouteFrom = this.normalizeClassifyBranch(opts.routeFrom, \"routeFrom\");\n this.splitNode = { type: \"splitter\", id: opts.id ?? this.nextId(\"split\"), rules };\n return this;\n }\n\n extract(\n fields: Field[],\n opts: { branch?: Branch; id?: string; lookupFiles?: string[]; lookupSuggestion?: string } = {},\n ): this {\n this.require(this.parseNode !== null, \"extract() requires parse() first\");\n this.require(fields.length > 0, \"extract() requires at least one field\");\n const hasRouter = this.classifyNode !== null || this.splitNode !== null;\n this.require(\n !(hasRouter && opts.branch === undefined),\n \"extract(fields, { branch }) is required when classify() or split() is used\",\n );\n this.require(\n !(!hasRouter && opts.branch !== undefined),\n \"extract(fields, { branch }) is only valid after classify() or split()\",\n );\n const branchId = this.normalizeExtractBranch(opts.branch);\n const lookupFileUploads: LookupFileUpload[] = (opts.lookupFiles ?? []).map((filePath) => ({\n filename: basename(filePath),\n content: readFileSync(filePath).toString(\"base64\"),\n }));\n const node: ExtractNode = {\n type: \"extract\",\n id: opts.id ?? this.nextId(\"extract\"),\n extraction_schema: { fields },\n ...(lookupFileUploads.length > 0 ? { lookup_file_uploads: lookupFileUploads } : {}),\n ...(opts.lookupSuggestion !== undefined ? { lookup_suggestion: opts.lookupSuggestion } : {}),\n };\n this.extracts.push([node, branchId]);\n return this;\n }\n\n validate(rules: ValidationRule[], opts: { branch?: Branch; id?: string } = {}): this {\n this.require(this.parseNode !== null, \"validate() requires parse() first\");\n this.require(this.extracts.length > 0, \"validate() requires extract() first\");\n this.require(rules.length > 0, \"validate() requires at least one rule\");\n\n let sourceExtractId: string;\n if (opts.branch !== undefined) {\n const branchId = this.normalizeExtractBranch(opts.branch);\n const matching = this.extracts.filter(([, b]) => b === branchId);\n this.require(matching.length > 0, `validate(branch) did not match any extract`);\n sourceExtractId = matching[matching.length - 1]![0].id;\n } else {\n sourceExtractId = this.extracts[this.extracts.length - 1]![0].id;\n }\n const node: ValidateNode = { type: \"validate\", id: opts.id ?? this.nextId(\"validate\"), rules };\n this.validates.push([node, sourceExtractId]);\n return this;\n }\n\n private normalizeClassifyBranch(value: string | ClassifyCategory | undefined, kwarg: string): string | null {\n if (value === undefined) return null;\n const categories = this.classifyNode?.categories ?? [];\n if (typeof value !== \"string\") {\n if (!categories.some((c) => c.id === value.id)) {\n throw new WorkflowBuilderError(`${kwarg}=${value.id} is not one of the registered classify categories`);\n }\n return value.id;\n }\n if (!categories.some((c) => c.id === value)) {\n throw new WorkflowBuilderError(`${kwarg}=${value} does not match any classify category id`);\n }\n return value;\n }\n\n private normalizeExtractBranch(value: Branch | undefined): string | null {\n if (value === undefined) return null;\n const router: Array<{ id: string }> = this.splitNode?.rules ?? this.classifyNode?.categories ?? [];\n if (typeof value !== \"string\") {\n if (!router.some((item) => item.id === value.id)) {\n const expected = this.splitNode ? \"splitter rule\" : \"classify category\";\n throw new WorkflowBuilderError(`branch=${value.id} is not one of the registered ${expected} objects`);\n }\n return value.id;\n }\n if (!router.some((item) => item.id === value)) {\n throw new WorkflowBuilderError(`branch=${value} does not match any router id`);\n }\n return value;\n }\n\n /** Assemble the wire request (branch-routed edges). Pure — no network. */\n build(): WorkflowCreateRequest {\n if (this.parseNode === null) throw new WorkflowBuilderError(\"build() requires parse()\");\n const parseId = this.parseNode.id;\n const nodes: WorkflowCreateRequest[\"nodes\"] = [this.parseNode];\n const edges: Edge[] = [];\n\n if (this.classifyNode !== null) {\n nodes.push(this.classifyNode);\n edges.push({ source: parseId, target: this.classifyNode.id });\n }\n\n if (this.splitNode !== null) {\n nodes.push(this.splitNode);\n if (this.classifyNode !== null) {\n edges.push({ source: this.classifyNode.id, target: this.splitNode.id, branch: this.splitRouteFrom });\n } else {\n edges.push({ source: parseId, target: this.splitNode.id });\n }\n }\n\n const routerId = this.splitNode?.id ?? this.classifyNode?.id ?? null;\n for (const [node, branchId] of this.extracts) {\n nodes.push(node);\n edges.push(\n routerId === null\n ? { source: parseId, target: node.id }\n : { source: routerId, target: node.id, branch: branchId },\n );\n }\n\n for (const [node, sourceExtractId] of this.validates) {\n nodes.push(node);\n edges.push({ source: sourceExtractId, target: node.id });\n }\n\n return { name: this.name, description: this.description, nodes, edges };\n }\n\n /** Persist the workflow and return a handle you can `.run(file)` on. */\n async create(): Promise<Workflow> {\n const res = await v2CreateWorkflow({ client: this.client, body: this.build() });\n if (res.error) throw toApiError(res.response?.status ?? 500, res.error);\n return new Workflow(this.client, res.data!.id, res.data!.name);\n }\n\n /** Replace an existing workflow's definition and return a handle you can `.run(file)` on. */\n async update(workflowId: string): Promise<Workflow> {\n const res = await v2UpdateWorkflow({ client: this.client, path: { workflow_id: workflowId }, body: this.build() });\n if (res.error) throw toApiError(res.response?.status ?? 500, res.error);\n return new Workflow(this.client, res.data!.id, res.data!.name);\n }\n}\n","import type { Block, ParseResult } from \"./sdk\";\n\n/**\n * Typed view over the parse node's output. Returned by `Result.parse` — readers\n * use it for `.markdown`, `.text`, `.blocks`, `.parseConfidence`, and\n * `.layoutConfidence` without having to walk `result.raw.parse`.\n *\n * No `.draw()` here: rasterising pages requires PDF rendering (pdfium); the\n * Python SDK ships that, the TS SDK does not.\n */\nexport class ParseView {\n /** @internal */\n constructor(private readonly parse: ParseResult) {}\n\n get markdown(): string | null {\n return this.parse.markdown ?? null;\n }\n\n get text(): string | null {\n return this.parse.text ?? null;\n }\n\n get blocks(): Block[] {\n return this.parse.blocks ?? [];\n }\n\n /**\n * Document-level confidence (0-100) in the parsed content. May be `null` for\n * some parse modes — fall back to `layoutConfidence`.\n */\n get parseConfidence(): number | null {\n return this.parse.parse_confidence ?? null;\n }\n\n /**\n * Document-level confidence (0-100) in the page layout (block positions).\n * `null` when not available.\n */\n get layoutConfidence(): number | null {\n return this.parse.layout_confidence ?? null;\n }\n}\n","import { ParseView } from \"./parse-view\";\nimport type { ExtractedField, Extraction, ResultsResponse } from \"./sdk\";\n\n/** Typed wrapper over a completed run's results. */\nexport class Result {\n private _parse: ParseView | null | undefined;\n\n constructor(readonly raw: ResultsResponse) {}\n\n get collectionId(): string {\n return this.raw.collection_id;\n }\n\n get extractions(): Extraction[] {\n return this.raw.extractions ?? [];\n }\n\n /**\n * Typed view over the parse node's output, or `null` when the workflow has\n * no parse node. Cached so repeated access doesn't re-wrap.\n */\n get parse(): ParseView | null {\n if (this._parse === undefined) {\n const raw = this.raw.parse;\n this._parse = raw ? new ParseView(raw) : null;\n }\n return this._parse;\n }\n\n /**\n * Convenience accessor for a top-level scalar field on the first\n * extraction (linear workflows). Returns `undefined` for missing fields\n * or list-valued fields — read `extractions` directly for those.\n */\n field(name: string): ExtractedField | undefined {\n const value = this.extractions[0]?.fields?.[name];\n return value !== undefined && !Array.isArray(value) ? value : undefined;\n }\n}\n","export class AnyformatError extends Error {}\n\nexport class APIError extends AnyformatError {\n constructor(\n readonly status: number,\n message: string,\n readonly body?: unknown,\n ) {\n super(message);\n this.name = new.target.name;\n }\n}\n\nexport class BadRequest extends APIError {}\nexport class Unauthorized extends APIError {}\nexport class Forbidden extends APIError {}\nexport class NotFound extends APIError {}\nexport class RateLimited extends APIError {}\nexport class ServerError extends APIError {}\n\nexport class SDKTimeout extends AnyformatError {}\n\n/** Raised by the fluent `WorkflowBuilder` for builder-API misuse. */\nexport class WorkflowBuilderError extends AnyformatError {}\n\nexport function toApiError(status: number, body?: unknown): APIError {\n const message = `AnyFormat API error (${status})`;\n switch (status) {\n case 400:\n return new BadRequest(status, message, body);\n case 401:\n return new Unauthorized(status, message, body);\n case 403:\n return new Forbidden(status, message, body);\n case 404:\n return new NotFound(status, message, body);\n case 429:\n return new RateLimited(status, message, body);\n default:\n return status >= 500\n ? new ServerError(status, message, body)\n : new APIError(status, message, body);\n }\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (data: FormData, key: string, value: unknown): 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 = (data: URLSearchParams, key: string, value: unknown): 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: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).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: (body: unknown): string =>\n JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).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 | {\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 `in` is omitted, `map` aliases `key` to the transport layer.\n */\n map: Slot;\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 in?: never;\n map: Slot;\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 ('key' in config) {\n map.set(config.key, {\n map: config.map,\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' && !Array.isArray(value) && !Object.keys(value).length) {\n delete params[slot as Slot];\n }\n }\n};\n\nexport const buildClientParams = (args: ReadonlyArray<unknown>, fields: FieldsConfig) => {\n const params: Params = {\n body: Object.create(null),\n headers: Object.create(null),\n path: Object.create(null),\n query: Object.create(null),\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 if (field.in) {\n (params[field.in] as Record<string, unknown>)[name] = arg;\n }\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 if (field.in) {\n const name = field.map || key;\n (params[field.in] as Record<string, unknown>)[name] = value;\n } else {\n params[field.map] = value;\n }\n } else {\n const extra = extraPrefixes.find(([prefix]) => key.startsWith(prefix));\n\n if (extra) {\n const [prefix, slot] = extra;\n (params[slot] as Record<string, unknown>)[key.slice(prefix.length)] = value;\n } else if ('allowExtra' in config && config.allowExtra) {\n for (const [slot, allowed] of Object.entries(config.allowExtra)) {\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\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\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 = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.replace(/^retry:\\s*/, ''), 10);\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> extends SerializePrimitiveOptions, 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' ? separator + joinedValues : 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 = [...values, key, allowReserved ? (v as string) : encodeURIComponent(v as string)];\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' ? separator + joinedValues : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const 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(match, serializeArrayParam({ explode, name, style, value }));\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 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 function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}) {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if ('serializedBody' in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== '';\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e., client-axios)\n return options.body !== '' ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\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 = 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\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type { Client, ClientOptions, Config, RequestOptions } from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\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 const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.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 = (contentType: string | null): 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 (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\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) => cleanContent.startsWith(type))\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 async function setAuthParams(\n options: Pick<RequestOptions, 'auth' | 'query' | 'security'> & {\n headers: Headers;\n },\n): Promise<void> {\n for (const auth of options.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 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\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\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\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) {\n continue;\n }\n\n const iterator = header instanceof Headers ? headersEntries(header) : 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 may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => 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: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\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 { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type { Client, Config, RequestOptions, 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<Request, Response, unknown, ResolvedRequestOptions>();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends 'data' | 'fields' = 'fields',\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\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 as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams(opts);\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client['request'] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n 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\n 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 const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (response.status === 204 || response.headers.get('Content-Length') === '0') {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'json': {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\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 throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n url,\n });\n };\n\n const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type ClientOptions, type Config, createClient, createConfig } from './client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\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 ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>({ baseUrl: 'https://api-dev.anyformat.ai' }));\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { CreateWebhookV2WebhooksPostData, CreateWebhookV2WebhooksPostErrors, CreateWebhookV2WebhooksPostResponses, DeleteFileV2FilesCollectionIdDeleteData, DeleteFileV2FilesCollectionIdDeleteErrors, DeleteFileV2FilesCollectionIdDeleteResponses, DeleteWebhookV2WebhooksWebhookIdDeleteData, DeleteWebhookV2WebhooksWebhookIdDeleteErrors, DeleteWebhookV2WebhooksWebhookIdDeleteResponses, HealthCheckHealthGetData, HealthCheckHealthGetResponses, ListWebhooksV2WebhooksGetData, ListWebhooksV2WebhooksGetErrors, ListWebhooksV2WebhooksGetResponses, V2CreateWorkflowData, V2CreateWorkflowErrors, V2CreateWorkflowFileData, V2CreateWorkflowFileErrors, V2CreateWorkflowFileResponses, V2CreateWorkflowResponses, V2DeleteWorkflowData, V2DeleteWorkflowErrors, V2DeleteWorkflowResponses, V2GetFileResultsData, V2GetFileResultsErrors, V2GetFileResultsResponses, V2GetWorkflowData, V2GetWorkflowErrors, V2GetWorkflowResponses, V2ListWorkflowFilesData, V2ListWorkflowFilesErrors, V2ListWorkflowFilesResponses, V2ListWorkflowRunsData, V2ListWorkflowRunsErrors, V2ListWorkflowRunsResponses, V2ListWorkflowsData, V2ListWorkflowsErrors, V2ListWorkflowsResponses, V2RunWorkflowData, V2RunWorkflowErrors, V2RunWorkflowResponses, V2SuggestFieldDescriptionData, V2SuggestFieldDescriptionErrors, V2SuggestFieldDescriptionResponses, V2SuggestFieldsData, V2SuggestFieldsErrors, V2SuggestFieldsResponses, V2SuggestWorkflowDescriptionData, V2SuggestWorkflowDescriptionErrors, V2SuggestWorkflowDescriptionResponses, V2SuggestWorkflowNameData, V2SuggestWorkflowNameErrors, V2SuggestWorkflowNameResponses, V2UpdateWorkflowData, V2UpdateWorkflowErrors, V2UpdateWorkflowResponses, V2UploadFileData, V2UploadFileErrors, V2UploadFileResponses, V3CreateWorkflowFileFromUrlData, V3CreateWorkflowFileFromUrlErrors, V3CreateWorkflowFileFromUrlResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {\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 * Health Check\n *\n * Returns 200 OK if the service is running. No authentication required.\n *\n * Use this endpoint to verify API connectivity before making authenticated calls.\n */\nexport const healthCheckHealthGet = <ThrowOnError extends boolean = false>(options?: Options<HealthCheckHealthGetData, ThrowOnError>) => (options?.client ?? client).get<HealthCheckHealthGetResponses, unknown, ThrowOnError>({ url: '/health/', ...options });\n\n/**\n * Delete file collection\n *\n * Delete a file collection and all its files permanently.\n *\n * This removes all uploaded files and any extraction results associated with\n * the collection. This action is irreversible.\n */\nexport const deleteFileV2FilesCollectionIdDelete = <ThrowOnError extends boolean = false>(options: Options<DeleteFileV2FilesCollectionIdDeleteData, ThrowOnError>) => (options.client ?? client).delete<DeleteFileV2FilesCollectionIdDeleteResponses, DeleteFileV2FilesCollectionIdDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/files/{collection_id}/',\n ...options\n});\n\n/**\n * Suggest a field description\n */\nexport const v2SuggestFieldDescription = <ThrowOnError extends boolean = false>(options: Options<V2SuggestFieldDescriptionData, ThrowOnError>) => (options.client ?? client).post<V2SuggestFieldDescriptionResponses, V2SuggestFieldDescriptionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/organizations/{org_id}/suggestions/field-description/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Suggest extraction fields\n */\nexport const v2SuggestFields = <ThrowOnError extends boolean = false>(options: Options<V2SuggestFieldsData, ThrowOnError>) => (options.client ?? client).post<V2SuggestFieldsResponses, V2SuggestFieldsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/organizations/{org_id}/suggestions/fields/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Suggest a workflow description\n */\nexport const v2SuggestWorkflowDescription = <ThrowOnError extends boolean = false>(options: Options<V2SuggestWorkflowDescriptionData, ThrowOnError>) => (options.client ?? client).post<V2SuggestWorkflowDescriptionResponses, V2SuggestWorkflowDescriptionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/organizations/{org_id}/suggestions/workflow-description/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Suggest a workflow name\n */\nexport const v2SuggestWorkflowName = <ThrowOnError extends boolean = false>(options: Options<V2SuggestWorkflowNameData, ThrowOnError>) => (options.client ?? client).post<V2SuggestWorkflowNameResponses, V2SuggestWorkflowNameErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/organizations/{org_id}/suggestions/workflow-name/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List webhooks\n *\n * List all webhook subscriptions for the authenticated organization.\n *\n * Returns a list of webhooks. Secrets are excluded from the list response\n * for security — they are only returned once, when the webhook is created.\n */\nexport const listWebhooksV2WebhooksGet = <ThrowOnError extends boolean = false>(options?: Options<ListWebhooksV2WebhooksGetData, ThrowOnError>) => (options?.client ?? client).get<ListWebhooksV2WebhooksGetResponses, ListWebhooksV2WebhooksGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/webhooks/',\n ...options\n});\n\n/**\n * Create webhook\n *\n * Create a new webhook subscription for your organization.\n *\n * The webhook URL must use HTTPS. AnyFormat will send POST requests to this URL\n * when the subscribed events occur. The response includes a `secret` that you\n * should use to verify webhook signatures.\n *\n * Supported events:\n * - `extraction.completed` — fired when a file extraction finishes successfully.\n * - `extraction.failed` — fired when a file extraction fails.\n */\nexport const createWebhookV2WebhooksPost = <ThrowOnError extends boolean = false>(options: Options<CreateWebhookV2WebhooksPostData, ThrowOnError>) => (options.client ?? client).post<CreateWebhookV2WebhooksPostResponses, CreateWebhookV2WebhooksPostErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/webhooks/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete webhook\n *\n * Delete a webhook subscription by ID.\n *\n * After deletion, AnyFormat will stop sending events to the webhook URL.\n * This action is irreversible.\n */\nexport const deleteWebhookV2WebhooksWebhookIdDelete = <ThrowOnError extends boolean = false>(options: Options<DeleteWebhookV2WebhooksWebhookIdDeleteData, ThrowOnError>) => (options.client ?? client).delete<DeleteWebhookV2WebhooksWebhookIdDeleteResponses, DeleteWebhookV2WebhooksWebhookIdDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/webhooks/{webhook_id}/',\n ...options\n});\n\n/**\n * List workflows\n *\n * List all workflows in your organization with pagination.\n *\n * Workflows can be filtered by status and sorted by any field.\n */\nexport const v2ListWorkflows = <ThrowOnError extends boolean = false>(options?: Options<V2ListWorkflowsData, ThrowOnError>) => (options?.client ?? client).get<V2ListWorkflowsResponses, V2ListWorkflowsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/',\n ...options\n});\n\n/**\n * Create workflow\n *\n * Create a workflow from a strongly-typed graph (atomic).\n *\n * Provide an explicit list of typed `nodes` (parse / classify / splitter /\n * extract) and `edges` between them. The full workflow — fields, nodes,\n * routing — is created in a single transaction.\n */\nexport const v2CreateWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2CreateWorkflowData, ThrowOnError>) => (options.client ?? client).post<V2CreateWorkflowResponses, V2CreateWorkflowErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete workflow\n *\n * Delete a workflow and all associated file collections and extraction results.\n *\n * This action is irreversible.\n */\nexport const v2DeleteWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2DeleteWorkflowData, ThrowOnError>) => (options.client ?? client).delete<V2DeleteWorkflowResponses, V2DeleteWorkflowErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/',\n ...options\n});\n\n/**\n * Get workflow\n *\n * Retrieve a single workflow by its ID, including its configured extraction fields.\n */\nexport const v2GetWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2GetWorkflowData, ThrowOnError>) => (options.client ?? client).get<V2GetWorkflowResponses, V2GetWorkflowErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/',\n ...options\n});\n\n/**\n * Update workflow\n *\n * Replace a workflow's typed graph definition (atomic).\n *\n * Provide the full replacement graph — nodes and edges — identically to\n * `POST /v2/workflows/`. The workflow's extraction fields are rebuilt from\n * the new definition in a single transaction.\n */\nexport const v2UpdateWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2UpdateWorkflowData, ThrowOnError>) => (options.client ?? client).put<V2UpdateWorkflowResponses, V2UpdateWorkflowErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List file collections\n *\n * List file collections for a workflow.\n *\n * A file collection groups one or more uploaded files together. Each collection\n * has a status indicating the extraction progress: `pending`, `processing`,\n * `completed`, or `failed`.\n */\nexport const v2ListWorkflowFiles = <ThrowOnError extends boolean = false>(options: Options<V2ListWorkflowFilesData, ThrowOnError>) => (options.client ?? client).get<V2ListWorkflowFilesResponses, V2ListWorkflowFilesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/files/',\n ...options\n});\n\n/**\n * Create file collection\n *\n * Upload one or more files to a workflow, creating a new file collection.\n *\n * Use this when you want to upload files without immediately running extraction.\n * To upload and extract in one step, use `POST /v2/workflows/{workflow_id}/run/` instead.\n *\n * Supported file types: PDF, PNG, JPG, TIFF, TXT, DOCX, XLSX, CSV, and more.\n */\nexport const v2CreateWorkflowFile = <ThrowOnError extends boolean = false>(options: Options<V2CreateWorkflowFileData, ThrowOnError>) => (options.client ?? client).post<V2CreateWorkflowFileResponses, V2CreateWorkflowFileErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/files/',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * Get file results\n *\n * Retrieve the extraction results for a file collection.\n *\n * Returns the structured data extracted from each file, including field values,\n * confidence scores, and source evidence (text excerpts and page numbers). Also\n * includes a `verification_url` linking to the AnyFormat dashboard for human review.\n *\n * Possible non-200 responses:\n *\n * - **412 `PRECONDITION_FAILED`** — extraction still in progress; retry with backoff.\n * - **422 `EXTRACTION_FAILED`** — extraction did not complete successfully; terminal.\n * Polling will not transition the collection out of this state. Possible\n * next steps: review the document, retry the upload, or open the\n * collection in the AnyFormat dashboard for more context.\n * - **422 `EXTRACTION_CANCELLED`** — extraction was cancelled; terminal.\n * Possible next steps: review the document, retry the upload, or open\n * the collection in the AnyFormat dashboard.\n *\n * Use webhooks (`extraction.completed` event) to avoid polling.\n */\nexport const v2GetFileResults = <ThrowOnError extends boolean = false>(options: Options<V2GetFileResultsData, ThrowOnError>) => (options.client ?? client).get<V2GetFileResultsResponses, V2GetFileResultsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/files/{collection_id}/results/',\n ...options\n});\n\n/**\n * Run workflow\n *\n * Upload a file and immediately run the extraction workflow on it.\n *\n * This is the primary endpoint for document extraction. It creates a file collection,\n * uploads the file, and starts extraction in one step. The response includes a collection\n * `id` that you can use to poll for results via\n * `GET /v2/workflows/{workflow_id}/files/{collection_id}/results/`.\n *\n * Provide the file as a binary upload in the `file` field, or send raw text in the\n * `text` field for text-only extraction.\n */\nexport const v2RunWorkflow = <ThrowOnError extends boolean = false>(options: Options<V2RunWorkflowData, ThrowOnError>) => (options.client ?? client).post<V2RunWorkflowResponses, V2RunWorkflowErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/run/',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * List workflow runs\n *\n * List all extraction runs for a workflow with pagination.\n *\n * Each run corresponds to a file collection that was processed by the workflow.\n * Use the run's `id` (collection UUID) with\n * `GET /v2/workflows/{workflow_id}/files/{id}/results/` to fetch detailed results.\n */\nexport const v2ListWorkflowRuns = <ThrowOnError extends boolean = false>(options: Options<V2ListWorkflowRunsData, ThrowOnError>) => (options.client ?? client).get<V2ListWorkflowRunsResponses, V2ListWorkflowRunsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/runs/',\n ...options\n});\n\n/**\n * Upload file\n *\n * Upload a file to a workflow without running extraction.\n *\n * Use this when you want to stage files for later processing. For upload-and-extract\n * in one step, use `POST /v2/workflows/{workflow_id}/run/` instead.\n */\nexport const v2UploadFile = <ThrowOnError extends boolean = false>(options: Options<V2UploadFileData, ThrowOnError>) => (options.client ?? client).post<V2UploadFileResponses, V2UploadFileErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v2/workflows/{workflow_id}/upload/',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * Create file collection from URL\n *\n * Create a file collection by pointing the backend at a URL.\n *\n * Use this when the source document already lives at an HTTPS URL (for\n * example, a presigned S3 link or a hosted asset). The backend fetches\n * the bytes server-side — the caller does not stream them.\n *\n * The fetch is bounded by a 10-second timeout and a byte cap that\n * mirrors Django's ``DATA_UPLOAD_MAX_MEMORY_SIZE`` (20 MB by default).\n *\n * Error statuses:\n * - ``400`` for caller-input errors the backend won't accept: oversize\n * response (``RemoteFileFetchTooLarge``) and SSRF-blocked URL\n * (``RemoteFileUrlBlocked``). Mirrors the ``content_base64`` path's\n * ``RequestDataTooBig`` → 400 mapping for uniform wire shape.\n * - ``422`` when the upstream URL prevented processing: timeout,\n * DNS failure, or non-2xx response from the target.\n */\nexport const v3CreateWorkflowFileFromUrl = <ThrowOnError extends boolean = false>(options: Options<V3CreateWorkflowFileFromUrlData, ThrowOnError>) => (options.client ?? client).post<V3CreateWorkflowFileFromUrlResponses, V3CreateWorkflowFileFromUrlErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/v3/workflows/{workflow_id}/files/from-url/',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n","import { Result } from \"./result\";\nimport { SDKTimeout, toApiError } from \"./errors\";\nimport { v2GetFileResults } from \"./sdk\";\nimport type { Client as HeyClient } from \"./sdk/client\";\n\nexport interface WaitOptions {\n /** Overall budget before giving up. Default 300 000 ms (300s). */\n timeoutMs?: number;\n /** Delay between result polls. Default 3 000 ms (3s). */\n pollMs?: number;\n}\n\n/**\n * A submitted run. `wait()` polls for completion. Created eagerly by\n * `Workflow.run()` — the workflow + file submission have already happened\n * by the time you hold a `Run`.\n */\nexport class Run {\n /** @internal */\n constructor(\n private readonly client: HeyClient,\n readonly workflowId: string,\n readonly id: string,\n ) {}\n\n async wait(opts: WaitOptions = {}): Promise<Result> {\n const timeoutMs = opts.timeoutMs ?? 300_000;\n const pollMs = opts.pollMs ?? 3_000;\n\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const results = await v2GetFileResults({\n client: this.client,\n path: { workflow_id: this.workflowId, collection_id: this.id },\n });\n // 412 is the API's \"still processing\" signal (retryable) — keep polling.\n if (!results.error) return new Result(results.data!);\n if (results.response?.status !== 412) {\n throw toApiError(results.response?.status ?? 500, results.error);\n }\n await new Promise((resolve) => setTimeout(resolve, pollMs));\n }\n throw new SDKTimeout(`Extraction did not complete within ${timeoutMs}ms`);\n }\n}\n","import { Run } from \"./run\";\nimport { toApiError, WorkflowBuilderError } from \"./errors\";\nimport { v2RunWorkflow } from \"./sdk\";\nimport type { Client as HeyClient } from \"./sdk/client\";\n\n/**\n * A persisted workflow on the server. Returned by `WorkflowBuilder.create()`.\n * `run(file | text)` submits a document against this workflow's id and returns\n * a `Run` you can `.wait()` on for results.\n */\nexport class Workflow {\n /** @internal */\n constructor(\n private readonly client: HeyClient,\n readonly id: string,\n readonly name: string,\n ) {}\n\n /** Submit a document against this workflow and return a pending `Run`. */\n async run(file: File | null = null, opts: { text?: string } = {}): Promise<Run> {\n if (file === null && !opts.text) {\n throw new WorkflowBuilderError(\"run() requires a document — pass a file or non-empty opts.text\");\n }\n if (file !== null && opts.text !== undefined) {\n throw new WorkflowBuilderError(\"run() accepts either a file or text, not both\");\n }\n if (file !== null) {\n // A nameless file uploads as application/octet-stream, so the worker can't\n // detect its type. Duck-typed on `.name` since `File` isn't a Node 18 global.\n const filename = (file as { name?: unknown }).name;\n if (typeof filename !== \"string\" || filename.length === 0) {\n throw new WorkflowBuilderError(\n 'run() needs a named file so the server can detect its type — pass a File, e.g. new File([bytes], \"invoice.pdf\"), not a bare Blob',\n );\n }\n }\n const submitted = await v2RunWorkflow({\n client: this.client,\n path: { workflow_id: this.id },\n body: { file, text: opts.text ?? null },\n });\n if (submitted.error) throw toApiError(submitted.response?.status ?? 500, submitted.error);\n return new Run(this.client, this.id, submitted.data!.id);\n }\n}\n","import { WorkflowBuilder } from \"./builder\";\nimport { toApiError } from \"./errors\";\nimport { v2DeleteWorkflow, v2ListWorkflows } from \"./sdk\";\nimport { createClient, createConfig } from \"./sdk/client\";\nimport type { Client as HeyClient } from \"./sdk/client\";\nimport { Workflow } from \"./workflow\";\n\nexport interface AnyformatOptions {\n apiKey: string;\n /** Override the API base URL (defaults to production). */\n baseUrl?: string;\n}\n\n/** Entry point. `new Anyformat({ apiKey }).workflow(\"name\").parse()...` */\nexport class Anyformat {\n /** @internal */\n readonly _client: HeyClient;\n\n constructor(opts: AnyformatOptions) {\n this._client = createClient(\n createConfig({\n baseUrl: opts.baseUrl ?? \"https://api.anyformat.ai\",\n auth: opts.apiKey,\n // Identifies the caller in our logs (Datadog facet). Plain HTTP callers\n // send no such header and are logged as origin \"api\".\n headers: { \"x-anyformat-origin\": \"js-sdk\" },\n }),\n );\n }\n\n workflow(name: string, description?: string): WorkflowBuilder {\n return new WorkflowBuilder(this._client, name, description);\n }\n\n async listWorkflows(opts?: { page?: number; pageSize?: number; status?: string }): Promise<Workflow[]> {\n const res = await v2ListWorkflows({\n client: this._client,\n query: { page: opts?.page, page_size: opts?.pageSize, status: opts?.status },\n });\n if (res.error) throw toApiError(res.response?.status ?? 500, res.error);\n return res.data!.results.map((r) => new Workflow(this._client, r.id!, r.name ?? \"\"));\n }\n\n async deleteWorkflow(workflowId: string): Promise<string> {\n const res = await v2DeleteWorkflow({\n client: this._client,\n path: { workflow_id: workflowId },\n });\n if (res.error) throw toApiError(res.response?.status ?? 500, res.error);\n return workflowId;\n }\n}\n","import type {\n BooleanField,\n DateField,\n DatetimeField,\n EnumField,\n EnumOption,\n ExtractionSchema,\n FloatField,\n IntegerField,\n MultiSelectField,\n ObjectField,\n StringField,\n} from \"./sdk\";\n\n/** Any extraction field — the discriminated union on `data_type`. */\nexport type Field = ExtractionSchema[\"fields\"][number];\n\n/**\n * A field that may appear inside an object. Excludes `object`: only one\n * level of nesting is supported, so objects cannot contain objects.\n */\nexport type NestedField = ObjectField[\"nested_fields\"][number];\n\ntype LookupOpt = { lookup?: boolean };\n\nfunction withLookup<T extends object>(base: T, opts?: LookupOpt): T {\n if (opts?.lookup) return { ...base, lookup: true };\n return base;\n}\n\n/**\n * Factory for extraction-schema fields — the TS mirror of the Python\n * `Schema` facade. Each method returns the typed wire model the API\n * validates against; the discriminator (`data_type`) is filled in for you.\n */\nexport const Schema = {\n string: (name: string, description: string, opts?: LookupOpt): StringField =>\n withLookup({ data_type: \"string\", name, description }, opts),\n integer: (name: string, description: string, opts?: LookupOpt): IntegerField =>\n withLookup({ data_type: \"integer\", name, description }, opts),\n float: (name: string, description: string, opts?: LookupOpt): FloatField =>\n withLookup({ data_type: \"float\", name, description }, opts),\n boolean: (name: string, description: string, opts?: LookupOpt): BooleanField =>\n withLookup({ data_type: \"boolean\", name, description }, opts),\n date: (name: string, description: string, opts?: LookupOpt): DateField =>\n withLookup({ data_type: \"date\", name, description }, opts),\n datetime: (name: string, description: string, opts?: LookupOpt): DatetimeField =>\n withLookup({ data_type: \"datetime\", name, description }, opts),\n enum: (name: string, description: string, options: EnumOption[], opts?: LookupOpt): EnumField =>\n withLookup({ data_type: \"enum\", name, description, enum_options: options }, opts),\n multiSelect: (name: string, description: string, options: EnumOption[], opts?: LookupOpt): MultiSelectField =>\n withLookup({ data_type: \"multi_select\", name, description, enum_options: options }, opts),\n object: (name: string, description: string, fields: NestedField[], opts?: LookupOpt): ObjectField =>\n withLookup({ data_type: \"object\", name, description, nested_fields: fields }, opts),\n option: (name: string, description: string): EnumOption => ({ name, description }),\n};\n"],"mappings":"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","names":["joinedValues","config","request","url","client","client","client"]}
|