@dalea/sdk 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts","../src/core/errors.ts","../src/core/retry.ts","../src/core/transport.ts","../src/auth/workspace.ts","../src/auth/api-key.ts","../src/auth/session-cookie.ts","../src/auth/bearer.ts","../src/resources/base.ts","../src/core/pagination.ts","../src/resources/data/tables.ts","../src/resources/data/columns.ts","../src/resources/data/naming-schemes.ts","../src/resources/data/objects.ts","../src/resources/data/saved-queries.ts","../src/resources/data/query.ts","../src/resources/data/results.ts","../src/resources/data/schema.ts","../src/resources/data/environments.ts","../src/resources/data/import-mappings.ts","../src/resources/data/index.ts","../src/client.ts","../src/auth/oauth-pkce.ts","../src/auth/oauth-client-credentials.ts","../src/core/sse.ts"],"names":["enc"],"mappings":"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","file":"index.js","sourcesContent":["import type { Credential, Runtime } from './auth/credentials.js';\nimport type { DaleaError } from './core/errors.js';\n\n// Injected at build time by tsup (define) from package.json `version`, so the\n// User-Agent never drifts from the published version. Undefined under vitest /\n// non-bundled runs (`typeof` is the one safe way to read a possibly-undeclared\n// global) — falls back to a dev sentinel.\ndeclare const __DALEA_SDK_VERSION__: string | undefined;\nexport const SDK_VERSION: string =\n typeof __DALEA_SDK_VERSION__ === 'string' ? __DALEA_SDK_VERSION__ : '0.0.0-dev';\n\n/**\n * Backend service domains the client can address. A single `baseUrl` serves\n * every domain; `serviceUrls` can override the base URL per domain when they\n * are hosted on separate origins.\n */\nexport type ServiceDomain = 'data';\n\nexport interface Interceptors {\n onRequest?: (ctx: { url: string; method: string; headers: Headers }) => void;\n onResponse?: (res: Response) => void;\n onError?: (err: DaleaError) => void;\n}\n\nexport interface ClientConfig {\n /** Default '' (browser same-origin); required in Node. */\n baseUrl?: string;\n /**\n * Per-service base URL overrides. A domain not listed here falls back to\n * `baseUrl`. Use this when domains are hosted on separate origins; otherwise a\n * single `baseUrl` routes every `/api/v1/*` path.\n */\n serviceUrls?: Partial<Record<ServiceDomain, string>>;\n /** Shorthand -> ApiKeyCredential (X-API-Key). */\n apiKey?: string;\n /** Shorthand -> SessionCookieCredential (browser, same-origin). */\n sessionCookie?: boolean;\n /** Explicit credential (the forward-compatible path for OAuth/publishable keys). */\n credential?: Credential;\n /** Default X-Workspace (overridable per call). */\n workspace?: string;\n /** Max transparent retries on a throttling response (429/503). Default 2. */\n maxRetries?: number;\n /**\n * Retry writes (POST/PATCH/DELETE) on 429/503, not just idempotent GETs.\n * Default true — safe because our throttling responses are pre-execution\n * rejections (the write never ran). Set false for strict, no-replay callers.\n */\n retryWrites?: boolean;\n /** Base delay (ms) for exponential backoff when the server sends no Retry-After. Default 500. */\n retryBaseDelayMs?: number;\n /** Ceiling on any single backoff sleep (ms); a longer Retry-After fails fast. Default 20_000. */\n maxRetryDelayMs?: number;\n timeoutMs?: number;\n /** Injectable for tests / proxying. Defaults to global fetch. */\n fetch?: typeof fetch;\n interceptors?: Interceptors;\n /** RESERVED, unused in v1 — threads an X-Dalea-Version header when set later. */\n apiVersion?: string;\n}\n\nexport interface ResolvedConfig {\n baseUrl: string;\n maxRetries: number;\n retryWrites: boolean;\n retryBaseDelayMs: number;\n maxRetryDelayMs: number;\n timeoutMs: number;\n fetch: typeof fetch;\n interceptors: Interceptors;\n runtime: Runtime;\n apiVersion?: string;\n}\n\nexport function detectRuntime(): Runtime {\n if (typeof (globalThis as { window?: unknown }).window !== 'undefined'\n && typeof (globalThis as { document?: unknown }).document !== 'undefined') {\n return 'browser';\n }\n if (typeof (globalThis as { EdgeRuntime?: unknown }).EdgeRuntime !== 'undefined') return 'edge';\n return 'node';\n}\n\nexport function resolveConfig(cfg: ClientConfig): ResolvedConfig {\n // Bind the global default to its origin: the transport invokes the resolved\n // fetch as a property (`config.fetch(url, …)`), which would rebind `this` to\n // the config object. Browsers enforce that `window.fetch` keeps `this ===\n // Window` and throw \"'fetch' called on an object that does not implement\n // interface Window\" otherwise (Node/undici is lenient, so this only bites in\n // the browser). A caller-supplied `cfg.fetch` is used as-is — its binding is\n // the caller's responsibility.\n const fetchImpl = cfg.fetch ?? globalThis.fetch?.bind(globalThis);\n if (!fetchImpl) {\n throw new Error('DaleaClient: no global fetch available; provide config.fetch');\n }\n return {\n baseUrl: cfg.baseUrl ?? '',\n maxRetries: cfg.maxRetries ?? 2,\n retryWrites: cfg.retryWrites ?? true,\n retryBaseDelayMs: cfg.retryBaseDelayMs ?? 500,\n maxRetryDelayMs: cfg.maxRetryDelayMs ?? 20_000,\n timeoutMs: cfg.timeoutMs ?? 30_000,\n fetch: fetchImpl,\n interceptors: cfg.interceptors ?? {},\n runtime: detectRuntime(),\n apiVersion: cfg.apiVersion,\n };\n}\n","/** Error codes the backend returns for a permission shortfall (user / app / api-key). */\nexport const PERMISSION_DENIED_CODES = [\n 'PERMISSION_DENIED',\n 'APP_PERMISSION_DENIED',\n 'API_KEY_PERMISSION_DENIED',\n] as const;\n\nexport type DaleaErrorData = Record<string, unknown>;\n\n/** Base error. Carries the same fields the platform's ApiError model does. */\nexport class DaleaError extends Error {\n constructor(\n public readonly status: number,\n public readonly code: string,\n message: string,\n public readonly data?: DaleaErrorData,\n /** True when the failing request was a mutation (non-GET). */\n public readonly isMutation = false,\n ) {\n super(message);\n this.name = new.target.name;\n }\n}\n\nexport class DaleaAuthError extends DaleaError {} // 401\nexport class DaleaBannedError extends DaleaError {} // 403 USER_BANNED\nexport class DaleaPermissionError extends DaleaError {} // 403 PERMISSION_DENIED & friends\nexport class DaleaArchivedError extends DaleaError {} // 400 ENTITY_ARCHIVED\nexport class DaleaNotFoundError extends DaleaError {} // 404\nexport class DaleaConflictError extends DaleaError {} // 409\nexport class DaleaValidationError extends DaleaError {} // 400 / 422\nexport class DaleaQuotaError extends DaleaError {} // 507\nexport class DaleaServerError extends DaleaError {} // 5xx\nexport class DaleaNetworkError extends DaleaError {} // fetch threw / no response\n\nexport class DaleaRateLimitError extends DaleaError { // 429\n readonly retryAfterSeconds?: number;\n constructor(\n status: number,\n code: string,\n message: string,\n data?: DaleaErrorData,\n isMutation = false,\n retryAfterSeconds?: number,\n ) {\n super(status, code, message, data, isMutation);\n this.retryAfterSeconds = retryAfterSeconds;\n }\n}\n\n/** Maps an HTTP failure into the right typed error, mirroring client.ts's branches. */\nexport function mapError(\n status: number,\n code: string,\n message: string,\n data: DaleaErrorData,\n isMutation: boolean,\n): DaleaError {\n switch (status) {\n case 401:\n return new DaleaAuthError(status, code, message, data, isMutation);\n case 403:\n if (code === 'USER_BANNED') return new DaleaBannedError(status, code, message, data, isMutation);\n return new DaleaPermissionError(status, code, message, data, isMutation);\n case 404:\n return new DaleaNotFoundError(status, code, message, data, isMutation);\n case 409:\n return new DaleaConflictError(status, code, message, data, isMutation);\n case 429: {\n const ra = typeof data.retry_after_seconds === 'number' ? data.retry_after_seconds : undefined;\n return new DaleaRateLimitError(status, code, message, data, isMutation, ra);\n }\n case 507:\n return new DaleaQuotaError(status, code, message, data, isMutation);\n case 400:\n if (code === 'ENTITY_ARCHIVED') return new DaleaArchivedError(status, code, message, data, isMutation);\n return new DaleaValidationError(status, code, message, data, isMutation);\n case 422:\n return new DaleaValidationError(status, code, message, data, isMutation);\n default:\n if (status >= 500) return new DaleaServerError(status, code, message, data, isMutation);\n return new DaleaError(status, code, message, data, isMutation);\n }\n}\n","import type { HttpMethod } from './types.js';\n\n/**\n * The knobs that govern transparent retry. `ResolvedConfig` satisfies this\n * structurally, so the transport passes its config straight through.\n */\nexport interface RetryPolicy {\n maxRetries: number;\n /** Retry writes (POST/PATCH/DELETE), not just idempotent GETs. Default true. */\n retryWrites: boolean;\n /** Base delay for the exponential-backoff fallback (no server hint). */\n retryBaseDelayMs: number;\n /** Ceiling on any single backoff sleep, and the fail-fast threshold below. */\n maxRetryDelayMs: number;\n}\n\n// Statuses we replay: 429 (rate limited) and 503 (service unavailable). Both are\n// rejections at the rate-limit / gateway layer — the request never reached the\n// handler — so replaying a mutation is safe (there is nothing to duplicate).\nconst RETRYABLE_STATUS = new Set([429, 503]);\n\n/**\n * Whether a failed response is a candidate for another attempt. GETs always\n * retry; writes retry unless the caller opted out via `retryWrites: false`.\n */\nexport function shouldAttemptRetry(\n status: number,\n method: HttpMethod,\n attempt: number,\n policy: RetryPolicy,\n): boolean {\n return (\n RETRYABLE_STATUS.has(status) &&\n attempt < policy.maxRetries &&\n (method === 'GET' || policy.retryWrites)\n );\n}\n\n/**\n * The backoff delay (ms) for the next attempt, or `null` to stop retrying and\n * surface the error. Precedence:\n * 1. A server `Retry-After` (header seconds, else body `retry_after_seconds`)\n * is authoritative — honoured as a floor plus a little jitter so many\n * clients handed the same value don't retry in lockstep. If that hint\n * exceeds `maxRetryDelayMs` we fail fast (return null) rather than block the\n * app for minutes on, say, a daily-cap reset.\n * 2. No hint → full-jitter exponential backoff: random(0, base·2^attempt),\n * capped at `maxRetryDelayMs`. Full jitter spreads retries across the whole\n * window and avoids a synchronized \"thundering herd\".\n */\nexport function computeRetryDelay(\n attempt: number,\n retryAfterHeader: string | null,\n retryAfterBody: unknown,\n policy: RetryPolicy,\n random: () => number = Math.random,\n): number | null {\n const serverHintMs = parseRetryAfterMs(retryAfterHeader, retryAfterBody);\n if (serverHintMs !== null && serverHintMs > policy.maxRetryDelayMs) return null;\n\n const expBase = Math.min(policy.maxRetryDelayMs, policy.retryBaseDelayMs * 2 ** attempt);\n if (serverHintMs !== null) {\n return Math.min(policy.maxRetryDelayMs, serverHintMs + random() * Math.min(expBase, 1000));\n }\n return random() * expBase;\n}\n\n/** Parse a server retry hint into ms: `Retry-After` header wins, else the body. */\nfunction parseRetryAfterMs(header: string | null, body: unknown): number | null {\n const parsed = header ? parseInt(header, 10) : NaN;\n if (!Number.isNaN(parsed)) return Math.max(0, parsed) * 1000;\n if (typeof body === 'number' && Number.isFinite(body)) return Math.max(0, body) * 1000;\n return null;\n}\n\n/**\n * A cancellable sleep. Resolves after `ms`, or early if `signal` aborts — so a\n * caller who cancels mid-backoff isn't left waiting out the delay (the next\n * `fetch` then sees the aborted signal and throws immediately).\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal?.aborted) return resolve();\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n","import type { ResolvedConfig } from '../config.js';\nimport { SDK_VERSION } from '../config.js';\nimport type { Credential, RequestContext } from '../auth/credentials.js';\nimport type { WorkspaceContext } from '../auth/workspace.js';\nimport type { CallOptions, HttpMethod } from './types.js';\nimport { DaleaNetworkError, mapError } from './errors.js';\nimport { computeRetryDelay, shouldAttemptRetry, sleep } from './retry.js';\n\n/**\n * The runtime-agnostic transport — a faithful port of apps/web/src/lib/api/client.ts:\n * GET dedup, header assembly, X-Workspace injection, set-auth-token rotation, a\n * backoff retry for throttling (429/503), and typed error mapping. The five web\n * events become interceptor hooks (onResponse / onError) configured by the consumer.\n */\nexport class Transport {\n private readonly inflight = new Map<string, Promise<unknown>>();\n\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly credential: Credential,\n private readonly workspace: WorkspaceContext,\n ) {}\n\n request<T>(method: HttpMethod, path: string, opts: CallOptions = {}): Promise<T> {\n const url = this.cfg.baseUrl + path + buildQuery(opts.query);\n\n // A raw Response body is single-use, so concurrent identical downloads must\n // not share one in-flight promise — skip dedup when rawResponse is set.\n if (method === 'GET' && !opts.skipDedup && !opts.rawResponse) {\n const cred = opts.credential ?? this.credential;\n const ws = opts.workspace ?? this.workspace.get() ?? '';\n const dedupKey = `${cred.key?.() ?? 'anon'}:ws-${ws}:${url}`;\n const existing = this.inflight.get(dedupKey);\n if (existing) return existing as Promise<T>;\n const p = this.execute<T>(method, url, opts);\n this.inflight.set(dedupKey, p);\n // Settle handler that consumes BOTH outcomes — a bare `.finally` would\n // spawn a second chain that rejects unhandled when the request errors.\n const cleanup = () => this.inflight.delete(dedupKey);\n p.then(cleanup, cleanup);\n return p;\n }\n return this.execute<T>(method, url, opts);\n }\n\n private async execute<T>(\n method: HttpMethod,\n url: string,\n opts: CallOptions,\n attempt = 0,\n refreshed = false,\n ): Promise<T> {\n // Raw bodies (FormData/Blob/binary) are sent as-is; only plain objects are\n // JSON-encoded. FormData must carry NO explicit Content-Type so fetch can set\n // the multipart boundary itself.\n const raw = isRawBody(opts.body);\n const headers = new Headers({\n ...(raw ? {} : { 'Content-Type': 'application/json' }),\n ...opts.headers,\n });\n if (opts.body instanceof FormData) headers.delete('Content-Type');\n\n // Audit reason (GMP Annex 11) travels in the JSON body as `reason` — merge it\n // for non-raw bodies (the server reads it from the body). Skipped for raw /\n // multipart payloads, and for GET (a bodyless method: fetch throws on a GET\n // with a body, and reason-required ops are all writes anyway).\n const body =\n opts.auditReason !== undefined && !raw && method !== 'GET'\n ? {\n ...(opts.body && typeof opts.body === 'object' ? (opts.body as Record<string, unknown>) : {}),\n reason: opts.auditReason,\n }\n : opts.body;\n\n const ctx: RequestContext = {\n url,\n method,\n headers,\n runtime: this.cfg.runtime,\n includeCookies: false,\n };\n\n const credential = opts.credential ?? this.credential;\n await credential.apply(ctx);\n this.workspace.apply(ctx, opts.workspace);\n if (this.cfg.runtime === 'node') {\n headers.set('User-Agent', `dalea-sdk-ts/${SDK_VERSION}`);\n }\n if (this.cfg.apiVersion) headers.set('X-Dalea-Version', this.cfg.apiVersion);\n this.cfg.interceptors.onRequest?.({ url, method, headers });\n\n // Streaming requests opt out of the default timeout (a long-lived SSE stream\n // must not be aborted mid-flight); a caller-supplied signal still applies.\n const signal =\n opts.signal ??\n (opts.stream || !this.cfg.timeoutMs ? undefined : AbortSignal.timeout(this.cfg.timeoutMs));\n\n let res: Response;\n try {\n res = await this.cfg.fetch(url, {\n method,\n headers,\n body:\n body === undefined\n ? undefined\n : raw\n ? (body as BodyInit)\n : JSON.stringify(body),\n credentials: ctx.includeCookies ? 'include' : 'same-origin',\n signal,\n });\n } catch (e) {\n const err = new DaleaNetworkError(0, 'NETWORK', (e as Error).message, undefined, method !== 'GET');\n this.cfg.interceptors.onError?.(err);\n throw err;\n }\n\n credential.onResponse?.(res);\n this.cfg.interceptors.onResponse?.(res);\n\n if (!res.ok) {\n const data = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n const errObj = data.error as { message?: string; code?: string } | string | undefined;\n const message =\n (typeof data.message === 'string' && data.message) ||\n (typeof errObj === 'string' ? errObj : errObj?.message) ||\n 'An error occurred';\n const code =\n (typeof data.code === 'string' && data.code) ||\n (typeof errObj === 'object' ? errObj?.code : undefined) ||\n 'UNKNOWN_ERROR';\n\n // One-shot token refresh on 401: a credential that can refresh (e.g. OAuth)\n // gets a single chance to obtain a new token and replay the request. Generic\n // — every credential opts in via the optional Credential.refresh() hook; the\n // `refreshed` guard prevents a revoked session from looping.\n if (res.status === 401 && !refreshed && credential.refresh) {\n const ok = await credential.refresh();\n if (ok) return this.execute<T>(method, url, opts, attempt, true);\n }\n\n // Transparent backoff retry for throttling (429) and transient 503s. Both\n // are pre-execution rejections at the rate-limit / gateway layer — the\n // request never reached the handler — so replaying a mutation is safe (no\n // duplicate). Writes retry by default; GETs always do. `computeRetryDelay`\n // honours a server Retry-After and returns null to fail fast on absurd waits.\n if (shouldAttemptRetry(res.status, method, attempt, this.cfg)) {\n const delayMs = computeRetryDelay(\n attempt,\n res.headers.get('Retry-After'),\n data.retry_after_seconds,\n this.cfg,\n );\n if (delayMs !== null) {\n await sleep(delayMs, opts.signal);\n return this.execute<T>(method, url, opts, attempt + 1, refreshed);\n }\n }\n\n const err = mapError(res.status, code, message, data, method !== 'GET');\n this.cfg.interceptors.onError?.(err);\n throw err;\n }\n\n // Binary / streamed payloads: hand back the Response (caller reads .blob()/\n // .arrayBuffer()/.body). Errors were already mapped and thrown above.\n if (opts.rawResponse) return res as unknown as T;\n if (res.status === 204) return {} as T;\n return (await res.json()) as T;\n }\n}\n\n/**\n * True for body kinds fetch sends verbatim (no JSON encoding). FormData drives\n * multipart upload; the others cover binary/stream payloads. Plain objects fall\n * through to JSON.stringify.\n */\nfunction isRawBody(body: unknown): body is BodyInit {\n if (body === undefined || body === null) return false;\n return (\n (typeof FormData !== 'undefined' && body instanceof FormData) ||\n (typeof Blob !== 'undefined' && body instanceof Blob) ||\n (typeof ArrayBuffer !== 'undefined' && (body instanceof ArrayBuffer || ArrayBuffer.isView(body))) ||\n (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) ||\n (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams)\n );\n}\n\nfunction buildQuery(query?: Record<string, string | number | boolean | undefined>): string {\n if (!query) return '';\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined) params.set(k, String(v));\n }\n const s = params.toString();\n return s ? `?${s}` : '';\n}\n","import type { RequestContext } from './credentials.js';\n\n/**\n * Per-client workspace context, injected as the `X-Workspace` header. An explicit\n * per-call workspace overrides the client default.\n */\nexport class WorkspaceContext {\n constructor(private workspaceId?: string) {}\n\n set(id: string | null) {\n this.workspaceId = id ?? undefined;\n }\n\n get() {\n return this.workspaceId;\n }\n\n apply(ctx: RequestContext, override?: string) {\n const ws = override ?? this.workspaceId;\n if (ws && !ctx.headers.has('X-Workspace')) ctx.headers.set('X-Workspace', ws);\n }\n}\n","import type { Credential, RequestContext } from './credentials.js';\n\n/** Server-side workspace API key (`dalea_…`), sent as `X-API-Key`. */\nexport class ApiKeyCredential implements Credential {\n constructor(private readonly apiKey: string) {}\n apply(ctx: RequestContext) {\n ctx.headers.set('X-API-Key', this.apiKey);\n }\n key() {\n return `ak:${this.apiKey.slice(-8)}`;\n }\n}\n","import type { Credential, RequestContext } from './credentials.js';\nimport { DaleaError } from '../core/errors.js';\n\nexport interface SessionCookieHooks {\n /** Called with the fresh token when the session is rotated. */\n onRotate?: (token: string) => void;\n}\n\n/**\n * First-party, same-origin browser auth: the browser attaches the session cookie\n * automatically when `credentials:'include'`.\n * Browser-only — constructing/using it in Node throws a clear error.\n */\nexport class SessionCookieCredential implements Credential {\n constructor(private readonly hooks: SessionCookieHooks = {}) {}\n\n apply(ctx: RequestContext) {\n if (ctx.runtime === 'node') {\n throw new DaleaError(\n 0,\n 'CONFIG',\n 'session-cookie auth is browser-only; pass an apiKey in Node',\n );\n }\n ctx.includeCookies = true;\n }\n\n onResponse(res: Response) {\n const rotated = res.headers.get('set-auth-token');\n if (rotated) this.hooks.onRotate?.(rotated);\n }\n\n key() {\n return 'cookie';\n }\n}\n","import type { Credential, RequestContext } from './credentials.js';\n\n/**\n * Explicit bearer token (a session token or opaque token), sent as\n * `Authorization: Bearer …`. Used by `client.as(token)` to authenticate an\n * individual request with a caller-supplied token.\n */\nexport class BearerCredential implements Credential {\n constructor(private readonly token: string) {}\n apply(ctx: RequestContext) {\n ctx.headers.set('Authorization', `Bearer ${this.token}`);\n }\n key() {\n return `b:${this.token.slice(-8)}`;\n }\n}\n","import type { Transport } from '../core/transport.js';\n\n/** Base for resource classes — holds the shared transport. */\nexport abstract class Resource {\n constructor(protected readonly transport: Transport) {}\n}\n","/**\n * Auto-pagination — turns a paged list endpoint into an async iterator over every\n * item across pages, so callers write `for await (const x of client.x.iterateY())`\n * instead of hand-rolling the offset/cursor loop.\n *\n * The existing `list()` methods are untouched (they still return one typed page\n * envelope); the companion `iterate*()` methods wrap them with `paginate` + one of\n * the walkers below. Paging is NOT uniform across the API — three mechanisms\n * coexist (offset+total, cursor, and one blind page-based endpoint) — so the\n * walker is chosen per call site rather than baked into the primitive.\n *\n * A caller-supplied `offset`/`cursor`/`page` in the initial params is honored as\n * the STARTING position — iteration then runs from there to the end.\n */\n\n/** Query params threaded between pages — the same shape the transport accepts. */\nexport type PageParams = Record<string, string | number | boolean | undefined>;\n\n/** Teaches the pager how to read items from a page and advance to the next one. */\nexport interface PageWalker<TPage, TItem> {\n /** Pull the items array out of one page. */\n items: (page: TPage) => TItem[];\n /** The next page's params, or `null` to stop. */\n next: (page: TPage, params: PageParams) => PageParams | null;\n}\n\nconst DEFAULT_LIMIT = 100;\n\n/**\n * Walk a paged endpoint forward, yielding each item. `fetchPage` runs one list\n * call for a given params object; the walker reads its items and computes the next\n * params. Stops when the walker returns `null`. `for await … break` stops fetching\n * immediately, and cancellation rides the underlying call's `AbortSignal`.\n */\nexport async function* paginate<TPage, TItem>(\n fetchPage: (params: PageParams) => Promise<TPage>,\n initialParams: PageParams,\n walker: PageWalker<TPage, TItem>,\n): AsyncGenerator<TItem> {\n let params: PageParams | null = { ...initialParams };\n while (params) {\n const page = await fetchPage(params);\n for (const item of walker.items(page)) yield item;\n params = walker.next(page, params);\n }\n}\n\nfunction itemsAt<TPage, TItem>(page: TPage, key: keyof TPage): TItem[] {\n const arr = page[key];\n return Array.isArray(arr) ? (arr as TItem[]) : [];\n}\n\n/**\n * A usable page size from a raw `limit`: a positive integer, else the default.\n * Missing / null / 0 / negative all collapse to `fallback` — identical in the\n * Python client (`page_limit`), so the two paginate byte-for-byte.\n */\nexport function pageLimit(raw: unknown, fallback: number = DEFAULT_LIMIT): number {\n return typeof raw === 'number' && raw > 0 ? raw : fallback;\n}\n\nfunction nextLimit(params: PageParams, fallback: number): number {\n return pageLimit(params.limit, fallback);\n}\n\n/**\n * offset+total: advance `offset` by the number of items returned until\n * `offset >= total` — or the page comes back empty, or `hasMore === false` for\n * endpoints that send it (notifications). Used by `objects`, `queries`, `results`.\n */\nexport function offsetWalker<TPage, TItem>(\n itemsKey: keyof TPage,\n limit = DEFAULT_LIMIT,\n): PageWalker<TPage, TItem> {\n return {\n items: (p) => itemsAt<TPage, TItem>(p, itemsKey),\n next: (p, params) => {\n const got = itemsAt<TPage, TItem>(p, itemsKey).length;\n if (got === 0) return null;\n const meta = p as { total?: number; hasMore?: boolean };\n if (meta.hasMore === false) return null;\n const offset = Number(params.offset ?? 0) + got;\n if (typeof meta.total === 'number' && offset >= meta.total) return null;\n return { ...params, offset, limit: nextLimit(params, limit) };\n },\n };\n}\n\n/** cursor: follow the response's `nextCursor` until it is null/absent. */\nexport function cursorWalker<TPage, TItem>(\n itemsKey: keyof TPage,\n limit = DEFAULT_LIMIT,\n): PageWalker<TPage, TItem> {\n return {\n items: (p) => itemsAt<TPage, TItem>(p, itemsKey),\n next: (p, params) => {\n const cursor = (p as { nextCursor?: string | null }).nextCursor;\n return cursor ? { ...params, cursor, limit: nextLimit(params, limit) } : null;\n },\n };\n}\n\n/**\n * blind page-based: the endpoint returns no `total`/`nextCursor`, so the only\n * RELIABLE end signal is an empty page — a short (non-empty) page can't be trusted\n * because the server may clamp `limit` below what was requested. Advances `page` by\n * one from a 0 base (the server is 0-indexed: it computes `offset = page * limit`).\n * Used by `ai.conversations`; costs one extra empty request at the very end.\n */\nexport function pageWalker<TPage, TItem>(\n itemsKey: keyof TPage,\n limit = DEFAULT_LIMIT,\n): PageWalker<TPage, TItem> {\n return {\n items: (p) => itemsAt<TPage, TItem>(p, itemsKey),\n next: (p, params) => {\n const got = itemsAt<TPage, TItem>(p, itemsKey).length;\n if (got === 0) return null;\n return { ...params, page: Number(params.page ?? 0) + 1, limit: nextLimit(params, limit) };\n },\n };\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport { paginate, offsetWalker, pageLimit, type PageParams } from '../../core/pagination.js';\nimport type { Resp, Body, Query, QueryParams } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/**\n * `client.data.tables.*` — table CRUD, copy/move, and the table-scoped column\n * and object collections. Response/body types are derived from the generated\n * contract, so a spec change is a compile error here.\n */\nexport class TablesResource extends Resource {\n /** GET /tables/{id} */\n get(id: string, opts?: CallOptions): Promise<Resp<'getDataTable'>> {\n return this.transport.request('GET', `/api/v1/tables/${enc(id)}`, opts);\n }\n\n /** PATCH /tables/{id} */\n update(id: string, body: Body<'updateDataTable'>, opts?: CallOptions): Promise<Resp<'updateDataTable'>> {\n return this.transport.request('PATCH', `/api/v1/tables/${enc(id)}`, { ...opts, body });\n }\n\n /** POST /tables/bulk-update (conflict-aware; supports dryRun). */\n bulkUpdate(body: Body<'bulkUpdateDataTables'>, opts?: CallOptions): Promise<Resp<'bulkUpdateDataTables'>> {\n return this.transport.request('POST', '/api/v1/tables/bulk-update', { ...opts, body });\n }\n\n /** POST /tables/{id}/copy (dry-runnable). */\n copy(id: string, body: Body<'copyTable'>, opts?: CallOptions): Promise<Resp<'copyTable'>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(id)}/copy`, { ...opts, body });\n }\n\n /** POST /tables/{id}/move (dry-runnable). */\n move(id: string, body: Body<'moveTable'>, opts?: CallOptions): Promise<Resp<'moveTable'>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(id)}/move`, { ...opts, body });\n }\n\n /** POST /tables/bulk-copy (dry-runnable). */\n bulkCopy(body: Body<'bulkCopyTables'>, opts?: CallOptions): Promise<Resp<'bulkCopyTables'>> {\n return this.transport.request('POST', '/api/v1/tables/bulk-copy', { ...opts, body });\n }\n\n /** POST /tables/bulk-move (dry-runnable). */\n bulkMove(body: Body<'bulkMoveTables'>, opts?: CallOptions): Promise<Resp<'bulkMoveTables'>> {\n return this.transport.request('POST', '/api/v1/tables/bulk-move', { ...opts, body });\n }\n\n // --- columns scoped to a table ---\n\n /** GET /tables/{tableId}/columns */\n listColumns(\n tableId: string,\n params?: Query<'listTableColumns'>,\n opts?: CallOptions,\n ): Promise<Resp<'listTableColumns'>> {\n return this.transport.request('GET', `/api/v1/tables/${enc(tableId)}/columns`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** GET /tables/{tableId}/columns/archived */\n listArchivedColumns(tableId: string, opts?: CallOptions): Promise<Resp<'listArchivedTableColumns'>> {\n return this.transport.request('GET', `/api/v1/tables/${enc(tableId)}/columns/archived`, opts);\n }\n\n /** POST /tables/{tableId}/columns */\n createColumn(\n tableId: string,\n body: Body<'createTableColumn'>,\n opts?: CallOptions,\n ): Promise<Resp<'createTableColumn', 201>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(tableId)}/columns`, { ...opts, body });\n }\n\n /** POST /tables/{tableId}/columns/bulk (conflict-aware; supports dryRun). */\n bulkCreateColumns(\n tableId: string,\n body: Body<'bulkCreateTableColumns'>,\n opts?: CallOptions,\n ): Promise<Resp<'bulkCreateTableColumns'>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(tableId)}/columns/bulk`, { ...opts, body });\n }\n\n // --- objects scoped to a table ---\n\n /** GET /tables/{tableId}/objects */\n listObjects(\n tableId: string,\n params?: Query<'listTableObjects'>,\n opts?: CallOptions,\n ): Promise<Resp<'listTableObjects'>> {\n return this.transport.request('GET', `/api/v1/tables/${enc(tableId)}/objects`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /**\n * GET /tables/{tableId}/objects — auto-paged: yields every object across all\n * pages. `for await (const obj of …)`; `break` stops fetching. Cancellation\n * rides `opts.signal`.\n */\n iterateObjects(\n tableId: string,\n params?: Query<'listTableObjects'>,\n opts?: CallOptions,\n ): AsyncGenerator<Resp<'listTableObjects'>['objects'][number]> {\n const limit = pageLimit(params?.limit);\n return paginate(\n (p) => this.listObjects(tableId, p as Query<'listTableObjects'>, opts),\n { offset: 0, ...(params as PageParams | undefined), limit },\n offsetWalker<Resp<'listTableObjects'>, Resp<'listTableObjects'>['objects'][number]>('objects', limit),\n );\n }\n\n /** GET /tables/{tableId}/objects/archived */\n listArchivedObjects(\n tableId: string,\n params?: Query<'listArchivedObjects'>,\n opts?: CallOptions,\n ): Promise<Resp<'listArchivedObjects'>> {\n return this.transport.request('GET', `/api/v1/tables/${enc(tableId)}/objects/archived`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** GET /tables/{tableId}/objects/archived — auto-paged over every archived object. */\n iterateArchivedObjects(\n tableId: string,\n params?: Query<'listArchivedObjects'>,\n opts?: CallOptions,\n ): AsyncGenerator<Resp<'listArchivedObjects'>['objects'][number]> {\n const limit = pageLimit(params?.limit);\n return paginate(\n (p) => this.listArchivedObjects(tableId, p as Query<'listArchivedObjects'>, opts),\n { offset: 0, ...(params as PageParams | undefined), limit },\n offsetWalker<Resp<'listArchivedObjects'>, Resp<'listArchivedObjects'>['objects'][number]>('objects', limit),\n );\n }\n\n /** GET /tables/{tableId}/objects/search */\n searchObjects(\n tableId: string,\n params?: Query<'searchTableObjects'>,\n opts?: CallOptions,\n ): Promise<Resp<'searchTableObjects'>> {\n return this.transport.request('GET', `/api/v1/tables/${enc(tableId)}/objects/search`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** GET /tables/{tableId}/objects/search — auto-paged over every match. */\n searchObjectsAll(\n tableId: string,\n params?: Query<'searchTableObjects'>,\n opts?: CallOptions,\n ): AsyncGenerator<Resp<'searchTableObjects'>['objects'][number]> {\n const limit = pageLimit(params?.limit);\n return paginate(\n (p) => this.searchObjects(tableId, p as Query<'searchTableObjects'>, opts),\n { offset: 0, ...(params as PageParams | undefined), limit },\n offsetWalker<Resp<'searchTableObjects'>, Resp<'searchTableObjects'>['objects'][number]>('objects', limit),\n );\n }\n\n /** POST /tables/{tableId}/objects */\n createObject(\n tableId: string,\n body: Body<'createTableObject'>,\n opts?: CallOptions,\n ): Promise<Resp<'createTableObject', 201>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(tableId)}/objects`, { ...opts, body });\n }\n\n /** POST /tables/{tableId}/objects/bulk (partial success → 207). */\n bulkCreateObjects(\n tableId: string,\n body: Body<'bulkCreateTableObjects'>,\n opts?: CallOptions,\n ): Promise<Resp<'bulkCreateTableObjects', 201>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(tableId)}/objects/bulk`, { ...opts, body });\n }\n\n /** POST /tables/{tableId}/objects/validate-bulk (dry-run; no writes). */\n validateBulkObjects(\n tableId: string,\n body: Body<'validateBulkTableObjects'>,\n opts?: CallOptions,\n ): Promise<Resp<'validateBulkTableObjects'>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(tableId)}/objects/validate-bulk`, {\n ...opts,\n body,\n });\n }\n\n // --- archive / restore / permanent-delete ---\n\n /** POST /tables/{id}/archive — soft-archive (reversible); requires a reason. */\n archive(id: string, body: Body<'archiveTable'>, opts?: CallOptions): Promise<Resp<'archiveTable'>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(id)}/archive`, { ...opts, body });\n }\n\n /** POST /tables/{id}/restore — restore an archived table. */\n restore(id: string, body: Body<'restoreTable'>, opts?: CallOptions): Promise<Resp<'restoreTable'>> {\n return this.transport.request('POST', `/api/v1/tables/${enc(id)}/restore`, { ...opts, body });\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/** `client.data.columns.*` — column read/update (column creation lives on `tables`). */\nexport class ColumnsResource extends Resource {\n /** GET /columns/{id} */\n get(id: string, opts?: CallOptions): Promise<Resp<'getDataColumn'>> {\n return this.transport.request('GET', `/api/v1/columns/${enc(id)}`, opts);\n }\n\n /** PATCH /columns/{id} */\n update(id: string, body: Body<'updateDataColumn'>, opts?: CallOptions): Promise<Resp<'updateDataColumn'>> {\n return this.transport.request('PATCH', `/api/v1/columns/${enc(id)}`, { ...opts, body });\n }\n\n /** POST /columns/bulk-update (conflict-aware; partial success → 207). */\n bulkUpdate(body: Body<'bulkUpdateDataColumns'>, opts?: CallOptions): Promise<Resp<'bulkUpdateDataColumns'>> {\n return this.transport.request('POST', '/api/v1/columns/bulk-update', { ...opts, body });\n }\n\n // --- archive / restore / permanent-delete ---\n\n /** POST /columns/{id}/archive — soft-archive (reversible); requires a reason. */\n archive(id: string, body: Body<'archiveColumn'>, opts?: CallOptions): Promise<Resp<'archiveColumn'>> {\n return this.transport.request('POST', `/api/v1/columns/${enc(id)}/archive`, { ...opts, body });\n }\n\n /** POST /columns/{id}/restore — restore an archived column. */\n restore(id: string, body: Body<'restoreColumn'>, opts?: CallOptions): Promise<Resp<'restoreColumn'>> {\n return this.transport.request('POST', `/api/v1/columns/${enc(id)}/restore`, { ...opts, body });\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/** `client.data.namingSchemes.*` — auto-ID naming schemes for the workspace. */\nexport class NamingSchemesResource extends Resource {\n /** GET /naming-schemes */\n list(opts?: CallOptions): Promise<Resp<'listNamingSchemes'>> {\n return this.transport.request('GET', '/api/v1/naming-schemes', opts);\n }\n\n /** POST /naming-schemes */\n create(body: Body<'createNamingScheme'>, opts?: CallOptions): Promise<Resp<'createNamingScheme', 201>> {\n return this.transport.request('POST', '/api/v1/naming-schemes', { ...opts, body });\n }\n\n /** GET /naming-schemes/{id} */\n get(id: string, opts?: CallOptions): Promise<Resp<'getNamingScheme'>> {\n return this.transport.request('GET', `/api/v1/naming-schemes/${enc(id)}`, opts);\n }\n\n /** PATCH /naming-schemes/{id} */\n update(id: string, body: Body<'updateNamingScheme'>, opts?: CallOptions): Promise<Resp<'updateNamingScheme'>> {\n return this.transport.request('PATCH', `/api/v1/naming-schemes/${enc(id)}`, { ...opts, body });\n }\n\n /** POST /naming-schemes/{id}/generate — the next ID from the scheme. */\n generateNextId(id: string, opts?: CallOptions): Promise<Resp<'generateNamingSchemeNextId'>> {\n return this.transport.request('POST', `/api/v1/naming-schemes/${enc(id)}/generate`, opts);\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body, Query, QueryParams } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/** `client.data.objects.*` — object-id-scoped reads/updates and batch helpers. */\nexport class ObjectsResource extends Resource {\n /** POST /objects/resolve — batch-resolve objects by ID (max 100). */\n resolve(body: Body<'resolveObjects'>, opts?: CallOptions): Promise<Resp<'resolveObjects'>> {\n return this.transport.request('POST', '/api/v1/objects/resolve', { ...opts, body });\n }\n\n /** GET /objects/{id} */\n get(id: string, opts?: CallOptions): Promise<Resp<'getObject'>> {\n return this.transport.request('GET', `/api/v1/objects/${enc(id)}`, opts);\n }\n\n /** GET /objects/{id}/context — object with its table, environment, and columns. */\n getWithContext(id: string, opts?: CallOptions): Promise<Resp<'getObjectWithContext'>> {\n return this.transport.request('GET', `/api/v1/objects/${enc(id)}/context`, opts);\n }\n\n /** GET /objects/{id}/references — incoming references (reverse lookup). */\n getReferences(\n id: string,\n params?: Query<'getObjectReferences'>,\n opts?: CallOptions,\n ): Promise<Resp<'getObjectReferences'>> {\n return this.transport.request('GET', `/api/v1/objects/${enc(id)}/references`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** PATCH /objects/{id} */\n update(id: string, body: Body<'updateObject'>, opts?: CallOptions): Promise<Resp<'updateObject'>> {\n return this.transport.request('PATCH', `/api/v1/objects/${enc(id)}`, { ...opts, body });\n }\n\n /** POST /objects/bulk-update (partial success → 207). */\n bulkUpdate(body: Body<'bulkUpdateObjects'>, opts?: CallOptions): Promise<Resp<'bulkUpdateObjects'>> {\n return this.transport.request('POST', '/api/v1/objects/bulk-update', { ...opts, body });\n }\n\n // --- archive / restore / permanent-delete (single + bulk) ---\n\n /** POST /objects/{id}/archive — soft-archive (reversible); requires a reason. */\n archive(id: string, body: Body<'archiveObject'>, opts?: CallOptions): Promise<Resp<'archiveObject'>> {\n return this.transport.request('POST', `/api/v1/objects/${enc(id)}/archive`, { ...opts, body });\n }\n\n /** POST /objects/{id}/restore — restore an archived object. */\n restore(id: string, body: Body<'restoreObject'>, opts?: CallOptions): Promise<Resp<'restoreObject'>> {\n return this.transport.request('POST', `/api/v1/objects/${enc(id)}/restore`, { ...opts, body });\n }\n\n /** POST /objects/bulk-archive — archive many objects (per-id failures aggregated). */\n bulkArchive(body: Body<'bulkArchiveObjects'>, opts?: CallOptions): Promise<Resp<'bulkArchiveObjects'>> {\n return this.transport.request('POST', '/api/v1/objects/bulk-archive', { ...opts, body });\n }\n\n /** POST /objects/bulk-restore — restore many archived objects. */\n bulkRestore(body: Body<'bulkRestoreObjects'>, opts?: CallOptions): Promise<Resp<'bulkRestoreObjects'>> {\n return this.transport.request('POST', '/api/v1/objects/bulk-restore', { ...opts, body });\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport { paginate, offsetWalker, pageLimit, type PageParams } from '../../core/pagination.js';\nimport type { Resp, Body, Query, QueryParams } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/**\n * `client.data.savedQueries.*` — saved traversal queries. `create`/`get`/`update`\n * accept `?mode=uuid|named`; `execute` returns the raw query result.\n */\nexport class SavedQueriesResource extends Resource {\n /** GET /queries */\n list(params?: Query<'listSavedQueries'>, opts?: CallOptions): Promise<Resp<'listSavedQueries'>> {\n return this.transport.request('GET', '/api/v1/queries', { ...opts, query: params as QueryParams | undefined });\n }\n\n /** GET /queries — auto-paged over every saved query. */\n iterate(\n params?: Query<'listSavedQueries'>,\n opts?: CallOptions,\n ): AsyncGenerator<Resp<'listSavedQueries'>['queries'][number]> {\n const limit = pageLimit(params?.limit);\n return paginate(\n (p) => this.list(p as Query<'listSavedQueries'>, opts),\n { offset: 0, ...(params as PageParams | undefined), limit },\n offsetWalker<Resp<'listSavedQueries'>, Resp<'listSavedQueries'>['queries'][number]>('queries', limit),\n );\n }\n\n /** POST /queries */\n create(\n body: Body<'createSavedQuery'>,\n params?: Query<'createSavedQuery'>,\n opts?: CallOptions,\n ): Promise<Resp<'createSavedQuery', 201>> {\n return this.transport.request('POST', '/api/v1/queries', { ...opts, body, query: params as QueryParams | undefined });\n }\n\n /** GET /queries/{queryId} */\n get(queryId: string, params?: Query<'getSavedQuery'>, opts?: CallOptions): Promise<Resp<'getSavedQuery'>> {\n return this.transport.request('GET', `/api/v1/queries/${enc(queryId)}`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** PATCH /queries/{queryId} */\n update(\n queryId: string,\n body: Body<'updateSavedQuery'>,\n params?: Query<'updateSavedQuery'>,\n opts?: CallOptions,\n ): Promise<Resp<'updateSavedQuery'>> {\n return this.transport.request('PATCH', `/api/v1/queries/${enc(queryId)}`, {\n ...opts,\n body,\n query: params as QueryParams | undefined,\n });\n }\n\n /** POST /queries/{queryId}/duplicate */\n duplicate(\n queryId: string,\n body: Body<'duplicateSavedQuery'>,\n opts?: CallOptions,\n ): Promise<Resp<'duplicateSavedQuery', 201>> {\n return this.transport.request('POST', `/api/v1/queries/${enc(queryId)}/duplicate`, { ...opts, body });\n }\n\n /** POST /queries/{queryId}/execute — runs the query, returns the raw result. */\n execute(queryId: string, body: Body<'executeSavedQuery'>, opts?: CallOptions): Promise<Resp<'executeSavedQuery'>> {\n return this.transport.request('POST', `/api/v1/queries/${enc(queryId)}/execute`, { ...opts, body });\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body, Query, QueryParams } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/**\n * `client.data.query.*` — ad-hoc query execution within an environment.\n * `execute` accepts `?mode=uuid|named` (TraversalQuery or NamedQuery body).\n */\nexport class QueryResource extends Resource {\n /** POST /environments/{envId}/query */\n execute(\n envId: string,\n body: Body<'executeQuery'>,\n params?: Query<'executeQuery'>,\n opts?: CallOptions,\n ): Promise<Resp<'executeQuery'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(envId)}/query`, {\n ...opts,\n body,\n query: params as QueryParams | undefined,\n });\n }\n\n /** POST /environments/{envId}/query/preview — generated SQL, no execution. */\n preview(envId: string, body: Body<'previewQuery'>, opts?: CallOptions): Promise<Resp<'previewQuery'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(envId)}/query/preview`, { ...opts, body });\n }\n\n /** POST /environments/{envId}/query/sql — read-only raw SQL (SELECT only). */\n sql(envId: string, body: Body<'executeSql'>, opts?: CallOptions): Promise<Resp<'executeSql'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(envId)}/query/sql`, { ...opts, body });\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body, Query, QueryParams } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/** `client.data.results.*` — result batches, records, and analytical queries. */\nexport class ResultsResource extends Resource {\n /** GET /results/schemas/{schemaId}/describe — fillable template + columns. */\n describeSchema(schemaId: string, opts?: CallOptions): Promise<Resp<'describeResultSchema'>> {\n return this.transport.request('GET', `/api/v1/results/schemas/${enc(schemaId)}/describe`, opts);\n }\n\n /** POST /results/batches/validate — dry-run validation (no writes). */\n validateBatch(body: Body<'validateResultBatch'>, opts?: CallOptions): Promise<Resp<'validateResultBatch'>> {\n return this.transport.request('POST', '/api/v1/results/batches/validate', { ...opts, body });\n }\n\n /** POST /results/batches — create a batch (partial success → 207). */\n createBatch(body: Body<'createResultBatch'>, opts?: CallOptions): Promise<Resp<'createResultBatch', 201>> {\n return this.transport.request('POST', '/api/v1/results/batches', { ...opts, body });\n }\n\n /** GET /results/batches */\n listBatches(params?: Query<'listResultBatches'>, opts?: CallOptions): Promise<Resp<'listResultBatches'>> {\n return this.transport.request('GET', '/api/v1/results/batches', {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** GET /results/batches/{id} */\n getBatch(id: string, opts?: CallOptions): Promise<Resp<'getResultBatch'>> {\n return this.transport.request('GET', `/api/v1/results/batches/${enc(id)}`, opts);\n }\n\n /** POST /results/batches/{id}/supersede — re-record (partial success → 207). */\n supersedeBatch(\n id: string,\n body: Body<'supersedeResultBatch'>,\n opts?: CallOptions,\n ): Promise<Resp<'supersedeResultBatch', 201>> {\n return this.transport.request('POST', `/api/v1/results/batches/${enc(id)}/supersede`, { ...opts, body });\n }\n\n /** GET /results/records — list records (filterable, paginated). */\n listRecords(params?: Query<'listResultRecords'>, opts?: CallOptions): Promise<Resp<'listResultRecords'>> {\n return this.transport.request('GET', '/api/v1/results/records', {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** GET /results/records/by-object/{objectId} — reverse lookup. */\n recordsByObject(objectId: string, opts?: CallOptions): Promise<Resp<'getResultsByObject'>> {\n return this.transport.request('GET', `/api/v1/results/records/by-object/${enc(objectId)}`, opts);\n }\n\n /** POST /results/query — analytical query (filter, group, aggregate). */\n query(body: Body<'executeResultQuery'>, opts?: CallOptions): Promise<Resp<'executeResultQuery'>> {\n return this.transport.request('POST', '/api/v1/results/query', { ...opts, body });\n }\n\n // --- result-batch archive / restore / permanent-delete ---\n\n /** POST /result-batches/{id}/archive — soft-archive a batch (reversible). */\n archiveBatch(id: string, body: Body<'archiveResultBatch'>, opts?: CallOptions): Promise<Resp<'archiveResultBatch'>> {\n return this.transport.request('POST', `/api/v1/result-batches/${enc(id)}/archive`, { ...opts, body });\n }\n\n /** POST /result-batches/{id}/restore — restore an archived batch. */\n restoreBatch(id: string, body: Body<'restoreResultBatch'>, opts?: CallOptions): Promise<Resp<'restoreResultBatch'>> {\n return this.transport.request('POST', `/api/v1/result-batches/${enc(id)}/restore`, { ...opts, body });\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/** `client.data.schema.*` — schema-change validation and application. */\nexport class SchemaResource extends Resource {\n /** POST /environments/{envId}/schema/validate — detect conflicts (no writes). */\n validate(envId: string, body: Body<'validateSchemaChanges'>, opts?: CallOptions): Promise<Resp<'validateSchemaChanges'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(envId)}/schema/validate`, { ...opts, body });\n }\n\n /** GET /environments/{envId}/schema/jobs/{jobId} — async migration status. */\n jobStatus(envId: string, jobId: string, opts?: CallOptions): Promise<Resp<'getSchemaJobStatus'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(envId)}/schema/jobs/${enc(jobId)}`, opts);\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body, Query, QueryParams } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/**\n * `client.data.environments.*` — environment CRUD, the staging-snapshot schema\n * editing flow, env-scoped table/column/object/relationship reads, and\n * import/export. Large internal payloads (staging snapshots, apply/commit\n * outcomes, import/export packages) are typed loosely by the contract.\n */\nexport class EnvironmentsResource extends Resource {\n /** GET /environments */\n list(opts?: CallOptions): Promise<Resp<'listEnvironments'>> {\n return this.transport.request('GET', '/api/v1/environments', opts);\n }\n\n /** POST /environments */\n create(body: Body<'createEnvironment'>, opts?: CallOptions): Promise<Resp<'createEnvironment', 201>> {\n return this.transport.request('POST', '/api/v1/environments', { ...opts, body });\n }\n\n /** GET /environments/archived */\n listArchived(opts?: CallOptions): Promise<Resp<'listArchivedEnvironments'>> {\n return this.transport.request('GET', '/api/v1/environments/archived', opts);\n }\n\n /** GET /environments/{id} */\n get(id: string, opts?: CallOptions): Promise<Resp<'getEnvironment'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(id)}`, opts);\n }\n\n /** PATCH /environments/{id} */\n update(id: string, body: Body<'updateEnvironment'>, opts?: CallOptions): Promise<Resp<'updateEnvironment'>> {\n return this.transport.request('PATCH', `/api/v1/environments/${enc(id)}`, { ...opts, body });\n }\n\n // --- staging snapshot ---\n\n /** GET /environments/{id}/staging */\n getStaging(id: string, opts?: CallOptions): Promise<Resp<'getStaging'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(id)}/staging`, opts);\n }\n\n /** GET /environments/{id}/staging/version — cheap version poll. */\n getStagingVersion(id: string, opts?: CallOptions): Promise<Resp<'getStagingVersion'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(id)}/staging/version`, opts);\n }\n\n /** POST /environments/{id}/staging/resync — reset staging to live. */\n resyncStaging(id: string, opts?: CallOptions): Promise<Resp<'resyncStaging'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(id)}/staging/resync`, opts);\n }\n\n // --- linkage / references ---\n\n /** PATCH /environments/{id}/source-market */\n setSourceMarket(\n id: string,\n body: Body<'setEnvironmentSourceMarket'>,\n opts?: CallOptions,\n ): Promise<Resp<'setEnvironmentSourceMarket'>> {\n return this.transport.request('PATCH', `/api/v1/environments/${enc(id)}/source-market`, { ...opts, body });\n }\n\n /** POST /environments/{id}/detach — break the marketplace link (make editable). */\n detach(id: string, opts?: CallOptions): Promise<Resp<'detachEnvironment'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(id)}/detach`, opts);\n }\n\n /** GET /environments/{id}/cross-references */\n crossReferences(id: string, opts?: CallOptions): Promise<Resp<'getEnvironmentCrossReferences'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(id)}/cross-references`, opts);\n }\n\n // --- env-scoped collections ---\n\n /** GET /environments/{envId}/tables (?source=staging for the proposed schema). */\n listTables(\n envId: string,\n params?: Query<'listEnvironmentTables'>,\n opts?: CallOptions,\n ): Promise<Resp<'listEnvironmentTables'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(envId)}/tables`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** GET /environments/{envId}/columns (?source=staging for the proposed schema). */\n listColumns(\n envId: string,\n params?: Query<'listEnvironmentColumns'>,\n opts?: CallOptions,\n ): Promise<Resp<'listEnvironmentColumns'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(envId)}/columns`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n /** GET /environments/{envId}/relationships — every reference edge. */\n listRelationships(envId: string, opts?: CallOptions): Promise<Resp<'listEnvironmentRelationships'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(envId)}/relationships`, opts);\n }\n\n /** GET /environments/{envId}/tables/{tableId}/relationships */\n listTableRelationships(\n envId: string,\n tableId: string,\n opts?: CallOptions,\n ): Promise<Resp<'listTableRelationships'>> {\n return this.transport.request(\n 'GET',\n `/api/v1/environments/${enc(envId)}/tables/${enc(tableId)}/relationships`,\n opts,\n );\n }\n\n /** GET /environments/{envId}/tables/archived */\n listArchivedTables(envId: string, opts?: CallOptions): Promise<Resp<'listArchivedEnvironmentTables'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(envId)}/tables/archived`, opts);\n }\n\n /** POST /environments/{envId}/tables */\n createTable(\n envId: string,\n body: Body<'createEnvironmentTable'>,\n opts?: CallOptions,\n ): Promise<Resp<'createEnvironmentTable', 201>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(envId)}/tables`, { ...opts, body });\n }\n\n /** POST /environments/{envId}/tables/bulk (partial success → 207). */\n bulkCreateTables(\n envId: string,\n body: Body<'bulkCreateEnvironmentTables'>,\n opts?: CallOptions,\n ): Promise<Resp<'bulkCreateEnvironmentTables', 201>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(envId)}/tables/bulk`, { ...opts, body });\n }\n\n /** GET /environments/{envId}/objects/search */\n searchObjects(\n envId: string,\n params?: Query<'searchEnvironmentObjects'>,\n opts?: CallOptions,\n ): Promise<Resp<'searchEnvironmentObjects'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(envId)}/objects/search`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n // --- import / export ---\n\n /** POST /environments/import — import an EnvironmentPackage. */\n importPackage(body: Body<'importEnvironment'>, opts?: CallOptions): Promise<Resp<'importEnvironment', 201>> {\n return this.transport.request('POST', '/api/v1/environments/import', { ...opts, body });\n }\n\n /** GET /environments/{id}/export — export to EnvironmentPackage. */\n exportPackage(id: string, opts?: CallOptions): Promise<Resp<'exportEnvironment'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(id)}/export`, opts);\n }\n\n /** POST /environments/{id}/data/import — import a data package (dry-runnable). */\n importData(\n id: string,\n body: Body<'importData'>,\n params?: Query<'importData'>,\n opts?: CallOptions,\n ): Promise<Resp<'importData'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(id)}/data/import`, {\n ...opts,\n body,\n query: params as QueryParams | undefined,\n });\n }\n\n /** POST /environments/{id}/data/import/apply — structured spreadsheet import. */\n applyImport(id: string, body: Body<'applyImport'>, opts?: CallOptions): Promise<Resp<'applyImport'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(id)}/data/import/apply`, { ...opts, body });\n }\n\n /** POST /environments/{id}/tables/{tableId}/export — export a table to a CSV file. */\n exportTableCsv(\n id: string,\n tableId: string,\n body?: Body<'exportTableToCsv'>,\n opts?: CallOptions,\n ): Promise<Resp<'exportTableToCsv', 201>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(id)}/tables/${enc(tableId)}/export`, {\n ...opts,\n body,\n });\n }\n\n /** GET /environments/{id}/data/export — export environment data (?tables=id1,id2). */\n exportData(id: string, params?: Query<'exportData'>, opts?: CallOptions): Promise<Resp<'exportData'>> {\n return this.transport.request('GET', `/api/v1/environments/${enc(id)}/data/export`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n\n // --- archive / restore / permanent-delete (cascades to descendants) ---\n\n /** POST /environments/{id}/archive — soft-archive (reversible); requires a reason. */\n archive(id: string, body: Body<'archiveEnvironment'>, opts?: CallOptions): Promise<Resp<'archiveEnvironment'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(id)}/archive`, { ...opts, body });\n }\n\n /** POST /environments/{id}/restore — restore an archived environment. */\n restore(id: string, body: Body<'restoreEnvironment'>, opts?: CallOptions): Promise<Resp<'restoreEnvironment'>> {\n return this.transport.request('POST', `/api/v1/environments/${enc(id)}/restore`, { ...opts, body });\n }\n}\n","import type { CallOptions } from '../../core/types.js';\nimport { Resource } from '../base.js';\nimport type { Resp, Body, Query, QueryParams } from './_contract.js';\n\nconst enc = encodeURIComponent;\n\n/**\n * `client.data.importMappings.*` — durable file→table.column wiring for\n * spreadsheet imports. Now that the routes are code-first, every method types\n * against the generated contract.\n */\nexport class ImportMappingsResource extends Resource {\n /** GET /import-mappings?environmentId= — active mappings for an environment. */\n list(params: Query<'listImportMappings'>, opts?: CallOptions): Promise<Resp<'listImportMappings'>> {\n return this.transport.request('GET', '/api/v1/import-mappings', {\n ...opts,\n query: params as QueryParams,\n });\n }\n\n /** GET /import-mappings/{mappingId} — a mapping with its full entries. */\n get(mappingId: string, opts?: CallOptions): Promise<Resp<'getImportMapping'>> {\n return this.transport.request('GET', `/api/v1/import-mappings/${enc(mappingId)}`, opts);\n }\n\n /** POST /import-mappings */\n create(data: Body<'createImportMapping'>, opts?: CallOptions): Promise<Resp<'createImportMapping', 201>> {\n return this.transport.request('POST', '/api/v1/import-mappings', { ...opts, body: data });\n }\n\n /** PATCH /import-mappings/{mappingId} */\n update(\n mappingId: string,\n data: Body<'updateImportMapping'>,\n opts?: CallOptions,\n ): Promise<Resp<'updateImportMapping'>> {\n return this.transport.request('PATCH', `/api/v1/import-mappings/${enc(mappingId)}`, { ...opts, body: data });\n }\n\n /** POST /import-mappings/{mappingId}/archive (reversible soft-delete). */\n archive(\n mappingId: string,\n payload: Body<'archiveImportMapping'>,\n opts?: CallOptions,\n ): Promise<Resp<'archiveImportMapping'>> {\n return this.transport.request('POST', `/api/v1/import-mappings/${enc(mappingId)}/archive`, {\n ...opts,\n body: payload,\n });\n }\n\n /** POST /import-mappings/{mappingId}/restore */\n restore(\n mappingId: string,\n payload: Body<'restoreImportMapping'>,\n opts?: CallOptions,\n ): Promise<Resp<'restoreImportMapping'>> {\n return this.transport.request('POST', `/api/v1/import-mappings/${enc(mappingId)}/restore`, {\n ...opts,\n body: payload,\n });\n }\n\n\n /** GET /import-mappings/{mappingId}/file-overviews — source sheets + headers. */\n getFileOverviews(mappingId: string, opts?: CallOptions): Promise<Resp<'getImportMappingFileOverviews'>> {\n return this.transport.request('GET', `/api/v1/import-mappings/${enc(mappingId)}/file-overviews`, opts);\n }\n\n /** GET /import-mappings/{mappingId}/audit — per-mapping audit trail. */\n getAuditTrail(\n mappingId: string,\n params?: Query<'getImportMappingAuditTrail'>,\n opts?: CallOptions,\n ): Promise<Resp<'getImportMappingAuditTrail'>> {\n return this.transport.request('GET', `/api/v1/import-mappings/${enc(mappingId)}/audit`, {\n ...opts,\n query: params as QueryParams | undefined,\n });\n }\n}\n","import type { Transport } from '../../core/transport.js';\nimport { TablesResource } from './tables.js';\nimport { ColumnsResource } from './columns.js';\nimport { NamingSchemesResource } from './naming-schemes.js';\nimport { ObjectsResource } from './objects.js';\nimport { SavedQueriesResource } from './saved-queries.js';\nimport { QueryResource } from './query.js';\nimport { ResultsResource } from './results.js';\nimport { SchemaResource } from './schema.js';\nimport { EnvironmentsResource } from './environments.js';\nimport { ImportMappingsResource } from './import-mappings.js';\n\n/** `client.data.*` — the public data-platform namespace. */\nexport class DataResource {\n readonly environments: EnvironmentsResource;\n readonly tables: TablesResource;\n readonly columns: ColumnsResource;\n readonly namingSchemes: NamingSchemesResource;\n readonly objects: ObjectsResource;\n readonly savedQueries: SavedQueriesResource;\n readonly query: QueryResource;\n readonly results: ResultsResource;\n readonly schema: SchemaResource;\n readonly importMappings: ImportMappingsResource;\n\n constructor(transport: Transport) {\n this.environments = new EnvironmentsResource(transport);\n this.tables = new TablesResource(transport);\n this.columns = new ColumnsResource(transport);\n this.namingSchemes = new NamingSchemesResource(transport);\n this.objects = new ObjectsResource(transport);\n this.savedQueries = new SavedQueriesResource(transport);\n this.query = new QueryResource(transport);\n this.results = new ResultsResource(transport);\n this.schema = new SchemaResource(transport);\n this.importMappings = new ImportMappingsResource(transport);\n }\n}\n","import { resolveConfig, type ClientConfig, type ResolvedConfig, type ServiceDomain } from './config.js';\nimport { Transport } from './core/transport.js';\nimport { WorkspaceContext } from './auth/workspace.js';\nimport { ApiKeyCredential } from './auth/api-key.js';\nimport { SessionCookieCredential } from './auth/session-cookie.js';\nimport { BearerCredential } from './auth/bearer.js';\nimport type { Credential } from './auth/credentials.js';\nimport { DataResource } from './resources/data/index.js';\n\n/**\n * Read an env var in Node/edge; returns undefined in the browser. The `typeof`\n * guard avoids a ReferenceError in bundles that have no `process`.\n */\nfunction readEnv(name: string): string | undefined {\n return typeof process !== 'undefined' && process.env ? process.env[name] : undefined;\n}\n\nfunction credentialFromConfig(cfg: ClientConfig): Credential {\n // Precedence: explicit credential > apiKey > sessionCookie > env DALEA_API_KEY.\n // The env fallback matches OpenAI/Anthropic ergonomics — a server-side\n // `new DaleaClient()` \"just works\" when DALEA_API_KEY is set.\n if (cfg.credential) return cfg.credential;\n if (cfg.apiKey) return new ApiKeyCredential(cfg.apiKey);\n if (cfg.sessionCookie) return new SessionCookieCredential();\n const envKey = readEnv('DALEA_API_KEY');\n if (envKey) return new ApiKeyCredential(envKey);\n throw new Error(\n 'DaleaClient: provide one of { apiKey, sessionCookie, credential }, or set the DALEA_API_KEY env var',\n );\n}\n\n/** A per-token view of the client (shares config + workspace; swaps the credential). */\nexport interface DaleaClientView {\n readonly data: DataResource;\n}\n\n/**\n * The Dalea client. Provides typed access to the `data` API: environments,\n * tables, columns, objects, saved queries, schema, and import/export.\n */\nexport class DaleaClient {\n private readonly resolved: ResolvedConfig;\n private readonly serviceUrls: Partial<Record<ServiceDomain, string>>;\n private readonly workspace: WorkspaceContext;\n readonly data: DataResource;\n\n constructor(cfg: ClientConfig) {\n this.resolved = resolveConfig(cfg);\n this.serviceUrls = cfg.serviceUrls ?? {};\n this.workspace = new WorkspaceContext(cfg.workspace);\n const credential = credentialFromConfig(cfg);\n this.data = new DataResource(this.transportFor('data', credential));\n }\n\n // A transport bound to the domain's base URL (a per-service override, or the\n // shared baseUrl when none is set). Shares the resolved config and workspace.\n private transportFor(domain: ServiceDomain, credential: Credential): Transport {\n const override = this.serviceUrls[domain];\n const resolved =\n override !== undefined && override !== this.resolved.baseUrl\n ? { ...this.resolved, baseUrl: override }\n : this.resolved;\n return new Transport(resolved, credential, this.workspace);\n }\n\n /** Set the default workspace (X-Workspace) for subsequent calls. */\n setWorkspace(id: string | null) {\n this.workspace.set(id);\n }\n\n /**\n * Returns a lightweight view authenticated with a per-call bearer token,\n * sharing this client's config, interceptors and workspace context. Useful for\n * authenticating individual requests with a caller-supplied token.\n */\n as(token: string): DaleaClientView {\n const credential = new BearerCredential(token);\n return {\n data: new DataResource(this.transportFor('data', credential)),\n };\n }\n}\n","import type { Credential, RequestContext } from './credentials.js';\n\n/** The token set an OAuth credential holds and rotates. */\nexport interface OAuthTokens {\n accessToken: string;\n /** Present when the client was granted `offline_access`; enables `refresh()`. */\n refreshToken?: string;\n /** Unix epoch ms the access token expires (derived from `expires_in`); informational. */\n expiresAt?: number;\n}\n\nexport interface OAuthPkceConfig {\n /** OAuth 2.1 token endpoint, e.g. `https://auth.dalea.tech/api/v1/auth/oauth2/token`. */\n tokenEndpoint: string;\n /** Public client id registered for this app. */\n clientId: string;\n /** Current tokens (at minimum an `accessToken`). */\n tokens: OAuthTokens;\n /** Confidential clients only — public/PKCE clients omit this. */\n clientSecret?: string;\n /** Invoked whenever the tokens rotate (refresh / code exchange) so the caller can persist them. */\n onTokens?: (tokens: OAuthTokens) => void;\n /** Injectable fetch (tests / custom transports). Defaults to global fetch. */\n fetch?: typeof fetch;\n}\n\n/** Raw OAuth 2.1 token-endpoint response (snake_case, per RFC 6749). */\ninterface TokenEndpointResponse {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n}\n\n/**\n * OAuth 2.1 + PKCE credential. Implements the SAME `Credential` interface as\n * ApiKey / SessionCookie / Bearer — the client never learns it exists, which is\n * the whole point of the pluggable auth seam: a caller swaps\n * `{ credential: new OAuthPkceCredential(...) }` and every resource call now\n * carries a bearer access token, refreshed transparently on a 401.\n *\n * The full PKCE dance (generate verifier+challenge → redirect the user to the\n * authorize endpoint → exchange the returned code) is a browser/redirect concern;\n * `generatePkcePair()` and `exchangeCode()` cover the SDK-side halves, and the\n * resulting instance is a ready-to-use `Credential`.\n */\nexport class OAuthPkceCredential implements Credential {\n private tokens: OAuthTokens;\n private readonly fetchImpl: typeof fetch;\n\n constructor(private readonly cfg: OAuthPkceConfig) {\n this.tokens = cfg.tokens;\n this.fetchImpl = cfg.fetch ?? globalThis.fetch?.bind(globalThis);\n if (!this.fetchImpl) {\n throw new Error('OAuthPkceCredential: no global fetch available; pass cfg.fetch');\n }\n }\n\n apply(ctx: RequestContext) {\n ctx.headers.set('Authorization', `Bearer ${this.tokens.accessToken}`);\n }\n\n /**\n * Called by the transport on a 401. Exchanges the refresh token for a fresh\n * access token and returns `true` so the request is replayed ONCE. Returns\n * `false` (no retry — the original 401 surfaces) when there is no refresh token\n * or the grant fails, so a revoked session can't spin in a refresh loop.\n */\n async refresh(): Promise<boolean> {\n if (!this.tokens.refreshToken) return false;\n try {\n await this.grant({\n grant_type: 'refresh_token',\n refresh_token: this.tokens.refreshToken,\n client_id: this.cfg.clientId,\n ...(this.cfg.clientSecret ? { client_secret: this.cfg.clientSecret } : {}),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n /** Stable-ish dedup id; the access-token suffix changes only on the rare refresh. */\n key() {\n return `oauth:${this.tokens.accessToken.slice(-8)}`;\n }\n\n /** The tokens this credential currently holds (post-refresh / post-exchange). */\n currentTokens(): OAuthTokens {\n return this.tokens;\n }\n\n // POST the token endpoint as `application/x-www-form-urlencoded`, adopt the\n // returned tokens, and notify `onTokens`. Shared by refresh() + exchangeCode().\n private async grant(body: Record<string, string>): Promise<OAuthTokens> {\n const res = await this.fetchImpl(this.cfg.tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams(body).toString(),\n });\n if (!res.ok) {\n throw new Error(`OAuth token endpoint returned ${res.status}`);\n }\n const json = (await res.json()) as TokenEndpointResponse;\n const next: OAuthTokens = {\n accessToken: json.access_token,\n // A refresh response may omit refresh_token (non-rotating servers) — keep the old one.\n refreshToken: json.refresh_token ?? this.tokens.refreshToken,\n expiresAt: typeof json.expires_in === 'number' ? Date.now() + json.expires_in * 1000 : undefined,\n };\n this.tokens = next;\n this.cfg.onTokens?.(next);\n return next;\n }\n\n /**\n * Exchange a PKCE authorization code for tokens and return a ready credential.\n * Run after the user is redirected back with `?code=…`; pass the `codeVerifier`\n * from the matching `generatePkcePair()` call.\n */\n static async exchangeCode(params: {\n tokenEndpoint: string;\n clientId: string;\n code: string;\n codeVerifier: string;\n redirectUri: string;\n clientSecret?: string;\n onTokens?: (tokens: OAuthTokens) => void;\n fetch?: typeof fetch;\n }): Promise<OAuthPkceCredential> {\n const cred = new OAuthPkceCredential({\n tokenEndpoint: params.tokenEndpoint,\n clientId: params.clientId,\n clientSecret: params.clientSecret,\n onTokens: params.onTokens,\n fetch: params.fetch,\n // Placeholder — replaced by the grant below before the credential is used.\n tokens: { accessToken: '' },\n });\n await cred.grant({\n grant_type: 'authorization_code',\n code: params.code,\n code_verifier: params.codeVerifier,\n redirect_uri: params.redirectUri,\n client_id: params.clientId,\n ...(params.clientSecret ? { client_secret: params.clientSecret } : {}),\n });\n return cred;\n }\n\n /**\n * Generate a PKCE `code_verifier` + S256 `code_challenge`. Stash the verifier\n * (e.g. sessionStorage) and send the challenge to the authorize endpoint with\n * `code_challenge_method=S256`. Uses Web Crypto (browser / Node 18+ / edge).\n */\n static async generatePkcePair(): Promise<{ codeVerifier: string; codeChallenge: string }> {\n const verifierBytes = crypto.getRandomValues(new Uint8Array(32));\n const codeVerifier = base64UrlEncode(verifierBytes);\n const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));\n return { codeVerifier, codeChallenge: base64UrlEncode(new Uint8Array(digest)) };\n }\n}\n\n/** RFC 7636 base64url (no padding, `+/`→`-_`), runtime-agnostic. */\nfunction base64UrlEncode(bytes: Uint8Array): string {\n let binary = '';\n for (const b of bytes) binary += String.fromCharCode(b);\n const base64 =\n typeof btoa === 'function'\n ? btoa(binary)\n : Buffer.from(bytes).toString('base64');\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n","import type { Credential, RequestContext } from './credentials.js';\n\nexport interface OAuthClientCredentialsConfig {\n /** OAuth 2.1 token endpoint, e.g. `https://auth.dalea.tech/api/v1/auth/oauth2/token`. */\n tokenEndpoint: string;\n /** Confidential client id. */\n clientId: string;\n /** Confidential client secret — the only long-lived secret; it never leaves this process except to mint a token. */\n clientSecret: string;\n /** Optional space-separated scopes to request. */\n scope?: string;\n /** Re-mint this many ms before the access token expires (clock-skew guard; default 60s). */\n expirySkewMs?: number;\n /** Injectable fetch (tests / custom transports). Defaults to global fetch. */\n fetch?: typeof fetch;\n}\n\ninterface TokenEndpointResponse {\n access_token: string;\n expires_in?: number;\n token_type?: string;\n}\n\n/**\n * OAuth 2.1 **client-credentials** credential — machine-to-machine auth with no\n * user. Implements the same `Credential` interface as ApiKey / Bearer / OAuthPkce,\n * so swapping it in is the only change a caller makes.\n *\n * It holds the long-lived `clientSecret` only to mint **short-lived** access\n * tokens at the token endpoint, caches the token until just before it expires,\n * and re-mints on demand (or when the transport calls `refresh()` after a 401).\n * No refresh token is used — the client simply re-authenticates, which is the\n * standard client-credentials posture.\n */\nexport class OAuthClientCredentialsCredential implements Credential {\n private accessToken?: string;\n private expiresAt = 0; // epoch ms\n private inflight?: Promise<void>;\n private readonly skewMs: number;\n private readonly fetchImpl: typeof fetch;\n\n constructor(private readonly cfg: OAuthClientCredentialsConfig) {\n this.skewMs = cfg.expirySkewMs ?? 60_000;\n this.fetchImpl = cfg.fetch ?? globalThis.fetch?.bind(globalThis);\n if (!this.fetchImpl) {\n throw new Error('OAuthClientCredentialsCredential: no global fetch available; pass cfg.fetch');\n }\n }\n\n /** Ensure a fresh token, then set the bearer header. `apply` is awaited by the transport. */\n async apply(ctx: RequestContext) {\n await this.ensureToken();\n ctx.headers.set('Authorization', `Bearer ${this.accessToken}`);\n }\n\n /** Force a re-mint on a 401 (e.g. the token was revoked mid-life); retry once. */\n async refresh(): Promise<boolean> {\n this.inflight = undefined;\n this.expiresAt = 0;\n try {\n await this.ensureToken();\n return true;\n } catch {\n return false;\n }\n }\n\n key() {\n return `cc:${this.cfg.clientId.slice(-8)}`;\n }\n\n // Mint lazily, coalescing concurrent callers onto one in-flight request so a\n // burst of parallel calls doesn't hammer the token endpoint.\n private ensureToken(): Promise<void> {\n if (this.accessToken && Date.now() < this.expiresAt - this.skewMs) return Promise.resolve();\n this.inflight ??= this.mint().finally(() => {\n this.inflight = undefined;\n });\n return this.inflight;\n }\n\n private async mint(): Promise<void> {\n const body: Record<string, string> = {\n grant_type: 'client_credentials',\n client_id: this.cfg.clientId,\n client_secret: this.cfg.clientSecret,\n };\n if (this.cfg.scope) body.scope = this.cfg.scope;\n const res = await this.fetchImpl(this.cfg.tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams(body).toString(),\n });\n if (!res.ok) {\n throw new Error(`OAuth token endpoint returned ${res.status}`);\n }\n const json = (await res.json()) as TokenEndpointResponse;\n this.accessToken = json.access_token;\n this.expiresAt = Date.now() + (typeof json.expires_in === 'number' ? json.expires_in : 3600) * 1000;\n }\n}\n","import { DaleaNetworkError } from './errors.js';\n\n/**\n * Parse a Server-Sent Events response body into an async iterable of JSON-decoded\n * `data:` events — a faithful port of the web chat consumer's stream loop.\n *\n * - Splits on newlines, buffering the trailing partial line across reads.\n * - Yields `JSON.parse` of each `data:` payload (one event per line); the\n * terminating `data: [DONE]` sentinel ends iteration.\n * - Non-`data:` lines (`event:` / `id:` / comments / blank keep-alives) are ignored.\n * - Malformed `data:` JSON is skipped (matches the web consumer — a partial frame\n * on cancel must not blow up the loop).\n *\n * The underlying request is already error-mapped by the transport (a non-2xx\n * throws a DaleaError before the body is handed here), so this only ever runs on\n * a 200 stream. Breaking the consuming `for await` cancels the body via the\n * generator's `finally`.\n */\nexport async function* parseSSE<T>(response: Response): AsyncGenerator<T> {\n const body = response.body;\n if (!body) {\n throw new DaleaNetworkError(0, 'NO_STREAM_BODY', 'Streaming response had no body', undefined, true);\n }\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n // One SSE line → an action. `done` ends iteration (`[DONE]`); a tuple yields one\n // event; `null` skips (non-data / blank / malformed). Shared by the read loop and\n // the end-of-stream flush so a final newline-less frame isn't dropped.\n const frame = (line: string): { done: true } | [T] | null => {\n if (!line.startsWith('data:')) return null;\n const data = line.slice(5).trim();\n if (data === '') return null;\n if (data === '[DONE]') return { done: true };\n try {\n return [JSON.parse(data) as T];\n } catch {\n return null; // malformed / partial frame\n }\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n // Flush a trailing frame that closed without a newline (`lines.pop()` left\n // it in the buffer). The Dalea server always newline-terminates, but a\n // well-formed SSE stream needn't, and a public client should handle it.\n const tail = frame(buffer);\n if (tail && !('done' in tail)) yield tail[0];\n break;\n }\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? ''; // keep the trailing partial line for the next read\n for (const line of lines) {\n const f = frame(line);\n if (f === null) continue;\n if ('done' in f) return;\n yield f[0];\n }\n }\n } finally {\n reader.releaseLock();\n // Best-effort cancel so an early `break` doesn't leak the connection.\n void body.cancel().catch(() => {});\n }\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@dalea/sdk",
3
+ "version": "0.1.2",
4
+ "description": "The official TypeScript & JavaScript SDK for the Dalea data platform.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Dalea",
8
+ "homepage": "https://dalea.app",
9
+ "keywords": [
10
+ "dalea",
11
+ "sdk",
12
+ "api",
13
+ "client",
14
+ "openapi",
15
+ "typescript",
16
+ "data-platform"
17
+ ],
18
+ "engines": {
19
+ "node": ">=20"
20
+ },
21
+ "main": "./dist/index.cjs",
22
+ "module": "./dist/index.js",
23
+ "types": "./dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js",
28
+ "require": "./dist/index.cjs"
29
+ }
30
+ },
31
+ "sideEffects": false,
32
+ "files": [
33
+ "dist"
34
+ ],
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "scripts": {
39
+ "build": "tsup",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "vitest run",
42
+ "test:watch": "vitest",
43
+ "clean": "rm -rf dist"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^22.10.1",
47
+ "tsup": "^8.0.0",
48
+ "typescript": "^5.7.2",
49
+ "vitest": "^4.0.18"
50
+ }
51
+ }