@docmana/sdk 0.4.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -4
- package/README.md +101 -26
- package/dist/api/flow-definition.d.ts +3 -0
- package/dist/api/flow-metadata.d.ts +3 -0
- package/dist/api/list-flows.d.ts +3 -0
- package/dist/api/list-organizations.d.ts +3 -0
- package/dist/api/organization-documents.d.ts +7 -0
- package/dist/cli.mjs +892 -525
- package/dist/cli.mjs.map +1 -1
- package/dist/client.d.ts +12 -7
- package/dist/files/resolve-input.d.ts +1 -3
- package/dist/http/http-client.d.ts +5 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +184 -61
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +180 -57
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.ts +85 -16
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/config.ts
|
|
1
|
+
// src/sdk/config.ts
|
|
2
2
|
var DEFAULTS = {
|
|
3
3
|
tokenEndpoint: "https://4fe70f5b-e013-4f65-9fa7-3109a33beba5.ciamlogin.com/4fe70f5b-e013-4f65-9fa7-3109a33beba5/oauth2/v2.0/token",
|
|
4
4
|
scope: "api://d781e6ba-cc08-4618-8099-ad968abd2b9e/.default",
|
|
@@ -28,7 +28,7 @@ function normalizeApiBaseUrl(value) {
|
|
|
28
28
|
return /\/v\d+$/i.test(trimmed) ? trimmed : `${trimmed}/v1`;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
// src/errors.ts
|
|
31
|
+
// src/sdk/errors.ts
|
|
32
32
|
var DocmanaError = class extends Error {
|
|
33
33
|
status;
|
|
34
34
|
requestId;
|
|
@@ -106,7 +106,7 @@ function errorFromResponse(status, message, requestId, retryAfterMs) {
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
// src/http/http-client.ts
|
|
109
|
+
// src/sdk/http/http-client.ts
|
|
110
110
|
var HttpClient = class {
|
|
111
111
|
constructor(opts) {
|
|
112
112
|
this.opts = opts;
|
|
@@ -122,6 +122,10 @@ var HttpClient = class {
|
|
|
122
122
|
throw new DocmanaError("Invalid JSON response from Docmana", { status: res.status });
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
+
async requestBytes(method, path, options = {}) {
|
|
126
|
+
const res = await this.requestRaw(method, path, options);
|
|
127
|
+
return { bytes: new Uint8Array(await res.arrayBuffer()), headers: res.headers };
|
|
128
|
+
}
|
|
125
129
|
async requestRaw(method, path, options = {}) {
|
|
126
130
|
let res = await this.send(method, path, options);
|
|
127
131
|
if (res.status === 401 && this.opts.getAccessToken) {
|
|
@@ -191,7 +195,7 @@ function parseRetryAfterMs(value) {
|
|
|
191
195
|
return void 0;
|
|
192
196
|
}
|
|
193
197
|
|
|
194
|
-
// src/files/resolve-input.ts
|
|
198
|
+
// src/sdk/files/resolve-input.ts
|
|
195
199
|
import { readFile } from "fs/promises";
|
|
196
200
|
import { basename } from "path";
|
|
197
201
|
var CONTENT_TYPES = {
|
|
@@ -216,6 +220,11 @@ function isReadable(x) {
|
|
|
216
220
|
function isPathInput(x) {
|
|
217
221
|
return typeof x === "object" && x !== null && typeof x.path === "string";
|
|
218
222
|
}
|
|
223
|
+
function isNamedFileInput(x) {
|
|
224
|
+
if (typeof x !== "object" || x === null) return false;
|
|
225
|
+
const value = x;
|
|
226
|
+
return typeof value.filename === "string" && (value.data instanceof Uint8Array || isReadable(value.data));
|
|
227
|
+
}
|
|
219
228
|
async function streamToBuffer(stream) {
|
|
220
229
|
const chunks = [];
|
|
221
230
|
for await (const chunk of stream) chunks.push(Buffer.from(chunk));
|
|
@@ -224,38 +233,30 @@ async function streamToBuffer(stream) {
|
|
|
224
233
|
function toBlobBytes(bytes) {
|
|
225
234
|
return new Uint8Array(bytes);
|
|
226
235
|
}
|
|
227
|
-
async function resolveOne(input
|
|
236
|
+
async function resolveOne(input) {
|
|
228
237
|
if (typeof input === "string" || isPathInput(input)) {
|
|
229
238
|
const path = typeof input === "string" ? input : input.path;
|
|
230
239
|
const data = await readFile(path);
|
|
231
240
|
const filename = basename(path);
|
|
232
241
|
return { data: new Blob([toBlobBytes(data)]), filename, contentType: contentTypeFor(filename) };
|
|
233
242
|
}
|
|
234
|
-
if (input
|
|
243
|
+
if (isNamedFileInput(input)) {
|
|
244
|
+
const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);
|
|
235
245
|
return {
|
|
236
|
-
data: new Blob([toBlobBytes(
|
|
237
|
-
filename:
|
|
238
|
-
contentType: contentTypeFor(
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
if (isReadable(input)) {
|
|
242
|
-
const buf = await streamToBuffer(input);
|
|
243
|
-
return {
|
|
244
|
-
data: new Blob([toBlobBytes(buf)]),
|
|
245
|
-
filename: fallbackName,
|
|
246
|
-
contentType: contentTypeFor(fallbackName)
|
|
246
|
+
data: new Blob([toBlobBytes(bytes)]),
|
|
247
|
+
filename: input.filename,
|
|
248
|
+
contentType: input.contentType ?? contentTypeFor(input.filename)
|
|
247
249
|
};
|
|
248
250
|
}
|
|
249
251
|
throw new Error("Unsupported file input type");
|
|
250
252
|
}
|
|
251
253
|
async function resolveInputs(input) {
|
|
252
|
-
const list = input.files
|
|
253
|
-
if (list.length === 0) throw new Error("runFlow requires `
|
|
254
|
-
|
|
255
|
-
return Promise.all(list.map((item) => resolveOne(item, fallback)));
|
|
254
|
+
const list = input.files;
|
|
255
|
+
if (list.length === 0) throw new Error("runFlow requires `files`");
|
|
256
|
+
return Promise.all(list.map((item) => resolveOne(item)));
|
|
256
257
|
}
|
|
257
258
|
|
|
258
|
-
// src/api/run-flow.ts
|
|
259
|
+
// src/sdk/api/run-flow.ts
|
|
259
260
|
async function runFlow(http, flowId, parts, signal, useDraftVersion = false, context, callbackUrl, language) {
|
|
260
261
|
const form = new FormData();
|
|
261
262
|
for (const part of parts) {
|
|
@@ -272,7 +273,7 @@ async function runFlow(http, flowId, parts, signal, useDraftVersion = false, con
|
|
|
272
273
|
);
|
|
273
274
|
}
|
|
274
275
|
|
|
275
|
-
// src/api/execution-status.ts
|
|
276
|
+
// src/sdk/api/execution-status.ts
|
|
276
277
|
async function getStatus(http, executionResultId, signal) {
|
|
277
278
|
const res = await http.requestRaw("GET", `/executions/${executionResultId}/status`, { signal });
|
|
278
279
|
const text = await res.text();
|
|
@@ -286,7 +287,7 @@ function parsePositiveInt(value) {
|
|
|
286
287
|
return Number.isFinite(parsed) && parsed >= 0 ? parsed : void 0;
|
|
287
288
|
}
|
|
288
289
|
|
|
289
|
-
// src/api/execution-result.ts
|
|
290
|
+
// src/sdk/api/execution-result.ts
|
|
290
291
|
async function getResult(http, executionResultId, signal, language) {
|
|
291
292
|
return http.requestJson("GET", `/executions/${executionResultId}/result`, {
|
|
292
293
|
query: language ? { language } : void 0,
|
|
@@ -294,7 +295,119 @@ async function getResult(http, executionResultId, signal, language) {
|
|
|
294
295
|
});
|
|
295
296
|
}
|
|
296
297
|
|
|
297
|
-
// src/
|
|
298
|
+
// src/sdk/api/list-flows.ts
|
|
299
|
+
async function listFlows(http) {
|
|
300
|
+
const flows = await http.requestJson("GET", "/flows");
|
|
301
|
+
return Array.isArray(flows) ? flows.map(toFlowListItem) : [];
|
|
302
|
+
}
|
|
303
|
+
function toFlowListItem(flow) {
|
|
304
|
+
const value = flow && typeof flow === "object" ? flow : {};
|
|
305
|
+
return {
|
|
306
|
+
id: toStringValue(value.id),
|
|
307
|
+
name: toStringValue(value.name),
|
|
308
|
+
state: toStateValue(value.state)
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
function toStringValue(value) {
|
|
312
|
+
return typeof value === "string" ? value : "";
|
|
313
|
+
}
|
|
314
|
+
function toStateValue(value) {
|
|
315
|
+
return typeof value === "string" && value.trim() ? value : "unknown";
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// src/sdk/api/list-organizations.ts
|
|
319
|
+
async function listOrganizations(http) {
|
|
320
|
+
const organizations = await http.requestJson("GET", "/organizations");
|
|
321
|
+
return Array.isArray(organizations) ? organizations.map(toAccessibleOrganization).filter(isAccessibleOrganization) : [];
|
|
322
|
+
}
|
|
323
|
+
function toAccessibleOrganization(organization) {
|
|
324
|
+
const value = organization && typeof organization === "object" ? organization : {};
|
|
325
|
+
const id = toStringValue2(value.id).trim();
|
|
326
|
+
if (!id) return void 0;
|
|
327
|
+
const name = toStringValue2(value.name).trim() || id;
|
|
328
|
+
return {
|
|
329
|
+
id,
|
|
330
|
+
name
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
function isAccessibleOrganization(organization) {
|
|
334
|
+
return organization !== void 0;
|
|
335
|
+
}
|
|
336
|
+
function toStringValue2(value) {
|
|
337
|
+
return typeof value === "string" ? value : "";
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// src/sdk/api/flow-metadata.ts
|
|
341
|
+
async function getFlowMetadata(http, flowId) {
|
|
342
|
+
return http.requestJson("GET", `/flows/${encodeURIComponent(flowId)}/metadata`);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// src/sdk/api/flow-definition.ts
|
|
346
|
+
async function getFlowDefinition(http, flowId) {
|
|
347
|
+
return http.requestJson("GET", `/flows/${encodeURIComponent(flowId)}/definition`);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// src/sdk/api/organization-documents.ts
|
|
351
|
+
async function listOrganizationDocuments(http, options = {}) {
|
|
352
|
+
const result = await http.requestJson("GET", "/organization-documents", {
|
|
353
|
+
query: options.prefix ? { prefix: options.prefix } : void 0
|
|
354
|
+
});
|
|
355
|
+
const value = result && typeof result === "object" ? result : {};
|
|
356
|
+
return {
|
|
357
|
+
configured: value.configured === true,
|
|
358
|
+
documents: Array.isArray(value.documents) ? value.documents.map(toOrganizationDocument).filter(isOrganizationDocument) : []
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
async function downloadOrganizationDocument(http, path) {
|
|
362
|
+
const result = await http.requestBytes("GET", "/organization-documents/download", {
|
|
363
|
+
query: { path }
|
|
364
|
+
});
|
|
365
|
+
return {
|
|
366
|
+
bytes: result.bytes,
|
|
367
|
+
filename: filenameFromHeaders(result.headers) ?? filenameFromPath(path),
|
|
368
|
+
contentType: result.headers.get("content-type") || void 0
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
async function downloadOrganizationDocuments(http, paths) {
|
|
372
|
+
return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path)));
|
|
373
|
+
}
|
|
374
|
+
function toOrganizationDocument(document) {
|
|
375
|
+
const value = document && typeof document === "object" ? document : {};
|
|
376
|
+
const path = toStringValue3(value.path).trim();
|
|
377
|
+
if (!path) return void 0;
|
|
378
|
+
const contentType = toStringValue3(value.contentType).trim();
|
|
379
|
+
return {
|
|
380
|
+
path,
|
|
381
|
+
name: toStringValue3(value.name).trim() || filenameFromPath(path),
|
|
382
|
+
size: toNumberValue(value.size),
|
|
383
|
+
lastModified: toStringValue3(value.lastModified).trim(),
|
|
384
|
+
...contentType ? { contentType } : {}
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function isOrganizationDocument(document) {
|
|
388
|
+
return document !== void 0;
|
|
389
|
+
}
|
|
390
|
+
function filenameFromHeaders(headers) {
|
|
391
|
+
const disposition = headers.get("content-disposition");
|
|
392
|
+
if (!disposition) return void 0;
|
|
393
|
+
const utf8 = /filename\*=UTF-8''([^;]+)/i.exec(disposition);
|
|
394
|
+
if (utf8?.[1]) return decodeURIComponent(utf8[1]);
|
|
395
|
+
const quoted = /filename="([^"]+)"/i.exec(disposition);
|
|
396
|
+
if (quoted?.[1]) return quoted[1];
|
|
397
|
+
const plain = /filename=([^;]+)/i.exec(disposition);
|
|
398
|
+
return plain?.[1]?.trim();
|
|
399
|
+
}
|
|
400
|
+
function filenameFromPath(path) {
|
|
401
|
+
return path.replace(/\\/g, "/").split("/").filter(Boolean).pop() || path;
|
|
402
|
+
}
|
|
403
|
+
function toStringValue3(value) {
|
|
404
|
+
return typeof value === "string" ? value : "";
|
|
405
|
+
}
|
|
406
|
+
function toNumberValue(value) {
|
|
407
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// src/sdk/polling/poll.ts
|
|
298
411
|
var TERMINAL = /* @__PURE__ */ new Set(["Completed", "Failed"]);
|
|
299
412
|
var defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
300
413
|
async function pollUntilTerminal(opts) {
|
|
@@ -339,7 +452,7 @@ function fullJitterDelay(intervalMs, maxIntervalMs, attempt, random) {
|
|
|
339
452
|
return Math.round(intervalMs + random() * (capDelay - intervalMs));
|
|
340
453
|
}
|
|
341
454
|
|
|
342
|
-
// src/client.ts
|
|
455
|
+
// src/sdk/client.ts
|
|
343
456
|
var Docmana = class {
|
|
344
457
|
config;
|
|
345
458
|
http;
|
|
@@ -353,30 +466,17 @@ var Docmana = class {
|
|
|
353
466
|
headers: this.config.headers
|
|
354
467
|
});
|
|
355
468
|
}
|
|
356
|
-
async runFlowAsync(flowId,
|
|
357
|
-
const parts = await resolveInputs(
|
|
469
|
+
async runFlowAsync(flowId, params, options = {}) {
|
|
470
|
+
const parts = await resolveInputs(params);
|
|
358
471
|
return runFlow(
|
|
359
472
|
this.http,
|
|
360
473
|
flowId,
|
|
361
474
|
parts,
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
);
|
|
368
|
-
}
|
|
369
|
-
async runFlowWithCallback(flowId, input) {
|
|
370
|
-
const parts = await resolveInputs(input);
|
|
371
|
-
return runFlow(
|
|
372
|
-
this.http,
|
|
373
|
-
flowId,
|
|
374
|
-
parts,
|
|
375
|
-
input.signal,
|
|
376
|
-
input.useDraftVersion ?? false,
|
|
377
|
-
input.context,
|
|
378
|
-
input.callbackUrl,
|
|
379
|
-
input.language
|
|
475
|
+
options.signal,
|
|
476
|
+
params.useDraftVersion ?? false,
|
|
477
|
+
params.context,
|
|
478
|
+
params.callbackUrl,
|
|
479
|
+
params.language
|
|
380
480
|
);
|
|
381
481
|
}
|
|
382
482
|
async getStatus(executionResultId, signal) {
|
|
@@ -385,18 +485,20 @@ var Docmana = class {
|
|
|
385
485
|
async getResult(executionResultId, signal, language) {
|
|
386
486
|
return getResult(this.http, executionResultId, signal, language);
|
|
387
487
|
}
|
|
388
|
-
async runFlow(flowId,
|
|
389
|
-
const { executionResultId } = await this.runFlowAsync(flowId,
|
|
488
|
+
async runFlow(flowId, params, options = {}) {
|
|
489
|
+
const { executionResultId } = await this.runFlowAsync(flowId, params, {
|
|
490
|
+
signal: options.signal
|
|
491
|
+
});
|
|
390
492
|
let attempt = 0;
|
|
391
493
|
const startedAt = Date.now();
|
|
392
494
|
await pollUntilTerminal({
|
|
393
495
|
check: async () => {
|
|
394
496
|
attempt += 1;
|
|
395
497
|
try {
|
|
396
|
-
const statusResult = await this.getStatus(executionResultId,
|
|
498
|
+
const statusResult = await this.getStatus(executionResultId, options.signal);
|
|
397
499
|
const status = statusResult.status;
|
|
398
500
|
const nextPollAfterMs = this.isTerminalStatus(status) ? void 0 : statusResult.pollAfterMs;
|
|
399
|
-
|
|
501
|
+
options.onPoll?.({
|
|
400
502
|
executionResultId,
|
|
401
503
|
status,
|
|
402
504
|
attempt,
|
|
@@ -406,22 +508,22 @@ var Docmana = class {
|
|
|
406
508
|
return { status, nextDelayMs: nextPollAfterMs };
|
|
407
509
|
} catch (err) {
|
|
408
510
|
if (err instanceof DocmanaRateLimitError) {
|
|
409
|
-
|
|
511
|
+
options.onRateLimit?.({
|
|
410
512
|
executionResultId,
|
|
411
513
|
attempt,
|
|
412
514
|
elapsedMs: Date.now() - startedAt,
|
|
413
|
-
retryAfterMs: err.retryAfterMs ??
|
|
515
|
+
retryAfterMs: err.retryAfterMs ?? options.pollIntervalMs ?? this.config.pollIntervalMs
|
|
414
516
|
});
|
|
415
517
|
}
|
|
416
518
|
throw err;
|
|
417
519
|
}
|
|
418
520
|
},
|
|
419
|
-
intervalMs:
|
|
420
|
-
maxIntervalMs:
|
|
421
|
-
timeoutMs:
|
|
422
|
-
signal:
|
|
521
|
+
intervalMs: options.pollIntervalMs ?? this.config.pollIntervalMs,
|
|
522
|
+
maxIntervalMs: options.pollMaxIntervalMs ?? this.config.pollMaxIntervalMs,
|
|
523
|
+
timeoutMs: options.timeoutMs ?? this.config.timeoutMs,
|
|
524
|
+
signal: options.signal
|
|
423
525
|
});
|
|
424
|
-
const result = await this.getResult(executionResultId,
|
|
526
|
+
const result = await this.getResult(executionResultId, options.signal, params.language);
|
|
425
527
|
if (result.status === "Failed") {
|
|
426
528
|
throw new DocmanaExecutionError(
|
|
427
529
|
`Flow ${flowId} execution failed`,
|
|
@@ -431,6 +533,27 @@ var Docmana = class {
|
|
|
431
533
|
}
|
|
432
534
|
return result;
|
|
433
535
|
}
|
|
536
|
+
async listFlows() {
|
|
537
|
+
return listFlows(this.http);
|
|
538
|
+
}
|
|
539
|
+
async listOrganizations() {
|
|
540
|
+
return listOrganizations(this.http);
|
|
541
|
+
}
|
|
542
|
+
async getFlowMetadata(flowId) {
|
|
543
|
+
return getFlowMetadata(this.http, flowId);
|
|
544
|
+
}
|
|
545
|
+
async getFlowDefinition(flowId) {
|
|
546
|
+
return getFlowDefinition(this.http, flowId);
|
|
547
|
+
}
|
|
548
|
+
async listOrganizationDocuments(options = {}) {
|
|
549
|
+
return listOrganizationDocuments(this.http, options);
|
|
550
|
+
}
|
|
551
|
+
async downloadOrganizationDocument(path) {
|
|
552
|
+
return downloadOrganizationDocument(this.http, path);
|
|
553
|
+
}
|
|
554
|
+
async downloadOrganizationDocuments(paths) {
|
|
555
|
+
return downloadOrganizationDocuments(this.http, paths);
|
|
556
|
+
}
|
|
434
557
|
isTerminalStatus(status) {
|
|
435
558
|
return status === "Completed" || status === "Failed";
|
|
436
559
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/errors.ts","../src/http/http-client.ts","../src/files/resolve-input.ts","../src/api/run-flow.ts","../src/api/execution-status.ts","../src/api/execution-result.ts","../src/polling/poll.ts","../src/client.ts"],"sourcesContent":["import type { DocmanaConfig } from \"./types.js\";\n\nexport const DEFAULTS = {\n tokenEndpoint:\n \"https://4fe70f5b-e013-4f65-9fa7-3109a33beba5.ciamlogin.com/4fe70f5b-e013-4f65-9fa7-3109a33beba5/oauth2/v2.0/token\",\n scope: \"api://d781e6ba-cc08-4618-8099-ad968abd2b9e/.default\",\n timeoutMs: 300_000,\n pollIntervalMs: 2_000,\n pollMaxIntervalMs: 10_000,\n} as const;\n\nexport interface ResolvedConfig {\n apiBaseUrl: string;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n timeoutMs: number;\n pollIntervalMs: number;\n pollMaxIntervalMs: number;\n fetchImpl: typeof fetch;\n headers: Record<string, string>;\n}\n\nexport function resolveConfig(config: DocmanaConfig): ResolvedConfig {\n if (!config.apiBaseUrl) throw new Error(\"DocmanaConfig.apiBaseUrl is required\");\n if (!config.accessToken && !config.getAccessToken) {\n throw new Error(\"DocmanaConfig.accessToken or DocmanaConfig.getAccessToken is required\");\n }\n const apiBaseUrl = normalizeApiBaseUrl(config.apiBaseUrl);\n return {\n apiBaseUrl,\n accessToken: config.accessToken,\n getAccessToken: config.getAccessToken,\n timeoutMs: config.timeoutMs ?? DEFAULTS.timeoutMs,\n pollIntervalMs: config.pollIntervalMs ?? DEFAULTS.pollIntervalMs,\n pollMaxIntervalMs: config.pollMaxIntervalMs ?? DEFAULTS.pollMaxIntervalMs,\n fetchImpl: config.fetch ?? fetch,\n headers: config.headers ?? {},\n };\n}\n\nfunction normalizeApiBaseUrl(value: string): string {\n const trimmed = value.replace(/\\/+$/, \"\");\n return /\\/v\\d+$/i.test(trimmed) ? trimmed : `${trimmed}/v1`;\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n constructor(message: string, opts: { status?: number; requestId?: string; code?: string } = {}) {\n super(message);\n this.name = new.target.name;\n this.status = opts.status;\n this.requestId = opts.requestId;\n this.code = opts.code ?? \"docmana_error\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class DocmanaAuthError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"auth_error\" });\n }\n}\n\nexport class DocmanaPermissionError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"permission_error\" });\n }\n}\n\nexport class DocmanaNotFoundError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"not_found\" });\n }\n}\n\nexport class DocmanaRequestError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"bad_request\" });\n }\n}\n\nexport class DocmanaExecutionError extends DocmanaError {\n readonly errors: unknown[];\n readonly result?: DocmanaExecutionResult;\n constructor(message: string, errors: unknown[] = [], result?: DocmanaExecutionResult) {\n super(message, { code: \"execution_failed\" });\n this.errors = errors;\n this.result = result;\n }\n}\n\nexport class DocmanaTimeoutError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"timeout\" });\n }\n}\n\nexport class DocmanaAbortError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"aborted\" });\n }\n}\n\nexport class DocmanaRateLimitError extends DocmanaError {\n readonly retryAfterMs?: number;\n constructor(\n message: string,\n opts: { status?: number; requestId?: string; retryAfterMs?: number } = {},\n ) {\n super(message, { ...opts, code: \"rate_limited\" });\n this.retryAfterMs = opts.retryAfterMs;\n }\n}\n\nexport function errorFromResponse(\n status: number,\n message: string,\n requestId?: string,\n retryAfterMs?: number,\n): DocmanaError {\n const opts = { status, requestId };\n switch (status) {\n case 400:\n return new DocmanaRequestError(message, opts);\n case 401:\n return new DocmanaAuthError(message, opts);\n case 403:\n return new DocmanaPermissionError(message, opts);\n case 404:\n return new DocmanaNotFoundError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n default:\n return new DocmanaError(message, opts);\n }\n}\n","import { DocmanaError, DocmanaAbortError, errorFromResponse } from \"../errors.js\";\n\nexport interface HttpClientOptions {\n apiBaseUrl: string;\n fetchImpl: typeof fetch;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n headers?: Record<string, string>;\n}\n\ntype FetchBody = NonNullable<Parameters<typeof fetch>[1]>[\"body\"];\n\nexport interface RequestOptions {\n query?: Record<string, string>;\n body?: FetchBody;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport 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 requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n let res = await this.send(method, path, options);\n if (res.status === 401 && this.opts.getAccessToken) {\n res = await this.send(method, path, options, true);\n }\n if (!res.ok) {\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n const message = await this.extractMessage(res);\n throw errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n }\n return res;\n }\n\n private async send(\n method: string,\n path: string,\n options: RequestOptions,\n forceRefresh = false,\n ): Promise<Response> {\n const token = await this.resolveToken(forceRefresh);\n const url = new URL(this.opts.apiBaseUrl + path);\n for (const [k, v] of Object.entries(options.query ?? {})) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n ...(this.opts.headers ?? {}),\n authorization: `Bearer ${token}`,\n ...(options.headers ?? {}),\n };\n try {\n return await this.opts.fetchImpl(url, {\n method,\n headers,\n body: options.body,\n signal: options.signal,\n });\n } catch (err) {\n if (options.signal?.aborted || (err instanceof Error && err.name === \"AbortError\")) {\n throw new DocmanaAbortError(\"Request aborted\");\n }\n throw err;\n }\n }\n\n private async resolveToken(forceRefresh: boolean): Promise<string> {\n const token = this.opts.getAccessToken\n ? await this.opts.getAccessToken(forceRefresh ? { forceRefresh: true } : undefined)\n : this.opts.accessToken;\n if (!token) {\n throw new DocmanaError(\"Missing Docmana access token\", { code: \"auth_missing\" });\n }\n return token;\n }\n\n private async extractMessage(res: Response): Promise<string> {\n try {\n const data = (await res.clone().json()) as { message?: string; error?: string };\n return data.message ?? data.error ?? res.statusText ?? `HTTP ${res.status}`;\n } catch {\n return res.statusText ?? `HTTP ${res.status}`;\n }\n }\n}\n\nfunction parseRetryAfterMs(value: string | null): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return seconds * 1000;\n }\n const retryAt = Date.parse(value);\n if (!Number.isNaN(retryAt)) {\n return Math.max(0, retryAt - Date.now());\n }\n return undefined;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport type { FileInput } from \"../types.js\";\n\nexport interface ResolvedPart {\n data: Blob;\n filename: string;\n contentType: string;\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".txt\": \"text/plain\",\n \".json\": \"application/json\",\n};\n\nfunction contentTypeFor(name: string): string {\n const dot = name.lastIndexOf(\".\");\n if (dot < 0) return \"application/octet-stream\";\n const ext = name.slice(dot).toLowerCase();\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction isReadable(x: unknown): x is Readable {\n return typeof x === \"object\" && x !== null && typeof (x as Readable).pipe === \"function\";\n}\n\nfunction isPathInput(x: unknown): x is { path: string } {\n return typeof x === \"object\" && x !== null && typeof (x as { path?: unknown }).path === \"string\";\n}\n\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, fallbackName: string): Promise<ResolvedPart> {\n if (typeof input === \"string\" || isPathInput(input)) {\n const path = typeof input === \"string\" ? input : input.path;\n const data = await readFile(path);\n const filename = basename(path);\n return { data: new Blob([toBlobBytes(data)]), filename, contentType: contentTypeFor(filename) };\n }\n if (input instanceof Uint8Array) {\n return {\n data: new Blob([toBlobBytes(input)]),\n filename: fallbackName,\n contentType: contentTypeFor(fallbackName),\n };\n }\n if (isReadable(input)) {\n const buf = await streamToBuffer(input);\n return {\n data: new Blob([toBlobBytes(buf)]),\n filename: fallbackName,\n contentType: contentTypeFor(fallbackName),\n };\n }\n throw new Error(\"Unsupported file input type\");\n}\n\nexport async function resolveInputs(input: {\n file?: FileInput;\n files?: FileInput[];\n fileName?: string;\n}): Promise<ResolvedPart[]> {\n const list: FileInput[] = input.files ?? (input.file !== undefined ? [input.file] : []);\n if (list.length === 0) throw new Error(\"runFlow requires `file` or `files`\");\n const fallback = input.fileName ?? \"upload.bin\";\n return Promise.all(list.map((item) => resolveOne(item, fallback)));\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nexport async function runFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n signal?: AbortSignal,\n useDraftVersion = false,\n context?: Record<string, unknown>,\n callbackUrl?: string,\n language?: string,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const form = new FormData();\n for (const part of parts) {\n form.append(\"files\", new File([part.data], part.filename, { type: part.contentType }));\n }\n if (context !== undefined) form.append(\"json_context\", JSON.stringify(context));\n if (callbackUrl !== undefined) form.append(\"callback_url\", callbackUrl);\n if (language !== undefined) form.append(\"language\", language);\n if (useDraftVersion) form.append(\"useDraftVersion\", \"true\");\n\n return http.requestJson<{ executionResultId: string; fileIds: string[] }>(\n \"POST\",\n `/flows/${flowId}/execute-async`,\n { body: form, signal },\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { ExecutionStatus } from \"../types.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, { signal });\n const text = await res.text();\n const body = text ? (JSON.parse(text) as { status: ExecutionStatus | string }) : { status: \"\" };\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? body : { ...body, pollAfterMs };\n}\n\nfunction parsePositiveInt(value: string | null): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { DocmanaExecutionResult } from \"../types.js\";\n\nexport async function getResult(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n): Promise<DocmanaExecutionResult> {\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: language ? { language } : undefined,\n signal,\n });\n}\n","import { DocmanaTimeoutError, DocmanaAbortError, DocmanaRateLimitError } from \"../errors.js\";\n\nconst TERMINAL = new Set([\"Completed\", \"Failed\"]);\n\nexport interface PollCheckResult {\n status: string;\n nextDelayMs?: number;\n}\n\nexport interface PollOptions {\n check: () => Promise<string | PollCheckResult>;\n intervalMs: number;\n maxIntervalMs: number;\n timeoutMs: number;\n sleep?: (ms: number) => Promise<void>;\n elapsed?: () => number;\n random?: () => number;\n signal?: AbortSignal;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nexport async function pollUntilTerminal(opts: PollOptions): Promise<string> {\n const sleep = opts.sleep ?? defaultSleep;\n const start = Date.now();\n const elapsed = opts.elapsed ?? (() => Date.now() - start);\n const random = opts.random ?? Math.random;\n let fallbackAttempt = 0;\n for (;;) {\n if (opts.signal?.aborted) throw new DocmanaAbortError(\"Polling aborted\");\n let result: PollCheckResult;\n try {\n result = normalizePollResult(await opts.check());\n } catch (err) {\n if (!(err instanceof DocmanaRateLimitError)) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n await sleep(err.retryAfterMs ?? opts.intervalMs);\n continue;\n }\n const { status } = result;\n if (TERMINAL.has(status)) return status;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n const fallbackDelay = fullJitterDelay(\n opts.intervalMs,\n opts.maxIntervalMs,\n fallbackAttempt,\n random,\n );\n fallbackAttempt += 1;\n await sleep(result.nextDelayMs ?? fallbackDelay);\n }\n}\n\nfunction normalizePollResult(result: string | PollCheckResult): PollCheckResult {\n return typeof result === \"string\" ? { status: result } : result;\n}\n\nfunction fullJitterDelay(\n intervalMs: number,\n maxIntervalMs: number,\n attempt: number,\n random: () => number,\n): number {\n const capDelay = Math.min(maxIntervalMs, intervalMs * 2 ** attempt);\n return Math.round(intervalMs + random() * (capDelay - intervalMs));\n}\n","import { resolveConfig } from \"./config.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n DocmanaConfig,\n DocmanaExecutionResult,\n ExecutionStatus,\n RunFlowInput,\n RunFlowWithCallbackInput,\n} from \"./types.js\";\nimport { HttpClient } from \"./http/http-client.js\";\nimport { resolveInputs } from \"./files/resolve-input.js\";\nimport { runFlow as runFlowApi } from \"./api/run-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport { pollUntilTerminal } from \"./polling/poll.js\";\nimport { DocmanaExecutionError, DocmanaRateLimitError } from \"./errors.js\";\n\nexport class Docmana {\n private readonly config: ResolvedConfig;\n private readonly http: HttpClient;\n\n constructor(config: DocmanaConfig) {\n this.config = resolveConfig(config);\n this.http = new HttpClient({\n apiBaseUrl: this.config.apiBaseUrl,\n fetchImpl: this.config.fetchImpl,\n accessToken: this.config.accessToken,\n getAccessToken: this.config.getAccessToken,\n headers: this.config.headers,\n });\n }\n\n async runFlowAsync(\n flowId: string,\n input: RunFlowInput,\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(input);\n return runFlowApi(\n this.http,\n flowId,\n parts,\n input.signal,\n input.useDraftVersion ?? false,\n input.context,\n undefined,\n input.language,\n );\n }\n\n async runFlowWithCallback(\n flowId: string,\n input: RunFlowWithCallbackInput,\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(input);\n return runFlowApi(\n this.http,\n flowId,\n parts,\n input.signal,\n input.useDraftVersion ?? false,\n input.context,\n input.callbackUrl,\n input.language,\n );\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language);\n }\n\n async runFlow(flowId: string, input: RunFlowInput): Promise<DocmanaExecutionResult> {\n const { executionResultId } = await this.runFlowAsync(flowId, input);\n let attempt = 0;\n const startedAt = Date.now();\n await pollUntilTerminal({\n check: async () => {\n attempt += 1;\n try {\n const statusResult = await this.getStatus(executionResultId, input.signal);\n const status = statusResult.status;\n const nextPollAfterMs = this.isTerminalStatus(status)\n ? undefined\n : statusResult.pollAfterMs;\n input.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 input.onRateLimit?.({\n executionResultId,\n attempt,\n elapsedMs: Date.now() - startedAt,\n retryAfterMs: err.retryAfterMs ?? input.pollIntervalMs ?? this.config.pollIntervalMs,\n });\n }\n throw err;\n }\n },\n intervalMs: input.pollIntervalMs ?? this.config.pollIntervalMs,\n maxIntervalMs: input.pollMaxIntervalMs ?? this.config.pollMaxIntervalMs,\n timeoutMs: input.timeoutMs ?? this.config.timeoutMs,\n signal: input.signal,\n });\n const result = await this.getResult(executionResultId, input.signal, input.language);\n if (result.status === \"Failed\") {\n throw new DocmanaExecutionError(\n `Flow ${flowId} execution failed`,\n result.errors ?? [],\n result,\n );\n }\n return result;\n }\n\n private isTerminalStatus(status: string): boolean {\n return status === \"Completed\" || status === \"Failed\";\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/sdk/config.ts","../src/sdk/errors.ts","../src/sdk/http/http-client.ts","../src/sdk/files/resolve-input.ts","../src/sdk/api/run-flow.ts","../src/sdk/api/execution-status.ts","../src/sdk/api/execution-result.ts","../src/sdk/api/list-flows.ts","../src/sdk/api/list-organizations.ts","../src/sdk/api/flow-metadata.ts","../src/sdk/api/flow-definition.ts","../src/sdk/api/organization-documents.ts","../src/sdk/polling/poll.ts","../src/sdk/client.ts"],"sourcesContent":["import type { DocmanaConfig } from \"./types.js\";\n\nexport const DEFAULTS = {\n tokenEndpoint:\n \"https://4fe70f5b-e013-4f65-9fa7-3109a33beba5.ciamlogin.com/4fe70f5b-e013-4f65-9fa7-3109a33beba5/oauth2/v2.0/token\",\n scope: \"api://d781e6ba-cc08-4618-8099-ad968abd2b9e/.default\",\n timeoutMs: 300_000,\n pollIntervalMs: 2_000,\n pollMaxIntervalMs: 10_000,\n} as const;\n\nexport interface ResolvedConfig {\n apiBaseUrl: string;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n timeoutMs: number;\n pollIntervalMs: number;\n pollMaxIntervalMs: number;\n fetchImpl: typeof fetch;\n headers: Record<string, string>;\n}\n\nexport function resolveConfig(config: DocmanaConfig): ResolvedConfig {\n if (!config.apiBaseUrl) throw new Error(\"DocmanaConfig.apiBaseUrl is required\");\n if (!config.accessToken && !config.getAccessToken) {\n throw new Error(\"DocmanaConfig.accessToken or DocmanaConfig.getAccessToken is required\");\n }\n const apiBaseUrl = normalizeApiBaseUrl(config.apiBaseUrl);\n return {\n apiBaseUrl,\n accessToken: config.accessToken,\n getAccessToken: config.getAccessToken,\n timeoutMs: config.timeoutMs ?? DEFAULTS.timeoutMs,\n pollIntervalMs: config.pollIntervalMs ?? DEFAULTS.pollIntervalMs,\n pollMaxIntervalMs: config.pollMaxIntervalMs ?? DEFAULTS.pollMaxIntervalMs,\n fetchImpl: config.fetch ?? fetch,\n headers: config.headers ?? {},\n };\n}\n\nfunction normalizeApiBaseUrl(value: string): string {\n const trimmed = value.replace(/\\/+$/, \"\");\n return /\\/v\\d+$/i.test(trimmed) ? trimmed : `${trimmed}/v1`;\n}\n","import type { DocmanaExecutionResult } from \"./models/docmana-execution-result.model.js\";\n\nexport class DocmanaError extends Error {\n readonly status?: number;\n readonly requestId?: string;\n readonly code: string;\n constructor(message: string, opts: { status?: number; requestId?: string; code?: string } = {}) {\n super(message);\n this.name = new.target.name;\n this.status = opts.status;\n this.requestId = opts.requestId;\n this.code = opts.code ?? \"docmana_error\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class DocmanaAuthError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"auth_error\" });\n }\n}\n\nexport class DocmanaPermissionError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"permission_error\" });\n }\n}\n\nexport class DocmanaNotFoundError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"not_found\" });\n }\n}\n\nexport class DocmanaRequestError extends DocmanaError {\n constructor(message: string, opts: { status?: number; requestId?: string } = {}) {\n super(message, { ...opts, code: \"bad_request\" });\n }\n}\n\nexport class DocmanaExecutionError extends DocmanaError {\n readonly errors: unknown[];\n readonly result?: DocmanaExecutionResult;\n constructor(message: string, errors: unknown[] = [], result?: DocmanaExecutionResult) {\n super(message, { code: \"execution_failed\" });\n this.errors = errors;\n this.result = result;\n }\n}\n\nexport class DocmanaTimeoutError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"timeout\" });\n }\n}\n\nexport class DocmanaAbortError extends DocmanaError {\n constructor(message: string) {\n super(message, { code: \"aborted\" });\n }\n}\n\nexport class DocmanaRateLimitError extends DocmanaError {\n readonly retryAfterMs?: number;\n constructor(\n message: string,\n opts: { status?: number; requestId?: string; retryAfterMs?: number } = {},\n ) {\n super(message, { ...opts, code: \"rate_limited\" });\n this.retryAfterMs = opts.retryAfterMs;\n }\n}\n\nexport function errorFromResponse(\n status: number,\n message: string,\n requestId?: string,\n retryAfterMs?: number,\n): DocmanaError {\n const opts = { status, requestId };\n switch (status) {\n case 400:\n return new DocmanaRequestError(message, opts);\n case 401:\n return new DocmanaAuthError(message, opts);\n case 403:\n return new DocmanaPermissionError(message, opts);\n case 404:\n return new DocmanaNotFoundError(message, opts);\n case 429:\n return new DocmanaRateLimitError(message, { ...opts, retryAfterMs });\n default:\n return new DocmanaError(message, opts);\n }\n}\n","import { DocmanaError, DocmanaAbortError, errorFromResponse } from \"../errors.js\";\n\nexport interface HttpClientOptions {\n apiBaseUrl: string;\n fetchImpl: typeof fetch;\n accessToken?: string;\n getAccessToken?: (options?: { forceRefresh?: boolean }) => string | Promise<string>;\n headers?: Record<string, string>;\n}\n\ntype FetchBody = NonNullable<Parameters<typeof fetch>[1]>[\"body\"];\n\nexport interface RequestOptions {\n query?: Record<string, string>;\n body?: FetchBody;\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport interface BytesResponse {\n bytes: Uint8Array;\n headers: Headers;\n}\n\nexport class HttpClient {\n constructor(private readonly opts: HttpClientOptions) {}\n\n async requestJson<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const res = await this.requestRaw(method, path, options);\n const text = await res.text();\n if (!text) return {} as T;\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new DocmanaError(\"Invalid JSON response from Docmana\", { status: res.status });\n }\n }\n\n async requestBytes(\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<BytesResponse> {\n const res = await this.requestRaw(method, path, options);\n return { bytes: new Uint8Array(await res.arrayBuffer()), headers: res.headers };\n }\n\n async requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n let res = await this.send(method, path, options);\n if (res.status === 401 && this.opts.getAccessToken) {\n res = await this.send(method, path, options, true);\n }\n if (!res.ok) {\n const requestId = res.headers.get(\"x-request-id\") ?? undefined;\n const message = await this.extractMessage(res);\n throw errorFromResponse(\n res.status,\n message,\n requestId,\n parseRetryAfterMs(res.headers.get(\"retry-after\")),\n );\n }\n return res;\n }\n\n private async send(\n method: string,\n path: string,\n options: RequestOptions,\n forceRefresh = false,\n ): Promise<Response> {\n const token = await this.resolveToken(forceRefresh);\n const url = new URL(this.opts.apiBaseUrl + path);\n for (const [k, v] of Object.entries(options.query ?? {})) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n ...(this.opts.headers ?? {}),\n authorization: `Bearer ${token}`,\n ...(options.headers ?? {}),\n };\n try {\n return await this.opts.fetchImpl(url, {\n method,\n headers,\n body: options.body,\n signal: options.signal,\n });\n } catch (err) {\n if (options.signal?.aborted || (err instanceof Error && err.name === \"AbortError\")) {\n throw new DocmanaAbortError(\"Request aborted\");\n }\n throw err;\n }\n }\n\n private async resolveToken(forceRefresh: boolean): Promise<string> {\n const token = this.opts.getAccessToken\n ? await this.opts.getAccessToken(forceRefresh ? { forceRefresh: true } : undefined)\n : this.opts.accessToken;\n if (!token) {\n throw new DocmanaError(\"Missing Docmana access token\", { code: \"auth_missing\" });\n }\n return token;\n }\n\n private async extractMessage(res: Response): Promise<string> {\n try {\n const data = (await res.clone().json()) as { message?: string; error?: string };\n return data.message ?? data.error ?? res.statusText ?? `HTTP ${res.status}`;\n } catch {\n return res.statusText ?? `HTTP ${res.status}`;\n }\n }\n}\n\nfunction parseRetryAfterMs(value: string | null): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return seconds * 1000;\n }\n const retryAt = Date.parse(value);\n if (!Number.isNaN(retryAt)) {\n return Math.max(0, retryAt - Date.now());\n }\n return undefined;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport type { FileInput } from \"../types.js\";\n\nexport interface ResolvedPart {\n data: Blob;\n filename: string;\n contentType: string;\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".txt\": \"text/plain\",\n \".json\": \"application/json\",\n};\n\nfunction contentTypeFor(name: string): string {\n const dot = name.lastIndexOf(\".\");\n if (dot < 0) return \"application/octet-stream\";\n const ext = name.slice(dot).toLowerCase();\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction isReadable(x: unknown): x is Readable {\n return typeof x === \"object\" && x !== null && typeof (x as Readable).pipe === \"function\";\n}\n\nfunction isPathInput(x: unknown): x is { path: string } {\n return typeof x === \"object\" && x !== null && typeof (x as { path?: unknown }).path === \"string\";\n}\n\nfunction isNamedFileInput(\n x: unknown,\n): x is { data: Uint8Array | Readable; filename: string; contentType?: string } {\n if (typeof x !== \"object\" || x === null) return false;\n const value = x as { data?: unknown; filename?: unknown };\n return (\n typeof value.filename === \"string\" &&\n (value.data instanceof Uint8Array || isReadable(value.data))\n );\n}\n\nasync function streamToBuffer(stream: Readable): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) chunks.push(Buffer.from(chunk));\n return Buffer.concat(chunks);\n}\n\nfunction toBlobBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n return new Uint8Array(bytes);\n}\n\nasync function resolveOne(input: FileInput): Promise<ResolvedPart> {\n if (typeof input === \"string\" || isPathInput(input)) {\n const path = typeof input === \"string\" ? input : input.path;\n const data = await readFile(path);\n const filename = basename(path);\n return { data: new Blob([toBlobBytes(data)]), filename, contentType: contentTypeFor(filename) };\n }\n if (isNamedFileInput(input)) {\n const bytes = input.data instanceof Uint8Array ? input.data : await streamToBuffer(input.data);\n return {\n data: new Blob([toBlobBytes(bytes)]),\n filename: input.filename,\n contentType: input.contentType ?? contentTypeFor(input.filename),\n };\n }\n throw new Error(\"Unsupported file input type\");\n}\n\nexport async function resolveInputs(input: { files: FileInput[] }): Promise<ResolvedPart[]> {\n const list: FileInput[] = input.files;\n if (list.length === 0) throw new Error(\"runFlow requires `files`\");\n return Promise.all(list.map((item) => resolveOne(item)));\n}\n","import type { ResolvedPart } from \"../files/resolve-input.js\";\nimport type { HttpClient } from \"../http/http-client.js\";\n\nexport async function runFlow(\n http: HttpClient,\n flowId: string,\n parts: ResolvedPart[],\n signal?: AbortSignal,\n useDraftVersion = false,\n context?: Record<string, unknown>,\n callbackUrl?: string,\n language?: string,\n): Promise<{ executionResultId: string; fileIds: string[] }> {\n const form = new FormData();\n for (const part of parts) {\n form.append(\"files\", new File([part.data], part.filename, { type: part.contentType }));\n }\n if (context !== undefined) form.append(\"json_context\", JSON.stringify(context));\n if (callbackUrl !== undefined) form.append(\"callback_url\", callbackUrl);\n if (language !== undefined) form.append(\"language\", language);\n if (useDraftVersion) form.append(\"useDraftVersion\", \"true\");\n\n return http.requestJson<{ executionResultId: string; fileIds: string[] }>(\n \"POST\",\n `/flows/${flowId}/execute-async`,\n { body: form, signal },\n );\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { ExecutionStatus } from \"../types.js\";\n\nexport async function getStatus(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n const res = await http.requestRaw(\"GET\", `/executions/${executionResultId}/status`, { signal });\n const text = await res.text();\n const body = text ? (JSON.parse(text) as { status: ExecutionStatus | string }) : { status: \"\" };\n const pollAfterMs = parsePositiveInt(res.headers.get(\"x-poll-after\"));\n return pollAfterMs === undefined ? body : { ...body, pollAfterMs };\n}\n\nfunction parsePositiveInt(value: string | null): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { DocmanaExecutionResult } from \"../types.js\";\n\nexport async function getResult(\n http: HttpClient,\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n): Promise<DocmanaExecutionResult> {\n return http.requestJson(\"GET\", `/executions/${executionResultId}/result`, {\n query: language ? { language } : undefined,\n signal,\n });\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowListItem } from \"../types.js\";\n\nexport async function listFlows(http: HttpClient): Promise<FlowListItem[]> {\n const flows = await http.requestJson<unknown>(\"GET\", \"/flows\");\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 return {\n id: toStringValue(value.id),\n name: toStringValue(value.name),\n state: toStateValue(value.state),\n };\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(http: HttpClient, flowId: string): Promise<FlowMetadata> {\n return http.requestJson<FlowMetadata>(\"GET\", `/flows/${encodeURIComponent(flowId)}/metadata`);\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type { FlowDefinition } from \"../types.js\";\n\nexport async function getFlowDefinition(http: HttpClient, flowId: string): Promise<FlowDefinition> {\n return http.requestJson<FlowDefinition>(\"GET\", `/flows/${encodeURIComponent(flowId)}/definition`);\n}\n","import type { HttpClient } from \"../http/http-client.js\";\nimport type {\n DownloadedOrganizationDocument,\n OrganizationDocument,\n OrganizationDocumentsPayload,\n} from \"../types.js\";\n\nexport async function listOrganizationDocuments(\n http: HttpClient,\n options: { prefix?: string } = {},\n): Promise<OrganizationDocumentsPayload> {\n const result = await http.requestJson<unknown>(\"GET\", \"/organization-documents\", {\n query: options.prefix ? { prefix: options.prefix } : undefined,\n });\n const value = result && typeof result === \"object\" ? (result as Record<string, unknown>) : {};\n return {\n configured: value.configured === true,\n documents: Array.isArray(value.documents)\n ? value.documents.map(toOrganizationDocument).filter(isOrganizationDocument)\n : [],\n };\n}\n\nexport async function downloadOrganizationDocument(\n http: HttpClient,\n path: string,\n): Promise<DownloadedOrganizationDocument> {\n const result = await http.requestBytes(\"GET\", \"/organization-documents/download\", {\n query: { path },\n });\n return {\n bytes: result.bytes,\n filename: filenameFromHeaders(result.headers) ?? filenameFromPath(path),\n contentType: result.headers.get(\"content-type\") || undefined,\n };\n}\n\nexport async function downloadOrganizationDocuments(\n http: HttpClient,\n paths: string[],\n): Promise<DownloadedOrganizationDocument[]> {\n return Promise.all(paths.map((path) => downloadOrganizationDocument(http, path)));\n}\n\nfunction toOrganizationDocument(document: unknown): OrganizationDocument | undefined {\n const value =\n document && typeof document === \"object\" ? (document as Record<string, unknown>) : {};\n const path = toStringValue(value.path).trim();\n if (!path) return undefined;\n const contentType = toStringValue(value.contentType).trim();\n return {\n path,\n name: toStringValue(value.name).trim() || filenameFromPath(path),\n size: toNumberValue(value.size),\n lastModified: toStringValue(value.lastModified).trim(),\n ...(contentType ? { contentType } : {}),\n };\n}\n\nfunction isOrganizationDocument(\n document: OrganizationDocument | undefined,\n): document is OrganizationDocument {\n return document !== undefined;\n}\n\nfunction filenameFromHeaders(headers: Headers): string | undefined {\n const disposition = headers.get(\"content-disposition\");\n if (!disposition) return undefined;\n const utf8 = /filename\\*=UTF-8''([^;]+)/i.exec(disposition);\n if (utf8?.[1]) return decodeURIComponent(utf8[1]);\n const quoted = /filename=\"([^\"]+)\"/i.exec(disposition);\n if (quoted?.[1]) return quoted[1];\n const plain = /filename=([^;]+)/i.exec(disposition);\n return plain?.[1]?.trim();\n}\n\nfunction filenameFromPath(path: string): string {\n return path.replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean).pop() || path;\n}\n\nfunction toStringValue(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction toNumberValue(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n","import { DocmanaTimeoutError, DocmanaAbortError, DocmanaRateLimitError } from \"../errors.js\";\n\nconst TERMINAL = new Set([\"Completed\", \"Failed\"]);\n\nexport interface PollCheckResult {\n status: string;\n nextDelayMs?: number;\n}\n\nexport interface PollOptions {\n check: () => Promise<string | PollCheckResult>;\n intervalMs: number;\n maxIntervalMs: number;\n timeoutMs: number;\n sleep?: (ms: number) => Promise<void>;\n elapsed?: () => number;\n random?: () => number;\n signal?: AbortSignal;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nexport async function pollUntilTerminal(opts: PollOptions): Promise<string> {\n const sleep = opts.sleep ?? defaultSleep;\n const start = Date.now();\n const elapsed = opts.elapsed ?? (() => Date.now() - start);\n const random = opts.random ?? Math.random;\n let fallbackAttempt = 0;\n for (;;) {\n if (opts.signal?.aborted) throw new DocmanaAbortError(\"Polling aborted\");\n let result: PollCheckResult;\n try {\n result = normalizePollResult(await opts.check());\n } catch (err) {\n if (!(err instanceof DocmanaRateLimitError)) throw err;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n await sleep(err.retryAfterMs ?? opts.intervalMs);\n continue;\n }\n const { status } = result;\n if (TERMINAL.has(status)) return status;\n if (elapsed() >= opts.timeoutMs) {\n throw new DocmanaTimeoutError(`Execution did not finish within ${opts.timeoutMs}ms`);\n }\n const fallbackDelay = fullJitterDelay(\n opts.intervalMs,\n opts.maxIntervalMs,\n fallbackAttempt,\n random,\n );\n fallbackAttempt += 1;\n await sleep(result.nextDelayMs ?? fallbackDelay);\n }\n}\n\nfunction normalizePollResult(result: string | PollCheckResult): PollCheckResult {\n return typeof result === \"string\" ? { status: result } : result;\n}\n\nfunction fullJitterDelay(\n intervalMs: number,\n maxIntervalMs: number,\n attempt: number,\n random: () => number,\n): number {\n const capDelay = Math.min(maxIntervalMs, intervalMs * 2 ** attempt);\n return Math.round(intervalMs + random() * (capDelay - intervalMs));\n}\n","import { resolveConfig } from \"./config.js\";\nimport type { ResolvedConfig } from \"./config.js\";\nimport type {\n AccessibleOrganization,\n DocmanaConfig,\n DocmanaExecutionResult,\n DownloadedOrganizationDocument,\n ExecutionStatus,\n FlowDefinition,\n FlowListItem,\n FlowMetadata,\n OrganizationDocumentsPayload,\n RunFlowAsyncParams,\n RunFlowAsyncOptions,\n RunFlowOptions,\n RunFlowParams,\n} from \"./types.js\";\nimport { HttpClient } from \"./http/http-client.js\";\nimport { resolveInputs } from \"./files/resolve-input.js\";\nimport { runFlow as runFlowApi } from \"./api/run-flow.js\";\nimport { getStatus as getStatusApi } from \"./api/execution-status.js\";\nimport { getResult as getResultApi } from \"./api/execution-result.js\";\nimport { listFlows as listFlowsApi } from \"./api/list-flows.js\";\nimport { listOrganizations as listOrganizationsApi } from \"./api/list-organizations.js\";\nimport { getFlowMetadata as getFlowMetadataApi } from \"./api/flow-metadata.js\";\nimport { getFlowDefinition as getFlowDefinitionApi } from \"./api/flow-definition.js\";\nimport {\n downloadOrganizationDocument as downloadOrganizationDocumentApi,\n downloadOrganizationDocuments as downloadOrganizationDocumentsApi,\n listOrganizationDocuments as listOrganizationDocumentsApi,\n} from \"./api/organization-documents.js\";\nimport { pollUntilTerminal } from \"./polling/poll.js\";\nimport { DocmanaExecutionError, DocmanaRateLimitError } from \"./errors.js\";\n\nexport class Docmana {\n private readonly config: ResolvedConfig;\n private readonly http: HttpClient;\n\n constructor(config: DocmanaConfig) {\n this.config = resolveConfig(config);\n this.http = new HttpClient({\n apiBaseUrl: this.config.apiBaseUrl,\n fetchImpl: this.config.fetchImpl,\n accessToken: this.config.accessToken,\n getAccessToken: this.config.getAccessToken,\n headers: this.config.headers,\n });\n }\n\n async runFlowAsync(\n flowId: string,\n params: RunFlowAsyncParams,\n options: RunFlowAsyncOptions = {},\n ): Promise<{ executionResultId: string; fileIds: string[] }> {\n const parts = await resolveInputs(params);\n return runFlowApi(\n this.http,\n flowId,\n parts,\n options.signal,\n params.useDraftVersion ?? false,\n params.context,\n params.callbackUrl,\n params.language,\n );\n }\n\n async getStatus(\n executionResultId: string,\n signal?: AbortSignal,\n ): Promise<{ status: ExecutionStatus | string; pollAfterMs?: number }> {\n return getStatusApi(this.http, executionResultId, signal);\n }\n\n async getResult(\n executionResultId: string,\n signal?: AbortSignal,\n language?: string,\n ): Promise<DocmanaExecutionResult> {\n return getResultApi(this.http, executionResultId, signal, language);\n }\n\n async runFlow(\n flowId: string,\n params: RunFlowParams,\n options: RunFlowOptions = {},\n ): Promise<DocmanaExecutionResult> {\n const { executionResultId } = await this.runFlowAsync(flowId, params, {\n signal: options.signal,\n });\n let attempt = 0;\n const startedAt = Date.now();\n await pollUntilTerminal({\n check: async () => {\n attempt += 1;\n try {\n const statusResult = await this.getStatus(executionResultId, options.signal);\n const status = statusResult.status;\n const nextPollAfterMs = this.isTerminalStatus(status)\n ? undefined\n : statusResult.pollAfterMs;\n options.onPoll?.({\n executionResultId,\n status,\n attempt,\n elapsedMs: Date.now() - startedAt,\n nextPollAfterMs,\n });\n return { status, nextDelayMs: nextPollAfterMs };\n } catch (err) {\n if (err instanceof DocmanaRateLimitError) {\n options.onRateLimit?.({\n executionResultId,\n attempt,\n elapsedMs: Date.now() - startedAt,\n retryAfterMs:\n err.retryAfterMs ?? options.pollIntervalMs ?? this.config.pollIntervalMs,\n });\n }\n throw err;\n }\n },\n intervalMs: options.pollIntervalMs ?? this.config.pollIntervalMs,\n maxIntervalMs: options.pollMaxIntervalMs ?? this.config.pollMaxIntervalMs,\n timeoutMs: options.timeoutMs ?? this.config.timeoutMs,\n signal: options.signal,\n });\n const result = await this.getResult(executionResultId, options.signal, params.language);\n if (result.status === \"Failed\") {\n throw new DocmanaExecutionError(\n `Flow ${flowId} execution failed`,\n result.errors ?? [],\n result,\n );\n }\n return result;\n }\n\n async listFlows(): Promise<FlowListItem[]> {\n return listFlowsApi(this.http);\n }\n\n async listOrganizations(): Promise<AccessibleOrganization[]> {\n return listOrganizationsApi(this.http);\n }\n\n async getFlowMetadata(flowId: string): Promise<FlowMetadata> {\n return getFlowMetadataApi(this.http, flowId);\n }\n\n async getFlowDefinition(flowId: string): Promise<FlowDefinition> {\n return getFlowDefinitionApi(this.http, flowId);\n }\n\n async listOrganizationDocuments(\n options: { prefix?: string } = {},\n ): Promise<OrganizationDocumentsPayload> {\n return listOrganizationDocumentsApi(this.http, options);\n }\n\n async downloadOrganizationDocument(path: string): Promise<DownloadedOrganizationDocument> {\n return downloadOrganizationDocumentApi(this.http, path);\n }\n\n async downloadOrganizationDocuments(paths: string[]): Promise<DownloadedOrganizationDocument[]> {\n return downloadOrganizationDocumentsApi(this.http, paths);\n }\n\n private isTerminalStatus(status: string): boolean {\n return status === \"Completed\" || status === \"Failed\";\n }\n}\n"],"mappings":"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","names":["toStringValue","toStringValue"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -25,11 +25,19 @@ export interface TokenCache {
|
|
|
25
25
|
export interface PathFileInput {
|
|
26
26
|
path: string;
|
|
27
27
|
}
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
export interface NamedFileInput {
|
|
29
|
+
data: Uint8Array | NodeJS.ReadableStream;
|
|
30
|
+
filename: string;
|
|
31
|
+
contentType?: string;
|
|
32
|
+
}
|
|
33
|
+
export type FileInput = string | PathFileInput | NamedFileInput;
|
|
34
|
+
export interface RunFlowParams {
|
|
35
|
+
files: FileInput[];
|
|
36
|
+
useDraftVersion?: boolean;
|
|
37
|
+
language?: string;
|
|
38
|
+
context?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
export interface RunFlowOptions {
|
|
33
41
|
signal?: AbortSignal;
|
|
34
42
|
timeoutMs?: number;
|
|
35
43
|
pollIntervalMs?: number;
|
|
@@ -47,20 +55,81 @@ export interface RunFlowInput {
|
|
|
47
55
|
elapsedMs: number;
|
|
48
56
|
retryAfterMs: number;
|
|
49
57
|
}) => void;
|
|
50
|
-
useDraftVersion?: boolean;
|
|
51
|
-
language?: string;
|
|
52
|
-
context?: Record<string, unknown>;
|
|
53
58
|
}
|
|
54
|
-
export interface
|
|
55
|
-
file?: FileInput;
|
|
56
|
-
files?: FileInput[];
|
|
57
|
-
fileName?: string;
|
|
59
|
+
export interface RunFlowAsyncOptions {
|
|
58
60
|
signal?: AbortSignal;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
context?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
export interface RunFlowAsyncParams extends RunFlowParams {
|
|
62
63
|
/** URL Consumer will POST the completion result to (wire: `callback_url`). */
|
|
63
|
-
callbackUrl
|
|
64
|
+
callbackUrl?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface FlowListItem {
|
|
67
|
+
id: string;
|
|
68
|
+
name: string;
|
|
69
|
+
state: string;
|
|
70
|
+
}
|
|
71
|
+
export interface AccessibleOrganization {
|
|
72
|
+
id: string;
|
|
73
|
+
name: string;
|
|
74
|
+
}
|
|
75
|
+
export interface OrganizationDocument {
|
|
76
|
+
path: string;
|
|
77
|
+
name: string;
|
|
78
|
+
size: number;
|
|
79
|
+
lastModified: string;
|
|
80
|
+
contentType?: string;
|
|
81
|
+
}
|
|
82
|
+
export interface OrganizationDocumentsPayload {
|
|
83
|
+
configured: boolean;
|
|
84
|
+
documents: OrganizationDocument[];
|
|
85
|
+
}
|
|
86
|
+
export interface DownloadedOrganizationDocument {
|
|
87
|
+
bytes: Uint8Array;
|
|
88
|
+
filename: string;
|
|
89
|
+
contentType?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface FlowDocumentRequirement {
|
|
92
|
+
docId: string;
|
|
93
|
+
label: string;
|
|
94
|
+
required: boolean;
|
|
95
|
+
}
|
|
96
|
+
export interface FlowMetadata {
|
|
97
|
+
flowId: string;
|
|
98
|
+
name?: string;
|
|
99
|
+
contextSchema: Record<string, unknown>;
|
|
100
|
+
languages: string[];
|
|
101
|
+
minScore?: number;
|
|
102
|
+
documents: FlowDocumentRequirement[];
|
|
103
|
+
}
|
|
104
|
+
export interface FlowDefinitionField {
|
|
105
|
+
fieldKey: string;
|
|
106
|
+
path: string;
|
|
107
|
+
type?: string;
|
|
108
|
+
}
|
|
109
|
+
export interface FlowDefinitionNodeMetadata {
|
|
110
|
+
title?: string;
|
|
111
|
+
uniqueName?: string;
|
|
112
|
+
assessmentType?: string;
|
|
113
|
+
scoreAssessment: boolean;
|
|
114
|
+
scoreAcceptanceThreshold?: number;
|
|
115
|
+
description?: string;
|
|
116
|
+
enabled?: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface FlowDefinitionNode {
|
|
119
|
+
nodeId: string;
|
|
120
|
+
type: string;
|
|
121
|
+
label: string;
|
|
122
|
+
uniqueName?: string;
|
|
123
|
+
parentId?: string;
|
|
124
|
+
fields: FlowDefinitionField[];
|
|
125
|
+
metadata?: FlowDefinitionNodeMetadata;
|
|
126
|
+
}
|
|
127
|
+
export interface FlowDefinition {
|
|
128
|
+
flowId: string;
|
|
129
|
+
name?: string;
|
|
130
|
+
languages: string[];
|
|
131
|
+
minScore?: number;
|
|
132
|
+
nodes: FlowDefinitionNode[];
|
|
64
133
|
}
|
|
65
134
|
export type { DocmanaExecutionResult } from "./models/docmana-execution-result.model.js";
|
|
66
135
|
export type { DocmanaDocumentMapping } from "./models/docmana-document-mapping.model.js";
|