@pidgeon-ai/sdk 1.3.0 → 1.5.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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/webhooks.ts"],"sourcesContent":["/**\n * `@pidgeon-ai/sdk` — a typed client for the Pidgeon email API.\n *\n * import { client, messagesSend, verifyWebhook } from '@pidgeon-ai/sdk';\n *\n * client.setConfig({ baseUrl: 'https://pidgeon.ai/api/v1', auth: () => key });\n * await messagesSend({ body: { from: 'hi@yours.test', to: ['a@b.test'] } });\n *\n * **Everything above `verifyWebhook` is generated** from\n * `public/openapi.json`, which is itself generated from the Zod schemas the\n * routes validate with and checked against real routes by\n * `tests/integration/api-contract.test.ts`. Adding an endpoint means editing\n * those schemas; this package is wrong until `pnpm sdk` regenerates it, and\n * `pnpm sdk:check` fails the build while it is.\n * `prd/one-source-of-capability.md` has the chain.\n *\n * **`messagesSend` rather than `messages.send`**, and the stutter is\n * deliberate: `openapi-python-client` builds `messages/messages_send.py`\n * from the same `operationId` and offers no way to rename it, so a prettier\n * TypeScript surface would cost the property that the two clients name every\n * operation the same thing. §343.\n *\n * `webhooks.ts` is the exception and always will be. HMAC over\n * `timestamp.body` is a security contract, not an endpoint; OpenAPI has\n * nothing to say about it, and a generator cannot produce it.\n */\n\nexport * from './generated';\n\n/*\n * The client itself, which the generated index does not export.\n *\n * Without it there is no way to set a base URL or an API key, so every\n * function in the package would call `https://pidgeon.ai/api/v1`\n * unauthenticated. Re-exported here rather than patched into the generated\n * file, because that file is overwritten on every `pnpm sdk`.\n */\nexport { client, type CreateClientConfig } from './generated/client.gen';\nexport { createClient, createConfig } from './generated/client';\n\nexport {\n verifyWebhook,\n SIGNATURE_HEADER,\n TIMESTAMP_HEADER,\n type WebhookEnvelope,\n} from './webhooks';\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (data: FormData, key: string, value: unknown): void => {\n if (typeof value === 'string' || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value: unknown): void => {\n if (typeof value === 'string') {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: (body: unknown): string =>\n JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\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> = (\n override?: Config<ClientOptions & T>,\n) => Config<Required<ClientOptions> & T>;\n\nexport const client: Client = createClient(\n createConfig<ClientOptions2>({ baseUrl: 'https://pidgeon.ai/api/v1' }),\n);\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport {\n type Client,\n type ClientMeta,\n formDataBodySerializer,\n type Options as Options2,\n type RequestResult,\n type ServerSentEventsResult,\n type TDataShape,\n} from './client';\nimport { client } from './client.gen';\nimport type {\n AgentAttachHumanData,\n AgentAttachHumanErrors,\n AgentAttachHumanResponses,\n AgentSignUpData,\n AgentSignUpErrors,\n AgentSignUpResponses,\n AgentVerifyData,\n AgentVerifyErrors,\n AgentVerifyResponses,\n AppPasswordsCreateData,\n AppPasswordsCreateErrors,\n AppPasswordsCreateResponses,\n AppPasswordsListData,\n AppPasswordsListErrors,\n AppPasswordsListResponses,\n AppPasswordsRevokeData,\n AppPasswordsRevokeErrors,\n AppPasswordsRevokeResponses,\n AttachmentsDownloadUrlData,\n AttachmentsDownloadUrlErrors,\n AttachmentsDownloadUrlResponses,\n AttachmentsUploadData,\n AttachmentsUploadErrors,\n AttachmentsUploadResponses,\n CalendarCreateEventData,\n CalendarCreateEventErrors,\n CalendarCreateEventResponses,\n CalendarDeleteEventData,\n CalendarDeleteEventErrors,\n CalendarDeleteEventResponses,\n CalendarGetAgendaData,\n CalendarGetAgendaErrors,\n CalendarGetAgendaResponses,\n CalendarGetData,\n CalendarGetErrors,\n CalendarGetEventData,\n CalendarGetEventErrors,\n CalendarGetEventResponses,\n CalendarGetResponses,\n CalendarListEventInstancesData,\n CalendarListEventInstancesErrors,\n CalendarListEventInstancesResponses,\n CalendarListEventsData,\n CalendarListEventsErrors,\n CalendarListEventsResponses,\n CalendarRespondToEventData,\n CalendarRespondToEventErrors,\n CalendarRespondToEventResponses,\n CalendarUpdateData,\n CalendarUpdateErrors,\n CalendarUpdateEventData,\n CalendarUpdateEventErrors,\n CalendarUpdateEventResponses,\n CalendarUpdateResponses,\n DomainsCreateData,\n DomainsCreateErrors,\n DomainsCreateResponses,\n DomainsDeleteData,\n DomainsDeleteErrors,\n DomainsDeleteResponses,\n DomainsGetData,\n DomainsGetErrors,\n DomainsGetResponses,\n DomainsGetSetupLinkData,\n DomainsGetSetupLinkErrors,\n DomainsGetSetupLinkResponses,\n DomainsListData,\n DomainsListErrors,\n DomainsListResponses,\n DomainsUpdateData,\n DomainsUpdateErrors,\n DomainsUpdateResponses,\n DomainsVerifyData,\n DomainsVerifyErrors,\n DomainsVerifyResponses,\n DomainsZoneFileData,\n DomainsZoneFileErrors,\n DomainsZoneFileResponses,\n DraftsCancelScheduleData,\n DraftsCancelScheduleErrors,\n DraftsCancelScheduleResponses,\n DraftsCreateData,\n DraftsCreateErrors,\n DraftsCreateResponses,\n DraftsDeleteData,\n DraftsDeleteErrors,\n DraftsDeleteResponses,\n DraftsGetData,\n DraftsGetErrors,\n DraftsGetResponses,\n DraftsListData,\n DraftsListErrors,\n DraftsListResponses,\n DraftsRemoveAttachmentData,\n DraftsRemoveAttachmentErrors,\n DraftsRemoveAttachmentResponses,\n DraftsScheduleData,\n DraftsScheduleErrors,\n DraftsScheduleResponses,\n DraftsSendData,\n DraftsSendErrors,\n DraftsSendResponses,\n DraftsUpdateData,\n DraftsUpdateErrors,\n DraftsUpdateResponses,\n EventsGetData,\n EventsGetErrors,\n EventsGetResponses,\n EventsListData,\n EventsListErrors,\n EventsListResponses,\n EventsStreamData,\n EventsStreamErrors,\n EventsStreamResponse,\n EventsStreamResponses,\n IdentitiesAccessCreateData,\n IdentitiesAccessCreateErrors,\n IdentitiesAccessCreateResponses,\n IdentitiesAccessDeleteData,\n IdentitiesAccessDeleteErrors,\n IdentitiesAccessDeleteResponses,\n IdentitiesAccessGetData,\n IdentitiesAccessGetErrors,\n IdentitiesAccessGetResponses,\n IdentitiesCreateData,\n IdentitiesCreateErrors,\n IdentitiesCreateResponses,\n IdentitiesDeleteData,\n IdentitiesDeleteErrors,\n IdentitiesDeleteResponses,\n IdentitiesGetData,\n IdentitiesGetErrors,\n IdentitiesGetResponses,\n IdentitiesListData,\n IdentitiesListErrors,\n IdentitiesListResponses,\n IdentitiesReceiveRulesCreateData,\n IdentitiesReceiveRulesCreateErrors,\n IdentitiesReceiveRulesCreateResponses,\n IdentitiesReceiveRulesDeleteData,\n IdentitiesReceiveRulesDeleteErrors,\n IdentitiesReceiveRulesDeleteResponses,\n IdentitiesReceiveRulesGetData,\n IdentitiesReceiveRulesGetErrors,\n IdentitiesReceiveRulesGetResponses,\n IdentitiesSendRulesCreateData,\n IdentitiesSendRulesCreateErrors,\n IdentitiesSendRulesCreateResponses,\n IdentitiesSendRulesDeleteData,\n IdentitiesSendRulesDeleteErrors,\n IdentitiesSendRulesDeleteResponses,\n IdentitiesSendRulesGetData,\n IdentitiesSendRulesGetErrors,\n IdentitiesSendRulesGetResponses,\n IdentitiesSuspendTenantData,\n IdentitiesSuspendTenantErrors,\n IdentitiesSuspendTenantResponses,\n IdentitiesUpdateData,\n IdentitiesUpdateErrors,\n IdentitiesUpdateResponses,\n KeysCreateData,\n KeysCreateErrors,\n KeysCreateResponses,\n KeysGetData,\n KeysGetErrors,\n KeysGetResponses,\n KeysListData,\n KeysListErrors,\n KeysListResponses,\n KeysRevokeData,\n KeysRevokeErrors,\n KeysRevokeResponses,\n KeysUpdateData,\n KeysUpdateErrors,\n KeysUpdateResponses,\n LabelsCreateData,\n LabelsCreateErrors,\n LabelsCreateResponses,\n LabelsDeleteData,\n LabelsDeleteErrors,\n LabelsDeleteResponses,\n LabelsListData,\n LabelsListErrors,\n LabelsListResponses,\n LabelsUpdateData,\n LabelsUpdateErrors,\n LabelsUpdateResponses,\n MailboxesChangesData,\n MailboxesChangesErrors,\n MailboxesChangesResponses,\n MailboxesEmptyTrashData,\n MailboxesEmptyTrashErrors,\n MailboxesEmptyTrashResponses,\n MailboxesListData,\n MailboxesListErrors,\n MailboxesListFolderData,\n MailboxesListFolderErrors,\n MailboxesListFolderResponses,\n MailboxesListResponses,\n MeGetData,\n MeGetErrors,\n MeGetResponses,\n MessagesActData,\n MessagesActErrors,\n MessagesActResponses,\n MessagesForwardData,\n MessagesForwardErrors,\n MessagesForwardResponses,\n MessagesGetData,\n MessagesGetErrors,\n MessagesGetResponses,\n MessagesListInThreadData,\n MessagesListInThreadErrors,\n MessagesListInThreadResponses,\n MessagesRawData,\n MessagesRawErrors,\n MessagesRawResponses,\n MessagesReplyAllData,\n MessagesReplyAllErrors,\n MessagesReplyAllResponses,\n MessagesReplyData,\n MessagesReplyErrors,\n MessagesReplyResponses,\n MessagesRespondToInvitationData,\n MessagesRespondToInvitationErrors,\n MessagesRespondToInvitationResponses,\n MessagesSearchData,\n MessagesSearchErrors,\n MessagesSearchResponses,\n MessagesSendData,\n MessagesSendErrors,\n MessagesSendResponses,\n MessagesUndoData,\n MessagesUndoErrors,\n MessagesUndoResponses,\n MessagesUpdateData,\n MessagesUpdateErrors,\n MessagesUpdateResponses,\n MetricsQueryData,\n MetricsQueryErrors,\n MetricsQueryResponses,\n RoutingCreateData,\n RoutingCreateErrors,\n RoutingCreateResponses,\n RoutingDeleteData,\n RoutingDeleteErrors,\n RoutingDeleteResponses,\n RoutingListData,\n RoutingListErrors,\n RoutingListResponses,\n RoutingUpdateData,\n RoutingUpdateErrors,\n RoutingUpdateResponses,\n ThreadsGetData,\n ThreadsGetErrors,\n ThreadsGetResponses,\n ThreadsLabelsCreateData,\n ThreadsLabelsCreateErrors,\n ThreadsLabelsCreateResponses,\n ThreadsLabelsDeleteData,\n ThreadsLabelsDeleteErrors,\n ThreadsLabelsDeleteResponses,\n ThreadsLabelsGetData,\n ThreadsLabelsGetErrors,\n ThreadsLabelsGetResponses,\n ThreadsListData,\n ThreadsListErrors,\n ThreadsListResponses,\n ThreadsUpdateData,\n ThreadsUpdateErrors,\n ThreadsUpdateResponses,\n WebhooksCreateData,\n WebhooksCreateErrors,\n WebhooksCreateResponses,\n WebhooksDeleteData,\n WebhooksDeleteErrors,\n WebhooksDeleteResponses,\n WebhooksDeliveriesData,\n WebhooksDeliveriesErrors,\n WebhooksDeliveriesResponses,\n WebhooksGetData,\n WebhooksGetErrors,\n WebhooksGetHeadersData,\n WebhooksGetHeadersErrors,\n WebhooksGetHeadersResponses,\n WebhooksGetResponses,\n WebhooksListData,\n WebhooksListErrors,\n WebhooksListResponses,\n WebhooksReplayData,\n WebhooksReplayErrors,\n WebhooksReplayResponses,\n WebhooksUpdateData,\n WebhooksUpdateErrors,\n WebhooksUpdateHeadersData,\n WebhooksUpdateHeadersErrors,\n WebhooksUpdateHeadersResponses,\n WebhooksUpdateResponses,\n WorkspaceGetData,\n WorkspaceGetErrors,\n WorkspaceGetResponses,\n WorkspaceMembersData,\n WorkspaceMembersErrors,\n WorkspaceMembersResponses,\n} from './types.gen';\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n TResponse = unknown,\n> = 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 * Sign an agent up\n *\n * The one call in this API that needs no key. An agent names a username and, optionally, the human who will own the mailbox; a six-digit code goes to that human and **nothing is created until it comes back**. Without a `human_email` the name is reserved and dormant — attach one with `POST /agent/human`.\n */\nexport const agentSignUp = <ThrowOnError extends boolean = false>(\n options: Options<AgentSignUpData, ThrowOnError>,\n): RequestResult<AgentSignUpResponses, AgentSignUpErrors, ThrowOnError> =>\n (options.client ?? client).post<AgentSignUpResponses, AgentSignUpErrors, ThrowOnError>({\n url: '/agent/signup',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Name the human for a signup\n *\n * For a signup that named none. Sends a fresh code and restarts the clock.\n */\nexport const agentAttachHuman = <ThrowOnError extends boolean = false>(\n options: Options<AgentAttachHumanData, ThrowOnError>,\n): RequestResult<AgentAttachHumanResponses, AgentAttachHumanErrors, ThrowOnError> =>\n (options.client ?? client).post<AgentAttachHumanResponses, AgentAttachHumanErrors, ThrowOnError>({\n url: '/agent/human',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Verify an agent with the human’s code\n *\n * Creates the account, the address and a workspace-scoped API key. Ten wrong codes spend the signup, whatever comes next. The key is returned once and never again — store it before doing anything else. It is minted here rather than at signup because this is the call a human has vouched for.\n */\nexport const agentVerify = <ThrowOnError extends boolean = false>(\n options: Options<AgentVerifyData, ThrowOnError>,\n): RequestResult<AgentVerifyResponses, AgentVerifyErrors, ThrowOnError> =>\n (options.client ?? client).post<AgentVerifyResponses, AgentVerifyErrors, ThrowOnError>({\n url: '/agent/verify',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List addresses\n *\n * Alphabetical by address. `cursor` is the last address on the page before it, not a timestamp — this is the one list that is not ordered by time, because it is read by somebody looking for a particular address.\n */\nexport const identitiesList = <ThrowOnError extends boolean = false>(\n options?: Options<IdentitiesListData, ThrowOnError>,\n): RequestResult<IdentitiesListResponses, IdentitiesListErrors, ThrowOnError> =>\n (options?.client ?? client).get<IdentitiesListResponses, IdentitiesListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities',\n ...options,\n });\n\n/**\n * Create an address\n *\n * Idempotent with an `Idempotency-Key` header: the same key returns the first result rather than creating a second address.\n */\nexport const identitiesCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesCreateData, ThrowOnError>,\n): RequestResult<IdentitiesCreateResponses, IdentitiesCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<IdentitiesCreateResponses, IdentitiesCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete an address\n *\n * Takes its messages, routing rules and webhooks with it.\n */\nexport const identitiesDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesDeleteData, ThrowOnError>,\n): RequestResult<IdentitiesDeleteResponses, IdentitiesDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n IdentitiesDeleteResponses,\n IdentitiesDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}',\n ...options,\n });\n\n/**\n * Fetch one address\n */\nexport const identitiesGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesGetData, ThrowOnError>,\n): RequestResult<IdentitiesGetResponses, IdentitiesGetErrors, ThrowOnError> =>\n (options.client ?? client).get<IdentitiesGetResponses, IdentitiesGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}',\n ...options,\n });\n\n/**\n * Update an address\n */\nexport const identitiesUpdate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesUpdateData, ThrowOnError>,\n): RequestResult<IdentitiesUpdateResponses, IdentitiesUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<IdentitiesUpdateResponses, IdentitiesUpdateErrors, ThrowOnError>(\n {\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n },\n );\n\n/**\n * Revoke access\n *\n * By the grant’s own id, which `GET` returned as `id`.\n */\nexport const identitiesAccessDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesAccessDeleteData, ThrowOnError>,\n): RequestResult<IdentitiesAccessDeleteResponses, IdentitiesAccessDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n IdentitiesAccessDeleteResponses,\n IdentitiesAccessDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/access',\n ...options,\n });\n\n/**\n * Who can reach this address\n *\n * Reading the list requires being able to reach the address: who has access to somebody’s mailbox is itself private.\n */\nexport const identitiesAccessGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesAccessGetData, ThrowOnError>,\n): RequestResult<IdentitiesAccessGetResponses, IdentitiesAccessGetErrors, ThrowOnError> =>\n (options.client ?? client).get<\n IdentitiesAccessGetResponses,\n IdentitiesAccessGetErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/access',\n ...options,\n });\n\n/**\n * Grant access\n *\n * Name exactly one of `user_id`, `api_key_id` or `everyone`. Granting **replaces** any grant that principal already had, so calling this twice changes the rung rather than leaving two answers behind. Answers 404 rather than 403 when you may not administer the address — including when you can read it.\n */\nexport const identitiesAccessCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesAccessCreateData, ThrowOnError>,\n): RequestResult<IdentitiesAccessCreateResponses, IdentitiesAccessCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<\n IdentitiesAccessCreateResponses,\n IdentitiesAccessCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/access',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Remove a rule\n *\n * By the rule’s own id, which `GET` returned as `id`.\n */\nexport const identitiesSendRulesDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSendRulesDeleteData, ThrowOnError>,\n): RequestResult<\n IdentitiesSendRulesDeleteResponses,\n IdentitiesSendRulesDeleteErrors,\n ThrowOnError\n> =>\n (options.client ?? client).delete<\n IdentitiesSendRulesDeleteResponses,\n IdentitiesSendRulesDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/send-rules',\n ...options,\n });\n\n/**\n * What this address may write to\n *\n * The allow and block list, and the `send_policy` it hangs off — the rules mean nothing without it. Requires `send` on the address rather than `admin`: a caller refused a recipient has to be able to find out why.\n */\nexport const identitiesSendRulesGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSendRulesGetData, ThrowOnError>,\n): RequestResult<IdentitiesSendRulesGetResponses, IdentitiesSendRulesGetErrors, ThrowOnError> =>\n (options.client ?? client).get<\n IdentitiesSendRulesGetResponses,\n IdentitiesSendRulesGetErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/send-rules',\n ...options,\n });\n\n/**\n * Allow or block a recipient\n *\n * `value` is an address or a domain and the string says which: `billing@acme.com` matches one person, `acme.com` matches everybody there. **The more specific rule wins**, so blocking a domain and allowing one person at it does what it looks like. Adding **replaces** any rule already there for that value, so `allow` where `block` sat is a change of mind rather than a conflict. A `block` refuses under every policy, including `open`.\n */\nexport const identitiesSendRulesCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSendRulesCreateData, ThrowOnError>,\n): RequestResult<\n IdentitiesSendRulesCreateResponses,\n IdentitiesSendRulesCreateErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n IdentitiesSendRulesCreateResponses,\n IdentitiesSendRulesCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/send-rules',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Remove a rule\n *\n * By the rule’s own id, which `GET` returned as `id`.\n */\nexport const identitiesReceiveRulesDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesReceiveRulesDeleteData, ThrowOnError>,\n): RequestResult<\n IdentitiesReceiveRulesDeleteResponses,\n IdentitiesReceiveRulesDeleteErrors,\n ThrowOnError\n> =>\n (options.client ?? client).delete<\n IdentitiesReceiveRulesDeleteResponses,\n IdentitiesReceiveRulesDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/receive-rules',\n ...options,\n });\n\n/**\n * Who may write to this address\n *\n * The rules that decide what reaches this address. Requires `read` rather than `admin`: anybody who may read the mail may see why some of it did not arrive. **Workspace-wide rules are not listed here** — these are the address’s own, and a key that administers one address must not be able to silence a sender for every other address in the workspace.\n */\nexport const identitiesReceiveRulesGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesReceiveRulesGetData, ThrowOnError>,\n): RequestResult<\n IdentitiesReceiveRulesGetResponses,\n IdentitiesReceiveRulesGetErrors,\n ThrowOnError\n> =>\n (options.client ?? client).get<\n IdentitiesReceiveRulesGetResponses,\n IdentitiesReceiveRulesGetErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/receive-rules',\n ...options,\n });\n\n/**\n * Decide what happens to a sender\n *\n * `value` is an address or a domain and the string says which: `billing@acme.com` matches one person, `acme.com` matches everybody there. **The more specific rule wins**, and an address’s own rule wins over a workspace-wide one. Adding **replaces** any rule already there for that value.\n *\n * `action` is `reject`, `spam`, `trash`, `archive` or `inbox`. **`reject` refuses before the message is stored** — no row, no thread, no storage charged and no webhook — which is what an address nobody will ever open wants. The other four file it, and `inbox` means *never classify this sender as spam*.\n *\n * **It is not a security control.** The `From:` header is written by the sender, and anybody blocked can change it for the price of a new address. What this buys is not paying for mail from senders who have not bothered.\n */\nexport const identitiesReceiveRulesCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesReceiveRulesCreateData, ThrowOnError>,\n): RequestResult<\n IdentitiesReceiveRulesCreateResponses,\n IdentitiesReceiveRulesCreateErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n IdentitiesReceiveRulesCreateResponses,\n IdentitiesReceiveRulesCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/receive-rules',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Offboard one of your customers\n *\n * Suspends every address carrying that `tenant_id`. **Suspends, never deletes** — the mail, the threads and the grants all stay, and each address emits `identity.suspended`. Deleting them is still one call each. Idempotent: it changes what is active and reports how many, so a retry is safe. It reaches only addresses you could have suspended one at a time.\n */\nexport const identitiesSuspendTenant = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSuspendTenantData, ThrowOnError>,\n): RequestResult<IdentitiesSuspendTenantResponses, IdentitiesSuspendTenantErrors, ThrowOnError> =>\n (options.client ?? client).post<\n IdentitiesSuspendTenantResponses,\n IdentitiesSuspendTenantErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/tenants/{id}/suspend',\n ...options,\n });\n\n/**\n * List labels\n *\n * The labels of one address.\n */\nexport const labelsList = <ThrowOnError extends boolean = false>(\n options: Options<LabelsListData, ThrowOnError>,\n): RequestResult<LabelsListResponses, LabelsListErrors, ThrowOnError> =>\n (options.client ?? client).get<LabelsListResponses, LabelsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels',\n ...options,\n });\n\n/**\n * Create a label\n */\nexport const labelsCreate = <ThrowOnError extends boolean = false>(\n options: Options<LabelsCreateData, ThrowOnError>,\n): RequestResult<LabelsCreateResponses, LabelsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<LabelsCreateResponses, LabelsCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete a label\n *\n * The label goes; the conversations it was on stay.\n */\nexport const labelsDelete = <ThrowOnError extends boolean = false>(\n options: Options<LabelsDeleteData, ThrowOnError>,\n): RequestResult<LabelsDeleteResponses, LabelsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<LabelsDeleteResponses, LabelsDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels/{id}',\n ...options,\n });\n\n/**\n * Rename or recolour a label\n *\n * A body with neither `name` nor `colour` is refused.\n */\nexport const labelsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<LabelsUpdateData, ThrowOnError>,\n): RequestResult<LabelsUpdateResponses, LabelsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<LabelsUpdateResponses, LabelsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Remove a label\n *\n * `label_id` in the query, because a label hangs off the conversation.\n */\nexport const threadsLabelsDelete = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsLabelsDeleteData, ThrowOnError>,\n): RequestResult<ThreadsLabelsDeleteResponses, ThreadsLabelsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n ThreadsLabelsDeleteResponses,\n ThreadsLabelsDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}/labels',\n ...options,\n });\n\n/**\n * The labels on a conversation\n */\nexport const threadsLabelsGet = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsLabelsGetData, ThrowOnError>,\n): RequestResult<ThreadsLabelsGetResponses, ThreadsLabelsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<ThreadsLabelsGetResponses, ThreadsLabelsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}/labels',\n ...options,\n });\n\n/**\n * Apply a label\n *\n * Answers the conversation’s whole label list, not just the one added.\n */\nexport const threadsLabelsCreate = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsLabelsCreateData, ThrowOnError>,\n): RequestResult<ThreadsLabelsCreateResponses, ThreadsLabelsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<\n ThreadsLabelsCreateResponses,\n ThreadsLabelsCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}/labels',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List messages\n */\nexport const messagesListInThread = <ThrowOnError extends boolean = false>(\n options: Options<MessagesListInThreadData, ThrowOnError>,\n): RequestResult<MessagesListInThreadResponses, MessagesListInThreadErrors, ThrowOnError> =>\n (options.client ?? client).get<\n MessagesListInThreadResponses,\n MessagesListInThreadErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages',\n ...options,\n });\n\n/**\n * Send a message\n *\n * Idempotent with an `Idempotency-Key` header. Answers `202` with the id, the thread and anything **rejected** — a recipient the address is not allowed to write to is refused here rather than failing later, so read `rejected` before assuming it went.\n */\nexport const messagesSend = <ThrowOnError extends boolean = false>(\n options: Options<MessagesSendData, ThrowOnError>,\n): RequestResult<MessagesSendResponses, MessagesSendErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesSendResponses, MessagesSendErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Search messages\n *\n * Full-text, ranked by relevance, across every address this credential can reach. Name an `identity_id` to search exactly one. Every result carries the address it was found in and the folder it is in, because a hit you cannot attribute to a mailbox is a hit you cannot open. Not paged: page two of a relevance ranking is a place nobody goes, so narrow the query instead.\n */\nexport const messagesSearch = <ThrowOnError extends boolean = false>(\n options?: Options<MessagesSearchData, ThrowOnError>,\n): RequestResult<MessagesSearchResponses, MessagesSearchErrors, ThrowOnError> =>\n (options?.client ?? client).get<MessagesSearchResponses, MessagesSearchErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/search',\n ...options,\n });\n\n/**\n * Apply one action to many conversations\n *\n * Up to 200, the same cap the dashboard uses. Thread-scoped, like everything else that changes a conversation. The response carries an `undo`.\n */\nexport const messagesAct = <ThrowOnError extends boolean = false>(\n options: Options<MessagesActData, ThrowOnError>,\n): RequestResult<MessagesActResponses, MessagesActErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesActResponses, MessagesActErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/actions',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Put an action back\n *\n * Hand back the `undo` from a `PATCH` or a batch. Unusual for an API to have, and the argument is that software makes mistakes at a speed a person does not.\n */\nexport const messagesUndo = <ThrowOnError extends boolean = false>(\n options: Options<MessagesUndoData, ThrowOnError>,\n): RequestResult<MessagesUndoResponses, MessagesUndoErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesUndoResponses, MessagesUndoErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/undo',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Fetch one message\n */\nexport const messagesGet = <ThrowOnError extends boolean = false>(\n options: Options<MessagesGetData, ThrowOnError>,\n): RequestResult<MessagesGetResponses, MessagesGetErrors, ThrowOnError> =>\n (options.client ?? client).get<MessagesGetResponses, MessagesGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}',\n ...options,\n });\n\n/**\n * Change one conversation\n *\n * Three different kinds of fact: `is_read` is about the reader, `is_starred` is about the mailbox, and `folder` is where the conversation lives. Thread-scoped. The response carries an `undo`.\n */\nexport const messagesUpdate = <ThrowOnError extends boolean = false>(\n options: Options<MessagesUpdateData, ThrowOnError>,\n): RequestResult<MessagesUpdateResponses, MessagesUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<MessagesUpdateResponses, MessagesUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Reply to one message\n *\n * The recipients, the subject and the thread are read off the message being answered. You bring the words.\n */\nexport const messagesReply = <ThrowOnError extends boolean = false>(\n options: Options<MessagesReplyData, ThrowOnError>,\n): RequestResult<MessagesReplyResponses, MessagesReplyErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesReplyResponses, MessagesReplyErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/reply',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Reply to everybody on one message\n *\n * Every address on the message except the ones that reach this mailbox — which a caller cannot work out, because it needs the routing table.\n */\nexport const messagesReplyAll = <ThrowOnError extends boolean = false>(\n options: Options<MessagesReplyAllData, ThrowOnError>,\n): RequestResult<MessagesReplyAllResponses, MessagesReplyAllErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesReplyAllResponses, MessagesReplyAllErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/reply-all',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Forward one message\n *\n * `to` is required: a forward exists to reach somebody the original did not.\n */\nexport const messagesForward = <ThrowOnError extends boolean = false>(\n options: Options<MessagesForwardData, ThrowOnError>,\n): RequestResult<MessagesForwardResponses, MessagesForwardErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesForwardResponses, MessagesForwardErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/forward',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The message as it arrived\n *\n * `message/rfc822`, not JSON — the point is bytes nobody re-encoded. It 404s when the original has aged out of storage, which leaves a normal parsed message.\n */\nexport const messagesRaw = <ThrowOnError extends boolean = false>(\n options: Options<MessagesRawData, ThrowOnError>,\n): RequestResult<MessagesRawResponses, MessagesRawErrors, ThrowOnError> =>\n (options.client ?? client).get<MessagesRawResponses, MessagesRawErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/raw',\n ...options,\n });\n\n/**\n * List threads\n *\n * Filter with `identity_id`, `status`, `owner_type` and `assignee_id`. `assignee_id` takes a person’s id, or the literal `unassigned` for the queue nobody has picked up — it says which *human* is answering, where `owner_type` says which kind of thing is.\n */\nexport const threadsList = <ThrowOnError extends boolean = false>(\n options?: Options<ThreadsListData, ThrowOnError>,\n): RequestResult<ThreadsListResponses, ThreadsListErrors, ThrowOnError> =>\n (options?.client ?? client).get<ThreadsListResponses, ThreadsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads',\n ...options,\n });\n\n/**\n * Read a conversation\n *\n * One conversation, by id. Every event payload carries a `thread_id`, so this is how a webhook handler turns one into something it can read.\n */\nexport const threadsGet = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsGetData, ThrowOnError>,\n): RequestResult<ThreadsGetResponses, ThreadsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<ThreadsGetResponses, ThreadsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}',\n ...options,\n });\n\n/**\n * Update a thread\n *\n * Its status and who owns it — the state a conversation carries.\n */\nexport const threadsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsUpdateData, ThrowOnError>,\n): RequestResult<ThreadsUpdateResponses, ThreadsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<ThreadsUpdateResponses, ThreadsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List domains\n */\nexport const domainsList = <ThrowOnError extends boolean = false>(\n options?: Options<DomainsListData, ThrowOnError>,\n): RequestResult<DomainsListResponses, DomainsListErrors, ThrowOnError> =>\n (options?.client ?? client).get<DomainsListResponses, DomainsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains',\n ...options,\n });\n\n/**\n * Connect a domain\n *\n * Returns the domain **and the records to publish**, because showing them to your own customer is the one thing every caller does next. DNS is the step this API cannot perform — we cannot write in somebody else’s zone — so the job is to make the human step delegable. Watch `dns_complete`: it is false while the DKIM records do not exist yet, and a list published in that state verifies and cannot sign mail.\n */\nexport const domainsCreate = <ThrowOnError extends boolean = false>(\n options: Options<DomainsCreateData, ThrowOnError>,\n): RequestResult<DomainsCreateResponses, DomainsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<DomainsCreateResponses, DomainsCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The records as a zone file\n *\n * BIND format, which Route 53, Cloudflare and most registrars import and our JSON is not. TTLs are 300: these records change twice, and a long TTL on one you are getting right is an hour of somebody else’s cache.\n */\nexport const domainsZoneFile = <ThrowOnError extends boolean = false>(\n options: Options<DomainsZoneFileData, ThrowOnError>,\n): RequestResult<DomainsZoneFileResponses, DomainsZoneFileErrors, ThrowOnError> =>\n (options.client ?? client).get<DomainsZoneFileResponses, DomainsZoneFileErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}/zone-file',\n ...options,\n });\n\n/**\n * One-click DNS setup, when the provider supports it\n *\n * The **Domain Connect** standard: the URL returned is signed by and points at the domain’s own DNS provider, where the owner signs in, reviews the records and approves — the provider writes them. Nothing here is a credential of ours.\n *\n * Answers `200` either way. `supported: false` is a fact about somebody else’s DNS provider rather than a failure of this request, and `reason` says whose problem it is: `provider` means that zone cannot do it, `unconfigured` means this deployment is not registered. Either way, fall back to `GET /domains/{id}/zone-file` or the `records` on the domain.\n *\n * `template` is `mail` (everything: ownership, DKIM and MX) or `mx` (the MX alone, for a domain already sending through us that is now going to receive).\n */\nexport const domainsGetSetupLink = <ThrowOnError extends boolean = false>(\n options: Options<DomainsGetSetupLinkData, ThrowOnError>,\n): RequestResult<DomainsGetSetupLinkResponses, DomainsGetSetupLinkErrors, ThrowOnError> =>\n (options.client ?? client).get<\n DomainsGetSetupLinkResponses,\n DomainsGetSetupLinkErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}/setup-link',\n ...options,\n });\n\n/**\n * Check the zone again\n *\n * Idempotent and safe to poll — calling it on a verified domain re-checks and says so rather than erroring. Both halves in one answer: ownership, and whether mail is configured. The floor on how often this is worth calling is the zone’s TTL. Better still, subscribe to `domain.verified` and do not poll.\n */\nexport const domainsVerify = <ThrowOnError extends boolean = false>(\n options: Options<DomainsVerifyData, ThrowOnError>,\n): RequestResult<DomainsVerifyResponses, DomainsVerifyErrors, ThrowOnError> =>\n (options.client ?? client).post<DomainsVerifyResponses, DomainsVerifyErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}/verify',\n ...options,\n });\n\n/**\n * Disconnect a domain\n *\n * Takes its addresses, their mail, their routing rules and their webhooks with it. There is no undo.\n */\nexport const domainsDelete = <ThrowOnError extends boolean = false>(\n options: Options<DomainsDeleteData, ThrowOnError>,\n): RequestResult<DomainsDeleteResponses, DomainsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<DomainsDeleteResponses, DomainsDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}',\n ...options,\n });\n\n/**\n * Fetch one domain, with the state of each record\n *\n * `dns_records[].status` says which of ownership, MX, SPF, DKIM and DMARC is missing or wrong, and `found` says what is there instead — which is the difference between your support queue and your customer fixing one TXT record.\n */\nexport const domainsGet = <ThrowOnError extends boolean = false>(\n options: Options<DomainsGetData, ThrowOnError>,\n): RequestResult<DomainsGetResponses, DomainsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<DomainsGetResponses, DomainsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}',\n ...options,\n });\n\n/**\n * Turn the catch-all on or off\n *\n * The one thing about a domain that can change. Catch-all is two gates: this switch, and a `catch_all` routing rule saying where the mail goes — so turning it on without a rule does nothing, and turning it off later does not throw away where the mail was going.\n */\nexport const domainsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<DomainsUpdateData, ThrowOnError>,\n): RequestResult<DomainsUpdateResponses, DomainsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<DomainsUpdateResponses, DomainsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List routing rules\n *\n * Every rule in the workspace, newest domain-first. `domain_id` narrows it to one domain.\n */\nexport const routingList = <ThrowOnError extends boolean = false>(\n options?: Options<RoutingListData, ThrowOnError>,\n): RequestResult<RoutingListResponses, RoutingListErrors, ThrowOnError> =>\n (options?.client ?? client).get<RoutingListResponses, RoutingListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules',\n ...options,\n });\n\n/**\n * Route an address somewhere\n *\n * An address always beats a rule, so a rule for an address that already exists is refused rather than silently ignored. Name exactly one destination: an address you could already send from, or a webhook — a webhook destination has no inbox, so the message is handed to the endpoint and then gone.\n */\nexport const routingCreate = <ThrowOnError extends boolean = false>(\n options: Options<RoutingCreateData, ThrowOnError>,\n): RequestResult<RoutingCreateResponses, RoutingCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<RoutingCreateResponses, RoutingCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete a routing rule\n */\nexport const routingDelete = <ThrowOnError extends boolean = false>(\n options: Options<RoutingDeleteData, ThrowOnError>,\n): RequestResult<RoutingDeleteResponses, RoutingDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<RoutingDeleteResponses, RoutingDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules/{id}',\n ...options,\n });\n\n/**\n * Enable or disable a rule\n *\n * A disabled rule still says where that address was going, which is what you want during an incident. What it matches and where it points are the rule itself and cannot be edited — create the replacement and delete this one.\n */\nexport const routingUpdate = <ThrowOnError extends boolean = false>(\n options: Options<RoutingUpdateData, ThrowOnError>,\n): RequestResult<RoutingUpdateResponses, RoutingUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<RoutingUpdateResponses, RoutingUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List the folders of one mailbox\n *\n * The shape of a sidebar. `identity_id` is required — there is no cross-mailbox view, because merging the folders of several addresses would invent a mailbox nobody has.\n */\nexport const mailboxesList = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesListData, ThrowOnError>,\n): RequestResult<MailboxesListResponses, MailboxesListErrors, ThrowOnError> =>\n (options.client ?? client).get<MailboxesListResponses, MailboxesListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes',\n ...options,\n });\n\n/**\n * What changed since you last looked\n *\n * Per mailbox, not per folder: a message moving from the inbox to the archive is one event, and the row says where it went. Arrivals are included, so this is the only thing to poll. `since` is the `sync_cursor` from a listing or the `next_cursor` from a previous delta — **not** a page cursor, which walks a different order and is refused rather than guessed at. A cursor older than the window in which we keep the record of what was deleted returns `410 resync`, because an empty delta would be indistinguishable from \"nothing changed\".\n */\nexport const mailboxesChanges = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesChangesData, ThrowOnError>,\n): RequestResult<MailboxesChangesResponses, MailboxesChangesErrors, ThrowOnError> =>\n (options.client ?? client).get<MailboxesChangesResponses, MailboxesChangesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes/changes',\n ...options,\n });\n\n/**\n * Empty the trash\n *\n * Only `trash`; every other folder refuses. Permanent, and it takes attachments and archived originals with it — there is no undo, because the snapshot `POST /messages/undo` replays is a set of column values and these rows are gone. `delete_forever` on `POST /messages/actions` does the same to a list you name, and caps at 200; this needs no ids.\n */\nexport const mailboxesEmptyTrash = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesEmptyTrashData, ThrowOnError>,\n): RequestResult<MailboxesEmptyTrashResponses, MailboxesEmptyTrashErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n MailboxesEmptyTrashResponses,\n MailboxesEmptyTrashErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes/{folder}',\n ...options,\n });\n\n/**\n * List one folder\n *\n * A row is a conversation — the newest message in each thread — not a message. Paged by an opaque `cursor`, which is the `next_cursor` of the page before it: it carries a sort key and an id together, because several messages can share a millisecond. Do not construct one.\n */\nexport const mailboxesListFolder = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesListFolderData, ThrowOnError>,\n): RequestResult<MailboxesListFolderResponses, MailboxesListFolderErrors, ThrowOnError> =>\n (options.client ?? client).get<\n MailboxesListFolderResponses,\n MailboxesListFolderErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes/{folder}',\n ...options,\n });\n\n/**\n * List the keys in this workspace\n *\n * Names, prefixes, what each reaches and when it was last used — never a secret. The list is what you read before revoking something.\n */\nexport const keysList = <ThrowOnError extends boolean = false>(\n options?: Options<KeysListData, ThrowOnError>,\n): RequestResult<KeysListResponses, KeysListErrors, ThrowOnError> =>\n (options?.client ?? client).get<KeysListResponses, KeysListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys',\n ...options,\n });\n\n/**\n * Mint a key\n *\n * `identity_ids` is required and must be a subset of what the calling key already reaches: a key cannot delegate reach it does not have. The `token` is in this response and nowhere else, ever.\n */\nexport const keysCreate = <ThrowOnError extends boolean = false>(\n options: Options<KeysCreateData, ThrowOnError>,\n): RequestResult<KeysCreateResponses, KeysCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<KeysCreateResponses, KeysCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Revoke a key, and everything it minted\n *\n * Transitive, and that is the point: a leaked key would otherwise mint a second one and survive its own rotation. A key may revoke itself and keys it made — not a sibling, and not its parent.\n */\nexport const keysRevoke = <ThrowOnError extends boolean = false>(\n options: Options<KeysRevokeData, ThrowOnError>,\n): RequestResult<KeysRevokeResponses, KeysRevokeErrors, ThrowOnError> =>\n (options.client ?? client).delete<KeysRevokeResponses, KeysRevokeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys/{id}',\n ...options,\n });\n\n/**\n * Fetch one key\n *\n * What it reaches and when it was last used. Never the secret — that is shown once at creation and nothing can produce it again.\n */\nexport const keysGet = <ThrowOnError extends boolean = false>(\n options: Options<KeysGetData, ThrowOnError>,\n): RequestResult<KeysGetResponses, KeysGetErrors, ThrowOnError> =>\n (options.client ?? client).get<KeysGetResponses, KeysGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys/{id}',\n ...options,\n });\n\n/**\n * Rename a key\n *\n * The only thing about a key that can change. Not its scope — a key's reach is what somebody granted when they made it, and widening that in place would let a credential already in circulation reach further than whoever issued it agreed to.\n */\nexport const keysUpdate = <ThrowOnError extends boolean = false>(\n options: Options<KeysUpdateData, ThrowOnError>,\n): RequestResult<KeysUpdateResponses, KeysUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<KeysUpdateResponses, KeysUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List the devices that reach one address\n */\nexport const appPasswordsList = <ThrowOnError extends boolean = false>(\n options: Options<AppPasswordsListData, ThrowOnError>,\n): RequestResult<AppPasswordsListResponses, AppPasswordsListErrors, ThrowOnError> =>\n (options.client ?? client).get<AppPasswordsListResponses, AppPasswordsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/app-passwords',\n ...options,\n });\n\n/**\n * Issue IMAP and SMTP credentials for one address\n *\n * What lets you hand a customer a mailbox they can open in a mail client. Only for an address this key can already **send** from — the credential reads the inbox and sends as the address, so issuing one is handing over exactly that. `username` and `password` are returned together and are useless apart.\n */\nexport const appPasswordsCreate = <ThrowOnError extends boolean = false>(\n options: Options<AppPasswordsCreateData, ThrowOnError>,\n): RequestResult<AppPasswordsCreateResponses, AppPasswordsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<\n AppPasswordsCreateResponses,\n AppPasswordsCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/app-passwords',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Revoke an app password\n */\nexport const appPasswordsRevoke = <ThrowOnError extends boolean = false>(\n options: Options<AppPasswordsRevokeData, ThrowOnError>,\n): RequestResult<AppPasswordsRevokeResponses, AppPasswordsRevokeErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n AppPasswordsRevokeResponses,\n AppPasswordsRevokeErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/app-passwords/{id}',\n ...options,\n });\n\n/**\n * What this key is, and what it may do\n *\n * The one question a credential could not ask. Everything else here answers what is *in* the account, so the only way to learn your own access was to try something and read the refusal — and a key that reaches nothing looks exactly like a key that is broken. Free: no write, no side effect, and the three facts that decide whether your next call works.\n */\nexport const meGet = <ThrowOnError extends boolean = false>(\n options?: Options<MeGetData, ThrowOnError>,\n): RequestResult<MeGetResponses, MeGetErrors, ThrowOnError> =>\n (options?.client ?? client).get<MeGetResponses, MeGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/me',\n ...options,\n });\n\n/**\n * Which account this key is for\n *\n * Read-only. Renaming is a settings field and deleting takes the calling credential with it; neither belongs to a bearer token. `plan` is here so a caller can say \"your plan allows N\" rather than discovering it from a 402.\n */\nexport const workspaceGet = <ThrowOnError extends boolean = false>(\n options?: Options<WorkspaceGetData, ThrowOnError>,\n): RequestResult<WorkspaceGetResponses, WorkspaceGetErrors, ThrowOnError> =>\n (options?.client ?? client).get<WorkspaceGetResponses, WorkspaceGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/workspace',\n ...options,\n });\n\n/**\n * List the people in this workspace\n *\n * Read-only, and workspace-level: a key with no mailbox grants can still read it, for the same reason it can list domains. Assigning a conversation needs an id from here. Inviting and removing people stay in the dashboard — an invitation is mail to a person, and removing somebody hands on their mailboxes.\n */\nexport const workspaceMembers = <ThrowOnError extends boolean = false>(\n options?: Options<WorkspaceMembersData, ThrowOnError>,\n): RequestResult<WorkspaceMembersResponses, WorkspaceMembersErrors, ThrowOnError> =>\n (options?.client ?? client).get<WorkspaceMembersResponses, WorkspaceMembersErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/workspace/members',\n ...options,\n });\n\n/**\n * List events\n *\n * The same events a webhook delivers, readable after the fact — so a missed delivery is recoverable without replaying anything.\n *\n * **Two directions.** `cursor` pages backwards through history, newest first, which is what a dashboard shows. `after` tails the log forwards, oldest first, which is what a caller that cannot receive a webhook does: ask for everything since the last event you saw, act on it, and keep the last `created_at` as the next cursor. Naming both is refused — they are different reads.\n *\n * A forward page is ordered oldest first precisely so its **last** row is the high-water mark to resume from; `next_cursor` is that row either way.\n */\nexport const eventsList = <ThrowOnError extends boolean = false>(\n options?: Options<EventsListData, ThrowOnError>,\n): RequestResult<EventsListResponses, EventsListErrors, ThrowOnError> =>\n (options?.client ?? client).get<EventsListResponses, EventsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/events',\n ...options,\n });\n\n/**\n * Stream events as they happen\n *\n * The event log held open, for a caller that cannot host a webhook endpoint — a script on a laptop, a notebook, an agent runtime with no public address.\n *\n * **Server-sent events.** Each message carries the event as `data`, the event type as `event:`, and the cursor to resume from as `id:`. Authentication, filtering by `type` and `identity_id`, and the `after` cursor are all exactly as on `GET /events` — this is that read, held open.\n *\n * **Reconnection is automatic and lossless.** A compliant client resends the last `id:` it saw as `Last-Event-ID`, which is preferred over `after`, so a dropped connection resumes with no gap and no repeat. The connection closes itself after about 280 seconds so that the last thing you receive is a cursor rather than a socket error; reconnect and carry on.\n *\n * **It polls, every two seconds, on our side of the wire.** No push exists in the database. What this buys is one held connection instead of a request from your network on a timer, and being woken only when something happened.\n */\nexport const eventsStream = <ThrowOnError extends boolean = false>(\n options?: Options<EventsStreamData, ThrowOnError, EventsStreamResponse>,\n): Promise<ServerSentEventsResult<EventsStreamResponses>> =>\n (options?.client ?? client).sse.get<EventsStreamResponses, EventsStreamErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/events/stream',\n ...options,\n });\n\n/**\n * Fetch one event\n */\nexport const eventsGet = <ThrowOnError extends boolean = false>(\n options: Options<EventsGetData, ThrowOnError>,\n): RequestResult<EventsGetResponses, EventsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<EventsGetResponses, EventsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/events/{id}',\n ...options,\n });\n\n/**\n * List webhooks\n */\nexport const webhooksList = <ThrowOnError extends boolean = false>(\n options?: Options<WebhooksListData, ThrowOnError>,\n): RequestResult<WebhooksListResponses, WebhooksListErrors, ThrowOnError> =>\n (options?.client ?? client).get<WebhooksListResponses, WebhooksListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks',\n ...options,\n });\n\n/**\n * Create a webhook\n *\n * The signing secret is returned once, here, and never again. Every delivery is signed with it as HMAC-SHA256.\n */\nexport const webhooksCreate = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksCreateData, ThrowOnError>,\n): RequestResult<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete a webhook\n */\nexport const webhooksDelete = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksDeleteData, ThrowOnError>,\n): RequestResult<WebhooksDeleteResponses, WebhooksDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<WebhooksDeleteResponses, WebhooksDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}',\n ...options,\n });\n\n/**\n * Fetch one endpoint\n */\nexport const webhooksGet = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksGetData, ThrowOnError>,\n): RequestResult<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError> =>\n (options.client ?? client).get<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}',\n ...options,\n });\n\n/**\n * Turn an endpoint off, or back on\n *\n * We disable one ourselves after enough consecutive failures. Without this you would have to delete and recreate it, which changes the signing secret every receiver is verifying against. Re-enabling forgives the failure count.\n */\nexport const webhooksUpdate = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksUpdateData, ThrowOnError>,\n): RequestResult<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The headers this endpoint carries\n *\n * Returned in full. Our signing secret never is, and the difference is whose credential it is: the secret is ours, and these are your own token for your own endpoint.\n */\nexport const webhooksGetHeaders = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksGetHeadersData, ThrowOnError>,\n): RequestResult<WebhooksGetHeadersResponses, WebhooksGetHeadersErrors, ThrowOnError> =>\n (options.client ?? client).get<\n WebhooksGetHeadersResponses,\n WebhooksGetHeadersErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}/headers',\n ...options,\n });\n\n/**\n * Replace the headers this endpoint carries\n *\n * We sign every delivery, and a signature answers *is this from Pidgeon*. It does not answer the question a gateway asks, which is *does this request carry the token we issued*. PUT, not PATCH: what you send is what the endpoint has afterwards, and `{}` clears them — a merge could not remove one, and removing one is what rotating a token is. The headers we set ourselves are refused by name.\n */\nexport const webhooksUpdateHeaders = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksUpdateHeadersData, ThrowOnError>,\n): RequestResult<WebhooksUpdateHeadersResponses, WebhooksUpdateHeadersErrors, ThrowOnError> =>\n (options.client ?? client).put<\n WebhooksUpdateHeadersResponses,\n WebhooksUpdateHeadersErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}/headers',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * What happened to each event we tried to hand you\n *\n * `webhook_id` is required — the question is always about one endpoint. The ids here are what the replay below takes.\n */\nexport const webhooksDeliveries = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksDeliveriesData, ThrowOnError>,\n): RequestResult<WebhooksDeliveriesResponses, WebhooksDeliveriesErrors, ThrowOnError> =>\n (options.client ?? client).get<\n WebhooksDeliveriesResponses,\n WebhooksDeliveriesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/deliveries',\n ...options,\n });\n\n/**\n * Send it again\n *\n * Re-queues one attempt and resets its count. A verb rather than a status field, because the other statuses are ours to write and mean nothing coming from outside.\n */\nexport const webhooksReplay = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksReplayData, ThrowOnError>,\n): RequestResult<WebhooksReplayResponses, WebhooksReplayErrors, ThrowOnError> =>\n (options.client ?? client).post<WebhooksReplayResponses, WebhooksReplayErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/deliveries/{id}/replay',\n ...options,\n });\n\n/**\n * Accept, decline or tentatively accept a meeting\n *\n * The one call here that changes something in somebody else's calendar: an iCalendar `REPLY` goes to the organiser, which is how Google, Outlook and Calendly learn about an acceptance. The message must be carrying an `invitation`, and one of this mailbox's own addresses must be on it — including an address routed to it, which is the half you cannot work out from the message. Idempotent on the answer: the same answer to the same `sequence` sends once and returns `already_sent`.\n */\nexport const messagesRespondToInvitation = <ThrowOnError extends boolean = false>(\n options: Options<MessagesRespondToInvitationData, ThrowOnError>,\n): RequestResult<\n MessagesRespondToInvitationResponses,\n MessagesRespondToInvitationErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n MessagesRespondToInvitationResponses,\n MessagesRespondToInvitationErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/invitation/respond',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * A mailbox’s calendar\n *\n * Every mailbox has exactly one, from the moment it exists, so there is nothing to create. `created_at` is the mailbox’s, because the calendar is the mailbox.\n */\nexport const calendarGet = <ThrowOnError extends boolean = false>(\n options: Options<CalendarGetData, ThrowOnError>,\n): RequestResult<CalendarGetResponses, CalendarGetErrors, ThrowOnError> =>\n (options.client ?? client).get<CalendarGetResponses, CalendarGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar',\n ...options,\n });\n\n/**\n * Set the default time zone\n *\n * The zone an event created without one gets. **Changing it does not move existing events**: an event stores the wall time it was given, so \"every Tuesday at 09:00\" is still 09:00 afterwards.\n */\nexport const calendarUpdate = <ThrowOnError extends boolean = false>(\n options: Options<CalendarUpdateData, ThrowOnError>,\n): RequestResult<CalendarUpdateResponses, CalendarUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<CalendarUpdateResponses, CalendarUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Everything on the calendar\n *\n * Ordered by when it last changed. `GET /agenda` is the other read and the one you usually want: this answers *what is on this calendar*, that answers *what is on between these two moments*.\n */\nexport const calendarListEvents = <ThrowOnError extends boolean = false>(\n options: Options<CalendarListEventsData, ThrowOnError>,\n): RequestResult<CalendarListEventsResponses, CalendarListEventsErrors, ThrowOnError> =>\n (options.client ?? client).get<\n CalendarListEventsResponses,\n CalendarListEventsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events',\n ...options,\n });\n\n/**\n * Put something on the calendar\n *\n * `start` and `end` are **local wall times with no zone on them** — `2026-10-20T14:00:00` — and `timezone` is a field of its own. That pair is the truth; `starts_at` is the same moment as an instant, derived from it, and it is what survives a daylight-saving change. For an all-day event, `end` is the last day, inclusive.\n */\nexport const calendarCreateEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarCreateEventData, ThrowOnError>,\n): RequestResult<CalendarCreateEventResponses, CalendarCreateEventErrors, ThrowOnError> =>\n (options.client ?? client).post<\n CalendarCreateEventResponses,\n CalendarCreateEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Answer a meeting from the calendar\n *\n * The same act as `POST /messages/{id}/invitation/respond`, reached from the other end — an agent working from an agenda holds an event id and not a message id. When the meeting came from mail and `send_reply` is true (the default), an iCalendar `REPLY` goes to the organiser and the answer is written onto the event. When it did not — a meeting this mailbox created itself — there is nobody to reply to, so the answer is recorded and `reply_sent` is false. One of this mailbox’s own addresses must be on the attendee list, including an address routed to it.\n */\nexport const calendarRespondToEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarRespondToEventData, ThrowOnError>,\n): RequestResult<CalendarRespondToEventResponses, CalendarRespondToEventErrors, ThrowOnError> =>\n (options.client ?? client).post<\n CalendarRespondToEventResponses,\n CalendarRespondToEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}/respond',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The dates a series actually happens\n *\n * Most of them have no row — they are expanded from the rule, which is what makes a weekly meeting cheap to store. An id here is `{seriesId}::{originalStart}`, derived rather than allocated, and it does **not** change when you edit that date. A date somebody edited comes back in place of the one the rule generated, under that id.\n */\nexport const calendarListEventInstances = <ThrowOnError extends boolean = false>(\n options: Options<CalendarListEventInstancesData, ThrowOnError>,\n): RequestResult<\n CalendarListEventInstancesResponses,\n CalendarListEventInstancesErrors,\n ThrowOnError\n> =>\n (options.client ?? client).get<\n CalendarListEventInstancesResponses,\n CalendarListEventInstancesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}/instances',\n ...options,\n });\n\n/**\n * What is on, in a window, in order\n *\n * `include_overlapping` defaults to true, which is the difference between *what starts today* and *what is on today*: a meeting that began last night and runs into this morning is on today, and a naive `starts_at between` misses it. Cancelled events are left out — an agenda is what you are doing.\n */\nexport const calendarGetAgenda = <ThrowOnError extends boolean = false>(\n options: Options<CalendarGetAgendaData, ThrowOnError>,\n): RequestResult<CalendarGetAgendaResponses, CalendarGetAgendaErrors, ThrowOnError> =>\n (options.client ?? client).get<CalendarGetAgendaResponses, CalendarGetAgendaErrors, ThrowOnError>(\n {\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/agenda',\n ...options,\n },\n );\n\n/**\n * Take it off the calendar\n *\n * On one date of a series this records that the date does not happen rather than removing a row — the rule still generates it, so a removal would bring it straight back. `mode=future` ends the series there and leaves every earlier date alone.\n */\nexport const calendarDeleteEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarDeleteEventData, ThrowOnError>,\n): RequestResult<CalendarDeleteEventResponses, CalendarDeleteEventErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n CalendarDeleteEventResponses,\n CalendarDeleteEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}',\n ...options,\n });\n\n/**\n * One event\n */\nexport const calendarGetEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarGetEventData, ThrowOnError>,\n): RequestResult<CalendarGetEventResponses, CalendarGetEventErrors, ThrowOnError> =>\n (options.client ?? client).get<CalendarGetEventResponses, CalendarGetEventErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}',\n ...options,\n });\n\n/**\n * Change an event\n *\n * An omitted field survives. `sequence` rises only when the change is one attendees see — the time, the title, the place, the status, the list. A `metadata` edit moves the `etag` and not the sequence, because nobody is ever told about it.\n */\nexport const calendarUpdateEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarUpdateEventData, ThrowOnError>,\n): RequestResult<CalendarUpdateEventResponses, CalendarUpdateEventErrors, ThrowOnError> =>\n (options.client ?? client).patch<\n CalendarUpdateEventResponses,\n CalendarUpdateEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Every draft in one mailbox\n *\n * Newest first, and including scheduled ones — a scheduled message is a draft with `send_at` set. `GET /mailboxes/drafts` lists the same rows as a mail client draws them: sender, subject, preview. This gives the recipients and the body, because a caller here is coming back to finish writing.\n */\nexport const draftsList = <ThrowOnError extends boolean = false>(\n options: Options<DraftsListData, ThrowOnError>,\n): RequestResult<DraftsListResponses, DraftsListErrors, ThrowOnError> =>\n (options.client ?? client).get<DraftsListResponses, DraftsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts',\n ...options,\n });\n\n/**\n * Write one without sending it\n *\n * An agent that drafts a reply, waits for a human to approve it and sends it an hour later is ordinary supervised automation, and this is where the half-written message lives in the meantime. Idempotent with `Idempotency-Key`.\n */\nexport const draftsCreate = <ThrowOnError extends boolean = false>(\n options: Options<DraftsCreateData, ThrowOnError>,\n): RequestResult<DraftsCreateResponses, DraftsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<DraftsCreateResponses, DraftsCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Throw it away\n */\nexport const draftsDelete = <ThrowOnError extends boolean = false>(\n options: Options<DraftsDeleteData, ThrowOnError>,\n): RequestResult<DraftsDeleteResponses, DraftsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<DraftsDeleteResponses, DraftsDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}',\n ...options,\n });\n\n/**\n * Fetch one draft\n */\nexport const draftsGet = <ThrowOnError extends boolean = false>(\n options: Options<DraftsGetData, ThrowOnError>,\n): RequestResult<DraftsGetResponses, DraftsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<DraftsGetResponses, DraftsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}',\n ...options,\n });\n\n/**\n * Change some of it, and leave the rest\n *\n * An omitted field survives; `null` clears it. Both are needed, because \"I am not touching the subject\" and \"there is no subject\" are different instructions.\n */\nexport const draftsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<DraftsUpdateData, ThrowOnError>,\n): RequestResult<DraftsUpdateResponses, DraftsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<DraftsUpdateResponses, DraftsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Send what is stored\n *\n * No body: the row is the message. The browser passes the composer contents and the draft id together, because the composer *is* the draft; a caller here saved it an hour ago and may be a different process. `PATCH` first to change anything. The id that comes back is the draft's, because a send converts the row.\n */\nexport const draftsSend = <ThrowOnError extends boolean = false>(\n options: Options<DraftsSendData, ThrowOnError>,\n): RequestResult<DraftsSendResponses, DraftsSendErrors, ThrowOnError> =>\n (options.client ?? client).post<DraftsSendResponses, DraftsSendErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/send',\n ...options,\n });\n\n/**\n * Back to being an ordinary draft\n */\nexport const draftsCancelSchedule = <ThrowOnError extends boolean = false>(\n options: Options<DraftsCancelScheduleData, ThrowOnError>,\n): RequestResult<DraftsCancelScheduleResponses, DraftsCancelScheduleErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n DraftsCancelScheduleResponses,\n DraftsCancelScheduleErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/schedule',\n ...options,\n });\n\n/**\n * Send it later\n *\n * A minute from now at the earliest, thirty days at the latest. A refused send unschedules rather than retrying forever, so a draft can come back on its own with `failed_reason` set — read that before scheduling the same message again.\n */\nexport const draftsSchedule = <ThrowOnError extends boolean = false>(\n options: Options<DraftsScheduleData, ThrowOnError>,\n): RequestResult<DraftsScheduleResponses, DraftsScheduleErrors, ThrowOnError> =>\n (options.client ?? client).post<DraftsScheduleResponses, DraftsScheduleErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/schedule',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Take a file off a draft\n *\n * The object goes with the row. An attachment belongs to its draft rather than being shared, so leaving the bytes behind would be storage nobody can reach and everybody is billed for. `POST /attachments` is how one gets on.\n */\nexport const draftsRemoveAttachment = <ThrowOnError extends boolean = false>(\n options: Options<DraftsRemoveAttachmentData, ThrowOnError>,\n): RequestResult<DraftsRemoveAttachmentResponses, DraftsRemoveAttachmentErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n DraftsRemoveAttachmentResponses,\n DraftsRemoveAttachmentErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/attachments/{attachmentId}',\n ...options,\n });\n\n/**\n * What happened to the mail\n *\n * Counted from the event log rather than from the messages: a message row says what was sent, and whether it bounced is something the provider told us afterwards. `identity_id` narrows it to one mailbox, which is the question worth asking when you run several — reputation belongs to the address that sent the mail. `delivery_rate` is null rather than zero when nothing was sent.\n */\nexport const metricsQuery = <ThrowOnError extends boolean = false>(\n options?: Options<MetricsQueryData, ThrowOnError>,\n): RequestResult<MetricsQueryResponses, MetricsQueryErrors, ThrowOnError> =>\n (options?.client ?? client).get<MetricsQueryResponses, MetricsQueryErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/metrics',\n ...options,\n });\n\n/**\n * Upload a file to send\n *\n * Multipart, with `identity_id` and `file` parts — not base64 in JSON, because a ten-megabyte PDF is thirteen megabytes of base64 and every proxy in between would have to be told. Name the returned id in `attachment_ids` on a send. An upload expires in a day: it is a file no message refers to yet.\n */\nexport const attachmentsUpload = <ThrowOnError extends boolean = false>(\n options: Options<AttachmentsUploadData, ThrowOnError>,\n): RequestResult<AttachmentsUploadResponses, AttachmentsUploadErrors, ThrowOnError> =>\n (options.client ?? client).post<\n AttachmentsUploadResponses,\n AttachmentsUploadErrors,\n ThrowOnError\n >({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/attachments',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers,\n },\n });\n\n/**\n * Get a download link for an attachment\n *\n * A signed URL rather than the bytes: streaming a 25 MB file through the API costs the transfer twice and gains the caller nothing. The link expires.\n */\nexport const attachmentsDownloadUrl = <ThrowOnError extends boolean = false>(\n options: Options<AttachmentsDownloadUrlData, ThrowOnError>,\n): RequestResult<AttachmentsDownloadUrlResponses, AttachmentsDownloadUrlErrors, ThrowOnError> =>\n (options.client ?? client).get<\n AttachmentsDownloadUrlResponses,\n AttachmentsDownloadUrlErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/attachments/{id}',\n ...options,\n });\n","/**\n * Verifying a delivery.\n *\n * The only part of this package with a security contract: it is what a\n * customer runs to decide whether a request claiming a message arrived\n * actually came from us. Everything else here is a typed `fetch`.\n *\n * Two properties carry that contract, and both are tested against payloads\n * signed by the server's own implementation — see\n * `tests/unit/sdk-webhook-verifier.test.ts`. Testing this file against\n * itself would prove only that it agrees with itself, which is exactly the\n * bug two implementations of one scheme produce.\n */\n\nexport const SIGNATURE_HEADER = 'x-pidgeon-signature';\nexport const TIMESTAMP_HEADER = 'x-pidgeon-timestamp';\n\nexport interface WebhookEnvelope {\n id: string;\n type: string;\n created_at: string;\n data: Record<string, unknown>;\n}\n\n/**\n * Verifies a delivery and returns its payload.\n *\n * Throws rather than returning false, because the one thing this must not\n * allow is a caller who forgets to check the boolean. Uses `crypto.subtle`,\n * so it works unchanged in Node, Bun, Deno, Workers and Vercel functions.\n *\n * `rawBody` must be the exact bytes we sent. Re-serialising parsed JSON\n * changes key order and whitespace, and the signature will not match — read\n * the body as text before you parse it.\n */\nexport async function verifyWebhook(input: {\n rawBody: string;\n headers: Headers | Record<string, string | undefined>;\n secret: string;\n toleranceSeconds?: number;\n now?: Date;\n}): Promise<WebhookEnvelope> {\n /*\n * **However the framework spells it**, which this did not do.\n *\n * It read `headers[name] ?? headers[name.toLowerCase()]`, and `name` is\n * already one of the lowercase constants above — so the fallback lowercased\n * a string that was lowercase and looked up the same key twice. A plain\n * object keyed `X-Pidgeon-Signature` was rejected as unsigned.\n *\n * It survived every test and every local run because `Headers` and Node's\n * `req.headers` both lowercase their keys for you, so the broken branch is\n * only reached by a plain object somebody built themselves — which is what\n * API Gateway hands a Lambda, and what any test fixture written by hand\n * looks like. `pidgeon` on PyPI has done this correctly at the same version\n * number, and that module's docstring says keeping the two in step is the\n * point of writing it twice.\n *\n * The rejection made it worse: *\"This request is not signed.\"* is the same\n * sentence `/docs/webhooks/verifying` tells you means *you parsed the body\n * first*, so the documentation sent you to the wrong cause. Found by a\n * field test on 15 October, against docs that promise case-insensitive\n * matching in both clients.\n */\n const get = (name: string): string | undefined => {\n if (input.headers instanceof Headers) return input.headers.get(name) ?? undefined;\n\n const direct = input.headers[name];\n if (direct !== undefined) return direct;\n\n const wanted = name.toLowerCase();\n for (const [key, value] of Object.entries(input.headers)) {\n if (key.toLowerCase() === wanted) return value;\n }\n\n return undefined;\n };\n\n const timestamp = get(TIMESTAMP_HEADER);\n const signature = get(SIGNATURE_HEADER);\n\n if (!timestamp || !signature) throw new Error('This request is not signed.');\n\n const seconds = Number(timestamp);\n if (!Number.isFinite(seconds)) throw new Error('The signature timestamp is not a number.');\n\n const now = Math.floor((input.now ?? new Date()).getTime() / 1000);\n const tolerance = input.toleranceSeconds ?? 300;\n\n if (Math.abs(now - seconds) > tolerance) {\n throw new Error('This request is too old to trust. It may be a replay.');\n }\n\n const key = await crypto.subtle.importKey(\n 'raw',\n new TextEncoder().encode(input.secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n\n const mac = await crypto.subtle.sign(\n 'HMAC',\n key,\n new TextEncoder().encode(`${seconds}.${input.rawBody}`),\n );\n\n const expected = `v1=${[...new Uint8Array(mac)].map((byte) => byte.toString(16).padStart(2, '0')).join('')}`;\n\n if (!constantTimeEqual(expected, signature)) {\n throw new Error('The signature does not match.');\n }\n\n return JSON.parse(input.rawBody) as WebhookEnvelope;\n}\n\n/** Length-independent compare. Not `===`, which returns on the first byte. */\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n\n let difference = 0;\n for (let index = 0; index < a.length; index += 1) {\n difference |= a.charCodeAt(index) ^ b.charCodeAt(index);\n }\n\n return difference === 0;\n}\n"],"mappings":"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","names":["joinedValues","config","request","url","key"]}
1
+ {"version":3,"sources":["../src/index.ts","../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/webhooks.ts","../src/stream.ts"],"sourcesContent":["/**\n * `@pidgeon-ai/sdk` — a typed client for the Pidgeon email API.\n *\n * import { client, messagesSend, verifyWebhook } from '@pidgeon-ai/sdk';\n *\n * client.setConfig({ baseUrl: 'https://pidgeon.ai/api/v1', auth: () => key });\n * await messagesSend({ body: { from: 'hi@yours.test', to: ['a@b.test'] } });\n *\n * **Everything above `verifyWebhook` is generated** from\n * `public/openapi.json`, which is itself generated from the Zod schemas the\n * routes validate with and checked against real routes by\n * `tests/integration/api-contract.test.ts`. Adding an endpoint means editing\n * those schemas; this package is wrong until `pnpm sdk` regenerates it, and\n * `pnpm sdk:check` fails the build while it is.\n * `prd/one-source-of-capability.md` has the chain.\n *\n * **`messagesSend` rather than `messages.send`**, and the stutter is\n * deliberate: `openapi-python-client` builds `messages/messages_send.py`\n * from the same `operationId` and offers no way to rename it, so a prettier\n * TypeScript surface would cost the property that the two clients name every\n * operation the same thing. §343.\n *\n * `webhooks.ts` and `stream.ts` are the exceptions. HMAC over\n * `timestamp.body` is a security contract, not an endpoint; OpenAPI has\n * nothing to say about it, and a generator cannot produce it. Server-sent\n * events are the same shape of gap from the other end: the endpoint is in\n * the contract and generates a `fetch` that resolves once, which is not\n * what a held-open connection is.\n */\n\nexport * from './generated';\n\n/*\n * The client itself, which the generated index does not export.\n *\n * Without it there is no way to set a base URL or an API key, so every\n * function in the package would call `https://pidgeon.ai/api/v1`\n * unauthenticated. Re-exported here rather than patched into the generated\n * file, because that file is overwritten on every `pnpm sdk`.\n */\nexport { client, type CreateClientConfig } from './generated/client.gen';\nexport { createClient, createConfig } from './generated/client';\n\nexport {\n verifyWebhook,\n SIGNATURE_HEADER,\n TIMESTAMP_HEADER,\n type WebhookEnvelope,\n} from './webhooks';\n\n/*\n * The second exception, and the last one.\n *\n * `GET /events/stream` answers `text/event-stream`, and a generated client\n * builds a typed `fetch` that resolves once with a body — there is nowhere\n * in it for a connection that stays open. So `eventsStream` is in the types\n * and is not usable, and the endpoint the docs recommend to anybody who\n * cannot host a webhook was the one every customer wrote themselves.\n */\nexport { streamEvents, type StreamedEvent, type StreamOptions } from './stream';\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (data: FormData, key: string, value: unknown): void => {\n if (typeof value === 'string' || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value: unknown): void => {\n if (typeof value === 'string') {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: (body: unknown): string =>\n JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\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> = (\n override?: Config<ClientOptions & T>,\n) => Config<Required<ClientOptions> & T>;\n\nexport const client: Client = createClient(\n createConfig<ClientOptions2>({ baseUrl: 'https://pidgeon.ai/api/v1' }),\n);\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport {\n type Client,\n type ClientMeta,\n formDataBodySerializer,\n type Options as Options2,\n type RequestResult,\n type ServerSentEventsResult,\n type TDataShape,\n} from './client';\nimport { client } from './client.gen';\nimport type {\n AgentAttachHumanData,\n AgentAttachHumanErrors,\n AgentAttachHumanResponses,\n AgentSignUpData,\n AgentSignUpErrors,\n AgentSignUpResponses,\n AgentVerifyData,\n AgentVerifyErrors,\n AgentVerifyResponses,\n AppPasswordsCreateData,\n AppPasswordsCreateErrors,\n AppPasswordsCreateResponses,\n AppPasswordsListData,\n AppPasswordsListErrors,\n AppPasswordsListResponses,\n AppPasswordsRevokeData,\n AppPasswordsRevokeErrors,\n AppPasswordsRevokeResponses,\n AttachmentsDownloadUrlData,\n AttachmentsDownloadUrlErrors,\n AttachmentsDownloadUrlResponses,\n AttachmentsUploadData,\n AttachmentsUploadErrors,\n AttachmentsUploadResponses,\n CalendarCreateEventData,\n CalendarCreateEventErrors,\n CalendarCreateEventResponses,\n CalendarDeleteEventData,\n CalendarDeleteEventErrors,\n CalendarDeleteEventResponses,\n CalendarGetAgendaData,\n CalendarGetAgendaErrors,\n CalendarGetAgendaResponses,\n CalendarGetData,\n CalendarGetErrors,\n CalendarGetEventData,\n CalendarGetEventErrors,\n CalendarGetEventResponses,\n CalendarGetResponses,\n CalendarListEventInstancesData,\n CalendarListEventInstancesErrors,\n CalendarListEventInstancesResponses,\n CalendarListEventsData,\n CalendarListEventsErrors,\n CalendarListEventsResponses,\n CalendarRespondToEventData,\n CalendarRespondToEventErrors,\n CalendarRespondToEventResponses,\n CalendarUpdateData,\n CalendarUpdateErrors,\n CalendarUpdateEventData,\n CalendarUpdateEventErrors,\n CalendarUpdateEventResponses,\n CalendarUpdateResponses,\n DomainsCreateData,\n DomainsCreateErrors,\n DomainsCreateResponses,\n DomainsDeleteData,\n DomainsDeleteErrors,\n DomainsDeleteResponses,\n DomainsGetData,\n DomainsGetErrors,\n DomainsGetResponses,\n DomainsGetSetupLinkData,\n DomainsGetSetupLinkErrors,\n DomainsGetSetupLinkResponses,\n DomainsListData,\n DomainsListErrors,\n DomainsListResponses,\n DomainsUpdateData,\n DomainsUpdateErrors,\n DomainsUpdateResponses,\n DomainsVerifyData,\n DomainsVerifyErrors,\n DomainsVerifyResponses,\n DomainsZoneFileData,\n DomainsZoneFileErrors,\n DomainsZoneFileResponses,\n DraftsCancelScheduleData,\n DraftsCancelScheduleErrors,\n DraftsCancelScheduleResponses,\n DraftsCreateData,\n DraftsCreateErrors,\n DraftsCreateResponses,\n DraftsDeleteData,\n DraftsDeleteErrors,\n DraftsDeleteResponses,\n DraftsGetData,\n DraftsGetErrors,\n DraftsGetResponses,\n DraftsListData,\n DraftsListErrors,\n DraftsListResponses,\n DraftsRemoveAttachmentData,\n DraftsRemoveAttachmentErrors,\n DraftsRemoveAttachmentResponses,\n DraftsScheduleData,\n DraftsScheduleErrors,\n DraftsScheduleResponses,\n DraftsSendData,\n DraftsSendErrors,\n DraftsSendResponses,\n DraftsUpdateData,\n DraftsUpdateErrors,\n DraftsUpdateResponses,\n EventsGetData,\n EventsGetErrors,\n EventsGetResponses,\n EventsListData,\n EventsListErrors,\n EventsListResponses,\n EventsStreamData,\n EventsStreamErrors,\n EventsStreamResponse,\n EventsStreamResponses,\n IdentitiesAccessCreateData,\n IdentitiesAccessCreateErrors,\n IdentitiesAccessCreateResponses,\n IdentitiesAccessDeleteData,\n IdentitiesAccessDeleteErrors,\n IdentitiesAccessDeleteResponses,\n IdentitiesAccessGetData,\n IdentitiesAccessGetErrors,\n IdentitiesAccessGetResponses,\n IdentitiesCreateData,\n IdentitiesCreateErrors,\n IdentitiesCreateResponses,\n IdentitiesDeleteData,\n IdentitiesDeleteErrors,\n IdentitiesDeleteResponses,\n IdentitiesGetData,\n IdentitiesGetErrors,\n IdentitiesGetResponses,\n IdentitiesListData,\n IdentitiesListErrors,\n IdentitiesListResponses,\n IdentitiesReceiveRulesCreateData,\n IdentitiesReceiveRulesCreateErrors,\n IdentitiesReceiveRulesCreateResponses,\n IdentitiesReceiveRulesDeleteData,\n IdentitiesReceiveRulesDeleteErrors,\n IdentitiesReceiveRulesDeleteResponses,\n IdentitiesReceiveRulesGetData,\n IdentitiesReceiveRulesGetErrors,\n IdentitiesReceiveRulesGetResponses,\n IdentitiesSendRulesCreateData,\n IdentitiesSendRulesCreateErrors,\n IdentitiesSendRulesCreateResponses,\n IdentitiesSendRulesDeleteData,\n IdentitiesSendRulesDeleteErrors,\n IdentitiesSendRulesDeleteResponses,\n IdentitiesSendRulesGetData,\n IdentitiesSendRulesGetErrors,\n IdentitiesSendRulesGetResponses,\n IdentitiesSuspendTenantData,\n IdentitiesSuspendTenantErrors,\n IdentitiesSuspendTenantResponses,\n IdentitiesUpdateData,\n IdentitiesUpdateErrors,\n IdentitiesUpdateResponses,\n KeysCreateData,\n KeysCreateErrors,\n KeysCreateResponses,\n KeysGetData,\n KeysGetErrors,\n KeysGetResponses,\n KeysListData,\n KeysListErrors,\n KeysListResponses,\n KeysRevokeData,\n KeysRevokeErrors,\n KeysRevokeResponses,\n KeysUpdateData,\n KeysUpdateErrors,\n KeysUpdateResponses,\n LabelsCreateData,\n LabelsCreateErrors,\n LabelsCreateResponses,\n LabelsDeleteData,\n LabelsDeleteErrors,\n LabelsDeleteResponses,\n LabelsListData,\n LabelsListErrors,\n LabelsListResponses,\n LabelsUpdateData,\n LabelsUpdateErrors,\n LabelsUpdateResponses,\n MailboxesChangesData,\n MailboxesChangesErrors,\n MailboxesChangesResponses,\n MailboxesEmptyTrashData,\n MailboxesEmptyTrashErrors,\n MailboxesEmptyTrashResponses,\n MailboxesListData,\n MailboxesListErrors,\n MailboxesListFolderData,\n MailboxesListFolderErrors,\n MailboxesListFolderResponses,\n MailboxesListResponses,\n MeGetData,\n MeGetErrors,\n MeGetResponses,\n MessagesActData,\n MessagesActErrors,\n MessagesActResponses,\n MessagesForwardData,\n MessagesForwardErrors,\n MessagesForwardResponses,\n MessagesGetData,\n MessagesGetErrors,\n MessagesGetResponses,\n MessagesListInThreadData,\n MessagesListInThreadErrors,\n MessagesListInThreadResponses,\n MessagesRawData,\n MessagesRawErrors,\n MessagesRawResponses,\n MessagesReplyAllData,\n MessagesReplyAllErrors,\n MessagesReplyAllResponses,\n MessagesReplyData,\n MessagesReplyErrors,\n MessagesReplyResponses,\n MessagesRespondToInvitationData,\n MessagesRespondToInvitationErrors,\n MessagesRespondToInvitationResponses,\n MessagesSearchData,\n MessagesSearchErrors,\n MessagesSearchResponses,\n MessagesSendData,\n MessagesSendErrors,\n MessagesSendResponses,\n MessagesUndoData,\n MessagesUndoErrors,\n MessagesUndoResponses,\n MessagesUpdateData,\n MessagesUpdateErrors,\n MessagesUpdateResponses,\n MetricsQueryData,\n MetricsQueryErrors,\n MetricsQueryResponses,\n PodsCreateData,\n PodsCreateErrors,\n PodsCreateResponses,\n PodsGetData,\n PodsGetErrors,\n PodsGetResponses,\n PodsListData,\n PodsListErrors,\n PodsListResponses,\n PodsUpdateData,\n PodsUpdateErrors,\n PodsUpdateResponses,\n RoutingCreateData,\n RoutingCreateErrors,\n RoutingCreateResponses,\n RoutingDeleteData,\n RoutingDeleteErrors,\n RoutingDeleteResponses,\n RoutingListData,\n RoutingListErrors,\n RoutingListResponses,\n RoutingUpdateData,\n RoutingUpdateErrors,\n RoutingUpdateResponses,\n ThreadsGetData,\n ThreadsGetErrors,\n ThreadsGetResponses,\n ThreadsLabelsCreateData,\n ThreadsLabelsCreateErrors,\n ThreadsLabelsCreateResponses,\n ThreadsLabelsDeleteData,\n ThreadsLabelsDeleteErrors,\n ThreadsLabelsDeleteResponses,\n ThreadsLabelsGetData,\n ThreadsLabelsGetErrors,\n ThreadsLabelsGetResponses,\n ThreadsListData,\n ThreadsListErrors,\n ThreadsListResponses,\n ThreadsUpdateData,\n ThreadsUpdateErrors,\n ThreadsUpdateResponses,\n WebhooksCreateData,\n WebhooksCreateErrors,\n WebhooksCreateResponses,\n WebhooksDeleteData,\n WebhooksDeleteErrors,\n WebhooksDeleteResponses,\n WebhooksDeliveriesData,\n WebhooksDeliveriesErrors,\n WebhooksDeliveriesResponses,\n WebhooksGetData,\n WebhooksGetErrors,\n WebhooksGetHeadersData,\n WebhooksGetHeadersErrors,\n WebhooksGetHeadersResponses,\n WebhooksGetResponses,\n WebhooksListData,\n WebhooksListErrors,\n WebhooksListResponses,\n WebhooksReplayData,\n WebhooksReplayErrors,\n WebhooksReplayResponses,\n WebhooksUpdateData,\n WebhooksUpdateErrors,\n WebhooksUpdateHeadersData,\n WebhooksUpdateHeadersErrors,\n WebhooksUpdateHeadersResponses,\n WebhooksUpdateResponses,\n WorkspaceGetData,\n WorkspaceGetErrors,\n WorkspaceGetResponses,\n WorkspaceMembersData,\n WorkspaceMembersErrors,\n WorkspaceMembersResponses,\n} from './types.gen';\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n TResponse = unknown,\n> = 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 * Sign an agent up\n *\n * The one call in this API that needs no key. An agent names a username and, optionally, the human who will own the mailbox; a six-digit code goes to that human and **nothing is created until it comes back**. Without a `human_email` the name is reserved and dormant — attach one with `POST /agent/human`.\n */\nexport const agentSignUp = <ThrowOnError extends boolean = false>(\n options: Options<AgentSignUpData, ThrowOnError>,\n): RequestResult<AgentSignUpResponses, AgentSignUpErrors, ThrowOnError> =>\n (options.client ?? client).post<AgentSignUpResponses, AgentSignUpErrors, ThrowOnError>({\n url: '/agent/signup',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Name the human for a signup\n *\n * For a signup that named none. Sends a fresh code and restarts the clock.\n */\nexport const agentAttachHuman = <ThrowOnError extends boolean = false>(\n options: Options<AgentAttachHumanData, ThrowOnError>,\n): RequestResult<AgentAttachHumanResponses, AgentAttachHumanErrors, ThrowOnError> =>\n (options.client ?? client).post<AgentAttachHumanResponses, AgentAttachHumanErrors, ThrowOnError>({\n url: '/agent/human',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Verify an agent with the human’s code\n *\n * Creates the account, the address and a workspace-scoped API key. Ten wrong codes spend the signup, whatever comes next. The key is returned once and never again — store it before doing anything else. It is minted here rather than at signup because this is the call a human has vouched for.\n */\nexport const agentVerify = <ThrowOnError extends boolean = false>(\n options: Options<AgentVerifyData, ThrowOnError>,\n): RequestResult<AgentVerifyResponses, AgentVerifyErrors, ThrowOnError> =>\n (options.client ?? client).post<AgentVerifyResponses, AgentVerifyErrors, ThrowOnError>({\n url: '/agent/verify',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List addresses\n *\n * Alphabetical by address. `cursor` is the last address on the page before it, not a timestamp — this is the one list that is not ordered by time, because it is read by somebody looking for a particular address.\n */\nexport const identitiesList = <ThrowOnError extends boolean = false>(\n options?: Options<IdentitiesListData, ThrowOnError>,\n): RequestResult<IdentitiesListResponses, IdentitiesListErrors, ThrowOnError> =>\n (options?.client ?? client).get<IdentitiesListResponses, IdentitiesListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities',\n ...options,\n });\n\n/**\n * Create an address\n *\n * Idempotent with an `Idempotency-Key` header: the same key returns the first result rather than creating a second address.\n */\nexport const identitiesCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesCreateData, ThrowOnError>,\n): RequestResult<IdentitiesCreateResponses, IdentitiesCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<IdentitiesCreateResponses, IdentitiesCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete an address\n *\n * Takes its messages, routing rules and webhooks with it.\n */\nexport const identitiesDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesDeleteData, ThrowOnError>,\n): RequestResult<IdentitiesDeleteResponses, IdentitiesDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n IdentitiesDeleteResponses,\n IdentitiesDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}',\n ...options,\n });\n\n/**\n * Fetch one address\n */\nexport const identitiesGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesGetData, ThrowOnError>,\n): RequestResult<IdentitiesGetResponses, IdentitiesGetErrors, ThrowOnError> =>\n (options.client ?? client).get<IdentitiesGetResponses, IdentitiesGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}',\n ...options,\n });\n\n/**\n * Update an address\n */\nexport const identitiesUpdate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesUpdateData, ThrowOnError>,\n): RequestResult<IdentitiesUpdateResponses, IdentitiesUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<IdentitiesUpdateResponses, IdentitiesUpdateErrors, ThrowOnError>(\n {\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n },\n );\n\n/**\n * Revoke access\n *\n * By the grant’s own id, which `GET` returned as `id`.\n */\nexport const identitiesAccessDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesAccessDeleteData, ThrowOnError>,\n): RequestResult<IdentitiesAccessDeleteResponses, IdentitiesAccessDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n IdentitiesAccessDeleteResponses,\n IdentitiesAccessDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/access',\n ...options,\n });\n\n/**\n * Who can reach this address\n *\n * Reading the list requires being able to reach the address: who has access to somebody’s mailbox is itself private.\n */\nexport const identitiesAccessGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesAccessGetData, ThrowOnError>,\n): RequestResult<IdentitiesAccessGetResponses, IdentitiesAccessGetErrors, ThrowOnError> =>\n (options.client ?? client).get<\n IdentitiesAccessGetResponses,\n IdentitiesAccessGetErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/access',\n ...options,\n });\n\n/**\n * Grant access\n *\n * Name exactly one of `user_id`, `api_key_id` or `everyone`. Granting **replaces** any grant that principal already had, so calling this twice changes the rung rather than leaving two answers behind. Answers 404 rather than 403 when you may not administer the address — including when you can read it.\n */\nexport const identitiesAccessCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesAccessCreateData, ThrowOnError>,\n): RequestResult<IdentitiesAccessCreateResponses, IdentitiesAccessCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<\n IdentitiesAccessCreateResponses,\n IdentitiesAccessCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/access',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Remove a rule\n *\n * By the rule’s own id, which `GET` returned as `id`.\n */\nexport const identitiesSendRulesDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSendRulesDeleteData, ThrowOnError>,\n): RequestResult<\n IdentitiesSendRulesDeleteResponses,\n IdentitiesSendRulesDeleteErrors,\n ThrowOnError\n> =>\n (options.client ?? client).delete<\n IdentitiesSendRulesDeleteResponses,\n IdentitiesSendRulesDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/send-rules',\n ...options,\n });\n\n/**\n * What this address may write to\n *\n * The allow and block list, and the `send_policy` it hangs off — the rules mean nothing without it. Requires `send` on the address rather than `admin`: a caller refused a recipient has to be able to find out why.\n */\nexport const identitiesSendRulesGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSendRulesGetData, ThrowOnError>,\n): RequestResult<IdentitiesSendRulesGetResponses, IdentitiesSendRulesGetErrors, ThrowOnError> =>\n (options.client ?? client).get<\n IdentitiesSendRulesGetResponses,\n IdentitiesSendRulesGetErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/send-rules',\n ...options,\n });\n\n/**\n * Allow or block a recipient\n *\n * `value` is an address or a domain and the string says which: `billing@acme.com` matches one person, `acme.com` matches everybody there. **The more specific rule wins**, so blocking a domain and allowing one person at it does what it looks like. Adding **replaces** any rule already there for that value, so `allow` where `block` sat is a change of mind rather than a conflict. A `block` refuses under every policy, including `open`.\n */\nexport const identitiesSendRulesCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSendRulesCreateData, ThrowOnError>,\n): RequestResult<\n IdentitiesSendRulesCreateResponses,\n IdentitiesSendRulesCreateErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n IdentitiesSendRulesCreateResponses,\n IdentitiesSendRulesCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/send-rules',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Remove a rule\n *\n * By the rule’s own id, which `GET` returned as `id`.\n */\nexport const identitiesReceiveRulesDelete = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesReceiveRulesDeleteData, ThrowOnError>,\n): RequestResult<\n IdentitiesReceiveRulesDeleteResponses,\n IdentitiesReceiveRulesDeleteErrors,\n ThrowOnError\n> =>\n (options.client ?? client).delete<\n IdentitiesReceiveRulesDeleteResponses,\n IdentitiesReceiveRulesDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/receive-rules',\n ...options,\n });\n\n/**\n * Who may write to this address\n *\n * The rules that decide what reaches this address. Requires `read` rather than `admin`: anybody who may read the mail may see why some of it did not arrive. **Workspace-wide rules are not listed here** — these are the address’s own, and a key that administers one address must not be able to silence a sender for every other address in the workspace.\n */\nexport const identitiesReceiveRulesGet = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesReceiveRulesGetData, ThrowOnError>,\n): RequestResult<\n IdentitiesReceiveRulesGetResponses,\n IdentitiesReceiveRulesGetErrors,\n ThrowOnError\n> =>\n (options.client ?? client).get<\n IdentitiesReceiveRulesGetResponses,\n IdentitiesReceiveRulesGetErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/receive-rules',\n ...options,\n });\n\n/**\n * Decide what happens to a sender\n *\n * `value` is an address or a domain and the string says which: `billing@acme.com` matches one person, `acme.com` matches everybody there. **The more specific rule wins**, and an address’s own rule wins over a workspace-wide one. Adding **replaces** any rule already there for that value.\n *\n * `action` is `reject`, `spam`, `trash`, `archive` or `inbox`. **`reject` refuses before the message is stored** — no row, no thread, no storage charged and no webhook — which is what an address nobody will ever open wants. The other four file it, and `inbox` means *never classify this sender as spam*.\n *\n * **It is not a security control.** The `From:` header is written by the sender, and anybody blocked can change it for the price of a new address. What this buys is not paying for mail from senders who have not bothered.\n */\nexport const identitiesReceiveRulesCreate = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesReceiveRulesCreateData, ThrowOnError>,\n): RequestResult<\n IdentitiesReceiveRulesCreateResponses,\n IdentitiesReceiveRulesCreateErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n IdentitiesReceiveRulesCreateResponses,\n IdentitiesReceiveRulesCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/receive-rules',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Offboard one of your customers\n *\n * Suspends every address carrying that `tenant_id`. **Suspends, never deletes** — the mail, the threads and the grants all stay, and each address emits `identity.suspended`. Deleting them is still one call each. Idempotent: it changes what is active and reports how many, so a retry is safe. It reaches only addresses you could have suspended one at a time.\n */\nexport const identitiesSuspendTenant = <ThrowOnError extends boolean = false>(\n options: Options<IdentitiesSuspendTenantData, ThrowOnError>,\n): RequestResult<IdentitiesSuspendTenantResponses, IdentitiesSuspendTenantErrors, ThrowOnError> =>\n (options.client ?? client).post<\n IdentitiesSuspendTenantResponses,\n IdentitiesSuspendTenantErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/tenants/{id}/suspend',\n ...options,\n });\n\n/**\n * List pods\n *\n * The containers in this account, the default first. A pod holds addresses and domains — a customer of yours, a client, or just test apart from production.\n *\n * **It is organisational, not a boundary.** A pod carries no sending reputation of its own, and a key is still a list of address ids rather than something scoped to a pod. Saying so plainly because the alternative is a reader assuming an isolation that is not there.\n *\n * Not paged: this is a menu somebody switches with, and a product where that menu needs a cursor is one where the menu was the wrong shape.\n */\nexport const podsList = <ThrowOnError extends boolean = false>(\n options?: Options<PodsListData, ThrowOnError>,\n): RequestResult<PodsListResponses, PodsListErrors, ThrowOnError> =>\n (options?.client ?? client).get<PodsListResponses, PodsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/pods',\n ...options,\n });\n\n/**\n * Create a pod\n *\n * Name it after whatever it holds — a customer, an environment. `client_id` is your own id for it, carried and never parsed, and has to be unique within the account so that looking one up by it has an answer.\n */\nexport const podsCreate = <ThrowOnError extends boolean = false>(\n options: Options<PodsCreateData, ThrowOnError>,\n): RequestResult<PodsCreateResponses, PodsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<PodsCreateResponses, PodsCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/pods',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Fetch one pod\n */\nexport const podsGet = <ThrowOnError extends boolean = false>(\n options: Options<PodsGetData, ThrowOnError>,\n): RequestResult<PodsGetResponses, PodsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<PodsGetResponses, PodsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/pods/{id}',\n ...options,\n });\n\n/**\n * Rename a pod, or change its client id\n *\n * There is no delete. A container holding mailboxes is not a thing to remove with one call, and nothing yet moves addresses between pods — so the verb would either refuse every non-empty pod or destroy mail. Suspend the addresses instead.\n */\nexport const podsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<PodsUpdateData, ThrowOnError>,\n): RequestResult<PodsUpdateResponses, PodsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<PodsUpdateResponses, PodsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/pods/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List labels\n *\n * The labels of one address.\n */\nexport const labelsList = <ThrowOnError extends boolean = false>(\n options: Options<LabelsListData, ThrowOnError>,\n): RequestResult<LabelsListResponses, LabelsListErrors, ThrowOnError> =>\n (options.client ?? client).get<LabelsListResponses, LabelsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels',\n ...options,\n });\n\n/**\n * Create a label\n */\nexport const labelsCreate = <ThrowOnError extends boolean = false>(\n options: Options<LabelsCreateData, ThrowOnError>,\n): RequestResult<LabelsCreateResponses, LabelsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<LabelsCreateResponses, LabelsCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete a label\n *\n * The label goes; the conversations it was on stay.\n */\nexport const labelsDelete = <ThrowOnError extends boolean = false>(\n options: Options<LabelsDeleteData, ThrowOnError>,\n): RequestResult<LabelsDeleteResponses, LabelsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<LabelsDeleteResponses, LabelsDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels/{id}',\n ...options,\n });\n\n/**\n * Rename or recolour a label\n *\n * A body with neither `name` nor `colour` is refused.\n */\nexport const labelsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<LabelsUpdateData, ThrowOnError>,\n): RequestResult<LabelsUpdateResponses, LabelsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<LabelsUpdateResponses, LabelsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/labels/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Remove a label\n *\n * `label_id` in the query, because a label hangs off the conversation.\n */\nexport const threadsLabelsDelete = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsLabelsDeleteData, ThrowOnError>,\n): RequestResult<ThreadsLabelsDeleteResponses, ThreadsLabelsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n ThreadsLabelsDeleteResponses,\n ThreadsLabelsDeleteErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}/labels',\n ...options,\n });\n\n/**\n * The labels on a conversation\n */\nexport const threadsLabelsGet = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsLabelsGetData, ThrowOnError>,\n): RequestResult<ThreadsLabelsGetResponses, ThreadsLabelsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<ThreadsLabelsGetResponses, ThreadsLabelsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}/labels',\n ...options,\n });\n\n/**\n * Apply a label\n *\n * Answers the conversation’s whole label list, not just the one added.\n */\nexport const threadsLabelsCreate = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsLabelsCreateData, ThrowOnError>,\n): RequestResult<ThreadsLabelsCreateResponses, ThreadsLabelsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<\n ThreadsLabelsCreateResponses,\n ThreadsLabelsCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}/labels',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List messages\n */\nexport const messagesListInThread = <ThrowOnError extends boolean = false>(\n options: Options<MessagesListInThreadData, ThrowOnError>,\n): RequestResult<MessagesListInThreadResponses, MessagesListInThreadErrors, ThrowOnError> =>\n (options.client ?? client).get<\n MessagesListInThreadResponses,\n MessagesListInThreadErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages',\n ...options,\n });\n\n/**\n * Send a message\n *\n * Idempotent with an `Idempotency-Key` header. Answers `202` with the id, the thread and anything **rejected** — addresses the provider would not accept at hand-off, so read it before assuming every recipient got it. A recipient this address is not allowed to write to is a different thing and refuses the whole send: `403` with `blocked` when a rule says no, `not_permitted` when the send policy does. Nothing is sent to anybody in that case.\n */\nexport const messagesSend = <ThrowOnError extends boolean = false>(\n options: Options<MessagesSendData, ThrowOnError>,\n): RequestResult<MessagesSendResponses, MessagesSendErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesSendResponses, MessagesSendErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Search messages\n *\n * Full-text, ranked by relevance, across every address this credential can reach. Name an `identity_id` to search exactly one. Every result carries the address it was found in and the folder it is in, because a hit you cannot attribute to a mailbox is a hit you cannot open. Not paged: page two of a relevance ranking is a place nobody goes, so narrow the query instead.\n */\nexport const messagesSearch = <ThrowOnError extends boolean = false>(\n options?: Options<MessagesSearchData, ThrowOnError>,\n): RequestResult<MessagesSearchResponses, MessagesSearchErrors, ThrowOnError> =>\n (options?.client ?? client).get<MessagesSearchResponses, MessagesSearchErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/search',\n ...options,\n });\n\n/**\n * Apply one action to many conversations\n *\n * Up to 200, the same cap the dashboard uses. Thread-scoped, like everything else that changes a conversation. The response carries an `undo`.\n */\nexport const messagesAct = <ThrowOnError extends boolean = false>(\n options: Options<MessagesActData, ThrowOnError>,\n): RequestResult<MessagesActResponses, MessagesActErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesActResponses, MessagesActErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/actions',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Put an action back\n *\n * Hand back the `undo` from a `PATCH` or a batch. Unusual for an API to have, and the argument is that software makes mistakes at a speed a person does not.\n */\nexport const messagesUndo = <ThrowOnError extends boolean = false>(\n options: Options<MessagesUndoData, ThrowOnError>,\n): RequestResult<MessagesUndoResponses, MessagesUndoErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesUndoResponses, MessagesUndoErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/undo',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Fetch one message\n */\nexport const messagesGet = <ThrowOnError extends boolean = false>(\n options: Options<MessagesGetData, ThrowOnError>,\n): RequestResult<MessagesGetResponses, MessagesGetErrors, ThrowOnError> =>\n (options.client ?? client).get<MessagesGetResponses, MessagesGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}',\n ...options,\n });\n\n/**\n * Change one conversation\n *\n * Three different kinds of fact: `is_read` is about the reader, `is_starred` is about the mailbox, and `folder` is where the conversation lives. Thread-scoped. The response carries an `undo`.\n */\nexport const messagesUpdate = <ThrowOnError extends boolean = false>(\n options: Options<MessagesUpdateData, ThrowOnError>,\n): RequestResult<MessagesUpdateResponses, MessagesUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<MessagesUpdateResponses, MessagesUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Reply to one message\n *\n * The recipients, the subject and the thread are read off the message being answered. You bring the words.\n */\nexport const messagesReply = <ThrowOnError extends boolean = false>(\n options: Options<MessagesReplyData, ThrowOnError>,\n): RequestResult<MessagesReplyResponses, MessagesReplyErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesReplyResponses, MessagesReplyErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/reply',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Reply to everybody on one message\n *\n * Every address on the message except the ones that reach this mailbox — which a caller cannot work out, because it needs the routing table.\n */\nexport const messagesReplyAll = <ThrowOnError extends boolean = false>(\n options: Options<MessagesReplyAllData, ThrowOnError>,\n): RequestResult<MessagesReplyAllResponses, MessagesReplyAllErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesReplyAllResponses, MessagesReplyAllErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/reply-all',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Forward one message\n *\n * `to` is required: a forward exists to reach somebody the original did not.\n */\nexport const messagesForward = <ThrowOnError extends boolean = false>(\n options: Options<MessagesForwardData, ThrowOnError>,\n): RequestResult<MessagesForwardResponses, MessagesForwardErrors, ThrowOnError> =>\n (options.client ?? client).post<MessagesForwardResponses, MessagesForwardErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/forward',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The message as it arrived\n *\n * `message/rfc822`, not JSON — the point is bytes nobody re-encoded. It 404s when the original has aged out of storage, which leaves a normal parsed message.\n */\nexport const messagesRaw = <ThrowOnError extends boolean = false>(\n options: Options<MessagesRawData, ThrowOnError>,\n): RequestResult<MessagesRawResponses, MessagesRawErrors, ThrowOnError> =>\n (options.client ?? client).get<MessagesRawResponses, MessagesRawErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/raw',\n ...options,\n });\n\n/**\n * List threads\n *\n * Filter with `identity_id`, `status`, `owner_type` and `assignee_id`. `assignee_id` takes a person’s id, or the literal `unassigned` for the queue nobody has picked up — it says which *human* is answering, where `owner_type` says which kind of thing is.\n */\nexport const threadsList = <ThrowOnError extends boolean = false>(\n options?: Options<ThreadsListData, ThrowOnError>,\n): RequestResult<ThreadsListResponses, ThreadsListErrors, ThrowOnError> =>\n (options?.client ?? client).get<ThreadsListResponses, ThreadsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads',\n ...options,\n });\n\n/**\n * Read a conversation\n *\n * One conversation, by id. Every event payload carries a `thread_id`, so this is how a webhook handler turns one into something it can read.\n */\nexport const threadsGet = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsGetData, ThrowOnError>,\n): RequestResult<ThreadsGetResponses, ThreadsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<ThreadsGetResponses, ThreadsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}',\n ...options,\n });\n\n/**\n * Update a thread\n *\n * Its status and who owns it — the state a conversation carries.\n */\nexport const threadsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<ThreadsUpdateData, ThrowOnError>,\n): RequestResult<ThreadsUpdateResponses, ThreadsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<ThreadsUpdateResponses, ThreadsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/threads/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List domains\n */\nexport const domainsList = <ThrowOnError extends boolean = false>(\n options?: Options<DomainsListData, ThrowOnError>,\n): RequestResult<DomainsListResponses, DomainsListErrors, ThrowOnError> =>\n (options?.client ?? client).get<DomainsListResponses, DomainsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains',\n ...options,\n });\n\n/**\n * Connect a domain\n *\n * Returns the domain **and the records to publish**, because showing them to your own customer is the one thing every caller does next. DNS is the step this API cannot perform — we cannot write in somebody else’s zone — so the job is to make the human step delegable. Watch `dns_complete`: it is false while the DKIM records do not exist yet, and a list published in that state verifies and cannot sign mail.\n */\nexport const domainsCreate = <ThrowOnError extends boolean = false>(\n options: Options<DomainsCreateData, ThrowOnError>,\n): RequestResult<DomainsCreateResponses, DomainsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<DomainsCreateResponses, DomainsCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The records as a zone file\n *\n * BIND format, which Route 53, Cloudflare and most registrars import and our JSON is not. TTLs are 300: these records change twice, and a long TTL on one you are getting right is an hour of somebody else’s cache.\n */\nexport const domainsZoneFile = <ThrowOnError extends boolean = false>(\n options: Options<DomainsZoneFileData, ThrowOnError>,\n): RequestResult<DomainsZoneFileResponses, DomainsZoneFileErrors, ThrowOnError> =>\n (options.client ?? client).get<DomainsZoneFileResponses, DomainsZoneFileErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}/zone-file',\n ...options,\n });\n\n/**\n * One-click DNS setup, when the provider supports it\n *\n * The **Domain Connect** standard: the URL returned is signed by and points at the domain’s own DNS provider, where the owner signs in, reviews the records and approves — the provider writes them. Nothing here is a credential of ours.\n *\n * Answers `200` either way. `supported: false` is a fact about somebody else’s DNS provider rather than a failure of this request, and `reason` says whose problem it is: `provider` means that zone cannot do it, `unconfigured` means this deployment is not registered. Either way, fall back to `GET /domains/{id}/zone-file` or the `records` on the domain.\n *\n * `template` is `mail` (everything: ownership, DKIM and MX) or `mx` (the MX alone, for a domain already sending through us that is now going to receive).\n */\nexport const domainsGetSetupLink = <ThrowOnError extends boolean = false>(\n options: Options<DomainsGetSetupLinkData, ThrowOnError>,\n): RequestResult<DomainsGetSetupLinkResponses, DomainsGetSetupLinkErrors, ThrowOnError> =>\n (options.client ?? client).get<\n DomainsGetSetupLinkResponses,\n DomainsGetSetupLinkErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}/setup-link',\n ...options,\n });\n\n/**\n * Check the zone again\n *\n * Idempotent and safe to poll — calling it on a verified domain re-checks and says so rather than erroring. Both halves in one answer: ownership, and whether mail is configured. The floor on how often this is worth calling is the zone’s TTL. Better still, subscribe to `domain.verified` and do not poll.\n */\nexport const domainsVerify = <ThrowOnError extends boolean = false>(\n options: Options<DomainsVerifyData, ThrowOnError>,\n): RequestResult<DomainsVerifyResponses, DomainsVerifyErrors, ThrowOnError> =>\n (options.client ?? client).post<DomainsVerifyResponses, DomainsVerifyErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}/verify',\n ...options,\n });\n\n/**\n * Disconnect a domain\n *\n * Takes its addresses, their mail, their routing rules and their webhooks with it. There is no undo.\n */\nexport const domainsDelete = <ThrowOnError extends boolean = false>(\n options: Options<DomainsDeleteData, ThrowOnError>,\n): RequestResult<DomainsDeleteResponses, DomainsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<DomainsDeleteResponses, DomainsDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}',\n ...options,\n });\n\n/**\n * Fetch one domain, with the state of each record\n *\n * `dns_records[].status` says which of ownership, MX, SPF, DKIM and DMARC is missing or wrong, and `found` says what is there instead — which is the difference between your support queue and your customer fixing one TXT record.\n */\nexport const domainsGet = <ThrowOnError extends boolean = false>(\n options: Options<DomainsGetData, ThrowOnError>,\n): RequestResult<DomainsGetResponses, DomainsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<DomainsGetResponses, DomainsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}',\n ...options,\n });\n\n/**\n * Turn the catch-all on or off\n *\n * The one thing about a domain that can change. Catch-all is two gates: this switch, and a `catch_all` routing rule saying where the mail goes — so turning it on without a rule does nothing, and turning it off later does not throw away where the mail was going.\n */\nexport const domainsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<DomainsUpdateData, ThrowOnError>,\n): RequestResult<DomainsUpdateResponses, DomainsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<DomainsUpdateResponses, DomainsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/domains/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List routing rules\n *\n * Every rule in the workspace, newest domain-first. `domain_id` narrows it to one domain.\n */\nexport const routingList = <ThrowOnError extends boolean = false>(\n options?: Options<RoutingListData, ThrowOnError>,\n): RequestResult<RoutingListResponses, RoutingListErrors, ThrowOnError> =>\n (options?.client ?? client).get<RoutingListResponses, RoutingListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules',\n ...options,\n });\n\n/**\n * Route an address somewhere\n *\n * An address always beats a rule, so a rule for an address that already exists is refused rather than silently ignored. Name exactly one destination: an address you could already send from, or a webhook — a webhook destination has no inbox, so the message is handed to the endpoint and then gone.\n */\nexport const routingCreate = <ThrowOnError extends boolean = false>(\n options: Options<RoutingCreateData, ThrowOnError>,\n): RequestResult<RoutingCreateResponses, RoutingCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<RoutingCreateResponses, RoutingCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete a routing rule\n */\nexport const routingDelete = <ThrowOnError extends boolean = false>(\n options: Options<RoutingDeleteData, ThrowOnError>,\n): RequestResult<RoutingDeleteResponses, RoutingDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<RoutingDeleteResponses, RoutingDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules/{id}',\n ...options,\n });\n\n/**\n * Enable or disable a rule\n *\n * A disabled rule still says where that address was going, which is what you want during an incident. What it matches and where it points are the rule itself and cannot be edited — create the replacement and delete this one.\n */\nexport const routingUpdate = <ThrowOnError extends boolean = false>(\n options: Options<RoutingUpdateData, ThrowOnError>,\n): RequestResult<RoutingUpdateResponses, RoutingUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<RoutingUpdateResponses, RoutingUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/routing-rules/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List the folders of one mailbox\n *\n * The shape of a sidebar. `identity_id` is required — there is no cross-mailbox view, because merging the folders of several addresses would invent a mailbox nobody has.\n */\nexport const mailboxesList = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesListData, ThrowOnError>,\n): RequestResult<MailboxesListResponses, MailboxesListErrors, ThrowOnError> =>\n (options.client ?? client).get<MailboxesListResponses, MailboxesListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes',\n ...options,\n });\n\n/**\n * What changed since you last looked\n *\n * Per mailbox, not per folder: a message moving from the inbox to the archive is one event, and the row says where it went. Arrivals are included, so this is the only thing to poll. `since` is the `sync_cursor` from a listing or the `next_cursor` from a previous delta — **not** a page cursor, which walks a different order and is refused rather than guessed at. A cursor older than the window in which we keep the record of what was deleted returns `410 resync`, because an empty delta would be indistinguishable from \"nothing changed\".\n */\nexport const mailboxesChanges = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesChangesData, ThrowOnError>,\n): RequestResult<MailboxesChangesResponses, MailboxesChangesErrors, ThrowOnError> =>\n (options.client ?? client).get<MailboxesChangesResponses, MailboxesChangesErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes/changes',\n ...options,\n });\n\n/**\n * Empty the trash\n *\n * Only `trash`; every other folder refuses. Permanent, and it takes attachments and archived originals with it — there is no undo, because the snapshot `POST /messages/undo` replays is a set of column values and these rows are gone. `delete_forever` on `POST /messages/actions` does the same to a list you name, and caps at 200; this needs no ids.\n */\nexport const mailboxesEmptyTrash = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesEmptyTrashData, ThrowOnError>,\n): RequestResult<MailboxesEmptyTrashResponses, MailboxesEmptyTrashErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n MailboxesEmptyTrashResponses,\n MailboxesEmptyTrashErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes/{folder}',\n ...options,\n });\n\n/**\n * List one folder\n *\n * A row is a conversation — the newest message in each thread — not a message. Paged by an opaque `cursor`, which is the `next_cursor` of the page before it: it carries a sort key and an id together, because several messages can share a millisecond. Do not construct one.\n */\nexport const mailboxesListFolder = <ThrowOnError extends boolean = false>(\n options: Options<MailboxesListFolderData, ThrowOnError>,\n): RequestResult<MailboxesListFolderResponses, MailboxesListFolderErrors, ThrowOnError> =>\n (options.client ?? client).get<\n MailboxesListFolderResponses,\n MailboxesListFolderErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/mailboxes/{folder}',\n ...options,\n });\n\n/**\n * List the keys in this workspace\n *\n * Names, prefixes, what each reaches and when it was last used — never a secret. The list is what you read before revoking something.\n */\nexport const keysList = <ThrowOnError extends boolean = false>(\n options?: Options<KeysListData, ThrowOnError>,\n): RequestResult<KeysListResponses, KeysListErrors, ThrowOnError> =>\n (options?.client ?? client).get<KeysListResponses, KeysListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys',\n ...options,\n });\n\n/**\n * Mint a key\n *\n * `identity_ids` is required and must be a subset of what the calling key already reaches: a key cannot delegate reach it does not have. The `token` is in this response and nowhere else, ever.\n */\nexport const keysCreate = <ThrowOnError extends boolean = false>(\n options: Options<KeysCreateData, ThrowOnError>,\n): RequestResult<KeysCreateResponses, KeysCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<KeysCreateResponses, KeysCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Revoke a key, and everything it minted\n *\n * Transitive, and that is the point: a leaked key would otherwise mint a second one and survive its own rotation. A key may revoke itself and keys it made — not a sibling, and not its parent.\n */\nexport const keysRevoke = <ThrowOnError extends boolean = false>(\n options: Options<KeysRevokeData, ThrowOnError>,\n): RequestResult<KeysRevokeResponses, KeysRevokeErrors, ThrowOnError> =>\n (options.client ?? client).delete<KeysRevokeResponses, KeysRevokeErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys/{id}',\n ...options,\n });\n\n/**\n * Fetch one key\n *\n * What it reaches and when it was last used. Never the secret — that is shown once at creation and nothing can produce it again.\n */\nexport const keysGet = <ThrowOnError extends boolean = false>(\n options: Options<KeysGetData, ThrowOnError>,\n): RequestResult<KeysGetResponses, KeysGetErrors, ThrowOnError> =>\n (options.client ?? client).get<KeysGetResponses, KeysGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys/{id}',\n ...options,\n });\n\n/**\n * Rename a key\n *\n * The only thing about a key that can change. Not its scope — a key's reach is what somebody granted when they made it, and widening that in place would let a credential already in circulation reach further than whoever issued it agreed to.\n */\nexport const keysUpdate = <ThrowOnError extends boolean = false>(\n options: Options<KeysUpdateData, ThrowOnError>,\n): RequestResult<KeysUpdateResponses, KeysUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<KeysUpdateResponses, KeysUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/api-keys/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * List the devices that reach one address\n */\nexport const appPasswordsList = <ThrowOnError extends boolean = false>(\n options: Options<AppPasswordsListData, ThrowOnError>,\n): RequestResult<AppPasswordsListResponses, AppPasswordsListErrors, ThrowOnError> =>\n (options.client ?? client).get<AppPasswordsListResponses, AppPasswordsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/app-passwords',\n ...options,\n });\n\n/**\n * Issue IMAP and SMTP credentials for one address\n *\n * What lets you hand a customer a mailbox they can open in a mail client. Only for an address this key can already **send** from — the credential reads the inbox and sends as the address, so issuing one is handing over exactly that. `username` and `password` are returned together and are useless apart.\n */\nexport const appPasswordsCreate = <ThrowOnError extends boolean = false>(\n options: Options<AppPasswordsCreateData, ThrowOnError>,\n): RequestResult<AppPasswordsCreateResponses, AppPasswordsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<\n AppPasswordsCreateResponses,\n AppPasswordsCreateErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/app-passwords',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Revoke an app password\n */\nexport const appPasswordsRevoke = <ThrowOnError extends boolean = false>(\n options: Options<AppPasswordsRevokeData, ThrowOnError>,\n): RequestResult<AppPasswordsRevokeResponses, AppPasswordsRevokeErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n AppPasswordsRevokeResponses,\n AppPasswordsRevokeErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/app-passwords/{id}',\n ...options,\n });\n\n/**\n * What this key is, and what it may do\n *\n * The one question a credential could not ask. Everything else here answers what is *in* the account, so the only way to learn your own access was to try something and read the refusal — and a key that reaches nothing looks exactly like a key that is broken. Free: no write, no side effect, and the three facts that decide whether your next call works.\n */\nexport const meGet = <ThrowOnError extends boolean = false>(\n options?: Options<MeGetData, ThrowOnError>,\n): RequestResult<MeGetResponses, MeGetErrors, ThrowOnError> =>\n (options?.client ?? client).get<MeGetResponses, MeGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/me',\n ...options,\n });\n\n/**\n * Which account this key is for\n *\n * Read-only. Renaming is a settings field and deleting takes the calling credential with it; neither belongs to a bearer token. `plan` is here so a caller can say \"your plan allows N\" rather than discovering it from a 402.\n */\nexport const workspaceGet = <ThrowOnError extends boolean = false>(\n options?: Options<WorkspaceGetData, ThrowOnError>,\n): RequestResult<WorkspaceGetResponses, WorkspaceGetErrors, ThrowOnError> =>\n (options?.client ?? client).get<WorkspaceGetResponses, WorkspaceGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/workspace',\n ...options,\n });\n\n/**\n * List the people in this workspace\n *\n * Read-only, and workspace-level: a key with no mailbox grants can still read it, for the same reason it can list domains. Assigning a conversation needs an id from here. Inviting and removing people stay in the dashboard — an invitation is mail to a person, and removing somebody hands on their mailboxes.\n */\nexport const workspaceMembers = <ThrowOnError extends boolean = false>(\n options?: Options<WorkspaceMembersData, ThrowOnError>,\n): RequestResult<WorkspaceMembersResponses, WorkspaceMembersErrors, ThrowOnError> =>\n (options?.client ?? client).get<WorkspaceMembersResponses, WorkspaceMembersErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/workspace/members',\n ...options,\n });\n\n/**\n * List events\n *\n * The same events a webhook delivers, readable after the fact — so a missed delivery is recoverable without replaying anything.\n *\n * **Two directions.** `cursor` pages backwards through history, newest first, which is what a dashboard shows. `after` tails the log forwards, oldest first, which is what a caller that cannot receive a webhook does: ask for everything since the last event you saw, act on it, and keep the last `created_at` as the next cursor. Naming both is refused — they are different reads.\n *\n * **Starting from nothing: pass `after=1970-01-01T00:00:00Z`.** With neither parameter this answers newest first, so a first-time consumer that takes the last row as its high-water mark stores the *oldest* event in the log and never advances. Any timestamp at or before the oldest event you hold will do; the epoch is the one nobody has to think about.\n *\n * A forward page is ordered oldest first precisely so its **last** row is the high-water mark to resume from; `next_cursor` is that row either way.\n */\nexport const eventsList = <ThrowOnError extends boolean = false>(\n options?: Options<EventsListData, ThrowOnError>,\n): RequestResult<EventsListResponses, EventsListErrors, ThrowOnError> =>\n (options?.client ?? client).get<EventsListResponses, EventsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/events',\n ...options,\n });\n\n/**\n * Stream events as they happen\n *\n * The event log held open, for a caller that cannot host a webhook endpoint — a script on a laptop, a notebook, an agent runtime with no public address.\n *\n * **Server-sent events.** Each message carries the event as `data`, the event type as `event:`, and the cursor to resume from as `id:`. Authentication, filtering by `type` and `identity_id`, and the `after` cursor are all exactly as on `GET /events` — this is that read, held open.\n *\n * **Reconnection is automatic and lossless.** A compliant client resends the last `id:` it saw as `Last-Event-ID`, which is preferred over `after`, so a dropped connection resumes with no gap and no repeat. The connection closes itself after about 280 seconds so that the last thing you receive is a cursor rather than a socket error; reconnect and carry on.\n *\n * **It polls, every two seconds, on our side of the wire.** No push exists in the database. What this buys is one held connection instead of a request from your network on a timer, and being woken only when something happened.\n */\nexport const eventsStream = <ThrowOnError extends boolean = false>(\n options?: Options<EventsStreamData, ThrowOnError, EventsStreamResponse>,\n): Promise<ServerSentEventsResult<EventsStreamResponses>> =>\n (options?.client ?? client).sse.get<EventsStreamResponses, EventsStreamErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/events/stream',\n ...options,\n });\n\n/**\n * Fetch one event\n */\nexport const eventsGet = <ThrowOnError extends boolean = false>(\n options: Options<EventsGetData, ThrowOnError>,\n): RequestResult<EventsGetResponses, EventsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<EventsGetResponses, EventsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/events/{id}',\n ...options,\n });\n\n/**\n * List webhooks\n */\nexport const webhooksList = <ThrowOnError extends boolean = false>(\n options?: Options<WebhooksListData, ThrowOnError>,\n): RequestResult<WebhooksListResponses, WebhooksListErrors, ThrowOnError> =>\n (options?.client ?? client).get<WebhooksListResponses, WebhooksListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks',\n ...options,\n });\n\n/**\n * Create a webhook\n *\n * The signing secret is returned once, here, and never again. Every delivery is signed with it as HMAC-SHA256.\n */\nexport const webhooksCreate = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksCreateData, ThrowOnError>,\n): RequestResult<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Delete a webhook\n */\nexport const webhooksDelete = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksDeleteData, ThrowOnError>,\n): RequestResult<WebhooksDeleteResponses, WebhooksDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<WebhooksDeleteResponses, WebhooksDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}',\n ...options,\n });\n\n/**\n * Fetch one endpoint\n */\nexport const webhooksGet = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksGetData, ThrowOnError>,\n): RequestResult<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError> =>\n (options.client ?? client).get<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}',\n ...options,\n });\n\n/**\n * Turn an endpoint off, or back on\n *\n * We disable one ourselves after enough consecutive failures. Without this you would have to delete and recreate it, which changes the signing secret every receiver is verifying against. Re-enabling forgives the failure count.\n */\nexport const webhooksUpdate = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksUpdateData, ThrowOnError>,\n): RequestResult<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The headers this endpoint carries\n *\n * Returned in full. Our signing secret never is, and the difference is whose credential it is: the secret is ours, and these are your own token for your own endpoint.\n */\nexport const webhooksGetHeaders = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksGetHeadersData, ThrowOnError>,\n): RequestResult<WebhooksGetHeadersResponses, WebhooksGetHeadersErrors, ThrowOnError> =>\n (options.client ?? client).get<\n WebhooksGetHeadersResponses,\n WebhooksGetHeadersErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}/headers',\n ...options,\n });\n\n/**\n * Replace the headers this endpoint carries\n *\n * We sign every delivery, and a signature answers *is this from Pidgeon*. It does not answer the question a gateway asks, which is *does this request carry the token we issued*. PUT, not PATCH: what you send is what the endpoint has afterwards, and `{}` clears them — a merge could not remove one, and removing one is what rotating a token is. The headers we set ourselves are refused by name.\n */\nexport const webhooksUpdateHeaders = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksUpdateHeadersData, ThrowOnError>,\n): RequestResult<WebhooksUpdateHeadersResponses, WebhooksUpdateHeadersErrors, ThrowOnError> =>\n (options.client ?? client).put<\n WebhooksUpdateHeadersResponses,\n WebhooksUpdateHeadersErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/webhooks/{id}/headers',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * What happened to each event we tried to hand you\n *\n * `webhook_id` is required — the question is always about one endpoint. The ids here are what the replay below takes.\n */\nexport const webhooksDeliveries = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksDeliveriesData, ThrowOnError>,\n): RequestResult<WebhooksDeliveriesResponses, WebhooksDeliveriesErrors, ThrowOnError> =>\n (options.client ?? client).get<\n WebhooksDeliveriesResponses,\n WebhooksDeliveriesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/deliveries',\n ...options,\n });\n\n/**\n * Send it again\n *\n * Re-queues one attempt and resets its count. A verb rather than a status field, because the other statuses are ours to write and mean nothing coming from outside.\n */\nexport const webhooksReplay = <ThrowOnError extends boolean = false>(\n options: Options<WebhooksReplayData, ThrowOnError>,\n): RequestResult<WebhooksReplayResponses, WebhooksReplayErrors, ThrowOnError> =>\n (options.client ?? client).post<WebhooksReplayResponses, WebhooksReplayErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/deliveries/{id}/replay',\n ...options,\n });\n\n/**\n * Accept, decline or tentatively accept a meeting\n *\n * The one call here that changes something in somebody else's calendar: an iCalendar `REPLY` goes to the organiser, which is how Google, Outlook and Calendly learn about an acceptance. The message must be carrying an `invitation`, and one of this mailbox's own addresses must be on it — including an address routed to it, which is the half you cannot work out from the message. Idempotent on the answer: the same answer to the same `sequence` sends once and returns `already_sent`.\n */\nexport const messagesRespondToInvitation = <ThrowOnError extends boolean = false>(\n options: Options<MessagesRespondToInvitationData, ThrowOnError>,\n): RequestResult<\n MessagesRespondToInvitationResponses,\n MessagesRespondToInvitationErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n MessagesRespondToInvitationResponses,\n MessagesRespondToInvitationErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/messages/{id}/invitation/respond',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * A mailbox’s calendar\n *\n * Every mailbox has exactly one, from the moment it exists, so there is nothing to create. `created_at` is the mailbox’s, because the calendar is the mailbox.\n */\nexport const calendarGet = <ThrowOnError extends boolean = false>(\n options: Options<CalendarGetData, ThrowOnError>,\n): RequestResult<CalendarGetResponses, CalendarGetErrors, ThrowOnError> =>\n (options.client ?? client).get<CalendarGetResponses, CalendarGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar',\n ...options,\n });\n\n/**\n * Set the default time zone\n *\n * The zone an event created without one gets. **Changing it does not move existing events**: an event stores the wall time it was given, so \"every Tuesday at 09:00\" is still 09:00 afterwards.\n */\nexport const calendarUpdate = <ThrowOnError extends boolean = false>(\n options: Options<CalendarUpdateData, ThrowOnError>,\n): RequestResult<CalendarUpdateResponses, CalendarUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<CalendarUpdateResponses, CalendarUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Everything on the calendar\n *\n * Ordered by when it last changed. `GET /agenda` is the other read and the one you usually want: this answers *what is on this calendar*, that answers *what is on between these two moments*.\n */\nexport const calendarListEvents = <ThrowOnError extends boolean = false>(\n options: Options<CalendarListEventsData, ThrowOnError>,\n): RequestResult<CalendarListEventsResponses, CalendarListEventsErrors, ThrowOnError> =>\n (options.client ?? client).get<\n CalendarListEventsResponses,\n CalendarListEventsErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events',\n ...options,\n });\n\n/**\n * Put something on the calendar\n *\n * `start` and `end` are **local wall times with no zone on them** — `2026-10-20T14:00:00` — and `timezone` is a field of its own. That pair is the truth; `starts_at` is the same moment as an instant, derived from it, and it is what survives a daylight-saving change. For an all-day event, `end` is the last day, inclusive.\n */\nexport const calendarCreateEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarCreateEventData, ThrowOnError>,\n): RequestResult<CalendarCreateEventResponses, CalendarCreateEventErrors, ThrowOnError> =>\n (options.client ?? client).post<\n CalendarCreateEventResponses,\n CalendarCreateEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Answer a meeting from the calendar\n *\n * The same act as `POST /messages/{id}/invitation/respond`, reached from the other end — an agent working from an agenda holds an event id and not a message id. When the meeting came from mail and `send_reply` is true (the default), an iCalendar `REPLY` goes to the organiser and the answer is written onto the event. When it did not — a meeting this mailbox created itself — there is nobody to reply to, so the answer is recorded and `reply_sent` is false. One of this mailbox’s own addresses must be on the attendee list, including an address routed to it.\n */\nexport const calendarRespondToEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarRespondToEventData, ThrowOnError>,\n): RequestResult<CalendarRespondToEventResponses, CalendarRespondToEventErrors, ThrowOnError> =>\n (options.client ?? client).post<\n CalendarRespondToEventResponses,\n CalendarRespondToEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}/respond',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * The dates a series actually happens\n *\n * Most of them have no row — they are expanded from the rule, which is what makes a weekly meeting cheap to store. An id here is `{seriesId}::{originalStart}`, derived rather than allocated, and it does **not** change when you edit that date. A date somebody edited comes back in place of the one the rule generated, under that id.\n */\nexport const calendarListEventInstances = <ThrowOnError extends boolean = false>(\n options: Options<CalendarListEventInstancesData, ThrowOnError>,\n): RequestResult<\n CalendarListEventInstancesResponses,\n CalendarListEventInstancesErrors,\n ThrowOnError\n> =>\n (options.client ?? client).get<\n CalendarListEventInstancesResponses,\n CalendarListEventInstancesErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}/instances',\n ...options,\n });\n\n/**\n * What is on, in a window, in order\n *\n * `include_overlapping` defaults to true, which is the difference between *what starts today* and *what is on today*: a meeting that began last night and runs into this morning is on today, and a naive `starts_at between` misses it. Cancelled events are left out — an agenda is what you are doing.\n */\nexport const calendarGetAgenda = <ThrowOnError extends boolean = false>(\n options: Options<CalendarGetAgendaData, ThrowOnError>,\n): RequestResult<CalendarGetAgendaResponses, CalendarGetAgendaErrors, ThrowOnError> =>\n (options.client ?? client).get<CalendarGetAgendaResponses, CalendarGetAgendaErrors, ThrowOnError>(\n {\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/agenda',\n ...options,\n },\n );\n\n/**\n * Take it off the calendar\n *\n * On one date of a series this records that the date does not happen rather than removing a row — the rule still generates it, so a removal would bring it straight back. `mode=future` ends the series there and leaves every earlier date alone.\n */\nexport const calendarDeleteEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarDeleteEventData, ThrowOnError>,\n): RequestResult<CalendarDeleteEventResponses, CalendarDeleteEventErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n CalendarDeleteEventResponses,\n CalendarDeleteEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}',\n ...options,\n });\n\n/**\n * One event\n */\nexport const calendarGetEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarGetEventData, ThrowOnError>,\n): RequestResult<CalendarGetEventResponses, CalendarGetEventErrors, ThrowOnError> =>\n (options.client ?? client).get<CalendarGetEventResponses, CalendarGetEventErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}',\n ...options,\n });\n\n/**\n * Change an event\n *\n * An omitted field survives. `sequence` rises only when the change is one attendees see — the time, the title, the place, the status, the list. A `metadata` edit moves the `etag` and not the sequence, because nobody is ever told about it.\n */\nexport const calendarUpdateEvent = <ThrowOnError extends boolean = false>(\n options: Options<CalendarUpdateEventData, ThrowOnError>,\n): RequestResult<CalendarUpdateEventResponses, CalendarUpdateEventErrors, ThrowOnError> =>\n (options.client ?? client).patch<\n CalendarUpdateEventResponses,\n CalendarUpdateEventErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/identities/{id}/calendar/events/{eventId}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Every draft in one mailbox\n *\n * Newest first, and including scheduled ones — a scheduled message is a draft with `send_at` set. `GET /mailboxes/drafts` lists the same rows as a mail client draws them: sender, subject, preview. This gives the recipients and the body, because a caller here is coming back to finish writing.\n */\nexport const draftsList = <ThrowOnError extends boolean = false>(\n options: Options<DraftsListData, ThrowOnError>,\n): RequestResult<DraftsListResponses, DraftsListErrors, ThrowOnError> =>\n (options.client ?? client).get<DraftsListResponses, DraftsListErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts',\n ...options,\n });\n\n/**\n * Write one without sending it\n *\n * An agent that drafts a reply, waits for a human to approve it and sends it an hour later is ordinary supervised automation, and this is where the half-written message lives in the meantime. Idempotent with `Idempotency-Key`.\n */\nexport const draftsCreate = <ThrowOnError extends boolean = false>(\n options: Options<DraftsCreateData, ThrowOnError>,\n): RequestResult<DraftsCreateResponses, DraftsCreateErrors, ThrowOnError> =>\n (options.client ?? client).post<DraftsCreateResponses, DraftsCreateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Throw it away\n */\nexport const draftsDelete = <ThrowOnError extends boolean = false>(\n options: Options<DraftsDeleteData, ThrowOnError>,\n): RequestResult<DraftsDeleteResponses, DraftsDeleteErrors, ThrowOnError> =>\n (options.client ?? client).delete<DraftsDeleteResponses, DraftsDeleteErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}',\n ...options,\n });\n\n/**\n * Fetch one draft\n */\nexport const draftsGet = <ThrowOnError extends boolean = false>(\n options: Options<DraftsGetData, ThrowOnError>,\n): RequestResult<DraftsGetResponses, DraftsGetErrors, ThrowOnError> =>\n (options.client ?? client).get<DraftsGetResponses, DraftsGetErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}',\n ...options,\n });\n\n/**\n * Change some of it, and leave the rest\n *\n * An omitted field survives; `null` clears it. Both are needed, because \"I am not touching the subject\" and \"there is no subject\" are different instructions.\n */\nexport const draftsUpdate = <ThrowOnError extends boolean = false>(\n options: Options<DraftsUpdateData, ThrowOnError>,\n): RequestResult<DraftsUpdateResponses, DraftsUpdateErrors, ThrowOnError> =>\n (options.client ?? client).patch<DraftsUpdateResponses, DraftsUpdateErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Send what is stored\n *\n * No body: the row is the message. The browser passes the composer contents and the draft id together, because the composer *is* the draft; a caller here saved it an hour ago and may be a different process. `PATCH` first to change anything. The id that comes back is the draft's, because a send converts the row.\n */\nexport const draftsSend = <ThrowOnError extends boolean = false>(\n options: Options<DraftsSendData, ThrowOnError>,\n): RequestResult<DraftsSendResponses, DraftsSendErrors, ThrowOnError> =>\n (options.client ?? client).post<DraftsSendResponses, DraftsSendErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/send',\n ...options,\n });\n\n/**\n * Back to being an ordinary draft\n */\nexport const draftsCancelSchedule = <ThrowOnError extends boolean = false>(\n options: Options<DraftsCancelScheduleData, ThrowOnError>,\n): RequestResult<DraftsCancelScheduleResponses, DraftsCancelScheduleErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n DraftsCancelScheduleResponses,\n DraftsCancelScheduleErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/schedule',\n ...options,\n });\n\n/**\n * Send it later\n *\n * A minute from now at the earliest, thirty days at the latest. A refused send unschedules rather than retrying forever, so a draft can come back on its own with `failed_reason` set — read that before scheduling the same message again.\n */\nexport const draftsSchedule = <ThrowOnError extends boolean = false>(\n options: Options<DraftsScheduleData, ThrowOnError>,\n): RequestResult<DraftsScheduleResponses, DraftsScheduleErrors, ThrowOnError> =>\n (options.client ?? client).post<DraftsScheduleResponses, DraftsScheduleErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/schedule',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n/**\n * Take a file off a draft\n *\n * The object goes with the row. An attachment belongs to its draft rather than being shared, so leaving the bytes behind would be storage nobody can reach and everybody is billed for. `POST /attachments` is how one gets on.\n */\nexport const draftsRemoveAttachment = <ThrowOnError extends boolean = false>(\n options: Options<DraftsRemoveAttachmentData, ThrowOnError>,\n): RequestResult<DraftsRemoveAttachmentResponses, DraftsRemoveAttachmentErrors, ThrowOnError> =>\n (options.client ?? client).delete<\n DraftsRemoveAttachmentResponses,\n DraftsRemoveAttachmentErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/drafts/{id}/attachments/{attachmentId}',\n ...options,\n });\n\n/**\n * What happened to the mail\n *\n * Counted from the event log rather than from the messages: a message row says what was sent, and whether it bounced is something the provider told us afterwards. `identity_id` narrows it to one mailbox, which is the question worth asking when you run several — reputation belongs to the address that sent the mail. `delivery_rate` is null rather than zero when nothing was sent.\n */\nexport const metricsQuery = <ThrowOnError extends boolean = false>(\n options?: Options<MetricsQueryData, ThrowOnError>,\n): RequestResult<MetricsQueryResponses, MetricsQueryErrors, ThrowOnError> =>\n (options?.client ?? client).get<MetricsQueryResponses, MetricsQueryErrors, ThrowOnError>({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/metrics',\n ...options,\n });\n\n/**\n * Upload a file to send\n *\n * Multipart, with `identity_id` and `file` parts — not base64 in JSON, because a ten-megabyte PDF is thirteen megabytes of base64 and every proxy in between would have to be told. Name the returned id in `attachment_ids` on a send. An upload expires in a day: it is a file no message refers to yet.\n */\nexport const attachmentsUpload = <ThrowOnError extends boolean = false>(\n options: Options<AttachmentsUploadData, ThrowOnError>,\n): RequestResult<AttachmentsUploadResponses, AttachmentsUploadErrors, ThrowOnError> =>\n (options.client ?? client).post<\n AttachmentsUploadResponses,\n AttachmentsUploadErrors,\n ThrowOnError\n >({\n ...formDataBodySerializer,\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/attachments',\n ...options,\n headers: {\n 'Content-Type': null,\n ...options.headers,\n },\n });\n\n/**\n * Get a download link for an attachment\n *\n * A signed URL rather than the bytes: streaming a 25 MB file through the API costs the transfer twice and gains the caller nothing. The link expires.\n */\nexport const attachmentsDownloadUrl = <ThrowOnError extends boolean = false>(\n options: Options<AttachmentsDownloadUrlData, ThrowOnError>,\n): RequestResult<AttachmentsDownloadUrlResponses, AttachmentsDownloadUrlErrors, ThrowOnError> =>\n (options.client ?? client).get<\n AttachmentsDownloadUrlResponses,\n AttachmentsDownloadUrlErrors,\n ThrowOnError\n >({\n security: [{ scheme: 'bearer', type: 'http' }],\n url: '/attachments/{id}',\n ...options,\n });\n","/**\n * Verifying a delivery.\n *\n * The only part of this package with a security contract: it is what a\n * customer runs to decide whether a request claiming a message arrived\n * actually came from us. Everything else here is a typed `fetch`.\n *\n * Two properties carry that contract, and both are tested against payloads\n * signed by the server's own implementation — see\n * `tests/unit/sdk-webhook-verifier.test.ts`. Testing this file against\n * itself would prove only that it agrees with itself, which is exactly the\n * bug two implementations of one scheme produce.\n */\n\nexport const SIGNATURE_HEADER = 'x-pidgeon-signature';\nexport const TIMESTAMP_HEADER = 'x-pidgeon-timestamp';\n\nexport interface WebhookEnvelope {\n id: string;\n type: string;\n created_at: string;\n data: Record<string, unknown>;\n}\n\n/**\n * Verifies a delivery and returns its payload.\n *\n * Throws rather than returning false, because the one thing this must not\n * allow is a caller who forgets to check the boolean. Uses `crypto.subtle`,\n * so it works unchanged in Node, Bun, Deno, Workers and Vercel functions.\n *\n * `rawBody` must be the exact bytes we sent. Re-serialising parsed JSON\n * changes key order and whitespace, and the signature will not match — read\n * the body as text before you parse it.\n */\nexport async function verifyWebhook(input: {\n rawBody: string;\n headers: Headers | Record<string, string | undefined>;\n secret: string;\n toleranceSeconds?: number;\n now?: Date;\n}): Promise<WebhookEnvelope> {\n /*\n * **However the framework spells it**, which this did not do.\n *\n * It read `headers[name] ?? headers[name.toLowerCase()]`, and `name` is\n * already one of the lowercase constants above — so the fallback lowercased\n * a string that was lowercase and looked up the same key twice. A plain\n * object keyed `X-Pidgeon-Signature` was rejected as unsigned.\n *\n * It survived every test and every local run because `Headers` and Node's\n * `req.headers` both lowercase their keys for you, so the broken branch is\n * only reached by a plain object somebody built themselves — which is what\n * API Gateway hands a Lambda, and what any test fixture written by hand\n * looks like. `pidgeon` on PyPI has done this correctly at the same version\n * number, and that module's docstring says keeping the two in step is the\n * point of writing it twice.\n *\n * The rejection made it worse: *\"This request is not signed.\"* is the same\n * sentence `/docs/webhooks/verifying` tells you means *you parsed the body\n * first*, so the documentation sent you to the wrong cause. Found by a\n * field test on 15 October, against docs that promise case-insensitive\n * matching in both clients.\n */\n const get = (name: string): string | undefined => {\n if (input.headers instanceof Headers) return input.headers.get(name) ?? undefined;\n\n const direct = input.headers[name];\n if (direct !== undefined) return direct;\n\n const wanted = name.toLowerCase();\n for (const [key, value] of Object.entries(input.headers)) {\n if (key.toLowerCase() === wanted) return value;\n }\n\n return undefined;\n };\n\n const timestamp = get(TIMESTAMP_HEADER);\n const signature = get(SIGNATURE_HEADER);\n\n if (!timestamp || !signature) throw new Error('This request is not signed.');\n\n const seconds = Number(timestamp);\n if (!Number.isFinite(seconds)) throw new Error('The signature timestamp is not a number.');\n\n const now = Math.floor((input.now ?? new Date()).getTime() / 1000);\n const tolerance = input.toleranceSeconds ?? 300;\n\n if (Math.abs(now - seconds) > tolerance) {\n throw new Error('This request is too old to trust. It may be a replay.');\n }\n\n const key = await crypto.subtle.importKey(\n 'raw',\n new TextEncoder().encode(input.secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n\n const mac = await crypto.subtle.sign(\n 'HMAC',\n key,\n new TextEncoder().encode(`${seconds}.${input.rawBody}`),\n );\n\n const expected = `v1=${[...new Uint8Array(mac)].map((byte) => byte.toString(16).padStart(2, '0')).join('')}`;\n\n if (!constantTimeEqual(expected, signature)) {\n throw new Error('The signature does not match.');\n }\n\n return JSON.parse(input.rawBody) as WebhookEnvelope;\n}\n\n/** Length-independent compare. Not `===`, which returns on the first byte. */\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n\n let difference = 0;\n for (let index = 0; index < a.length; index += 1) {\n difference |= a.charCodeAt(index) ^ b.charCodeAt(index);\n }\n\n return difference === 0;\n}\n","/**\n * Holding the event log open.\n *\n * **The second thing a generator cannot produce**, for the same reason as\n * `webhooks.ts`: `GET /events/stream` answers `text/event-stream` and\n * `openapi-ts` builds a typed `fetch` that resolves once with a body. There\n * is nowhere in a generated client to put a connection that stays open, so\n * `eventsStream` exists in the types and does nothing useful, and the\n * endpoint the documentation recommends for *\"a caller that cannot host a\n * webhook endpoint — a script on a laptop, a notebook, an agent runtime with\n * no public address\"* was the one endpoint every customer hand-rolled.\n *\n * A field test on 15 October wrote forty lines of it and they worked first\n * try, which is the argument both ways: the protocol is simple, and nobody\n * should write it twice. These are those forty lines, once.\n *\n * `EventSource` is not used. It cannot send an `Authorization` header — the\n * browser API takes a URL and nothing else — and putting an API key in a\n * query string is the one place it must never go. So this is `fetch` with a\n * reader, which also works unchanged in Node, Bun, Deno, Workers and Vercel\n * functions.\n */\n\n/** A row of `GET /events`, delivered as it happens. The same shape either way. */\nexport interface StreamedEvent {\n id: string;\n type: string;\n identity: string | null;\n message_id: string | null;\n thread_id: string | null;\n data: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface StreamOptions {\n /** `https://pidgeon.ai/api/v1` unless you are pointing at something else. */\n baseUrl?: string;\n apiKey: string;\n /** Narrow to one mailbox. Omitted, the stream spans every one the key reaches. */\n identityId?: string;\n /** A comma-separated list, exactly as `GET /events` takes it. */\n type?: string;\n /**\n * Where to start, as an ISO timestamp.\n *\n * **`1970-01-01T00:00:00Z` reads the whole log from the beginning**, which\n * is the answer to a question the API otherwise makes you guess at: with\n * no cursor at all the plain listing pages *backwards*, so a first-time\n * consumer that stores its last row stores the oldest event and never\n * advances. Omit this and the stream starts from now.\n */\n after?: string;\n /** Stop the stream. Aborting mid-event drops that event rather than half of it. */\n signal?: AbortSignal;\n}\n\n/**\n * Every event, as it happens, until you stop asking.\n *\n * ```ts\n * for await (const event of streamEvents({ apiKey })) {\n * if (event.type === 'message.received' && !event.data.from_self) {\n * await answer(event.data.message_id as string);\n * }\n * }\n * ```\n *\n * **Reconnection is this function's job and it is lossless.** The server\n * closes the connection itself after about 280 seconds so that the last\n * thing you receive is a cursor rather than a socket error; this reconnects\n * with `Last-Event-ID`, which the server prefers over `after`, so there is\n * no gap and no repeat. A network failure is retried the same way with a\n * short backoff. The loop ends when `signal` aborts and in no other case —\n * a stream that gave up quietly would be worse than one that never started.\n */\nexport async function* streamEvents(options: StreamOptions): AsyncGenerator<StreamedEvent> {\n const base = (options.baseUrl ?? 'https://pidgeon.ai/api/v1').replace(/\\/$/, '');\n let lastEventId: string | undefined;\n let backoffMs = 1_000;\n\n while (!options.signal?.aborted) {\n const url = new URL(`${base}/events/stream`);\n if (options.identityId) url.searchParams.set('identity_id', options.identityId);\n if (options.type) url.searchParams.set('type', options.type);\n if (options.after && !lastEventId) url.searchParams.set('after', options.after);\n\n let response: Response;\n\n try {\n response = await fetch(url, {\n headers: {\n authorization: `Bearer ${options.apiKey}`,\n accept: 'text/event-stream',\n ...(lastEventId ? { 'last-event-id': lastEventId } : {}),\n },\n signal: options.signal,\n });\n } catch {\n if (options.signal?.aborted) return;\n await sleep(backoffMs, options.signal);\n backoffMs = Math.min(backoffMs * 2, 30_000);\n continue;\n }\n\n /*\n * A refusal is not a blip. `401` on a revoked key and `403` on a\n * mailbox the key cannot reach will answer the same way for ever, so\n * retrying is a loop that never ends and never says why. `429` and the\n * 5xx family are temporary and are retried.\n */\n if (response.status === 401 || response.status === 403 || response.status === 404) {\n throw new Error(\n `Pidgeon refused the stream: ${response.status} ${await response.text().catch(() => '')}`.trim(),\n );\n }\n\n if (!response.ok || !response.body) {\n await sleep(backoffMs, options.signal);\n backoffMs = Math.min(backoffMs * 2, 30_000);\n continue;\n }\n\n // Connected. Anything after this is an ordinary close, not a failure.\n backoffMs = 1_000;\n\n for await (const frame of frames(response.body, options.signal)) {\n /*\n * **The frame's `id:` is a cursor, not the event's id.** It is the\n * event's `created_at`, because `Last-Event-ID` is handed back in\n * place of `after` and `after` takes a timestamp — sending the event\n * id would produce a reconnect that silently restarts from the\n * beginning. The event's own id is inside `data`.\n */\n if (frame.id) lastEventId = frame.id;\n if (!frame.data) continue;\n\n /*\n * The server sends one of these before it gives up, and then closes.\n * It is not an event and must not be yielded as one — the loop\n * reconnects from the cursor, which is what it says to do.\n */\n if (frame.event === 'error') continue;\n\n let parsed: StreamedEvent;\n\n try {\n parsed = JSON.parse(frame.data) as StreamedEvent;\n } catch {\n // A frame we cannot read is one event lost, not a reason to drop the\n // connection and re-read from a cursor we have already passed.\n continue;\n }\n\n yield parsed;\n }\n }\n}\n\ninterface Frame {\n id?: string;\n event?: string;\n data?: string;\n}\n\n/**\n * The wire format, which is four lines and two rules.\n *\n * A frame ends at a blank line; a line starting `:` is a comment and the\n * server sends one on connect so proxies do not buffer the first event.\n * `data:` may repeat, and the pieces join with a newline — our events never\n * do, and handling it is two characters.\n */\nasync function* frames(body: ReadableStream<Uint8Array>, signal?: AbortSignal) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (!signal?.aborted) {\n const { done, value } = await reader.read();\n if (done) return;\n\n buffer += decoder.decode(value, { stream: true });\n\n let boundary = buffer.indexOf('\\n\\n');\n\n while (boundary !== -1) {\n const block = buffer.slice(0, boundary);\n buffer = buffer.slice(boundary + 2);\n boundary = buffer.indexOf('\\n\\n');\n\n const frame: Frame = {};\n const data: string[] = [];\n\n for (const line of block.split('\\n')) {\n if (line.startsWith(':')) continue;\n\n const colon = line.indexOf(':');\n if (colon === -1) continue;\n\n const field = line.slice(0, colon);\n // One optional space after the colon, per the spec.\n const value = line.slice(colon + 1).replace(/^ /, '');\n\n if (field === 'id') frame.id = value;\n else if (field === 'event') frame.event = value;\n else if (field === 'data') data.push(value);\n }\n\n if (data.length > 0) frame.data = data.join('\\n');\n if (frame.id || frame.data) yield frame;\n }\n }\n } finally {\n await reader.cancel().catch(() => undefined);\n }\n}\n\n/** Waits, and returns early if the caller gives up while we are waiting. */\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n"],"mappings":"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","names":["sleep","joinedValues","config","request","url","key","value"]}