@docmana/sdk 0.10.0 → 0.11.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/dist/index.js CHANGED
@@ -308,13 +308,29 @@ async function runFlow(http, flowId, parts, signal, useDraftVersion = false, con
308
308
  );
309
309
  }
310
310
 
311
+ // src/sdk/status.ts
312
+ function normalizeStatus(status, fallback = "UNKNOWN") {
313
+ if (typeof status !== "string") return fallback;
314
+ const trimmed = status.trim();
315
+ if (!trimmed) return fallback;
316
+ return trimmed.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/[\s-]+/g, "_").toUpperCase();
317
+ }
318
+ function isFailedStatus(status) {
319
+ return normalizeStatus(status) === "FAILED";
320
+ }
321
+ function isTerminalStatus(status) {
322
+ const normalized = normalizeStatus(status);
323
+ return normalized === "COMPLETED" || normalized === "FAILED";
324
+ }
325
+
311
326
  // src/sdk/api/execution-status.ts
312
327
  async function getStatus(http, executionResultId, signal) {
313
328
  const res = await http.requestRaw("GET", `/executions/${executionResultId}/status`, { signal });
314
329
  const text = await res.text();
315
330
  const body = text ? JSON.parse(text) : { status: "" };
331
+ const normalizedBody = { ...body, status: normalizeStatus(body.status) };
316
332
  const pollAfterMs = parsePositiveInt(res.headers.get("x-poll-after"));
317
- return pollAfterMs === void 0 ? body : { ...body, pollAfterMs };
333
+ return pollAfterMs === void 0 ? normalizedBody : { ...normalizedBody, pollAfterMs };
318
334
  }
319
335
  function parsePositiveInt(value) {
320
336
  if (!value) return void 0;
@@ -456,7 +472,6 @@ function toNumberValue(value) {
456
472
  }
457
473
 
458
474
  // src/sdk/polling/poll.ts
459
- var TERMINAL = /* @__PURE__ */ new Set(["Completed", "Failed"]);
460
475
  var defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
461
476
  async function pollUntilTerminal(opts) {
462
477
  const sleep = opts.sleep ?? defaultSleep;
@@ -477,8 +492,8 @@ async function pollUntilTerminal(opts) {
477
492
  await sleep(err.retryAfterMs ?? opts.intervalMs);
478
493
  continue;
479
494
  }
480
- const { status } = result;
481
- if (TERMINAL.has(status)) return status;
495
+ const status = normalizeStatus(result.status);
496
+ if (isTerminalStatus(status)) return status;
482
497
  if (elapsed() >= opts.timeoutMs) {
483
498
  throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);
484
499
  }
@@ -573,7 +588,7 @@ var Docmana = class {
573
588
  signal: options.signal
574
589
  });
575
590
  const result = await this.getResult(executionResultId, options.signal, params.language);
576
- if (result.status === "Failed") {
591
+ if (isFailedStatus(result.status)) {
577
592
  throw new DocmanaExecutionError(
578
593
  `Flow ${flowId} execution failed`,
579
594
  result.errors ?? [],
@@ -604,7 +619,7 @@ var Docmana = class {
604
619
  return downloadOrganizationDocuments(this.http, paths);
605
620
  }
606
621
  isTerminalStatus(status) {
607
- return status === "Completed" || status === "Failed";
622
+ return isTerminalStatus(status);
608
623
  }
609
624
  };
610
625
  // Annotate the CommonJS export names for ESM import in node:
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sdk/index.ts","../src/sdk/config.ts","../src/sdk/errors.ts","../src/sdk/http/http-client.ts","../src/sdk/files/resolve-input.ts","../src/sdk/api/run-flow.ts","../src/sdk/api/execution-status.ts","../src/sdk/api/execution-result.ts","../src/sdk/api/list-flows.ts","../src/sdk/api/list-organizations.ts","../src/sdk/api/flow-metadata.ts","../src/sdk/api/flow-definition.ts","../src/sdk/api/organization-documents.ts","../src/sdk/polling/poll.ts","../src/sdk/client.ts"],"sourcesContent":["export { Docmana } from \"./client.js\";\nexport {\n DocmanaError,\n DocmanaAuthError,\n DocmanaRequestError,\n DocmanaPermissionError,\n DocmanaNotFoundError,\n DocmanaExecutionError,\n DocmanaTimeoutError,\n DocmanaAbortError,\n} from \"./errors.js\";\nexport type {\n AccessibleOrganization,\n DownloadedOrganizationDocument,\n DocmanaConfig,\n FlowDefinition,\n FlowDefinitionField,\n FlowDefinitionNode,\n FlowDefinitionNodeMetadata,\n FlowDocumentRequirement,\n FlowListItem,\n FlowMetadata,\n OrganizationDocument,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n FileInput,\n NamedFileInput,\n PathFileInput,\n DocmanaExecutionResult,\n ExecutionStatus,\n DocmanaDocumentMapping,\n DocmanaDocumentResult,\n DocmanaNodeResult,\n DocmanaScoreNodeResult,\n DocmanaCrossValidationResult,\n DocmanaConclusionResult,\n DocmanaClassificationResult,\n DocmanaMetadataExtractionResult,\n DocmanaExtractionResult,\n DocmanaValidationResult,\n} from \"./types.js\";\nexport type {\n ExecutionProgress,\n VirtualDocument,\n PhysicalDocument,\n DocumentContent,\n FlowNodeType,\n FlowConfigs,\n FlowNode,\n FlowEdge,\n Flow,\n NodeTranslationResult,\n DocmanaApiExecutionResult,\n DocmanaApiNodeResult,\n DocmanaApiDocumentExecutionResult,\n DocmanaApiDocumentRequest,\n} from \"./models/index.js\";\n","import type { DocmanaConfig } from \"./types.js\";\n\nexport const DEFAULTS = {\n tokenEndpoint:\n \"https://4fe70f5b-e013-4f65-9fa7-3109a33beba5.ciamlogin.com/4fe70f5b-e013-4f65-9fa7-3109a33beba5/oauth2/v2.0/token\",\n scope: \"api://d781e6ba-cc08-4618-8099-ad968abd2b9e/.default\",\n timeoutMs: 300_000,\n pollIntervalMs: 2_000,\n pollMaxIntervalMs: 10_000,\n} as const;\n\nexport interface ResolvedConfig {\n apiBaseUrl: string;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n timeoutMs: number;\n pollIntervalMs: number;\n pollMaxIntervalMs: number;\n fetchImpl: typeof fetch;\n headers: Record<string, string>;\n}\n\nexport function resolveConfig(config: DocmanaConfig): ResolvedConfig {\n if (!config.apiBaseUrl) throw new Error(\"DocmanaConfig.apiBaseUrl is required\");\n if (!config.accessToken && !config.getAccessToken) {\n throw new Error(\"DocmanaConfig.accessToken or DocmanaConfig.getAccessToken is required\");\n }\n const apiBaseUrl = normalizeApiBaseUrl(config.apiBaseUrl);\n return {\n apiBaseUrl,\n accessToken: config.accessToken,\n getAccessToken: config.getAccessToken,\n timeoutMs: config.timeoutMs ?? DEFAULTS.timeoutMs,\n pollIntervalMs: config.pollIntervalMs ?? DEFAULTS.pollIntervalMs,\n pollMaxIntervalMs: config.pollMaxIntervalMs ?? DEFAULTS.pollMaxIntervalMs,\n fetchImpl: config.fetch ?? fetch,\n headers: config.headers ?? {},\n };\n}\n\nfunction normalizeApiBaseUrl(value: string): string {\n const trimmed = value.replace(/\\/+$/, \"\");\n return /\\/v\\d+$/i.test(trimmed) ? trimmed : `${trimmed}/v1`;\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n constructor(message: string, opts: { status?: number; requestId?: string; code?: string } = {}) {\n super(message);\n this.name = new.target.name;\n this.status = opts.status;\n this.requestId = opts.requestId;\n this.code = opts.code ?? \"docmana_error\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class DocmanaAuthError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"auth_error\" });\n }\n}\n\nexport class DocmanaPermissionError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"permission_error\" });\n }\n}\n\nexport class DocmanaNotFoundError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"not_found\" });\n }\n}\n\nexport class DocmanaRequestError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"bad_request\" });\n }\n}\n\nexport class DocmanaExecutionError extends DocmanaError {\n readonly errors: unknown[];\n readonly result?: DocmanaExecutionResult;\n constructor(message: string, errors: unknown[] = [], result?: DocmanaExecutionResult) {\n super(message, { code: \"execution_failed\" });\n this.errors = errors;\n this.result = result;\n }\n}\n\nexport class DocmanaTimeoutError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"timeout\" });\n }\n}\n\nexport class DocmanaAbortError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"aborted\" });\n }\n}\n\nexport class DocmanaRateLimitError extends DocmanaError {\n readonly retryAfterMs?: number;\n constructor(\n message: string,\n opts: { status?: number; requestId?: string; retryAfterMs?: number } = {},\n ) {\n super(message, { ...opts, code: \"rate_limited\" });\n this.retryAfterMs = opts.retryAfterMs;\n }\n}\n\nexport function errorFromResponse(\n status: number,\n message: string,\n requestId?: string,\n retryAfterMs?: number,\n): DocmanaError {\n const opts = { status, requestId };\n switch (status) {\n case 400:\n return new DocmanaRequestError(message, opts);\n case 401:\n return new DocmanaAuthError(message, opts);\n case 403:\n return new DocmanaPermissionError(message, opts);\n case 404:\n return new DocmanaNotFoundError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n default:\n return new DocmanaError(message, opts);\n }\n}\n","import { DocmanaError, DocmanaAbortError, errorFromResponse } from \"../errors.js\";\n\nexport interface HttpClientOptions {\n apiBaseUrl: string;\n fetchImpl: typeof fetch;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n headers?: Record<string, string>;\n}\n\ntype FetchBody = NonNullable<Parameters<typeof fetch>[1]>[\"body\"];\n\nexport interface RequestOptions {\n query?: Record<string, string>;\n body?: FetchBody;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport interface BytesResponse {\n bytes: Uint8Array;\n headers: Headers;\n}\n\nexport class HttpClient {\n constructor(private readonly opts: HttpClientOptions) {}\n\n async requestJson<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const res = await this.requestRaw(method, path, options);\n const text = await res.text();\n if (!text) return {} as T;\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new DocmanaError(\"Invalid JSON response from Docmana\", { status: res.status });\n }\n }\n\n async requestBytes(\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<BytesResponse> {\n const res = await this.requestRaw(method, path, options);\n return { bytes: new Uint8Array(await res.arrayBuffer()), headers: res.headers };\n }\n\n async requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n let res = await this.send(method, path, options);\n if (res.status === 401 && this.opts.getAccessToken) {\n res = await this.send(method, path, options, true);\n }\n if (!res.ok) {\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n const message = await this.extractMessage(res);\n throw errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n }\n return res;\n }\n\n private async send(\n method: string,\n path: string,\n options: RequestOptions,\n forceRefresh = false,\n ): Promise<Response> {\n const token = await this.resolveToken(forceRefresh);\n const url = new URL(this.opts.apiBaseUrl + path);\n for (const [k, v] of Object.entries(options.query ?? {})) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n ...(this.opts.headers ?? {}),\n authorization: `Bearer ${token}`,\n ...(options.headers ?? {}),\n };\n try {\n return await this.opts.fetchImpl(url, {\n method,\n headers,\n body: options.body,\n signal: options.signal,\n });\n } catch (err) {\n if (options.signal?.aborted || (err instanceof Error && err.name === \"AbortError\")) {\n throw new DocmanaAbortError(\"Request aborted\");\n }\n throw err;\n }\n }\n\n private async resolveToken(forceRefresh: boolean): Promise<string> {\n const token = this.opts.getAccessToken\n ? await this.opts.getAccessToken(forceRefresh ? { forceRefresh: true } : undefined)\n : this.opts.accessToken;\n if (!token) {\n throw new DocmanaError(\"Missing Docmana access token\", { code: \"auth_missing\" });\n }\n return token;\n }\n\n private async extractMessage(res: Response): Promise<string> {\n try {\n const data = (await res.clone().json()) as { message?: string; error?: string };\n return data.message ?? data.error ?? res.statusText ?? `HTTP ${res.status}`;\n } catch {\n return res.statusText ?? `HTTP ${res.status}`;\n }\n }\n}\n\nfunction parseRetryAfterMs(value: string | null): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return seconds * 1000;\n }\n const retryAt = Date.parse(value);\n if (!Number.isNaN(retryAt)) {\n return Math.max(0, retryAt - Date.now());\n }\n return undefined;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport type { FileInput } from \"../types.js\";\n\nexport interface ResolvedPart {\n data: Blob;\n filename: string;\n contentType: string;\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".txt\": \"text/plain\",\n \".json\": \"application/json\",\n};\n\nfunction contentTypeFor(name: string): string {\n const dot = name.lastIndexOf(\".\");\n if (dot < 0) return \"application/octet-stream\";\n const ext = name.slice(dot).toLowerCase();\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction isReadable(x: unknown): x is Readable {\n return typeof x === \"object\" && x !== null && typeof (x as Readable).pipe === \"function\";\n}\n\nfunction isPathInput(x: unknown): x is { path: string } {\n return typeof x === \"object\" && x !== null && typeof (x as { path?: unknown }).path === \"string\";\n}\n\nfunction isNamedFileInput(\n x: unknown,\n): x is { data: Uint8Array | Readable; filename: string; contentType?: string } {\n if (typeof x !== \"object\" || x === null) return false;\n const value = x as { data?: unknown; filename?: unknown };\n return (\n typeof value.filename === \"string\" &&\n (value.data instanceof Uint8Array || isReadable(value.data))\n );\n}\n\nasync function streamToBuffer(stream: Readable): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) chunks.push(Buffer.from(chunk));\n return Buffer.concat(chunks);\n}\n\nfunction toBlobBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n return new Uint8Array(bytes);\n}\n\nasync function resolveOne(input: FileInput): Promise<ResolvedPart> {\n if (typeof input === \"string\" || isPathInput(input)) {\n const path = typeof input === \"string\" ? input : input.path;\n const data = await readFile(path);\n const filename = basename(path);\n return { data: new Blob([toBlobBytes(data)]), filename, contentType: contentTypeFor(filename) };\n }\n if (isNamedFileInput(input)) {\n const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);\n return {\n data: new Blob([toBlobBytes(bytes)]),\n filename: input.filename,\n contentType: input.contentType ?? contentTypeFor(input.filename),\n };\n }\n throw new Error(\"Unsupported file input type\");\n}\n\nexport async function resolveInputs(input: { files: FileInput[] }): Promise<ResolvedPart[]> {\n const list: FileInput[] = input.files;\n if (list.length === 0) throw new Error(\"runFlow requires `files`\");\n return Promise.all(list.map((item) => resolveOne(item)));\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nexport async function runFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n signal?: AbortSignal,\n useDraftVersion = false,\n context?: Record<string, unknown>,\n callbackUrl?: string,\n language?: string,\n organization?: string,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const form = new FormData();\n for (const part of parts) {\n form.append(\"files\", new File([part.data], part.filename, { type: part.contentType }));\n }\n if (context !== undefined) form.append(\"jsonContext\", JSON.stringify(context));\n if (callbackUrl !== undefined) form.append(\"callbackUrl\", callbackUrl);\n if (language !== undefined) form.append(\"language\", language);\n if (useDraftVersion) form.append(\"useDraftVersion\", \"true\");\n\n const path = `/flows/${flowId}/execute-async`;\n return http.requestJson<{ executionResultId: string; fileIds: string[] }>(\n \"POST\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n { body: form, signal },\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { ExecutionStatus } from \"../types.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, { signal });\n const text = await res.text();\n const body = text ? (JSON.parse(text) as { status: ExecutionStatus | string }) : { status: \"\" };\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? body : { ...body, pollAfterMs };\n}\n\nfunction parsePositiveInt(value: string | null): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { DocmanaExecutionResult } from \"../types.js\";\n\nexport async function getResult(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n): Promise<DocmanaExecutionResult> {\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: language ? { language } : undefined,\n signal,\n });\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowListItem } from \"../types.js\";\n\nexport async function listFlows(http: HttpClient, organization?: string): Promise<FlowListItem[]> {\n const path = organization ? `/flows?organization=${encodeURIComponent(organization)}` : \"/flows\";\n const flows = await http.requestJson<unknown>(\"GET\", path);\n return Array.isArray(flows) ? flows.map(toFlowListItem) : [];\n}\n\nfunction toFlowListItem(flow: unknown): FlowListItem {\n const value = flow && typeof flow === \"object\" ? (flow as Record<string, unknown>) : {};\n const item: FlowListItem = {\n id: toStringValue(value.id),\n name: toStringValue(value.name),\n state: toStateValue(value.state),\n };\n if (typeof value.organization === \"string\") {\n item.organization = value.organization;\n }\n return item;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toStateValue(value: unknown): string {\n return typeof value === \"string\" && value.trim() ? value : \"unknown\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { AccessibleOrganization } from \"../types.js\";\n\nexport async function listOrganizations(http: HttpClient): Promise<AccessibleOrganization[]> {\n const organizations = await http.requestJson<unknown>(\"GET\", \"/organizations\");\n return Array.isArray(organizations)\n ? organizations.map(toAccessibleOrganization).filter(isAccessibleOrganization)\n : [];\n}\n\nfunction toAccessibleOrganization(organization: unknown): AccessibleOrganization | undefined {\n const value =\n organization && typeof organization === \"object\"\n ? (organization as Record<string, unknown>)\n : {};\n const id = toStringValue(value.id).trim();\n if (!id) return undefined;\n const name = toStringValue(value.name).trim() || id;\n\n return {\n id,\n name,\n };\n}\n\nfunction isAccessibleOrganization(\n organization: AccessibleOrganization | undefined,\n): organization is AccessibleOrganization {\n return organization !== undefined;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowMetadata } from \"../types.js\";\n\nexport async function getFlowMetadata(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowMetadata> {\n const path = `/flows/${encodeURIComponent(flowId)}/metadata`;\n return http.requestJson<FlowMetadata>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowDefinition } from \"../types.js\";\n\nexport async function getFlowDefinition(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowDefinition> {\n const path = `/flows/${encodeURIComponent(flowId)}/definition`;\n return http.requestJson<FlowDefinition>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type {\n DownloadedOrganizationDocument,\n OrganizationDocument,\n OrganizationDocumentsPayload,\n} from \"../types.js\";\n\nexport async function listOrganizationDocuments(\n http: HttpClient,\n options: { prefix?: string } = {},\n): Promise<OrganizationDocumentsPayload> {\n const result = await http.requestJson<unknown>(\"GET\", \"/organization-documents\", {\n query: options.prefix ? { prefix: options.prefix } : undefined,\n });\n const value = result && typeof result === \"object\" ? (result as Record<string, unknown>) : {};\n return {\n configured: value.configured === true,\n documents: Array.isArray(value.documents)\n ? value.documents.map(toOrganizationDocument).filter(isOrganizationDocument)\n : [],\n };\n}\n\nexport async function downloadOrganizationDocument(\n http: HttpClient,\n path: string,\n): Promise<DownloadedOrganizationDocument> {\n const result = await http.requestBytes(\"GET\", \"/organization-documents/download\", {\n query: { path },\n });\n return {\n bytes: result.bytes,\n filename: filenameFromHeaders(result.headers) ?? filenameFromPath(path),\n contentType: result.headers.get(\"content-type\") || undefined,\n };\n}\n\nexport async function downloadOrganizationDocuments(\n http: HttpClient,\n paths: string[],\n): Promise<DownloadedOrganizationDocument[]> {\n return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path)));\n}\n\nfunction toOrganizationDocument(document: unknown): OrganizationDocument | undefined {\n const value =\n document && typeof document === \"object\" ? (document as Record<string, unknown>) : {};\n const path = toStringValue(value.path).trim();\n if (!path) return undefined;\n const contentType = toStringValue(value.contentType).trim();\n return {\n path,\n name: toStringValue(value.name).trim() || filenameFromPath(path),\n size: toNumberValue(value.size),\n lastModified: toStringValue(value.lastModified).trim(),\n ...(contentType ? { contentType } : {}),\n };\n}\n\nfunction isOrganizationDocument(\n document: OrganizationDocument | undefined,\n): document is OrganizationDocument {\n return document !== undefined;\n}\n\nfunction filenameFromHeaders(headers: Headers): string | undefined {\n const disposition = headers.get(\"content-disposition\");\n if (!disposition) return undefined;\n const utf8 = /filename\\*=UTF-8''([^;]+)/i.exec(disposition);\n if (utf8?.[1]) return decodeURIComponent(utf8[1]);\n const quoted = /filename=\"([^\"]+)\"/i.exec(disposition);\n if (quoted?.[1]) return quoted[1];\n const plain = /filename=([^;]+)/i.exec(disposition);\n return plain?.[1]?.trim();\n}\n\nfunction filenameFromPath(path: string): string {\n return path.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean).pop() || path;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toNumberValue(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n","import { DocmanaTimeoutError, DocmanaAbortError, DocmanaRateLimitError } from \"../errors.js\";\n\nconst TERMINAL = new Set([\"Completed\", \"Failed\"]);\n\nexport interface PollCheckResult {\n status: string;\n nextDelayMs?: number;\n}\n\nexport interface PollOptions {\n check: () => Promise<string | PollCheckResult>;\n intervalMs: number;\n maxIntervalMs: number;\n timeoutMs: number;\n sleep?: (ms: number) => Promise<void>;\n elapsed?: () => number;\n random?: () => number;\n signal?: AbortSignal;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nexport async function pollUntilTerminal(opts: PollOptions): Promise<string> {\n const sleep = opts.sleep ?? defaultSleep;\n const start = Date.now();\n const elapsed = opts.elapsed ?? (() => Date.now() - start);\n const random = opts.random ?? Math.random;\n let fallbackAttempt = 0;\n for (;;) {\n if (opts.signal?.aborted) throw new DocmanaAbortError(\"Polling aborted\");\n let result: PollCheckResult;\n try {\n result = normalizePollResult(await opts.check());\n } catch (err) {\n if (!(err instanceof DocmanaRateLimitError)) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n await sleep(err.retryAfterMs ?? opts.intervalMs);\n continue;\n }\n const { status } = result;\n if (TERMINAL.has(status)) return status;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n const fallbackDelay = fullJitterDelay(\n opts.intervalMs,\n opts.maxIntervalMs,\n fallbackAttempt,\n random,\n );\n fallbackAttempt += 1;\n await sleep(result.nextDelayMs ?? fallbackDelay);\n }\n}\n\nfunction normalizePollResult(result: string | PollCheckResult): PollCheckResult {\n return typeof result === \"string\" ? { status: result } : result;\n}\n\nfunction fullJitterDelay(\n intervalMs: number,\n maxIntervalMs: number,\n attempt: number,\n random: () => number,\n): number {\n const capDelay = Math.min(maxIntervalMs, intervalMs * 2 ** attempt);\n return Math.round(intervalMs + random() * (capDelay - intervalMs));\n}\n","import { resolveConfig } from \"./config.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n AccessibleOrganization,\n DocmanaConfig,\n DocmanaExecutionResult,\n DownloadedOrganizationDocument,\n ExecutionStatus,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n} from \"./types.js\";\nimport { HttpClient } from \"./http/http-client.js\";\nimport { resolveInputs } from \"./files/resolve-input.js\";\nimport { runFlow as runFlowApi } from \"./api/run-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport { listFlows as listFlowsApi } from \"./api/list-flows.js\";\nimport { listOrganizations as listOrganizationsApi } from \"./api/list-organizations.js\";\nimport { getFlowMetadata as getFlowMetadataApi } from \"./api/flow-metadata.js\";\nimport { getFlowDefinition as getFlowDefinitionApi } from \"./api/flow-definition.js\";\nimport {\n downloadOrganizationDocument as downloadOrganizationDocumentApi,\n downloadOrganizationDocuments as downloadOrganizationDocumentsApi,\n listOrganizationDocuments as listOrganizationDocumentsApi,\n} from \"./api/organization-documents.js\";\nimport { pollUntilTerminal } from \"./polling/poll.js\";\nimport { DocmanaExecutionError, DocmanaRateLimitError } from \"./errors.js\";\n\nexport class Docmana {\n private readonly config: ResolvedConfig;\n private readonly http: HttpClient;\n\n constructor(config: DocmanaConfig) {\n this.config = resolveConfig(config);\n this.http = new HttpClient({\n apiBaseUrl: this.config.apiBaseUrl,\n fetchImpl: this.config.fetchImpl,\n accessToken: this.config.accessToken,\n getAccessToken: this.config.getAccessToken,\n headers: this.config.headers,\n });\n }\n\n async runFlowAsync(\n flowId: string,\n params: RunFlowAsyncParams,\n options: RunFlowAsyncOptions = {},\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(params);\n return runFlowApi(\n this.http,\n flowId,\n parts,\n options.signal,\n params.useDraftVersion ?? false,\n params.context,\n params.callbackUrl,\n params.language,\n params.organization,\n );\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language);\n }\n\n async runFlow(\n flowId: string,\n params: RunFlowParams,\n options: RunFlowOptions = {},\n ): Promise<DocmanaExecutionResult> {\n const { executionResultId } = await this.runFlowAsync(flowId, params, {\n signal: options.signal,\n });\n let attempt = 0;\n const startedAt = Date.now();\n await pollUntilTerminal({\n check: async () => {\n attempt += 1;\n try {\n const statusResult = await this.getStatus(executionResultId, options.signal);\n const status = statusResult.status;\n const nextPollAfterMs = this.isTerminalStatus(status)\n ? undefined\n : statusResult.pollAfterMs;\n options.onPoll?.({\n executionResultId,\n status,\n attempt,\n elapsedMs: Date.now() - startedAt,\n nextPollAfterMs,\n });\n return { status, nextDelayMs: nextPollAfterMs };\n } catch (err) {\n if (err instanceof DocmanaRateLimitError) {\n options.onRateLimit?.({\n executionResultId,\n attempt,\n elapsedMs: Date.now() - startedAt,\n retryAfterMs:\n err.retryAfterMs ?? options.pollIntervalMs ?? this.config.pollIntervalMs,\n });\n }\n throw err;\n }\n },\n intervalMs: options.pollIntervalMs ?? this.config.pollIntervalMs,\n maxIntervalMs: options.pollMaxIntervalMs ?? this.config.pollMaxIntervalMs,\n timeoutMs: options.timeoutMs ?? this.config.timeoutMs,\n signal: options.signal,\n });\n const result = await this.getResult(executionResultId, options.signal, params.language);\n if (result.status === \"Failed\") {\n throw new DocmanaExecutionError(\n `Flow ${flowId} execution failed`,\n result.errors ?? [],\n result,\n );\n }\n return result;\n }\n\n async listFlows(options: { organization?: string } = {}): Promise<FlowListItem[]> {\n return listFlowsApi(this.http, options.organization);\n }\n\n async listOrganizations(): Promise<AccessibleOrganization[]> {\n return listOrganizationsApi(this.http);\n }\n\n async getFlowMetadata(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowMetadata> {\n return getFlowMetadataApi(this.http, flowId, options.organization);\n }\n\n async getFlowDefinition(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowDefinition> {\n return getFlowDefinitionApi(this.http, flowId, options.organization);\n }\n\n async listOrganizationDocuments(\n options: { prefix?: string } = {},\n ): Promise<OrganizationDocumentsPayload> {\n return listOrganizationDocumentsApi(this.http, options);\n }\n\n async downloadOrganizationDocument(path: string): Promise<DownloadedOrganizationDocument> {\n return downloadOrganizationDocumentApi(this.http, path);\n }\n\n async downloadOrganizationDocuments(paths: string[]): Promise<DownloadedOrganizationDocument[]> {\n return downloadOrganizationDocumentsApi(this.http, paths);\n }\n\n private isTerminalStatus(status: string): boolean {\n return status === \"Completed\" || status === \"Failed\";\n }\n}\n"],"mappings":"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","names":["toStringValue","toStringValue"]}
1
+ {"version":3,"sources":["../src/sdk/index.ts","../src/sdk/config.ts","../src/sdk/errors.ts","../src/sdk/http/http-client.ts","../src/sdk/files/resolve-input.ts","../src/sdk/api/run-flow.ts","../src/sdk/status.ts","../src/sdk/api/execution-status.ts","../src/sdk/api/execution-result.ts","../src/sdk/api/list-flows.ts","../src/sdk/api/list-organizations.ts","../src/sdk/api/flow-metadata.ts","../src/sdk/api/flow-definition.ts","../src/sdk/api/organization-documents.ts","../src/sdk/polling/poll.ts","../src/sdk/client.ts"],"sourcesContent":["export { Docmana } from \"./client.js\";\nexport {\n DocmanaError,\n DocmanaAuthError,\n DocmanaRequestError,\n DocmanaPermissionError,\n DocmanaNotFoundError,\n DocmanaExecutionError,\n DocmanaTimeoutError,\n DocmanaAbortError,\n} from \"./errors.js\";\nexport type {\n AccessibleOrganization,\n DownloadedOrganizationDocument,\n DocmanaConfig,\n FlowDefinition,\n FlowDefinitionField,\n FlowDefinitionNode,\n FlowDefinitionNodeMetadata,\n FlowDocumentRequirement,\n FlowListItem,\n FlowMetadata,\n OrganizationDocument,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n FileInput,\n NamedFileInput,\n PathFileInput,\n DocmanaExecutionResult,\n ExecutionStatus,\n DocmanaDocumentMapping,\n DocmanaDocumentResult,\n DocmanaNodeResult,\n DocmanaScoreNodeResult,\n DocmanaCrossValidationResult,\n DocmanaConclusionResult,\n DocmanaClassificationResult,\n DocmanaMetadataExtractionResult,\n DocmanaExtractionResult,\n DocmanaValidationResult,\n} from \"./types.js\";\nexport type {\n ExecutionProgress,\n VirtualDocument,\n PhysicalDocument,\n DocumentContent,\n FlowNodeType,\n FlowConfigs,\n FlowNode,\n FlowEdge,\n Flow,\n NodeTranslationResult,\n DocmanaApiExecutionResult,\n DocmanaApiNodeResult,\n DocmanaApiDocumentExecutionResult,\n DocmanaApiDocumentRequest,\n} from \"./models/index.js\";\n","import type { DocmanaConfig } from \"./types.js\";\n\nexport const DEFAULTS = {\n tokenEndpoint:\n \"https://4fe70f5b-e013-4f65-9fa7-3109a33beba5.ciamlogin.com/4fe70f5b-e013-4f65-9fa7-3109a33beba5/oauth2/v2.0/token\",\n scope: \"api://d781e6ba-cc08-4618-8099-ad968abd2b9e/.default\",\n timeoutMs: 300_000,\n pollIntervalMs: 2_000,\n pollMaxIntervalMs: 10_000,\n} as const;\n\nexport interface ResolvedConfig {\n apiBaseUrl: string;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n timeoutMs: number;\n pollIntervalMs: number;\n pollMaxIntervalMs: number;\n fetchImpl: typeof fetch;\n headers: Record<string, string>;\n}\n\nexport function resolveConfig(config: DocmanaConfig): ResolvedConfig {\n if (!config.apiBaseUrl) throw new Error(\"DocmanaConfig.apiBaseUrl is required\");\n if (!config.accessToken && !config.getAccessToken) {\n throw new Error(\"DocmanaConfig.accessToken or DocmanaConfig.getAccessToken is required\");\n }\n const apiBaseUrl = normalizeApiBaseUrl(config.apiBaseUrl);\n return {\n apiBaseUrl,\n accessToken: config.accessToken,\n getAccessToken: config.getAccessToken,\n timeoutMs: config.timeoutMs ?? DEFAULTS.timeoutMs,\n pollIntervalMs: config.pollIntervalMs ?? DEFAULTS.pollIntervalMs,\n pollMaxIntervalMs: config.pollMaxIntervalMs ?? DEFAULTS.pollMaxIntervalMs,\n fetchImpl: config.fetch ?? fetch,\n headers: config.headers ?? {},\n };\n}\n\nfunction normalizeApiBaseUrl(value: string): string {\n const trimmed = value.replace(/\\/+$/, \"\");\n return /\\/v\\d+$/i.test(trimmed) ? trimmed : `${trimmed}/v1`;\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n constructor(message: string, opts: { status?: number; requestId?: string; code?: string } = {}) {\n super(message);\n this.name = new.target.name;\n this.status = opts.status;\n this.requestId = opts.requestId;\n this.code = opts.code ?? \"docmana_error\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class DocmanaAuthError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"auth_error\" });\n }\n}\n\nexport class DocmanaPermissionError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"permission_error\" });\n }\n}\n\nexport class DocmanaNotFoundError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"not_found\" });\n }\n}\n\nexport class DocmanaRequestError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"bad_request\" });\n }\n}\n\nexport class DocmanaExecutionError extends DocmanaError {\n readonly errors: unknown[];\n readonly result?: DocmanaExecutionResult;\n constructor(message: string, errors: unknown[] = [], result?: DocmanaExecutionResult) {\n super(message, { code: \"execution_failed\" });\n this.errors = errors;\n this.result = result;\n }\n}\n\nexport class DocmanaTimeoutError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"timeout\" });\n }\n}\n\nexport class DocmanaAbortError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"aborted\" });\n }\n}\n\nexport class DocmanaRateLimitError extends DocmanaError {\n readonly retryAfterMs?: number;\n constructor(\n message: string,\n opts: { status?: number; requestId?: string; retryAfterMs?: number } = {},\n ) {\n super(message, { ...opts, code: \"rate_limited\" });\n this.retryAfterMs = opts.retryAfterMs;\n }\n}\n\nexport function errorFromResponse(\n status: number,\n message: string,\n requestId?: string,\n retryAfterMs?: number,\n): DocmanaError {\n const opts = { status, requestId };\n switch (status) {\n case 400:\n return new DocmanaRequestError(message, opts);\n case 401:\n return new DocmanaAuthError(message, opts);\n case 403:\n return new DocmanaPermissionError(message, opts);\n case 404:\n return new DocmanaNotFoundError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n default:\n return new DocmanaError(message, opts);\n }\n}\n","import { DocmanaError, DocmanaAbortError, errorFromResponse } from \"../errors.js\";\n\nexport interface HttpClientOptions {\n apiBaseUrl: string;\n fetchImpl: typeof fetch;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n headers?: Record<string, string>;\n}\n\ntype FetchBody = NonNullable<Parameters<typeof fetch>[1]>[\"body\"];\n\nexport interface RequestOptions {\n query?: Record<string, string>;\n body?: FetchBody;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport interface BytesResponse {\n bytes: Uint8Array;\n headers: Headers;\n}\n\nexport class HttpClient {\n constructor(private readonly opts: HttpClientOptions) {}\n\n async requestJson<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const res = await this.requestRaw(method, path, options);\n const text = await res.text();\n if (!text) return {} as T;\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new DocmanaError(\"Invalid JSON response from Docmana\", { status: res.status });\n }\n }\n\n async requestBytes(\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<BytesResponse> {\n const res = await this.requestRaw(method, path, options);\n return { bytes: new Uint8Array(await res.arrayBuffer()), headers: res.headers };\n }\n\n async requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n let res = await this.send(method, path, options);\n if (res.status === 401 && this.opts.getAccessToken) {\n res = await this.send(method, path, options, true);\n }\n if (!res.ok) {\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n const message = await this.extractMessage(res);\n throw errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n }\n return res;\n }\n\n private async send(\n method: string,\n path: string,\n options: RequestOptions,\n forceRefresh = false,\n ): Promise<Response> {\n const token = await this.resolveToken(forceRefresh);\n const url = new URL(this.opts.apiBaseUrl + path);\n for (const [k, v] of Object.entries(options.query ?? {})) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n ...(this.opts.headers ?? {}),\n authorization: `Bearer ${token}`,\n ...(options.headers ?? {}),\n };\n try {\n return await this.opts.fetchImpl(url, {\n method,\n headers,\n body: options.body,\n signal: options.signal,\n });\n } catch (err) {\n if (options.signal?.aborted || (err instanceof Error && err.name === \"AbortError\")) {\n throw new DocmanaAbortError(\"Request aborted\");\n }\n throw err;\n }\n }\n\n private async resolveToken(forceRefresh: boolean): Promise<string> {\n const token = this.opts.getAccessToken\n ? await this.opts.getAccessToken(forceRefresh ? { forceRefresh: true } : undefined)\n : this.opts.accessToken;\n if (!token) {\n throw new DocmanaError(\"Missing Docmana access token\", { code: \"auth_missing\" });\n }\n return token;\n }\n\n private async extractMessage(res: Response): Promise<string> {\n try {\n const data = (await res.clone().json()) as { message?: string; error?: string };\n return data.message ?? data.error ?? res.statusText ?? `HTTP ${res.status}`;\n } catch {\n return res.statusText ?? `HTTP ${res.status}`;\n }\n }\n}\n\nfunction parseRetryAfterMs(value: string | null): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return seconds * 1000;\n }\n const retryAt = Date.parse(value);\n if (!Number.isNaN(retryAt)) {\n return Math.max(0, retryAt - Date.now());\n }\n return undefined;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport type { FileInput } from \"../types.js\";\n\nexport interface ResolvedPart {\n data: Blob;\n filename: string;\n contentType: string;\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".txt\": \"text/plain\",\n \".json\": \"application/json\",\n};\n\nfunction contentTypeFor(name: string): string {\n const dot = name.lastIndexOf(\".\");\n if (dot < 0) return \"application/octet-stream\";\n const ext = name.slice(dot).toLowerCase();\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction isReadable(x: unknown): x is Readable {\n return typeof x === \"object\" && x !== null && typeof (x as Readable).pipe === \"function\";\n}\n\nfunction isPathInput(x: unknown): x is { path: string } {\n return typeof x === \"object\" && x !== null && typeof (x as { path?: unknown }).path === \"string\";\n}\n\nfunction isNamedFileInput(\n x: unknown,\n): x is { data: Uint8Array | Readable; filename: string; contentType?: string } {\n if (typeof x !== \"object\" || x === null) return false;\n const value = x as { data?: unknown; filename?: unknown };\n return (\n typeof value.filename === \"string\" &&\n (value.data instanceof Uint8Array || isReadable(value.data))\n );\n}\n\nasync function streamToBuffer(stream: Readable): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) chunks.push(Buffer.from(chunk));\n return Buffer.concat(chunks);\n}\n\nfunction toBlobBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n return new Uint8Array(bytes);\n}\n\nasync function resolveOne(input: FileInput): Promise<ResolvedPart> {\n if (typeof input === \"string\" || isPathInput(input)) {\n const path = typeof input === \"string\" ? input : input.path;\n const data = await readFile(path);\n const filename = basename(path);\n return { data: new Blob([toBlobBytes(data)]), filename, contentType: contentTypeFor(filename) };\n }\n if (isNamedFileInput(input)) {\n const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);\n return {\n data: new Blob([toBlobBytes(bytes)]),\n filename: input.filename,\n contentType: input.contentType ?? contentTypeFor(input.filename),\n };\n }\n throw new Error(\"Unsupported file input type\");\n}\n\nexport async function resolveInputs(input: { files: FileInput[] }): Promise<ResolvedPart[]> {\n const list: FileInput[] = input.files;\n if (list.length === 0) throw new Error(\"runFlow requires `files`\");\n return Promise.all(list.map((item) => resolveOne(item)));\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nexport async function runFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n signal?: AbortSignal,\n useDraftVersion = false,\n context?: Record<string, unknown>,\n callbackUrl?: string,\n language?: string,\n organization?: string,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const form = new FormData();\n for (const part of parts) {\n form.append(\"files\", new File([part.data], part.filename, { type: part.contentType }));\n }\n if (context !== undefined) form.append(\"jsonContext\", JSON.stringify(context));\n if (callbackUrl !== undefined) form.append(\"callbackUrl\", callbackUrl);\n if (language !== undefined) form.append(\"language\", language);\n if (useDraftVersion) form.append(\"useDraftVersion\", \"true\");\n\n const path = `/flows/${flowId}/execute-async`;\n return http.requestJson<{ executionResultId: string; fileIds: string[] }>(\n \"POST\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n { body: form, signal },\n );\n}\n","export function normalizeStatus(status: unknown, fallback = \"UNKNOWN\"): string {\n if (typeof status !== \"string\") return fallback;\n const trimmed = status.trim();\n if (!trimmed) return fallback;\n return trimmed\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .toUpperCase();\n}\n\nexport function isFailedStatus(status: string): boolean {\n return normalizeStatus(status) === \"FAILED\";\n}\n\nexport function isTerminalStatus(status: string): boolean {\n const normalized = normalizeStatus(status);\n return normalized === \"COMPLETED\" || normalized === \"FAILED\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { ExecutionStatus } from \"../types.js\";\nimport { normalizeStatus } from \"../status.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, { signal });\n const text = await res.text();\n const body = text ? (JSON.parse(text) as { status: ExecutionStatus | string }) : { status: \"\" };\n const normalizedBody = { ...body, status: normalizeStatus(body.status) };\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? normalizedBody : { ...normalizedBody, pollAfterMs };\n}\n\nfunction parsePositiveInt(value: string | null): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { DocmanaExecutionResult } from \"../types.js\";\n\nexport async function getResult(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n): Promise<DocmanaExecutionResult> {\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: language ? { language } : undefined,\n signal,\n });\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowListItem } from \"../types.js\";\n\nexport async function listFlows(http: HttpClient, organization?: string): Promise<FlowListItem[]> {\n const path = organization ? `/flows?organization=${encodeURIComponent(organization)}` : \"/flows\";\n const flows = await http.requestJson<unknown>(\"GET\", path);\n return Array.isArray(flows) ? flows.map(toFlowListItem) : [];\n}\n\nfunction toFlowListItem(flow: unknown): FlowListItem {\n const value = flow && typeof flow === \"object\" ? (flow as Record<string, unknown>) : {};\n const item: FlowListItem = {\n id: toStringValue(value.id),\n name: toStringValue(value.name),\n state: toStateValue(value.state),\n };\n if (typeof value.organization === \"string\") {\n item.organization = value.organization;\n }\n return item;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toStateValue(value: unknown): string {\n return typeof value === \"string\" && value.trim() ? value : \"unknown\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { AccessibleOrganization } from \"../types.js\";\n\nexport async function listOrganizations(http: HttpClient): Promise<AccessibleOrganization[]> {\n const organizations = await http.requestJson<unknown>(\"GET\", \"/organizations\");\n return Array.isArray(organizations)\n ? organizations.map(toAccessibleOrganization).filter(isAccessibleOrganization)\n : [];\n}\n\nfunction toAccessibleOrganization(organization: unknown): AccessibleOrganization | undefined {\n const value =\n organization && typeof organization === \"object\"\n ? (organization as Record<string, unknown>)\n : {};\n const id = toStringValue(value.id).trim();\n if (!id) return undefined;\n const name = toStringValue(value.name).trim() || id;\n\n return {\n id,\n name,\n };\n}\n\nfunction isAccessibleOrganization(\n organization: AccessibleOrganization | undefined,\n): organization is AccessibleOrganization {\n return organization !== undefined;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowMetadata } from \"../types.js\";\n\nexport async function getFlowMetadata(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowMetadata> {\n const path = `/flows/${encodeURIComponent(flowId)}/metadata`;\n return http.requestJson<FlowMetadata>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowDefinition } from \"../types.js\";\n\nexport async function getFlowDefinition(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowDefinition> {\n const path = `/flows/${encodeURIComponent(flowId)}/definition`;\n return http.requestJson<FlowDefinition>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type {\n DownloadedOrganizationDocument,\n OrganizationDocument,\n OrganizationDocumentsPayload,\n} from \"../types.js\";\n\nexport async function listOrganizationDocuments(\n http: HttpClient,\n options: { prefix?: string } = {},\n): Promise<OrganizationDocumentsPayload> {\n const result = await http.requestJson<unknown>(\"GET\", \"/organization-documents\", {\n query: options.prefix ? { prefix: options.prefix } : undefined,\n });\n const value = result && typeof result === \"object\" ? (result as Record<string, unknown>) : {};\n return {\n configured: value.configured === true,\n documents: Array.isArray(value.documents)\n ? value.documents.map(toOrganizationDocument).filter(isOrganizationDocument)\n : [],\n };\n}\n\nexport async function downloadOrganizationDocument(\n http: HttpClient,\n path: string,\n): Promise<DownloadedOrganizationDocument> {\n const result = await http.requestBytes(\"GET\", \"/organization-documents/download\", {\n query: { path },\n });\n return {\n bytes: result.bytes,\n filename: filenameFromHeaders(result.headers) ?? filenameFromPath(path),\n contentType: result.headers.get(\"content-type\") || undefined,\n };\n}\n\nexport async function downloadOrganizationDocuments(\n http: HttpClient,\n paths: string[],\n): Promise<DownloadedOrganizationDocument[]> {\n return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path)));\n}\n\nfunction toOrganizationDocument(document: unknown): OrganizationDocument | undefined {\n const value =\n document && typeof document === \"object\" ? (document as Record<string, unknown>) : {};\n const path = toStringValue(value.path).trim();\n if (!path) return undefined;\n const contentType = toStringValue(value.contentType).trim();\n return {\n path,\n name: toStringValue(value.name).trim() || filenameFromPath(path),\n size: toNumberValue(value.size),\n lastModified: toStringValue(value.lastModified).trim(),\n ...(contentType ? { contentType } : {}),\n };\n}\n\nfunction isOrganizationDocument(\n document: OrganizationDocument | undefined,\n): document is OrganizationDocument {\n return document !== undefined;\n}\n\nfunction filenameFromHeaders(headers: Headers): string | undefined {\n const disposition = headers.get(\"content-disposition\");\n if (!disposition) return undefined;\n const utf8 = /filename\\*=UTF-8''([^;]+)/i.exec(disposition);\n if (utf8?.[1]) return decodeURIComponent(utf8[1]);\n const quoted = /filename=\"([^\"]+)\"/i.exec(disposition);\n if (quoted?.[1]) return quoted[1];\n const plain = /filename=([^;]+)/i.exec(disposition);\n return plain?.[1]?.trim();\n}\n\nfunction filenameFromPath(path: string): string {\n return path.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean).pop() || path;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toNumberValue(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n","import { DocmanaTimeoutError, DocmanaAbortError, DocmanaRateLimitError } from \"../errors.js\";\nimport { isTerminalStatus, normalizeStatus } from \"../status.js\";\n\nexport interface PollCheckResult {\n status: string;\n nextDelayMs?: number;\n}\n\nexport interface PollOptions {\n check: () => Promise<string | PollCheckResult>;\n intervalMs: number;\n maxIntervalMs: number;\n timeoutMs: number;\n sleep?: (ms: number) => Promise<void>;\n elapsed?: () => number;\n random?: () => number;\n signal?: AbortSignal;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nexport async function pollUntilTerminal(opts: PollOptions): Promise<string> {\n const sleep = opts.sleep ?? defaultSleep;\n const start = Date.now();\n const elapsed = opts.elapsed ?? (() => Date.now() - start);\n const random = opts.random ?? Math.random;\n let fallbackAttempt = 0;\n for (;;) {\n if (opts.signal?.aborted) throw new DocmanaAbortError(\"Polling aborted\");\n let result: PollCheckResult;\n try {\n result = normalizePollResult(await opts.check());\n } catch (err) {\n if (!(err instanceof DocmanaRateLimitError)) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n await sleep(err.retryAfterMs ?? opts.intervalMs);\n continue;\n }\n const status = normalizeStatus(result.status);\n if (isTerminalStatus(status)) return status;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n const fallbackDelay = fullJitterDelay(\n opts.intervalMs,\n opts.maxIntervalMs,\n fallbackAttempt,\n random,\n );\n fallbackAttempt += 1;\n await sleep(result.nextDelayMs ?? fallbackDelay);\n }\n}\n\nfunction normalizePollResult(result: string | PollCheckResult): PollCheckResult {\n return typeof result === \"string\" ? { status: result } : result;\n}\n\nfunction fullJitterDelay(\n intervalMs: number,\n maxIntervalMs: number,\n attempt: number,\n random: () => number,\n): number {\n const capDelay = Math.min(maxIntervalMs, intervalMs * 2 ** attempt);\n return Math.round(intervalMs + random() * (capDelay - intervalMs));\n}\n","import { resolveConfig } from \"./config.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n AccessibleOrganization,\n DocmanaConfig,\n DocmanaExecutionResult,\n DownloadedOrganizationDocument,\n ExecutionStatus,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n} from \"./types.js\";\nimport { HttpClient } from \"./http/http-client.js\";\nimport { resolveInputs } from \"./files/resolve-input.js\";\nimport { runFlow as runFlowApi } from \"./api/run-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport { listFlows as listFlowsApi } from \"./api/list-flows.js\";\nimport { listOrganizations as listOrganizationsApi } from \"./api/list-organizations.js\";\nimport { getFlowMetadata as getFlowMetadataApi } from \"./api/flow-metadata.js\";\nimport { getFlowDefinition as getFlowDefinitionApi } from \"./api/flow-definition.js\";\nimport {\n downloadOrganizationDocument as downloadOrganizationDocumentApi,\n downloadOrganizationDocuments as downloadOrganizationDocumentsApi,\n listOrganizationDocuments as listOrganizationDocumentsApi,\n} from \"./api/organization-documents.js\";\nimport { pollUntilTerminal } from \"./polling/poll.js\";\nimport { DocmanaExecutionError, DocmanaRateLimitError } from \"./errors.js\";\nimport { isFailedStatus, isTerminalStatus } from \"./status.js\";\n\nexport class Docmana {\n private readonly config: ResolvedConfig;\n private readonly http: HttpClient;\n\n constructor(config: DocmanaConfig) {\n this.config = resolveConfig(config);\n this.http = new HttpClient({\n apiBaseUrl: this.config.apiBaseUrl,\n fetchImpl: this.config.fetchImpl,\n accessToken: this.config.accessToken,\n getAccessToken: this.config.getAccessToken,\n headers: this.config.headers,\n });\n }\n\n async runFlowAsync(\n flowId: string,\n params: RunFlowAsyncParams,\n options: RunFlowAsyncOptions = {},\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(params);\n return runFlowApi(\n this.http,\n flowId,\n parts,\n options.signal,\n params.useDraftVersion ?? false,\n params.context,\n params.callbackUrl,\n params.language,\n params.organization,\n );\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language);\n }\n\n async runFlow(\n flowId: string,\n params: RunFlowParams,\n options: RunFlowOptions = {},\n ): Promise<DocmanaExecutionResult> {\n const { executionResultId } = await this.runFlowAsync(flowId, params, {\n signal: options.signal,\n });\n let attempt = 0;\n const startedAt = Date.now();\n await pollUntilTerminal({\n check: async () => {\n attempt += 1;\n try {\n const statusResult = await this.getStatus(executionResultId, options.signal);\n const status = statusResult.status;\n const nextPollAfterMs = this.isTerminalStatus(status)\n ? undefined\n : statusResult.pollAfterMs;\n options.onPoll?.({\n executionResultId,\n status,\n attempt,\n elapsedMs: Date.now() - startedAt,\n nextPollAfterMs,\n });\n return { status, nextDelayMs: nextPollAfterMs };\n } catch (err) {\n if (err instanceof DocmanaRateLimitError) {\n options.onRateLimit?.({\n executionResultId,\n attempt,\n elapsedMs: Date.now() - startedAt,\n retryAfterMs:\n err.retryAfterMs ?? options.pollIntervalMs ?? this.config.pollIntervalMs,\n });\n }\n throw err;\n }\n },\n intervalMs: options.pollIntervalMs ?? this.config.pollIntervalMs,\n maxIntervalMs: options.pollMaxIntervalMs ?? this.config.pollMaxIntervalMs,\n timeoutMs: options.timeoutMs ?? this.config.timeoutMs,\n signal: options.signal,\n });\n const result = await this.getResult(executionResultId, options.signal, params.language);\n if (isFailedStatus(result.status)) {\n throw new DocmanaExecutionError(\n `Flow ${flowId} execution failed`,\n result.errors ?? [],\n result,\n );\n }\n return result;\n }\n\n async listFlows(options: { organization?: string } = {}): Promise<FlowListItem[]> {\n return listFlowsApi(this.http, options.organization);\n }\n\n async listOrganizations(): Promise<AccessibleOrganization[]> {\n return listOrganizationsApi(this.http);\n }\n\n async getFlowMetadata(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowMetadata> {\n return getFlowMetadataApi(this.http, flowId, options.organization);\n }\n\n async getFlowDefinition(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowDefinition> {\n return getFlowDefinitionApi(this.http, flowId, options.organization);\n }\n\n async listOrganizationDocuments(\n options: { prefix?: string } = {},\n ): Promise<OrganizationDocumentsPayload> {\n return listOrganizationDocumentsApi(this.http, options);\n }\n\n async downloadOrganizationDocument(path: string): Promise<DownloadedOrganizationDocument> {\n return downloadOrganizationDocumentApi(this.http, path);\n }\n\n async downloadOrganizationDocuments(paths: string[]): Promise<DownloadedOrganizationDocument[]> {\n return downloadOrganizationDocumentsApi(this.http, paths);\n }\n\n private isTerminalStatus(status: string): boolean {\n return isTerminalStatus(status);\n }\n}\n"],"mappings":"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","names":["toStringValue","toStringValue"]}
package/dist/index.mjs CHANGED
@@ -274,13 +274,29 @@ async function runFlow(http, flowId, parts, signal, useDraftVersion = false, con
274
274
  );
275
275
  }
276
276
 
277
+ // src/sdk/status.ts
278
+ function normalizeStatus(status, fallback = "UNKNOWN") {
279
+ if (typeof status !== "string") return fallback;
280
+ const trimmed = status.trim();
281
+ if (!trimmed) return fallback;
282
+ return trimmed.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/[\s-]+/g, "_").toUpperCase();
283
+ }
284
+ function isFailedStatus(status) {
285
+ return normalizeStatus(status) === "FAILED";
286
+ }
287
+ function isTerminalStatus(status) {
288
+ const normalized = normalizeStatus(status);
289
+ return normalized === "COMPLETED" || normalized === "FAILED";
290
+ }
291
+
277
292
  // src/sdk/api/execution-status.ts
278
293
  async function getStatus(http, executionResultId, signal) {
279
294
  const res = await http.requestRaw("GET", `/executions/${executionResultId}/status`, { signal });
280
295
  const text = await res.text();
281
296
  const body = text ? JSON.parse(text) : { status: "" };
297
+ const normalizedBody = { ...body, status: normalizeStatus(body.status) };
282
298
  const pollAfterMs = parsePositiveInt(res.headers.get("x-poll-after"));
283
- return pollAfterMs === void 0 ? body : { ...body, pollAfterMs };
299
+ return pollAfterMs === void 0 ? normalizedBody : { ...normalizedBody, pollAfterMs };
284
300
  }
285
301
  function parsePositiveInt(value) {
286
302
  if (!value) return void 0;
@@ -422,7 +438,6 @@ function toNumberValue(value) {
422
438
  }
423
439
 
424
440
  // src/sdk/polling/poll.ts
425
- var TERMINAL = /* @__PURE__ */ new Set(["Completed", "Failed"]);
426
441
  var defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
427
442
  async function pollUntilTerminal(opts) {
428
443
  const sleep = opts.sleep ?? defaultSleep;
@@ -443,8 +458,8 @@ async function pollUntilTerminal(opts) {
443
458
  await sleep(err.retryAfterMs ?? opts.intervalMs);
444
459
  continue;
445
460
  }
446
- const { status } = result;
447
- if (TERMINAL.has(status)) return status;
461
+ const status = normalizeStatus(result.status);
462
+ if (isTerminalStatus(status)) return status;
448
463
  if (elapsed() >= opts.timeoutMs) {
449
464
  throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);
450
465
  }
@@ -539,7 +554,7 @@ var Docmana = class {
539
554
  signal: options.signal
540
555
  });
541
556
  const result = await this.getResult(executionResultId, options.signal, params.language);
542
- if (result.status === "Failed") {
557
+ if (isFailedStatus(result.status)) {
543
558
  throw new DocmanaExecutionError(
544
559
  `Flow ${flowId} execution failed`,
545
560
  result.errors ?? [],
@@ -570,7 +585,7 @@ var Docmana = class {
570
585
  return downloadOrganizationDocuments(this.http, paths);
571
586
  }
572
587
  isTerminalStatus(status) {
573
- return status === "Completed" || status === "Failed";
588
+ return isTerminalStatus(status);
574
589
  }
575
590
  };
576
591
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sdk/config.ts","../src/sdk/errors.ts","../src/sdk/http/http-client.ts","../src/sdk/files/resolve-input.ts","../src/sdk/api/run-flow.ts","../src/sdk/api/execution-status.ts","../src/sdk/api/execution-result.ts","../src/sdk/api/list-flows.ts","../src/sdk/api/list-organizations.ts","../src/sdk/api/flow-metadata.ts","../src/sdk/api/flow-definition.ts","../src/sdk/api/organization-documents.ts","../src/sdk/polling/poll.ts","../src/sdk/client.ts"],"sourcesContent":["import type { DocmanaConfig } from \"./types.js\";\n\nexport const DEFAULTS = {\n tokenEndpoint:\n \"https://4fe70f5b-e013-4f65-9fa7-3109a33beba5.ciamlogin.com/4fe70f5b-e013-4f65-9fa7-3109a33beba5/oauth2/v2.0/token\",\n scope: \"api://d781e6ba-cc08-4618-8099-ad968abd2b9e/.default\",\n timeoutMs: 300_000,\n pollIntervalMs: 2_000,\n pollMaxIntervalMs: 10_000,\n} as const;\n\nexport interface ResolvedConfig {\n apiBaseUrl: string;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n timeoutMs: number;\n pollIntervalMs: number;\n pollMaxIntervalMs: number;\n fetchImpl: typeof fetch;\n headers: Record<string, string>;\n}\n\nexport function resolveConfig(config: DocmanaConfig): ResolvedConfig {\n if (!config.apiBaseUrl) throw new Error(\"DocmanaConfig.apiBaseUrl is required\");\n if (!config.accessToken && !config.getAccessToken) {\n throw new Error(\"DocmanaConfig.accessToken or DocmanaConfig.getAccessToken is required\");\n }\n const apiBaseUrl = normalizeApiBaseUrl(config.apiBaseUrl);\n return {\n apiBaseUrl,\n accessToken: config.accessToken,\n getAccessToken: config.getAccessToken,\n timeoutMs: config.timeoutMs ?? DEFAULTS.timeoutMs,\n pollIntervalMs: config.pollIntervalMs ?? DEFAULTS.pollIntervalMs,\n pollMaxIntervalMs: config.pollMaxIntervalMs ?? DEFAULTS.pollMaxIntervalMs,\n fetchImpl: config.fetch ?? fetch,\n headers: config.headers ?? {},\n };\n}\n\nfunction normalizeApiBaseUrl(value: string): string {\n const trimmed = value.replace(/\\/+$/, \"\");\n return /\\/v\\d+$/i.test(trimmed) ? trimmed : `${trimmed}/v1`;\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n constructor(message: string, opts: { status?: number; requestId?: string; code?: string } = {}) {\n super(message);\n this.name = new.target.name;\n this.status = opts.status;\n this.requestId = opts.requestId;\n this.code = opts.code ?? \"docmana_error\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class DocmanaAuthError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"auth_error\" });\n }\n}\n\nexport class DocmanaPermissionError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"permission_error\" });\n }\n}\n\nexport class DocmanaNotFoundError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"not_found\" });\n }\n}\n\nexport class DocmanaRequestError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"bad_request\" });\n }\n}\n\nexport class DocmanaExecutionError extends DocmanaError {\n readonly errors: unknown[];\n readonly result?: DocmanaExecutionResult;\n constructor(message: string, errors: unknown[] = [], result?: DocmanaExecutionResult) {\n super(message, { code: \"execution_failed\" });\n this.errors = errors;\n this.result = result;\n }\n}\n\nexport class DocmanaTimeoutError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"timeout\" });\n }\n}\n\nexport class DocmanaAbortError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"aborted\" });\n }\n}\n\nexport class DocmanaRateLimitError extends DocmanaError {\n readonly retryAfterMs?: number;\n constructor(\n message: string,\n opts: { status?: number; requestId?: string; retryAfterMs?: number } = {},\n ) {\n super(message, { ...opts, code: \"rate_limited\" });\n this.retryAfterMs = opts.retryAfterMs;\n }\n}\n\nexport function errorFromResponse(\n status: number,\n message: string,\n requestId?: string,\n retryAfterMs?: number,\n): DocmanaError {\n const opts = { status, requestId };\n switch (status) {\n case 400:\n return new DocmanaRequestError(message, opts);\n case 401:\n return new DocmanaAuthError(message, opts);\n case 403:\n return new DocmanaPermissionError(message, opts);\n case 404:\n return new DocmanaNotFoundError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n default:\n return new DocmanaError(message, opts);\n }\n}\n","import { DocmanaError, DocmanaAbortError, errorFromResponse } from \"../errors.js\";\n\nexport interface HttpClientOptions {\n apiBaseUrl: string;\n fetchImpl: typeof fetch;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n headers?: Record<string, string>;\n}\n\ntype FetchBody = NonNullable<Parameters<typeof fetch>[1]>[\"body\"];\n\nexport interface RequestOptions {\n query?: Record<string, string>;\n body?: FetchBody;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport interface BytesResponse {\n bytes: Uint8Array;\n headers: Headers;\n}\n\nexport class HttpClient {\n constructor(private readonly opts: HttpClientOptions) {}\n\n async requestJson<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const res = await this.requestRaw(method, path, options);\n const text = await res.text();\n if (!text) return {} as T;\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new DocmanaError(\"Invalid JSON response from Docmana\", { status: res.status });\n }\n }\n\n async requestBytes(\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<BytesResponse> {\n const res = await this.requestRaw(method, path, options);\n return { bytes: new Uint8Array(await res.arrayBuffer()), headers: res.headers };\n }\n\n async requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n let res = await this.send(method, path, options);\n if (res.status === 401 && this.opts.getAccessToken) {\n res = await this.send(method, path, options, true);\n }\n if (!res.ok) {\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n const message = await this.extractMessage(res);\n throw errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n }\n return res;\n }\n\n private async send(\n method: string,\n path: string,\n options: RequestOptions,\n forceRefresh = false,\n ): Promise<Response> {\n const token = await this.resolveToken(forceRefresh);\n const url = new URL(this.opts.apiBaseUrl + path);\n for (const [k, v] of Object.entries(options.query ?? {})) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n ...(this.opts.headers ?? {}),\n authorization: `Bearer ${token}`,\n ...(options.headers ?? {}),\n };\n try {\n return await this.opts.fetchImpl(url, {\n method,\n headers,\n body: options.body,\n signal: options.signal,\n });\n } catch (err) {\n if (options.signal?.aborted || (err instanceof Error && err.name === \"AbortError\")) {\n throw new DocmanaAbortError(\"Request aborted\");\n }\n throw err;\n }\n }\n\n private async resolveToken(forceRefresh: boolean): Promise<string> {\n const token = this.opts.getAccessToken\n ? await this.opts.getAccessToken(forceRefresh ? { forceRefresh: true } : undefined)\n : this.opts.accessToken;\n if (!token) {\n throw new DocmanaError(\"Missing Docmana access token\", { code: \"auth_missing\" });\n }\n return token;\n }\n\n private async extractMessage(res: Response): Promise<string> {\n try {\n const data = (await res.clone().json()) as { message?: string; error?: string };\n return data.message ?? data.error ?? res.statusText ?? `HTTP ${res.status}`;\n } catch {\n return res.statusText ?? `HTTP ${res.status}`;\n }\n }\n}\n\nfunction parseRetryAfterMs(value: string | null): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return seconds * 1000;\n }\n const retryAt = Date.parse(value);\n if (!Number.isNaN(retryAt)) {\n return Math.max(0, retryAt - Date.now());\n }\n return undefined;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport type { FileInput } from \"../types.js\";\n\nexport interface ResolvedPart {\n data: Blob;\n filename: string;\n contentType: string;\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".txt\": \"text/plain\",\n \".json\": \"application/json\",\n};\n\nfunction contentTypeFor(name: string): string {\n const dot = name.lastIndexOf(\".\");\n if (dot < 0) return \"application/octet-stream\";\n const ext = name.slice(dot).toLowerCase();\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction isReadable(x: unknown): x is Readable {\n return typeof x === \"object\" && x !== null && typeof (x as Readable).pipe === \"function\";\n}\n\nfunction isPathInput(x: unknown): x is { path: string } {\n return typeof x === \"object\" && x !== null && typeof (x as { path?: unknown }).path === \"string\";\n}\n\nfunction isNamedFileInput(\n x: unknown,\n): x is { data: Uint8Array | Readable; filename: string; contentType?: string } {\n if (typeof x !== \"object\" || x === null) return false;\n const value = x as { data?: unknown; filename?: unknown };\n return (\n typeof value.filename === \"string\" &&\n (value.data instanceof Uint8Array || isReadable(value.data))\n );\n}\n\nasync function streamToBuffer(stream: Readable): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) chunks.push(Buffer.from(chunk));\n return Buffer.concat(chunks);\n}\n\nfunction toBlobBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n return new Uint8Array(bytes);\n}\n\nasync function resolveOne(input: FileInput): Promise<ResolvedPart> {\n if (typeof input === \"string\" || isPathInput(input)) {\n const path = typeof input === \"string\" ? input : input.path;\n const data = await readFile(path);\n const filename = basename(path);\n return { data: new Blob([toBlobBytes(data)]), filename, contentType: contentTypeFor(filename) };\n }\n if (isNamedFileInput(input)) {\n const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);\n return {\n data: new Blob([toBlobBytes(bytes)]),\n filename: input.filename,\n contentType: input.contentType ?? contentTypeFor(input.filename),\n };\n }\n throw new Error(\"Unsupported file input type\");\n}\n\nexport async function resolveInputs(input: { files: FileInput[] }): Promise<ResolvedPart[]> {\n const list: FileInput[] = input.files;\n if (list.length === 0) throw new Error(\"runFlow requires `files`\");\n return Promise.all(list.map((item) => resolveOne(item)));\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nexport async function runFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n signal?: AbortSignal,\n useDraftVersion = false,\n context?: Record<string, unknown>,\n callbackUrl?: string,\n language?: string,\n organization?: string,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const form = new FormData();\n for (const part of parts) {\n form.append(\"files\", new File([part.data], part.filename, { type: part.contentType }));\n }\n if (context !== undefined) form.append(\"jsonContext\", JSON.stringify(context));\n if (callbackUrl !== undefined) form.append(\"callbackUrl\", callbackUrl);\n if (language !== undefined) form.append(\"language\", language);\n if (useDraftVersion) form.append(\"useDraftVersion\", \"true\");\n\n const path = `/flows/${flowId}/execute-async`;\n return http.requestJson<{ executionResultId: string; fileIds: string[] }>(\n \"POST\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n { body: form, signal },\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { ExecutionStatus } from \"../types.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, { signal });\n const text = await res.text();\n const body = text ? (JSON.parse(text) as { status: ExecutionStatus | string }) : { status: \"\" };\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? body : { ...body, pollAfterMs };\n}\n\nfunction parsePositiveInt(value: string | null): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { DocmanaExecutionResult } from \"../types.js\";\n\nexport async function getResult(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n): Promise<DocmanaExecutionResult> {\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: language ? { language } : undefined,\n signal,\n });\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowListItem } from \"../types.js\";\n\nexport async function listFlows(http: HttpClient, organization?: string): Promise<FlowListItem[]> {\n const path = organization ? `/flows?organization=${encodeURIComponent(organization)}` : \"/flows\";\n const flows = await http.requestJson<unknown>(\"GET\", path);\n return Array.isArray(flows) ? flows.map(toFlowListItem) : [];\n}\n\nfunction toFlowListItem(flow: unknown): FlowListItem {\n const value = flow && typeof flow === \"object\" ? (flow as Record<string, unknown>) : {};\n const item: FlowListItem = {\n id: toStringValue(value.id),\n name: toStringValue(value.name),\n state: toStateValue(value.state),\n };\n if (typeof value.organization === \"string\") {\n item.organization = value.organization;\n }\n return item;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toStateValue(value: unknown): string {\n return typeof value === \"string\" && value.trim() ? value : \"unknown\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { AccessibleOrganization } from \"../types.js\";\n\nexport async function listOrganizations(http: HttpClient): Promise<AccessibleOrganization[]> {\n const organizations = await http.requestJson<unknown>(\"GET\", \"/organizations\");\n return Array.isArray(organizations)\n ? organizations.map(toAccessibleOrganization).filter(isAccessibleOrganization)\n : [];\n}\n\nfunction toAccessibleOrganization(organization: unknown): AccessibleOrganization | undefined {\n const value =\n organization && typeof organization === \"object\"\n ? (organization as Record<string, unknown>)\n : {};\n const id = toStringValue(value.id).trim();\n if (!id) return undefined;\n const name = toStringValue(value.name).trim() || id;\n\n return {\n id,\n name,\n };\n}\n\nfunction isAccessibleOrganization(\n organization: AccessibleOrganization | undefined,\n): organization is AccessibleOrganization {\n return organization !== undefined;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowMetadata } from \"../types.js\";\n\nexport async function getFlowMetadata(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowMetadata> {\n const path = `/flows/${encodeURIComponent(flowId)}/metadata`;\n return http.requestJson<FlowMetadata>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowDefinition } from \"../types.js\";\n\nexport async function getFlowDefinition(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowDefinition> {\n const path = `/flows/${encodeURIComponent(flowId)}/definition`;\n return http.requestJson<FlowDefinition>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type {\n DownloadedOrganizationDocument,\n OrganizationDocument,\n OrganizationDocumentsPayload,\n} from \"../types.js\";\n\nexport async function listOrganizationDocuments(\n http: HttpClient,\n options: { prefix?: string } = {},\n): Promise<OrganizationDocumentsPayload> {\n const result = await http.requestJson<unknown>(\"GET\", \"/organization-documents\", {\n query: options.prefix ? { prefix: options.prefix } : undefined,\n });\n const value = result && typeof result === \"object\" ? (result as Record<string, unknown>) : {};\n return {\n configured: value.configured === true,\n documents: Array.isArray(value.documents)\n ? value.documents.map(toOrganizationDocument).filter(isOrganizationDocument)\n : [],\n };\n}\n\nexport async function downloadOrganizationDocument(\n http: HttpClient,\n path: string,\n): Promise<DownloadedOrganizationDocument> {\n const result = await http.requestBytes(\"GET\", \"/organization-documents/download\", {\n query: { path },\n });\n return {\n bytes: result.bytes,\n filename: filenameFromHeaders(result.headers) ?? filenameFromPath(path),\n contentType: result.headers.get(\"content-type\") || undefined,\n };\n}\n\nexport async function downloadOrganizationDocuments(\n http: HttpClient,\n paths: string[],\n): Promise<DownloadedOrganizationDocument[]> {\n return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path)));\n}\n\nfunction toOrganizationDocument(document: unknown): OrganizationDocument | undefined {\n const value =\n document && typeof document === \"object\" ? (document as Record<string, unknown>) : {};\n const path = toStringValue(value.path).trim();\n if (!path) return undefined;\n const contentType = toStringValue(value.contentType).trim();\n return {\n path,\n name: toStringValue(value.name).trim() || filenameFromPath(path),\n size: toNumberValue(value.size),\n lastModified: toStringValue(value.lastModified).trim(),\n ...(contentType ? { contentType } : {}),\n };\n}\n\nfunction isOrganizationDocument(\n document: OrganizationDocument | undefined,\n): document is OrganizationDocument {\n return document !== undefined;\n}\n\nfunction filenameFromHeaders(headers: Headers): string | undefined {\n const disposition = headers.get(\"content-disposition\");\n if (!disposition) return undefined;\n const utf8 = /filename\\*=UTF-8''([^;]+)/i.exec(disposition);\n if (utf8?.[1]) return decodeURIComponent(utf8[1]);\n const quoted = /filename=\"([^\"]+)\"/i.exec(disposition);\n if (quoted?.[1]) return quoted[1];\n const plain = /filename=([^;]+)/i.exec(disposition);\n return plain?.[1]?.trim();\n}\n\nfunction filenameFromPath(path: string): string {\n return path.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean).pop() || path;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toNumberValue(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n","import { DocmanaTimeoutError, DocmanaAbortError, DocmanaRateLimitError } from \"../errors.js\";\n\nconst TERMINAL = new Set([\"Completed\", \"Failed\"]);\n\nexport interface PollCheckResult {\n status: string;\n nextDelayMs?: number;\n}\n\nexport interface PollOptions {\n check: () => Promise<string | PollCheckResult>;\n intervalMs: number;\n maxIntervalMs: number;\n timeoutMs: number;\n sleep?: (ms: number) => Promise<void>;\n elapsed?: () => number;\n random?: () => number;\n signal?: AbortSignal;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nexport async function pollUntilTerminal(opts: PollOptions): Promise<string> {\n const sleep = opts.sleep ?? defaultSleep;\n const start = Date.now();\n const elapsed = opts.elapsed ?? (() => Date.now() - start);\n const random = opts.random ?? Math.random;\n let fallbackAttempt = 0;\n for (;;) {\n if (opts.signal?.aborted) throw new DocmanaAbortError(\"Polling aborted\");\n let result: PollCheckResult;\n try {\n result = normalizePollResult(await opts.check());\n } catch (err) {\n if (!(err instanceof DocmanaRateLimitError)) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n await sleep(err.retryAfterMs ?? opts.intervalMs);\n continue;\n }\n const { status } = result;\n if (TERMINAL.has(status)) return status;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n const fallbackDelay = fullJitterDelay(\n opts.intervalMs,\n opts.maxIntervalMs,\n fallbackAttempt,\n random,\n );\n fallbackAttempt += 1;\n await sleep(result.nextDelayMs ?? fallbackDelay);\n }\n}\n\nfunction normalizePollResult(result: string | PollCheckResult): PollCheckResult {\n return typeof result === \"string\" ? { status: result } : result;\n}\n\nfunction fullJitterDelay(\n intervalMs: number,\n maxIntervalMs: number,\n attempt: number,\n random: () => number,\n): number {\n const capDelay = Math.min(maxIntervalMs, intervalMs * 2 ** attempt);\n return Math.round(intervalMs + random() * (capDelay - intervalMs));\n}\n","import { resolveConfig } from \"./config.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n AccessibleOrganization,\n DocmanaConfig,\n DocmanaExecutionResult,\n DownloadedOrganizationDocument,\n ExecutionStatus,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n} from \"./types.js\";\nimport { HttpClient } from \"./http/http-client.js\";\nimport { resolveInputs } from \"./files/resolve-input.js\";\nimport { runFlow as runFlowApi } from \"./api/run-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport { listFlows as listFlowsApi } from \"./api/list-flows.js\";\nimport { listOrganizations as listOrganizationsApi } from \"./api/list-organizations.js\";\nimport { getFlowMetadata as getFlowMetadataApi } from \"./api/flow-metadata.js\";\nimport { getFlowDefinition as getFlowDefinitionApi } from \"./api/flow-definition.js\";\nimport {\n downloadOrganizationDocument as downloadOrganizationDocumentApi,\n downloadOrganizationDocuments as downloadOrganizationDocumentsApi,\n listOrganizationDocuments as listOrganizationDocumentsApi,\n} from \"./api/organization-documents.js\";\nimport { pollUntilTerminal } from \"./polling/poll.js\";\nimport { DocmanaExecutionError, DocmanaRateLimitError } from \"./errors.js\";\n\nexport class Docmana {\n private readonly config: ResolvedConfig;\n private readonly http: HttpClient;\n\n constructor(config: DocmanaConfig) {\n this.config = resolveConfig(config);\n this.http = new HttpClient({\n apiBaseUrl: this.config.apiBaseUrl,\n fetchImpl: this.config.fetchImpl,\n accessToken: this.config.accessToken,\n getAccessToken: this.config.getAccessToken,\n headers: this.config.headers,\n });\n }\n\n async runFlowAsync(\n flowId: string,\n params: RunFlowAsyncParams,\n options: RunFlowAsyncOptions = {},\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(params);\n return runFlowApi(\n this.http,\n flowId,\n parts,\n options.signal,\n params.useDraftVersion ?? false,\n params.context,\n params.callbackUrl,\n params.language,\n params.organization,\n );\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language);\n }\n\n async runFlow(\n flowId: string,\n params: RunFlowParams,\n options: RunFlowOptions = {},\n ): Promise<DocmanaExecutionResult> {\n const { executionResultId } = await this.runFlowAsync(flowId, params, {\n signal: options.signal,\n });\n let attempt = 0;\n const startedAt = Date.now();\n await pollUntilTerminal({\n check: async () => {\n attempt += 1;\n try {\n const statusResult = await this.getStatus(executionResultId, options.signal);\n const status = statusResult.status;\n const nextPollAfterMs = this.isTerminalStatus(status)\n ? undefined\n : statusResult.pollAfterMs;\n options.onPoll?.({\n executionResultId,\n status,\n attempt,\n elapsedMs: Date.now() - startedAt,\n nextPollAfterMs,\n });\n return { status, nextDelayMs: nextPollAfterMs };\n } catch (err) {\n if (err instanceof DocmanaRateLimitError) {\n options.onRateLimit?.({\n executionResultId,\n attempt,\n elapsedMs: Date.now() - startedAt,\n retryAfterMs:\n err.retryAfterMs ?? options.pollIntervalMs ?? this.config.pollIntervalMs,\n });\n }\n throw err;\n }\n },\n intervalMs: options.pollIntervalMs ?? this.config.pollIntervalMs,\n maxIntervalMs: options.pollMaxIntervalMs ?? this.config.pollMaxIntervalMs,\n timeoutMs: options.timeoutMs ?? this.config.timeoutMs,\n signal: options.signal,\n });\n const result = await this.getResult(executionResultId, options.signal, params.language);\n if (result.status === \"Failed\") {\n throw new DocmanaExecutionError(\n `Flow ${flowId} execution failed`,\n result.errors ?? [],\n result,\n );\n }\n return result;\n }\n\n async listFlows(options: { organization?: string } = {}): Promise<FlowListItem[]> {\n return listFlowsApi(this.http, options.organization);\n }\n\n async listOrganizations(): Promise<AccessibleOrganization[]> {\n return listOrganizationsApi(this.http);\n }\n\n async getFlowMetadata(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowMetadata> {\n return getFlowMetadataApi(this.http, flowId, options.organization);\n }\n\n async getFlowDefinition(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowDefinition> {\n return getFlowDefinitionApi(this.http, flowId, options.organization);\n }\n\n async listOrganizationDocuments(\n options: { prefix?: string } = {},\n ): Promise<OrganizationDocumentsPayload> {\n return listOrganizationDocumentsApi(this.http, options);\n }\n\n async downloadOrganizationDocument(path: string): Promise<DownloadedOrganizationDocument> {\n return downloadOrganizationDocumentApi(this.http, path);\n }\n\n async downloadOrganizationDocuments(paths: string[]): Promise<DownloadedOrganizationDocument[]> {\n return downloadOrganizationDocumentsApi(this.http, paths);\n }\n\n private isTerminalStatus(status: string): boolean {\n return status === \"Completed\" || status === \"Failed\";\n }\n}\n"],"mappings":"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","names":["toStringValue","toStringValue"]}
1
+ {"version":3,"sources":["../src/sdk/config.ts","../src/sdk/errors.ts","../src/sdk/http/http-client.ts","../src/sdk/files/resolve-input.ts","../src/sdk/api/run-flow.ts","../src/sdk/status.ts","../src/sdk/api/execution-status.ts","../src/sdk/api/execution-result.ts","../src/sdk/api/list-flows.ts","../src/sdk/api/list-organizations.ts","../src/sdk/api/flow-metadata.ts","../src/sdk/api/flow-definition.ts","../src/sdk/api/organization-documents.ts","../src/sdk/polling/poll.ts","../src/sdk/client.ts"],"sourcesContent":["import type { DocmanaConfig } from \"./types.js\";\n\nexport const DEFAULTS = {\n tokenEndpoint:\n \"https://4fe70f5b-e013-4f65-9fa7-3109a33beba5.ciamlogin.com/4fe70f5b-e013-4f65-9fa7-3109a33beba5/oauth2/v2.0/token\",\n scope: \"api://d781e6ba-cc08-4618-8099-ad968abd2b9e/.default\",\n timeoutMs: 300_000,\n pollIntervalMs: 2_000,\n pollMaxIntervalMs: 10_000,\n} as const;\n\nexport interface ResolvedConfig {\n apiBaseUrl: string;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n timeoutMs: number;\n pollIntervalMs: number;\n pollMaxIntervalMs: number;\n fetchImpl: typeof fetch;\n headers: Record<string, string>;\n}\n\nexport function resolveConfig(config: DocmanaConfig): ResolvedConfig {\n if (!config.apiBaseUrl) throw new Error(\"DocmanaConfig.apiBaseUrl is required\");\n if (!config.accessToken && !config.getAccessToken) {\n throw new Error(\"DocmanaConfig.accessToken or DocmanaConfig.getAccessToken is required\");\n }\n const apiBaseUrl = normalizeApiBaseUrl(config.apiBaseUrl);\n return {\n apiBaseUrl,\n accessToken: config.accessToken,\n getAccessToken: config.getAccessToken,\n timeoutMs: config.timeoutMs ?? DEFAULTS.timeoutMs,\n pollIntervalMs: config.pollIntervalMs ?? DEFAULTS.pollIntervalMs,\n pollMaxIntervalMs: config.pollMaxIntervalMs ?? DEFAULTS.pollMaxIntervalMs,\n fetchImpl: config.fetch ?? fetch,\n headers: config.headers ?? {},\n };\n}\n\nfunction normalizeApiBaseUrl(value: string): string {\n const trimmed = value.replace(/\\/+$/, \"\");\n return /\\/v\\d+$/i.test(trimmed) ? trimmed : `${trimmed}/v1`;\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n constructor(message: string, opts: { status?: number; requestId?: string; code?: string } = {}) {\n super(message);\n this.name = new.target.name;\n this.status = opts.status;\n this.requestId = opts.requestId;\n this.code = opts.code ?? \"docmana_error\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class DocmanaAuthError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"auth_error\" });\n }\n}\n\nexport class DocmanaPermissionError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"permission_error\" });\n }\n}\n\nexport class DocmanaNotFoundError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"not_found\" });\n }\n}\n\nexport class DocmanaRequestError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"bad_request\" });\n }\n}\n\nexport class DocmanaExecutionError extends DocmanaError {\n readonly errors: unknown[];\n readonly result?: DocmanaExecutionResult;\n constructor(message: string, errors: unknown[] = [], result?: DocmanaExecutionResult) {\n super(message, { code: \"execution_failed\" });\n this.errors = errors;\n this.result = result;\n }\n}\n\nexport class DocmanaTimeoutError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"timeout\" });\n }\n}\n\nexport class DocmanaAbortError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"aborted\" });\n }\n}\n\nexport class DocmanaRateLimitError extends DocmanaError {\n readonly retryAfterMs?: number;\n constructor(\n message: string,\n opts: { status?: number; requestId?: string; retryAfterMs?: number } = {},\n ) {\n super(message, { ...opts, code: \"rate_limited\" });\n this.retryAfterMs = opts.retryAfterMs;\n }\n}\n\nexport function errorFromResponse(\n status: number,\n message: string,\n requestId?: string,\n retryAfterMs?: number,\n): DocmanaError {\n const opts = { status, requestId };\n switch (status) {\n case 400:\n return new DocmanaRequestError(message, opts);\n case 401:\n return new DocmanaAuthError(message, opts);\n case 403:\n return new DocmanaPermissionError(message, opts);\n case 404:\n return new DocmanaNotFoundError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n default:\n return new DocmanaError(message, opts);\n }\n}\n","import { DocmanaError, DocmanaAbortError, errorFromResponse } from \"../errors.js\";\n\nexport interface HttpClientOptions {\n apiBaseUrl: string;\n fetchImpl: typeof fetch;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n headers?: Record<string, string>;\n}\n\ntype FetchBody = NonNullable<Parameters<typeof fetch>[1]>[\"body\"];\n\nexport interface RequestOptions {\n query?: Record<string, string>;\n body?: FetchBody;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport interface BytesResponse {\n bytes: Uint8Array;\n headers: Headers;\n}\n\nexport class HttpClient {\n constructor(private readonly opts: HttpClientOptions) {}\n\n async requestJson<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const res = await this.requestRaw(method, path, options);\n const text = await res.text();\n if (!text) return {} as T;\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new DocmanaError(\"Invalid JSON response from Docmana\", { status: res.status });\n }\n }\n\n async requestBytes(\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<BytesResponse> {\n const res = await this.requestRaw(method, path, options);\n return { bytes: new Uint8Array(await res.arrayBuffer()), headers: res.headers };\n }\n\n async requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n let res = await this.send(method, path, options);\n if (res.status === 401 && this.opts.getAccessToken) {\n res = await this.send(method, path, options, true);\n }\n if (!res.ok) {\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n const message = await this.extractMessage(res);\n throw errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n }\n return res;\n }\n\n private async send(\n method: string,\n path: string,\n options: RequestOptions,\n forceRefresh = false,\n ): Promise<Response> {\n const token = await this.resolveToken(forceRefresh);\n const url = new URL(this.opts.apiBaseUrl + path);\n for (const [k, v] of Object.entries(options.query ?? {})) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n ...(this.opts.headers ?? {}),\n authorization: `Bearer ${token}`,\n ...(options.headers ?? {}),\n };\n try {\n return await this.opts.fetchImpl(url, {\n method,\n headers,\n body: options.body,\n signal: options.signal,\n });\n } catch (err) {\n if (options.signal?.aborted || (err instanceof Error && err.name === \"AbortError\")) {\n throw new DocmanaAbortError(\"Request aborted\");\n }\n throw err;\n }\n }\n\n private async resolveToken(forceRefresh: boolean): Promise<string> {\n const token = this.opts.getAccessToken\n ? await this.opts.getAccessToken(forceRefresh ? { forceRefresh: true } : undefined)\n : this.opts.accessToken;\n if (!token) {\n throw new DocmanaError(\"Missing Docmana access token\", { code: \"auth_missing\" });\n }\n return token;\n }\n\n private async extractMessage(res: Response): Promise<string> {\n try {\n const data = (await res.clone().json()) as { message?: string; error?: string };\n return data.message ?? data.error ?? res.statusText ?? `HTTP ${res.status}`;\n } catch {\n return res.statusText ?? `HTTP ${res.status}`;\n }\n }\n}\n\nfunction parseRetryAfterMs(value: string | null): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return seconds * 1000;\n }\n const retryAt = Date.parse(value);\n if (!Number.isNaN(retryAt)) {\n return Math.max(0, retryAt - Date.now());\n }\n return undefined;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport type { FileInput } from \"../types.js\";\n\nexport interface ResolvedPart {\n data: Blob;\n filename: string;\n contentType: string;\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".txt\": \"text/plain\",\n \".json\": \"application/json\",\n};\n\nfunction contentTypeFor(name: string): string {\n const dot = name.lastIndexOf(\".\");\n if (dot < 0) return \"application/octet-stream\";\n const ext = name.slice(dot).toLowerCase();\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction isReadable(x: unknown): x is Readable {\n return typeof x === \"object\" && x !== null && typeof (x as Readable).pipe === \"function\";\n}\n\nfunction isPathInput(x: unknown): x is { path: string } {\n return typeof x === \"object\" && x !== null && typeof (x as { path?: unknown }).path === \"string\";\n}\n\nfunction isNamedFileInput(\n x: unknown,\n): x is { data: Uint8Array | Readable; filename: string; contentType?: string } {\n if (typeof x !== \"object\" || x === null) return false;\n const value = x as { data?: unknown; filename?: unknown };\n return (\n typeof value.filename === \"string\" &&\n (value.data instanceof Uint8Array || isReadable(value.data))\n );\n}\n\nasync function streamToBuffer(stream: Readable): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) chunks.push(Buffer.from(chunk));\n return Buffer.concat(chunks);\n}\n\nfunction toBlobBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n return new Uint8Array(bytes);\n}\n\nasync function resolveOne(input: FileInput): Promise<ResolvedPart> {\n if (typeof input === \"string\" || isPathInput(input)) {\n const path = typeof input === \"string\" ? input : input.path;\n const data = await readFile(path);\n const filename = basename(path);\n return { data: new Blob([toBlobBytes(data)]), filename, contentType: contentTypeFor(filename) };\n }\n if (isNamedFileInput(input)) {\n const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);\n return {\n data: new Blob([toBlobBytes(bytes)]),\n filename: input.filename,\n contentType: input.contentType ?? contentTypeFor(input.filename),\n };\n }\n throw new Error(\"Unsupported file input type\");\n}\n\nexport async function resolveInputs(input: { files: FileInput[] }): Promise<ResolvedPart[]> {\n const list: FileInput[] = input.files;\n if (list.length === 0) throw new Error(\"runFlow requires `files`\");\n return Promise.all(list.map((item) => resolveOne(item)));\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nexport async function runFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n signal?: AbortSignal,\n useDraftVersion = false,\n context?: Record<string, unknown>,\n callbackUrl?: string,\n language?: string,\n organization?: string,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const form = new FormData();\n for (const part of parts) {\n form.append(\"files\", new File([part.data], part.filename, { type: part.contentType }));\n }\n if (context !== undefined) form.append(\"jsonContext\", JSON.stringify(context));\n if (callbackUrl !== undefined) form.append(\"callbackUrl\", callbackUrl);\n if (language !== undefined) form.append(\"language\", language);\n if (useDraftVersion) form.append(\"useDraftVersion\", \"true\");\n\n const path = `/flows/${flowId}/execute-async`;\n return http.requestJson<{ executionResultId: string; fileIds: string[] }>(\n \"POST\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n { body: form, signal },\n );\n}\n","export function normalizeStatus(status: unknown, fallback = \"UNKNOWN\"): string {\n if (typeof status !== \"string\") return fallback;\n const trimmed = status.trim();\n if (!trimmed) return fallback;\n return trimmed\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .toUpperCase();\n}\n\nexport function isFailedStatus(status: string): boolean {\n return normalizeStatus(status) === \"FAILED\";\n}\n\nexport function isTerminalStatus(status: string): boolean {\n const normalized = normalizeStatus(status);\n return normalized === \"COMPLETED\" || normalized === \"FAILED\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { ExecutionStatus } from \"../types.js\";\nimport { normalizeStatus } from \"../status.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, { signal });\n const text = await res.text();\n const body = text ? (JSON.parse(text) as { status: ExecutionStatus | string }) : { status: \"\" };\n const normalizedBody = { ...body, status: normalizeStatus(body.status) };\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? normalizedBody : { ...normalizedBody, pollAfterMs };\n}\n\nfunction parsePositiveInt(value: string | null): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { DocmanaExecutionResult } from \"../types.js\";\n\nexport async function getResult(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n): Promise<DocmanaExecutionResult> {\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: language ? { language } : undefined,\n signal,\n });\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowListItem } from \"../types.js\";\n\nexport async function listFlows(http: HttpClient, organization?: string): Promise<FlowListItem[]> {\n const path = organization ? `/flows?organization=${encodeURIComponent(organization)}` : \"/flows\";\n const flows = await http.requestJson<unknown>(\"GET\", path);\n return Array.isArray(flows) ? flows.map(toFlowListItem) : [];\n}\n\nfunction toFlowListItem(flow: unknown): FlowListItem {\n const value = flow && typeof flow === \"object\" ? (flow as Record<string, unknown>) : {};\n const item: FlowListItem = {\n id: toStringValue(value.id),\n name: toStringValue(value.name),\n state: toStateValue(value.state),\n };\n if (typeof value.organization === \"string\") {\n item.organization = value.organization;\n }\n return item;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toStateValue(value: unknown): string {\n return typeof value === \"string\" && value.trim() ? value : \"unknown\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { AccessibleOrganization } from \"../types.js\";\n\nexport async function listOrganizations(http: HttpClient): Promise<AccessibleOrganization[]> {\n const organizations = await http.requestJson<unknown>(\"GET\", \"/organizations\");\n return Array.isArray(organizations)\n ? organizations.map(toAccessibleOrganization).filter(isAccessibleOrganization)\n : [];\n}\n\nfunction toAccessibleOrganization(organization: unknown): AccessibleOrganization | undefined {\n const value =\n organization && typeof organization === \"object\"\n ? (organization as Record<string, unknown>)\n : {};\n const id = toStringValue(value.id).trim();\n if (!id) return undefined;\n const name = toStringValue(value.name).trim() || id;\n\n return {\n id,\n name,\n };\n}\n\nfunction isAccessibleOrganization(\n organization: AccessibleOrganization | undefined,\n): organization is AccessibleOrganization {\n return organization !== undefined;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowMetadata } from \"../types.js\";\n\nexport async function getFlowMetadata(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowMetadata> {\n const path = `/flows/${encodeURIComponent(flowId)}/metadata`;\n return http.requestJson<FlowMetadata>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowDefinition } from \"../types.js\";\n\nexport async function getFlowDefinition(\n http: HttpClient,\n flowId: string,\n organization?: string,\n): Promise<FlowDefinition> {\n const path = `/flows/${encodeURIComponent(flowId)}/definition`;\n return http.requestJson<FlowDefinition>(\n \"GET\",\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type {\n DownloadedOrganizationDocument,\n OrganizationDocument,\n OrganizationDocumentsPayload,\n} from \"../types.js\";\n\nexport async function listOrganizationDocuments(\n http: HttpClient,\n options: { prefix?: string } = {},\n): Promise<OrganizationDocumentsPayload> {\n const result = await http.requestJson<unknown>(\"GET\", \"/organization-documents\", {\n query: options.prefix ? { prefix: options.prefix } : undefined,\n });\n const value = result && typeof result === \"object\" ? (result as Record<string, unknown>) : {};\n return {\n configured: value.configured === true,\n documents: Array.isArray(value.documents)\n ? value.documents.map(toOrganizationDocument).filter(isOrganizationDocument)\n : [],\n };\n}\n\nexport async function downloadOrganizationDocument(\n http: HttpClient,\n path: string,\n): Promise<DownloadedOrganizationDocument> {\n const result = await http.requestBytes(\"GET\", \"/organization-documents/download\", {\n query: { path },\n });\n return {\n bytes: result.bytes,\n filename: filenameFromHeaders(result.headers) ?? filenameFromPath(path),\n contentType: result.headers.get(\"content-type\") || undefined,\n };\n}\n\nexport async function downloadOrganizationDocuments(\n http: HttpClient,\n paths: string[],\n): Promise<DownloadedOrganizationDocument[]> {\n return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path)));\n}\n\nfunction toOrganizationDocument(document: unknown): OrganizationDocument | undefined {\n const value =\n document && typeof document === \"object\" ? (document as Record<string, unknown>) : {};\n const path = toStringValue(value.path).trim();\n if (!path) return undefined;\n const contentType = toStringValue(value.contentType).trim();\n return {\n path,\n name: toStringValue(value.name).trim() || filenameFromPath(path),\n size: toNumberValue(value.size),\n lastModified: toStringValue(value.lastModified).trim(),\n ...(contentType ? { contentType } : {}),\n };\n}\n\nfunction isOrganizationDocument(\n document: OrganizationDocument | undefined,\n): document is OrganizationDocument {\n return document !== undefined;\n}\n\nfunction filenameFromHeaders(headers: Headers): string | undefined {\n const disposition = headers.get(\"content-disposition\");\n if (!disposition) return undefined;\n const utf8 = /filename\\*=UTF-8''([^;]+)/i.exec(disposition);\n if (utf8?.[1]) return decodeURIComponent(utf8[1]);\n const quoted = /filename=\"([^\"]+)\"/i.exec(disposition);\n if (quoted?.[1]) return quoted[1];\n const plain = /filename=([^;]+)/i.exec(disposition);\n return plain?.[1]?.trim();\n}\n\nfunction filenameFromPath(path: string): string {\n return path.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean).pop() || path;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toNumberValue(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n","import { DocmanaTimeoutError, DocmanaAbortError, DocmanaRateLimitError } from \"../errors.js\";\nimport { isTerminalStatus, normalizeStatus } from \"../status.js\";\n\nexport interface PollCheckResult {\n status: string;\n nextDelayMs?: number;\n}\n\nexport interface PollOptions {\n check: () => Promise<string | PollCheckResult>;\n intervalMs: number;\n maxIntervalMs: number;\n timeoutMs: number;\n sleep?: (ms: number) => Promise<void>;\n elapsed?: () => number;\n random?: () => number;\n signal?: AbortSignal;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nexport async function pollUntilTerminal(opts: PollOptions): Promise<string> {\n const sleep = opts.sleep ?? defaultSleep;\n const start = Date.now();\n const elapsed = opts.elapsed ?? (() => Date.now() - start);\n const random = opts.random ?? Math.random;\n let fallbackAttempt = 0;\n for (;;) {\n if (opts.signal?.aborted) throw new DocmanaAbortError(\"Polling aborted\");\n let result: PollCheckResult;\n try {\n result = normalizePollResult(await opts.check());\n } catch (err) {\n if (!(err instanceof DocmanaRateLimitError)) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n await sleep(err.retryAfterMs ?? opts.intervalMs);\n continue;\n }\n const status = normalizeStatus(result.status);\n if (isTerminalStatus(status)) return status;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n const fallbackDelay = fullJitterDelay(\n opts.intervalMs,\n opts.maxIntervalMs,\n fallbackAttempt,\n random,\n );\n fallbackAttempt += 1;\n await sleep(result.nextDelayMs ?? fallbackDelay);\n }\n}\n\nfunction normalizePollResult(result: string | PollCheckResult): PollCheckResult {\n return typeof result === \"string\" ? { status: result } : result;\n}\n\nfunction fullJitterDelay(\n intervalMs: number,\n maxIntervalMs: number,\n attempt: number,\n random: () => number,\n): number {\n const capDelay = Math.min(maxIntervalMs, intervalMs * 2 ** attempt);\n return Math.round(intervalMs + random() * (capDelay - intervalMs));\n}\n","import { resolveConfig } from \"./config.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n AccessibleOrganization,\n DocmanaConfig,\n DocmanaExecutionResult,\n DownloadedOrganizationDocument,\n ExecutionStatus,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n} from \"./types.js\";\nimport { HttpClient } from \"./http/http-client.js\";\nimport { resolveInputs } from \"./files/resolve-input.js\";\nimport { runFlow as runFlowApi } from \"./api/run-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport { listFlows as listFlowsApi } from \"./api/list-flows.js\";\nimport { listOrganizations as listOrganizationsApi } from \"./api/list-organizations.js\";\nimport { getFlowMetadata as getFlowMetadataApi } from \"./api/flow-metadata.js\";\nimport { getFlowDefinition as getFlowDefinitionApi } from \"./api/flow-definition.js\";\nimport {\n downloadOrganizationDocument as downloadOrganizationDocumentApi,\n downloadOrganizationDocuments as downloadOrganizationDocumentsApi,\n listOrganizationDocuments as listOrganizationDocumentsApi,\n} from \"./api/organization-documents.js\";\nimport { pollUntilTerminal } from \"./polling/poll.js\";\nimport { DocmanaExecutionError, DocmanaRateLimitError } from \"./errors.js\";\nimport { isFailedStatus, isTerminalStatus } from \"./status.js\";\n\nexport class Docmana {\n private readonly config: ResolvedConfig;\n private readonly http: HttpClient;\n\n constructor(config: DocmanaConfig) {\n this.config = resolveConfig(config);\n this.http = new HttpClient({\n apiBaseUrl: this.config.apiBaseUrl,\n fetchImpl: this.config.fetchImpl,\n accessToken: this.config.accessToken,\n getAccessToken: this.config.getAccessToken,\n headers: this.config.headers,\n });\n }\n\n async runFlowAsync(\n flowId: string,\n params: RunFlowAsyncParams,\n options: RunFlowAsyncOptions = {},\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(params);\n return runFlowApi(\n this.http,\n flowId,\n parts,\n options.signal,\n params.useDraftVersion ?? false,\n params.context,\n params.callbackUrl,\n params.language,\n params.organization,\n );\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language);\n }\n\n async runFlow(\n flowId: string,\n params: RunFlowParams,\n options: RunFlowOptions = {},\n ): Promise<DocmanaExecutionResult> {\n const { executionResultId } = await this.runFlowAsync(flowId, params, {\n signal: options.signal,\n });\n let attempt = 0;\n const startedAt = Date.now();\n await pollUntilTerminal({\n check: async () => {\n attempt += 1;\n try {\n const statusResult = await this.getStatus(executionResultId, options.signal);\n const status = statusResult.status;\n const nextPollAfterMs = this.isTerminalStatus(status)\n ? undefined\n : statusResult.pollAfterMs;\n options.onPoll?.({\n executionResultId,\n status,\n attempt,\n elapsedMs: Date.now() - startedAt,\n nextPollAfterMs,\n });\n return { status, nextDelayMs: nextPollAfterMs };\n } catch (err) {\n if (err instanceof DocmanaRateLimitError) {\n options.onRateLimit?.({\n executionResultId,\n attempt,\n elapsedMs: Date.now() - startedAt,\n retryAfterMs:\n err.retryAfterMs ?? options.pollIntervalMs ?? this.config.pollIntervalMs,\n });\n }\n throw err;\n }\n },\n intervalMs: options.pollIntervalMs ?? this.config.pollIntervalMs,\n maxIntervalMs: options.pollMaxIntervalMs ?? this.config.pollMaxIntervalMs,\n timeoutMs: options.timeoutMs ?? this.config.timeoutMs,\n signal: options.signal,\n });\n const result = await this.getResult(executionResultId, options.signal, params.language);\n if (isFailedStatus(result.status)) {\n throw new DocmanaExecutionError(\n `Flow ${flowId} execution failed`,\n result.errors ?? [],\n result,\n );\n }\n return result;\n }\n\n async listFlows(options: { organization?: string } = {}): Promise<FlowListItem[]> {\n return listFlowsApi(this.http, options.organization);\n }\n\n async listOrganizations(): Promise<AccessibleOrganization[]> {\n return listOrganizationsApi(this.http);\n }\n\n async getFlowMetadata(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowMetadata> {\n return getFlowMetadataApi(this.http, flowId, options.organization);\n }\n\n async getFlowDefinition(\n flowId: string,\n options: { organization?: string } = {},\n ): Promise<FlowDefinition> {\n return getFlowDefinitionApi(this.http, flowId, options.organization);\n }\n\n async listOrganizationDocuments(\n options: { prefix?: string } = {},\n ): Promise<OrganizationDocumentsPayload> {\n return listOrganizationDocumentsApi(this.http, options);\n }\n\n async downloadOrganizationDocument(path: string): Promise<DownloadedOrganizationDocument> {\n return downloadOrganizationDocumentApi(this.http, path);\n }\n\n async downloadOrganizationDocuments(paths: string[]): Promise<DownloadedOrganizationDocument[]> {\n return downloadOrganizationDocumentsApi(this.http, paths);\n }\n\n private isTerminalStatus(status: string): boolean {\n return isTerminalStatus(status);\n }\n}\n"],"mappings":"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","names":["toStringValue","toStringValue"]}
@@ -1 +1 @@
1
- export type ExecutionStatus = "Pending" | "Running" | "Incompleted" | "Completed" | "Failed";
1
+ export type ExecutionStatus = "PENDING" | "RUNNING" | "INCOMPLETED" | "COMPLETED" | "FAILED";
@@ -0,0 +1,3 @@
1
+ export declare function normalizeStatus(status: unknown, fallback?: string): string;
2
+ export declare function isFailedStatus(status: string): boolean;
3
+ export declare function isTerminalStatus(status: string): boolean;
package/dist/types.d.ts CHANGED
@@ -100,7 +100,7 @@ export interface FlowDocumentRequirement {
100
100
  export interface FlowMetadata {
101
101
  flowId: string;
102
102
  name?: string;
103
- contextSchema: Record<string, unknown>;
103
+ jsonContextSchema: Record<string, unknown>;
104
104
  languages: string[];
105
105
  minScore?: number;
106
106
  documents: FlowDocumentRequirement[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docmana/sdk",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Official Docmana SDK — run document-analysis flows with a single call.",
5
5
  "license": "MIT",
6
6
  "type": "module",