@thenewlabs/entangle-serve 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- package/dist/prompt.d.ts +13 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +57 -0
- package/dist/prompt.js.map +1 -0
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { getConfig, getVersionInfo, OutputHandler, parseOutputMode } from '@thenewlabs/entangle-utils';
|
|
4
4
|
import { startAgent } from './agent.js';
|
|
5
5
|
import { createCapability, resolveServeTarget } from './capability.js';
|
|
6
|
+
import { promptHidden } from './prompt.js';
|
|
6
7
|
const program = new Command();
|
|
7
8
|
program
|
|
8
9
|
.name('entangle-serve')
|
|
@@ -18,7 +19,7 @@ program
|
|
|
18
19
|
.description('Start the agent (mint a fresh capability or serve a pinned one) and register with the relay')
|
|
19
20
|
.argument('[url]', 'Relay origin (https://relay) to mint a fresh capability on, or a full capability URL (https://relay/cap/<capId>#S=<secret>) to serve that exact capability')
|
|
20
21
|
.option('--server <url>', 'Relay server URL (overrides the origin of the positional URL)')
|
|
21
|
-
.option('--password
|
|
22
|
+
.option('--password [password]', 'Require a password to connect; pass the flag alone to be prompted, or set AGENT_PASSWORD')
|
|
22
23
|
.option('--capability <url>', 'Serve a specific capability URL (https://relay/cap/<capId>#S=<secret>) instead of minting a fresh ephemeral one; its host is also used as the relay server')
|
|
23
24
|
.action(async (url, options) => {
|
|
24
25
|
try {
|
|
@@ -35,10 +36,23 @@ program
|
|
|
35
36
|
envCapability: process.env.ENTANGLE_CAPABILITY,
|
|
36
37
|
configRelayUrl: config.relayUrl,
|
|
37
38
|
});
|
|
39
|
+
// `--password` with no value (commander yields `true`) prompts interactively
|
|
40
|
+
// so the secret never appears in argv; a string value or AGENT_PASSWORD is
|
|
41
|
+
// used verbatim.
|
|
42
|
+
let password;
|
|
43
|
+
if (options.password === true) {
|
|
44
|
+
password = await promptHidden('Agent password: ');
|
|
45
|
+
}
|
|
46
|
+
else if (typeof options.password === 'string') {
|
|
47
|
+
password = options.password;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
password = process.env.AGENT_PASSWORD;
|
|
51
|
+
}
|
|
38
52
|
await startAgent({
|
|
39
53
|
serverUrl,
|
|
40
54
|
outputMode: program.opts().outputMode,
|
|
41
|
-
password
|
|
55
|
+
...(password ? { password } : {}),
|
|
42
56
|
...(pinnedCapability && { pinnedCapability }),
|
|
43
57
|
});
|
|
44
58
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACvG,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACvG,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,cAAc,EAAE,CAAC;KACzB,MAAM,CAAC,sBAAsB,EAAE,kCAAkC,EAAE,MAAM,CAAC,CAAC;AAE9E,OAAO;IACL,4EAA4E;IAC5E,qEAAqE;IACrE,6EAA6E;IAC7E,yEAAyE;KACxE,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACrC,WAAW,CAAC,6FAA6F,CAAC;KAC1G,QAAQ,CAAC,OAAO,EAAE,4JAA4J,CAAC;KAC/K,MAAM,CAAC,gBAAgB,EAAE,+DAA+D,CAAC;KACzF,MAAM,CAAC,uBAAuB,EAAE,0FAA0F,CAAC;KAC3H,MAAM,CAAC,oBAAoB,EAAE,4JAA4J,CAAC;KAC1L,MAAM,CAAC,KAAK,EAAE,GAAuB,EAAE,OAAO,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,uDAAuD;QACvD,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC;QACpD,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAkB,CAAC;YAC/D,aAAa,EAAE,GAAG;YAClB,cAAc,EAAE,OAAO,CAAC,UAAU;YAClC,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC9C,cAAc,EAAE,MAAM,CAAC,QAAQ;SAChC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,2EAA2E;QAC3E,iBAAiB;QACjB,IAAI,QAA4B,CAAC;QACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAChD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACxC,CAAC;QAED,MAAM,UAAU,CAAC;YACf,SAAS;YACT,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU;YACrC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvD,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,cAAc,EAAE,iEAAiE,CAAC;KACzF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC;QACpD,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC;YACjC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU;SACtC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,IAAI,sBAAsB,CAAC;QAClF,MAAM,IAAI,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvD,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;4BAYD,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/prompt.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read a secret from the terminal without echoing it.
|
|
3
|
+
*
|
|
4
|
+
* Used when `serve` is started with a bare `--password` flag (no value): the
|
|
5
|
+
* agent password is prompted for interactively instead of appearing in argv
|
|
6
|
+
* (where it would leak into shell history and `ps`).
|
|
7
|
+
*
|
|
8
|
+
* Requires an interactive TTY; in a non-interactive context (pipe, CI) there is
|
|
9
|
+
* nothing to prompt, so we fail with guidance to pass the value explicitly or
|
|
10
|
+
* use AGENT_PASSWORD.
|
|
11
|
+
*/
|
|
12
|
+
export declare function promptHidden(query: string): Promise<string>;
|
|
13
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C3D"}
|
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read a secret from the terminal without echoing it.
|
|
3
|
+
*
|
|
4
|
+
* Used when `serve` is started with a bare `--password` flag (no value): the
|
|
5
|
+
* agent password is prompted for interactively instead of appearing in argv
|
|
6
|
+
* (where it would leak into shell history and `ps`).
|
|
7
|
+
*
|
|
8
|
+
* Requires an interactive TTY; in a non-interactive context (pipe, CI) there is
|
|
9
|
+
* nothing to prompt, so we fail with guidance to pass the value explicitly or
|
|
10
|
+
* use AGENT_PASSWORD.
|
|
11
|
+
*/
|
|
12
|
+
export function promptHidden(query) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const { stdin, stdout } = process;
|
|
15
|
+
if (!stdin.isTTY) {
|
|
16
|
+
reject(new Error('Password prompt requires an interactive terminal; pass --password <value> or set AGENT_PASSWORD'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
stdout.write(query);
|
|
20
|
+
const wasRaw = stdin.isRaw;
|
|
21
|
+
stdin.setRawMode(true);
|
|
22
|
+
stdin.resume();
|
|
23
|
+
let input = '';
|
|
24
|
+
const finish = (cb) => {
|
|
25
|
+
stdin.removeListener('data', onData);
|
|
26
|
+
stdin.setRawMode(wasRaw);
|
|
27
|
+
stdin.pause();
|
|
28
|
+
stdout.write('\n');
|
|
29
|
+
cb();
|
|
30
|
+
};
|
|
31
|
+
const onData = (data) => {
|
|
32
|
+
for (const ch of data.toString('utf8')) {
|
|
33
|
+
const code = ch.charCodeAt(0);
|
|
34
|
+
if (code === 0x0a || code === 0x0d) {
|
|
35
|
+
// Enter (LF / CR)
|
|
36
|
+
finish(() => resolve(input));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
else if (code === 0x03) {
|
|
40
|
+
// Ctrl-C
|
|
41
|
+
finish(() => reject(new Error('Password entry cancelled')));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
else if (code === 0x7f || code === 0x08) {
|
|
45
|
+
// DEL / Backspace
|
|
46
|
+
input = input.slice(0, -1);
|
|
47
|
+
}
|
|
48
|
+
else if (code >= 0x20) {
|
|
49
|
+
// Printable; ignore other control characters.
|
|
50
|
+
input += ch;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
stdin.on('data', onData);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAElC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC,CAAC;YACrH,OAAO;QACT,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEpB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,CAAC,EAAc,EAAE,EAAE;YAChC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACzB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,EAAE,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACnC,kBAAkB;oBAClB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;qBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACzB,SAAS;oBACT,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;oBAC5D,OAAO;gBACT,CAAC;qBAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC1C,kBAAkB;oBAClB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC;qBAAM,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACxB,8CAA8C;oBAC9C,KAAK,IAAI,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thenewlabs/entangle-serve",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
|
|
20
|
-
"@thenewlabs/entangle-crypto": "^2.2.
|
|
21
|
-
"@thenewlabs/entangle-protocol": "^2.2.
|
|
22
|
-
"@thenewlabs/entangle-utils": "^2.2.
|
|
20
|
+
"@thenewlabs/entangle-crypto": "^2.2.1",
|
|
21
|
+
"@thenewlabs/entangle-protocol": "^2.2.1",
|
|
22
|
+
"@thenewlabs/entangle-utils": "^2.2.1",
|
|
23
23
|
"cborg": "^4.5.8",
|
|
24
24
|
"commander": "^15.0.0",
|
|
25
25
|
"ws": "^8.21.0"
|