@ifc-lite/flow-nodes 0.2.0 → 0.5.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/README.md +1 -0
- package/dist/apply-table-node.d.ts.map +1 -1
- package/dist/apply-table-node.js +7 -6
- package/dist/apply-table-node.js.map +1 -1
- package/dist/aps-client.d.ts +55 -0
- package/dist/aps-client.d.ts.map +1 -0
- package/dist/aps-client.js +194 -0
- package/dist/aps-client.js.map +1 -0
- package/dist/aps-nodes.d.ts +3 -0
- package/dist/aps-nodes.d.ts.map +1 -0
- package/dist/aps-nodes.js +192 -0
- package/dist/aps-nodes.js.map +1 -0
- package/dist/aps-table.d.ts +24 -0
- package/dist/aps-table.d.ts.map +1 -0
- package/dist/aps-table.js +123 -0
- package/dist/aps-table.js.map +1 -0
- package/dist/base64.d.ts +8 -0
- package/dist/base64.d.ts.map +1 -0
- package/dist/base64.js +59 -0
- package/dist/base64.js.map +1 -0
- package/dist/bcf-client.d.ts +36 -0
- package/dist/bcf-client.d.ts.map +1 -0
- package/dist/bcf-client.js +108 -0
- package/dist/bcf-client.js.map +1 -0
- package/dist/bcf-nodes.d.ts +3 -0
- package/dist/bcf-nodes.d.ts.map +1 -0
- package/dist/bcf-nodes.js +181 -0
- package/dist/bcf-nodes.js.map +1 -0
- package/dist/csv-nodes.d.ts.map +1 -1
- package/dist/csv-nodes.js +3 -4
- package/dist/csv-nodes.js.map +1 -1
- package/dist/documents-fetch.d.ts +23 -0
- package/dist/documents-fetch.d.ts.map +1 -0
- package/dist/documents-fetch.js +48 -0
- package/dist/documents-fetch.js.map +1 -0
- package/dist/documents-nodes.d.ts +5 -0
- package/dist/documents-nodes.d.ts.map +1 -0
- package/dist/documents-nodes.js +167 -0
- package/dist/documents-nodes.js.map +1 -0
- package/dist/host.d.ts +28 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js.map +1 -1
- package/dist/http-request-node.d.ts +9 -0
- package/dist/http-request-node.d.ts.map +1 -0
- package/dist/http-request-node.js +109 -0
- package/dist/http-request-node.js.map +1 -0
- package/dist/index.d.ts +20 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -5
- package/dist/index.js.map +1 -1
- package/dist/model-nodes.d.ts.map +1 -1
- package/dist/model-nodes.js +11 -6
- package/dist/model-nodes.js.map +1 -1
- package/dist/open-model-node.d.ts +3 -0
- package/dist/open-model-node.d.ts.map +1 -0
- package/dist/open-model-node.js +47 -0
- package/dist/open-model-node.js.map +1 -0
- package/dist/script-node.d.ts.map +1 -1
- package/dist/script-node.js +55 -21
- package/dist/script-node.js.map +1 -1
- package/dist/secrets.d.ts +88 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +202 -0
- package/dist/secrets.js.map +1 -0
- package/dist/speckle/client.d.ts +52 -0
- package/dist/speckle/client.d.ts.map +1 -0
- package/dist/speckle/client.js +153 -0
- package/dist/speckle/client.js.map +1 -0
- package/dist/speckle/geometry.d.ts +37 -0
- package/dist/speckle/geometry.d.ts.map +1 -0
- package/dist/speckle/geometry.js +126 -0
- package/dist/speckle/geometry.js.map +1 -0
- package/dist/speckle/mapping.d.ts +62 -0
- package/dist/speckle/mapping.d.ts.map +1 -0
- package/dist/speckle/mapping.js +208 -0
- package/dist/speckle/mapping.js.map +1 -0
- package/dist/speckle/parameters.d.ts +49 -0
- package/dist/speckle/parameters.d.ts.map +1 -0
- package/dist/speckle/parameters.js +95 -0
- package/dist/speckle/parameters.js.map +1 -0
- package/dist/speckle/refusals.d.ts +45 -0
- package/dist/speckle/refusals.d.ts.map +1 -0
- package/dist/speckle/refusals.js +40 -0
- package/dist/speckle/refusals.js.map +1 -0
- package/dist/speckle/units.d.ts +13 -0
- package/dist/speckle/units.d.ts.map +1 -0
- package/dist/speckle/units.js +59 -0
- package/dist/speckle/units.js.map +1 -0
- package/dist/speckle/url.d.ts +35 -0
- package/dist/speckle/url.d.ts.map +1 -0
- package/dist/speckle/url.js +48 -0
- package/dist/speckle/url.js.map +1 -0
- package/dist/speckle-receive-node.d.ts +9 -0
- package/dist/speckle-receive-node.d.ts.map +1 -0
- package/dist/speckle-receive-node.js +180 -0
- package/dist/speckle-receive-node.js.map +1 -0
- package/dist/xlsx-io.d.ts.map +1 -1
- package/dist/xlsx-io.js +3 -3
- package/dist/xlsx-io.js.map +1 -1
- package/dist/xlsx-nodes.d.ts.map +1 -1
- package/dist/xlsx-nodes.js +1 -40
- package/dist/xlsx-nodes.js.map +1 -1
- package/package.json +11 -9
- package/dist/strict-cell.d.ts +0 -20
- package/dist/strict-cell.d.ts.map +0 -1
- package/dist/strict-cell.js +0 -33
- package/dist/strict-cell.js.map +0 -1
package/dist/csv-nodes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv-nodes.js","sourceRoot":"","sources":["../src/csv-nodes.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"csv-nodes.js","sourceRoot":"","sources":["../src/csv-nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `fetchFn` every `documents.*` node hands `DocumentsApiClient`: it
|
|
3
|
+
* routes each request through `@ifc-lite/sandbox`'s `coreNetworkRequest`,
|
|
4
|
+
* so the https-only / exact-host-grant / no-redirect / byte-cap policy is
|
|
5
|
+
* the same one `http.request` and `bim.network.fetch` run, checked against
|
|
6
|
+
* `ctx.host.networkGrants` BEFORE `ctx.host.networkTransport` is called.
|
|
7
|
+
* The client never sees a bare `fetch`.
|
|
8
|
+
*
|
|
9
|
+
* The body always comes back as bytes (`responseType: 'bytes'`), so a
|
|
10
|
+
* binary download is not mangled by a UTF-8 decode; a JSON answer is
|
|
11
|
+
* decoded by the client's own `response.json()`. A body that hit the byte
|
|
12
|
+
* cap is an error, never a silently short file or a truncated JSON.
|
|
13
|
+
*/
|
|
14
|
+
import type { FetchLike } from '@ifc-lite/documents-api';
|
|
15
|
+
import type { Ctx } from './host.js';
|
|
16
|
+
export interface GatedFetchOptions {
|
|
17
|
+
readonly timeoutMs: number;
|
|
18
|
+
readonly maxBytes: number;
|
|
19
|
+
/** Node type, prefixed to a denial so the run log says which node was refused. */
|
|
20
|
+
readonly label: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function gatedFetch(ctx: Ctx, options: GatedFetchOptions): FetchLike;
|
|
23
|
+
//# sourceMappingURL=documents-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents-fetch.d.ts","sourceRoot":"","sources":["../src/documents-fetch.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAkC1E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { coreNetworkRequest, NetworkDeniedError } from '@ifc-lite/sandbox';
|
|
5
|
+
/** Statuses whose `Response` may not carry a body (the constructor throws otherwise). */
|
|
6
|
+
const NULL_BODY_STATUSES = new Set([101, 204, 205, 304]);
|
|
7
|
+
function headerRecord(headers) {
|
|
8
|
+
const out = {};
|
|
9
|
+
new Headers(headers).forEach((value, key) => {
|
|
10
|
+
out[key] = value;
|
|
11
|
+
});
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
14
|
+
export function gatedFetch(ctx, options) {
|
|
15
|
+
return async (url, init) => {
|
|
16
|
+
const method = (init?.method ?? 'GET').toUpperCase();
|
|
17
|
+
if (method !== 'GET' && method !== 'POST')
|
|
18
|
+
throw new Error(`${options.label}: ${method} requests are not supported`);
|
|
19
|
+
if (init?.body !== undefined && init.body !== null && typeof init.body !== 'string') {
|
|
20
|
+
throw new Error(`${options.label}: only text request bodies are supported`);
|
|
21
|
+
}
|
|
22
|
+
let res;
|
|
23
|
+
try {
|
|
24
|
+
res = await coreNetworkRequest({
|
|
25
|
+
url,
|
|
26
|
+
method,
|
|
27
|
+
headers: headerRecord(init?.headers),
|
|
28
|
+
body: init?.body ?? undefined,
|
|
29
|
+
timeoutMs: options.timeoutMs,
|
|
30
|
+
maxBytes: options.maxBytes,
|
|
31
|
+
signal: ctx.signal,
|
|
32
|
+
responseType: 'bytes',
|
|
33
|
+
allowNotModified: true,
|
|
34
|
+
}, ctx.host.networkGrants ?? [], ctx.host.networkTransport);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (err instanceof NetworkDeniedError)
|
|
38
|
+
throw new Error(`${options.label}: ${err.message}`);
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
if (res.truncated) {
|
|
42
|
+
throw new Error(`${options.label}: the response from ${url} exceeded maxBytes (${options.maxBytes}); raise maxBytes to accept it`);
|
|
43
|
+
}
|
|
44
|
+
const body = NULL_BODY_STATUSES.has(res.status) ? null : (res.bytes ?? new Uint8Array(0));
|
|
45
|
+
return new Response(body, { status: res.status, headers: res.headers });
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=documents-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents-fetch.js","sourceRoot":"","sources":["../src/documents-fetch.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAiB/D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU3E,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEzD,SAAS,YAAY,CAAC,OAAgC;IACpD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAQ,EAAE,OAA0B;IAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,6BAA6B,CAAC,CAAC;QACrH,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,0CAA0C,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,kBAAkB,CAC5B;gBACE,GAAG;gBACH,MAAM;gBACN,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;gBACpC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS;gBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,YAAY,EAAE,OAAO;gBACrB,gBAAgB,EAAE,IAAI;aACvB,EACD,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAC5B,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3F,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,uBAAuB,GAAG,uBAAuB,OAAO,CAAC,QAAQ,gCAAgC,CAAC,CAAC;QACrI,CAAC;QACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents-nodes.d.ts","sourceRoot":"","sources":["../src/documents-nodes.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,gBAAgB,CAAC;AAIpD,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAgC7F,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAS5C,CAAC;AAqCF,eAAO,MAAM,cAAc,EAAE,WAAW,EAmEvC,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* `documents.*` — the OpenCDE Documents API 1.0 (`@ifc-lite/documents-api`)
|
|
6
|
+
* as flow nodes (#5167 phase 3.4): poll a tracked set of documents for new
|
|
7
|
+
* versions, and download a version's file.
|
|
8
|
+
*
|
|
9
|
+
* Every request goes through `gatedFetch` (see `documents-fetch.ts`), i.e.
|
|
10
|
+
* the same `coreNetworkRequest` grant check `http.request` runs: the graph
|
|
11
|
+
* must declare `network.fetch:<cde-host>` for the host it talks to. Both
|
|
12
|
+
* nodes are `volatile` — a CDE's answer is the world outside the graph, so
|
|
13
|
+
* a rerun must ask again rather than replay a memo.
|
|
14
|
+
*
|
|
15
|
+
* The bearer token is an ordinary string param, so it is written as
|
|
16
|
+
* `{{secret:NAME}}` (with `secret.read:NAME` declared); the CLI/MCP runner
|
|
17
|
+
* substitutes it before this node runs and redacts it from the run output.
|
|
18
|
+
*
|
|
19
|
+
* A downloaded file travels an edge as base64 text, the encoding
|
|
20
|
+
* `table.readXlsx` already reads, because a flow `Scalar` has no bytes.
|
|
21
|
+
*/
|
|
22
|
+
import { DocumentsApiClient } from '@ifc-lite/documents-api';
|
|
23
|
+
import { toBase64 } from './base64.js';
|
|
24
|
+
import { gatedFetch } from './documents-fetch.js';
|
|
25
|
+
import { boundOr } from './http-request-node.js';
|
|
26
|
+
import { SCALAR_ITEM, SCALAR_LIST, TABLE_ITEM } from './host.js';
|
|
27
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
28
|
+
const DEFAULT_QUERY_MAX_BYTES = 5 * 1024 * 1024;
|
|
29
|
+
const DEFAULT_DOWNLOAD_MAX_BYTES = 256 * 1024 * 1024;
|
|
30
|
+
const TOKEN_PARAM = {
|
|
31
|
+
name: 'token',
|
|
32
|
+
kind: 'string',
|
|
33
|
+
default: '',
|
|
34
|
+
doc: 'Bearer access token, normally `{{secret:NAME}}` with `secret.read:NAME` declared. Empty for an anonymous server.',
|
|
35
|
+
};
|
|
36
|
+
function tokenProvider(raw) {
|
|
37
|
+
const token = typeof raw === 'string' ? raw.trim().replace(/^Bearer\s+/i, '') : '';
|
|
38
|
+
return token.length > 0 ? () => token : undefined;
|
|
39
|
+
}
|
|
40
|
+
function client(ctx, label, baseUrl, p, maxBytes) {
|
|
41
|
+
return new DocumentsApiClient({
|
|
42
|
+
baseUrl,
|
|
43
|
+
getAccessToken: tokenProvider(p.token),
|
|
44
|
+
fetchFn: gatedFetch(ctx, { label, timeoutMs: boundOr(p.timeoutMs, DEFAULT_TIMEOUT_MS, 1), maxBytes: boundOr(p.maxBytes, maxBytes, 0) }),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** Document ids from the wired list, else the param (a JSON array or a comma-separated string). */
|
|
48
|
+
function documentIds(input, param) {
|
|
49
|
+
const raw = Array.isArray(input) ? input : Array.isArray(param) ? param : typeof param === 'string' ? param.split(',') : [];
|
|
50
|
+
return raw.map((v) => String(v ?? '').trim()).filter((v) => v.length > 0);
|
|
51
|
+
}
|
|
52
|
+
export const VERSION_COLUMNS = [
|
|
53
|
+
{ name: 'document_id', type: 'identifier' },
|
|
54
|
+
{ name: 'version_number', type: 'label' },
|
|
55
|
+
{ name: 'version_index', type: 'integer' },
|
|
56
|
+
{ name: 'title', type: 'string' },
|
|
57
|
+
{ name: 'creation_date', type: 'string' },
|
|
58
|
+
{ name: 'file_name', type: 'string' },
|
|
59
|
+
{ name: 'size_in_bytes', type: 'integer' },
|
|
60
|
+
{ name: 'download_url', type: 'string' },
|
|
61
|
+
];
|
|
62
|
+
function versionsTable(versions) {
|
|
63
|
+
return {
|
|
64
|
+
columns: VERSION_COLUMNS,
|
|
65
|
+
key: 'document_id',
|
|
66
|
+
rows: versions.map((v) => ({
|
|
67
|
+
document_id: v.document_id,
|
|
68
|
+
version_number: v.version_number,
|
|
69
|
+
version_index: v.version_index,
|
|
70
|
+
title: v.title,
|
|
71
|
+
creation_date: v.creation_date,
|
|
72
|
+
file_name: v.file_description?.name ?? null,
|
|
73
|
+
size_in_bytes: v.file_description?.size_in_bytes ?? null,
|
|
74
|
+
download_url: v.links?.document_version_download?.url ?? null,
|
|
75
|
+
})),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** Last path segment of `url`, decoded — the fallback file name for a download. */
|
|
79
|
+
function nameFromUrl(url) {
|
|
80
|
+
try {
|
|
81
|
+
const segment = new URL(url).pathname.split('/').filter(Boolean).pop();
|
|
82
|
+
return segment ? decodeURIComponent(segment) : 'download';
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Not a parseable URL: the request itself already failed on it.
|
|
86
|
+
return 'download';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const NETWORK_NODE = {
|
|
90
|
+
capabilities: ['network.fetch:*'],
|
|
91
|
+
requires: { network: true },
|
|
92
|
+
// A cached answer would skip the request and report a stale CDE state.
|
|
93
|
+
volatile: true,
|
|
94
|
+
};
|
|
95
|
+
export const documentsNodes = [
|
|
96
|
+
{
|
|
97
|
+
type: 'documents.queryVersions',
|
|
98
|
+
title: 'Query document versions',
|
|
99
|
+
category: 'network',
|
|
100
|
+
doc: 'Polls an OpenCDE Documents API server (`POST /document-versions`) for the latest version of each document id. Pass the ETag of the previous poll: when the server answers 304, `changed` is false, `versions` is empty and `etag` echoes the one sent.',
|
|
101
|
+
inputs: [
|
|
102
|
+
{ name: 'documentIds', type: SCALAR_LIST, optional: true },
|
|
103
|
+
{ name: 'etag', type: SCALAR_ITEM, optional: true, nullable: true },
|
|
104
|
+
],
|
|
105
|
+
outputs: [
|
|
106
|
+
{ name: 'versions', type: TABLE_ITEM },
|
|
107
|
+
{ name: 'etag', type: SCALAR_ITEM },
|
|
108
|
+
{ name: 'changed', type: SCALAR_ITEM },
|
|
109
|
+
],
|
|
110
|
+
params: [
|
|
111
|
+
{ name: 'baseUrl', kind: 'string', default: '', doc: 'Documents API base URL, e.g. https://cde.example/documents/1.0. Its host must be granted with network.fetch:<host>.' },
|
|
112
|
+
{ name: 'documentIds', kind: 'json', default: [], doc: 'Document ids to poll, used when the `documentIds` input is not wired.' },
|
|
113
|
+
{ name: 'etag', kind: 'string', default: '', doc: 'ETag of the previous poll, used when the `etag` input is not wired.' },
|
|
114
|
+
TOKEN_PARAM,
|
|
115
|
+
{ name: 'timeoutMs', kind: 'number', default: DEFAULT_TIMEOUT_MS },
|
|
116
|
+
{ name: 'maxBytes', kind: 'number', default: DEFAULT_QUERY_MAX_BYTES, doc: 'Largest response accepted; a larger one fails the node.' },
|
|
117
|
+
],
|
|
118
|
+
...NETWORK_NODE,
|
|
119
|
+
run: async (ctx, i, p) => {
|
|
120
|
+
const baseUrl = typeof p.baseUrl === 'string' ? p.baseUrl.trim() : '';
|
|
121
|
+
if (baseUrl.length === 0)
|
|
122
|
+
throw new Error('documents.queryVersions: "baseUrl" is required');
|
|
123
|
+
const ids = documentIds(i.documentIds, p.documentIds);
|
|
124
|
+
if (ids.length === 0)
|
|
125
|
+
throw new Error('documents.queryVersions: no document ids to query');
|
|
126
|
+
const previous = typeof i.etag === 'string' && i.etag.length > 0 ? i.etag : typeof p.etag === 'string' && p.etag.length > 0 ? p.etag : undefined;
|
|
127
|
+
const poll = await client(ctx, 'documents.queryVersions', baseUrl, p, DEFAULT_QUERY_MAX_BYTES).queryDocumentVersions(ids, previous);
|
|
128
|
+
if (poll === null)
|
|
129
|
+
return { versions: versionsTable([]), etag: previous ?? null, changed: false };
|
|
130
|
+
return { versions: versionsTable(poll.result.versions ?? []), etag: poll.etag, changed: true };
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
type: 'documents.download',
|
|
135
|
+
title: 'Download document',
|
|
136
|
+
category: 'network',
|
|
137
|
+
doc: 'Downloads one document version from its `document_version_download` link (the `download_url` column of Query document versions). `data` is the file as base64; `name` is the wired name, else the URL\'s last path segment.',
|
|
138
|
+
inputs: [
|
|
139
|
+
{ name: 'url', type: SCALAR_ITEM, optional: true },
|
|
140
|
+
{ name: 'name', type: SCALAR_ITEM, optional: true, nullable: true },
|
|
141
|
+
],
|
|
142
|
+
outputs: [
|
|
143
|
+
{ name: 'data', type: SCALAR_ITEM },
|
|
144
|
+
{ name: 'name', type: SCALAR_ITEM },
|
|
145
|
+
{ name: 'size', type: SCALAR_ITEM },
|
|
146
|
+
{ name: 'contentType', type: SCALAR_ITEM },
|
|
147
|
+
],
|
|
148
|
+
params: [
|
|
149
|
+
{ name: 'url', kind: 'string', default: '', doc: 'Download URL, used when the `url` input is not wired. Its host must be granted with network.fetch:<host>.' },
|
|
150
|
+
TOKEN_PARAM,
|
|
151
|
+
{ name: 'timeoutMs', kind: 'number', default: DEFAULT_TIMEOUT_MS },
|
|
152
|
+
{ name: 'maxBytes', kind: 'number', default: DEFAULT_DOWNLOAD_MAX_BYTES, doc: 'Largest file accepted; a larger one fails the node rather than yielding a truncated file.' },
|
|
153
|
+
],
|
|
154
|
+
...NETWORK_NODE,
|
|
155
|
+
run: async (ctx, i, p) => {
|
|
156
|
+
const url = typeof i.url === 'string' && i.url.length > 0 ? i.url : typeof p.url === 'string' ? p.url.trim() : '';
|
|
157
|
+
if (url.length === 0)
|
|
158
|
+
throw new Error('documents.download: "url" is required');
|
|
159
|
+
// The download link is absolute and server-issued, so the client's base URL is never used here.
|
|
160
|
+
const blob = await client(ctx, 'documents.download', url, p, DEFAULT_DOWNLOAD_MAX_BYTES).downloadDocumentVersion(url);
|
|
161
|
+
const bytes = new Uint8Array(await blob.arrayBuffer());
|
|
162
|
+
const name = typeof i.name === 'string' && i.name.length > 0 ? i.name : nameFromUrl(url);
|
|
163
|
+
return { data: toBase64(bytes), name, size: bytes.byteLength, contentType: blob.type || null };
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
];
|
|
167
|
+
//# sourceMappingURL=documents-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents-nodes.js","sourceRoot":"","sources":["../src/documents-nodes.ts"],"names":[],"mappings":"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"}
|
package/dist/host.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* because it never sees arguments.
|
|
10
10
|
*/
|
|
11
11
|
import { type Capability } from '@ifc-lite/extensions';
|
|
12
|
+
import type { FetchTransport } from '@ifc-lite/sandbox';
|
|
12
13
|
import type { NodeDef, NodeRunContext } from '@ifc-lite/flow';
|
|
13
14
|
import type { BimContext, EntityData, EntityRef as SdkEntityRef } from '@ifc-lite/sdk';
|
|
14
15
|
import type { EntityRef } from '@ifc-lite/flow';
|
|
@@ -46,10 +47,37 @@ export interface FlowHost {
|
|
|
46
47
|
* passes the grants the user accepted.
|
|
47
48
|
*/
|
|
48
49
|
readonly grants?: readonly Capability[];
|
|
50
|
+
/**
|
|
51
|
+
* The graph's own declared `network.fetch:<host>` (and `secret.read:<NAME>`)
|
|
52
|
+
* capabilities — ALWAYS populated by every caller (CLI, MCP, viewer),
|
|
53
|
+
* independent of `grants`/the trust gate above. Real network access and
|
|
54
|
+
* secret reads are the one place "trusted local caller" does not mean
|
|
55
|
+
* "unrestricted": a request still needs the graph to have written down
|
|
56
|
+
* which host it may reach, so `HttpRequest` (and `bim.network.fetch` in
|
|
57
|
+
* the sandbox) always check the actual host against this list rather
|
|
58
|
+
* than relying on `grants` being undefined to skip the check entirely.
|
|
59
|
+
*/
|
|
60
|
+
readonly networkGrants?: readonly Capability[];
|
|
61
|
+
/**
|
|
62
|
+
* Transport for `http.request`; `fetch` when absent. Only changes how bytes
|
|
63
|
+
* move — the grant check against `networkGrants` always runs first.
|
|
64
|
+
*/
|
|
65
|
+
readonly networkTransport?: FetchTransport;
|
|
49
66
|
/** Model to query when a node does not name one. */
|
|
50
67
|
readonly defaultModelId?: string;
|
|
51
68
|
/** See {@link TableAccess}. `modelId` defaults to `defaultModelId`. */
|
|
52
69
|
tables?(modelId?: string): TableAccess | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Open `bytes` (an IFC file named `name`) as a model through the host's
|
|
72
|
+
* own load path, resolving to the id the loaded model answers to in
|
|
73
|
+
* `bim`. Backs `model.openFromSource`; a host that can do this lists the
|
|
74
|
+
* `openModel` backend feature. The viewer adds the model to the
|
|
75
|
+
* federation; a headless host (one model per `BimContext`) makes it the
|
|
76
|
+
* model `bim` and `defaultModelId` answer for from then on.
|
|
77
|
+
*/
|
|
78
|
+
openModel?(bytes: Uint8Array, name: string): Promise<{
|
|
79
|
+
readonly modelId: string;
|
|
80
|
+
}>;
|
|
53
81
|
}
|
|
54
82
|
export type FlowNodeDef = NodeDef<FlowHost>;
|
|
55
83
|
export type Ctx = NodeRunContext<FlowHost>;
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,EAAyD,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9G,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;gEAEgE;AAChE,MAAM,MAAM,YAAY,GAAG;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,oDAAoD;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,uEAAuE;IACvE,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;GASG;AAEH,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type FlowNodeDef } from './host.js';
|
|
2
|
+
/**
|
|
3
|
+
* A numeric bound, or `fallback` when absent or not a number at least `min`.
|
|
4
|
+
* `Number(x) || fallback` read an explicit `maxBytes: 0` as "unset" and
|
|
5
|
+
* lifted the cap to the 5 MiB default.
|
|
6
|
+
*/
|
|
7
|
+
export declare function boundOr(value: unknown, fallback: number, min: number): number;
|
|
8
|
+
export declare const httpRequestNode: FlowNodeDef;
|
|
9
|
+
//# sourceMappingURL=http-request-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-request-node.d.ts","sourceRoot":"","sources":["../src/http-request-node.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AA+B9E;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7E;AA4BD,eAAO,MAAM,eAAe,EAAE,WA0B7B,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* `http.request` — the one flow node that performs outbound HTTP. It calls
|
|
6
|
+
* the SAME core request function the sandbox's `bim.network.fetch` bridge
|
|
7
|
+
* uses (`@ifc-lite/sandbox`'s `coreNetworkRequest`), so the https-only /
|
|
8
|
+
* exact-host-grant / no-redirect / body-cap / header-denylist policy lives
|
|
9
|
+
* in exactly one implementation.
|
|
10
|
+
*
|
|
11
|
+
* The host allow-list check runs against `ctx.host.networkGrants` — which
|
|
12
|
+
* every caller (CLI, MCP, viewer) populates from the graph's own declared
|
|
13
|
+
* `network.fetch:<host>` capabilities REGARDLESS of whether that caller
|
|
14
|
+
* treats the graph as a "trusted, no capability gate" run (see the doc
|
|
15
|
+
* comment on `FlowHost.networkGrants` in `host.ts`): a local CLI run is
|
|
16
|
+
* trusted to mutate the model it was pointed at, but it is not trusted to
|
|
17
|
+
* reach an arbitrary host the graph never wrote down.
|
|
18
|
+
*
|
|
19
|
+
* `headers`/`body`/`url` are ordinary string/json params, so the graph
|
|
20
|
+
* author can put a `{{secret:NAME}}` reference in a header value; secret
|
|
21
|
+
* interpolation happens one layer up (`@ifc-lite/flow-nodes`'s
|
|
22
|
+
* `secrets.ts`, run by the CLI/MCP entry points before `runFlow` is
|
|
23
|
+
* called) — this node just sees the already-substituted string. It never
|
|
24
|
+
* reads `process.env` itself.
|
|
25
|
+
*/
|
|
26
|
+
import { coreNetworkRequest, NetworkDeniedError } from '@ifc-lite/sandbox';
|
|
27
|
+
import { ANY_ITEM, SCALAR_ITEM } from './host.js';
|
|
28
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
29
|
+
const DEFAULT_MAX_BYTES = 5 * 1024 * 1024;
|
|
30
|
+
function normalizeMethod(raw) {
|
|
31
|
+
const m = typeof raw === 'string' ? raw.toUpperCase() : 'GET';
|
|
32
|
+
if (m === 'GET' || m === 'POST')
|
|
33
|
+
return m;
|
|
34
|
+
throw new Error(`http.request: unsupported method "${String(raw)}" — only GET and POST are implemented`);
|
|
35
|
+
}
|
|
36
|
+
function normalizeHeaders(raw) {
|
|
37
|
+
if (raw === undefined || raw === null)
|
|
38
|
+
return undefined;
|
|
39
|
+
if (typeof raw !== 'object' || Array.isArray(raw))
|
|
40
|
+
throw new Error('http.request: "headers" must be an object of string values');
|
|
41
|
+
const out = {};
|
|
42
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
43
|
+
if (typeof v !== 'string')
|
|
44
|
+
throw new Error(`http.request: header "${k}" must be a string value`);
|
|
45
|
+
out[k] = v;
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A numeric bound, or `fallback` when absent or not a number at least `min`.
|
|
51
|
+
* `Number(x) || fallback` read an explicit `maxBytes: 0` as "unset" and
|
|
52
|
+
* lifted the cap to the 5 MiB default.
|
|
53
|
+
*/
|
|
54
|
+
export function boundOr(value, fallback, min) {
|
|
55
|
+
const n = typeof value === 'number' ? value : typeof value === 'string' && value.trim() !== '' ? Number(value) : Number.NaN;
|
|
56
|
+
return Number.isFinite(n) && n >= min ? n : fallback;
|
|
57
|
+
}
|
|
58
|
+
async function run(ctx, _inputs, params) {
|
|
59
|
+
const p = params;
|
|
60
|
+
const url = typeof p.url === 'string' ? p.url : '';
|
|
61
|
+
if (url.length === 0)
|
|
62
|
+
throw new Error('http.request: "url" is required');
|
|
63
|
+
const grants = ctx.host.networkGrants ?? [];
|
|
64
|
+
try {
|
|
65
|
+
const res = await coreNetworkRequest({
|
|
66
|
+
url,
|
|
67
|
+
method: normalizeMethod(p.method),
|
|
68
|
+
headers: normalizeHeaders(p.headers),
|
|
69
|
+
body: typeof p.body === 'string' ? p.body : undefined,
|
|
70
|
+
timeoutMs: boundOr(p.timeoutMs, DEFAULT_TIMEOUT_MS, 1),
|
|
71
|
+
maxBytes: boundOr(p.maxBytes, DEFAULT_MAX_BYTES, 0),
|
|
72
|
+
signal: ctx.signal,
|
|
73
|
+
}, grants, ctx.host.networkTransport);
|
|
74
|
+
return { status: res.status, headers: res.headers, body: res.body, truncated: res.truncated, ok: res.status >= 200 && res.status < 300 };
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
if (err instanceof NetworkDeniedError)
|
|
78
|
+
throw new Error(`http.request: ${err.message}`);
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export const httpRequestNode = {
|
|
83
|
+
type: 'http.request',
|
|
84
|
+
title: 'HTTP Request',
|
|
85
|
+
category: 'network',
|
|
86
|
+
doc: 'Issues one https: GET/POST request to a host covered by a granted `network.fetch:<host>` capability. Headers/body may contain `{{secret:NAME}}`, resolved by the CLI/MCP runner before this node sees them — never available in the viewer, where a graph needing a secret shows unavailable before it runs.',
|
|
87
|
+
inputs: [],
|
|
88
|
+
outputs: [
|
|
89
|
+
{ name: 'status', type: SCALAR_ITEM },
|
|
90
|
+
{ name: 'headers', type: ANY_ITEM },
|
|
91
|
+
{ name: 'body', type: SCALAR_ITEM },
|
|
92
|
+
{ name: 'truncated', type: SCALAR_ITEM },
|
|
93
|
+
{ name: 'ok', type: SCALAR_ITEM },
|
|
94
|
+
],
|
|
95
|
+
params: [
|
|
96
|
+
{ name: 'url', kind: 'string', default: '', doc: 'https:// URL. The hostname must match a granted network.fetch:<host> capability exactly.' },
|
|
97
|
+
{ name: 'method', kind: 'enum', default: 'GET', options: ['GET', 'POST'] },
|
|
98
|
+
{ name: 'headers', kind: 'json', default: {}, doc: 'Header map. May reference {{secret:NAME}} for a declared secret.' },
|
|
99
|
+
{ name: 'body', kind: 'string', default: '', doc: 'Request body for POST. May reference {{secret:NAME}}.' },
|
|
100
|
+
{ name: 'timeoutMs', kind: 'number', default: DEFAULT_TIMEOUT_MS },
|
|
101
|
+
{ name: 'maxBytes', kind: 'number', default: DEFAULT_MAX_BYTES, doc: 'Response body is capped at this many bytes; the read is aborted mid-stream past it.' },
|
|
102
|
+
],
|
|
103
|
+
capabilities: ['network.fetch:*'],
|
|
104
|
+
requires: { network: true },
|
|
105
|
+
// A cached answer would skip the request: a POST not sent, a GET stale (#5446 review).
|
|
106
|
+
volatile: true,
|
|
107
|
+
run,
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=http-request-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-request-node.js","sourceRoot":"","sources":["../src/http-request-node.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,14 +6,32 @@ export { columnTypeOf, VALUE_TYPE_BY_COLUMN_TYPE } from './table-nodes.js';
|
|
|
6
6
|
export type { ElementSpec } from './element-nodes.js';
|
|
7
7
|
export { readXlsxTable, writeXlsxTable } from './xlsx-io.js';
|
|
8
8
|
export type { ReadXlsxOptions, ReadXlsxResult, XlsxColumnSpec } from './xlsx-io.js';
|
|
9
|
+
export { declaredSecrets, referencedSecrets, validateSecretReferences, resolveSecretValues, interpolateSecrets, buildRedactionMap, redactText, redactDeep, MIN_REDACTED_SECRET_LENGTH, usableSecretNames, } from './secrets.js';
|
|
10
|
+
export type { SecretValidationError } from './secrets.js';
|
|
9
11
|
/** Every standard node, in one registry. */
|
|
10
12
|
export declare function createStandardRegistry(): NodeRegistry<FlowHost>;
|
|
11
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* What a viewer-embedded host offers. `network` is `true`: the viewer DOES
|
|
15
|
+
* attempt `network.fetch` (subject to the browser's own CORS enforcement —
|
|
16
|
+
* a blocked request surfaces as an explicit CORS error, not an empty
|
|
17
|
+
* success; see `HttpRequest`'s node doc and `runner.ts`). `secrets` is
|
|
18
|
+
* always empty: the browser has no `process.env` and must never persist a
|
|
19
|
+
* secret, so a graph that references one shows `unavailable` before it
|
|
20
|
+
* runs rather than failing mid-run (#5167 phase 3.5).
|
|
21
|
+
*/
|
|
12
22
|
export declare const BROWSER_FEATURES: HostFeatures;
|
|
13
23
|
/**
|
|
14
|
-
* What the CLI's
|
|
24
|
+
* What the CLI's / MCP's headless backend offers. It implements the viewer
|
|
15
25
|
* methods as inert no-ops, so `viewer`/`visibility`/`selection` are
|
|
16
26
|
* deliberately absent here: a viewer node must report `noop`, not pretend.
|
|
27
|
+
* `network` is always `true`: both headless callers have a real, unrestricted
|
|
28
|
+
* `fetch` (no CORS), so a `network.fetch` bridge is always configured — the
|
|
29
|
+
* per-request host allow-list check still runs against the graph's actual
|
|
30
|
+
* grants (see `network-request.ts`). `secrets` is exactly the set of env var
|
|
31
|
+
* names the caller passes (CLI: `Object.keys(process.env)`; MCP: the same —
|
|
32
|
+
* see `flow.ts` in `@ifc-lite/cli` and `@ifc-lite/mcp`), never guessed here.
|
|
33
|
+
* `openModel` is listed because both headless callers implement
|
|
34
|
+
* `FlowHost.openModel` (`model.openFromSource`).
|
|
17
35
|
*/
|
|
18
36
|
export declare function headlessFeatures(secrets?: Iterable<string>): HostFeatures;
|
|
19
37
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAUjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAU1C,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAC7I,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1D,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,YAAY,CAAC,QAAQ,CAAC,CAqB/D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAI9B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,YAAY,CAE7E"}
|