frely-cli 0.23.7 → 0.23.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/agent-help.d.ts +176 -8
- package/dist/agent-help.js +32 -2
- package/dist/agent-help.js.map +1 -1
- package/dist/auth.d.ts +5 -0
- package/dist/auth.js +36 -0
- package/dist/auth.js.map +1 -1
- package/dist/cloud.d.ts +2 -0
- package/dist/cloud.js +38 -0
- package/dist/cloud.js.map +1 -1
- package/dist/controller/args.d.ts +25 -0
- package/dist/controller/args.js +61 -0
- package/dist/controller/args.js.map +1 -0
- package/dist/controller/client.d.ts +52 -0
- package/dist/controller/client.js +124 -0
- package/dist/controller/client.js.map +1 -0
- package/dist/controller/commands.d.ts +16 -0
- package/dist/controller/commands.js +411 -0
- package/dist/controller/commands.js.map +1 -0
- package/dist/controller/dpop.d.ts +24 -0
- package/dist/controller/dpop.js +26 -0
- package/dist/controller/dpop.js.map +1 -0
- package/dist/controller/session.d.ts +53 -0
- package/dist/controller/session.js +211 -0
- package/dist/controller/session.js.map +1 -0
- package/dist/device/protocol.d.ts +1 -1
- package/dist/device/protocol.js +1 -1
- package/dist/device/protocol.js.map +1 -1
- package/dist/device/relay-client.d.ts +14 -0
- package/dist/device/relay-client.js +34 -14
- package/dist/device/relay-client.js.map +1 -1
- package/dist/index.js +45 -4
- package/dist/index.js.map +1 -1
- package/dist/share/control.d.ts +16 -0
- package/dist/share/control.js +49 -0
- package/dist/share/control.js.map +1 -0
- package/dist/share/frpc-config.d.ts +24 -0
- package/dist/share/frpc-config.js +63 -0
- package/dist/share/frpc-config.js.map +1 -0
- package/dist/share/frpc.d.ts +30 -0
- package/dist/share/frpc.js +108 -0
- package/dist/share/frpc.js.map +1 -0
- package/dist/share/gateway.d.ts +26 -0
- package/dist/share/gateway.js +100 -0
- package/dist/share/gateway.js.map +1 -0
- package/dist/share/run.d.ts +43 -0
- package/dist/share/run.js +163 -0
- package/dist/share/run.js.map +1 -0
- package/dist/skill/sealed-run.js +5 -3
- package/dist/skill/sealed-run.js.map +1 -1
- package/dist/update/maintenance.d.ts +4 -0
- package/dist/update/maintenance.js +5 -1
- package/dist/update/maintenance.js.map +1 -1
- package/dist/update/update.d.ts +3 -0
- package/dist/update/update.js +22 -5
- package/dist/update/update.js.map +1 -1
- package/package.json +1 -1
- package/skills/frely-cli/SKILL.md +8 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { chmod, copyFile, mkdir, mkdtemp, readdir, rename, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { homedir, tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { execFile } from "node:child_process";
|
|
6
|
+
import { promisify } from "node:util";
|
|
7
|
+
/**
|
|
8
|
+
* frpc, the client of Frely's frps relay, is downloaded on first use to the user's data directory and run by `frely share`. The version is
|
|
9
|
+
* pinned and every platform's archive has its SHA-256 here (from the release's frp_sha256_checksums.txt), so a changed download is refused.
|
|
10
|
+
*/
|
|
11
|
+
export const FRPC_VERSION = "0.71.1";
|
|
12
|
+
const ASSETS = Object.freeze({
|
|
13
|
+
"darwin-arm64": { file: `frp_${FRPC_VERSION}_darwin_arm64.tar.gz`, sha256: "d15d0324b99e14619c9aa46e37f6db588c06a09be4bc6f7948890b6b61077842", binary: "frpc" },
|
|
14
|
+
"darwin-x64": { file: `frp_${FRPC_VERSION}_darwin_amd64.tar.gz`, sha256: "8acb59b6fb998cc8d209d1373d90bf70fa5ec3efeb4dfbc7bda6ce3abd78cb45", binary: "frpc" },
|
|
15
|
+
"linux-x64": { file: `frp_${FRPC_VERSION}_linux_amd64.tar.gz`, sha256: "1d9875210972a5d1a62b2dc4c48df45ab0af05d3ca1b5e494a014428259df803", binary: "frpc" },
|
|
16
|
+
"linux-arm64": { file: `frp_${FRPC_VERSION}_linux_arm64.tar.gz`, sha256: "8edf590b0c396fa42f9c147121a76af83cfc2002b08f5aef0ea1008c43482019", binary: "frpc" },
|
|
17
|
+
"win32-x64": { file: `frp_${FRPC_VERSION}_windows_amd64.zip`, sha256: "b90074b2b6a1d792a7a40f085ac6d276bcab2d1bc60201f8a86ca53ce65ce821", binary: "frpc.exe" },
|
|
18
|
+
"win32-arm64": { file: `frp_${FRPC_VERSION}_windows_arm64.zip`, sha256: "6c25afb4058f7708937db7064836fec593e941de0e6c2c255982335a9b16d370", binary: "frpc.exe" },
|
|
19
|
+
});
|
|
20
|
+
const RELEASE_BASE = `https://github.com/fatedier/frp/releases/download/v${FRPC_VERSION}`;
|
|
21
|
+
const DOWNLOAD_TIMEOUT_MS = 120_000;
|
|
22
|
+
const MAX_ARCHIVE_BYTES = 64 * 1024 * 1024;
|
|
23
|
+
const execute = promisify(execFile);
|
|
24
|
+
export function frpcAsset(platform = process.platform, arch = process.arch) {
|
|
25
|
+
const asset = ASSETS[`${platform}-${arch}`];
|
|
26
|
+
if (!asset)
|
|
27
|
+
throw new Error(`frely share has no frpc build for ${platform}-${arch}.`);
|
|
28
|
+
return asset;
|
|
29
|
+
}
|
|
30
|
+
/** `~/.local/share/frely/bin` (`XDG_DATA_HOME` first; `%LOCALAPPDATA%` on Windows). */
|
|
31
|
+
export function frpcDirectory(env = process.env, platform = process.platform, home = homedir()) {
|
|
32
|
+
const root = env.XDG_DATA_HOME || (platform === "win32" ? env.LOCALAPPDATA : undefined) || join(home, ".local", "share");
|
|
33
|
+
return join(root, "frely", "bin");
|
|
34
|
+
}
|
|
35
|
+
export function frpcPath(directory, asset) {
|
|
36
|
+
return join(directory, `frpc-${FRPC_VERSION}${asset.binary.endsWith(".exe") ? ".exe" : ""}`);
|
|
37
|
+
}
|
|
38
|
+
export function sha256Hex(bytes) {
|
|
39
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
40
|
+
}
|
|
41
|
+
async function fetchBytes(url) {
|
|
42
|
+
const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS) });
|
|
43
|
+
if (!response.ok)
|
|
44
|
+
throw new Error(`Downloading frpc failed: HTTP ${response.status}.`);
|
|
45
|
+
const length = Number(response.headers.get("content-length") ?? 0);
|
|
46
|
+
if (length > MAX_ARCHIVE_BYTES)
|
|
47
|
+
throw new Error("The frpc download is larger than expected.");
|
|
48
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
49
|
+
if (bytes.length > MAX_ARCHIVE_BYTES)
|
|
50
|
+
throw new Error("The frpc download is larger than expected.");
|
|
51
|
+
return bytes;
|
|
52
|
+
}
|
|
53
|
+
/** bsdtar (macOS, Windows 10+) and GNU tar (zip aside) read both formats; the archive is verified before it is unpacked. */
|
|
54
|
+
async function extractWithTar(archive, into) {
|
|
55
|
+
await execute("tar", ["-xf", archive, "-C", into], { timeout: 60_000 });
|
|
56
|
+
}
|
|
57
|
+
async function findFile(directory, name) {
|
|
58
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
59
|
+
const path = join(directory, entry.name);
|
|
60
|
+
if (entry.isDirectory()) {
|
|
61
|
+
const found = await findFile(path, name);
|
|
62
|
+
if (found)
|
|
63
|
+
return found;
|
|
64
|
+
}
|
|
65
|
+
else if (entry.name === name)
|
|
66
|
+
return path;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/** The path of the pinned frpc, downloaded and verified first when it is not there yet. */
|
|
71
|
+
export async function ensureFrpc(deps = {}) {
|
|
72
|
+
const asset = deps.asset ?? frpcAsset(deps.platform, deps.arch);
|
|
73
|
+
const directory = deps.directory ?? frpcDirectory();
|
|
74
|
+
const target = frpcPath(directory, asset);
|
|
75
|
+
try {
|
|
76
|
+
const { access } = await import("node:fs/promises");
|
|
77
|
+
await access(target);
|
|
78
|
+
return target;
|
|
79
|
+
}
|
|
80
|
+
catch { /* not downloaded yet */ }
|
|
81
|
+
const log = deps.log ?? (() => undefined);
|
|
82
|
+
const base = (deps.baseUrl ?? process.env.FRELY_FRPC_BASE_URL ?? RELEASE_BASE).replace(/\/+$/u, "");
|
|
83
|
+
log(`Downloading frpc ${FRPC_VERSION} (${asset.file}) once...\n`);
|
|
84
|
+
const bytes = await (deps.download ?? fetchBytes)(`${base}/${asset.file}`);
|
|
85
|
+
if (sha256Hex(bytes) !== asset.sha256)
|
|
86
|
+
throw new Error("The downloaded frpc does not match its pinned checksum; it was discarded.");
|
|
87
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
88
|
+
const work = await mkdtemp(join(tmpdir(), "frely-frpc-"));
|
|
89
|
+
try {
|
|
90
|
+
const archive = join(work, asset.file);
|
|
91
|
+
await writeFile(archive, bytes, { mode: 0o600 });
|
|
92
|
+
const unpacked = join(work, "out");
|
|
93
|
+
await mkdir(unpacked);
|
|
94
|
+
await (deps.extract ?? extractWithTar)(archive, unpacked);
|
|
95
|
+
const binary = await findFile(unpacked, asset.binary);
|
|
96
|
+
if (!binary)
|
|
97
|
+
throw new Error("The frpc archive has no frpc binary.");
|
|
98
|
+
const staged = `${target}.${process.pid}.tmp`;
|
|
99
|
+
await copyFile(binary, staged);
|
|
100
|
+
await chmod(staged, 0o755);
|
|
101
|
+
await rename(staged, target);
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
await rm(work, { recursive: true, force: true }).catch(() => undefined);
|
|
105
|
+
}
|
|
106
|
+
return target;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=frpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frpc.js","sourceRoot":"","sources":["../../src/share/frpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type IncomingHttpHeaders, type IncomingMessage, type Server } from "node:http";
|
|
2
|
+
/**
|
|
3
|
+
* The local gate of a share: frpc points only at this loopback server, never at the user's service. It serves a request only when the Host
|
|
4
|
+
* is the share's own name, refuses `CONNECT` and absolute-form targets (so the share cannot be used as a proxy), drops Frely's and frp's
|
|
5
|
+
* internal headers, and forwards to the one registered loopback port without following redirects. WebSocket upgrades are passed through
|
|
6
|
+
* as bytes. The link token is checked at the edge (the share Caddy), this is the second layer.
|
|
7
|
+
*/
|
|
8
|
+
export interface GatewayOptions {
|
|
9
|
+
/** The share's public host name, e.g. `s0123456789abcd.share.example`. */
|
|
10
|
+
readonly host: string;
|
|
11
|
+
/** The user's service on 127.0.0.1. */
|
|
12
|
+
readonly targetPort: number;
|
|
13
|
+
/** Send `Host: localhost:<port>` upstream; dev servers such as Vite refuse unknown host names. */
|
|
14
|
+
readonly rewriteHost?: boolean;
|
|
15
|
+
readonly maxConnections?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function hostOnly(value: string | undefined): string;
|
|
18
|
+
/** The headers forwarded upstream: no hop-by-hop or internal headers, and the forwarding facts set here. */
|
|
19
|
+
export declare function upstreamHeaders(headers: IncomingHttpHeaders, options: GatewayOptions, keepUpgrade?: boolean): Record<string, string | string[]>;
|
|
20
|
+
/** A request for another host, an absolute-form target or a path that is not a path is not served. */
|
|
21
|
+
export declare function admissible(request: Pick<IncomingMessage, "headers" | "url" | "method">, host: string): string | null;
|
|
22
|
+
export declare function startGateway(options: GatewayOptions): Promise<{
|
|
23
|
+
server: Server;
|
|
24
|
+
port: number;
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
}>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createServer, request as httpRequest } from "node:http";
|
|
2
|
+
import { connect as netConnect } from "node:net";
|
|
3
|
+
const HOP_BY_HOP = new Set(["connection", "keep-alive", "proxy-authenticate", "proxy-authorization", "proxy-connection", "te", "trailer", "transfer-encoding", "upgrade"]);
|
|
4
|
+
const INTERNAL = /^(x-frely-|x-frp-|x-forwarded-(host|proto|port|server))/u;
|
|
5
|
+
export function hostOnly(value) {
|
|
6
|
+
return (value ?? "").toLowerCase().replace(/:\d+$/u, "");
|
|
7
|
+
}
|
|
8
|
+
/** The headers forwarded upstream: no hop-by-hop or internal headers, and the forwarding facts set here. */
|
|
9
|
+
export function upstreamHeaders(headers, options, keepUpgrade = false) {
|
|
10
|
+
const out = {};
|
|
11
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
12
|
+
if (value === undefined || INTERNAL.test(name))
|
|
13
|
+
continue;
|
|
14
|
+
if (HOP_BY_HOP.has(name) && !(keepUpgrade && (name === "upgrade" || name === "connection")))
|
|
15
|
+
continue;
|
|
16
|
+
out[name] = value;
|
|
17
|
+
}
|
|
18
|
+
out["x-forwarded-host"] = options.host;
|
|
19
|
+
out["x-forwarded-proto"] = "https";
|
|
20
|
+
if (options.rewriteHost)
|
|
21
|
+
out.host = `localhost:${options.targetPort}`;
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
function refuse(response, status, message) {
|
|
25
|
+
if (response.headersSent) {
|
|
26
|
+
response.destroy();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
response.writeHead(status, { "content-type": "text/plain; charset=utf-8", "cache-control": "no-store" });
|
|
30
|
+
response.end(`${message}\n`);
|
|
31
|
+
}
|
|
32
|
+
/** A request for another host, an absolute-form target or a path that is not a path is not served. */
|
|
33
|
+
export function admissible(request, host) {
|
|
34
|
+
if (hostOnly(request.headers.host) !== host)
|
|
35
|
+
return "wrong host";
|
|
36
|
+
if (!request.url || !request.url.startsWith("/") || request.url.startsWith("//"))
|
|
37
|
+
return "bad target";
|
|
38
|
+
if (request.method === "CONNECT")
|
|
39
|
+
return "method not allowed";
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
export function startGateway(options) {
|
|
43
|
+
const host = options.host.toLowerCase();
|
|
44
|
+
const server = createServer((request, response) => {
|
|
45
|
+
const problem = admissible(request, host);
|
|
46
|
+
if (problem)
|
|
47
|
+
return refuse(response, problem === "method not allowed" ? 405 : 404, "Not found");
|
|
48
|
+
const upstream = httpRequest({ host: "127.0.0.1", port: options.targetPort, method: request.method, path: request.url, headers: upstreamHeaders(request.headers, options) }, (reply) => {
|
|
49
|
+
const headers = {};
|
|
50
|
+
for (const [name, value] of Object.entries(reply.headers))
|
|
51
|
+
if (value !== undefined && !HOP_BY_HOP.has(name))
|
|
52
|
+
headers[name] = value;
|
|
53
|
+
response.writeHead(reply.statusCode ?? 502, reply.statusMessage, headers);
|
|
54
|
+
reply.pipe(response);
|
|
55
|
+
});
|
|
56
|
+
upstream.once("error", () => refuse(response, 502, "The shared service is not reachable on this computer."));
|
|
57
|
+
response.once("close", () => upstream.destroy());
|
|
58
|
+
request.pipe(upstream);
|
|
59
|
+
});
|
|
60
|
+
server.on("connect", (_request, socket) => { socket.end("HTTP/1.1 405 Method Not Allowed\r\nconnection: close\r\n\r\n"); });
|
|
61
|
+
server.on("upgrade", (request, socket, head) => {
|
|
62
|
+
if (admissible(request, host)) {
|
|
63
|
+
socket.end("HTTP/1.1 404 Not Found\r\nconnection: close\r\n\r\n");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const upstream = netConnect({ host: "127.0.0.1", port: options.targetPort });
|
|
67
|
+
const close = () => { socket.destroy(); upstream.destroy(); };
|
|
68
|
+
upstream.once("error", () => { if (!socket.destroyed)
|
|
69
|
+
socket.end("HTTP/1.1 502 Bad Gateway\r\nconnection: close\r\n\r\n"); upstream.destroy(); });
|
|
70
|
+
socket.once("error", close);
|
|
71
|
+
upstream.once("connect", () => {
|
|
72
|
+
const headers = upstreamHeaders(request.headers, options, true);
|
|
73
|
+
const lines = [`${request.method} ${request.url} HTTP/1.1`];
|
|
74
|
+
for (const [name, value] of Object.entries(headers))
|
|
75
|
+
for (const item of Array.isArray(value) ? value : [value])
|
|
76
|
+
if (!/[\r\n]/u.test(item))
|
|
77
|
+
lines.push(`${name}: ${item}`);
|
|
78
|
+
upstream.write(`${lines.join("\r\n")}\r\n\r\n`);
|
|
79
|
+
if (head.length > 0)
|
|
80
|
+
upstream.write(head);
|
|
81
|
+
upstream.pipe(socket);
|
|
82
|
+
socket.pipe(upstream);
|
|
83
|
+
});
|
|
84
|
+
upstream.once("close", close);
|
|
85
|
+
socket.once("close", close);
|
|
86
|
+
});
|
|
87
|
+
server.maxConnections = options.maxConnections ?? 256;
|
|
88
|
+
server.requestTimeout = 0;
|
|
89
|
+
server.headersTimeout = 30_000;
|
|
90
|
+
return new Promise((resolve, reject) => {
|
|
91
|
+
server.once("error", reject);
|
|
92
|
+
server.listen(0, "127.0.0.1", () => {
|
|
93
|
+
const address = server.address();
|
|
94
|
+
if (!address || typeof address === "string")
|
|
95
|
+
return reject(new Error("The share gateway has no port."));
|
|
96
|
+
resolve({ server, port: address.port, close: () => new Promise((done) => { server.close(() => done()); server.closeAllConnections(); }) });
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/share/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { startGateway } from "./gateway.js";
|
|
2
|
+
import { type ShareControl } from "./control.js";
|
|
3
|
+
export interface ShareOptions {
|
|
4
|
+
readonly port: number;
|
|
5
|
+
/** Lifetime of the link in hours; the relay caps it at 24. */
|
|
6
|
+
readonly ttlHours?: number;
|
|
7
|
+
readonly rewriteHost?: boolean;
|
|
8
|
+
/** Skip the confirmation question. */
|
|
9
|
+
readonly yes?: boolean;
|
|
10
|
+
readonly json?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface FrpcProcess {
|
|
13
|
+
readonly done: Promise<{
|
|
14
|
+
code: number | null;
|
|
15
|
+
stderr: string;
|
|
16
|
+
}>;
|
|
17
|
+
kill(): void;
|
|
18
|
+
}
|
|
19
|
+
export interface ShareDeps {
|
|
20
|
+
readonly control: () => Promise<ShareControl>;
|
|
21
|
+
readonly ensureFrpc: () => Promise<string>;
|
|
22
|
+
readonly startGateway: typeof startGateway;
|
|
23
|
+
readonly spawnFrpc: (binary: string, configPath: string) => FrpcProcess;
|
|
24
|
+
readonly probe: (port: number) => Promise<boolean>;
|
|
25
|
+
/** Asks the human; null when there is no terminal to ask on. */
|
|
26
|
+
readonly confirm: ((question: string) => Promise<boolean>) | null;
|
|
27
|
+
readonly write: (text: string) => void;
|
|
28
|
+
readonly signal: AbortSignal;
|
|
29
|
+
readonly heartbeatMs?: number;
|
|
30
|
+
/** How long the config file (it holds the session token) stays on disk after frpc started. */
|
|
31
|
+
readonly configLifetimeMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export declare function parseShareArguments(args: readonly string[]): ShareOptions;
|
|
34
|
+
export declare function shareUsage(): string;
|
|
35
|
+
/** Shares http://127.0.0.1:<port> through Frely's relay until Ctrl+C, the link expires, the allowance is used up or Frely revokes it. Returns the exit code. */
|
|
36
|
+
export declare function runShare(options: ShareOptions, deps: ShareDeps): Promise<number>;
|
|
37
|
+
export declare function probeLoopback(port: number): Promise<boolean>;
|
|
38
|
+
export declare function spawnFrpcProcess(binary: string, configPath: string): FrpcProcess;
|
|
39
|
+
export declare function runShareCommand(args: readonly string[], io: {
|
|
40
|
+
write: (text: string) => void;
|
|
41
|
+
interactive: boolean;
|
|
42
|
+
prompt?: (question: string) => Promise<string>;
|
|
43
|
+
}): Promise<number>;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { connect } from "node:net";
|
|
3
|
+
import { chmod, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { frpcConfigToml } from "./frpc-config.js";
|
|
7
|
+
import { ensureFrpc } from "./frpc.js";
|
|
8
|
+
import { startGateway } from "./gateway.js";
|
|
9
|
+
import { accountShareControl } from "./control.js";
|
|
10
|
+
const HEARTBEAT_MS = 30_000;
|
|
11
|
+
const HEARTBEAT_FAILURES = 3;
|
|
12
|
+
const MIB = 1024 * 1024;
|
|
13
|
+
export function parseShareArguments(args) {
|
|
14
|
+
let port, ttlHours;
|
|
15
|
+
let rewriteHost = false, yes = false, json = false;
|
|
16
|
+
for (let i = 0; i < args.length; i++) {
|
|
17
|
+
const arg = args[i];
|
|
18
|
+
if (arg === "--ttl" || arg.startsWith("--ttl=")) {
|
|
19
|
+
const value = arg === "--ttl" ? args[++i] : arg.slice("--ttl=".length);
|
|
20
|
+
ttlHours = Number(value);
|
|
21
|
+
if (!value || !Number.isFinite(ttlHours) || ttlHours <= 0 || ttlHours > 24)
|
|
22
|
+
throw new Error("--ttl must be a number of hours from 0.02 to 24.");
|
|
23
|
+
}
|
|
24
|
+
else if (arg === "--rewrite-host")
|
|
25
|
+
rewriteHost = true;
|
|
26
|
+
else if (arg === "--yes" || arg === "-y")
|
|
27
|
+
yes = true;
|
|
28
|
+
else if (arg === "--json")
|
|
29
|
+
json = true;
|
|
30
|
+
else if (arg.startsWith("-"))
|
|
31
|
+
throw new Error(`Unknown option ${arg}.\n${shareUsage()}`);
|
|
32
|
+
else if (port === undefined) {
|
|
33
|
+
port = Number(arg);
|
|
34
|
+
if (!/^\d+$/u.test(arg) || port < 1 || port > 65535)
|
|
35
|
+
throw new Error(`Usage: ${shareUsage()}`);
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
throw new Error(`Usage: ${shareUsage()}`);
|
|
39
|
+
}
|
|
40
|
+
if (port === undefined)
|
|
41
|
+
throw new Error(`Usage: ${shareUsage()}`);
|
|
42
|
+
return { port, ...(ttlHours !== undefined ? { ttlHours } : {}), rewriteHost, yes, json };
|
|
43
|
+
}
|
|
44
|
+
export function shareUsage() {
|
|
45
|
+
return "frely share <port> [--ttl <hours>] [--rewrite-host] [--yes] [--json]";
|
|
46
|
+
}
|
|
47
|
+
/** Shares http://127.0.0.1:<port> through Frely's relay until Ctrl+C, the link expires, the allowance is used up or Frely revokes it. Returns the exit code. */
|
|
48
|
+
export async function runShare(options, deps) {
|
|
49
|
+
const say = (text) => { if (!options.json)
|
|
50
|
+
deps.write(text); };
|
|
51
|
+
if (!(await deps.probe(options.port)))
|
|
52
|
+
throw new Error(`Nothing is listening on 127.0.0.1:${options.port}. Start your service first.`);
|
|
53
|
+
if (!options.yes) {
|
|
54
|
+
if (!deps.confirm)
|
|
55
|
+
throw new Error("frely share makes a local service public, so it asks you first. Run it in a terminal, or pass --yes if you intend this.");
|
|
56
|
+
if (!(await deps.confirm(`Make http://127.0.0.1:${options.port} reachable from the Internet by link through Frely? [y/N] `))) {
|
|
57
|
+
say("Cancelled.\n");
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const binary = await deps.ensureFrpc();
|
|
62
|
+
const control = await deps.control();
|
|
63
|
+
const grant = await control.create({ ...(options.ttlHours !== undefined ? { ttlSeconds: Math.round(options.ttlHours * 3600) } : {}) });
|
|
64
|
+
let gateway, frpc, directory;
|
|
65
|
+
let heartbeat, expiry, configTimer;
|
|
66
|
+
try {
|
|
67
|
+
gateway = await deps.startGateway({ host: new URL(grant.url).hostname, targetPort: options.port, ...(options.rewriteHost ? { rewriteHost: true } : {}) });
|
|
68
|
+
directory = await mkdtemp(join(tmpdir(), "frely-share-"));
|
|
69
|
+
await chmod(directory, 0o700).catch(() => undefined);
|
|
70
|
+
const configPath = join(directory, "frpc.toml");
|
|
71
|
+
await writeFile(configPath, frpcConfigToml(grant, gateway.port), { mode: 0o600 });
|
|
72
|
+
frpc = deps.spawnFrpc(binary, configPath);
|
|
73
|
+
configTimer = setTimeout(() => { void rm(configPath, { force: true }).catch(() => undefined); }, deps.configLifetimeMs ?? 3000);
|
|
74
|
+
announce(grant, options, deps.write);
|
|
75
|
+
const stopped = new Promise((resolve) => {
|
|
76
|
+
let failures = 0;
|
|
77
|
+
const stop = (reason) => resolve(reason);
|
|
78
|
+
deps.signal.addEventListener("abort", () => stop("Stopped."), { once: true });
|
|
79
|
+
void frpc.done.then(({ code, stderr }) => stop(`frpc exited${code === null ? "" : ` with code ${code}`}${stderr.trim() ? `: ${stderr.trim().split("\n").slice(-3).join(" | ")}` : "."}`));
|
|
80
|
+
expiry = setTimeout(() => stop("The link expired."), Math.max(0, Date.parse(grant.expiresAt) - Date.now()));
|
|
81
|
+
heartbeat = setInterval(() => {
|
|
82
|
+
void control.heartbeat(grant.id).then((status) => {
|
|
83
|
+
failures = 0;
|
|
84
|
+
if (!status.active)
|
|
85
|
+
stop(describe(status.reason));
|
|
86
|
+
}, () => { failures += 1; if (failures >= HEARTBEAT_FAILURES)
|
|
87
|
+
stop("Frely could not be reached."); });
|
|
88
|
+
}, deps.heartbeatMs ?? HEARTBEAT_MS);
|
|
89
|
+
});
|
|
90
|
+
const reason = await stopped;
|
|
91
|
+
say(`\n${reason}\n`);
|
|
92
|
+
return reason === "Stopped." ? 0 : 1;
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
if (heartbeat)
|
|
96
|
+
clearInterval(heartbeat);
|
|
97
|
+
if (expiry)
|
|
98
|
+
clearTimeout(expiry);
|
|
99
|
+
if (configTimer)
|
|
100
|
+
clearTimeout(configTimer);
|
|
101
|
+
frpc?.kill();
|
|
102
|
+
await gateway?.close().catch(() => undefined);
|
|
103
|
+
if (directory)
|
|
104
|
+
await rm(directory, { recursive: true, force: true }).catch(() => undefined);
|
|
105
|
+
await control.revoke(grant.id).catch(() => undefined);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function describe(reason) {
|
|
109
|
+
if (reason === "quota_exhausted")
|
|
110
|
+
return "This week's relay allowance is used up; it renews on Monday (UTC).";
|
|
111
|
+
if (reason === "expired")
|
|
112
|
+
return "The link expired.";
|
|
113
|
+
return `Frely ended this share (${reason ?? "revoked"}).`;
|
|
114
|
+
}
|
|
115
|
+
function announce(grant, options, write) {
|
|
116
|
+
if (options.json) {
|
|
117
|
+
write(`${JSON.stringify({ id: grant.id, url: grant.url, expiresAt: grant.expiresAt, bandwidthBytesPerSecond: grant.bandwidthBytesPerSecond, remainingBytes: grant.remainingBytes })}\n`);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
write(`Sharing http://127.0.0.1:${options.port}\n ${grant.url}\n`);
|
|
121
|
+
write(`Up to ${(grant.bandwidthBytesPerSecond / MIB).toFixed(1)} MiB/s; ${Math.floor(grant.remainingBytes / MIB)} MiB of relay left this week (UTC). Expires ${grant.expiresAt}.\n`);
|
|
122
|
+
write("Anyone with the link can open it. Press Ctrl+C to stop.\n");
|
|
123
|
+
}
|
|
124
|
+
export function probeLoopback(port) {
|
|
125
|
+
return new Promise((resolve) => {
|
|
126
|
+
const socket = connect({ host: "127.0.0.1", port });
|
|
127
|
+
const done = (ok) => { socket.destroy(); resolve(ok); };
|
|
128
|
+
socket.setTimeout(2000, () => done(false));
|
|
129
|
+
socket.once("connect", () => done(true));
|
|
130
|
+
socket.once("error", () => done(false));
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
export function spawnFrpcProcess(binary, configPath) {
|
|
134
|
+
const child = spawn(binary, ["-c", configPath], { stdio: ["ignore", "ignore", "pipe"], windowsHide: true });
|
|
135
|
+
let stderr = "";
|
|
136
|
+
child.stderr.on("data", (chunk) => { stderr = (stderr + chunk.toString("utf8")).slice(-4000); });
|
|
137
|
+
const done = new Promise((resolve) => {
|
|
138
|
+
child.once("error", (error) => resolve({ code: null, stderr: error.message }));
|
|
139
|
+
child.once("exit", (code) => resolve({ code, stderr }));
|
|
140
|
+
});
|
|
141
|
+
return { done, kill: () => { child.kill(); } };
|
|
142
|
+
}
|
|
143
|
+
export async function runShareCommand(args, io) {
|
|
144
|
+
const options = parseShareArguments(args);
|
|
145
|
+
const controller = new AbortController();
|
|
146
|
+
const onSignal = () => controller.abort();
|
|
147
|
+
process.once("SIGINT", onSignal);
|
|
148
|
+
process.once("SIGTERM", onSignal);
|
|
149
|
+
try {
|
|
150
|
+
return await runShare(options, {
|
|
151
|
+
control: accountShareControl,
|
|
152
|
+
ensureFrpc: () => ensureFrpc({ log: io.write }),
|
|
153
|
+
startGateway, spawnFrpc: spawnFrpcProcess, probe: probeLoopback,
|
|
154
|
+
confirm: io.interactive && io.prompt ? async (question) => /^y(es)?$/iu.test((await io.prompt(question)).trim()) : null,
|
|
155
|
+
write: io.write, signal: controller.signal,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
process.off("SIGINT", onSignal);
|
|
160
|
+
process.off("SIGTERM", onSignal);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/share/run.ts"],"names":[],"mappings":"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"}
|
package/dist/skill/sealed-run.js
CHANGED
|
@@ -85,8 +85,9 @@ async function currentLease(input) {
|
|
|
85
85
|
if (stored && remaining > RENEW_BELOW_MS)
|
|
86
86
|
return stored;
|
|
87
87
|
const skillId = stored?.skillId ?? input.marker.itemId;
|
|
88
|
+
const version = stored?.version ?? input.marker.itemVersion;
|
|
88
89
|
try {
|
|
89
|
-
const renewed = await withTimeout(renew(input.call, skillId, input.device), stored && remaining > 0 ? RENEW_WAIT_MS : 180000);
|
|
90
|
+
const renewed = await withTimeout(renew(input.call, skillId, version, input.device), stored && remaining > 0 ? RENEW_WAIT_MS : 180000);
|
|
90
91
|
await writeLease(input.root, renewed);
|
|
91
92
|
return renewed;
|
|
92
93
|
}
|
|
@@ -100,8 +101,9 @@ async function currentLease(input) {
|
|
|
100
101
|
throw new CloudItemError("input_invalid", "The access lease for this item's sealed scripts has ended and could not be renewed. Connect to the internet and try again.");
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
/** Asks for a lease on the installed version, so a newer published version never hands out a lease the installed scripts cannot open. */
|
|
105
|
+
async function renew(call, skillId, version, device) {
|
|
106
|
+
const value = await call("skills.install", { skillId, ...(version === undefined ? {} : { version }), part: "premium", sealTo: device.publicKey, leaseOnly: true });
|
|
105
107
|
const manifest = value.manifest;
|
|
106
108
|
const lease = parseLease(manifest?.lease);
|
|
107
109
|
if (!lease || !Number.isSafeInteger(manifest?.version))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sealed-run.js","sourceRoot":"","sources":["../../src/skill/sealed-run.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sealed-run.js","sourceRoot":"","sources":["../../src/skill/sealed-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,10 @@ export declare class MaintenanceGate {
|
|
|
10
10
|
resume(): void;
|
|
11
11
|
get idle(): boolean;
|
|
12
12
|
}
|
|
13
|
+
/** The service could not be drained now (calls or child processes are running). Nothing was changed. */
|
|
14
|
+
export declare class MaintenanceBusyError extends Error {
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
13
17
|
export declare function maintenancePath(pid: number): string;
|
|
14
18
|
export declare function serveMaintenance(gate: MaintenanceGate, path?: string): Promise<() => Promise<void>>;
|
|
15
19
|
export declare function acquireMaintenance(pid: number, path?: string): Promise<() => void>;
|
|
@@ -32,6 +32,10 @@ export class MaintenanceGate {
|
|
|
32
32
|
resume() { this.paused = false; }
|
|
33
33
|
get idle() { return this.requests === 0 && [...this.processes].every((count) => count() === 0); }
|
|
34
34
|
}
|
|
35
|
+
/** The service could not be drained now (calls or child processes are running). Nothing was changed. */
|
|
36
|
+
export class MaintenanceBusyError extends Error {
|
|
37
|
+
constructor() { super("The service is busy or cannot enter maintenance. Finish its tasks, then run frely update in a local terminal."); }
|
|
38
|
+
}
|
|
35
39
|
export function maintenancePath(pid) {
|
|
36
40
|
return join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "frely", `upgrade-${pid}.sock`);
|
|
37
41
|
}
|
|
@@ -109,7 +113,7 @@ export async function acquireMaintenance(pid, path = maintenancePath(pid)) {
|
|
|
109
113
|
}
|
|
110
114
|
return new Promise((resolve, reject) => {
|
|
111
115
|
const socket = createConnection(path);
|
|
112
|
-
const fail = () => { socket.destroy(); reject(new
|
|
116
|
+
const fail = () => { socket.destroy(); reject(new MaintenanceBusyError()); };
|
|
113
117
|
socket.setTimeout(5000, fail);
|
|
114
118
|
socket.once("error", fail);
|
|
115
119
|
socket.once("connect", () => socket.write("drain\n"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/update/maintenance.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/update/maintenance.ts"],"names":[],"mappings":"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"}
|
package/dist/update/update.d.ts
CHANGED
|
@@ -29,7 +29,10 @@ declare function systemUnpack(tarball: string, directory: string): Promise<void>
|
|
|
29
29
|
export declare function prepareStandalone(installation: Installation, release: Release, fetchFile?: typeof download, execute?: typeof installedVersion, unpack?: typeof systemUnpack): Promise<PreparedUpdate>;
|
|
30
30
|
export declare function installPackage(installation: Installation, version: string): Promise<void>;
|
|
31
31
|
export declare function lockInstallation(installation: Installation): Promise<() => Promise<void>>;
|
|
32
|
+
/** True when this service process reports that it watches its installation and restarts itself when idle after an update. */
|
|
33
|
+
declare function serviceWatchesInstallation(pid: number): Promise<boolean>;
|
|
32
34
|
declare const defaults: {
|
|
35
|
+
serviceWatchesInstallation: typeof serviceWatchesInstallation;
|
|
33
36
|
inspectInstallation: typeof inspectInstallation;
|
|
34
37
|
latestRelease: typeof latestRelease;
|
|
35
38
|
installedVersion: typeof installedVersion;
|