@docmana/sdk 0.32.0 → 0.36.0-hitl.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/cli.ts","../src/sdk/config.ts","../src/sdk/authoring.ts","../src/sdk/errors.ts","../src/sdk/http/http-client.ts","../src/sdk/files/resolve-input.ts","../src/sdk/api/multipart-request.ts","../src/sdk/api/run-flow.ts","../src/sdk/api/run-partial-flow.ts","../src/sdk/status.ts","../src/sdk/api/execution-status.ts","../src/sdk/api/execution-result.ts","../src/sdk/api/fraud-detection.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","../src/cli/errors.ts","../src/cli/formatting.ts","../src/cli/types.ts","../src/cli/config-store.ts","../src/cli/utils.ts","../src/cli/commands/config-init.ts","../src/cli/auth/token-manager.ts","../src/cli/auth/access-token.ts","../src/cli/commands/api-client.ts","../src/cli/commands/flow-definition.ts","../src/cli/commands/flow-list.ts","../src/cli/commands/flow-metadata.ts","../src/cli/commands/organization-document-download.ts","../src/cli/commands/organization-document-list.ts","../src/cli/commands/organization-list.ts","../src/cli/commands/flow-run.ts","../src/cli/commands/login.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { realpathSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Command, CommanderError } from \"commander\";\nimport { Docmana } from \"../sdk/client.js\";\nimport { CliSilentError, CliUsageError } from \"./errors.js\";\nimport { formatRuntimeError } from \"./formatting.js\";\nimport type {\n CliDeps,\n CliIO,\n ConfigInitOptions,\n DocmanaClientFactory,\n DownloadOptions,\n Env,\n ListOptions,\n LoginOptions,\n RunOptions,\n} from \"./types.js\";\nimport { DEFAULT_CONFIG_FILE, DEFAULT_TOKEN_CACHE_FILE, HELP } from \"./types.js\";\nimport { configInitCommand } from \"./commands/config-init.js\";\nimport { flowDefinitionCommand } from \"./commands/flow-definition.js\";\nimport { listFlowsCommand } from \"./commands/flow-list.js\";\nimport { flowMetadataCommand } from \"./commands/flow-metadata.js\";\nimport { organizationDocumentDownloadCommand } from \"./commands/organization-document-download.js\";\nimport { organizationDocumentListCommand } from \"./commands/organization-document-list.js\";\nimport { listOrganizationsCommand } from \"./commands/organization-list.js\";\nimport { runFlowCommand } from \"./commands/flow-run.js\";\nimport { loginCommand } from \"./commands/login.js\";\n\nexport type { DocmanaClientFactory } from \"./types.js\";\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2),\n env: Env = process.env,\n io: CliIO = {\n stdout: (text) => process.stdout.write(text),\n stderr: (text) => process.stderr.write(text),\n },\n clientFactory: DocmanaClientFactory = (config) => new Docmana(config),\n deps: CliDeps = {},\n): Promise<number> {\n const program = buildProgram(env, io, clientFactory, deps);\n if (argv.length === 0) {\n io.stdout(program.helpInformation());\n return 0;\n }\n\n try {\n await program.parseAsync(argv, { from: \"user\" });\n return 0;\n } catch (err) {\n if (err instanceof CliSilentError) {\n return err.exitCode;\n }\n if (err instanceof CliUsageError) {\n io.stderr(`Error: ${err.message}\\n`);\n return 2;\n }\n if (err instanceof CommanderError) {\n return err.exitCode === 0 ? 0 : 2;\n }\n io.stderr(`${formatRuntimeError(err)}\\n`);\n return 1;\n }\n}\n\nfunction buildProgram(\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Command {\n const program = new Command();\n program\n .name(\"docmana\")\n .description(HELP.root)\n .showHelpAfterError()\n .configureOutput({\n writeOut: io.stdout,\n writeErr: io.stderr,\n outputError: (str, write) => write(str),\n })\n .exitOverride();\n\n program\n .command(\"login\")\n .description(HELP.login)\n .option(\"--client-id <id>\", \"OAuth2 client id; defaults to DOCMANA_CLIENT_ID\")\n .option(\"--client-secret <secret>\", \"OAuth2 client secret; defaults to DOCMANA_CLIENT_SECRET\")\n .option(\"--token-url <url>\", \"OAuth2 token endpoint; defaults to DOCMANA_TOKEN_URL\")\n .option(\"--scope <scope>\", \"OAuth2 scope; defaults to DOCMANA_SCOPE\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (options: LoginOptions) => {\n await loginCommand(options, env, io, deps);\n });\n\n const flow = program\n .command(\"flow\")\n .description(HELP.flow)\n .action(() => {\n io.stdout(flow.helpInformation());\n });\n\n flow\n .command(\"list\")\n .description(HELP.list)\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--json\", \"Print the raw JSON flow list\")\n .action(async (options: ListOptions) => {\n await listFlowsCommand(options, env, io, clientFactory, deps);\n });\n\n flow\n .command(\"run\")\n .description(HELP.run)\n .argument(\"<flow-id>\", \"Docmana flow id\")\n .requiredOption(\"--files <csv>\", \"Comma-separated file paths to upload\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--json\", \"Print the raw JSON result\")\n .option(\"--context <json>\", \"Business context as a JSON object\")\n .option(\"--language <lang>\", \"Translate output to specified language\")\n .option(\"--draft\", \"Run the current draft flow version\")\n .action(async (flowId: string, options: RunOptions) => {\n await runFlowCommand(flowId, options, env, io, clientFactory, deps);\n });\n\n flow\n .command(\"metadata\")\n .description(HELP.metadata)\n .argument(\"<flow-id>\", \"Docmana flow id\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (flowId: string, options: ListOptions) => {\n await flowMetadataCommand(flowId, options, env, io, clientFactory, deps);\n });\n\n flow\n .command(\"definition\")\n .description(HELP.definition)\n .argument(\"<flow-id>\", \"Docmana flow id\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (flowId: string, options: ListOptions) => {\n await flowDefinitionCommand(flowId, options, env, io, clientFactory, deps);\n });\n\n const organization = program\n .command(\"organization\")\n .description(HELP.organization)\n .action(() => {\n io.stdout(organization.helpInformation());\n });\n\n organization\n .command(\"list\")\n .description(HELP.organizationList)\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--json\", \"Print the raw JSON organization list\")\n .action(async (options: ListOptions) => {\n await listOrganizationsCommand(options, env, io, clientFactory, deps);\n });\n\n const organizationDocument = organization\n .command(\"document\")\n .description(HELP.organizationDocument)\n .action(() => {\n io.stdout(organizationDocument.helpInformation());\n });\n\n organizationDocument\n .command(\"list\")\n .description(HELP.organizationDocumentList)\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--prefix <prefix>\", \"Filter documents by path prefix\")\n .option(\"--json\", \"Print the raw JSON organization document list\")\n .action(async (options: ListOptions) => {\n await organizationDocumentListCommand(options, env, io, clientFactory, deps);\n });\n\n organizationDocument\n .command(\"download\")\n .description(HELP.organizationDocumentDownload)\n .argument(\"<path>\", \"Organization document path\")\n .option(\"--output <file>\", \"Output file path; defaults to ./{path}\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (path: string, options: DownloadOptions) => {\n await organizationDocumentDownloadCommand(path, options, env, io, clientFactory, deps);\n });\n\n const config = program\n .command(\"config\")\n .description(HELP.config)\n .action(() => {\n io.stdout(config.helpInformation());\n });\n\n config\n .command(\"init\")\n .description(HELP.configInit)\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .action(async (options: ConfigInitOptions) => {\n await configInitCommand(options, io, deps);\n });\n\n return program;\n}\n\nfunction isDirectRun(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return realpathSync(resolve(entry)) === realpathSync(fileURLToPath(import.meta.url));\n } catch {\n return false;\n }\n}\n\nif (isDirectRun()) {\n runCli().then((code) => {\n process.exitCode = code;\n });\n}\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 { HttpClient } from \"./http/http-client.js\";\n\n/** Native editor data is lossless: unknown metadata is retained during edits. */\nexport type AuthoringData = Record<string, unknown>;\nexport interface AuthoringNode extends AuthoringData {\n id: string;\n type: string;\n position: { x: number; y: number };\n data: AuthoringData & { label: string; type: string; enabled?: boolean };\n parentId?: string;\n}\nexport interface AuthoringEdge extends AuthoringData {\n id: string;\n source: string;\n target: string;\n}\nexport interface AuthoringRevisions {\n flow: number;\n nodes: Record<string, number>;\n edges: Record<string, number>;\n rules: Record<string, number>;\n}\nexport type AuthoringSource =\n | { kind: \"mongo\" }\n | {\n kind: \"git\";\n formulaId: string;\n repository: string;\n path: string;\n ref: string;\n };\nexport interface AuthoringGitPublication {\n source: Extract<AuthoringSource, { kind: \"git\" }>;\n commitSha: string;\n publishedVersion: number;\n mongoRevisions: AuthoringRevisions;\n contentHash: string;\n publishedAt: string;\n artifactHash?: string | null;\n toolingHash?: string | null;\n}\nexport interface AuthoringGitProjection {\n source: Extract<AuthoringSource, { kind: \"git\" }>;\n commitSha: string;\n artifactHash: string;\n toolingHash: string;\n operationId: string;\n mongoRevisions: AuthoringRevisions;\n contentHash: string;\n projectedAt: string;\n}\nexport interface AuthoringPublication {\n operationId: string;\n expectedRevisions: AuthoringRevisions;\n gitCommitSha?: string;\n gitArtifactHash?: string;\n gitToolingHash?: string;\n}\nexport interface AuthoringFlowSummary extends AuthoringData {\n authoringSource?: AuthoringSource | null;\n lastGitPublication?: AuthoringGitPublication | null;\n lastGitProjection?: AuthoringGitProjection | null;\n createdAt?: string;\n updatedAt?: string;\n executionStats?: { totalExecutions: number; totalDocuments: number };\n id: string;\n name: string;\n type?: \"manual\" | \"assisted\";\n state?: string;\n isDirty?: boolean;\n}\nexport interface AuthoringSnapshot {\n gitPublicationState?: {\n status: \"not_published\" | \"unchanged\" | \"diverged\" | \"staged\";\n currentContentHash: string;\n } | null;\n flow: AuthoringFlowSummary & {\n configs?: AuthoringData;\n nodes: AuthoringNode[];\n edges: AuthoringEdge[];\n };\n rules: AuthoringData[];\n revisions: AuthoringRevisions;\n historyCounts: { snapshots: number; published: number };\n}\nexport interface AuthoringChanges {\n create?: AuthoringData[];\n update?: { id: string; patch: AuthoringData }[];\n delete?: string[];\n}\nexport interface AuthoringDraft {\n gitProjection?: { commitSha: string; artifactHash: string; toolingHash: string };\n authoringSource?: AuthoringSource;\n operationId: string;\n expectedRevisions: AuthoringRevisions;\n flowPatch?: AuthoringData;\n nodes?: AuthoringChanges;\n edges?: AuthoringChanges;\n prompts?: {\n create?: AuthoringData[];\n updateForNode?: string[];\n delete?: string[];\n upsertForNode?: { id: string; prompt: AuthoringData }[];\n };\n rules?: AuthoringData[];\n}\nexport interface AuthoringCreate {\n authoringSource?: AuthoringSource;\n operationId: string;\n id: string;\n name: string;\n type: \"manual\" | \"assisted\";\n configs?: AuthoringData;\n nodes: AuthoringNode[];\n edges: AuthoringEdge[];\n}\nexport interface AuthoringReceipt {\n success: boolean;\n id?: string;\n version?: number;\n flowUpdatedAt: string;\n revisions: AuthoringRevisions;\n committedRuleIds?: Record<string, string>;\n}\nexport interface AuthoringOptions {\n organization: string;\n signal?: AbortSignal;\n}\nexport interface AuthoringDocumentTrialNode {\n id: string;\n name: string;\n type: \"classification\" | \"extraction\" | \"metadata-extraction\";\n prompt?: { metadata: AuthoringData; messages: AuthoringData[]; schemaDatas: AuthoringData };\n /** Native assisted definition; mutually exclusive with a manual prompt. */\n assisted?: {\n metadata: AuthoringData;\n rules: AuthoringData[];\n configs: AuthoringData;\n };\n}\nexport type AuthoringDocumentTrialSpec =\n | { flowId: string; expectedRevisions: AuthoringRevisions; node?: string; allNodes?: boolean }\n | { nodes: AuthoringDocumentTrialNode[] };\nexport interface AuthoringDocumentTrialReport {\n executor?: \"flows\" | \"docmana-api\";\n mode: \"document-trial\";\n execution_scope: \"isolated\";\n status: \"completed\" | \"error\";\n rows: {\n node: string;\n name: string;\n type: string;\n status: \"completed\" | \"error\";\n seconds: number;\n output?: AuthoringData;\n error?: string;\n }[];\n}\nexport interface AuthoringEditorCatalog {\n capabilities?: { canonicalProjection?: number; runtimeEnvironment?: string };\n models: {\n default_model: string;\n assisted_model?: string;\n ai_provider: string;\n models: {\n model_name: string;\n reasoning_effort_values?: string[] | null;\n default_reasoning_effort?: string | null;\n }[];\n };\n tools: (AuthoringData & {\n tool_id: string;\n tool_name?: string;\n type?: string;\n short_description_fr?: string;\n short_description_en?: string;\n })[];\n systems: { id: string; name: string; expectedFields?: AuthoringData[] }[];\n defaults: { aggregator: string };\n flags: { flags: Record<string, boolean> };\n}\nexport interface AuthoringConversationContext {\n flow_id: string;\n scope?: string | null;\n node_id?: string | null;\n node_label?: string | null;\n}\nexport interface AuthoringConversation {\n conversation_id: string;\n expires_at: string;\n context: AuthoringConversationContext;\n}\nexport interface AuthoringConversationInput {\n flow_id: string;\n language: \"fr\" | \"en\";\n scope?: string;\n node_id?: string;\n messages?: { role: \"user\" | \"assistant\"; content: string }[];\n}\nexport interface AuthoringConversationTurn {\n assistant_message: string;\n options?: unknown[] | null;\n proposed_rule?: AuthoringData | null;\n proposed_document_type_rename?: AuthoringData | null;\n context: AuthoringConversationContext;\n target_resolved: boolean;\n expires_at: string;\n}\nexport type AuthoringSort =\n | \"id\"\n | \"newest\"\n | \"oldest\"\n | \"recentlyModified\"\n | \"leastRecentlyModified\"\n | \"name\";\nexport interface AuthoringPageOptions extends AuthoringOptions {\n sort?: AuthoringSort;\n offset?: number;\n limit?: number;\n}\n\nfunction identity(id: string): string {\n if (!/^[A-Za-z0-9_-]{1,200}$/.test(id)) throw new Error(\"Invalid formula identifier\");\n return encodeURIComponent(id);\n}\n\n/** Aggregate authoring only. Caller retains operation IDs when retrying mutations. */\nexport class FormulaAuthoring {\n constructor(private readonly http: HttpClient) {}\n\n /** Read-only, revision-pinned definitions. Assisted execution belongs to the server-side Flows POC. */\n documentTrialDefinitions(\n spec: {\n flowId: string;\n expectedRevisions: AuthoringRevisions;\n node?: string;\n allNodes?: boolean;\n },\n options: AuthoringOptions,\n ): Promise<{ nodes: AuthoringDocumentTrialNode[] }> {\n identity(spec.flowId);\n if (Boolean(spec.node) === (spec.allNodes === true))\n throw new Error(\"Select one node or all nodes\");\n if (spec.node) identity(spec.node);\n return this.request(\"POST\", \"document-trial/definitions\", options, spec);\n }\n\n /** Native manual execution through Consumer Edge; assisted trials use definitions plus server-side Flows. */\n async trialDocument(\n file: Blob,\n filename: string,\n spec: AuthoringDocumentTrialSpec,\n options: AuthoringOptions,\n ): Promise<AuthoringDocumentTrialReport> {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n if (\n !file.size ||\n file.size > 20 * 1024 * 1024 ||\n !/\\.(pdf|jpeg|jpg|png|bmp|tiff|tif|heic)$/i.test(filename)\n )\n throw new Error(\"Invalid trial document\");\n if (\"flowId\" in spec) {\n identity(spec.flowId);\n if (Boolean(spec.node) === (spec.allNodes === true))\n throw new Error(\"Select one node or all nodes\");\n if (spec.node) identity(spec.node);\n } else if (!Array.isArray(spec.nodes) || !spec.nodes.length || spec.nodes.length > 100)\n throw new Error(\"Invalid trial nodes\");\n const body = new FormData();\n body.set(\"file\", file, filename);\n body.set(\"spec\", JSON.stringify(spec));\n return this.http.requestJson(\"POST\", \"/authoring/document-trial\", {\n query: { organization: options.organization },\n signal: options.signal,\n body,\n });\n }\n\n editorCatalog(options: AuthoringOptions): Promise<AuthoringEditorCatalog> {\n return this.request(\"GET\", \"editor-catalog\", options);\n }\n generateMapping(\n body: {\n workflow_fields: AuthoringData[];\n expected_fields: AuthoringData[];\n current_mapping: string;\n user_instructions: string;\n },\n options: AuthoringOptions,\n ): Promise<{ jsonataExpression: string }> {\n return this.request(\"POST\", \"generate-mapping\", options, body);\n }\n\n openConversation(\n body: AuthoringConversationInput,\n options: AuthoringOptions,\n ): Promise<AuthoringConversation> {\n identity(body.flow_id);\n if (body.node_id) identity(body.node_id);\n return this.request(\"POST\", \"conversations\", options, body);\n }\n sendConversationMessage(\n id: string,\n content: string,\n options: AuthoringOptions,\n ): Promise<AuthoringConversationTurn> {\n return this.request(\"POST\", `conversations/${identity(id)}/messages`, options, { content });\n }\n confirmConversation(\n id: string,\n body: { rule_id?: string; document_type_rename?: boolean },\n options: AuthoringOptions,\n ): Promise<{ expires_at: string }> {\n return this.request(\"POST\", `conversations/${identity(id)}/confirm`, options, body);\n }\n\n private request<T>(method: string, path: string, options: AuthoringOptions, body?: unknown) {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n return this.http.requestJson<T>(method, `/authoring/${path}`, {\n query: { organization: options.organization },\n signal: options.signal,\n ...(body === undefined\n ? {}\n : {\n body: JSON.stringify(body),\n headers: { \"content-type\": \"application/json\" },\n }),\n });\n }\n\n list(options: AuthoringPageOptions): Promise<AuthoringFlowSummary[]> {\n const offset = options.offset ?? 0,\n limit = options.limit ?? 50;\n if (\n !Number.isInteger(offset) ||\n offset < 0 ||\n !Number.isInteger(limit) ||\n limit < 1 ||\n limit > 200\n )\n throw new Error(\"Invalid authoring pagination\");\n return this.request(\n \"GET\",\n `flows?offset=${offset}&limit=${limit}&sort=${encodeURIComponent(options.sort ?? \"id\")}`,\n options,\n );\n }\n remove(id: string, options: AuthoringOptions): Promise<{ success: boolean }> {\n return this.request(\"DELETE\", `flows/${identity(id)}`, options);\n }\n async exportArchive(id: string, options: AuthoringOptions): Promise<Uint8Array> {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n return (\n await this.http.requestBytes(\"GET\", `/authoring/flows/${identity(id)}/export`, {\n query: { organization: options.organization },\n signal: options.signal,\n })\n ).bytes;\n }\n importArchive(\n file: Blob,\n filename: string,\n options: AuthoringOptions & { confirmOverwrite?: boolean },\n ): Promise<{ status: \"imported\" | \"confirmation_required\"; flowName?: string }> {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n if (!/\\.(zip|docmana)$/i.test(filename) || file.size > 10 * 1024 * 1024)\n throw new Error(\"Invalid formula archive\");\n const body = new FormData();\n body.append(\"file\", file, filename);\n return this.http.requestJson(\"POST\", \"/authoring/flows/import\", {\n query: {\n organization: options.organization,\n confirmOverwrite: String(options.confirmOverwrite === true),\n },\n body,\n signal: options.signal,\n });\n }\n get(id: string, options: AuthoringOptions): Promise<AuthoringSnapshot> {\n return this.request(\"GET\", `flows/${identity(id)}`, options);\n }\n create(body: AuthoringCreate, options: AuthoringOptions): Promise<AuthoringReceipt> {\n return this.request(\"POST\", \"flows\", options, body);\n }\n save(id: string, body: AuthoringDraft, options: AuthoringOptions): Promise<AuthoringReceipt> {\n return this.request(\"PATCH\", `flows/${identity(id)}/draft`, options, body);\n }\n validate(\n id: string,\n revisions: AuthoringRevisions,\n options: AuthoringOptions,\n ): Promise<AuthoringData> {\n return this.request(\"POST\", `flows/${identity(id)}/validate`, options, {\n expectedRevisions: revisions,\n });\n }\n publish(\n id: string,\n body: AuthoringPublication,\n options: AuthoringOptions,\n ): Promise<AuthoringReceipt> {\n return this.request(\"POST\", `flows/${identity(id)}/publish`, options, body);\n }\n history(\n id: string,\n kind: \"snapshots\" | \"published\",\n options: AuthoringPageOptions,\n ): Promise<AuthoringData[]> {\n if (kind !== \"snapshots\" && kind !== \"published\") throw new Error(\"Invalid history kind\");\n const offset = options.offset ?? 0,\n limit = options.limit ?? 20;\n if (\n !Number.isInteger(offset) ||\n offset < 0 ||\n !Number.isInteger(limit) ||\n limit < 1 ||\n limit > 100\n )\n throw new Error(\"Invalid history pagination\");\n return this.request(\n \"GET\",\n `flows/${identity(id)}/history/${kind}?offset=${offset}&limit=${limit}`,\n options,\n );\n }\n flags(options: AuthoringOptions): Promise<{ flags: Record<string, boolean> }> {\n return this.request(\"GET\", \"feature-flags\", options);\n }\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\nimport type { FraudDetectionError, FraudDetectionResult } from \"./types.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n /** Public API business code; `code` retains the SDK's existing error category. */\n readonly apiCode?: 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 DocmanaPayloadTooLargeError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"payload_too_large\" });\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 DocmanaFraudDetectionError extends DocmanaError {\n readonly jobId: string;\n readonly error?: FraudDetectionError;\n readonly result: FraudDetectionResult;\n constructor(message: string, result: FraudDetectionResult) {\n super(message, { code: \"fraud_detection_failed\" });\n this.jobId = result.jobId;\n this.error = result.error;\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 class DocmanaServiceUnavailableError 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: \"service_unavailable\" });\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 413:\n return new DocmanaPayloadTooLargeError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n case 503:\n return new DocmanaServiceUnavailableError(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 const error = errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n const data = (await res\n .clone()\n .json()\n .catch(() => null)) as { code?: unknown } | null;\n if (typeof data?.code === \"string\" && /^[A-Za-z][A-Za-z0-9_]{0,99}$/.test(data.code))\n Object.defineProperty(error, \"apiCode\", { value: data.code, enumerable: true });\n throw error;\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 { openAsBlob } from \"node:fs\";\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 filename = basename(path);\n const contentType = contentTypeFor(filename);\n const data = await openAsBlob(path, { type: contentType });\n return { data, filename, contentType };\n }\n if (isNamedFileInput(input)) {\n const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);\n const contentType = input.contentType ?? contentTypeFor(input.filename);\n return {\n data: new Blob([toBlobBytes(bytes)], { type: contentType }),\n filename: input.filename,\n contentType,\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 { DocmanaAbortError, DocmanaServiceUnavailableError } from \"../errors.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nconst MAX_ATTEMPTS = 2;\nconst MAX_RETRY_DELAY_MS = 30_000;\n\nexport async function requestMultipartJson<T>(\n http: HttpClient,\n path: string,\n createForm: () => FormData,\n signal?: AbortSignal,\n): Promise<T> {\n for (let attempt = 1; ; attempt += 1) {\n try {\n return await http.requestJson<T>(\"POST\", path, {\n body: createForm(),\n signal,\n });\n } catch (error) {\n if (\n !(error instanceof DocmanaServiceUnavailableError) ||\n error.retryAfterMs === undefined ||\n attempt >= MAX_ATTEMPTS\n ) {\n throw error;\n }\n await waitForRetry(Math.min(error.retryAfterMs, MAX_RETRY_DELAY_MS), signal);\n }\n }\n}\n\nasync function waitForRetry(delayMs: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) throw new DocmanaAbortError(\"Upload retry aborted\");\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (error?: Error) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n if (error) reject(error);\n else resolve();\n };\n const onAbort = () => finish(new DocmanaAbortError(\"Upload retry aborted\"));\n const timer = setTimeout(() => finish(), delayMs);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\nimport { requestMultipartJson } from \"./multipart-request.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 path = `/flows/${flowId}/execute-async`;\n return requestMultipartJson<{ executionResultId: string; fileIds: string[] }>(\n http,\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n () => {\n const form = new FormData();\n for (const part of parts) form.append(\"files\", part.data, part.filename);\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 return form;\n },\n signal,\n );\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\nimport type {\n DocmanaExecutionResult,\n RunPartialFlowAsyncParams,\n RunPartialFlowParams,\n} from \"../types.js\";\nimport { requestMultipartJson } from \"./multipart-request.js\";\n\nfunction buildRequest(\n flowId: string,\n parts: ResolvedPart[],\n params: RunPartialFlowParams,\n asyncMode: boolean,\n): { path: string; createForm: () => FormData } {\n const suffix = asyncMode ? \"partial-execute-async\" : \"partial-execute\";\n const path = `/flows/${flowId}/${suffix}`;\n return {\n path: params.organization\n ? `${path}?organization=${encodeURIComponent(params.organization)}`\n : path,\n createForm: () => {\n const form = new FormData();\n for (const part of parts) form.append(\"files\", part.data, part.filename);\n if (params.context !== undefined) form.append(\"jsonContext\", JSON.stringify(params.context));\n form.append(\"executionScope\", params.executionScope);\n if (params.flowVersion !== undefined) form.append(\"flowVersion\", params.flowVersion);\n for (const name of params.classificationNodeNames ?? []) {\n form.append(\"classificationNodeNames\", name);\n }\n if (asyncMode && \"callbackUrl\" in params && params.callbackUrl !== undefined) {\n form.append(\"callbackUrl\", params.callbackUrl);\n }\n if (asyncMode && \"language\" in params && params.language !== undefined) {\n form.append(\"language\", params.language);\n }\n return form;\n },\n };\n}\n\nexport async function runPartialFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n params: RunPartialFlowParams,\n signal?: AbortSignal,\n): Promise<DocmanaExecutionResult> {\n const { path, createForm } = buildRequest(flowId, parts, params, false);\n return requestMultipartJson<DocmanaExecutionResult>(http, path, createForm, signal);\n}\n\nexport async function runPartialFlowAsync(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n params: RunPartialFlowAsyncParams,\n signal?: AbortSignal,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const { path, createForm } = buildRequest(flowId, parts, params, true);\n return requestMultipartJson<{ executionResultId: string; fileIds: string[] }>(\n http,\n path,\n createForm,\n 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, isTerminalStatus } from \"../status.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n organization?: string,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, {\n query: organization ? { organization } : undefined,\n signal,\n });\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 // Diagnostic (execution-hang): opt-in via DOCMANA_SDK_DEBUG. Shows the raw status\n // string returned by the edge vs the normalized value + terminal decision, so we\n // can see why a poll never terminates (e.g. a non-terminal status looping forever).\n if (typeof process !== \"undefined\" && process.env?.DOCMANA_SDK_DEBUG) {\n console.log(\n `[docmana-sdk][status-diag] execution=${executionResultId} rawEdgeStatus=${JSON.stringify(\n body.status,\n )} normalized=${normalizedBody.status} terminal=${isTerminalStatus(normalizedBody.status)}`,\n );\n }\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 organization?: string,\n): Promise<DocmanaExecutionResult> {\n const query: Record<string, string> = {};\n if (language) query.language = language;\n if (organization) query.organization = organization;\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: Object.keys(query).length > 0 ? query : undefined,\n signal,\n });\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport { resolveInputs } from \"../files/resolve-input.js\";\nimport type {\n FraudDetectionAccepted,\n FraudDetectionParams,\n FraudDetectionResult,\n FraudDetectionStatusResult,\n} from \"../types.js\";\nimport { normalizeStatus } from \"../status.js\";\nimport { requestMultipartJson } from \"./multipart-request.js\";\n\nexport async function startFraudDetection(\n http: HttpClient,\n params: FraudDetectionParams,\n signal?: AbortSignal,\n): Promise<FraudDetectionAccepted> {\n if (params.file !== undefined) {\n const [part] = await resolveInputs({ files: [params.file] });\n return requestMultipartJson(\n http,\n \"/fraud-detections\",\n () => {\n const form = new FormData();\n form.append(\"file\", part.data, part.filename);\n if (params.analystContext !== undefined) {\n form.append(\"analystContext\", params.analystContext);\n }\n return form;\n },\n signal,\n );\n }\n\n return http.requestJson(\"POST\", \"/fraud-detections\", {\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n documentUrl: params.documentUrl,\n filename: params.filename,\n ...(params.analystContext === undefined ? {} : { analystContext: params.analystContext }),\n }),\n signal,\n });\n}\n\nexport async function getFraudDetectionStatus(\n http: HttpClient,\n jobId: string,\n signal?: AbortSignal,\n organization?: string,\n): Promise<FraudDetectionStatusResult> {\n void organization;\n const res = await http.requestRaw(\n \"GET\",\n `/fraud-detections/${encodeURIComponent(jobId)}/status`,\n {\n signal,\n },\n );\n const text = await res.text();\n const body = text\n ? (JSON.parse(text) as FraudDetectionStatusResult)\n : ({ jobId, status: \"\" } as unknown as FraudDetectionStatusResult);\n const normalized = {\n ...body,\n status: normalizeStatus(body.status),\n } as FraudDetectionStatusResult;\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? normalized : { ...normalized, pollAfterMs };\n}\n\nexport async function getFraudDetectionResult(\n http: HttpClient,\n jobId: string,\n signal?: AbortSignal,\n organization?: string,\n): Promise<FraudDetectionResult> {\n void organization;\n return http.requestJson(\"GET\", `/fraud-detections/${encodeURIComponent(jobId)}/result`, {\n signal,\n });\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 { 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; organization?: string } = {},\n): Promise<OrganizationDocumentsPayload> {\n const query: Record<string, string> = {};\n if (options.prefix) query.prefix = options.prefix;\n if (options.organization) query.organization = options.organization;\n const result = await http.requestJson<unknown>(\"GET\", \"/organization-documents\", {\n query: Object.keys(query).length ? query : 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 organization?: string,\n): Promise<DownloadedOrganizationDocument> {\n const query: Record<string, string> = { path };\n if (organization) query.organization = organization;\n const result = await http.requestBytes(\"GET\", \"/organization-documents/download\", {\n query,\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 organization?: string,\n): Promise<DownloadedOrganizationDocument[]> {\n return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path, organization)));\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 shouldRetryError?: (error: unknown) => boolean;\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 const retryAfterMs =\n err instanceof DocmanaRateLimitError\n ? (err.retryAfterMs ?? opts.intervalMs)\n : opts.shouldRetryError?.(err)\n ? fullJitterDelay(opts.intervalMs, opts.maxIntervalMs, fallbackAttempt, random)\n : undefined;\n if (retryAfterMs === undefined) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n fallbackAttempt += 1;\n await sleep(retryAfterMs);\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 { FormulaAuthoring } from \"./authoring.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n AccessibleOrganization,\n DocmanaConfig,\n DocmanaExecutionResult,\n DownloadedOrganizationDocument,\n ExecutionStatus,\n FraudDetectionAccepted,\n FraudDetectionAsyncOptions,\n FraudDetectionOptions,\n FraudDetectionParams,\n FraudDetectionResult,\n FraudDetectionStatusResult,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n RunPartialFlowAsyncParams,\n RunPartialFlowOptions,\n RunPartialFlowParams,\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 {\n runPartialFlow as runPartialFlowApi,\n runPartialFlowAsync as runPartialFlowAsyncApi,\n} from \"./api/run-partial-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport {\n getFraudDetectionResult as getFraudDetectionResultApi,\n getFraudDetectionStatus as getFraudDetectionStatusApi,\n startFraudDetection as startFraudDetectionApi,\n} from \"./api/fraud-detection.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 {\n DocmanaError,\n DocmanaExecutionError,\n DocmanaFraudDetectionError,\n DocmanaRateLimitError,\n} from \"./errors.js\";\nimport { isFailedStatus, isTerminalStatus } from \"./status.js\";\n\nexport class Docmana {\n readonly authoring: FormulaAuthoring;\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 this.authoring = new FormulaAuthoring(this.http);\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 detectFraudAsync(\n params: FraudDetectionParams,\n options: FraudDetectionAsyncOptions = {},\n ): Promise<FraudDetectionAccepted> {\n return startFraudDetectionApi(this.http, params, options.signal);\n }\n\n async getFraudDetectionStatus(\n jobId: string,\n signal?: AbortSignal,\n /** @deprecated Fraud jobs are not organization-scoped. */\n organization?: string,\n ): Promise<FraudDetectionStatusResult> {\n return getFraudDetectionStatusApi(this.http, jobId, signal, organization);\n }\n\n async getFraudDetectionResult(\n jobId: string,\n signal?: AbortSignal,\n /** @deprecated Fraud jobs are not organization-scoped. */\n organization?: string,\n ): Promise<FraudDetectionResult> {\n return getFraudDetectionResultApi(this.http, jobId, signal, organization);\n }\n\n async detectFraud(\n params: FraudDetectionParams,\n options: FraudDetectionOptions = {},\n ): Promise<FraudDetectionResult> {\n const { jobId } = await this.detectFraudAsync(params, { signal: options.signal });\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.getFraudDetectionStatus(jobId, options.signal);\n const nextPollAfterMs = isTerminalStatus(statusResult.status)\n ? undefined\n : statusResult.pollAfterMs;\n options.onPoll?.({\n jobId,\n status: statusResult.status,\n attempt,\n elapsedMs: Date.now() - startedAt,\n nextPollAfterMs,\n });\n return { status: statusResult.status, nextDelayMs: nextPollAfterMs };\n } catch (err) {\n if (err instanceof DocmanaRateLimitError) {\n options.onRateLimit?.({\n jobId,\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 shouldRetryError: isTransientPollingError,\n });\n const result = await this.getFraudDetectionResult(jobId, options.signal);\n if (isFailedStatus(result.status)) {\n throw new DocmanaFraudDetectionError(\n result.error?.message ?? `Fraud detection ${jobId} failed`,\n result,\n );\n }\n return result;\n }\n\n async runPartialFlow(\n flowId: string,\n params: RunPartialFlowParams,\n options: RunPartialFlowOptions = {},\n ): Promise<DocmanaExecutionResult> {\n const parts = await resolveInputs(params);\n return runPartialFlowApi(this.http, flowId, parts, params, options.signal);\n }\n\n async runPartialFlowAsync(\n flowId: string,\n params: RunPartialFlowAsyncParams,\n options: RunPartialFlowOptions = {},\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(params);\n return runPartialFlowAsyncApi(this.http, flowId, parts, params, options.signal);\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n organization?: string,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal, organization);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n organization?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language, organization);\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(\n executionResultId,\n options.signal,\n params.organization,\n );\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(\n executionResultId,\n options.signal,\n params.language,\n params.organization,\n );\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; organization?: string } = {},\n ): Promise<OrganizationDocumentsPayload> {\n return listOrganizationDocumentsApi(this.http, options);\n }\n\n async downloadOrganizationDocument(\n path: string,\n organization?: string,\n ): Promise<DownloadedOrganizationDocument> {\n return downloadOrganizationDocumentApi(this.http, path, organization);\n }\n\n async downloadOrganizationDocuments(\n paths: string[],\n organization?: string,\n ): Promise<DownloadedOrganizationDocument[]> {\n return downloadOrganizationDocumentsApi(this.http, paths, organization);\n }\n\n private isTerminalStatus(status: string): boolean {\n return isTerminalStatus(status);\n }\n}\n\nfunction isTransientPollingError(error: unknown): boolean {\n if (error instanceof DocmanaRateLimitError) return false;\n if (error instanceof DocmanaError) {\n return error.status !== undefined && error.status >= 500;\n }\n return error instanceof TypeError;\n}\n","export class CliUsageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CliUsageError\";\n }\n}\n\nexport class CliSilentError extends Error {\n readonly exitCode: number;\n\n constructor(exitCode = 1) {\n super();\n this.name = \"CliSilentError\";\n this.exitCode = exitCode;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { DocmanaError, DocmanaExecutionError } from \"../sdk/errors.js\";\nimport { isFailedStatus } from \"../sdk/status.js\";\nimport type {\n AccessibleOrganization,\n DocmanaDocumentResult,\n DocmanaExecutionResult,\n DocmanaNodeResult,\n FlowListItem,\n OrganizationDocument,\n} from \"../sdk/types.js\";\n\nexport function formatFlowList(flows: FlowListItem[]): string {\n if (flows.length === 0) return \"No flows found.\\n\";\n const lines = [\"Docmana flows\"];\n for (const flow of flows) {\n const id = flow.id || \"(no id)\";\n const name = flow.name || \"(no name)\";\n const state = flow.state ? ` [${flow.state}]` : \"\";\n lines.push(`- ${id} - ${name}${state}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatOrganizationList(organizations: AccessibleOrganization[]): string {\n if (organizations.length === 0) return \"No organizations found.\\n\";\n const lines = [\"Docmana organizations\"];\n for (const organization of organizations) {\n const id = organization.id || \"(no id)\";\n const name = organization.name || \"(no name)\";\n lines.push(`- ${id} - ${name}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatOrganizationDocumentList(documents: OrganizationDocument[]): string {\n if (documents.length === 0) return \"No organization documents found.\\n\";\n const lines = [\"Docmana organization documents\"];\n for (const document of documents) {\n const contentType = document.contentType ? ` [${document.contentType}]` : \"\";\n lines.push(`- ${document.path} - ${document.name} (${document.size} bytes)${contentType}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatHumanResult(result: DocmanaExecutionResult): string {\n const lines = [\"Docmana flow completed\", `Status: ${String(result.status ?? \"Unknown\")}`];\n const executionId = result.executionId;\n if (executionId) lines.push(`Execution id: ${String(executionId)}`);\n if (result.documents && result.documents.mappings) {\n lines.push(`Results: ${result.documents.mappings.length}`);\n }\n if (result.errors && result.errors.length > 0) {\n lines.push(`Errors: ${result.errors.length}`);\n }\n\n const previewData: Record<string, unknown> = {};\n if (result.documents && result.documents.mappings) {\n for (const mapping of result.documents.mappings.slice(0, 3)) {\n const docKey = mapping.reference;\n previewData[mapping.name] = result.documents[docKey];\n }\n }\n\n const preview = formatResultsPreview(previewData);\n if (preview) lines.push(\"\", \"Result preview:\", preview);\n lines.push(\"\", \"Use --json to print the complete result payload.\");\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatRuntimeError(err: unknown): string {\n return formatHumanError(err);\n}\n\nexport function formatHumanError(err: unknown): string {\n if (err instanceof DocmanaExecutionError) {\n const lines = [`Error: ${err.message}`];\n\n if (err.errors && err.errors.length > 0) {\n lines.push(\"Global errors:\");\n for (const e of err.errors) {\n lines.push(` - ${formatSingleError(e)}`);\n }\n }\n\n const result = err.result;\n if (result?.documents?.mappings && result.documents.mappings.length > 0) {\n lines.push(\"Document execution results:\");\n for (const mapping of result.documents.mappings) {\n const docKey = mapping.reference;\n const docName = mapping.name;\n const docResult = result.documents[docKey] as DocmanaDocumentResult | undefined;\n\n if (!docResult) {\n lines.push(` - Document: ${docName} (Status: Unknown)`);\n continue;\n }\n\n const status = docResult.status || \"Unknown\";\n const nodes: DocmanaNodeResult[] = [];\n if (docResult.classifications) nodes.push(...Object.values(docResult.classifications));\n if (docResult.metadataExtraction) nodes.push(docResult.metadataExtraction);\n if (docResult.extractions) nodes.push(...Object.values(docResult.extractions));\n if (docResult.validations) nodes.push(...Object.values(docResult.validations));\n\n const hasNodeFailures = nodes.some(\n (n) => isFailedStatus(n.status) || (n.errors && n.errors.length > 0),\n );\n\n lines.push(` - Document: ${docName} (Status: ${status})`);\n if (!isFailedStatus(docResult.status) && !hasNodeFailures) continue;\n\n if (docResult.classifications) {\n for (const [nodeName, node] of Object.entries(docResult.classifications)) {\n if (node.errors && node.errors.length > 0) {\n lines.push(` Classification: ${nodeName} (Status: ${node.status})`);\n for (const nodeErr of node.errors) lines.push(` - ${nodeErr}`);\n }\n }\n }\n if (docResult.metadataExtraction?.errors?.length) {\n lines.push(` MetadataExtraction: (Status: ${docResult.metadataExtraction.status})`);\n for (const nodeErr of docResult.metadataExtraction.errors) {\n lines.push(` - ${nodeErr}`);\n }\n }\n if (docResult.extractions) {\n for (const [nodeName, node] of Object.entries(docResult.extractions)) {\n if (isFailedStatus(node.status) || (node.errors && node.errors.length > 0)) {\n lines.push(` Extraction: ${nodeName} (Status: ${node.status})`);\n if (node.errors) {\n for (const nodeErr of node.errors) lines.push(` - ${nodeErr}`);\n }\n }\n }\n }\n if (docResult.validations) {\n for (const [nodeName, node] of Object.entries(docResult.validations)) {\n if (isFailedStatus(node.status) || (node.errors && node.errors.length > 0)) {\n lines.push(` Validation: ${nodeName} (Status: ${node.status})`);\n if (node.errors) {\n for (const nodeErr of node.errors) lines.push(` - ${nodeErr}`);\n }\n }\n }\n }\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n if (err instanceof DocmanaError) {\n return `Error: ${err.message} (Code: ${err.code})`;\n }\n\n if (err instanceof Error) {\n return `Error: ${err.message}`;\n }\n\n return `Error: ${String(err)}`;\n}\n\nfunction formatResultsPreview(results: unknown): string | undefined {\n if (!results) return undefined;\n const preview = JSON.stringify(results, null, 2);\n if (!preview) return undefined;\n return preview.length > 2_000 ? `${preview.slice(0, 2_000)}\\n...` : preview;\n}\n\nfunction formatSingleError(e: unknown): string {\n if (typeof e === \"string\") return e;\n if (e && typeof e === \"object\") {\n const obj = e as Record<string, unknown>;\n if (typeof obj.msg === \"string\") return obj.msg;\n if (typeof obj.message === \"string\") return obj.message;\n if (typeof obj.error === \"string\") return obj.error;\n try {\n return JSON.stringify(e);\n } catch {\n return String(e);\n }\n }\n return String(e);\n}\n","import type {\n AccessibleOrganization,\n DownloadedOrganizationDocument,\n DocmanaConfig,\n DocmanaExecutionResult,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowOptions,\n RunFlowParams,\n} from \"../sdk/types.js\";\n\nexport type Env = Record<string, string | undefined>;\nexport type Write = (text: string) => void;\n\nexport interface CliIO {\n stdout: Write;\n stderr: Write;\n}\n\nexport interface DocmanaClient {\n runFlow(\n flowId: string,\n params: RunFlowParams,\n options?: RunFlowOptions,\n ): Promise<DocmanaExecutionResult>;\n listFlows(): Promise<FlowListItem[]>;\n listOrganizations(): Promise<AccessibleOrganization[]>;\n getFlowMetadata(flowId: string): Promise<FlowMetadata>;\n getFlowDefinition(flowId: string): Promise<FlowDefinition>;\n listOrganizationDocuments(options?: { prefix?: string }): Promise<OrganizationDocumentsPayload>;\n downloadOrganizationDocument(path: string): Promise<DownloadedOrganizationDocument>;\n downloadOrganizationDocuments(paths: string[]): Promise<DownloadedOrganizationDocument[]>;\n}\n\nexport type DocmanaClientFactory = (config: DocmanaConfig) => DocmanaClient;\n\nexport interface DocmanaCliConfig {\n apiBaseUrl?: string;\n tokenEndpoint?: string;\n scope?: string;\n clientId?: string;\n clientSecret?: string;\n}\n\nexport interface CliPromptOptions {\n defaultValue?: string;\n secret?: boolean;\n}\n\nexport type CliPrompt = (label: string, options?: CliPromptOptions) => Promise<string>;\n\nexport interface CliDeps {\n cwd?: string;\n prompt?: CliPrompt;\n fetch?: typeof fetch;\n}\n\nexport interface RunOptions {\n files?: string;\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n json?: boolean;\n context?: string;\n language?: string;\n draft?: boolean;\n}\n\nexport interface ListOptions {\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n json?: boolean;\n prefix?: string;\n}\n\nexport interface DownloadOptions {\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n output?: string;\n}\n\nexport interface ConfigInitOptions {\n config?: string;\n}\n\nexport interface LoginOptions {\n clientId?: string;\n clientSecret?: string;\n tokenUrl?: string;\n scope?: string;\n config?: string;\n tokenCache?: string;\n}\n\nexport const DEFAULT_CONFIG_FILE = \"docmana.config.json\";\nexport const DEFAULT_TOKEN_CACHE_FILE = \"docmana.token.json\";\n\nexport const HELP = {\n root: \"Run Docmana document-analysis flows.\",\n flow: \"Manage and run Docmana flows.\",\n organization: \"Manage Docmana organizations.\",\n organizationDocument: \"Manage organization documents.\",\n config: \"Manage Docmana CLI configuration.\",\n configInit: \"Create or update a local Docmana CLI config file.\",\n login: \"Acquire and cache a Docmana OAuth2 access token.\",\n run: \"Upload documents, run a Docmana flow, wait for completion, and print the result.\",\n list: \"List Docmana flows available to the Bearer token.\",\n metadata: \"Print Docmana flow runtime metadata as JSON.\",\n definition: \"Print Docmana flow definition as JSON.\",\n organizationList: \"List Docmana organizations available to the Bearer token.\",\n organizationDocumentList: \"List organization documents available to the Bearer token.\",\n organizationDocumentDownload: \"Download an organization document.\",\n};\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport type { TokenCache } from \"../sdk/types.js\";\nimport { CliUsageError } from \"./errors.js\";\nimport type { CliDeps, CliPrompt, CliPromptOptions, DocmanaCliConfig } from \"./types.js\";\nimport { DEFAULT_CONFIG_FILE, DEFAULT_TOKEN_CACHE_FILE } from \"./types.js\";\nimport { firstNonEmpty, getCwd } from \"./utils.js\";\n\nexport async function loadCliConfig(\n configPathOption: string | undefined,\n cwd: string,\n requireExisting: boolean,\n): Promise<DocmanaCliConfig> {\n const configPath = resolveConfigPath(configPathOption, cwd);\n if (!existsSync(configPath)) {\n if (requireExisting) throw new CliUsageError(`Config file not found: ${configPath}`);\n return {};\n }\n let raw: string;\n try {\n raw = await readFile(configPath, \"utf8\");\n } catch {\n throw new CliUsageError(`Unable to read config file: ${configPath}`);\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Config must be a JSON object\");\n }\n return normalizeCliConfig(parsed as Record<string, unknown>);\n } catch {\n throw new CliUsageError(`Invalid config file: ${configPath}`);\n }\n}\n\nexport function normalizeCliConfig(config: Record<string, unknown>): DocmanaCliConfig {\n return {\n apiBaseUrl: stringValue(config.apiBaseUrl),\n tokenEndpoint: stringValue(config.tokenEndpoint),\n scope: stringValue(config.scope),\n clientId: stringValue(config.clientId),\n clientSecret: stringValue(config.clientSecret),\n };\n}\n\nexport function resolveConfigPath(configPathOption: string | undefined, cwd: string): string {\n return resolve(cwd, configPathOption ?? DEFAULT_CONFIG_FILE);\n}\n\nexport function resolveTokenCachePath(\n tokenCachePathOption: string | undefined,\n cwd: string,\n): string {\n return resolve(cwd, tokenCachePathOption ?? DEFAULT_TOKEN_CACHE_FILE);\n}\n\nexport function createFileTokenCache(path: string): TokenCache {\n return {\n async read() {\n if (!existsSync(path)) return null;\n try {\n const parsed = JSON.parse(await readFile(path, \"utf8\")) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return null;\n const value = parsed as Record<string, unknown>;\n if (\n typeof value.accessToken !== \"string\" ||\n typeof value.expiresAt !== \"number\" ||\n typeof value.clientId !== \"string\" ||\n typeof value.tokenEndpoint !== \"string\" ||\n typeof value.scope !== \"string\"\n ) {\n return null;\n }\n return {\n accessToken: value.accessToken,\n expiresAt: value.expiresAt,\n clientId: value.clientId,\n tokenEndpoint: value.tokenEndpoint,\n scope: value.scope,\n };\n } catch {\n return null;\n }\n },\n async write(entry) {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(entry, null, 2)}\\n`, \"utf8\");\n },\n async clear() {\n await rm(path, { force: true });\n },\n };\n}\n\nexport async function writeCliConfig(configPath: string, config: DocmanaCliConfig): Promise<void> {\n await mkdir(dirname(configPath), { recursive: true });\n await writeFile(configPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\");\n}\n\nexport function createDefaultPrompt(): { prompt: CliPrompt; close: () => void } {\n if (!process.stdin.isTTY) {\n let index = 0;\n const linesPromise = readStdinLines();\n return {\n prompt: async (label, options = {}) => {\n process.stdout.write(formatPrompt(label, options));\n const lines = await linesPromise;\n const answer = lines[index++] ?? \"\";\n return firstNonEmpty(answer, options.defaultValue) ?? \"\";\n },\n close: () => undefined,\n };\n }\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return {\n prompt: async (label, options = {}) => {\n const answer = await rl.question(formatPrompt(label, options));\n return firstNonEmpty(answer, options.defaultValue) ?? \"\";\n },\n close: () => rl.close(),\n };\n}\n\nexport function cwdFromDeps(deps: CliDeps): string {\n return getCwd(deps);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction formatPrompt(label: string, options: CliPromptOptions): string {\n const defaultHint =\n options.defaultValue && !options.secret\n ? ` [${options.defaultValue}]`\n : options.defaultValue && options.secret\n ? \" [current value hidden]\"\n : \"\";\n return `${label}${defaultHint}: `;\n}\n\nasync function readStdinLines(): Promise<string[]> {\n let input = \"\";\n for await (const chunk of process.stdin) input += String(chunk);\n return input.split(/\\r?\\n/);\n}\n","import type { CliDeps } from \"./types.js\";\nimport { CliUsageError } from \"./errors.js\";\n\nexport function getCwd(deps: CliDeps): string {\n return deps.cwd ?? process.cwd();\n}\n\nexport function firstNonEmpty(...values: Array<string | undefined>): string | undefined {\n return values.map((value) => value?.trim()).find(Boolean);\n}\n\nexport function parseFiles(filesCsv: string | undefined): string[] {\n const files =\n filesCsv\n ?.split(\",\")\n .map((file) => file.trim())\n .filter(Boolean) ?? [];\n if (files.length === 0) {\n throw new CliUsageError(\"Missing files. Use --files <path[,path]>.\");\n }\n return files;\n}\n\nexport function formatElapsedSeconds(elapsedMs: number): string {\n return `${Math.floor(elapsedMs / 1000)}s`;\n}\n","import { DEFAULTS } from \"../../sdk/config.js\";\nimport {\n createDefaultPrompt,\n loadCliConfig,\n resolveConfigPath,\n writeCliConfig,\n} from \"../config-store.js\";\nimport { CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, ConfigInitOptions, DocmanaCliConfig } from \"../types.js\";\nimport { DEFAULT_CONFIG_FILE } from \"../types.js\";\nimport { getCwd } from \"../utils.js\";\n\nexport async function configInitCommand(\n options: ConfigInitOptions,\n io: CliIO,\n deps: CliDeps,\n): Promise<void> {\n const cwd = getCwd(deps);\n const configPath = resolveConfigPath(options.config, cwd);\n const existing = await loadCliConfig(options.config, cwd, false);\n const defaultPrompt = deps.prompt ? undefined : createDefaultPrompt();\n const prompt = deps.prompt ?? defaultPrompt?.prompt;\n if (!prompt) throw new CliUsageError(\"Unable to initialize interactive prompt\");\n\n try {\n const config: DocmanaCliConfig = {\n apiBaseUrl: await prompt(\"API base URL\", {\n defaultValue: existing.apiBaseUrl,\n }),\n tokenEndpoint: await prompt(\"OAuth2 token endpoint\", {\n defaultValue: existing.tokenEndpoint ?? DEFAULTS.tokenEndpoint,\n }),\n scope: await prompt(\"OAuth2 scope\", {\n defaultValue: existing.scope ?? DEFAULTS.scope,\n }),\n clientId: await prompt(\"Client id\", {\n defaultValue: existing.clientId,\n }),\n clientSecret: await prompt(\"Client secret\", {\n defaultValue: existing.clientSecret,\n secret: true,\n }),\n };\n\n await writeCliConfig(configPath, config);\n io.stdout(`Wrote ${configPath}\\n`);\n io.stdout(\n `Warning: ${DEFAULT_CONFIG_FILE} contains credentials and should stay ignored by Git.\\n`,\n );\n } finally {\n defaultPrompt?.close();\n }\n}\n","import { DocmanaAuthError } from \"../../sdk/errors.js\";\nimport type { TokenCache, TokenCacheEntry } from \"../../sdk/types.js\";\n\nconst SAFETY_MARGIN_MS = 60_000;\n\nexport interface TokenManagerOptions {\n clientId: string;\n clientSecret: string;\n tokenEndpoint: string;\n scope: string;\n fetchImpl: typeof fetch;\n tokenCache?: TokenCache;\n}\n\nexport class TokenManager {\n private token: string | null = null;\n private expiresAt = 0;\n private inflight: Promise<string> | null = null;\n\n constructor(private readonly opts: TokenManagerOptions) {}\n\n invalidate(): void {\n this.token = null;\n this.expiresAt = 0;\n void this.opts.tokenCache?.clear().catch(() => undefined);\n }\n\n async getToken(): Promise<string> {\n if (this.token && Date.now() < this.expiresAt) return this.token;\n const cached = await this.readCachedToken();\n if (cached) return cached;\n if (this.inflight) return this.inflight;\n this.inflight = this.acquire().finally(() => {\n this.inflight = null;\n });\n return this.inflight;\n }\n\n private async acquire(): Promise<string> {\n const body = new URLSearchParams({\n grant_type: \"client_credentials\",\n client_id: this.opts.clientId,\n client_secret: this.opts.clientSecret,\n scope: this.opts.scope,\n });\n const res = await this.opts.fetchImpl(this.opts.tokenEndpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\n body: body.toString(),\n });\n if (!res.ok) {\n // Do NOT include the response body verbatim — avoid leaking secrets/echoes.\n throw new DocmanaAuthError(\"Failed to acquire Docmana access token\", { status: res.status });\n }\n const json = (await res.json()) as Partial<{ access_token: string; expires_in: number }>;\n if (\n typeof json.access_token !== \"string\" ||\n json.access_token.length === 0 ||\n typeof json.expires_in !== \"number\" ||\n !Number.isFinite(json.expires_in)\n ) {\n throw new DocmanaAuthError(\"Malformed token response from Docmana CIAM\", {\n status: res.status,\n });\n }\n this.token = json.access_token;\n this.expiresAt = Date.now() + json.expires_in * 1000 - SAFETY_MARGIN_MS;\n await this.writeCachedToken().catch(() => undefined);\n return this.token;\n }\n\n private async readCachedToken(): Promise<string | null> {\n if (!this.opts.tokenCache) return null;\n let entry: TokenCacheEntry | null;\n try {\n entry = await this.opts.tokenCache.read();\n } catch {\n return null;\n }\n if (!entry) return null;\n if (\n entry.clientId !== this.opts.clientId ||\n entry.tokenEndpoint !== this.opts.tokenEndpoint ||\n entry.scope !== this.opts.scope ||\n Date.now() >= entry.expiresAt\n ) {\n await this.opts.tokenCache.clear().catch(() => undefined);\n return null;\n }\n this.token = entry.accessToken;\n this.expiresAt = entry.expiresAt;\n return this.token;\n }\n\n private async writeCachedToken(): Promise<void> {\n if (!this.opts.tokenCache || !this.token) return;\n await this.opts.tokenCache.write({\n accessToken: this.token,\n expiresAt: this.expiresAt,\n clientId: this.opts.clientId,\n tokenEndpoint: this.opts.tokenEndpoint,\n scope: this.opts.scope,\n });\n }\n}\n","import { DEFAULTS } from \"../../sdk/config.js\";\nimport type { TokenCache } from \"../../sdk/types.js\";\nimport { createFileTokenCache, loadCliConfig, resolveTokenCachePath } from \"../config-store.js\";\nimport { CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaCliConfig, Env } from \"../types.js\";\nimport { firstNonEmpty, getCwd } from \"../utils.js\";\nimport { TokenManager } from \"./token-manager.js\";\n\nexport async function resolveFlowAccessToken(\n env: Env,\n cliConfig: DocmanaCliConfig,\n tokenCache: TokenCache,\n deps: CliDeps,\n io: CliIO,\n): Promise<string> {\n const cached = await readFreshCachedToken(tokenCache);\n if (cached) return cached;\n\n const clientId = firstNonEmpty(env.DOCMANA_CLIENT_ID, cliConfig.clientId);\n const clientSecret = firstNonEmpty(env.DOCMANA_CLIENT_SECRET, cliConfig.clientSecret);\n if (!clientId || !clientSecret) {\n throw new CliUsageError(\n \"Missing access token. Use --access-token, DOCMANA_ACCESS_TOKEN, docmana login, or configure OAuth credentials.\",\n );\n }\n\n const tokenManager = new TokenManager({\n clientId,\n clientSecret,\n tokenEndpoint:\n firstNonEmpty(env.DOCMANA_TOKEN_URL, cliConfig.tokenEndpoint) ?? DEFAULTS.tokenEndpoint,\n scope: firstNonEmpty(env.DOCMANA_SCOPE, cliConfig.scope) ?? DEFAULTS.scope,\n fetchImpl: deps.fetch ?? fetch,\n tokenCache,\n });\n const token = await tokenManager.getToken();\n io.stderr(\"Generated new access token and updated the token cache.\\n\");\n return token;\n}\n\nexport async function readFreshCachedToken(tokenCache: TokenCache): Promise<string | undefined> {\n const cached = await tokenCache.read().catch(() => null);\n if (!cached || Date.now() >= cached.expiresAt) return undefined;\n return cached.accessToken;\n}\n\nexport async function resolveAuthConfig(\n options: {\n clientId?: string;\n clientSecret?: string;\n tokenUrl?: string;\n scope?: string;\n config?: string;\n },\n env: Env,\n deps: CliDeps,\n): Promise<{ clientId: string; clientSecret: string; tokenEndpoint: string; scope: string }> {\n const cliConfig = await loadCliConfig(options.config, getCwd(deps), Boolean(options.config));\n const clientId = firstNonEmpty(options.clientId, env.DOCMANA_CLIENT_ID, cliConfig.clientId);\n const clientSecret = firstNonEmpty(\n options.clientSecret,\n env.DOCMANA_CLIENT_SECRET,\n cliConfig.clientSecret,\n );\n const tokenEndpoint =\n firstNonEmpty(options.tokenUrl, env.DOCMANA_TOKEN_URL, cliConfig.tokenEndpoint) ??\n DEFAULTS.tokenEndpoint;\n const scope = firstNonEmpty(options.scope, env.DOCMANA_SCOPE, cliConfig.scope) ?? DEFAULTS.scope;\n\n if (!clientId) {\n throw new CliUsageError(\"Missing client id. Use --client-id or DOCMANA_CLIENT_ID.\");\n }\n if (!clientSecret) {\n throw new CliUsageError(\"Missing client secret. Use --client-secret or DOCMANA_CLIENT_SECRET.\");\n }\n\n return { clientId, clientSecret, tokenEndpoint, scope };\n}\n\nexport function tokenCacheForPath(pathOption: string | undefined, deps: CliDeps): TokenCache {\n return createFileTokenCache(resolveTokenCachePath(pathOption, getCwd(deps)));\n}\n","import type { DocmanaConfig } from \"../../sdk/types.js\";\nimport { createFileTokenCache, loadCliConfig, resolveTokenCachePath } from \"../config-store.js\";\nimport { CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClient, DocmanaClientFactory, Env } from \"../types.js\";\nimport { firstNonEmpty, getCwd } from \"../utils.js\";\nimport { resolveFlowAccessToken } from \"../auth/access-token.js\";\n\nexport async function resolveApiClient(\n options: {\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n },\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<DocmanaClient> {\n const cliConfig = await loadCliConfig(options.config, getCwd(deps), Boolean(options.config));\n const apiBaseUrl = firstNonEmpty(options.apiUrl, env.DOCMANA_API_URL, cliConfig.apiBaseUrl);\n\n if (!apiBaseUrl) {\n throw new CliUsageError(\"Missing API base URL. Use --api-url or DOCMANA_API_URL.\");\n }\n\n const tokenCache = createFileTokenCache(resolveTokenCachePath(options.tokenCache, getCwd(deps)));\n const accessToken =\n firstNonEmpty(options.accessToken, env.DOCMANA_ACCESS_TOKEN) ??\n (await resolveFlowAccessToken(env, cliConfig, tokenCache, deps, io));\n\n return clientFactory({ apiBaseUrl, accessToken } satisfies DocmanaConfig);\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function flowDefinitionCommand(\n flowId: string,\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const definition = await client.getFlowDefinition(flowId);\n io.stdout(`${JSON.stringify(definition, null, 2)}\\n`);\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatFlowList } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function listFlowsCommand(\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const flows = await client.listFlows();\n if (options.json) {\n io.stdout(`${JSON.stringify(flows, null, 2)}\\n`);\n return;\n }\n io.stdout(formatFlowList(flows));\n } catch (err) {\n if (options.json) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n throw err;\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function flowMetadataCommand(\n flowId: string,\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const metadata = await client.getFlowMetadata(flowId);\n io.stdout(`${JSON.stringify(metadata, null, 2)}\\n`);\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, DownloadOptions, Env } from \"../types.js\";\nimport { getCwd } from \"../utils.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function organizationDocumentDownloadCommand(\n path: string,\n options: DownloadOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const document = await client.downloadOrganizationDocument(path);\n const outputPath = options.output ?? join(getCwd(deps), path);\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, document.bytes);\n io.stdout(`Downloaded ${document.filename} to ${outputPath}\\n`);\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatOrganizationDocumentList } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function organizationDocumentListCommand(\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const payload = await client.listOrganizationDocuments({ prefix: options.prefix });\n if (options.json) {\n io.stdout(`${JSON.stringify(payload, null, 2)}\\n`);\n return;\n }\n if (!payload.configured) {\n io.stdout(\"Organization document depot is not configured.\\n\");\n return;\n }\n io.stdout(formatOrganizationDocumentList(payload.documents));\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatOrganizationList } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function listOrganizationsCommand(\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const organizations = await client.listOrganizations();\n if (options.json) {\n io.stdout(`${JSON.stringify(organizations, null, 2)}\\n`);\n return;\n }\n io.stdout(formatOrganizationList(organizations));\n } catch (err) {\n if (options.json) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n throw err;\n }\n}\n","import { DocmanaError, DocmanaExecutionError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatHumanResult } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, RunOptions } from \"../types.js\";\nimport { formatElapsedSeconds, parseFiles } from \"../utils.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function runFlowCommand(\n flowId: string,\n options: RunOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const files = parseFiles(options.files);\n const context = parseContext(options.context);\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const result = await client.runFlow(\n flowId,\n {\n files: files.map((path) => ({ path })),\n context,\n language: options.language,\n useDraftVersion: options.draft === true,\n },\n {\n onPoll: (event) => {\n const nextPoll =\n event.nextPollAfterMs === undefined\n ? \"\"\n : `, next poll in ${formatElapsedSeconds(event.nextPollAfterMs)}`;\n io.stderr(\n `Polling execution ${event.executionResultId}: ${event.status} ` +\n `(attempt ${event.attempt}, elapsed ${formatElapsedSeconds(event.elapsedMs)}${nextPoll})\\n`,\n );\n },\n onRateLimit: (event) => {\n io.stderr(\n `Polling execution ${event.executionResultId}: rate limited ` +\n `(attempt ${event.attempt}, retrying in ${formatElapsedSeconds(event.retryAfterMs)})\\n`,\n );\n },\n },\n );\n\n if (options.json) {\n io.stdout(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n io.stdout(formatHumanResult(result));\n } catch (err) {\n if (options.json) {\n if (err instanceof DocmanaExecutionError && err.result) {\n io.stdout(`${JSON.stringify(err.result, null, 2)}\\n`);\n } else {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n }\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n throw err;\n }\n}\n\nfunction parseContext(raw: string | undefined): Record<string, unknown> | undefined {\n if (raw === undefined) return undefined;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new CliUsageError(\"--context must be valid JSON.\");\n }\n\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliUsageError(\"--context must be a JSON object.\");\n }\n\n return parsed as Record<string, unknown>;\n}\n","import { createFileTokenCache, resolveTokenCachePath } from \"../config-store.js\";\nimport type { CliDeps, CliIO, Env, LoginOptions } from \"../types.js\";\nimport { getCwd } from \"../utils.js\";\nimport { readFreshCachedToken, resolveAuthConfig } from \"../auth/access-token.js\";\nimport { TokenManager } from \"../auth/token-manager.js\";\n\nexport async function loginCommand(\n options: LoginOptions,\n env: Env,\n io: CliIO,\n deps: CliDeps,\n): Promise<void> {\n const auth = await resolveAuthConfig(options, env, deps);\n const tokenCachePath = resolveTokenCachePath(options.tokenCache, getCwd(deps));\n const tokenCache = createFileTokenCache(tokenCachePath);\n const hadFreshCachedToken = Boolean(await readFreshCachedToken(tokenCache));\n const tokenManager = new TokenManager({\n clientId: auth.clientId,\n clientSecret: auth.clientSecret,\n tokenEndpoint: auth.tokenEndpoint,\n scope: auth.scope,\n fetchImpl: deps.fetch ?? fetch,\n tokenCache,\n });\n\n await tokenManager.getToken();\n const cached = await tokenCache.read();\n if (!hadFreshCachedToken) {\n io.stdout(\"Generated new access token and updated the token cache.\\n\");\n }\n io.stdout(`Logged in. Token cached at ${tokenCachePath}\\n`);\n if (cached) io.stdout(formatTokenExpiry(cached.expiresAt));\n}\n\nfunction formatTokenExpiry(expiresAt: number): string {\n const expiresAtDate = new Date(expiresAt);\n return (\n [\n `Token expires at local time ${expiresAtDate.toLocaleString()}`,\n `Token expires at UTC ${expiresAtDate.toISOString()}`,\n ].join(\"\\n\") + \"\\n\"\n );\n}\n"],"mappings":"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","names":["resolve","resolve","parsePositiveInt","toStringValue","toStringValue","mkdir","writeFile","dirname","mkdir","dirname","writeFile","resolve"]}
1
+ {"version":3,"sources":["../src/cli/cli.ts","../src/sdk/config.ts","../src/sdk/authoring.ts","../src/sdk/reviews.ts","../src/sdk/execution-events.ts","../src/sdk/review-events.ts","../src/sdk/errors.ts","../src/sdk/http/http-client.ts","../src/sdk/files/resolve-input.ts","../src/sdk/api/multipart-request.ts","../src/sdk/api/run-flow.ts","../src/sdk/api/run-partial-flow.ts","../src/sdk/status.ts","../src/sdk/api/execution-status.ts","../src/sdk/api/execution-result.ts","../src/sdk/api/fraud-detection.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","../src/cli/errors.ts","../src/cli/formatting.ts","../src/cli/types.ts","../src/cli/config-store.ts","../src/cli/utils.ts","../src/cli/commands/config-init.ts","../src/cli/auth/token-manager.ts","../src/cli/auth/access-token.ts","../src/cli/commands/api-client.ts","../src/cli/commands/flow-definition.ts","../src/cli/commands/flow-list.ts","../src/cli/commands/flow-metadata.ts","../src/cli/commands/organization-document-download.ts","../src/cli/commands/organization-document-list.ts","../src/cli/commands/organization-list.ts","../src/cli/commands/flow-run.ts","../src/cli/commands/login.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { realpathSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Command, CommanderError } from \"commander\";\nimport { Docmana } from \"../sdk/client.js\";\nimport { CliSilentError, CliUsageError } from \"./errors.js\";\nimport { formatRuntimeError } from \"./formatting.js\";\nimport type {\n CliDeps,\n CliIO,\n ConfigInitOptions,\n DocmanaClientFactory,\n DownloadOptions,\n Env,\n ListOptions,\n LoginOptions,\n RunOptions,\n} from \"./types.js\";\nimport { DEFAULT_CONFIG_FILE, DEFAULT_TOKEN_CACHE_FILE, HELP } from \"./types.js\";\nimport { configInitCommand } from \"./commands/config-init.js\";\nimport { flowDefinitionCommand } from \"./commands/flow-definition.js\";\nimport { listFlowsCommand } from \"./commands/flow-list.js\";\nimport { flowMetadataCommand } from \"./commands/flow-metadata.js\";\nimport { organizationDocumentDownloadCommand } from \"./commands/organization-document-download.js\";\nimport { organizationDocumentListCommand } from \"./commands/organization-document-list.js\";\nimport { listOrganizationsCommand } from \"./commands/organization-list.js\";\nimport { runFlowCommand } from \"./commands/flow-run.js\";\nimport { loginCommand } from \"./commands/login.js\";\n\nexport type { DocmanaClientFactory } from \"./types.js\";\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2),\n env: Env = process.env,\n io: CliIO = {\n stdout: (text) => process.stdout.write(text),\n stderr: (text) => process.stderr.write(text),\n },\n clientFactory: DocmanaClientFactory = (config) => new Docmana(config),\n deps: CliDeps = {},\n): Promise<number> {\n const program = buildProgram(env, io, clientFactory, deps);\n if (argv.length === 0) {\n io.stdout(program.helpInformation());\n return 0;\n }\n\n try {\n await program.parseAsync(argv, { from: \"user\" });\n return 0;\n } catch (err) {\n if (err instanceof CliSilentError) {\n return err.exitCode;\n }\n if (err instanceof CliUsageError) {\n io.stderr(`Error: ${err.message}\\n`);\n return 2;\n }\n if (err instanceof CommanderError) {\n return err.exitCode === 0 ? 0 : 2;\n }\n io.stderr(`${formatRuntimeError(err)}\\n`);\n return 1;\n }\n}\n\nfunction buildProgram(\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Command {\n const program = new Command();\n program\n .name(\"docmana\")\n .description(HELP.root)\n .showHelpAfterError()\n .configureOutput({\n writeOut: io.stdout,\n writeErr: io.stderr,\n outputError: (str, write) => write(str),\n })\n .exitOverride();\n\n program\n .command(\"login\")\n .description(HELP.login)\n .option(\"--client-id <id>\", \"OAuth2 client id; defaults to DOCMANA_CLIENT_ID\")\n .option(\"--client-secret <secret>\", \"OAuth2 client secret; defaults to DOCMANA_CLIENT_SECRET\")\n .option(\"--token-url <url>\", \"OAuth2 token endpoint; defaults to DOCMANA_TOKEN_URL\")\n .option(\"--scope <scope>\", \"OAuth2 scope; defaults to DOCMANA_SCOPE\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (options: LoginOptions) => {\n await loginCommand(options, env, io, deps);\n });\n\n const flow = program\n .command(\"flow\")\n .description(HELP.flow)\n .action(() => {\n io.stdout(flow.helpInformation());\n });\n\n flow\n .command(\"list\")\n .description(HELP.list)\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--json\", \"Print the raw JSON flow list\")\n .action(async (options: ListOptions) => {\n await listFlowsCommand(options, env, io, clientFactory, deps);\n });\n\n flow\n .command(\"run\")\n .description(HELP.run)\n .argument(\"<flow-id>\", \"Docmana flow id\")\n .requiredOption(\"--files <csv>\", \"Comma-separated file paths to upload\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--json\", \"Print the raw JSON result\")\n .option(\"--context <json>\", \"Business context as a JSON object\")\n .option(\"--language <lang>\", \"Translate output to specified language\")\n .option(\"--draft\", \"Run the current draft flow version\")\n .action(async (flowId: string, options: RunOptions) => {\n await runFlowCommand(flowId, options, env, io, clientFactory, deps);\n });\n\n flow\n .command(\"metadata\")\n .description(HELP.metadata)\n .argument(\"<flow-id>\", \"Docmana flow id\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (flowId: string, options: ListOptions) => {\n await flowMetadataCommand(flowId, options, env, io, clientFactory, deps);\n });\n\n flow\n .command(\"definition\")\n .description(HELP.definition)\n .argument(\"<flow-id>\", \"Docmana flow id\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (flowId: string, options: ListOptions) => {\n await flowDefinitionCommand(flowId, options, env, io, clientFactory, deps);\n });\n\n const organization = program\n .command(\"organization\")\n .description(HELP.organization)\n .action(() => {\n io.stdout(organization.helpInformation());\n });\n\n organization\n .command(\"list\")\n .description(HELP.organizationList)\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--json\", \"Print the raw JSON organization list\")\n .action(async (options: ListOptions) => {\n await listOrganizationsCommand(options, env, io, clientFactory, deps);\n });\n\n const organizationDocument = organization\n .command(\"document\")\n .description(HELP.organizationDocument)\n .action(() => {\n io.stdout(organizationDocument.helpInformation());\n });\n\n organizationDocument\n .command(\"list\")\n .description(HELP.organizationDocumentList)\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .option(\"--prefix <prefix>\", \"Filter documents by path prefix\")\n .option(\"--json\", \"Print the raw JSON organization document list\")\n .action(async (options: ListOptions) => {\n await organizationDocumentListCommand(options, env, io, clientFactory, deps);\n });\n\n organizationDocument\n .command(\"download\")\n .description(HELP.organizationDocumentDownload)\n .argument(\"<path>\", \"Organization document path\")\n .option(\"--output <file>\", \"Output file path; defaults to ./{path}\")\n .option(\"--api-url <url>\", \"Consumer API base URL; defaults to DOCMANA_API_URL\")\n .option(\"--access-token <token>\", \"Bearer token; defaults to DOCMANA_ACCESS_TOKEN\")\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .option(\"--token-cache <path>\", `Token cache path; defaults to ./${DEFAULT_TOKEN_CACHE_FILE}`)\n .action(async (path: string, options: DownloadOptions) => {\n await organizationDocumentDownloadCommand(path, options, env, io, clientFactory, deps);\n });\n\n const config = program\n .command(\"config\")\n .description(HELP.config)\n .action(() => {\n io.stdout(config.helpInformation());\n });\n\n config\n .command(\"init\")\n .description(HELP.configInit)\n .option(\"--config <path>\", `Config file path; defaults to ./${DEFAULT_CONFIG_FILE}`)\n .action(async (options: ConfigInitOptions) => {\n await configInitCommand(options, io, deps);\n });\n\n return program;\n}\n\nfunction isDirectRun(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return realpathSync(resolve(entry)) === realpathSync(fileURLToPath(import.meta.url));\n } catch {\n return false;\n }\n}\n\nif (isDirectRun()) {\n runCli().then((code) => {\n process.exitCode = code;\n });\n}\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 { HttpClient } from \"./http/http-client.js\";\n\n/** Native editor data is lossless: unknown metadata is retained during edits. */\nexport type AuthoringData = Record<string, unknown>;\nexport interface AuthoringNode extends AuthoringData {\n id: string;\n type: string;\n position: { x: number; y: number };\n data: AuthoringData & { label: string; type: string; enabled?: boolean };\n parentId?: string;\n}\nexport interface AuthoringEdge extends AuthoringData {\n id: string;\n source: string;\n target: string;\n}\nexport interface AuthoringRevisions {\n flow: number;\n nodes: Record<string, number>;\n edges: Record<string, number>;\n rules: Record<string, number>;\n}\nexport type AuthoringSource =\n | { kind: \"mongo\" }\n | {\n kind: \"git\";\n formulaId: string;\n repository: string;\n path: string;\n ref: string;\n };\nexport interface AuthoringGitPublication {\n source: Extract<AuthoringSource, { kind: \"git\" }>;\n commitSha: string;\n publishedVersion: number;\n mongoRevisions: AuthoringRevisions;\n contentHash: string;\n publishedAt: string;\n artifactHash?: string | null;\n toolingHash?: string | null;\n}\nexport interface AuthoringGitProjection {\n source: Extract<AuthoringSource, { kind: \"git\" }>;\n commitSha: string;\n artifactHash: string;\n toolingHash: string;\n operationId: string;\n mongoRevisions: AuthoringRevisions;\n contentHash: string;\n projectedAt: string;\n}\nexport interface AuthoringPublication {\n operationId: string;\n expectedRevisions: AuthoringRevisions;\n gitCommitSha?: string;\n gitArtifactHash?: string;\n gitToolingHash?: string;\n}\nexport interface AuthoringFlowSummary extends AuthoringData {\n authoringSource?: AuthoringSource | null;\n lastGitPublication?: AuthoringGitPublication | null;\n lastGitProjection?: AuthoringGitProjection | null;\n createdAt?: string;\n updatedAt?: string;\n executionStats?: { totalExecutions: number; totalDocuments: number };\n id: string;\n name: string;\n type?: \"manual\" | \"assisted\";\n state?: string;\n isDirty?: boolean;\n}\nexport interface AuthoringSnapshot {\n gitPublicationState?: {\n status: \"not_published\" | \"unchanged\" | \"diverged\" | \"staged\";\n currentContentHash: string;\n } | null;\n flow: AuthoringFlowSummary & {\n configs?: AuthoringData;\n nodes: AuthoringNode[];\n edges: AuthoringEdge[];\n };\n rules: AuthoringData[];\n revisions: AuthoringRevisions;\n historyCounts: { snapshots: number; published: number };\n}\nexport interface AuthoringChanges {\n create?: AuthoringData[];\n update?: { id: string; patch: AuthoringData }[];\n delete?: string[];\n}\nexport interface AuthoringDraft {\n gitProjection?: { commitSha: string; artifactHash: string; toolingHash: string };\n authoringSource?: AuthoringSource;\n operationId: string;\n expectedRevisions: AuthoringRevisions;\n flowPatch?: AuthoringData;\n nodes?: AuthoringChanges;\n edges?: AuthoringChanges;\n prompts?: {\n create?: AuthoringData[];\n updateForNode?: string[];\n delete?: string[];\n upsertForNode?: { id: string; prompt: AuthoringData }[];\n };\n rules?: AuthoringData[];\n}\nexport interface AuthoringCreate {\n authoringSource?: AuthoringSource;\n operationId: string;\n id: string;\n name: string;\n type: \"manual\" | \"assisted\";\n configs?: AuthoringData;\n nodes: AuthoringNode[];\n edges: AuthoringEdge[];\n}\nexport interface AuthoringReceipt {\n success: boolean;\n id?: string;\n version?: number;\n flowUpdatedAt: string;\n revisions: AuthoringRevisions;\n committedRuleIds?: Record<string, string>;\n}\nexport interface AuthoringOptions {\n organization: string;\n signal?: AbortSignal;\n}\nexport interface AuthoringDocumentTrialNode {\n id: string;\n name: string;\n type: \"classification\" | \"extraction\" | \"metadata-extraction\";\n prompt?: { metadata: AuthoringData; messages: AuthoringData[]; schemaDatas: AuthoringData };\n /** Native assisted definition; mutually exclusive with a manual prompt. */\n assisted?: {\n metadata: AuthoringData;\n rules: AuthoringData[];\n configs: AuthoringData;\n };\n}\nexport type AuthoringDocumentTrialSpec =\n | { flowId: string; expectedRevisions: AuthoringRevisions; node?: string; allNodes?: boolean }\n | { nodes: AuthoringDocumentTrialNode[] };\nexport interface AuthoringDocumentTrialReport {\n executor?: \"flows\" | \"docmana-api\";\n mode: \"document-trial\";\n execution_scope: \"isolated\";\n status: \"completed\" | \"error\";\n rows: {\n node: string;\n name: string;\n type: string;\n status: \"completed\" | \"error\";\n seconds: number;\n output?: AuthoringData;\n error?: string;\n }[];\n}\nexport interface AuthoringEditorCatalog {\n capabilities?: { canonicalProjection?: number; runtimeEnvironment?: string };\n models: {\n default_model: string;\n assisted_model?: string;\n ai_provider: string;\n models: {\n model_name: string;\n reasoning_effort_values?: string[] | null;\n default_reasoning_effort?: string | null;\n }[];\n };\n tools: (AuthoringData & {\n tool_id: string;\n tool_name?: string;\n type?: string;\n short_description_fr?: string;\n short_description_en?: string;\n })[];\n systems: { id: string; name: string; expectedFields?: AuthoringData[] }[];\n defaults: { aggregator: string };\n flags: { flags: Record<string, boolean> };\n}\nexport interface AuthoringConversationContext {\n flow_id: string;\n scope?: string | null;\n node_id?: string | null;\n node_label?: string | null;\n}\nexport interface AuthoringConversation {\n conversation_id: string;\n expires_at: string;\n context: AuthoringConversationContext;\n}\nexport interface AuthoringConversationInput {\n flow_id: string;\n language: \"fr\" | \"en\";\n scope?: string;\n node_id?: string;\n messages?: { role: \"user\" | \"assistant\"; content: string }[];\n}\nexport interface AuthoringConversationTurn {\n assistant_message: string;\n options?: unknown[] | null;\n proposed_rule?: AuthoringData | null;\n proposed_document_type_rename?: AuthoringData | null;\n context: AuthoringConversationContext;\n target_resolved: boolean;\n expires_at: string;\n}\nexport type AuthoringSort =\n | \"id\"\n | \"newest\"\n | \"oldest\"\n | \"recentlyModified\"\n | \"leastRecentlyModified\"\n | \"name\";\nexport interface AuthoringPageOptions extends AuthoringOptions {\n sort?: AuthoringSort;\n offset?: number;\n limit?: number;\n}\n\nfunction identity(id: string): string {\n if (!/^[A-Za-z0-9_-]{1,200}$/.test(id)) throw new Error(\"Invalid formula identifier\");\n return encodeURIComponent(id);\n}\n\n/** Aggregate authoring only. Caller retains operation IDs when retrying mutations. */\nexport class FormulaAuthoring {\n constructor(private readonly http: HttpClient) {}\n\n /** Read-only, revision-pinned definitions. Assisted execution belongs to the server-side Flows POC. */\n documentTrialDefinitions(\n spec: {\n flowId: string;\n expectedRevisions: AuthoringRevisions;\n node?: string;\n allNodes?: boolean;\n },\n options: AuthoringOptions,\n ): Promise<{ nodes: AuthoringDocumentTrialNode[] }> {\n identity(spec.flowId);\n if (Boolean(spec.node) === (spec.allNodes === true))\n throw new Error(\"Select one node or all nodes\");\n if (spec.node) identity(spec.node);\n return this.request(\"POST\", \"document-trial/definitions\", options, spec);\n }\n\n /** Native manual execution through Consumer Edge; assisted trials use definitions plus server-side Flows. */\n async trialDocument(\n file: Blob,\n filename: string,\n spec: AuthoringDocumentTrialSpec,\n options: AuthoringOptions,\n ): Promise<AuthoringDocumentTrialReport> {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n if (\n !file.size ||\n file.size > 20 * 1024 * 1024 ||\n !/\\.(pdf|jpeg|jpg|png|bmp|tiff|tif|heic)$/i.test(filename)\n )\n throw new Error(\"Invalid trial document\");\n if (\"flowId\" in spec) {\n identity(spec.flowId);\n if (Boolean(spec.node) === (spec.allNodes === true))\n throw new Error(\"Select one node or all nodes\");\n if (spec.node) identity(spec.node);\n } else if (!Array.isArray(spec.nodes) || !spec.nodes.length || spec.nodes.length > 100)\n throw new Error(\"Invalid trial nodes\");\n const body = new FormData();\n body.set(\"file\", file, filename);\n body.set(\"spec\", JSON.stringify(spec));\n return this.http.requestJson(\"POST\", \"/authoring/document-trial\", {\n query: { organization: options.organization },\n signal: options.signal,\n body,\n });\n }\n\n editorCatalog(options: AuthoringOptions): Promise<AuthoringEditorCatalog> {\n return this.request(\"GET\", \"editor-catalog\", options);\n }\n generateMapping(\n body: {\n workflow_fields: AuthoringData[];\n expected_fields: AuthoringData[];\n current_mapping: string;\n user_instructions: string;\n },\n options: AuthoringOptions,\n ): Promise<{ jsonataExpression: string }> {\n return this.request(\"POST\", \"generate-mapping\", options, body);\n }\n\n openConversation(\n body: AuthoringConversationInput,\n options: AuthoringOptions,\n ): Promise<AuthoringConversation> {\n identity(body.flow_id);\n if (body.node_id) identity(body.node_id);\n return this.request(\"POST\", \"conversations\", options, body);\n }\n sendConversationMessage(\n id: string,\n content: string,\n options: AuthoringOptions,\n ): Promise<AuthoringConversationTurn> {\n return this.request(\"POST\", `conversations/${identity(id)}/messages`, options, { content });\n }\n confirmConversation(\n id: string,\n body: { rule_id?: string; document_type_rename?: boolean },\n options: AuthoringOptions,\n ): Promise<{ expires_at: string }> {\n return this.request(\"POST\", `conversations/${identity(id)}/confirm`, options, body);\n }\n\n private request<T>(method: string, path: string, options: AuthoringOptions, body?: unknown) {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n return this.http.requestJson<T>(method, `/authoring/${path}`, {\n query: { organization: options.organization },\n signal: options.signal,\n ...(body === undefined\n ? {}\n : {\n body: JSON.stringify(body),\n headers: { \"content-type\": \"application/json\" },\n }),\n });\n }\n\n list(options: AuthoringPageOptions): Promise<AuthoringFlowSummary[]> {\n const offset = options.offset ?? 0,\n limit = options.limit ?? 50;\n if (\n !Number.isInteger(offset) ||\n offset < 0 ||\n !Number.isInteger(limit) ||\n limit < 1 ||\n limit > 200\n )\n throw new Error(\"Invalid authoring pagination\");\n return this.request(\n \"GET\",\n `flows?offset=${offset}&limit=${limit}&sort=${encodeURIComponent(options.sort ?? \"id\")}`,\n options,\n );\n }\n remove(id: string, options: AuthoringOptions): Promise<{ success: boolean }> {\n return this.request(\"DELETE\", `flows/${identity(id)}`, options);\n }\n async exportArchive(id: string, options: AuthoringOptions): Promise<Uint8Array> {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n return (\n await this.http.requestBytes(\"GET\", `/authoring/flows/${identity(id)}/export`, {\n query: { organization: options.organization },\n signal: options.signal,\n })\n ).bytes;\n }\n importArchive(\n file: Blob,\n filename: string,\n options: AuthoringOptions & { confirmOverwrite?: boolean },\n ): Promise<{ status: \"imported\" | \"confirmation_required\"; flowName?: string }> {\n if (!options.organization.trim()) throw new Error(\"Organization is required\");\n if (!/\\.(zip|docmana)$/i.test(filename) || file.size > 10 * 1024 * 1024)\n throw new Error(\"Invalid formula archive\");\n const body = new FormData();\n body.append(\"file\", file, filename);\n return this.http.requestJson(\"POST\", \"/authoring/flows/import\", {\n query: {\n organization: options.organization,\n confirmOverwrite: String(options.confirmOverwrite === true),\n },\n body,\n signal: options.signal,\n });\n }\n get(id: string, options: AuthoringOptions): Promise<AuthoringSnapshot> {\n return this.request(\"GET\", `flows/${identity(id)}`, options);\n }\n create(body: AuthoringCreate, options: AuthoringOptions): Promise<AuthoringReceipt> {\n return this.request(\"POST\", \"flows\", options, body);\n }\n save(id: string, body: AuthoringDraft, options: AuthoringOptions): Promise<AuthoringReceipt> {\n return this.request(\"PATCH\", `flows/${identity(id)}/draft`, options, body);\n }\n validate(\n id: string,\n revisions: AuthoringRevisions,\n options: AuthoringOptions,\n ): Promise<AuthoringData> {\n return this.request(\"POST\", `flows/${identity(id)}/validate`, options, {\n expectedRevisions: revisions,\n });\n }\n publish(\n id: string,\n body: AuthoringPublication,\n options: AuthoringOptions,\n ): Promise<AuthoringReceipt> {\n return this.request(\"POST\", `flows/${identity(id)}/publish`, options, body);\n }\n history(\n id: string,\n kind: \"snapshots\" | \"published\",\n options: AuthoringPageOptions,\n ): Promise<AuthoringData[]> {\n if (kind !== \"snapshots\" && kind !== \"published\") throw new Error(\"Invalid history kind\");\n const offset = options.offset ?? 0,\n limit = options.limit ?? 20;\n if (\n !Number.isInteger(offset) ||\n offset < 0 ||\n !Number.isInteger(limit) ||\n limit < 1 ||\n limit > 100\n )\n throw new Error(\"Invalid history pagination\");\n return this.request(\n \"GET\",\n `flows/${identity(id)}/history/${kind}?offset=${offset}&limit=${limit}`,\n options,\n );\n }\n flags(options: AuthoringOptions): Promise<{ flags: Record<string, boolean> }> {\n return this.request(\"GET\", \"feature-flags\", options);\n }\n}\n","import type { HttpClient } from \"./http/http-client.js\";\nimport type { ExecutionStatus } from \"./models/execution-status.enum.js\";\n\nexport interface ReviewCalculation {\n executionResultId: string;\n executionStatus: ExecutionStatus;\n /** Null for legacy/unmarked executions. Never inferred from review status. */\n calculation: {\n /** Review owning these coherent outputs; absent during calculation/finalization. */\n reviewId?: string;\n mode: \"runAhead\";\n status: \"calculating\" | \"completed\" | \"recalculating\" | \"finalizing\" | \"finalized\" | \"failed\";\n /** Coherent calculation revision; distinct from ReviewTask.version. */\n revision: number;\n targetRevision?: number;\n provisional: boolean;\n totalReviews?: number;\n approvedReviews?: number;\n remainingReviews?: number;\n /** Node executions, not individual model calls. */\n computedNodes?: number;\n reusedNodes?: number;\n } | null;\n}\n\nexport interface ReviewFlowOutline {\n flowId: string;\n name?: string;\n version: number | null;\n nodes: Array<{\n nodeId: string;\n name?: string | null;\n label?: string | null;\n type: string;\n enabled: boolean;\n order: number;\n humanReview?: { enabled: boolean; instructions?: string; skipWhenScoreAtLeast?: number | null };\n }>;\n edges: Array<{ source: string; target: string }>;\n}\n\nexport interface DocumentPreviewManifest {\n status: \"queued\" | \"processing\" | \"ready\" | \"limited\" | \"failed\" | \"unavailable\";\n version: string;\n pageCount: number;\n renderedPages: number;\n pages: Array<{ number: number; width?: number; height?: number }>;\n retryAfterMs: number;\n}\n\nexport interface ReviewItem {\n itemId: string;\n kind: \"field\" | \"classification\" | \"status\";\n nodeId: string | null;\n nodeName: string;\n field: string;\n value: unknown;\n}\nexport interface ReviewDocument {\n docKey: string;\n name: string | null;\n pageFrom?: number | null;\n pageTo?: number | null;\n pageCount?: number | null;\n pages?: Array<{ number: number; imageUrl: string; thumbnailUrl: string }>;\n renderedPages?: number;\n pagesComplete?: boolean;\n contentUrl?: string;\n items?: ReviewItem[];\n context?: ReviewItem[];\n /** Read-only evidence from the frozen pause; absent on older backends. */\n assessments?: ReviewAssessment[];\n}\nexport interface ReviewAssessment {\n nodeId: string | null;\n nodeName: string;\n /** Stored node score, 0..100. Not a per-field confidence estimate. */\n score?: number;\n scoreDescription?: unknown;\n feedback?: unknown;\n explanation?: unknown;\n reasoning?: unknown;\n}\nexport interface ReviewSummary {\n reviewId: string;\n executionResultId: string;\n flowId: string;\n flowVersion: number | string | null;\n status: string;\n version: number;\n createdAt?: string | null;\n expiresAt: string | null;\n node: { nodeId: string; nodeName: string | null; nodeType: string | null; instructions?: string };\n documents: ReviewDocument[];\n level?: \"dossier\";\n}\nexport interface ReviewTask extends ReviewSummary {\n /** Explicit frozen field signals. Missing/empty keeps legacy UI and global confirmation. */\n findings?: ReviewFinding[];\n /** Native lifecycle timestamps, absent on older backends; never inferred from callbacks. */\n submittedAt?: string | null;\n resumingAt?: string | null;\n closedAt?: string | null;\n}\nexport interface ReviewFinding {\n id: string;\n code: string;\n /** Producer's concise user-facing explanation, never hidden model reasoning. */\n message: string;\n itemIds: string[];\n source?: \"model\" | \"rule\";\n}\nexport interface ReviewDecision {\n decision: \"continue\" | \"exclude\" | \"rerun\" | \"reject\";\n reviewer: string;\n version: number;\n corrections?: Array<{ itemId: string; value: unknown }>;\n excludedDocuments?: string[];\n rerunDocuments?: string[];\n hint?: string;\n reason?: string;\n}\nexport interface ReviewReadOptions {\n organization: string;\n signal?: AbortSignal;\n}\nexport interface ReviewDocumentOptions extends ReviewReadOptions {\n version?: string;\n size?: \"full\" | \"thumb\";\n range?: string;\n ifRange?: string;\n ifNoneMatch?: string;\n ifModifiedSince?: string;\n}\nfunction segment(value: string): string {\n if (\n !value ||\n value === \".\" ||\n value === \"..\" ||\n /[\\\\/]/.test(value) ||\n [...value].some((char) => char.charCodeAt(0) < 32)\n )\n throw new Error(\"Invalid review identifier\");\n return encodeURIComponent(value);\n}\n/** Human review of a formula execution. Independent of pipelines and final callbacks. */\nexport class Reviews {\n constructor(private readonly http: HttpClient) {}\n /** Repeatable metadata read: never consumes the final execution result. */\n calculation(executionId: string, options: ReviewReadOptions): Promise<ReviewCalculation> {\n return this.http.requestJson(\"GET\", `/executions/${segment(executionId)}/review/calculation`, {\n signal: options.signal,\n query: { organization: options.organization },\n });\n }\n /** Published formula structure only. Compare its version with the review's flowVersion. */\n outline(flowId: string, options: ReviewReadOptions): Promise<ReviewFlowOutline> {\n return this.http.requestJson(\"GET\", `/flows/${segment(flowId)}/outline`, {\n signal: options.signal,\n query: { organization: options.organization },\n });\n }\n list(\n options: ReviewReadOptions & {\n status?: \"pending\" | \"submitted\" | \"resuming\";\n cursor?: string;\n limit?: number;\n },\n ): Promise<{ reviews: ReviewSummary[]; nextCursor: string | null }> {\n return this.http.requestJson(\"GET\", \"/reviews\", {\n signal: options.signal,\n query: {\n organization: options.organization,\n ...(options.status ? { status: options.status } : {}),\n ...(options.cursor ? { cursor: options.cursor } : {}),\n ...(options.limit ? { limit: String(options.limit) } : {}),\n },\n });\n }\n get(executionId: string, options: ReviewReadOptions): Promise<ReviewTask> {\n return this.http.requestJson(\"GET\", `/executions/${segment(executionId)}/review`, {\n signal: options.signal,\n query: { organization: options.organization },\n });\n }\n decide(\n executionId: string,\n decision: ReviewDecision,\n options: ReviewReadOptions,\n ): Promise<{ executionResultId: string; reviewId: string; status: \"Queued\" }> {\n // No automatic retries: on 503 a decision can already be recorded upstream.\n return this.http.requestJson(\"POST\", `/executions/${segment(executionId)}/review`, {\n signal: options.signal,\n query: { organization: options.organization },\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(decision),\n });\n }\n /** Streaming Response: callers own consumption/cancellation. Never buffers the PDF. */\n document(\n executionId: string,\n docKey: string,\n resource: \"content\" | \"locations\" | \"preview\" | { page: number },\n options: ReviewDocumentOptions,\n ): Promise<Response> {\n if (\n typeof resource === \"object\" &&\n (!Number.isSafeInteger(resource.page) || resource.page < 1 || resource.page > 999999)\n )\n throw new Error(\"Invalid page number\");\n const path = typeof resource === \"object\" ? `pages/${resource.page}` : resource;\n const headers = Object.fromEntries(\n Object.entries({\n range: options.range,\n \"if-range\": options.ifRange,\n \"if-none-match\": options.ifNoneMatch,\n \"if-modified-since\": options.ifModifiedSince,\n }).filter((entry): entry is [string, string] => typeof entry[1] === \"string\"),\n );\n return this.http.requestRaw(\n \"GET\",\n `/executions/${segment(executionId)}/review/documents/${segment(docKey)}/${path}`,\n {\n signal: options.signal,\n headers,\n acceptStatuses: [304, 416],\n query: {\n organization: options.organization,\n ...(options.version ? { v: options.version } : {}),\n ...(options.size ? { size: options.size } : {}),\n },\n },\n );\n }\n}\n","import { createHmac, timingSafeEqual } from \"node:crypto\";\nimport type { HttpClient } from \"./http/http-client.js\";\nimport type { ExecutionStatus } from \"./models/execution-status.enum.js\";\nimport {\n parseReviewEventCallback,\n ReviewEventVerificationError,\n type ReviewEventCallback,\n type verifyReviewEventCallback,\n} from \"./review-events.js\";\n\nexport const EXECUTION_NODE_EVENT_TYPES = [\n \"execution.node.started\",\n \"execution.node.completed\",\n \"execution.node.failed\",\n \"execution.node.reused\",\n] as const;\nexport interface ExecutionNodeEvent {\n schemaVersion: 1;\n eventId: string;\n type: (typeof EXECUTION_NODE_EVENT_TYPES)[number];\n organization: string;\n executionResultId: string;\n sequence: number;\n occurredAt: string;\n /** Broker publication instant, present only on event callbacks. */\n publishedAt?: string;\n flowId?: string;\n flowVersion?: number;\n nodeId: string;\n nodeType: string;\n documentKeys: string[];\n revision: number;\n attemptId: string;\n}\nexport type ExecutionEventCallback = ExecutionNodeEvent | ReviewEventCallback;\nexport interface ExecutionEventsPage {\n executionResultId: string;\n executionStatus: ExecutionStatus;\n flowId?: string;\n flowVersion?: number | null;\n events: ExecutionNodeEvent[];\n nextAfter: number | null;\n lastSequence: number;\n truncated: boolean;\n}\nexport function parseExecutionEventCallback(value: unknown): ExecutionEventCallback {\n const raw = value as Record<string, unknown> | null;\n if (!raw || !EXECUTION_NODE_EVENT_TYPES.includes(raw.type as ExecutionNodeEvent[\"type\"]))\n return parseReviewEventCallback(value);\n const fail = (): never => {\n throw new ReviewEventVerificationError(\"payload\");\n };\n const text = (key: string) => {\n const v = raw[key];\n return typeof v === \"string\" &&\n v.length > 0 &&\n v.length <= 512 &&\n [...v].every((c) => c.charCodeAt(0) >= 32)\n ? v\n : fail();\n };\n const integer = (key: string) =>\n Number.isSafeInteger(raw[key]) && Number(raw[key]) >= 1 ? Number(raw[key]) : fail();\n if (raw.schemaVersion !== 1) return fail();\n const event: ExecutionNodeEvent = {\n schemaVersion: 1,\n eventId: text(\"eventId\"),\n type: raw.type as ExecutionNodeEvent[\"type\"],\n organization: text(\"organization\"),\n executionResultId: text(\"executionResultId\"),\n sequence: integer(\"sequence\"),\n occurredAt: text(\"occurredAt\"),\n nodeId: text(\"nodeId\"),\n nodeType: text(\"nodeType\"),\n revision: integer(\"revision\"),\n attemptId: text(\"attemptId\"),\n documentKeys: [],\n };\n if (!Number.isFinite(Date.parse(event.occurredAt))) return fail();\n if (\n !Array.isArray(raw.documentKeys) ||\n !raw.documentKeys.length ||\n raw.documentKeys.length > 1000 ||\n raw.documentKeys.some(\n (v) =>\n typeof v !== \"string\" || !v || v.length > 512 || [...v].some((c) => c.charCodeAt(0) < 32),\n )\n )\n return fail();\n event.documentKeys = raw.documentKeys as string[];\n if (raw.flowId !== undefined) event.flowId = text(\"flowId\");\n if (raw.flowVersion !== undefined) event.flowVersion = integer(\"flowVersion\");\n if (raw.publishedAt !== undefined) {\n event.publishedAt = text(\"publishedAt\");\n if (!Number.isFinite(Date.parse(event.publishedAt))) return fail();\n }\n return event;\n}\n/** Expanded signature verifier. Existing review-only parser/verifier keep their contract. */\nexport function verifyExecutionEventCallback(\n options: Parameters<typeof verifyReviewEventCallback>[0],\n): ExecutionEventCallback {\n const { body, signature, timestamp, secret } = options;\n if (\n !timestamp ||\n !/^\\d{10,13}$/.test(timestamp) ||\n Math.abs((options.nowMs ?? Date.now()) / 1000 - Number(timestamp)) >\n (options.toleranceSeconds ?? 300)\n )\n throw new ReviewEventVerificationError(\"timestamp\");\n if (secret.length < 32 || !signature || !/^v1=[a-f0-9]{64}$/.test(signature))\n throw new ReviewEventVerificationError(\"signature\");\n const expected = createHmac(\"sha256\", secret).update(`${timestamp}.${body}`).digest();\n if (!timingSafeEqual(expected, Buffer.from(signature.slice(3), \"hex\")))\n throw new ReviewEventVerificationError(\"signature\");\n let value: unknown;\n try {\n value = JSON.parse(body);\n } catch {\n throw new ReviewEventVerificationError(\"payload\");\n }\n const event = parseExecutionEventCallback(value);\n if (options.organization !== undefined && event.organization !== options.organization)\n throw new ReviewEventVerificationError(\"organization\");\n return event;\n}\nexport class ExecutionEvents {\n constructor(private readonly http: HttpClient) {}\n /** One bounded page; never polls for completion or consumes a final result. */\n async list(\n id: string,\n options: { organization: string; after?: number; limit?: number; signal?: AbortSignal },\n ): Promise<ExecutionEventsPage> {\n const after = options.after ?? 0,\n limit = options.limit ?? 100;\n if (\n !id ||\n id.length > 512 ||\n id === \".\" ||\n id === \"..\" ||\n /[\\\\/]/.test(id) ||\n [...id].some((c) => c.charCodeAt(0) < 32) ||\n !options.organization?.trim() ||\n !Number.isSafeInteger(after) ||\n after < 0 ||\n !Number.isSafeInteger(limit) ||\n limit < 1 ||\n limit > 100\n )\n throw new Error(\"Invalid execution event query\");\n const page = await this.http.requestJson<ExecutionEventsPage>(\n \"GET\",\n `/executions/${encodeURIComponent(id)}/events`,\n {\n signal: options.signal,\n query: { organization: options.organization, after: String(after), limit: String(limit) },\n },\n );\n if (\n page.executionResultId !== id ||\n !Array.isArray(page.events) ||\n page.events.length > limit ||\n !Number.isSafeInteger(page.lastSequence) ||\n page.lastSequence < 0 ||\n typeof page.truncated !== \"boolean\"\n )\n throw new ReviewEventVerificationError(\"payload\");\n const events = page.events.map((value) => parseExecutionEventCallback(value));\n if (\n events.some(\n (event, i) =>\n !(\"sequence\" in event) ||\n event.executionResultId !== id ||\n event.organization !== options.organization ||\n event.sequence <= (i ? (events[i - 1] as ExecutionNodeEvent).sequence : after) ||\n event.sequence > page.lastSequence,\n )\n )\n throw new ReviewEventVerificationError(\"payload\");\n if (\n page.nextAfter !== null &&\n (!Number.isSafeInteger(page.nextAfter) ||\n page.nextAfter <= after ||\n page.nextAfter !== (events.at(-1) as ExecutionNodeEvent | undefined)?.sequence)\n )\n throw new ReviewEventVerificationError(\"payload\");\n return { ...page, events: events as ExecutionNodeEvent[] };\n }\n}\n","import { createHmac, timingSafeEqual } from \"node:crypto\";\n\nexport const REVIEW_EVENT_TYPES = [\n \"execution.awaiting_review\",\n \"execution.review_done\",\n \"execution.review_closed\",\n \"execution.review_expired\",\n] as const;\nexport type ReviewEventType = (typeof REVIEW_EVENT_TYPES)[number];\n\n/** Notification only. Never a final result or an instruction to resume a run. */\nexport interface ReviewEventCallback {\n schemaVersion: 1;\n eventId: string;\n type: ReviewEventType;\n organization: string;\n executionResultId: string;\n reviewId: string;\n /** Broker publication time, not the time of the underlying business action. */\n publishedAt: string;\n flowId?: string;\n flowVersion?: number;\n nodeId?: string;\n documentKeys?: string[];\n reviewVersion?: number;\n decision?: \"continue\" | \"exclude\" | \"rerun\" | \"reject\";\n reviewStatus?: \"completed\" | \"rejected\" | \"failed\";\n}\n\nexport class ReviewEventVerificationError extends Error {\n constructor(public readonly reason: \"signature\" | \"timestamp\" | \"payload\" | \"organization\") {\n super(`Invalid review event ${reason}`);\n this.name = \"ReviewEventVerificationError\";\n }\n}\n\n/** Validate a Consumer callback and drop fields outside the public metadata contract. */\nexport function parseReviewEventCallback(value: unknown): ReviewEventCallback {\n const fail = (): never => {\n throw new ReviewEventVerificationError(\"payload\");\n };\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return fail();\n const raw = value as Record<string, unknown>;\n const text = (key: string): string => {\n const v = raw[key];\n if (\n typeof v !== \"string\" ||\n !v.trim() ||\n v.length > 512 ||\n [...v].some((char) => char.charCodeAt(0) < 32)\n )\n return fail();\n return v;\n };\n if (raw.schemaVersion !== 1 || !REVIEW_EVENT_TYPES.includes(raw.type as ReviewEventType))\n return fail();\n const event: ReviewEventCallback = {\n schemaVersion: 1,\n eventId: text(\"eventId\"),\n type: raw.type as ReviewEventType,\n organization: text(\"organization\"),\n executionResultId: text(\"executionResultId\"),\n reviewId: text(\"reviewId\"),\n publishedAt: text(\"publishedAt\"),\n };\n if (!Number.isFinite(Date.parse(event.publishedAt))) return fail();\n for (const key of [\"flowId\", \"nodeId\"] as const)\n if (raw[key] !== undefined) event[key] = text(key);\n for (const key of [\"flowVersion\", \"reviewVersion\"] as const) {\n if (raw[key] === undefined) continue;\n if (!Number.isSafeInteger(raw[key]) || Number(raw[key]) < 1) return fail();\n event[key] = Number(raw[key]);\n }\n if (raw.documentKeys !== undefined) {\n if (\n !Array.isArray(raw.documentKeys) ||\n raw.documentKeys.length > 1000 ||\n raw.documentKeys.some((v) => typeof v !== \"string\" || !v || v.length > 512)\n )\n return fail();\n event.documentKeys = raw.documentKeys as string[];\n }\n if (raw.decision !== undefined) {\n if (![\"continue\", \"exclude\", \"rerun\", \"reject\"].includes(String(raw.decision))) return fail();\n event.decision = raw.decision as ReviewEventCallback[\"decision\"];\n }\n if (raw.reviewStatus !== undefined) {\n if (![\"completed\", \"rejected\", \"failed\"].includes(String(raw.reviewStatus))) return fail();\n event.reviewStatus = raw.reviewStatus as ReviewEventCallback[\"reviewStatus\"];\n }\n if (event.type === \"execution.review_done\" && (!event.decision || !event.reviewVersion))\n return fail();\n if (event.type === \"execution.review_closed\" && !event.reviewStatus) return fail();\n return event;\n}\n\n/** Server-only: verify the exact raw HTTP body before parsing or acknowledging it. */\nexport function verifyReviewEventCallback(options: {\n body: string;\n signature: string | null;\n timestamp: string | null;\n secret: string;\n organization?: string;\n nowMs?: number;\n toleranceSeconds?: number;\n}): ReviewEventCallback {\n const { body, signature, timestamp, secret } = options;\n if (!timestamp || !/^\\d{10,13}$/.test(timestamp))\n throw new ReviewEventVerificationError(\"timestamp\");\n const age = Math.abs((options.nowMs ?? Date.now()) / 1000 - Number(timestamp));\n if (age > (options.toleranceSeconds ?? 300)) throw new ReviewEventVerificationError(\"timestamp\");\n if (secret.length < 32 || !signature || !/^v1=[a-f0-9]{64}$/.test(signature))\n throw new ReviewEventVerificationError(\"signature\");\n const expected = createHmac(\"sha256\", secret).update(`${timestamp}.${body}`).digest();\n if (!timingSafeEqual(expected, Buffer.from(signature.slice(3), \"hex\")))\n throw new ReviewEventVerificationError(\"signature\");\n let value: unknown;\n try {\n value = JSON.parse(body);\n } catch {\n throw new ReviewEventVerificationError(\"payload\");\n }\n const event = parseReviewEventCallback(value);\n if (options.organization !== undefined && event.organization !== options.organization)\n throw new ReviewEventVerificationError(\"organization\");\n return event;\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\nimport type { FraudDetectionError, FraudDetectionResult } from \"./types.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n /** Public API business code; `code` retains the SDK's existing error category. */\n readonly apiCode?: string;\n readonly reviewConflict?: {\n version: number | null;\n submittedBy: string | null;\n submittedAt: string | null;\n };\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 DocmanaPayloadTooLargeError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"payload_too_large\" });\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 DocmanaFraudDetectionError extends DocmanaError {\n readonly jobId: string;\n readonly error?: FraudDetectionError;\n readonly result: FraudDetectionResult;\n constructor(message: string, result: FraudDetectionResult) {\n super(message, { code: \"fraud_detection_failed\" });\n this.jobId = result.jobId;\n this.error = result.error;\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 class DocmanaServiceUnavailableError 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: \"service_unavailable\" });\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 413:\n return new DocmanaPayloadTooLargeError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n case 503:\n return new DocmanaServiceUnavailableError(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 /** Conditional document reads can legitimately return 304 or 416. */\n acceptStatuses?: readonly number[];\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 && !options.acceptStatuses?.includes(res.status)) {\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n const message = await this.extractMessage(res);\n const error = errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n const data = (await res\n .clone()\n .json()\n .catch(() => null)) as {\n code?: unknown;\n details?: { version?: unknown; submittedBy?: unknown; submittedAt?: unknown };\n } | null;\n if (typeof data?.code === \"string\" && /^[A-Za-z][A-Za-z0-9_]{0,99}$/.test(data.code))\n Object.defineProperty(error, \"apiCode\", { value: data.code, enumerable: true });\n if (res.status === 409 && data?.details)\n Object.defineProperty(error, \"reviewConflict\", {\n value: {\n version: Number.isInteger(data.details.version) ? data.details.version : null,\n submittedBy:\n typeof data.details.submittedBy === \"string\"\n ? data.details.submittedBy.slice(0, 200)\n : null,\n submittedAt:\n typeof data.details.submittedAt === \"string\"\n ? data.details.submittedAt.slice(0, 40)\n : null,\n },\n enumerable: true,\n });\n throw error;\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 { openAsBlob } from \"node:fs\";\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 filename = basename(path);\n const contentType = contentTypeFor(filename);\n const data = await openAsBlob(path, { type: contentType });\n return { data, filename, contentType };\n }\n if (isNamedFileInput(input)) {\n const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);\n const contentType = input.contentType ?? contentTypeFor(input.filename);\n return {\n data: new Blob([toBlobBytes(bytes)], { type: contentType }),\n filename: input.filename,\n contentType,\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 { DocmanaAbortError, DocmanaServiceUnavailableError } from \"../errors.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nconst MAX_ATTEMPTS = 2;\nconst MAX_RETRY_DELAY_MS = 30_000;\n\nexport async function requestMultipartJson<T>(\n http: HttpClient,\n path: string,\n createForm: () => FormData,\n signal?: AbortSignal,\n): Promise<T> {\n for (let attempt = 1; ; attempt += 1) {\n try {\n return await http.requestJson<T>(\"POST\", path, {\n body: createForm(),\n signal,\n });\n } catch (error) {\n if (\n !(error instanceof DocmanaServiceUnavailableError) ||\n error.retryAfterMs === undefined ||\n attempt >= MAX_ATTEMPTS\n ) {\n throw error;\n }\n await waitForRetry(Math.min(error.retryAfterMs, MAX_RETRY_DELAY_MS), signal);\n }\n }\n}\n\nasync function waitForRetry(delayMs: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) throw new DocmanaAbortError(\"Upload retry aborted\");\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (error?: Error) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n if (error) reject(error);\n else resolve();\n };\n const onAbort = () => finish(new DocmanaAbortError(\"Upload retry aborted\"));\n const timer = setTimeout(() => finish(), delayMs);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\nimport { requestMultipartJson } from \"./multipart-request.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 path = `/flows/${flowId}/execute-async`;\n return requestMultipartJson<{ executionResultId: string; fileIds: string[] }>(\n http,\n organization ? `${path}?organization=${encodeURIComponent(organization)}` : path,\n () => {\n const form = new FormData();\n for (const part of parts) form.append(\"files\", part.data, part.filename);\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 return form;\n },\n signal,\n );\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\nimport type {\n DocmanaExecutionResult,\n RunPartialFlowAsyncParams,\n RunPartialFlowParams,\n} from \"../types.js\";\nimport { requestMultipartJson } from \"./multipart-request.js\";\n\nfunction buildRequest(\n flowId: string,\n parts: ResolvedPart[],\n params: RunPartialFlowParams,\n asyncMode: boolean,\n): { path: string; createForm: () => FormData } {\n const suffix = asyncMode ? \"partial-execute-async\" : \"partial-execute\";\n const path = `/flows/${flowId}/${suffix}`;\n return {\n path: params.organization\n ? `${path}?organization=${encodeURIComponent(params.organization)}`\n : path,\n createForm: () => {\n const form = new FormData();\n for (const part of parts) form.append(\"files\", part.data, part.filename);\n if (params.context !== undefined) form.append(\"jsonContext\", JSON.stringify(params.context));\n form.append(\"executionScope\", params.executionScope);\n if (params.flowVersion !== undefined) form.append(\"flowVersion\", params.flowVersion);\n for (const name of params.classificationNodeNames ?? []) {\n form.append(\"classificationNodeNames\", name);\n }\n if (asyncMode && \"callbackUrl\" in params && params.callbackUrl !== undefined) {\n form.append(\"callbackUrl\", params.callbackUrl);\n }\n if (asyncMode && \"language\" in params && params.language !== undefined) {\n form.append(\"language\", params.language);\n }\n return form;\n },\n };\n}\n\nexport async function runPartialFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n params: RunPartialFlowParams,\n signal?: AbortSignal,\n): Promise<DocmanaExecutionResult> {\n const { path, createForm } = buildRequest(flowId, parts, params, false);\n return requestMultipartJson<DocmanaExecutionResult>(http, path, createForm, signal);\n}\n\nexport async function runPartialFlowAsync(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n params: RunPartialFlowAsyncParams,\n signal?: AbortSignal,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const { path, createForm } = buildRequest(flowId, parts, params, true);\n return requestMultipartJson<{ executionResultId: string; fileIds: string[] }>(\n http,\n path,\n createForm,\n 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, isTerminalStatus } from \"../status.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n organization?: string,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, {\n query: organization ? { organization } : undefined,\n signal,\n });\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 // Diagnostic (execution-hang): opt-in via DOCMANA_SDK_DEBUG. Shows the raw status\n // string returned by the edge vs the normalized value + terminal decision, so we\n // can see why a poll never terminates (e.g. a non-terminal status looping forever).\n if (typeof process !== \"undefined\" && process.env?.DOCMANA_SDK_DEBUG) {\n console.log(\n `[docmana-sdk][status-diag] execution=${executionResultId} rawEdgeStatus=${JSON.stringify(\n body.status,\n )} normalized=${normalizedBody.status} terminal=${isTerminalStatus(normalizedBody.status)}`,\n );\n }\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 organization?: string,\n): Promise<DocmanaExecutionResult> {\n const query: Record<string, string> = {};\n if (language) query.language = language;\n if (organization) query.organization = organization;\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: Object.keys(query).length > 0 ? query : undefined,\n signal,\n });\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport { resolveInputs } from \"../files/resolve-input.js\";\nimport type {\n FraudDetectionAccepted,\n FraudDetectionParams,\n FraudDetectionResult,\n FraudDetectionStatusResult,\n} from \"../types.js\";\nimport { normalizeStatus } from \"../status.js\";\nimport { requestMultipartJson } from \"./multipart-request.js\";\n\nexport async function startFraudDetection(\n http: HttpClient,\n params: FraudDetectionParams,\n signal?: AbortSignal,\n): Promise<FraudDetectionAccepted> {\n if (params.file !== undefined) {\n const [part] = await resolveInputs({ files: [params.file] });\n return requestMultipartJson(\n http,\n \"/fraud-detections\",\n () => {\n const form = new FormData();\n form.append(\"file\", part.data, part.filename);\n if (params.analystContext !== undefined) {\n form.append(\"analystContext\", params.analystContext);\n }\n return form;\n },\n signal,\n );\n }\n\n return http.requestJson(\"POST\", \"/fraud-detections\", {\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n documentUrl: params.documentUrl,\n filename: params.filename,\n ...(params.analystContext === undefined ? {} : { analystContext: params.analystContext }),\n }),\n signal,\n });\n}\n\nexport async function getFraudDetectionStatus(\n http: HttpClient,\n jobId: string,\n signal?: AbortSignal,\n organization?: string,\n): Promise<FraudDetectionStatusResult> {\n void organization;\n const res = await http.requestRaw(\n \"GET\",\n `/fraud-detections/${encodeURIComponent(jobId)}/status`,\n {\n signal,\n },\n );\n const text = await res.text();\n const body = text\n ? (JSON.parse(text) as FraudDetectionStatusResult)\n : ({ jobId, status: \"\" } as unknown as FraudDetectionStatusResult);\n const normalized = {\n ...body,\n status: normalizeStatus(body.status),\n } as FraudDetectionStatusResult;\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? normalized : { ...normalized, pollAfterMs };\n}\n\nexport async function getFraudDetectionResult(\n http: HttpClient,\n jobId: string,\n signal?: AbortSignal,\n organization?: string,\n): Promise<FraudDetectionResult> {\n void organization;\n return http.requestJson(\"GET\", `/fraud-detections/${encodeURIComponent(jobId)}/result`, {\n signal,\n });\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 { 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; organization?: string } = {},\n): Promise<OrganizationDocumentsPayload> {\n const query: Record<string, string> = {};\n if (options.prefix) query.prefix = options.prefix;\n if (options.organization) query.organization = options.organization;\n const result = await http.requestJson<unknown>(\"GET\", \"/organization-documents\", {\n query: Object.keys(query).length ? query : 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 organization?: string,\n): Promise<DownloadedOrganizationDocument> {\n const query: Record<string, string> = { path };\n if (organization) query.organization = organization;\n const result = await http.requestBytes(\"GET\", \"/organization-documents/download\", {\n query,\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 organization?: string,\n): Promise<DownloadedOrganizationDocument[]> {\n return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path, organization)));\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 shouldRetryError?: (error: unknown) => boolean;\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 const retryAfterMs =\n err instanceof DocmanaRateLimitError\n ? (err.retryAfterMs ?? opts.intervalMs)\n : opts.shouldRetryError?.(err)\n ? fullJitterDelay(opts.intervalMs, opts.maxIntervalMs, fallbackAttempt, random)\n : undefined;\n if (retryAfterMs === undefined) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n fallbackAttempt += 1;\n await sleep(retryAfterMs);\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 { FormulaAuthoring } from \"./authoring.js\";\nimport { Reviews } from \"./reviews.js\";\nimport { ExecutionEvents } from \"./execution-events.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n AccessibleOrganization,\n DocmanaConfig,\n DocmanaExecutionResult,\n DownloadedOrganizationDocument,\n ExecutionStatus,\n FraudDetectionAccepted,\n FraudDetectionAsyncOptions,\n FraudDetectionOptions,\n FraudDetectionParams,\n FraudDetectionResult,\n FraudDetectionStatusResult,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n RunPartialFlowAsyncParams,\n RunPartialFlowOptions,\n RunPartialFlowParams,\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 {\n runPartialFlow as runPartialFlowApi,\n runPartialFlowAsync as runPartialFlowAsyncApi,\n} from \"./api/run-partial-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport {\n getFraudDetectionResult as getFraudDetectionResultApi,\n getFraudDetectionStatus as getFraudDetectionStatusApi,\n startFraudDetection as startFraudDetectionApi,\n} from \"./api/fraud-detection.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 {\n DocmanaError,\n DocmanaExecutionError,\n DocmanaFraudDetectionError,\n DocmanaRateLimitError,\n} from \"./errors.js\";\nimport { isFailedStatus, isTerminalStatus } from \"./status.js\";\n\nexport class Docmana {\n readonly authoring: FormulaAuthoring;\n readonly reviews: Reviews;\n readonly executionEvents: ExecutionEvents;\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 this.authoring = new FormulaAuthoring(this.http);\n this.reviews = new Reviews(this.http);\n this.executionEvents = new ExecutionEvents(this.http);\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 detectFraudAsync(\n params: FraudDetectionParams,\n options: FraudDetectionAsyncOptions = {},\n ): Promise<FraudDetectionAccepted> {\n return startFraudDetectionApi(this.http, params, options.signal);\n }\n\n async getFraudDetectionStatus(\n jobId: string,\n signal?: AbortSignal,\n /** @deprecated Fraud jobs are not organization-scoped. */\n organization?: string,\n ): Promise<FraudDetectionStatusResult> {\n return getFraudDetectionStatusApi(this.http, jobId, signal, organization);\n }\n\n async getFraudDetectionResult(\n jobId: string,\n signal?: AbortSignal,\n /** @deprecated Fraud jobs are not organization-scoped. */\n organization?: string,\n ): Promise<FraudDetectionResult> {\n return getFraudDetectionResultApi(this.http, jobId, signal, organization);\n }\n\n async detectFraud(\n params: FraudDetectionParams,\n options: FraudDetectionOptions = {},\n ): Promise<FraudDetectionResult> {\n const { jobId } = await this.detectFraudAsync(params, { signal: options.signal });\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.getFraudDetectionStatus(jobId, options.signal);\n const nextPollAfterMs = isTerminalStatus(statusResult.status)\n ? undefined\n : statusResult.pollAfterMs;\n options.onPoll?.({\n jobId,\n status: statusResult.status,\n attempt,\n elapsedMs: Date.now() - startedAt,\n nextPollAfterMs,\n });\n return { status: statusResult.status, nextDelayMs: nextPollAfterMs };\n } catch (err) {\n if (err instanceof DocmanaRateLimitError) {\n options.onRateLimit?.({\n jobId,\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 shouldRetryError: isTransientPollingError,\n });\n const result = await this.getFraudDetectionResult(jobId, options.signal);\n if (isFailedStatus(result.status)) {\n throw new DocmanaFraudDetectionError(\n result.error?.message ?? `Fraud detection ${jobId} failed`,\n result,\n );\n }\n return result;\n }\n\n async runPartialFlow(\n flowId: string,\n params: RunPartialFlowParams,\n options: RunPartialFlowOptions = {},\n ): Promise<DocmanaExecutionResult> {\n const parts = await resolveInputs(params);\n return runPartialFlowApi(this.http, flowId, parts, params, options.signal);\n }\n\n async runPartialFlowAsync(\n flowId: string,\n params: RunPartialFlowAsyncParams,\n options: RunPartialFlowOptions = {},\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(params);\n return runPartialFlowAsyncApi(this.http, flowId, parts, params, options.signal);\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n organization?: string,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal, organization);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n organization?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language, organization);\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(\n executionResultId,\n options.signal,\n params.organization,\n );\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(\n executionResultId,\n options.signal,\n params.language,\n params.organization,\n );\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; organization?: string } = {},\n ): Promise<OrganizationDocumentsPayload> {\n return listOrganizationDocumentsApi(this.http, options);\n }\n\n async downloadOrganizationDocument(\n path: string,\n organization?: string,\n ): Promise<DownloadedOrganizationDocument> {\n return downloadOrganizationDocumentApi(this.http, path, organization);\n }\n\n async downloadOrganizationDocuments(\n paths: string[],\n organization?: string,\n ): Promise<DownloadedOrganizationDocument[]> {\n return downloadOrganizationDocumentsApi(this.http, paths, organization);\n }\n\n private isTerminalStatus(status: string): boolean {\n return isTerminalStatus(status);\n }\n}\n\nfunction isTransientPollingError(error: unknown): boolean {\n if (error instanceof DocmanaRateLimitError) return false;\n if (error instanceof DocmanaError) {\n return error.status !== undefined && error.status >= 500;\n }\n return error instanceof TypeError;\n}\n","export class CliUsageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CliUsageError\";\n }\n}\n\nexport class CliSilentError extends Error {\n readonly exitCode: number;\n\n constructor(exitCode = 1) {\n super();\n this.name = \"CliSilentError\";\n this.exitCode = exitCode;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { DocmanaError, DocmanaExecutionError } from \"../sdk/errors.js\";\nimport { isFailedStatus } from \"../sdk/status.js\";\nimport type {\n AccessibleOrganization,\n DocmanaDocumentResult,\n DocmanaExecutionResult,\n DocmanaNodeResult,\n FlowListItem,\n OrganizationDocument,\n} from \"../sdk/types.js\";\n\nexport function formatFlowList(flows: FlowListItem[]): string {\n if (flows.length === 0) return \"No flows found.\\n\";\n const lines = [\"Docmana flows\"];\n for (const flow of flows) {\n const id = flow.id || \"(no id)\";\n const name = flow.name || \"(no name)\";\n const state = flow.state ? ` [${flow.state}]` : \"\";\n lines.push(`- ${id} - ${name}${state}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatOrganizationList(organizations: AccessibleOrganization[]): string {\n if (organizations.length === 0) return \"No organizations found.\\n\";\n const lines = [\"Docmana organizations\"];\n for (const organization of organizations) {\n const id = organization.id || \"(no id)\";\n const name = organization.name || \"(no name)\";\n lines.push(`- ${id} - ${name}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatOrganizationDocumentList(documents: OrganizationDocument[]): string {\n if (documents.length === 0) return \"No organization documents found.\\n\";\n const lines = [\"Docmana organization documents\"];\n for (const document of documents) {\n const contentType = document.contentType ? ` [${document.contentType}]` : \"\";\n lines.push(`- ${document.path} - ${document.name} (${document.size} bytes)${contentType}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatHumanResult(result: DocmanaExecutionResult): string {\n const lines = [\"Docmana flow completed\", `Status: ${String(result.status ?? \"Unknown\")}`];\n const executionId = result.executionId;\n if (executionId) lines.push(`Execution id: ${String(executionId)}`);\n if (result.documents && result.documents.mappings) {\n lines.push(`Results: ${result.documents.mappings.length}`);\n }\n if (result.errors && result.errors.length > 0) {\n lines.push(`Errors: ${result.errors.length}`);\n }\n\n const previewData: Record<string, unknown> = {};\n if (result.documents && result.documents.mappings) {\n for (const mapping of result.documents.mappings.slice(0, 3)) {\n const docKey = mapping.reference;\n previewData[mapping.name] = result.documents[docKey];\n }\n }\n\n const preview = formatResultsPreview(previewData);\n if (preview) lines.push(\"\", \"Result preview:\", preview);\n lines.push(\"\", \"Use --json to print the complete result payload.\");\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatRuntimeError(err: unknown): string {\n return formatHumanError(err);\n}\n\nexport function formatHumanError(err: unknown): string {\n if (err instanceof DocmanaExecutionError) {\n const lines = [`Error: ${err.message}`];\n\n if (err.errors && err.errors.length > 0) {\n lines.push(\"Global errors:\");\n for (const e of err.errors) {\n lines.push(` - ${formatSingleError(e)}`);\n }\n }\n\n const result = err.result;\n if (result?.documents?.mappings && result.documents.mappings.length > 0) {\n lines.push(\"Document execution results:\");\n for (const mapping of result.documents.mappings) {\n const docKey = mapping.reference;\n const docName = mapping.name;\n const docResult = result.documents[docKey] as DocmanaDocumentResult | undefined;\n\n if (!docResult) {\n lines.push(` - Document: ${docName} (Status: Unknown)`);\n continue;\n }\n\n const status = docResult.status || \"Unknown\";\n const nodes: DocmanaNodeResult[] = [];\n if (docResult.classifications) nodes.push(...Object.values(docResult.classifications));\n if (docResult.metadataExtraction) nodes.push(docResult.metadataExtraction);\n if (docResult.extractions) nodes.push(...Object.values(docResult.extractions));\n if (docResult.validations) nodes.push(...Object.values(docResult.validations));\n\n const hasNodeFailures = nodes.some(\n (n) => isFailedStatus(n.status) || (n.errors && n.errors.length > 0),\n );\n\n lines.push(` - Document: ${docName} (Status: ${status})`);\n if (!isFailedStatus(docResult.status) && !hasNodeFailures) continue;\n\n if (docResult.classifications) {\n for (const [nodeName, node] of Object.entries(docResult.classifications)) {\n if (node.errors && node.errors.length > 0) {\n lines.push(` Classification: ${nodeName} (Status: ${node.status})`);\n for (const nodeErr of node.errors) lines.push(` - ${nodeErr}`);\n }\n }\n }\n if (docResult.metadataExtraction?.errors?.length) {\n lines.push(` MetadataExtraction: (Status: ${docResult.metadataExtraction.status})`);\n for (const nodeErr of docResult.metadataExtraction.errors) {\n lines.push(` - ${nodeErr}`);\n }\n }\n if (docResult.extractions) {\n for (const [nodeName, node] of Object.entries(docResult.extractions)) {\n if (isFailedStatus(node.status) || (node.errors && node.errors.length > 0)) {\n lines.push(` Extraction: ${nodeName} (Status: ${node.status})`);\n if (node.errors) {\n for (const nodeErr of node.errors) lines.push(` - ${nodeErr}`);\n }\n }\n }\n }\n if (docResult.validations) {\n for (const [nodeName, node] of Object.entries(docResult.validations)) {\n if (isFailedStatus(node.status) || (node.errors && node.errors.length > 0)) {\n lines.push(` Validation: ${nodeName} (Status: ${node.status})`);\n if (node.errors) {\n for (const nodeErr of node.errors) lines.push(` - ${nodeErr}`);\n }\n }\n }\n }\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n if (err instanceof DocmanaError) {\n return `Error: ${err.message} (Code: ${err.code})`;\n }\n\n if (err instanceof Error) {\n return `Error: ${err.message}`;\n }\n\n return `Error: ${String(err)}`;\n}\n\nfunction formatResultsPreview(results: unknown): string | undefined {\n if (!results) return undefined;\n const preview = JSON.stringify(results, null, 2);\n if (!preview) return undefined;\n return preview.length > 2_000 ? `${preview.slice(0, 2_000)}\\n...` : preview;\n}\n\nfunction formatSingleError(e: unknown): string {\n if (typeof e === \"string\") return e;\n if (e && typeof e === \"object\") {\n const obj = e as Record<string, unknown>;\n if (typeof obj.msg === \"string\") return obj.msg;\n if (typeof obj.message === \"string\") return obj.message;\n if (typeof obj.error === \"string\") return obj.error;\n try {\n return JSON.stringify(e);\n } catch {\n return String(e);\n }\n }\n return String(e);\n}\n","import type {\n AccessibleOrganization,\n DownloadedOrganizationDocument,\n DocmanaConfig,\n DocmanaExecutionResult,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowOptions,\n RunFlowParams,\n} from \"../sdk/types.js\";\n\nexport type Env = Record<string, string | undefined>;\nexport type Write = (text: string) => void;\n\nexport interface CliIO {\n stdout: Write;\n stderr: Write;\n}\n\nexport interface DocmanaClient {\n runFlow(\n flowId: string,\n params: RunFlowParams,\n options?: RunFlowOptions,\n ): Promise<DocmanaExecutionResult>;\n listFlows(): Promise<FlowListItem[]>;\n listOrganizations(): Promise<AccessibleOrganization[]>;\n getFlowMetadata(flowId: string): Promise<FlowMetadata>;\n getFlowDefinition(flowId: string): Promise<FlowDefinition>;\n listOrganizationDocuments(options?: { prefix?: string }): Promise<OrganizationDocumentsPayload>;\n downloadOrganizationDocument(path: string): Promise<DownloadedOrganizationDocument>;\n downloadOrganizationDocuments(paths: string[]): Promise<DownloadedOrganizationDocument[]>;\n}\n\nexport type DocmanaClientFactory = (config: DocmanaConfig) => DocmanaClient;\n\nexport interface DocmanaCliConfig {\n apiBaseUrl?: string;\n tokenEndpoint?: string;\n scope?: string;\n clientId?: string;\n clientSecret?: string;\n}\n\nexport interface CliPromptOptions {\n defaultValue?: string;\n secret?: boolean;\n}\n\nexport type CliPrompt = (label: string, options?: CliPromptOptions) => Promise<string>;\n\nexport interface CliDeps {\n cwd?: string;\n prompt?: CliPrompt;\n fetch?: typeof fetch;\n}\n\nexport interface RunOptions {\n files?: string;\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n json?: boolean;\n context?: string;\n language?: string;\n draft?: boolean;\n}\n\nexport interface ListOptions {\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n json?: boolean;\n prefix?: string;\n}\n\nexport interface DownloadOptions {\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n output?: string;\n}\n\nexport interface ConfigInitOptions {\n config?: string;\n}\n\nexport interface LoginOptions {\n clientId?: string;\n clientSecret?: string;\n tokenUrl?: string;\n scope?: string;\n config?: string;\n tokenCache?: string;\n}\n\nexport const DEFAULT_CONFIG_FILE = \"docmana.config.json\";\nexport const DEFAULT_TOKEN_CACHE_FILE = \"docmana.token.json\";\n\nexport const HELP = {\n root: \"Run Docmana document-analysis flows.\",\n flow: \"Manage and run Docmana flows.\",\n organization: \"Manage Docmana organizations.\",\n organizationDocument: \"Manage organization documents.\",\n config: \"Manage Docmana CLI configuration.\",\n configInit: \"Create or update a local Docmana CLI config file.\",\n login: \"Acquire and cache a Docmana OAuth2 access token.\",\n run: \"Upload documents, run a Docmana flow, wait for completion, and print the result.\",\n list: \"List Docmana flows available to the Bearer token.\",\n metadata: \"Print Docmana flow runtime metadata as JSON.\",\n definition: \"Print Docmana flow definition as JSON.\",\n organizationList: \"List Docmana organizations available to the Bearer token.\",\n organizationDocumentList: \"List organization documents available to the Bearer token.\",\n organizationDocumentDownload: \"Download an organization document.\",\n};\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport type { TokenCache } from \"../sdk/types.js\";\nimport { CliUsageError } from \"./errors.js\";\nimport type { CliDeps, CliPrompt, CliPromptOptions, DocmanaCliConfig } from \"./types.js\";\nimport { DEFAULT_CONFIG_FILE, DEFAULT_TOKEN_CACHE_FILE } from \"./types.js\";\nimport { firstNonEmpty, getCwd } from \"./utils.js\";\n\nexport async function loadCliConfig(\n configPathOption: string | undefined,\n cwd: string,\n requireExisting: boolean,\n): Promise<DocmanaCliConfig> {\n const configPath = resolveConfigPath(configPathOption, cwd);\n if (!existsSync(configPath)) {\n if (requireExisting) throw new CliUsageError(`Config file not found: ${configPath}`);\n return {};\n }\n let raw: string;\n try {\n raw = await readFile(configPath, \"utf8\");\n } catch {\n throw new CliUsageError(`Unable to read config file: ${configPath}`);\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Config must be a JSON object\");\n }\n return normalizeCliConfig(parsed as Record<string, unknown>);\n } catch {\n throw new CliUsageError(`Invalid config file: ${configPath}`);\n }\n}\n\nexport function normalizeCliConfig(config: Record<string, unknown>): DocmanaCliConfig {\n return {\n apiBaseUrl: stringValue(config.apiBaseUrl),\n tokenEndpoint: stringValue(config.tokenEndpoint),\n scope: stringValue(config.scope),\n clientId: stringValue(config.clientId),\n clientSecret: stringValue(config.clientSecret),\n };\n}\n\nexport function resolveConfigPath(configPathOption: string | undefined, cwd: string): string {\n return resolve(cwd, configPathOption ?? DEFAULT_CONFIG_FILE);\n}\n\nexport function resolveTokenCachePath(\n tokenCachePathOption: string | undefined,\n cwd: string,\n): string {\n return resolve(cwd, tokenCachePathOption ?? DEFAULT_TOKEN_CACHE_FILE);\n}\n\nexport function createFileTokenCache(path: string): TokenCache {\n return {\n async read() {\n if (!existsSync(path)) return null;\n try {\n const parsed = JSON.parse(await readFile(path, \"utf8\")) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return null;\n const value = parsed as Record<string, unknown>;\n if (\n typeof value.accessToken !== \"string\" ||\n typeof value.expiresAt !== \"number\" ||\n typeof value.clientId !== \"string\" ||\n typeof value.tokenEndpoint !== \"string\" ||\n typeof value.scope !== \"string\"\n ) {\n return null;\n }\n return {\n accessToken: value.accessToken,\n expiresAt: value.expiresAt,\n clientId: value.clientId,\n tokenEndpoint: value.tokenEndpoint,\n scope: value.scope,\n };\n } catch {\n return null;\n }\n },\n async write(entry) {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(entry, null, 2)}\\n`, \"utf8\");\n },\n async clear() {\n await rm(path, { force: true });\n },\n };\n}\n\nexport async function writeCliConfig(configPath: string, config: DocmanaCliConfig): Promise<void> {\n await mkdir(dirname(configPath), { recursive: true });\n await writeFile(configPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\");\n}\n\nexport function createDefaultPrompt(): { prompt: CliPrompt; close: () => void } {\n if (!process.stdin.isTTY) {\n let index = 0;\n const linesPromise = readStdinLines();\n return {\n prompt: async (label, options = {}) => {\n process.stdout.write(formatPrompt(label, options));\n const lines = await linesPromise;\n const answer = lines[index++] ?? \"\";\n return firstNonEmpty(answer, options.defaultValue) ?? \"\";\n },\n close: () => undefined,\n };\n }\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return {\n prompt: async (label, options = {}) => {\n const answer = await rl.question(formatPrompt(label, options));\n return firstNonEmpty(answer, options.defaultValue) ?? \"\";\n },\n close: () => rl.close(),\n };\n}\n\nexport function cwdFromDeps(deps: CliDeps): string {\n return getCwd(deps);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction formatPrompt(label: string, options: CliPromptOptions): string {\n const defaultHint =\n options.defaultValue && !options.secret\n ? ` [${options.defaultValue}]`\n : options.defaultValue && options.secret\n ? \" [current value hidden]\"\n : \"\";\n return `${label}${defaultHint}: `;\n}\n\nasync function readStdinLines(): Promise<string[]> {\n let input = \"\";\n for await (const chunk of process.stdin) input += String(chunk);\n return input.split(/\\r?\\n/);\n}\n","import type { CliDeps } from \"./types.js\";\nimport { CliUsageError } from \"./errors.js\";\n\nexport function getCwd(deps: CliDeps): string {\n return deps.cwd ?? process.cwd();\n}\n\nexport function firstNonEmpty(...values: Array<string | undefined>): string | undefined {\n return values.map((value) => value?.trim()).find(Boolean);\n}\n\nexport function parseFiles(filesCsv: string | undefined): string[] {\n const files =\n filesCsv\n ?.split(\",\")\n .map((file) => file.trim())\n .filter(Boolean) ?? [];\n if (files.length === 0) {\n throw new CliUsageError(\"Missing files. Use --files <path[,path]>.\");\n }\n return files;\n}\n\nexport function formatElapsedSeconds(elapsedMs: number): string {\n return `${Math.floor(elapsedMs / 1000)}s`;\n}\n","import { DEFAULTS } from \"../../sdk/config.js\";\nimport {\n createDefaultPrompt,\n loadCliConfig,\n resolveConfigPath,\n writeCliConfig,\n} from \"../config-store.js\";\nimport { CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, ConfigInitOptions, DocmanaCliConfig } from \"../types.js\";\nimport { DEFAULT_CONFIG_FILE } from \"../types.js\";\nimport { getCwd } from \"../utils.js\";\n\nexport async function configInitCommand(\n options: ConfigInitOptions,\n io: CliIO,\n deps: CliDeps,\n): Promise<void> {\n const cwd = getCwd(deps);\n const configPath = resolveConfigPath(options.config, cwd);\n const existing = await loadCliConfig(options.config, cwd, false);\n const defaultPrompt = deps.prompt ? undefined : createDefaultPrompt();\n const prompt = deps.prompt ?? defaultPrompt?.prompt;\n if (!prompt) throw new CliUsageError(\"Unable to initialize interactive prompt\");\n\n try {\n const config: DocmanaCliConfig = {\n apiBaseUrl: await prompt(\"API base URL\", {\n defaultValue: existing.apiBaseUrl,\n }),\n tokenEndpoint: await prompt(\"OAuth2 token endpoint\", {\n defaultValue: existing.tokenEndpoint ?? DEFAULTS.tokenEndpoint,\n }),\n scope: await prompt(\"OAuth2 scope\", {\n defaultValue: existing.scope ?? DEFAULTS.scope,\n }),\n clientId: await prompt(\"Client id\", {\n defaultValue: existing.clientId,\n }),\n clientSecret: await prompt(\"Client secret\", {\n defaultValue: existing.clientSecret,\n secret: true,\n }),\n };\n\n await writeCliConfig(configPath, config);\n io.stdout(`Wrote ${configPath}\\n`);\n io.stdout(\n `Warning: ${DEFAULT_CONFIG_FILE} contains credentials and should stay ignored by Git.\\n`,\n );\n } finally {\n defaultPrompt?.close();\n }\n}\n","import { DocmanaAuthError } from \"../../sdk/errors.js\";\nimport type { TokenCache, TokenCacheEntry } from \"../../sdk/types.js\";\n\nconst SAFETY_MARGIN_MS = 60_000;\n\nexport interface TokenManagerOptions {\n clientId: string;\n clientSecret: string;\n tokenEndpoint: string;\n scope: string;\n fetchImpl: typeof fetch;\n tokenCache?: TokenCache;\n}\n\nexport class TokenManager {\n private token: string | null = null;\n private expiresAt = 0;\n private inflight: Promise<string> | null = null;\n\n constructor(private readonly opts: TokenManagerOptions) {}\n\n invalidate(): void {\n this.token = null;\n this.expiresAt = 0;\n void this.opts.tokenCache?.clear().catch(() => undefined);\n }\n\n async getToken(): Promise<string> {\n if (this.token && Date.now() < this.expiresAt) return this.token;\n const cached = await this.readCachedToken();\n if (cached) return cached;\n if (this.inflight) return this.inflight;\n this.inflight = this.acquire().finally(() => {\n this.inflight = null;\n });\n return this.inflight;\n }\n\n private async acquire(): Promise<string> {\n const body = new URLSearchParams({\n grant_type: \"client_credentials\",\n client_id: this.opts.clientId,\n client_secret: this.opts.clientSecret,\n scope: this.opts.scope,\n });\n const res = await this.opts.fetchImpl(this.opts.tokenEndpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\n body: body.toString(),\n });\n if (!res.ok) {\n // Do NOT include the response body verbatim — avoid leaking secrets/echoes.\n throw new DocmanaAuthError(\"Failed to acquire Docmana access token\", { status: res.status });\n }\n const json = (await res.json()) as Partial<{ access_token: string; expires_in: number }>;\n if (\n typeof json.access_token !== \"string\" ||\n json.access_token.length === 0 ||\n typeof json.expires_in !== \"number\" ||\n !Number.isFinite(json.expires_in)\n ) {\n throw new DocmanaAuthError(\"Malformed token response from Docmana CIAM\", {\n status: res.status,\n });\n }\n this.token = json.access_token;\n this.expiresAt = Date.now() + json.expires_in * 1000 - SAFETY_MARGIN_MS;\n await this.writeCachedToken().catch(() => undefined);\n return this.token;\n }\n\n private async readCachedToken(): Promise<string | null> {\n if (!this.opts.tokenCache) return null;\n let entry: TokenCacheEntry | null;\n try {\n entry = await this.opts.tokenCache.read();\n } catch {\n return null;\n }\n if (!entry) return null;\n if (\n entry.clientId !== this.opts.clientId ||\n entry.tokenEndpoint !== this.opts.tokenEndpoint ||\n entry.scope !== this.opts.scope ||\n Date.now() >= entry.expiresAt\n ) {\n await this.opts.tokenCache.clear().catch(() => undefined);\n return null;\n }\n this.token = entry.accessToken;\n this.expiresAt = entry.expiresAt;\n return this.token;\n }\n\n private async writeCachedToken(): Promise<void> {\n if (!this.opts.tokenCache || !this.token) return;\n await this.opts.tokenCache.write({\n accessToken: this.token,\n expiresAt: this.expiresAt,\n clientId: this.opts.clientId,\n tokenEndpoint: this.opts.tokenEndpoint,\n scope: this.opts.scope,\n });\n }\n}\n","import { DEFAULTS } from \"../../sdk/config.js\";\nimport type { TokenCache } from \"../../sdk/types.js\";\nimport { createFileTokenCache, loadCliConfig, resolveTokenCachePath } from \"../config-store.js\";\nimport { CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaCliConfig, Env } from \"../types.js\";\nimport { firstNonEmpty, getCwd } from \"../utils.js\";\nimport { TokenManager } from \"./token-manager.js\";\n\nexport async function resolveFlowAccessToken(\n env: Env,\n cliConfig: DocmanaCliConfig,\n tokenCache: TokenCache,\n deps: CliDeps,\n io: CliIO,\n): Promise<string> {\n const cached = await readFreshCachedToken(tokenCache);\n if (cached) return cached;\n\n const clientId = firstNonEmpty(env.DOCMANA_CLIENT_ID, cliConfig.clientId);\n const clientSecret = firstNonEmpty(env.DOCMANA_CLIENT_SECRET, cliConfig.clientSecret);\n if (!clientId || !clientSecret) {\n throw new CliUsageError(\n \"Missing access token. Use --access-token, DOCMANA_ACCESS_TOKEN, docmana login, or configure OAuth credentials.\",\n );\n }\n\n const tokenManager = new TokenManager({\n clientId,\n clientSecret,\n tokenEndpoint:\n firstNonEmpty(env.DOCMANA_TOKEN_URL, cliConfig.tokenEndpoint) ?? DEFAULTS.tokenEndpoint,\n scope: firstNonEmpty(env.DOCMANA_SCOPE, cliConfig.scope) ?? DEFAULTS.scope,\n fetchImpl: deps.fetch ?? fetch,\n tokenCache,\n });\n const token = await tokenManager.getToken();\n io.stderr(\"Generated new access token and updated the token cache.\\n\");\n return token;\n}\n\nexport async function readFreshCachedToken(tokenCache: TokenCache): Promise<string | undefined> {\n const cached = await tokenCache.read().catch(() => null);\n if (!cached || Date.now() >= cached.expiresAt) return undefined;\n return cached.accessToken;\n}\n\nexport async function resolveAuthConfig(\n options: {\n clientId?: string;\n clientSecret?: string;\n tokenUrl?: string;\n scope?: string;\n config?: string;\n },\n env: Env,\n deps: CliDeps,\n): Promise<{ clientId: string; clientSecret: string; tokenEndpoint: string; scope: string }> {\n const cliConfig = await loadCliConfig(options.config, getCwd(deps), Boolean(options.config));\n const clientId = firstNonEmpty(options.clientId, env.DOCMANA_CLIENT_ID, cliConfig.clientId);\n const clientSecret = firstNonEmpty(\n options.clientSecret,\n env.DOCMANA_CLIENT_SECRET,\n cliConfig.clientSecret,\n );\n const tokenEndpoint =\n firstNonEmpty(options.tokenUrl, env.DOCMANA_TOKEN_URL, cliConfig.tokenEndpoint) ??\n DEFAULTS.tokenEndpoint;\n const scope = firstNonEmpty(options.scope, env.DOCMANA_SCOPE, cliConfig.scope) ?? DEFAULTS.scope;\n\n if (!clientId) {\n throw new CliUsageError(\"Missing client id. Use --client-id or DOCMANA_CLIENT_ID.\");\n }\n if (!clientSecret) {\n throw new CliUsageError(\"Missing client secret. Use --client-secret or DOCMANA_CLIENT_SECRET.\");\n }\n\n return { clientId, clientSecret, tokenEndpoint, scope };\n}\n\nexport function tokenCacheForPath(pathOption: string | undefined, deps: CliDeps): TokenCache {\n return createFileTokenCache(resolveTokenCachePath(pathOption, getCwd(deps)));\n}\n","import type { DocmanaConfig } from \"../../sdk/types.js\";\nimport { createFileTokenCache, loadCliConfig, resolveTokenCachePath } from \"../config-store.js\";\nimport { CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClient, DocmanaClientFactory, Env } from \"../types.js\";\nimport { firstNonEmpty, getCwd } from \"../utils.js\";\nimport { resolveFlowAccessToken } from \"../auth/access-token.js\";\n\nexport async function resolveApiClient(\n options: {\n apiUrl?: string;\n accessToken?: string;\n config?: string;\n tokenCache?: string;\n },\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<DocmanaClient> {\n const cliConfig = await loadCliConfig(options.config, getCwd(deps), Boolean(options.config));\n const apiBaseUrl = firstNonEmpty(options.apiUrl, env.DOCMANA_API_URL, cliConfig.apiBaseUrl);\n\n if (!apiBaseUrl) {\n throw new CliUsageError(\"Missing API base URL. Use --api-url or DOCMANA_API_URL.\");\n }\n\n const tokenCache = createFileTokenCache(resolveTokenCachePath(options.tokenCache, getCwd(deps)));\n const accessToken =\n firstNonEmpty(options.accessToken, env.DOCMANA_ACCESS_TOKEN) ??\n (await resolveFlowAccessToken(env, cliConfig, tokenCache, deps, io));\n\n return clientFactory({ apiBaseUrl, accessToken } satisfies DocmanaConfig);\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function flowDefinitionCommand(\n flowId: string,\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const definition = await client.getFlowDefinition(flowId);\n io.stdout(`${JSON.stringify(definition, null, 2)}\\n`);\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatFlowList } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function listFlowsCommand(\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const flows = await client.listFlows();\n if (options.json) {\n io.stdout(`${JSON.stringify(flows, null, 2)}\\n`);\n return;\n }\n io.stdout(formatFlowList(flows));\n } catch (err) {\n if (options.json) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n throw err;\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function flowMetadataCommand(\n flowId: string,\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const metadata = await client.getFlowMetadata(flowId);\n io.stdout(`${JSON.stringify(metadata, null, 2)}\\n`);\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, DownloadOptions, Env } from \"../types.js\";\nimport { getCwd } from \"../utils.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function organizationDocumentDownloadCommand(\n path: string,\n options: DownloadOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const document = await client.downloadOrganizationDocument(path);\n const outputPath = options.output ?? join(getCwd(deps), path);\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, document.bytes);\n io.stdout(`Downloaded ${document.filename} to ${outputPath}\\n`);\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatOrganizationDocumentList } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function organizationDocumentListCommand(\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const payload = await client.listOrganizationDocuments({ prefix: options.prefix });\n if (options.json) {\n io.stdout(`${JSON.stringify(payload, null, 2)}\\n`);\n return;\n }\n if (!payload.configured) {\n io.stdout(\"Organization document depot is not configured.\\n\");\n return;\n }\n io.stdout(formatOrganizationDocumentList(payload.documents));\n } catch (err) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n}\n","import { DocmanaError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatOrganizationList } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, ListOptions } from \"../types.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function listOrganizationsCommand(\n options: ListOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const organizations = await client.listOrganizations();\n if (options.json) {\n io.stdout(`${JSON.stringify(organizations, null, 2)}\\n`);\n return;\n }\n io.stdout(formatOrganizationList(organizations));\n } catch (err) {\n if (options.json) {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n throw err;\n }\n}\n","import { DocmanaError, DocmanaExecutionError } from \"../../sdk/errors.js\";\nimport { CliSilentError, CliUsageError } from \"../errors.js\";\nimport { formatHumanResult } from \"../formatting.js\";\nimport type { CliDeps, CliIO, DocmanaClientFactory, Env, RunOptions } from \"../types.js\";\nimport { formatElapsedSeconds, parseFiles } from \"../utils.js\";\nimport { resolveApiClient } from \"./api-client.js\";\n\nexport async function runFlowCommand(\n flowId: string,\n options: RunOptions,\n env: Env,\n io: CliIO,\n clientFactory: DocmanaClientFactory,\n deps: CliDeps,\n): Promise<void> {\n try {\n const files = parseFiles(options.files);\n const context = parseContext(options.context);\n const client = await resolveApiClient(options, env, io, clientFactory, deps);\n const result = await client.runFlow(\n flowId,\n {\n files: files.map((path) => ({ path })),\n context,\n language: options.language,\n useDraftVersion: options.draft === true,\n },\n {\n onPoll: (event) => {\n const nextPoll =\n event.nextPollAfterMs === undefined\n ? \"\"\n : `, next poll in ${formatElapsedSeconds(event.nextPollAfterMs)}`;\n io.stderr(\n `Polling execution ${event.executionResultId}: ${event.status} ` +\n `(attempt ${event.attempt}, elapsed ${formatElapsedSeconds(event.elapsedMs)}${nextPoll})\\n`,\n );\n },\n onRateLimit: (event) => {\n io.stderr(\n `Polling execution ${event.executionResultId}: rate limited ` +\n `(attempt ${event.attempt}, retrying in ${formatElapsedSeconds(event.retryAfterMs)})\\n`,\n );\n },\n },\n );\n\n if (options.json) {\n io.stdout(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n io.stdout(formatHumanResult(result));\n } catch (err) {\n if (options.json) {\n if (err instanceof DocmanaExecutionError && err.result) {\n io.stdout(`${JSON.stringify(err.result, null, 2)}\\n`);\n } else {\n const errorPayload: Record<string, unknown> = {\n error: err instanceof Error ? err.message : String(err),\n };\n if (err instanceof DocmanaError) {\n errorPayload.code = err.code;\n if (err.status !== undefined) errorPayload.status = err.status;\n if (err.requestId !== undefined) errorPayload.requestId = err.requestId;\n }\n io.stdout(`${JSON.stringify(errorPayload, null, 2)}\\n`);\n }\n throw new CliSilentError(err instanceof CliUsageError ? 2 : 1);\n }\n throw err;\n }\n}\n\nfunction parseContext(raw: string | undefined): Record<string, unknown> | undefined {\n if (raw === undefined) return undefined;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new CliUsageError(\"--context must be valid JSON.\");\n }\n\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliUsageError(\"--context must be a JSON object.\");\n }\n\n return parsed as Record<string, unknown>;\n}\n","import { createFileTokenCache, resolveTokenCachePath } from \"../config-store.js\";\nimport type { CliDeps, CliIO, Env, LoginOptions } from \"../types.js\";\nimport { getCwd } from \"../utils.js\";\nimport { readFreshCachedToken, resolveAuthConfig } from \"../auth/access-token.js\";\nimport { TokenManager } from \"../auth/token-manager.js\";\n\nexport async function loginCommand(\n options: LoginOptions,\n env: Env,\n io: CliIO,\n deps: CliDeps,\n): Promise<void> {\n const auth = await resolveAuthConfig(options, env, deps);\n const tokenCachePath = resolveTokenCachePath(options.tokenCache, getCwd(deps));\n const tokenCache = createFileTokenCache(tokenCachePath);\n const hadFreshCachedToken = Boolean(await readFreshCachedToken(tokenCache));\n const tokenManager = new TokenManager({\n clientId: auth.clientId,\n clientSecret: auth.clientSecret,\n tokenEndpoint: auth.tokenEndpoint,\n scope: auth.scope,\n fetchImpl: deps.fetch ?? fetch,\n tokenCache,\n });\n\n await tokenManager.getToken();\n const cached = await tokenCache.read();\n if (!hadFreshCachedToken) {\n io.stdout(\"Generated new access token and updated the token cache.\\n\");\n }\n io.stdout(`Logged in. Token cached at ${tokenCachePath}\\n`);\n if (cached) io.stdout(formatTokenExpiry(cached.expiresAt));\n}\n\nfunction formatTokenExpiry(expiresAt: number): string {\n const expiresAtDate = new Date(expiresAt);\n return (\n [\n `Token expires at local time ${expiresAtDate.toLocaleString()}`,\n `Token expires at UTC ${expiresAtDate.toISOString()}`,\n ].join(\"\\n\") + \"\\n\"\n );\n}\n"],"mappings":"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","names":["resolve","createHmac","timingSafeEqual","resolve","parsePositiveInt","toStringValue","toStringValue","mkdir","writeFile","dirname","mkdir","dirname","writeFile","resolve"]}