@nopaque/sdk 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/dist/index.cjs +1192 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +894 -0
- package/dist/index.d.ts +894 -0
- package/dist/index.mjs +1149 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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 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":["fsp","fsp","TERMINAL_STATUSES","RUN_TERMINAL_STATUSES","RUN_TERMINAL_STATUSES"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nopaque/sdk",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Official Node.js SDK for the Nopaque API",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Nopaque <support@nopaque.co.uk>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/nopaque/node-sdk.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://nopaque.co.uk/docs/sdks",
|
|
12
|
+
"bugs": "https://github.com/nopaque/node-sdk/issues",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"nopaque",
|
|
15
|
+
"ivr",
|
|
16
|
+
"sdk",
|
|
17
|
+
"api"
|
|
18
|
+
],
|
|
19
|
+
"type": "module",
|
|
20
|
+
"main": "./dist/index.cjs",
|
|
21
|
+
"module": "./dist/index.mjs",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"import": "./dist/index.mjs",
|
|
27
|
+
"require": "./dist/index.cjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"README.md",
|
|
33
|
+
"LICENSE",
|
|
34
|
+
"CHANGELOG.md"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=20"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^20.14.0",
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^7.17.0",
|
|
42
|
+
"@typescript-eslint/parser": "^7.17.0",
|
|
43
|
+
"eslint": "^8.57.0",
|
|
44
|
+
"msw": "^2.3.0",
|
|
45
|
+
"tsup": "^8.2.0",
|
|
46
|
+
"typescript": "^5.5.0",
|
|
47
|
+
"vitest": "^2.0.0"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "tsup",
|
|
51
|
+
"dev": "tsup --watch",
|
|
52
|
+
"test": "vitest run",
|
|
53
|
+
"test:watch": "vitest",
|
|
54
|
+
"test:integration": "vitest run --dir tests/integration",
|
|
55
|
+
"lint": "eslint src tests",
|
|
56
|
+
"type-check": "tsc --noEmit"
|
|
57
|
+
}
|
|
58
|
+
}
|