notte-sdk 0.0.1
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 +632 -0
- package/dist/index.d.mts +9036 -0
- package/dist/index.d.ts +9036 -0
- package/dist/index.js +2866 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2761 -0
- package/dist/index.mjs.map +1 -0
- package/dist/proxy/core.d.mts +17 -0
- package/dist/proxy/core.d.ts +17 -0
- package/dist/proxy/core.js +312 -0
- package/dist/proxy/core.js.map +1 -0
- package/dist/proxy/core.mjs +285 -0
- package/dist/proxy/core.mjs.map +1 -0
- package/dist/proxy/next.d.mts +82 -0
- package/dist/proxy/next.d.ts +82 -0
- package/dist/proxy/next.js +354 -0
- package/dist/proxy/next.js.map +1 -0
- package/dist/proxy/next.mjs +323 -0
- package/dist/proxy/next.mjs.map +1 -0
- package/dist/types-DmqqdEMP.d.mts +75 -0
- package/dist/types-DmqqdEMP.d.ts +75 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/client/core/bodySerializer.gen.ts","../src/lib/client/core/params.gen.ts","../src/lib/client/core/serverSentEvents.gen.ts","../src/lib/client/core/pathSerializer.gen.ts","../src/lib/client/core/utils.gen.ts","../src/lib/client/core/auth.gen.ts","../src/lib/client/client/utils.gen.ts","../src/lib/client/client/client.gen.ts","../src/lib/client/client.gen.ts","../src/lib/client/sdk.gen.ts","../src/utils.ts","../src/session.ts","../src/agent.ts","../src/vaults.ts","../src/personas.ts","../src/version.ts","../src/functions.ts","../src/client.ts","../src/proxy/types.ts"],"sourcesContent":["// Re-export all generated types and services\nexport * from '@/lib/client/types.gen';\nexport * from '@/lib/client/sdk.gen';\n\n// Re-export client for direct access\nexport { client } from '@/lib/client/client.gen';\n\n// Export main SDK classes\nexport { NotteClient } from '@/client';\nexport { Session } from '@/session';\nexport { Agent } from '@/agent';\nexport { NotteVault } from '@/vaults';\nexport { NottePersona } from '@/personas';\nexport { NotteFunction } from '@/functions';\n\n// Export types\nexport type { NotteClientConfig } from '@/client';\nexport type { AgentConstructor, AgentRunRequest, AgentUpdateHandler } from '@/agent';\nexport type { VaultConstructor } from '@/vaults';\nexport type { PersonaConstructor, MessageReadOptions, PersonaListOptions } from '@/personas';\nexport type { FunctionConstructor, FunctionRunStartResult } from '@/functions';\n\n// Export proxy types and errors (the proxy module itself is available via '@notte/sdk/next' and '@notte/sdk/proxy')\nexport type { NotteProxyConfig } from '@/proxy/types';\nexport { NotteProxyAuthError } from '@/proxy/types';\n\n// Create a configured client instance (legacy support)\nimport { client } from '@/lib/client/client.gen';\n\nexport const createClient = (config?: { baseUrl?: string; token?: string }) => {\n if (config?.baseUrl) {\n client.setConfig({ baseUrl: config.baseUrl });\n }\n\n if (config?.token) {\n client.interceptors.request.use((request: any) => {\n request.headers.set('Authorization', `Bearer ${config.token}`);\n return request;\n });\n }\n\n return client;\n};\n\n// Default export - NotteClient for convenience\nexport { NotteClient as default } from '@/client';\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: {},\n headers: {},\n path: {},\n query: {},\n };\n\n const map = buildKeyMap(fields);\n\n let config: FieldsConfig[number] | undefined;\n\n for (const [index, arg] of args.entries()) {\n if (fields[index]) {\n config = fields[index];\n }\n\n if (!config) {\n continue;\n }\n\n if ('in' in config) {\n if (config.key) {\n const field = map.get(config.key)!;\n const name = field.map || config.key;\n 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 const 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 // Normalize line endings: CRLF -> LF, then CR -> LF\n buffer = buffer.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\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 const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, 'security'> &\n Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n 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: Res,\n request: Req,\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({\n ...opts,\n security: opts.security,\n });\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 { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n let request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n let response: Response;\n\n try {\n response = await _fetch(request);\n } catch (error) {\n // Handle fetch exceptions (AbortError, network errors, etc.)\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(error, undefined as any, request, opts)) as unknown;\n }\n }\n\n finalError = finalError || ({} as unknown);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // Return error response\n return opts.responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response: undefined as any,\n };\n }\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 const error = jsonError ?? textError;\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(error, response, request, opts)) as string;\n }\n }\n\n finalError = finalError || ({} as string);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return opts.responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n ...result,\n };\n };\n\n 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 headers: opts.headers as unknown as Record<string, string>,\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://us-staging.notte.cc' }));\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 { AgentStartData, AgentStartErrors, AgentStartResponses, AgentStatusData, AgentStatusErrors, AgentStatusResponses, AgentStopData, AgentStopErrors, AgentStopResponses, AnythingStartData, AnythingStartErrors, AnythingStartResponses, FileDownloadData, FileDownloadErrors, FileDownloadResponses, FileListDownloadsData, FileListDownloadsErrors, FileListDownloadsResponses, FileListUploadsData, FileListUploadsErrors, FileListUploadsResponses, FileUploadData, FileUploadDownloadedFileData, FileUploadDownloadedFileErrors, FileUploadDownloadedFileResponses, FileUploadErrors, FileUploadResponses, FunctionCreateData, FunctionCreateErrors, FunctionCreateResponses, FunctionDeleteData, FunctionDeleteErrors, FunctionDeleteResponses, FunctionDownloadUrlData, FunctionDownloadUrlErrors, FunctionDownloadUrlResponses, FunctionForkData, FunctionForkErrors, FunctionForkResponses, FunctionRunGetMetadataData, FunctionRunGetMetadataErrors, FunctionRunGetMetadataResponses, FunctionRunStartData, FunctionRunStartErrors, FunctionRunStartResponses, FunctionRunStopData, FunctionRunStopErrors, FunctionRunStopResponses, FunctionRunUpdateMetadataData, FunctionRunUpdateMetadataErrors, FunctionRunUpdateMetadataResponses, FunctionScheduleDeleteData, FunctionScheduleDeleteErrors, FunctionScheduleDeleteResponses, FunctionScheduleSetData, FunctionScheduleSetErrors, FunctionScheduleSetResponses, FunctionUpdateData, FunctionUpdateErrors, FunctionUpdateResponses, GetScriptData, GetScriptErrors, GetScriptResponses, GetSessionScriptData, GetSessionScriptErrors, GetSessionScriptResponses, GetUsageData, GetUsageErrors, GetUsageLogsData, GetUsageLogsErrors, GetUsageLogsResponses, GetUsageResponses, HealthCheckData, HealthCheckResponses, ImprovePromptData, ImprovePromptErrors, ImprovePromptResponses, ListAgentsData, ListAgentsErrors, ListAgentsResponses, ListFunctionRunsByFunctionIdData, ListFunctionRunsByFunctionIdErrors, ListFunctionRunsByFunctionIdResponses, ListFunctionsData, ListFunctionsErrors, ListFunctionsResponses, ListPersonasData, ListPersonasErrors, ListPersonasResponses, ListSessionsData, ListSessionsErrors, ListSessionsResponses, ListVaultsData, ListVaultsErrors, ListVaultsResponses, NudgePromptData, NudgePromptErrors, NudgePromptResponses, PageExecuteData, PageExecuteErrors, PageExecuteResponses, PageObserveData, PageObserveErrors, PageObserveResponses, PageScrapeData, PageScrapeErrors, PageScrapeResponses, PageScreenshotData, PageScreenshotErrors, PageScreenshotResponses, PersonaCreateData, PersonaCreateErrors, PersonaCreateResponses, PersonaDeleteData, PersonaDeleteErrors, PersonaDeleteResponses, PersonaEmailsListData, PersonaEmailsListErrors, PersonaEmailsListResponses, PersonaGetData, PersonaGetErrors, PersonaGetResponses, PersonaSmsListData, PersonaSmsListErrors, PersonaSmsListResponses, ProfileCreateData, ProfileCreateErrors, ProfileCreateResponses, ProfileDeleteData, ProfileDeleteErrors, ProfileDeleteResponses, ProfileGetData, ProfileGetErrors, ProfileGetResponses, ProfileListData, ProfileListErrors, ProfileListResponses, ScrapeFromHtmlData, ScrapeFromHtmlErrors, ScrapeFromHtmlResponses, ScrapeWebpageData, ScrapeWebpageErrors, ScrapeWebpageResponses, SessionCookiesGetData, SessionCookiesGetErrors, SessionCookiesGetResponses, SessionCookiesSetData, SessionCookiesSetErrors, SessionCookiesSetResponses, SessionDebugInfoData, SessionDebugInfoErrors, SessionDebugInfoResponses, SessionNetworkLogsData, SessionNetworkLogsErrors, SessionNetworkLogsResponses, SessionOffsetData, SessionOffsetErrors, SessionOffsetResponses, SessionReplayData, SessionReplayErrors, SessionReplayResponses, SessionStartData, SessionStartErrors, SessionStartResponses, SessionStatusData, SessionStatusErrors, SessionStatusResponses, SessionStopData, SessionStopErrors, SessionStopResponses, VaultCreateData, VaultCreateErrors, VaultCreateResponses, VaultCredentialsAddData, VaultCredentialsAddErrors, VaultCredentialsAddResponses, VaultCredentialsDeleteData, VaultCredentialsDeleteErrors, VaultCredentialsDeleteResponses, VaultCredentialsGetData, VaultCredentialsGetErrors, VaultCredentialsGetResponses, VaultCredentialsListData, VaultCredentialsListErrors, VaultCredentialsListResponses, VaultCreditCardDeleteData, VaultCreditCardDeleteErrors, VaultCreditCardDeleteResponses, VaultCreditCardGetData, VaultCreditCardGetErrors, VaultCreditCardGetResponses, VaultCreditCardSetData, VaultCreditCardSetErrors, VaultCreditCardSetResponses, VaultDeleteData, VaultDeleteErrors, VaultDeleteResponses, VaultUpdateData, VaultUpdateErrors, VaultUpdateResponses } 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 * List Sessions\n */\nexport const listSessions = <ThrowOnError extends boolean = false>(options?: Options<ListSessionsData, ThrowOnError>) => (options?.client ?? client).get<ListSessionsResponses, ListSessionsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions',\n ...options\n});\n\n/**\n * Session Start\n */\nexport const sessionStart = <ThrowOnError extends boolean = false>(options: Options<SessionStartData, ThrowOnError>) => (options.client ?? client).post<SessionStartResponses, SessionStartErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/start',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Session Status\n */\nexport const sessionStatus = <ThrowOnError extends boolean = false>(options: Options<SessionStatusData, ThrowOnError>) => (options.client ?? client).get<SessionStatusResponses, SessionStatusErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}',\n ...options\n});\n\n/**\n * Get Session Script\n */\nexport const getSessionScript = <ThrowOnError extends boolean = false>(options: Options<GetSessionScriptData, ThrowOnError>) => (options.client ?? client).get<GetSessionScriptResponses, GetSessionScriptErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/workflow/code',\n ...options\n});\n\n/**\n * Session Stop\n */\nexport const sessionStop = <ThrowOnError extends boolean = false>(options: Options<SessionStopData, ThrowOnError>) => (options.client ?? client).delete<SessionStopResponses, SessionStopErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/stop',\n ...options\n});\n\n/**\n * Session Cookies Get\n */\nexport const sessionCookiesGet = <ThrowOnError extends boolean = false>(options: Options<SessionCookiesGetData, ThrowOnError>) => (options.client ?? client).get<SessionCookiesGetResponses, SessionCookiesGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/cookies',\n ...options\n});\n\n/**\n * Session Cookies Set\n */\nexport const sessionCookiesSet = <ThrowOnError extends boolean = false>(options: Options<SessionCookiesSetData, ThrowOnError>) => (options.client ?? client).post<SessionCookiesSetResponses, SessionCookiesSetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/cookies',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Session Debug Info\n */\nexport const sessionDebugInfo = <ThrowOnError extends boolean = false>(options: Options<SessionDebugInfoData, ThrowOnError>) => (options.client ?? client).get<SessionDebugInfoResponses, SessionDebugInfoErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/debug',\n ...options\n});\n\n/**\n * Session Offset\n */\nexport const sessionOffset = <ThrowOnError extends boolean = false>(options: Options<SessionOffsetData, ThrowOnError>) => (options.client ?? client).get<SessionOffsetResponses, SessionOffsetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/offset',\n ...options\n});\n\n/**\n * Page Observe\n */\nexport const pageObserve = <ThrowOnError extends boolean = false>(options: Options<PageObserveData, ThrowOnError>) => (options.client ?? client).post<PageObserveResponses, PageObserveErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/page/observe',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Page Screenshot\n */\nexport const pageScreenshot = <ThrowOnError extends boolean = false>(options: Options<PageScreenshotData, ThrowOnError>) => (options.client ?? client).post<PageScreenshotResponses, PageScreenshotErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/page/screenshot',\n ...options\n});\n\n/**\n * Page Execute\n */\nexport const pageExecute = <ThrowOnError extends boolean = false>(options: Options<PageExecuteData, ThrowOnError>) => (options.client ?? client).post<PageExecuteResponses, PageExecuteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/page/execute',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Page Scrape\n */\nexport const pageScrape = <ThrowOnError extends boolean = false>(options: Options<PageScrapeData, ThrowOnError>) => (options.client ?? client).post<PageScrapeResponses, PageScrapeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/page/scrape',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Session Network Logs\n */\nexport const sessionNetworkLogs = <ThrowOnError extends boolean = false>(options: Options<SessionNetworkLogsData, ThrowOnError>) => (options.client ?? client).get<SessionNetworkLogsResponses, SessionNetworkLogsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/network/logs',\n ...options\n});\n\n/**\n * Session Replay\n */\nexport const sessionReplay = <ThrowOnError extends boolean = false>(options: Options<SessionReplayData, ThrowOnError>) => (options.client ?? client).get<SessionReplayResponses, SessionReplayErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/sessions/{session_id}/replay',\n ...options\n});\n\n/**\n * Agent Start\n */\nexport const agentStart = <ThrowOnError extends boolean = false>(options: Options<AgentStartData, ThrowOnError>) => (options.client ?? client).post<AgentStartResponses, AgentStartErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/agents/start',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Agent Status\n */\nexport const agentStatus = <ThrowOnError extends boolean = false>(options: Options<AgentStatusData, ThrowOnError>) => (options.client ?? client).get<AgentStatusResponses, AgentStatusErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/agents/{agent_id}',\n ...options\n});\n\n/**\n * Get Script\n */\nexport const getScript = <ThrowOnError extends boolean = false>(options: Options<GetScriptData, ThrowOnError>) => (options.client ?? client).get<GetScriptResponses, GetScriptErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/agents/{agent_id}/workflow/code',\n ...options\n});\n\n/**\n * Agent Stop\n */\nexport const agentStop = <ThrowOnError extends boolean = false>(options: Options<AgentStopData, ThrowOnError>) => (options.client ?? client).delete<AgentStopResponses, AgentStopErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/agents/{agent_id}/stop',\n ...options\n});\n\n/**\n * List Agents\n */\nexport const listAgents = <ThrowOnError extends boolean = false>(options?: Options<ListAgentsData, ThrowOnError>) => (options?.client ?? client).get<ListAgentsResponses, ListAgentsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/agents',\n ...options\n});\n\n/**\n * List Functions\n */\nexport const listFunctions = <ThrowOnError extends boolean = false>(options?: Options<ListFunctionsData, ThrowOnError>) => (options?.client ?? client).get<ListFunctionsResponses, ListFunctionsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions',\n ...options\n});\n\n/**\n * Function Create\n */\nexport const functionCreate = <ThrowOnError extends boolean = false>(options: Options<FunctionCreateData, ThrowOnError>) => (options.client ?? client).post<FunctionCreateResponses, FunctionCreateErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * Function Delete\n */\nexport const functionDelete = <ThrowOnError extends boolean = false>(options: Options<FunctionDeleteData, ThrowOnError>) => (options.client ?? client).delete<FunctionDeleteResponses, FunctionDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}',\n ...options\n});\n\n/**\n * Function Download Url\n */\nexport const functionDownloadUrl = <ThrowOnError extends boolean = false>(options: Options<FunctionDownloadUrlData, ThrowOnError>) => (options.client ?? client).get<FunctionDownloadUrlResponses, FunctionDownloadUrlErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}',\n ...options\n});\n\n/**\n * Function Update\n */\nexport const functionUpdate = <ThrowOnError extends boolean = false>(options: Options<FunctionUpdateData, ThrowOnError>) => (options.client ?? client).post<FunctionUpdateResponses, FunctionUpdateErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * Function Fork\n */\nexport const functionFork = <ThrowOnError extends boolean = false>(options: Options<FunctionForkData, ThrowOnError>) => (options.client ?? client).post<FunctionForkResponses, FunctionForkErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/fork',\n ...options\n});\n\n/**\n * Function Schedule Delete\n */\nexport const functionScheduleDelete = <ThrowOnError extends boolean = false>(options: Options<FunctionScheduleDeleteData, ThrowOnError>) => (options.client ?? client).delete<FunctionScheduleDeleteResponses, FunctionScheduleDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/schedule',\n ...options\n});\n\n/**\n * Function Schedule Set\n */\nexport const functionScheduleSet = <ThrowOnError extends boolean = false>(options: Options<FunctionScheduleSetData, ThrowOnError>) => (options.client ?? client).post<FunctionScheduleSetResponses, FunctionScheduleSetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/schedule',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Function Run Start\n */\nexport const functionRunStart = <ThrowOnError extends boolean = false>(options: Options<FunctionRunStartData, ThrowOnError>) => (options.client ?? client).post<FunctionRunStartResponses, FunctionRunStartErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/runs/start',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Function Run Stop\n */\nexport const functionRunStop = <ThrowOnError extends boolean = false>(options: Options<FunctionRunStopData, ThrowOnError>) => (options.client ?? client).delete<FunctionRunStopResponses, FunctionRunStopErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/runs/{run_id}',\n ...options\n});\n\n/**\n * Function Run Get Metadata\n */\nexport const functionRunGetMetadata = <ThrowOnError extends boolean = false>(options: Options<FunctionRunGetMetadataData, ThrowOnError>) => (options.client ?? client).get<FunctionRunGetMetadataResponses, FunctionRunGetMetadataErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/runs/{run_id}',\n ...options\n});\n\n/**\n * Function Run Update Metadata\n */\nexport const functionRunUpdateMetadata = <ThrowOnError extends boolean = false>(options: Options<FunctionRunUpdateMetadataData, ThrowOnError>) => (options.client ?? client).patch<FunctionRunUpdateMetadataResponses, FunctionRunUpdateMetadataErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/runs/{run_id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List Function Runs By Function Id\n */\nexport const listFunctionRunsByFunctionId = <ThrowOnError extends boolean = false>(options: Options<ListFunctionRunsByFunctionIdData, ThrowOnError>) => (options.client ?? client).get<ListFunctionRunsByFunctionIdResponses, ListFunctionRunsByFunctionIdErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/functions/{function_id}/runs',\n ...options\n});\n\n/**\n * Vault Create\n */\nexport const vaultCreate = <ThrowOnError extends boolean = false>(options: Options<VaultCreateData, ThrowOnError>) => (options.client ?? client).post<VaultCreateResponses, VaultCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/create',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Vault Credentials Delete\n */\nexport const vaultCredentialsDelete = <ThrowOnError extends boolean = false>(options: Options<VaultCredentialsDeleteData, ThrowOnError>) => (options.client ?? client).delete<VaultCredentialsDeleteResponses, VaultCredentialsDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}/credentials',\n ...options\n});\n\n/**\n * Vault Credentials Get\n */\nexport const vaultCredentialsGet = <ThrowOnError extends boolean = false>(options: Options<VaultCredentialsGetData, ThrowOnError>) => (options.client ?? client).get<VaultCredentialsGetResponses, VaultCredentialsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}/credentials',\n ...options\n});\n\n/**\n * Vault Credentials Add\n */\nexport const vaultCredentialsAdd = <ThrowOnError extends boolean = false>(options: Options<VaultCredentialsAddData, ThrowOnError>) => (options.client ?? client).post<VaultCredentialsAddResponses, VaultCredentialsAddErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}/credentials',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Vault Delete\n */\nexport const vaultDelete = <ThrowOnError extends boolean = false>(options: Options<VaultDeleteData, ThrowOnError>) => (options.client ?? client).delete<VaultDeleteResponses, VaultDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}',\n ...options\n});\n\n/**\n * Vault Credentials List\n */\nexport const vaultCredentialsList = <ThrowOnError extends boolean = false>(options: Options<VaultCredentialsListData, ThrowOnError>) => (options.client ?? client).get<VaultCredentialsListResponses, VaultCredentialsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}',\n ...options\n});\n\n/**\n * Vault Update\n */\nexport const vaultUpdate = <ThrowOnError extends boolean = false>(options: Options<VaultUpdateData, ThrowOnError>) => (options.client ?? client).patch<VaultUpdateResponses, VaultUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Vault Credit Card Delete\n */\nexport const vaultCreditCardDelete = <ThrowOnError extends boolean = false>(options: Options<VaultCreditCardDeleteData, ThrowOnError>) => (options.client ?? client).delete<VaultCreditCardDeleteResponses, VaultCreditCardDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}/card',\n ...options\n});\n\n/**\n * Vault Credit Card Get\n */\nexport const vaultCreditCardGet = <ThrowOnError extends boolean = false>(options: Options<VaultCreditCardGetData, ThrowOnError>) => (options.client ?? client).get<VaultCreditCardGetResponses, VaultCreditCardGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}/card',\n ...options\n});\n\n/**\n * Vault Credit Card Set\n */\nexport const vaultCreditCardSet = <ThrowOnError extends boolean = false>(options: Options<VaultCreditCardSetData, ThrowOnError>) => (options.client ?? client).post<VaultCreditCardSetResponses, VaultCreditCardSetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults/{vault_id}/card',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List Vaults\n */\nexport const listVaults = <ThrowOnError extends boolean = false>(options?: Options<ListVaultsData, ThrowOnError>) => (options?.client ?? client).get<ListVaultsResponses, ListVaultsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/vaults',\n ...options\n});\n\n/**\n * Profile Create\n */\nexport const profileCreate = <ThrowOnError extends boolean = false>(options: Options<ProfileCreateData, ThrowOnError>) => (options.client ?? client).post<ProfileCreateResponses, ProfileCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/profiles/create',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Profile Delete\n */\nexport const profileDelete = <ThrowOnError extends boolean = false>(options: Options<ProfileDeleteData, ThrowOnError>) => (options.client ?? client).delete<ProfileDeleteResponses, ProfileDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/profiles/{profile_id}',\n ...options\n});\n\n/**\n * Profile Get\n */\nexport const profileGet = <ThrowOnError extends boolean = false>(options: Options<ProfileGetData, ThrowOnError>) => (options.client ?? client).get<ProfileGetResponses, ProfileGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/profiles/{profile_id}',\n ...options\n});\n\n/**\n * Profile List\n */\nexport const profileList = <ThrowOnError extends boolean = false>(options?: Options<ProfileListData, ThrowOnError>) => (options?.client ?? client).get<ProfileListResponses, ProfileListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/profiles',\n ...options\n});\n\n/**\n * Persona Create\n */\nexport const personaCreate = <ThrowOnError extends boolean = false>(options: Options<PersonaCreateData, ThrowOnError>) => (options.client ?? client).post<PersonaCreateResponses, PersonaCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/personas/create',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Persona Delete\n */\nexport const personaDelete = <ThrowOnError extends boolean = false>(options: Options<PersonaDeleteData, ThrowOnError>) => (options.client ?? client).delete<PersonaDeleteResponses, PersonaDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/personas/{persona_id}',\n ...options\n});\n\n/**\n * Persona Get\n */\nexport const personaGet = <ThrowOnError extends boolean = false>(options: Options<PersonaGetData, ThrowOnError>) => (options.client ?? client).get<PersonaGetResponses, PersonaGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/personas/{persona_id}',\n ...options\n});\n\n/**\n * Persona Emails List\n */\nexport const personaEmailsList = <ThrowOnError extends boolean = false>(options: Options<PersonaEmailsListData, ThrowOnError>) => (options.client ?? client).get<PersonaEmailsListResponses, PersonaEmailsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/personas/{persona_id}/emails',\n ...options\n});\n\n/**\n * List Personas\n */\nexport const listPersonas = <ThrowOnError extends boolean = false>(options?: Options<ListPersonasData, ThrowOnError>) => (options?.client ?? client).get<ListPersonasResponses, ListPersonasErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/personas',\n ...options\n});\n\n/**\n * Persona Sms List\n */\nexport const personaSmsList = <ThrowOnError extends boolean = false>(options: Options<PersonaSmsListData, ThrowOnError>) => (options.client ?? client).get<PersonaSmsListResponses, PersonaSmsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/personas/{persona_id}/sms',\n ...options\n});\n\n/**\n * Improve Prompt\n */\nexport const improvePrompt = <ThrowOnError extends boolean = false>(options: Options<ImprovePromptData, ThrowOnError>) => (options.client ?? client).post<ImprovePromptResponses, ImprovePromptErrors, ThrowOnError>({\n url: '/prompts/improve',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Nudge Prompt\n */\nexport const nudgePrompt = <ThrowOnError extends boolean = false>(options: Options<NudgePromptData, ThrowOnError>) => (options.client ?? client).post<NudgePromptResponses, NudgePromptErrors, ThrowOnError>({\n url: '/prompts/nudge',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Get Usage\n */\nexport const getUsage = <ThrowOnError extends boolean = false>(options?: Options<GetUsageData, ThrowOnError>) => (options?.client ?? client).get<GetUsageResponses, GetUsageErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/usage',\n ...options\n});\n\n/**\n * Get Usage Logs\n */\nexport const getUsageLogs = <ThrowOnError extends boolean = false>(options?: Options<GetUsageLogsData, ThrowOnError>) => (options?.client ?? client).get<GetUsageLogsResponses, GetUsageLogsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/usage/logs',\n ...options\n});\n\n/**\n * File Download\n */\nexport const fileDownload = <ThrowOnError extends boolean = false>(options: Options<FileDownloadData, ThrowOnError>) => (options.client ?? client).get<FileDownloadResponses, FileDownloadErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/storage/{session_id}/downloads/{filename}',\n ...options\n});\n\n/**\n * File Upload Downloaded File\n */\nexport const fileUploadDownloadedFile = <ThrowOnError extends boolean = false>(options: Options<FileUploadDownloadedFileData, ThrowOnError>) => (options.client ?? client).post<FileUploadDownloadedFileResponses, FileUploadDownloadedFileErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/storage/{session_id}/downloads/{filename}',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * File List Downloads\n */\nexport const fileListDownloads = <ThrowOnError extends boolean = false>(options: Options<FileListDownloadsData, ThrowOnError>) => (options.client ?? client).get<FileListDownloadsResponses, FileListDownloadsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/storage/{session_id}/downloads',\n ...options\n});\n\n/**\n * File Upload\n */\nexport const fileUpload = <ThrowOnError extends boolean = false>(options: Options<FileUploadData, ThrowOnError>) => (options.client ?? client).post<FileUploadResponses, FileUploadErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/storage/uploads/{filename}',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers\n }\n});\n\n/**\n * File List Uploads\n */\nexport const fileListUploads = <ThrowOnError extends boolean = false>(options?: Options<FileListUploadsData, ThrowOnError>) => (options?.client ?? client).get<FileListUploadsResponses, FileListUploadsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/storage/uploads',\n ...options\n});\n\n/**\n * Anything Start\n */\nexport const anythingStart = <ThrowOnError extends boolean = false>(options: Options<AnythingStartData, ThrowOnError>) => (options.client ?? client).post<AnythingStartResponses, AnythingStartErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/anything/start',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Health Check\n */\nexport const healthCheck = <ThrowOnError extends boolean = false>(options?: Options<HealthCheckData, ThrowOnError>) => (options?.client ?? client).get<HealthCheckResponses, unknown, ThrowOnError>({ url: '/health', ...options });\n\n/**\n * Scrape Webpage\n */\nexport const scrapeWebpage = <ThrowOnError extends boolean = false>(options: Options<ScrapeWebpageData, ThrowOnError>) => (options.client ?? client).post<ScrapeWebpageResponses, ScrapeWebpageErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/scrape',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Scrape From Html\n */\nexport const scrapeFromHtml = <ThrowOnError extends boolean = false>(options: Options<ScrapeFromHtmlData, ThrowOnError>) => (options.client ?? client).post<ScrapeFromHtmlResponses, ScrapeFromHtmlErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/scrape_from_html',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n","/**\n * Helper function to format error messages\n */\nfunction formatError(error: unknown): string {\n\tif (typeof error === 'object' && error !== null) {\n\t\t// If the error object has a message property, use it\n\t\tif ('message' in error && typeof error.message === 'string') {\n\t\t\treturn error.message;\n\t\t}\n\t\t// Otherwise, try to stringify the object\n\t\ttry {\n\t\t\treturn JSON.stringify(error, null, 2);\n\t\t} catch {\n\t\t\treturn String(error);\n\t\t}\n\t}\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\treturn String(error);\n}\n\nexport { formatError };\n","import { NotteClient } from '@/client';\nimport type {\n SessionResponse,\n ApiSessionStartRequest,\n Cookie,\n ExecutionResponse,\n ApiExecutionResponse,\n ActionSpace,\n GetCookiesResponse,\n Observation,\n ScrapeRequest,\n DataSpace,\n ScrapeSchemaResponse\n} from '@/lib/client/types.gen';\nimport {\n sessionStart,\n sessionStop,\n sessionStatus,\n sessionCookiesSet,\n sessionCookiesGet,\n pageExecute,\n pageObserve,\n sessionReplay,\n pageScrape\n} from '@/lib/client/sdk.gen';\nimport { formatError } from '@/utils';\nimport { z } from 'zod';\n\n\n/**\n * Post-process scrape response based on options\n */\nexport function processScrapeResponse(scrapeResponse: any, options: any): string | any {\n // Post-processing logic based on options\n if (options.only_images && scrapeResponse.images) {\n return scrapeResponse.images;\n }\n\n // Check if structured data is required\n if (requiresSchema(options)) {\n const structured = scrapeResponse.structured;\n if (!structured) {\n throw new Error('Failed to scrape structured data. This should not happen. Please report this issue.');\n }\n\n // If response_format is a Zod schema, try to validate structured.data\n if (options.response_format && typeof options.response_format.parse === 'function') {\n if (structured.data) {\n try {\n const validatedData = options.response_format.parse(structured.data);\n return validatedData;\n } catch (error) {\n throw new Error(`Schema validation failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n // If no data available, return the structured response as-is\n return structured;\n }\n\n // For JSON schemas, return the structured data as-is\n return structured;\n }\n\n // If we have a Zod schema but no structured data, try to parse the raw data\n if (options.response_format && typeof options.response_format.parse === 'function') {\n try {\n // Try to parse the entire response data\n const validatedData = options.response_format.parse(scrapeResponse);\n return validatedData;\n } catch (error) {\n throw new Error(`Schema validation failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Return markdown by default\n return scrapeResponse.markdown;\n}\n\n/**\n * Check if the scrape request requires schema validation\n */\nfunction requiresSchema(options: any): boolean {\n return !!(options.response_format || options.instructions);\n}\n\n\nexport class Session {\n private client: NotteClient;\n private options: ApiSessionStartRequest;\n private sessionId: string | null = null;\n private isActive = false;\n private response: SessionResponse | null = null;\n\n constructor(client: NotteClient, options: ApiSessionStartRequest = {}) {\n this.client = client;\n this.options = options;\n }\n\n /**\n * Start the session - creates a new session on the server\n */\n async start(): Promise<void> {\n if (this.isActive) {\n throw new Error('Session is already active');\n }\n\n try {\n // Use the generated client to create a session\n const response = await sessionStart({\n client: this.client.getClient(),\n body: this.options\n });\n\n if (response?.error) {\n throw new Error(`Failed to create session: ${formatError(response.error)}`);\n }\n\n const sessionData = response.data as SessionResponse;\n this.sessionId = sessionData.session_id;\n this.isActive = true;\n this.response = sessionData;\n } catch (error) {\n throw new Error(`Failed to start session: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * Stop the session - terminates the session on the server\n */\n async stop(): Promise<void> {\n if (!this.isActive || !this.sessionId) {\n return;\n }\n const response = await sessionStop({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to stop session: ${formatError(response.error)}`);\n }\n this.response = response.data as SessionResponse;\n this.isActive = false;\n this.sessionId = null;\n }\n\n /**\n * Get session status\n */\n async status(): Promise<SessionResponse> {\n if (!this.sessionId) {\n throw new Error('Session not started');\n }\n\n const response = await sessionStatus({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to get session status: ${formatError(response.error)}`);\n }\n\n return response.data as SessionResponse;\n }\n\n /**\n * Get session ID\n */\n getId(): string | null {\n return this.sessionId;\n }\n\n /**\n * Check if session is active\n */\n isSessionActive(): boolean {\n return this.isActive;\n }\n\n /**\n * Get the last response from session operations\n */\n getResponse(): SessionResponse | null {\n return this.response;\n }\n\n /**\n * Set cookies for the session\n */\n async setCookies(cookies: Cookie[]): Promise<ExecutionResponse> {\n if (!this.sessionId) {\n throw new Error('Session not started');\n }\n\n const response = await sessionCookiesSet({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n },\n body: {\n cookies\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to set cookies: ${formatError(response.error)}`);\n }\n\n return response.data as ExecutionResponse;\n }\n\n /**\n * Set cookies from a file\n */\n async setCookiesFromFile(cookieFile: string): Promise<ExecutionResponse> {\n const fs = await import('fs/promises');\n const cookieData = await fs.readFile(cookieFile, 'utf-8');\n const cookies = JSON.parse(cookieData) as Cookie[];\n return this.setCookies(cookies);\n }\n\n /**\n * Get cookies from the session\n */\n async getCookies(): Promise<Cookie[]> {\n if (!this.sessionId) {\n throw new Error('Session not started');\n }\n\n const response = await sessionCookiesGet({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to get cookies: ${formatError(response.error)}`);\n }\n\n return response.data.cookies;\n }\n\n /**\n * Execute an action on the page\n */\n async execute(action: any, raiseOnFailure: boolean = true): Promise<ApiExecutionResponse> {\n if (!this.sessionId) {\n throw new Error('Session not started');\n }\n\n const response = await pageExecute({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n },\n body: action\n });\n\n if (response?.error) {\n throw new Error(`Failed to execute action: ${formatError(response.error)}`);\n }\n\n const result = response.data as ApiExecutionResponse;\n\n if (raiseOnFailure && !result.success) {\n throw new Error(`Action execution failed: ${result.message}`);\n }\n\n return result;\n }\n\n /**\n * Observe the current page state\n */\n async observe(perceptionType: 'fast' | 'deep' = 'fast'): Promise<Observation> {\n if (!this.sessionId) {\n throw new Error('Session not started');\n }\n\n const response = await pageObserve({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n },\n body: {\n perception_type: perceptionType\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to observe page: ${formatError(response.error)}`);\n }\n\n return response.data;\n }\n\n /**\n * Get session replay data\n */\n async replay(): Promise<any> {\n if (!this.sessionId) {\n throw new Error('Session not started');\n }\n\n const response = await sessionReplay({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to get session replay: ${formatError(response.error)}`);\n }\n\n return response.data;\n }\n\n /**\n * Scrape the current page\n */\n async scrape(options?: ScrapeRequest): Promise<string | any>;\n async scrape<T>(options: ScrapeRequest & { response_format: z.ZodSchema<T>; json_schema?: any }): Promise<T>;\n async scrape<T = any>(options: ScrapeRequest & { response_format?: z.ZodSchema<T> | any; json_schema?: any } = {}): Promise<string | T | any> {\n if (!this.sessionId) {\n throw new Error('Session not started');\n }\n\n // If response_format is a Zod schema, we need to convert it to JSON schema for the API\n const apiOptions = { ...options };\n if (options.response_format && typeof options.response_format.parse === 'function') {\n // Use provided JSON schema or convert Zod schema to JSON schema for API compatibility\n if (options.json_schema) {\n apiOptions.response_format = options.json_schema;\n } else {\n apiOptions.response_format = z.toJSONSchema(options.response_format);\n }\n\n // Add more specific instructions to help the API understand what to extract\n if (!apiOptions.instructions) {\n // Try to infer what kind of data to extract from the schema structure\n const schemaStr = JSON.stringify(apiOptions.response_format);\n if (schemaStr.includes('plans') || schemaStr.includes('plan')) {\n apiOptions.instructions = \"Extract pricing plans from the page\";\n } else if (schemaStr.includes('products') || schemaStr.includes('product')) {\n apiOptions.instructions = \"Extract product information from the page\";\n } else if (schemaStr.includes('articles') || schemaStr.includes('article')) {\n apiOptions.instructions = \"Extract article information from the page\";\n } else {\n apiOptions.instructions = \"Extract structured data from the page based on the provided schema\";\n }\n }\n }\n\n const response = await pageScrape({\n client: this.client.getClient(),\n path: {\n session_id: this.sessionId\n },\n body: apiOptions\n });\n\n if (response?.error) {\n throw new Error(`Failed to scrape page: ${JSON.stringify(response.error)}`);\n }\n return processScrapeResponse(response.data, options);\n }\n\n /**\n * Context manager pattern - automatically start and stop session\n * Usage: await session.use(async (session) => { ... })\n */\n async use<T>(callback: (session: Session) => Promise<T>): Promise<T> {\n await this.start();\n try {\n return await callback(this);\n } finally {\n await this.stop();\n }\n }\n\n /**\n * Async iterator pattern for session lifecycle management\n * Usage: for await (const session of sessionInstance) { ... }\n */\n async *[Symbol.asyncIterator]() {\n await this.start();\n try {\n yield this;\n } finally {\n await this.stop();\n }\n }\n}\n","import WebSocket from 'ws';\nimport { NotteClient } from '@/client';\nimport { Session } from '@/session';\nimport type {\n AgentResponse,\n LegacyAgentStatusResponse,\n ApiAgentStartRequest,\n} from '@/lib/client/types.gen';\nimport {\n agentStart,\n agentStatus,\n agentStop\n} from '@/lib/client/sdk.gen';\nimport { formatError } from '@/utils';\nimport { NotteVault } from './vaults';\nimport { NottePersona } from './personas';\n\n// Overloads for constructor - mirrors Python overloads\nexport interface AgentConstructorWithSession extends Omit<ApiAgentStartRequest, 'session_id' | 'vault_id' | 'persona_id' | 'task' | 'response_format' | 'url'> {\n session: Session;\n vault?: NotteVault;\n persona?: NottePersona;\n vault_id?: string;\n persona_id?: string;\n agent_id?: never;\n}\n\nexport interface AgentConstructorWithAgentId {\n agent_id: string;\n session?: never;\n vault?: never;\n persona?: never;\n}\n\nexport type AgentConstructor = AgentConstructorWithSession | AgentConstructorWithAgentId | ApiAgentStartRequest;\n\nexport type AgentUpdateHandler = (update: {\n type: 'status' | 'step' | 'completion';\n data: any;\n timestamp: string;\n}) => void;\n\n/**\n * Validate persona option and return persona_id if valid\n */\nfunction validatePersonaOption(persona?: NottePersona, persona_id?: string): string | undefined {\n if (persona) {\n // If persona object is provided, validate it has a valid personaId\n try {\n const personaId = persona.personaId;\n if (!personaId || personaId.length === 0) {\n throw new Error('Persona ID cannot be empty');\n }\n return personaId;\n } catch (error) {\n throw new Error(`Invalid persona object: ${error instanceof Error ? error.message : String(error)}`);\n }\n } else if (persona_id) {\n // If persona_id string is provided, validate it's not empty\n if (persona_id.length === 0) {\n throw new Error('Persona ID cannot be empty');\n }\n return persona_id;\n }\n return undefined;\n}\n\n/**\n * Validate vault option and return vault_id if valid\n */\nfunction validateVaultOption(vault?: NotteVault, vault_id?: string): string | undefined {\n if (vault) {\n // If vault object is provided, validate it has a valid vaultId\n try {\n const vaultId = vault.vaultId;\n if (!vaultId || vaultId.length === 0) {\n throw new Error('Vault ID cannot be empty');\n }\n return vaultId;\n } catch (error) {\n throw new Error(`Invalid vault object: ${error instanceof Error ? error.message : String(error)}`);\n }\n } else if (vault_id) {\n // If vault_id string is provided, validate it's not empty\n if (vault_id.length === 0) {\n throw new Error('Vault ID cannot be empty');\n }\n return vault_id;\n }\n return undefined;\n}\n\n/**\n * Validate session option and return session_id if valid\n */\nfunction validateSessionOption(session: Session): string {\n const sessionId = session.getId();\n if (!sessionId || sessionId.length === 0) {\n throw new Error('Session ID cannot be empty');\n }\n return sessionId;\n}\n\n/**\n * Validate agent_id option\n */\nfunction validateAgentIdOption(agent_id: string): void {\n if (agent_id.length === 0) {\n throw new Error('Agent ID cannot be empty');\n }\n}\n\n// Default logger function that mimics Python's live_log_step behavior\nconst defaultStepLogger = (stepData: any, stepCounter: number, agentId: string) => {\n console.log(`✨ Step ${stepCounter} (agent: ${agentId})`);\n\n // If the step data has the expected structure, format it nicely\n if (stepData && typeof stepData === 'object') {\n if (stepData.state) {\n const state = stepData.state;\n\n // Format similar to Python render_agent_status\n if (state.page_summary) {\n console.log(`📝 Current page: ${state.page_summary}`);\n }\n\n if (state.previous_goal_eval) {\n const statusEmoji = state.previous_goal_status === 'success' ? '✅' :\n state.previous_goal_status === 'failure' ? '❌' : '❓';\n console.log(`🔬 Previous goal: ${statusEmoji} ${state.previous_goal_eval}`);\n }\n\n if (state.memory) {\n console.log(`🧠 Memory: ${state.memory}`);\n }\n\n if (state.next_goal) {\n console.log(`🎯 Next goal: ${state.next_goal}`);\n }\n\n if (state.relevant_interactions && state.relevant_interactions.length > 0) {\n console.log(`🆔 Relevant ids:`);\n state.relevant_interactions.forEach((interaction: any) => {\n console.log(` ▶ ${interaction.id}: ${interaction.reason}`);\n });\n }\n }\n\n if (stepData.action) {\n const action = stepData.action;\n let actionStr = `⚡ Taking action:\\n ▶ ${action.name || action.type || 'Unknown action'}`;\n\n // Add parameter info if available\n if (action.id) {\n actionStr += ` with id ${action.id}`;\n } else if (action.param && action.param.name && action[action.param.name]) {\n actionStr += ` with ${action.param.name}=${action[action.param.name]}`;\n }\n\n console.log(actionStr);\n }\n } else {\n // Fallback: just log the raw data if structure is unexpected\n console.log(stepData);\n }\n\n console.log(''); // Empty line for readability\n};\n\n// Types for run method parameters - mirrors AgentRunRequestDict\nexport interface AgentRunRequest {\n task: string;\n url?: string | null;\n response_format?: unknown | null;\n session_offset?: number | null;\n reasoning_model?: string;\n use_vision?: boolean;\n max_steps?: number;\n vault_id?: string | null;\n persona_id?: string | null;\n notifier_config?: { [key: string]: unknown } | null;\n updateHandler?: AgentUpdateHandler | null;\n}\n\nexport class Agent {\n private client: NotteClient;\n private request?: Omit<ApiAgentStartRequest, 'task'>;\n private response: AgentResponse | null = null;\n private websocket: WebSocket | null = null;\n private existingAgent: boolean;\n\n constructor(client: NotteClient, options: AgentConstructor) {\n this.client = client;\n\n // Handle the overloaded constructor patterns from Python\n if ('agent_id' in options && options.agent_id) {\n // Constructor for existing agent (agent_id provided)\n if (options.session) {\n throw new Error('Either session (for running a new agent) or agent_id (for accessing an existing agent) have to be provided, not both');\n }\n\n // Validate agent_id\n validateAgentIdOption(options.agent_id);\n\n this.existingAgent = true;\n // Store the agent_id for later use - we'll fetch the response when needed\n this.response = { agent_id: options.agent_id } as AgentResponse;\n\n } else if ('session' in options && options.session) {\n // Constructor for new agent (session provided)\n if (options.agent_id) {\n throw new Error('Either session (for running a new agent) or agent_id (for accessing an existing agent) have to be provided, not both');\n }\n this.existingAgent = false;\n\n // Extract session and create request - mirrors Python data[\"session_id\"] = session.session_id\n const { session, vault, persona, ...requestData } = options;\n\n // Validate all options using helper functions\n const sessionId = validateSessionOption(session);\n const vaultId = validateVaultOption(vault, options.vault_id);\n const personaId = validatePersonaOption(persona, options.persona_id);\n\n this.request = {\n session_id: sessionId,\n vault_id: vaultId,\n persona_id: personaId,\n ...requestData\n };\n\n } else {\n throw new Error('Either session (for running a new agent) or agent_id (for accessing an existing agent) have to be provided');\n }\n }\n\n /**\n * Start an agent task (non-blocking) - mirrors Python start method\n */\n async start(data: AgentRunRequest): Promise<AgentResponse> {\n if (this.existingAgent) {\n throw new Error('You cannot call start() on an agent instantiated from agent id');\n }\n\n if (!this.request) {\n throw new Error('Agent not properly initialized with session');\n }\n\n try {\n const requestBody = {\n ...this.request,\n ...data\n };\n\n const response = await agentStart({\n client: this.client.getClient(),\n body: requestBody\n });\n\n if (response?.error) {\n throw new Error(`Failed to start agent: ${formatError(response.error)}`);\n }\n\n this.response = response.data as AgentResponse;\n return this.response;\n } catch (error) {\n throw new Error(`Failed to start agent: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * Run agent task (blocking) - mirrors Python run method behavior\n * This is the main method that mirrors the Python SDK's run method\n */\n async run(data: AgentRunRequest): Promise<LegacyAgentStatusResponse> {\n if (this.existingAgent) {\n throw new Error('You cannot call run() on an agent instantiated from agent id');\n }\n\n // Start the agent first\n this.response = await this.start(data);\n console.log(`[Agent] ${this.agentId} started`);\n\n // Then watch logs and wait for completion - mirrors Python arun method\n // Pass the updateHandler from the request to the watchLogsAndWait method\n return await this.watchLogsAndWait(true, data.updateHandler || null);\n }\n\n /**\n * Watch logs and wait for completion - mirrors Python watch_logs_and_wait\n */\n private async watchLogsAndWait(log: boolean = true, updateHandler: AgentUpdateHandler | null = null): Promise<LegacyAgentStatusResponse> {\n if (this.existingAgent) {\n throw new Error('You cannot call watchLogsAndWait() on an agent instantiated from agent id');\n }\n\n if (!this.response) {\n throw new Error('Agent not started');\n }\n\n try {\n const result = await this.watchLogs(log, updateHandler);\n if (result) {\n return result;\n }\n\n // Fallback - wait and check status (mirrors Python fallback logic)\n await new Promise(resolve => setTimeout(resolve, 3000));\n return await this.status();\n\n } catch (error) {\n console.error(`[Agent] ${this.agentId} failed to complete in time. Try running agent.status() after a few seconds.`);\n return await this.status();\n }\n }\n\n /**\n * Watch logs via WebSocket - mirrors Python watch_logs method\n */\n private async watchLogs(log: boolean = true, updateHandler: AgentUpdateHandler | null = null): Promise<LegacyAgentStatusResponse | null> {\n if (this.existingAgent) {\n throw new Error('You cannot call watchLogs() on an agent instantiated from agent id');\n }\n\n if (!this.response) {\n throw new Error('Agent not started');\n }\n\n const config = this.client.getConfig();\n const token = config.apiKey;\n const agentId = this.response.agent_id;\n const sessionId = this.response.session_id;\n\n // Follow Python pattern: /agents/{agent_id}/debug/logs?token={token}&session_id={session_id}\n const wsUrl = config.baseUrl\n ?.replace('https://', 'wss://')\n .replace('http://', 'ws://') +\n `/agents/${agentId}/debug/logs?token=${token}&session_id=${sessionId}`;\n\n return new Promise((resolve, reject) => {\n this.websocket = new WebSocket(wsUrl);\n let counter = 0;\n\n this.websocket.on('open', () => {\n // Connection established\n });\n\n this.websocket.on('error', (error) => {\n console.error(`Connection error: ${agentId} ${error.message}`);\n resolve(null);\n });\n\n this.websocket.on('message', (data) => {\n try {\n const message = data.toString();\n\n // Try to parse as JSON first\n let parsed: any;\n try {\n parsed = JSON.parse(message);\n } catch {\n // Not valid JSON, skip\n return;\n }\n\n // Check for termination: the final message is a full LegacyAgentStatusResponse\n // which has agent_id, status, task, and session_id fields.\n // Step messages have a \"type\" field (e.g. \"agent_step_start\", \"observation\")\n // and do NOT have \"task\" or \"status\" at the top level.\n if (parsed.agent_id === agentId && parsed.task !== undefined && parsed.status !== undefined) {\n const response = parsed as LegacyAgentStatusResponse;\n\n // Call updateHandler for completion if provided\n if (updateHandler) {\n updateHandler({\n type: 'completion',\n data: response,\n timestamp: new Date().toISOString()\n });\n } else if (!response.success) {\n console.error(response.answer);\n }\n\n this.disconnectWebSocket();\n resolve(response);\n return;\n }\n\n // Regular step update\n if (log) {\n counter++;\n\n // Use custom updateHandler if provided, otherwise use default logger\n if (updateHandler) {\n updateHandler({\n type: 'step',\n data: parsed,\n timestamp: new Date().toISOString()\n });\n } else {\n // Use the default logger function which mimics Python's live_log_state\n defaultStepLogger(parsed, counter, agentId);\n }\n }\n\n } catch (error) {\n console.error(`Error processing WebSocket message: ${error}`);\n }\n });\n\n this.websocket.on('close', () => {\n this.websocket = null;\n resolve(null);\n });\n\n // Set a timeout to prevent hanging forever\n setTimeout(() => {\n if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {\n this.disconnectWebSocket();\n resolve(null);\n }\n }, 300000); // 5 minutes timeout\n });\n }\n\n /**\n * Get agent status - mirrors Python status method\n */\n async status(): Promise<LegacyAgentStatusResponse> {\n if (!this.response) {\n throw new Error('Agent not started or not accessible');\n }\n\n const response = await agentStatus({\n client: this.client.getClient(),\n path: {\n agent_id: this.response.agent_id\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to get agent status: ${formatError(response.error)}`);\n }\n\n return response.data as LegacyAgentStatusResponse;\n }\n\n /**\n * Stop the agent - mirrors Python stop method\n */\n async stop(): Promise<AgentResponse> {\n if (this.existingAgent) {\n throw new Error('You cannot call stop() on an agent instantiated from agent id');\n }\n\n if (!this.response) {\n throw new Error('Agent not started');\n }\n\n try {\n console.log(`[Agent] ${this.response.agent_id} is stopping`);\n\n const response = await agentStop({\n client: this.client.getClient(),\n path: {\n agent_id: this.response.agent_id\n },\n query: { session_id: this.response.session_id }\n });\n\n if (response?.error) {\n throw new Error(`Failed to stop agent: ${formatError(response.error)}`);\n }\n\n console.log(`[Agent] ${this.response.agent_id} stopped`);\n return response.data as AgentResponse;\n\n } catch (error) {\n console.warn(`Failed to stop agent: ${error instanceof Error ? error.message : String(error)}`);\n throw error;\n } finally {\n this.disconnectWebSocket();\n }\n }\n\n /**\n * Disconnect WebSocket\n */\n private disconnectWebSocket(): void {\n if (this.websocket) {\n this.websocket.close();\n this.websocket = null;\n }\n }\n\n /**\n * Get agent ID - mirrors Python agent_id property\n */\n get agentId(): string {\n if (!this.response) {\n throw new Error('You need to run the agent first to get the agent id');\n }\n return this.response.agent_id;\n }\n\n /**\n * Get session ID - mirrors Python session_id property\n */\n get sessionId(): string {\n if (!this.response) {\n throw new Error('You need to run the agent first to get the session id');\n }\n return this.response.session_id;\n }\n\n /**\n * Check if agent is running - convenience method\n */\n isRunning(): boolean {\n return this.response !== null;\n }\n}\n","import { NotteClient } from '@/client';\nimport type {\n Vault,\n VaultCreateRequest,\n GetCredentialsResponse,\n DeleteCredentialsResponse,\n GetCreditCardResponse,\n DeleteVaultResponse,\n ListCredentialsResponse,\n CredentialsDictInput,\n CreditCardDictInput,\n Credential\n} from '@/lib/client/types.gen';\nimport {\n vaultCreate,\n vaultCredentialsAdd,\n vaultCredentialsGet,\n vaultCredentialsDelete,\n vaultDelete,\n vaultCredentialsList,\n vaultCreditCardSet,\n vaultCreditCardGet,\n vaultCreditCardDelete\n} from '@/lib/client/sdk.gen';\nimport { formatError } from '@/utils';\n\n// Constructor overloads for NotteVault - mirrors Python overloads\nexport interface VaultConstructorWithId {\n vault_id: string;\n}\n\nexport interface VaultConstructorCreate extends Omit<VaultCreateRequest, never> {\n vault_id?: never;\n}\n\nexport type VaultConstructor = VaultConstructorWithId | VaultConstructorCreate;\n\n/**\n * Vault that fetches credentials stored using the SDK - mirrors Python NotteVault class\n */\nexport class NotteVault {\n private client: NotteClient;\n private _vaultId: string | null = null;\n private initPromise: Promise<string> | null = null;\n\n constructor(client: NotteClient, options: VaultConstructor = {}) {\n this.client = client;\n\n if (options && 'vault_id' in options && options.vault_id) {\n // Constructor for existing vault\n this.initPromise = this.initExistingVault(options.vault_id);\n } else {\n // Constructor for new vault - create it\n this.initPromise = this.initNewVault((options || {}) as VaultConstructorCreate);\n }\n }\n\n private async initExistingVault(vaultId: string): Promise<string> {\n // Verify vault exists by trying to list its credentials\n await this.verifyVaultExists(vaultId);\n this._vaultId = vaultId;\n return this._vaultId;\n }\n\n private async initNewVault(createData: VaultCreateRequest): Promise<string> {\n const response = await vaultCreate({\n client: this.client.getClient(),\n body: createData\n });\n\n if (response?.error) {\n throw new Error(`Failed to create vault: ${formatError(response.error)}`);\n }\n\n const vault = response.data as Vault;\n console.warn(`[Vault] ${vault.vault_id} created since no vault id was provided. Please store this to retrieve it later.`);\n this._vaultId = vault.vault_id;\n return this._vaultId;\n }\n\n private async verifyVaultExists(vaultId: string): Promise<void> {\n if (vaultId.length === 0) {\n throw new Error('Vault ID cannot be empty');\n }\n\n // Verify vault exists by trying to list its credentials\n const response = await vaultCredentialsList({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to verify vault exists: ${formatError(response.error)}`);\n }\n }\n\n private async ensureInitialized(): Promise<string> {\n if (this._vaultId) {\n return this._vaultId;\n }\n if (this.initPromise) {\n return await this.initPromise;\n }\n throw new Error('Vault not initialized');\n }\n\n get vaultId(): string {\n if (!this._vaultId) {\n throw new Error('Vault not initialized. Use await on vault operations first.');\n }\n return this._vaultId;\n }\n\n /**\n * Start the vault - no-op for compatibility with Python interface\n */\n start(): void {\n // No-op - vault is ready to use immediately\n }\n\n /**\n * Stop the vault - deletes it and all credentials\n */\n async stop(): Promise<void> {\n const vaultId = await this.ensureInitialized();\n console.log(`[Vault] ${vaultId} deleted. All credentials have been deleted.`);\n await this.delete();\n }\n\n /**\n * Add or update credentials for a URL\n */\n async addCredentials(url: string, credentials: CredentialsDictInput): Promise<void> {\n // Validate MFA secret if provided\n if (credentials.mfa_secret) {\n this.validateMfaSecret(credentials.mfa_secret);\n }\n\n const vaultId = await this.ensureInitialized();\n const response = await vaultCredentialsAdd({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n },\n body: { url, credentials }\n });\n\n if (response?.error) {\n throw new Error(`Failed to add credentials: ${formatError(response.error)}`);\n }\n }\n\n /**\n * Get credentials for a URL\n */\n async getCredentials(url: string): Promise<CredentialsDictInput | null> {\n try {\n const vaultId = await this.ensureInitialized();\n const response = await vaultCredentialsGet({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n },\n query: { url }\n });\n\n if (response?.error) {\n return null;\n }\n\n const credentialsResponse = response.data as GetCredentialsResponse;\n return credentialsResponse.credentials;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Delete credentials for a URL\n */\n async deleteCredentials(url: string): Promise<void> {\n const vaultId = await this.ensureInitialized();\n const response = await vaultCredentialsDelete({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n },\n query: { url }\n });\n\n if (response?.error) {\n throw new Error(`Failed to delete credentials: ${formatError(response.error)}`);\n }\n }\n\n /**\n * Set credit card information\n */\n async setCreditCard(creditCard: CreditCardDictInput): Promise<void> {\n const vaultId = await this.ensureInitialized();\n const response = await vaultCreditCardSet({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n },\n body: { credit_card: creditCard }\n });\n\n if (response?.error) {\n throw new Error(`Failed to set credit card: ${formatError(response.error)}`);\n }\n }\n\n /**\n * Get credit card information\n */\n async getCreditCard(): Promise<CreditCardDictInput> {\n const vaultId = await this.ensureInitialized();\n const response = await vaultCreditCardGet({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to get credit card: ${formatError(response.error)}`);\n }\n\n const creditCardResponse = response.data as GetCreditCardResponse;\n return creditCardResponse.credit_card;\n }\n\n /**\n * List all credentials in the vault\n */\n async listCredentials(): Promise<Credential[]> {\n const vaultId = await this.ensureInitialized();\n const response = await vaultCredentialsList({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to list credentials: ${formatError(response.error)}`);\n }\n\n const credentialsResponse = response.data as ListCredentialsResponse;\n return credentialsResponse.credentials;\n }\n\n /**\n * Delete credit card information\n */\n async deleteCreditCard(): Promise<void> {\n const vaultId = await this.ensureInitialized();\n const response = await vaultCreditCardDelete({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to delete credit card: ${formatError(response.error)}`);\n }\n }\n\n /**\n * Delete the entire vault\n */\n async delete(): Promise<void> {\n const vaultId = await this.ensureInitialized();\n const response = await vaultDelete({\n client: this.client.getClient(),\n path: {\n vault_id: vaultId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to delete vault: ${formatError(response.error)}`);\n }\n }\n\n /**\n * Add credentials from environment variables\n * Mirrors Python's add_credentials_from_env method\n */\n async addCredentialsFromEnv(url: string): Promise<void> {\n // Extract domain from URL for environment variable naming\n const domain = this.extractDomainFromUrl(url);\n const envPrefix = domain.replace(/[^a-zA-Z0-9]/g, '_').toUpperCase();\n\n // Look for common credential environment variables\n const email = process.env[`${envPrefix}_EMAIL`] || process.env[`${envPrefix}_USERNAME`];\n const password = process.env[`${envPrefix}_PASSWORD`];\n\n if (!email || !password) {\n throw new Error(`Environment variables ${envPrefix}_EMAIL/USERNAME and ${envPrefix}_PASSWORD are required`);\n }\n\n const credentials: CredentialsDictInput = { email, password };\n\n // Add MFA secret if available\n const mfaSecret = process.env[`${envPrefix}_MFA_SECRET`];\n if (mfaSecret) {\n this.validateMfaSecret(mfaSecret);\n credentials.mfa_secret = mfaSecret;\n }\n\n await this.addCredentials(url, credentials);\n }\n\n /**\n * Extract domain from URL for environment variable naming\n */\n private extractDomainFromUrl(url: string): string {\n try {\n const urlObj = new URL(url);\n return urlObj.hostname.replace(/^www\\./, '');\n } catch {\n // If URL parsing fails, try to extract domain manually\n const match = url.match(/(?:https?:\\/\\/)?(?:www\\.)?([^\\/]+)/);\n return match ? match[1] : url;\n }\n }\n\n /**\n * Validate MFA secret format\n * Mirrors Python's MFA secret validation\n */\n private validateMfaSecret(mfaSecret: string): void {\n // MFA secret should be a valid base32 string (typically 16-32 characters)\n // and should not be all numbers (which would be invalid)\n if (/^\\d+$/.test(mfaSecret)) {\n throw new Error('MFA secret cannot be all numbers. Please provide a valid base32 secret.');\n }\n\n if (mfaSecret.length < 16) {\n throw new Error('MFA secret must be at least 16 characters long');\n }\n }\n\n /**\n * Generate a secure random password\n * Mirrors Python's generate_password method\n */\n generatePassword(length: number = 20, includeSpecialChars: boolean = true): string {\n // Validate minimum length\n const minRequiredLength = includeSpecialChars ? 4 : 3;\n if (length < minRequiredLength) {\n throw new Error(`Password length must be at least ${minRequiredLength} characters`);\n }\n\n // Character sets\n const lowercase = 'abcdefghijklmnopqrstuvwxyz';\n const uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const digits = '0123456789';\n const specialChars = '!@#$%^&*()_+-=[]|;:,.<>?';\n\n // Generate initial random password using crypto\n const crypto = globalThis.crypto || require('crypto');\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n\n // Use appropriate character set based on includeSpecialChars\n const allowedChars = includeSpecialChars\n ? 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_' // pragma: allowlist secret\n : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let password = Array.from(array, byte => allowedChars[byte % allowedChars.length]).join('').slice(0, length);\n const passwordArray = password.split('');\n\n // Ensure we have required character types by replacing some characters\n // This maintains randomness while guaranteeing complexity requirements\n\n // If special chars are not allowed, remove any that might have been included first\n if (!includeSpecialChars) {\n for (let i = 0; i < passwordArray.length; i++) {\n if (specialChars.includes(passwordArray[i])) {\n // Replace with a random alphanumeric character\n const alphanumeric = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n passwordArray[i] = alphanumeric[Math.floor(Math.random() * alphanumeric.length)];\n }\n }\n }\n\n // Guarantee all required character types are present\n // We'll verify and fix in a loop until all requirements are met\n // This ensures that even if one fix overwrites another requirement, we'll fix it in the next iteration\n let maxIterations = 10; // Prevent infinite loops\n while (maxIterations-- > 0) {\n let allRequirementsMet = true;\n\n // Check and fix lowercase - replace any character that's not already lowercase\n if (!passwordArray.some(c => lowercase.includes(c))) {\n const index = Math.floor(Math.random() * passwordArray.length);\n passwordArray[index] = lowercase[Math.floor(Math.random() * lowercase.length)];\n allRequirementsMet = false;\n }\n\n // Check and fix uppercase - replace any character that's not already uppercase\n if (!passwordArray.some(c => uppercase.includes(c))) {\n const index = Math.floor(Math.random() * passwordArray.length);\n passwordArray[index] = uppercase[Math.floor(Math.random() * uppercase.length)];\n allRequirementsMet = false;\n }\n\n // Check and fix digits - replace any character that's not already a digit\n if (!passwordArray.some(c => digits.includes(c))) {\n const index = Math.floor(Math.random() * passwordArray.length);\n passwordArray[index] = digits[Math.floor(Math.random() * digits.length)];\n allRequirementsMet = false;\n }\n\n // Check and fix special chars if required - replace any character that's not already a special char\n if (includeSpecialChars && !passwordArray.some(c => specialChars.includes(c))) {\n const index = Math.floor(Math.random() * passwordArray.length);\n passwordArray[index] = specialChars[Math.floor(Math.random() * specialChars.length)];\n allRequirementsMet = false;\n }\n\n // If all requirements are met, we're done\n if (allRequirementsMet) {\n break;\n }\n }\n\n return passwordArray.join('');\n }\n}\n","import { NotteClient } from '@/client';\nimport { NotteVault } from '@/vaults';\nimport type {\n PersonaCreateRequest,\n PersonaResponse,\n EmailResponse,\n SmsResponse,\n PaginatedResponsePersonaResponse,\n PersonaEmailsListData,\n ListPersonasData,\n DeletePersonaResponse\n} from '@/lib/client/types.gen';\nimport {\n personaCreate,\n personaGet,\n personaDelete,\n personaEmailsList,\n personaSmsList,\n listPersonas\n} from '@/lib/client/sdk.gen';\nimport { formatError } from '@/utils';\n\n// Type aliases from generated types for convenience\nexport type MessageReadOptions = NonNullable<PersonaEmailsListData['query']>;\nexport type PersonaListOptions = NonNullable<ListPersonasData['query']>;\n\n// Constructor overloads for NottePersona - mirrors Python overloads\nexport interface PersonaConstructorWithId {\n persona_id: string;\n}\n\nexport interface PersonaConstructorCreate extends PersonaCreateRequest {\n persona_id?: never;\n}\n\nexport type PersonaConstructor = PersonaConstructorWithId | PersonaConstructorCreate;\n\n/**\n * Self-service identities for web automation (account creation, 2FA, etc.)\n *\n * Notte Personas provide automated identity management for AI agents, enabling them to create accounts,\n * handle two-factor authentication, and interact with web platforms without manual intervention.\n *\n * Notte Personas come with complete digital identities:\n * - Unique Email Address: Dedicated mailbox for each persona with full email management\n * - Phone Number: SMS-capable phone number for verification and 2FA\n * - Credential Vault: Optional secure storage for passwords and authentication tokens\n * - Automated Communication: Built-in email and SMS reading capabilities\n * - 2FA Support: Seamless handling of two-factor authentication flows\n */\nexport class NottePersona {\n private client: NotteClient;\n private _initRequest: PersonaCreateRequest;\n private response: PersonaResponse | null = null;\n private initPromise: Promise<PersonaResponse> | null = null;\n private _vault: NotteVault | undefined;\n\n constructor(client: NotteClient, options: PersonaConstructor = {}) {\n this.client = client;\n\n if (options && 'persona_id' in options && options.persona_id) {\n // Constructor for existing persona\n this.initPromise = this.initExistingPersona(options.persona_id);\n this._initRequest = {};\n } else {\n // Constructor for new persona - create it\n const createData = (options || {}) as PersonaConstructorCreate;\n this._initRequest = createData;\n this.initPromise = this.initNewPersona(createData);\n }\n }\n\n /**\n * Get persona info\n */\n get info(): PersonaResponse {\n if (this.response === null) {\n throw new Error('Persona not initialized');\n }\n return this.response;\n }\n\n /**\n * Get vault (cached property equivalent)\n */\n get vault(): NotteVault {\n if (this._vault === undefined) {\n const vault = this._getVault();\n if (vault === null) {\n throw new Error(\n 'Persona has no vault. Please create a new persona using `create_vault=true` to use this feature.'\n );\n }\n this._vault = vault;\n }\n return this._vault;\n }\n\n /**\n * Check if persona has a vault\n */\n get hasVault(): boolean {\n return this.info.vault_id !== null;\n }\n\n private async initExistingPersona(personaId: string): Promise<PersonaResponse> {\n const response = await personaGet({\n client: this.client.getClient(),\n path: {\n persona_id: personaId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to get persona: ${formatError(response.error)}`);\n }\n\n this.response = response.data as PersonaResponse;\n return this.response;\n }\n\n private async initNewPersona(createData: PersonaCreateRequest): Promise<PersonaResponse> {\n const response = await personaCreate({\n client: this.client.getClient(),\n body: createData\n });\n\n if (response?.error) {\n throw new Error(`Failed to create persona: ${formatError(response.error)}`);\n }\n\n this.response = response.data as PersonaResponse;\n console.warn(\n `[Persona] ${this.response.persona_id} created since no persona id was provided. Please store this to retrieve it later.`\n );\n return this.response;\n }\n\n private async ensureInitialized(): Promise<PersonaResponse> {\n if (this.response) {\n return this.response;\n }\n if (this.initPromise) {\n return await this.initPromise;\n }\n throw new Error('Persona not initialized');\n }\n\n /**\n * Get persona ID\n */\n get personaId(): string {\n if (!this.response) {\n throw new Error('Persona not initialized. Use await on persona operations first.');\n }\n return this.response.persona_id;\n }\n\n /**\n * Start the persona - ensures initialization\n */\n async start(): Promise<void> {\n if (this.response === null) {\n await this.create();\n }\n }\n\n /**\n * Stop the persona - deletes it\n */\n async stop(): Promise<void> {\n await this.ensureInitialized();\n console.log(`[Persona] ${this.personaId} deleted.`);\n await this.delete();\n }\n\n /**\n * Get vault - private helper method\n */\n private _getVault(): NotteVault | null {\n if (this.info.vault_id === null) {\n return null;\n }\n return new NotteVault(this.client, { vault_id: this.info.vault_id });\n }\n\n /**\n * Create the persona\n */\n async create(): Promise<void> {\n if (this.response !== null) {\n throw new Error(`Persona ${this.personaId} already initialized`);\n }\n const response = await personaCreate({\n client: this.client.getClient(),\n body: this._initRequest\n });\n\n if (response?.error) {\n throw new Error(`Failed to create persona: ${formatError(response.error)}`);\n }\n\n this.response = response.data as PersonaResponse;\n }\n\n /**\n * Delete the persona from the notte console\n */\n async delete(): Promise<DeletePersonaResponse> {\n await this.ensureInitialized();\n const response = await personaDelete({\n client: this.client.getClient(),\n path: {\n persona_id: this.personaId\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to delete persona: ${formatError(response.error)}`);\n }\n return response.data as DeletePersonaResponse;\n }\n\n /**\n * Add credentials to the persona (generates a password and stores it in the vault)\n */\n async addCredentials(url: string): Promise<void> {\n const vault = this._getVault();\n if (vault === null) {\n throw new Error(\n 'Cannot add credentials to a persona without a vault. Please create a new persona using `create_vault=true` to use this feature.'\n );\n }\n const password = vault.generatePassword();\n await vault.addCredentials(url, {\n email: this.info.email,\n password: password\n });\n }\n\n /**\n * Read recent emails sent to the persona\n */\n async emails(options?: MessageReadOptions): Promise<EmailResponse[]> {\n await this.ensureInitialized();\n const response = await personaEmailsList({\n client: this.client.getClient(),\n path: {\n persona_id: this.personaId\n },\n query: options || {}\n });\n\n if (response?.error) {\n throw new Error(`Failed to list emails: ${formatError(response.error)}`);\n }\n\n return response.data as EmailResponse[];\n }\n\n /**\n * Read recent SMS messages sent to the persona\n */\n async sms(options?: MessageReadOptions): Promise<SmsResponse[]> {\n await this.ensureInitialized();\n const response = await personaSmsList({\n client: this.client.getClient(),\n path: {\n persona_id: this.personaId\n },\n query: options || {}\n });\n\n if (response?.error) {\n throw new Error(`Failed to list SMS messages: ${formatError(response.error)}`);\n }\n\n return response.data as SmsResponse[];\n }\n\n /**\n * Get persona information (alias for ensureInitialized)\n */\n async get(): Promise<PersonaResponse> {\n await this.ensureInitialized();\n return this.response!;\n }\n\n /**\n * Context manager for automatic cleanup\n */\n async use<T>(callback: (persona: NottePersona) => Promise<T>): Promise<T> {\n try {\n return await callback(this);\n } finally {\n // Only delete if this persona was created (not loaded from existing ID)\n // Check if we have an init request and it doesn't contain a persona_id\n if (this._initRequest && !('persona_id' in this._initRequest)) {\n try {\n await this.delete();\n } catch (error) {\n console.warn(`Failed to delete persona during cleanup: ${error}`);\n }\n }\n }\n }\n}\n","declare const __SDK_VERSION__: string;\n\n// Injected at build time by tsup from package.json \"version\".\n// Falls back to 'dev' when running outside a build (tsx, ts-node, tests).\nexport const SDK_VERSION: string = typeof __SDK_VERSION__ !== 'undefined' ? __SDK_VERSION__ : 'dev';\n","import { NotteClient } from '@/client';\nimport type {\n\tGetFunctionRunResponse,\n} from '@/lib/client/types.gen';\nimport {\n\tfunctionRunStart,\n\tfunctionRunGetMetadata,\n} from '@/lib/client/sdk.gen';\nimport { formatError } from '@/utils';\nimport { SDK_VERSION } from '@/version';\n\nexport interface FunctionRunStartResult {\n\tfunction_run_id: string;\n\t[key: string]: unknown;\n}\n\nexport interface FunctionConstructor {\n\tfunction_id: string;\n\tdecryption_key?: string;\n}\n\n/**\n * Function class for managing function runs\n */\nexport class NotteFunction {\n\tprivate client: NotteClient;\n\tpublic readonly functionId: string;\n\tpublic readonly decryptionKey?: string;\n\n\tconstructor(client: NotteClient, options: FunctionConstructor) {\n\t\tthis.client = client;\n\t\tthis.functionId = options.function_id;\n\t\tthis.decryptionKey = options.decryption_key;\n\t}\n\n\t/**\n\t * Get metadata for a specific function run\n\t */\n\tasync retrieve(functionRunId: string): Promise<GetFunctionRunResponse> {\n\t\ttry {\n\t\t\tconst response = await functionRunGetMetadata({\n\t\t\t\tclient: this.client.getClient(),\n\t\t\t\tpath: {\n\t\t\t\t\tfunction_id: this.functionId,\n\t\t\t\t\trun_id: functionRunId,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (response?.error) {\n\t\t\t\tthrow new Error(`Failed to get function run metadata: ${formatError(response.error)}`);\n\t\t\t}\n\n\t\t\treturn response.data;\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error && error.message.startsWith('Failed to get function run metadata:')) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new Error(`Failed to get function run metadata: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\t/**\n\t * Start a function run\n\t */\n\tasync run(variables: Record<string, unknown> = {}): Promise<FunctionRunStartResult> {\n\t\tconst apiKey = this.client.getConfig().apiKey || '';\n\t\tif (!apiKey) {\n\t\t\tthrow new Error('API key is required. Provide it via config.apiKey or set the NOTTE_API_KEY environment variable.');\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await functionRunStart({\n\t\t\t\tclient: this.client.getClient(),\n\t\t\t\tpath: {\n\t\t\t\t\tfunction_id: this.functionId,\n\t\t\t\t},\n\t\t\t\theaders: {\n\t\t\t\t\t'x-notte-api-key': apiKey,\n\t\t\t\t\t'x-notte-request-origin': 'sdk-node',\n\t\t\t\t\t'x-notte-sdk-version': SDK_VERSION,\n\t\t\t\t},\n\t\t\t\tbody: {\n\t\t\t\t\tworkflow_id: this.functionId,\n\t\t\t\t\tvariables: variables,\n\t\t\t\t\tstream: false,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (response?.error) {\n\t\t\t\tthrow new Error(`Failed to start function run: ${formatError(response.error)}`);\n\t\t\t}\n\n\t\t\treturn response.data as FunctionRunStartResult;\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error && error.message.startsWith('Failed to start function run:')) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new Error(`Failed to run function: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\t/**\n\t * Get the function ID\n\t */\n\tgetFunctionId(): string {\n\t\treturn this.functionId;\n\t}\n}\n","import { client } from '@/lib/client/client.gen';\nimport { Session } from '@/session';\nimport type { ApiSessionStartRequest, GlobalScrapeRequest } from '@/lib/client/types.gen';\nimport { Agent, type AgentConstructor } from '@/agent';\nimport { NotteVault, type VaultConstructor } from '@/vaults';\nimport { NottePersona, type PersonaConstructor, type PersonaListOptions } from '@/personas';\nimport { NotteFunction, type FunctionConstructor } from '@/functions';\nimport { scrapeWebpage, listPersonas } from '@/lib/client/sdk.gen';\nimport { processScrapeResponse } from '@/session';\nimport { z } from 'zod';\nimport type { PersonaResponse } from '@/lib/client/types.gen';\nimport { SDK_VERSION } from '@/version';\n\n\nexport interface NotteClientConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n\nexport class NotteClient {\n private config: NotteClientConfig;\n\n constructor(config: NotteClientConfig = {}) {\n // Get API key from config or environment variable\n const apiKey = config.apiKey || process.env.NOTTE_API_KEY;\n\n // Only skip the apiKey check for relative proxy paths (e.g. '/api/notte').\n // Any HTTPS URL—including staging—still requires a key.\n const isProxyMode = config.baseUrl && !config.baseUrl.startsWith('https://');\n if (!apiKey && !isProxyMode) {\n throw new Error('API key is required. Provide it via config.apiKey or set the NOTTE_API_KEY environment variable.');\n }\n\n this.config = {\n baseUrl: config.baseUrl || 'https://api.notte.cc',\n apiKey,\n ...config\n };\n\n // Configure the generated client\n client.setConfig({\n baseUrl: this.config.baseUrl\n });\n\n client.interceptors.request.use((request: any) => {\n request.headers.set('Authorization', `Bearer ${this.config.apiKey}`);\n request.headers.set('x-notte-request-origin', 'sdk-node');\n request.headers.set('x-notte-sdk-version', SDK_VERSION);\n return request;\n });\n }\n\n /**\n * Create a new session\n */\n Session(options: ApiSessionStartRequest = {}): Session {\n return new Session(this, options);\n }\n\n /**\n * Create a new agent\n */\n Agent(options: AgentConstructor): Agent {\n return new Agent(this, options);\n }\n\n /**\n * Create or access a vault\n */\n Vault(options?: VaultConstructor): NotteVault {\n return new NotteVault(this, options);\n }\n\n /**\n * Create or access a persona\n */\n Persona(options?: PersonaConstructor): NottePersona {\n return new NottePersona(this, options);\n }\n\n /**\n * Create or access a function\n */\n NotteFunction(options: FunctionConstructor): NotteFunction {\n return new NotteFunction(this, options);\n }\n\n /**\n * Personas client for listing and managing personas\n */\n get personas() {\n return {\n list: async (options?: PersonaListOptions): Promise<PersonaResponse[]> => {\n const response = await listPersonas({\n client: this.getClient(),\n query: options || {}\n });\n\n if (response?.error) {\n throw new Error(`Failed to list personas: ${JSON.stringify(response.error)}`);\n }\n\n return (response.data as any)?.items || [];\n }\n };\n }\n\n /**\n * Get the configured client instance\n */\n getClient() {\n return client;\n }\n\n /**\n * Scrape a webpage directly (without session)\n */\n async scrape(url: string, options?: Omit<GlobalScrapeRequest, 'url'>): Promise<string | any>;\n async scrape<T>(url: string, options: Omit<GlobalScrapeRequest, 'url'> & { response_format: z.ZodSchema<T>; json_schema?: any }): Promise<T>;\n async scrape<T = any>(url: string, options: Omit<GlobalScrapeRequest, 'url'> & { response_format?: z.ZodSchema<T> | any; json_schema?: any } = {}): Promise<string | T | any> {\n // If response_format is a Zod schema, we need to convert it to JSON schema for the API\n const apiOptions = { ...options };\n if (options.response_format && typeof options.response_format.parse === 'function') {\n // Use provided JSON schema or convert Zod schema to JSON schema for API compatibility\n if (options.json_schema) {\n apiOptions.response_format = options.json_schema;\n } else {\n apiOptions.response_format = z.toJSONSchema(options.response_format);\n }\n\n // Add more specific instructions to help the API understand what to extract\n if (!apiOptions.instructions) {\n // Try to infer what kind of data to extract from the schema structure\n const schemaStr = JSON.stringify(apiOptions.response_format);\n if (schemaStr.includes('plans') || schemaStr.includes('plan')) {\n apiOptions.instructions = \"Extract pricing plans from the page\";\n } else if (schemaStr.includes('products') || schemaStr.includes('product')) {\n apiOptions.instructions = \"Extract product information from the page\";\n } else if (schemaStr.includes('articles') || schemaStr.includes('article')) {\n apiOptions.instructions = \"Extract article information from the page\";\n } else {\n apiOptions.instructions = \"Extract structured data from the page based on the provided schema\";\n }\n }\n }\n\n const response = await scrapeWebpage({\n client: this.getClient(),\n body: {\n url,\n ...apiOptions\n }\n });\n\n if (response?.error) {\n throw new Error(`Failed to scrape webpage: ${JSON.stringify(response.error)}`);\n }\n\n const scrapeResponse = response.data;\n return processScrapeResponse(scrapeResponse, options);\n }\n\n /**\n * Get the client configuration\n */\n getConfig(): NotteClientConfig {\n return this.config;\n }\n}\n","/**\n * Error class for authentication/authorization failures in the proxy.\n * Throw this from `authenticate()` to return a 401 response.\n *\n * @example\n * ```typescript\n * authenticate: async (request) => {\n * const session = await getSession(request);\n * if (!session) throw new NotteProxyAuthError('Not logged in');\n * }\n * ```\n */\nexport class NotteProxyAuthError extends Error {\n constructor(message = 'Unauthorized') {\n super(message);\n this.name = 'NotteProxyAuthError';\n }\n}\n\n/**\n * Configuration for the Notte API proxy.\n *\n * The proxy forwards incoming HTTP requests to the Notte API,\n * injecting authentication headers server-side so the API key\n * is never exposed to the client.\n */\nexport interface NotteProxyConfig {\n /**\n * The Notte API key to use for all forwarded requests.\n * Falls back to the NOTTE_API_KEY environment variable when omitted.\n * Can be overridden per-request by returning a string from `authenticate`.\n */\n apiKey?: string;\n\n /**\n * Base URL of the Notte API.\n * @default 'https://api.notte.cc'\n */\n apiUrl?: string;\n\n /**\n * Optional async function to authenticate/authorize incoming requests.\n *\n * - Throw a `NotteProxyAuthError` to reject the request (returns 401).\n * - Return `void` to allow the request through using the default `apiKey`.\n * - Return a `string` to override the API key for this specific request\n * (useful for per-user API keys).\n */\n authenticate?: (request: Request) => Promise<void | string>;\n\n /**\n * Allowed API endpoint patterns for path validation (SSRF prevention).\n *\n * - `undefined` (default): uses the built-in allowlist derived from the OpenAPI spec.\n * - `RegExp[]`: custom list of allowed patterns.\n * - `false`: disables path validation entirely (not recommended for public-facing proxies).\n */\n allowedPatterns?: RegExp[] | false;\n\n /**\n * Value for the `x-notte-request-origin` header sent to the Notte API.\n * @default 'sdk-proxy'\n */\n requestOrigin?: string;\n\n /**\n * List of header names to forward from the incoming request to the Notte API.\n * @default ['content-type', 'accept']\n */\n forwardHeaders?: string[];\n\n /**\n * Optional hook called just before the request is forwarded to the Notte API.\n * Use this to modify outgoing headers, log requests, etc.\n */\n onBeforeRequest?: (ctx: {\n path: string;\n method: string;\n headers: Headers;\n url: string;\n incomingRequest: Request;\n }) => Promise<void> | void;\n}\n"],"mappings":"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","names":["createClient","joinedValues","config","request","error","finalError","url","client","client","WebSocket","client","client","client","import_zod","createClient"]}
|