@dialgem/sdk 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/LICENSE +202 -0
- package/README.md +257 -0
- package/dist/index.cjs +712 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2240 -0
- package/dist/index.d.ts +2240 -0
- package/dist/index.js +688 -0
- package/dist/index.js.map +1 -0
- package/examples/export-calls.ts +37 -0
- package/examples/outbound-call.ts +36 -0
- package/examples/provision-agent.ts +61 -0
- package/examples/twilio-register.ts +44 -0
- package/examples/webhook-express.ts +39 -0
- package/examples/webhook-fastify.ts +31 -0
- package/examples/webhook-nextjs-route.ts +24 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/errors.ts","../src/version.ts","../src/core/http.ts","../src/resources/resource.ts","../src/resources/agents.ts","../src/core/pagination.ts","../src/resources/calls.ts","../src/resources/catalog.ts","../src/resources/phone-numbers.ts","../src/webhooks.ts","../src/client.ts"],"names":["path"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Every failure the SDK raises is a `DialgemError`.\n *\n * HTTP failures are `APIError` subclasses chosen by status, so a caller can\n * `catch (e) { if (e instanceof NotFoundError) ... }`. Within a status, branch on\n * `errCode`: the API documents `err_code` as the one field clients\n * branch on, e.g. `flow_invalid`,\n * `flow_not_runnable`, `NOT_A_MEMBER`.\n */\n\n/**\n * One entry of `issues[]` (in an error body, or an agent's `flow_validation`): a\n * field error or a flow graph rule.\n */\nexport interface ErrorIssue {\n /** Stable machine-readable identifier of the rule. */\n code?: string\n severity?: \"error\" | \"warning\"\n message?: string\n node_id?: string | null\n edge_id?: string | null\n /** Path into the request body, for field errors. */\n loc?: (string | number)[] | null\n meta?: Record<string, unknown>\n [key: string]: unknown\n}\n\n/** The API's error envelope. */\nexport interface ErrorBody {\n err_code: string\n err_msg: string\n request_id: string\n issues?: ErrorIssue[]\n [key: string]: unknown\n}\n\n/** Minimal read-only view of response headers, independent of the fetch implementation. */\nexport interface HeadersLike {\n get(name: string): string | null\n}\n\nexport class DialgemError extends Error {\n override name = \"DialgemError\"\n}\n\nexport class APIError extends DialgemError {\n override name = \"APIError\"\n /** HTTP status code. */\n readonly status: number\n /** The service's `err_code`, e.g. `flow_invalid` or `HTTP_404`. Undefined if the body was not the envelope. */\n readonly errCode: string | undefined\n /** The service's `request_id`. Quote it when contacting support. */\n readonly requestId: string | undefined\n /** Field/graph diagnostics, present on validation failures. */\n readonly issues: readonly ErrorIssue[]\n /** Parsed JSON body, or the raw text if the body was not JSON. */\n readonly body: unknown\n readonly headers: HeadersLike\n\n constructor(status: number, body: unknown, message: string, headers: HeadersLike) {\n super(message)\n this.status = status\n this.body = body\n this.headers = headers\n const envelope = isErrorBody(body) ? body : undefined\n this.errCode = envelope?.err_code\n this.requestId = envelope?.request_id ?? headers.get(\"x-request-id\") ?? undefined\n this.issues = envelope?.issues ?? []\n }\n\n /** Build the subclass matching `status`. */\n static from(status: number, body: unknown, statusText: string, headers: HeadersLike): APIError {\n const envelope = isErrorBody(body) ? body : undefined\n const detail = envelope?.err_msg || (typeof body === \"string\" && body.trim() ? body.trim().slice(0, 500) : \"\")\n const message = detail ? `${status} ${detail}` : `${status} ${statusText || \"status code (no body)\"}`\n const Ctor = errorClassFor(status)\n return new Ctor(status, body, message, headers)\n }\n}\n\nexport class BadRequestError extends APIError {\n override name = \"BadRequestError\"\n}\nexport class AuthenticationError extends APIError {\n override name = \"AuthenticationError\"\n}\nexport class PermissionDeniedError extends APIError {\n override name = \"PermissionDeniedError\"\n}\nexport class NotFoundError extends APIError {\n override name = \"NotFoundError\"\n}\nexport class ConflictError extends APIError {\n override name = \"ConflictError\"\n}\nexport class UnprocessableEntityError extends APIError {\n override name = \"UnprocessableEntityError\"\n}\nexport class RateLimitError extends APIError {\n override name = \"RateLimitError\"\n}\nexport class InternalServerError extends APIError {\n override name = \"InternalServerError\"\n}\n\n/** The request never produced an HTTP response (DNS, TLS, reset, aborted by the caller). */\nexport class APIConnectionError extends DialgemError {\n override name = \"APIConnectionError\"\n constructor(message = \"Connection error.\", options?: { cause?: unknown }) {\n super(message, options)\n }\n}\n\n/** The caller's `signal` aborted the request. Never retried. */\nexport class APIUserAbortError extends DialgemError {\n override name = \"APIUserAbortError\"\n constructor(message = \"Request was aborted.\") {\n super(message)\n }\n}\n\n/** The request exceeded the configured `timeout`. */\nexport class APIConnectionTimeoutError extends APIConnectionError {\n override name = \"APIConnectionTimeoutError\"\n constructor(message = \"Request timed out.\") {\n super(message)\n }\n}\n\n/** A webhook's signature did not match its body. */\nexport class WebhookVerificationError extends DialgemError {\n override name = \"WebhookVerificationError\"\n}\n\nfunction errorClassFor(status: number): typeof APIError {\n switch (status) {\n case 400:\n return BadRequestError\n case 401:\n return AuthenticationError\n case 403:\n return PermissionDeniedError\n case 404:\n return NotFoundError\n case 409:\n return ConflictError\n case 422:\n return UnprocessableEntityError\n case 429:\n return RateLimitError\n default:\n return status >= 500 ? InternalServerError : APIError\n }\n}\n\nfunction isErrorBody(body: unknown): body is ErrorBody {\n return typeof body === \"object\" && body !== null && typeof (body as { err_code?: unknown }).err_code === \"string\"\n}\n","// Kept in step with package.json by tests/version.test.ts.\nexport const VERSION = \"0.1.0-beta.0\"\n","import {\n APIConnectionError,\n APIConnectionTimeoutError,\n APIError,\n APIUserAbortError,\n DialgemError,\n type HeadersLike,\n} from \"./errors.js\"\nimport { VERSION } from \"../version.js\"\n\n/**\n * The slice of `fetch` the SDK uses. Declared structurally so any conforming\n * implementation (Node's global fetch, undici, node-fetch, a test double) fits,\n * without the SDK's public types depending on DOM lib typings.\n */\nexport type Fetch = (url: string, init: FetchInit) => Promise<FetchResponse>\n\nexport interface FetchInit {\n method: string\n headers: Record<string, string>\n body?: string\n signal: AbortSignal\n /**\n * Always `\"manual\"`. A followed redirect re-sends the API key to wherever the\n * `Location` points (fetch strips only `Authorization` cross-origin, not\n * `X-API-Key`), and turns a 301'd POST into a GET that \"succeeds\" with the\n * wrong body. The API never redirects, so a 3xx is surfaced as an `APIError`.\n */\n redirect: \"manual\"\n}\n\nexport interface FetchResponse {\n readonly status: number\n readonly statusText: string\n readonly headers: HeadersLike\n text(): Promise<string>\n}\n\n/** Per-call overrides, accepted as the last argument of every resource method. */\n// Every optional field also accepts an explicit `undefined`, so a caller compiling\n// with `exactOptionalPropertyTypes` can pass `{ signal: maybeSignal }` directly.\nexport interface RequestOptions {\n /** Milliseconds (> 0) before the attempt is aborted. Applies per attempt, not across retries. */\n timeout?: number | undefined\n /**\n * Retries on 408/429/5xx and connection failures.\n *\n * GET, PATCH and DELETE use the client's `maxRetries` unless overridden here.\n * **POST is never retried unless you set this explicitly**: most POSTs create\n * things, and an outbound call retried after an ambiguous 502 dials the person twice.\n */\n maxRetries?: number | undefined\n /** Abort the request. Surfaces as `APIUserAbortError`. */\n signal?: AbortSignal | undefined\n /** Extra headers for this request only. */\n headers?: Record<string, string> | undefined\n}\n\nexport type QueryValue = string | number | boolean | null | undefined\nexport type Query = Record<string, QueryValue>\n\nexport interface HttpClientOptions {\n apiKey: string\n baseURL: string\n timeout: number\n maxRetries: number\n fetch: Fetch\n defaultHeaders: Record<string, string>\n}\n\ntype Method = \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\"\n\nconst RETRYABLE_METHODS: ReadonlySet<Method> = new Set([\"GET\", \"PATCH\", \"DELETE\"])\nconst MAX_RETRY_DELAY_MS = 60_000\n\nexport class HttpClient {\n readonly baseURL: string\n readonly #apiKey: string\n readonly #timeout: number\n readonly #maxRetries: number\n readonly #fetch: Fetch\n readonly #defaultHeaders: Record<string, string>\n\n constructor(options: HttpClientOptions) {\n this.baseURL = options.baseURL.replace(/\\/+$/, \"\")\n this.#apiKey = options.apiKey\n this.#timeout = options.timeout\n this.#maxRetries = options.maxRetries\n this.#fetch = options.fetch\n this.#defaultHeaders = options.defaultHeaders\n }\n\n get<T>(path: string, query?: Query, options?: RequestOptions): Promise<T> {\n return this.request<T>(\"GET\", path, { query, options })\n }\n\n post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(\"POST\", path, { body, options })\n }\n\n patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(\"PATCH\", path, { body, options })\n }\n\n delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(\"DELETE\", path, { options })\n }\n\n async request<T>(\n method: Method,\n path: string,\n { query, body, options = {} }: { query?: Query | undefined; body?: unknown; options?: RequestOptions | undefined },\n ): Promise<T> {\n const url = this.buildURL(path, query)\n const headers = this.buildHeaders(body !== undefined, options.headers)\n const payload = body === undefined ? undefined : JSON.stringify(body)\n const timeout = options.timeout ?? this.#timeout\n const maxRetries = options.maxRetries ?? (RETRYABLE_METHODS.has(method) ? this.#maxRetries : 0)\n assertTimeout(timeout)\n assertMaxRetries(maxRetries)\n\n for (let attempt = 0; ; attempt++) {\n const retriesLeft = maxRetries - attempt\n if (options.signal?.aborted) throw new APIUserAbortError()\n\n const outcome = await this.#attempt(url, method, headers, payload, timeout, options.signal)\n\n if (outcome.kind === \"response\") {\n const { status, statusText, headers: responseHeaders, text } = outcome\n if (status >= 200 && status < 300) return parseSuccess<T>(text, status)\n if (retriesLeft > 0 && isRetryableStatus(status)) {\n await sleep(retryAfterMs(responseHeaders) ?? backoffMs(attempt), options.signal)\n continue\n }\n throw APIError.from(status, parseErrorBody(text), statusText, responseHeaders)\n }\n\n if (options.signal?.aborted) throw new APIUserAbortError()\n if (retriesLeft > 0) {\n await sleep(backoffMs(attempt), options.signal)\n continue\n }\n throw outcome.error\n }\n }\n\n /** One HTTP attempt, with its own timeout. Never throws; timers and listeners are released before it returns. */\n async #attempt(\n url: string,\n method: Method,\n headers: Record<string, string>,\n payload: string | undefined,\n timeout: number,\n signal: AbortSignal | undefined,\n ): Promise<\n | { kind: \"response\"; status: number; statusText: string; headers: HeadersLike; text: string }\n | { kind: \"failure\"; error: APIConnectionError }\n > {\n const controller = new AbortController()\n let timedOut = false\n const timer = setTimeout(() => {\n timedOut = true\n controller.abort()\n }, timeout)\n const onUserAbort = () => controller.abort()\n signal?.addEventListener(\"abort\", onUserAbort, { once: true })\n\n try {\n const init: FetchInit = { method, headers, signal: controller.signal, redirect: \"manual\" }\n if (payload !== undefined) init.body = payload\n const response = await this.#fetch(url, init)\n // Read inside the timer: a server that sends headers then stalls the body\n // must still hit the timeout rather than hang the caller.\n const text = await response.text()\n return { kind: \"response\", status: response.status, statusText: response.statusText, headers: response.headers, text }\n } catch (err) {\n const error = timedOut\n ? new APIConnectionTimeoutError(`Request timed out after ${timeout}ms.`)\n : new APIConnectionError(`Connection error: ${describe(err)}`, { cause: err })\n return { kind: \"failure\", error }\n } finally {\n clearTimeout(timer)\n signal?.removeEventListener(\"abort\", onUserAbort)\n }\n }\n\n buildURL(path: string, query?: Query): string {\n const url = `${this.baseURL}${path.startsWith(\"/\") ? path : `/${path}`}`\n if (!query) return url\n const params = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue\n params.append(key, String(value))\n }\n const qs = params.toString()\n return qs ? `${url}?${qs}` : url\n }\n\n private buildHeaders(hasBody: boolean, extra?: Record<string, string>): Record<string, string> {\n // Merged case-insensitively, later layers winning. A plain object spread would\n // keep both `X-API-Key` and a caller's `x-api-key`, which fetch then joins\n // into one comma-separated value the service rejects.\n const merged = new Map<string, [name: string, value: string]>()\n const layer = (headers: Record<string, string> | undefined) => {\n for (const [name, value] of Object.entries(headers ?? {})) merged.set(name.toLowerCase(), [name, value])\n }\n layer({\n Accept: \"application/json\",\n // `X-API-Key`, not `Authorization: Bearer`: the API only tries a\n // Bearer value as a session JWT, so an org key sent that way is a 401.\n \"X-API-Key\": this.#apiKey,\n \"User-Agent\": userAgent(),\n })\n layer(this.#defaultHeaders)\n layer(extra)\n if (hasBody) layer({ \"Content-Type\": \"application/json\" })\n return Object.fromEntries(merged.values())\n }\n}\n\nexport function assertTimeout(value: number): void {\n // 0 is rejected rather than read as \"no timeout\": setTimeout(…, 0) would abort\n // every attempt immediately, and an unbounded request is never what a backend wants.\n if (!Number.isInteger(value) || value <= 0) {\n throw new DialgemError(`\\`timeout\\` must be a positive integer of milliseconds, got ${String(value)}.`)\n }\n}\n\nexport function assertMaxRetries(value: number): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new DialgemError(`\\`maxRetries\\` must be a non-negative integer, got ${String(value)}.`)\n }\n}\n\nfunction parseSuccess<T>(text: string, status: number): T {\n if (status === 204 || text.trim() === \"\") return undefined as T\n try {\n return JSON.parse(text) as T\n } catch (err) {\n throw new DialgemError(`Expected a JSON response (status ${status}) but could not parse it: ${describe(err)}`)\n }\n}\n\nfunction parseErrorBody(text: string): unknown {\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nfunction isRetryableStatus(status: number): boolean {\n // Not 409: the API's 409s are real conflicts (a phone number already\n // registered), which a retry would only repeat.\n return status === 408 || status === 429 || status >= 500\n}\n\n/** Exponential backoff with jitter: ~0.5s, 1s, 2s, … capped at 8s. */\nfunction backoffMs(attempt: number): number {\n const base = Math.min(500 * 2 ** attempt, 8_000)\n return base * (1 - Math.random() * 0.25)\n}\n\n/** Honour `retry-after-ms`, then `Retry-After` (seconds or an HTTP date). */\nfunction retryAfterMs(headers: HeadersLike): number | undefined {\n const ms = Number(headers.get(\"retry-after-ms\"))\n if (Number.isFinite(ms) && ms > 0) return Math.min(ms, MAX_RETRY_DELAY_MS)\n const raw = headers.get(\"retry-after\")\n if (!raw) return undefined\n const seconds = Number(raw)\n if (Number.isFinite(seconds) && seconds >= 0) return Math.min(seconds * 1000, MAX_RETRY_DELAY_MS)\n const date = Date.parse(raw)\n if (Number.isFinite(date)) return Math.min(Math.max(date - Date.now(), 0), MAX_RETRY_DELAY_MS)\n return undefined\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(new APIUserAbortError())\n const onAbort = () => {\n clearTimeout(timer)\n reject(new APIUserAbortError())\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort)\n resolve()\n }, ms)\n signal?.addEventListener(\"abort\", onAbort, { once: true })\n })\n}\n\nfunction userAgent(): string {\n const proc = (globalThis as { process?: { version?: string } }).process\n return proc?.version ? `dialgem-sdk-node/${VERSION} node/${proc.version}` : `dialgem-sdk-node/${VERSION}`\n}\n\nfunction describe(err: unknown): string {\n if (err instanceof Error) {\n const cause = (err as { cause?: unknown }).cause\n return cause instanceof Error ? `${err.message} (${cause.message})` : err.message\n }\n return String(err)\n}\n","import { DialgemError } from \"../core/errors.js\"\nimport type { HttpClient } from \"../core/http.js\"\n\nexport abstract class APIResource {\n protected readonly _client: HttpClient\n\n constructor(client: HttpClient) {\n this._client = client\n }\n}\n\n/**\n * Builds a path with each interpolated id URI-encoded.\n *\n * Rejects an empty id rather than sending it: `/v1/agents/${\"\"}` is\n * `/v1/agents/`, which a `retrieve(\"\")` would turn into a silent *list*\n * call, and a `delete(\"\")` into a confusing 405.\n */\nexport function path(strings: TemplateStringsArray, ...ids: string[]): string {\n let out = strings[0] ?? \"\"\n ids.forEach((id, i) => {\n if (typeof id !== \"string\" || id.trim() === \"\") {\n throw new DialgemError(`Expected a non-empty id in ${strings.join(\"{id}\")}, got ${JSON.stringify(id)}.`)\n }\n out += encodeURIComponent(id) + (strings[i + 1] ?? \"\")\n })\n return out\n}\n","import type { HttpClient, RequestOptions } from \"../core/http.js\"\nimport type { Agent, AgentDeleteResponse } from \"../types/agent.js\"\nimport type { AgentFunction, KnowledgeDocument, MCPServer, MCPServerTestResult } from \"../types/agent-resources.js\"\nimport type {\n AgentCreateParams,\n AgentUpdateParams,\n FunctionCreateParams,\n FunctionReorderParams,\n FunctionUpdateParams,\n KnowledgeDocumentCreateParams,\n MCPServerCreateParams,\n MCPServerUpdateParams,\n} from \"../types/params.js\"\nimport { APIResource, path } from \"./resource.js\"\n\nexport class Agents extends APIResource {\n /** Tools (HTTP functions and built-ins like `end_call`) the agent can call. */\n readonly functions: AgentFunctions\n /** Text documents the agent retrieves from during the call. */\n readonly knowledge: AgentKnowledge\n /** Remote MCP servers whose tools are exposed to the agent. */\n readonly mcpServers: AgentMCPServers\n\n constructor(client: HttpClient) {\n super(client)\n this.functions = new AgentFunctions(client)\n this.knowledge = new AgentKnowledge(client)\n this.mcpServers = new AgentMCPServers(client)\n }\n\n /** Create an agent. Only `name` is required; everything else has a server default. */\n create(body: AgentCreateParams, options?: RequestOptions): Promise<Agent> {\n return this._client.post(\"/v1/agents\", body, options)\n }\n\n retrieve(agentId: string, options?: RequestOptions): Promise<Agent> {\n return this._client.get(path`/v1/agents/${agentId}`, undefined, options)\n }\n\n /** Every agent in the organization. `webhook_signing_secret` is `null` in this list. */\n list(options?: RequestOptions): Promise<Agent[]> {\n return this._client.get(\"/v1/agents\", undefined, options)\n }\n\n /** Partial update: only the fields you send change. */\n update(agentId: string, body: AgentUpdateParams, options?: RequestOptions): Promise<Agent> {\n return this._client.patch(path`/v1/agents/${agentId}`, body, options)\n }\n\n delete(agentId: string, options?: RequestOptions): Promise<AgentDeleteResponse> {\n return this._client.delete(path`/v1/agents/${agentId}`, options)\n }\n}\n\nexport class AgentFunctions extends APIResource {\n list(agentId: string, options?: RequestOptions): Promise<AgentFunction[]> {\n return this._client.get(path`/v1/agents/${agentId}/functions`, undefined, options)\n }\n\n create(agentId: string, body: FunctionCreateParams, options?: RequestOptions): Promise<AgentFunction> {\n return this._client.post(path`/v1/agents/${agentId}/functions`, body, options)\n }\n\n update(\n agentId: string,\n functionId: string,\n body: FunctionUpdateParams,\n options?: RequestOptions,\n ): Promise<AgentFunction> {\n return this._client.patch(path`/v1/agents/${agentId}/functions/${functionId}`, body, options)\n }\n\n delete(agentId: string, functionId: string, options?: RequestOptions): Promise<void> {\n return this._client.delete(path`/v1/agents/${agentId}/functions/${functionId}`, options)\n }\n\n /** Set the order functions are offered to the LLM. `order` is function ids, first to last. */\n reorder(agentId: string, body: FunctionReorderParams, options?: RequestOptions): Promise<void> {\n return this._client.post(path`/v1/agents/${agentId}/functions/reorder`, body, options)\n }\n}\n\nexport class AgentKnowledge extends APIResource {\n list(agentId: string, options?: RequestOptions): Promise<KnowledgeDocument[]> {\n return this._client.get(path`/v1/agents/${agentId}/knowledge`, undefined, options)\n }\n\n /** Add a plain-text document (up to 500,000 characters). It is chunked and embedded server-side. */\n create(agentId: string, body: KnowledgeDocumentCreateParams, options?: RequestOptions): Promise<KnowledgeDocument> {\n return this._client.post(path`/v1/agents/${agentId}/knowledge`, body, options)\n }\n\n delete(agentId: string, sourceId: string, options?: RequestOptions): Promise<void> {\n return this._client.delete(path`/v1/agents/${agentId}/knowledge/${sourceId}`, options)\n }\n}\n\nexport class AgentMCPServers extends APIResource {\n list(agentId: string, options?: RequestOptions): Promise<MCPServer[]> {\n return this._client.get(path`/v1/agents/${agentId}/mcp-servers`, undefined, options)\n }\n\n create(agentId: string, body: MCPServerCreateParams, options?: RequestOptions): Promise<MCPServer> {\n return this._client.post(path`/v1/agents/${agentId}/mcp-servers`, body, options)\n }\n\n update(agentId: string, serverId: string, body: MCPServerUpdateParams, options?: RequestOptions): Promise<MCPServer> {\n return this._client.patch(path`/v1/agents/${agentId}/mcp-servers/${serverId}`, body, options)\n }\n\n delete(agentId: string, serverId: string, options?: RequestOptions): Promise<void> {\n return this._client.delete(path`/v1/agents/${agentId}/mcp-servers/${serverId}`, options)\n }\n\n /** Connect to the server now, list its tools, and store the result as `last_status`. */\n test(agentId: string, serverId: string, options?: RequestOptions): Promise<MCPServerTestResult> {\n return this._client.post(path`/v1/agents/${agentId}/mcp-servers/${serverId}/test`, undefined, options)\n }\n}\n","/**\n * Page-based pagination, the only style the API uses today (`GET /v1/calls`:\n * `page` ≥ 1, `page_size` ≤ 100, envelope carrying `total`).\n *\n * `list()` returns a `PagePromise`, which is both awaitable (one page) and\n * async-iterable (every item across pages):\n *\n * const first = await client.calls.list({ page_size: 50 })\n * for await (const call of client.calls.list({ status: \"completed\" })) { ... }\n *\n * Offset pages are not a snapshot. Calls are ordered newest-first, so a call that\n * starts mid-iteration shifts later pages by one and the iterator can yield a\n * call twice. De-duplicate on `id` when that matters.\n */\nimport { DialgemError } from \"./errors.js\"\n\nexport interface PageFetcher<T> {\n (page: number): Promise<PageData<T>>\n}\n\nexport interface PageData<T> {\n data: T[]\n total: number\n page: number\n page_size: number\n}\n\nexport class Page<T> implements PageData<T> {\n readonly data: T[]\n readonly total: number\n readonly page: number\n readonly page_size: number\n readonly #fetchPage: PageFetcher<T>\n\n constructor(data: PageData<T>, fetchPage: PageFetcher<T>) {\n this.data = data.data\n this.total = data.total\n this.page = data.page\n this.page_size = data.page_size\n this.#fetchPage = fetchPage\n }\n\n hasNextPage(): boolean {\n return this.data.length > 0 && this.page * this.page_size < this.total\n }\n\n async getNextPage(): Promise<Page<T>> {\n if (!this.hasNextPage()) throw new DialgemError(\"No next page; check hasNextPage() first.\")\n return new Page(await this.#fetchPage(this.page + 1), this.#fetchPage)\n }\n}\n\nexport class PagePromise<T> implements PromiseLike<Page<T>>, AsyncIterable<T> {\n readonly #fetchPage: PageFetcher<T>\n readonly #startPage: number\n #first: Promise<Page<T>> | undefined\n\n constructor(fetchPage: PageFetcher<T>, startPage: number) {\n this.#fetchPage = fetchPage\n this.#startPage = startPage\n }\n\n #firstPage(): Promise<Page<T>> {\n // Lazy and memoised: nothing is sent until awaited or iterated, and awaiting\n // then iterating the same PagePromise does not refetch page one.\n this.#first ??= this.#fetchPage(this.#startPage).then((data) => new Page(data, this.#fetchPage))\n return this.#first\n }\n\n then<R1 = Page<T>, R2 = never>(\n onfulfilled?: ((value: Page<T>) => R1 | PromiseLike<R1>) | null,\n onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this.#firstPage().then(onfulfilled, onrejected)\n }\n\n catch<R = never>(onrejected?: ((reason: unknown) => R | PromiseLike<R>) | null): Promise<Page<T> | R> {\n return this.#firstPage().catch(onrejected)\n }\n\n finally(onfinally?: (() => void) | null): Promise<Page<T>> {\n return this.#firstPage().finally(onfinally)\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let page: Page<T> = await this.#firstPage()\n for (;;) {\n yield* page.data\n if (!page.hasNextPage()) return\n page = await page.getNextPage()\n }\n }\n}\n","import type { RequestOptions } from \"../core/http.js\"\nimport { PagePromise, type PageData } from \"../core/pagination.js\"\nimport type {\n Call,\n CallListParams,\n CallRegisterResponse,\n PhoneCallCreateResponse,\n} from \"../types/call.js\"\nimport type { CallCreatePhoneCallParams, CallRegisterParams } from \"../types/params.js\"\nimport { APIResource, path } from \"./resource.js\"\n\ninterface CallListEnvelope {\n calls: Call[]\n total: number\n page: number\n page_size: number\n}\n\nexport class Calls extends APIResource {\n /**\n * Calls, newest first. Await for one page, or iterate for every call:\n *\n * const page = await dialgem.calls.list({ page_size: 50 })\n * for await (const call of dialgem.calls.list({ status: \"completed\" })) {\n * if (call.started_at < cutoff) break // newest first: everything after is older\n * }\n */\n list(params: CallListParams = {}, options?: RequestOptions): PagePromise<Call> {\n const fetchPage = async (page: number): Promise<PageData<Call>> => {\n const res = await this._client.get<CallListEnvelope>(\"/v1/calls\", { ...params, page }, options)\n return { data: res.calls, total: res.total, page: res.page, page_size: res.page_size }\n }\n return new PagePromise(fetchPage, params.page ?? 1)\n }\n\n /** One call, including its transcript, analysis and recording URL. */\n retrieve(callId: string, options?: RequestOptions): Promise<Call> {\n return this._client.get(path`/v1/calls/${callId}`, undefined, options)\n }\n\n /**\n * Dial `to` from one of your organization's numbers, with `agent_id` (or the\n * number's outbound agent) on the line.\n *\n * Not retried by default: a retry after an ambiguous failure can place a\n * second call. Follow progress through webhooks or `retrieve(call_id)`.\n */\n createPhoneCall(body: CallCreatePhoneCallParams, options?: RequestOptions): Promise<PhoneCallCreateResponse> {\n return this._client.post(\"/v1/calls/outbound\", body, options)\n }\n\n /**\n * Bring-your-own-Twilio: call this from your Twilio voice webhook, then answer\n * Twilio with `<Response><Connect><Stream url=\"{stream_url}\"/></Connect></Response>`.\n * No Twilio credentials are shared with Dialgem.\n */\n register(body: CallRegisterParams, options?: RequestOptions): Promise<CallRegisterResponse> {\n return this._client.post(\"/v1/calls/register\", body, options)\n }\n}\n","import type { Query, RequestOptions } from \"../core/http.js\"\nimport type {\n FlowTemplate,\n FlowTemplateSummary,\n PromptTemplate,\n PromptTemplateSummary,\n TemplateListParams,\n Voice,\n VoiceListParams,\n} from \"../types/catalog.js\"\nimport { APIResource, path } from \"./resource.js\"\n\nexport class Voices extends APIResource {\n /** Voices available to agents, by name. Put a voice's `provider_voice_id` in an agent's `voice_id`. */\n list(params: VoiceListParams = {}, options?: RequestOptions): Promise<Voice[]> {\n return this._client.get(\"/v1/voices\", params as Query, options)\n }\n}\n\nexport class FlowTemplates extends APIResource {\n /** Built-in conversation-flow templates (summaries, without `flow_config`). */\n list(params: TemplateListParams = {}, options?: RequestOptions): Promise<FlowTemplateSummary[]> {\n return this._client.get(\"/v1/flow-templates\", params as Query, options)\n }\n\n retrieve(templateId: string, options?: RequestOptions): Promise<FlowTemplate> {\n return this._client.get(path`/v1/flow-templates/${templateId}`, undefined, options)\n }\n}\n\nexport class PromptTemplates extends APIResource {\n /** Built-in prompt templates (summaries, without the prompt text). */\n list(params: TemplateListParams = {}, options?: RequestOptions): Promise<PromptTemplateSummary[]> {\n return this._client.get(\"/v1/prompt-templates\", params as Query, options)\n }\n\n retrieve(templateId: string, options?: RequestOptions): Promise<PromptTemplate> {\n return this._client.get(path`/v1/prompt-templates/${templateId}`, undefined, options)\n }\n}\n","import type { RequestOptions } from \"../core/http.js\"\nimport type { PhoneNumberAssignParams, PhoneNumberCreateParams, PhoneNumberUpdateParams } from \"../types/params.js\"\nimport type { PhoneNumber } from \"../types/phone-number.js\"\nimport { APIResource, path } from \"./resource.js\"\n\nexport class PhoneNumbers extends APIResource {\n /** Register a number you own (`phone_number` in E.164) with Dialgem. */\n create(body: PhoneNumberCreateParams, options?: RequestOptions): Promise<PhoneNumber> {\n return this._client.post(\"/v1/phone-numbers\", body, options)\n }\n\n /** Every active (not released) number in the organization, newest first. */\n list(options?: RequestOptions): Promise<PhoneNumber[]> {\n return this._client.get(\"/v1/phone-numbers\", undefined, options)\n }\n\n /**\n * Partial update.\n *\n * `inbound_agent_id` is **ignored unless `set_inbound_agent: true`** is sent with\n * it, both to set an agent and to clear one (`null`). Same for the outbound pair.\n * `inbound_agents` / `outbound_agents` (weighted routing), when sent, take\n * precedence over the single-agent fields.\n */\n update(phoneNumberId: string, body: PhoneNumberUpdateParams, options?: RequestOptions): Promise<PhoneNumber> {\n return this._client.patch(path`/v1/phone-numbers/${phoneNumberId}`, body, options)\n }\n\n /** Set the number's **inbound** agent, or pass `agent_id: null` to clear it. For outbound, use `update`. */\n assign(phoneNumberId: string, body: PhoneNumberAssignParams, options?: RequestOptions): Promise<PhoneNumber> {\n return this._client.patch(path`/v1/phone-numbers/${phoneNumberId}/assign`, body, options)\n }\n\n /** Release the number from Dialgem. It stops routing calls and disappears from `list()`; your carrier account is untouched. */\n delete(phoneNumberId: string, options?: RequestOptions): Promise<void> {\n return this._client.delete(path`/v1/phone-numbers/${phoneNumberId}`, options)\n }\n}\n","import { DialgemError, WebhookVerificationError } from \"./core/errors.js\"\nimport type { WebhookEvent } from \"./types/webhook.js\"\n\n/** Header carrying the hex HMAC-SHA256 of the raw request body. */\nexport const WEBHOOK_SIGNATURE_HEADER = \"x-dialgem-signature\"\n/** Header naming the event; the same value as the body's `event`. */\nexport const WEBHOOK_EVENT_HEADER = \"x-dialgem-event\"\n\n/** The raw request body, byte-for-byte as received. Node `Buffer` is a `Uint8Array`. */\nexport type WebhookPayload = string | Uint8Array | ArrayBuffer\n\n/** A header value as Node's `IncomingHttpHeaders`, `Headers.get()` or a framework hands it over. */\nexport type SignatureHeader = string | string[] | null | undefined\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\n/**\n * Verifies and parses Dialgem webhooks.\n *\n * **Pass the raw body.** The signature covers the exact bytes Dialgem sent. A body\n * that was parsed and re-serialized (`express.json()`, `JSON.stringify(req.body)`)\n * will not match, even when the JSON is equal. Use `express.raw({ type: \"application/json\" })`,\n * Fastify's raw body, or `await request.text()` in a route handler.\n */\nexport class Webhooks {\n /**\n * Returns whether `signature` is the HMAC-SHA256 of `payload` under `secret`.\n * Constant-time. Returns `false` for a missing or malformed signature; throws only\n * if `secret` is empty, which is a configuration error rather than a bad request.\n */\n async verify(payload: WebhookPayload, signature: SignatureHeader, secret: string): Promise<boolean> {\n if (!secret) {\n throw new DialgemError(\n \"Webhook secret is empty. Set the agent's `webhook_signing_secret` and pass the same value here.\",\n )\n }\n const received = firstHeader(signature)?.trim().toLowerCase()\n if (!received || !/^[0-9a-f]{64}$/.test(received)) return false\n const expected = await hmacSha256Hex(secret, toBytes(payload))\n return timingSafeEqual(expected, received)\n }\n\n /**\n * Verifies the signature, then parses the body.\n *\n * @throws WebhookVerificationError if the signature is missing or does not match.\n */\n async constructEvent(payload: WebhookPayload, signature: SignatureHeader, secret: string): Promise<WebhookEvent> {\n if (!firstHeader(signature)) {\n throw new WebhookVerificationError(\n `Missing ${WEBHOOK_SIGNATURE_HEADER} header. Is a webhook_signing_secret set on the agent?`,\n )\n }\n if (!(await this.verify(payload, signature, secret))) {\n throw new WebhookVerificationError(\n \"Webhook signature does not match the body. Check the secret, and that the body was not re-serialized before verification.\",\n )\n }\n const text = typeof payload === \"string\" ? payload : decoder.decode(toBytes(payload))\n let parsed: unknown\n try {\n parsed = JSON.parse(text)\n } catch {\n throw new WebhookVerificationError(\"Webhook body is signed but is not valid JSON.\")\n }\n if (typeof parsed !== \"object\" || parsed === null || typeof (parsed as { event?: unknown }).event !== \"string\") {\n throw new WebhookVerificationError(\"Webhook body has no `event` field.\")\n }\n return parsed as WebhookEvent\n }\n}\n\nexport const webhooks = new Webhooks()\n\nfunction firstHeader(value: SignatureHeader): string | undefined {\n const v = Array.isArray(value) ? value[0] : value\n return v ?? undefined\n}\n\nfunction toBytes(payload: WebhookPayload): Uint8Array {\n if (typeof payload === \"string\") return encoder.encode(payload)\n if (payload instanceof Uint8Array) return payload\n return new Uint8Array(payload)\n}\n\nasync function hmacSha256Hex(secret: string, data: Uint8Array): Promise<string> {\n const subtle = globalThis.crypto?.subtle\n if (!subtle) {\n throw new DialgemError(\"Web Crypto (globalThis.crypto.subtle) is unavailable. Node 20 or newer is required.\")\n }\n const key = await subtle.importKey(\"raw\", encoder.encode(secret), { name: \"HMAC\", hash: \"SHA-256\" }, false, [\"sign\"])\n // Copy into a fresh ArrayBuffer-backed view: a Node Buffer can be a slice of a\n // larger pooled ArrayBuffer, and some Web Crypto implementations reject SharedArrayBuffer views.\n const signature = await subtle.sign(\"HMAC\", key, new Uint8Array(data))\n return Array.from(new Uint8Array(signature), (b) => b.toString(16).padStart(2, \"0\")).join(\"\")\n}\n\n/** Compares two equal-format hex strings without an early exit. */\nfunction timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false\n let diff = 0\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i)\n return diff === 0\n}\n","import { DialgemError } from \"./core/errors.js\"\nimport { HttpClient, assertMaxRetries, assertTimeout, type Fetch } from \"./core/http.js\"\nimport { Agents } from \"./resources/agents.js\"\nimport { Calls } from \"./resources/calls.js\"\nimport { FlowTemplates, PromptTemplates, Voices } from \"./resources/catalog.js\"\nimport { PhoneNumbers } from \"./resources/phone-numbers.js\"\nimport { Webhooks, webhooks } from \"./webhooks.js\"\n\nexport const DEFAULT_BASE_URL = \"https://api.dialgem.com\"\nconst DEFAULT_TIMEOUT_MS = 60_000\nconst DEFAULT_MAX_RETRIES = 2\n\n// Optional fields accept an explicit `undefined` so `new Dialgem({ apiKey: process.env.X })`\n// compiles under `exactOptionalPropertyTypes`; undefined means \"use the default\".\nexport interface ClientOptions {\n /** Organization API key (`zk_…`). Defaults to `process.env.DIALGEM_API_KEY`. */\n apiKey?: string | undefined\n /** Defaults to `process.env.DIALGEM_BASE_URL`, then `https://api.dialgem.com`. */\n baseURL?: string | undefined\n /** Per-attempt timeout in milliseconds (> 0). Default 60000. */\n timeout?: number | undefined\n /** Retries for GET/PATCH/DELETE on 408/429/5xx and connection errors. Default 2. POST is not retried. */\n maxRetries?: number | undefined\n /** Custom fetch implementation (a proxy agent, instrumentation, tests). Defaults to the global `fetch`. */\n fetch?: Fetch | undefined\n /** Headers sent with every request. */\n defaultHeaders?: Record<string, string> | undefined\n /**\n * The API key grants full access to your organization, so constructing the\n * client in a browser throws by default. Only set this for a trusted internal tool.\n */\n dangerouslyAllowBrowser?: boolean | undefined\n}\n\n/**\n * Dialgem API client, for use from your backend.\n *\n * ```ts\n * import { Dialgem } from \"@dialgem/sdk\"\n *\n * const dialgem = new Dialgem() // reads DIALGEM_API_KEY\n * const agent = await dialgem.agents.create({ name: \"Front desk\", system_prompt: \"…\" })\n * ```\n */\nexport class Dialgem {\n static readonly DEFAULT_BASE_URL = DEFAULT_BASE_URL\n /** Webhook verification without a client instance: `Dialgem.webhooks.constructEvent(...)`. */\n static readonly webhooks: Webhooks = webhooks\n\n readonly agents: Agents\n readonly calls: Calls\n readonly phoneNumbers: PhoneNumbers\n readonly voices: Voices\n readonly flowTemplates: FlowTemplates\n readonly promptTemplates: PromptTemplates\n readonly webhooks: Webhooks = webhooks\n\n readonly baseURL: string\n\n constructor(options: ClientOptions = {}) {\n if (isBrowser() && !options.dangerouslyAllowBrowser) {\n throw new DialgemError(\n \"The Dialgem SDK is for server-side use: running it in a browser exposes your API key to every visitor. \" +\n \"Call Dialgem from your backend instead, or pass `dangerouslyAllowBrowser: true` if you understand the risk.\",\n )\n }\n\n const apiKey = options.apiKey ?? readEnv(\"DIALGEM_API_KEY\")\n if (!apiKey) {\n throw new DialgemError(\n \"Missing API key. Pass `apiKey` to `new Dialgem({ apiKey })` or set the DIALGEM_API_KEY environment variable.\",\n )\n }\n\n const timeout = options.timeout ?? DEFAULT_TIMEOUT_MS\n const maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES\n assertTimeout(timeout)\n assertMaxRetries(maxRetries)\n\n const fetchImpl = options.fetch ?? defaultFetch()\n this.baseURL = (options.baseURL ?? readEnv(\"DIALGEM_BASE_URL\") ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\")\n\n const http = new HttpClient({\n apiKey,\n baseURL: this.baseURL,\n timeout,\n maxRetries,\n fetch: fetchImpl,\n defaultHeaders: options.defaultHeaders ?? {},\n })\n\n this.agents = new Agents(http)\n this.calls = new Calls(http)\n this.phoneNumbers = new PhoneNumbers(http)\n this.voices = new Voices(http)\n this.flowTemplates = new FlowTemplates(http)\n this.promptTemplates = new PromptTemplates(http)\n }\n}\n\nfunction readEnv(name: string): string | undefined {\n const proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n const value = proc?.env?.[name]?.trim()\n return value ? value : undefined\n}\n\nfunction isBrowser(): boolean {\n const g = globalThis as { window?: unknown; document?: unknown }\n return typeof g.window !== \"undefined\" && typeof g.document !== \"undefined\"\n}\n\nfunction defaultFetch(): Fetch {\n const f = (globalThis as { fetch?: unknown }).fetch\n if (typeof f !== \"function\") {\n throw new DialgemError(\"No global `fetch` found. Use Node 20 or newer, or pass `fetch` in the client options.\")\n }\n // Bound per call rather than stored: some runtimes throw \"Illegal invocation\"\n // when fetch is called detached from globalThis.\n return (url, init) => (f as Fetch).call(globalThis, url, init)\n}\n"]}
|