@omirion/orbit-sdk 0.1.1 → 0.3.0
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 +29 -19
- package/dist/index.cjs +235 -74
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +176 -103
- package/dist/index.d.ts +176 -103
- package/dist/index.js +235 -75
- package/dist/index.js.map +1 -1
- package/examples/device-rpc-flow/README.md +43 -0
- package/examples/device-rpc-flow/index.tsx +502 -0
- package/examples/device-rpc-flow/package.json +23 -0
- package/examples/device-rpc-flow/tsconfig.json +14 -0
- package/examples/webhook-listener/README.md +41 -0
- package/examples/webhook-listener/index.ts +110 -0
- package/examples/webhook-listener/package.json +19 -0
- package/examples/webhook-listener/tsconfig.json +13 -0
- package/package.json +2 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generated/core/bodySerializer.gen.ts","../src/generated/core/serverSentEvents.gen.ts","../src/generated/core/pathSerializer.gen.ts","../src/generated/core/utils.gen.ts","../src/generated/core/auth.gen.ts","../src/generated/client/utils.gen.ts","../src/generated/client/client.gen.ts","../src/generated/client.gen.ts","../src/generated/sdk.gen.ts","../src/errors.ts","../src/pagination.ts","../src/usb.ts","../src/terminal.ts","../src/client.ts","../src/telemetry.ts","../src/webhooks.ts","../src/generated/index.ts"],"names":["joinedValues","config","request","url","client","SECURITY","createTicket"],"mappings":"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","file":"index.cjs","sourcesContent":["// 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\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.replace(/^retry:\\s*/, ''), 10);\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle): '.' | ';' | ',' | '&' => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle): ',' | '|' | '%20' => {\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}): string => {\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): string => {\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}): string => {\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: RegExp = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer): string => {\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}): string => {\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}): unknown {\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 * A unique identifier for the security scheme.\n *\n * Defined only when there are multiple security schemes whose `Auth`\n * shape would otherwise be identical.\n */\n key?: string;\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 = {}): ((queryParams: T) => string) => {\n const querySerializer = (queryParams: T): string => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === 'object') {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join('&');\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (contentType: string | null): Exclude<Config['parseAs'], 'auto'> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return 'stream';\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\n return 'json';\n }\n\n if (cleanContent === 'multipart/form-data') {\n return 'formData';\n }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) => cleanContent.startsWith(type))\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get('Cookie')?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport async function setAuthParams(\n options: Pick<RequestOptions, 'auth' | 'query' | 'security'> & {\n headers: Headers;\n },\n): Promise<void> {\n for (const auth of options.security ?? []) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n }\n}\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === 'function'\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith('/')) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e., their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n /** response may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: 'form',\n },\n object: {\n explode: true,\n style: 'deepObject',\n },\n});\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: 'auto',\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type { Client, Config, RequestOptions, ResolvedRequestOptions } from './types.gen';\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<Request, Response, unknown, ResolvedRequestOptions>();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends 'data' | 'fields' = 'fields',\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams(opts);\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client['request'] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n\n response = await _fetch(request);\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (response.status === 204 || response.headers.get('Content-Length') === '0') {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'json': {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\n case 'stream':\n return opts.responseStyle === 'data'\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === 'json') {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === 'data'\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n url,\n });\n };\n\n const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, 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: Client = createClient(createConfig<ClientOptions2>({ baseUrl: 'https://orbit.omirion.com' }));\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, type ClientMeta, formDataBodySerializer, type Options as Options2, type RequestResult, type TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { AcceptAdmissionData, AcceptAdmissionErrors, AcceptAdmissionResponses, CancelFirmwareDeploymentData, CancelFirmwareDeploymentErrors, CancelFirmwareDeploymentResponses, CreateDeviceTypeData, CreateDeviceTypeErrors, CreateDeviceTypeResponses, CreateProjectAppTokenData, CreateProjectAppTokenErrors, CreateProjectAppTokenResponses, CreateWebhookData, CreateWebhookErrors, CreateWebhookResponses, DeleteCommandManifestData, DeleteCommandManifestErrors, DeleteCommandManifestResponses, DeleteDeviceData, DeleteDeviceErrors, DeleteDeviceResponses, DeleteDeviceTypeData, DeleteDeviceTypeErrors, DeleteDeviceTypeResponses, DeleteFirmwareBundleData, DeleteFirmwareBundleErrors, DeleteFirmwareBundleResponses, DeleteWebhookData, DeleteWebhookErrors, DeleteWebhookResponses, DismissAdmissionData, DismissAdmissionErrors, DismissAdmissionResponses, ExecDeviceCommandData, ExecDeviceCommandErrors, ExecDeviceCommandResponses, GetAdmissionData, GetAdmissionErrors, GetAdmissionResponses, GetCommandManifestData, GetCommandManifestErrors, GetCommandManifestResponses, GetDeviceCommandInvocationData, GetDeviceCommandInvocationErrors, GetDeviceCommandInvocationResponses, GetDeviceCommandsData, GetDeviceCommandsErrors, GetDeviceCommandsResponses, GetDeviceData, GetDeviceErrors, GetDeviceResponses, GetDeviceTypeData, GetDeviceTypeErrors, GetDeviceTypeResponses, GetFirmwareBundleData, GetFirmwareBundleErrors, GetFirmwareBundleResponses, GetFirmwareDeploymentData, GetFirmwareDeploymentErrors, GetFirmwareDeploymentResponses, GetIdentityData, GetIdentityErrors, GetIdentityResponses, GetLatestTelemetryData, GetLatestTelemetryErrors, GetLatestTelemetryResponses, GetProjectData, GetProjectErrors, GetProjectResponses, GetTelemetryHistoryData, GetTelemetryHistoryErrors, GetTelemetryHistoryResponses, GetTelemetryManifestData, GetTelemetryManifestErrors, GetTelemetryManifestResponses, GetWebhookData, GetWebhookErrors, GetWebhookResponses, ListAdmissionsData, ListAdmissionsErrors, ListAdmissionsResponses, ListDevicesData, ListDevicesErrors, ListDevicesResponses, ListDeviceTypesData, ListDeviceTypesErrors, ListDeviceTypesResponses, ListFirmwareBundlesData, ListFirmwareBundlesErrors, ListFirmwareBundlesResponses, ListFirmwareDeploymentsData, ListFirmwareDeploymentsErrors, ListFirmwareDeploymentsResponses, ListProjectsData, ListProjectsErrors, ListProjectsResponses, ListWebhookDeliveriesData, ListWebhookDeliveriesErrors, ListWebhookDeliveriesResponses, ListWebhooksData, ListWebhooksErrors, ListWebhooksResponses, RejectAdmissionData, RejectAdmissionErrors, RejectAdmissionResponses, ResetDeviceTokenData, ResetDeviceTokenErrors, ResetDeviceTokenResponses, RollbackFirmwareDeploymentData, RollbackFirmwareDeploymentErrors, RollbackFirmwareDeploymentResponses, RotateProjectAppTokenData, RotateProjectAppTokenErrors, RotateProjectAppTokenResponses, TriggerFirmwareDeploymentData, TriggerFirmwareDeploymentErrors, TriggerFirmwareDeploymentResponses, UpdateCommandManifestData, UpdateCommandManifestErrors, UpdateCommandManifestResponses, UpdateDeviceTypeData, UpdateDeviceTypeErrors, UpdateDeviceTypeResponses, UpdateWebhookData, UpdateWebhookErrors, UpdateWebhookResponses, UploadFirmwareData, UploadFirmwareErrors, UploadFirmwareResponses } 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?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta;\n};\n\n/**\n * Who this token authenticates as\n *\n * Returns the authenticated user, the presented token’s abilities and project scope, and the projects reachable with both. Requires no ability beyond a valid token. Call it to confirm a token works and to discover the `projectId` values other endpoints accept.\n */\nexport const getIdentity = <ThrowOnError extends boolean = false>(options?: Options<GetIdentityData, ThrowOnError>): RequestResult<GetIdentityResponses, GetIdentityErrors, ThrowOnError> => (options?.client ?? client).get<GetIdentityResponses, GetIdentityErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/me',\n ...options\n});\n\n/**\n * List projects\n *\n * Paginated list of the projects this token reaches (the caller’s organisation access intersected with the token’s project scope). Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter.\n *\n * Requires `api:projects:read`. Discovering project **ids** alone does not: `GET /api/v1/me` returns them under no ability so a token holding none can still address other endpoints. This endpoint reads the project as a resource, so it is gated and grows independently.\n */\nexport const listProjects = <ThrowOnError extends boolean = false>(options?: Options<ListProjectsData, ThrowOnError>): RequestResult<ListProjectsResponses, ListProjectsErrors, ThrowOnError> => (options?.client ?? client).get<ListProjectsResponses, ListProjectsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects',\n ...options\n});\n\n/**\n * Get a project\n *\n * One project by id. Requires `api:projects:read`. A project outside the token’s reach answers 404 rather than 403, so the refusal does not confirm it exists.\n */\nexport const getProject = <ThrowOnError extends boolean = false>(options: Options<GetProjectData, ThrowOnError>): RequestResult<GetProjectResponses, GetProjectErrors, ThrowOnError> => (options.client ?? client).get<GetProjectResponses, GetProjectErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{id}',\n ...options\n});\n\n/**\n * Mint the project provisioning (app) token\n *\n * Mints the `omr_prj_…` token devices present to enrol into this project. The plaintext value is returned **once, in this response, and is never retrievable again**. The server stores only its sha256. Store it before discarding the response.\n *\n * Refuses with 409 when the project already has one; use the rotate endpoint to replace it. Requires `api:projects:manage`, deliberately separate from `api:projects:read`: an app token admits new devices and so consumes licensing seats.\n */\nexport const createProjectAppToken = <ThrowOnError extends boolean = false>(options: Options<CreateProjectAppTokenData, ThrowOnError>): RequestResult<CreateProjectAppTokenResponses, CreateProjectAppTokenErrors, ThrowOnError> => (options.client ?? client).post<CreateProjectAppTokenResponses, CreateProjectAppTokenErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{id}/app-token',\n ...options\n});\n\n/**\n * Rotate the project provisioning (app) token\n *\n * Issues a fresh `omr_prj_…` token and invalidates the previous one, if any. The plaintext value is returned **once** and never again.\n *\n * **This is destructive for unprovisioned devices.** Any unit still carrying the old token can no longer enrol until it is reflashed or reconfigured; devices that already hold their own device token are unaffected, since enrolment is the only step the app token takes part in. Requires `api:projects:manage`.\n */\nexport const rotateProjectAppToken = <ThrowOnError extends boolean = false>(options: Options<RotateProjectAppTokenData, ThrowOnError>): RequestResult<RotateProjectAppTokenResponses, RotateProjectAppTokenErrors, ThrowOnError> => (options.client ?? client).post<RotateProjectAppTokenResponses, RotateProjectAppTokenErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{id}/app-token/rotate',\n ...options\n});\n\n/**\n * List devices\n *\n * Paginated list of devices across every project this token is scoped to (intersected with the caller's org access). Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter.\n */\nexport const listDevices = <ThrowOnError extends boolean = false>(options?: Options<ListDevicesData, ThrowOnError>): RequestResult<ListDevicesResponses, ListDevicesErrors, ThrowOnError> => (options?.client ?? client).get<ListDevicesResponses, ListDevicesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices',\n ...options\n});\n\n/**\n * Delete a device\n *\n * Permanently removes the device: releases its licensing seat and evicts any live agent (it re-admits on next connect). Must belong to a project this token can manage. Requires the `api:devices:manage` ability.\n */\nexport const deleteDevice = <ThrowOnError extends boolean = false>(options: Options<DeleteDeviceData, ThrowOnError>): RequestResult<DeleteDeviceResponses, DeleteDeviceErrors, ThrowOnError> => (options.client ?? client).delete<DeleteDeviceResponses, DeleteDeviceErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}',\n ...options\n});\n\n/**\n * Get a device\n *\n * Returns the device with the given UUID. Must belong to a project this token can read.\n */\nexport const getDevice = <ThrowOnError extends boolean = false>(options: Options<GetDeviceData, ThrowOnError>): RequestResult<GetDeviceResponses, GetDeviceErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceResponses, GetDeviceErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}',\n ...options\n});\n\n/**\n * Reset a device token\n *\n * Rotates the device token in place, keeping the device id, name, device-type link and history (unlike delete, which throws them away). The previous token is invalidated and any live agent is evicted so it re-admits/reconnects with the new one (a device that lost its token recovers automatically on its next admission). The new token is returned once and cannot be retrieved again. Must belong to a project this token can manage. Requires the `api:devices:manage` ability.\n */\nexport const resetDeviceToken = <ThrowOnError extends boolean = false>(options: Options<ResetDeviceTokenData, ThrowOnError>): RequestResult<ResetDeviceTokenResponses, ResetDeviceTokenErrors, ThrowOnError> => (options.client ?? client).post<ResetDeviceTokenResponses, ResetDeviceTokenErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/token/reset',\n ...options\n});\n\n/**\n * Latest telemetry sample for a device\n *\n * Returns the most recent telemetry sample. `null` if the device has never reported.\n */\nexport const getLatestTelemetry = <ThrowOnError extends boolean = false>(options: Options<GetLatestTelemetryData, ThrowOnError>): RequestResult<GetLatestTelemetryResponses, GetLatestTelemetryErrors, ThrowOnError> => (options.client ?? client).get<GetLatestTelemetryResponses, GetLatestTelemetryErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/telemetry/latest',\n ...options\n});\n\n/**\n * Telemetry history for a device\n *\n * Returns a time-window of telemetry samples. Defaults to the last 6 hours.\n */\nexport const getTelemetryHistory = <ThrowOnError extends boolean = false>(options: Options<GetTelemetryHistoryData, ThrowOnError>): RequestResult<GetTelemetryHistoryResponses, GetTelemetryHistoryErrors, ThrowOnError> => (options.client ?? client).get<GetTelemetryHistoryResponses, GetTelemetryHistoryErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/telemetry',\n ...options\n});\n\n/**\n * Metric manifest for a device\n *\n * The metric definitions (label, unit, type, range) of the device's type, i.e. the schema its telemetry samples decode against. `null` when the device type declares no manifest. Requires the `api:telemetry:read` ability.\n */\nexport const getTelemetryManifest = <ThrowOnError extends boolean = false>(options: Options<GetTelemetryManifestData, ThrowOnError>): RequestResult<GetTelemetryManifestResponses, GetTelemetryManifestErrors, ThrowOnError> => (options.client ?? client).get<GetTelemetryManifestResponses, GetTelemetryManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/telemetry/manifest',\n ...options\n});\n\n/**\n * List admission requests\n *\n * Paginated list of device admission requests across every project this token is scoped to. Filter by `status` (e.g. `pending`) to find requests awaiting review, or by `fingerprint` to resolve the request a specific unit raised. Cursor-based; pass `meta.nextCursor` as the `cursor` query parameter. Requires the `api:admissions:read` ability.\n */\nexport const listAdmissions = <ThrowOnError extends boolean = false>(options?: Options<ListAdmissionsData, ThrowOnError>): RequestResult<ListAdmissionsResponses, ListAdmissionsErrors, ThrowOnError> => (options?.client ?? client).get<ListAdmissionsResponses, ListAdmissionsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions',\n ...options\n});\n\n/**\n * Get an admission request\n *\n * Returns the admission request with the given UUID. Must belong to a project this token can read. Requires the `api:admissions:read` ability.\n */\nexport const getAdmission = <ThrowOnError extends boolean = false>(options: Options<GetAdmissionData, ThrowOnError>): RequestResult<GetAdmissionResponses, GetAdmissionErrors, ThrowOnError> => (options.client ?? client).get<GetAdmissionResponses, GetAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}',\n ...options\n});\n\n/**\n * Accept an admission request\n *\n * Approves a pending admission and provisions a new device in the request’s project. The agent that raised the request receives its device token on its next admission poll. A `deviceTypeId` is required (must belong to the same project). Pass the type resolved from the device’s declared model, or another of the project’s types to override it. Requires the `api:admissions:manage` ability.\n */\nexport const acceptAdmission = <ThrowOnError extends boolean = false>(options: Options<AcceptAdmissionData, ThrowOnError>): RequestResult<AcceptAdmissionResponses, AcceptAdmissionErrors, ThrowOnError> => (options.client ?? client).post<AcceptAdmissionResponses, AcceptAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}/accept',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Reject an admission request\n *\n * Rejects a pending admission permanently. No device is provisioned. Requires the `api:admissions:manage` ability.\n */\nexport const rejectAdmission = <ThrowOnError extends boolean = false>(options: Options<RejectAdmissionData, ThrowOnError>): RequestResult<RejectAdmissionResponses, RejectAdmissionErrors, ThrowOnError> => (options.client ?? client).post<RejectAdmissionResponses, RejectAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}/reject',\n ...options\n});\n\n/**\n * Dismiss an admission request\n *\n * Dismisses a pending admission without provisioning a device and without refusing the unit permanently. Unlike `reject`, this is not a verdict the device has to live with: the next time the same fingerprint asks to enrol, the request reopens as `pending` and appears in the queue again. Use it for \"not now\" (an unrecognised unit, a fleet you are not ready to admit); use `reject` when the unit must stay out.\n *\n * Requires the `api:admissions:manage` ability.\n */\nexport const dismissAdmission = <ThrowOnError extends boolean = false>(options: Options<DismissAdmissionData, ThrowOnError>): RequestResult<DismissAdmissionResponses, DismissAdmissionErrors, ThrowOnError> => (options.client ?? client).post<DismissAdmissionResponses, DismissAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}/dismiss',\n ...options\n});\n\n/**\n * Upload a firmware bundle\n *\n * Streams a firmware bundle into project storage and creates the corresponding `firmware_bundles` row. Returns the bundle envelope (id, kind, sha256, sizeBytes, …). The `kind` field selects the image format: `rauc` (default, `.raucb`, Linux A/B) or `mcuboot` (signed MCUboot `.bin` for microcontrollers). Version and hardware target are decoded from the binary where it carries them (rauc: both from the manifest; mcuboot: version from the image header). The `version`/`compatible` form fields are only needed for what the binary lacks (mcuboot target). To roll the bundle out to devices, trigger a deployment via `POST /api/v1/firmware/deployments`. 512 MB hard cap.\n */\nexport const uploadFirmware = <ThrowOnError extends boolean = false>(options?: Options<UploadFirmwareData, ThrowOnError>): RequestResult<UploadFirmwareResponses, UploadFirmwareErrors, ThrowOnError> => (options?.client ?? client).post<UploadFirmwareResponses, UploadFirmwareErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/upload',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options?.headers\n }\n});\n\n/**\n * List firmware bundles\n *\n * Paginated list of firmware bundles across every project this token is scoped to. Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter. Filter by `projectId`, by exact `compatible` target, or by a `version` substring to find the bundle to roll out. Deleted bundles are omitted; their deployment history remains readable through the deployments endpoints. Requires the `api:firmware:read` ability.\n */\nexport const listFirmwareBundles = <ThrowOnError extends boolean = false>(options?: Options<ListFirmwareBundlesData, ThrowOnError>): RequestResult<ListFirmwareBundlesResponses, ListFirmwareBundlesErrors, ThrowOnError> => (options?.client ?? client).get<ListFirmwareBundlesResponses, ListFirmwareBundlesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/bundles',\n ...options\n});\n\n/**\n * Delete a firmware bundle\n *\n * Soft-deletes a bundle and frees its stored object; deployment history is retained for audit. A bundle with a genuinely in-flight deployment is refused (409) until it is canceled. Must belong to a project this token can write. Requires the `api:firmware:write` ability.\n */\nexport const deleteFirmwareBundle = <ThrowOnError extends boolean = false>(options: Options<DeleteFirmwareBundleData, ThrowOnError>): RequestResult<DeleteFirmwareBundleResponses, DeleteFirmwareBundleErrors, ThrowOnError> => (options.client ?? client).delete<DeleteFirmwareBundleResponses, DeleteFirmwareBundleErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/bundles/{id}',\n ...options\n});\n\n/**\n * Get a firmware bundle\n *\n * Returns one bundle: kind, version, hardware target, size and `sha256`, so a caller can verify what it is about to roll out. Requires the `api:firmware:read` ability.\n */\nexport const getFirmwareBundle = <ThrowOnError extends boolean = false>(options: Options<GetFirmwareBundleData, ThrowOnError>): RequestResult<GetFirmwareBundleResponses, GetFirmwareBundleErrors, ThrowOnError> => (options.client ?? client).get<GetFirmwareBundleResponses, GetFirmwareBundleErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/bundles/{id}',\n ...options\n});\n\n/**\n * List firmware deployments\n *\n * Paginated list of firmware deployments across every project this token is scoped to, newest activity first via the opaque cursor. Filter by `deviceId`, `bundleId` or `status` to track a rollout. Requires the `api:firmware:read` ability.\n */\nexport const listFirmwareDeployments = <ThrowOnError extends boolean = false>(options?: Options<ListFirmwareDeploymentsData, ThrowOnError>): RequestResult<ListFirmwareDeploymentsResponses, ListFirmwareDeploymentsErrors, ThrowOnError> => (options?.client ?? client).get<ListFirmwareDeploymentsResponses, ListFirmwareDeploymentsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments',\n ...options\n});\n\n/**\n * Trigger a firmware deployment\n *\n * Creates one deployment per device for the given bundle and dispatches it immediately to any device that is currently online; offline devices stay `pending` and install on their next reconnect. Every device must belong to the bundle’s project. A device whose recorded hardware compatibility contradicts the bundle’s declared target is rejected (422) before any deployment row is created. Requires the `api:firmware:write` ability.\n */\nexport const triggerFirmwareDeployment = <ThrowOnError extends boolean = false>(options?: Options<TriggerFirmwareDeploymentData, ThrowOnError>): RequestResult<TriggerFirmwareDeploymentResponses, TriggerFirmwareDeploymentErrors, ThrowOnError> => (options?.client ?? client).post<TriggerFirmwareDeploymentResponses, TriggerFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers\n }\n});\n\n/**\n * Get a firmware deployment\n *\n * Returns the current state of a single deployment (status, phase, progress %, and any error or install result reported by the agent). Poll this to follow a rollout. Requires the `api:firmware:read` ability.\n */\nexport const getFirmwareDeployment = <ThrowOnError extends boolean = false>(options: Options<GetFirmwareDeploymentData, ThrowOnError>): RequestResult<GetFirmwareDeploymentResponses, GetFirmwareDeploymentErrors, ThrowOnError> => (options.client ?? client).get<GetFirmwareDeploymentResponses, GetFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments/{id}',\n ...options\n});\n\n/**\n * Cancel a firmware deployment\n *\n * Marks a deployment `canceled`. A `pending` deployment (the device has not picked it up yet) cancels with no flag. One already in flight (`downloading` / `installing`) requires `force: true`, because the device may be partway through an install; the forced abort is recorded in the deployment’s `error` and `message`. A deployment that already reached a terminal state is refused with 409. Cancelling is what unblocks deleting the bundle, which is refused while a deployment is genuinely in flight. Requires the `api:firmware:write` ability.\n */\nexport const cancelFirmwareDeployment = <ThrowOnError extends boolean = false>(options: Options<CancelFirmwareDeploymentData, ThrowOnError>): RequestResult<CancelFirmwareDeploymentResponses, CancelFirmwareDeploymentErrors, ThrowOnError> => (options.client ?? client).post<CancelFirmwareDeploymentResponses, CancelFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments/{id}/cancel',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Roll back a firmware deployment\n *\n * Issues a real rollback for the device behind a succeeded deployment: a RAUC slot-status flip on a gateway, or an MCUboot test-swap back to the previous image on an MCU. This creates and returns a *new* synthetic deployment row (not the source one) so a poller can follow the rollback the same way it follows a forward rollout. The device must be online, since the bootloader state being flipped is only valid right now. Requires the `api:firmware:write` ability.\n */\nexport const rollbackFirmwareDeployment = <ThrowOnError extends boolean = false>(options: Options<RollbackFirmwareDeploymentData, ThrowOnError>): RequestResult<RollbackFirmwareDeploymentResponses, RollbackFirmwareDeploymentErrors, ThrowOnError> => (options.client ?? client).post<RollbackFirmwareDeploymentResponses, RollbackFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments/{id}/rollback',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Run a command on a device\n *\n * Dispatches a declared command (name + typed args) to the device over the MQTT data plane. The command is validated against the device type's command manifest before publishing: an undeclared name, a missing required arg, or a wrongly-typed arg is rejected with 422. See `GET /api/v1/devices/{id}/commands` for the declared set. Delivery follows the device type's dispatch profile: `interactive` devices run it now and the call returns 200 with the result (or 502 if offline); `queued` devices accept it for store-and-forward delivery on their next check-in and the call returns 202 with `{ invocationId, status, queued: true }`. Poll `GET /api/v1/devices/{id}/commands/{invocationId}` for the eventual result. Requires the `api:command:exec` ability and project scope over the device. Audited.\n */\nexport const execDeviceCommand = <ThrowOnError extends boolean = false>(options: Options<ExecDeviceCommandData, ThrowOnError>): RequestResult<ExecDeviceCommandResponses, ExecDeviceCommandErrors, ThrowOnError> => (options.client ?? client).post<ExecDeviceCommandResponses, ExecDeviceCommandErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/command',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Get a command invocation result\n *\n * Returns the durable record of a single command invocation. Its lifecycle `status` and, once terminal, its result (`success`, `exitCode`, `output`, `error`, `durationMs`). This is the pull counterpart to the `command.result` webhook: poll it after a queued (202) dispatch to retrieve the eventual outcome, so a missed or unsubscribed webhook delivery never makes a recorded result unrecoverable. The `invocationId` is the value returned by `POST /api/v1/devices/{id}/command`. Requires the `api:command:exec` ability and project scope over the device.\n */\nexport const getDeviceCommandInvocation = <ThrowOnError extends boolean = false>(options: Options<GetDeviceCommandInvocationData, ThrowOnError>): RequestResult<GetDeviceCommandInvocationResponses, GetDeviceCommandInvocationErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceCommandInvocationResponses, GetDeviceCommandInvocationErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/commands/{invocationId}',\n ...options\n});\n\n/**\n * Commands a device supports\n *\n * The command manifest of the device's type, i.e. the declared commands (name + typed arg schema) that `POST /api/v1/devices/{id}/command` will accept for this device. `null` when the device type declares no manifest (every command is then rejected with 422). Requires the `api:devices:read` ability.\n */\nexport const getDeviceCommands = <ThrowOnError extends boolean = false>(options: Options<GetDeviceCommandsData, ThrowOnError>): RequestResult<GetDeviceCommandsResponses, GetDeviceCommandsErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceCommandsResponses, GetDeviceCommandsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/commands',\n ...options\n});\n\n/**\n * Delete the command manifest of a device type\n *\n * Clears the declared command manifest. Devices of this type then reject every command with 422 until a new manifest is declared. Requires the `api:device-types:manage` ability.\n */\nexport const deleteCommandManifest = <ThrowOnError extends boolean = false>(options: Options<DeleteCommandManifestData, ThrowOnError>): RequestResult<DeleteCommandManifestResponses, DeleteCommandManifestErrors, ThrowOnError> => (options.client ?? client).delete<DeleteCommandManifestResponses, DeleteCommandManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}/commands',\n ...options\n});\n\n/**\n * Command manifest for a device type\n *\n * The declared command manifest for the device type with the given slug, or `null` when none is declared. Requires the `api:devices:read` ability.\n */\nexport const getCommandManifest = <ThrowOnError extends boolean = false>(options: Options<GetCommandManifestData, ThrowOnError>): RequestResult<GetCommandManifestResponses, GetCommandManifestErrors, ThrowOnError> => (options.client ?? client).get<GetCommandManifestResponses, GetCommandManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}/commands',\n ...options\n});\n\n/**\n * Declare the command manifest for a device type\n *\n * Replaces the whole command manifest document for the device type (it is a single contract, not a collection of rows). Takes effect immediately: subsequent `POST /api/v1/devices/{id}/command` calls are validated against the new manifest. Requires the `api:device-types:manage` ability.\n */\nexport const updateCommandManifest = <ThrowOnError extends boolean = false>(options: Options<UpdateCommandManifestData, ThrowOnError>): RequestResult<UpdateCommandManifestResponses, UpdateCommandManifestErrors, ThrowOnError> => (options.client ?? client).put<UpdateCommandManifestResponses, UpdateCommandManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}/commands',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List device types in a project\n *\n * Paginated list of the project’s device types. Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter. List items carry manifest **counts** rather than the manifests themselves. Read one type to get those in full.\n *\n * Requires `api:devices:read`.\n */\nexport const listDeviceTypes = <ThrowOnError extends boolean = false>(options: Options<ListDeviceTypesData, ThrowOnError>): RequestResult<ListDeviceTypesResponses, ListDeviceTypesErrors, ThrowOnError> => (options.client ?? client).get<ListDeviceTypesResponses, ListDeviceTypesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types',\n ...options\n});\n\n/**\n * Create a device type\n *\n * Declares a device type in the project. The owning project comes from the path, not the body, because device types are project-scoped and never created org-wide (#47). `version` defaults to `1.0.0`.\n *\n * Requires `api:device-types:manage`.\n */\nexport const createDeviceType = <ThrowOnError extends boolean = false>(options: Options<CreateDeviceTypeData, ThrowOnError>): RequestResult<CreateDeviceTypeResponses, CreateDeviceTypeErrors, ThrowOnError> => (options.client ?? client).post<CreateDeviceTypeResponses, CreateDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete a device type\n *\n * Deletes a device type that no device is using. A device’s type is mandatory (#238) and the foreign key is `RESTRICT`, so a type still assigned to devices is refused with 409 and the count, so reassign or delete those devices first.\n *\n * Requires `api:device-types:manage`.\n */\nexport const deleteDeviceType = <ThrowOnError extends boolean = false>(options: Options<DeleteDeviceTypeData, ThrowOnError>): RequestResult<DeleteDeviceTypeResponses, DeleteDeviceTypeErrors, ThrowOnError> => (options.client ?? client).delete<DeleteDeviceTypeResponses, DeleteDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}',\n ...options\n});\n\n/**\n * Get a device type\n *\n * One device type by slug, with its telemetry, command and USB manifests in full. Requires `api:devices:read`.\n */\nexport const getDeviceType = <ThrowOnError extends boolean = false>(options: Options<GetDeviceTypeData, ThrowOnError>): RequestResult<GetDeviceTypeResponses, GetDeviceTypeErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceTypeResponses, GetDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}',\n ...options\n});\n\n/**\n * Update a device type\n *\n * Partial update: every field is optional and only the ones sent change. The slug is the identifier and cannot be changed; create a new type instead. Sending a manifest replaces it wholesale rather than merging into it.\n *\n * Requires `api:device-types:manage`.\n */\nexport const updateDeviceType = <ThrowOnError extends boolean = false>(options: Options<UpdateDeviceTypeData, ThrowOnError>): RequestResult<UpdateDeviceTypeResponses, UpdateDeviceTypeErrors, ThrowOnError> => (options.client ?? client).patch<UpdateDeviceTypeResponses, UpdateDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List webhook subscriptions\n *\n * Paginated list of webhook subscriptions across every project this token is scoped to. Requires the `api:webhooks:read` ability.\n */\nexport const listWebhooks = <ThrowOnError extends boolean = false>(options?: Options<ListWebhooksData, ThrowOnError>): RequestResult<ListWebhooksResponses, ListWebhooksErrors, ThrowOnError> => (options?.client ?? client).get<ListWebhooksResponses, ListWebhooksErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks',\n ...options\n});\n\n/**\n * Create a webhook subscription\n *\n * Registers an endpoint that receives signed device events for the given project. The response includes the HMAC signing `secret` **exactly once**. Store it now; it cannot be retrieved again (delete and recreate the subscription to rotate it). URLs must be https in production and must not target private/internal addresses. Requires the `api:webhooks:manage` ability.\n */\nexport const createWebhook = <ThrowOnError extends boolean = false>(options?: Options<CreateWebhookData, ThrowOnError>): RequestResult<CreateWebhookResponses, CreateWebhookErrors, ThrowOnError> => (options?.client ?? client).post<CreateWebhookResponses, CreateWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers\n }\n});\n\n/**\n * Delete a webhook subscription\n *\n * Deletes the subscription and its delivery log. Requires the `api:webhooks:manage` ability.\n */\nexport const deleteWebhook = <ThrowOnError extends boolean = false>(options: Options<DeleteWebhookData, ThrowOnError>): RequestResult<DeleteWebhookResponses, DeleteWebhookErrors, ThrowOnError> => (options.client ?? client).delete<DeleteWebhookResponses, DeleteWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}',\n ...options\n});\n\n/**\n * Get a webhook subscription\n *\n * Returns the subscription with the given UUID (without its secret). Requires the `api:webhooks:read` ability.\n */\nexport const getWebhook = <ThrowOnError extends boolean = false>(options: Options<GetWebhookData, ThrowOnError>): RequestResult<GetWebhookResponses, GetWebhookErrors, ThrowOnError> => (options.client ?? client).get<GetWebhookResponses, GetWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}',\n ...options\n});\n\n/**\n * Update a webhook subscription\n *\n * Updates the URL, event-type filter and/or enabled flag. Re-enabling a subscription resets its failure counter. Requires the `api:webhooks:manage` ability.\n */\nexport const updateWebhook = <ThrowOnError extends boolean = false>(options: Options<UpdateWebhookData, ThrowOnError>): RequestResult<UpdateWebhookResponses, UpdateWebhookErrors, ThrowOnError> => (options.client ?? client).patch<UpdateWebhookResponses, UpdateWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List deliveries for a webhook subscription\n *\n * Attempt log of recent deliveries (newest first): status, attempt count, last HTTP status / error, and retry schedule. Requires the `api:webhooks:read` ability.\n */\nexport const listWebhookDeliveries = <ThrowOnError extends boolean = false>(options: Options<ListWebhookDeliveriesData, ThrowOnError>): RequestResult<ListWebhookDeliveriesResponses, ListWebhookDeliveriesErrors, ThrowOnError> => (options.client ?? client).get<ListWebhookDeliveriesResponses, ListWebhookDeliveriesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}/deliveries',\n ...options\n});\n","/**\n * Typed errors. The `/api/v1` surface returns several different error envelope\n * shapes; {@link normalizeError} folds them all into one typed hierarchy so\n * callers can `catch` a specific class instead of inspecting status codes:\n *\n * - standard `{ errors: [{ code, message, field }] }`\n * - device-RPC (502) `{ errors: [{ code, message }] }` (no `field`)\n * - firmware (409) `{ error, message }` (e.g. BUNDLE_ALREADY_EXISTS)\n * - validation (422) `{ errors: [{ message, rule, field }] }`\n * - bare auth (401) `{ errors: [{ message }] }` (no `code`)\n */\n\nexport interface OrbitErrorOptions {\n status?: number\n code?: string\n field?: string | null\n body?: unknown\n response?: Response\n cause?: unknown\n}\n\n/** Base class for every error thrown by the SDK. */\nexport class OrbitError extends Error {\n /** HTTP status, when the failure came from a response. */\n readonly status?: number\n /** Stable machine-readable code (e.g. `E_RESOURCE_NOT_FOUND`), when present. */\n readonly code?: string\n /** Offending field for validation errors, when present. */\n readonly field?: string | null\n /** Raw parsed response body. */\n readonly body?: unknown\n /** The raw `Response`, when one was received. */\n readonly response?: Response\n\n constructor(message: string, options: OrbitErrorOptions = {}) {\n super(message, options.cause !== undefined ? { cause: options.cause } : undefined)\n this.name = new.target.name\n this.status = options.status\n this.code = options.code\n this.field = options.field\n this.body = options.body\n this.response = options.response\n }\n}\n\n/** 401, missing/invalid/expired/revoked token. */\nexport class AuthenticationError extends OrbitError {}\n/** 403, the token is missing the required ability. */\nexport class InsufficientScopeError extends OrbitError {}\n/**\n * 404, resource not found. Note: a 404 on an id you believe exists usually\n * means it is outside this token's project scope, not that it is truly absent.\n */\nexport class ResourceNotFoundError extends OrbitError {}\n/** 400, malformed request (bad query param, missing form field, …). */\nexport class BadRequestError extends OrbitError {}\n\n/** One field error inside a 422 envelope. */\nexport interface ValidationFieldError {\n /** The human-readable failure for this field. */\n message: string\n /** Dot path of the offending field (e.g. `manifest.version`), when known. */\n field: string | null\n}\n\n/**\n * 422, request-body validation failed. `fieldErrors` carries every entry of\n * the envelope (`E_VALIDATION_FAILURE` emits one per field), while `message`\n * and `field` reflect the first one.\n */\nexport class ValidationError extends OrbitError {\n readonly fieldErrors: ValidationFieldError[]\n constructor(message: string, options: OrbitErrorOptions & { fieldErrors?: ValidationFieldError[] } = {}) {\n super(message, options)\n this.fieldErrors = options.fieldErrors ?? []\n }\n}\n/** 409, a firmware bundle with the same projectId+version+compatible exists. */\nexport class BundleExistsError extends OrbitError {}\n/** 502, the device is offline or the command transport failed. */\nexport class DeviceRpcError extends OrbitError {}\n/** 5xx, an unexpected server error. */\nexport class ServerError extends OrbitError {}\n/** The request failed before any response was received (DNS, TLS, offline). */\nexport class NetworkError extends OrbitError {}\n\n/** 429, rate limited. Carries the server's `Retry-After`, when provided. */\nexport class RateLimitError extends OrbitError {\n readonly retryAfterSeconds?: number\n constructor(message: string, options: OrbitErrorOptions & { retryAfterSeconds?: number } = {}) {\n super(message, options)\n this.retryAfterSeconds = options.retryAfterSeconds\n }\n}\n\ninterface ExtractedError {\n code?: string\n message?: string\n field?: string | null\n}\n\n/** Pull `{ code, message, field }` out of any of the supported envelope shapes. */\nfunction extractErrorFields(body: unknown): ExtractedError {\n if (!body || typeof body !== 'object') return {}\n const record = body as Record<string, unknown>\n\n // firmware 409: `{ error, message }`\n if (typeof record.error === 'string') {\n return {\n code: record.error,\n message: typeof record.message === 'string' ? record.message : record.error,\n }\n }\n\n // `{ errors: [...] }` (standard / device-RPC / validation / bare-auth)\n if (Array.isArray(record.errors) && record.errors.length > 0) {\n const first = record.errors[0] as Record<string, unknown>\n return {\n code: typeof first.code === 'string' ? first.code : undefined,\n message: typeof first.message === 'string' ? first.message : undefined,\n field:\n typeof first.field === 'string' ? first.field : first.field === null ? null : undefined,\n }\n }\n\n if (typeof record.message === 'string') return { message: record.message }\n return {}\n}\n\n/** Collect every `{ message, field }` entry of an `{ errors: [...] }` envelope. */\nfunction extractFieldErrors(body: unknown): ValidationFieldError[] {\n if (!body || typeof body !== 'object') return []\n const { errors } = body as Record<string, unknown>\n if (!Array.isArray(errors)) return []\n return errors.flatMap((entry) => {\n const record = entry as Record<string, unknown>\n if (typeof record.message !== 'string') return []\n return [{ message: record.message, field: typeof record.field === 'string' ? record.field : null }]\n })\n}\n\nconst DEFAULT_MESSAGES: Record<number, string> = {\n 400: 'Bad request.',\n 401: 'Authentication failed.',\n 403: 'The token is missing a required ability.',\n 404: 'Resource not found.',\n 409: 'Conflict.',\n 422: 'Request validation failed.',\n 429: 'Rate limited.',\n 502: 'The device is offline or the command transport failed.',\n}\n\n/** Read a numeric `Retry-After` (seconds) from a response, if present. */\nexport function parseRetryAfterSeconds(response?: Response): number | undefined {\n const header = response?.headers?.get('retry-after')\n if (!header) return undefined\n const seconds = Number(header)\n return Number.isFinite(seconds) ? seconds : undefined\n}\n\n/** Map an HTTP status + parsed body into the matching typed error. */\nexport function normalizeError(status: number, body: unknown, response?: Response): OrbitError {\n const { code, message, field } = extractErrorFields(body)\n const base: OrbitErrorOptions = { status, code, field, body, response }\n const msg = message ?? DEFAULT_MESSAGES[status] ?? `Request failed with status ${status}.`\n\n switch (status) {\n case 400:\n return new BadRequestError(msg, base)\n case 401:\n return new AuthenticationError(msg, base)\n case 403:\n return new InsufficientScopeError(msg, base)\n case 404:\n return new ResourceNotFoundError(msg, base)\n case 409:\n return new BundleExistsError(msg, base)\n case 422:\n return new ValidationError(msg, { ...base, fieldErrors: extractFieldErrors(body) })\n case 429:\n return new RateLimitError(msg, { ...base, retryAfterSeconds: parseRetryAfterSeconds(response) })\n case 502:\n return new DeviceRpcError(msg, base)\n default:\n if (status >= 500) return new ServerError(msg, base)\n return new OrbitError(msg, base)\n }\n}\n","/** One page of a cursor-paginated list. */\nexport interface Page<T> {\n data: T[]\n nextCursor: string | null\n hasMore: boolean\n}\n\n/**\n * Turn a cursor-paginated endpoint into an async iterator that yields every\n * item across all pages, fetching the next page lazily as you consume it.\n *\n * ```ts\n * for await (const device of paginate((cursor) => fetchPage(cursor))) { … }\n * ```\n */\nexport async function* paginate<T>(\n fetchPage: (cursor?: string) => Promise<Page<T>>\n): AsyncGenerator<T, void, unknown> {\n let cursor: string | undefined\n for (;;) {\n const page = await fetchPage(cursor)\n for (const item of page.data) yield item\n if (!page.hasMore || !page.nextCursor) return\n cursor = page.nextCursor\n }\n}\n","/**\n * USB/IP passthrough, the two HTTP calls that precede the tunnel.\n *\n * Hand-written, unlike every other operation here: these endpoints are\n * deliberately absent from the published spec (`api/v1/DESIGN.md` scopes the\n * public API to backend integration), so there is nothing to generate from.\n * They stay in the SDK anyway to keep bearer auth, retries and typed errors in\n * one client.\n *\n * The shapes below must therefore be kept in step with the server by hand —\n * `app/controllers/usbip_controller.ts` and `#types/usb_manifest`.\n */\n\nimport type { Client } from './generated/client'\n\nconst SECURITY = [{ scheme: 'bearer', type: 'http' }] as const\n\n/** One VID:PID a peripheral can present. Four lowercase hex digits each. */\nexport interface UsbDeviceIdentifier {\n vid: string\n pid: string\n}\n\n/**\n * One entry of a device type's USB manifest, a peripheral the device is\n * *permitted* to export. This is the declared allowlist, not a live bus scan:\n * an entry here may still be unplugged.\n */\nexport interface UsbExportDefinition {\n /** Stable key for this entry, used in the UI and the audit trail. */\n key: string\n /** Human-readable label (e.g. `SEGGER J-Link`). */\n label: string\n /**\n * Every VID:PID this peripheral can present. A product id is per *mode*, so\n * an entry lists each mode the peripheral may legitimately appear in.\n */\n ids: UsbDeviceIdentifier[]\n /**\n * Restrict to specific physical units by USB serial. VID:PID identifies a\n * *model*, so leaving this unset allows any unit of it.\n */\n serials?: string[]\n description?: string\n}\n\nexport interface UsbExportList {\n exports: UsbExportDefinition[]\n}\n\nexport interface UsbTicketRequest {\n deviceId: string\n /** Four hex digits, as sysfs reports it (`1366`). */\n vid: string\n /** Four hex digits (`1020`). */\n pid: string\n /** Required when the device type pins serials, or to disambiguate units. */\n serial?: string\n}\n\nexport interface UsbTicketResponse {\n /** Single-use, short-lived. Redeemed once on the `/ws/usbip` upgrade. */\n ticket: string\n /** The manifest entry the request matched, what the ticket authorizes. */\n export: UsbExportDefinition\n}\n\nexport function listExportable(client: Client, deviceId: string) {\n return client.get<UsbExportList, unknown, false>({\n security: SECURITY,\n url: `/api/v1/devices/${encodeURIComponent(deviceId)}/usb/exportable`,\n throwOnError: false,\n })\n}\n\nexport function createTicket(client: Client, body: UsbTicketRequest) {\n return client.post<UsbTicketResponse, unknown, false>({\n security: SECURITY,\n url: '/api/v1/usb/ticket',\n body,\n throwOnError: false,\n })\n}\n","/**\n * Device shell: the one HTTP call that precedes the WebSocket session.\n *\n * Hand-written for the same reason as `usb.ts`. These endpoints are\n * deliberately absent from the published spec (`api/v1/DESIGN.md` scopes the\n * public API to backend integration), so there is nothing to generate from.\n * They stay in the SDK anyway to keep bearer auth, retries and typed errors in\n * one client.\n *\n * The shape below is kept in step with\n * `app/controllers/v1/terminal_controller.ts` by hand.\n */\n\nimport type { Client } from './generated/client'\n\nconst SECURITY = [{ scheme: 'bearer', type: 'http' }] as const\n\nexport interface TerminalTicketRequest {\n deviceId: string\n}\n\nexport interface TerminalTicketResponse {\n /** Single-use and short-lived. Redeemed once on the `/ws/terminal` upgrade. */\n ticket: string\n}\n\nexport function createTicket(client: Client, body: TerminalTicketRequest) {\n return client.post<TerminalTicketResponse, unknown, false>({\n security: SECURITY,\n url: '/api/v1/terminal/ticket',\n body,\n throwOnError: false,\n })\n}\n","import { type Client, createClient, createConfig } from './generated/client'\nimport {\n acceptAdmission,\n cancelFirmwareDeployment,\n createDeviceType,\n createProjectAppToken,\n createWebhook,\n deleteDevice,\n deleteDeviceType,\n deleteFirmwareBundle,\n deleteWebhook,\n dismissAdmission,\n execDeviceCommand,\n getAdmission,\n getDevice,\n getDeviceCommandInvocation,\n getDeviceCommands,\n getDeviceType,\n getFirmwareBundle,\n getFirmwareDeployment,\n getIdentity,\n getProject,\n getLatestTelemetry,\n getTelemetryHistory,\n getTelemetryManifest,\n getWebhook,\n listAdmissions,\n listDevices,\n listDeviceTypes,\n listFirmwareBundles,\n listFirmwareDeployments,\n listProjects,\n listWebhookDeliveries,\n listWebhooks,\n rejectAdmission,\n resetDeviceToken,\n rollbackFirmwareDeployment,\n rotateProjectAppToken,\n triggerFirmwareDeployment,\n updateDeviceType,\n updateWebhook,\n uploadFirmware,\n} from './generated/sdk.gen'\nimport type {\n Admission,\n AdmissionAcceptRequest,\n AdmissionAcceptResponse,\n AdmissionListPage,\n CommandInvocation,\n CommandManifest,\n CommandRequest,\n CommandResult,\n Device,\n DeviceListItem,\n DeviceType,\n DeviceTypeCreateRequest,\n DeviceTypeListPage,\n DeviceTypeUpdateRequest,\n DeviceListPage,\n DeviceTokenReset,\n FirmwareBundle,\n FirmwareBundleListPage,\n FirmwareDeployment,\n FirmwareDeploymentListPage,\n FirmwareDeploymentTriggerRequest,\n Identity,\n Project,\n ProjectAppToken,\n ProjectListPage,\n TelemetryManifest,\n TelemetrySample,\n WebhookCreateRequest,\n WebhookCreateResponse,\n WebhookDelivery,\n WebhookDeliveryPage,\n WebhookSubscription,\n WebhookSubscriptionPage,\n WebhookUpdateRequest,\n} from './generated/types.gen'\nimport { NetworkError, OrbitError, normalizeError, parseRetryAfterSeconds } from './errors'\nimport { paginate } from './pagination'\nimport { createTicket, listExportable } from './usb'\nimport type { UsbExportDefinition, UsbTicketRequest, UsbTicketResponse } from './usb'\nimport { createTicket as createTerminalTicket } from './terminal'\nimport type { TerminalTicketRequest, TerminalTicketResponse } from './terminal'\n\nconst DEFAULT_BASE_URL = 'https://orbit.omirion.com'\nconst RETRYABLE_STATUS = new Set([429, 502, 503, 504])\n\nexport interface OrbitClientOptions {\n /** Personal access token (`oat_…`) created in the dashboard at Account → API tokens. */\n token: string\n /** API origin. Defaults to `https://orbit.omirion.com`. */\n baseUrl?: string\n /** Max automatic retries for 429/502/503/504 and network errors. Default `2`. */\n maxRetries?: number\n /** Base exponential-backoff delay in milliseconds. Default `500`. */\n retryBaseDelayMs?: number\n /** Custom `fetch` implementation (e.g. for tests or non-standard runtimes). */\n fetch?: typeof fetch\n}\n\nexport interface ListProjectsParams {\n /** Restrict to one organisation. Narrows the reachable set, never widens it. */\n organizationId?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateProjectsParams {\n organizationId?: string\n limit?: number\n}\n\nexport interface ListDeviceTypesParams {\n /** Exact slug to filter to. */\n slug?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateDeviceTypesParams {\n slug?: string\n limit?: number\n}\n\nexport interface ListDevicesParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n /** Filter to the device with this exact hardware fingerprint (e.g. modem IMEI). */\n fingerprint?: string\n /** Filter to devices whose device type carries this exact slug. */\n deviceTypeSlug?: string\n limit?: number\n cursor?: string\n status?: 'online' | 'offline'\n}\n\nexport interface IterateDevicesParams {\n projectId?: string\n fingerprint?: string\n deviceTypeSlug?: string\n limit?: number\n status?: 'online' | 'offline'\n}\n\ntype AdmissionStatus = Admission['status']\ntype DeploymentStatus = FirmwareDeployment['status']\n\nexport interface ListAdmissionsParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n /** Filter to the request raised by this exact hardware fingerprint. */\n fingerprint?: string\n status?: AdmissionStatus\n limit?: number\n cursor?: string\n}\n\nexport interface IterateAdmissionsParams {\n projectId?: string\n fingerprint?: string\n status?: AdmissionStatus\n limit?: number\n}\n\nexport interface ListDeploymentsParams {\n deviceId?: string\n bundleId?: string\n status?: DeploymentStatus\n limit?: number\n cursor?: string\n}\n\nexport interface IterateDeploymentsParams {\n deviceId?: string\n bundleId?: string\n status?: DeploymentStatus\n limit?: number\n}\n\nexport interface TelemetryHistoryParams {\n /** Window size in hours (1–168). Defaults to the server default (6). */\n hours?: number\n}\n\nexport interface ListBundlesParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n /** Exact hardware target, as recorded on the bundle (e.g. `cm5-gateway`). */\n compatible?: string\n /** Case-insensitive substring of the bundle version (e.g. `0.10`). */\n version?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateBundlesParams {\n projectId?: string\n compatible?: string\n version?: string\n limit?: number\n}\n\nexport interface UploadFirmwareParams {\n /** The bundle file: `.raucb` for `kind: 'rauc'`, `.bin` for `kind: 'mcuboot'`. */\n file: Blob | File\n /** Target project. Must be in this token's scope. */\n projectId: string\n /** Bundle kind. Defaults to `rauc` when omitted. */\n kind?: 'rauc' | 'mcuboot'\n /**\n * Bundle version. Decoded from the binary (RAUC manifest, MCUboot image\n * header) and ignored if sent.\n */\n version?: string\n /**\n * Hardware target. Optional for `rauc`, where it is decoded from the\n * manifest; **required for `mcuboot`**, whose header has no target field.\n */\n compatible?: string\n description?: string | null\n}\n\nexport interface CancelDeploymentParams {\n /**\n * Abort a deployment already in flight (`downloading` / `installing`), where\n * the device may be partway through an install. Required for those states,\n * and recorded on the deployment.\n */\n force?: boolean\n}\n\nexport interface RollbackDeploymentParams {\n /** Free text recorded on the rollback row and echoed to the device. */\n reason?: string\n}\n\nexport interface ListWebhooksParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateWebhooksParams {\n projectId?: string\n limit?: number\n}\n\nexport interface WebhookDeliveriesParams {\n status?: 'pending' | 'delivered' | 'failed'\n limit?: number\n cursor?: string\n}\n\nexport interface IterateWebhookDeliveriesParams {\n status?: 'pending' | 'delivered' | 'failed'\n limit?: number\n}\n\ninterface CallResult<T> {\n data?: T\n error?: unknown\n response?: Response\n}\n\n/**\n * The ergonomic entry point to the Omirion Orbit public API. Wraps the\n * generated transport client with bearer auth, automatic retries with backoff,\n * typed errors, response unwrapping, and cursor auto-pagination.\n *\n * ```ts\n * const orbit = new OrbitClient({ token: process.env.ORBIT_TOKEN! })\n * for await (const device of orbit.devices.iterate({ status: 'online' })) {\n * const sample = await orbit.telemetry.latest(device.id)\n * }\n * ```\n */\nexport class OrbitClient {\n readonly #client: Client\n readonly #maxRetries: number\n readonly #retryBaseDelayMs: number\n\n /**\n * Who this token authenticates as, what it may do, and which projects it\n * reaches. Requires no ability, the cheapest way to verify a token works.\n */\n readonly me: () => Promise<Identity>\n\n /**\n * Projects as a resource. Requires `api:projects:read`; {@link me} returns\n * the same ids under no ability.\n */\n readonly projects: {\n /** A single page of projects. */\n list: (params?: ListProjectsParams) => Promise<ProjectListPage>\n /** Every project across all pages, fetched lazily. */\n iterate: (params?: IterateProjectsParams) => AsyncGenerator<Project, void, unknown>\n /** A project by id. */\n get: (id: string) => Promise<Project>\n /**\n * Provisioning (app) token. `token` is returned once and never again, so\n * persist it from this result rather than expecting to read it back.\n */\n appToken: {\n /** Mint the token. Rejects with 409 when the project already has one. */\n create: (projectId: string) => Promise<ProjectAppToken>\n /**\n * Replace the token, invalidating the previous one. Units still carrying\n * the old value can no longer enrol; already-provisioned devices hold\n * their own device token and are unaffected.\n */\n rotate: (projectId: string) => Promise<ProjectAppToken>\n }\n }\n\n /**\n * Device types: the models a fleet identifies as. Reads need\n * `api:devices:read`; writes need `api:device-types:manage`.\n */\n readonly deviceTypes: {\n /** A single page of device types in a project (counts, not manifests). */\n list: (projectId: string, params?: ListDeviceTypesParams) => Promise<DeviceTypeListPage>\n /** Every device type in a project across all pages, fetched lazily. */\n iterate: (\n projectId: string,\n params?: IterateDeviceTypesParams\n ) => AsyncGenerator<DeviceTypeListPage['data'][number], void, unknown>\n /** One device type by slug, with its manifests in full. */\n get: (projectId: string, slug: string) => Promise<DeviceType>\n /** Declare a device type. Rejects with 409 when the slug is taken. */\n create: (projectId: string, body: DeviceTypeCreateRequest) => Promise<DeviceType>\n /** Partial update. A manifest sent here replaces the stored one wholesale. */\n update: (projectId: string, slug: string, body: DeviceTypeUpdateRequest) => Promise<DeviceType>\n /** Delete a type no device uses. Rejects with 409 while devices still reference it. */\n delete: (projectId: string, slug: string) => Promise<void>\n }\n\n readonly devices: {\n /** A single page of devices. */\n list: (params?: ListDevicesParams) => Promise<DeviceListPage>\n /** A device by id. */\n get: (id: string) => Promise<Device>\n /** Every device across all pages, fetched lazily. */\n iterate: (params?: IterateDevicesParams) => AsyncGenerator<DeviceListItem, void, unknown>\n /** Permanently delete a device (releases its licensing seat; evicts the live agent). */\n delete: (id: string) => Promise<void>\n /**\n * Rotate the device token in place, keeping the device and its history.\n * The new token is returned once and cannot be retrieved again.\n */\n resetToken: (id: string) => Promise<DeviceTokenReset>\n }\n\n readonly admissions: {\n /** A single page of admission (fleet-join) requests. */\n list: (params?: ListAdmissionsParams) => Promise<AdmissionListPage>\n /** Every admission across all pages, fetched lazily. */\n iterate: (params?: IterateAdmissionsParams) => AsyncGenerator<Admission, void, unknown>\n /** An admission request by id. */\n get: (id: string) => Promise<Admission>\n /** Accept a pending admission, provisioning a device (returns admission + device). */\n accept: (id: string, params: AdmissionAcceptRequest) => Promise<AdmissionAcceptResponse>\n /** Reject a pending admission permanently. */\n reject: (id: string) => Promise<Admission>\n /**\n * Dismiss a pending admission without provisioning and without a permanent\n * refusal: the request reopens as `pending` when the same fingerprint next\n * asks to enrol.\n */\n dismiss: (id: string) => Promise<Admission>\n }\n\n readonly telemetry: {\n /** Most recent sample for a device, or `null` if it never reported. */\n latest: (deviceId: string) => Promise<TelemetrySample | null>\n /** A time-window of samples (ascending). */\n history: (deviceId: string, params?: TelemetryHistoryParams) => Promise<TelemetrySample[]>\n /** Metric manifest of a device's type, or `null` if it has none. */\n manifest: (deviceId: string) => Promise<TelemetryManifest | null>\n }\n\n readonly firmware: {\n /** Upload a RAUC bundle; returns the stored bundle. */\n upload: (params: UploadFirmwareParams) => Promise<FirmwareBundle>\n /** Delete a bundle (refused while it has an in-flight deployment). */\n deleteBundle: (id: string) => Promise<void>\n bundles: {\n /** A single page of bundles. */\n list: (params?: ListBundlesParams) => Promise<FirmwareBundleListPage>\n /** Every bundle across all pages, fetched lazily. */\n iterate: (params?: IterateBundlesParams) => AsyncGenerator<FirmwareBundle, void, unknown>\n /** A bundle by id. */\n get: (id: string) => Promise<FirmwareBundle>\n }\n deployments: {\n /** Roll a bundle out to devices; returns one deployment per device. */\n trigger: (params: FirmwareDeploymentTriggerRequest) => Promise<FirmwareDeployment[]>\n /** A single page of deployments. */\n list: (params?: ListDeploymentsParams) => Promise<FirmwareDeploymentListPage>\n /** Every deployment across all pages, fetched lazily. */\n iterate: (\n params?: IterateDeploymentsParams\n ) => AsyncGenerator<FirmwareDeployment, void, unknown>\n /** A deployment by id. Poll it to follow a rollout. */\n get: (id: string) => Promise<FirmwareDeployment>\n /**\n * Cancel a deployment. A `pending` one cancels with no flag; one already\n * in flight needs `force`. A terminal one throws `ConflictError`.\n */\n cancel: (id: string, params?: CancelDeploymentParams) => Promise<FirmwareDeployment>\n /**\n * Roll back a `succeeded` deployment's device to its previous firmware.\n * Returns a *new* deployment (not the source one), so poll it the same\n * way as a forward rollout. Throws `ConflictError` if the source deployment\n * is not `succeeded`, or `ValidationError` if the rollback could not be\n * dispatched (device offline, delivery failed, or unsupported by the\n * device type).\n */\n rollback: (id: string, params?: RollbackDeploymentParams) => Promise<FirmwareDeployment>\n }\n }\n\n readonly commands: {\n /**\n * Run a declared command on a device (name + typed args, no shell).\n *\n * Branch on `queued`: `false` means the device ran it and the result fields\n * are populated; `true` means it was accepted for store-and-forward\n * delivery, so poll {@link OrbitClient.commands.get} until `status` is\n * terminal.\n */\n exec: (deviceId: string, command: CommandRequest) => Promise<CommandResult>\n /** The durable record of one invocation, the pull path for a queued dispatch. */\n get: (deviceId: string, invocationId: string) => Promise<CommandInvocation>\n /** The command manifest of the device's type, or `null` if it declares none. */\n manifest: (deviceId: string) => Promise<CommandManifest | null>\n }\n\n /**\n * USB/IP passthrough. Requires the `api:usb:attach` ability, which grants raw\n * USB access to whatever hardware is attached to the device, so treat a token\n * carrying it accordingly.\n *\n * Hand-written rather than generated; see `usb.ts` for why.\n */\n readonly usb: {\n /** What the device's type permits exporting (the declared allowlist). */\n list: (deviceId: string) => Promise<UsbExportDefinition[]>\n /**\n * Authorize one peripheral and mint a single-use ticket for the tunnel.\n * Short-lived: open `/ws/usbip` with it promptly or mint another.\n */\n ticket: (params: UsbTicketRequest) => Promise<UsbTicketResponse>\n }\n\n /**\n * Device shell. Requires the `api:terminal:open` ability, which is the widest\n * grant the API offers: the agent runs as root, so the session is a root\n * shell bounded by no manifest. Treat a token carrying it accordingly.\n *\n * Hand-written rather than generated; see `terminal.ts` for why.\n */\n readonly terminal: {\n /**\n * Mint a single-use ticket for a shell session. Short-lived: open\n * `/ws/terminal` with it promptly or mint another.\n */\n ticket: (params: TerminalTicketRequest) => Promise<TerminalTicketResponse>\n }\n\n readonly webhooks: {\n /** A single page of webhook subscriptions. */\n list: (params?: ListWebhooksParams) => Promise<WebhookSubscriptionPage>\n /** Every subscription across all pages, fetched lazily. */\n iterate: (params?: IterateWebhooksParams) => AsyncGenerator<WebhookSubscription, void, unknown>\n /** Create a subscription. The signing `secret` is only in this response, store it now. */\n create: (params: WebhookCreateRequest) => Promise<WebhookCreateResponse>\n /** A subscription by id (without its secret). */\n get: (id: string) => Promise<WebhookSubscription>\n /** Update the URL, event-type filter and/or enabled flag. */\n update: (id: string, params: WebhookUpdateRequest) => Promise<WebhookSubscription>\n /** Delete the subscription and its delivery log. */\n delete: (id: string) => Promise<void>\n /** A single page of the subscription's delivery log (newest first). */\n deliveries: (id: string, params?: WebhookDeliveriesParams) => Promise<WebhookDeliveryPage>\n /** Every delivery across all pages, fetched lazily. */\n iterateDeliveries: (\n id: string,\n params?: IterateWebhookDeliveriesParams\n ) => AsyncGenerator<WebhookDelivery, void, unknown>\n }\n\n constructor(options: OrbitClientOptions) {\n if (!options || !options.token) {\n throw new OrbitError('An API token is required to construct OrbitClient.')\n }\n\n this.#client = createClient(\n createConfig({\n baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,\n auth: () => options.token,\n // Without an explicit Accept the server may content-negotiate errors\n // into plain text, outside the JSON envelope the SDK parses.\n headers: { accept: 'application/json' },\n ...(options.fetch ? { fetch: options.fetch } : {}),\n })\n )\n this.#maxRetries = options.maxRetries ?? 2\n this.#retryBaseDelayMs = options.retryBaseDelayMs ?? 500\n\n const client = this.#client\n const run = this.#run.bind(this)\n\n this.me = () => run<Identity>(() => getIdentity({ client, throwOnError: false }))\n\n this.projects = {\n list: (params = {}) =>\n run<ProjectListPage>(() => listProjects({ client, query: params, throwOnError: false })),\n iterate: (params = {}) =>\n paginate<Project>(async (cursor) => {\n const page = await run<ProjectListPage>(() =>\n listProjects({ client, query: { ...params, cursor }, throwOnError: false })\n )\n return { data: page.data, nextCursor: page.meta.nextCursor, hasMore: page.meta.hasMore }\n }),\n get: (id) => run<Project>(() => getProject({ client, path: { id }, throwOnError: false })),\n appToken: {\n create: (projectId) =>\n run<ProjectAppToken>(() =>\n createProjectAppToken({ client, path: { id: projectId }, throwOnError: false })\n ),\n rotate: (projectId) =>\n run<ProjectAppToken>(() =>\n rotateProjectAppToken({ client, path: { id: projectId }, throwOnError: false })\n ),\n },\n }\n\n this.deviceTypes = {\n list: (projectId, params = {}) =>\n run<DeviceTypeListPage>(() =>\n listDeviceTypes({ client, path: { projectId }, query: params, throwOnError: false })\n ),\n iterate: (projectId, params = {}) =>\n paginate<DeviceTypeListPage['data'][number]>(async (cursor) => {\n const page = await run<DeviceTypeListPage>(() =>\n listDeviceTypes({\n client,\n path: { projectId },\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return { data: page.data, nextCursor: page.meta.nextCursor, hasMore: page.meta.hasMore }\n }),\n get: (projectId, slug) =>\n run<DeviceType>(() =>\n getDeviceType({ client, path: { projectId, slug }, throwOnError: false })\n ),\n create: (projectId, body) =>\n run<DeviceType>(() =>\n createDeviceType({ client, path: { projectId }, body, throwOnError: false })\n ),\n update: (projectId, slug, body) =>\n run<DeviceType>(() =>\n updateDeviceType({ client, path: { projectId, slug }, body, throwOnError: false })\n ),\n delete: async (projectId, slug) => {\n await run<unknown>(() =>\n deleteDeviceType({ client, path: { projectId, slug }, throwOnError: false })\n )\n },\n }\n\n this.devices = {\n list: (params = {}) =>\n run<DeviceListPage>(() => listDevices({ client, query: params, throwOnError: false })),\n get: (id) => run<Device>(() => getDevice({ client, path: { id }, throwOnError: false })),\n iterate: (params = {}) =>\n paginate<DeviceListItem>(async (cursor) => {\n const page = await run<DeviceListPage>(() =>\n listDevices({ client, query: { ...params, cursor }, throwOnError: false })\n )\n return { data: page.data, nextCursor: page.meta.nextCursor, hasMore: page.meta.hasMore }\n }),\n delete: async (id) => {\n await run<unknown>(() => deleteDevice({ client, path: { id }, throwOnError: false }))\n },\n resetToken: (id) =>\n run<DeviceTokenReset>(() => resetDeviceToken({ client, path: { id }, throwOnError: false })),\n }\n\n this.admissions = {\n list: (params = {}) =>\n run<AdmissionListPage>(() =>\n listAdmissions({ client, query: params, throwOnError: false })\n ),\n iterate: (params = {}) =>\n paginate<Admission>(async (cursor) => {\n const page = await run<AdmissionListPage>(() =>\n listAdmissions({ client, query: { ...params, cursor }, throwOnError: false })\n )\n return { data: page.data, nextCursor: page.meta.nextCursor, hasMore: page.meta.hasMore }\n }),\n get: (id) =>\n run<Admission>(() => getAdmission({ client, path: { id }, throwOnError: false })),\n accept: (id, params) =>\n run<AdmissionAcceptResponse>(() =>\n acceptAdmission({ client, path: { id }, body: params, throwOnError: false })\n ),\n reject: (id) =>\n run<Admission>(() => rejectAdmission({ client, path: { id }, throwOnError: false })),\n dismiss: (id) =>\n run<Admission>(() => dismissAdmission({ client, path: { id }, throwOnError: false })),\n }\n\n this.telemetry = {\n latest: (deviceId) =>\n run<TelemetrySample | null>(() =>\n getLatestTelemetry({ client, path: { id: deviceId }, throwOnError: false })\n ),\n history: (deviceId, params = {}) =>\n run<{ data: TelemetrySample[] }>(() =>\n getTelemetryHistory({ client, path: { id: deviceId }, query: params, throwOnError: false })\n ).then((result) => result.data),\n manifest: (deviceId) =>\n run<TelemetryManifest | null>(() =>\n getTelemetryManifest({ client, path: { id: deviceId }, throwOnError: false })\n ),\n }\n\n this.firmware = {\n upload: (params) =>\n run<{ bundle: FirmwareBundle }>(() =>\n uploadFirmware({ client, body: params, throwOnError: false })\n ).then((result) => result.bundle),\n deleteBundle: async (id) => {\n await run<unknown>(() => deleteFirmwareBundle({ client, path: { id }, throwOnError: false }))\n },\n bundles: {\n list: (params = {}) =>\n run<FirmwareBundleListPage>(() =>\n listFirmwareBundles({ client, query: params, throwOnError: false })\n ),\n iterate: (params = {}) =>\n paginate<FirmwareBundle>(async (cursor) => {\n const page = await run<FirmwareBundleListPage>(() =>\n listFirmwareBundles({ client, query: { ...params, cursor }, throwOnError: false })\n )\n return { data: page.data, nextCursor: page.meta.nextCursor, hasMore: page.meta.hasMore }\n }),\n get: (id) =>\n run<FirmwareBundle>(() => getFirmwareBundle({ client, path: { id }, throwOnError: false })),\n },\n deployments: {\n trigger: (params) =>\n run<{ deployments: FirmwareDeployment[] }>(() =>\n triggerFirmwareDeployment({ client, body: params, throwOnError: false })\n ).then((result) => result.deployments),\n list: (params = {}) =>\n run<FirmwareDeploymentListPage>(() =>\n listFirmwareDeployments({ client, query: params, throwOnError: false })\n ),\n iterate: (params = {}) =>\n paginate<FirmwareDeployment>(async (cursor) => {\n const page = await run<FirmwareDeploymentListPage>(() =>\n listFirmwareDeployments({ client, query: { ...params, cursor }, throwOnError: false })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n get: (id) =>\n run<FirmwareDeployment>(() =>\n getFirmwareDeployment({ client, path: { id }, throwOnError: false })\n ),\n cancel: (id, params = {}) =>\n run<FirmwareDeployment>(() =>\n cancelFirmwareDeployment({ client, path: { id }, body: params, throwOnError: false })\n ),\n rollback: (id, params = {}) =>\n run<FirmwareDeployment>(() =>\n rollbackFirmwareDeployment({ client, path: { id }, body: params, throwOnError: false })\n ),\n },\n }\n\n this.commands = {\n exec: (deviceId, command) =>\n run<CommandResult>(() =>\n execDeviceCommand({ client, path: { id: deviceId }, body: command, throwOnError: false })\n ),\n get: (deviceId, invocationId) =>\n run<CommandInvocation>(() =>\n getDeviceCommandInvocation({\n client,\n path: { id: deviceId, invocationId },\n throwOnError: false,\n })\n ),\n manifest: (deviceId) =>\n run<CommandManifest | null>(() =>\n getDeviceCommands({ client, path: { id: deviceId }, throwOnError: false })\n ),\n }\n\n this.usb = {\n list: (deviceId) =>\n run<{ exports: UsbExportDefinition[] }>(() => listExportable(client, deviceId)).then(\n (result) => result.exports\n ),\n ticket: (params) => run<UsbTicketResponse>(() => createTicket(client, params)),\n }\n\n this.terminal = {\n ticket: (params) => run<TerminalTicketResponse>(() => createTerminalTicket(client, params)),\n }\n\n this.webhooks = {\n list: (params = {}) =>\n run<WebhookSubscriptionPage>(() =>\n listWebhooks({ client, query: params, throwOnError: false })\n ),\n iterate: (params = {}) =>\n paginate<WebhookSubscription>(async (cursor) => {\n const page = await run<WebhookSubscriptionPage>(() =>\n listWebhooks({ client, query: { ...params, cursor }, throwOnError: false })\n )\n return { data: page.data, nextCursor: page.meta.nextCursor, hasMore: page.meta.hasMore }\n }),\n create: (params) =>\n run<WebhookCreateResponse>(() =>\n createWebhook({ client, body: params, throwOnError: false })\n ),\n get: (id) =>\n run<WebhookSubscription>(() => getWebhook({ client, path: { id }, throwOnError: false })),\n update: (id, params) =>\n run<WebhookSubscription>(() =>\n updateWebhook({ client, path: { id }, body: params, throwOnError: false })\n ),\n delete: async (id) => {\n await run<unknown>(() => deleteWebhook({ client, path: { id }, throwOnError: false }))\n },\n deliveries: (id, params = {}) =>\n run<WebhookDeliveryPage>(() =>\n listWebhookDeliveries({ client, path: { id }, query: params, throwOnError: false })\n ),\n iterateDeliveries: (id, params = {}) =>\n paginate<WebhookDelivery>(async (cursor) => {\n const page = await run<WebhookDeliveryPage>(() =>\n listWebhookDeliveries({\n client,\n path: { id },\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return { data: page.data, nextCursor: page.meta.nextCursor, hasMore: page.meta.hasMore }\n }),\n }\n }\n\n async #run<T>(thunk: () => Promise<CallResult<T>>): Promise<T> {\n let attempt = 0\n for (;;) {\n let result: CallResult<T>\n try {\n result = await thunk()\n } catch (cause) {\n if (attempt < this.#maxRetries) {\n await this.#sleep(this.#backoff(attempt))\n attempt++\n continue\n }\n throw new NetworkError('The request failed before a response was received.', { cause })\n }\n\n const { data, error, response } = result\n const status = response?.status ?? 0\n\n if (error === undefined && status >= 200 && status < 300) {\n return data as T\n }\n\n // No response at all (DNS, TLS or offline). Handled here rather than in\n // the catch above because the generated client *returns* a transport\n // failure rather than throwing it.\n if (response === undefined) {\n if (attempt < this.#maxRetries) {\n await this.#sleep(this.#backoff(attempt))\n attempt++\n continue\n }\n throw new NetworkError('The request failed before a response was received.', {\n cause: error,\n })\n }\n\n if (RETRYABLE_STATUS.has(status) && attempt < this.#maxRetries) {\n const retryAfter = parseRetryAfterSeconds(response)\n await this.#sleep(retryAfter !== undefined ? retryAfter * 1000 : this.#backoff(attempt))\n attempt++\n continue\n }\n\n throw normalizeError(status, error ?? data, response)\n }\n }\n\n #backoff(attempt: number): number {\n const base = this.#retryBaseDelayMs * 2 ** attempt\n // Full jitter keeps retries from synchronising across many clients.\n return Math.floor(base * (0.5 + Math.random() * 0.5))\n }\n\n #sleep(ms: number): Promise<void> {\n if (ms <= 0) return Promise.resolve()\n return new Promise((resolve) => setTimeout(resolve, ms))\n }\n}\n","import type { MetricDefinition, TelemetryManifest, TelemetrySample } from './generated/types.gen'\n\n/**\n * A single telemetry reading joined to its manifest definition. Telemetry\n * samples are keyed by abbreviated, device-type-specific metric keys; the\n * decoder resolves each key to its human label, unit, and type so callers\n * don't have to memorise the manifest.\n */\nexport interface DecodedMetric {\n /** The raw metric key (snake_case) as stored on the sample. */\n key: string\n /** Human-readable label from the manifest, or the key if not in the manifest. */\n label: string\n /** The reading. */\n value: number | boolean | string\n /** Unit of measurement, when the manifest defines one. */\n unit?: string\n /** Value type from the manifest. */\n type?: MetricDefinition['type']\n /** Semantic device class (Home-Assistant convention), when defined. */\n deviceClass?: string\n /** Group key for UI grouping, when defined. */\n group?: string\n /** The full manifest definition, when the key was found in the manifest. */\n definition?: MetricDefinition\n}\n\n/**\n * Decode a telemetry sample's `metrics` map into labelled rows using the\n * device type's manifest (from `client.telemetry.manifest(deviceId)`). Keys absent\n * from the manifest are passed through with the key as the label.\n */\nexport function decodeSample(sample: TelemetrySample, manifest: TelemetryManifest): DecodedMetric[] {\n const byKey = new Map(manifest.metrics.map((metric) => [metric.key, metric]))\n\n return Object.entries(sample.metrics).map(([key, value]) => {\n const definition = byKey.get(key)\n if (!definition) return { key, label: key, value }\n return {\n key,\n label: definition.label,\n value,\n unit: definition.unit,\n type: definition.type,\n deviceClass: definition.deviceClass,\n group: definition.group,\n definition,\n }\n })\n}\n\n/** Like {@link decodeSample}, applied to a history window. */\nexport function decodeSamples(\n samples: TelemetrySample[],\n manifest: TelemetryManifest\n): Array<{ recordedAt: string; metrics: DecodedMetric[] }> {\n return samples.map((sample) => ({\n recordedAt: sample.recordedAt,\n metrics: decodeSample(sample, manifest),\n }))\n}\n","/**\n * Webhook receiver helpers, verify `X-Orbit-Signature` on events pushed by\n * Orbit's outbound webhooks and parse the JSON envelope.\n *\n * The signature is `HMAC-SHA256(secret, `${timestamp}.${rawBody}`)` hex-encoded,\n * where `timestamp` is the `X-Orbit-Timestamp` header (unix seconds) and\n * `rawBody` is the exact request body bytes. Receivers should reject events\n * whose timestamp is more than 300 seconds from their clock (replay window);\n * Orbit re-signs retries with a fresh timestamp.\n *\n * Uses the Web Crypto API, so it works in Node ≥ 18, Deno, Bun, and edge\n * runtimes alike.\n */\n\n/** Default replay tolerance, in seconds. */\nexport const WEBHOOK_REPLAY_TOLERANCE_SECONDS = 300\n\n/** The JSON envelope Orbit POSTs to a webhook endpoint. */\nexport interface OrbitWebhookEvent<TData = Record<string, unknown>> {\n /** Event UUID, the receiver-side idempotency key. */\n id: string\n /** Event type, e.g. `device.online` or `telemetry.metric_changed`. */\n type: string\n /** ISO-8601 emission time. */\n createdAt: string\n /** Project the emitting device belongs to. */\n projectId: string\n /** Event-type-specific payload. */\n data: TData\n}\n\nexport interface VerifyWebhookSignatureParams {\n /** The subscription's signing secret (`whsec_…`, shown once at creation). */\n secret: string\n /** The EXACT raw request body, do not re-serialize parsed JSON. */\n rawBody: string\n /** `X-Orbit-Signature` header (hex). */\n signature: string\n /** `X-Orbit-Timestamp` header (unix seconds). */\n timestamp: number | string\n /** Replay window in seconds. Defaults to {@link WEBHOOK_REPLAY_TOLERANCE_SECONDS}. */\n toleranceSeconds?: number\n /** Override \"now\" (unix seconds), mainly for tests. */\n nowSeconds?: number\n}\n\nasync function hmacSha256Hex(secret: string, message: string): Promise<string> {\n const encoder = new TextEncoder()\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n )\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(message))\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/** Constant-time string equality (over UTF-8 bytes). */\nfunction timingSafeEqual(a: string, b: string): boolean {\n const encoder = new TextEncoder()\n const ab = encoder.encode(a)\n const bb = encoder.encode(b)\n if (ab.length !== bb.length) return false\n let diff = 0\n for (let i = 0; i < ab.length; i++) diff |= (ab[i] ?? 0) ^ (bb[i] ?? 0)\n return diff === 0\n}\n\n/** Compute the hex HMAC-SHA256 signature over `${timestamp}.${rawBody}`. */\nexport async function signWebhookPayload(\n secret: string,\n timestamp: number,\n rawBody: string\n): Promise<string> {\n return hmacSha256Hex(secret, `${timestamp}.${rawBody}`)\n}\n\n/**\n * Verify an Orbit webhook delivery: replay-window check on the timestamp,\n * then a constant-time comparison of the expected signature.\n */\nexport async function verifyWebhookSignature(\n params: VerifyWebhookSignatureParams\n): Promise<boolean> {\n const timestamp = Number(params.timestamp)\n if (!Number.isFinite(timestamp)) return false\n\n const tolerance = params.toleranceSeconds ?? WEBHOOK_REPLAY_TOLERANCE_SECONDS\n const now = params.nowSeconds ?? Math.floor(Date.now() / 1000)\n if (Math.abs(now - timestamp) > tolerance) return false\n\n const expected = await signWebhookPayload(params.secret, timestamp, params.rawBody)\n return timingSafeEqual(expected, params.signature)\n}\n\n/**\n * Verify a delivery and parse its envelope in one call. Returns the typed\n * event, or `null` when the signature (or replay window) check fails.\n */\nexport async function parseWebhookEvent<TData = Record<string, unknown>>(\n params: VerifyWebhookSignatureParams\n): Promise<OrbitWebhookEvent<TData> | null> {\n if (!(await verifyWebhookSignature(params))) return null\n return JSON.parse(params.rawBody) as OrbitWebhookEvent<TData>\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport { acceptAdmission, cancelFirmwareDeployment, createDeviceType, createProjectAppToken, createWebhook, deleteCommandManifest, deleteDevice, deleteDeviceType, deleteFirmwareBundle, deleteWebhook, dismissAdmission, execDeviceCommand, getAdmission, getCommandManifest, getDevice, getDeviceCommandInvocation, getDeviceCommands, getDeviceType, getFirmwareBundle, getFirmwareDeployment, getIdentity, getLatestTelemetry, getProject, getTelemetryHistory, getTelemetryManifest, getWebhook, listAdmissions, listDevices, listDeviceTypes, listFirmwareBundles, listFirmwareDeployments, listProjects, listWebhookDeliveries, listWebhooks, type Options, rejectAdmission, resetDeviceToken, rollbackFirmwareDeployment, rotateProjectAppToken, triggerFirmwareDeployment, updateCommandManifest, updateDeviceType, updateWebhook, uploadFirmware } from './sdk.gen';\nexport type { AcceptAdmissionData, AcceptAdmissionError, AcceptAdmissionErrors, AcceptAdmissionResponse, AcceptAdmissionResponses, Admission, AdmissionAcceptRequest, AdmissionAcceptResponse, AdmissionListPage, CancelFirmwareDeploymentData, CancelFirmwareDeploymentError, CancelFirmwareDeploymentErrors, CancelFirmwareDeploymentResponse, CancelFirmwareDeploymentResponses, ClientOptions, CommandArgDefinition, CommandDefinition, CommandInvocation, CommandManifest, CommandRequest, CommandResult, CreateDeviceTypeData, CreateDeviceTypeError, CreateDeviceTypeErrors, CreateDeviceTypeResponse, CreateDeviceTypeResponses, CreateProjectAppTokenData, CreateProjectAppTokenError, CreateProjectAppTokenErrors, CreateProjectAppTokenResponse, CreateProjectAppTokenResponses, CreateWebhookData, CreateWebhookError, CreateWebhookErrors, CreateWebhookResponse, CreateWebhookResponses, DeleteCommandManifestData, DeleteCommandManifestError, DeleteCommandManifestErrors, DeleteCommandManifestResponses, DeleteDeviceData, DeleteDeviceError, DeleteDeviceErrors, DeleteDeviceResponses, DeleteDeviceTypeData, DeleteDeviceTypeError, DeleteDeviceTypeErrors, DeleteDeviceTypeResponses, DeleteFirmwareBundleData, DeleteFirmwareBundleError, DeleteFirmwareBundleErrors, DeleteFirmwareBundleResponses, DeleteWebhookData, DeleteWebhookError, DeleteWebhookErrors, DeleteWebhookResponses, Device, DeviceListItem, DeviceListPage, DeviceTokenReset, DeviceType, DeviceTypeCreateRequest, DeviceTypeListItem, DeviceTypeListPage, DeviceTypeUpdateRequest, DismissAdmissionData, DismissAdmissionError, DismissAdmissionErrors, DismissAdmissionResponse, DismissAdmissionResponses, ErrorItem, ErrorResponse, ExecDeviceCommandData, ExecDeviceCommandError, ExecDeviceCommandErrors, ExecDeviceCommandResponse, ExecDeviceCommandResponses, FirmwareBundle, FirmwareBundleListPage, FirmwareConflictResponse, FirmwareDeployment, FirmwareDeploymentCancelRequest, FirmwareDeploymentListPage, FirmwareDeploymentRollbackRequest, FirmwareDeploymentTriggerRequest, FirmwareDeploymentTriggerResponse, FirmwareUploadRequest, FirmwareUploadResponse, GetAdmissionData, GetAdmissionError, GetAdmissionErrors, GetAdmissionResponse, GetAdmissionResponses, GetCommandManifestData, GetCommandManifestError, GetCommandManifestErrors, GetCommandManifestResponse, GetCommandManifestResponses, GetDeviceCommandInvocationData, GetDeviceCommandInvocationError, GetDeviceCommandInvocationErrors, GetDeviceCommandInvocationResponse, GetDeviceCommandInvocationResponses, GetDeviceCommandsData, GetDeviceCommandsError, GetDeviceCommandsErrors, GetDeviceCommandsResponse, GetDeviceCommandsResponses, GetDeviceData, GetDeviceError, GetDeviceErrors, GetDeviceResponse, GetDeviceResponses, GetDeviceTypeData, GetDeviceTypeError, GetDeviceTypeErrors, GetDeviceTypeResponse, GetDeviceTypeResponses, GetFirmwareBundleData, GetFirmwareBundleError, GetFirmwareBundleErrors, GetFirmwareBundleResponse, GetFirmwareBundleResponses, GetFirmwareDeploymentData, GetFirmwareDeploymentError, GetFirmwareDeploymentErrors, GetFirmwareDeploymentResponse, GetFirmwareDeploymentResponses, GetIdentityData, GetIdentityError, GetIdentityErrors, GetIdentityResponse, GetIdentityResponses, GetLatestTelemetryData, GetLatestTelemetryError, GetLatestTelemetryErrors, GetLatestTelemetryResponse, GetLatestTelemetryResponses, GetProjectData, GetProjectError, GetProjectErrors, GetProjectResponse, GetProjectResponses, GetTelemetryHistoryData, GetTelemetryHistoryError, GetTelemetryHistoryErrors, GetTelemetryHistoryResponse, GetTelemetryHistoryResponses, GetTelemetryManifestData, GetTelemetryManifestError, GetTelemetryManifestErrors, GetTelemetryManifestResponse, GetTelemetryManifestResponses, GetWebhookData, GetWebhookError, GetWebhookErrors, GetWebhookResponse, GetWebhookResponses, Identity, IdentityProject, IdentityToken, IdentityUser, ListAdmissionsData, ListAdmissionsError, ListAdmissionsErrors, ListAdmissionsResponse, ListAdmissionsResponses, ListDevicesData, ListDevicesError, ListDevicesErrors, ListDevicesResponse, ListDevicesResponses, ListDeviceTypesData, ListDeviceTypesError, ListDeviceTypesErrors, ListDeviceTypesResponse, ListDeviceTypesResponses, ListFirmwareBundlesData, ListFirmwareBundlesError, ListFirmwareBundlesErrors, ListFirmwareBundlesResponse, ListFirmwareBundlesResponses, ListFirmwareDeploymentsData, ListFirmwareDeploymentsError, ListFirmwareDeploymentsErrors, ListFirmwareDeploymentsResponse, ListFirmwareDeploymentsResponses, ListProjectsData, ListProjectsError, ListProjectsErrors, ListProjectsResponse, ListProjectsResponses, ListWebhookDeliveriesData, ListWebhookDeliveriesError, ListWebhookDeliveriesErrors, ListWebhookDeliveriesResponse, ListWebhookDeliveriesResponses, ListWebhooksData, ListWebhooksError, ListWebhooksErrors, ListWebhooksResponse, ListWebhooksResponses, MetricDefinition, MetricGroup, PageMeta, Project, ProjectAppToken, ProjectListPage, RejectAdmissionData, RejectAdmissionError, RejectAdmissionErrors, RejectAdmissionResponse, RejectAdmissionResponses, ResetDeviceTokenData, ResetDeviceTokenError, ResetDeviceTokenErrors, ResetDeviceTokenResponse, ResetDeviceTokenResponses, RollbackFirmwareDeploymentData, RollbackFirmwareDeploymentError, RollbackFirmwareDeploymentErrors, RollbackFirmwareDeploymentResponse, RollbackFirmwareDeploymentResponses, RotateProjectAppTokenData, RotateProjectAppTokenError, RotateProjectAppTokenErrors, RotateProjectAppTokenResponse, RotateProjectAppTokenResponses, TelemetryHistory, TelemetryManifest, TelemetrySample, TriggerFirmwareDeploymentData, TriggerFirmwareDeploymentError, TriggerFirmwareDeploymentErrors, TriggerFirmwareDeploymentResponse, TriggerFirmwareDeploymentResponses, UpdateCommandManifestData, UpdateCommandManifestError, UpdateCommandManifestErrors, UpdateCommandManifestResponse, UpdateCommandManifestResponses, UpdateDeviceTypeData, UpdateDeviceTypeError, UpdateDeviceTypeErrors, UpdateDeviceTypeResponse, UpdateDeviceTypeResponses, UpdateWebhookData, UpdateWebhookError, UpdateWebhookErrors, UpdateWebhookResponse, UpdateWebhookResponses, UploadFirmwareData, UploadFirmwareError, UploadFirmwareErrors, UploadFirmwareResponse, UploadFirmwareResponses, WebhookCreateRequest, WebhookCreateResponse, WebhookDelivery, WebhookDeliveryAttempt, WebhookDeliveryPage, WebhookEventType, WebhookRetryPolicy, WebhookSubscription, WebhookSubscriptionPage, WebhookUpdateRequest } from './types.gen';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/generated/core/bodySerializer.gen.ts","../src/generated/core/serverSentEvents.gen.ts","../src/generated/core/pathSerializer.gen.ts","../src/generated/core/utils.gen.ts","../src/generated/core/auth.gen.ts","../src/generated/client/utils.gen.ts","../src/generated/client/client.gen.ts","../src/generated/client.gen.ts","../src/generated/sdk.gen.ts","../src/errors.ts","../src/pagination.ts","../src/usb.ts","../src/terminal.ts","../src/client.ts","../src/telemetry.ts","../src/webhooks.ts","../src/generated/index.ts"],"names":["joinedValues","config","request","url","client","SECURITY","createTicket"],"mappings":"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","file":"index.cjs","sourcesContent":["// 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\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.replace(/^retry:\\s*/, ''), 10);\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle): '.' | ';' | ',' | '&' => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle): ',' | '|' | '%20' => {\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}): string => {\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): string => {\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}): string => {\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: RegExp = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer): string => {\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}): string => {\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}): unknown {\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 * A unique identifier for the security scheme.\n *\n * Defined only when there are multiple security schemes whose `Auth`\n * shape would otherwise be identical.\n */\n key?: string;\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 = {}): ((queryParams: T) => string) => {\n const querySerializer = (queryParams: T): string => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === 'object') {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join('&');\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (contentType: string | null): Exclude<Config['parseAs'], 'auto'> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return 'stream';\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\n return 'json';\n }\n\n if (cleanContent === 'multipart/form-data') {\n return 'formData';\n }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) => cleanContent.startsWith(type))\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get('Cookie')?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport async function setAuthParams(\n options: Pick<RequestOptions, 'auth' | 'query' | 'security'> & {\n headers: Headers;\n },\n): Promise<void> {\n for (const auth of options.security ?? []) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n }\n}\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === 'function'\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith('/')) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e., their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n /** response may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: 'form',\n },\n object: {\n explode: true,\n style: 'deepObject',\n },\n});\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: 'auto',\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type { Client, Config, RequestOptions, ResolvedRequestOptions } from './types.gen';\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<Request, Response, unknown, ResolvedRequestOptions>();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends 'data' | 'fields' = 'fields',\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams(opts);\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client['request'] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n\n response = await _fetch(request);\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (response.status === 204 || response.headers.get('Content-Length') === '0') {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'json': {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\n case 'stream':\n return opts.responseStyle === 'data'\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === 'json') {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === 'data'\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n url,\n });\n };\n\n const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, 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: Client = createClient(createConfig<ClientOptions2>({ baseUrl: 'https://orbit.omirion.com' }));\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, type ClientMeta, formDataBodySerializer, type Options as Options2, type RequestResult, type TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { AcceptAdmissionData, AcceptAdmissionErrors, AcceptAdmissionResponses, CancelFirmwareDeploymentData, CancelFirmwareDeploymentErrors, CancelFirmwareDeploymentResponses, CreateDeviceTypeData, CreateDeviceTypeErrors, CreateDeviceTypeResponses, CreateProjectAppTokenData, CreateProjectAppTokenErrors, CreateProjectAppTokenResponses, CreateWebhookData, CreateWebhookErrors, CreateWebhookResponses, DeleteCommandManifestData, DeleteCommandManifestErrors, DeleteCommandManifestResponses, DeleteDeviceData, DeleteDeviceErrors, DeleteDeviceResponses, DeleteDeviceTypeData, DeleteDeviceTypeErrors, DeleteDeviceTypeResponses, DeleteFirmwareBundleData, DeleteFirmwareBundleErrors, DeleteFirmwareBundleResponses, DeleteWebhookData, DeleteWebhookErrors, DeleteWebhookResponses, DismissAdmissionData, DismissAdmissionErrors, DismissAdmissionResponses, ExecDeviceCommandData, ExecDeviceCommandErrors, ExecDeviceCommandResponses, GetAdmissionData, GetAdmissionErrors, GetAdmissionResponses, GetCommandManifestData, GetCommandManifestErrors, GetCommandManifestResponses, GetDeviceCommandInvocationData, GetDeviceCommandInvocationErrors, GetDeviceCommandInvocationResponses, GetDeviceCommandsData, GetDeviceCommandsErrors, GetDeviceCommandsResponses, GetDeviceData, GetDeviceErrors, GetDeviceResponses, GetDeviceTypeData, GetDeviceTypeErrors, GetDeviceTypeResponses, GetFirmwareBundleData, GetFirmwareBundleErrors, GetFirmwareBundleResponses, GetFirmwareDeploymentData, GetFirmwareDeploymentErrors, GetFirmwareDeploymentResponses, GetIdentityData, GetIdentityErrors, GetIdentityResponses, GetLatestTelemetryData, GetLatestTelemetryErrors, GetLatestTelemetryResponses, GetProjectData, GetProjectErrors, GetProjectResponses, GetTelemetryHistoryData, GetTelemetryHistoryErrors, GetTelemetryHistoryResponses, GetTelemetryManifestData, GetTelemetryManifestErrors, GetTelemetryManifestResponses, GetWebhookData, GetWebhookErrors, GetWebhookResponses, ListAdmissionsData, ListAdmissionsErrors, ListAdmissionsResponses, ListDevicesData, ListDevicesErrors, ListDevicesResponses, ListDeviceTypesData, ListDeviceTypesErrors, ListDeviceTypesResponses, ListFirmwareBundlesData, ListFirmwareBundlesErrors, ListFirmwareBundlesResponses, ListFirmwareDeploymentsData, ListFirmwareDeploymentsErrors, ListFirmwareDeploymentsResponses, ListProjectsData, ListProjectsErrors, ListProjectsResponses, ListWebhookDeliveriesData, ListWebhookDeliveriesErrors, ListWebhookDeliveriesResponses, ListWebhooksData, ListWebhooksErrors, ListWebhooksResponses, RejectAdmissionData, RejectAdmissionErrors, RejectAdmissionResponses, ResetDeviceTokenData, ResetDeviceTokenErrors, ResetDeviceTokenResponses, RollbackFirmwareDeploymentData, RollbackFirmwareDeploymentErrors, RollbackFirmwareDeploymentResponses, RotateProjectAppTokenData, RotateProjectAppTokenErrors, RotateProjectAppTokenResponses, TriggerFirmwareDeploymentData, TriggerFirmwareDeploymentErrors, TriggerFirmwareDeploymentResponses, UpdateCommandManifestData, UpdateCommandManifestErrors, UpdateCommandManifestResponses, UpdateDeviceTypeData, UpdateDeviceTypeErrors, UpdateDeviceTypeResponses, UpdateWebhookData, UpdateWebhookErrors, UpdateWebhookResponses, UploadFirmwareData, UploadFirmwareErrors, UploadFirmwareResponses } 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?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta;\n};\n\n/**\n * Who this token authenticates as\n *\n * Returns the authenticated user, the presented token’s abilities and project scope, and the projects reachable with both. Requires no ability beyond a valid token. Call it to confirm a token works and to discover the `projectId` values other endpoints accept.\n */\nexport const getIdentity = <ThrowOnError extends boolean = false>(options?: Options<GetIdentityData, ThrowOnError>): RequestResult<GetIdentityResponses, GetIdentityErrors, ThrowOnError> => (options?.client ?? client).get<GetIdentityResponses, GetIdentityErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/me',\n ...options\n});\n\n/**\n * List projects\n *\n * Paginated list of the projects this token reaches (the caller’s organisation access intersected with the token’s project scope). Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter.\n *\n * Requires `api:projects:read`. Discovering project **ids** alone does not: `GET /api/v1/me` returns them under no ability so a token holding none can still address other endpoints. This endpoint reads the project as a resource, so it is gated and grows independently.\n */\nexport const listProjects = <ThrowOnError extends boolean = false>(options?: Options<ListProjectsData, ThrowOnError>): RequestResult<ListProjectsResponses, ListProjectsErrors, ThrowOnError> => (options?.client ?? client).get<ListProjectsResponses, ListProjectsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects',\n ...options\n});\n\n/**\n * Get a project\n *\n * One project by id. Requires `api:projects:read`. A project outside the token’s reach answers 404 rather than 403, so the refusal does not confirm it exists.\n */\nexport const getProject = <ThrowOnError extends boolean = false>(options: Options<GetProjectData, ThrowOnError>): RequestResult<GetProjectResponses, GetProjectErrors, ThrowOnError> => (options.client ?? client).get<GetProjectResponses, GetProjectErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{id}',\n ...options\n});\n\n/**\n * Mint the project provisioning (app) token\n *\n * Mints the `omr_prj_…` token devices present to enrol into this project. The plaintext value is returned **once, in this response, and is never retrievable again**. The server stores only its sha256. Store it before discarding the response.\n *\n * Refuses with 409 when the project already has one; use the rotate endpoint to replace it. Requires `api:projects:manage`, deliberately separate from `api:projects:read`, because an app token admits new devices and so consumes licensing seats.\n */\nexport const createProjectAppToken = <ThrowOnError extends boolean = false>(options: Options<CreateProjectAppTokenData, ThrowOnError>): RequestResult<CreateProjectAppTokenResponses, CreateProjectAppTokenErrors, ThrowOnError> => (options.client ?? client).post<CreateProjectAppTokenResponses, CreateProjectAppTokenErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{id}/app-token',\n ...options\n});\n\n/**\n * Rotate the project provisioning (app) token\n *\n * Issues a fresh `omr_prj_…` token and invalidates the previous one, if any. The plaintext value is returned **once** and never again.\n *\n * **This is destructive for unprovisioned devices.** Any unit still carrying the old token can no longer enrol until it is reflashed or reconfigured; devices that already hold their own device token are unaffected, since enrolment is the only step the app token takes part in. Requires `api:projects:manage`.\n */\nexport const rotateProjectAppToken = <ThrowOnError extends boolean = false>(options: Options<RotateProjectAppTokenData, ThrowOnError>): RequestResult<RotateProjectAppTokenResponses, RotateProjectAppTokenErrors, ThrowOnError> => (options.client ?? client).post<RotateProjectAppTokenResponses, RotateProjectAppTokenErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{id}/app-token/rotate',\n ...options\n});\n\n/**\n * List devices\n *\n * Paginated list of devices across every project this token is scoped to (intersected with the caller's org access). Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter.\n */\nexport const listDevices = <ThrowOnError extends boolean = false>(options?: Options<ListDevicesData, ThrowOnError>): RequestResult<ListDevicesResponses, ListDevicesErrors, ThrowOnError> => (options?.client ?? client).get<ListDevicesResponses, ListDevicesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices',\n ...options\n});\n\n/**\n * Delete a device\n *\n * Permanently removes the device: releases its licensing seat and evicts any live agent (it re-admits on next connect). Must belong to a project this token can manage. Requires the `api:devices:manage` ability.\n */\nexport const deleteDevice = <ThrowOnError extends boolean = false>(options: Options<DeleteDeviceData, ThrowOnError>): RequestResult<DeleteDeviceResponses, DeleteDeviceErrors, ThrowOnError> => (options.client ?? client).delete<DeleteDeviceResponses, DeleteDeviceErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}',\n ...options\n});\n\n/**\n * Get a device\n *\n * Returns the device with the given UUID. Must belong to a project this token can read.\n */\nexport const getDevice = <ThrowOnError extends boolean = false>(options: Options<GetDeviceData, ThrowOnError>): RequestResult<GetDeviceResponses, GetDeviceErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceResponses, GetDeviceErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}',\n ...options\n});\n\n/**\n * Reset a device token\n *\n * Rotates the device token in place, keeping the device id, name, device-type link and history (unlike delete, which throws them away). The previous token is invalidated and any live agent is evicted so it re-admits/reconnects with the new one (a device that lost its token recovers automatically on its next admission). The new token is returned once and cannot be retrieved again. Must belong to a project this token can manage. Requires the `api:devices:manage` ability.\n */\nexport const resetDeviceToken = <ThrowOnError extends boolean = false>(options: Options<ResetDeviceTokenData, ThrowOnError>): RequestResult<ResetDeviceTokenResponses, ResetDeviceTokenErrors, ThrowOnError> => (options.client ?? client).post<ResetDeviceTokenResponses, ResetDeviceTokenErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/token/reset',\n ...options\n});\n\n/**\n * Latest telemetry sample for a device\n *\n * Returns the most recent telemetry sample under `data`, `null` if the device has never reported.\n */\nexport const getLatestTelemetry = <ThrowOnError extends boolean = false>(options: Options<GetLatestTelemetryData, ThrowOnError>): RequestResult<GetLatestTelemetryResponses, GetLatestTelemetryErrors, ThrowOnError> => (options.client ?? client).get<GetLatestTelemetryResponses, GetLatestTelemetryErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/telemetry/latest',\n ...options\n});\n\n/**\n * Telemetry history for a device\n *\n * Returns a time-window of telemetry samples. Defaults to the last 6 hours.\n */\nexport const getTelemetryHistory = <ThrowOnError extends boolean = false>(options: Options<GetTelemetryHistoryData, ThrowOnError>): RequestResult<GetTelemetryHistoryResponses, GetTelemetryHistoryErrors, ThrowOnError> => (options.client ?? client).get<GetTelemetryHistoryResponses, GetTelemetryHistoryErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/telemetry',\n ...options\n});\n\n/**\n * Metric manifest for a device\n *\n * The metric definitions (label, unit, type, range) of the device's type, i.e. the schema its telemetry samples decode against, under `data`. `null` when the device type declares no manifest. Requires the `api:telemetry:read` ability.\n */\nexport const getTelemetryManifest = <ThrowOnError extends boolean = false>(options: Options<GetTelemetryManifestData, ThrowOnError>): RequestResult<GetTelemetryManifestResponses, GetTelemetryManifestErrors, ThrowOnError> => (options.client ?? client).get<GetTelemetryManifestResponses, GetTelemetryManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/telemetry/manifest',\n ...options\n});\n\n/**\n * List admission requests\n *\n * Paginated list of device admission requests across every project this token is scoped to. Filter by `status` (e.g. `pending`) to find requests awaiting review, or by `fingerprint` to resolve the request a specific unit raised. Cursor-based; pass `meta.nextCursor` as the `cursor` query parameter. Requires the `api:admissions:read` ability.\n */\nexport const listAdmissions = <ThrowOnError extends boolean = false>(options?: Options<ListAdmissionsData, ThrowOnError>): RequestResult<ListAdmissionsResponses, ListAdmissionsErrors, ThrowOnError> => (options?.client ?? client).get<ListAdmissionsResponses, ListAdmissionsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions',\n ...options\n});\n\n/**\n * Get an admission request\n *\n * Returns the admission request with the given UUID. Must belong to a project this token can read. Requires the `api:admissions:read` ability.\n */\nexport const getAdmission = <ThrowOnError extends boolean = false>(options: Options<GetAdmissionData, ThrowOnError>): RequestResult<GetAdmissionResponses, GetAdmissionErrors, ThrowOnError> => (options.client ?? client).get<GetAdmissionResponses, GetAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}',\n ...options\n});\n\n/**\n * Accept an admission request\n *\n * Approves a pending admission and provisions a new device in the request’s project. The agent that raised the request receives its device token on its next admission poll. A `deviceTypeId` is required (must belong to the same project). Pass the type resolved from the device’s declared model, or another of the project’s types to override it. Requires the `api:admissions:manage` ability.\n */\nexport const acceptAdmission = <ThrowOnError extends boolean = false>(options: Options<AcceptAdmissionData, ThrowOnError>): RequestResult<AcceptAdmissionResponses, AcceptAdmissionErrors, ThrowOnError> => (options.client ?? client).post<AcceptAdmissionResponses, AcceptAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}/accept',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Reject an admission request\n *\n * Rejects a pending admission permanently. No device is provisioned. Requires the `api:admissions:manage` ability.\n */\nexport const rejectAdmission = <ThrowOnError extends boolean = false>(options: Options<RejectAdmissionData, ThrowOnError>): RequestResult<RejectAdmissionResponses, RejectAdmissionErrors, ThrowOnError> => (options.client ?? client).post<RejectAdmissionResponses, RejectAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}/reject',\n ...options\n});\n\n/**\n * Dismiss an admission request\n *\n * Dismisses a pending admission without provisioning a device and without refusing the unit permanently. Unlike `reject`, this is not a verdict the device has to live with. The next time the same fingerprint asks to enrol, the request reopens as `pending` and appears in the queue again. Use it for \"not now\" (an unrecognised unit, a fleet you are not ready to admit); use `reject` when the unit must stay out.\n *\n * Requires the `api:admissions:manage` ability.\n */\nexport const dismissAdmission = <ThrowOnError extends boolean = false>(options: Options<DismissAdmissionData, ThrowOnError>): RequestResult<DismissAdmissionResponses, DismissAdmissionErrors, ThrowOnError> => (options.client ?? client).post<DismissAdmissionResponses, DismissAdmissionErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/admissions/{id}/dismiss',\n ...options\n});\n\n/**\n * Upload a firmware bundle\n *\n * Streams a firmware bundle into project storage and creates the corresponding `firmware_bundles` row. Returns the bundle envelope (id, kind, sha256, sizeBytes, …). The `kind` field selects the image format: `rauc` (default, `.raucb`, Linux A/B) or `mcuboot` (signed MCUboot `.bin` for microcontrollers). Version and hardware target are decoded from the binary where it carries them (rauc: both from the manifest; mcuboot: version from the image header). The `version`/`compatible` form fields are only needed for what the binary lacks (mcuboot target). To roll the bundle out to devices, trigger a deployment via `POST /api/v1/firmware/deployments`. 512 MB hard cap.\n */\nexport const uploadFirmware = <ThrowOnError extends boolean = false>(options?: Options<UploadFirmwareData, ThrowOnError>): RequestResult<UploadFirmwareResponses, UploadFirmwareErrors, ThrowOnError> => (options?.client ?? client).post<UploadFirmwareResponses, UploadFirmwareErrors, ThrowOnError>({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/upload',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options?.headers\n }\n});\n\n/**\n * List firmware bundles\n *\n * Paginated list of firmware bundles across every project this token is scoped to. Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter. Filter by `projectId`, by exact `compatible` target, or by a `version` substring to find the bundle to roll out. Deleted bundles are omitted; their deployment history remains readable through the deployments endpoints. Requires the `api:firmware:read` ability.\n */\nexport const listFirmwareBundles = <ThrowOnError extends boolean = false>(options?: Options<ListFirmwareBundlesData, ThrowOnError>): RequestResult<ListFirmwareBundlesResponses, ListFirmwareBundlesErrors, ThrowOnError> => (options?.client ?? client).get<ListFirmwareBundlesResponses, ListFirmwareBundlesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/bundles',\n ...options\n});\n\n/**\n * Delete a firmware bundle\n *\n * Soft-deletes a bundle and frees its stored object; deployment history is retained for audit. A bundle with a genuinely in-flight deployment is refused (409) until it is canceled. Must belong to a project this token can write. Requires the `api:firmware:write` ability.\n */\nexport const deleteFirmwareBundle = <ThrowOnError extends boolean = false>(options: Options<DeleteFirmwareBundleData, ThrowOnError>): RequestResult<DeleteFirmwareBundleResponses, DeleteFirmwareBundleErrors, ThrowOnError> => (options.client ?? client).delete<DeleteFirmwareBundleResponses, DeleteFirmwareBundleErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/bundles/{id}',\n ...options\n});\n\n/**\n * Get a firmware bundle\n *\n * Returns one bundle: kind, version, hardware target, size and `sha256`, so a caller can verify what it is about to roll out. Requires the `api:firmware:read` ability.\n */\nexport const getFirmwareBundle = <ThrowOnError extends boolean = false>(options: Options<GetFirmwareBundleData, ThrowOnError>): RequestResult<GetFirmwareBundleResponses, GetFirmwareBundleErrors, ThrowOnError> => (options.client ?? client).get<GetFirmwareBundleResponses, GetFirmwareBundleErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/bundles/{id}',\n ...options\n});\n\n/**\n * List firmware deployments\n *\n * Paginated list of firmware deployments across every project this token is scoped to, newest activity first via the opaque cursor. Filter by `deviceId`, `bundleId` or `status` to track a rollout. Requires the `api:firmware:read` ability.\n */\nexport const listFirmwareDeployments = <ThrowOnError extends boolean = false>(options?: Options<ListFirmwareDeploymentsData, ThrowOnError>): RequestResult<ListFirmwareDeploymentsResponses, ListFirmwareDeploymentsErrors, ThrowOnError> => (options?.client ?? client).get<ListFirmwareDeploymentsResponses, ListFirmwareDeploymentsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments',\n ...options\n});\n\n/**\n * Trigger a firmware deployment\n *\n * Creates one deployment per device for the given bundle and dispatches it immediately to any device that is currently online; offline devices stay `pending` and install on their next reconnect. Every device must belong to the bundle’s project. A device whose recorded hardware compatibility contradicts the bundle’s declared target is rejected (422) before any deployment row is created. Requires the `api:firmware:write` ability.\n */\nexport const triggerFirmwareDeployment = <ThrowOnError extends boolean = false>(options?: Options<TriggerFirmwareDeploymentData, ThrowOnError>): RequestResult<TriggerFirmwareDeploymentResponses, TriggerFirmwareDeploymentErrors, ThrowOnError> => (options?.client ?? client).post<TriggerFirmwareDeploymentResponses, TriggerFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers\n }\n});\n\n/**\n * Get a firmware deployment\n *\n * Returns the current state of a single deployment (status, phase, progress %, and any error or install result reported by the agent). Poll this to follow a rollout. Requires the `api:firmware:read` ability.\n */\nexport const getFirmwareDeployment = <ThrowOnError extends boolean = false>(options: Options<GetFirmwareDeploymentData, ThrowOnError>): RequestResult<GetFirmwareDeploymentResponses, GetFirmwareDeploymentErrors, ThrowOnError> => (options.client ?? client).get<GetFirmwareDeploymentResponses, GetFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments/{id}',\n ...options\n});\n\n/**\n * Cancel a firmware deployment\n *\n * Marks a deployment `canceled`. A `pending` deployment (the device has not picked it up yet) cancels with no flag. One already in flight (`downloading` / `installing`) requires `force: true`, because the device may be partway through an install; the forced abort is recorded in the deployment’s `error` and `message`. A deployment that already reached a terminal state is refused with 409. Cancelling is what unblocks deleting the bundle, which is refused while a deployment is genuinely in flight. Requires the `api:firmware:write` ability.\n */\nexport const cancelFirmwareDeployment = <ThrowOnError extends boolean = false>(options: Options<CancelFirmwareDeploymentData, ThrowOnError>): RequestResult<CancelFirmwareDeploymentResponses, CancelFirmwareDeploymentErrors, ThrowOnError> => (options.client ?? client).post<CancelFirmwareDeploymentResponses, CancelFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments/{id}/cancel',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Roll back a firmware deployment\n *\n * Issues a real rollback for the device behind a succeeded deployment: a RAUC slot-status flip on a gateway, or an MCUboot test-swap back to the previous image on an MCU. This creates and returns a *new* synthetic deployment row (not the source one) so a poller can follow the rollback the same way it follows a forward rollout. The device must be online, since the bootloader state being flipped is only valid right now. Requires the `api:firmware:write` ability.\n */\nexport const rollbackFirmwareDeployment = <ThrowOnError extends boolean = false>(options: Options<RollbackFirmwareDeploymentData, ThrowOnError>): RequestResult<RollbackFirmwareDeploymentResponses, RollbackFirmwareDeploymentErrors, ThrowOnError> => (options.client ?? client).post<RollbackFirmwareDeploymentResponses, RollbackFirmwareDeploymentErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/firmware/deployments/{id}/rollback',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Run a command on a device\n *\n * Dispatches a declared command (name + typed args) to the device over the MQTT data plane. The command is validated against the device type's command manifest before publishing: an undeclared name, a missing required arg, or a wrongly-typed arg is rejected with 422. See `GET /api/v1/devices/{id}/commands` for the declared set. Delivery follows the device type's dispatch profile: `interactive` devices run it now and the call returns 200 with the result (or 502 if offline); `queued` devices accept it for store-and-forward delivery on their next check-in and the call returns 202 with `{ invocationId, status, queued: true }`. Poll `GET /api/v1/devices/{id}/commands/{invocationId}` for the eventual result. Requires the `api:command:exec` ability and project scope over the device. Audited.\n */\nexport const execDeviceCommand = <ThrowOnError extends boolean = false>(options: Options<ExecDeviceCommandData, ThrowOnError>): RequestResult<ExecDeviceCommandResponses, ExecDeviceCommandErrors, ThrowOnError> => (options.client ?? client).post<ExecDeviceCommandResponses, ExecDeviceCommandErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/command',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Get a command invocation result\n *\n * Returns the durable record of a single command invocation. Its lifecycle `status` and, once terminal, its result (`success`, `exitCode`, `output`, `error`, `durationMs`). This is the pull counterpart to the `command.result` webhook. Poll it after a queued (202) dispatch to retrieve the eventual outcome, so a missed or unsubscribed webhook delivery never makes a recorded result unrecoverable. The `invocationId` is the value returned by `POST /api/v1/devices/{id}/command`. Requires the `api:command:exec` ability and project scope over the device.\n */\nexport const getDeviceCommandInvocation = <ThrowOnError extends boolean = false>(options: Options<GetDeviceCommandInvocationData, ThrowOnError>): RequestResult<GetDeviceCommandInvocationResponses, GetDeviceCommandInvocationErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceCommandInvocationResponses, GetDeviceCommandInvocationErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/commands/{invocationId}',\n ...options\n});\n\n/**\n * Commands a device supports\n *\n * The command manifest of the device's type, i.e. the declared commands (name + typed arg schema) that `POST /api/v1/devices/{id}/command` will accept for this device. `null` when the device type declares no manifest (every command is then rejected with 422). Requires the `api:devices:read` ability.\n */\nexport const getDeviceCommands = <ThrowOnError extends boolean = false>(options: Options<GetDeviceCommandsData, ThrowOnError>): RequestResult<GetDeviceCommandsResponses, GetDeviceCommandsErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceCommandsResponses, GetDeviceCommandsErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/devices/{id}/commands',\n ...options\n});\n\n/**\n * Delete the command manifest of a device type\n *\n * Clears the declared command manifest. Devices of this type then reject every command with 422 until a new manifest is declared. Requires the `api:device-types:manage` ability.\n */\nexport const deleteCommandManifest = <ThrowOnError extends boolean = false>(options: Options<DeleteCommandManifestData, ThrowOnError>): RequestResult<DeleteCommandManifestResponses, DeleteCommandManifestErrors, ThrowOnError> => (options.client ?? client).delete<DeleteCommandManifestResponses, DeleteCommandManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}/commands',\n ...options\n});\n\n/**\n * Command manifest for a device type\n *\n * The declared command manifest for the device type with the given slug, or `null` when none is declared. Requires the `api:devices:read` ability.\n */\nexport const getCommandManifest = <ThrowOnError extends boolean = false>(options: Options<GetCommandManifestData, ThrowOnError>): RequestResult<GetCommandManifestResponses, GetCommandManifestErrors, ThrowOnError> => (options.client ?? client).get<GetCommandManifestResponses, GetCommandManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}/commands',\n ...options\n});\n\n/**\n * Declare the command manifest for a device type\n *\n * Replaces the whole command manifest document for the device type (it is a single contract, not a collection of rows). Takes effect immediately. Subsequent `POST /api/v1/devices/{id}/command` calls are validated against the new manifest. Requires the `api:device-types:manage` ability.\n */\nexport const updateCommandManifest = <ThrowOnError extends boolean = false>(options: Options<UpdateCommandManifestData, ThrowOnError>): RequestResult<UpdateCommandManifestResponses, UpdateCommandManifestErrors, ThrowOnError> => (options.client ?? client).put<UpdateCommandManifestResponses, UpdateCommandManifestErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}/commands',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List device types in a project\n *\n * Paginated list of the project’s device types. Cursor-based; pass `meta.nextCursor` from the previous page as the `cursor` query parameter. List items carry manifest **counts** rather than the manifests themselves. Read one type to get those in full.\n *\n * Requires `api:devices:read`.\n */\nexport const listDeviceTypes = <ThrowOnError extends boolean = false>(options: Options<ListDeviceTypesData, ThrowOnError>): RequestResult<ListDeviceTypesResponses, ListDeviceTypesErrors, ThrowOnError> => (options.client ?? client).get<ListDeviceTypesResponses, ListDeviceTypesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types',\n ...options\n});\n\n/**\n * Create a device type\n *\n * Declares a device type in the project. The owning project comes from the path, not the body, because device types are project-scoped and never created org-wide (#47). `version` defaults to `1.0.0`.\n *\n * Requires `api:device-types:manage`.\n */\nexport const createDeviceType = <ThrowOnError extends boolean = false>(options: Options<CreateDeviceTypeData, ThrowOnError>): RequestResult<CreateDeviceTypeResponses, CreateDeviceTypeErrors, ThrowOnError> => (options.client ?? client).post<CreateDeviceTypeResponses, CreateDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete a device type\n *\n * Deletes a device type that no device is using. A device’s type is mandatory (#238) and the foreign key is `RESTRICT`, so a type still assigned to devices is refused with 409 and the count, so reassign or delete those devices first.\n *\n * Requires `api:device-types:manage`.\n */\nexport const deleteDeviceType = <ThrowOnError extends boolean = false>(options: Options<DeleteDeviceTypeData, ThrowOnError>): RequestResult<DeleteDeviceTypeResponses, DeleteDeviceTypeErrors, ThrowOnError> => (options.client ?? client).delete<DeleteDeviceTypeResponses, DeleteDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}',\n ...options\n});\n\n/**\n * Get a device type\n *\n * One device type by slug, with its telemetry, command and USB manifests in full. Requires `api:devices:read`.\n */\nexport const getDeviceType = <ThrowOnError extends boolean = false>(options: Options<GetDeviceTypeData, ThrowOnError>): RequestResult<GetDeviceTypeResponses, GetDeviceTypeErrors, ThrowOnError> => (options.client ?? client).get<GetDeviceTypeResponses, GetDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}',\n ...options\n});\n\n/**\n * Update a device type\n *\n * Partial update. Every field is optional and only the ones sent change. The slug is the identifier and cannot be changed; create a new type instead. Sending a manifest replaces it wholesale rather than merging into it.\n *\n * Requires `api:device-types:manage`.\n */\nexport const updateDeviceType = <ThrowOnError extends boolean = false>(options: Options<UpdateDeviceTypeData, ThrowOnError>): RequestResult<UpdateDeviceTypeResponses, UpdateDeviceTypeErrors, ThrowOnError> => (options.client ?? client).patch<UpdateDeviceTypeResponses, UpdateDeviceTypeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/projects/{projectId}/device-types/{slug}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List webhook subscriptions\n *\n * Paginated list of webhook subscriptions across every project this token is scoped to. Requires the `api:webhooks:read` ability.\n */\nexport const listWebhooks = <ThrowOnError extends boolean = false>(options?: Options<ListWebhooksData, ThrowOnError>): RequestResult<ListWebhooksResponses, ListWebhooksErrors, ThrowOnError> => (options?.client ?? client).get<ListWebhooksResponses, ListWebhooksErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks',\n ...options\n});\n\n/**\n * Create a webhook subscription\n *\n * Registers an endpoint that receives signed device events for the given project. The response includes the HMAC signing `secret` **exactly once**. Store it now; it cannot be retrieved again (delete and recreate the subscription to rotate it). URLs must be https in production and must not target private/internal addresses. Requires the `api:webhooks:manage` ability.\n */\nexport const createWebhook = <ThrowOnError extends boolean = false>(options?: Options<CreateWebhookData, ThrowOnError>): RequestResult<CreateWebhookResponses, CreateWebhookErrors, ThrowOnError> => (options?.client ?? client).post<CreateWebhookResponses, CreateWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers\n }\n});\n\n/**\n * Delete a webhook subscription\n *\n * Deletes the subscription and its delivery log. Requires the `api:webhooks:manage` ability.\n */\nexport const deleteWebhook = <ThrowOnError extends boolean = false>(options: Options<DeleteWebhookData, ThrowOnError>): RequestResult<DeleteWebhookResponses, DeleteWebhookErrors, ThrowOnError> => (options.client ?? client).delete<DeleteWebhookResponses, DeleteWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}',\n ...options\n});\n\n/**\n * Get a webhook subscription\n *\n * Returns the subscription with the given UUID (without its secret). Requires the `api:webhooks:read` ability.\n */\nexport const getWebhook = <ThrowOnError extends boolean = false>(options: Options<GetWebhookData, ThrowOnError>): RequestResult<GetWebhookResponses, GetWebhookErrors, ThrowOnError> => (options.client ?? client).get<GetWebhookResponses, GetWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}',\n ...options\n});\n\n/**\n * Update a webhook subscription\n *\n * Updates the URL, event-type filter and/or enabled flag. Re-enabling a subscription resets its failure counter. Requires the `api:webhooks:manage` ability.\n */\nexport const updateWebhook = <ThrowOnError extends boolean = false>(options: Options<UpdateWebhookData, ThrowOnError>): RequestResult<UpdateWebhookResponses, UpdateWebhookErrors, ThrowOnError> => (options.client ?? client).patch<UpdateWebhookResponses, UpdateWebhookErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * List deliveries for a webhook subscription\n *\n * Attempt log of recent deliveries (newest first): status, attempt count, last HTTP status / error, and retry schedule. Requires the `api:webhooks:read` ability.\n */\nexport const listWebhookDeliveries = <ThrowOnError extends boolean = false>(options: Options<ListWebhookDeliveriesData, ThrowOnError>): RequestResult<ListWebhookDeliveriesResponses, ListWebhookDeliveriesErrors, ThrowOnError> => (options.client ?? client).get<ListWebhookDeliveriesResponses, ListWebhookDeliveriesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api/v1/webhooks/{id}/deliveries',\n ...options\n});\n","/**\n * Typed errors. The server renders every `/api/v1` error as the standard\n * `{ errors: [{ code, message, field }] }` envelope; {@link normalizeError}\n * maps it into one typed hierarchy so callers can `catch` a specific class\n * instead of inspecting status codes. The class is chosen by `code` where one\n * status carries several (409), by status otherwise.\n */\n\nexport interface OrbitErrorOptions {\n status?: number\n code?: string\n field?: string | null\n body?: unknown\n response?: Response\n cause?: unknown\n}\n\n/** Base class for every error thrown by the SDK. */\nexport class OrbitError extends Error {\n /** HTTP status, when the failure came from a response. */\n readonly status?: number\n /** Stable machine-readable code (e.g. `E_RESOURCE_NOT_FOUND`), when present. */\n readonly code?: string\n /** Offending field for validation errors, when present. */\n readonly field?: string | null\n /** Raw parsed response body. */\n readonly body?: unknown\n /** The raw `Response`, when one was received. */\n readonly response?: Response\n\n constructor(message: string, options: OrbitErrorOptions = {}) {\n super(message, options.cause !== undefined ? { cause: options.cause } : undefined)\n this.name = new.target.name\n this.status = options.status\n this.code = options.code\n this.field = options.field\n this.body = options.body\n this.response = options.response\n }\n}\n\n/** 401, missing/invalid/expired/revoked token. */\nexport class AuthenticationError extends OrbitError {}\n/** 403, the token is missing the required ability. */\nexport class InsufficientScopeError extends OrbitError {}\n/**\n * 404, resource not found. Note: a 404 on an id you believe exists usually\n * means it is outside this token's project scope, not that it is truly absent.\n */\nexport class ResourceNotFoundError extends OrbitError {}\n/** 400, malformed request (bad query param, missing form field, …). */\nexport class BadRequestError extends OrbitError {}\n\n/** One field error inside a 422 envelope. */\nexport interface ValidationFieldError {\n /** The human-readable failure for this field. */\n message: string\n /** Dot path of the offending field (e.g. `manifest.version`), when known. */\n field: string | null\n}\n\n/**\n * 422, request-body validation failed. `fieldErrors` carries every entry of\n * the envelope (`E_VALIDATION_FAILURE` emits one per field), while `message`\n * and `field` reflect the first one.\n */\nexport class ValidationError extends OrbitError {\n readonly fieldErrors: ValidationFieldError[]\n constructor(message: string, options: OrbitErrorOptions & { fieldErrors?: ValidationFieldError[] } = {}) {\n super(message, options)\n this.fieldErrors = options.fieldErrors ?? []\n }\n}\n/**\n * 409, the request conflicts with the resource's current state (cancelling a\n * deployment already in a terminal state, rolling back a deployment that did\n * not succeed, deleting a bundle with an in-flight deployment, accepting an\n * admission that was already reviewed, ...).\n */\nexport class ConflictError extends OrbitError {}\n/**\n * 409 `E_BUNDLE_ALREADY_EXISTS`, a firmware bundle with the same\n * projectId+version+compatible exists.\n */\nexport class BundleExistsError extends ConflictError {}\n/** 502, the device is offline or the command transport failed. */\nexport class DeviceRpcError extends OrbitError {}\n/** 5xx, an unexpected server error. */\nexport class ServerError extends OrbitError {}\n/** The request failed before any response was received (DNS, TLS, offline). */\nexport class NetworkError extends OrbitError {}\n\n/** 429, rate limited. Carries the server's `Retry-After`, when provided. */\nexport class RateLimitError extends OrbitError {\n readonly retryAfterSeconds?: number\n constructor(message: string, options: OrbitErrorOptions & { retryAfterSeconds?: number } = {}) {\n super(message, options)\n this.retryAfterSeconds = options.retryAfterSeconds\n }\n}\n\ninterface ExtractedError {\n code?: string\n message?: string\n field?: string | null\n}\n\n/** Pull `{ code, message, field }` out of the `{ errors: [...] }` envelope. */\nfunction extractErrorFields(body: unknown): ExtractedError {\n if (!body || typeof body !== 'object') return {}\n const record = body as Record<string, unknown>\n\n if (Array.isArray(record.errors) && record.errors.length > 0) {\n const first = record.errors[0] as Record<string, unknown>\n return {\n code: typeof first.code === 'string' ? first.code : undefined,\n message: typeof first.message === 'string' ? first.message : undefined,\n field:\n typeof first.field === 'string' ? first.field : first.field === null ? null : undefined,\n }\n }\n\n if (typeof record.message === 'string') return { message: record.message }\n return {}\n}\n\n/** Collect every `{ message, field }` entry of an `{ errors: [...] }` envelope. */\nfunction extractFieldErrors(body: unknown): ValidationFieldError[] {\n if (!body || typeof body !== 'object') return []\n const { errors } = body as Record<string, unknown>\n if (!Array.isArray(errors)) return []\n return errors.flatMap((entry) => {\n const record = entry as Record<string, unknown>\n if (typeof record.message !== 'string') return []\n return [{ message: record.message, field: typeof record.field === 'string' ? record.field : null }]\n })\n}\n\nconst DEFAULT_MESSAGES: Record<number, string> = {\n 400: 'Bad request.',\n 401: 'Authentication failed.',\n 403: 'The token is missing a required ability.',\n 404: 'Resource not found.',\n 409: 'Conflict.',\n 422: 'Request validation failed.',\n 429: 'Rate limited.',\n 502: 'The device is offline or the command transport failed.',\n}\n\n/** Read a numeric `Retry-After` (seconds) from a response, if present. */\nexport function parseRetryAfterSeconds(response?: Response): number | undefined {\n const header = response?.headers?.get('retry-after')\n if (!header) return undefined\n const seconds = Number(header)\n return Number.isFinite(seconds) ? seconds : undefined\n}\n\n/** Map an HTTP status + parsed body into the matching typed error. */\nexport function normalizeError(status: number, body: unknown, response?: Response): OrbitError {\n const { code, message, field } = extractErrorFields(body)\n const base: OrbitErrorOptions = { status, code, field, body, response }\n const msg = message ?? DEFAULT_MESSAGES[status] ?? `Request failed with status ${status}.`\n\n switch (status) {\n case 400:\n return new BadRequestError(msg, base)\n case 401:\n return new AuthenticationError(msg, base)\n case 403:\n return new InsufficientScopeError(msg, base)\n case 404:\n return new ResourceNotFoundError(msg, base)\n case 409:\n return code === 'E_BUNDLE_ALREADY_EXISTS'\n ? new BundleExistsError(msg, base)\n : new ConflictError(msg, base)\n case 422:\n return new ValidationError(msg, { ...base, fieldErrors: extractFieldErrors(body) })\n case 429:\n return new RateLimitError(msg, { ...base, retryAfterSeconds: parseRetryAfterSeconds(response) })\n case 502:\n return new DeviceRpcError(msg, base)\n default:\n if (status >= 500) return new ServerError(msg, base)\n return new OrbitError(msg, base)\n }\n}\n","/** One page of a cursor-paginated list. */\nexport interface Page<T> {\n data: T[]\n nextCursor: string | null\n hasMore: boolean\n}\n\n/**\n * Turn a cursor-paginated endpoint into an async iterator that yields every\n * item across all pages, fetching the next page lazily as you consume it.\n *\n * ```ts\n * for await (const device of paginate((cursor) => fetchPage(cursor))) { … }\n * ```\n */\nexport async function* paginate<T>(\n fetchPage: (cursor?: string) => Promise<Page<T>>\n): AsyncGenerator<T, void, unknown> {\n let cursor: string | undefined\n for (;;) {\n const page = await fetchPage(cursor)\n for (const item of page.data) yield item\n if (!page.hasMore || !page.nextCursor) return\n cursor = page.nextCursor\n }\n}\n","/**\n * USB/IP passthrough, the two HTTP calls that precede the tunnel.\n *\n * Hand-written, unlike every other operation here: these endpoints are\n * deliberately absent from the published spec (`docs/architecture/api/v1-design.md` scopes the\n * public API to backend integration), so there is nothing to generate from.\n * They stay in the SDK anyway to keep bearer auth, retries and typed errors in\n * one client.\n *\n * The shapes below must therefore be kept in step with the server by hand,\n * against `app/controllers/usbip_controller.ts` and `#types/usb_manifest`.\n */\n\nimport type { Client } from './generated/client'\n\nconst SECURITY = [{ scheme: 'bearer', type: 'http' }] as const\n\n/** One VID:PID a peripheral can present. Four lowercase hex digits each. */\nexport interface UsbDeviceIdentifier {\n vid: string\n pid: string\n}\n\n/**\n * One entry of a device type's USB manifest, a peripheral the device is\n * *permitted* to export. This is the declared allowlist, not a live bus scan:\n * an entry here may still be unplugged.\n */\nexport interface UsbExportDefinition {\n /** Stable key for this entry, used in the UI and the audit trail. */\n key: string\n /** Human-readable label (e.g. `SEGGER J-Link`). */\n label: string\n /**\n * Every VID:PID this peripheral can present. A product id is per *mode*, so\n * an entry lists each mode the peripheral may legitimately appear in.\n */\n ids: UsbDeviceIdentifier[]\n /**\n * Restrict to specific physical units by USB serial. VID:PID identifies a\n * *model*, so leaving this unset allows any unit of it.\n */\n serials?: string[]\n description?: string\n}\n\n/** The wire envelope of `GET /devices/:id/usb/exportable`, the list under `data`. */\nexport interface UsbExportList {\n data: UsbExportDefinition[]\n}\n\nexport interface UsbTicketRequest {\n deviceId: string\n /** Four hex digits, as sysfs reports it (`1366`). */\n vid: string\n /** Four hex digits (`1020`). */\n pid: string\n /** Required when the device type pins serials, or to disambiguate units. */\n serial?: string\n}\n\nexport interface UsbTicketResponse {\n /** Single-use, short-lived. Redeemed once on the `/ws/usbip` upgrade. */\n ticket: string\n /** The manifest entry the request matched, what the ticket authorizes. */\n export: UsbExportDefinition\n}\n\nexport function listExportable(client: Client, deviceId: string) {\n return client.get<{ 200: UsbExportList }, unknown, false>({\n security: SECURITY,\n url: `/api/v1/devices/${encodeURIComponent(deviceId)}/usb/exportable`,\n throwOnError: false,\n })\n}\n\nexport function createTicket(client: Client, body: UsbTicketRequest) {\n return client.post<{ 200: { data: UsbTicketResponse } }, unknown, false>({\n security: SECURITY,\n url: '/api/v1/usb/ticket',\n body,\n throwOnError: false,\n })\n}\n","/**\n * Device shell: the one HTTP call that precedes the WebSocket session.\n *\n * Hand-written for the same reason as `usb.ts`. These endpoints are\n * deliberately absent from the published spec (`docs/architecture/api/v1-design.md` scopes the\n * public API to backend integration), so there is nothing to generate from.\n * They stay in the SDK anyway to keep bearer auth, retries and typed errors in\n * one client.\n *\n * The shape below is kept in step with\n * `app/controllers/v1/terminal_controller.ts` by hand.\n */\n\nimport type { Client } from './generated/client'\n\nconst SECURITY = [{ scheme: 'bearer', type: 'http' }] as const\n\nexport interface TerminalTicketRequest {\n deviceId: string\n}\n\nexport interface TerminalTicketResponse {\n /** Single-use and short-lived. Redeemed once on the `/ws/terminal` upgrade. */\n ticket: string\n}\n\nexport function createTicket(client: Client, body: TerminalTicketRequest) {\n return client.post<{ 200: { data: TerminalTicketResponse } }, unknown, false>({\n security: SECURITY,\n url: '/api/v1/terminal/ticket',\n body,\n throwOnError: false,\n })\n}\n","import { type Client, createClient, createConfig } from './generated/client'\nimport {\n acceptAdmission,\n cancelFirmwareDeployment,\n createDeviceType,\n createProjectAppToken,\n createWebhook,\n deleteDevice,\n deleteDeviceType,\n deleteFirmwareBundle,\n deleteWebhook,\n dismissAdmission,\n execDeviceCommand,\n getAdmission,\n getDevice,\n getDeviceCommandInvocation,\n getDeviceCommands,\n getDeviceType,\n getFirmwareBundle,\n getFirmwareDeployment,\n getIdentity,\n getProject,\n getLatestTelemetry,\n getTelemetryHistory,\n getTelemetryManifest,\n getWebhook,\n listAdmissions,\n listDevices,\n listDeviceTypes,\n listFirmwareBundles,\n listFirmwareDeployments,\n listProjects,\n listWebhookDeliveries,\n listWebhooks,\n rejectAdmission,\n resetDeviceToken,\n rollbackFirmwareDeployment,\n rotateProjectAppToken,\n triggerFirmwareDeployment,\n updateDeviceType,\n updateWebhook,\n uploadFirmware,\n} from './generated/sdk.gen'\nimport type {\n Admission,\n AdmissionAcceptRequest,\n AdmissionAcceptance,\n AdmissionListPage,\n CommandInvocation,\n CommandManifest,\n CommandManifestResponse,\n CommandRequest,\n CommandResult,\n Device,\n DeviceListItem,\n DeviceType,\n DeviceTypeCreateRequest,\n DeviceTypeListPage,\n DeviceTypeUpdateRequest,\n DeviceListPage,\n DeviceTokenReset,\n FirmwareBundle,\n FirmwareBundleListPage,\n FirmwareDeployment,\n FirmwareDeploymentListPage,\n FirmwareDeploymentTriggerRequest,\n Identity,\n Project,\n ProjectAppToken,\n ProjectListPage,\n LatestTelemetryResponse,\n TelemetryManifest,\n TelemetryManifestResponse,\n TelemetrySample,\n WebhookCreateRequest,\n WebhookCreated,\n WebhookDelivery,\n WebhookDeliveryPage,\n WebhookSubscription,\n WebhookSubscriptionPage,\n WebhookUpdateRequest,\n IdentityResponse,\n ProjectResponse,\n ProjectAppTokenResponse,\n DeviceTypeResponse,\n DeviceResponse,\n DeviceTokenResetResponse,\n AdmissionResponse,\n AdmissionAcceptanceResponse,\n FirmwareBundleResponse,\n FirmwareDeploymentResponse,\n CommandResultResponse,\n CommandInvocationResponse,\n WebhookSubscriptionResponse,\n WebhookCreatedResponse,\n TelemetryHistoryResponse,\n FirmwareDeploymentsResponse,\n} from './generated/types.gen'\nimport { NetworkError, OrbitError, normalizeError, parseRetryAfterSeconds } from './errors'\nimport { paginate } from './pagination'\nimport { createTicket, listExportable } from './usb'\nimport type { UsbExportDefinition, UsbExportList, UsbTicketRequest, UsbTicketResponse } from './usb'\nimport { createTicket as createTerminalTicket } from './terminal'\nimport type { TerminalTicketRequest, TerminalTicketResponse } from './terminal'\n\nconst DEFAULT_BASE_URL = 'https://orbit.omirion.com'\nconst RETRYABLE_STATUS = new Set([429, 502, 503, 504])\n\nexport interface OrbitClientOptions {\n /** Personal access token (`oat_…`) created in the dashboard at Account → API tokens. */\n token: string\n /** API origin. Defaults to `https://orbit.omirion.com`. */\n baseUrl?: string\n /** Max automatic retries for 429/502/503/504 and network errors. Default `2`. */\n maxRetries?: number\n /** Base exponential-backoff delay in milliseconds. Default `500`. */\n retryBaseDelayMs?: number\n /** Custom `fetch` implementation (e.g. for tests or non-standard runtimes). */\n fetch?: typeof fetch\n}\n\nexport interface ListProjectsParams {\n /** Restrict to one organisation. Narrows the reachable set, never widens it. */\n organizationId?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateProjectsParams {\n organizationId?: string\n limit?: number\n}\n\nexport interface ListDeviceTypesParams {\n /** Exact slug to filter to. */\n slug?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateDeviceTypesParams {\n slug?: string\n limit?: number\n}\n\nexport interface ListDevicesParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n /** Filter to the device with this exact hardware fingerprint (e.g. modem IMEI). */\n fingerprint?: string\n /** Filter to devices whose device type carries this exact slug. */\n deviceTypeSlug?: string\n limit?: number\n cursor?: string\n status?: 'online' | 'offline'\n}\n\nexport interface IterateDevicesParams {\n projectId?: string\n fingerprint?: string\n deviceTypeSlug?: string\n limit?: number\n status?: 'online' | 'offline'\n}\n\ntype AdmissionStatus = Admission['status']\ntype DeploymentStatus = FirmwareDeployment['status']\n\nexport interface ListAdmissionsParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n /** Filter to the request raised by this exact hardware fingerprint. */\n fingerprint?: string\n status?: AdmissionStatus\n limit?: number\n cursor?: string\n}\n\nexport interface IterateAdmissionsParams {\n projectId?: string\n fingerprint?: string\n status?: AdmissionStatus\n limit?: number\n}\n\nexport interface ListDeploymentsParams {\n deviceId?: string\n bundleId?: string\n status?: DeploymentStatus\n limit?: number\n cursor?: string\n}\n\nexport interface IterateDeploymentsParams {\n deviceId?: string\n bundleId?: string\n status?: DeploymentStatus\n limit?: number\n}\n\nexport interface TelemetryHistoryParams {\n /** Window size in hours (1–168). Defaults to the server default (6). */\n hours?: number\n}\n\nexport interface ListBundlesParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n /** Exact hardware target, as recorded on the bundle (e.g. `cm5-gateway`). */\n compatible?: string\n /** Case-insensitive substring of the bundle version (e.g. `0.10`). */\n version?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateBundlesParams {\n projectId?: string\n compatible?: string\n version?: string\n limit?: number\n}\n\nexport interface UploadFirmwareParams {\n /** The bundle file: `.raucb` for `kind: 'rauc'`, `.bin` for `kind: 'mcuboot'`. */\n file: Blob | File\n /** Target project. Must be in this token's scope. */\n projectId: string\n /** Bundle kind. Defaults to `rauc` when omitted. */\n kind?: 'rauc' | 'mcuboot'\n /**\n * Bundle version. Decoded from the binary (RAUC manifest, MCUboot image\n * header) and ignored if sent.\n */\n version?: string\n /**\n * Hardware target. Optional for `rauc`, where it is decoded from the\n * manifest; **required for `mcuboot`**, whose header has no target field.\n */\n compatible?: string\n description?: string | null\n}\n\nexport interface CancelDeploymentParams {\n /**\n * Abort a deployment already in flight (`downloading` / `installing`), where\n * the device may be partway through an install. Required for those states,\n * and recorded on the deployment.\n */\n force?: boolean\n}\n\nexport interface RollbackDeploymentParams {\n /** Free text recorded on the rollback row and echoed to the device. */\n reason?: string\n}\n\nexport interface ListWebhooksParams {\n /** Restrict to one project (must be in this token's scope). */\n projectId?: string\n limit?: number\n cursor?: string\n}\n\nexport interface IterateWebhooksParams {\n projectId?: string\n limit?: number\n}\n\nexport interface WebhookDeliveriesParams {\n status?: 'pending' | 'delivered' | 'failed'\n limit?: number\n cursor?: string\n}\n\nexport interface IterateWebhookDeliveriesParams {\n status?: 'pending' | 'delivered' | 'failed'\n limit?: number\n}\n\ninterface CallResult<T> {\n data?: T\n error?: unknown\n response?: Response\n}\n\n/**\n * The ergonomic entry point to the Omirion Orbit public API. Wraps the\n * generated transport client with bearer auth, automatic retries with backoff,\n * typed errors, response unwrapping, and cursor auto-pagination.\n *\n * ```ts\n * const orbit = new OrbitClient({ token: process.env.ORBIT_TOKEN! })\n * for await (const device of orbit.devices.iterate({ status: 'online' })) {\n * const sample = await orbit.telemetry.latest(device.id)\n * }\n * ```\n */\nexport class OrbitClient {\n readonly #client: Client\n readonly #maxRetries: number\n readonly #retryBaseDelayMs: number\n\n /**\n * Who this token authenticates as, what it may do, and which projects it\n * reaches. Requires no ability, the cheapest way to verify a token works.\n */\n readonly me: () => Promise<Identity>\n\n /**\n * Projects as a resource. Requires `api:projects:read`; {@link me} returns\n * the same ids under no ability.\n */\n readonly projects: {\n /** A single page of projects. */\n list: (params?: ListProjectsParams) => Promise<ProjectListPage>\n /** Every project across all pages, fetched lazily. */\n iterate: (params?: IterateProjectsParams) => AsyncGenerator<Project, void, unknown>\n /** A project by id. */\n get: (id: string) => Promise<Project>\n /**\n * Provisioning (app) token. `token` is returned once and never again, so\n * persist it from this result rather than expecting to read it back.\n */\n appToken: {\n /** Mint the token. Rejects with 409 when the project already has one. */\n create: (projectId: string) => Promise<ProjectAppToken>\n /**\n * Replace the token, invalidating the previous one. Units still carrying\n * the old value can no longer enrol; already-provisioned devices hold\n * their own device token and are unaffected.\n */\n rotate: (projectId: string) => Promise<ProjectAppToken>\n }\n }\n\n /**\n * Device types: the models a fleet identifies as. Reads need\n * `api:devices:read`; writes need `api:device-types:manage`.\n */\n readonly deviceTypes: {\n /** A single page of device types in a project (counts, not manifests). */\n list: (projectId: string, params?: ListDeviceTypesParams) => Promise<DeviceTypeListPage>\n /** Every device type in a project across all pages, fetched lazily. */\n iterate: (\n projectId: string,\n params?: IterateDeviceTypesParams\n ) => AsyncGenerator<DeviceTypeListPage['data'][number], void, unknown>\n /** One device type by slug, with its manifests in full. */\n get: (projectId: string, slug: string) => Promise<DeviceType>\n /** Declare a device type. Rejects with 409 when the slug is taken. */\n create: (projectId: string, body: DeviceTypeCreateRequest) => Promise<DeviceType>\n /** Partial update. A manifest sent here replaces the stored one wholesale. */\n update: (projectId: string, slug: string, body: DeviceTypeUpdateRequest) => Promise<DeviceType>\n /** Delete a type no device uses. Rejects with 409 while devices still reference it. */\n delete: (projectId: string, slug: string) => Promise<void>\n }\n\n readonly devices: {\n /** A single page of devices. */\n list: (params?: ListDevicesParams) => Promise<DeviceListPage>\n /** A device by id. */\n get: (id: string) => Promise<Device>\n /** Every device across all pages, fetched lazily. */\n iterate: (params?: IterateDevicesParams) => AsyncGenerator<DeviceListItem, void, unknown>\n /** Permanently delete a device (releases its licensing seat; evicts the live agent). */\n delete: (id: string) => Promise<void>\n /**\n * Rotate the device token in place, keeping the device and its history.\n * The new token is returned once and cannot be retrieved again.\n */\n resetToken: (id: string) => Promise<DeviceTokenReset>\n }\n\n readonly admissions: {\n /** A single page of admission (fleet-join) requests. */\n list: (params?: ListAdmissionsParams) => Promise<AdmissionListPage>\n /** Every admission across all pages, fetched lazily. */\n iterate: (params?: IterateAdmissionsParams) => AsyncGenerator<Admission, void, unknown>\n /** An admission request by id. */\n get: (id: string) => Promise<Admission>\n /** Accept a pending admission, provisioning a device (returns admission + device). */\n accept: (id: string, params: AdmissionAcceptRequest) => Promise<AdmissionAcceptance>\n /** Reject a pending admission permanently. */\n reject: (id: string) => Promise<Admission>\n /**\n * Dismiss a pending admission without provisioning and without a permanent\n * refusal: the request reopens as `pending` when the same fingerprint next\n * asks to enrol.\n */\n dismiss: (id: string) => Promise<Admission>\n }\n\n readonly telemetry: {\n /** Most recent sample for a device, or `null` if it never reported. */\n latest: (deviceId: string) => Promise<TelemetrySample | null>\n /** A time-window of samples (ascending). */\n history: (deviceId: string, params?: TelemetryHistoryParams) => Promise<TelemetrySample[]>\n /** Metric manifest of a device's type, or `null` if it has none. */\n manifest: (deviceId: string) => Promise<TelemetryManifest | null>\n }\n\n readonly firmware: {\n /** Upload a RAUC bundle; returns the stored bundle. */\n upload: (params: UploadFirmwareParams) => Promise<FirmwareBundle>\n /** Delete a bundle (refused while it has an in-flight deployment). */\n deleteBundle: (id: string) => Promise<void>\n bundles: {\n /** A single page of bundles. */\n list: (params?: ListBundlesParams) => Promise<FirmwareBundleListPage>\n /** Every bundle across all pages, fetched lazily. */\n iterate: (params?: IterateBundlesParams) => AsyncGenerator<FirmwareBundle, void, unknown>\n /** A bundle by id. */\n get: (id: string) => Promise<FirmwareBundle>\n }\n deployments: {\n /** Roll a bundle out to devices; returns one deployment per device. */\n trigger: (params: FirmwareDeploymentTriggerRequest) => Promise<FirmwareDeployment[]>\n /** A single page of deployments. */\n list: (params?: ListDeploymentsParams) => Promise<FirmwareDeploymentListPage>\n /** Every deployment across all pages, fetched lazily. */\n iterate: (\n params?: IterateDeploymentsParams\n ) => AsyncGenerator<FirmwareDeployment, void, unknown>\n /** A deployment by id. Poll it to follow a rollout. */\n get: (id: string) => Promise<FirmwareDeployment>\n /**\n * Cancel a deployment. A `pending` one cancels with no flag; one already\n * in flight needs `force`. A terminal one throws `ConflictError`.\n */\n cancel: (id: string, params?: CancelDeploymentParams) => Promise<FirmwareDeployment>\n /**\n * Roll back a `succeeded` deployment's device to its previous firmware.\n * Returns a *new* deployment (not the source one), so poll it the same\n * way as a forward rollout. Throws `ConflictError` if the source deployment\n * is not `succeeded`, or `ValidationError` if the rollback could not be\n * dispatched (device offline, delivery failed, or unsupported by the\n * device type).\n */\n rollback: (id: string, params?: RollbackDeploymentParams) => Promise<FirmwareDeployment>\n }\n }\n\n readonly commands: {\n /**\n * Run a declared command on a device (name + typed args, no shell).\n *\n * Branch on `queued`: `false` means the device ran it and the result fields\n * are populated; `true` means it was accepted for store-and-forward\n * delivery, so poll {@link OrbitClient.commands.get} until `status` is\n * terminal.\n */\n exec: (deviceId: string, command: CommandRequest) => Promise<CommandResult>\n /** The durable record of one invocation, the pull path for a queued dispatch. */\n get: (deviceId: string, invocationId: string) => Promise<CommandInvocation>\n /** The command manifest of the device's type, or `null` if it declares none. */\n manifest: (deviceId: string) => Promise<CommandManifest | null>\n }\n\n /**\n * USB/IP passthrough. Requires the `api:usb:attach` ability, which grants raw\n * USB access to whatever hardware is attached to the device, so treat a token\n * carrying it accordingly.\n *\n * Hand-written rather than generated; see `usb.ts` for why.\n */\n readonly usb: {\n /** What the device's type permits exporting (the declared allowlist). */\n list: (deviceId: string) => Promise<UsbExportDefinition[]>\n /**\n * Authorize one peripheral and mint a single-use ticket for the tunnel.\n * Short-lived: open `/ws/usbip` with it promptly or mint another.\n */\n ticket: (params: UsbTicketRequest) => Promise<UsbTicketResponse>\n }\n\n /**\n * Device shell. Requires the `api:terminal:open` ability, which is the widest\n * grant the API offers: the agent runs as root, so the session is a root\n * shell bounded by no manifest. Treat a token carrying it accordingly.\n *\n * Hand-written rather than generated; see `terminal.ts` for why.\n */\n readonly terminal: {\n /**\n * Mint a single-use ticket for a shell session. Short-lived: open\n * `/ws/terminal` with it promptly or mint another.\n */\n ticket: (params: TerminalTicketRequest) => Promise<TerminalTicketResponse>\n }\n\n readonly webhooks: {\n /** A single page of webhook subscriptions. */\n list: (params?: ListWebhooksParams) => Promise<WebhookSubscriptionPage>\n /** Every subscription across all pages, fetched lazily. */\n iterate: (params?: IterateWebhooksParams) => AsyncGenerator<WebhookSubscription, void, unknown>\n /** Create a subscription. The signing `secret` is only in this response, store it now. */\n create: (params: WebhookCreateRequest) => Promise<WebhookCreated>\n /** A subscription by id (without its secret). */\n get: (id: string) => Promise<WebhookSubscription>\n /** Update the URL, event-type filter and/or enabled flag. */\n update: (id: string, params: WebhookUpdateRequest) => Promise<WebhookSubscription>\n /** Delete the subscription and its delivery log. */\n delete: (id: string) => Promise<void>\n /** A single page of the subscription's delivery log (newest first). */\n deliveries: (id: string, params?: WebhookDeliveriesParams) => Promise<WebhookDeliveryPage>\n /** Every delivery across all pages, fetched lazily. */\n iterateDeliveries: (\n id: string,\n params?: IterateWebhookDeliveriesParams\n ) => AsyncGenerator<WebhookDelivery, void, unknown>\n }\n\n constructor(options: OrbitClientOptions) {\n if (!options || !options.token) {\n throw new OrbitError('An API token is required to construct OrbitClient.')\n }\n\n this.#client = createClient(\n createConfig({\n baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,\n auth: () => options.token,\n // Without an explicit Accept the server may content-negotiate errors\n // into plain text, outside the JSON envelope the SDK parses.\n headers: { accept: 'application/json' },\n ...(options.fetch ? { fetch: options.fetch } : {}),\n })\n )\n this.#maxRetries = options.maxRetries ?? 2\n this.#retryBaseDelayMs = options.retryBaseDelayMs ?? 500\n\n const client = this.#client\n const run = this.#run.bind(this)\n\n this.me = () =>\n run<IdentityResponse>(() => getIdentity({ client, throwOnError: false })).then(\n (result) => result.data\n )\n\n this.projects = {\n list: (params = {}) =>\n run<ProjectListPage>(() => listProjects({ client, query: params, throwOnError: false })),\n iterate: (params = {}) =>\n paginate<Project>(async (cursor) => {\n const page = await run<ProjectListPage>(() =>\n listProjects({\n client,\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n get: (id) =>\n run<ProjectResponse>(() => getProject({ client, path: { id }, throwOnError: false })).then(\n (result) => result.data\n ),\n appToken: {\n create: (projectId) =>\n run<ProjectAppTokenResponse>(() =>\n createProjectAppToken({\n client,\n path: { id: projectId },\n throwOnError: false,\n })\n ).then((result) => result.data),\n rotate: (projectId) =>\n run<ProjectAppTokenResponse>(() =>\n rotateProjectAppToken({\n client,\n path: { id: projectId },\n throwOnError: false,\n })\n ).then((result) => result.data),\n },\n }\n\n this.deviceTypes = {\n list: (projectId, params = {}) =>\n run<DeviceTypeListPage>(() =>\n listDeviceTypes({\n client,\n path: { projectId },\n query: params,\n throwOnError: false,\n })\n ),\n iterate: (projectId, params = {}) =>\n paginate<DeviceTypeListPage['data'][number]>(async (cursor) => {\n const page = await run<DeviceTypeListPage>(() =>\n listDeviceTypes({\n client,\n path: { projectId },\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n get: (projectId, slug) =>\n run<DeviceTypeResponse>(() =>\n getDeviceType({\n client,\n path: { projectId, slug },\n throwOnError: false,\n })\n ).then((result) => result.data),\n create: (projectId, body) =>\n run<DeviceTypeResponse>(() =>\n createDeviceType({\n client,\n path: { projectId },\n body,\n throwOnError: false,\n })\n ).then((result) => result.data),\n update: (projectId, slug, body) =>\n run<DeviceTypeResponse>(() =>\n updateDeviceType({\n client,\n path: { projectId, slug },\n body,\n throwOnError: false,\n })\n ).then((result) => result.data),\n delete: async (projectId, slug) => {\n await run<unknown>(() =>\n deleteDeviceType({\n client,\n path: { projectId, slug },\n throwOnError: false,\n })\n )\n },\n }\n\n this.devices = {\n list: (params = {}) =>\n run<DeviceListPage>(() => listDevices({ client, query: params, throwOnError: false })),\n get: (id) =>\n run<DeviceResponse>(() => getDevice({ client, path: { id }, throwOnError: false })).then(\n (result) => result.data\n ),\n iterate: (params = {}) =>\n paginate<DeviceListItem>(async (cursor) => {\n const page = await run<DeviceListPage>(() =>\n listDevices({\n client,\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n delete: async (id) => {\n await run<unknown>(() => deleteDevice({ client, path: { id }, throwOnError: false }))\n },\n resetToken: (id) =>\n run<DeviceTokenResetResponse>(() =>\n resetDeviceToken({ client, path: { id }, throwOnError: false })\n ).then((result) => result.data),\n }\n\n this.admissions = {\n list: (params = {}) =>\n run<AdmissionListPage>(() =>\n listAdmissions({ client, query: params, throwOnError: false })\n ),\n iterate: (params = {}) =>\n paginate<Admission>(async (cursor) => {\n const page = await run<AdmissionListPage>(() =>\n listAdmissions({\n client,\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n get: (id) =>\n run<AdmissionResponse>(() =>\n getAdmission({ client, path: { id }, throwOnError: false })\n ).then((result) => result.data),\n accept: (id, params) =>\n run<AdmissionAcceptanceResponse>(() =>\n acceptAdmission({\n client,\n path: { id },\n body: params,\n throwOnError: false,\n })\n ).then((result) => result.data),\n reject: (id) =>\n run<AdmissionResponse>(() =>\n rejectAdmission({ client, path: { id }, throwOnError: false })\n ).then((result) => result.data),\n dismiss: (id) =>\n run<AdmissionResponse>(() =>\n dismissAdmission({ client, path: { id }, throwOnError: false })\n ).then((result) => result.data),\n }\n\n this.telemetry = {\n latest: (deviceId) =>\n run<LatestTelemetryResponse>(() =>\n getLatestTelemetry({\n client,\n path: { id: deviceId },\n throwOnError: false,\n })\n ).then((result) => result.data),\n history: (deviceId, params = {}) =>\n run<TelemetryHistoryResponse>(() =>\n getTelemetryHistory({\n client,\n path: { id: deviceId },\n query: params,\n throwOnError: false,\n })\n ).then((result) => result.data),\n manifest: (deviceId) =>\n run<TelemetryManifestResponse>(() =>\n getTelemetryManifest({\n client,\n path: { id: deviceId },\n throwOnError: false,\n })\n ).then((result) => result.data),\n }\n\n this.firmware = {\n upload: (params) =>\n run<FirmwareBundleResponse>(() =>\n uploadFirmware({ client, body: params, throwOnError: false })\n ).then((result) => result.data),\n deleteBundle: async (id) => {\n await run<unknown>(() =>\n deleteFirmwareBundle({ client, path: { id }, throwOnError: false })\n )\n },\n bundles: {\n list: (params = {}) =>\n run<FirmwareBundleListPage>(() =>\n listFirmwareBundles({ client, query: params, throwOnError: false })\n ),\n iterate: (params = {}) =>\n paginate<FirmwareBundle>(async (cursor) => {\n const page = await run<FirmwareBundleListPage>(() =>\n listFirmwareBundles({\n client,\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n get: (id) =>\n run<FirmwareBundleResponse>(() =>\n getFirmwareBundle({ client, path: { id }, throwOnError: false })\n ).then((result) => result.data),\n },\n deployments: {\n trigger: (params) =>\n run<FirmwareDeploymentsResponse>(() =>\n triggerFirmwareDeployment({\n client,\n body: params,\n throwOnError: false,\n })\n ).then((result) => result.data),\n list: (params = {}) =>\n run<FirmwareDeploymentListPage>(() =>\n listFirmwareDeployments({\n client,\n query: params,\n throwOnError: false,\n })\n ),\n iterate: (params = {}) =>\n paginate<FirmwareDeployment>(async (cursor) => {\n const page = await run<FirmwareDeploymentListPage>(() =>\n listFirmwareDeployments({\n client,\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n get: (id) =>\n run<FirmwareDeploymentResponse>(() =>\n getFirmwareDeployment({\n client,\n path: { id },\n throwOnError: false,\n })\n ).then((result) => result.data),\n cancel: (id, params = {}) =>\n run<FirmwareDeploymentResponse>(() =>\n cancelFirmwareDeployment({\n client,\n path: { id },\n body: params,\n throwOnError: false,\n })\n ).then((result) => result.data),\n rollback: (id, params = {}) =>\n run<FirmwareDeploymentResponse>(() =>\n rollbackFirmwareDeployment({\n client,\n path: { id },\n body: params,\n throwOnError: false,\n })\n ).then((result) => result.data),\n },\n }\n\n this.commands = {\n exec: (deviceId, command) =>\n run<CommandResultResponse>(() =>\n execDeviceCommand({\n client,\n path: { id: deviceId },\n body: command,\n throwOnError: false,\n })\n ).then((result) => result.data),\n get: (deviceId, invocationId) =>\n run<CommandInvocationResponse>(() =>\n getDeviceCommandInvocation({\n client,\n path: { id: deviceId, invocationId },\n throwOnError: false,\n })\n ).then((result) => result.data),\n manifest: (deviceId) =>\n run<CommandManifestResponse>(() =>\n getDeviceCommands({\n client,\n path: { id: deviceId },\n throwOnError: false,\n })\n ).then((result) => result.data),\n }\n\n this.usb = {\n list: (deviceId) =>\n run<UsbExportList>(() => listExportable(client, deviceId)).then((result) => result.data),\n ticket: (params) =>\n run<{ data: UsbTicketResponse }>(() => createTicket(client, params)).then(\n (result) => result.data\n ),\n }\n\n this.terminal = {\n ticket: (params) =>\n run<{ data: TerminalTicketResponse }>(() => createTerminalTicket(client, params)).then(\n (result) => result.data\n ),\n }\n\n this.webhooks = {\n list: (params = {}) =>\n run<WebhookSubscriptionPage>(() =>\n listWebhooks({ client, query: params, throwOnError: false })\n ),\n iterate: (params = {}) =>\n paginate<WebhookSubscription>(async (cursor) => {\n const page = await run<WebhookSubscriptionPage>(() =>\n listWebhooks({\n client,\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n create: (params) =>\n run<WebhookCreatedResponse>(() =>\n createWebhook({ client, body: params, throwOnError: false })\n ).then((result) => result.data),\n get: (id) =>\n run<WebhookSubscriptionResponse>(() =>\n getWebhook({ client, path: { id }, throwOnError: false })\n ).then((result) => result.data),\n update: (id, params) =>\n run<WebhookSubscriptionResponse>(() =>\n updateWebhook({\n client,\n path: { id },\n body: params,\n throwOnError: false,\n })\n ).then((result) => result.data),\n delete: async (id) => {\n await run<unknown>(() => deleteWebhook({ client, path: { id }, throwOnError: false }))\n },\n deliveries: (id, params = {}) =>\n run<WebhookDeliveryPage>(() =>\n listWebhookDeliveries({\n client,\n path: { id },\n query: params,\n throwOnError: false,\n })\n ),\n iterateDeliveries: (id, params = {}) =>\n paginate<WebhookDelivery>(async (cursor) => {\n const page = await run<WebhookDeliveryPage>(() =>\n listWebhookDeliveries({\n client,\n path: { id },\n query: { ...params, cursor },\n throwOnError: false,\n })\n )\n return {\n data: page.data,\n nextCursor: page.meta.nextCursor,\n hasMore: page.meta.hasMore,\n }\n }),\n }\n }\n\n async #run<T>(thunk: () => Promise<CallResult<T>>): Promise<T> {\n let attempt = 0\n for (;;) {\n let result: CallResult<T>\n try {\n result = await thunk()\n } catch (cause) {\n if (attempt < this.#maxRetries) {\n await this.#sleep(this.#backoff(attempt))\n attempt++\n continue\n }\n throw new NetworkError('The request failed before a response was received.', { cause })\n }\n\n const { data, error, response } = result\n const status = response?.status ?? 0\n\n if (error === undefined && status >= 200 && status < 300) {\n return data as T\n }\n\n // No response at all (DNS, TLS or offline). Handled here rather than in\n // the catch above because the generated client *returns* a transport\n // failure rather than throwing it.\n if (response === undefined) {\n if (attempt < this.#maxRetries) {\n await this.#sleep(this.#backoff(attempt))\n attempt++\n continue\n }\n throw new NetworkError('The request failed before a response was received.', {\n cause: error,\n })\n }\n\n if (RETRYABLE_STATUS.has(status) && attempt < this.#maxRetries) {\n const retryAfter = parseRetryAfterSeconds(response)\n await this.#sleep(retryAfter !== undefined ? retryAfter * 1000 : this.#backoff(attempt))\n attempt++\n continue\n }\n\n throw normalizeError(status, error ?? data, response)\n }\n }\n\n #backoff(attempt: number): number {\n const base = this.#retryBaseDelayMs * 2 ** attempt\n // Full jitter keeps retries from synchronising across many clients.\n return Math.floor(base * (0.5 + Math.random() * 0.5))\n }\n\n #sleep(ms: number): Promise<void> {\n if (ms <= 0) return Promise.resolve()\n return new Promise((resolve) => setTimeout(resolve, ms))\n }\n}\n","import type { MetricDefinition, TelemetryManifest, TelemetrySample } from './generated/types.gen'\n\n/**\n * A single telemetry reading joined to its manifest definition. Telemetry\n * samples are keyed by abbreviated, device-type-specific metric keys; the\n * decoder resolves each key to its human label, unit, and type so callers\n * don't have to memorise the manifest.\n */\nexport interface DecodedMetric {\n /** The raw metric key (snake_case) as stored on the sample. */\n key: string\n /** Human-readable label from the manifest, or the key if not in the manifest. */\n label: string\n /** The reading. */\n value: number | boolean | string\n /** Unit of measurement, when the manifest defines one. */\n unit?: string\n /** Value type from the manifest. */\n type?: MetricDefinition['type']\n /** Semantic device class (Home-Assistant convention), when defined. */\n deviceClass?: string\n /** Group key for UI grouping, when defined. */\n group?: string\n /** The full manifest definition, when the key was found in the manifest. */\n definition?: MetricDefinition\n}\n\n/**\n * Decode a telemetry sample's `metrics` map into labelled rows using the\n * device type's manifest (from `client.telemetry.manifest(deviceId)`). Keys absent\n * from the manifest are passed through with the key as the label.\n */\nexport function decodeSample(sample: TelemetrySample, manifest: TelemetryManifest): DecodedMetric[] {\n const byKey = new Map(manifest.metrics.map((metric) => [metric.key, metric]))\n\n return Object.entries(sample.metrics).map(([key, value]) => {\n const definition = byKey.get(key)\n if (!definition) return { key, label: key, value }\n return {\n key,\n label: definition.label,\n value,\n unit: definition.unit,\n type: definition.type,\n deviceClass: definition.deviceClass,\n group: definition.group,\n definition,\n }\n })\n}\n\n/** Like {@link decodeSample}, applied to a history window. */\nexport function decodeSamples(\n samples: TelemetrySample[],\n manifest: TelemetryManifest\n): Array<{ recordedAt: string; metrics: DecodedMetric[] }> {\n return samples.map((sample) => ({\n recordedAt: sample.recordedAt,\n metrics: decodeSample(sample, manifest),\n }))\n}\n","/**\n * Webhook receiver helpers, verify `X-Orbit-Signature` on events pushed by\n * Orbit's outbound webhooks and parse the JSON envelope.\n *\n * The signature is `HMAC-SHA256(secret, `${timestamp}.${rawBody}`)` hex-encoded,\n * where `timestamp` is the `X-Orbit-Timestamp` header (unix seconds) and\n * `rawBody` is the exact request body bytes. Receivers should reject events\n * whose timestamp is more than 300 seconds from their clock (replay window);\n * Orbit re-signs retries with a fresh timestamp.\n *\n * Uses the Web Crypto API, so it works in Node ≥ 18, Deno, Bun, and edge\n * runtimes alike.\n */\n\n/** Default replay tolerance, in seconds. */\nexport const WEBHOOK_REPLAY_TOLERANCE_SECONDS = 300\n\n/** The JSON envelope Orbit POSTs to a webhook endpoint. */\nexport interface OrbitWebhookEvent<TData = Record<string, unknown>> {\n /** Event UUID, the receiver-side idempotency key. */\n id: string\n /** Event type, e.g. `device.online` or `telemetry.metric_changed`. */\n type: string\n /** ISO-8601 emission time. */\n createdAt: string\n /** Project the emitting device belongs to. */\n projectId: string\n /** Event-type-specific payload. */\n data: TData\n}\n\nexport interface VerifyWebhookSignatureParams {\n /** The subscription's signing secret (`whsec_…`, shown once at creation). */\n secret: string\n /** The EXACT raw request body, do not re-serialize parsed JSON. */\n rawBody: string\n /** `X-Orbit-Signature` header (hex). */\n signature: string\n /** `X-Orbit-Timestamp` header (unix seconds). */\n timestamp: number | string\n /** Replay window in seconds. Defaults to {@link WEBHOOK_REPLAY_TOLERANCE_SECONDS}. */\n toleranceSeconds?: number\n /** Override \"now\" (unix seconds), mainly for tests. */\n nowSeconds?: number\n}\n\nasync function hmacSha256Hex(secret: string, message: string): Promise<string> {\n const encoder = new TextEncoder()\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n )\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(message))\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/** Constant-time string equality (over UTF-8 bytes). */\nfunction timingSafeEqual(a: string, b: string): boolean {\n const encoder = new TextEncoder()\n const ab = encoder.encode(a)\n const bb = encoder.encode(b)\n if (ab.length !== bb.length) return false\n let diff = 0\n for (let i = 0; i < ab.length; i++) diff |= (ab[i] ?? 0) ^ (bb[i] ?? 0)\n return diff === 0\n}\n\n/** Compute the hex HMAC-SHA256 signature over `${timestamp}.${rawBody}`. */\nexport async function signWebhookPayload(\n secret: string,\n timestamp: number,\n rawBody: string\n): Promise<string> {\n return hmacSha256Hex(secret, `${timestamp}.${rawBody}`)\n}\n\n/**\n * Verify an Orbit webhook delivery: replay-window check on the timestamp,\n * then a constant-time comparison of the expected signature.\n */\nexport async function verifyWebhookSignature(\n params: VerifyWebhookSignatureParams\n): Promise<boolean> {\n const timestamp = Number(params.timestamp)\n if (!Number.isFinite(timestamp)) return false\n\n const tolerance = params.toleranceSeconds ?? WEBHOOK_REPLAY_TOLERANCE_SECONDS\n const now = params.nowSeconds ?? Math.floor(Date.now() / 1000)\n if (Math.abs(now - timestamp) > tolerance) return false\n\n const expected = await signWebhookPayload(params.secret, timestamp, params.rawBody)\n return timingSafeEqual(expected, params.signature)\n}\n\n/**\n * Verify a delivery and parse its envelope in one call. Returns the typed\n * event, or `null` when the signature (or replay window) check fails.\n */\nexport async function parseWebhookEvent<TData = Record<string, unknown>>(\n params: VerifyWebhookSignatureParams\n): Promise<OrbitWebhookEvent<TData> | null> {\n if (!(await verifyWebhookSignature(params))) return null\n return JSON.parse(params.rawBody) as OrbitWebhookEvent<TData>\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport { acceptAdmission, cancelFirmwareDeployment, createDeviceType, createProjectAppToken, createWebhook, deleteCommandManifest, deleteDevice, deleteDeviceType, deleteFirmwareBundle, deleteWebhook, dismissAdmission, execDeviceCommand, getAdmission, getCommandManifest, getDevice, getDeviceCommandInvocation, getDeviceCommands, getDeviceType, getFirmwareBundle, getFirmwareDeployment, getIdentity, getLatestTelemetry, getProject, getTelemetryHistory, getTelemetryManifest, getWebhook, listAdmissions, listDevices, listDeviceTypes, listFirmwareBundles, listFirmwareDeployments, listProjects, listWebhookDeliveries, listWebhooks, type Options, rejectAdmission, resetDeviceToken, rollbackFirmwareDeployment, rotateProjectAppToken, triggerFirmwareDeployment, updateCommandManifest, updateDeviceType, updateWebhook, uploadFirmware } from './sdk.gen';\nexport type { AcceptAdmissionData, AcceptAdmissionError, AcceptAdmissionErrors, AcceptAdmissionResponse, AcceptAdmissionResponses, Admission, AdmissionAcceptance, AdmissionAcceptanceResponse, AdmissionAcceptRequest, AdmissionListPage, AdmissionResponse, CancelFirmwareDeploymentData, CancelFirmwareDeploymentError, CancelFirmwareDeploymentErrors, CancelFirmwareDeploymentResponse, CancelFirmwareDeploymentResponses, ClientOptions, CommandArgDefinition, CommandDefinition, CommandInvocation, CommandInvocationResponse, CommandManifest, CommandManifestResponse, CommandRequest, CommandResult, CommandResultResponse, CreateDeviceTypeData, CreateDeviceTypeError, CreateDeviceTypeErrors, CreateDeviceTypeResponse, CreateDeviceTypeResponses, CreateProjectAppTokenData, CreateProjectAppTokenError, CreateProjectAppTokenErrors, CreateProjectAppTokenResponse, CreateProjectAppTokenResponses, CreateWebhookData, CreateWebhookError, CreateWebhookErrors, CreateWebhookResponse, CreateWebhookResponses, DeleteCommandManifestData, DeleteCommandManifestError, DeleteCommandManifestErrors, DeleteCommandManifestResponses, DeleteDeviceData, DeleteDeviceError, DeleteDeviceErrors, DeleteDeviceResponses, DeleteDeviceTypeData, DeleteDeviceTypeError, DeleteDeviceTypeErrors, DeleteDeviceTypeResponses, DeleteFirmwareBundleData, DeleteFirmwareBundleError, DeleteFirmwareBundleErrors, DeleteFirmwareBundleResponses, DeleteWebhookData, DeleteWebhookError, DeleteWebhookErrors, DeleteWebhookResponses, Device, DeviceListItem, DeviceListPage, DeviceResponse, DeviceTokenReset, DeviceTokenResetResponse, DeviceType, DeviceTypeCreateRequest, DeviceTypeListItem, DeviceTypeListPage, DeviceTypeResponse, DeviceTypeUpdateRequest, DismissAdmissionData, DismissAdmissionError, DismissAdmissionErrors, DismissAdmissionResponse, DismissAdmissionResponses, ErrorItem, ErrorResponse, ExecDeviceCommandData, ExecDeviceCommandError, ExecDeviceCommandErrors, ExecDeviceCommandResponse, ExecDeviceCommandResponses, FirmwareBundle, FirmwareBundleListPage, FirmwareBundleResponse, FirmwareDeployment, FirmwareDeploymentCancelRequest, FirmwareDeploymentListPage, FirmwareDeploymentResponse, FirmwareDeploymentRollbackRequest, FirmwareDeploymentsResponse, FirmwareDeploymentTriggerRequest, FirmwareUploadRequest, GetAdmissionData, GetAdmissionError, GetAdmissionErrors, GetAdmissionResponse, GetAdmissionResponses, GetCommandManifestData, GetCommandManifestError, GetCommandManifestErrors, GetCommandManifestResponse, GetCommandManifestResponses, GetDeviceCommandInvocationData, GetDeviceCommandInvocationError, GetDeviceCommandInvocationErrors, GetDeviceCommandInvocationResponse, GetDeviceCommandInvocationResponses, GetDeviceCommandsData, GetDeviceCommandsError, GetDeviceCommandsErrors, GetDeviceCommandsResponse, GetDeviceCommandsResponses, GetDeviceData, GetDeviceError, GetDeviceErrors, GetDeviceResponse, GetDeviceResponses, GetDeviceTypeData, GetDeviceTypeError, GetDeviceTypeErrors, GetDeviceTypeResponse, GetDeviceTypeResponses, GetFirmwareBundleData, GetFirmwareBundleError, GetFirmwareBundleErrors, GetFirmwareBundleResponse, GetFirmwareBundleResponses, GetFirmwareDeploymentData, GetFirmwareDeploymentError, GetFirmwareDeploymentErrors, GetFirmwareDeploymentResponse, GetFirmwareDeploymentResponses, GetIdentityData, GetIdentityError, GetIdentityErrors, GetIdentityResponse, GetIdentityResponses, GetLatestTelemetryData, GetLatestTelemetryError, GetLatestTelemetryErrors, GetLatestTelemetryResponse, GetLatestTelemetryResponses, GetProjectData, GetProjectError, GetProjectErrors, GetProjectResponse, GetProjectResponses, GetTelemetryHistoryData, GetTelemetryHistoryError, GetTelemetryHistoryErrors, GetTelemetryHistoryResponse, GetTelemetryHistoryResponses, GetTelemetryManifestData, GetTelemetryManifestError, GetTelemetryManifestErrors, GetTelemetryManifestResponse, GetTelemetryManifestResponses, GetWebhookData, GetWebhookError, GetWebhookErrors, GetWebhookResponse, GetWebhookResponses, Identity, IdentityProject, IdentityResponse, IdentityToken, IdentityUser, LatestTelemetryResponse, ListAdmissionsData, ListAdmissionsError, ListAdmissionsErrors, ListAdmissionsResponse, ListAdmissionsResponses, ListDevicesData, ListDevicesError, ListDevicesErrors, ListDevicesResponse, ListDevicesResponses, ListDeviceTypesData, ListDeviceTypesError, ListDeviceTypesErrors, ListDeviceTypesResponse, ListDeviceTypesResponses, ListFirmwareBundlesData, ListFirmwareBundlesError, ListFirmwareBundlesErrors, ListFirmwareBundlesResponse, ListFirmwareBundlesResponses, ListFirmwareDeploymentsData, ListFirmwareDeploymentsError, ListFirmwareDeploymentsErrors, ListFirmwareDeploymentsResponse, ListFirmwareDeploymentsResponses, ListProjectsData, ListProjectsError, ListProjectsErrors, ListProjectsResponse, ListProjectsResponses, ListWebhookDeliveriesData, ListWebhookDeliveriesError, ListWebhookDeliveriesErrors, ListWebhookDeliveriesResponse, ListWebhookDeliveriesResponses, ListWebhooksData, ListWebhooksError, ListWebhooksErrors, ListWebhooksResponse, ListWebhooksResponses, MetricDefinition, MetricGroup, PageMeta, Project, ProjectAppToken, ProjectAppTokenResponse, ProjectListPage, ProjectResponse, RejectAdmissionData, RejectAdmissionError, RejectAdmissionErrors, RejectAdmissionResponse, RejectAdmissionResponses, ResetDeviceTokenData, ResetDeviceTokenError, ResetDeviceTokenErrors, ResetDeviceTokenResponse, ResetDeviceTokenResponses, RollbackFirmwareDeploymentData, RollbackFirmwareDeploymentError, RollbackFirmwareDeploymentErrors, RollbackFirmwareDeploymentResponse, RollbackFirmwareDeploymentResponses, RotateProjectAppTokenData, RotateProjectAppTokenError, RotateProjectAppTokenErrors, RotateProjectAppTokenResponse, RotateProjectAppTokenResponses, TelemetryHistoryResponse, TelemetryManifest, TelemetryManifestResponse, TelemetrySample, TriggerFirmwareDeploymentData, TriggerFirmwareDeploymentError, TriggerFirmwareDeploymentErrors, TriggerFirmwareDeploymentResponse, TriggerFirmwareDeploymentResponses, UpdateCommandManifestData, UpdateCommandManifestError, UpdateCommandManifestErrors, UpdateCommandManifestResponse, UpdateCommandManifestResponses, UpdateDeviceTypeData, UpdateDeviceTypeError, UpdateDeviceTypeErrors, UpdateDeviceTypeResponse, UpdateDeviceTypeResponses, UpdateWebhookData, UpdateWebhookError, UpdateWebhookErrors, UpdateWebhookResponse, UpdateWebhookResponses, UploadFirmwareData, UploadFirmwareError, UploadFirmwareErrors, UploadFirmwareResponse, UploadFirmwareResponses, WebhookCreated, WebhookCreatedResponse, WebhookCreateRequest, WebhookDelivery, WebhookDeliveryAttempt, WebhookDeliveryPage, WebhookEventType, WebhookRetryPolicy, WebhookSubscription, WebhookSubscriptionPage, WebhookSubscriptionResponse, WebhookUpdateRequest } from './types.gen';\n"]}
|