@thenewlabs/entangle-serve 2.1.1 → 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/capability.d.ts +32 -0
- package/dist/capability.d.ts.map +1 -1
- package/dist/capability.js +46 -0
- package/dist/capability.js.map +1 -1
- package/dist/index.js +47 -12
- 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/capability.d.ts
CHANGED
|
@@ -18,4 +18,36 @@ export declare function createCapability(options: {
|
|
|
18
18
|
export declare function parseCapabilityUrl(input: string): Promise<CapabilityInfo & {
|
|
19
19
|
relayOrigin?: string;
|
|
20
20
|
}>;
|
|
21
|
+
/**
|
|
22
|
+
* A full capability URL carries a `/cap/<id>` path and/or an `#S=<secret>`
|
|
23
|
+
* fragment (or the compact `<capId>#S=<secret>` form). A bare relay origin
|
|
24
|
+
* (`https://relay`) has neither and selects only the relay to mint on.
|
|
25
|
+
*/
|
|
26
|
+
export declare function looksLikeCapabilityUrl(input: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Decide the relay to register with and whether to pin a specific capability,
|
|
29
|
+
* from the (optional) positional URL and flags that `serve` accepts:
|
|
30
|
+
*
|
|
31
|
+
* serve https://relay -> mint fresh cap, relay = origin
|
|
32
|
+
* serve https://relay/cap/<capId>#S=<secret> -> pin that cap, relay = origin
|
|
33
|
+
* serve --capability <full-url> -> pin that cap (positional ignored for the cap)
|
|
34
|
+
* serve --server <url> -> force the relay regardless of the above
|
|
35
|
+
* serve -> mint fresh cap on the configured/default relay
|
|
36
|
+
*
|
|
37
|
+
* A full positional URL and a bare relay origin are disambiguated by
|
|
38
|
+
* {@link looksLikeCapabilityUrl}; a malformed cap URL surfaces the parse error
|
|
39
|
+
* rather than being silently treated as a bare relay.
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveServeTarget(opts: {
|
|
42
|
+
positionalUrl?: string | undefined;
|
|
43
|
+
capabilityFlag?: string | undefined;
|
|
44
|
+
serverFlag?: string | undefined;
|
|
45
|
+
envCapability?: string | undefined;
|
|
46
|
+
configRelayUrl?: string | undefined;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
serverUrl: string;
|
|
49
|
+
pinnedCapability?: CapabilityInfo & {
|
|
50
|
+
relayOrigin?: string;
|
|
51
|
+
};
|
|
52
|
+
}>;
|
|
21
53
|
//# sourceMappingURL=capability.d.ts.map
|
package/dist/capability.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgB1B;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwDpD"}
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgB1B;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwDpD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7D;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,cAAc,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAoB/F"}
|
package/dist/capability.js
CHANGED
|
@@ -72,4 +72,50 @@ export async function parseCapabilityUrl(input) {
|
|
|
72
72
|
...(relayOrigin !== undefined && { relayOrigin }),
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* A full capability URL carries a `/cap/<id>` path and/or an `#S=<secret>`
|
|
77
|
+
* fragment (or the compact `<capId>#S=<secret>` form). A bare relay origin
|
|
78
|
+
* (`https://relay`) has neither and selects only the relay to mint on.
|
|
79
|
+
*/
|
|
80
|
+
export function looksLikeCapabilityUrl(input) {
|
|
81
|
+
return input.includes('/cap/') || input.includes('#');
|
|
82
|
+
}
|
|
83
|
+
/** Reduce a URL to its origin (`https://host[:port]`), tolerating trailing paths. */
|
|
84
|
+
function normalizeOrigin(input) {
|
|
85
|
+
try {
|
|
86
|
+
return new URL(input).origin;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return input;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Decide the relay to register with and whether to pin a specific capability,
|
|
94
|
+
* from the (optional) positional URL and flags that `serve` accepts:
|
|
95
|
+
*
|
|
96
|
+
* serve https://relay -> mint fresh cap, relay = origin
|
|
97
|
+
* serve https://relay/cap/<capId>#S=<secret> -> pin that cap, relay = origin
|
|
98
|
+
* serve --capability <full-url> -> pin that cap (positional ignored for the cap)
|
|
99
|
+
* serve --server <url> -> force the relay regardless of the above
|
|
100
|
+
* serve -> mint fresh cap on the configured/default relay
|
|
101
|
+
*
|
|
102
|
+
* A full positional URL and a bare relay origin are disambiguated by
|
|
103
|
+
* {@link looksLikeCapabilityUrl}; a malformed cap URL surfaces the parse error
|
|
104
|
+
* rather than being silently treated as a bare relay.
|
|
105
|
+
*/
|
|
106
|
+
export async function resolveServeTarget(opts) {
|
|
107
|
+
const { positionalUrl, capabilityFlag, serverFlag, envCapability, configRelayUrl } = opts;
|
|
108
|
+
const positionalIsCap = !!positionalUrl && looksLikeCapabilityUrl(positionalUrl);
|
|
109
|
+
const capUrl = capabilityFlag || (positionalIsCap ? positionalUrl : undefined) || envCapability;
|
|
110
|
+
const pinned = capUrl ? await parseCapabilityUrl(capUrl) : undefined;
|
|
111
|
+
// A bare positional origin (not a cap URL) selects only the relay; a fresh
|
|
112
|
+
// capability gets minted downstream.
|
|
113
|
+
const relayFromPositional = !positionalIsCap && positionalUrl ? normalizeOrigin(positionalUrl) : undefined;
|
|
114
|
+
const serverUrl = serverFlag ||
|
|
115
|
+
pinned?.relayOrigin ||
|
|
116
|
+
relayFromPositional ||
|
|
117
|
+
configRelayUrl ||
|
|
118
|
+
'http://localhost:8080';
|
|
119
|
+
return pinned ? { serverUrl, pinnedCapability: pinned } : { serverUrl };
|
|
120
|
+
}
|
|
75
121
|
//# sourceMappingURL=capability.js.map
|
package/dist/capability.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAS9G,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAGtC;IACC,MAAM,UAAU,EAAE,CAAC;IAEnB,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAClC,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;IAE3B,MAAM,MAAM,GAAW;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;QACrC,UAAU,EAAE,CAAC,EAAE,sDAAsD;KACtE,CAAC;IAEF,OAAO;QACL,KAAK;QACL,CAAC;QACD,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAa;IAEb,MAAM,UAAU,EAAE,CAAC;IAEnB,IAAI,KAAyB,CAAC;IAC9B,IAAI,QAA4B,CAAC;IACjC,IAAI,WAA+B,CAAC;IAEpC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,QAAQ,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,iBAAiB;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;YACzB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,GAAG,UAAU,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,MAA0B,CAAC;IAC/B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;QACL,KAAK;QACL,CAAC,EAAE,MAAM;QACT,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3C,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { getConfig, getVersionInfo, OutputHandler, parseOutputMode } from '@thenewlabs/entangle-utils';
|
|
4
4
|
import { startAgent } from './agent.js';
|
|
5
|
-
import { createCapability,
|
|
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')
|
|
@@ -10,12 +11,17 @@ program
|
|
|
10
11
|
.version(getVersionInfo())
|
|
11
12
|
.option('--output-mode <mode>', 'Output mode: text or stream-json', 'text');
|
|
12
13
|
program
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
// Default command: `entangle serve [url]` runs the agent without needing an
|
|
15
|
+
// explicit `start`. The positional URL is either a bare relay origin
|
|
16
|
+
// (mint a fresh capability there) or a full capability URL (serve that exact
|
|
17
|
+
// capability); flags still work and take precedence over the positional.
|
|
18
|
+
.command('start', { isDefault: true })
|
|
19
|
+
.description('Start the agent (mint a fresh capability or serve a pinned one) and register with the relay')
|
|
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')
|
|
21
|
+
.option('--server <url>', 'Relay server URL (overrides the origin of the positional URL)')
|
|
22
|
+
.option('--password [password]', 'Require a password to connect; pass the flag alone to be prompted, or set AGENT_PASSWORD')
|
|
17
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')
|
|
18
|
-
.action(async (options) => {
|
|
24
|
+
.action(async (url, options) => {
|
|
19
25
|
try {
|
|
20
26
|
// Propagate output mode to all loggers in this process
|
|
21
27
|
process.env.OUTPUT_MODE = program.opts().outputMode;
|
|
@@ -23,15 +29,31 @@ program
|
|
|
23
29
|
const output = new OutputHandler({ mode: outputMode });
|
|
24
30
|
output.version('Entangle Agent', getVersionInfo());
|
|
25
31
|
const config = getConfig();
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
const { serverUrl, pinnedCapability } = await resolveServeTarget({
|
|
33
|
+
positionalUrl: url,
|
|
34
|
+
capabilityFlag: options.capability,
|
|
35
|
+
serverFlag: options.server,
|
|
36
|
+
envCapability: process.env.ENTANGLE_CAPABILITY,
|
|
37
|
+
configRelayUrl: config.relayUrl,
|
|
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
|
+
}
|
|
30
52
|
await startAgent({
|
|
31
53
|
serverUrl,
|
|
32
54
|
outputMode: program.opts().outputMode,
|
|
33
|
-
password
|
|
34
|
-
...(
|
|
55
|
+
...(password ? { password } : {}),
|
|
56
|
+
...(pinnedCapability && { pinnedCapability }),
|
|
35
57
|
});
|
|
36
58
|
}
|
|
37
59
|
catch (error) {
|
|
@@ -69,5 +91,18 @@ program
|
|
|
69
91
|
process.exit(1);
|
|
70
92
|
}
|
|
71
93
|
});
|
|
94
|
+
program.addHelpText('after', `
|
|
95
|
+
Examples:
|
|
96
|
+
# Mint a fresh capability and serve it on a relay
|
|
97
|
+
entangle serve https://entangle.thenewlabs.com
|
|
98
|
+
|
|
99
|
+
# Serve a specific capability (its origin is used as the relay)
|
|
100
|
+
entangle serve https://entangle.thenewlabs.com/cap/<capId>#S=<secret>
|
|
101
|
+
|
|
102
|
+
# Mint on the configured/default relay
|
|
103
|
+
entangle serve
|
|
104
|
+
|
|
105
|
+
# Just create a capability without starting the agent
|
|
106
|
+
entangle serve create-cap`);
|
|
72
107
|
program.parse();
|
|
73
108
|
//# sourceMappingURL=index.js.map
|
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":"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"}
|
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.
|
|
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.
|
|
21
|
-
"@thenewlabs/entangle-protocol": "^2.
|
|
22
|
-
"@thenewlabs/entangle-utils": "^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"
|