faxforagents 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.2 (2026-10-30)
4
+
5
+ First version on the npm registry. The README opens with the Fax for Agents logo, a link row to the
6
+ website, quickstart, API reference, SDK docs, MCP page, dashboard, pricing and changelog, and badges
7
+ for the npm version, CI, licence, Node and TypeScript. No client code changed.
8
+
3
9
  ## 0.2.1 (2026-10-29)
4
10
 
5
11
  API version 1.2.3. The generated types document `503 live_provider_unavailable` on the eight operations
package/README.md CHANGED
@@ -1,6 +1,29 @@
1
- # faxforagents
2
-
3
- The TypeScript and JavaScript client for Fax for Agents, <https://faxforagents.com>.
1
+ <p align="center">
2
+ <a href="https://faxforagents.com"><img src="https://faxforagents.com/brand/logo-512.png" width="88" alt="Fax for Agents"></a>
3
+ </p>
4
+
5
+ <h1 align="center">faxforagents</h1>
6
+
7
+ <p align="center">The TypeScript and JavaScript client for <a href="https://faxforagents.com">Fax for Agents</a>, the fax API built for AI agents.</p>
8
+
9
+ <p align="center">
10
+ <a href="https://faxforagents.com">Website</a> ·
11
+ <a href="https://faxforagents.com/docs/quickstart/">Quickstart</a> ·
12
+ <a href="https://faxforagents.com/docs/api/">API reference</a> ·
13
+ <a href="https://faxforagents.com/docs/sdks/">SDKs</a> ·
14
+ <a href="https://faxforagents.com/mcp/">MCP</a> ·
15
+ <a href="https://app.faxforagents.com">Dashboard</a> ·
16
+ <a href="https://faxforagents.com/pricing/">Pricing</a> ·
17
+ <a href="https://faxforagents.com/changelog/">Changelog</a>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="https://www.npmjs.com/package/faxforagents"><img src="https://img.shields.io/npm/v/faxforagents?label=npm" alt="npm version"></a>
22
+ <a href="https://github.com/faxforagents/sdk-typescript/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/faxforagents/sdk-typescript/ci.yml?branch=main&label=ci" alt="CI"></a>
23
+ <a href="https://github.com/faxforagents/sdk-typescript/blob/main/LICENSE"><img src="https://img.shields.io/badge/licence-MIT-1f6feb" alt="MIT licence"></a>
24
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-18%2B-339933" alt="Node 18+"></a>
25
+ <a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/types-included-3178c6" alt="TypeScript"></a>
26
+ </p>
4
27
 
5
28
  Fax for Agents is a fax API, a hosted MCP server and SDKs built so AI agents can send and receive
6
29
  faxes. It is made by JSB Holdings LLC.
package/dist/index.cjs CHANGED
@@ -144,7 +144,7 @@ function errorFor(status, payload, opts = {}) {
144
144
  }
145
145
 
146
146
  // src/version.ts
147
- var VERSION = "0.2.1";
147
+ var VERSION = "0.2.2";
148
148
 
149
149
  // src/http.ts
150
150
  var DEFAULT_BASE_URL = "https://api.faxforagents.com";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/version.ts","../src/http.ts","../src/client.ts","../src/webhooks.ts"],"sourcesContent":["/**\n * TypeScript and JavaScript client for Fax for Agents, https://faxforagents.com.\n *\n * Fax for Agents is a fax API, a hosted MCP server and SDKs built so AI agents can send and receive\n * faxes. This package wraps every /v1 operation of the REST API with types generated from the public\n * OpenAPI document, an Idempotency-Key on every mutating call, retries that honour Retry-After,\n * pagination helpers and the webhook signature check. Zero runtime dependencies: fetch and Web Crypto.\n *\n * import { FaxForAgents } from 'faxforagents';\n *\n * const ffa = new FaxForAgents(); // reads FAXFORAGENTS_API_KEY\n * const doc = await ffa.documents.create({ text: 'Hello from an agent.' });\n * const quote = await ffa.quotes.create({ document_id: doc.id, to: '+15550000001' });\n * const fax = await ffa.faxes.wait((await ffa.faxes.create({ quote_id: quote.id })).id);\n * console.log(fax.state); // delivered, with fax.evidence\n */\n\nexport {\n Agents,\n Approvals,\n Billing,\n CONTENT_TYPES,\n Documents,\n Events,\n Extractions,\n FaxForAgents,\n Faxes,\n Identity,\n Inbox,\n Members,\n Numbers,\n Organizations,\n Platform,\n Policies,\n Quotes,\n Sandbox,\n TERMINAL_STATES,\n Webhooks,\n guessContentType,\n} from './client.js';\nexport { FaxForAgents as Client } from './client.js';\nexport {\n APIConnectionError,\n APIError,\n APITimeoutError,\n AuthenticationError,\n ConflictError,\n FaxForAgentsError,\n InvalidRequestError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitedError,\n ScopeError,\n ServerError,\n} from './errors.js';\nexport type { APIErrorFields } from './errors.js';\nexport { DEFAULT_BASE_URL, Http, paginate } from './http.js';\nexport type { ClientOptions, RequestOptions } from './http.js';\nexport { SignatureError, parseEvent, sign, signatureHeaders, verifyWebhook } from './webhooks.js';\nexport type { WebhookEvent } from './webhooks.js';\nexport { VERSION } from './version.js';\nexport type * from './schema.js';\n","/**\n * Errors of the Fax for Agents client.\n *\n * Every API refusal is one envelope: {\"error\": {\"code\", \"message\", \"retryable\", \"correlation_id\",\n * \"details\"}}. The client throws `APIError` (or the subclass for the status) with those fields. The\n * `code` is the stable thing to branch on: quote_expired, insufficient_balance, approval_required and\n * so on. Quote the correlation_id when you write to hello@faxforagents.com.\n */\n\nexport class FaxForAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** The API could not be reached, or the connection dropped. */\nexport class APIConnectionError extends FaxForAgentsError {}\n\n/** The request ran past its timeout. */\nexport class APITimeoutError extends APIConnectionError {}\n\nexport interface APIErrorFields {\n status: number;\n code: string;\n message: string;\n retryable?: boolean;\n correlationId?: string | null;\n details?: unknown;\n retryAfter?: number | null;\n}\n\n/** The API answered with an error envelope. */\nexport class APIError extends FaxForAgentsError {\n readonly status: number;\n readonly code: string;\n readonly retryable: boolean;\n readonly correlationId: string | null;\n readonly details: unknown;\n /** Seconds the API asked us to wait (429), when it said. */\n readonly retryAfter: number | null;\n\n constructor(f: APIErrorFields) {\n super(`${f.code}: ${f.message}${f.correlationId ? ` (correlation ${f.correlationId})` : ''}`);\n this.status = f.status;\n this.code = f.code;\n this.retryable = f.retryable ?? false;\n this.correlationId = f.correlationId ?? null;\n this.details = f.details;\n this.retryAfter = f.retryAfter ?? null;\n }\n}\n\n/** 400 or 422: the request did not pass validation. */\nexport class InvalidRequestError extends APIError {}\n/** 401 invalid_token: no key, or a revoked or expired one. */\nexport class AuthenticationError extends APIError {}\n/** 402 insufficient_balance: the wallet does not cover the fax. A person tops up. */\nexport class PaymentRequiredError extends APIError {}\n/** 403: the key lacks the scope (details.scope), or an agent key tried to administer. */\nexport class ScopeError extends APIError {}\n/** 404 not_found: not an id of this organization, or deleted. */\nexport class NotFoundError extends APIError {}\n/** 409: the resource refuses this change (quote_consumed, not_cancelable). */\nexport class ConflictError extends APIError {}\n/** 429 rate_limited. retryAfter is the seconds the API asked for. */\nexport class RateLimitedError extends APIError {}\n/** 5xx: the API failed. The client already retried. */\nexport class ServerError extends APIError {}\n\nconst BY_STATUS: Record<number, new (f: APIErrorFields) => APIError> = {\n 400: InvalidRequestError,\n 401: AuthenticationError,\n 402: PaymentRequiredError,\n 403: ScopeError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: InvalidRequestError,\n 429: RateLimitedError,\n};\n\nexport function errorFor(\n status: number,\n payload: unknown,\n opts: { retryAfter?: number | null; text?: string } = {},\n): APIError {\n const body = payload && typeof payload === 'object' ? (payload as Record<string, unknown>) : null;\n let err = body && body.error && typeof body.error === 'object' ? (body.error as Record<string, unknown>) : null;\n if (!err) {\n err = {\n code: `http_${status}`,\n message: (opts.text ?? '').slice(0, 200) || `HTTP ${status}`,\n details: body?.detail,\n };\n }\n const Cls = status >= 500 ? ServerError : (BY_STATUS[status] ?? APIError);\n return new Cls({\n status,\n code: String(err.code ?? `http_${status}`),\n message: String(err.message ?? `HTTP ${status}`),\n retryable: typeof err.retryable === 'boolean' ? err.retryable : [429, 502, 503, 504].includes(status),\n correlationId: typeof err.correlation_id === 'string' ? err.correlation_id : null,\n details: err.details,\n retryAfter: opts.retryAfter ?? null,\n });\n}\n","// GENERATED from package.json by scripts/sync-version.mjs. Do not edit by hand.\nexport const VERSION = '0.2.1';\n","/**\n * The HTTP layer under the client: one key, one base URL, idempotency keys, retries, the error envelope.\n *\n * - Every mutating call (POST, PATCH, DELETE) carries an Idempotency-Key. When the caller passes none, a\n * UUID is minted once per call and reused on every retry, so a retried send never creates a second fax.\n * - 429 and 5xx answers are retried up to `maxRetries` times. Retry-After is honoured (seconds or an\n * HTTP date, capped at `maxRetryAfter` seconds). Otherwise the wait is exponential with full jitter\n * from `backoffBase`. Network errors and timeouts are retried the same way.\n * - An error status throws APIError or the subclass for that status (errors.ts).\n *\n * Only `fetch` is used, so it runs on Node 18+, Deno, Bun, browsers and edge runtimes.\n */\n\nimport { APIConnectionError, APITimeoutError, errorFor } from './errors.js';\nimport { VERSION } from './version.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.faxforagents.com';\nconst MUTATING = new Set(['POST', 'PATCH', 'DELETE']);\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nexport interface ClientOptions {\n /** ffa_live_... or ffa_test_... Defaults to FAXFORAGENTS_API_KEY (then FFA_API_KEY) in the environment. */\n apiKey?: string;\n /** Defaults to FAXFORAGENTS_API_URL in the environment, then https://api.faxforagents.com. */\n baseUrl?: string;\n /** Per attempt, in milliseconds. Default 60000. */\n timeoutMs?: number;\n /** Retries after the first attempt for 429, 5xx and network errors. Default 3. */\n maxRetries?: number;\n /** Base of the exponential backoff in seconds. Default 0.5. */\n backoffBase?: number;\n /** The longest Retry-After honoured, in seconds. Default 30. */\n maxRetryAfter?: number;\n /** A fetch to use instead of the global one (tests, custom agents). */\n fetch?: typeof fetch;\n /** Headers added to every request. */\n headers?: Record<string, string>;\n}\n\nexport interface RequestOptions {\n params?: Record<string, string | number | boolean | null | undefined>;\n json?: unknown;\n body?: BodyInit;\n headers?: Record<string, string>;\n idempotencyKey?: string;\n}\n\nfunction env(name: string): string | undefined {\n const g = globalThis as { process?: { env?: Record<string, string | undefined> } };\n return g.process?.env?.[name];\n}\n\nexport function resolveKey(key: string | undefined): string {\n const value = (key ?? env('FAXFORAGENTS_API_KEY') ?? env('FFA_API_KEY') ?? '').trim();\n if (!value) {\n throw new Error(\n 'no API key: pass apiKey or set FAXFORAGENTS_API_KEY. Keys are created in the Fax for Agents dashboard or with POST /v1/api-keys.',\n );\n }\n return value;\n}\n\nexport function retryAfterSeconds(value: string | null, cap: number): number | null {\n if (!value) return null;\n const n = Number(value.trim());\n if (Number.isFinite(n)) return Math.min(Math.max(n, 0), cap);\n const at = Date.parse(value);\n if (Number.isNaN(at)) return null;\n return Math.max(0, Math.min((at - Date.now()) / 1000, cap));\n}\n\nexport function cleanParams(params: RequestOptions['params']): string {\n if (!params) return '';\n const q = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v !== null && v !== undefined) q.set(k, String(v));\n }\n const s = q.toString();\n return s ? `?${s}` : '';\n}\n\nexport function stripNulls(json: unknown): unknown {\n if (!json || typeof json !== 'object' || Array.isArray(json)) return json;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(json as Record<string, unknown>)) {\n if (v !== undefined && v !== null) out[k] = v;\n }\n return out;\n}\n\nconst sleep = (s: number) => new Promise<void>((r) => setTimeout(r, Math.max(0, s * 1000)));\n\nexport class Http {\n readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly timeoutMs: number;\n private readonly maxRetries: number;\n private readonly backoffBase: number;\n private readonly maxRetryAfter: number;\n private readonly fetchImpl: typeof fetch;\n private readonly extraHeaders: Record<string, string>;\n\n constructor(opts: ClientOptions = {}) {\n this.apiKey = resolveKey(opts.apiKey);\n this.baseUrl = (opts.baseUrl ?? env('FAXFORAGENTS_API_URL') ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n this.timeoutMs = opts.timeoutMs ?? 60_000;\n this.maxRetries = Math.max(0, opts.maxRetries ?? 3);\n this.backoffBase = opts.backoffBase ?? 0.5;\n this.maxRetryAfter = opts.maxRetryAfter ?? 30;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.extraHeaders = opts.headers ?? {};\n }\n\n private waitFor(attempt: number, retryAfter: string | null): number {\n const explicit = retryAfterSeconds(retryAfter, this.maxRetryAfter);\n if (explicit !== null) return explicit;\n return Math.random() * this.backoffBase * 2 ** attempt;\n }\n\n /** The raw Response of a successful call. Throws APIError on 4xx/5xx after the retries. */\n async send(method: string, path: string, opts: RequestOptions = {}): Promise<Response> {\n const m = method.toUpperCase();\n const url = (path.startsWith('http') ? path : this.baseUrl + path) + cleanParams(opts.params);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: 'application/json',\n 'User-Agent': `faxforagents-js/${VERSION}`,\n ...this.extraHeaders,\n ...(opts.headers ?? {}),\n };\n let body: BodyInit | undefined = opts.body;\n if (opts.json !== undefined) {\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify(stripNulls(opts.json));\n }\n if (MUTATING.has(m) && !('Idempotency-Key' in headers)) {\n headers['Idempotency-Key'] = opts.idempotencyKey ?? crypto.randomUUID();\n }\n\n let attempt = 0;\n for (;;) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n let resp: Response;\n try {\n resp = await this.fetchImpl(url, { method: m, headers, body, signal: controller.signal });\n } catch (err) {\n clearTimeout(timer);\n const timedOut = (err as { name?: string })?.name === 'AbortError';\n if (attempt >= this.maxRetries) {\n if (timedOut) throw new APITimeoutError(`${m} ${path} timed out after ${this.timeoutMs} ms`);\n throw new APIConnectionError(`${this.baseUrl} not reachable (${(err as Error)?.message ?? err})`);\n }\n await sleep(this.waitFor(attempt, null));\n attempt += 1;\n continue;\n }\n clearTimeout(timer);\n if (RETRY_STATUSES.has(resp.status) && attempt < this.maxRetries) {\n await resp.text().catch(() => undefined);\n await sleep(this.waitFor(attempt, resp.headers.get('retry-after')));\n attempt += 1;\n continue;\n }\n if (resp.status >= 400) {\n const text = await resp.text();\n let payload: unknown = null;\n try {\n payload = JSON.parse(text);\n } catch {\n payload = null;\n }\n throw errorFor(resp.status, payload, {\n retryAfter: retryAfterSeconds(resp.headers.get('retry-after'), this.maxRetryAfter),\n text,\n });\n }\n return resp;\n }\n }\n\n /** The parsed JSON of a successful call, typed by the caller. */\n async request<T>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const resp = await this.send(method, path, opts);\n const ctype = resp.headers.get('content-type') ?? '';\n if (resp.status === 204 || !ctype.startsWith('application/json')) {\n const text = await resp.text();\n return (text ? JSON.parse(text) : {}) as T;\n }\n return (await resp.json()) as T;\n }\n\n /** The bytes of a successful call (signed download URLs). */\n async bytes(method: string, path: string, opts: RequestOptions = {}): Promise<Uint8Array> {\n const resp = await this.send(method, path, opts);\n return new Uint8Array(await resp.arrayBuffer());\n }\n}\n\n/** Follow next_cursor until the API returns none. */\nexport async function* paginate<T>(\n fetchPage: (cursor: string | undefined) => Promise<{ items: T[]; next_cursor?: string | null }>,\n): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined;\n for (;;) {\n const page = await fetchPage(cursor);\n for (const item of page.items ?? []) yield item;\n if (!page.next_cursor) return;\n cursor = page.next_cursor;\n }\n}\n","/**\n * The Fax for Agents client. Resources mirror the API's tags. Method names are the operationIds of the\n * OpenAPI document, shortened by their resource, so the reference at\n * https://faxforagents.github.io/openapi/reference.html is also the reference of this client.\n *\n * Every mutating method takes `idempotencyKey`. When you pass none a UUID is minted once per call and\n * reused on every retry.\n *\n * import { FaxForAgents } from 'faxforagents';\n *\n * const ffa = new FaxForAgents(); // reads FAXFORAGENTS_API_KEY\n * const doc = await ffa.documents.create({ text: 'Hello from an agent.' });\n * const quote = await ffa.quotes.create({ document_id: doc.id, to: '+15550000001' });\n * const fax = await ffa.faxes.wait((await ffa.faxes.create({ quote_id: quote.id })).id);\n * console.log(fax.state, fax.evidence); // delivered, {...}\n */\n\nimport { ClientOptions, Http, RequestOptions, paginate } from './http.js';\nimport type * as S from './schema.js';\n\nexport const TERMINAL_STATES: ReadonlySet<string> = new Set(['delivered', 'partial', 'failed', 'unknown']);\n\ntype Mut = { idempotencyKey?: string };\ntype Page = { cursor?: string; limit?: number };\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\n/** Content types the upload path accepts, by file suffix. Anything else is sent as a PDF. */\nexport const CONTENT_TYPES: Readonly<Record<string, string>> = {\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.tif': 'image/tiff',\n '.tiff': 'image/tiff',\n};\n\n/** The upload content type of a filename: a PDF unless the suffix says PNG, JPEG or TIFF. */\nexport function guessContentType(filename: string): string {\n const dot = filename.lastIndexOf('.');\n const suffix = dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n return CONTENT_TYPES[suffix] ?? 'application/pdf';\n}\n\nasync function sha256Hex(data: Uint8Array): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-256', data as BufferSource);\n return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\nclass Resource {\n constructor(protected readonly h: Http) {}\n}\n\nexport class Identity extends Resource {\n /** Who the key is: organization, project, environment, scopes. Scope: any. */\n me(): Promise<S.Me> {\n return this.h.request('GET', '/v1/me');\n }\n /** Keys of the organization, metadata only. Scope: key:admin. */\n listApiKeys(): Promise<S.ApiKeyList> {\n return this.h.request('GET', '/v1/api-keys');\n }\n /** Create a key. The secret is in the answer once. Scope: key:admin. */\n createApiKey(body: S.ApiKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', '/v1/api-keys', { json: body, ...o });\n }\n /** A new secret. The old one works 24 more hours. Scope: key:admin. */\n rotateApiKey(keyId: string, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/api-keys/${keyId}/rotate`, o);\n }\n /** Revoke a key at once. Scope: key:admin. */\n revokeApiKey(keyId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/api-keys/${keyId}`, o);\n }\n}\n\nexport class Documents extends Resource {\n /**\n * An immutable document from one of upload_id, text, markdown or html. HTML is rendered with scripts off\n * and no network, at most 2 MiB. Scope: document:write.\n */\n create(body: S.DocumentCreate, o: Mut = {}): Promise<S.Document> {\n return this.h.request('POST', '/v1/documents', { json: body, ...o });\n }\n /**\n * Open an upload session with a signed PUT URL (25 MB, one hour). `content_type` is application/pdf,\n * image/png, image/jpeg or image/tiff. Scope: document:write.\n */\n createUpload(body: S.UploadCreate, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', '/v1/uploads', { json: body, ...o });\n }\n /** Send the bytes to the signed URL from createUpload. No scope, the link is the credential. */\n putUploadContent(uploadUrl: string, data: Uint8Array | ArrayBuffer | Blob, contentType = 'application/pdf'): Promise<S.UploadSession> {\n return this.h.request('PUT', uploadUrl, { body: data as BodyInit, headers: { 'Content-Type': contentType } });\n }\n /** Finalize an upload. The size and, when given, the sha256 are checked. Scope: document:write. */\n completeUpload(uploadId: string, body: S.UploadComplete = {}, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', `/v1/uploads/${uploadId}/complete`, { json: body, ...o });\n }\n /** Cancel an incomplete upload. Scope: document:write. */\n cancelUpload(uploadId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/uploads/${uploadId}`, o);\n }\n /**\n * The whole upload path for a PDF or an image (PNG, JPG or TIFF): createUpload, put the bytes, complete\n * with the sha256, create the document. The content type is read from the filename when not given. An\n * image becomes gray letter pages.\n */\n async upload(data: Uint8Array | ArrayBuffer, opts: { filename?: string; contentType?: string } = {}): Promise<S.Document> {\n const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n const filename = opts.filename ?? 'document.pdf';\n const contentType = opts.contentType ?? guessContentType(filename);\n const session = await this.createUpload({ filename, size_bytes: bytes.byteLength, content_type: contentType });\n if (!session.upload_url) throw new Error('the upload session carries no upload_url');\n await this.putUploadContent(session.upload_url, bytes, contentType);\n await this.completeUpload(session.id, { sha256: await sha256Hex(bytes) });\n return this.create({ upload_id: session.id, filename });\n }\n /** Documents, newest first. Scope: document:read. */\n list(p: Page = {}): Promise<S.DocumentPage> {\n return this.h.request('GET', '/v1/documents', { params: p });\n }\n /** Every document, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.Document, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** Hash, pages and validation state. Scope: document:read. */\n get(documentId: string): Promise<S.Document> {\n return this.h.request('GET', `/v1/documents/${documentId}`);\n }\n /** Delete the document, its bytes and its previews. Scope: document:write. */\n delete(documentId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/documents/${documentId}`, o);\n }\n /** Validation warnings. Scope: document:read. */\n getValidation(documentId: string): Promise<S.DocumentValidation> {\n return this.h.request('GET', `/v1/documents/${documentId}/validation`);\n }\n /** A signed download URL, valid ten minutes. Scope: document:read. */\n getDownload(documentId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/documents/${documentId}/download`);\n }\n /** The document bytes (always a PDF), through a fresh signed URL. */\n async download(documentId: string): Promise<Uint8Array> {\n const link = await this.getDownload(documentId);\n return this.h.bytes('GET', link.url);\n }\n /** Rendered pages with signed preview URLs. Scope: document:read. */\n listPages(documentId: string): Promise<S.DocumentPages> {\n return this.h.request('GET', `/v1/documents/${documentId}/pages`);\n }\n}\n\nexport class Quotes extends Resource {\n /** The exact price of one document to one E.164 destination, valid ten minutes. Scope: fax:quote. */\n create(body: S.QuoteCreate, o: Mut = {}): Promise<S.Quote> {\n return this.h.request('POST', '/v1/fax-quotes', { json: body, ...o });\n }\n /** Read a quote. Scope: fax:quote. */\n get(quoteId: string): Promise<S.Quote> {\n return this.h.request('GET', `/v1/fax-quotes/${quoteId}`);\n }\n}\n\nexport class Faxes extends Resource {\n /** Send a quoted fax. The answer is queued, never delivered. Poll `wait`. Scope: fax:send. */\n create(body: S.FaxCreate, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', '/v1/faxes', { json: body, ...o });\n }\n /** Fax jobs, newest first. Scope: fax:read. */\n list(p: Page & { state?: string } = {}): Promise<S.FaxJobPage> {\n return this.h.request('GET', '/v1/faxes', { params: p });\n }\n /** Every fax job, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { state?: string } = {}): AsyncGenerator<S.FaxJob, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** The job with its evidence once delivered or partial. Scope: fax:read. */\n get(faxId: string): Promise<S.FaxJob> {\n return this.h.request('GET', `/v1/faxes/${faxId}`);\n }\n /** Poll until the state is delivered, partial, failed or unknown. Returns the last job read. */\n async wait(faxId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.FaxJob> {\n const deadline = Date.now() + (opts.timeoutMs ?? 300_000);\n let job = await this.get(faxId);\n while (!TERMINAL_STATES.has(job.state) && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 2000);\n job = await this.get(faxId);\n }\n return job;\n }\n /** Ordered events of one fax. Scope: fax:read. */\n listEvents(faxId: string): Promise<S.EventPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/events`);\n }\n /** Attempt history. Scope: fax:read. */\n listAttempts(faxId: string): Promise<S.AttemptPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/attempts`);\n }\n /** Delivery evidence as a receipt. Scope: fax:read. */\n getReceipt(faxId: string): Promise<S.Receipt> {\n return this.h.request('GET', `/v1/faxes/${faxId}/receipt`);\n }\n /** Cancel while queued, best effort once sending. Scope: fax:cancel. */\n cancel(faxId: string, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', `/v1/faxes/${faxId}/cancel`, { json: {}, ...o });\n }\n}\n\nexport class Webhooks extends Resource {\n /** Registered destinations. Scope: webhook:admin. */\n list(): Promise<S.WebhookList> {\n return this.h.request('GET', '/v1/webhooks');\n }\n /** Register a destination. The secret is in the answer once. Scope: webhook:admin. */\n create(body: S.WebhookCreate, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', '/v1/webhooks', { json: body, ...o });\n }\n /** Change url, description, event_types or status. Scope: webhook:admin. */\n update(webhookId: string, body: S.WebhookUpdate, o: Mut = {}): Promise<S.Webhook> {\n return this.h.request('PATCH', `/v1/webhooks/${webhookId}`, { json: body, ...o });\n }\n /** Remove a destination. Scope: webhook:admin. */\n delete(webhookId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/webhooks/${webhookId}`, o);\n }\n /** A new secret. The old one signs too for 24 hours. Scope: webhook:admin. */\n rotateSecret(webhookId: string, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/rotate-secret`, o);\n }\n /** Send a signed webhook.test event to the destination. Scope: webhook:admin. */\n test(webhookId: string, o: Mut = {}): Promise<S.Event> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/test`, { json: {}, ...o });\n }\n /** Delivery attempts. Scope: webhook:admin. */\n listDeliveries(p: Page & { webhook_id?: string; event_id?: string } = {}): Promise<S.DeliveryPage> {\n return this.h.request('GET', '/v1/webhook-deliveries', { params: p });\n }\n /** Deliver the event again with the same event id. Scope: webhook:admin. */\n replayDelivery(deliveryId: string, o: Mut = {}): Promise<S.Delivery> {\n return this.h.request('POST', `/v1/webhook-deliveries/${deliveryId}/replay`, { json: {}, ...o });\n }\n}\n\nexport class Events extends Resource {\n /** Events for reconciliation, oldest first from the cursor. Scope: fax:read. */\n list(p: Page & { type?: string } = {}): Promise<S.EventPage> {\n return this.h.request('GET', '/v1/events', { params: p });\n }\n /** Every event, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { type?: string } = {}): AsyncGenerator<S.Event, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n}\n\nexport class Billing extends Resource {\n /** Available and held balance of this key's environment. Scope: billing:read. */\n balance(): Promise<S.Balance> {\n return this.h.request('GET', '/v1/balance');\n }\n /** Wallet transactions, newest first. Scope: billing:read. */\n listLedger(p: Page = {}): Promise<S.LedgerPage> {\n return this.h.request('GET', '/v1/ledger', { params: p });\n }\n /** Billing settings of the organization. Scope: billing:read. */\n getSettings(): Promise<S.BillingSettings> {\n return this.h.request('GET', '/v1/billing-settings');\n }\n /** Change the billing email or the low-balance threshold. Scope: billing:write. */\n patchSettings(body: S.BillingSettingsPatch, o: Mut = {}): Promise<S.BillingSettings> {\n return this.h.request('PATCH', '/v1/billing-settings', { json: body, ...o });\n }\n /** A hosted Checkout to fund the live wallet. Scope: billing:write. */\n createTopupSession(body: S.TopupCreate, o: Mut = {}): Promise<S.TopupSession> {\n return this.h.request('POST', '/v1/topup-sessions', { json: body, ...o });\n }\n /** Top-up sessions, newest first. Scope: billing:read. */\n listTopupSessions(p: Page = {}): Promise<S.TopupSessionPage> {\n return this.h.request('GET', '/v1/topup-sessions', { params: p });\n }\n /** Read a top-up session. Scope: billing:read. */\n getTopupSession(topupSessionId: string): Promise<S.TopupSession> {\n return this.h.request('GET', `/v1/topup-sessions/${topupSessionId}`);\n }\n /** Auto top-up settings. Scope: billing:read. */\n listAutoTopups(): Promise<S.AutoTopupList> {\n return this.h.request('GET', '/v1/auto-topups');\n }\n /** Opt in to auto top-up. Scope: billing:write. */\n createAutoTopup(body: S.AutoTopupCreate, o: Mut = {}): Promise<S.AutoTopup> {\n return this.h.request('POST', '/v1/auto-topups', { json: body, ...o });\n }\n /** Turn auto top-up off. Scope: billing:write. */\n deleteAutoTopup(autoTopupId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/auto-topups/${autoTopupId}`, o);\n }\n /** Spending caps of this environment. Scope: billing:read. */\n listBudgets(): Promise<S.BudgetList> {\n return this.h.request('GET', '/v1/budgets');\n }\n /** A daily or monthly cap for the organization, a project or an agent. Scope: billing:write. */\n createBudget(body: S.BudgetCreate, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('POST', '/v1/budgets', { json: body, ...o });\n }\n /** Change a cap's limit or status. Scope: billing:write. */\n patchBudget(budgetId: string, body: S.BudgetPatch, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('PATCH', `/v1/budgets/${budgetId}`, { json: body, ...o });\n }\n /** Usage rollups by day, direction, destination and project. Scope: billing:read. */\n usage(p: { from?: string; to?: string; group_by?: string; project_id?: string } = {}): Promise<S.UsageReport> {\n return this.h.request('GET', '/v1/usage', { params: p });\n }\n /** Export usage as CSV behind a signed download. Scope: billing:read. */\n createUsageExport(body: S.UsageExportCreate, o: Mut = {}): Promise<S.UsageExport> {\n return this.h.request('POST', '/v1/usage-exports', { json: body, ...o });\n }\n /** Read a usage export with a fresh link. Scope: billing:read. */\n getUsageExport(exportId: string): Promise<S.UsageExport> {\n return this.h.request('GET', `/v1/usage-exports/${exportId}`);\n }\n /** Stripe invoices and receipts as hosted links. Scope: billing:read. */\n listInvoices(p: Page = {}): Promise<S.InvoicePage> {\n return this.h.request('GET', '/v1/invoices', { params: p });\n }\n /** One invoice. Scope: billing:read. */\n getInvoice(invoiceId: string): Promise<S.Invoice> {\n return this.h.request('GET', `/v1/invoices/${invoiceId}`);\n }\n /** A hosted Checkout for the Agent workspace subscription. Scope: billing:write. */\n createSubscriptionCheckout(o: Mut = {}): Promise<S.SubscriptionCheckout> {\n return this.h.request('POST', '/v1/subscriptions/checkout', { json: {}, ...o });\n }\n /** Subscriptions and the workspace entitlement. Scope: billing:read. */\n listSubscriptions(): Promise<S.SubscriptionList> {\n return this.h.request('GET', '/v1/subscriptions');\n }\n /** The Stripe customer portal. Scope: billing:write. */\n createPortalSession(o: Mut = {}): Promise<S.PortalSession> {\n return this.h.request('POST', '/v1/billing-portal-sessions', { json: {}, ...o });\n }\n}\n\nexport class Platform extends Resource {\n /** Limits, routes, formats, prices and scopes in force. Scope: any. */\n capabilities(): Promise<S.Capabilities> {\n return this.h.request('GET', '/v1/capabilities');\n }\n /** Customer-safe availability. Scope: any. */\n serviceStatus(): Promise<S.ServiceStatus> {\n return this.h.request('GET', '/v1/service-status');\n }\n}\n\nexport class Sandbox extends Resource {\n /** The scenario catalog, the destination table and active fixtures. Test keys only. */\n listScenarios(): Promise<S.SandboxScenarios> {\n return this.h.request('GET', '/v1/sandbox/scenarios');\n }\n /** Pin an outcome to a destination (or to every send) for 24 hours. Test keys only. */\n createScenario(body: S.SandboxScenarioCreate, o: Mut = {}): Promise<S.SandboxFixture> {\n return this.h.request('POST', '/v1/sandbox/scenarios', { json: body, ...o });\n }\n /** A synthetic received fax and its fax.received event. Test keys only. */\n createInboundFax(body: S.SandboxInboundCreate, o: Mut = {}): Promise<S.InboxItemSummary> {\n return this.h.request('POST', '/v1/sandbox/inbound-faxes', { json: body, ...o });\n }\n /** Delete the organization's test data and reseed the test wallet. Test keys only. */\n reset(o: Mut = {}): Promise<S.SandboxReset> {\n return this.h.request('DELETE', '/v1/sandbox/data', o);\n }\n}\n\nexport class Approvals extends Resource {\n /** Ask a person to approve a quoted send. Grants nothing. Scope: approval:request. */\n request(quoteId: string, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', '/v1/approval-requests', { json: { kind: 'send', quote_id: quoteId }, ...o });\n }\n /** Ask a person for help. The message is shown as data. Scope: approval:request. */\n requestHelp(message: string, opts: { faxJobId?: string } & Mut = {}): Promise<S.ApprovalRequest> {\n const { faxJobId, ...o } = opts;\n return this.h.request('POST', '/v1/approval-requests', {\n json: { kind: 'help', message, fax_job_id: faxJobId },\n ...o,\n });\n }\n /** Requests, pending first. Scope: approval:read. */\n list(p: Page & { status?: string } = {}): Promise<S.ApprovalRequestPage> {\n return this.h.request('GET', '/v1/approval-requests', { params: p });\n }\n /** Every request, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { status?: string } = {}): AsyncGenerator<S.ApprovalRequest, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One request. Scope: approval:read. */\n get(approvalId: string): Promise<S.ApprovalRequest> {\n return this.h.request('GET', `/v1/approval-requests/${approvalId}`);\n }\n /** Poll until the request leaves pending, or the timeout passes. */\n async wait(approvalId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.ApprovalRequest> {\n const deadline = Date.now() + (opts.timeoutMs ?? 600_000);\n let req = await this.get(approvalId);\n while (req.status === 'pending' && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 5000);\n req = await this.get(approvalId);\n }\n return req;\n }\n /** Approve the bound send. Scope: approval:decide, never the key that asked, never an agent key. */\n approve(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/approve`, { json: body, ...o });\n }\n /** Reject with a reason. Scope: approval:decide. */\n reject(approvalId: string, body: S.ApprovalDecision, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/reject`, { json: body, ...o });\n }\n /** Revoke an approval nobody has used yet. Scope: approval:decide. */\n revoke(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approvals/${approvalId}/revoke`, { json: body, ...o });\n }\n}\n\nexport class Policies extends Resource {\n /** The organization's policies. Scope: policy:read. */\n list(): Promise<S.PolicyList> {\n return this.h.request('GET', '/v1/policies');\n }\n /** Create a delegated policy, version 1. Scope: policy:admin, never an agent key. */\n create(body: S.PolicyCreate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('POST', '/v1/policies', { json: body, ...o });\n }\n /** What this key is allowed to do alone, and whether a human is needed. Scope: policy:read. */\n effective(): Promise<S.EffectivePolicies> {\n return this.h.request('GET', '/v1/policies/effective');\n }\n /** A policy at its current version. Scope: policy:read. */\n get(policyId: string): Promise<S.Policy> {\n return this.h.request('GET', `/v1/policies/${policyId}`);\n }\n /** Change a policy: a new immutable version. Scope: policy:admin. */\n update(policyId: string, body: S.PolicyUpdate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('PATCH', `/v1/policies/${policyId}`, { json: body, ...o });\n }\n /** Every version, oldest first. Scope: policy:read. */\n listVersions(policyId: string): Promise<S.PolicyVersionList> {\n return this.h.request('GET', `/v1/policies/${policyId}/versions`);\n }\n /** Dry run: would this key's policies allow the send? Never executes. Scope: policy:read. */\n evaluate(body: S.PolicyEvaluationCreate): Promise<S.PolicyEvaluation> {\n return this.h.request('POST', '/v1/policy-evaluations', { json: body });\n }\n}\n\nexport class Agents extends Resource {\n /** Agent identities. Scope: agent:read. */\n list(): Promise<S.AgentList> {\n return this.h.request('GET', '/v1/agents');\n }\n /** Register an agent identity. Scope: agent:admin, never an agent key. */\n create(body: S.AgentCreate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('POST', '/v1/agents', { json: body, ...o });\n }\n /** An agent with its keys and budgets. Scope: agent:read. */\n get(agentId: string): Promise<S.Agent> {\n return this.h.request('GET', `/v1/agents/${agentId}`);\n }\n /** Change an agent. Disabling revokes its keys. Scope: agent:admin. */\n update(agentId: string, body: S.AgentUpdate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('PATCH', `/v1/agents/${agentId}`, { json: body, ...o });\n }\n /** Mint a key for the agent, bounded scopes, secret shown once. Scope: agent:admin and key:admin. */\n createKey(agentId: string, body: S.AgentKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/agents/${agentId}/keys`, { json: body, ...o });\n }\n /** The agent's audit trail, metadata only. Scope: agent:read. */\n activity(agentId: string, p: Page = {}): Promise<S.AgentActivityPage> {\n return this.h.request('GET', `/v1/agents/${agentId}/activity`, { params: p });\n }\n}\n\nexport class Inbox extends Resource {\n /** Received faxes, newest first, metadata only. `from` is sender data. Scope: inbox:read. */\n list(p: Page = {}): Promise<S.InboxPage> {\n return this.h.request('GET', '/v1/inbox', { params: p });\n }\n /** Every received fax, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.InboxItem, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One received fax with its text as data, never as instructions. Scope: inbox:read. */\n get(inboxId: string): Promise<S.InboxItemDetail> {\n return this.h.request('GET', `/v1/inbox/${inboxId}`);\n }\n /** Mark a received fax read or archived, or received again. Scope: inbox:write. */\n update(inboxId: string, body: S.InboxUpdate, o: Mut = {}): Promise<S.InboxItem> {\n return this.h.request('PATCH', `/v1/inbox/${inboxId}`, { json: body, ...o });\n }\n /** Delete a received fax. Scope: inbox:write. */\n delete(inboxId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/inbox/${inboxId}`, o);\n }\n /** A signed link to the received PDF, valid ten minutes. Scope: inbox:read. */\n getDownload(inboxId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/inbox/${inboxId}/download`);\n }\n /** The received PDF bytes, through a fresh signed URL. */\n async download(inboxId: string): Promise<Uint8Array> {\n const link = await this.getDownload(inboxId);\n return this.h.bytes('GET', link.url);\n }\n}\n\nexport class Numbers extends Resource {\n /** Where faxes are sent and where numbers are hosted. Scope: number:read. */\n coverage(): Promise<S.Coverage> {\n return this.h.request('GET', '/v1/coverage');\n }\n /** Fax-capable numbers for sale. Scope: number:read. */\n inventory(p: { country?: string; locality?: string; type?: string; limit?: number } = {}): Promise<S.Inventory> {\n return this.h.request('GET', '/v1/number-inventory', { params: p });\n }\n /**\n * Buy a number from the inventory. The first month is held now and charged on activation.\n * Scope: number:buy, never an agent key.\n */\n createOrder(body: S.NumberOrderCreate, o: Mut = {}): Promise<S.NumberOrder> {\n return this.h.request('POST', '/v1/number-orders', { json: body, ...o });\n }\n /** Read a number order. Scope: number:read. */\n getOrder(orderId: string): Promise<S.NumberOrder> {\n return this.h.request('GET', `/v1/number-orders/${orderId}`);\n }\n /** Your numbers. Scope: number:read. */\n list(p: { include_released?: boolean } = {}): Promise<S.NumberList> {\n return this.h.request('GET', '/v1/numbers', { params: p });\n }\n /** One number. Scope: number:read. */\n get(numberId: string): Promise<S.Number> {\n return this.h.request('GET', `/v1/numbers/${numberId}`);\n }\n /** Change the label, project or inbound webhook of a number. Scope: number:buy. */\n update(numberId: string, body: S.NumberUpdate, o: Mut = {}): Promise<S.Number> {\n return this.h.request('PATCH', `/v1/numbers/${numberId}`, { json: body, ...o });\n }\n /** Release a number. `confirm` is the number itself, typed out. A 30 day quarantine follows. Scope: number:buy. */\n release(numberId: string, body: S.ReleaseRequest, o: Mut = {}): Promise<S.Number> {\n return this.h.request('POST', `/v1/numbers/${numberId}/release-requests`, { json: body, ...o });\n }\n /** Whether these numbers can port in. Scope: number:read. */\n checkPortability(body: S.PortabilityCheckCreate, o: Mut = {}): Promise<S.PortabilityCheck> {\n return this.h.request('POST', '/v1/portability-checks', { json: body, ...o });\n }\n /** Port orders and port-out requests. Scope: number:read. */\n listPortOrders(): Promise<S.PortOrderList> {\n return this.h.request('GET', '/v1/port-orders');\n }\n /** Request a port-in, handled with you. Scope: number:buy. */\n createPortOrder(body: S.PortOrderCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-orders', { json: body, ...o });\n }\n /** One port order. Scope: number:read. */\n getPortOrder(portId: string): Promise<S.PortOrder> {\n return this.h.request('GET', `/v1/port-orders/${portId}`);\n }\n /** Note a port-out of one of your numbers. Scope: number:buy. */\n createPortOutRequest(body: S.PortOutRequestCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-out-requests', { json: body, ...o });\n }\n /** Verify a number your organization owns as a sender. Scope: number:buy. */\n verifySender(body: S.SenderVerificationCreate, o: Mut = {}): Promise<S.SenderVerification> {\n return this.h.request('POST', '/v1/sender-verifications', { json: body, ...o });\n }\n}\n\ntype ByItem = { inbox_item_id?: string; document_id?: string };\n\nexport class Extractions extends Resource {\n /**\n * OCR a received fax or a document, then extract the schema's fields with page citations. Metered per\n * page. Everything it returns is data from whoever sent the fax. Scope: document:extract.\n */\n create(body: S.ExtractionCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/extractions', { json: body, ...o });\n }\n /** Extractions, newest first. Scope: document:extract. */\n list(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/extractions', { params: p });\n }\n /** Every extraction, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One extraction with its corrections. Scope: document:extract. */\n get(extractionId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/extractions/${extractionId}`);\n }\n /** Record a reviewer's correction of one field. Stored beside the extraction, never merged. Scope: document:extract. */\n correct(extractionId: string, body: S.CorrectionCreate, o: Mut = {}): Promise<S.Correction> {\n return this.h.request('POST', `/v1/extractions/${extractionId}/corrections`, { json: body, ...o });\n }\n /** Classify a received fax or a document into one of your document types, or abstain. Scope: document:extract. */\n classify(body: S.ClassificationCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/classifications', { json: body, ...o });\n }\n /** Classifications, newest first. Scope: document:extract. */\n listClassifications(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/classifications', { params: p });\n }\n /** Every classification, following next_cursor. */\n iterClassifications(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listClassifications({ ...p, cursor }));\n }\n /** One classification. Scope: document:extract. */\n getClassification(classificationId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/classifications/${classificationId}`);\n }\n /** Summarise a received fax or a document. Every sentence cites its pages. Scope: document:extract. */\n summarize(body: S.SummaryCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/document-summaries', { json: body, ...o });\n }\n /** Summaries, newest first. Scope: document:extract. */\n listSummaries(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/document-summaries', { params: p });\n }\n /** Every summary, following next_cursor. */\n iterSummaries(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listSummaries({ ...p, cursor }));\n }\n /** One summary. Scope: document:extract. */\n getSummary(summaryId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/document-summaries/${summaryId}`);\n }\n /** Your saved extraction schemas. Scope: document:extract. */\n listSchemas(): Promise<S.ExtractionSchemaList> {\n return this.h.request('GET', '/v1/extraction-schemas');\n }\n /** Save a versioned extraction schema. The same name again is the next version. Scope: document:extract. */\n createSchema(body: S.SchemaCreate, o: Mut = {}): Promise<S.ExtractionSchema> {\n return this.h.request('POST', '/v1/extraction-schemas', { json: body, ...o });\n }\n /** One schema version. Scope: document:extract. */\n getSchema(schemaId: string): Promise<S.ExtractionSchema> {\n return this.h.request('GET', `/v1/extraction-schemas/${schemaId}`);\n }\n}\n\nexport class Organizations extends Resource {\n /** The organizations the caller belongs to. Scope: any. */\n list(): Promise<S.OrganizationList> {\n return this.h.request('GET', '/v1/organizations');\n }\n /** The organization of this key. Scope: account:read. */\n current(): Promise<S.Organization> {\n return this.h.request('GET', '/v1/organizations/current');\n }\n /** Rename the organization. Scope: member:admin, never an agent key. */\n updateCurrent(body: S.OrganizationPatch, o: Mut = {}): Promise<S.Organization> {\n return this.h.request('PATCH', '/v1/organizations/current', { json: body, ...o });\n }\n /** Ask for an export of the organization's data. Scope: org:admin, never an agent key. */\n requestDataExport(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/export-requests', { json: {}, ...o });\n }\n /** Ask for the organization and its data to be deleted. Scope: org:admin, never an agent key. */\n requestDataDeletion(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/deletion-requests', { json: {}, ...o });\n }\n}\n\nexport class Members extends Resource {\n /** The organization's members. Scope: account:read. */\n list(): Promise<S.MemberList> {\n return this.h.request('GET', '/v1/members');\n }\n /** Change a member's role: owner, admin, member or viewer. Scope: member:admin, never an agent key. */\n update(memberId: string, body: S.MemberPatch, o: Mut = {}): Promise<S.Member> {\n return this.h.request('PATCH', `/v1/members/${memberId}`, { json: body, ...o });\n }\n /** Remove a member. Scope: org:admin, never an agent key. */\n async remove(memberId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/members/${memberId}`, o);\n }\n /** Open invitations. Scope: member:admin. */\n listInvitations(): Promise<S.InvitationList> {\n return this.h.request('GET', '/v1/invitations');\n }\n /** Invite someone by email, a link that works for 7 days. Scope: member:admin, never an agent key. */\n invite(body: S.InvitationCreate, o: Mut = {}): Promise<S.Invitation> {\n return this.h.request('POST', '/v1/invitations', { json: body, ...o });\n }\n /** Withdraw an invitation. Scope: member:admin, never an agent key. */\n async revokeInvitation(invitationId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/invitations/${invitationId}`, o);\n }\n}\n\nexport class FaxForAgents {\n readonly http: Http;\n readonly identity: Identity;\n readonly documents: Documents;\n readonly quotes: Quotes;\n readonly faxes: Faxes;\n readonly webhooks: Webhooks;\n readonly events: Events;\n readonly billing: Billing;\n readonly platform: Platform;\n readonly sandbox: Sandbox;\n readonly approvals: Approvals;\n readonly policies: Policies;\n readonly agents: Agents;\n readonly inbox: Inbox;\n readonly numbers: Numbers;\n readonly extractions: Extractions;\n readonly organizations: Organizations;\n readonly members: Members;\n\n constructor(opts: ClientOptions = {}) {\n this.http = new Http(opts);\n this.identity = new Identity(this.http);\n this.documents = new Documents(this.http);\n this.quotes = new Quotes(this.http);\n this.faxes = new Faxes(this.http);\n this.webhooks = new Webhooks(this.http);\n this.events = new Events(this.http);\n this.billing = new Billing(this.http);\n this.platform = new Platform(this.http);\n this.sandbox = new Sandbox(this.http);\n this.approvals = new Approvals(this.http);\n this.policies = new Policies(this.http);\n this.agents = new Agents(this.http);\n this.inbox = new Inbox(this.http);\n this.numbers = new Numbers(this.http);\n this.extractions = new Extractions(this.http);\n this.organizations = new Organizations(this.http);\n this.members = new Members(this.http);\n }\n\n /** Shortcut for identity.me(). */\n me(): Promise<S.Me> {\n return this.identity.me();\n }\n\n /** Any operation the resources do not cover yet. Returns the parsed JSON. */\n request<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n return this.http.request<T>(method, path, opts);\n }\n}\n","/**\n * Verify the signature on a webhook delivery (Standard Webhooks, https://www.standardwebhooks.com).\n *\n * Copied from the server's webhooks/signing.py (the reference implementation, 2026-10-28). The server\n * sends three headers on every delivery. `webhook-id` is the event id, stable across retries and\n * replays. `webhook-timestamp` is unix seconds. `webhook-signature` is one or more space-separated\n * `v1,<base64(HMAC-SHA256(secret, \"{id}.{timestamp}.{body}\"))>` values. During a secret rotation two\n * signatures are sent, one per live secret, for 24 hours. Secrets are `whsec_` followed by base64.\n *\n * const eventId = await verifyWebhook(secret, req.headers, rawBody); // throws SignatureError\n * const event = parseEvent(rawBody);\n *\n * Verify on the raw bytes, before any JSON parsing. Web Crypto is used, so this is async and runs on\n * Node 18+, browsers and edge runtimes alike.\n */\n\nexport const SECRET_PREFIX = 'whsec_';\nexport const TOLERANCE_S = 300;\n\nexport class SignatureError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SignatureError';\n }\n}\n\nexport interface WebhookEvent {\n id: string;\n type: string;\n created_at: string;\n schema_version: number;\n org_id: string;\n environment: string;\n project_id: string | null;\n resource: { type: string; id: string };\n fax_job_id: string | null;\n correlation_id: string | null;\n data: Record<string, unknown>;\n [extra: string]: unknown;\n}\n\ntype HeaderSource =\n | Record<string, string | string[] | undefined>\n | { get(name: string): string | null }\n | Iterable<[string, string]>;\n\nconst enc = new TextEncoder();\n\nfunction b64encode(bytes: Uint8Array): string {\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return btoa(s);\n}\n\nfunction b64decode(text: string): Uint8Array<ArrayBuffer> {\n const s = atob(text);\n const out = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i);\n return out;\n}\n\nfunction keyBytes(secret: string): Uint8Array<ArrayBuffer> {\n const raw = secret.startsWith(SECRET_PREFIX) ? secret.slice(SECRET_PREFIX.length) : secret;\n return b64decode(raw);\n}\n\nfunction toBytes(body: string | Uint8Array | ArrayBuffer): Uint8Array<ArrayBuffer> {\n if (typeof body === 'string') return enc.encode(body);\n if (body instanceof ArrayBuffer) return new Uint8Array(body);\n return new Uint8Array(body);\n}\n\nfunction headerLookup(headers: HeaderSource): (name: string) => string {\n if (typeof (headers as { get?: unknown }).get === 'function') {\n const h = headers as { get(name: string): string | null };\n return (name) => h.get(name) ?? '';\n }\n const map = new Map<string, string>();\n const entries: Iterable<[string, unknown]> =\n typeof (headers as Iterable<[string, string]>)[Symbol.iterator] === 'function'\n ? (headers as Iterable<[string, string]>)\n : Object.entries(headers as Record<string, string | string[] | undefined>);\n for (const [k, v] of entries) {\n const value = Array.isArray(v) ? v.join(' ') : v;\n if (typeof value === 'string') map.set(k.toLowerCase(), value);\n }\n return (name) => map.get(name) ?? '';\n}\n\nfunction timingSafeEqual(a: string, b: string): boolean {\n const x = enc.encode(a);\n const y = enc.encode(b);\n if (x.length !== y.length) return false;\n let diff = 0;\n for (let i = 0; i < x.length; i++) diff |= (x[i] as number) ^ (y[i] as number);\n return diff === 0;\n}\n\n/** The signature the server computes. Exposed so a test receiver can forge a valid delivery. */\nexport async function sign(\n secret: string,\n msgId: string,\n timestamp: number,\n body: string | Uint8Array | ArrayBuffer,\n): Promise<string> {\n const key = await crypto.subtle.importKey('raw', keyBytes(secret), { name: 'HMAC', hash: 'SHA-256' }, false, [\n 'sign',\n ]);\n const prefix = enc.encode(`${msgId}.${timestamp}.`);\n const payload = toBytes(body);\n const toSign = new Uint8Array(prefix.length + payload.length);\n toSign.set(prefix, 0);\n toSign.set(payload, prefix.length);\n const digest = await crypto.subtle.sign('HMAC', key, toSign);\n return 'v1,' + b64encode(new Uint8Array(digest));\n}\n\n/** The three headers of a delivery, for tests and local tooling. */\nexport async function signatureHeaders(\n secrets: string[],\n msgId: string,\n body: string | Uint8Array | ArrayBuffer,\n timestamp: number = Math.floor(Date.now() / 1000),\n): Promise<Record<string, string>> {\n const sigs = await Promise.all(secrets.map((s) => sign(s, msgId, timestamp, body)));\n return {\n 'webhook-id': msgId,\n 'webhook-timestamp': String(timestamp),\n 'webhook-signature': sigs.join(' '),\n 'content-type': 'application/json',\n };\n}\n\n/**\n * Return the event id when a signature matches and the timestamp is fresh. Throw SignatureError\n * otherwise. `headers` may be a Headers object, a plain object (Node's IncomingMessage.headers) or\n * entries. `body` is the raw request body.\n */\nexport async function verifyWebhook(\n secret: string,\n headers: HeaderSource,\n body: string | Uint8Array | ArrayBuffer,\n opts: { now?: number; toleranceS?: number } = {},\n): Promise<string> {\n const get = headerLookup(headers);\n const msgId = get('webhook-id');\n const tsRaw = get('webhook-timestamp');\n const sigs = get('webhook-signature');\n if (!msgId || !tsRaw || !sigs) throw new SignatureError('missing webhook headers');\n if (!/^\\d+$/.test(tsRaw.trim())) throw new SignatureError('bad timestamp');\n const ts = Number(tsRaw);\n const now = opts.now ?? Date.now() / 1000;\n if (Math.abs(now - ts) > (opts.toleranceS ?? TOLERANCE_S)) throw new SignatureError('timestamp outside tolerance');\n const expected = await sign(secret, msgId, ts, body);\n for (const candidate of sigs.split(/\\s+/)) {\n if (candidate.startsWith('v1,') && timingSafeEqual(candidate, expected)) return msgId;\n }\n throw new SignatureError('no matching signature');\n}\n\n/** Parse a verified body. Call verifyWebhook first. */\nexport function parseEvent(body: string | Uint8Array | ArrayBuffer): WebhookEvent {\n const text = typeof body === 'string' ? body : new TextDecoder().decode(toBytes(body));\n return JSON.parse(text) as WebhookEvent;\n}\n"],"mappings":"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","names":["sleep"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/version.ts","../src/http.ts","../src/client.ts","../src/webhooks.ts"],"sourcesContent":["/**\n * TypeScript and JavaScript client for Fax for Agents, https://faxforagents.com.\n *\n * Fax for Agents is a fax API, a hosted MCP server and SDKs built so AI agents can send and receive\n * faxes. This package wraps every /v1 operation of the REST API with types generated from the public\n * OpenAPI document, an Idempotency-Key on every mutating call, retries that honour Retry-After,\n * pagination helpers and the webhook signature check. Zero runtime dependencies: fetch and Web Crypto.\n *\n * import { FaxForAgents } from 'faxforagents';\n *\n * const ffa = new FaxForAgents(); // reads FAXFORAGENTS_API_KEY\n * const doc = await ffa.documents.create({ text: 'Hello from an agent.' });\n * const quote = await ffa.quotes.create({ document_id: doc.id, to: '+15550000001' });\n * const fax = await ffa.faxes.wait((await ffa.faxes.create({ quote_id: quote.id })).id);\n * console.log(fax.state); // delivered, with fax.evidence\n */\n\nexport {\n Agents,\n Approvals,\n Billing,\n CONTENT_TYPES,\n Documents,\n Events,\n Extractions,\n FaxForAgents,\n Faxes,\n Identity,\n Inbox,\n Members,\n Numbers,\n Organizations,\n Platform,\n Policies,\n Quotes,\n Sandbox,\n TERMINAL_STATES,\n Webhooks,\n guessContentType,\n} from './client.js';\nexport { FaxForAgents as Client } from './client.js';\nexport {\n APIConnectionError,\n APIError,\n APITimeoutError,\n AuthenticationError,\n ConflictError,\n FaxForAgentsError,\n InvalidRequestError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitedError,\n ScopeError,\n ServerError,\n} from './errors.js';\nexport type { APIErrorFields } from './errors.js';\nexport { DEFAULT_BASE_URL, Http, paginate } from './http.js';\nexport type { ClientOptions, RequestOptions } from './http.js';\nexport { SignatureError, parseEvent, sign, signatureHeaders, verifyWebhook } from './webhooks.js';\nexport type { WebhookEvent } from './webhooks.js';\nexport { VERSION } from './version.js';\nexport type * from './schema.js';\n","/**\n * Errors of the Fax for Agents client.\n *\n * Every API refusal is one envelope: {\"error\": {\"code\", \"message\", \"retryable\", \"correlation_id\",\n * \"details\"}}. The client throws `APIError` (or the subclass for the status) with those fields. The\n * `code` is the stable thing to branch on: quote_expired, insufficient_balance, approval_required and\n * so on. Quote the correlation_id when you write to hello@faxforagents.com.\n */\n\nexport class FaxForAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** The API could not be reached, or the connection dropped. */\nexport class APIConnectionError extends FaxForAgentsError {}\n\n/** The request ran past its timeout. */\nexport class APITimeoutError extends APIConnectionError {}\n\nexport interface APIErrorFields {\n status: number;\n code: string;\n message: string;\n retryable?: boolean;\n correlationId?: string | null;\n details?: unknown;\n retryAfter?: number | null;\n}\n\n/** The API answered with an error envelope. */\nexport class APIError extends FaxForAgentsError {\n readonly status: number;\n readonly code: string;\n readonly retryable: boolean;\n readonly correlationId: string | null;\n readonly details: unknown;\n /** Seconds the API asked us to wait (429), when it said. */\n readonly retryAfter: number | null;\n\n constructor(f: APIErrorFields) {\n super(`${f.code}: ${f.message}${f.correlationId ? ` (correlation ${f.correlationId})` : ''}`);\n this.status = f.status;\n this.code = f.code;\n this.retryable = f.retryable ?? false;\n this.correlationId = f.correlationId ?? null;\n this.details = f.details;\n this.retryAfter = f.retryAfter ?? null;\n }\n}\n\n/** 400 or 422: the request did not pass validation. */\nexport class InvalidRequestError extends APIError {}\n/** 401 invalid_token: no key, or a revoked or expired one. */\nexport class AuthenticationError extends APIError {}\n/** 402 insufficient_balance: the wallet does not cover the fax. A person tops up. */\nexport class PaymentRequiredError extends APIError {}\n/** 403: the key lacks the scope (details.scope), or an agent key tried to administer. */\nexport class ScopeError extends APIError {}\n/** 404 not_found: not an id of this organization, or deleted. */\nexport class NotFoundError extends APIError {}\n/** 409: the resource refuses this change (quote_consumed, not_cancelable). */\nexport class ConflictError extends APIError {}\n/** 429 rate_limited. retryAfter is the seconds the API asked for. */\nexport class RateLimitedError extends APIError {}\n/** 5xx: the API failed. The client already retried. */\nexport class ServerError extends APIError {}\n\nconst BY_STATUS: Record<number, new (f: APIErrorFields) => APIError> = {\n 400: InvalidRequestError,\n 401: AuthenticationError,\n 402: PaymentRequiredError,\n 403: ScopeError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: InvalidRequestError,\n 429: RateLimitedError,\n};\n\nexport function errorFor(\n status: number,\n payload: unknown,\n opts: { retryAfter?: number | null; text?: string } = {},\n): APIError {\n const body = payload && typeof payload === 'object' ? (payload as Record<string, unknown>) : null;\n let err = body && body.error && typeof body.error === 'object' ? (body.error as Record<string, unknown>) : null;\n if (!err) {\n err = {\n code: `http_${status}`,\n message: (opts.text ?? '').slice(0, 200) || `HTTP ${status}`,\n details: body?.detail,\n };\n }\n const Cls = status >= 500 ? ServerError : (BY_STATUS[status] ?? APIError);\n return new Cls({\n status,\n code: String(err.code ?? `http_${status}`),\n message: String(err.message ?? `HTTP ${status}`),\n retryable: typeof err.retryable === 'boolean' ? err.retryable : [429, 502, 503, 504].includes(status),\n correlationId: typeof err.correlation_id === 'string' ? err.correlation_id : null,\n details: err.details,\n retryAfter: opts.retryAfter ?? null,\n });\n}\n","// GENERATED from package.json by scripts/sync-version.mjs. Do not edit by hand.\nexport const VERSION = '0.2.2';\n","/**\n * The HTTP layer under the client: one key, one base URL, idempotency keys, retries, the error envelope.\n *\n * - Every mutating call (POST, PATCH, DELETE) carries an Idempotency-Key. When the caller passes none, a\n * UUID is minted once per call and reused on every retry, so a retried send never creates a second fax.\n * - 429 and 5xx answers are retried up to `maxRetries` times. Retry-After is honoured (seconds or an\n * HTTP date, capped at `maxRetryAfter` seconds). Otherwise the wait is exponential with full jitter\n * from `backoffBase`. Network errors and timeouts are retried the same way.\n * - An error status throws APIError or the subclass for that status (errors.ts).\n *\n * Only `fetch` is used, so it runs on Node 18+, Deno, Bun, browsers and edge runtimes.\n */\n\nimport { APIConnectionError, APITimeoutError, errorFor } from './errors.js';\nimport { VERSION } from './version.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.faxforagents.com';\nconst MUTATING = new Set(['POST', 'PATCH', 'DELETE']);\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nexport interface ClientOptions {\n /** ffa_live_... or ffa_test_... Defaults to FAXFORAGENTS_API_KEY (then FFA_API_KEY) in the environment. */\n apiKey?: string;\n /** Defaults to FAXFORAGENTS_API_URL in the environment, then https://api.faxforagents.com. */\n baseUrl?: string;\n /** Per attempt, in milliseconds. Default 60000. */\n timeoutMs?: number;\n /** Retries after the first attempt for 429, 5xx and network errors. Default 3. */\n maxRetries?: number;\n /** Base of the exponential backoff in seconds. Default 0.5. */\n backoffBase?: number;\n /** The longest Retry-After honoured, in seconds. Default 30. */\n maxRetryAfter?: number;\n /** A fetch to use instead of the global one (tests, custom agents). */\n fetch?: typeof fetch;\n /** Headers added to every request. */\n headers?: Record<string, string>;\n}\n\nexport interface RequestOptions {\n params?: Record<string, string | number | boolean | null | undefined>;\n json?: unknown;\n body?: BodyInit;\n headers?: Record<string, string>;\n idempotencyKey?: string;\n}\n\nfunction env(name: string): string | undefined {\n const g = globalThis as { process?: { env?: Record<string, string | undefined> } };\n return g.process?.env?.[name];\n}\n\nexport function resolveKey(key: string | undefined): string {\n const value = (key ?? env('FAXFORAGENTS_API_KEY') ?? env('FFA_API_KEY') ?? '').trim();\n if (!value) {\n throw new Error(\n 'no API key: pass apiKey or set FAXFORAGENTS_API_KEY. Keys are created in the Fax for Agents dashboard or with POST /v1/api-keys.',\n );\n }\n return value;\n}\n\nexport function retryAfterSeconds(value: string | null, cap: number): number | null {\n if (!value) return null;\n const n = Number(value.trim());\n if (Number.isFinite(n)) return Math.min(Math.max(n, 0), cap);\n const at = Date.parse(value);\n if (Number.isNaN(at)) return null;\n return Math.max(0, Math.min((at - Date.now()) / 1000, cap));\n}\n\nexport function cleanParams(params: RequestOptions['params']): string {\n if (!params) return '';\n const q = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v !== null && v !== undefined) q.set(k, String(v));\n }\n const s = q.toString();\n return s ? `?${s}` : '';\n}\n\nexport function stripNulls(json: unknown): unknown {\n if (!json || typeof json !== 'object' || Array.isArray(json)) return json;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(json as Record<string, unknown>)) {\n if (v !== undefined && v !== null) out[k] = v;\n }\n return out;\n}\n\nconst sleep = (s: number) => new Promise<void>((r) => setTimeout(r, Math.max(0, s * 1000)));\n\nexport class Http {\n readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly timeoutMs: number;\n private readonly maxRetries: number;\n private readonly backoffBase: number;\n private readonly maxRetryAfter: number;\n private readonly fetchImpl: typeof fetch;\n private readonly extraHeaders: Record<string, string>;\n\n constructor(opts: ClientOptions = {}) {\n this.apiKey = resolveKey(opts.apiKey);\n this.baseUrl = (opts.baseUrl ?? env('FAXFORAGENTS_API_URL') ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n this.timeoutMs = opts.timeoutMs ?? 60_000;\n this.maxRetries = Math.max(0, opts.maxRetries ?? 3);\n this.backoffBase = opts.backoffBase ?? 0.5;\n this.maxRetryAfter = opts.maxRetryAfter ?? 30;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.extraHeaders = opts.headers ?? {};\n }\n\n private waitFor(attempt: number, retryAfter: string | null): number {\n const explicit = retryAfterSeconds(retryAfter, this.maxRetryAfter);\n if (explicit !== null) return explicit;\n return Math.random() * this.backoffBase * 2 ** attempt;\n }\n\n /** The raw Response of a successful call. Throws APIError on 4xx/5xx after the retries. */\n async send(method: string, path: string, opts: RequestOptions = {}): Promise<Response> {\n const m = method.toUpperCase();\n const url = (path.startsWith('http') ? path : this.baseUrl + path) + cleanParams(opts.params);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: 'application/json',\n 'User-Agent': `faxforagents-js/${VERSION}`,\n ...this.extraHeaders,\n ...(opts.headers ?? {}),\n };\n let body: BodyInit | undefined = opts.body;\n if (opts.json !== undefined) {\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify(stripNulls(opts.json));\n }\n if (MUTATING.has(m) && !('Idempotency-Key' in headers)) {\n headers['Idempotency-Key'] = opts.idempotencyKey ?? crypto.randomUUID();\n }\n\n let attempt = 0;\n for (;;) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n let resp: Response;\n try {\n resp = await this.fetchImpl(url, { method: m, headers, body, signal: controller.signal });\n } catch (err) {\n clearTimeout(timer);\n const timedOut = (err as { name?: string })?.name === 'AbortError';\n if (attempt >= this.maxRetries) {\n if (timedOut) throw new APITimeoutError(`${m} ${path} timed out after ${this.timeoutMs} ms`);\n throw new APIConnectionError(`${this.baseUrl} not reachable (${(err as Error)?.message ?? err})`);\n }\n await sleep(this.waitFor(attempt, null));\n attempt += 1;\n continue;\n }\n clearTimeout(timer);\n if (RETRY_STATUSES.has(resp.status) && attempt < this.maxRetries) {\n await resp.text().catch(() => undefined);\n await sleep(this.waitFor(attempt, resp.headers.get('retry-after')));\n attempt += 1;\n continue;\n }\n if (resp.status >= 400) {\n const text = await resp.text();\n let payload: unknown = null;\n try {\n payload = JSON.parse(text);\n } catch {\n payload = null;\n }\n throw errorFor(resp.status, payload, {\n retryAfter: retryAfterSeconds(resp.headers.get('retry-after'), this.maxRetryAfter),\n text,\n });\n }\n return resp;\n }\n }\n\n /** The parsed JSON of a successful call, typed by the caller. */\n async request<T>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const resp = await this.send(method, path, opts);\n const ctype = resp.headers.get('content-type') ?? '';\n if (resp.status === 204 || !ctype.startsWith('application/json')) {\n const text = await resp.text();\n return (text ? JSON.parse(text) : {}) as T;\n }\n return (await resp.json()) as T;\n }\n\n /** The bytes of a successful call (signed download URLs). */\n async bytes(method: string, path: string, opts: RequestOptions = {}): Promise<Uint8Array> {\n const resp = await this.send(method, path, opts);\n return new Uint8Array(await resp.arrayBuffer());\n }\n}\n\n/** Follow next_cursor until the API returns none. */\nexport async function* paginate<T>(\n fetchPage: (cursor: string | undefined) => Promise<{ items: T[]; next_cursor?: string | null }>,\n): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined;\n for (;;) {\n const page = await fetchPage(cursor);\n for (const item of page.items ?? []) yield item;\n if (!page.next_cursor) return;\n cursor = page.next_cursor;\n }\n}\n","/**\n * The Fax for Agents client. Resources mirror the API's tags. Method names are the operationIds of the\n * OpenAPI document, shortened by their resource, so the reference at\n * https://faxforagents.github.io/openapi/reference.html is also the reference of this client.\n *\n * Every mutating method takes `idempotencyKey`. When you pass none a UUID is minted once per call and\n * reused on every retry.\n *\n * import { FaxForAgents } from 'faxforagents';\n *\n * const ffa = new FaxForAgents(); // reads FAXFORAGENTS_API_KEY\n * const doc = await ffa.documents.create({ text: 'Hello from an agent.' });\n * const quote = await ffa.quotes.create({ document_id: doc.id, to: '+15550000001' });\n * const fax = await ffa.faxes.wait((await ffa.faxes.create({ quote_id: quote.id })).id);\n * console.log(fax.state, fax.evidence); // delivered, {...}\n */\n\nimport { ClientOptions, Http, RequestOptions, paginate } from './http.js';\nimport type * as S from './schema.js';\n\nexport const TERMINAL_STATES: ReadonlySet<string> = new Set(['delivered', 'partial', 'failed', 'unknown']);\n\ntype Mut = { idempotencyKey?: string };\ntype Page = { cursor?: string; limit?: number };\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\n/** Content types the upload path accepts, by file suffix. Anything else is sent as a PDF. */\nexport const CONTENT_TYPES: Readonly<Record<string, string>> = {\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.tif': 'image/tiff',\n '.tiff': 'image/tiff',\n};\n\n/** The upload content type of a filename: a PDF unless the suffix says PNG, JPEG or TIFF. */\nexport function guessContentType(filename: string): string {\n const dot = filename.lastIndexOf('.');\n const suffix = dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n return CONTENT_TYPES[suffix] ?? 'application/pdf';\n}\n\nasync function sha256Hex(data: Uint8Array): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-256', data as BufferSource);\n return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\nclass Resource {\n constructor(protected readonly h: Http) {}\n}\n\nexport class Identity extends Resource {\n /** Who the key is: organization, project, environment, scopes. Scope: any. */\n me(): Promise<S.Me> {\n return this.h.request('GET', '/v1/me');\n }\n /** Keys of the organization, metadata only. Scope: key:admin. */\n listApiKeys(): Promise<S.ApiKeyList> {\n return this.h.request('GET', '/v1/api-keys');\n }\n /** Create a key. The secret is in the answer once. Scope: key:admin. */\n createApiKey(body: S.ApiKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', '/v1/api-keys', { json: body, ...o });\n }\n /** A new secret. The old one works 24 more hours. Scope: key:admin. */\n rotateApiKey(keyId: string, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/api-keys/${keyId}/rotate`, o);\n }\n /** Revoke a key at once. Scope: key:admin. */\n revokeApiKey(keyId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/api-keys/${keyId}`, o);\n }\n}\n\nexport class Documents extends Resource {\n /**\n * An immutable document from one of upload_id, text, markdown or html. HTML is rendered with scripts off\n * and no network, at most 2 MiB. Scope: document:write.\n */\n create(body: S.DocumentCreate, o: Mut = {}): Promise<S.Document> {\n return this.h.request('POST', '/v1/documents', { json: body, ...o });\n }\n /**\n * Open an upload session with a signed PUT URL (25 MB, one hour). `content_type` is application/pdf,\n * image/png, image/jpeg or image/tiff. Scope: document:write.\n */\n createUpload(body: S.UploadCreate, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', '/v1/uploads', { json: body, ...o });\n }\n /** Send the bytes to the signed URL from createUpload. No scope, the link is the credential. */\n putUploadContent(uploadUrl: string, data: Uint8Array | ArrayBuffer | Blob, contentType = 'application/pdf'): Promise<S.UploadSession> {\n return this.h.request('PUT', uploadUrl, { body: data as BodyInit, headers: { 'Content-Type': contentType } });\n }\n /** Finalize an upload. The size and, when given, the sha256 are checked. Scope: document:write. */\n completeUpload(uploadId: string, body: S.UploadComplete = {}, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', `/v1/uploads/${uploadId}/complete`, { json: body, ...o });\n }\n /** Cancel an incomplete upload. Scope: document:write. */\n cancelUpload(uploadId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/uploads/${uploadId}`, o);\n }\n /**\n * The whole upload path for a PDF or an image (PNG, JPG or TIFF): createUpload, put the bytes, complete\n * with the sha256, create the document. The content type is read from the filename when not given. An\n * image becomes gray letter pages.\n */\n async upload(data: Uint8Array | ArrayBuffer, opts: { filename?: string; contentType?: string } = {}): Promise<S.Document> {\n const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n const filename = opts.filename ?? 'document.pdf';\n const contentType = opts.contentType ?? guessContentType(filename);\n const session = await this.createUpload({ filename, size_bytes: bytes.byteLength, content_type: contentType });\n if (!session.upload_url) throw new Error('the upload session carries no upload_url');\n await this.putUploadContent(session.upload_url, bytes, contentType);\n await this.completeUpload(session.id, { sha256: await sha256Hex(bytes) });\n return this.create({ upload_id: session.id, filename });\n }\n /** Documents, newest first. Scope: document:read. */\n list(p: Page = {}): Promise<S.DocumentPage> {\n return this.h.request('GET', '/v1/documents', { params: p });\n }\n /** Every document, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.Document, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** Hash, pages and validation state. Scope: document:read. */\n get(documentId: string): Promise<S.Document> {\n return this.h.request('GET', `/v1/documents/${documentId}`);\n }\n /** Delete the document, its bytes and its previews. Scope: document:write. */\n delete(documentId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/documents/${documentId}`, o);\n }\n /** Validation warnings. Scope: document:read. */\n getValidation(documentId: string): Promise<S.DocumentValidation> {\n return this.h.request('GET', `/v1/documents/${documentId}/validation`);\n }\n /** A signed download URL, valid ten minutes. Scope: document:read. */\n getDownload(documentId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/documents/${documentId}/download`);\n }\n /** The document bytes (always a PDF), through a fresh signed URL. */\n async download(documentId: string): Promise<Uint8Array> {\n const link = await this.getDownload(documentId);\n return this.h.bytes('GET', link.url);\n }\n /** Rendered pages with signed preview URLs. Scope: document:read. */\n listPages(documentId: string): Promise<S.DocumentPages> {\n return this.h.request('GET', `/v1/documents/${documentId}/pages`);\n }\n}\n\nexport class Quotes extends Resource {\n /** The exact price of one document to one E.164 destination, valid ten minutes. Scope: fax:quote. */\n create(body: S.QuoteCreate, o: Mut = {}): Promise<S.Quote> {\n return this.h.request('POST', '/v1/fax-quotes', { json: body, ...o });\n }\n /** Read a quote. Scope: fax:quote. */\n get(quoteId: string): Promise<S.Quote> {\n return this.h.request('GET', `/v1/fax-quotes/${quoteId}`);\n }\n}\n\nexport class Faxes extends Resource {\n /** Send a quoted fax. The answer is queued, never delivered. Poll `wait`. Scope: fax:send. */\n create(body: S.FaxCreate, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', '/v1/faxes', { json: body, ...o });\n }\n /** Fax jobs, newest first. Scope: fax:read. */\n list(p: Page & { state?: string } = {}): Promise<S.FaxJobPage> {\n return this.h.request('GET', '/v1/faxes', { params: p });\n }\n /** Every fax job, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { state?: string } = {}): AsyncGenerator<S.FaxJob, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** The job with its evidence once delivered or partial. Scope: fax:read. */\n get(faxId: string): Promise<S.FaxJob> {\n return this.h.request('GET', `/v1/faxes/${faxId}`);\n }\n /** Poll until the state is delivered, partial, failed or unknown. Returns the last job read. */\n async wait(faxId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.FaxJob> {\n const deadline = Date.now() + (opts.timeoutMs ?? 300_000);\n let job = await this.get(faxId);\n while (!TERMINAL_STATES.has(job.state) && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 2000);\n job = await this.get(faxId);\n }\n return job;\n }\n /** Ordered events of one fax. Scope: fax:read. */\n listEvents(faxId: string): Promise<S.EventPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/events`);\n }\n /** Attempt history. Scope: fax:read. */\n listAttempts(faxId: string): Promise<S.AttemptPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/attempts`);\n }\n /** Delivery evidence as a receipt. Scope: fax:read. */\n getReceipt(faxId: string): Promise<S.Receipt> {\n return this.h.request('GET', `/v1/faxes/${faxId}/receipt`);\n }\n /** Cancel while queued, best effort once sending. Scope: fax:cancel. */\n cancel(faxId: string, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', `/v1/faxes/${faxId}/cancel`, { json: {}, ...o });\n }\n}\n\nexport class Webhooks extends Resource {\n /** Registered destinations. Scope: webhook:admin. */\n list(): Promise<S.WebhookList> {\n return this.h.request('GET', '/v1/webhooks');\n }\n /** Register a destination. The secret is in the answer once. Scope: webhook:admin. */\n create(body: S.WebhookCreate, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', '/v1/webhooks', { json: body, ...o });\n }\n /** Change url, description, event_types or status. Scope: webhook:admin. */\n update(webhookId: string, body: S.WebhookUpdate, o: Mut = {}): Promise<S.Webhook> {\n return this.h.request('PATCH', `/v1/webhooks/${webhookId}`, { json: body, ...o });\n }\n /** Remove a destination. Scope: webhook:admin. */\n delete(webhookId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/webhooks/${webhookId}`, o);\n }\n /** A new secret. The old one signs too for 24 hours. Scope: webhook:admin. */\n rotateSecret(webhookId: string, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/rotate-secret`, o);\n }\n /** Send a signed webhook.test event to the destination. Scope: webhook:admin. */\n test(webhookId: string, o: Mut = {}): Promise<S.Event> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/test`, { json: {}, ...o });\n }\n /** Delivery attempts. Scope: webhook:admin. */\n listDeliveries(p: Page & { webhook_id?: string; event_id?: string } = {}): Promise<S.DeliveryPage> {\n return this.h.request('GET', '/v1/webhook-deliveries', { params: p });\n }\n /** Deliver the event again with the same event id. Scope: webhook:admin. */\n replayDelivery(deliveryId: string, o: Mut = {}): Promise<S.Delivery> {\n return this.h.request('POST', `/v1/webhook-deliveries/${deliveryId}/replay`, { json: {}, ...o });\n }\n}\n\nexport class Events extends Resource {\n /** Events for reconciliation, oldest first from the cursor. Scope: fax:read. */\n list(p: Page & { type?: string } = {}): Promise<S.EventPage> {\n return this.h.request('GET', '/v1/events', { params: p });\n }\n /** Every event, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { type?: string } = {}): AsyncGenerator<S.Event, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n}\n\nexport class Billing extends Resource {\n /** Available and held balance of this key's environment. Scope: billing:read. */\n balance(): Promise<S.Balance> {\n return this.h.request('GET', '/v1/balance');\n }\n /** Wallet transactions, newest first. Scope: billing:read. */\n listLedger(p: Page = {}): Promise<S.LedgerPage> {\n return this.h.request('GET', '/v1/ledger', { params: p });\n }\n /** Billing settings of the organization. Scope: billing:read. */\n getSettings(): Promise<S.BillingSettings> {\n return this.h.request('GET', '/v1/billing-settings');\n }\n /** Change the billing email or the low-balance threshold. Scope: billing:write. */\n patchSettings(body: S.BillingSettingsPatch, o: Mut = {}): Promise<S.BillingSettings> {\n return this.h.request('PATCH', '/v1/billing-settings', { json: body, ...o });\n }\n /** A hosted Checkout to fund the live wallet. Scope: billing:write. */\n createTopupSession(body: S.TopupCreate, o: Mut = {}): Promise<S.TopupSession> {\n return this.h.request('POST', '/v1/topup-sessions', { json: body, ...o });\n }\n /** Top-up sessions, newest first. Scope: billing:read. */\n listTopupSessions(p: Page = {}): Promise<S.TopupSessionPage> {\n return this.h.request('GET', '/v1/topup-sessions', { params: p });\n }\n /** Read a top-up session. Scope: billing:read. */\n getTopupSession(topupSessionId: string): Promise<S.TopupSession> {\n return this.h.request('GET', `/v1/topup-sessions/${topupSessionId}`);\n }\n /** Auto top-up settings. Scope: billing:read. */\n listAutoTopups(): Promise<S.AutoTopupList> {\n return this.h.request('GET', '/v1/auto-topups');\n }\n /** Opt in to auto top-up. Scope: billing:write. */\n createAutoTopup(body: S.AutoTopupCreate, o: Mut = {}): Promise<S.AutoTopup> {\n return this.h.request('POST', '/v1/auto-topups', { json: body, ...o });\n }\n /** Turn auto top-up off. Scope: billing:write. */\n deleteAutoTopup(autoTopupId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/auto-topups/${autoTopupId}`, o);\n }\n /** Spending caps of this environment. Scope: billing:read. */\n listBudgets(): Promise<S.BudgetList> {\n return this.h.request('GET', '/v1/budgets');\n }\n /** A daily or monthly cap for the organization, a project or an agent. Scope: billing:write. */\n createBudget(body: S.BudgetCreate, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('POST', '/v1/budgets', { json: body, ...o });\n }\n /** Change a cap's limit or status. Scope: billing:write. */\n patchBudget(budgetId: string, body: S.BudgetPatch, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('PATCH', `/v1/budgets/${budgetId}`, { json: body, ...o });\n }\n /** Usage rollups by day, direction, destination and project. Scope: billing:read. */\n usage(p: { from?: string; to?: string; group_by?: string; project_id?: string } = {}): Promise<S.UsageReport> {\n return this.h.request('GET', '/v1/usage', { params: p });\n }\n /** Export usage as CSV behind a signed download. Scope: billing:read. */\n createUsageExport(body: S.UsageExportCreate, o: Mut = {}): Promise<S.UsageExport> {\n return this.h.request('POST', '/v1/usage-exports', { json: body, ...o });\n }\n /** Read a usage export with a fresh link. Scope: billing:read. */\n getUsageExport(exportId: string): Promise<S.UsageExport> {\n return this.h.request('GET', `/v1/usage-exports/${exportId}`);\n }\n /** Stripe invoices and receipts as hosted links. Scope: billing:read. */\n listInvoices(p: Page = {}): Promise<S.InvoicePage> {\n return this.h.request('GET', '/v1/invoices', { params: p });\n }\n /** One invoice. Scope: billing:read. */\n getInvoice(invoiceId: string): Promise<S.Invoice> {\n return this.h.request('GET', `/v1/invoices/${invoiceId}`);\n }\n /** A hosted Checkout for the Agent workspace subscription. Scope: billing:write. */\n createSubscriptionCheckout(o: Mut = {}): Promise<S.SubscriptionCheckout> {\n return this.h.request('POST', '/v1/subscriptions/checkout', { json: {}, ...o });\n }\n /** Subscriptions and the workspace entitlement. Scope: billing:read. */\n listSubscriptions(): Promise<S.SubscriptionList> {\n return this.h.request('GET', '/v1/subscriptions');\n }\n /** The Stripe customer portal. Scope: billing:write. */\n createPortalSession(o: Mut = {}): Promise<S.PortalSession> {\n return this.h.request('POST', '/v1/billing-portal-sessions', { json: {}, ...o });\n }\n}\n\nexport class Platform extends Resource {\n /** Limits, routes, formats, prices and scopes in force. Scope: any. */\n capabilities(): Promise<S.Capabilities> {\n return this.h.request('GET', '/v1/capabilities');\n }\n /** Customer-safe availability. Scope: any. */\n serviceStatus(): Promise<S.ServiceStatus> {\n return this.h.request('GET', '/v1/service-status');\n }\n}\n\nexport class Sandbox extends Resource {\n /** The scenario catalog, the destination table and active fixtures. Test keys only. */\n listScenarios(): Promise<S.SandboxScenarios> {\n return this.h.request('GET', '/v1/sandbox/scenarios');\n }\n /** Pin an outcome to a destination (or to every send) for 24 hours. Test keys only. */\n createScenario(body: S.SandboxScenarioCreate, o: Mut = {}): Promise<S.SandboxFixture> {\n return this.h.request('POST', '/v1/sandbox/scenarios', { json: body, ...o });\n }\n /** A synthetic received fax and its fax.received event. Test keys only. */\n createInboundFax(body: S.SandboxInboundCreate, o: Mut = {}): Promise<S.InboxItemSummary> {\n return this.h.request('POST', '/v1/sandbox/inbound-faxes', { json: body, ...o });\n }\n /** Delete the organization's test data and reseed the test wallet. Test keys only. */\n reset(o: Mut = {}): Promise<S.SandboxReset> {\n return this.h.request('DELETE', '/v1/sandbox/data', o);\n }\n}\n\nexport class Approvals extends Resource {\n /** Ask a person to approve a quoted send. Grants nothing. Scope: approval:request. */\n request(quoteId: string, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', '/v1/approval-requests', { json: { kind: 'send', quote_id: quoteId }, ...o });\n }\n /** Ask a person for help. The message is shown as data. Scope: approval:request. */\n requestHelp(message: string, opts: { faxJobId?: string } & Mut = {}): Promise<S.ApprovalRequest> {\n const { faxJobId, ...o } = opts;\n return this.h.request('POST', '/v1/approval-requests', {\n json: { kind: 'help', message, fax_job_id: faxJobId },\n ...o,\n });\n }\n /** Requests, pending first. Scope: approval:read. */\n list(p: Page & { status?: string } = {}): Promise<S.ApprovalRequestPage> {\n return this.h.request('GET', '/v1/approval-requests', { params: p });\n }\n /** Every request, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { status?: string } = {}): AsyncGenerator<S.ApprovalRequest, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One request. Scope: approval:read. */\n get(approvalId: string): Promise<S.ApprovalRequest> {\n return this.h.request('GET', `/v1/approval-requests/${approvalId}`);\n }\n /** Poll until the request leaves pending, or the timeout passes. */\n async wait(approvalId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.ApprovalRequest> {\n const deadline = Date.now() + (opts.timeoutMs ?? 600_000);\n let req = await this.get(approvalId);\n while (req.status === 'pending' && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 5000);\n req = await this.get(approvalId);\n }\n return req;\n }\n /** Approve the bound send. Scope: approval:decide, never the key that asked, never an agent key. */\n approve(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/approve`, { json: body, ...o });\n }\n /** Reject with a reason. Scope: approval:decide. */\n reject(approvalId: string, body: S.ApprovalDecision, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/reject`, { json: body, ...o });\n }\n /** Revoke an approval nobody has used yet. Scope: approval:decide. */\n revoke(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approvals/${approvalId}/revoke`, { json: body, ...o });\n }\n}\n\nexport class Policies extends Resource {\n /** The organization's policies. Scope: policy:read. */\n list(): Promise<S.PolicyList> {\n return this.h.request('GET', '/v1/policies');\n }\n /** Create a delegated policy, version 1. Scope: policy:admin, never an agent key. */\n create(body: S.PolicyCreate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('POST', '/v1/policies', { json: body, ...o });\n }\n /** What this key is allowed to do alone, and whether a human is needed. Scope: policy:read. */\n effective(): Promise<S.EffectivePolicies> {\n return this.h.request('GET', '/v1/policies/effective');\n }\n /** A policy at its current version. Scope: policy:read. */\n get(policyId: string): Promise<S.Policy> {\n return this.h.request('GET', `/v1/policies/${policyId}`);\n }\n /** Change a policy: a new immutable version. Scope: policy:admin. */\n update(policyId: string, body: S.PolicyUpdate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('PATCH', `/v1/policies/${policyId}`, { json: body, ...o });\n }\n /** Every version, oldest first. Scope: policy:read. */\n listVersions(policyId: string): Promise<S.PolicyVersionList> {\n return this.h.request('GET', `/v1/policies/${policyId}/versions`);\n }\n /** Dry run: would this key's policies allow the send? Never executes. Scope: policy:read. */\n evaluate(body: S.PolicyEvaluationCreate): Promise<S.PolicyEvaluation> {\n return this.h.request('POST', '/v1/policy-evaluations', { json: body });\n }\n}\n\nexport class Agents extends Resource {\n /** Agent identities. Scope: agent:read. */\n list(): Promise<S.AgentList> {\n return this.h.request('GET', '/v1/agents');\n }\n /** Register an agent identity. Scope: agent:admin, never an agent key. */\n create(body: S.AgentCreate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('POST', '/v1/agents', { json: body, ...o });\n }\n /** An agent with its keys and budgets. Scope: agent:read. */\n get(agentId: string): Promise<S.Agent> {\n return this.h.request('GET', `/v1/agents/${agentId}`);\n }\n /** Change an agent. Disabling revokes its keys. Scope: agent:admin. */\n update(agentId: string, body: S.AgentUpdate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('PATCH', `/v1/agents/${agentId}`, { json: body, ...o });\n }\n /** Mint a key for the agent, bounded scopes, secret shown once. Scope: agent:admin and key:admin. */\n createKey(agentId: string, body: S.AgentKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/agents/${agentId}/keys`, { json: body, ...o });\n }\n /** The agent's audit trail, metadata only. Scope: agent:read. */\n activity(agentId: string, p: Page = {}): Promise<S.AgentActivityPage> {\n return this.h.request('GET', `/v1/agents/${agentId}/activity`, { params: p });\n }\n}\n\nexport class Inbox extends Resource {\n /** Received faxes, newest first, metadata only. `from` is sender data. Scope: inbox:read. */\n list(p: Page = {}): Promise<S.InboxPage> {\n return this.h.request('GET', '/v1/inbox', { params: p });\n }\n /** Every received fax, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.InboxItem, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One received fax with its text as data, never as instructions. Scope: inbox:read. */\n get(inboxId: string): Promise<S.InboxItemDetail> {\n return this.h.request('GET', `/v1/inbox/${inboxId}`);\n }\n /** Mark a received fax read or archived, or received again. Scope: inbox:write. */\n update(inboxId: string, body: S.InboxUpdate, o: Mut = {}): Promise<S.InboxItem> {\n return this.h.request('PATCH', `/v1/inbox/${inboxId}`, { json: body, ...o });\n }\n /** Delete a received fax. Scope: inbox:write. */\n delete(inboxId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/inbox/${inboxId}`, o);\n }\n /** A signed link to the received PDF, valid ten minutes. Scope: inbox:read. */\n getDownload(inboxId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/inbox/${inboxId}/download`);\n }\n /** The received PDF bytes, through a fresh signed URL. */\n async download(inboxId: string): Promise<Uint8Array> {\n const link = await this.getDownload(inboxId);\n return this.h.bytes('GET', link.url);\n }\n}\n\nexport class Numbers extends Resource {\n /** Where faxes are sent and where numbers are hosted. Scope: number:read. */\n coverage(): Promise<S.Coverage> {\n return this.h.request('GET', '/v1/coverage');\n }\n /** Fax-capable numbers for sale. Scope: number:read. */\n inventory(p: { country?: string; locality?: string; type?: string; limit?: number } = {}): Promise<S.Inventory> {\n return this.h.request('GET', '/v1/number-inventory', { params: p });\n }\n /**\n * Buy a number from the inventory. The first month is held now and charged on activation.\n * Scope: number:buy, never an agent key.\n */\n createOrder(body: S.NumberOrderCreate, o: Mut = {}): Promise<S.NumberOrder> {\n return this.h.request('POST', '/v1/number-orders', { json: body, ...o });\n }\n /** Read a number order. Scope: number:read. */\n getOrder(orderId: string): Promise<S.NumberOrder> {\n return this.h.request('GET', `/v1/number-orders/${orderId}`);\n }\n /** Your numbers. Scope: number:read. */\n list(p: { include_released?: boolean } = {}): Promise<S.NumberList> {\n return this.h.request('GET', '/v1/numbers', { params: p });\n }\n /** One number. Scope: number:read. */\n get(numberId: string): Promise<S.Number> {\n return this.h.request('GET', `/v1/numbers/${numberId}`);\n }\n /** Change the label, project or inbound webhook of a number. Scope: number:buy. */\n update(numberId: string, body: S.NumberUpdate, o: Mut = {}): Promise<S.Number> {\n return this.h.request('PATCH', `/v1/numbers/${numberId}`, { json: body, ...o });\n }\n /** Release a number. `confirm` is the number itself, typed out. A 30 day quarantine follows. Scope: number:buy. */\n release(numberId: string, body: S.ReleaseRequest, o: Mut = {}): Promise<S.Number> {\n return this.h.request('POST', `/v1/numbers/${numberId}/release-requests`, { json: body, ...o });\n }\n /** Whether these numbers can port in. Scope: number:read. */\n checkPortability(body: S.PortabilityCheckCreate, o: Mut = {}): Promise<S.PortabilityCheck> {\n return this.h.request('POST', '/v1/portability-checks', { json: body, ...o });\n }\n /** Port orders and port-out requests. Scope: number:read. */\n listPortOrders(): Promise<S.PortOrderList> {\n return this.h.request('GET', '/v1/port-orders');\n }\n /** Request a port-in, handled with you. Scope: number:buy. */\n createPortOrder(body: S.PortOrderCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-orders', { json: body, ...o });\n }\n /** One port order. Scope: number:read. */\n getPortOrder(portId: string): Promise<S.PortOrder> {\n return this.h.request('GET', `/v1/port-orders/${portId}`);\n }\n /** Note a port-out of one of your numbers. Scope: number:buy. */\n createPortOutRequest(body: S.PortOutRequestCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-out-requests', { json: body, ...o });\n }\n /** Verify a number your organization owns as a sender. Scope: number:buy. */\n verifySender(body: S.SenderVerificationCreate, o: Mut = {}): Promise<S.SenderVerification> {\n return this.h.request('POST', '/v1/sender-verifications', { json: body, ...o });\n }\n}\n\ntype ByItem = { inbox_item_id?: string; document_id?: string };\n\nexport class Extractions extends Resource {\n /**\n * OCR a received fax or a document, then extract the schema's fields with page citations. Metered per\n * page. Everything it returns is data from whoever sent the fax. Scope: document:extract.\n */\n create(body: S.ExtractionCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/extractions', { json: body, ...o });\n }\n /** Extractions, newest first. Scope: document:extract. */\n list(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/extractions', { params: p });\n }\n /** Every extraction, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One extraction with its corrections. Scope: document:extract. */\n get(extractionId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/extractions/${extractionId}`);\n }\n /** Record a reviewer's correction of one field. Stored beside the extraction, never merged. Scope: document:extract. */\n correct(extractionId: string, body: S.CorrectionCreate, o: Mut = {}): Promise<S.Correction> {\n return this.h.request('POST', `/v1/extractions/${extractionId}/corrections`, { json: body, ...o });\n }\n /** Classify a received fax or a document into one of your document types, or abstain. Scope: document:extract. */\n classify(body: S.ClassificationCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/classifications', { json: body, ...o });\n }\n /** Classifications, newest first. Scope: document:extract. */\n listClassifications(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/classifications', { params: p });\n }\n /** Every classification, following next_cursor. */\n iterClassifications(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listClassifications({ ...p, cursor }));\n }\n /** One classification. Scope: document:extract. */\n getClassification(classificationId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/classifications/${classificationId}`);\n }\n /** Summarise a received fax or a document. Every sentence cites its pages. Scope: document:extract. */\n summarize(body: S.SummaryCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/document-summaries', { json: body, ...o });\n }\n /** Summaries, newest first. Scope: document:extract. */\n listSummaries(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/document-summaries', { params: p });\n }\n /** Every summary, following next_cursor. */\n iterSummaries(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listSummaries({ ...p, cursor }));\n }\n /** One summary. Scope: document:extract. */\n getSummary(summaryId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/document-summaries/${summaryId}`);\n }\n /** Your saved extraction schemas. Scope: document:extract. */\n listSchemas(): Promise<S.ExtractionSchemaList> {\n return this.h.request('GET', '/v1/extraction-schemas');\n }\n /** Save a versioned extraction schema. The same name again is the next version. Scope: document:extract. */\n createSchema(body: S.SchemaCreate, o: Mut = {}): Promise<S.ExtractionSchema> {\n return this.h.request('POST', '/v1/extraction-schemas', { json: body, ...o });\n }\n /** One schema version. Scope: document:extract. */\n getSchema(schemaId: string): Promise<S.ExtractionSchema> {\n return this.h.request('GET', `/v1/extraction-schemas/${schemaId}`);\n }\n}\n\nexport class Organizations extends Resource {\n /** The organizations the caller belongs to. Scope: any. */\n list(): Promise<S.OrganizationList> {\n return this.h.request('GET', '/v1/organizations');\n }\n /** The organization of this key. Scope: account:read. */\n current(): Promise<S.Organization> {\n return this.h.request('GET', '/v1/organizations/current');\n }\n /** Rename the organization. Scope: member:admin, never an agent key. */\n updateCurrent(body: S.OrganizationPatch, o: Mut = {}): Promise<S.Organization> {\n return this.h.request('PATCH', '/v1/organizations/current', { json: body, ...o });\n }\n /** Ask for an export of the organization's data. Scope: org:admin, never an agent key. */\n requestDataExport(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/export-requests', { json: {}, ...o });\n }\n /** Ask for the organization and its data to be deleted. Scope: org:admin, never an agent key. */\n requestDataDeletion(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/deletion-requests', { json: {}, ...o });\n }\n}\n\nexport class Members extends Resource {\n /** The organization's members. Scope: account:read. */\n list(): Promise<S.MemberList> {\n return this.h.request('GET', '/v1/members');\n }\n /** Change a member's role: owner, admin, member or viewer. Scope: member:admin, never an agent key. */\n update(memberId: string, body: S.MemberPatch, o: Mut = {}): Promise<S.Member> {\n return this.h.request('PATCH', `/v1/members/${memberId}`, { json: body, ...o });\n }\n /** Remove a member. Scope: org:admin, never an agent key. */\n async remove(memberId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/members/${memberId}`, o);\n }\n /** Open invitations. Scope: member:admin. */\n listInvitations(): Promise<S.InvitationList> {\n return this.h.request('GET', '/v1/invitations');\n }\n /** Invite someone by email, a link that works for 7 days. Scope: member:admin, never an agent key. */\n invite(body: S.InvitationCreate, o: Mut = {}): Promise<S.Invitation> {\n return this.h.request('POST', '/v1/invitations', { json: body, ...o });\n }\n /** Withdraw an invitation. Scope: member:admin, never an agent key. */\n async revokeInvitation(invitationId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/invitations/${invitationId}`, o);\n }\n}\n\nexport class FaxForAgents {\n readonly http: Http;\n readonly identity: Identity;\n readonly documents: Documents;\n readonly quotes: Quotes;\n readonly faxes: Faxes;\n readonly webhooks: Webhooks;\n readonly events: Events;\n readonly billing: Billing;\n readonly platform: Platform;\n readonly sandbox: Sandbox;\n readonly approvals: Approvals;\n readonly policies: Policies;\n readonly agents: Agents;\n readonly inbox: Inbox;\n readonly numbers: Numbers;\n readonly extractions: Extractions;\n readonly organizations: Organizations;\n readonly members: Members;\n\n constructor(opts: ClientOptions = {}) {\n this.http = new Http(opts);\n this.identity = new Identity(this.http);\n this.documents = new Documents(this.http);\n this.quotes = new Quotes(this.http);\n this.faxes = new Faxes(this.http);\n this.webhooks = new Webhooks(this.http);\n this.events = new Events(this.http);\n this.billing = new Billing(this.http);\n this.platform = new Platform(this.http);\n this.sandbox = new Sandbox(this.http);\n this.approvals = new Approvals(this.http);\n this.policies = new Policies(this.http);\n this.agents = new Agents(this.http);\n this.inbox = new Inbox(this.http);\n this.numbers = new Numbers(this.http);\n this.extractions = new Extractions(this.http);\n this.organizations = new Organizations(this.http);\n this.members = new Members(this.http);\n }\n\n /** Shortcut for identity.me(). */\n me(): Promise<S.Me> {\n return this.identity.me();\n }\n\n /** Any operation the resources do not cover yet. Returns the parsed JSON. */\n request<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n return this.http.request<T>(method, path, opts);\n }\n}\n","/**\n * Verify the signature on a webhook delivery (Standard Webhooks, https://www.standardwebhooks.com).\n *\n * Copied from the server's webhooks/signing.py (the reference implementation, 2026-10-28). The server\n * sends three headers on every delivery. `webhook-id` is the event id, stable across retries and\n * replays. `webhook-timestamp` is unix seconds. `webhook-signature` is one or more space-separated\n * `v1,<base64(HMAC-SHA256(secret, \"{id}.{timestamp}.{body}\"))>` values. During a secret rotation two\n * signatures are sent, one per live secret, for 24 hours. Secrets are `whsec_` followed by base64.\n *\n * const eventId = await verifyWebhook(secret, req.headers, rawBody); // throws SignatureError\n * const event = parseEvent(rawBody);\n *\n * Verify on the raw bytes, before any JSON parsing. Web Crypto is used, so this is async and runs on\n * Node 18+, browsers and edge runtimes alike.\n */\n\nexport const SECRET_PREFIX = 'whsec_';\nexport const TOLERANCE_S = 300;\n\nexport class SignatureError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SignatureError';\n }\n}\n\nexport interface WebhookEvent {\n id: string;\n type: string;\n created_at: string;\n schema_version: number;\n org_id: string;\n environment: string;\n project_id: string | null;\n resource: { type: string; id: string };\n fax_job_id: string | null;\n correlation_id: string | null;\n data: Record<string, unknown>;\n [extra: string]: unknown;\n}\n\ntype HeaderSource =\n | Record<string, string | string[] | undefined>\n | { get(name: string): string | null }\n | Iterable<[string, string]>;\n\nconst enc = new TextEncoder();\n\nfunction b64encode(bytes: Uint8Array): string {\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return btoa(s);\n}\n\nfunction b64decode(text: string): Uint8Array<ArrayBuffer> {\n const s = atob(text);\n const out = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i);\n return out;\n}\n\nfunction keyBytes(secret: string): Uint8Array<ArrayBuffer> {\n const raw = secret.startsWith(SECRET_PREFIX) ? secret.slice(SECRET_PREFIX.length) : secret;\n return b64decode(raw);\n}\n\nfunction toBytes(body: string | Uint8Array | ArrayBuffer): Uint8Array<ArrayBuffer> {\n if (typeof body === 'string') return enc.encode(body);\n if (body instanceof ArrayBuffer) return new Uint8Array(body);\n return new Uint8Array(body);\n}\n\nfunction headerLookup(headers: HeaderSource): (name: string) => string {\n if (typeof (headers as { get?: unknown }).get === 'function') {\n const h = headers as { get(name: string): string | null };\n return (name) => h.get(name) ?? '';\n }\n const map = new Map<string, string>();\n const entries: Iterable<[string, unknown]> =\n typeof (headers as Iterable<[string, string]>)[Symbol.iterator] === 'function'\n ? (headers as Iterable<[string, string]>)\n : Object.entries(headers as Record<string, string | string[] | undefined>);\n for (const [k, v] of entries) {\n const value = Array.isArray(v) ? v.join(' ') : v;\n if (typeof value === 'string') map.set(k.toLowerCase(), value);\n }\n return (name) => map.get(name) ?? '';\n}\n\nfunction timingSafeEqual(a: string, b: string): boolean {\n const x = enc.encode(a);\n const y = enc.encode(b);\n if (x.length !== y.length) return false;\n let diff = 0;\n for (let i = 0; i < x.length; i++) diff |= (x[i] as number) ^ (y[i] as number);\n return diff === 0;\n}\n\n/** The signature the server computes. Exposed so a test receiver can forge a valid delivery. */\nexport async function sign(\n secret: string,\n msgId: string,\n timestamp: number,\n body: string | Uint8Array | ArrayBuffer,\n): Promise<string> {\n const key = await crypto.subtle.importKey('raw', keyBytes(secret), { name: 'HMAC', hash: 'SHA-256' }, false, [\n 'sign',\n ]);\n const prefix = enc.encode(`${msgId}.${timestamp}.`);\n const payload = toBytes(body);\n const toSign = new Uint8Array(prefix.length + payload.length);\n toSign.set(prefix, 0);\n toSign.set(payload, prefix.length);\n const digest = await crypto.subtle.sign('HMAC', key, toSign);\n return 'v1,' + b64encode(new Uint8Array(digest));\n}\n\n/** The three headers of a delivery, for tests and local tooling. */\nexport async function signatureHeaders(\n secrets: string[],\n msgId: string,\n body: string | Uint8Array | ArrayBuffer,\n timestamp: number = Math.floor(Date.now() / 1000),\n): Promise<Record<string, string>> {\n const sigs = await Promise.all(secrets.map((s) => sign(s, msgId, timestamp, body)));\n return {\n 'webhook-id': msgId,\n 'webhook-timestamp': String(timestamp),\n 'webhook-signature': sigs.join(' '),\n 'content-type': 'application/json',\n };\n}\n\n/**\n * Return the event id when a signature matches and the timestamp is fresh. Throw SignatureError\n * otherwise. `headers` may be a Headers object, a plain object (Node's IncomingMessage.headers) or\n * entries. `body` is the raw request body.\n */\nexport async function verifyWebhook(\n secret: string,\n headers: HeaderSource,\n body: string | Uint8Array | ArrayBuffer,\n opts: { now?: number; toleranceS?: number } = {},\n): Promise<string> {\n const get = headerLookup(headers);\n const msgId = get('webhook-id');\n const tsRaw = get('webhook-timestamp');\n const sigs = get('webhook-signature');\n if (!msgId || !tsRaw || !sigs) throw new SignatureError('missing webhook headers');\n if (!/^\\d+$/.test(tsRaw.trim())) throw new SignatureError('bad timestamp');\n const ts = Number(tsRaw);\n const now = opts.now ?? Date.now() / 1000;\n if (Math.abs(now - ts) > (opts.toleranceS ?? TOLERANCE_S)) throw new SignatureError('timestamp outside tolerance');\n const expected = await sign(secret, msgId, ts, body);\n for (const candidate of sigs.split(/\\s+/)) {\n if (candidate.startsWith('v1,') && timingSafeEqual(candidate, expected)) return msgId;\n }\n throw new SignatureError('no matching signature');\n}\n\n/** Parse a verified body. Call verifyWebhook first. */\nexport function parseEvent(body: string | Uint8Array | ArrayBuffer): WebhookEvent {\n const text = typeof body === 'string' ? body : new TextDecoder().decode(toBytes(body));\n return JSON.parse(text) as WebhookEvent;\n}\n"],"mappings":"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","names":["sleep"]}
package/dist/index.d.cts CHANGED
@@ -13358,6 +13358,6 @@ declare function verifyWebhook(secret: string, headers: HeaderSource, body: stri
13358
13358
  /** Parse a verified body. Call verifyWebhook first. */
13359
13359
  declare function parseEvent(body: string | Uint8Array | ArrayBuffer): WebhookEvent;
13360
13360
 
13361
- declare const VERSION = "0.2.1";
13361
+ declare const VERSION = "0.2.2";
13362
13362
 
13363
13363
  export { type $defs, APIConnectionError, APIError, type APIErrorFields, APITimeoutError, type Agent, type AgentActivity, type AgentActivityPage, type AgentCreate, type AgentKeyCreate, type AgentList, type AgentUpdate, Agents, type ApiKey, type ApiKeyCreate, type ApiKeyList, type ApiKeyWithSecret, type ApprovalDecision, type ApprovalRequest, type ApprovalRequestCreate, type ApprovalRequestPage, Approvals, type Attempt, type AttemptPage, AuthenticationError, type AutoTopup, type AutoTopupCreate, type AutoTopupList, type Balance, Billing, type BillingSettings, type BillingSettingsPatch, type Budget, type BudgetCreate, type BudgetList, type BudgetPatch, CONTENT_TYPES, type Capabilities, type ClassificationCreate, FaxForAgents as Client, type ClientOptions, ConflictError, type Correction, type CorrectionCreate, type Coverage, DEFAULT_BASE_URL, type Deleted, type Delivery, type DeliveryPage, type Document, type DocumentCreate, type DocumentPage, type DocumentPages, type DocumentValidation, Documents, type EffectivePolicies, type ErrorEnvelope, type Event, type EventPage, Events, type Extraction, type ExtractionCreate, type ExtractionPage, type ExtractionPageList, type ExtractionSchema, type ExtractionSchemaList, Extractions, type FaxCreate, FaxForAgents, FaxForAgentsError, type FaxJob, type FaxJobPage, Faxes, Http, type HttpValidationError, Identity, Inbox, type InboxItem, type InboxItemDetail, type InboxItemSummary, type InboxPage, type InboxUpdate, InvalidRequestError, type Inventory, type InventoryNumber, type Invitation, type InvitationCreate, type InvitationList, type Invoice, type InvoicePage, type LedgerEntry, type LedgerPage, type Me, type Member, type MemberList, type MemberPatch, Members, NotFoundError, type Number, type NumberList, type NumberOrder, type NumberOrderCreate, type NumberUpdate, Numbers, type Organization, type OrganizationList, type OrganizationPatch, type OrganizationSummary, Organizations, type PagePreview, PaymentRequiredError, Platform, Policies, type Policy, type PolicyCreate, type PolicyEvaluation, type PolicyEvaluationCreate, type PolicyList, type PolicyUpdate, type PolicyVersion, type PolicyVersionList, type PortOrder, type PortOrderCreate, type PortOrderList, type PortOutRequestCreate, type PortabilityCheck, type PortabilityCheckCreate, type PortalSession, type Quote, type QuoteCreate, Quotes, RateLimitedError, type Receipt, type ReleaseRequest, type RequestOptions, type Requested, Sandbox, type SandboxFixture, type SandboxInboundCreate, type SandboxReset, type SandboxScenarioCreate, type SandboxScenarios, type SchemaCreate, ScopeError, type SenderVerification, type SenderVerificationCreate, ServerError, type ServiceStatus, SignatureError, type SignedUrl, type Subscription, type SubscriptionCheckout, type SubscriptionList, type SummaryCreate, TERMINAL_STATES, type TopupCreate, type TopupSession, type TopupSessionPage, type UploadComplete, type UploadCreate, type UploadSession, type UsageExport, type UsageExportCreate, type UsageItem, type UsageReport, VERSION, type ValidationError, type Webhook, type WebhookCreate, type WebhookEvent, type WebhookList, type WebhookUpdate, type WebhookWithSecret, Webhooks, type components, guessContentType, type operations, paginate, parseEvent, type paths, sign, signatureHeaders, verifyWebhook, type webhooks };
package/dist/index.d.ts CHANGED
@@ -13358,6 +13358,6 @@ declare function verifyWebhook(secret: string, headers: HeaderSource, body: stri
13358
13358
  /** Parse a verified body. Call verifyWebhook first. */
13359
13359
  declare function parseEvent(body: string | Uint8Array | ArrayBuffer): WebhookEvent;
13360
13360
 
13361
- declare const VERSION = "0.2.1";
13361
+ declare const VERSION = "0.2.2";
13362
13362
 
13363
13363
  export { type $defs, APIConnectionError, APIError, type APIErrorFields, APITimeoutError, type Agent, type AgentActivity, type AgentActivityPage, type AgentCreate, type AgentKeyCreate, type AgentList, type AgentUpdate, Agents, type ApiKey, type ApiKeyCreate, type ApiKeyList, type ApiKeyWithSecret, type ApprovalDecision, type ApprovalRequest, type ApprovalRequestCreate, type ApprovalRequestPage, Approvals, type Attempt, type AttemptPage, AuthenticationError, type AutoTopup, type AutoTopupCreate, type AutoTopupList, type Balance, Billing, type BillingSettings, type BillingSettingsPatch, type Budget, type BudgetCreate, type BudgetList, type BudgetPatch, CONTENT_TYPES, type Capabilities, type ClassificationCreate, FaxForAgents as Client, type ClientOptions, ConflictError, type Correction, type CorrectionCreate, type Coverage, DEFAULT_BASE_URL, type Deleted, type Delivery, type DeliveryPage, type Document, type DocumentCreate, type DocumentPage, type DocumentPages, type DocumentValidation, Documents, type EffectivePolicies, type ErrorEnvelope, type Event, type EventPage, Events, type Extraction, type ExtractionCreate, type ExtractionPage, type ExtractionPageList, type ExtractionSchema, type ExtractionSchemaList, Extractions, type FaxCreate, FaxForAgents, FaxForAgentsError, type FaxJob, type FaxJobPage, Faxes, Http, type HttpValidationError, Identity, Inbox, type InboxItem, type InboxItemDetail, type InboxItemSummary, type InboxPage, type InboxUpdate, InvalidRequestError, type Inventory, type InventoryNumber, type Invitation, type InvitationCreate, type InvitationList, type Invoice, type InvoicePage, type LedgerEntry, type LedgerPage, type Me, type Member, type MemberList, type MemberPatch, Members, NotFoundError, type Number, type NumberList, type NumberOrder, type NumberOrderCreate, type NumberUpdate, Numbers, type Organization, type OrganizationList, type OrganizationPatch, type OrganizationSummary, Organizations, type PagePreview, PaymentRequiredError, Platform, Policies, type Policy, type PolicyCreate, type PolicyEvaluation, type PolicyEvaluationCreate, type PolicyList, type PolicyUpdate, type PolicyVersion, type PolicyVersionList, type PortOrder, type PortOrderCreate, type PortOrderList, type PortOutRequestCreate, type PortabilityCheck, type PortabilityCheckCreate, type PortalSession, type Quote, type QuoteCreate, Quotes, RateLimitedError, type Receipt, type ReleaseRequest, type RequestOptions, type Requested, Sandbox, type SandboxFixture, type SandboxInboundCreate, type SandboxReset, type SandboxScenarioCreate, type SandboxScenarios, type SchemaCreate, ScopeError, type SenderVerification, type SenderVerificationCreate, ServerError, type ServiceStatus, SignatureError, type SignedUrl, type Subscription, type SubscriptionCheckout, type SubscriptionList, type SummaryCreate, TERMINAL_STATES, type TopupCreate, type TopupSession, type TopupSessionPage, type UploadComplete, type UploadCreate, type UploadSession, type UsageExport, type UsageExportCreate, type UsageItem, type UsageReport, VERSION, type ValidationError, type Webhook, type WebhookCreate, type WebhookEvent, type WebhookList, type WebhookUpdate, type WebhookWithSecret, Webhooks, type components, guessContentType, type operations, paginate, parseEvent, type paths, sign, signatureHeaders, verifyWebhook, type webhooks };
package/dist/index.js CHANGED
@@ -76,7 +76,7 @@ function errorFor(status, payload, opts = {}) {
76
76
  }
77
77
 
78
78
  // src/version.ts
79
- var VERSION = "0.2.1";
79
+ var VERSION = "0.2.2";
80
80
 
81
81
  // src/http.ts
82
82
  var DEFAULT_BASE_URL = "https://api.faxforagents.com";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/http.ts","../src/client.ts","../src/webhooks.ts"],"sourcesContent":["/**\n * Errors of the Fax for Agents client.\n *\n * Every API refusal is one envelope: {\"error\": {\"code\", \"message\", \"retryable\", \"correlation_id\",\n * \"details\"}}. The client throws `APIError` (or the subclass for the status) with those fields. The\n * `code` is the stable thing to branch on: quote_expired, insufficient_balance, approval_required and\n * so on. Quote the correlation_id when you write to hello@faxforagents.com.\n */\n\nexport class FaxForAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** The API could not be reached, or the connection dropped. */\nexport class APIConnectionError extends FaxForAgentsError {}\n\n/** The request ran past its timeout. */\nexport class APITimeoutError extends APIConnectionError {}\n\nexport interface APIErrorFields {\n status: number;\n code: string;\n message: string;\n retryable?: boolean;\n correlationId?: string | null;\n details?: unknown;\n retryAfter?: number | null;\n}\n\n/** The API answered with an error envelope. */\nexport class APIError extends FaxForAgentsError {\n readonly status: number;\n readonly code: string;\n readonly retryable: boolean;\n readonly correlationId: string | null;\n readonly details: unknown;\n /** Seconds the API asked us to wait (429), when it said. */\n readonly retryAfter: number | null;\n\n constructor(f: APIErrorFields) {\n super(`${f.code}: ${f.message}${f.correlationId ? ` (correlation ${f.correlationId})` : ''}`);\n this.status = f.status;\n this.code = f.code;\n this.retryable = f.retryable ?? false;\n this.correlationId = f.correlationId ?? null;\n this.details = f.details;\n this.retryAfter = f.retryAfter ?? null;\n }\n}\n\n/** 400 or 422: the request did not pass validation. */\nexport class InvalidRequestError extends APIError {}\n/** 401 invalid_token: no key, or a revoked or expired one. */\nexport class AuthenticationError extends APIError {}\n/** 402 insufficient_balance: the wallet does not cover the fax. A person tops up. */\nexport class PaymentRequiredError extends APIError {}\n/** 403: the key lacks the scope (details.scope), or an agent key tried to administer. */\nexport class ScopeError extends APIError {}\n/** 404 not_found: not an id of this organization, or deleted. */\nexport class NotFoundError extends APIError {}\n/** 409: the resource refuses this change (quote_consumed, not_cancelable). */\nexport class ConflictError extends APIError {}\n/** 429 rate_limited. retryAfter is the seconds the API asked for. */\nexport class RateLimitedError extends APIError {}\n/** 5xx: the API failed. The client already retried. */\nexport class ServerError extends APIError {}\n\nconst BY_STATUS: Record<number, new (f: APIErrorFields) => APIError> = {\n 400: InvalidRequestError,\n 401: AuthenticationError,\n 402: PaymentRequiredError,\n 403: ScopeError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: InvalidRequestError,\n 429: RateLimitedError,\n};\n\nexport function errorFor(\n status: number,\n payload: unknown,\n opts: { retryAfter?: number | null; text?: string } = {},\n): APIError {\n const body = payload && typeof payload === 'object' ? (payload as Record<string, unknown>) : null;\n let err = body && body.error && typeof body.error === 'object' ? (body.error as Record<string, unknown>) : null;\n if (!err) {\n err = {\n code: `http_${status}`,\n message: (opts.text ?? '').slice(0, 200) || `HTTP ${status}`,\n details: body?.detail,\n };\n }\n const Cls = status >= 500 ? ServerError : (BY_STATUS[status] ?? APIError);\n return new Cls({\n status,\n code: String(err.code ?? `http_${status}`),\n message: String(err.message ?? `HTTP ${status}`),\n retryable: typeof err.retryable === 'boolean' ? err.retryable : [429, 502, 503, 504].includes(status),\n correlationId: typeof err.correlation_id === 'string' ? err.correlation_id : null,\n details: err.details,\n retryAfter: opts.retryAfter ?? null,\n });\n}\n","// GENERATED from package.json by scripts/sync-version.mjs. Do not edit by hand.\nexport const VERSION = '0.2.1';\n","/**\n * The HTTP layer under the client: one key, one base URL, idempotency keys, retries, the error envelope.\n *\n * - Every mutating call (POST, PATCH, DELETE) carries an Idempotency-Key. When the caller passes none, a\n * UUID is minted once per call and reused on every retry, so a retried send never creates a second fax.\n * - 429 and 5xx answers are retried up to `maxRetries` times. Retry-After is honoured (seconds or an\n * HTTP date, capped at `maxRetryAfter` seconds). Otherwise the wait is exponential with full jitter\n * from `backoffBase`. Network errors and timeouts are retried the same way.\n * - An error status throws APIError or the subclass for that status (errors.ts).\n *\n * Only `fetch` is used, so it runs on Node 18+, Deno, Bun, browsers and edge runtimes.\n */\n\nimport { APIConnectionError, APITimeoutError, errorFor } from './errors.js';\nimport { VERSION } from './version.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.faxforagents.com';\nconst MUTATING = new Set(['POST', 'PATCH', 'DELETE']);\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nexport interface ClientOptions {\n /** ffa_live_... or ffa_test_... Defaults to FAXFORAGENTS_API_KEY (then FFA_API_KEY) in the environment. */\n apiKey?: string;\n /** Defaults to FAXFORAGENTS_API_URL in the environment, then https://api.faxforagents.com. */\n baseUrl?: string;\n /** Per attempt, in milliseconds. Default 60000. */\n timeoutMs?: number;\n /** Retries after the first attempt for 429, 5xx and network errors. Default 3. */\n maxRetries?: number;\n /** Base of the exponential backoff in seconds. Default 0.5. */\n backoffBase?: number;\n /** The longest Retry-After honoured, in seconds. Default 30. */\n maxRetryAfter?: number;\n /** A fetch to use instead of the global one (tests, custom agents). */\n fetch?: typeof fetch;\n /** Headers added to every request. */\n headers?: Record<string, string>;\n}\n\nexport interface RequestOptions {\n params?: Record<string, string | number | boolean | null | undefined>;\n json?: unknown;\n body?: BodyInit;\n headers?: Record<string, string>;\n idempotencyKey?: string;\n}\n\nfunction env(name: string): string | undefined {\n const g = globalThis as { process?: { env?: Record<string, string | undefined> } };\n return g.process?.env?.[name];\n}\n\nexport function resolveKey(key: string | undefined): string {\n const value = (key ?? env('FAXFORAGENTS_API_KEY') ?? env('FFA_API_KEY') ?? '').trim();\n if (!value) {\n throw new Error(\n 'no API key: pass apiKey or set FAXFORAGENTS_API_KEY. Keys are created in the Fax for Agents dashboard or with POST /v1/api-keys.',\n );\n }\n return value;\n}\n\nexport function retryAfterSeconds(value: string | null, cap: number): number | null {\n if (!value) return null;\n const n = Number(value.trim());\n if (Number.isFinite(n)) return Math.min(Math.max(n, 0), cap);\n const at = Date.parse(value);\n if (Number.isNaN(at)) return null;\n return Math.max(0, Math.min((at - Date.now()) / 1000, cap));\n}\n\nexport function cleanParams(params: RequestOptions['params']): string {\n if (!params) return '';\n const q = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v !== null && v !== undefined) q.set(k, String(v));\n }\n const s = q.toString();\n return s ? `?${s}` : '';\n}\n\nexport function stripNulls(json: unknown): unknown {\n if (!json || typeof json !== 'object' || Array.isArray(json)) return json;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(json as Record<string, unknown>)) {\n if (v !== undefined && v !== null) out[k] = v;\n }\n return out;\n}\n\nconst sleep = (s: number) => new Promise<void>((r) => setTimeout(r, Math.max(0, s * 1000)));\n\nexport class Http {\n readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly timeoutMs: number;\n private readonly maxRetries: number;\n private readonly backoffBase: number;\n private readonly maxRetryAfter: number;\n private readonly fetchImpl: typeof fetch;\n private readonly extraHeaders: Record<string, string>;\n\n constructor(opts: ClientOptions = {}) {\n this.apiKey = resolveKey(opts.apiKey);\n this.baseUrl = (opts.baseUrl ?? env('FAXFORAGENTS_API_URL') ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n this.timeoutMs = opts.timeoutMs ?? 60_000;\n this.maxRetries = Math.max(0, opts.maxRetries ?? 3);\n this.backoffBase = opts.backoffBase ?? 0.5;\n this.maxRetryAfter = opts.maxRetryAfter ?? 30;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.extraHeaders = opts.headers ?? {};\n }\n\n private waitFor(attempt: number, retryAfter: string | null): number {\n const explicit = retryAfterSeconds(retryAfter, this.maxRetryAfter);\n if (explicit !== null) return explicit;\n return Math.random() * this.backoffBase * 2 ** attempt;\n }\n\n /** The raw Response of a successful call. Throws APIError on 4xx/5xx after the retries. */\n async send(method: string, path: string, opts: RequestOptions = {}): Promise<Response> {\n const m = method.toUpperCase();\n const url = (path.startsWith('http') ? path : this.baseUrl + path) + cleanParams(opts.params);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: 'application/json',\n 'User-Agent': `faxforagents-js/${VERSION}`,\n ...this.extraHeaders,\n ...(opts.headers ?? {}),\n };\n let body: BodyInit | undefined = opts.body;\n if (opts.json !== undefined) {\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify(stripNulls(opts.json));\n }\n if (MUTATING.has(m) && !('Idempotency-Key' in headers)) {\n headers['Idempotency-Key'] = opts.idempotencyKey ?? crypto.randomUUID();\n }\n\n let attempt = 0;\n for (;;) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n let resp: Response;\n try {\n resp = await this.fetchImpl(url, { method: m, headers, body, signal: controller.signal });\n } catch (err) {\n clearTimeout(timer);\n const timedOut = (err as { name?: string })?.name === 'AbortError';\n if (attempt >= this.maxRetries) {\n if (timedOut) throw new APITimeoutError(`${m} ${path} timed out after ${this.timeoutMs} ms`);\n throw new APIConnectionError(`${this.baseUrl} not reachable (${(err as Error)?.message ?? err})`);\n }\n await sleep(this.waitFor(attempt, null));\n attempt += 1;\n continue;\n }\n clearTimeout(timer);\n if (RETRY_STATUSES.has(resp.status) && attempt < this.maxRetries) {\n await resp.text().catch(() => undefined);\n await sleep(this.waitFor(attempt, resp.headers.get('retry-after')));\n attempt += 1;\n continue;\n }\n if (resp.status >= 400) {\n const text = await resp.text();\n let payload: unknown = null;\n try {\n payload = JSON.parse(text);\n } catch {\n payload = null;\n }\n throw errorFor(resp.status, payload, {\n retryAfter: retryAfterSeconds(resp.headers.get('retry-after'), this.maxRetryAfter),\n text,\n });\n }\n return resp;\n }\n }\n\n /** The parsed JSON of a successful call, typed by the caller. */\n async request<T>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const resp = await this.send(method, path, opts);\n const ctype = resp.headers.get('content-type') ?? '';\n if (resp.status === 204 || !ctype.startsWith('application/json')) {\n const text = await resp.text();\n return (text ? JSON.parse(text) : {}) as T;\n }\n return (await resp.json()) as T;\n }\n\n /** The bytes of a successful call (signed download URLs). */\n async bytes(method: string, path: string, opts: RequestOptions = {}): Promise<Uint8Array> {\n const resp = await this.send(method, path, opts);\n return new Uint8Array(await resp.arrayBuffer());\n }\n}\n\n/** Follow next_cursor until the API returns none. */\nexport async function* paginate<T>(\n fetchPage: (cursor: string | undefined) => Promise<{ items: T[]; next_cursor?: string | null }>,\n): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined;\n for (;;) {\n const page = await fetchPage(cursor);\n for (const item of page.items ?? []) yield item;\n if (!page.next_cursor) return;\n cursor = page.next_cursor;\n }\n}\n","/**\n * The Fax for Agents client. Resources mirror the API's tags. Method names are the operationIds of the\n * OpenAPI document, shortened by their resource, so the reference at\n * https://faxforagents.github.io/openapi/reference.html is also the reference of this client.\n *\n * Every mutating method takes `idempotencyKey`. When you pass none a UUID is minted once per call and\n * reused on every retry.\n *\n * import { FaxForAgents } from 'faxforagents';\n *\n * const ffa = new FaxForAgents(); // reads FAXFORAGENTS_API_KEY\n * const doc = await ffa.documents.create({ text: 'Hello from an agent.' });\n * const quote = await ffa.quotes.create({ document_id: doc.id, to: '+15550000001' });\n * const fax = await ffa.faxes.wait((await ffa.faxes.create({ quote_id: quote.id })).id);\n * console.log(fax.state, fax.evidence); // delivered, {...}\n */\n\nimport { ClientOptions, Http, RequestOptions, paginate } from './http.js';\nimport type * as S from './schema.js';\n\nexport const TERMINAL_STATES: ReadonlySet<string> = new Set(['delivered', 'partial', 'failed', 'unknown']);\n\ntype Mut = { idempotencyKey?: string };\ntype Page = { cursor?: string; limit?: number };\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\n/** Content types the upload path accepts, by file suffix. Anything else is sent as a PDF. */\nexport const CONTENT_TYPES: Readonly<Record<string, string>> = {\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.tif': 'image/tiff',\n '.tiff': 'image/tiff',\n};\n\n/** The upload content type of a filename: a PDF unless the suffix says PNG, JPEG or TIFF. */\nexport function guessContentType(filename: string): string {\n const dot = filename.lastIndexOf('.');\n const suffix = dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n return CONTENT_TYPES[suffix] ?? 'application/pdf';\n}\n\nasync function sha256Hex(data: Uint8Array): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-256', data as BufferSource);\n return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\nclass Resource {\n constructor(protected readonly h: Http) {}\n}\n\nexport class Identity extends Resource {\n /** Who the key is: organization, project, environment, scopes. Scope: any. */\n me(): Promise<S.Me> {\n return this.h.request('GET', '/v1/me');\n }\n /** Keys of the organization, metadata only. Scope: key:admin. */\n listApiKeys(): Promise<S.ApiKeyList> {\n return this.h.request('GET', '/v1/api-keys');\n }\n /** Create a key. The secret is in the answer once. Scope: key:admin. */\n createApiKey(body: S.ApiKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', '/v1/api-keys', { json: body, ...o });\n }\n /** A new secret. The old one works 24 more hours. Scope: key:admin. */\n rotateApiKey(keyId: string, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/api-keys/${keyId}/rotate`, o);\n }\n /** Revoke a key at once. Scope: key:admin. */\n revokeApiKey(keyId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/api-keys/${keyId}`, o);\n }\n}\n\nexport class Documents extends Resource {\n /**\n * An immutable document from one of upload_id, text, markdown or html. HTML is rendered with scripts off\n * and no network, at most 2 MiB. Scope: document:write.\n */\n create(body: S.DocumentCreate, o: Mut = {}): Promise<S.Document> {\n return this.h.request('POST', '/v1/documents', { json: body, ...o });\n }\n /**\n * Open an upload session with a signed PUT URL (25 MB, one hour). `content_type` is application/pdf,\n * image/png, image/jpeg or image/tiff. Scope: document:write.\n */\n createUpload(body: S.UploadCreate, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', '/v1/uploads', { json: body, ...o });\n }\n /** Send the bytes to the signed URL from createUpload. No scope, the link is the credential. */\n putUploadContent(uploadUrl: string, data: Uint8Array | ArrayBuffer | Blob, contentType = 'application/pdf'): Promise<S.UploadSession> {\n return this.h.request('PUT', uploadUrl, { body: data as BodyInit, headers: { 'Content-Type': contentType } });\n }\n /** Finalize an upload. The size and, when given, the sha256 are checked. Scope: document:write. */\n completeUpload(uploadId: string, body: S.UploadComplete = {}, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', `/v1/uploads/${uploadId}/complete`, { json: body, ...o });\n }\n /** Cancel an incomplete upload. Scope: document:write. */\n cancelUpload(uploadId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/uploads/${uploadId}`, o);\n }\n /**\n * The whole upload path for a PDF or an image (PNG, JPG or TIFF): createUpload, put the bytes, complete\n * with the sha256, create the document. The content type is read from the filename when not given. An\n * image becomes gray letter pages.\n */\n async upload(data: Uint8Array | ArrayBuffer, opts: { filename?: string; contentType?: string } = {}): Promise<S.Document> {\n const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n const filename = opts.filename ?? 'document.pdf';\n const contentType = opts.contentType ?? guessContentType(filename);\n const session = await this.createUpload({ filename, size_bytes: bytes.byteLength, content_type: contentType });\n if (!session.upload_url) throw new Error('the upload session carries no upload_url');\n await this.putUploadContent(session.upload_url, bytes, contentType);\n await this.completeUpload(session.id, { sha256: await sha256Hex(bytes) });\n return this.create({ upload_id: session.id, filename });\n }\n /** Documents, newest first. Scope: document:read. */\n list(p: Page = {}): Promise<S.DocumentPage> {\n return this.h.request('GET', '/v1/documents', { params: p });\n }\n /** Every document, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.Document, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** Hash, pages and validation state. Scope: document:read. */\n get(documentId: string): Promise<S.Document> {\n return this.h.request('GET', `/v1/documents/${documentId}`);\n }\n /** Delete the document, its bytes and its previews. Scope: document:write. */\n delete(documentId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/documents/${documentId}`, o);\n }\n /** Validation warnings. Scope: document:read. */\n getValidation(documentId: string): Promise<S.DocumentValidation> {\n return this.h.request('GET', `/v1/documents/${documentId}/validation`);\n }\n /** A signed download URL, valid ten minutes. Scope: document:read. */\n getDownload(documentId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/documents/${documentId}/download`);\n }\n /** The document bytes (always a PDF), through a fresh signed URL. */\n async download(documentId: string): Promise<Uint8Array> {\n const link = await this.getDownload(documentId);\n return this.h.bytes('GET', link.url);\n }\n /** Rendered pages with signed preview URLs. Scope: document:read. */\n listPages(documentId: string): Promise<S.DocumentPages> {\n return this.h.request('GET', `/v1/documents/${documentId}/pages`);\n }\n}\n\nexport class Quotes extends Resource {\n /** The exact price of one document to one E.164 destination, valid ten minutes. Scope: fax:quote. */\n create(body: S.QuoteCreate, o: Mut = {}): Promise<S.Quote> {\n return this.h.request('POST', '/v1/fax-quotes', { json: body, ...o });\n }\n /** Read a quote. Scope: fax:quote. */\n get(quoteId: string): Promise<S.Quote> {\n return this.h.request('GET', `/v1/fax-quotes/${quoteId}`);\n }\n}\n\nexport class Faxes extends Resource {\n /** Send a quoted fax. The answer is queued, never delivered. Poll `wait`. Scope: fax:send. */\n create(body: S.FaxCreate, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', '/v1/faxes', { json: body, ...o });\n }\n /** Fax jobs, newest first. Scope: fax:read. */\n list(p: Page & { state?: string } = {}): Promise<S.FaxJobPage> {\n return this.h.request('GET', '/v1/faxes', { params: p });\n }\n /** Every fax job, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { state?: string } = {}): AsyncGenerator<S.FaxJob, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** The job with its evidence once delivered or partial. Scope: fax:read. */\n get(faxId: string): Promise<S.FaxJob> {\n return this.h.request('GET', `/v1/faxes/${faxId}`);\n }\n /** Poll until the state is delivered, partial, failed or unknown. Returns the last job read. */\n async wait(faxId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.FaxJob> {\n const deadline = Date.now() + (opts.timeoutMs ?? 300_000);\n let job = await this.get(faxId);\n while (!TERMINAL_STATES.has(job.state) && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 2000);\n job = await this.get(faxId);\n }\n return job;\n }\n /** Ordered events of one fax. Scope: fax:read. */\n listEvents(faxId: string): Promise<S.EventPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/events`);\n }\n /** Attempt history. Scope: fax:read. */\n listAttempts(faxId: string): Promise<S.AttemptPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/attempts`);\n }\n /** Delivery evidence as a receipt. Scope: fax:read. */\n getReceipt(faxId: string): Promise<S.Receipt> {\n return this.h.request('GET', `/v1/faxes/${faxId}/receipt`);\n }\n /** Cancel while queued, best effort once sending. Scope: fax:cancel. */\n cancel(faxId: string, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', `/v1/faxes/${faxId}/cancel`, { json: {}, ...o });\n }\n}\n\nexport class Webhooks extends Resource {\n /** Registered destinations. Scope: webhook:admin. */\n list(): Promise<S.WebhookList> {\n return this.h.request('GET', '/v1/webhooks');\n }\n /** Register a destination. The secret is in the answer once. Scope: webhook:admin. */\n create(body: S.WebhookCreate, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', '/v1/webhooks', { json: body, ...o });\n }\n /** Change url, description, event_types or status. Scope: webhook:admin. */\n update(webhookId: string, body: S.WebhookUpdate, o: Mut = {}): Promise<S.Webhook> {\n return this.h.request('PATCH', `/v1/webhooks/${webhookId}`, { json: body, ...o });\n }\n /** Remove a destination. Scope: webhook:admin. */\n delete(webhookId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/webhooks/${webhookId}`, o);\n }\n /** A new secret. The old one signs too for 24 hours. Scope: webhook:admin. */\n rotateSecret(webhookId: string, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/rotate-secret`, o);\n }\n /** Send a signed webhook.test event to the destination. Scope: webhook:admin. */\n test(webhookId: string, o: Mut = {}): Promise<S.Event> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/test`, { json: {}, ...o });\n }\n /** Delivery attempts. Scope: webhook:admin. */\n listDeliveries(p: Page & { webhook_id?: string; event_id?: string } = {}): Promise<S.DeliveryPage> {\n return this.h.request('GET', '/v1/webhook-deliveries', { params: p });\n }\n /** Deliver the event again with the same event id. Scope: webhook:admin. */\n replayDelivery(deliveryId: string, o: Mut = {}): Promise<S.Delivery> {\n return this.h.request('POST', `/v1/webhook-deliveries/${deliveryId}/replay`, { json: {}, ...o });\n }\n}\n\nexport class Events extends Resource {\n /** Events for reconciliation, oldest first from the cursor. Scope: fax:read. */\n list(p: Page & { type?: string } = {}): Promise<S.EventPage> {\n return this.h.request('GET', '/v1/events', { params: p });\n }\n /** Every event, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { type?: string } = {}): AsyncGenerator<S.Event, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n}\n\nexport class Billing extends Resource {\n /** Available and held balance of this key's environment. Scope: billing:read. */\n balance(): Promise<S.Balance> {\n return this.h.request('GET', '/v1/balance');\n }\n /** Wallet transactions, newest first. Scope: billing:read. */\n listLedger(p: Page = {}): Promise<S.LedgerPage> {\n return this.h.request('GET', '/v1/ledger', { params: p });\n }\n /** Billing settings of the organization. Scope: billing:read. */\n getSettings(): Promise<S.BillingSettings> {\n return this.h.request('GET', '/v1/billing-settings');\n }\n /** Change the billing email or the low-balance threshold. Scope: billing:write. */\n patchSettings(body: S.BillingSettingsPatch, o: Mut = {}): Promise<S.BillingSettings> {\n return this.h.request('PATCH', '/v1/billing-settings', { json: body, ...o });\n }\n /** A hosted Checkout to fund the live wallet. Scope: billing:write. */\n createTopupSession(body: S.TopupCreate, o: Mut = {}): Promise<S.TopupSession> {\n return this.h.request('POST', '/v1/topup-sessions', { json: body, ...o });\n }\n /** Top-up sessions, newest first. Scope: billing:read. */\n listTopupSessions(p: Page = {}): Promise<S.TopupSessionPage> {\n return this.h.request('GET', '/v1/topup-sessions', { params: p });\n }\n /** Read a top-up session. Scope: billing:read. */\n getTopupSession(topupSessionId: string): Promise<S.TopupSession> {\n return this.h.request('GET', `/v1/topup-sessions/${topupSessionId}`);\n }\n /** Auto top-up settings. Scope: billing:read. */\n listAutoTopups(): Promise<S.AutoTopupList> {\n return this.h.request('GET', '/v1/auto-topups');\n }\n /** Opt in to auto top-up. Scope: billing:write. */\n createAutoTopup(body: S.AutoTopupCreate, o: Mut = {}): Promise<S.AutoTopup> {\n return this.h.request('POST', '/v1/auto-topups', { json: body, ...o });\n }\n /** Turn auto top-up off. Scope: billing:write. */\n deleteAutoTopup(autoTopupId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/auto-topups/${autoTopupId}`, o);\n }\n /** Spending caps of this environment. Scope: billing:read. */\n listBudgets(): Promise<S.BudgetList> {\n return this.h.request('GET', '/v1/budgets');\n }\n /** A daily or monthly cap for the organization, a project or an agent. Scope: billing:write. */\n createBudget(body: S.BudgetCreate, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('POST', '/v1/budgets', { json: body, ...o });\n }\n /** Change a cap's limit or status. Scope: billing:write. */\n patchBudget(budgetId: string, body: S.BudgetPatch, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('PATCH', `/v1/budgets/${budgetId}`, { json: body, ...o });\n }\n /** Usage rollups by day, direction, destination and project. Scope: billing:read. */\n usage(p: { from?: string; to?: string; group_by?: string; project_id?: string } = {}): Promise<S.UsageReport> {\n return this.h.request('GET', '/v1/usage', { params: p });\n }\n /** Export usage as CSV behind a signed download. Scope: billing:read. */\n createUsageExport(body: S.UsageExportCreate, o: Mut = {}): Promise<S.UsageExport> {\n return this.h.request('POST', '/v1/usage-exports', { json: body, ...o });\n }\n /** Read a usage export with a fresh link. Scope: billing:read. */\n getUsageExport(exportId: string): Promise<S.UsageExport> {\n return this.h.request('GET', `/v1/usage-exports/${exportId}`);\n }\n /** Stripe invoices and receipts as hosted links. Scope: billing:read. */\n listInvoices(p: Page = {}): Promise<S.InvoicePage> {\n return this.h.request('GET', '/v1/invoices', { params: p });\n }\n /** One invoice. Scope: billing:read. */\n getInvoice(invoiceId: string): Promise<S.Invoice> {\n return this.h.request('GET', `/v1/invoices/${invoiceId}`);\n }\n /** A hosted Checkout for the Agent workspace subscription. Scope: billing:write. */\n createSubscriptionCheckout(o: Mut = {}): Promise<S.SubscriptionCheckout> {\n return this.h.request('POST', '/v1/subscriptions/checkout', { json: {}, ...o });\n }\n /** Subscriptions and the workspace entitlement. Scope: billing:read. */\n listSubscriptions(): Promise<S.SubscriptionList> {\n return this.h.request('GET', '/v1/subscriptions');\n }\n /** The Stripe customer portal. Scope: billing:write. */\n createPortalSession(o: Mut = {}): Promise<S.PortalSession> {\n return this.h.request('POST', '/v1/billing-portal-sessions', { json: {}, ...o });\n }\n}\n\nexport class Platform extends Resource {\n /** Limits, routes, formats, prices and scopes in force. Scope: any. */\n capabilities(): Promise<S.Capabilities> {\n return this.h.request('GET', '/v1/capabilities');\n }\n /** Customer-safe availability. Scope: any. */\n serviceStatus(): Promise<S.ServiceStatus> {\n return this.h.request('GET', '/v1/service-status');\n }\n}\n\nexport class Sandbox extends Resource {\n /** The scenario catalog, the destination table and active fixtures. Test keys only. */\n listScenarios(): Promise<S.SandboxScenarios> {\n return this.h.request('GET', '/v1/sandbox/scenarios');\n }\n /** Pin an outcome to a destination (or to every send) for 24 hours. Test keys only. */\n createScenario(body: S.SandboxScenarioCreate, o: Mut = {}): Promise<S.SandboxFixture> {\n return this.h.request('POST', '/v1/sandbox/scenarios', { json: body, ...o });\n }\n /** A synthetic received fax and its fax.received event. Test keys only. */\n createInboundFax(body: S.SandboxInboundCreate, o: Mut = {}): Promise<S.InboxItemSummary> {\n return this.h.request('POST', '/v1/sandbox/inbound-faxes', { json: body, ...o });\n }\n /** Delete the organization's test data and reseed the test wallet. Test keys only. */\n reset(o: Mut = {}): Promise<S.SandboxReset> {\n return this.h.request('DELETE', '/v1/sandbox/data', o);\n }\n}\n\nexport class Approvals extends Resource {\n /** Ask a person to approve a quoted send. Grants nothing. Scope: approval:request. */\n request(quoteId: string, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', '/v1/approval-requests', { json: { kind: 'send', quote_id: quoteId }, ...o });\n }\n /** Ask a person for help. The message is shown as data. Scope: approval:request. */\n requestHelp(message: string, opts: { faxJobId?: string } & Mut = {}): Promise<S.ApprovalRequest> {\n const { faxJobId, ...o } = opts;\n return this.h.request('POST', '/v1/approval-requests', {\n json: { kind: 'help', message, fax_job_id: faxJobId },\n ...o,\n });\n }\n /** Requests, pending first. Scope: approval:read. */\n list(p: Page & { status?: string } = {}): Promise<S.ApprovalRequestPage> {\n return this.h.request('GET', '/v1/approval-requests', { params: p });\n }\n /** Every request, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { status?: string } = {}): AsyncGenerator<S.ApprovalRequest, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One request. Scope: approval:read. */\n get(approvalId: string): Promise<S.ApprovalRequest> {\n return this.h.request('GET', `/v1/approval-requests/${approvalId}`);\n }\n /** Poll until the request leaves pending, or the timeout passes. */\n async wait(approvalId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.ApprovalRequest> {\n const deadline = Date.now() + (opts.timeoutMs ?? 600_000);\n let req = await this.get(approvalId);\n while (req.status === 'pending' && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 5000);\n req = await this.get(approvalId);\n }\n return req;\n }\n /** Approve the bound send. Scope: approval:decide, never the key that asked, never an agent key. */\n approve(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/approve`, { json: body, ...o });\n }\n /** Reject with a reason. Scope: approval:decide. */\n reject(approvalId: string, body: S.ApprovalDecision, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/reject`, { json: body, ...o });\n }\n /** Revoke an approval nobody has used yet. Scope: approval:decide. */\n revoke(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approvals/${approvalId}/revoke`, { json: body, ...o });\n }\n}\n\nexport class Policies extends Resource {\n /** The organization's policies. Scope: policy:read. */\n list(): Promise<S.PolicyList> {\n return this.h.request('GET', '/v1/policies');\n }\n /** Create a delegated policy, version 1. Scope: policy:admin, never an agent key. */\n create(body: S.PolicyCreate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('POST', '/v1/policies', { json: body, ...o });\n }\n /** What this key is allowed to do alone, and whether a human is needed. Scope: policy:read. */\n effective(): Promise<S.EffectivePolicies> {\n return this.h.request('GET', '/v1/policies/effective');\n }\n /** A policy at its current version. Scope: policy:read. */\n get(policyId: string): Promise<S.Policy> {\n return this.h.request('GET', `/v1/policies/${policyId}`);\n }\n /** Change a policy: a new immutable version. Scope: policy:admin. */\n update(policyId: string, body: S.PolicyUpdate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('PATCH', `/v1/policies/${policyId}`, { json: body, ...o });\n }\n /** Every version, oldest first. Scope: policy:read. */\n listVersions(policyId: string): Promise<S.PolicyVersionList> {\n return this.h.request('GET', `/v1/policies/${policyId}/versions`);\n }\n /** Dry run: would this key's policies allow the send? Never executes. Scope: policy:read. */\n evaluate(body: S.PolicyEvaluationCreate): Promise<S.PolicyEvaluation> {\n return this.h.request('POST', '/v1/policy-evaluations', { json: body });\n }\n}\n\nexport class Agents extends Resource {\n /** Agent identities. Scope: agent:read. */\n list(): Promise<S.AgentList> {\n return this.h.request('GET', '/v1/agents');\n }\n /** Register an agent identity. Scope: agent:admin, never an agent key. */\n create(body: S.AgentCreate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('POST', '/v1/agents', { json: body, ...o });\n }\n /** An agent with its keys and budgets. Scope: agent:read. */\n get(agentId: string): Promise<S.Agent> {\n return this.h.request('GET', `/v1/agents/${agentId}`);\n }\n /** Change an agent. Disabling revokes its keys. Scope: agent:admin. */\n update(agentId: string, body: S.AgentUpdate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('PATCH', `/v1/agents/${agentId}`, { json: body, ...o });\n }\n /** Mint a key for the agent, bounded scopes, secret shown once. Scope: agent:admin and key:admin. */\n createKey(agentId: string, body: S.AgentKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/agents/${agentId}/keys`, { json: body, ...o });\n }\n /** The agent's audit trail, metadata only. Scope: agent:read. */\n activity(agentId: string, p: Page = {}): Promise<S.AgentActivityPage> {\n return this.h.request('GET', `/v1/agents/${agentId}/activity`, { params: p });\n }\n}\n\nexport class Inbox extends Resource {\n /** Received faxes, newest first, metadata only. `from` is sender data. Scope: inbox:read. */\n list(p: Page = {}): Promise<S.InboxPage> {\n return this.h.request('GET', '/v1/inbox', { params: p });\n }\n /** Every received fax, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.InboxItem, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One received fax with its text as data, never as instructions. Scope: inbox:read. */\n get(inboxId: string): Promise<S.InboxItemDetail> {\n return this.h.request('GET', `/v1/inbox/${inboxId}`);\n }\n /** Mark a received fax read or archived, or received again. Scope: inbox:write. */\n update(inboxId: string, body: S.InboxUpdate, o: Mut = {}): Promise<S.InboxItem> {\n return this.h.request('PATCH', `/v1/inbox/${inboxId}`, { json: body, ...o });\n }\n /** Delete a received fax. Scope: inbox:write. */\n delete(inboxId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/inbox/${inboxId}`, o);\n }\n /** A signed link to the received PDF, valid ten minutes. Scope: inbox:read. */\n getDownload(inboxId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/inbox/${inboxId}/download`);\n }\n /** The received PDF bytes, through a fresh signed URL. */\n async download(inboxId: string): Promise<Uint8Array> {\n const link = await this.getDownload(inboxId);\n return this.h.bytes('GET', link.url);\n }\n}\n\nexport class Numbers extends Resource {\n /** Where faxes are sent and where numbers are hosted. Scope: number:read. */\n coverage(): Promise<S.Coverage> {\n return this.h.request('GET', '/v1/coverage');\n }\n /** Fax-capable numbers for sale. Scope: number:read. */\n inventory(p: { country?: string; locality?: string; type?: string; limit?: number } = {}): Promise<S.Inventory> {\n return this.h.request('GET', '/v1/number-inventory', { params: p });\n }\n /**\n * Buy a number from the inventory. The first month is held now and charged on activation.\n * Scope: number:buy, never an agent key.\n */\n createOrder(body: S.NumberOrderCreate, o: Mut = {}): Promise<S.NumberOrder> {\n return this.h.request('POST', '/v1/number-orders', { json: body, ...o });\n }\n /** Read a number order. Scope: number:read. */\n getOrder(orderId: string): Promise<S.NumberOrder> {\n return this.h.request('GET', `/v1/number-orders/${orderId}`);\n }\n /** Your numbers. Scope: number:read. */\n list(p: { include_released?: boolean } = {}): Promise<S.NumberList> {\n return this.h.request('GET', '/v1/numbers', { params: p });\n }\n /** One number. Scope: number:read. */\n get(numberId: string): Promise<S.Number> {\n return this.h.request('GET', `/v1/numbers/${numberId}`);\n }\n /** Change the label, project or inbound webhook of a number. Scope: number:buy. */\n update(numberId: string, body: S.NumberUpdate, o: Mut = {}): Promise<S.Number> {\n return this.h.request('PATCH', `/v1/numbers/${numberId}`, { json: body, ...o });\n }\n /** Release a number. `confirm` is the number itself, typed out. A 30 day quarantine follows. Scope: number:buy. */\n release(numberId: string, body: S.ReleaseRequest, o: Mut = {}): Promise<S.Number> {\n return this.h.request('POST', `/v1/numbers/${numberId}/release-requests`, { json: body, ...o });\n }\n /** Whether these numbers can port in. Scope: number:read. */\n checkPortability(body: S.PortabilityCheckCreate, o: Mut = {}): Promise<S.PortabilityCheck> {\n return this.h.request('POST', '/v1/portability-checks', { json: body, ...o });\n }\n /** Port orders and port-out requests. Scope: number:read. */\n listPortOrders(): Promise<S.PortOrderList> {\n return this.h.request('GET', '/v1/port-orders');\n }\n /** Request a port-in, handled with you. Scope: number:buy. */\n createPortOrder(body: S.PortOrderCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-orders', { json: body, ...o });\n }\n /** One port order. Scope: number:read. */\n getPortOrder(portId: string): Promise<S.PortOrder> {\n return this.h.request('GET', `/v1/port-orders/${portId}`);\n }\n /** Note a port-out of one of your numbers. Scope: number:buy. */\n createPortOutRequest(body: S.PortOutRequestCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-out-requests', { json: body, ...o });\n }\n /** Verify a number your organization owns as a sender. Scope: number:buy. */\n verifySender(body: S.SenderVerificationCreate, o: Mut = {}): Promise<S.SenderVerification> {\n return this.h.request('POST', '/v1/sender-verifications', { json: body, ...o });\n }\n}\n\ntype ByItem = { inbox_item_id?: string; document_id?: string };\n\nexport class Extractions extends Resource {\n /**\n * OCR a received fax or a document, then extract the schema's fields with page citations. Metered per\n * page. Everything it returns is data from whoever sent the fax. Scope: document:extract.\n */\n create(body: S.ExtractionCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/extractions', { json: body, ...o });\n }\n /** Extractions, newest first. Scope: document:extract. */\n list(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/extractions', { params: p });\n }\n /** Every extraction, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One extraction with its corrections. Scope: document:extract. */\n get(extractionId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/extractions/${extractionId}`);\n }\n /** Record a reviewer's correction of one field. Stored beside the extraction, never merged. Scope: document:extract. */\n correct(extractionId: string, body: S.CorrectionCreate, o: Mut = {}): Promise<S.Correction> {\n return this.h.request('POST', `/v1/extractions/${extractionId}/corrections`, { json: body, ...o });\n }\n /** Classify a received fax or a document into one of your document types, or abstain. Scope: document:extract. */\n classify(body: S.ClassificationCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/classifications', { json: body, ...o });\n }\n /** Classifications, newest first. Scope: document:extract. */\n listClassifications(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/classifications', { params: p });\n }\n /** Every classification, following next_cursor. */\n iterClassifications(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listClassifications({ ...p, cursor }));\n }\n /** One classification. Scope: document:extract. */\n getClassification(classificationId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/classifications/${classificationId}`);\n }\n /** Summarise a received fax or a document. Every sentence cites its pages. Scope: document:extract. */\n summarize(body: S.SummaryCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/document-summaries', { json: body, ...o });\n }\n /** Summaries, newest first. Scope: document:extract. */\n listSummaries(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/document-summaries', { params: p });\n }\n /** Every summary, following next_cursor. */\n iterSummaries(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listSummaries({ ...p, cursor }));\n }\n /** One summary. Scope: document:extract. */\n getSummary(summaryId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/document-summaries/${summaryId}`);\n }\n /** Your saved extraction schemas. Scope: document:extract. */\n listSchemas(): Promise<S.ExtractionSchemaList> {\n return this.h.request('GET', '/v1/extraction-schemas');\n }\n /** Save a versioned extraction schema. The same name again is the next version. Scope: document:extract. */\n createSchema(body: S.SchemaCreate, o: Mut = {}): Promise<S.ExtractionSchema> {\n return this.h.request('POST', '/v1/extraction-schemas', { json: body, ...o });\n }\n /** One schema version. Scope: document:extract. */\n getSchema(schemaId: string): Promise<S.ExtractionSchema> {\n return this.h.request('GET', `/v1/extraction-schemas/${schemaId}`);\n }\n}\n\nexport class Organizations extends Resource {\n /** The organizations the caller belongs to. Scope: any. */\n list(): Promise<S.OrganizationList> {\n return this.h.request('GET', '/v1/organizations');\n }\n /** The organization of this key. Scope: account:read. */\n current(): Promise<S.Organization> {\n return this.h.request('GET', '/v1/organizations/current');\n }\n /** Rename the organization. Scope: member:admin, never an agent key. */\n updateCurrent(body: S.OrganizationPatch, o: Mut = {}): Promise<S.Organization> {\n return this.h.request('PATCH', '/v1/organizations/current', { json: body, ...o });\n }\n /** Ask for an export of the organization's data. Scope: org:admin, never an agent key. */\n requestDataExport(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/export-requests', { json: {}, ...o });\n }\n /** Ask for the organization and its data to be deleted. Scope: org:admin, never an agent key. */\n requestDataDeletion(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/deletion-requests', { json: {}, ...o });\n }\n}\n\nexport class Members extends Resource {\n /** The organization's members. Scope: account:read. */\n list(): Promise<S.MemberList> {\n return this.h.request('GET', '/v1/members');\n }\n /** Change a member's role: owner, admin, member or viewer. Scope: member:admin, never an agent key. */\n update(memberId: string, body: S.MemberPatch, o: Mut = {}): Promise<S.Member> {\n return this.h.request('PATCH', `/v1/members/${memberId}`, { json: body, ...o });\n }\n /** Remove a member. Scope: org:admin, never an agent key. */\n async remove(memberId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/members/${memberId}`, o);\n }\n /** Open invitations. Scope: member:admin. */\n listInvitations(): Promise<S.InvitationList> {\n return this.h.request('GET', '/v1/invitations');\n }\n /** Invite someone by email, a link that works for 7 days. Scope: member:admin, never an agent key. */\n invite(body: S.InvitationCreate, o: Mut = {}): Promise<S.Invitation> {\n return this.h.request('POST', '/v1/invitations', { json: body, ...o });\n }\n /** Withdraw an invitation. Scope: member:admin, never an agent key. */\n async revokeInvitation(invitationId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/invitations/${invitationId}`, o);\n }\n}\n\nexport class FaxForAgents {\n readonly http: Http;\n readonly identity: Identity;\n readonly documents: Documents;\n readonly quotes: Quotes;\n readonly faxes: Faxes;\n readonly webhooks: Webhooks;\n readonly events: Events;\n readonly billing: Billing;\n readonly platform: Platform;\n readonly sandbox: Sandbox;\n readonly approvals: Approvals;\n readonly policies: Policies;\n readonly agents: Agents;\n readonly inbox: Inbox;\n readonly numbers: Numbers;\n readonly extractions: Extractions;\n readonly organizations: Organizations;\n readonly members: Members;\n\n constructor(opts: ClientOptions = {}) {\n this.http = new Http(opts);\n this.identity = new Identity(this.http);\n this.documents = new Documents(this.http);\n this.quotes = new Quotes(this.http);\n this.faxes = new Faxes(this.http);\n this.webhooks = new Webhooks(this.http);\n this.events = new Events(this.http);\n this.billing = new Billing(this.http);\n this.platform = new Platform(this.http);\n this.sandbox = new Sandbox(this.http);\n this.approvals = new Approvals(this.http);\n this.policies = new Policies(this.http);\n this.agents = new Agents(this.http);\n this.inbox = new Inbox(this.http);\n this.numbers = new Numbers(this.http);\n this.extractions = new Extractions(this.http);\n this.organizations = new Organizations(this.http);\n this.members = new Members(this.http);\n }\n\n /** Shortcut for identity.me(). */\n me(): Promise<S.Me> {\n return this.identity.me();\n }\n\n /** Any operation the resources do not cover yet. Returns the parsed JSON. */\n request<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n return this.http.request<T>(method, path, opts);\n }\n}\n","/**\n * Verify the signature on a webhook delivery (Standard Webhooks, https://www.standardwebhooks.com).\n *\n * Copied from the server's webhooks/signing.py (the reference implementation, 2026-10-28). The server\n * sends three headers on every delivery. `webhook-id` is the event id, stable across retries and\n * replays. `webhook-timestamp` is unix seconds. `webhook-signature` is one or more space-separated\n * `v1,<base64(HMAC-SHA256(secret, \"{id}.{timestamp}.{body}\"))>` values. During a secret rotation two\n * signatures are sent, one per live secret, for 24 hours. Secrets are `whsec_` followed by base64.\n *\n * const eventId = await verifyWebhook(secret, req.headers, rawBody); // throws SignatureError\n * const event = parseEvent(rawBody);\n *\n * Verify on the raw bytes, before any JSON parsing. Web Crypto is used, so this is async and runs on\n * Node 18+, browsers and edge runtimes alike.\n */\n\nexport const SECRET_PREFIX = 'whsec_';\nexport const TOLERANCE_S = 300;\n\nexport class SignatureError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SignatureError';\n }\n}\n\nexport interface WebhookEvent {\n id: string;\n type: string;\n created_at: string;\n schema_version: number;\n org_id: string;\n environment: string;\n project_id: string | null;\n resource: { type: string; id: string };\n fax_job_id: string | null;\n correlation_id: string | null;\n data: Record<string, unknown>;\n [extra: string]: unknown;\n}\n\ntype HeaderSource =\n | Record<string, string | string[] | undefined>\n | { get(name: string): string | null }\n | Iterable<[string, string]>;\n\nconst enc = new TextEncoder();\n\nfunction b64encode(bytes: Uint8Array): string {\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return btoa(s);\n}\n\nfunction b64decode(text: string): Uint8Array<ArrayBuffer> {\n const s = atob(text);\n const out = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i);\n return out;\n}\n\nfunction keyBytes(secret: string): Uint8Array<ArrayBuffer> {\n const raw = secret.startsWith(SECRET_PREFIX) ? secret.slice(SECRET_PREFIX.length) : secret;\n return b64decode(raw);\n}\n\nfunction toBytes(body: string | Uint8Array | ArrayBuffer): Uint8Array<ArrayBuffer> {\n if (typeof body === 'string') return enc.encode(body);\n if (body instanceof ArrayBuffer) return new Uint8Array(body);\n return new Uint8Array(body);\n}\n\nfunction headerLookup(headers: HeaderSource): (name: string) => string {\n if (typeof (headers as { get?: unknown }).get === 'function') {\n const h = headers as { get(name: string): string | null };\n return (name) => h.get(name) ?? '';\n }\n const map = new Map<string, string>();\n const entries: Iterable<[string, unknown]> =\n typeof (headers as Iterable<[string, string]>)[Symbol.iterator] === 'function'\n ? (headers as Iterable<[string, string]>)\n : Object.entries(headers as Record<string, string | string[] | undefined>);\n for (const [k, v] of entries) {\n const value = Array.isArray(v) ? v.join(' ') : v;\n if (typeof value === 'string') map.set(k.toLowerCase(), value);\n }\n return (name) => map.get(name) ?? '';\n}\n\nfunction timingSafeEqual(a: string, b: string): boolean {\n const x = enc.encode(a);\n const y = enc.encode(b);\n if (x.length !== y.length) return false;\n let diff = 0;\n for (let i = 0; i < x.length; i++) diff |= (x[i] as number) ^ (y[i] as number);\n return diff === 0;\n}\n\n/** The signature the server computes. Exposed so a test receiver can forge a valid delivery. */\nexport async function sign(\n secret: string,\n msgId: string,\n timestamp: number,\n body: string | Uint8Array | ArrayBuffer,\n): Promise<string> {\n const key = await crypto.subtle.importKey('raw', keyBytes(secret), { name: 'HMAC', hash: 'SHA-256' }, false, [\n 'sign',\n ]);\n const prefix = enc.encode(`${msgId}.${timestamp}.`);\n const payload = toBytes(body);\n const toSign = new Uint8Array(prefix.length + payload.length);\n toSign.set(prefix, 0);\n toSign.set(payload, prefix.length);\n const digest = await crypto.subtle.sign('HMAC', key, toSign);\n return 'v1,' + b64encode(new Uint8Array(digest));\n}\n\n/** The three headers of a delivery, for tests and local tooling. */\nexport async function signatureHeaders(\n secrets: string[],\n msgId: string,\n body: string | Uint8Array | ArrayBuffer,\n timestamp: number = Math.floor(Date.now() / 1000),\n): Promise<Record<string, string>> {\n const sigs = await Promise.all(secrets.map((s) => sign(s, msgId, timestamp, body)));\n return {\n 'webhook-id': msgId,\n 'webhook-timestamp': String(timestamp),\n 'webhook-signature': sigs.join(' '),\n 'content-type': 'application/json',\n };\n}\n\n/**\n * Return the event id when a signature matches and the timestamp is fresh. Throw SignatureError\n * otherwise. `headers` may be a Headers object, a plain object (Node's IncomingMessage.headers) or\n * entries. `body` is the raw request body.\n */\nexport async function verifyWebhook(\n secret: string,\n headers: HeaderSource,\n body: string | Uint8Array | ArrayBuffer,\n opts: { now?: number; toleranceS?: number } = {},\n): Promise<string> {\n const get = headerLookup(headers);\n const msgId = get('webhook-id');\n const tsRaw = get('webhook-timestamp');\n const sigs = get('webhook-signature');\n if (!msgId || !tsRaw || !sigs) throw new SignatureError('missing webhook headers');\n if (!/^\\d+$/.test(tsRaw.trim())) throw new SignatureError('bad timestamp');\n const ts = Number(tsRaw);\n const now = opts.now ?? Date.now() / 1000;\n if (Math.abs(now - ts) > (opts.toleranceS ?? TOLERANCE_S)) throw new SignatureError('timestamp outside tolerance');\n const expected = await sign(secret, msgId, ts, body);\n for (const candidate of sigs.split(/\\s+/)) {\n if (candidate.startsWith('v1,') && timingSafeEqual(candidate, expected)) return msgId;\n }\n throw new SignatureError('no matching signature');\n}\n\n/** Parse a verified body. Call verifyWebhook first. */\nexport function parseEvent(body: string | Uint8Array | ArrayBuffer): WebhookEvent {\n const text = typeof body === 'string' ? body : new TextDecoder().decode(toBytes(body));\n return JSON.parse(text) as WebhookEvent;\n}\n"],"mappings":"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","names":["sleep"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/http.ts","../src/client.ts","../src/webhooks.ts"],"sourcesContent":["/**\n * Errors of the Fax for Agents client.\n *\n * Every API refusal is one envelope: {\"error\": {\"code\", \"message\", \"retryable\", \"correlation_id\",\n * \"details\"}}. The client throws `APIError` (or the subclass for the status) with those fields. The\n * `code` is the stable thing to branch on: quote_expired, insufficient_balance, approval_required and\n * so on. Quote the correlation_id when you write to hello@faxforagents.com.\n */\n\nexport class FaxForAgentsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** The API could not be reached, or the connection dropped. */\nexport class APIConnectionError extends FaxForAgentsError {}\n\n/** The request ran past its timeout. */\nexport class APITimeoutError extends APIConnectionError {}\n\nexport interface APIErrorFields {\n status: number;\n code: string;\n message: string;\n retryable?: boolean;\n correlationId?: string | null;\n details?: unknown;\n retryAfter?: number | null;\n}\n\n/** The API answered with an error envelope. */\nexport class APIError extends FaxForAgentsError {\n readonly status: number;\n readonly code: string;\n readonly retryable: boolean;\n readonly correlationId: string | null;\n readonly details: unknown;\n /** Seconds the API asked us to wait (429), when it said. */\n readonly retryAfter: number | null;\n\n constructor(f: APIErrorFields) {\n super(`${f.code}: ${f.message}${f.correlationId ? ` (correlation ${f.correlationId})` : ''}`);\n this.status = f.status;\n this.code = f.code;\n this.retryable = f.retryable ?? false;\n this.correlationId = f.correlationId ?? null;\n this.details = f.details;\n this.retryAfter = f.retryAfter ?? null;\n }\n}\n\n/** 400 or 422: the request did not pass validation. */\nexport class InvalidRequestError extends APIError {}\n/** 401 invalid_token: no key, or a revoked or expired one. */\nexport class AuthenticationError extends APIError {}\n/** 402 insufficient_balance: the wallet does not cover the fax. A person tops up. */\nexport class PaymentRequiredError extends APIError {}\n/** 403: the key lacks the scope (details.scope), or an agent key tried to administer. */\nexport class ScopeError extends APIError {}\n/** 404 not_found: not an id of this organization, or deleted. */\nexport class NotFoundError extends APIError {}\n/** 409: the resource refuses this change (quote_consumed, not_cancelable). */\nexport class ConflictError extends APIError {}\n/** 429 rate_limited. retryAfter is the seconds the API asked for. */\nexport class RateLimitedError extends APIError {}\n/** 5xx: the API failed. The client already retried. */\nexport class ServerError extends APIError {}\n\nconst BY_STATUS: Record<number, new (f: APIErrorFields) => APIError> = {\n 400: InvalidRequestError,\n 401: AuthenticationError,\n 402: PaymentRequiredError,\n 403: ScopeError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: InvalidRequestError,\n 429: RateLimitedError,\n};\n\nexport function errorFor(\n status: number,\n payload: unknown,\n opts: { retryAfter?: number | null; text?: string } = {},\n): APIError {\n const body = payload && typeof payload === 'object' ? (payload as Record<string, unknown>) : null;\n let err = body && body.error && typeof body.error === 'object' ? (body.error as Record<string, unknown>) : null;\n if (!err) {\n err = {\n code: `http_${status}`,\n message: (opts.text ?? '').slice(0, 200) || `HTTP ${status}`,\n details: body?.detail,\n };\n }\n const Cls = status >= 500 ? ServerError : (BY_STATUS[status] ?? APIError);\n return new Cls({\n status,\n code: String(err.code ?? `http_${status}`),\n message: String(err.message ?? `HTTP ${status}`),\n retryable: typeof err.retryable === 'boolean' ? err.retryable : [429, 502, 503, 504].includes(status),\n correlationId: typeof err.correlation_id === 'string' ? err.correlation_id : null,\n details: err.details,\n retryAfter: opts.retryAfter ?? null,\n });\n}\n","// GENERATED from package.json by scripts/sync-version.mjs. Do not edit by hand.\nexport const VERSION = '0.2.2';\n","/**\n * The HTTP layer under the client: one key, one base URL, idempotency keys, retries, the error envelope.\n *\n * - Every mutating call (POST, PATCH, DELETE) carries an Idempotency-Key. When the caller passes none, a\n * UUID is minted once per call and reused on every retry, so a retried send never creates a second fax.\n * - 429 and 5xx answers are retried up to `maxRetries` times. Retry-After is honoured (seconds or an\n * HTTP date, capped at `maxRetryAfter` seconds). Otherwise the wait is exponential with full jitter\n * from `backoffBase`. Network errors and timeouts are retried the same way.\n * - An error status throws APIError or the subclass for that status (errors.ts).\n *\n * Only `fetch` is used, so it runs on Node 18+, Deno, Bun, browsers and edge runtimes.\n */\n\nimport { APIConnectionError, APITimeoutError, errorFor } from './errors.js';\nimport { VERSION } from './version.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.faxforagents.com';\nconst MUTATING = new Set(['POST', 'PATCH', 'DELETE']);\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nexport interface ClientOptions {\n /** ffa_live_... or ffa_test_... Defaults to FAXFORAGENTS_API_KEY (then FFA_API_KEY) in the environment. */\n apiKey?: string;\n /** Defaults to FAXFORAGENTS_API_URL in the environment, then https://api.faxforagents.com. */\n baseUrl?: string;\n /** Per attempt, in milliseconds. Default 60000. */\n timeoutMs?: number;\n /** Retries after the first attempt for 429, 5xx and network errors. Default 3. */\n maxRetries?: number;\n /** Base of the exponential backoff in seconds. Default 0.5. */\n backoffBase?: number;\n /** The longest Retry-After honoured, in seconds. Default 30. */\n maxRetryAfter?: number;\n /** A fetch to use instead of the global one (tests, custom agents). */\n fetch?: typeof fetch;\n /** Headers added to every request. */\n headers?: Record<string, string>;\n}\n\nexport interface RequestOptions {\n params?: Record<string, string | number | boolean | null | undefined>;\n json?: unknown;\n body?: BodyInit;\n headers?: Record<string, string>;\n idempotencyKey?: string;\n}\n\nfunction env(name: string): string | undefined {\n const g = globalThis as { process?: { env?: Record<string, string | undefined> } };\n return g.process?.env?.[name];\n}\n\nexport function resolveKey(key: string | undefined): string {\n const value = (key ?? env('FAXFORAGENTS_API_KEY') ?? env('FFA_API_KEY') ?? '').trim();\n if (!value) {\n throw new Error(\n 'no API key: pass apiKey or set FAXFORAGENTS_API_KEY. Keys are created in the Fax for Agents dashboard or with POST /v1/api-keys.',\n );\n }\n return value;\n}\n\nexport function retryAfterSeconds(value: string | null, cap: number): number | null {\n if (!value) return null;\n const n = Number(value.trim());\n if (Number.isFinite(n)) return Math.min(Math.max(n, 0), cap);\n const at = Date.parse(value);\n if (Number.isNaN(at)) return null;\n return Math.max(0, Math.min((at - Date.now()) / 1000, cap));\n}\n\nexport function cleanParams(params: RequestOptions['params']): string {\n if (!params) return '';\n const q = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v !== null && v !== undefined) q.set(k, String(v));\n }\n const s = q.toString();\n return s ? `?${s}` : '';\n}\n\nexport function stripNulls(json: unknown): unknown {\n if (!json || typeof json !== 'object' || Array.isArray(json)) return json;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(json as Record<string, unknown>)) {\n if (v !== undefined && v !== null) out[k] = v;\n }\n return out;\n}\n\nconst sleep = (s: number) => new Promise<void>((r) => setTimeout(r, Math.max(0, s * 1000)));\n\nexport class Http {\n readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly timeoutMs: number;\n private readonly maxRetries: number;\n private readonly backoffBase: number;\n private readonly maxRetryAfter: number;\n private readonly fetchImpl: typeof fetch;\n private readonly extraHeaders: Record<string, string>;\n\n constructor(opts: ClientOptions = {}) {\n this.apiKey = resolveKey(opts.apiKey);\n this.baseUrl = (opts.baseUrl ?? env('FAXFORAGENTS_API_URL') ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n this.timeoutMs = opts.timeoutMs ?? 60_000;\n this.maxRetries = Math.max(0, opts.maxRetries ?? 3);\n this.backoffBase = opts.backoffBase ?? 0.5;\n this.maxRetryAfter = opts.maxRetryAfter ?? 30;\n this.fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.extraHeaders = opts.headers ?? {};\n }\n\n private waitFor(attempt: number, retryAfter: string | null): number {\n const explicit = retryAfterSeconds(retryAfter, this.maxRetryAfter);\n if (explicit !== null) return explicit;\n return Math.random() * this.backoffBase * 2 ** attempt;\n }\n\n /** The raw Response of a successful call. Throws APIError on 4xx/5xx after the retries. */\n async send(method: string, path: string, opts: RequestOptions = {}): Promise<Response> {\n const m = method.toUpperCase();\n const url = (path.startsWith('http') ? path : this.baseUrl + path) + cleanParams(opts.params);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: 'application/json',\n 'User-Agent': `faxforagents-js/${VERSION}`,\n ...this.extraHeaders,\n ...(opts.headers ?? {}),\n };\n let body: BodyInit | undefined = opts.body;\n if (opts.json !== undefined) {\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify(stripNulls(opts.json));\n }\n if (MUTATING.has(m) && !('Idempotency-Key' in headers)) {\n headers['Idempotency-Key'] = opts.idempotencyKey ?? crypto.randomUUID();\n }\n\n let attempt = 0;\n for (;;) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n let resp: Response;\n try {\n resp = await this.fetchImpl(url, { method: m, headers, body, signal: controller.signal });\n } catch (err) {\n clearTimeout(timer);\n const timedOut = (err as { name?: string })?.name === 'AbortError';\n if (attempt >= this.maxRetries) {\n if (timedOut) throw new APITimeoutError(`${m} ${path} timed out after ${this.timeoutMs} ms`);\n throw new APIConnectionError(`${this.baseUrl} not reachable (${(err as Error)?.message ?? err})`);\n }\n await sleep(this.waitFor(attempt, null));\n attempt += 1;\n continue;\n }\n clearTimeout(timer);\n if (RETRY_STATUSES.has(resp.status) && attempt < this.maxRetries) {\n await resp.text().catch(() => undefined);\n await sleep(this.waitFor(attempt, resp.headers.get('retry-after')));\n attempt += 1;\n continue;\n }\n if (resp.status >= 400) {\n const text = await resp.text();\n let payload: unknown = null;\n try {\n payload = JSON.parse(text);\n } catch {\n payload = null;\n }\n throw errorFor(resp.status, payload, {\n retryAfter: retryAfterSeconds(resp.headers.get('retry-after'), this.maxRetryAfter),\n text,\n });\n }\n return resp;\n }\n }\n\n /** The parsed JSON of a successful call, typed by the caller. */\n async request<T>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const resp = await this.send(method, path, opts);\n const ctype = resp.headers.get('content-type') ?? '';\n if (resp.status === 204 || !ctype.startsWith('application/json')) {\n const text = await resp.text();\n return (text ? JSON.parse(text) : {}) as T;\n }\n return (await resp.json()) as T;\n }\n\n /** The bytes of a successful call (signed download URLs). */\n async bytes(method: string, path: string, opts: RequestOptions = {}): Promise<Uint8Array> {\n const resp = await this.send(method, path, opts);\n return new Uint8Array(await resp.arrayBuffer());\n }\n}\n\n/** Follow next_cursor until the API returns none. */\nexport async function* paginate<T>(\n fetchPage: (cursor: string | undefined) => Promise<{ items: T[]; next_cursor?: string | null }>,\n): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined;\n for (;;) {\n const page = await fetchPage(cursor);\n for (const item of page.items ?? []) yield item;\n if (!page.next_cursor) return;\n cursor = page.next_cursor;\n }\n}\n","/**\n * The Fax for Agents client. Resources mirror the API's tags. Method names are the operationIds of the\n * OpenAPI document, shortened by their resource, so the reference at\n * https://faxforagents.github.io/openapi/reference.html is also the reference of this client.\n *\n * Every mutating method takes `idempotencyKey`. When you pass none a UUID is minted once per call and\n * reused on every retry.\n *\n * import { FaxForAgents } from 'faxforagents';\n *\n * const ffa = new FaxForAgents(); // reads FAXFORAGENTS_API_KEY\n * const doc = await ffa.documents.create({ text: 'Hello from an agent.' });\n * const quote = await ffa.quotes.create({ document_id: doc.id, to: '+15550000001' });\n * const fax = await ffa.faxes.wait((await ffa.faxes.create({ quote_id: quote.id })).id);\n * console.log(fax.state, fax.evidence); // delivered, {...}\n */\n\nimport { ClientOptions, Http, RequestOptions, paginate } from './http.js';\nimport type * as S from './schema.js';\n\nexport const TERMINAL_STATES: ReadonlySet<string> = new Set(['delivered', 'partial', 'failed', 'unknown']);\n\ntype Mut = { idempotencyKey?: string };\ntype Page = { cursor?: string; limit?: number };\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\n/** Content types the upload path accepts, by file suffix. Anything else is sent as a PDF. */\nexport const CONTENT_TYPES: Readonly<Record<string, string>> = {\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.tif': 'image/tiff',\n '.tiff': 'image/tiff',\n};\n\n/** The upload content type of a filename: a PDF unless the suffix says PNG, JPEG or TIFF. */\nexport function guessContentType(filename: string): string {\n const dot = filename.lastIndexOf('.');\n const suffix = dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n return CONTENT_TYPES[suffix] ?? 'application/pdf';\n}\n\nasync function sha256Hex(data: Uint8Array): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-256', data as BufferSource);\n return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\nclass Resource {\n constructor(protected readonly h: Http) {}\n}\n\nexport class Identity extends Resource {\n /** Who the key is: organization, project, environment, scopes. Scope: any. */\n me(): Promise<S.Me> {\n return this.h.request('GET', '/v1/me');\n }\n /** Keys of the organization, metadata only. Scope: key:admin. */\n listApiKeys(): Promise<S.ApiKeyList> {\n return this.h.request('GET', '/v1/api-keys');\n }\n /** Create a key. The secret is in the answer once. Scope: key:admin. */\n createApiKey(body: S.ApiKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', '/v1/api-keys', { json: body, ...o });\n }\n /** A new secret. The old one works 24 more hours. Scope: key:admin. */\n rotateApiKey(keyId: string, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/api-keys/${keyId}/rotate`, o);\n }\n /** Revoke a key at once. Scope: key:admin. */\n revokeApiKey(keyId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/api-keys/${keyId}`, o);\n }\n}\n\nexport class Documents extends Resource {\n /**\n * An immutable document from one of upload_id, text, markdown or html. HTML is rendered with scripts off\n * and no network, at most 2 MiB. Scope: document:write.\n */\n create(body: S.DocumentCreate, o: Mut = {}): Promise<S.Document> {\n return this.h.request('POST', '/v1/documents', { json: body, ...o });\n }\n /**\n * Open an upload session with a signed PUT URL (25 MB, one hour). `content_type` is application/pdf,\n * image/png, image/jpeg or image/tiff. Scope: document:write.\n */\n createUpload(body: S.UploadCreate, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', '/v1/uploads', { json: body, ...o });\n }\n /** Send the bytes to the signed URL from createUpload. No scope, the link is the credential. */\n putUploadContent(uploadUrl: string, data: Uint8Array | ArrayBuffer | Blob, contentType = 'application/pdf'): Promise<S.UploadSession> {\n return this.h.request('PUT', uploadUrl, { body: data as BodyInit, headers: { 'Content-Type': contentType } });\n }\n /** Finalize an upload. The size and, when given, the sha256 are checked. Scope: document:write. */\n completeUpload(uploadId: string, body: S.UploadComplete = {}, o: Mut = {}): Promise<S.UploadSession> {\n return this.h.request('POST', `/v1/uploads/${uploadId}/complete`, { json: body, ...o });\n }\n /** Cancel an incomplete upload. Scope: document:write. */\n cancelUpload(uploadId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/uploads/${uploadId}`, o);\n }\n /**\n * The whole upload path for a PDF or an image (PNG, JPG or TIFF): createUpload, put the bytes, complete\n * with the sha256, create the document. The content type is read from the filename when not given. An\n * image becomes gray letter pages.\n */\n async upload(data: Uint8Array | ArrayBuffer, opts: { filename?: string; contentType?: string } = {}): Promise<S.Document> {\n const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n const filename = opts.filename ?? 'document.pdf';\n const contentType = opts.contentType ?? guessContentType(filename);\n const session = await this.createUpload({ filename, size_bytes: bytes.byteLength, content_type: contentType });\n if (!session.upload_url) throw new Error('the upload session carries no upload_url');\n await this.putUploadContent(session.upload_url, bytes, contentType);\n await this.completeUpload(session.id, { sha256: await sha256Hex(bytes) });\n return this.create({ upload_id: session.id, filename });\n }\n /** Documents, newest first. Scope: document:read. */\n list(p: Page = {}): Promise<S.DocumentPage> {\n return this.h.request('GET', '/v1/documents', { params: p });\n }\n /** Every document, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.Document, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** Hash, pages and validation state. Scope: document:read. */\n get(documentId: string): Promise<S.Document> {\n return this.h.request('GET', `/v1/documents/${documentId}`);\n }\n /** Delete the document, its bytes and its previews. Scope: document:write. */\n delete(documentId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/documents/${documentId}`, o);\n }\n /** Validation warnings. Scope: document:read. */\n getValidation(documentId: string): Promise<S.DocumentValidation> {\n return this.h.request('GET', `/v1/documents/${documentId}/validation`);\n }\n /** A signed download URL, valid ten minutes. Scope: document:read. */\n getDownload(documentId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/documents/${documentId}/download`);\n }\n /** The document bytes (always a PDF), through a fresh signed URL. */\n async download(documentId: string): Promise<Uint8Array> {\n const link = await this.getDownload(documentId);\n return this.h.bytes('GET', link.url);\n }\n /** Rendered pages with signed preview URLs. Scope: document:read. */\n listPages(documentId: string): Promise<S.DocumentPages> {\n return this.h.request('GET', `/v1/documents/${documentId}/pages`);\n }\n}\n\nexport class Quotes extends Resource {\n /** The exact price of one document to one E.164 destination, valid ten minutes. Scope: fax:quote. */\n create(body: S.QuoteCreate, o: Mut = {}): Promise<S.Quote> {\n return this.h.request('POST', '/v1/fax-quotes', { json: body, ...o });\n }\n /** Read a quote. Scope: fax:quote. */\n get(quoteId: string): Promise<S.Quote> {\n return this.h.request('GET', `/v1/fax-quotes/${quoteId}`);\n }\n}\n\nexport class Faxes extends Resource {\n /** Send a quoted fax. The answer is queued, never delivered. Poll `wait`. Scope: fax:send. */\n create(body: S.FaxCreate, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', '/v1/faxes', { json: body, ...o });\n }\n /** Fax jobs, newest first. Scope: fax:read. */\n list(p: Page & { state?: string } = {}): Promise<S.FaxJobPage> {\n return this.h.request('GET', '/v1/faxes', { params: p });\n }\n /** Every fax job, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { state?: string } = {}): AsyncGenerator<S.FaxJob, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** The job with its evidence once delivered or partial. Scope: fax:read. */\n get(faxId: string): Promise<S.FaxJob> {\n return this.h.request('GET', `/v1/faxes/${faxId}`);\n }\n /** Poll until the state is delivered, partial, failed or unknown. Returns the last job read. */\n async wait(faxId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.FaxJob> {\n const deadline = Date.now() + (opts.timeoutMs ?? 300_000);\n let job = await this.get(faxId);\n while (!TERMINAL_STATES.has(job.state) && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 2000);\n job = await this.get(faxId);\n }\n return job;\n }\n /** Ordered events of one fax. Scope: fax:read. */\n listEvents(faxId: string): Promise<S.EventPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/events`);\n }\n /** Attempt history. Scope: fax:read. */\n listAttempts(faxId: string): Promise<S.AttemptPage> {\n return this.h.request('GET', `/v1/faxes/${faxId}/attempts`);\n }\n /** Delivery evidence as a receipt. Scope: fax:read. */\n getReceipt(faxId: string): Promise<S.Receipt> {\n return this.h.request('GET', `/v1/faxes/${faxId}/receipt`);\n }\n /** Cancel while queued, best effort once sending. Scope: fax:cancel. */\n cancel(faxId: string, o: Mut = {}): Promise<S.FaxJob> {\n return this.h.request('POST', `/v1/faxes/${faxId}/cancel`, { json: {}, ...o });\n }\n}\n\nexport class Webhooks extends Resource {\n /** Registered destinations. Scope: webhook:admin. */\n list(): Promise<S.WebhookList> {\n return this.h.request('GET', '/v1/webhooks');\n }\n /** Register a destination. The secret is in the answer once. Scope: webhook:admin. */\n create(body: S.WebhookCreate, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', '/v1/webhooks', { json: body, ...o });\n }\n /** Change url, description, event_types or status. Scope: webhook:admin. */\n update(webhookId: string, body: S.WebhookUpdate, o: Mut = {}): Promise<S.Webhook> {\n return this.h.request('PATCH', `/v1/webhooks/${webhookId}`, { json: body, ...o });\n }\n /** Remove a destination. Scope: webhook:admin. */\n delete(webhookId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/webhooks/${webhookId}`, o);\n }\n /** A new secret. The old one signs too for 24 hours. Scope: webhook:admin. */\n rotateSecret(webhookId: string, o: Mut = {}): Promise<S.WebhookWithSecret> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/rotate-secret`, o);\n }\n /** Send a signed webhook.test event to the destination. Scope: webhook:admin. */\n test(webhookId: string, o: Mut = {}): Promise<S.Event> {\n return this.h.request('POST', `/v1/webhooks/${webhookId}/test`, { json: {}, ...o });\n }\n /** Delivery attempts. Scope: webhook:admin. */\n listDeliveries(p: Page & { webhook_id?: string; event_id?: string } = {}): Promise<S.DeliveryPage> {\n return this.h.request('GET', '/v1/webhook-deliveries', { params: p });\n }\n /** Deliver the event again with the same event id. Scope: webhook:admin. */\n replayDelivery(deliveryId: string, o: Mut = {}): Promise<S.Delivery> {\n return this.h.request('POST', `/v1/webhook-deliveries/${deliveryId}/replay`, { json: {}, ...o });\n }\n}\n\nexport class Events extends Resource {\n /** Events for reconciliation, oldest first from the cursor. Scope: fax:read. */\n list(p: Page & { type?: string } = {}): Promise<S.EventPage> {\n return this.h.request('GET', '/v1/events', { params: p });\n }\n /** Every event, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { type?: string } = {}): AsyncGenerator<S.Event, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n}\n\nexport class Billing extends Resource {\n /** Available and held balance of this key's environment. Scope: billing:read. */\n balance(): Promise<S.Balance> {\n return this.h.request('GET', '/v1/balance');\n }\n /** Wallet transactions, newest first. Scope: billing:read. */\n listLedger(p: Page = {}): Promise<S.LedgerPage> {\n return this.h.request('GET', '/v1/ledger', { params: p });\n }\n /** Billing settings of the organization. Scope: billing:read. */\n getSettings(): Promise<S.BillingSettings> {\n return this.h.request('GET', '/v1/billing-settings');\n }\n /** Change the billing email or the low-balance threshold. Scope: billing:write. */\n patchSettings(body: S.BillingSettingsPatch, o: Mut = {}): Promise<S.BillingSettings> {\n return this.h.request('PATCH', '/v1/billing-settings', { json: body, ...o });\n }\n /** A hosted Checkout to fund the live wallet. Scope: billing:write. */\n createTopupSession(body: S.TopupCreate, o: Mut = {}): Promise<S.TopupSession> {\n return this.h.request('POST', '/v1/topup-sessions', { json: body, ...o });\n }\n /** Top-up sessions, newest first. Scope: billing:read. */\n listTopupSessions(p: Page = {}): Promise<S.TopupSessionPage> {\n return this.h.request('GET', '/v1/topup-sessions', { params: p });\n }\n /** Read a top-up session. Scope: billing:read. */\n getTopupSession(topupSessionId: string): Promise<S.TopupSession> {\n return this.h.request('GET', `/v1/topup-sessions/${topupSessionId}`);\n }\n /** Auto top-up settings. Scope: billing:read. */\n listAutoTopups(): Promise<S.AutoTopupList> {\n return this.h.request('GET', '/v1/auto-topups');\n }\n /** Opt in to auto top-up. Scope: billing:write. */\n createAutoTopup(body: S.AutoTopupCreate, o: Mut = {}): Promise<S.AutoTopup> {\n return this.h.request('POST', '/v1/auto-topups', { json: body, ...o });\n }\n /** Turn auto top-up off. Scope: billing:write. */\n deleteAutoTopup(autoTopupId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/auto-topups/${autoTopupId}`, o);\n }\n /** Spending caps of this environment. Scope: billing:read. */\n listBudgets(): Promise<S.BudgetList> {\n return this.h.request('GET', '/v1/budgets');\n }\n /** A daily or monthly cap for the organization, a project or an agent. Scope: billing:write. */\n createBudget(body: S.BudgetCreate, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('POST', '/v1/budgets', { json: body, ...o });\n }\n /** Change a cap's limit or status. Scope: billing:write. */\n patchBudget(budgetId: string, body: S.BudgetPatch, o: Mut = {}): Promise<S.Budget> {\n return this.h.request('PATCH', `/v1/budgets/${budgetId}`, { json: body, ...o });\n }\n /** Usage rollups by day, direction, destination and project. Scope: billing:read. */\n usage(p: { from?: string; to?: string; group_by?: string; project_id?: string } = {}): Promise<S.UsageReport> {\n return this.h.request('GET', '/v1/usage', { params: p });\n }\n /** Export usage as CSV behind a signed download. Scope: billing:read. */\n createUsageExport(body: S.UsageExportCreate, o: Mut = {}): Promise<S.UsageExport> {\n return this.h.request('POST', '/v1/usage-exports', { json: body, ...o });\n }\n /** Read a usage export with a fresh link. Scope: billing:read. */\n getUsageExport(exportId: string): Promise<S.UsageExport> {\n return this.h.request('GET', `/v1/usage-exports/${exportId}`);\n }\n /** Stripe invoices and receipts as hosted links. Scope: billing:read. */\n listInvoices(p: Page = {}): Promise<S.InvoicePage> {\n return this.h.request('GET', '/v1/invoices', { params: p });\n }\n /** One invoice. Scope: billing:read. */\n getInvoice(invoiceId: string): Promise<S.Invoice> {\n return this.h.request('GET', `/v1/invoices/${invoiceId}`);\n }\n /** A hosted Checkout for the Agent workspace subscription. Scope: billing:write. */\n createSubscriptionCheckout(o: Mut = {}): Promise<S.SubscriptionCheckout> {\n return this.h.request('POST', '/v1/subscriptions/checkout', { json: {}, ...o });\n }\n /** Subscriptions and the workspace entitlement. Scope: billing:read. */\n listSubscriptions(): Promise<S.SubscriptionList> {\n return this.h.request('GET', '/v1/subscriptions');\n }\n /** The Stripe customer portal. Scope: billing:write. */\n createPortalSession(o: Mut = {}): Promise<S.PortalSession> {\n return this.h.request('POST', '/v1/billing-portal-sessions', { json: {}, ...o });\n }\n}\n\nexport class Platform extends Resource {\n /** Limits, routes, formats, prices and scopes in force. Scope: any. */\n capabilities(): Promise<S.Capabilities> {\n return this.h.request('GET', '/v1/capabilities');\n }\n /** Customer-safe availability. Scope: any. */\n serviceStatus(): Promise<S.ServiceStatus> {\n return this.h.request('GET', '/v1/service-status');\n }\n}\n\nexport class Sandbox extends Resource {\n /** The scenario catalog, the destination table and active fixtures. Test keys only. */\n listScenarios(): Promise<S.SandboxScenarios> {\n return this.h.request('GET', '/v1/sandbox/scenarios');\n }\n /** Pin an outcome to a destination (or to every send) for 24 hours. Test keys only. */\n createScenario(body: S.SandboxScenarioCreate, o: Mut = {}): Promise<S.SandboxFixture> {\n return this.h.request('POST', '/v1/sandbox/scenarios', { json: body, ...o });\n }\n /** A synthetic received fax and its fax.received event. Test keys only. */\n createInboundFax(body: S.SandboxInboundCreate, o: Mut = {}): Promise<S.InboxItemSummary> {\n return this.h.request('POST', '/v1/sandbox/inbound-faxes', { json: body, ...o });\n }\n /** Delete the organization's test data and reseed the test wallet. Test keys only. */\n reset(o: Mut = {}): Promise<S.SandboxReset> {\n return this.h.request('DELETE', '/v1/sandbox/data', o);\n }\n}\n\nexport class Approvals extends Resource {\n /** Ask a person to approve a quoted send. Grants nothing. Scope: approval:request. */\n request(quoteId: string, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', '/v1/approval-requests', { json: { kind: 'send', quote_id: quoteId }, ...o });\n }\n /** Ask a person for help. The message is shown as data. Scope: approval:request. */\n requestHelp(message: string, opts: { faxJobId?: string } & Mut = {}): Promise<S.ApprovalRequest> {\n const { faxJobId, ...o } = opts;\n return this.h.request('POST', '/v1/approval-requests', {\n json: { kind: 'help', message, fax_job_id: faxJobId },\n ...o,\n });\n }\n /** Requests, pending first. Scope: approval:read. */\n list(p: Page & { status?: string } = {}): Promise<S.ApprovalRequestPage> {\n return this.h.request('GET', '/v1/approval-requests', { params: p });\n }\n /** Every request, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & { status?: string } = {}): AsyncGenerator<S.ApprovalRequest, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One request. Scope: approval:read. */\n get(approvalId: string): Promise<S.ApprovalRequest> {\n return this.h.request('GET', `/v1/approval-requests/${approvalId}`);\n }\n /** Poll until the request leaves pending, or the timeout passes. */\n async wait(approvalId: string, opts: { timeoutMs?: number; intervalMs?: number } = {}): Promise<S.ApprovalRequest> {\n const deadline = Date.now() + (opts.timeoutMs ?? 600_000);\n let req = await this.get(approvalId);\n while (req.status === 'pending' && Date.now() < deadline) {\n await sleep(opts.intervalMs ?? 5000);\n req = await this.get(approvalId);\n }\n return req;\n }\n /** Approve the bound send. Scope: approval:decide, never the key that asked, never an agent key. */\n approve(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/approve`, { json: body, ...o });\n }\n /** Reject with a reason. Scope: approval:decide. */\n reject(approvalId: string, body: S.ApprovalDecision, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approval-requests/${approvalId}/reject`, { json: body, ...o });\n }\n /** Revoke an approval nobody has used yet. Scope: approval:decide. */\n revoke(approvalId: string, body: S.ApprovalDecision = {}, o: Mut = {}): Promise<S.ApprovalRequest> {\n return this.h.request('POST', `/v1/approvals/${approvalId}/revoke`, { json: body, ...o });\n }\n}\n\nexport class Policies extends Resource {\n /** The organization's policies. Scope: policy:read. */\n list(): Promise<S.PolicyList> {\n return this.h.request('GET', '/v1/policies');\n }\n /** Create a delegated policy, version 1. Scope: policy:admin, never an agent key. */\n create(body: S.PolicyCreate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('POST', '/v1/policies', { json: body, ...o });\n }\n /** What this key is allowed to do alone, and whether a human is needed. Scope: policy:read. */\n effective(): Promise<S.EffectivePolicies> {\n return this.h.request('GET', '/v1/policies/effective');\n }\n /** A policy at its current version. Scope: policy:read. */\n get(policyId: string): Promise<S.Policy> {\n return this.h.request('GET', `/v1/policies/${policyId}`);\n }\n /** Change a policy: a new immutable version. Scope: policy:admin. */\n update(policyId: string, body: S.PolicyUpdate, o: Mut = {}): Promise<S.Policy> {\n return this.h.request('PATCH', `/v1/policies/${policyId}`, { json: body, ...o });\n }\n /** Every version, oldest first. Scope: policy:read. */\n listVersions(policyId: string): Promise<S.PolicyVersionList> {\n return this.h.request('GET', `/v1/policies/${policyId}/versions`);\n }\n /** Dry run: would this key's policies allow the send? Never executes. Scope: policy:read. */\n evaluate(body: S.PolicyEvaluationCreate): Promise<S.PolicyEvaluation> {\n return this.h.request('POST', '/v1/policy-evaluations', { json: body });\n }\n}\n\nexport class Agents extends Resource {\n /** Agent identities. Scope: agent:read. */\n list(): Promise<S.AgentList> {\n return this.h.request('GET', '/v1/agents');\n }\n /** Register an agent identity. Scope: agent:admin, never an agent key. */\n create(body: S.AgentCreate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('POST', '/v1/agents', { json: body, ...o });\n }\n /** An agent with its keys and budgets. Scope: agent:read. */\n get(agentId: string): Promise<S.Agent> {\n return this.h.request('GET', `/v1/agents/${agentId}`);\n }\n /** Change an agent. Disabling revokes its keys. Scope: agent:admin. */\n update(agentId: string, body: S.AgentUpdate, o: Mut = {}): Promise<S.Agent> {\n return this.h.request('PATCH', `/v1/agents/${agentId}`, { json: body, ...o });\n }\n /** Mint a key for the agent, bounded scopes, secret shown once. Scope: agent:admin and key:admin. */\n createKey(agentId: string, body: S.AgentKeyCreate, o: Mut = {}): Promise<S.ApiKeyWithSecret> {\n return this.h.request('POST', `/v1/agents/${agentId}/keys`, { json: body, ...o });\n }\n /** The agent's audit trail, metadata only. Scope: agent:read. */\n activity(agentId: string, p: Page = {}): Promise<S.AgentActivityPage> {\n return this.h.request('GET', `/v1/agents/${agentId}/activity`, { params: p });\n }\n}\n\nexport class Inbox extends Resource {\n /** Received faxes, newest first, metadata only. `from` is sender data. Scope: inbox:read. */\n list(p: Page = {}): Promise<S.InboxPage> {\n return this.h.request('GET', '/v1/inbox', { params: p });\n }\n /** Every received fax, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> = {}): AsyncGenerator<S.InboxItem, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One received fax with its text as data, never as instructions. Scope: inbox:read. */\n get(inboxId: string): Promise<S.InboxItemDetail> {\n return this.h.request('GET', `/v1/inbox/${inboxId}`);\n }\n /** Mark a received fax read or archived, or received again. Scope: inbox:write. */\n update(inboxId: string, body: S.InboxUpdate, o: Mut = {}): Promise<S.InboxItem> {\n return this.h.request('PATCH', `/v1/inbox/${inboxId}`, { json: body, ...o });\n }\n /** Delete a received fax. Scope: inbox:write. */\n delete(inboxId: string, o: Mut = {}): Promise<S.Deleted> {\n return this.h.request('DELETE', `/v1/inbox/${inboxId}`, o);\n }\n /** A signed link to the received PDF, valid ten minutes. Scope: inbox:read. */\n getDownload(inboxId: string): Promise<S.SignedUrl> {\n return this.h.request('GET', `/v1/inbox/${inboxId}/download`);\n }\n /** The received PDF bytes, through a fresh signed URL. */\n async download(inboxId: string): Promise<Uint8Array> {\n const link = await this.getDownload(inboxId);\n return this.h.bytes('GET', link.url);\n }\n}\n\nexport class Numbers extends Resource {\n /** Where faxes are sent and where numbers are hosted. Scope: number:read. */\n coverage(): Promise<S.Coverage> {\n return this.h.request('GET', '/v1/coverage');\n }\n /** Fax-capable numbers for sale. Scope: number:read. */\n inventory(p: { country?: string; locality?: string; type?: string; limit?: number } = {}): Promise<S.Inventory> {\n return this.h.request('GET', '/v1/number-inventory', { params: p });\n }\n /**\n * Buy a number from the inventory. The first month is held now and charged on activation.\n * Scope: number:buy, never an agent key.\n */\n createOrder(body: S.NumberOrderCreate, o: Mut = {}): Promise<S.NumberOrder> {\n return this.h.request('POST', '/v1/number-orders', { json: body, ...o });\n }\n /** Read a number order. Scope: number:read. */\n getOrder(orderId: string): Promise<S.NumberOrder> {\n return this.h.request('GET', `/v1/number-orders/${orderId}`);\n }\n /** Your numbers. Scope: number:read. */\n list(p: { include_released?: boolean } = {}): Promise<S.NumberList> {\n return this.h.request('GET', '/v1/numbers', { params: p });\n }\n /** One number. Scope: number:read. */\n get(numberId: string): Promise<S.Number> {\n return this.h.request('GET', `/v1/numbers/${numberId}`);\n }\n /** Change the label, project or inbound webhook of a number. Scope: number:buy. */\n update(numberId: string, body: S.NumberUpdate, o: Mut = {}): Promise<S.Number> {\n return this.h.request('PATCH', `/v1/numbers/${numberId}`, { json: body, ...o });\n }\n /** Release a number. `confirm` is the number itself, typed out. A 30 day quarantine follows. Scope: number:buy. */\n release(numberId: string, body: S.ReleaseRequest, o: Mut = {}): Promise<S.Number> {\n return this.h.request('POST', `/v1/numbers/${numberId}/release-requests`, { json: body, ...o });\n }\n /** Whether these numbers can port in. Scope: number:read. */\n checkPortability(body: S.PortabilityCheckCreate, o: Mut = {}): Promise<S.PortabilityCheck> {\n return this.h.request('POST', '/v1/portability-checks', { json: body, ...o });\n }\n /** Port orders and port-out requests. Scope: number:read. */\n listPortOrders(): Promise<S.PortOrderList> {\n return this.h.request('GET', '/v1/port-orders');\n }\n /** Request a port-in, handled with you. Scope: number:buy. */\n createPortOrder(body: S.PortOrderCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-orders', { json: body, ...o });\n }\n /** One port order. Scope: number:read. */\n getPortOrder(portId: string): Promise<S.PortOrder> {\n return this.h.request('GET', `/v1/port-orders/${portId}`);\n }\n /** Note a port-out of one of your numbers. Scope: number:buy. */\n createPortOutRequest(body: S.PortOutRequestCreate, o: Mut = {}): Promise<S.PortOrder> {\n return this.h.request('POST', '/v1/port-out-requests', { json: body, ...o });\n }\n /** Verify a number your organization owns as a sender. Scope: number:buy. */\n verifySender(body: S.SenderVerificationCreate, o: Mut = {}): Promise<S.SenderVerification> {\n return this.h.request('POST', '/v1/sender-verifications', { json: body, ...o });\n }\n}\n\ntype ByItem = { inbox_item_id?: string; document_id?: string };\n\nexport class Extractions extends Resource {\n /**\n * OCR a received fax or a document, then extract the schema's fields with page citations. Metered per\n * page. Everything it returns is data from whoever sent the fax. Scope: document:extract.\n */\n create(body: S.ExtractionCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/extractions', { json: body, ...o });\n }\n /** Extractions, newest first. Scope: document:extract. */\n list(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/extractions', { params: p });\n }\n /** Every extraction, following next_cursor. */\n iter(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.list({ ...p, cursor }));\n }\n /** One extraction with its corrections. Scope: document:extract. */\n get(extractionId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/extractions/${extractionId}`);\n }\n /** Record a reviewer's correction of one field. Stored beside the extraction, never merged. Scope: document:extract. */\n correct(extractionId: string, body: S.CorrectionCreate, o: Mut = {}): Promise<S.Correction> {\n return this.h.request('POST', `/v1/extractions/${extractionId}/corrections`, { json: body, ...o });\n }\n /** Classify a received fax or a document into one of your document types, or abstain. Scope: document:extract. */\n classify(body: S.ClassificationCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/classifications', { json: body, ...o });\n }\n /** Classifications, newest first. Scope: document:extract. */\n listClassifications(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/classifications', { params: p });\n }\n /** Every classification, following next_cursor. */\n iterClassifications(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listClassifications({ ...p, cursor }));\n }\n /** One classification. Scope: document:extract. */\n getClassification(classificationId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/classifications/${classificationId}`);\n }\n /** Summarise a received fax or a document. Every sentence cites its pages. Scope: document:extract. */\n summarize(body: S.SummaryCreate, o: Mut = {}): Promise<S.Extraction> {\n return this.h.request('POST', '/v1/document-summaries', { json: body, ...o });\n }\n /** Summaries, newest first. Scope: document:extract. */\n listSummaries(p: Page & ByItem = {}): Promise<S.ExtractionPageList> {\n return this.h.request('GET', '/v1/document-summaries', { params: p });\n }\n /** Every summary, following next_cursor. */\n iterSummaries(p: Omit<Page, 'cursor'> & ByItem = {}): AsyncGenerator<S.Extraction, void, undefined> {\n return paginate((cursor) => this.listSummaries({ ...p, cursor }));\n }\n /** One summary. Scope: document:extract. */\n getSummary(summaryId: string): Promise<S.Extraction> {\n return this.h.request('GET', `/v1/document-summaries/${summaryId}`);\n }\n /** Your saved extraction schemas. Scope: document:extract. */\n listSchemas(): Promise<S.ExtractionSchemaList> {\n return this.h.request('GET', '/v1/extraction-schemas');\n }\n /** Save a versioned extraction schema. The same name again is the next version. Scope: document:extract. */\n createSchema(body: S.SchemaCreate, o: Mut = {}): Promise<S.ExtractionSchema> {\n return this.h.request('POST', '/v1/extraction-schemas', { json: body, ...o });\n }\n /** One schema version. Scope: document:extract. */\n getSchema(schemaId: string): Promise<S.ExtractionSchema> {\n return this.h.request('GET', `/v1/extraction-schemas/${schemaId}`);\n }\n}\n\nexport class Organizations extends Resource {\n /** The organizations the caller belongs to. Scope: any. */\n list(): Promise<S.OrganizationList> {\n return this.h.request('GET', '/v1/organizations');\n }\n /** The organization of this key. Scope: account:read. */\n current(): Promise<S.Organization> {\n return this.h.request('GET', '/v1/organizations/current');\n }\n /** Rename the organization. Scope: member:admin, never an agent key. */\n updateCurrent(body: S.OrganizationPatch, o: Mut = {}): Promise<S.Organization> {\n return this.h.request('PATCH', '/v1/organizations/current', { json: body, ...o });\n }\n /** Ask for an export of the organization's data. Scope: org:admin, never an agent key. */\n requestDataExport(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/export-requests', { json: {}, ...o });\n }\n /** Ask for the organization and its data to be deleted. Scope: org:admin, never an agent key. */\n requestDataDeletion(o: Mut = {}): Promise<S.Requested> {\n return this.h.request('POST', '/v1/organizations/current/deletion-requests', { json: {}, ...o });\n }\n}\n\nexport class Members extends Resource {\n /** The organization's members. Scope: account:read. */\n list(): Promise<S.MemberList> {\n return this.h.request('GET', '/v1/members');\n }\n /** Change a member's role: owner, admin, member or viewer. Scope: member:admin, never an agent key. */\n update(memberId: string, body: S.MemberPatch, o: Mut = {}): Promise<S.Member> {\n return this.h.request('PATCH', `/v1/members/${memberId}`, { json: body, ...o });\n }\n /** Remove a member. Scope: org:admin, never an agent key. */\n async remove(memberId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/members/${memberId}`, o);\n }\n /** Open invitations. Scope: member:admin. */\n listInvitations(): Promise<S.InvitationList> {\n return this.h.request('GET', '/v1/invitations');\n }\n /** Invite someone by email, a link that works for 7 days. Scope: member:admin, never an agent key. */\n invite(body: S.InvitationCreate, o: Mut = {}): Promise<S.Invitation> {\n return this.h.request('POST', '/v1/invitations', { json: body, ...o });\n }\n /** Withdraw an invitation. Scope: member:admin, never an agent key. */\n async revokeInvitation(invitationId: string, o: Mut = {}): Promise<void> {\n await this.h.request('DELETE', `/v1/invitations/${invitationId}`, o);\n }\n}\n\nexport class FaxForAgents {\n readonly http: Http;\n readonly identity: Identity;\n readonly documents: Documents;\n readonly quotes: Quotes;\n readonly faxes: Faxes;\n readonly webhooks: Webhooks;\n readonly events: Events;\n readonly billing: Billing;\n readonly platform: Platform;\n readonly sandbox: Sandbox;\n readonly approvals: Approvals;\n readonly policies: Policies;\n readonly agents: Agents;\n readonly inbox: Inbox;\n readonly numbers: Numbers;\n readonly extractions: Extractions;\n readonly organizations: Organizations;\n readonly members: Members;\n\n constructor(opts: ClientOptions = {}) {\n this.http = new Http(opts);\n this.identity = new Identity(this.http);\n this.documents = new Documents(this.http);\n this.quotes = new Quotes(this.http);\n this.faxes = new Faxes(this.http);\n this.webhooks = new Webhooks(this.http);\n this.events = new Events(this.http);\n this.billing = new Billing(this.http);\n this.platform = new Platform(this.http);\n this.sandbox = new Sandbox(this.http);\n this.approvals = new Approvals(this.http);\n this.policies = new Policies(this.http);\n this.agents = new Agents(this.http);\n this.inbox = new Inbox(this.http);\n this.numbers = new Numbers(this.http);\n this.extractions = new Extractions(this.http);\n this.organizations = new Organizations(this.http);\n this.members = new Members(this.http);\n }\n\n /** Shortcut for identity.me(). */\n me(): Promise<S.Me> {\n return this.identity.me();\n }\n\n /** Any operation the resources do not cover yet. Returns the parsed JSON. */\n request<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n return this.http.request<T>(method, path, opts);\n }\n}\n","/**\n * Verify the signature on a webhook delivery (Standard Webhooks, https://www.standardwebhooks.com).\n *\n * Copied from the server's webhooks/signing.py (the reference implementation, 2026-10-28). The server\n * sends three headers on every delivery. `webhook-id` is the event id, stable across retries and\n * replays. `webhook-timestamp` is unix seconds. `webhook-signature` is one or more space-separated\n * `v1,<base64(HMAC-SHA256(secret, \"{id}.{timestamp}.{body}\"))>` values. During a secret rotation two\n * signatures are sent, one per live secret, for 24 hours. Secrets are `whsec_` followed by base64.\n *\n * const eventId = await verifyWebhook(secret, req.headers, rawBody); // throws SignatureError\n * const event = parseEvent(rawBody);\n *\n * Verify on the raw bytes, before any JSON parsing. Web Crypto is used, so this is async and runs on\n * Node 18+, browsers and edge runtimes alike.\n */\n\nexport const SECRET_PREFIX = 'whsec_';\nexport const TOLERANCE_S = 300;\n\nexport class SignatureError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SignatureError';\n }\n}\n\nexport interface WebhookEvent {\n id: string;\n type: string;\n created_at: string;\n schema_version: number;\n org_id: string;\n environment: string;\n project_id: string | null;\n resource: { type: string; id: string };\n fax_job_id: string | null;\n correlation_id: string | null;\n data: Record<string, unknown>;\n [extra: string]: unknown;\n}\n\ntype HeaderSource =\n | Record<string, string | string[] | undefined>\n | { get(name: string): string | null }\n | Iterable<[string, string]>;\n\nconst enc = new TextEncoder();\n\nfunction b64encode(bytes: Uint8Array): string {\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return btoa(s);\n}\n\nfunction b64decode(text: string): Uint8Array<ArrayBuffer> {\n const s = atob(text);\n const out = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i);\n return out;\n}\n\nfunction keyBytes(secret: string): Uint8Array<ArrayBuffer> {\n const raw = secret.startsWith(SECRET_PREFIX) ? secret.slice(SECRET_PREFIX.length) : secret;\n return b64decode(raw);\n}\n\nfunction toBytes(body: string | Uint8Array | ArrayBuffer): Uint8Array<ArrayBuffer> {\n if (typeof body === 'string') return enc.encode(body);\n if (body instanceof ArrayBuffer) return new Uint8Array(body);\n return new Uint8Array(body);\n}\n\nfunction headerLookup(headers: HeaderSource): (name: string) => string {\n if (typeof (headers as { get?: unknown }).get === 'function') {\n const h = headers as { get(name: string): string | null };\n return (name) => h.get(name) ?? '';\n }\n const map = new Map<string, string>();\n const entries: Iterable<[string, unknown]> =\n typeof (headers as Iterable<[string, string]>)[Symbol.iterator] === 'function'\n ? (headers as Iterable<[string, string]>)\n : Object.entries(headers as Record<string, string | string[] | undefined>);\n for (const [k, v] of entries) {\n const value = Array.isArray(v) ? v.join(' ') : v;\n if (typeof value === 'string') map.set(k.toLowerCase(), value);\n }\n return (name) => map.get(name) ?? '';\n}\n\nfunction timingSafeEqual(a: string, b: string): boolean {\n const x = enc.encode(a);\n const y = enc.encode(b);\n if (x.length !== y.length) return false;\n let diff = 0;\n for (let i = 0; i < x.length; i++) diff |= (x[i] as number) ^ (y[i] as number);\n return diff === 0;\n}\n\n/** The signature the server computes. Exposed so a test receiver can forge a valid delivery. */\nexport async function sign(\n secret: string,\n msgId: string,\n timestamp: number,\n body: string | Uint8Array | ArrayBuffer,\n): Promise<string> {\n const key = await crypto.subtle.importKey('raw', keyBytes(secret), { name: 'HMAC', hash: 'SHA-256' }, false, [\n 'sign',\n ]);\n const prefix = enc.encode(`${msgId}.${timestamp}.`);\n const payload = toBytes(body);\n const toSign = new Uint8Array(prefix.length + payload.length);\n toSign.set(prefix, 0);\n toSign.set(payload, prefix.length);\n const digest = await crypto.subtle.sign('HMAC', key, toSign);\n return 'v1,' + b64encode(new Uint8Array(digest));\n}\n\n/** The three headers of a delivery, for tests and local tooling. */\nexport async function signatureHeaders(\n secrets: string[],\n msgId: string,\n body: string | Uint8Array | ArrayBuffer,\n timestamp: number = Math.floor(Date.now() / 1000),\n): Promise<Record<string, string>> {\n const sigs = await Promise.all(secrets.map((s) => sign(s, msgId, timestamp, body)));\n return {\n 'webhook-id': msgId,\n 'webhook-timestamp': String(timestamp),\n 'webhook-signature': sigs.join(' '),\n 'content-type': 'application/json',\n };\n}\n\n/**\n * Return the event id when a signature matches and the timestamp is fresh. Throw SignatureError\n * otherwise. `headers` may be a Headers object, a plain object (Node's IncomingMessage.headers) or\n * entries. `body` is the raw request body.\n */\nexport async function verifyWebhook(\n secret: string,\n headers: HeaderSource,\n body: string | Uint8Array | ArrayBuffer,\n opts: { now?: number; toleranceS?: number } = {},\n): Promise<string> {\n const get = headerLookup(headers);\n const msgId = get('webhook-id');\n const tsRaw = get('webhook-timestamp');\n const sigs = get('webhook-signature');\n if (!msgId || !tsRaw || !sigs) throw new SignatureError('missing webhook headers');\n if (!/^\\d+$/.test(tsRaw.trim())) throw new SignatureError('bad timestamp');\n const ts = Number(tsRaw);\n const now = opts.now ?? Date.now() / 1000;\n if (Math.abs(now - ts) > (opts.toleranceS ?? TOLERANCE_S)) throw new SignatureError('timestamp outside tolerance');\n const expected = await sign(secret, msgId, ts, body);\n for (const candidate of sigs.split(/\\s+/)) {\n if (candidate.startsWith('v1,') && timingSafeEqual(candidate, expected)) return msgId;\n }\n throw new SignatureError('no matching signature');\n}\n\n/** Parse a verified body. Call verifyWebhook first. */\nexport function parseEvent(body: string | Uint8Array | ArrayBuffer): WebhookEvent {\n const text = typeof body === 'string' ? body : new TextDecoder().decode(toBytes(body));\n return JSON.parse(text) as WebhookEvent;\n}\n"],"mappings":"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","names":["sleep"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "faxforagents",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "TypeScript and JavaScript client for Fax for Agents: a fax API, a hosted MCP server and SDKs built so AI agents can send and receive faxes.",
5
5
  "keywords": [
6
6
  "fax",