@ifc-lite/flow-nodes 0.3.1 → 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.
Files changed (94) hide show
  1. package/README.md +1 -0
  2. package/dist/aps-client.d.ts +55 -0
  3. package/dist/aps-client.d.ts.map +1 -0
  4. package/dist/aps-client.js +194 -0
  5. package/dist/aps-client.js.map +1 -0
  6. package/dist/aps-nodes.d.ts +3 -0
  7. package/dist/aps-nodes.d.ts.map +1 -0
  8. package/dist/aps-nodes.js +192 -0
  9. package/dist/aps-nodes.js.map +1 -0
  10. package/dist/aps-table.d.ts +24 -0
  11. package/dist/aps-table.d.ts.map +1 -0
  12. package/dist/aps-table.js +123 -0
  13. package/dist/aps-table.js.map +1 -0
  14. package/dist/base64.d.ts +8 -0
  15. package/dist/base64.d.ts.map +1 -0
  16. package/dist/base64.js +59 -0
  17. package/dist/base64.js.map +1 -0
  18. package/dist/bcf-client.d.ts +36 -0
  19. package/dist/bcf-client.d.ts.map +1 -0
  20. package/dist/bcf-client.js +108 -0
  21. package/dist/bcf-client.js.map +1 -0
  22. package/dist/bcf-nodes.d.ts +3 -0
  23. package/dist/bcf-nodes.d.ts.map +1 -0
  24. package/dist/bcf-nodes.js +181 -0
  25. package/dist/bcf-nodes.js.map +1 -0
  26. package/dist/documents-fetch.d.ts +23 -0
  27. package/dist/documents-fetch.d.ts.map +1 -0
  28. package/dist/documents-fetch.js +48 -0
  29. package/dist/documents-fetch.js.map +1 -0
  30. package/dist/documents-nodes.d.ts +5 -0
  31. package/dist/documents-nodes.d.ts.map +1 -0
  32. package/dist/documents-nodes.js +167 -0
  33. package/dist/documents-nodes.js.map +1 -0
  34. package/dist/host.d.ts +28 -0
  35. package/dist/host.d.ts.map +1 -1
  36. package/dist/host.js.map +1 -1
  37. package/dist/http-request-node.d.ts +9 -0
  38. package/dist/http-request-node.d.ts.map +1 -0
  39. package/dist/http-request-node.js +109 -0
  40. package/dist/http-request-node.js.map +1 -0
  41. package/dist/index.d.ts +20 -2
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +34 -5
  44. package/dist/index.js.map +1 -1
  45. package/dist/model-nodes.d.ts.map +1 -1
  46. package/dist/model-nodes.js +11 -6
  47. package/dist/model-nodes.js.map +1 -1
  48. package/dist/open-model-node.d.ts +3 -0
  49. package/dist/open-model-node.d.ts.map +1 -0
  50. package/dist/open-model-node.js +47 -0
  51. package/dist/open-model-node.js.map +1 -0
  52. package/dist/script-node.d.ts.map +1 -1
  53. package/dist/script-node.js +55 -21
  54. package/dist/script-node.js.map +1 -1
  55. package/dist/secrets.d.ts +88 -0
  56. package/dist/secrets.d.ts.map +1 -0
  57. package/dist/secrets.js +202 -0
  58. package/dist/secrets.js.map +1 -0
  59. package/dist/speckle/client.d.ts +52 -0
  60. package/dist/speckle/client.d.ts.map +1 -0
  61. package/dist/speckle/client.js +153 -0
  62. package/dist/speckle/client.js.map +1 -0
  63. package/dist/speckle/geometry.d.ts +37 -0
  64. package/dist/speckle/geometry.d.ts.map +1 -0
  65. package/dist/speckle/geometry.js +126 -0
  66. package/dist/speckle/geometry.js.map +1 -0
  67. package/dist/speckle/mapping.d.ts +62 -0
  68. package/dist/speckle/mapping.d.ts.map +1 -0
  69. package/dist/speckle/mapping.js +208 -0
  70. package/dist/speckle/mapping.js.map +1 -0
  71. package/dist/speckle/parameters.d.ts +49 -0
  72. package/dist/speckle/parameters.d.ts.map +1 -0
  73. package/dist/speckle/parameters.js +95 -0
  74. package/dist/speckle/parameters.js.map +1 -0
  75. package/dist/speckle/refusals.d.ts +45 -0
  76. package/dist/speckle/refusals.d.ts.map +1 -0
  77. package/dist/speckle/refusals.js +40 -0
  78. package/dist/speckle/refusals.js.map +1 -0
  79. package/dist/speckle/units.d.ts +13 -0
  80. package/dist/speckle/units.d.ts.map +1 -0
  81. package/dist/speckle/units.js +59 -0
  82. package/dist/speckle/units.js.map +1 -0
  83. package/dist/speckle/url.d.ts +35 -0
  84. package/dist/speckle/url.d.ts.map +1 -0
  85. package/dist/speckle/url.js +48 -0
  86. package/dist/speckle/url.js.map +1 -0
  87. package/dist/speckle-receive-node.d.ts +9 -0
  88. package/dist/speckle-receive-node.d.ts.map +1 -0
  89. package/dist/speckle-receive-node.js +180 -0
  90. package/dist/speckle-receive-node.js.map +1 -0
  91. package/dist/xlsx-nodes.d.ts.map +1 -1
  92. package/dist/xlsx-nodes.js +1 -40
  93. package/dist/xlsx-nodes.js.map +1 -1
  94. package/package.json +11 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aps-table.js","sourceRoot":"","sources":["../src/aps-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Encode into one preallocated ASCII buffer and decode it once. Appending
3
+ * four characters per 3 bytes built hundreds of millions of intermediate
4
+ * strings for a large download (#5935 review).
5
+ */
6
+ export declare function toBase64(bytes: Uint8Array): string;
7
+ export declare function fromBase64(text: string): Uint8Array;
8
+ //# sourceMappingURL=base64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAelD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAkBnD"}
package/dist/base64.js ADDED
@@ -0,0 +1,59 @@
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
+ * Base64 without `Buffer` or `btoa`/`atob`: this package runs in the browser
6
+ * (`viewer-embed`) as well as headlessly, and neither global is guaranteed —
7
+ * `Buffer` needs a bundler polyfill most Vite configs do not add, and `atob`
8
+ * mangles bytes above 0x7F on some hosts' string-vs-binary handling. A tiny
9
+ * table-driven codec sidesteps both.
10
+ */
11
+ const BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
12
+ const DECODE = (() => {
13
+ const table = new Int16Array(128).fill(-1);
14
+ for (let i = 0; i < BASE64_CHARS.length; i += 1)
15
+ table[BASE64_CHARS.charCodeAt(i)] = i;
16
+ return table;
17
+ })();
18
+ const PAD = 0x3d; // '='
19
+ /**
20
+ * Encode into one preallocated ASCII buffer and decode it once. Appending
21
+ * four characters per 3 bytes built hundreds of millions of intermediate
22
+ * strings for a large download (#5935 review).
23
+ */
24
+ export function toBase64(bytes) {
25
+ const out = new Uint8Array(Math.ceil(bytes.length / 3) * 4);
26
+ let o = 0;
27
+ for (let i = 0; i < bytes.length; i += 3) {
28
+ const b0 = bytes[i];
29
+ const has1 = i + 1 < bytes.length;
30
+ const has2 = i + 2 < bytes.length;
31
+ const b1 = has1 ? bytes[i + 1] : 0;
32
+ const b2 = has2 ? bytes[i + 2] : 0;
33
+ out[o++] = BASE64_CHARS.charCodeAt(b0 >> 2);
34
+ out[o++] = BASE64_CHARS.charCodeAt(((b0 & 0x03) << 4) | (b1 >> 4));
35
+ out[o++] = has1 ? BASE64_CHARS.charCodeAt(((b1 & 0x0f) << 2) | (b2 >> 6)) : PAD;
36
+ out[o++] = has2 ? BASE64_CHARS.charCodeAt(b2 & 0x3f) : PAD;
37
+ }
38
+ return new TextDecoder('ascii').decode(out);
39
+ }
40
+ export function fromBase64(text) {
41
+ const clean = text.replace(/[^A-Za-z0-9+/=]/g, '');
42
+ const len = clean.endsWith('==') ? clean.length - 2 : clean.endsWith('=') ? clean.length - 1 : clean.length;
43
+ const byteLength = Math.floor((len * 6) / 8);
44
+ const out = new Uint8Array(byteLength);
45
+ let bits = 0;
46
+ let value = 0;
47
+ let outIdx = 0;
48
+ for (let i = 0; i < len; i += 1) {
49
+ value = ((value << 6) | DECODE[clean.charCodeAt(i)]) & 0xffffff;
50
+ bits += 6;
51
+ if (bits >= 8) {
52
+ bits -= 8;
53
+ out[outIdx] = (value >> bits) & 0xff;
54
+ outIdx += 1;
55
+ }
56
+ }
57
+ return out;
58
+ }
59
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The shared plumbing of the `bcf.*` flow nodes (#5167 phase 3.4): the
3
+ * connection params every one of them takes, and a `BcfApiClient` whose
4
+ * `fetchFn` is the gated `coreNetworkRequest` from `@ifc-lite/sandbox` —
5
+ * the same function `http.request` and `bim.network.fetch` use. So every
6
+ * request the BCF client issues passes the https-only / exact-host-grant /
7
+ * no-redirect / body-cap policy against `ctx.host.networkGrants`, and moves
8
+ * over `ctx.host.networkTransport`; a BCF node never reaches bare `fetch`.
9
+ *
10
+ * The bearer token is an ordinary string param, so a graph writes
11
+ * `{{secret:BCF_TOKEN}}` and the CLI/MCP runner substitutes it before the
12
+ * node runs (see `secrets.ts`). It is handed to the client's
13
+ * `getAccessToken` and appears nowhere else: never logged, never in an
14
+ * output, never in an error message this module composes.
15
+ */
16
+ import { BcfApiClient, type FetchLike } from '@ifc-lite/bcf-api';
17
+ import type { ParamDef } from '@ifc-lite/flow';
18
+ import type { Ctx } from './host.js';
19
+ /** Connection params shared by every `bcf.*` node, in palette order. */
20
+ export declare const BCF_CONNECTION_PARAMS: readonly ParamDef[];
21
+ /**
22
+ * A `FetchLike` for `BcfApiClient` that sends every request through
23
+ * `coreNetworkRequest`. Only GET and POST exist there, and they are all the
24
+ * `bcf.*` nodes need; any other method is refused before the network.
25
+ */
26
+ export declare function gatedBcfFetch(ctx: Ctx, nodeType: string, params: Readonly<Record<string, unknown>>): FetchLike;
27
+ /** Required non-empty string param, trimmed. */
28
+ export declare function requiredString(nodeType: string, params: Readonly<Record<string, unknown>>, name: string): string;
29
+ /** A `BcfApiClient` over the gated transport, plus the project it addresses. */
30
+ export declare function bcfClientFor(ctx: Ctx, nodeType: string, params: Readonly<Record<string, unknown>>): {
31
+ client: BcfApiClient;
32
+ projectId: string;
33
+ };
34
+ /** Name the node on a denial, as `http.request` does; every other error passes through unchanged. */
35
+ export declare function withBcfErrors<T>(nodeType: string, fn: () => Promise<T>): Promise<T>;
36
+ //# sourceMappingURL=bcf-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcf-client.d.ts","sourceRoot":"","sources":["../src/bcf-client.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAKrC,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,EAAE,SAAS,QAAQ,EAOpD,CAAC;AAmBF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAmB9G;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhH;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAiB7C;AAED,qGAAqG;AACrG,wBAAsB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOzF"}
@@ -0,0 +1,108 @@
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
+ * The shared plumbing of the `bcf.*` flow nodes (#5167 phase 3.4): the
6
+ * connection params every one of them takes, and a `BcfApiClient` whose
7
+ * `fetchFn` is the gated `coreNetworkRequest` from `@ifc-lite/sandbox` —
8
+ * the same function `http.request` and `bim.network.fetch` use. So every
9
+ * request the BCF client issues passes the https-only / exact-host-grant /
10
+ * no-redirect / body-cap policy against `ctx.host.networkGrants`, and moves
11
+ * over `ctx.host.networkTransport`; a BCF node never reaches bare `fetch`.
12
+ *
13
+ * The bearer token is an ordinary string param, so a graph writes
14
+ * `{{secret:BCF_TOKEN}}` and the CLI/MCP runner substitutes it before the
15
+ * node runs (see `secrets.ts`). It is handed to the client's
16
+ * `getAccessToken` and appears nowhere else: never logged, never in an
17
+ * output, never in an error message this module composes.
18
+ */
19
+ import { BcfApiClient } from '@ifc-lite/bcf-api';
20
+ import { coreNetworkRequest, NetworkDeniedError } from '@ifc-lite/sandbox';
21
+ const DEFAULT_TIMEOUT_MS = 15_000;
22
+ const DEFAULT_MAX_BYTES = 5 * 1024 * 1024;
23
+ /** Connection params shared by every `bcf.*` node, in palette order. */
24
+ export const BCF_CONNECTION_PARAMS = [
25
+ { name: 'baseUrl', kind: 'string', default: '', doc: 'https:// BCF API base URL, up to but excluding the version segment (e.g. https://bcf.example.com/bcf). The hostname must match a granted network.fetch:<host> capability exactly.' },
26
+ { name: 'version', kind: 'string', default: '2.1', doc: 'BCF API version segment.' },
27
+ { name: 'projectId', kind: 'string', default: '', doc: 'BCF project id.' },
28
+ { name: 'token', kind: 'string', default: '', doc: 'Bearer access token, sent as `Authorization: Bearer <token>`. Use {{secret:NAME}} with a declared secret.read:NAME; leave empty for an anonymous server.' },
29
+ { name: 'timeoutMs', kind: 'number', default: DEFAULT_TIMEOUT_MS, doc: 'Wall-clock limit per request.' },
30
+ { name: 'maxBytes', kind: 'number', default: DEFAULT_MAX_BYTES, doc: 'Response body cap per request; a larger response fails the node rather than being parsed truncated.' },
31
+ ];
32
+ /** A numeric bound, or `fallback` when absent or below `min` (same reading as `http.request`). */
33
+ function boundOr(value, fallback, min) {
34
+ const n = typeof value === 'number' ? value : typeof value === 'string' && value.trim() !== '' ? Number(value) : Number.NaN;
35
+ return Number.isFinite(n) && n >= min ? n : fallback;
36
+ }
37
+ function headerRecord(headers) {
38
+ const out = {};
39
+ new Headers(headers).forEach((value, key) => {
40
+ out[key] = value;
41
+ });
42
+ return out;
43
+ }
44
+ /** Statuses whose `Response` must have a null body (the constructor throws otherwise). */
45
+ const NULL_BODY_STATUSES = new Set([101, 204, 205, 304]);
46
+ /**
47
+ * A `FetchLike` for `BcfApiClient` that sends every request through
48
+ * `coreNetworkRequest`. Only GET and POST exist there, and they are all the
49
+ * `bcf.*` nodes need; any other method is refused before the network.
50
+ */
51
+ export function gatedBcfFetch(ctx, nodeType, params) {
52
+ const timeoutMs = boundOr(params.timeoutMs, DEFAULT_TIMEOUT_MS, 1);
53
+ const maxBytes = boundOr(params.maxBytes, DEFAULT_MAX_BYTES, 0);
54
+ return async (url, init) => {
55
+ const method = (init?.method ?? 'GET').toUpperCase();
56
+ if (method !== 'GET' && method !== 'POST')
57
+ throw new Error(`${nodeType}: HTTP method ${method} is not supported`);
58
+ const body = init?.body;
59
+ if (body !== undefined && body !== null && typeof body !== 'string') {
60
+ throw new Error(`${nodeType}: only JSON request bodies are supported`);
61
+ }
62
+ const res = await coreNetworkRequest({ url, method, headers: headerRecord(init?.headers), body: body ?? undefined, timeoutMs, maxBytes, signal: ctx.signal }, ctx.host.networkGrants ?? [], ctx.host.networkTransport);
63
+ // A cut-off JSON body would surface as a confusing parse error; name the cap instead.
64
+ if (res.truncated)
65
+ throw new Error(`${nodeType}: response from ${url} exceeded maxBytes (${maxBytes}); raise the node's maxBytes param`);
66
+ return new Response(NULL_BODY_STATUSES.has(res.status) ? null : res.body, { status: res.status, headers: res.headers });
67
+ };
68
+ }
69
+ /** Required non-empty string param, trimmed. */
70
+ export function requiredString(nodeType, params, name) {
71
+ const v = params[name];
72
+ const s = typeof v === 'string' ? v.trim() : '';
73
+ if (s.length === 0)
74
+ throw new Error(`${nodeType}: "${name}" is required`);
75
+ return s;
76
+ }
77
+ /** A `BcfApiClient` over the gated transport, plus the project it addresses. */
78
+ export function bcfClientFor(ctx, nodeType, params) {
79
+ const baseUrl = requiredString(nodeType, params, 'baseUrl');
80
+ try {
81
+ new URL(baseUrl);
82
+ }
83
+ catch {
84
+ throw new Error(`${nodeType}: "baseUrl" is not a valid URL`);
85
+ }
86
+ const projectId = requiredString(nodeType, params, 'projectId');
87
+ const version = typeof params.version === 'string' && params.version.trim() !== '' ? params.version.trim() : '2.1';
88
+ const token = typeof params.token === 'string' ? params.token.trim() : '';
89
+ const client = new BcfApiClient({
90
+ baseUrl,
91
+ version,
92
+ getAccessToken: () => (token.length > 0 ? token : undefined),
93
+ fetchFn: gatedBcfFetch(ctx, nodeType, params),
94
+ });
95
+ return { client, projectId };
96
+ }
97
+ /** Name the node on a denial, as `http.request` does; every other error passes through unchanged. */
98
+ export async function withBcfErrors(nodeType, fn) {
99
+ try {
100
+ return await fn();
101
+ }
102
+ catch (err) {
103
+ if (err instanceof NetworkDeniedError)
104
+ throw new Error(`${nodeType}: ${err.message}`, { cause: err });
105
+ throw err;
106
+ }
107
+ }
108
+ //# sourceMappingURL=bcf-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcf-client.js","sourceRoot":"","sources":["../src/bcf-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type FlowNodeDef } from './host.js';
2
+ export declare const bcfNodes: FlowNodeDef[];
3
+ //# sourceMappingURL=bcf-nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcf-nodes.d.ts","sourceRoot":"","sources":["../src/bcf-nodes.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA4D,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAwEvG,eAAO,MAAM,QAAQ,EAAE,WAAW,EAqGjC,CAAC"}
@@ -0,0 +1,181 @@
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 { BCF_CONNECTION_PARAMS, bcfClientFor, requiredString, withBcfErrors } from './bcf-client.js';
5
+ import { ANY_ITEM, ANY_LIST, SCALAR_ITEM, SCALAR_LIST, TABLE_ITEM } from './host.js';
6
+ import { tableOf } from './table-nodes.js';
7
+ const NETWORK = { capabilities: ['network.fetch:*'], requires: { network: true }, volatile: true };
8
+ /** Labels travel through a table cell as one `;`-separated string. */
9
+ const LABEL_SEPARATOR = ';';
10
+ /** The `bcf.listTopics` table's columns; `bcf.createTopic` reads rows by the same names. */
11
+ const TOPIC_COLUMNS = [
12
+ { name: 'guid', type: 'identifier' },
13
+ { name: 'title', type: 'string' },
14
+ { name: 'status', type: 'string' },
15
+ { name: 'type', type: 'string' },
16
+ { name: 'priority', type: 'string' },
17
+ { name: 'assigned_to', type: 'string' },
18
+ { name: 'creation_date', type: 'string' },
19
+ { name: 'modified_date', type: 'string' },
20
+ { name: 'labels', type: 'string' },
21
+ { name: 'description', type: 'string' },
22
+ ];
23
+ function topicsTable(topics) {
24
+ const rows = topics.map((t) => ({
25
+ guid: t.guid,
26
+ title: t.title ?? null,
27
+ status: t.topic_status ?? null,
28
+ type: t.topic_type ?? null,
29
+ priority: t.priority ?? null,
30
+ assigned_to: t.assigned_to ?? null,
31
+ creation_date: t.creation_date ?? null,
32
+ modified_date: t.modified_date ?? null,
33
+ labels: t.labels && t.labels.length > 0 ? t.labels.join(LABEL_SEPARATOR) : null,
34
+ description: t.description ?? null,
35
+ }));
36
+ return { columns: TOPIC_COLUMNS, rows, key: 'guid' };
37
+ }
38
+ /** A trimmed non-empty string, or `undefined`. */
39
+ function text(v) {
40
+ if (v === undefined || v === null)
41
+ return undefined;
42
+ const s = String(v).trim();
43
+ return s.length > 0 ? s : undefined;
44
+ }
45
+ function labelsOf(v) {
46
+ const parts = Array.isArray(v) ? v.map((x) => String(x)) : typeof v === 'string' ? v.split(LABEL_SEPARATOR) : [];
47
+ const labels = parts.map((s) => s.trim()).filter((s) => s.length > 0);
48
+ return labels.length > 0 ? labels : undefined;
49
+ }
50
+ /** Topic fields from the node's params, each overridden by a non-empty cell of `row` when one is given. */
51
+ function topicWrite(params, row, where) {
52
+ const pick = (column, param) => text(row?.[column]) ?? text(params[param]);
53
+ const title = pick('title', 'title');
54
+ if (!title)
55
+ throw new Error(`bcf.createTopic: ${where} has no title`);
56
+ const out = { title };
57
+ const description = pick('description', 'description');
58
+ const type = pick('type', 'type');
59
+ const status = pick('status', 'status');
60
+ const priority = pick('priority', 'priority');
61
+ const assignedTo = pick('assigned_to', 'assignedTo');
62
+ const labels = labelsOf(row?.labels) ?? labelsOf(params.labels);
63
+ if (description)
64
+ out.description = description;
65
+ if (type)
66
+ out.topic_type = type;
67
+ if (status)
68
+ out.topic_status = status;
69
+ if (priority)
70
+ out.priority = priority;
71
+ if (assignedTo)
72
+ out.assigned_to = assignedTo;
73
+ if (labels)
74
+ out.labels = labels;
75
+ return out;
76
+ }
77
+ export const bcfNodes = [
78
+ {
79
+ type: 'bcf.listTopics',
80
+ title: 'BCF List Topics',
81
+ category: 'bcf',
82
+ doc: 'Lists a BCF API project\'s topics as a table (one row per topic, keyed by `guid`; labels `;`-separated) plus the raw topic list. Requests go only to a host covered by a granted `network.fetch:<host>` capability.',
83
+ inputs: [],
84
+ outputs: [
85
+ { name: 'table', type: TABLE_ITEM },
86
+ { name: 'topics', type: ANY_LIST },
87
+ { name: 'count', type: SCALAR_ITEM },
88
+ ],
89
+ params: [
90
+ ...BCF_CONNECTION_PARAMS,
91
+ { name: 'filter', kind: 'string', default: '', doc: 'OData $filter, e.g. topic_status eq \'Open\'.' },
92
+ { name: 'orderby', kind: 'string', default: '', doc: 'OData $orderby, e.g. creation_date desc.' },
93
+ { name: 'top', kind: 'number', default: 0, doc: 'OData $top; 0 lists every topic the server returns.' },
94
+ ],
95
+ ...NETWORK,
96
+ run: (ctx, _i, p) => withBcfErrors('bcf.listTopics', async () => {
97
+ const { client, projectId } = bcfClientFor(ctx, 'bcf.listTopics', p);
98
+ const top = Number(p.top);
99
+ const topics = await client.getTopics(projectId, {
100
+ filter: text(p.filter),
101
+ orderby: text(p.orderby),
102
+ top: Number.isInteger(top) && top > 0 ? top : undefined,
103
+ });
104
+ return { table: topicsTable(topics), topics, count: topics.length };
105
+ }),
106
+ },
107
+ {
108
+ type: 'bcf.createTopic',
109
+ title: 'BCF Create Topic',
110
+ category: 'bcf',
111
+ doc: 'Creates a topic in a BCF API project from the params — or, with `rows` connected, one topic per row, reading the `bcf.listTopics` column names (title, description, type, status, priority, assigned_to, labels) and falling back to the params for empty cells. Every row is validated before the first request.',
112
+ inputs: [{ name: 'rows', type: TABLE_ITEM, optional: true, doc: 'Optional table: one topic per row.' }],
113
+ outputs: [
114
+ { name: 'guids', type: SCALAR_LIST },
115
+ { name: 'topics', type: ANY_LIST },
116
+ ],
117
+ params: [
118
+ ...BCF_CONNECTION_PARAMS,
119
+ { name: 'title', kind: 'string', default: '' },
120
+ { name: 'description', kind: 'string', default: '' },
121
+ { name: 'type', kind: 'string', default: '', doc: 'topic_type, e.g. Issue.' },
122
+ { name: 'status', kind: 'string', default: '', doc: 'topic_status, e.g. Open.' },
123
+ { name: 'priority', kind: 'string', default: '' },
124
+ { name: 'assignedTo', kind: 'string', default: '', doc: 'assigned_to user id.' },
125
+ { name: 'labels', kind: 'string', default: '', doc: '`;`-separated labels.' },
126
+ ],
127
+ ...NETWORK,
128
+ run: (ctx, i, p) => withBcfErrors('bcf.createTopic', async () => {
129
+ const { client, projectId } = bcfClientFor(ctx, 'bcf.createTopic', p);
130
+ const writes = i.rows === undefined
131
+ ? [topicWrite(p, undefined, 'the node')]
132
+ : tableOf(i.rows).rows.map((row, idx) => topicWrite(p, row, `row ${idx + 1}`));
133
+ const topics = [];
134
+ for (const write of writes) {
135
+ try {
136
+ topics.push(await client.createTopic(projectId, write));
137
+ }
138
+ catch (err) {
139
+ // Name what already exists on the server, so a rerun does not duplicate it blindly.
140
+ if (topics.length === 0)
141
+ throw err;
142
+ const done = topics.map((t) => t.guid).join(', ');
143
+ throw new Error(`bcf.createTopic: failed after creating ${topics.length} topic(s) [${done}]: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
144
+ }
145
+ }
146
+ ctx.log('info', `created ${topics.length} topic(s)`);
147
+ return { guids: topics.map((t) => t.guid), topics };
148
+ }),
149
+ },
150
+ {
151
+ type: 'bcf.addComment',
152
+ title: 'BCF Add Comment',
153
+ category: 'bcf',
154
+ doc: 'Adds a comment to a BCF topic. `topicGuid`/`comment` inputs override the params, so wiring `bcf.createTopic`\'s `guids` comments on each new topic.',
155
+ inputs: [
156
+ { name: 'topicGuid', type: SCALAR_ITEM, optional: true },
157
+ { name: 'comment', type: SCALAR_ITEM, optional: true },
158
+ ],
159
+ outputs: [
160
+ { name: 'guid', type: SCALAR_ITEM },
161
+ { name: 'created', type: ANY_ITEM },
162
+ ],
163
+ params: [
164
+ ...BCF_CONNECTION_PARAMS,
165
+ { name: 'topicGuid', kind: 'string', default: '' },
166
+ { name: 'comment', kind: 'string', default: '' },
167
+ { name: 'replyToCommentGuid', kind: 'string', default: '' },
168
+ ],
169
+ ...NETWORK,
170
+ run: (ctx, i, p) => withBcfErrors('bcf.addComment', async () => {
171
+ const { client, projectId } = bcfClientFor(ctx, 'bcf.addComment', p);
172
+ const merged = { topicGuid: text(i.topicGuid) ?? p.topicGuid, comment: text(i.comment) ?? p.comment };
173
+ const topicGuid = requiredString('bcf.addComment', merged, 'topicGuid');
174
+ const comment = requiredString('bcf.addComment', merged, 'comment');
175
+ const replyTo = text(p.replyToCommentGuid);
176
+ const created = await client.createComment(projectId, topicGuid, replyTo ? { comment, reply_to_comment_guid: replyTo } : { comment });
177
+ return { guid: created.guid, created };
178
+ }),
179
+ },
180
+ ];
181
+ //# sourceMappingURL=bcf-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bcf-nodes.js","sourceRoot":"","sources":["../src/bcf-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,5 @@
1
+ import type { Column } from '@ifc-lite/flow';
2
+ import { type FlowNodeDef } from './host.js';
3
+ export declare const VERSION_COLUMNS: readonly Column[];
4
+ export declare const documentsNodes: FlowNodeDef[];
5
+ //# sourceMappingURL=documents-nodes.d.ts.map
@@ -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"}