@nopaque/sdk 0.1.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/README.md +21 -1
- package/dist/index.cjs +418 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1126 -27
- package/dist/index.d.ts +1126 -27
- package/dist/index.mjs +418 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -11
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/config.ts","../src/version.ts","../src/userAgent.ts","../src/requestOptions.ts","../src/retry.ts","../src/transport.ts","../src/resources/audio.ts","../src/resource.ts","../src/pagination.ts","../src/s3.ts","../src/polling.ts","../src/resources/batches.ts","../src/resources/datasets.ts","../src/resources/enrichment.ts","../src/resources/loadTesting.ts","../src/resources/mapping.ts","../src/resources/profiles.ts","../src/resources/scheduler.ts","../src/resources/sweeps.ts","../src/resources/testing.ts","../src/client.ts"],"sourcesContent":["export { Nopaque } from './client.js';\nexport { VERSION } from './version.js';\nexport type { NopaqueOptions } from './config.js';\nexport type { RequestOptions } from './requestOptions.js';\nexport {\n NopaqueError,\n NopaqueAPIError,\n NopaqueConfigError,\n NopaqueTimeoutError,\n AuthenticationError,\n PermissionError,\n NotFoundError,\n ValidationError,\n ConflictError,\n RateLimitError,\n ServerError,\n APIConnectionError,\n APITimeoutError,\n} from './errors.js';\nexport { Page, Paginator } from './pagination.js';\nexport type * from './types/index.js';\n","export class NopaqueError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class NopaqueConfigError extends NopaqueError {}\n\nexport class NopaqueTimeoutError extends NopaqueError {}\n\nexport class APIConnectionError extends NopaqueError {\n override cause?: unknown;\n constructor(message: string, cause?: unknown) {\n super(message);\n this.cause = cause;\n }\n}\n\nexport class APITimeoutError extends NopaqueError {}\n\nexport interface APIErrorInit {\n status: number;\n code?: string | null;\n message?: string;\n details?: unknown;\n requestId?: string | null;\n response?: Response | null;\n}\n\nexport class NopaqueAPIError extends NopaqueError {\n status: number;\n code: string | null;\n details: unknown;\n requestId: string | null;\n response: Response | null;\n\n constructor(init: APIErrorInit) {\n super(init.message ?? `HTTP ${init.status}`);\n this.status = init.status;\n this.code = init.code ?? null;\n this.details = init.details ?? null;\n this.requestId = init.requestId ?? null;\n this.response = init.response ?? null;\n }\n}\n\nexport class ValidationError extends NopaqueAPIError {}\nexport class AuthenticationError extends NopaqueAPIError {}\nexport class PermissionError extends NopaqueAPIError {}\nexport class NotFoundError extends NopaqueAPIError {}\nexport class ConflictError extends NopaqueAPIError {}\nexport class ServerError extends NopaqueAPIError {}\n\nexport class RateLimitError extends NopaqueAPIError {\n retryAfter: number | null;\n constructor(init: APIErrorInit & { retryAfter?: number | null }) {\n super(init);\n this.retryAfter = init.retryAfter ?? null;\n }\n}\n\nconst STATUS_MAP: Record<number, typeof NopaqueAPIError> = {\n 400: ValidationError,\n 401: AuthenticationError,\n 403: PermissionError,\n 404: NotFoundError,\n 409: ConflictError,\n 429: RateLimitError,\n};\n\nexport function classifyStatus(status: number): typeof NopaqueAPIError {\n const specific = STATUS_MAP[status];\n if (specific) return specific;\n if (status >= 500 && status < 600) return ServerError;\n return NopaqueAPIError;\n}\n","import { NopaqueConfigError, type NopaqueError } from './errors.js';\n\nexport { NopaqueConfigError };\n\nexport interface NopaqueOptions {\n apiKey?: string;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n defaultHeaders?: Record<string, string>;\n onRetry?: (attempt: number, error: NopaqueError, nextDelayMs: number) => void;\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface ResolvedConfig {\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly timeout: number;\n readonly maxRetries: number;\n readonly defaultHeaders: Record<string, string>;\n readonly onRetry?: (attempt: number, error: NopaqueError, nextDelayMs: number) => void;\n readonly fetch: typeof globalThis.fetch;\n}\n\nconst DEFAULT_BASE_URL = 'https://api.nopaque.co.uk';\nconst DEFAULT_TIMEOUT_MS = 60_000;\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function resolveConfig(opts: NopaqueOptions): ResolvedConfig {\n const apiKey = opts.apiKey ?? process.env.NOPAQUE_API_KEY ?? '';\n if (!apiKey) {\n throw new NopaqueConfigError(\n 'No API key provided. Pass apiKey in the constructor or set NOPAQUE_API_KEY.'\n );\n }\n const baseUrl = (\n opts.baseUrl ?? process.env.NOPAQUE_BASE_URL ?? DEFAULT_BASE_URL\n ).replace(/\\/$/, '');\n\n return {\n apiKey,\n baseUrl,\n timeout: opts.timeout ?? DEFAULT_TIMEOUT_MS,\n maxRetries: opts.maxRetries ?? DEFAULT_MAX_RETRIES,\n defaultHeaders: opts.defaultHeaders ?? {},\n onRetry: opts.onRetry,\n fetch: opts.fetch ?? globalThis.fetch.bind(globalThis),\n };\n}\n","// Populated by tsup at build time via the `define` option.\ndeclare const __SDK_VERSION__: string;\n\nexport const VERSION: string =\n typeof __SDK_VERSION__ === 'string' ? __SDK_VERSION__ : '0.0.0-dev';\n","import { VERSION } from './version.js';\n\nexport function composeUserAgent(): string {\n const nodeVersion = typeof process !== 'undefined' ? process.version : 'unknown';\n return `nopaque-node/${VERSION} (node/${nodeVersion})`;\n}\n","export interface RequestOptions {\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport function mergeOptions(\n base: RequestOptions | undefined,\n override: RequestOptions | undefined\n): RequestOptions {\n if (!base) return override ?? {};\n if (!override) return base;\n return {\n ...base,\n ...override,\n headers: { ...(base.headers ?? {}), ...(override.headers ?? {}) },\n };\n}\n","import {\n APIConnectionError,\n APITimeoutError,\n NopaqueAPIError,\n NopaqueError,\n RateLimitError,\n ServerError,\n} from './errors.js';\n\nexport interface BackoffParams {\n base?: number; // ms\n cap?: number; // ms\n jitter?: number; // upper multiplier\n}\n\nconst DEFAULTS: Required<BackoffParams> = { base: 500, cap: 8000, jitter: 1.5 };\n\nexport function computeBackoff(attempt: number, p: BackoffParams = {}): number {\n const { base, cap, jitter } = { ...DEFAULTS, ...p };\n const raw = Math.min(cap, base * 2 ** attempt);\n const mul = 0.5 + Math.random() * (jitter - 0.5);\n return Math.round(raw * mul);\n}\n\nexport function delayFor(args: {\n attempt: number;\n error: NopaqueError;\n base?: number;\n cap?: number;\n jitter?: number;\n}): number {\n const { attempt, error, ...p } = args;\n if (error instanceof RateLimitError && error.retryAfter !== null) {\n return Math.round(error.retryAfter * 1000);\n }\n return computeBackoff(attempt, p);\n}\n\nexport interface ShouldRetryArgs {\n method: string;\n error: NopaqueError;\n beforeSend: boolean;\n}\n\nexport function shouldRetry({ method, error, beforeSend }: ShouldRetryArgs): boolean {\n const m = method.toUpperCase();\n if (error instanceof RateLimitError) return true;\n if (m === 'POST') {\n return error instanceof APIConnectionError && beforeSend;\n }\n if (\n error instanceof APIConnectionError ||\n error instanceof APITimeoutError ||\n error instanceof ServerError\n ) {\n return true;\n }\n if (error instanceof NopaqueAPIError) return false;\n return false;\n}\n","import type { ResolvedConfig } from './config.js';\nimport {\n APIConnectionError,\n APITimeoutError,\n NopaqueAPIError,\n NopaqueError,\n RateLimitError,\n classifyStatus,\n} from './errors.js';\nimport { composeUserAgent } from './userAgent.js';\nimport { mergeOptions, type RequestOptions } from './requestOptions.js';\nimport { delayFor, shouldRetry } from './retry.js';\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\n// Accept both Record-shaped and interface-shaped param objects. Interfaces\n// in TS don't have an implicit string index signature, so we widen with\n// `object` to let callers pass typed interfaces (e.g. MappingListParams).\nexport interface RequestParams {\n params?: object;\n body?: unknown;\n requestOptions?: RequestOptions;\n}\n\nexport class Transport {\n constructor(public readonly config: ResolvedConfig) {}\n\n async request<T = unknown>(\n method: string,\n path: string,\n { params, body, requestOptions }: RequestParams = {}\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n const headers = this.buildHeaders(requestOptions);\n const merged = mergeOptions(undefined, requestOptions);\n const timeout = merged.timeout ?? this.config.timeout;\n const maxRetries = merged.maxRetries ?? this.config.maxRetries;\n\n let attempt = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let beforeSend = true;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n const combinedSignal = mergeAbortSignals([controller.signal, merged.signal]);\n\n let err: NopaqueError | null = null;\n let response: Response | null = null;\n try {\n response = await this.config.fetch(url, {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n signal: combinedSignal,\n });\n beforeSend = false;\n if (!response.ok) {\n err = await classifyResponse(response);\n }\n } catch (fetchErr) {\n if ((fetchErr as { name?: string }).name === 'AbortError') {\n err = new APITimeoutError(`request timed out after ${timeout}ms`);\n } else {\n err = new APIConnectionError(\n `fetch failed: ${(fetchErr as Error).message ?? 'unknown'}`,\n fetchErr\n );\n }\n } finally {\n clearTimeout(timer);\n }\n\n if (!err) {\n if (response!.status === 204) return undefined as T;\n const ct = response!.headers.get('content-type') ?? '';\n if (!ct.includes('application/json')) return undefined as T;\n return (await response!.json()) as T;\n }\n\n if (attempt >= maxRetries) throw err;\n if (!shouldRetry({ method, error: err, beforeSend })) throw err;\n\n const delay = delayFor({ attempt, error: err });\n if (this.config.onRetry) {\n try { this.config.onRetry(attempt, err, delay); } catch { /* never break */ }\n }\n await new Promise((r) => setTimeout(r, delay));\n attempt++;\n }\n }\n\n private buildUrl(path: string, params?: object): string {\n const normalized = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(`${this.config.baseUrl}${normalized}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n url.searchParams.set(k, String(v));\n }\n }\n return url.toString();\n }\n\n private buildHeaders(options: RequestOptions | undefined): Headers {\n const h = new Headers({\n 'x-api-key': this.config.apiKey,\n 'user-agent': composeUserAgent(),\n 'accept': 'application/json',\n });\n for (const [k, v] of Object.entries(this.config.defaultHeaders)) h.set(k, v);\n if (options?.headers) {\n for (const [k, v] of Object.entries(options.headers)) h.set(k, v);\n }\n return h;\n }\n}\n\nasync function classifyResponse(response: Response): Promise<NopaqueAPIError> {\n let body: unknown = null;\n try {\n body = await response.clone().json();\n } catch {\n body = null;\n }\n const bodyObj = body && typeof body === 'object' ? (body as Record<string, unknown>) : {};\n const message = typeof bodyObj.error === 'string' ? bodyObj.error : `HTTP ${response.status}`;\n const code = typeof bodyObj.code === 'string' ? bodyObj.code : null;\n const details = bodyObj.details ?? null;\n const requestId = response.headers.get('x-request-id');\n\n const Cls = classifyStatus(response.status);\n if (Cls === RateLimitError) {\n const raw = response.headers.get('retry-after');\n const retryAfter = raw !== null ? Number.parseFloat(raw) : null;\n return new RateLimitError({\n status: response.status,\n code,\n message,\n details,\n requestId,\n response,\n retryAfter: Number.isFinite(retryAfter!) ? retryAfter : null,\n });\n }\n return new Cls({\n status: response.status,\n code,\n message,\n details,\n requestId,\n response,\n });\n}\n\nfunction mergeAbortSignals(signals: (AbortSignal | undefined)[]): AbortSignal {\n const valid = signals.filter((s): s is AbortSignal => !!s);\n if (valid.length === 1) return valid[0];\n if (valid.length === 0) return new AbortController().signal;\n const ctrl = new AbortController();\n for (const s of valid) {\n if (s.aborted) {\n ctrl.abort(s.reason);\n return ctrl.signal;\n }\n s.addEventListener('abort', () => ctrl.abort(s.reason), { once: true });\n }\n return ctrl.signal;\n}\n","import { promises as fsp } from 'node:fs';\nimport { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { readBytes, s3Get, s3Put, sniffContentType } from '../s3.js';\nimport type {\n AudioDownloadURL,\n AudioFile,\n AudioListParams,\n AudioUploadURL,\n CreateUploadUrlRequest,\n DownloadOptions,\n UploadInput,\n} from '../types/audio.js';\n\nexport class AudioResource extends Resource {\n list(params: AudioListParams = {}, requestOptions?: RequestOptions): Paginator<AudioFile> {\n return new Paginator<AudioFile>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/audio', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'audioFiles',\n });\n }\n\n async listPage(\n params: AudioListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<AudioFile>> {\n const raw = await this.transport.request<{\n audioFiles?: AudioFile[];\n items?: AudioFile[];\n nextToken?: string | null;\n }>('GET', '/audio', { params, requestOptions });\n return new Page(raw.audioFiles ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(audioId: string, requestOptions?: RequestOptions): Promise<AudioFile> {\n return await this.transport.request('GET', `/audio/${audioId}`, { requestOptions });\n }\n\n async delete(audioId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/audio/${audioId}`, { requestOptions });\n }\n\n async createUploadUrl(\n body: CreateUploadUrlRequest,\n requestOptions?: RequestOptions\n ): Promise<AudioUploadURL> {\n return await this.transport.request('POST', '/audio/upload-url', {\n body,\n requestOptions,\n });\n }\n\n async createDownloadUrl(\n audioId: string,\n requestOptions?: RequestOptions\n ): Promise<AudioDownloadURL> {\n return await this.transport.request('GET', '/audio/download-url', {\n params: { audioId },\n requestOptions,\n });\n }\n\n async upload(input: UploadInput, requestOptions?: RequestOptions): Promise<AudioFile> {\n const { bytes, inferredName } = await readBytes(input.file);\n const resolvedName = input.name ?? inferredName ?? 'upload.bin';\n const resolvedType = input.contentType ?? sniffContentType(resolvedName);\n\n const presign = await this.createUploadUrl(\n { fileName: resolvedName, contentType: resolvedType },\n requestOptions\n );\n\n await s3Put(presign.uploadUrl, bytes, {\n contentType: resolvedType,\n fetch: this.transport.config.fetch,\n });\n return await this.get(presign.audioId, requestOptions);\n }\n\n async download(audioId: string): Promise<Uint8Array>;\n async download(audioId: string, options: DownloadOptions & { to: string }): Promise<void>;\n async download(\n audioId: string,\n options?: DownloadOptions,\n requestOptions?: RequestOptions\n ): Promise<Uint8Array | void> {\n const presign = await this.createDownloadUrl(audioId, requestOptions);\n const bytes = await s3Get(presign.downloadUrl, { fetch: this.transport.config.fetch });\n if (options?.to) {\n await fsp.writeFile(options.to, bytes);\n return;\n }\n return bytes;\n }\n}\n","import type { Transport } from './transport.js';\n\nexport class Resource {\n constructor(protected readonly transport: Transport) {}\n}\n","export class Page<T> {\n constructor(public readonly items: T[], public readonly nextToken: string | null) {}\n}\n\nexport interface PageResponse<T> {\n items: T[];\n nextToken: string | null;\n}\n\nexport interface PaginatorParams {\n limit?: number;\n nextToken?: string | null;\n [key: string]: unknown;\n}\n\n/**\n * A page may be returned in either of two shapes:\n * { items: [...], nextToken: ... } — the standard shape\n * { <itemsKey>: [...], nextToken?: ... } — the resource-named shape\n * When `itemsKey` is provided, the paginator prefers that key but falls back\n * to `items` for forward compatibility.\n */\nexport interface PaginatorOptions<T, Raw = unknown> {\n fetchPage: (params: PaginatorParams) => Promise<Record<string, unknown>>;\n params: PaginatorParams;\n mapItem?: (raw: Raw) => T;\n itemsKey?: string;\n}\n\nexport class Paginator<T, Raw = unknown> implements AsyncIterable<T> {\n constructor(private readonly options: PaginatorOptions<T, Raw>) {}\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n const limit = this.options.params.limit;\n const params: PaginatorParams = { ...this.options.params };\n const key = this.options.itemsKey;\n let yielded = 0;\n while (true) {\n const page = await this.options.fetchPage(params);\n const rawItems = (key ? (page as Record<string, unknown>)[key] : undefined)\n ?? (page as Record<string, unknown>).items\n ?? [];\n const items = rawItems as Raw[];\n for (const raw of items) {\n const item = (this.options.mapItem ? this.options.mapItem(raw) : (raw as unknown as T));\n yield item;\n yielded++;\n if (limit !== undefined && yielded >= limit) return;\n }\n const nextToken = (page as Record<string, unknown>).nextToken as string | null | undefined;\n if (!nextToken) return;\n params.nextToken = nextToken;\n }\n }\n}\n","import { APIConnectionError } from './errors.js';\nimport type { UploadInput } from './types/audio.js';\nimport { promises as fsp } from 'node:fs';\nimport { basename } from 'node:path';\n\nexport async function readBytes(input: UploadInput['file']): Promise<{\n bytes: Uint8Array;\n inferredName: string | null;\n}> {\n if (typeof input === 'string') {\n const buf = await fsp.readFile(input);\n return { bytes: new Uint8Array(buf), inferredName: basename(input) };\n }\n if (input instanceof Uint8Array) {\n return { bytes: input, inferredName: null };\n }\n if (typeof Blob !== 'undefined' && input instanceof Blob) {\n const buf = await input.arrayBuffer();\n const name = (input as File).name ?? null;\n return { bytes: new Uint8Array(buf), inferredName: name };\n }\n if (typeof (input as ReadableStream).getReader === 'function') {\n const reader = (input as ReadableStream<Uint8Array>).getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n total += value.byteLength;\n }\n const out = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) { out.set(c, off); off += c.byteLength; }\n return { bytes: out, inferredName: null };\n }\n if (typeof (input as NodeJS.ReadableStream).on === 'function') {\n const chunks: Buffer[] = [];\n for await (const chunk of input as NodeJS.ReadableStream) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : (chunk as Buffer));\n }\n const buf = Buffer.concat(chunks);\n return { bytes: new Uint8Array(buf), inferredName: null };\n }\n throw new TypeError('unsupported file input');\n}\n\nconst EXTENSION_MAP: Record<string, string> = {\n '.wav': 'audio/wav',\n '.mp3': 'audio/mpeg',\n '.mp4': 'audio/mp4',\n '.m4a': 'audio/mp4',\n '.ogg': 'audio/ogg',\n '.flac': 'audio/flac',\n '.webm': 'audio/webm',\n};\n\nexport function sniffContentType(name: string | null): string {\n if (!name) return 'application/octet-stream';\n const dot = name.lastIndexOf('.');\n const ext = dot >= 0 ? name.slice(dot).toLowerCase() : '';\n return EXTENSION_MAP[ext] ?? 'application/octet-stream';\n}\n\nexport async function s3Put(\n url: string,\n data: Uint8Array,\n { contentType, fetch }: { contentType: string; fetch: typeof globalThis.fetch }\n): Promise<void> {\n let resp: Response;\n try {\n resp = await fetch(url, {\n method: 'PUT',\n body: data as BodyInit,\n headers: { 'content-type': contentType },\n });\n } catch (err) {\n throw new APIConnectionError(`S3 PUT failed: ${(err as Error).message}`, err);\n }\n if (resp.status >= 400) {\n const text = await resp.text().catch(() => '');\n throw new APIConnectionError(`S3 PUT returned ${resp.status}: ${text.slice(0, 200)}`);\n }\n}\n\nexport async function s3Get(\n url: string,\n { fetch }: { fetch: typeof globalThis.fetch }\n): Promise<Uint8Array> {\n let resp: Response;\n try {\n resp = await fetch(url);\n } catch (err) {\n throw new APIConnectionError(`S3 GET failed: ${(err as Error).message}`, err);\n }\n if (resp.status >= 400) {\n const text = await resp.text().catch(() => '');\n throw new APIConnectionError(`S3 GET returned ${resp.status}: ${text.slice(0, 200)}`);\n }\n return new Uint8Array(await resp.arrayBuffer());\n}\n","import { NopaqueTimeoutError } from './errors.js';\n\nexport interface PollIntervalParams {\n base?: number; // ms\n cap?: number; // ms\n}\n\nconst DEFAULT_BASE = 5000;\nconst DEFAULT_CAP = 15000;\n\nexport function pollIntervalCurve(\n step: number,\n { base = DEFAULT_BASE, cap = DEFAULT_CAP }: PollIntervalParams = {}\n): number {\n if (step < 2) return base;\n const soft = base * 1.2 ** (step - 1);\n return Math.min(cap, soft);\n}\n\nexport interface WaitForArgs<T> {\n fetch: () => Promise<T>;\n isTerminal: (doc: T) => boolean;\n timeout?: number; // ms\n initialInterval?: number; // ms\n intervalCap?: number; // ms\n onUpdate?: (doc: T) => void;\n}\n\nexport async function waitFor<T>(args: WaitForArgs<T>): Promise<T> {\n const timeout = args.timeout ?? 600_000;\n const initial = args.initialInterval ?? DEFAULT_BASE;\n const cap = args.intervalCap ?? DEFAULT_CAP;\n const deadline = Date.now() + timeout;\n let step = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const doc = await args.fetch();\n if (args.onUpdate) {\n try { args.onUpdate(doc); } catch { /* never break the wait */ }\n }\n if (args.isTerminal(doc)) return doc;\n const now = Date.now();\n if (now >= deadline) {\n throw new NopaqueTimeoutError(`waitFor timed out after ${timeout}ms`);\n }\n const interval = Math.min(\n pollIntervalCurve(step, { base: initial, cap }),\n Math.max(0, deadline - now)\n );\n await new Promise((r) => setTimeout(r, interval));\n step++;\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n Batch,\n BatchesListParams,\n BatchRun,\n CreateBatchRequest,\n UpdateBatchRequest,\n} from '../types/batches.js';\n\nconst RUN_TERMINAL_STATUSES = new Set(['completed', 'failed', 'cancelled']);\n\nexport interface BatchesWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (run: BatchRun) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class BatchesResource extends Resource {\n async create(\n body: CreateBatchRequest,\n requestOptions?: RequestOptions\n ): Promise<Batch> {\n return await this.transport.request('POST', '/testing/batches', { body, requestOptions });\n }\n\n list(\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Batch> {\n return new Paginator<Batch>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/batches', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'batches',\n });\n }\n\n async listPage(\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Batch>> {\n const raw = await this.transport.request<{\n batches?: Batch[];\n items?: Batch[];\n nextToken?: string | null;\n }>('GET', '/testing/batches', { params, requestOptions });\n return new Page(raw.batches ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(batchId: string, requestOptions?: RequestOptions): Promise<Batch> {\n return await this.transport.request('GET', `/testing/batches/${batchId}`, { requestOptions });\n }\n\n async update(\n batchId: string,\n body: UpdateBatchRequest,\n requestOptions?: RequestOptions\n ): Promise<Batch> {\n return await this.transport.request('PUT', `/testing/batches/${batchId}`, {\n body,\n requestOptions,\n });\n }\n\n async delete(batchId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/batches/${batchId}`, { requestOptions });\n }\n\n async run(\n batchId: string,\n requestOptions?: RequestOptions\n ): Promise<BatchRun> {\n return await this.transport.request('POST', `/testing/batches/${batchId}/run`, {\n requestOptions,\n });\n }\n\n runs(\n batchId: string,\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<BatchRun> {\n return new Paginator<BatchRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/testing/batches/${batchId}/runs`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n listRuns(\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<BatchRun> {\n return new Paginator<BatchRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/batch-runs', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n async getRun(runId: string, requestOptions?: RequestOptions): Promise<BatchRun> {\n return await this.transport.request('GET', `/testing/batch-runs/${runId}`, { requestOptions });\n }\n\n async waitForRun(\n runId: string,\n opts: BatchesWaitForOptions = {}\n ): Promise<BatchRun> {\n return await waitFor<BatchRun>({\n fetch: () => this.getRun(runId, opts.requestOptions),\n isTerminal: (run) => RUN_TERMINAL_STATUSES.has(run.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n CreateDatasetRequest,\n Dataset,\n DatasetsListParams,\n ResolvedDataset,\n UpdateDatasetRequest,\n} from '../types/datasets.js';\n\nexport class DatasetsResource extends Resource {\n async create(\n body: CreateDatasetRequest,\n requestOptions?: RequestOptions\n ): Promise<Dataset> {\n return await this.transport.request('POST', '/datasets', { body, requestOptions });\n }\n\n list(\n params: DatasetsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Dataset> {\n return new Paginator<Dataset>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/datasets', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'datasets',\n });\n }\n\n async listPage(\n params: DatasetsListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Dataset>> {\n const raw = await this.transport.request<{\n datasets?: Dataset[];\n items?: Dataset[];\n nextToken?: string | null;\n }>('GET', '/datasets', { params, requestOptions });\n return new Page(raw.datasets ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(datasetId: string, requestOptions?: RequestOptions): Promise<Dataset> {\n return await this.transport.request('GET', `/datasets/${datasetId}`, { requestOptions });\n }\n\n async update(\n datasetId: string,\n body: UpdateDatasetRequest,\n requestOptions?: RequestOptions\n ): Promise<Dataset> {\n return await this.transport.request('PUT', `/datasets/${datasetId}`, { body, requestOptions });\n }\n\n async delete(datasetId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/datasets/${datasetId}`, { requestOptions });\n }\n\n async resolve(\n datasetId: string,\n requestOptions?: RequestOptions\n ): Promise<ResolvedDataset> {\n return await this.transport.request('GET', `/datasets/${datasetId}/resolve`, {\n requestOptions,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport type {\n Enrichment,\n EnrichRequest,\n EnrichResponse,\n TokenUsageResponse,\n} from '../types/enrichment.js';\n\nexport class EnrichmentResource extends Resource {\n async get(\n jobId: string,\n runId: string,\n type: string,\n requestOptions?: RequestOptions\n ): Promise<Enrichment> {\n return await this.transport.request(\n 'GET',\n `/mapping/${jobId}/runs/${runId}/enrichments/${encodeURIComponent(type)}`,\n { requestOptions }\n );\n }\n\n async tokenUsage(\n jobId: string,\n runId: string,\n requestOptions?: RequestOptions\n ): Promise<TokenUsageResponse> {\n return await this.transport.request(\n 'GET',\n `/mapping/${jobId}/runs/${runId}/token-usage`,\n { requestOptions }\n );\n }\n\n async enrich(\n jobId: string,\n runId: string,\n body?: EnrichRequest,\n requestOptions?: RequestOptions\n ): Promise<EnrichResponse> {\n return await this.transport.request(\n 'POST',\n `/mapping/${jobId}/runs/${runId}/enrich`,\n { body, requestOptions }\n );\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateLoadTestRequest,\n LoadTest,\n LoadTestEstimate,\n LoadTestEstimateRequest,\n LoadTestRun,\n LoadTestStatusResponse,\n LoadTestingListParams,\n UpdateLoadTestRequest,\n} from '../types/loadTesting.js';\n\nconst TERMINAL_STATUSES = new Set(['completed', 'aborted', 'failed']);\n\nexport interface LoadTestingWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (status: LoadTestStatusResponse) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class LoadTestingResource extends Resource {\n async create(\n body: CreateLoadTestRequest,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n // POST /testing/load-tests returns `{ config: {...} }` — unwrap.\n const raw = await this.transport.request<{ config?: LoadTest } & LoadTest>(\n 'POST', '/testing/load-tests', { body, requestOptions }\n );\n return raw.config ?? raw;\n }\n\n list(\n params: LoadTestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<LoadTest> {\n return new Paginator<LoadTest>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/load-tests', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'configs',\n });\n }\n\n async listPage(\n params: LoadTestingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<LoadTest>> {\n const raw = await this.transport.request<{\n configs?: LoadTest[];\n items?: LoadTest[];\n nextToken?: string | null;\n }>('GET', '/testing/load-tests', { params, requestOptions });\n return new Page(raw.configs ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(loadTestId: string, requestOptions?: RequestOptions): Promise<LoadTest> {\n // GET /testing/load-tests/{id} returns the config fields flat with a\n // `testConfig` sibling — not wrapped.\n return await this.transport.request('GET', `/testing/load-tests/${loadTestId}`, {\n requestOptions,\n });\n }\n\n async update(\n loadTestId: string,\n body: UpdateLoadTestRequest,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n // PUT returns `{ config: updated }` — unwrap.\n const raw = await this.transport.request<{ config?: LoadTest } & LoadTest>(\n 'PUT', `/testing/load-tests/${loadTestId}`, { body, requestOptions }\n );\n return raw.config ?? raw;\n }\n\n async delete(loadTestId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/load-tests/${loadTestId}`, { requestOptions });\n }\n\n async estimate(\n body: LoadTestEstimateRequest,\n requestOptions?: RequestOptions\n ): Promise<LoadTestEstimate> {\n return await this.transport.request('POST', '/testing/load-tests/estimate', {\n body,\n requestOptions,\n });\n }\n\n async start(\n loadTestId: string,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n return await this.transport.request('POST', `/testing/load-tests/${loadTestId}/start`, {\n requestOptions,\n });\n }\n\n async abort(\n loadTestId: string,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n return await this.transport.request('POST', `/testing/load-tests/${loadTestId}/abort`, {\n requestOptions,\n });\n }\n\n async status(\n loadTestId: string,\n requestOptions?: RequestOptions\n ): Promise<LoadTestStatusResponse> {\n return await this.transport.request('GET', `/testing/load-tests/${loadTestId}/status`, {\n requestOptions,\n });\n }\n\n listRuns(\n params: LoadTestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<LoadTestRun> {\n return new Paginator<LoadTestRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/load-tests/runs', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n async waitForComplete(\n loadTestId: string,\n opts: LoadTestingWaitForOptions = {}\n ): Promise<LoadTestStatusResponse> {\n return await waitFor<LoadTestStatusResponse>({\n fetch: () => this.status(loadTestId, opts.requestOptions),\n isTerminal: (s) => TERMINAL_STATUSES.has(s.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateMappingJobRequest,\n MappingJob,\n MappingListParams,\n MappingPath,\n MappingRun,\n MappingStep,\n MappingTree,\n TreeFormat,\n UpdateMappingJobRequest,\n} from '../types/mapping.js';\n\nconst TERMINAL_STATUSES = new Set(['completed', 'failed', 'limited', 'cancelled']);\n\nexport interface WaitForCompleteOptions {\n timeout?: number; // ms\n pollInterval?: number; // ms\n intervalCap?: number; // ms\n onUpdate?: (job: MappingJob) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class MappingResource extends Resource {\n list(params: MappingListParams = {}, requestOptions?: RequestOptions): Paginator<MappingJob> {\n return new Paginator<MappingJob>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/mapping', { params: p, requestOptions }),\n params: { ...params },\n });\n }\n\n async listPage(\n params: MappingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<MappingJob>> {\n const raw = await this.transport.request<{ items: MappingJob[]; nextToken: string | null }>(\n 'GET', '/mapping', { params, requestOptions }\n );\n return new Page(raw.items, raw.nextToken);\n }\n\n async get(jobId: string, requestOptions?: RequestOptions): Promise<MappingJob> {\n return await this.transport.request('GET', `/mapping/${jobId}`, { requestOptions });\n }\n\n async create(\n body: CreateMappingJobRequest,\n requestOptions?: RequestOptions\n ): Promise<MappingJob> {\n return await this.transport.request('POST', '/mapping', { body, requestOptions });\n }\n\n async update(\n jobId: string,\n body: UpdateMappingJobRequest,\n requestOptions?: RequestOptions\n ): Promise<MappingJob> {\n return await this.transport.request('PATCH', `/mapping/${jobId}`, { body, requestOptions });\n }\n\n async delete(jobId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/mapping/${jobId}`, { requestOptions });\n }\n\n async start(jobId: string, requestOptions?: RequestOptions): Promise<MappingJob> {\n return await this.transport.request('POST', `/mapping/${jobId}/start`, { requestOptions });\n }\n\n async cancel(jobId: string, requestOptions?: RequestOptions): Promise<MappingJob> {\n return await this.transport.request('POST', `/mapping/${jobId}/cancel`, { requestOptions });\n }\n\n async attest(\n jobId: string,\n requestOptions?: RequestOptions\n ): Promise<{ attested: boolean }> {\n return await this.transport.request('POST', '/mapping/attest', {\n body: { jobId },\n requestOptions,\n });\n }\n\n steps(\n jobId: string,\n params: { limit?: number; nextToken?: string } = {},\n requestOptions?: RequestOptions\n ): Paginator<MappingStep> {\n return new Paginator<MappingStep>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/mapping/${jobId}/steps`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n });\n }\n\n async tree(\n jobId: string,\n opts: { format?: TreeFormat } = {},\n requestOptions?: RequestOptions\n ): Promise<MappingTree> {\n return await this.transport.request('GET', `/mapping/${jobId}/tree`, {\n params: { format: opts.format ?? 'tree' },\n requestOptions,\n });\n }\n\n runs(\n jobId: string,\n params: { limit?: number; nextToken?: string } = {},\n requestOptions?: RequestOptions\n ): Paginator<MappingRun> {\n return new Paginator<MappingRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/mapping/${jobId}/runs`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n paths(\n jobId: string,\n params: { limit?: number; nextToken?: string } = {},\n requestOptions?: RequestOptions\n ): Paginator<MappingPath> {\n return new Paginator<MappingPath>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/mapping/${jobId}/paths`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'rules',\n });\n }\n\n async updatePath(\n jobId: string,\n path: string,\n body: Record<string, unknown>,\n requestOptions?: RequestOptions\n ): Promise<MappingPath> {\n return await this.transport.request(\n 'PATCH',\n `/mapping/${jobId}/paths/${encodeURIComponent(path)}`,\n { body, requestOptions }\n );\n }\n\n async deletePath(\n jobId: string,\n path: string,\n requestOptions?: RequestOptions\n ): Promise<void> {\n await this.transport.request(\n 'DELETE',\n `/mapping/${jobId}/paths/${encodeURIComponent(path)}`,\n { requestOptions }\n );\n }\n\n async remap(\n jobId: string,\n path: string,\n requestOptions?: RequestOptions\n ): Promise<MappingJob> {\n return await this.transport.request(\n 'POST',\n `/mapping/${jobId}/remap/${encodeURIComponent(path)}`,\n { requestOptions }\n );\n }\n\n async probe(\n jobId: string,\n runId: string,\n body: Record<string, unknown> = {},\n requestOptions?: RequestOptions\n ): Promise<unknown> {\n return await this.transport.request(\n 'POST',\n `/mapping/${jobId}/runs/${runId}/probe`,\n { body, requestOptions }\n );\n }\n\n async waitForComplete(\n jobId: string,\n opts: WaitForCompleteOptions = {}\n ): Promise<MappingJob> {\n return await waitFor<MappingJob>({\n fetch: () => this.get(jobId, opts.requestOptions),\n isTerminal: (job) => TERMINAL_STATUSES.has(job.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n AddProfileItemRequest,\n CreateProfileRequest,\n Profile,\n ProfileItem,\n ProfileParametersResponse,\n ProfilesByParametersParams,\n ProfilesByParametersResponse,\n ProfilesListParams,\n UpdateProfileItemRequest,\n UpdateProfileRequest,\n} from '../types/profiles.js';\n\nexport class ProfilesResource extends Resource {\n async create(\n body: CreateProfileRequest,\n requestOptions?: RequestOptions\n ): Promise<Profile> {\n return await this.transport.request('POST', '/profiles', { body, requestOptions });\n }\n\n list(\n params: ProfilesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Profile> {\n return new Paginator<Profile>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/profiles', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'profiles',\n });\n }\n\n async listPage(\n params: ProfilesListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Profile>> {\n const raw = await this.transport.request<{\n profiles?: Profile[];\n items?: Profile[];\n nextToken?: string | null;\n }>('GET', '/profiles', { params, requestOptions });\n return new Page(raw.profiles ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(profileId: string, requestOptions?: RequestOptions): Promise<Profile> {\n return await this.transport.request('GET', `/profiles/${profileId}`, { requestOptions });\n }\n\n async update(\n profileId: string,\n body: UpdateProfileRequest,\n requestOptions?: RequestOptions\n ): Promise<Profile> {\n return await this.transport.request('PUT', `/profiles/${profileId}`, { body, requestOptions });\n }\n\n async delete(profileId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/profiles/${profileId}`, { requestOptions });\n }\n\n async addItem(\n profileId: string,\n body: AddProfileItemRequest,\n requestOptions?: RequestOptions\n ): Promise<ProfileItem> {\n return await this.transport.request('POST', `/profiles/${profileId}/items`, {\n body,\n requestOptions,\n });\n }\n\n async updateItem(\n profileId: string,\n itemId: string,\n body: UpdateProfileItemRequest,\n requestOptions?: RequestOptions\n ): Promise<ProfileItem> {\n return await this.transport.request('PUT', `/profiles/${profileId}/items/${itemId}`, {\n body,\n requestOptions,\n });\n }\n\n async deleteItem(\n profileId: string,\n itemId: string,\n requestOptions?: RequestOptions\n ): Promise<void> {\n await this.transport.request(\n 'DELETE',\n `/profiles/${profileId}/items/${itemId}`,\n { requestOptions }\n );\n }\n\n async listParameters(\n requestOptions?: RequestOptions\n ): Promise<ProfileParametersResponse> {\n return await this.transport.request('GET', '/profiles/parameters', { requestOptions });\n }\n\n async findByParameters(\n params: ProfilesByParametersParams,\n requestOptions?: RequestOptions\n ): Promise<ProfilesByParametersResponse> {\n const labels = Array.isArray(params.labels) ? params.labels.join(',') : params.labels;\n return await this.transport.request('GET', '/profiles/by-parameters', {\n params: { labels },\n requestOptions,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n CreateScheduleRequest,\n Schedule,\n ScheduleListParams,\n UpdateScheduleRequest,\n} from '../types/scheduler.js';\n\nexport class SchedulerResource extends Resource {\n async create(\n body: CreateScheduleRequest,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('POST', '/schedules', { body, requestOptions });\n }\n\n list(\n params: ScheduleListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Schedule> {\n return new Paginator<Schedule>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/schedules', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'schedules',\n });\n }\n\n async listPage(\n params: ScheduleListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Schedule>> {\n const raw = await this.transport.request<{\n schedules?: Schedule[];\n items?: Schedule[];\n nextToken?: string | null;\n }>('GET', '/schedules', { params, requestOptions });\n return new Page(raw.schedules ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(scheduleId: string, requestOptions?: RequestOptions): Promise<Schedule> {\n return await this.transport.request('GET', `/schedules/${scheduleId}`, { requestOptions });\n }\n\n async update(\n scheduleId: string,\n body: UpdateScheduleRequest,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('PUT', `/schedules/${scheduleId}`, { body, requestOptions });\n }\n\n async delete(scheduleId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/schedules/${scheduleId}`, { requestOptions });\n }\n\n async pause(\n scheduleId: string,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('POST', `/schedules/${scheduleId}/pause`, {\n requestOptions,\n });\n }\n\n async resume(\n scheduleId: string,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('POST', `/schedules/${scheduleId}/resume`, {\n requestOptions,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateSweepRequest,\n Sweep,\n SweepRun,\n SweepsListParams,\n UpdateSweepRequest,\n} from '../types/sweeps.js';\n\nconst RUN_TERMINAL_STATUSES = new Set(['completed', 'failed', 'cancelled']);\n\nexport interface SweepsWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (run: SweepRun) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class SweepsResource extends Resource {\n async create(\n body: CreateSweepRequest,\n requestOptions?: RequestOptions\n ): Promise<Sweep> {\n return await this.transport.request('POST', '/testing/sweeps', { body, requestOptions });\n }\n\n list(\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Sweep> {\n return new Paginator<Sweep>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/sweeps', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'sweeps',\n });\n }\n\n async listPage(\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Sweep>> {\n const raw = await this.transport.request<{\n sweeps?: Sweep[];\n items?: Sweep[];\n nextToken?: string | null;\n }>('GET', '/testing/sweeps', { params, requestOptions });\n return new Page(raw.sweeps ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(sweepId: string, requestOptions?: RequestOptions): Promise<Sweep> {\n return await this.transport.request('GET', `/testing/sweeps/${sweepId}`, { requestOptions });\n }\n\n async update(\n sweepId: string,\n body: UpdateSweepRequest,\n requestOptions?: RequestOptions\n ): Promise<Sweep> {\n return await this.transport.request('PUT', `/testing/sweeps/${sweepId}`, {\n body,\n requestOptions,\n });\n }\n\n async delete(sweepId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/sweeps/${sweepId}`, { requestOptions });\n }\n\n async run(\n sweepId: string,\n requestOptions?: RequestOptions\n ): Promise<SweepRun> {\n return await this.transport.request('POST', `/testing/sweeps/${sweepId}/run`, {\n requestOptions,\n });\n }\n\n runs(\n sweepId: string,\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<SweepRun> {\n return new Paginator<SweepRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/testing/sweeps/${sweepId}/runs`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n listRuns(\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<SweepRun> {\n return new Paginator<SweepRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/sweep-runs', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n async getRun(runId: string, requestOptions?: RequestOptions): Promise<SweepRun> {\n return await this.transport.request('GET', `/testing/sweep-runs/${runId}`, { requestOptions });\n }\n\n async waitForRun(\n runId: string,\n opts: SweepsWaitForOptions = {}\n ): Promise<SweepRun> {\n return await waitFor<SweepRun>({\n fetch: () => this.getRun(runId, opts.requestOptions),\n isTerminal: (run) => RUN_TERMINAL_STATUSES.has(run.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { Transport } from '../transport.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateTestConfigRequest,\n CreateTestJobRequest,\n CreateTestRunRequest,\n TestConfig,\n TestingListParams,\n TestJob,\n TestRun,\n UpdateTestConfigRequest,\n} from '../types/testing.js';\n\nconst RUN_TERMINAL_STATUSES = new Set(['completed', 'failed', 'cancelled']);\n\nexport interface TestingWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (run: TestRun) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class TestingConfigsResource extends Resource {\n async create(\n body: CreateTestConfigRequest,\n requestOptions?: RequestOptions\n ): Promise<TestConfig> {\n return await this.transport.request('POST', '/testing/configs', { body, requestOptions });\n }\n\n list(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<TestConfig> {\n return new Paginator<TestConfig>({\n fetchPage: async (p) => {\n // Server returns { configs: [...] } rather than { items, nextToken }.\n const raw = await this.transport.request<{\n configs?: TestConfig[];\n items?: TestConfig[];\n }>('GET', '/testing/configs', { params: p, requestOptions });\n return { items: raw.configs ?? raw.items ?? [], nextToken: null };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<TestConfig>> {\n const raw = await this.transport.request<{\n configs?: TestConfig[];\n items?: TestConfig[];\n nextToken?: string | null;\n }>('GET', '/testing/configs', { params, requestOptions });\n return new Page(raw.configs ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(configId: string, requestOptions?: RequestOptions): Promise<TestConfig> {\n return await this.transport.request('GET', `/testing/configs/${configId}`, { requestOptions });\n }\n\n async update(\n configId: string,\n body: UpdateTestConfigRequest,\n requestOptions?: RequestOptions\n ): Promise<TestConfig> {\n return await this.transport.request('PUT', `/testing/configs/${configId}`, {\n body,\n requestOptions,\n });\n }\n\n async delete(configId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/configs/${configId}`, { requestOptions });\n }\n}\n\nexport class TestingJobsResource extends Resource {\n async create(\n body: CreateTestJobRequest,\n requestOptions?: RequestOptions\n ): Promise<TestJob> {\n return await this.transport.request('POST', '/testing/jobs', { body, requestOptions });\n }\n\n list(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<TestJob> {\n return new Paginator<TestJob>({\n fetchPage: async (p) => {\n // Server returns { jobs: [...] } rather than { items, nextToken }.\n const raw = await this.transport.request<{\n jobs?: TestJob[];\n items?: TestJob[];\n }>('GET', '/testing/jobs', { params: p, requestOptions });\n return { items: raw.jobs ?? raw.items ?? [], nextToken: null };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<TestJob>> {\n const raw = await this.transport.request<{\n jobs?: TestJob[];\n items?: TestJob[];\n nextToken?: string | null;\n }>('GET', '/testing/jobs', { params, requestOptions });\n return new Page(raw.jobs ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(jobId: string, requestOptions?: RequestOptions): Promise<TestJob> {\n return await this.transport.request('GET', `/testing/jobs/${jobId}`, { requestOptions });\n }\n\n async delete(jobId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/jobs/${jobId}`, { requestOptions });\n }\n}\n\nexport class TestingRunsResource extends Resource {\n async create(\n body: CreateTestRunRequest,\n requestOptions?: RequestOptions\n ): Promise<TestRun> {\n // POST returns { message, run } — unwrap the run object.\n const raw = await this.transport.request<{ message?: string; run?: TestRun } & TestRun>(\n 'POST', '/testing/runs', { body, requestOptions }\n );\n return raw.run ?? raw;\n }\n\n list(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<TestRun> {\n return new Paginator<TestRun>({\n fetchPage: async (p) => {\n // Server returns { runs: [...] } rather than { items, nextToken }.\n const raw = await this.transport.request<{\n runs?: TestRun[];\n items?: TestRun[];\n }>('GET', '/testing/runs', { params: p, requestOptions });\n return { items: raw.runs ?? raw.items ?? [], nextToken: null };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<TestRun>> {\n const raw = await this.transport.request<{\n runs?: TestRun[];\n items?: TestRun[];\n nextToken?: string | null;\n }>('GET', '/testing/runs', { params, requestOptions });\n return new Page(raw.runs ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(runId: string, requestOptions?: RequestOptions): Promise<TestRun> {\n return await this.transport.request('GET', `/testing/runs/${runId}`, { requestOptions });\n }\n\n async waitForRun(\n runId: string,\n opts: TestingWaitForOptions = {}\n ): Promise<TestRun> {\n return await waitFor<TestRun>({\n fetch: () => this.get(runId, opts.requestOptions),\n isTerminal: (run) => run.status !== undefined && RUN_TERMINAL_STATUSES.has(run.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n\nexport class TestingResource extends Resource {\n readonly configs: TestingConfigsResource;\n readonly jobs: TestingJobsResource;\n readonly runs: TestingRunsResource;\n\n constructor(transport: Transport) {\n super(transport);\n this.configs = new TestingConfigsResource(transport);\n this.jobs = new TestingJobsResource(transport);\n this.runs = new TestingRunsResource(transport);\n }\n}\n","import { resolveConfig, type NopaqueOptions } from './config.js';\nimport { Transport } from './transport.js';\nimport { AudioResource } from './resources/audio.js';\nimport { BatchesResource } from './resources/batches.js';\nimport { DatasetsResource } from './resources/datasets.js';\nimport { EnrichmentResource } from './resources/enrichment.js';\nimport { LoadTestingResource } from './resources/loadTesting.js';\nimport { MappingResource } from './resources/mapping.js';\nimport { ProfilesResource } from './resources/profiles.js';\nimport { SchedulerResource } from './resources/scheduler.js';\nimport { SweepsResource } from './resources/sweeps.js';\nimport { TestingResource } from './resources/testing.js';\n\nexport class Nopaque {\n readonly mapping: MappingResource;\n readonly audio: AudioResource;\n readonly profiles: ProfilesResource;\n readonly testing: TestingResource;\n readonly batches: BatchesResource;\n readonly sweeps: SweepsResource;\n readonly datasets: DatasetsResource;\n readonly loadTesting: LoadTestingResource;\n readonly scheduler: SchedulerResource;\n readonly enrichment: EnrichmentResource;\n\n private readonly transport: Transport;\n\n constructor(options: NopaqueOptions = {}) {\n const config = resolveConfig(options);\n this.transport = new Transport(config);\n this.mapping = new MappingResource(this.transport);\n this.audio = new AudioResource(this.transport);\n this.profiles = new ProfilesResource(this.transport);\n this.testing = new TestingResource(this.transport);\n this.batches = new BatchesResource(this.transport);\n this.sweeps = new SweepsResource(this.transport);\n this.datasets = new DatasetsResource(this.transport);\n this.loadTesting = new LoadTestingResource(this.transport);\n this.scheduler = new SchedulerResource(this.transport);\n this.enrichment = new EnrichmentResource(this.transport);\n }\n\n close(): void {\n // Reserved for future cleanup; platform fetch requires no teardown.\n }\n}\n"],"mappings":"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","names":["import_node_fs","fsp","fsp","TERMINAL_STATUSES","RUN_TERMINAL_STATUSES","RUN_TERMINAL_STATUSES"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/config.ts","../src/version.ts","../src/userAgent.ts","../src/requestOptions.ts","../src/retry.ts","../src/transport.ts","../src/resources/audio.ts","../src/resource.ts","../src/pagination.ts","../src/s3.ts","../src/polling.ts","../src/resources/batches.ts","../src/resources/compliance.ts","../src/resources/datasets.ts","../src/resources/digitalCompliance.ts","../src/resources/digitalTestConfigs.ts","../src/resources/digitalTesting.ts","../src/resources/enrichment.ts","../src/resources/loadTesting.ts","../src/resources/mapping.ts","../src/resources/missionTestConfigs.ts","../src/resources/missionTests.ts","../src/resources/profiles.ts","../src/resources/scheduler.ts","../src/resources/sweeps.ts","../src/resources/testing.ts","../src/client.ts"],"sourcesContent":["export { Nopaque } from './client.js';\nexport { VERSION } from './version.js';\nexport type { NopaqueOptions } from './config.js';\nexport type { RequestOptions } from './requestOptions.js';\nexport {\n NopaqueError,\n NopaqueAPIError,\n NopaqueConfigError,\n NopaqueTimeoutError,\n AuthenticationError,\n PermissionError,\n NotFoundError,\n ValidationError,\n ConflictError,\n RateLimitError,\n ServerError,\n APIConnectionError,\n APITimeoutError,\n} from './errors.js';\nexport { Page, Paginator } from './pagination.js';\nexport type * from './types/index.js';\n","export class NopaqueError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class NopaqueConfigError extends NopaqueError {}\n\nexport class NopaqueTimeoutError extends NopaqueError {}\n\nexport class APIConnectionError extends NopaqueError {\n override cause?: unknown;\n constructor(message: string, cause?: unknown) {\n super(message);\n this.cause = cause;\n }\n}\n\nexport class APITimeoutError extends NopaqueError {}\n\nexport interface APIErrorInit {\n status: number;\n code?: string | null;\n message?: string;\n details?: unknown;\n requestId?: string | null;\n response?: Response | null;\n}\n\nexport class NopaqueAPIError extends NopaqueError {\n status: number;\n code: string | null;\n details: unknown;\n requestId: string | null;\n response: Response | null;\n\n constructor(init: APIErrorInit) {\n super(init.message ?? `HTTP ${init.status}`);\n this.status = init.status;\n this.code = init.code ?? null;\n this.details = init.details ?? null;\n this.requestId = init.requestId ?? null;\n this.response = init.response ?? null;\n }\n}\n\nexport class ValidationError extends NopaqueAPIError {}\nexport class AuthenticationError extends NopaqueAPIError {}\nexport class PermissionError extends NopaqueAPIError {}\nexport class NotFoundError extends NopaqueAPIError {}\nexport class ConflictError extends NopaqueAPIError {}\nexport class ServerError extends NopaqueAPIError {}\n\nexport class RateLimitError extends NopaqueAPIError {\n retryAfter: number | null;\n constructor(init: APIErrorInit & { retryAfter?: number | null }) {\n super(init);\n this.retryAfter = init.retryAfter ?? null;\n }\n}\n\nconst STATUS_MAP: Record<number, typeof NopaqueAPIError> = {\n 400: ValidationError,\n 401: AuthenticationError,\n 403: PermissionError,\n 404: NotFoundError,\n 409: ConflictError,\n 429: RateLimitError,\n};\n\nexport function classifyStatus(status: number): typeof NopaqueAPIError {\n const specific = STATUS_MAP[status];\n if (specific) return specific;\n if (status >= 500 && status < 600) return ServerError;\n return NopaqueAPIError;\n}\n","import { NopaqueConfigError, type NopaqueError } from './errors.js';\n\nexport { NopaqueConfigError };\n\nexport interface NopaqueOptions {\n apiKey?: string;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n defaultHeaders?: Record<string, string>;\n onRetry?: (attempt: number, error: NopaqueError, nextDelayMs: number) => void;\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface ResolvedConfig {\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly timeout: number;\n readonly maxRetries: number;\n readonly defaultHeaders: Record<string, string>;\n readonly onRetry?: (attempt: number, error: NopaqueError, nextDelayMs: number) => void;\n readonly fetch: typeof globalThis.fetch;\n}\n\nconst DEFAULT_BASE_URL = 'https://api.nopaque.co.uk';\nconst DEFAULT_TIMEOUT_MS = 60_000;\nconst DEFAULT_MAX_RETRIES = 3;\n\nexport function resolveConfig(opts: NopaqueOptions): ResolvedConfig {\n const apiKey = opts.apiKey ?? process.env.NOPAQUE_API_KEY ?? '';\n if (!apiKey) {\n throw new NopaqueConfigError(\n 'No API key provided. Pass apiKey in the constructor or set NOPAQUE_API_KEY.'\n );\n }\n const baseUrl = (\n opts.baseUrl ?? process.env.NOPAQUE_BASE_URL ?? DEFAULT_BASE_URL\n ).replace(/\\/$/, '');\n\n return {\n apiKey,\n baseUrl,\n timeout: opts.timeout ?? DEFAULT_TIMEOUT_MS,\n maxRetries: opts.maxRetries ?? DEFAULT_MAX_RETRIES,\n defaultHeaders: opts.defaultHeaders ?? {},\n onRetry: opts.onRetry,\n fetch: opts.fetch ?? globalThis.fetch.bind(globalThis),\n };\n}\n","// Populated by tsup at build time via the `define` option.\ndeclare const __SDK_VERSION__: string;\n\nexport const VERSION: string =\n typeof __SDK_VERSION__ === 'string' ? __SDK_VERSION__ : '0.0.0-dev';\n","import { VERSION } from './version.js';\n\nexport function composeUserAgent(): string {\n const nodeVersion = typeof process !== 'undefined' ? process.version : 'unknown';\n return `nopaque-node/${VERSION} (node/${nodeVersion})`;\n}\n","export interface RequestOptions {\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport function mergeOptions(\n base: RequestOptions | undefined,\n override: RequestOptions | undefined\n): RequestOptions {\n if (!base) return override ?? {};\n if (!override) return base;\n return {\n ...base,\n ...override,\n headers: { ...(base.headers ?? {}), ...(override.headers ?? {}) },\n };\n}\n","import {\n APIConnectionError,\n APITimeoutError,\n NopaqueAPIError,\n NopaqueError,\n RateLimitError,\n ServerError,\n} from './errors.js';\n\nexport interface BackoffParams {\n base?: number; // ms\n cap?: number; // ms\n jitter?: number; // upper multiplier\n}\n\nconst DEFAULTS: Required<BackoffParams> = { base: 500, cap: 8000, jitter: 1.5 };\n\nexport function computeBackoff(attempt: number, p: BackoffParams = {}): number {\n const { base, cap, jitter } = { ...DEFAULTS, ...p };\n const raw = Math.min(cap, base * 2 ** attempt);\n const mul = 0.5 + Math.random() * (jitter - 0.5);\n return Math.round(raw * mul);\n}\n\nexport function delayFor(args: {\n attempt: number;\n error: NopaqueError;\n base?: number;\n cap?: number;\n jitter?: number;\n}): number {\n const { attempt, error, ...p } = args;\n if (error instanceof RateLimitError && error.retryAfter !== null) {\n return Math.round(error.retryAfter * 1000);\n }\n return computeBackoff(attempt, p);\n}\n\nexport interface ShouldRetryArgs {\n method: string;\n error: NopaqueError;\n beforeSend: boolean;\n}\n\nexport function shouldRetry({ method, error, beforeSend }: ShouldRetryArgs): boolean {\n const m = method.toUpperCase();\n if (error instanceof RateLimitError) return true;\n if (m === 'POST') {\n return error instanceof APIConnectionError && beforeSend;\n }\n if (\n error instanceof APIConnectionError ||\n error instanceof APITimeoutError ||\n error instanceof ServerError\n ) {\n return true;\n }\n if (error instanceof NopaqueAPIError) return false;\n return false;\n}\n","import type { ResolvedConfig } from './config.js';\nimport {\n APIConnectionError,\n APITimeoutError,\n NopaqueAPIError,\n NopaqueError,\n RateLimitError,\n classifyStatus,\n} from './errors.js';\nimport { composeUserAgent } from './userAgent.js';\nimport { mergeOptions, type RequestOptions } from './requestOptions.js';\nimport { delayFor, shouldRetry } from './retry.js';\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\n// Accept both Record-shaped and interface-shaped param objects. Interfaces\n// in TS don't have an implicit string index signature, so we widen with\n// `object` to let callers pass typed interfaces (e.g. MappingListParams).\nexport interface RequestParams {\n params?: object;\n body?: unknown;\n requestOptions?: RequestOptions;\n}\n\nexport class Transport {\n constructor(public readonly config: ResolvedConfig) {}\n\n async request<T = unknown>(\n method: string,\n path: string,\n { params, body, requestOptions }: RequestParams = {}\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n const headers = this.buildHeaders(requestOptions);\n const merged = mergeOptions(undefined, requestOptions);\n const timeout = merged.timeout ?? this.config.timeout;\n const maxRetries = merged.maxRetries ?? this.config.maxRetries;\n\n let attempt = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let beforeSend = true;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n const combinedSignal = mergeAbortSignals([controller.signal, merged.signal]);\n\n let err: NopaqueError | null = null;\n let response: Response | null = null;\n try {\n response = await this.config.fetch(url, {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n signal: combinedSignal,\n });\n beforeSend = false;\n if (!response.ok) {\n err = await classifyResponse(response);\n }\n } catch (fetchErr) {\n if ((fetchErr as { name?: string }).name === 'AbortError') {\n err = new APITimeoutError(`request timed out after ${timeout}ms`);\n } else {\n err = new APIConnectionError(\n `fetch failed: ${(fetchErr as Error).message ?? 'unknown'}`,\n fetchErr\n );\n }\n } finally {\n clearTimeout(timer);\n }\n\n if (!err) {\n if (response!.status === 204) return undefined as T;\n const ct = response!.headers.get('content-type') ?? '';\n if (!ct.includes('application/json')) return undefined as T;\n return (await response!.json()) as T;\n }\n\n if (attempt >= maxRetries) throw err;\n if (!shouldRetry({ method, error: err, beforeSend })) throw err;\n\n const delay = delayFor({ attempt, error: err });\n if (this.config.onRetry) {\n try { this.config.onRetry(attempt, err, delay); } catch { /* never break */ }\n }\n await new Promise((r) => setTimeout(r, delay));\n attempt++;\n }\n }\n\n private buildUrl(path: string, params?: object): string {\n const normalized = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(`${this.config.baseUrl}${normalized}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n url.searchParams.set(k, String(v));\n }\n }\n return url.toString();\n }\n\n private buildHeaders(options: RequestOptions | undefined): Headers {\n const h = new Headers({\n 'x-api-key': this.config.apiKey,\n 'user-agent': composeUserAgent(),\n 'accept': 'application/json',\n });\n for (const [k, v] of Object.entries(this.config.defaultHeaders)) h.set(k, v);\n if (options?.headers) {\n for (const [k, v] of Object.entries(options.headers)) h.set(k, v);\n }\n return h;\n }\n}\n\nasync function classifyResponse(response: Response): Promise<NopaqueAPIError> {\n let body: unknown = null;\n try {\n body = await response.clone().json();\n } catch {\n body = null;\n }\n const bodyObj = body && typeof body === 'object' ? (body as Record<string, unknown>) : {};\n const message = typeof bodyObj.error === 'string' ? bodyObj.error : `HTTP ${response.status}`;\n const code = typeof bodyObj.code === 'string' ? bodyObj.code : null;\n const details = bodyObj.details ?? null;\n const requestId = response.headers.get('x-request-id');\n\n const Cls = classifyStatus(response.status);\n if (Cls === RateLimitError) {\n const raw = response.headers.get('retry-after');\n const retryAfter = raw !== null ? Number.parseFloat(raw) : null;\n return new RateLimitError({\n status: response.status,\n code,\n message,\n details,\n requestId,\n response,\n retryAfter: Number.isFinite(retryAfter!) ? retryAfter : null,\n });\n }\n return new Cls({\n status: response.status,\n code,\n message,\n details,\n requestId,\n response,\n });\n}\n\nfunction mergeAbortSignals(signals: (AbortSignal | undefined)[]): AbortSignal {\n const valid = signals.filter((s): s is AbortSignal => !!s);\n if (valid.length === 1) return valid[0];\n if (valid.length === 0) return new AbortController().signal;\n const ctrl = new AbortController();\n for (const s of valid) {\n if (s.aborted) {\n ctrl.abort(s.reason);\n return ctrl.signal;\n }\n s.addEventListener('abort', () => ctrl.abort(s.reason), { once: true });\n }\n return ctrl.signal;\n}\n","import { promises as fsp } from 'node:fs';\nimport { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { readBytes, s3Get, s3Put, sniffContentType } from '../s3.js';\nimport type {\n AudioDownloadURL,\n AudioFile,\n AudioListParams,\n AudioUploadURL,\n CreateUploadUrlRequest,\n DownloadOptions,\n UploadInput,\n} from '../types/audio.js';\n\nexport class AudioResource extends Resource {\n list(params: AudioListParams = {}, requestOptions?: RequestOptions): Paginator<AudioFile> {\n return new Paginator<AudioFile>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/audio', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'audioFiles',\n });\n }\n\n async listPage(\n params: AudioListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<AudioFile>> {\n const raw = await this.transport.request<{\n audioFiles?: AudioFile[];\n items?: AudioFile[];\n nextToken?: string | null;\n }>('GET', '/audio', { params, requestOptions });\n return new Page(raw.audioFiles ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(audioId: string, requestOptions?: RequestOptions): Promise<AudioFile> {\n return await this.transport.request('GET', `/audio/${audioId}`, { requestOptions });\n }\n\n async delete(audioId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/audio/${audioId}`, { requestOptions });\n }\n\n async createUploadUrl(\n body: CreateUploadUrlRequest,\n requestOptions?: RequestOptions\n ): Promise<AudioUploadURL> {\n return await this.transport.request('POST', '/audio/upload-url', {\n body,\n requestOptions,\n });\n }\n\n async createDownloadUrl(\n audioId: string,\n requestOptions?: RequestOptions\n ): Promise<AudioDownloadURL> {\n return await this.transport.request('GET', '/audio/download-url', {\n params: { audioId },\n requestOptions,\n });\n }\n\n async upload(input: UploadInput, requestOptions?: RequestOptions): Promise<AudioFile> {\n const { bytes, inferredName } = await readBytes(input.file);\n const resolvedName = input.name ?? inferredName ?? 'upload.bin';\n const resolvedType = input.contentType ?? sniffContentType(resolvedName);\n\n const presign = await this.createUploadUrl(\n {\n filename: resolvedName,\n contentType: resolvedType,\n category: input.category,\n ...(input.associatedId && { associatedId: input.associatedId }),\n sizeBytes: bytes.byteLength,\n },\n requestOptions\n );\n\n await s3Put(presign.uploadUrl, bytes, {\n contentType: resolvedType,\n fetch: this.transport.config.fetch,\n });\n return await this.get(presign.audioId, requestOptions);\n }\n\n async download(audioId: string): Promise<Uint8Array>;\n async download(audioId: string, options: DownloadOptions & { to: string }): Promise<void>;\n async download(\n audioId: string,\n options?: DownloadOptions,\n requestOptions?: RequestOptions\n ): Promise<Uint8Array | void> {\n const presign = await this.createDownloadUrl(audioId, requestOptions);\n const bytes = await s3Get(presign.downloadUrl, { fetch: this.transport.config.fetch });\n if (options?.to) {\n await fsp.writeFile(options.to, bytes);\n return;\n }\n return bytes;\n }\n}\n","import type { Transport } from './transport.js';\n\nexport class Resource {\n constructor(protected readonly transport: Transport) {}\n}\n","export class Page<T> {\n constructor(public readonly items: T[], public readonly nextToken: string | null) {}\n}\n\nexport interface PageResponse<T> {\n items: T[];\n nextToken: string | null;\n}\n\nexport interface PaginatorParams {\n limit?: number;\n nextToken?: string | null;\n [key: string]: unknown;\n}\n\n/**\n * A page may be returned in either of two shapes:\n * { items: [...], nextToken: ... } — the standard shape\n * { <itemsKey>: [...], nextToken?: ... } — the resource-named shape\n * When `itemsKey` is provided, the paginator prefers that key but falls back\n * to `items` for forward compatibility.\n */\nexport interface PaginatorOptions<T, Raw = unknown> {\n fetchPage: (params: PaginatorParams) => Promise<Record<string, unknown>>;\n params: PaginatorParams;\n mapItem?: (raw: Raw) => T;\n itemsKey?: string;\n}\n\nexport class Paginator<T, Raw = unknown> implements AsyncIterable<T> {\n constructor(private readonly options: PaginatorOptions<T, Raw>) {}\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n const limit = this.options.params.limit;\n const params: PaginatorParams = { ...this.options.params };\n const key = this.options.itemsKey;\n let yielded = 0;\n while (true) {\n const page = await this.options.fetchPage(params);\n const rawItems = (key ? (page as Record<string, unknown>)[key] : undefined)\n ?? (page as Record<string, unknown>).items\n ?? [];\n const items = rawItems as Raw[];\n for (const raw of items) {\n const item = (this.options.mapItem ? this.options.mapItem(raw) : (raw as unknown as T));\n yield item;\n yielded++;\n if (limit !== undefined && yielded >= limit) return;\n }\n const nextToken = (page as Record<string, unknown>).nextToken as string | null | undefined;\n if (!nextToken) return;\n params.nextToken = nextToken;\n }\n }\n}\n","import { APIConnectionError } from './errors.js';\nimport type { UploadInput } from './types/audio.js';\nimport { promises as fsp } from 'node:fs';\nimport { basename } from 'node:path';\n\nexport async function readBytes(input: UploadInput['file']): Promise<{\n bytes: Uint8Array;\n inferredName: string | null;\n}> {\n if (typeof input === 'string') {\n const buf = await fsp.readFile(input);\n return { bytes: new Uint8Array(buf), inferredName: basename(input) };\n }\n if (input instanceof Uint8Array) {\n return { bytes: input, inferredName: null };\n }\n if (typeof Blob !== 'undefined' && input instanceof Blob) {\n const buf = await input.arrayBuffer();\n const name = (input as File).name ?? null;\n return { bytes: new Uint8Array(buf), inferredName: name };\n }\n if (typeof (input as ReadableStream).getReader === 'function') {\n const reader = (input as ReadableStream<Uint8Array>).getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n total += value.byteLength;\n }\n const out = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) { out.set(c, off); off += c.byteLength; }\n return { bytes: out, inferredName: null };\n }\n if (typeof (input as NodeJS.ReadableStream).on === 'function') {\n const chunks: Buffer[] = [];\n for await (const chunk of input as NodeJS.ReadableStream) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : (chunk as Buffer));\n }\n const buf = Buffer.concat(chunks);\n return { bytes: new Uint8Array(buf), inferredName: null };\n }\n throw new TypeError('unsupported file input');\n}\n\nconst EXTENSION_MAP: Record<string, string> = {\n '.wav': 'audio/wav',\n '.mp3': 'audio/mpeg',\n '.mp4': 'audio/mp4',\n '.m4a': 'audio/mp4',\n '.ogg': 'audio/ogg',\n '.flac': 'audio/flac',\n '.webm': 'audio/webm',\n};\n\nexport function sniffContentType(name: string | null): string {\n if (!name) return 'application/octet-stream';\n const dot = name.lastIndexOf('.');\n const ext = dot >= 0 ? name.slice(dot).toLowerCase() : '';\n return EXTENSION_MAP[ext] ?? 'application/octet-stream';\n}\n\nexport async function s3Put(\n url: string,\n data: Uint8Array,\n { contentType, fetch }: { contentType: string; fetch: typeof globalThis.fetch }\n): Promise<void> {\n let resp: Response;\n try {\n resp = await fetch(url, {\n method: 'PUT',\n body: data as BodyInit,\n headers: { 'content-type': contentType },\n });\n } catch (err) {\n throw new APIConnectionError(`S3 PUT failed: ${(err as Error).message}`, err);\n }\n if (resp.status >= 400) {\n const text = await resp.text().catch(() => '');\n throw new APIConnectionError(`S3 PUT returned ${resp.status}: ${text.slice(0, 200)}`);\n }\n}\n\nexport async function s3Get(\n url: string,\n { fetch }: { fetch: typeof globalThis.fetch }\n): Promise<Uint8Array> {\n let resp: Response;\n try {\n resp = await fetch(url);\n } catch (err) {\n throw new APIConnectionError(`S3 GET failed: ${(err as Error).message}`, err);\n }\n if (resp.status >= 400) {\n const text = await resp.text().catch(() => '');\n throw new APIConnectionError(`S3 GET returned ${resp.status}: ${text.slice(0, 200)}`);\n }\n return new Uint8Array(await resp.arrayBuffer());\n}\n","import { NopaqueTimeoutError } from './errors.js';\n\nexport interface PollIntervalParams {\n base?: number; // ms\n cap?: number; // ms\n}\n\nconst DEFAULT_BASE = 5000;\nconst DEFAULT_CAP = 15000;\n\nexport function pollIntervalCurve(\n step: number,\n { base = DEFAULT_BASE, cap = DEFAULT_CAP }: PollIntervalParams = {}\n): number {\n if (step < 2) return base;\n const soft = base * 1.2 ** (step - 1);\n return Math.min(cap, soft);\n}\n\nexport interface WaitForArgs<T> {\n fetch: () => Promise<T>;\n isTerminal: (doc: T) => boolean;\n timeout?: number; // ms\n initialInterval?: number; // ms\n intervalCap?: number; // ms\n onUpdate?: (doc: T) => void;\n}\n\nexport async function waitFor<T>(args: WaitForArgs<T>): Promise<T> {\n const timeout = args.timeout ?? 600_000;\n const initial = args.initialInterval ?? DEFAULT_BASE;\n const cap = args.intervalCap ?? DEFAULT_CAP;\n const deadline = Date.now() + timeout;\n let step = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const doc = await args.fetch();\n if (args.onUpdate) {\n try { args.onUpdate(doc); } catch { /* never break the wait */ }\n }\n if (args.isTerminal(doc)) return doc;\n const now = Date.now();\n if (now >= deadline) {\n throw new NopaqueTimeoutError(`waitFor timed out after ${timeout}ms`);\n }\n const interval = Math.min(\n pollIntervalCurve(step, { base: initial, cap }),\n Math.max(0, deadline - now)\n );\n await new Promise((r) => setTimeout(r, interval));\n step++;\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n Batch,\n BatchesListParams,\n BatchRun,\n CreateBatchRequest,\n UpdateBatchRequest,\n} from '../types/batches.js';\n\nconst RUN_TERMINAL_STATUSES = new Set(['completed', 'failed', 'cancelled']);\n\nexport interface BatchesWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (run: BatchRun) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class BatchesResource extends Resource {\n async create(\n body: CreateBatchRequest,\n requestOptions?: RequestOptions\n ): Promise<Batch> {\n return await this.transport.request('POST', '/testing/batches', { body, requestOptions });\n }\n\n list(\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Batch> {\n return new Paginator<Batch>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/batches', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'batches',\n });\n }\n\n async listPage(\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Batch>> {\n const raw = await this.transport.request<{\n batches?: Batch[];\n items?: Batch[];\n nextToken?: string | null;\n }>('GET', '/testing/batches', { params, requestOptions });\n return new Page(raw.batches ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(batchId: string, requestOptions?: RequestOptions): Promise<Batch> {\n return await this.transport.request('GET', `/testing/batches/${batchId}`, { requestOptions });\n }\n\n async update(\n batchId: string,\n body: UpdateBatchRequest,\n requestOptions?: RequestOptions\n ): Promise<Batch> {\n return await this.transport.request('PUT', `/testing/batches/${batchId}`, {\n body,\n requestOptions,\n });\n }\n\n async delete(batchId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/batches/${batchId}`, { requestOptions });\n }\n\n async run(\n batchId: string,\n requestOptions?: RequestOptions\n ): Promise<BatchRun> {\n return await this.transport.request('POST', `/testing/batches/${batchId}/run`, {\n requestOptions,\n });\n }\n\n runs(\n batchId: string,\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<BatchRun> {\n return new Paginator<BatchRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/testing/batches/${batchId}/runs`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n listRuns(\n params: BatchesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<BatchRun> {\n return new Paginator<BatchRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/batch-runs', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n async getRun(runId: string, requestOptions?: RequestOptions): Promise<BatchRun> {\n return await this.transport.request('GET', `/testing/batch-runs/${runId}`, { requestOptions });\n }\n\n async waitForRun(\n runId: string,\n opts: BatchesWaitForOptions = {}\n ): Promise<BatchRun> {\n return await waitFor<BatchRun>({\n fetch: () => this.getRun(runId, opts.requestOptions),\n isTerminal: (run) => RUN_TERMINAL_STATUSES.has(run.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n ComplianceCatalogueResponse,\n ComplianceReport,\n ComplianceReportListItem,\n ComplianceReportListParams,\n CreateComplianceBatchRequest,\n CreateComplianceBatchResponse,\n GeneratePdfRequest,\n GeneratePdfResponse,\n} from '../types/compliance.js';\nimport type { MissionTestRun } from '../types/missionTests.js';\n\n// Path interpolation in Transport is direct (no automatic encoding), so the\n// E.164 leading `+` must be encoded at the resource boundary or it will reach\n// the gateway as a space.\nfunction encodePhone(phoneNumber: string): string {\n return encodeURIComponent(phoneNumber);\n}\n\nexport class ComplianceResource extends Resource {\n async getCatalogue(\n params: { sector?: string } = {},\n requestOptions?: RequestOptions,\n ): Promise<ComplianceCatalogueResponse> {\n return await this.transport.request('GET', '/testing/compliance-catalogue', { params, requestOptions });\n }\n\n // Atomic batch dispatch. Server enforces compliancePickerLimits[tier] on\n // testIds.length and returns 402 with code='BATCH_SIZE_EXCEEDS_TIER' on\n // overflow. Surfaces as a typed NopaqueAPIError with code preserved.\n async run(\n body: CreateComplianceBatchRequest,\n requestOptions?: RequestOptions,\n ): Promise<CreateComplianceBatchResponse> {\n return await this.transport.request('POST', '/testing/compliance-runs', { body, requestOptions });\n }\n\n listReports(\n params: ComplianceReportListParams = {},\n requestOptions?: RequestOptions,\n ): Paginator<ComplianceReportListItem> {\n return new Paginator<ComplianceReportListItem>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/compliance-reports', { params: p, requestOptions }),\n params: { ...params },\n });\n }\n\n async listReportsPage(\n params: ComplianceReportListParams = {},\n requestOptions?: RequestOptions,\n ): Promise<Page<ComplianceReportListItem>> {\n const raw = await this.transport.request<{\n items: ComplianceReportListItem[];\n nextToken: string | null;\n }>('GET', '/testing/compliance-reports', { params, requestOptions });\n return new Page(raw.items, raw.nextToken);\n }\n\n async getReport(phoneNumber: string, requestOptions?: RequestOptions): Promise<ComplianceReport> {\n return await this.transport.request(\n 'GET',\n `/testing/compliance-reports/${encodePhone(phoneNumber)}`,\n { requestOptions },\n );\n }\n\n // Returns the presigned S3 URL the platform uploaded the PDF to. The 1 hour\n // expiry is baked into the URL itself; the response body is `{ url }` only.\n async generatePdfUrl(\n phoneNumber: string,\n body: GeneratePdfRequest = {},\n requestOptions?: RequestOptions,\n ): Promise<GeneratePdfResponse> {\n return await this.transport.request(\n 'POST',\n `/testing/compliance-reports/${encodePhone(phoneNumber)}/pdf`,\n { body, requestOptions },\n );\n }\n\n // Convenience: get the URL, then fetch the bytes. For applications that\n // already have an HTTP client, prefer generatePdfUrl() and fetch the URL\n // with that client instead.\n async downloadReportPdf(\n phoneNumber: string,\n body: GeneratePdfRequest = {},\n requestOptions?: RequestOptions,\n ): Promise<Uint8Array> {\n const { url } = await this.generatePdfUrl(phoneNumber, body, requestOptions);\n // Use the SDK's configured fetch so tests can mock it through the same\n // queue as transport calls, and so consumers can swap the network layer.\n const response = await this.transport.config.fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to download PDF: ${response.status} ${response.statusText}`);\n }\n return new Uint8Array(await response.arrayBuffer());\n }\n\n async rerun(runId: string, requestOptions?: RequestOptions): Promise<MissionTestRun> {\n return await this.transport.request('POST', `/testing/compliance-runs/${runId}/rerun`, { requestOptions });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n CreateDatasetRequest,\n Dataset,\n DatasetsListParams,\n ResolvedDataset,\n UpdateDatasetRequest,\n} from '../types/datasets.js';\n\nexport class DatasetsResource extends Resource {\n async create(\n body: CreateDatasetRequest,\n requestOptions?: RequestOptions\n ): Promise<Dataset> {\n return await this.transport.request('POST', '/datasets', { body, requestOptions });\n }\n\n list(\n params: DatasetsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Dataset> {\n return new Paginator<Dataset>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/datasets', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'datasets',\n });\n }\n\n async listPage(\n params: DatasetsListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Dataset>> {\n const raw = await this.transport.request<{\n datasets?: Dataset[];\n items?: Dataset[];\n nextToken?: string | null;\n }>('GET', '/datasets', { params, requestOptions });\n return new Page(raw.datasets ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(datasetId: string, requestOptions?: RequestOptions): Promise<Dataset> {\n return await this.transport.request('GET', `/datasets/${datasetId}`, { requestOptions });\n }\n\n async update(\n datasetId: string,\n body: UpdateDatasetRequest,\n requestOptions?: RequestOptions\n ): Promise<Dataset> {\n return await this.transport.request('PUT', `/datasets/${datasetId}`, { body, requestOptions });\n }\n\n async delete(datasetId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/datasets/${datasetId}`, { requestOptions });\n }\n\n async resolve(\n datasetId: string,\n requestOptions?: RequestOptions\n ): Promise<ResolvedDataset> {\n return await this.transport.request('GET', `/datasets/${datasetId}/resolve`, {\n requestOptions,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport type {\n DigitalComplianceAuditSummary,\n DigitalComplianceReportParams,\n ListDigitalComplianceAuditsResponse,\n} from '../types/digitalTesting.js';\n\n/**\n * Digital (chat channel) compliance audits.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\nexport class DigitalComplianceResource extends Resource {\n /**\n * List digital compliance audits, one entry per target.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async listAudits(requestOptions?: RequestOptions): Promise<DigitalComplianceAuditSummary[]> {\n const raw = await this.transport.request<Partial<ListDigitalComplianceAuditsResponse>>(\n 'GET',\n '/digital-testing/compliance-audits',\n { requestOptions },\n );\n return raw.audits ?? [];\n }\n\n /**\n * Compliance report for one digital target.\n *\n * `targetRef` goes in the QUERY STRING, not the path: a targetRef contains\n * slashes (`acme/billing-bot`) and a single path segment cannot hold one. The\n * API made the same choice for the same reason.\n *\n * Pass `{ sector }` to restrict the catalogue to tests applicable to that sector.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async getReport(\n targetRef: string,\n params: DigitalComplianceReportParams = {},\n requestOptions?: RequestOptions,\n ): Promise<unknown> {\n return await this.transport.request('GET', '/digital-testing/compliance-audits/report', {\n params: { targetRef, ...params },\n requestOptions,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n CreateDigitalTestConfigRequest,\n CreateDigitalTestRunResponse,\n DigitalTestConfig,\n DigitalTestConfigListParams,\n DigitalTestRun,\n LaunchDigitalTestConfigRequest,\n ListDigitalTestConfigsResponse,\n UpdateDigitalTestConfigRequest,\n} from '../types/digitalTesting.js';\n\n/** The list response plus the `items`/`nextToken` aliases kept for forward compatibility. */\ntype ListConfigsRaw = Partial<ListDigitalTestConfigsResponse> & {\n items?: DigitalTestConfig[];\n nextToken?: string | null;\n};\n\n/**\n * Saved digital (chat channel) test configs.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\nexport class DigitalTestConfigsResource extends Resource {\n /** @beta Access is limited to beta workspaces during the beta period. */\n list(\n params: DigitalTestConfigListParams = {},\n requestOptions?: RequestOptions,\n ): Paginator<DigitalTestConfig> {\n return new Paginator<DigitalTestConfig>({\n fetchPage: async (p) => {\n const { nextToken, cursor, ...rest } = p as DigitalTestConfigListParams;\n // Server returns { configs: [...], nextCursor? }.\n const raw = await this.transport.request<ListConfigsRaw>(\n 'GET',\n '/digital-testing/configs',\n {\n // `nextToken` first: the Paginator advances by writing it, and a\n // caller-supplied `cursor` would otherwise pin every page to page one.\n params: { ...rest, cursor: nextToken ?? cursor },\n requestOptions,\n },\n );\n return {\n items: raw.configs ?? raw.items ?? [],\n nextToken: raw.nextCursor ?? raw.nextToken ?? null,\n };\n },\n params: { ...params },\n });\n }\n\n /** @beta Access is limited to beta workspaces during the beta period. */\n async listPage(\n params: DigitalTestConfigListParams = {},\n requestOptions?: RequestOptions,\n ): Promise<Page<DigitalTestConfig>> {\n const { nextToken, cursor, ...rest } = params;\n const raw = await this.transport.request<ListConfigsRaw>('GET', '/digital-testing/configs', {\n params: { ...rest, cursor: nextToken ?? cursor },\n requestOptions,\n });\n return new Page(raw.configs ?? raw.items ?? [], raw.nextCursor ?? raw.nextToken ?? null);\n }\n\n /**\n * Save a digital test config. Per-kind rules are enforced at SAVE time, so a\n * config that could never run is rejected with 400 rather than stored.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async create(\n body: CreateDigitalTestConfigRequest,\n requestOptions?: RequestOptions,\n ): Promise<DigitalTestConfig> {\n return await this.transport.request('POST', '/digital-testing/configs', {\n body,\n requestOptions,\n });\n }\n\n /** @beta Access is limited to beta workspaces during the beta period. */\n async get(configId: string, requestOptions?: RequestOptions): Promise<DigitalTestConfig> {\n return await this.transport.request('GET', `/digital-testing/configs/${configId}`, {\n requestOptions,\n });\n }\n\n /** @beta Access is limited to beta workspaces during the beta period. */\n async update(\n configId: string,\n body: UpdateDigitalTestConfigRequest,\n requestOptions?: RequestOptions,\n ): Promise<DigitalTestConfig> {\n return await this.transport.request('PATCH', `/digital-testing/configs/${configId}`, {\n body,\n requestOptions,\n });\n }\n\n /** @beta Access is limited to beta workspaces during the beta period. */\n async delete(configId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/digital-testing/configs/${configId}`, {\n requestOptions,\n });\n }\n\n /**\n * Launch a run from a saved config. `target` and `targetRef` must be\n * overridden together — a half-override is a 400.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async launch(\n configId: string,\n body: LaunchDigitalTestConfigRequest = {},\n requestOptions?: RequestOptions,\n ): Promise<DigitalTestRun> {\n const raw = await this.transport.request<\n Partial<CreateDigitalTestRunResponse> & DigitalTestRun\n >('POST', `/digital-testing/configs/${configId}/runs`, { body, requestOptions });\n return raw.run ?? raw;\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateDigitalTestRunRequest,\n CreateDigitalTestRunResponse,\n DigitalTestRun,\n DigitalTestRunListParams,\n ListDigitalTestRunsResponse,\n} from '../types/digitalTesting.js';\n\n/** The list response plus the `items`/`nextToken` aliases kept for forward compatibility. */\ntype ListRunsRaw = Partial<ListDigitalTestRunsResponse> & {\n items?: DigitalTestRun[];\n nextToken?: string | null;\n};\n\nconst TERMINAL: ReadonlySet<string> = new Set(['completed', 'failed', 'cancelled']);\n\n/** Mirrors `BatchesWaitForOptions` (`src/resources/batches.ts:15-21`). */\nexport interface DigitalTestingWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (run: DigitalTestRun) => void;\n requestOptions?: RequestOptions;\n}\n\n/**\n * Digital (chat channel) test runs.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\nexport class DigitalTestingResource extends Resource {\n /**\n * Queue a digital test run.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async create(\n body: CreateDigitalTestRunRequest,\n requestOptions?: RequestOptions,\n ): Promise<DigitalTestRun> {\n // POST returns { message, run } — unwrap the run object.\n const raw = await this.transport.request<\n Partial<CreateDigitalTestRunResponse> & DigitalTestRun\n >('POST', '/digital-testing/runs', { body, requestOptions });\n return raw.run ?? raw;\n }\n\n /**\n * Paginated list of digital test runs, newest first.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n list(\n params: DigitalTestRunListParams = {},\n requestOptions?: RequestOptions,\n ): Paginator<DigitalTestRun> {\n return new Paginator<DigitalTestRun>({\n fetchPage: async (p) => {\n const { nextToken, cursor, ...rest } = p as DigitalTestRunListParams;\n // Server returns { runs: [...], nextCursor? } rather than { items, nextToken }.\n const raw = await this.transport.request<ListRunsRaw>('GET', '/digital-testing/runs', {\n // `nextToken` first: the Paginator advances by writing it, and a\n // caller-supplied `cursor` would otherwise pin every page to page one.\n params: { ...rest, cursor: nextToken ?? cursor },\n requestOptions,\n });\n return {\n items: raw.runs ?? raw.items ?? [],\n nextToken: raw.nextCursor ?? raw.nextToken ?? null,\n };\n },\n params: { ...params },\n });\n }\n\n /**\n * One page of digital test runs.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async listPage(\n params: DigitalTestRunListParams = {},\n requestOptions?: RequestOptions,\n ): Promise<Page<DigitalTestRun>> {\n const { nextToken, cursor, ...rest } = params;\n const raw = await this.transport.request<ListRunsRaw>('GET', '/digital-testing/runs', {\n params: { ...rest, cursor: nextToken ?? cursor },\n requestOptions,\n });\n return new Page(raw.runs ?? raw.items ?? [], raw.nextCursor ?? raw.nextToken ?? null);\n }\n\n /**\n * Get one digital test run.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async get(runId: string, requestOptions?: RequestOptions): Promise<DigitalTestRun> {\n return await this.transport.request('GET', `/digital-testing/runs/${runId}`, {\n requestOptions,\n });\n }\n\n /**\n * Cancel a digital test run.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async cancel(runId: string, requestOptions?: RequestOptions): Promise<DigitalTestRun> {\n return await this.transport.request('POST', `/digital-testing/runs/${runId}/cancel`, {\n requestOptions,\n });\n }\n\n /**\n * Poll until the run reaches a terminal state.\n *\n * Resolves on `completed`, `failed` and `cancelled` alike and returns the run.\n * A bot that behaved badly is `completed` with `outcome: 'fail'`, which is a\n * RESULT, not an error — this never throws on it. `failed` means the test could\n * not be delivered.\n *\n * @beta Access is limited to beta workspaces during the beta period.\n */\n async waitForRun(\n runId: string,\n opts: DigitalTestingWaitForOptions = {},\n ): Promise<DigitalTestRun> {\n return await waitFor<DigitalTestRun>({\n fetch: () => this.get(runId, opts.requestOptions),\n isTerminal: (r) => TERMINAL.has(r.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport type {\n Enrichment,\n EnrichRequest,\n EnrichResponse,\n TokenUsageResponse,\n} from '../types/enrichment.js';\n\nexport class EnrichmentResource extends Resource {\n async get(\n jobId: string,\n runId: string,\n type: string,\n requestOptions?: RequestOptions\n ): Promise<Enrichment> {\n return await this.transport.request(\n 'GET',\n `/mapping/${jobId}/runs/${runId}/enrichments/${encodeURIComponent(type)}`,\n { requestOptions }\n );\n }\n\n async tokenUsage(\n jobId: string,\n runId: string,\n requestOptions?: RequestOptions\n ): Promise<TokenUsageResponse> {\n return await this.transport.request(\n 'GET',\n `/mapping/${jobId}/runs/${runId}/token-usage`,\n { requestOptions }\n );\n }\n\n async enrich(\n jobId: string,\n runId: string,\n body?: EnrichRequest,\n requestOptions?: RequestOptions\n ): Promise<EnrichResponse> {\n return await this.transport.request(\n 'POST',\n `/mapping/${jobId}/runs/${runId}/enrich`,\n { body, requestOptions }\n );\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateLoadTestRequest,\n LoadTest,\n LoadTestEstimate,\n LoadTestEstimateRequest,\n LoadTestRun,\n LoadTestStatusResponse,\n LoadTestingListParams,\n UpdateLoadTestRequest,\n} from '../types/loadTesting.js';\n\nconst TERMINAL_STATUSES = new Set(['completed', 'aborted', 'failed']);\n\nexport interface LoadTestingWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (status: LoadTestStatusResponse) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class LoadTestingResource extends Resource {\n async create(\n body: CreateLoadTestRequest,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n // POST /testing/load-tests returns `{ config: {...} }` — unwrap.\n const raw = await this.transport.request<{ config?: LoadTest } & LoadTest>(\n 'POST', '/testing/load-tests', { body, requestOptions }\n );\n return raw.config ?? raw;\n }\n\n list(\n params: LoadTestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<LoadTest> {\n return new Paginator<LoadTest>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/load-tests', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'configs',\n });\n }\n\n async listPage(\n params: LoadTestingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<LoadTest>> {\n const raw = await this.transport.request<{\n configs?: LoadTest[];\n items?: LoadTest[];\n nextToken?: string | null;\n }>('GET', '/testing/load-tests', { params, requestOptions });\n return new Page(raw.configs ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(loadTestId: string, requestOptions?: RequestOptions): Promise<LoadTest> {\n // GET /testing/load-tests/{id} returns the config fields flat with a\n // `testConfig` sibling — not wrapped.\n return await this.transport.request('GET', `/testing/load-tests/${loadTestId}`, {\n requestOptions,\n });\n }\n\n async update(\n loadTestId: string,\n body: UpdateLoadTestRequest,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n // PUT returns `{ config: updated }` — unwrap.\n const raw = await this.transport.request<{ config?: LoadTest } & LoadTest>(\n 'PUT', `/testing/load-tests/${loadTestId}`, { body, requestOptions }\n );\n return raw.config ?? raw;\n }\n\n async delete(loadTestId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/load-tests/${loadTestId}`, { requestOptions });\n }\n\n async estimate(\n body: LoadTestEstimateRequest,\n requestOptions?: RequestOptions\n ): Promise<LoadTestEstimate> {\n return await this.transport.request('POST', '/testing/load-tests/estimate', {\n body,\n requestOptions,\n });\n }\n\n async start(\n loadTestId: string,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n return await this.transport.request('POST', `/testing/load-tests/${loadTestId}/start`, {\n requestOptions,\n });\n }\n\n async abort(\n loadTestId: string,\n requestOptions?: RequestOptions\n ): Promise<LoadTest> {\n return await this.transport.request('POST', `/testing/load-tests/${loadTestId}/abort`, {\n requestOptions,\n });\n }\n\n async status(\n loadTestId: string,\n requestOptions?: RequestOptions\n ): Promise<LoadTestStatusResponse> {\n return await this.transport.request('GET', `/testing/load-tests/${loadTestId}/status`, {\n requestOptions,\n });\n }\n\n listRuns(\n params: LoadTestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<LoadTestRun> {\n return new Paginator<LoadTestRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/load-tests/runs', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n async waitForComplete(\n loadTestId: string,\n opts: LoadTestingWaitForOptions = {}\n ): Promise<LoadTestStatusResponse> {\n return await waitFor<LoadTestStatusResponse>({\n fetch: () => this.status(loadTestId, opts.requestOptions),\n isTerminal: (s) => TERMINAL_STATUSES.has(s.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateMappingJobRequest,\n MappingJob,\n MappingJobListItem,\n MappingListParams,\n MappingPath,\n MappingRun,\n MappingStep,\n MappingTree,\n ProbeResult,\n TreeFormat,\n UpdateMappingJobRequest,\n} from '../types/mapping.js';\n\nconst TERMINAL_STATUSES = new Set(['completed', 'failed', 'limited', 'cancelled']);\n\nexport interface WaitForCompleteOptions {\n timeout?: number; // ms\n pollInterval?: number; // ms\n intervalCap?: number; // ms\n onUpdate?: (job: MappingJob) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class MappingResource extends Resource {\n list(\n params: MappingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<MappingJobListItem> {\n return new Paginator<MappingJobListItem>({\n fetchPage: async (p) => {\n const { nextToken, cursor, ...rest } = p as MappingListParams & { nextToken?: string };\n const raw = await this.transport.request<{\n items?: MappingJobListItem[];\n nextCursor?: string | null;\n nextToken?: string | null;\n }>('GET', '/mapping', {\n params: { ...rest, cursor: cursor ?? nextToken },\n requestOptions,\n });\n // Server returns nextCursor; nextToken is a back-compat alias. Normalise\n // to nextToken so the Paginator can continue.\n return { items: raw.items ?? [], nextToken: raw.nextCursor ?? raw.nextToken ?? null };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: MappingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<MappingJobListItem>> {\n const { nextToken, cursor, ...rest } = params;\n const raw = await this.transport.request<{\n items?: MappingJobListItem[];\n nextCursor?: string | null;\n nextToken?: string | null;\n }>('GET', '/mapping', {\n params: { ...rest, cursor: cursor ?? nextToken },\n requestOptions,\n });\n return new Page(raw.items ?? [], raw.nextCursor ?? raw.nextToken ?? null);\n }\n\n async get(jobId: string, requestOptions?: RequestOptions): Promise<MappingJob> {\n return await this.transport.request('GET', `/mapping/${jobId}`, { requestOptions });\n }\n\n async create(\n body: CreateMappingJobRequest,\n requestOptions?: RequestOptions\n ): Promise<MappingJob> {\n return await this.transport.request('POST', '/mapping', { body, requestOptions });\n }\n\n async update(\n jobId: string,\n body: UpdateMappingJobRequest,\n requestOptions?: RequestOptions\n ): Promise<MappingJob> {\n return await this.transport.request('PATCH', `/mapping/${jobId}`, { body, requestOptions });\n }\n\n async delete(jobId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/mapping/${jobId}`, { requestOptions });\n }\n\n async start(jobId: string, requestOptions?: RequestOptions): Promise<MappingJob> {\n return await this.transport.request('POST', `/mapping/${jobId}/start`, { requestOptions });\n }\n\n async cancel(jobId: string, requestOptions?: RequestOptions): Promise<MappingJob> {\n return await this.transport.request('POST', `/mapping/${jobId}/cancel`, { requestOptions });\n }\n\n async attest(\n jobId: string,\n requestOptions?: RequestOptions\n ): Promise<{ attested: boolean }> {\n return await this.transport.request('POST', '/mapping/attest', {\n body: { jobId },\n requestOptions,\n });\n }\n\n // Trigger on-demand security-probe analysis on a completed mapping run.\n // Returns the queue summary { message, probeCount }; poll the run / steps\n // afterwards to see classified results land.\n async probe(\n jobId: string,\n runId: string,\n requestOptions?: RequestOptions,\n ): Promise<ProbeResult> {\n return await this.transport.request(\n 'POST',\n `/mapping/${jobId}/runs/${runId}/probe`,\n { requestOptions },\n );\n }\n\n steps(\n jobId: string,\n params: { limit?: number; nextToken?: string } = {},\n requestOptions?: RequestOptions\n ): Paginator<MappingStep> {\n return new Paginator<MappingStep>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/mapping/${jobId}/steps`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n });\n }\n\n async tree(\n jobId: string,\n opts: { format?: TreeFormat } = {},\n requestOptions?: RequestOptions\n ): Promise<MappingTree> {\n return await this.transport.request('GET', `/mapping/${jobId}/tree`, {\n params: { format: opts.format ?? 'tree' },\n requestOptions,\n });\n }\n\n runs(\n jobId: string,\n params: { limit?: number; nextToken?: string } = {},\n requestOptions?: RequestOptions\n ): Paginator<MappingRun> {\n return new Paginator<MappingRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/mapping/${jobId}/runs`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n paths(\n jobId: string,\n params: { limit?: number; nextToken?: string } = {},\n requestOptions?: RequestOptions\n ): Paginator<MappingPath> {\n return new Paginator<MappingPath>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/mapping/${jobId}/paths`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'rules',\n });\n }\n\n async updatePath(\n jobId: string,\n path: string,\n body: Record<string, unknown>,\n requestOptions?: RequestOptions\n ): Promise<MappingPath> {\n return await this.transport.request(\n 'PATCH',\n `/mapping/${jobId}/paths/${encodeURIComponent(path)}`,\n { body, requestOptions }\n );\n }\n\n async deletePath(\n jobId: string,\n path: string,\n requestOptions?: RequestOptions\n ): Promise<void> {\n await this.transport.request(\n 'DELETE',\n `/mapping/${jobId}/paths/${encodeURIComponent(path)}`,\n { requestOptions }\n );\n }\n\n async remap(\n jobId: string,\n path: string,\n requestOptions?: RequestOptions\n ): Promise<MappingJob> {\n return await this.transport.request(\n 'POST',\n `/mapping/${jobId}/remap/${encodeURIComponent(path)}`,\n { requestOptions }\n );\n }\n\n async waitForComplete(\n jobId: string,\n opts: WaitForCompleteOptions = {}\n ): Promise<MappingJob> {\n return await waitFor<MappingJob>({\n fetch: () => this.get(jobId, opts.requestOptions),\n isTerminal: (job) => TERMINAL_STATUSES.has(job.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n CreateMissionTestConfigRequest,\n MissionTestConfig,\n MissionTestConfigListItem,\n MissionTestConfigListParams,\n UpdateMissionTestConfigRequest,\n} from '../types/missionTestConfigs.js';\nimport type { MissionTestRun } from '../types/missionTests.js';\n\nexport class MissionTestConfigsResource extends Resource {\n list(\n params: MissionTestConfigListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<MissionTestConfigListItem> {\n return new Paginator<MissionTestConfigListItem>({\n fetchPage: async (p) => {\n const { nextToken, cursor, ...rest } = p as MissionTestConfigListParams & {\n nextToken?: string;\n };\n const raw = await this.transport.request<{\n items?: MissionTestConfigListItem[];\n nextCursor?: string | null;\n nextToken?: string | null;\n }>('GET', '/testing/mission-test-configs', {\n params: { ...rest, cursor: cursor ?? nextToken },\n requestOptions,\n });\n return { items: raw.items ?? [], nextToken: raw.nextCursor ?? raw.nextToken ?? null };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: MissionTestConfigListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<MissionTestConfigListItem>> {\n const { nextToken, cursor, ...rest } = params;\n const raw = await this.transport.request<{\n items?: MissionTestConfigListItem[];\n nextCursor?: string | null;\n nextToken?: string | null;\n }>('GET', '/testing/mission-test-configs', {\n params: { ...rest, cursor: cursor ?? nextToken },\n requestOptions,\n });\n return new Page(raw.items ?? [], raw.nextCursor ?? raw.nextToken ?? null);\n }\n\n async create(\n body: CreateMissionTestConfigRequest,\n requestOptions?: RequestOptions\n ): Promise<MissionTestConfig> {\n return await this.transport.request('POST', '/testing/mission-test-configs', { body, requestOptions });\n }\n\n async get(id: string, requestOptions?: RequestOptions): Promise<MissionTestConfig> {\n return await this.transport.request('GET', `/testing/mission-test-configs/${id}`, { requestOptions });\n }\n\n async update(\n id: string,\n body: UpdateMissionTestConfigRequest,\n requestOptions?: RequestOptions\n ): Promise<MissionTestConfig> {\n return await this.transport.request('PATCH', `/testing/mission-test-configs/${id}`, {\n body,\n requestOptions,\n });\n }\n\n async delete(id: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/mission-test-configs/${id}`, { requestOptions });\n }\n\n // Launch a mission test run from a saved config. The returned run is freeform-shaped.\n async run(id: string, requestOptions?: RequestOptions): Promise<MissionTestRun> {\n return await this.transport.request('POST', `/testing/mission-test-configs/${id}/runs`, { requestOptions });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n CreateMissionTestRequest,\n MissionTestDefaults,\n MissionTestListParams,\n MissionTestRun,\n} from '../types/missionTests.js';\n\nexport class MissionTestsResource extends Resource {\n list(\n params: MissionTestListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<MissionTestRun> {\n return new Paginator<MissionTestRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/mission-tests', { params: p, requestOptions }),\n params: { ...params },\n });\n }\n\n async listPage(\n params: MissionTestListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<MissionTestRun>> {\n const raw = await this.transport.request<{ items: MissionTestRun[]; nextToken: string | null }>(\n 'GET',\n '/testing/mission-tests',\n { params, requestOptions },\n );\n return new Page(raw.items, raw.nextToken);\n }\n\n async create(\n body: CreateMissionTestRequest,\n requestOptions?: RequestOptions\n ): Promise<MissionTestRun> {\n return await this.transport.request('POST', '/testing/mission-tests', { body, requestOptions });\n }\n\n // Returns 503 with code='CATALOG_NOT_READY' until the mission-tester service\n // publishes its SSM payload. Callers can catch and retry, or fall back to a\n // known-good default sector/mission/acceptance.\n async getDefaults(requestOptions?: RequestOptions): Promise<MissionTestDefaults> {\n return await this.transport.request('GET', '/testing/mission-tests/defaults', { requestOptions });\n }\n\n async get(id: string, requestOptions?: RequestOptions): Promise<MissionTestRun> {\n return await this.transport.request('GET', `/testing/mission-tests/${id}`, { requestOptions });\n }\n\n async cancel(id: string, requestOptions?: RequestOptions): Promise<MissionTestRun> {\n return await this.transport.request('POST', `/testing/mission-tests/${id}/cancel`, { requestOptions });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n AddProfileItemRequest,\n CreateProfileRequest,\n Profile,\n ProfileItem,\n ProfileParametersResponse,\n ProfilesByParametersParams,\n ProfilesByParametersResponse,\n ProfilesListParams,\n UpdateProfileItemRequest,\n UpdateProfileRequest,\n} from '../types/profiles.js';\n\nexport class ProfilesResource extends Resource {\n async create(\n body: CreateProfileRequest,\n requestOptions?: RequestOptions\n ): Promise<Profile> {\n return await this.transport.request('POST', '/profiles', { body, requestOptions });\n }\n\n list(\n params: ProfilesListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Profile> {\n return new Paginator<Profile>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/profiles', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'profiles',\n });\n }\n\n async listPage(\n params: ProfilesListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Profile>> {\n const raw = await this.transport.request<{\n profiles?: Profile[];\n items?: Profile[];\n nextToken?: string | null;\n }>('GET', '/profiles', { params, requestOptions });\n return new Page(raw.profiles ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(profileId: string, requestOptions?: RequestOptions): Promise<Profile> {\n return await this.transport.request('GET', `/profiles/${profileId}`, { requestOptions });\n }\n\n async update(\n profileId: string,\n body: UpdateProfileRequest,\n requestOptions?: RequestOptions\n ): Promise<Profile> {\n return await this.transport.request('PUT', `/profiles/${profileId}`, { body, requestOptions });\n }\n\n async delete(profileId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/profiles/${profileId}`, { requestOptions });\n }\n\n async addItem(\n profileId: string,\n body: AddProfileItemRequest,\n requestOptions?: RequestOptions\n ): Promise<ProfileItem> {\n return await this.transport.request('POST', `/profiles/${profileId}/items`, {\n body,\n requestOptions,\n });\n }\n\n async updateItem(\n profileId: string,\n itemId: string,\n body: UpdateProfileItemRequest,\n requestOptions?: RequestOptions\n ): Promise<ProfileItem> {\n return await this.transport.request('PUT', `/profiles/${profileId}/items/${itemId}`, {\n body,\n requestOptions,\n });\n }\n\n async deleteItem(\n profileId: string,\n itemId: string,\n requestOptions?: RequestOptions\n ): Promise<void> {\n await this.transport.request(\n 'DELETE',\n `/profiles/${profileId}/items/${itemId}`,\n { requestOptions }\n );\n }\n\n async listParameters(\n requestOptions?: RequestOptions\n ): Promise<ProfileParametersResponse> {\n return await this.transport.request('GET', '/profiles/parameters', { requestOptions });\n }\n\n async findByParameters(\n params: ProfilesByParametersParams,\n requestOptions?: RequestOptions\n ): Promise<ProfilesByParametersResponse> {\n const labels = Array.isArray(params.labels) ? params.labels.join(',') : params.labels;\n return await this.transport.request('GET', '/profiles/by-parameters', {\n params: { labels },\n requestOptions,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport type {\n CreateScheduleRequest,\n Schedule,\n ScheduleListParams,\n UpdateScheduleRequest,\n} from '../types/scheduler.js';\n\nexport class SchedulerResource extends Resource {\n async create(\n body: CreateScheduleRequest,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('POST', '/schedules', { body, requestOptions });\n }\n\n list(\n params: ScheduleListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Schedule> {\n return new Paginator<Schedule>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/schedules', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'schedules',\n });\n }\n\n async listPage(\n params: ScheduleListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Schedule>> {\n const raw = await this.transport.request<{\n schedules?: Schedule[];\n items?: Schedule[];\n nextToken?: string | null;\n }>('GET', '/schedules', { params, requestOptions });\n return new Page(raw.schedules ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(scheduleId: string, requestOptions?: RequestOptions): Promise<Schedule> {\n return await this.transport.request('GET', `/schedules/${scheduleId}`, { requestOptions });\n }\n\n async update(\n scheduleId: string,\n body: UpdateScheduleRequest,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('PUT', `/schedules/${scheduleId}`, { body, requestOptions });\n }\n\n async delete(scheduleId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/schedules/${scheduleId}`, { requestOptions });\n }\n\n async pause(\n scheduleId: string,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('POST', `/schedules/${scheduleId}/pause`, {\n requestOptions,\n });\n }\n\n async resume(\n scheduleId: string,\n requestOptions?: RequestOptions\n ): Promise<Schedule> {\n return await this.transport.request('POST', `/schedules/${scheduleId}/resume`, {\n requestOptions,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateSweepRequest,\n Sweep,\n SweepRun,\n SweepsListParams,\n UpdateSweepRequest,\n} from '../types/sweeps.js';\n\nconst RUN_TERMINAL_STATUSES = new Set(['completed', 'failed', 'cancelled']);\n\nexport interface SweepsWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (run: SweepRun) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class SweepsResource extends Resource {\n async create(\n body: CreateSweepRequest,\n requestOptions?: RequestOptions\n ): Promise<Sweep> {\n return await this.transport.request('POST', '/testing/sweeps', { body, requestOptions });\n }\n\n list(\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<Sweep> {\n return new Paginator<Sweep>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/sweeps', { params: p, requestOptions }),\n params: { ...params },\n itemsKey: 'sweeps',\n });\n }\n\n async listPage(\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<Sweep>> {\n const raw = await this.transport.request<{\n sweeps?: Sweep[];\n items?: Sweep[];\n nextToken?: string | null;\n }>('GET', '/testing/sweeps', { params, requestOptions });\n return new Page(raw.sweeps ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(sweepId: string, requestOptions?: RequestOptions): Promise<Sweep> {\n return await this.transport.request('GET', `/testing/sweeps/${sweepId}`, { requestOptions });\n }\n\n async update(\n sweepId: string,\n body: UpdateSweepRequest,\n requestOptions?: RequestOptions\n ): Promise<Sweep> {\n return await this.transport.request('PUT', `/testing/sweeps/${sweepId}`, {\n body,\n requestOptions,\n });\n }\n\n async delete(sweepId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/sweeps/${sweepId}`, { requestOptions });\n }\n\n async run(\n sweepId: string,\n requestOptions?: RequestOptions\n ): Promise<SweepRun> {\n return await this.transport.request('POST', `/testing/sweeps/${sweepId}/run`, {\n requestOptions,\n });\n }\n\n runs(\n sweepId: string,\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<SweepRun> {\n return new Paginator<SweepRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', `/testing/sweeps/${sweepId}/runs`, {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n listRuns(\n params: SweepsListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<SweepRun> {\n return new Paginator<SweepRun>({\n fetchPage: async (p) =>\n await this.transport.request('GET', '/testing/sweep-runs', {\n params: p,\n requestOptions,\n }),\n params: { ...params },\n itemsKey: 'runs',\n });\n }\n\n async getRun(runId: string, requestOptions?: RequestOptions): Promise<SweepRun> {\n return await this.transport.request('GET', `/testing/sweep-runs/${runId}`, { requestOptions });\n }\n\n async waitForRun(\n runId: string,\n opts: SweepsWaitForOptions = {}\n ): Promise<SweepRun> {\n return await waitFor<SweepRun>({\n fetch: () => this.getRun(runId, opts.requestOptions),\n isTerminal: (run) => RUN_TERMINAL_STATUSES.has(run.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n","import { Resource } from '../resource.js';\nimport type { Transport } from '../transport.js';\nimport type { RequestOptions } from '../requestOptions.js';\nimport { Paginator, Page } from '../pagination.js';\nimport { waitFor } from '../polling.js';\nimport type {\n CreateTestConfigRequest,\n CreateTestJobRequest,\n CreateTestRunRequest,\n ListVoicesResponse,\n MissionTestRunResponse,\n TestConfig,\n TestingListParams,\n TestJob,\n TestRun,\n TestRunAggregateParams,\n TestRunAggregateResponse,\n TestRunListItem,\n TestRunListParams,\n UpdateTestConfigRequest,\n} from '../types/testing.js';\n\nconst RUN_TERMINAL_STATUSES = new Set(['completed', 'failed', 'cancelled']);\n\nexport interface TestingWaitForOptions {\n timeout?: number;\n pollInterval?: number;\n intervalCap?: number;\n onUpdate?: (run: TestRun) => void;\n requestOptions?: RequestOptions;\n}\n\nexport class TestingConfigsResource extends Resource {\n async create(\n body: CreateTestConfigRequest,\n requestOptions?: RequestOptions\n ): Promise<TestConfig> {\n return await this.transport.request('POST', '/testing/configs', { body, requestOptions });\n }\n\n list(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<TestConfig> {\n return new Paginator<TestConfig>({\n fetchPage: async (p) => {\n // Server returns { configs: [...] } rather than { items, nextToken }.\n const raw = await this.transport.request<{\n configs?: TestConfig[];\n items?: TestConfig[];\n }>('GET', '/testing/configs', { params: p, requestOptions });\n return { items: raw.configs ?? raw.items ?? [], nextToken: null };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<TestConfig>> {\n const raw = await this.transport.request<{\n configs?: TestConfig[];\n items?: TestConfig[];\n nextToken?: string | null;\n }>('GET', '/testing/configs', { params, requestOptions });\n return new Page(raw.configs ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(configId: string, requestOptions?: RequestOptions): Promise<TestConfig> {\n return await this.transport.request('GET', `/testing/configs/${configId}`, { requestOptions });\n }\n\n async update(\n configId: string,\n body: UpdateTestConfigRequest,\n requestOptions?: RequestOptions\n ): Promise<TestConfig> {\n return await this.transport.request('PUT', `/testing/configs/${configId}`, {\n body,\n requestOptions,\n });\n }\n\n async delete(configId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/configs/${configId}`, { requestOptions });\n }\n}\n\nexport class TestingJobsResource extends Resource {\n async create(\n body: CreateTestJobRequest,\n requestOptions?: RequestOptions\n ): Promise<TestJob> {\n return await this.transport.request('POST', '/testing/jobs', { body, requestOptions });\n }\n\n list(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<TestJob> {\n return new Paginator<TestJob>({\n fetchPage: async (p) => {\n // Server returns { jobs: [...] } rather than { items, nextToken }.\n const raw = await this.transport.request<{\n jobs?: TestJob[];\n items?: TestJob[];\n }>('GET', '/testing/jobs', { params: p, requestOptions });\n return { items: raw.jobs ?? raw.items ?? [], nextToken: null };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: TestingListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<TestJob>> {\n const raw = await this.transport.request<{\n jobs?: TestJob[];\n items?: TestJob[];\n nextToken?: string | null;\n }>('GET', '/testing/jobs', { params, requestOptions });\n return new Page(raw.jobs ?? raw.items ?? [], raw.nextToken ?? null);\n }\n\n async get(jobId: string, requestOptions?: RequestOptions): Promise<TestJob> {\n return await this.transport.request('GET', `/testing/jobs/${jobId}`, { requestOptions });\n }\n\n async delete(jobId: string, requestOptions?: RequestOptions): Promise<void> {\n await this.transport.request('DELETE', `/testing/jobs/${jobId}`, { requestOptions });\n }\n}\n\nexport class TestingRunsResource extends Resource {\n async create(\n body: CreateTestRunRequest,\n requestOptions?: RequestOptions\n ): Promise<TestRun> {\n // POST returns { message, run } — unwrap the run object.\n const raw = await this.transport.request<{ message?: string; run?: TestRun } & TestRun>(\n 'POST', '/testing/runs', { body, requestOptions }\n );\n return raw.run ?? raw;\n }\n\n list(\n params: TestRunListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<TestRunListItem> {\n return new Paginator<TestRunListItem>({\n fetchPage: async (p) => {\n const { nextToken, cursor, ...rest } = p as TestRunListParams & { nextToken?: string };\n // Server returns { runs: [...], nextCursor? } rather than { items, nextToken }.\n const raw = await this.transport.request<{\n runs?: TestRunListItem[];\n items?: TestRunListItem[];\n nextCursor?: string | null;\n nextToken?: string | null;\n }>('GET', '/testing/runs', {\n params: { ...rest, cursor: cursor ?? nextToken },\n requestOptions,\n });\n return {\n items: raw.runs ?? raw.items ?? [],\n nextToken: raw.nextCursor ?? raw.nextToken ?? null,\n };\n },\n params: { ...params },\n });\n }\n\n async listPage(\n params: TestRunListParams = {},\n requestOptions?: RequestOptions\n ): Promise<Page<TestRunListItem>> {\n const { nextToken, cursor, ...rest } = params;\n const raw = await this.transport.request<{\n runs?: TestRunListItem[];\n items?: TestRunListItem[];\n nextCursor?: string | null;\n nextToken?: string | null;\n }>('GET', '/testing/runs', {\n params: { ...rest, cursor: cursor ?? nextToken },\n requestOptions,\n });\n return new Page(raw.runs ?? raw.items ?? [], raw.nextCursor ?? raw.nextToken ?? null);\n }\n\n /** GET /testing/runs/aggregate — grouped counts over test runs. */\n async aggregate(\n params: TestRunAggregateParams,\n requestOptions?: RequestOptions\n ): Promise<TestRunAggregateResponse> {\n return await this.transport.request('GET', '/testing/runs/aggregate', {\n params,\n requestOptions,\n });\n }\n\n async get(runId: string, requestOptions?: RequestOptions): Promise<TestRun> {\n return await this.transport.request('GET', `/testing/runs/${runId}`, { requestOptions });\n }\n\n async waitForRun(\n runId: string,\n opts: TestingWaitForOptions = {}\n ): Promise<TestRun> {\n return await waitFor<TestRun>({\n fetch: () => this.get(runId, opts.requestOptions),\n isTerminal: (run) => run.status !== undefined && RUN_TERMINAL_STATUSES.has(run.status),\n timeout: opts.timeout,\n initialInterval: opts.pollInterval,\n intervalCap: opts.intervalCap,\n onUpdate: opts.onUpdate,\n });\n }\n}\n\nexport class TestingResource extends Resource {\n readonly configs: TestingConfigsResource;\n readonly jobs: TestingJobsResource;\n readonly runs: TestingRunsResource;\n\n constructor(transport: Transport) {\n super(transport);\n this.configs = new TestingConfigsResource(transport);\n this.jobs = new TestingJobsResource(transport);\n this.runs = new TestingRunsResource(transport);\n }\n\n /** Paginated, filtered list of test runs (alias for `testing.runs.list()`). */\n listRuns(\n params: TestRunListParams = {},\n requestOptions?: RequestOptions\n ): Paginator<TestRunListItem> {\n return this.runs.list(params, requestOptions);\n }\n\n /** GET /testing/voices — operator-enabled voices a mission test may use. */\n async listVoices(requestOptions?: RequestOptions): Promise<ListVoicesResponse> {\n return await this.transport.request('GET', '/testing/voices', { requestOptions });\n }\n\n /** GET /testing/runs/aggregate — grouped counts over test runs. */\n async aggregateRuns(\n params: TestRunAggregateParams,\n requestOptions?: RequestOptions\n ): Promise<TestRunAggregateResponse> {\n return await this.runs.aggregate(params, requestOptions);\n }\n\n /** GET /testing/mission-test-runs/{id} — mission-strict run detail (no steps). */\n async getMissionTestRun(\n id: string,\n requestOptions?: RequestOptions\n ): Promise<MissionTestRunResponse> {\n return await this.transport.request('GET', `/testing/mission-test-runs/${id}`, {\n requestOptions,\n });\n }\n}\n","import { resolveConfig, type NopaqueOptions } from './config.js';\nimport { Transport } from './transport.js';\nimport { AudioResource } from './resources/audio.js';\nimport { BatchesResource } from './resources/batches.js';\nimport { ComplianceResource } from './resources/compliance.js';\nimport { DatasetsResource } from './resources/datasets.js';\nimport { DigitalComplianceResource } from './resources/digitalCompliance.js';\nimport { DigitalTestConfigsResource } from './resources/digitalTestConfigs.js';\nimport { DigitalTestingResource } from './resources/digitalTesting.js';\nimport { EnrichmentResource } from './resources/enrichment.js';\nimport { LoadTestingResource } from './resources/loadTesting.js';\nimport { MappingResource } from './resources/mapping.js';\nimport { MissionTestConfigsResource } from './resources/missionTestConfigs.js';\nimport { MissionTestsResource } from './resources/missionTests.js';\nimport { ProfilesResource } from './resources/profiles.js';\nimport { SchedulerResource } from './resources/scheduler.js';\nimport { SweepsResource } from './resources/sweeps.js';\nimport { TestingResource } from './resources/testing.js';\n\nexport class Nopaque {\n readonly mapping: MappingResource;\n readonly audio: AudioResource;\n readonly profiles: ProfilesResource;\n readonly testing: TestingResource;\n readonly batches: BatchesResource;\n readonly sweeps: SweepsResource;\n readonly datasets: DatasetsResource;\n readonly loadTesting: LoadTestingResource;\n readonly scheduler: SchedulerResource;\n readonly enrichment: EnrichmentResource;\n readonly missionTests: MissionTestsResource;\n readonly missionTestConfigs: MissionTestConfigsResource;\n readonly compliance: ComplianceResource;\n readonly digitalTesting: DigitalTestingResource;\n readonly digitalTestConfigs: DigitalTestConfigsResource;\n readonly digitalCompliance: DigitalComplianceResource;\n\n private readonly transport: Transport;\n\n constructor(options: NopaqueOptions = {}) {\n const config = resolveConfig(options);\n this.transport = new Transport(config);\n this.mapping = new MappingResource(this.transport);\n this.audio = new AudioResource(this.transport);\n this.profiles = new ProfilesResource(this.transport);\n this.testing = new TestingResource(this.transport);\n this.batches = new BatchesResource(this.transport);\n this.sweeps = new SweepsResource(this.transport);\n this.datasets = new DatasetsResource(this.transport);\n this.loadTesting = new LoadTestingResource(this.transport);\n this.scheduler = new SchedulerResource(this.transport);\n this.enrichment = new EnrichmentResource(this.transport);\n this.missionTests = new MissionTestsResource(this.transport);\n this.missionTestConfigs = new MissionTestConfigsResource(this.transport);\n this.compliance = new ComplianceResource(this.transport);\n this.digitalTesting = new DigitalTestingResource(this.transport);\n this.digitalTestConfigs = new DigitalTestConfigsResource(this.transport);\n this.digitalCompliance = new DigitalComplianceResource(this.transport);\n }\n\n close(): void {\n // Reserved for future cleanup; platform fetch requires no teardown.\n }\n}\n"],"mappings":"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","names":["import_node_fs","fsp","fsp","TERMINAL_STATUSES","RUN_TERMINAL_STATUSES","RUN_TERMINAL_STATUSES"]}
|