n8n-nodes-browser-cli 0.1.0 → 0.2.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 +39 -36
- package/dist/credentials/BrowserCliApi.credentials.d.ts +12 -10
- package/dist/credentials/BrowserCliApi.credentials.js +46 -32
- package/dist/credentials/BrowserCliApi.credentials.js.map +1 -1
- package/dist/nodes/BrowserCli/BrowserCli.node.js +22 -16
- package/dist/nodes/BrowserCli/BrowserCli.node.js.map +1 -1
- package/dist/nodes/BrowserCli/protocol.d.ts +48 -0
- package/dist/nodes/BrowserCli/protocol.js +222 -0
- package/dist/nodes/BrowserCli/protocol.js.map +1 -0
- package/dist/nodes/BrowserCli/request.d.ts +16 -31
- package/dist/nodes/BrowserCli/request.js +33 -53
- package/dist/nodes/BrowserCli/request.js.map +1 -1
- package/dist/nodes/BrowserCli/serveClient.d.ts +18 -0
- package/dist/nodes/BrowserCli/serveClient.js +116 -0
- package/dist/nodes/BrowserCli/serveClient.js.map +1 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,54 +1,59 @@
|
|
|
1
1
|
# n8n-nodes-browser-cli
|
|
2
|
-
|
|
3
2
|
An [n8n](https://n8n.io) community node that controls a **real, visible browser**
|
|
4
3
|
from your workflows via [browser-cli](https://chromewebstore.google.com/detail/browser-cli/hekaebjhbhhdbmakimmaklbblbmccahp).
|
|
5
4
|
|
|
6
5
|
browser-cli drives a running browser through a native-messaging host and a
|
|
7
6
|
browser extension — it **cannot be installed inside the n8n container**. So this
|
|
8
|
-
node
|
|
9
|
-
|
|
7
|
+
node speaks the `browser-cli serve` protocol **directly**: a length-framed TCP
|
|
8
|
+
connection authenticated with an Ed25519 key, with request/response bodies
|
|
9
|
+
encrypted end-to-end via an ML-KEM-768 (post-quantum) key exchange — the same
|
|
10
|
+
wire protocol the `browser-cli --remote` client uses.
|
|
10
11
|
|
|
11
12
|
```
|
|
12
|
-
n8n workflow ──
|
|
13
|
+
n8n workflow ──TCP (Ed25519 + ML-KEM-768)──▶ browser-cli serve (remote host) ──▶ browser
|
|
13
14
|
```
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
Because the payloads are end-to-end encrypted, the endpoint is safe to expose on
|
|
17
|
+
an untrusted network without a TLS proxy in front of it.
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
## Remote setup (on the browser machine)
|
|
20
|
+
Install browser-cli, register the extension, trust your n8n key, then start
|
|
21
|
+
`serve` opening exactly the command tiers you need (it is **safe-only by default**):
|
|
19
22
|
|
|
20
23
|
```bash
|
|
21
24
|
uv tool install real-browser-cli
|
|
22
25
|
browser-cli install brave # one-time: register the extension/native host
|
|
23
26
|
|
|
24
|
-
#
|
|
25
|
-
browser-cli
|
|
26
|
-
```
|
|
27
|
+
# On the n8n side, generate a client key and print its public key:
|
|
28
|
+
browser-cli auth keygen -o n8n_key.pem
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
# On the browser machine, trust that public key (optionally scope its policy):
|
|
31
|
+
browser-cli auth trust <pubkey-hex> --allow-control
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
# Expose the browser. Open only what your workflow needs:
|
|
34
|
+
browser-cli serve --host 0.0.0.0 --port 8765 \
|
|
35
|
+
--authorized-keys ~/.browser_cli/authorized_keys --allow-read-page --allow-control
|
|
36
|
+
```
|
|
33
37
|
|
|
34
|
-
|
|
38
|
+
Paste the contents of `n8n_key.pem` into the n8n credential.
|
|
35
39
|
|
|
40
|
+
## n8n credential — "Browser CLI API"
|
|
36
41
|
| Field | Description |
|
|
37
42
|
|-------|-------------|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
| Host | host of the `serve` endpoint, e.g. `browser-host.example` |
|
|
44
|
+
| Port | `serve` TCP port (default `8765`) |
|
|
45
|
+
| Ed25519 Private Key | PKCS8 PEM from `browser-cli auth keygen` (empty only for `--no-auth` loopback) |
|
|
46
|
+
| Browser Alias | optional `_route` target — required if the endpoint serves multiple browsers |
|
|
47
|
+
| Use TLS | wrap the connection in TLS (only for a TLS-terminating proxy; the protocol is already encrypted) |
|
|
48
|
+
| Ignore SSL Issues | when TLS is on, accept a self-signed proxy cert |
|
|
43
49
|
|
|
44
50
|
## Operations
|
|
51
|
+
Every operation maps to one raw browser-cli command, each subject to the server
|
|
52
|
+
policy tier noted below.
|
|
45
53
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
| Resource | Operation | Command / route | Server flag needed |
|
|
50
|
-
|----------|-----------|-----------------|--------------------|
|
|
51
|
-
| Tab | List | `GET /tabs` | safe (default) |
|
|
54
|
+
| Resource | Operation | Command | Server flag needed |
|
|
55
|
+
|----------|-----------|---------|--------------------|
|
|
56
|
+
| Tab | List | `tabs.list` | safe (default) |
|
|
52
57
|
| Tab | Open | `navigate.open` | `--allow-control` |
|
|
53
58
|
| Tab | Close | `tabs.close` (ids / inactive / duplicates) | `--allow-control` |
|
|
54
59
|
| Tab | Get HTML | `tabs.html` | `--allow-read-page` |
|
|
@@ -57,25 +62,24 @@ wrappers around `POST /command`, so each needs the matching server policy tier.
|
|
|
57
62
|
| DOM | Query | `dom.query` | `--allow-read-page` |
|
|
58
63
|
| DOM | Click / Type | `dom.click` / `dom.type` | `--allow-control` |
|
|
59
64
|
| DOM | Eval | `dom.eval` | `--allow-dangerous` |
|
|
60
|
-
| Client | List | `
|
|
61
|
-
| Command | Execute |
|
|
62
|
-
| Gateway | Health |
|
|
65
|
+
| Client | List | `clients.list` | safe (default) |
|
|
66
|
+
| Command | Execute | any command name + JSON args | per command |
|
|
67
|
+
| Gateway | Health | pings with `tabs.list` | safe (default) |
|
|
63
68
|
|
|
64
|
-
**Command → Execute** is the escape hatch: any command string the
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
**Command → Execute** is the escape hatch: any command string the server policy
|
|
70
|
+
allows (`tabs.query`, `session.save`, `windows.list`, …) with a JSON args object.
|
|
71
|
+
Use it for anything the typed operations don't cover.
|
|
67
72
|
|
|
68
|
-
> Note:
|
|
73
|
+
> Note: `serve` returns the **raw** command result (no SDK post-processing).
|
|
69
74
|
> `extract.markdown` therefore returns the page payload as the extension hands it
|
|
70
75
|
> back, not the CLI's rendered Markdown. For clean text use **Extract Text**.
|
|
71
76
|
|
|
72
77
|
## Develop / build
|
|
73
|
-
|
|
74
78
|
```bash
|
|
75
79
|
cd n8n-nodes-browser-cli
|
|
76
80
|
npm install # add --ignore-scripts if a transitive native dep
|
|
77
81
|
# (isolated-vm) fails to compile on your Node version
|
|
78
|
-
npm test # pure
|
|
82
|
+
npm test # pure unit tests: command mapping + crypto known-answer vectors
|
|
79
83
|
npm run build # tsc -> dist/, copies the icon
|
|
80
84
|
```
|
|
81
85
|
|
|
@@ -83,5 +87,4 @@ Then install into n8n as a [community node](https://docs.n8n.io/integrations/com
|
|
|
83
87
|
(`n8n-nodes-browser-cli`), or symlink `dist/` into `~/.n8n/custom` for local testing.
|
|
84
88
|
|
|
85
89
|
## License
|
|
86
|
-
|
|
87
90
|
PolyForm Noncommercial License 1.0.0 — same as browser-cli.
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
2
|
/**
|
|
3
|
-
* Credentials for a
|
|
3
|
+
* Credentials for a raw `browser-cli serve` endpoint.
|
|
4
4
|
*
|
|
5
|
-
* browser-cli cannot be installed inside n8n, so the node talks to a
|
|
6
|
-
* running on the machine that
|
|
5
|
+
* browser-cli cannot be installed inside n8n, so the node talks directly to a
|
|
6
|
+
* `serve` instance running on the machine that drives the browser. Start it
|
|
7
|
+
* there and trust this client's key:
|
|
7
8
|
*
|
|
8
|
-
* browser-cli
|
|
9
|
+
* browser-cli auth keygen # on the n8n side, prints a PEM
|
|
10
|
+
* browser-cli auth trust <pubkey> --allow-control # on the serve side
|
|
11
|
+
* browser-cli serve --host 0.0.0.0 --port 8765 --authorized-keys ~/.browser_cli/authorized_keys
|
|
9
12
|
*
|
|
10
|
-
* The
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
+
* The connection is authenticated with the Ed25519 private key below and the
|
|
14
|
+
* request/response bodies are encrypted with an ML-KEM-768 (post-quantum) key
|
|
15
|
+
* exchange, so it is safe to expose over an untrusted network without TLS.
|
|
16
|
+
* Leave the key empty only for a loopback `serve --no-auth` instance.
|
|
13
17
|
*/
|
|
14
18
|
export declare class BrowserCliApi implements ICredentialType {
|
|
15
19
|
name: string;
|
|
16
20
|
displayName: string;
|
|
17
21
|
documentationUrl: string;
|
|
18
22
|
properties: INodeProperties[];
|
|
19
|
-
authenticate: IAuthenticateGeneric;
|
|
20
|
-
test: ICredentialTestRequest;
|
|
21
23
|
}
|
|
@@ -2,16 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BrowserCliApi = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* Credentials for a
|
|
5
|
+
* Credentials for a raw `browser-cli serve` endpoint.
|
|
6
6
|
*
|
|
7
|
-
* browser-cli cannot be installed inside n8n, so the node talks to a
|
|
8
|
-
* running on the machine that
|
|
7
|
+
* browser-cli cannot be installed inside n8n, so the node talks directly to a
|
|
8
|
+
* `serve` instance running on the machine that drives the browser. Start it
|
|
9
|
+
* there and trust this client's key:
|
|
9
10
|
*
|
|
10
|
-
* browser-cli
|
|
11
|
+
* browser-cli auth keygen # on the n8n side, prints a PEM
|
|
12
|
+
* browser-cli auth trust <pubkey> --allow-control # on the serve side
|
|
13
|
+
* browser-cli serve --host 0.0.0.0 --port 8765 --authorized-keys ~/.browser_cli/authorized_keys
|
|
11
14
|
*
|
|
12
|
-
* The
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* The connection is authenticated with the Ed25519 private key below and the
|
|
16
|
+
* request/response bodies are encrypted with an ML-KEM-768 (post-quantum) key
|
|
17
|
+
* exchange, so it is safe to expose over an untrusted network without TLS.
|
|
18
|
+
* Leave the key empty only for a loopback `serve --no-auth` instance.
|
|
15
19
|
*/
|
|
16
20
|
class BrowserCliApi {
|
|
17
21
|
constructor() {
|
|
@@ -20,45 +24,55 @@ class BrowserCliApi {
|
|
|
20
24
|
this.documentationUrl = 'https://chromewebstore.google.com/detail/browser-cli/hekaebjhbhhdbmakimmaklbblbmccahp';
|
|
21
25
|
this.properties = [
|
|
22
26
|
{
|
|
23
|
-
displayName: '
|
|
24
|
-
name: '
|
|
27
|
+
displayName: 'Host',
|
|
28
|
+
name: 'host',
|
|
25
29
|
type: 'string',
|
|
26
|
-
default: '
|
|
27
|
-
placeholder: '
|
|
30
|
+
default: '127.0.0.1',
|
|
31
|
+
placeholder: 'browser-host.example',
|
|
28
32
|
required: true,
|
|
29
|
-
description: '
|
|
33
|
+
description: 'Host of the remote `browser-cli serve` endpoint',
|
|
30
34
|
},
|
|
31
35
|
{
|
|
32
|
-
displayName: '
|
|
33
|
-
name: '
|
|
36
|
+
displayName: 'Port',
|
|
37
|
+
name: 'port',
|
|
38
|
+
type: 'number',
|
|
39
|
+
default: 8765,
|
|
40
|
+
required: true,
|
|
41
|
+
description: 'TCP port the `serve` endpoint listens on',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
displayName: 'Ed25519 Private Key',
|
|
45
|
+
name: 'privateKey',
|
|
46
|
+
type: 'string',
|
|
47
|
+
typeOptions: { password: true, rows: 4 },
|
|
48
|
+
default: '',
|
|
49
|
+
placeholder: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
|
|
50
|
+
description: 'PKCS8 PEM Ed25519 private key (from `browser-cli auth keygen`) whose public key is trusted by the serve endpoint. Leave empty only for a loopback `serve --no-auth` instance.',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
displayName: 'Browser Alias',
|
|
54
|
+
name: 'browser',
|
|
34
55
|
type: 'string',
|
|
35
|
-
typeOptions: { password: true },
|
|
36
56
|
default: '',
|
|
37
|
-
|
|
57
|
+
placeholder: 'main',
|
|
58
|
+
description: 'Optional browser alias to route to (the serve `_route` target). Required when the serve endpoint exposes multiple browser instances; leave empty for a single-browser serve.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
displayName: 'Use TLS',
|
|
62
|
+
name: 'tls',
|
|
63
|
+
type: 'boolean',
|
|
64
|
+
default: false,
|
|
65
|
+
description: 'Whether to wrap the connection in TLS. Only needed when `serve` sits behind a TLS-terminating proxy; the protocol is already end-to-end encrypted via post-quantum key exchange.',
|
|
38
66
|
},
|
|
39
67
|
{
|
|
40
68
|
displayName: 'Ignore SSL Issues',
|
|
41
69
|
name: 'allowUnauthorizedCerts',
|
|
42
70
|
type: 'boolean',
|
|
43
71
|
default: false,
|
|
44
|
-
|
|
72
|
+
displayOptions: { show: { tls: [true] } },
|
|
73
|
+
description: 'Whether to connect even when the TLS certificate cannot be verified (e.g. a self-signed proxy)',
|
|
45
74
|
},
|
|
46
75
|
];
|
|
47
|
-
this.authenticate = {
|
|
48
|
-
type: 'generic',
|
|
49
|
-
properties: {
|
|
50
|
-
headers: {
|
|
51
|
-
Authorization: '=Bearer {{$credentials.token}}',
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
this.test = {
|
|
56
|
-
request: {
|
|
57
|
-
baseURL: '={{$credentials.baseUrl}}',
|
|
58
|
-
url: '/health',
|
|
59
|
-
skipSslCertificateValidation: '={{$credentials.allowUnauthorizedCerts}}',
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
76
|
}
|
|
63
77
|
}
|
|
64
78
|
exports.BrowserCliApi = BrowserCliApi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserCliApi.credentials.js","sourceRoot":"","sources":["../../credentials/BrowserCliApi.credentials.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"BrowserCliApi.credentials.js","sourceRoot":"","sources":["../../credentials/BrowserCliApi.credentials.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;GAeG;AACH,MAAa,aAAa;IAA1B;QACE,SAAI,GAAG,eAAe,CAAC;QAEvB,gBAAW,GAAG,iBAAiB,CAAC;QAEhC,qBAAgB,GAAG,uFAAuF,CAAC;QAE3G,eAAU,GAAsB;YAC9B;gBACE,WAAW,EAAE,MAAM;gBACnB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,WAAW;gBACpB,WAAW,EAAE,sBAAsB;gBACnC,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,iDAAiD;aAC/D;YACD;gBACE,WAAW,EAAE,MAAM;gBACnB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,0CAA0C;aACxD;YACD;gBACE,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;gBACxC,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,6DAA6D;gBAC1E,WAAW,EACT,+KAA+K;aAClL;YACD;gBACE,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,MAAM;gBACnB,WAAW,EACT,8KAA8K;aACjL;YACD;gBACE,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EACT,kLAAkL;aACrL;YACD;gBACE,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;gBACzC,WAAW,EAAE,gGAAgG;aAC9G;SACF,CAAC;IACJ,CAAC;CAAA;AA7DD,sCA6DC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BrowserCli = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const request_1 = require("./request");
|
|
6
|
+
const serveClient_1 = require("./serveClient");
|
|
6
7
|
/** Only show a property for the given resource/operation combinations. */
|
|
7
8
|
function showFor(resource, operations) {
|
|
8
9
|
return { resource: [resource], operation: operations };
|
|
@@ -16,7 +17,7 @@ class BrowserCli {
|
|
|
16
17
|
group: ['transform'],
|
|
17
18
|
version: 1,
|
|
18
19
|
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
19
|
-
description: 'Control a remote browser
|
|
20
|
+
description: 'Control a remote browser by talking directly to a browser-cli serve endpoint',
|
|
20
21
|
defaults: { name: 'Browser CLI' },
|
|
21
22
|
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
22
23
|
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
@@ -46,7 +47,7 @@ class BrowserCli {
|
|
|
46
47
|
noDataExpression: true,
|
|
47
48
|
displayOptions: { show: { resource: ['tab'] } },
|
|
48
49
|
options: [
|
|
49
|
-
{ name: 'List', value: 'list', action: 'List open tabs', description: '
|
|
50
|
+
{ name: 'List', value: 'list', action: 'List open tabs', description: 'tabs.list (safe)' },
|
|
50
51
|
{ name: 'Open', value: 'open', action: 'Open a URL in a new tab', description: 'navigate.open (needs --allow-control)' },
|
|
51
52
|
{ name: 'Close', value: 'close', action: 'Close tabs', description: 'tabs.close (needs --allow-control)' },
|
|
52
53
|
{ name: 'Get HTML', value: 'getHtml', action: 'Get a tab raw HTML', description: 'tabs.html (needs --allow-read-page)' },
|
|
@@ -93,7 +94,7 @@ class BrowserCli {
|
|
|
93
94
|
noDataExpression: true,
|
|
94
95
|
displayOptions: { show: { resource: ['client'] } },
|
|
95
96
|
options: [
|
|
96
|
-
{ name: 'List', value: 'list', action: 'List connected browser clients', description: '
|
|
97
|
+
{ name: 'List', value: 'list', action: 'List connected browser clients', description: 'clients.list (safe)' },
|
|
97
98
|
],
|
|
98
99
|
default: 'list',
|
|
99
100
|
},
|
|
@@ -105,7 +106,7 @@ class BrowserCli {
|
|
|
105
106
|
noDataExpression: true,
|
|
106
107
|
displayOptions: { show: { resource: ['command'] } },
|
|
107
108
|
options: [
|
|
108
|
-
{ name: 'Execute', value: 'execute', action: 'Execute a raw browser-cli command', description: '
|
|
109
|
+
{ name: 'Execute', value: 'execute', action: 'Execute a raw browser-cli command', description: 'Any command name (subject to server policy)' },
|
|
109
110
|
],
|
|
110
111
|
default: 'execute',
|
|
111
112
|
},
|
|
@@ -117,7 +118,7 @@ class BrowserCli {
|
|
|
117
118
|
noDataExpression: true,
|
|
118
119
|
displayOptions: { show: { resource: ['gateway'] } },
|
|
119
120
|
options: [
|
|
120
|
-
{ name: 'Health', value: 'health', action: 'Check
|
|
121
|
+
{ name: 'Health', value: 'health', action: 'Check serve connectivity', description: 'Pings the endpoint with tabs.list (safe)' },
|
|
121
122
|
],
|
|
122
123
|
default: 'health',
|
|
123
124
|
},
|
|
@@ -233,22 +234,27 @@ class BrowserCli {
|
|
|
233
234
|
async execute() {
|
|
234
235
|
const items = this.getInputData();
|
|
235
236
|
const returnData = [];
|
|
236
|
-
const
|
|
237
|
+
const credentials = await this.getCredentials('browserCliApi');
|
|
238
|
+
const connectOptions = {
|
|
239
|
+
host: String(credentials.host || '127.0.0.1'),
|
|
240
|
+
port: Number(credentials.port || 8765),
|
|
241
|
+
tls: Boolean(credentials.tls),
|
|
242
|
+
rejectUnauthorized: !credentials.allowUnauthorizedCerts,
|
|
243
|
+
privateKeyPem: credentials.privateKey ? String(credentials.privateKey) : null,
|
|
244
|
+
route: credentials.browser ? String(credentials.browser) : null,
|
|
245
|
+
};
|
|
237
246
|
for (let i = 0; i < items.length; i++) {
|
|
238
247
|
try {
|
|
239
248
|
const resource = this.getNodeParameter('resource', i);
|
|
240
249
|
const operation = this.getNodeParameter('operation', i);
|
|
241
250
|
const params = collectParams(this, resource, operation, i);
|
|
242
|
-
const
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
options.body = request.body;
|
|
250
|
-
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'browserCliApi', options);
|
|
251
|
-
const rows = Array.isArray(response) ? response : [response];
|
|
251
|
+
const { command, args } = (0, request_1.buildCommand)(resource, operation, params);
|
|
252
|
+
const response = await (0, serveClient_1.sendServeCommand)(connectOptions, command, args);
|
|
253
|
+
if (response && response.success === false) {
|
|
254
|
+
throw new Error(String(response.error || 'serve command failed'));
|
|
255
|
+
}
|
|
256
|
+
const data = response && typeof response === 'object' && 'data' in response ? response.data : response;
|
|
257
|
+
const rows = Array.isArray(data) ? data : [data];
|
|
252
258
|
for (const row of rows) {
|
|
253
259
|
returnData.push({
|
|
254
260
|
json: isObject(row) ? row : { result: row },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserCli.node.js","sourceRoot":"","sources":["../../../nodes/BrowserCli/BrowserCli.node.ts"],"names":[],"mappings":";;;AASA,+CAAuE;AAEvE,uCAAoE;AAEpE,0EAA0E;AAC1E,SAAS,OAAO,CAAC,QAAgB,EAAE,UAAoB;IACrD,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACzD,CAAC;AAED,MAAa,UAAU;IAAvB;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,mEAAmE;YAChF,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;YACjC,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACxD,UAAU,EAAE;gBACV;oBACE,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;wBAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC/B,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;wBAC7B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACnC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;wBACrC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;qBACtC;oBACD,OAAO,EAAE,KAAK;iBACf;gBAED,yEAAyE;gBACzE;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;oBAC/C,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE;wBAC1F,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,EAAE,WAAW,EAAE,uCAAuC,EAAE;wBACxH,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,oCAAoC,EAAE;wBAC1G,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,qCAAqC,EAAE;qBACzH;oBACD,OAAO,EAAE,MAAM;iBAChB;gBAED,yEAAyE;gBACzE;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;oBAChD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE;wBAC7F,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,wCAAwC,EAAE;wBACrI,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,yCAAyC,EAAE;wBACjI,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,0CAA0C,EAAE;wBACrI,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,wCAAwC,EAAE;wBAC7H,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,0BAA0B,EAAE,WAAW,EAAE,8FAA8F,EAAE;qBACxM;oBACD,OAAO,EAAE,aAAa;iBACvB;gBAED,yEAAyE;gBACzE;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;oBAC/C,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,WAAW,EAAE,qCAAqC,EAAE;wBAC3H,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,mCAAmC,EAAE;wBAC/G,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,kCAAkC,EAAE;wBAChH,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,WAAW,EAAE,oCAAoC,EAAE;qBAClH;oBACD,OAAO,EAAE,OAAO;iBACjB;gBAED,yEAAyE;gBACzE;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAClD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gCAAgC,EAAE,WAAW,EAAE,qBAAqB,EAAE;qBAC9G;oBACD,OAAO,EAAE,MAAM;iBAChB;gBAED,yEAAyE;gBACzE;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE;oBACnD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,mCAAmC,EAAE,WAAW,EAAE,0CAA0C,EAAE;qBAC5I;oBACD,OAAO,EAAE,SAAS;iBACnB;gBAED,yEAAyE;gBACzE;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE;oBACnD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,uBAAuB,EAAE;qBAC1G;oBACD,OAAO,EAAE,QAAQ;iBAClB;gBAED,wEAAwE;gBACxE;oBACE,WAAW,EAAE,KAAK;oBAClB,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,qBAAqB;oBAClC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE;iBACnD;gBACD;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,qFAAqF;oBAClG,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE;iBACnD;gBACD;oBACE,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;wBACjC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;wBAC5C,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE;qBAChD;oBACD,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE;iBACpD;gBACD;oBACE,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,UAAU;oBACvB,WAAW,EAAE,gDAAgD;oBAC7D,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;iBACrF;gBACD;oBACE,WAAW,EAAE,QAAQ;oBACrB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,4CAA4C;oBACzD,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE;iBACxE;gBACD;oBACE,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,iBAAiB;oBAC9B,WAAW,EAAE,wEAAwE;oBACrF,cAAc,EAAE;wBACd,IAAI,EAAE;4BACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;4BACzB,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,CAAC;yBACxH;qBACF;iBACF;gBACD;oBACE,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE;iBACnD;gBACD;oBACE,WAAW,EAAE,YAAY;oBACzB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;oBACxB,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,uBAAuB;oBACpC,WAAW,EAAE,uFAAuF;oBACpG,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE;iBACnD;gBACD;oBACE,WAAW,EAAE,QAAQ;oBACrB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,4CAA4C;oBACzD,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;iBACrE;gBACD;oBACE,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,WAAW;oBACxB,WAAW,EAAE,+EAA+E;oBAC5F,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;iBAC1D;gBACD;oBACE,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,kCAAkC;oBAC/C,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;iBAC1D;aACF;SACF,CAAC;IA2CJ,CAAC;IAzCC,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEvG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAW,CAAC;gBAChE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAW,CAAC;gBAElE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC3D,MAAM,OAAO,GAAG,IAAA,6BAAmB,EAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAEjE,MAAM,OAAO,GAAwB;oBACnC,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,GAAG,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;oBAChC,IAAI,EAAE,IAAI;iBACX,CAAC;gBACF,IAAI,OAAO,CAAC,IAAI;oBAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBAE9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;gBAEvG,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAmB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;wBAC5D,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1B,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACxF,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAc,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;CACF;AA9QD,gCA8QC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CACpB,GAAsB,EACtB,QAAgB,EAChB,SAAiB,EACjB,CAAS;IAET,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,WAAoB,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrG,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;IAEvC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,IAAI,GAA4B,EAAE,CAAC;YACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,CAAC;iBAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,GAAG,GAA8B,CAAC;YACxC,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,UAAU;YACb,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACzD,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;QACjE,KAAK,aAAa;YAChB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;QACpC,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,KAAK,UAAU;YACb,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAClE,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3D,KAAK,kBAAkB,CAAC;QACxB,KAAK,mBAAmB,CAAC;QACzB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,kBAAkB,CAAC;QACxB,KAAK,sBAAsB;YACzB,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"BrowserCli.node.js","sourceRoot":"","sources":["../../../nodes/BrowserCli/BrowserCli.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare const PQ_KEX_ALG = "ML-KEM-768";
|
|
2
|
+
export declare const PQ_TRANSPORT_ALG = "ML-KEM-768+ChaCha20Poly1305";
|
|
3
|
+
/** Prefix `payload` with browser-cli's 4-byte little-endian length header. */
|
|
4
|
+
export declare function frame(payload: Buffer): Buffer;
|
|
5
|
+
/** Deterministic JSON string identical to the Python signing canonicalization. */
|
|
6
|
+
export declare function canonicalJson(value: unknown): string;
|
|
7
|
+
/** Raw 32-byte Ed25519 public key (hex) derived from a PKCS8 PEM private key. */
|
|
8
|
+
export declare function ed25519PublicKeyHex(privatePem: string): string;
|
|
9
|
+
/** Bytes signed for auth: nonce + sha256(canonical) [+ sha256(label + secret)]. */
|
|
10
|
+
export declare function authMessage(nonceHex: string, msg: Record<string, unknown>, pqSecret: Buffer | null): Buffer;
|
|
11
|
+
/** Ed25519 signature (hex) over the canonical auth payload. */
|
|
12
|
+
export declare function signAuth(privatePem: string, nonceHex: string, msg: Record<string, unknown>, pqSecret: Buffer | null): string;
|
|
13
|
+
/** Encapsulate to the server's ML-KEM public key. Returns (ciphertext hex, secret). */
|
|
14
|
+
export declare function pqEncapsulate(serverPublicKeyHex: string): Promise<{
|
|
15
|
+
ciphertextHex: string;
|
|
16
|
+
secret: Buffer;
|
|
17
|
+
}>;
|
|
18
|
+
/** HKDF-SHA256 with a 32-zero-byte salt (Python `salt=None`) and the given info. */
|
|
19
|
+
export declare function pqTransportKey(secret: Buffer, direction: string): Buffer;
|
|
20
|
+
export interface PqEnvelope {
|
|
21
|
+
alg?: string;
|
|
22
|
+
nonce: string;
|
|
23
|
+
ciphertext: string;
|
|
24
|
+
}
|
|
25
|
+
/** ChaCha20-Poly1305 encrypt an app-layer frame (ciphertext field is ct||tag). */
|
|
26
|
+
export declare function pqEncrypt(secret: Buffer, direction: string, plaintext: Buffer): PqEnvelope;
|
|
27
|
+
/** Inverse of {@link pqEncrypt}. */
|
|
28
|
+
export declare function pqDecrypt(secret: Buffer, direction: string, envelope: PqEnvelope): Buffer;
|
|
29
|
+
export interface Challenge {
|
|
30
|
+
type?: string;
|
|
31
|
+
nonce?: string;
|
|
32
|
+
min_client_version?: string;
|
|
33
|
+
pq_kex?: {
|
|
34
|
+
alg?: string;
|
|
35
|
+
public_key?: string;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface AuthPayload {
|
|
39
|
+
payload: Record<string, unknown>;
|
|
40
|
+
pqSecret: Buffer | null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build the single framed message a client sends in response to the challenge.
|
|
44
|
+
* Mirrors `browser_cli.remote.auth.build_auth_message` + `signed_payload`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildAuthPayload(baseMsg: Record<string, unknown>, challenge: Challenge, privatePem: string | null): Promise<AuthPayload>;
|
|
47
|
+
/** Decode a framed server response, decrypting the PQ envelope when present. */
|
|
48
|
+
export declare function decodeResponse(raw: Buffer, pqSecret: Buffer | null): any;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PQ_TRANSPORT_ALG = exports.PQ_KEX_ALG = void 0;
|
|
4
|
+
exports.frame = frame;
|
|
5
|
+
exports.canonicalJson = canonicalJson;
|
|
6
|
+
exports.ed25519PublicKeyHex = ed25519PublicKeyHex;
|
|
7
|
+
exports.authMessage = authMessage;
|
|
8
|
+
exports.signAuth = signAuth;
|
|
9
|
+
exports.pqEncapsulate = pqEncapsulate;
|
|
10
|
+
exports.pqTransportKey = pqTransportKey;
|
|
11
|
+
exports.pqEncrypt = pqEncrypt;
|
|
12
|
+
exports.pqDecrypt = pqDecrypt;
|
|
13
|
+
exports.buildAuthPayload = buildAuthPayload;
|
|
14
|
+
exports.decodeResponse = decodeResponse;
|
|
15
|
+
/**
|
|
16
|
+
* Pure protocol + crypto for talking to a raw `browser-cli serve` endpoint.
|
|
17
|
+
*
|
|
18
|
+
* This module imports nothing from n8n and only touches Node's `crypto` plus a
|
|
19
|
+
* lazily-loaded ML-KEM implementation, so it can be unit-tested with a plain
|
|
20
|
+
* esbuild/node toolchain. The socket mechanics live in `serveClient.ts`.
|
|
21
|
+
*
|
|
22
|
+
* The wire protocol mirrors the Python client in `browser_cli/remote` and
|
|
23
|
+
* `browser_cli/auth`:
|
|
24
|
+
*
|
|
25
|
+
* 1. Server sends a framed `challenge` JSON: {nonce, min_client_version, pq_kex?}.
|
|
26
|
+
* 2. Client replies with one framed message. With a private key this is an
|
|
27
|
+
* Ed25519 signature over `nonce + sha256(canonical_json(msg))`, optionally
|
|
28
|
+
* bound to an ML-KEM-768 shared secret. When the server offers `pq_kex`
|
|
29
|
+
* (it always does once authorized_keys is set) the request body is also
|
|
30
|
+
* ChaCha20-Poly1305 encrypted under that secret.
|
|
31
|
+
* 3. Server replies with one framed payload, encrypted the same way.
|
|
32
|
+
*
|
|
33
|
+
* Every value the client signs must serialize byte-for-byte like Python's
|
|
34
|
+
* `json.dumps(sort_keys=True, separators=(",", ":"))` with `ensure_ascii=True`
|
|
35
|
+
* or the signature is rejected — see `canonicalJson` and `protocol.test.ts`.
|
|
36
|
+
*/
|
|
37
|
+
const node_crypto_1 = require("node:crypto");
|
|
38
|
+
exports.PQ_KEX_ALG = 'ML-KEM-768';
|
|
39
|
+
exports.PQ_TRANSPORT_ALG = 'ML-KEM-768+ChaCha20Poly1305';
|
|
40
|
+
/** Auth-protocol fields that are never part of the signed canonical payload. */
|
|
41
|
+
const AUTH_FIELDS = new Set(['pubkey', 'sig', 'pq_kex', 'encrypted']);
|
|
42
|
+
// --- Framing ---------------------------------------------------------------
|
|
43
|
+
/** Prefix `payload` with browser-cli's 4-byte little-endian length header. */
|
|
44
|
+
function frame(payload) {
|
|
45
|
+
const header = Buffer.allocUnsafe(4);
|
|
46
|
+
header.writeUInt32LE(payload.length, 0);
|
|
47
|
+
return Buffer.concat([header, payload]);
|
|
48
|
+
}
|
|
49
|
+
// --- Canonical JSON (matches Python json.dumps sort_keys + ensure_ascii) ----
|
|
50
|
+
/** Deterministic JSON string identical to the Python signing canonicalization. */
|
|
51
|
+
function canonicalJson(value) {
|
|
52
|
+
return encode(value);
|
|
53
|
+
}
|
|
54
|
+
function encode(value) {
|
|
55
|
+
if (value === null)
|
|
56
|
+
return 'null';
|
|
57
|
+
const type = typeof value;
|
|
58
|
+
if (type === 'string')
|
|
59
|
+
return encodeString(value);
|
|
60
|
+
if (type === 'boolean')
|
|
61
|
+
return value ? 'true' : 'false';
|
|
62
|
+
if (type === 'number') {
|
|
63
|
+
const n = value;
|
|
64
|
+
if (!Number.isFinite(n))
|
|
65
|
+
throw new Error('cannot encode non-finite number');
|
|
66
|
+
// Integers match Python exactly; non-integers are rare in args and fall
|
|
67
|
+
// back to JS formatting (documented limitation, see protocol.test.ts).
|
|
68
|
+
return Number.isInteger(n) ? String(n) : JSON.stringify(n);
|
|
69
|
+
}
|
|
70
|
+
if (Array.isArray(value))
|
|
71
|
+
return '[' + value.map(encode).join(',') + ']';
|
|
72
|
+
if (type === 'object') {
|
|
73
|
+
const obj = value;
|
|
74
|
+
const keys = Object.keys(obj)
|
|
75
|
+
.filter((key) => obj[key] !== undefined)
|
|
76
|
+
.sort();
|
|
77
|
+
return '{' + keys.map((key) => encodeString(key) + ':' + encode(obj[key])).join(',') + '}';
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`cannot encode value of type ${type} in canonical JSON`);
|
|
80
|
+
}
|
|
81
|
+
/** JSON-encode a string and escape every non-ASCII char as \uXXXX, like Python. */
|
|
82
|
+
function encodeString(str) {
|
|
83
|
+
return JSON.stringify(str).replace(/[-]/g, (char) => '\\u' + char.charCodeAt(0).toString(16).padStart(4, '0'));
|
|
84
|
+
}
|
|
85
|
+
// --- Ed25519 ---------------------------------------------------------------
|
|
86
|
+
/** Raw 32-byte Ed25519 public key (hex) derived from a PKCS8 PEM private key. */
|
|
87
|
+
function ed25519PublicKeyHex(privatePem) {
|
|
88
|
+
const publicKey = (0, node_crypto_1.createPublicKey)((0, node_crypto_1.createPrivateKey)(privatePem));
|
|
89
|
+
const jwk = publicKey.export({ format: 'jwk' });
|
|
90
|
+
if (!jwk.x)
|
|
91
|
+
throw new Error('private key is not an Ed25519 key');
|
|
92
|
+
return Buffer.from(jwk.x, 'base64url').toString('hex');
|
|
93
|
+
}
|
|
94
|
+
/** Bytes signed for auth: nonce + sha256(canonical) [+ sha256(label + secret)]. */
|
|
95
|
+
function authMessage(nonceHex, msg, pqSecret) {
|
|
96
|
+
const nonce = Buffer.from(nonceHex, 'hex');
|
|
97
|
+
const canonical = (0, node_crypto_1.createHash)('sha256').update(canonicalJson(stripAuthFields(msg)), 'utf8').digest();
|
|
98
|
+
let data = Buffer.concat([nonce, canonical]);
|
|
99
|
+
if (pqSecret) {
|
|
100
|
+
const bound = (0, node_crypto_1.createHash)('sha256')
|
|
101
|
+
.update(Buffer.concat([Buffer.from('browser-cli ml-kem-768 v1', 'ascii'), pqSecret]))
|
|
102
|
+
.digest();
|
|
103
|
+
data = Buffer.concat([data, bound]);
|
|
104
|
+
}
|
|
105
|
+
return data;
|
|
106
|
+
}
|
|
107
|
+
/** Ed25519 signature (hex) over the canonical auth payload. */
|
|
108
|
+
function signAuth(privatePem, nonceHex, msg, pqSecret) {
|
|
109
|
+
return (0, node_crypto_1.sign)(null, authMessage(nonceHex, msg, pqSecret), (0, node_crypto_1.createPrivateKey)(privatePem)).toString('hex');
|
|
110
|
+
}
|
|
111
|
+
function stripAuthFields(msg) {
|
|
112
|
+
const out = {};
|
|
113
|
+
for (const [key, value] of Object.entries(msg)) {
|
|
114
|
+
if (!AUTH_FIELDS.has(key))
|
|
115
|
+
out[key] = value;
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
// --- ML-KEM-768 transport encryption ---------------------------------------
|
|
120
|
+
// Node has no native ML-KEM, so load @noble/post-quantum at runtime. The
|
|
121
|
+
// indirection through `Function` keeps a real dynamic `import()` even after
|
|
122
|
+
// TypeScript downlevels this module to CommonJS (a plain `import()` would be
|
|
123
|
+
// rewritten to `require()` and fail on the ESM-only package).
|
|
124
|
+
const importEsm = new Function('specifier', 'return import(specifier)');
|
|
125
|
+
let mlkemPromise = null;
|
|
126
|
+
async function mlKem768() {
|
|
127
|
+
if (!mlkemPromise) {
|
|
128
|
+
mlkemPromise = importEsm('@noble/post-quantum/ml-kem.js').then((mod) => mod.ml_kem768);
|
|
129
|
+
}
|
|
130
|
+
return mlkemPromise;
|
|
131
|
+
}
|
|
132
|
+
/** Encapsulate to the server's ML-KEM public key. Returns (ciphertext hex, secret). */
|
|
133
|
+
async function pqEncapsulate(serverPublicKeyHex) {
|
|
134
|
+
const ml = await mlKem768();
|
|
135
|
+
const { cipherText, sharedSecret } = ml.encapsulate(Buffer.from(serverPublicKeyHex, 'hex'));
|
|
136
|
+
return { ciphertextHex: Buffer.from(cipherText).toString('hex'), secret: Buffer.from(sharedSecret) };
|
|
137
|
+
}
|
|
138
|
+
/** HKDF-SHA256 with a 32-zero-byte salt (Python `salt=None`) and the given info. */
|
|
139
|
+
function pqTransportKey(secret, direction) {
|
|
140
|
+
const salt = Buffer.alloc(32, 0);
|
|
141
|
+
const prk = (0, node_crypto_1.createHmac)('sha256', salt).update(secret).digest();
|
|
142
|
+
const info = Buffer.concat([Buffer.from(`browser-cli pq transport v1 ${direction}`, 'ascii'), Buffer.from([1])]);
|
|
143
|
+
return (0, node_crypto_1.createHmac)('sha256', prk).update(info).digest().subarray(0, 32);
|
|
144
|
+
}
|
|
145
|
+
/** ChaCha20-Poly1305 encrypt an app-layer frame (ciphertext field is ct||tag). */
|
|
146
|
+
function pqEncrypt(secret, direction, plaintext) {
|
|
147
|
+
const key = pqTransportKey(secret, direction);
|
|
148
|
+
const nonce = (0, node_crypto_1.randomBytes)(12);
|
|
149
|
+
const cipher = (0, node_crypto_1.createCipheriv)('chacha20-poly1305', key, nonce, { authTagLength: 16 });
|
|
150
|
+
const body = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
151
|
+
const tag = cipher.getAuthTag();
|
|
152
|
+
return {
|
|
153
|
+
alg: exports.PQ_TRANSPORT_ALG,
|
|
154
|
+
nonce: nonce.toString('hex'),
|
|
155
|
+
ciphertext: Buffer.concat([body, tag]).toString('hex'),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/** Inverse of {@link pqEncrypt}. */
|
|
159
|
+
function pqDecrypt(secret, direction, envelope) {
|
|
160
|
+
if (!envelope || envelope.alg !== exports.PQ_TRANSPORT_ALG) {
|
|
161
|
+
throw new Error('unsupported encrypted transport envelope');
|
|
162
|
+
}
|
|
163
|
+
const key = pqTransportKey(secret, direction);
|
|
164
|
+
const nonce = Buffer.from(envelope.nonce, 'hex');
|
|
165
|
+
const blob = Buffer.from(envelope.ciphertext, 'hex');
|
|
166
|
+
const tag = blob.subarray(blob.length - 16);
|
|
167
|
+
const body = blob.subarray(0, blob.length - 16);
|
|
168
|
+
const decipher = (0, node_crypto_1.createDecipheriv)('chacha20-poly1305', key, nonce, { authTagLength: 16 });
|
|
169
|
+
decipher.setAuthTag(tag);
|
|
170
|
+
return Buffer.concat([decipher.update(body), decipher.final()]);
|
|
171
|
+
}
|
|
172
|
+
function pqPublicKey(challenge) {
|
|
173
|
+
const kex = challenge.pq_kex;
|
|
174
|
+
if (kex && kex.alg === exports.PQ_KEX_ALG && kex.public_key)
|
|
175
|
+
return String(kex.public_key);
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Build the single framed message a client sends in response to the challenge.
|
|
180
|
+
* Mirrors `browser_cli.remote.auth.build_auth_message` + `signed_payload`.
|
|
181
|
+
*/
|
|
182
|
+
async function buildAuthPayload(baseMsg, challenge, privatePem) {
|
|
183
|
+
const nonceHex = challenge.type === 'challenge' ? challenge.nonce : undefined;
|
|
184
|
+
if (!nonceHex || !privatePem) {
|
|
185
|
+
// No-auth endpoint (loopback `serve --no-auth`): send the bare message.
|
|
186
|
+
return { payload: baseMsg, pqSecret: null };
|
|
187
|
+
}
|
|
188
|
+
const clean = stripAuthFields(baseMsg);
|
|
189
|
+
let secret = null;
|
|
190
|
+
const serverPub = pqPublicKey(challenge);
|
|
191
|
+
if (serverPub) {
|
|
192
|
+
const enc = await pqEncapsulate(serverPub);
|
|
193
|
+
secret = enc.secret;
|
|
194
|
+
clean.pq_kex = { alg: exports.PQ_KEX_ALG, ciphertext: enc.ciphertextHex };
|
|
195
|
+
}
|
|
196
|
+
const sig = signAuth(privatePem, nonceHex, clean, secret);
|
|
197
|
+
const pubkey = ed25519PublicKeyHex(privatePem);
|
|
198
|
+
if (!secret) {
|
|
199
|
+
return { payload: { ...clean, pubkey, sig }, pqSecret: null };
|
|
200
|
+
}
|
|
201
|
+
const encrypted = pqEncrypt(secret, 'request', Buffer.from(JSON.stringify(clean), 'utf8'));
|
|
202
|
+
return {
|
|
203
|
+
payload: {
|
|
204
|
+
id: clean.id,
|
|
205
|
+
user_agent: clean.user_agent,
|
|
206
|
+
pubkey,
|
|
207
|
+
sig,
|
|
208
|
+
pq_kex: clean.pq_kex,
|
|
209
|
+
encrypted,
|
|
210
|
+
},
|
|
211
|
+
pqSecret: secret,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/** Decode a framed server response, decrypting the PQ envelope when present. */
|
|
215
|
+
function decodeResponse(raw, pqSecret) {
|
|
216
|
+
const outer = JSON.parse(raw.toString('utf8'));
|
|
217
|
+
if (pqSecret && outer && typeof outer === 'object' && 'encrypted' in outer) {
|
|
218
|
+
return JSON.parse(pqDecrypt(pqSecret, 'response', outer.encrypted).toString('utf8'));
|
|
219
|
+
}
|
|
220
|
+
return outer;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../nodes/BrowserCli/protocol.ts"],"names":[],"mappings":";;;AA0CA,sBAIC;AAKD,sCAEC;AAmCD,kDAKC;AAGD,kCAWC;AAGD,4BAOC;AA2BD,sCAIC;AAGD,wCAKC;AASD,8BAWC;AAGD,8BAYC;AA0BD,4CAuCC;AAGD,wCAMC;AAzQD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6CASqB;AAER,QAAA,UAAU,GAAG,YAAY,CAAC;AAC1B,QAAA,gBAAgB,GAAG,6BAA6B,CAAC;AAE9D,gFAAgF;AAChF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAEtE,8EAA8E;AAE9E,8EAA8E;AAC9E,SAAgB,KAAK,CAAC,OAAe;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,+EAA+E;AAE/E,kFAAkF;AAClF,SAAgB,aAAa,CAAC,KAAc;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC;IAC1B,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,KAAe,CAAC,CAAC;IAC5D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,KAAe,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC5E,wEAAwE;QACxE,uEAAuE;QACvE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACzE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;aACvC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7F,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,oBAAoB,CAAC,CAAC;AAC3E,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACpD,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,iFAAiF;AACjF,SAAgB,mBAAmB,CAAC,UAAkB;IACpD,MAAM,SAAS,GAAG,IAAA,6BAAe,EAAC,IAAA,8BAAgB,EAAC,UAAU,CAAC,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAmB,CAAC;IAClE,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,mFAAmF;AACnF,SAAgB,WAAW,CAAC,QAAgB,EAAE,GAA4B,EAAE,QAAuB;IACjG,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IACpG,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC;aAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;aACpF,MAAM,EAAE,CAAC;QACZ,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+DAA+D;AAC/D,SAAgB,QAAQ,CACtB,UAAkB,EAClB,QAAgB,EAChB,GAA4B,EAC5B,QAAuB;IAEvB,OAAO,IAAA,kBAAQ,EAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,IAAA,8BAAgB,EAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5G,CAAC;AAED,SAAS,eAAe,CAAC,GAA4B;IACnD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAE9E,yEAAyE;AACzE,4EAA4E;AAC5E,6EAA6E;AAC7E,8DAA8D;AAC9D,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAwC,CAAC;AAC/G,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,KAAK,UAAU,QAAQ;IACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,SAAS,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,uFAAuF;AAChF,KAAK,UAAU,aAAa,CAAC,kBAA0B;IAC5D,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACvG,CAAC;AAED,oFAAoF;AACpF,SAAgB,cAAc,CAAC,MAAc,EAAE,SAAiB;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,OAAO,IAAA,wBAAU,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAQD,kFAAkF;AAClF,SAAgB,SAAS,CAAC,MAAc,EAAE,SAAiB,EAAE,SAAiB;IAC5E,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAA,4BAAc,EAAC,mBAAmB,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAChC,OAAO;QACL,GAAG,EAAE,wBAAgB;QACrB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,oCAAoC;AACpC,SAAgB,SAAS,CAAC,MAAc,EAAE,SAAiB,EAAE,QAAoB;IAC/E,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,KAAK,wBAAgB,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAA,8BAAgB,EAAC,mBAAmB,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1F,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAClE,CAAC;AAgBD,SAAS,WAAW,CAAC,SAAoB;IACvC,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;IAC7B,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,kBAAU,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CACpC,OAAgC,EAChC,SAAoB,EACpB,UAAyB;IAEzB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,wEAAwE;QACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACpB,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,kBAAU,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3F,OAAO;QACL,OAAO,EAAE;YACP,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,MAAM;YACN,GAAG;YACH,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS;SACV;QACD,QAAQ,EAAE,MAAM;KACjB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAgB,cAAc,CAAC,GAAW,EAAE,QAAuB;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,40 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Pure
|
|
2
|
+
* Pure (resource, operation) -> browser-cli command mapping.
|
|
3
3
|
*
|
|
4
|
-
* This module
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* GET /tabs -> Tab[] (safe)
|
|
11
|
-
* GET /clients -> Client[] (safe)
|
|
12
|
-
* POST /command -> {result: <raw command output>}
|
|
13
|
-
*
|
|
14
|
-
* Every convenience operation below is just a typed wrapper around POST
|
|
15
|
-
* /command, so what the gateway returns is the *raw* extension result for that
|
|
16
|
-
* command (no SDK-side rendering). The command itself is still subject to the
|
|
17
|
-
* server's --allow-* policy, so each operation lists the policy tier it needs.
|
|
4
|
+
* This module imports nothing from n8n so it can be unit-tested with a plain
|
|
5
|
+
* esbuild/node toolchain. The node layer collects UI parameters into a plain
|
|
6
|
+
* object and asks here for the command + args to run over the `serve` socket
|
|
7
|
+
* (see `serveClient.ts`). Every operation maps to one raw extension command;
|
|
8
|
+
* what the server returns is the *raw* command result (no SDK-side rendering),
|
|
9
|
+
* still subject to the server's --allow-* policy noted per operation.
|
|
18
10
|
*/
|
|
19
|
-
export type
|
|
20
|
-
export interface
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
body?: {
|
|
26
|
-
command: string;
|
|
27
|
-
args: Record<string, unknown>;
|
|
28
|
-
};
|
|
11
|
+
export type CommandParams = Record<string, unknown>;
|
|
12
|
+
export interface BrowserCommand {
|
|
13
|
+
/** Raw browser-cli command name, e.g. "tabs.list" or "navigate.open". */
|
|
14
|
+
command: string;
|
|
15
|
+
/** Argument object forwarded to the command. */
|
|
16
|
+
args: Record<string, unknown>;
|
|
29
17
|
}
|
|
30
|
-
export type GatewayParams = Record<string, unknown>;
|
|
31
|
-
/** Build a POST /command request for a raw browser-cli command. */
|
|
32
|
-
export declare function commandRequest(command: string, args?: Record<string, unknown>): GatewayRequest;
|
|
33
18
|
/**
|
|
34
|
-
* Map a (resource, operation) pair plus collected parameters to a single
|
|
35
|
-
*
|
|
19
|
+
* Map a (resource, operation) pair plus collected parameters to a single raw
|
|
20
|
+
* browser-cli command. Throws on an unknown pairing so the node fails loudly
|
|
36
21
|
* rather than silently issuing a wrong call.
|
|
37
22
|
*/
|
|
38
|
-
export declare function
|
|
23
|
+
export declare function buildCommand(resource: string, operation: string, params: CommandParams): BrowserCommand;
|
|
39
24
|
/** Accept an array, a JSON array string, or a comma/space separated list. */
|
|
40
25
|
export declare function parseTabIds(value: unknown): number[];
|
|
@@ -1,30 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Pure
|
|
3
|
+
* Pure (resource, operation) -> browser-cli command mapping.
|
|
4
4
|
*
|
|
5
|
-
* This module
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* GET /tabs -> Tab[] (safe)
|
|
12
|
-
* GET /clients -> Client[] (safe)
|
|
13
|
-
* POST /command -> {result: <raw command output>}
|
|
14
|
-
*
|
|
15
|
-
* Every convenience operation below is just a typed wrapper around POST
|
|
16
|
-
* /command, so what the gateway returns is the *raw* extension result for that
|
|
17
|
-
* command (no SDK-side rendering). The command itself is still subject to the
|
|
18
|
-
* server's --allow-* policy, so each operation lists the policy tier it needs.
|
|
5
|
+
* This module imports nothing from n8n so it can be unit-tested with a plain
|
|
6
|
+
* esbuild/node toolchain. The node layer collects UI parameters into a plain
|
|
7
|
+
* object and asks here for the command + args to run over the `serve` socket
|
|
8
|
+
* (see `serveClient.ts`). Every operation maps to one raw extension command;
|
|
9
|
+
* what the server returns is the *raw* command result (no SDK-side rendering),
|
|
10
|
+
* still subject to the server's --allow-* policy noted per operation.
|
|
19
11
|
*/
|
|
20
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.
|
|
22
|
-
exports.buildGatewayRequest = buildGatewayRequest;
|
|
13
|
+
exports.buildCommand = buildCommand;
|
|
23
14
|
exports.parseTabIds = parseTabIds;
|
|
24
|
-
/** Build a POST /command request for a raw browser-cli command. */
|
|
25
|
-
function commandRequest(command, args = {}) {
|
|
26
|
-
return { method: 'POST', path: '/command', body: { command, args } };
|
|
27
|
-
}
|
|
28
15
|
function str(params, key) {
|
|
29
16
|
const value = params[key];
|
|
30
17
|
return value === undefined || value === null ? '' : String(value);
|
|
@@ -39,68 +26,61 @@ function compact(args) {
|
|
|
39
26
|
return out;
|
|
40
27
|
}
|
|
41
28
|
/**
|
|
42
|
-
* Map a (resource, operation) pair plus collected parameters to a single
|
|
43
|
-
*
|
|
29
|
+
* Map a (resource, operation) pair plus collected parameters to a single raw
|
|
30
|
+
* browser-cli command. Throws on an unknown pairing so the node fails loudly
|
|
44
31
|
* rather than silently issuing a wrong call.
|
|
45
32
|
*/
|
|
46
|
-
function
|
|
33
|
+
function buildCommand(resource, operation, params) {
|
|
47
34
|
const key = `${resource}:${operation}`;
|
|
48
35
|
switch (key) {
|
|
49
36
|
// --- Raw escape hatch -------------------------------------------------
|
|
50
|
-
case 'command:execute':
|
|
51
|
-
|
|
52
|
-
const args = params.args ?? {};
|
|
53
|
-
return commandRequest(command, args);
|
|
54
|
-
}
|
|
37
|
+
case 'command:execute':
|
|
38
|
+
return { command: str(params, 'command'), args: params.args ?? {} };
|
|
55
39
|
// --- Tabs -------------------------------------------------------------
|
|
56
40
|
case 'tab:list':
|
|
57
|
-
return {
|
|
41
|
+
return { command: 'tabs.list', args: {} };
|
|
58
42
|
case 'tab:open': {
|
|
59
43
|
const focus = Boolean(params.focus);
|
|
60
|
-
return
|
|
61
|
-
url: str(params, 'url'),
|
|
62
|
-
focus,
|
|
63
|
-
background: !focus,
|
|
64
|
-
}));
|
|
44
|
+
return { command: 'navigate.open', args: compact({ url: str(params, 'url'), focus, background: !focus }) };
|
|
65
45
|
}
|
|
66
46
|
case 'tab:close': {
|
|
67
47
|
const mode = str(params, 'mode') || 'ids';
|
|
68
48
|
if (mode === 'inactive')
|
|
69
|
-
return
|
|
49
|
+
return { command: 'tabs.close', args: { inactive: true } };
|
|
70
50
|
if (mode === 'duplicates')
|
|
71
|
-
return
|
|
72
|
-
|
|
73
|
-
return commandRequest('tabs.close', { tab_ids: ids });
|
|
51
|
+
return { command: 'tabs.close', args: { duplicates: true } };
|
|
52
|
+
return { command: 'tabs.close', args: { tab_ids: parseTabIds(params.tabIds) } };
|
|
74
53
|
}
|
|
75
54
|
case 'tab:getHtml':
|
|
76
|
-
return
|
|
55
|
+
return { command: 'tabs.html', args: compact({ tabId: tabIdArg(params.tabId) }) };
|
|
77
56
|
// --- Page / extraction ------------------------------------------------
|
|
78
57
|
case 'page:info':
|
|
79
|
-
return
|
|
58
|
+
return { command: 'page.info', args: {} };
|
|
80
59
|
case 'page:extractText':
|
|
81
|
-
return
|
|
60
|
+
return { command: 'extract.text', args: compact({ selector: str(params, 'selector') }) };
|
|
82
61
|
case 'page:extractLinks':
|
|
83
|
-
return
|
|
62
|
+
return { command: 'extract.links', args: compact({ selector: str(params, 'selector') }) };
|
|
84
63
|
case 'page:extractImages':
|
|
85
|
-
return
|
|
64
|
+
return { command: 'extract.images', args: compact({ selector: str(params, 'selector') }) };
|
|
86
65
|
case 'page:extractHtml':
|
|
87
|
-
return
|
|
66
|
+
return { command: 'extract.html', args: compact({ selector: str(params, 'selector') }) };
|
|
88
67
|
case 'page:extractMarkdown':
|
|
89
|
-
return
|
|
68
|
+
return { command: 'extract.markdown', args: compact({ selector: str(params, 'selector') }) };
|
|
90
69
|
// --- DOM --------------------------------------------------------------
|
|
91
70
|
case 'dom:query':
|
|
92
|
-
return
|
|
71
|
+
return { command: 'dom.query', args: { selector: str(params, 'selector') } };
|
|
93
72
|
case 'dom:click':
|
|
94
|
-
return
|
|
73
|
+
return { command: 'dom.click', args: { selector: str(params, 'selector') } };
|
|
95
74
|
case 'dom:type':
|
|
96
|
-
return
|
|
75
|
+
return { command: 'dom.type', args: { selector: str(params, 'selector'), text: str(params, 'text') } };
|
|
97
76
|
case 'dom:eval':
|
|
98
|
-
return
|
|
99
|
-
// --- Clients
|
|
77
|
+
return { command: 'dom.eval', args: compact({ code: str(params, 'code'), tabId: tabIdArg(params.tabId) }) };
|
|
78
|
+
// --- Clients ----------------------------------------------------------
|
|
100
79
|
case 'client:list':
|
|
101
|
-
return {
|
|
80
|
+
return { command: 'clients.list', args: {} };
|
|
81
|
+
// --- Gateway: serve has no health route, so ping with a safe command --
|
|
102
82
|
case 'gateway:health':
|
|
103
|
-
return {
|
|
83
|
+
return { command: 'tabs.list', args: {} };
|
|
104
84
|
default:
|
|
105
85
|
throw new Error(`Unsupported operation "${operation}" for resource "${resource}"`);
|
|
106
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../nodes/BrowserCli/request.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../nodes/BrowserCli/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ServeConnectOptions {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
/** Wrap the TCP connection in TLS (for a serve behind a TLS-terminating proxy). */
|
|
5
|
+
tls?: boolean;
|
|
6
|
+
/** Reject self-signed / invalid certs when `tls` is on. */
|
|
7
|
+
rejectUnauthorized?: boolean;
|
|
8
|
+
/** Ed25519 PKCS8 PEM private key, or null/empty for a `--no-auth` endpoint. */
|
|
9
|
+
privateKeyPem?: string | null;
|
|
10
|
+
/** Optional `_route` target for a multi-browser serve. */
|
|
11
|
+
route?: string | null;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Run a single browser-cli command against a `serve` endpoint and return the
|
|
16
|
+
* server's response object: `{id, success, data}` or `{id, success:false, error}`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function sendServeCommand(opts: ServeConnectOptions, command: string, args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendServeCommand = sendServeCommand;
|
|
4
|
+
/**
|
|
5
|
+
* Socket client for a raw `browser-cli serve` endpoint.
|
|
6
|
+
*
|
|
7
|
+
* One command per connection: connect, read the challenge frame, send the
|
|
8
|
+
* authenticated (and PQ-encrypted) request frame, read the response frame,
|
|
9
|
+
* close. The crypto and payload shapes live in `protocol.ts`.
|
|
10
|
+
*/
|
|
11
|
+
const node_net_1 = require("node:net");
|
|
12
|
+
const node_tls_1 = require("node:tls");
|
|
13
|
+
const node_crypto_1 = require("node:crypto");
|
|
14
|
+
const protocol_1 = require("./protocol");
|
|
15
|
+
/** Version advertised to the server. Must be >= the server's PROTOCOL_MIN_CLIENT
|
|
16
|
+
* (0.9.0) and >= 0.9.5 so the server enforces the post-quantum handshake this
|
|
17
|
+
* client implements. */
|
|
18
|
+
const CLIENT_VERSION = '0.15.4';
|
|
19
|
+
const USER_AGENT = `browser-cli/${CLIENT_VERSION}`;
|
|
20
|
+
// Force a plain-JSON, uncompressed response so no msgpack/zstd decoder is needed.
|
|
21
|
+
const ACCEPT_ENCODING = { ser: ['json'], comp: [] };
|
|
22
|
+
const MAX_MSG_BYTES = 32 * 1024 * 1024;
|
|
23
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
24
|
+
/** Reassembles browser-cli's 4-byte length-prefixed frames from a socket. */
|
|
25
|
+
class FrameReader {
|
|
26
|
+
constructor(socket) {
|
|
27
|
+
this.buffer = Buffer.alloc(0);
|
|
28
|
+
this.waiters = [];
|
|
29
|
+
this.failed = null;
|
|
30
|
+
socket.on('data', (chunk) => this.onData(chunk));
|
|
31
|
+
}
|
|
32
|
+
onData(chunk) {
|
|
33
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
34
|
+
while (this.buffer.length >= 4) {
|
|
35
|
+
const length = this.buffer.readUInt32LE(0);
|
|
36
|
+
if (length > MAX_MSG_BYTES) {
|
|
37
|
+
this.fail(new Error(`serve frame too large (${length} bytes)`));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (this.buffer.length < 4 + length)
|
|
41
|
+
break;
|
|
42
|
+
const payload = this.buffer.subarray(4, 4 + length);
|
|
43
|
+
this.buffer = this.buffer.subarray(4 + length);
|
|
44
|
+
const waiter = this.waiters.shift();
|
|
45
|
+
if (waiter)
|
|
46
|
+
waiter(Buffer.from(payload));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
fail(error) {
|
|
50
|
+
this.failed = error;
|
|
51
|
+
}
|
|
52
|
+
/** Resolve with the next complete frame, or reject on error/EOF/timeout. */
|
|
53
|
+
next() {
|
|
54
|
+
if (this.failed)
|
|
55
|
+
return Promise.reject(this.failed);
|
|
56
|
+
return new Promise((resolve) => this.waiters.push(resolve));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function openSocket(opts) {
|
|
60
|
+
if (opts.tls) {
|
|
61
|
+
return (0, node_tls_1.connect)({
|
|
62
|
+
host: opts.host,
|
|
63
|
+
port: opts.port,
|
|
64
|
+
rejectUnauthorized: opts.rejectUnauthorized !== false,
|
|
65
|
+
servername: opts.host,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return (0, node_net_1.connect)({ host: opts.host, port: opts.port });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Run a single browser-cli command against a `serve` endpoint and return the
|
|
72
|
+
* server's response object: `{id, success, data}` or `{id, success:false, error}`.
|
|
73
|
+
*/
|
|
74
|
+
async function sendServeCommand(opts, command, args) {
|
|
75
|
+
const socket = openSocket(opts);
|
|
76
|
+
socket.setNoDelay(true);
|
|
77
|
+
const reader = new FrameReader(socket);
|
|
78
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
let settled = false;
|
|
81
|
+
const finish = (fn) => {
|
|
82
|
+
if (settled)
|
|
83
|
+
return;
|
|
84
|
+
settled = true;
|
|
85
|
+
clearTimeout(timer);
|
|
86
|
+
socket.destroy();
|
|
87
|
+
fn();
|
|
88
|
+
};
|
|
89
|
+
const timer = setTimeout(() => finish(() => reject(new Error(`serve request to ${opts.host}:${opts.port} timed out after ${timeoutMs}ms`))), timeoutMs);
|
|
90
|
+
socket.on('error', (err) => finish(() => reject(err)));
|
|
91
|
+
socket.on('close', () => finish(() => reject(new Error('serve connection closed before a response was received'))));
|
|
92
|
+
const run = async () => {
|
|
93
|
+
const challengeRaw = await reader.next();
|
|
94
|
+
const challenge = JSON.parse(challengeRaw.toString('utf8'));
|
|
95
|
+
const baseMsg = {
|
|
96
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
97
|
+
command,
|
|
98
|
+
args: args ?? {},
|
|
99
|
+
user_agent: USER_AGENT,
|
|
100
|
+
accept_encoding: ACCEPT_ENCODING,
|
|
101
|
+
};
|
|
102
|
+
if (opts.route)
|
|
103
|
+
baseMsg._route = opts.route;
|
|
104
|
+
const { payload, pqSecret } = await (0, protocol_1.buildAuthPayload)(baseMsg, challenge, opts.privateKeyPem || null);
|
|
105
|
+
socket.write((0, protocol_1.frame)(Buffer.from(JSON.stringify(payload), 'utf8')));
|
|
106
|
+
const responseRaw = await reader.next();
|
|
107
|
+
const response = (0, protocol_1.decodeResponse)(responseRaw, pqSecret);
|
|
108
|
+
finish(() => resolve(response));
|
|
109
|
+
};
|
|
110
|
+
// A TLS socket is ready only after 'secureConnect'; a plain socket on 'connect'.
|
|
111
|
+
socket.once(opts.tls ? 'secureConnect' : 'connect', () => {
|
|
112
|
+
run().catch((err) => finish(() => reject(err)));
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=serveClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serveClient.js","sourceRoot":"","sources":["../../../nodes/BrowserCli/serveClient.ts"],"names":[],"mappings":";;AA2FA,4CAsDC;AAjJD;;;;;;GAMG;AACH,uCAAiD;AACjD,uCAAiD;AAEjD,6CAAyC;AAEzC,yCAAqF;AAErF;;wBAEwB;AACxB,MAAM,cAAc,GAAG,QAAQ,CAAC;AAChC,MAAM,UAAU,GAAG,eAAe,cAAc,EAAE,CAAC;AACnD,kFAAkF;AAClF,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAc,EAAE,CAAC;AAChE,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAgBlC,6EAA6E;AAC7E,MAAM,WAAW;IAKf,YAAY,MAAc;QAJlB,WAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,YAAO,GAAmC,EAAE,CAAC;QAC7C,WAAM,GAAiB,IAAI,CAAC;QAGlC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,KAAa;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,aAAa,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,0BAA0B,MAAM,SAAS,CAAC,CAAC,CAAC;gBAChE,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;gBAAE,MAAM;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAY;QACf,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,4EAA4E;IAC5E,IAAI;QACF,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,SAAS,UAAU,CAAC,IAAyB;IAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,IAAA,kBAAU,EAAC;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,KAAK,KAAK;YACrD,UAAU,EAAE,IAAI,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAA,kBAAU,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CACpC,IAAyB,EACzB,OAAe,EACf,IAA6B;IAE7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAEvD,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,EAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,EAAE,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,oBAAoB,SAAS,IAAI,CAAC,CAAC,CAAC,EAClH,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpH,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAc,CAAC;YAEzE,MAAM,OAAO,GAA4B;gBACvC,EAAE,EAAE,IAAA,wBAAU,GAAE;gBAChB,OAAO;gBACP,IAAI,EAAE,IAAI,IAAI,EAAE;gBAChB,UAAU,EAAE,UAAU;gBACtB,eAAe,EAAE,eAAe;aACjC,CAAC;YACF,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YAE5C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,2BAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;YACrG,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAK,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAElE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAA,yBAAc,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,iFAAiF;QACjF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE;YACvD,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-browser-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "n8n community node that controls a remote browser
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "n8n community node that controls a remote browser by talking directly to a browser-cli serve endpoint (Ed25519 + post-quantum encrypted)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
7
7
|
"browser-cli",
|
|
@@ -38,5 +38,8 @@
|
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"n8n-workflow": "*"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@noble/post-quantum": "^0.6.1"
|
|
41
44
|
}
|
|
42
45
|
}
|