frely-cli 0.3.8 → 0.4.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 CHANGED
@@ -248,3 +248,37 @@ A Frely Relay deployment must implement the device provisioning endpoints, Devic
248
248
  `frely-cli` is licensed under the Apache License 2.0; see [`LICENSE`](LICENSE).
249
249
  The Frely name, logos, and product names are not licensed as trademarks; see
250
250
  [`TRADEMARKS.md`](TRADEMARKS.md).
251
+
252
+ ## Frely Network onboarding
253
+
254
+ The Network commands are part of the unreleased 0.4.0 source version. Node.js 22 or newer is required. Package publication and server activation are separate release steps.
255
+
256
+ ```sh
257
+ frely network setup --host chatgpt --json
258
+ frely network status --json
259
+ frely network find --capability web3.address-risk --json
260
+ frely network use --capability web3.address-risk \
261
+ --input-json '{"address":"<EVM_ADDRESS>","chainId":"1"}' \
262
+ --request-id '<REQUEST_UUID>' --json
263
+ frely network logout --json
264
+ ```
265
+
266
+ The examples contain placeholders. Host values are `chatgpt`, `claude-code`, `opencode` and `generic`. Setup returns a browser link and request code without waiting for a signature or requiring a TTY. The next status or capability call retrieves the authorization. ChatGPT requires an existing device-execution bridge and uses the instructions in its current conversation; setup does not add a ChatGPT connector or native Skill.
267
+
268
+ `--network <HTTPS-origin>` selects a deployment. Credentials are scoped to that origin in the OS credential store under `frely-network`; they do not share Frely account or device-relay credentials. Tokens and private device codes are excluded from command output. `logout` affects the Network session, not the existing FrelyMCP service. An unconfirmed remote revocation is reported as an error.
269
+
270
+ Skill installation manages its own files and hash metadata. An unmanaged file, user edit or symlink causes a failure rather than a configuration overwrite. Installation paths are `.claude/skills/frely-network`, `.config/opencode/skills/frely-network` or `.agents/skills/frely-network` under the user home.
271
+
272
+ The first address-risk profile requires target chain `1`; the wallet login chain does not choose the target. Service output contains source-backed risk signals and `scamProbability: null`, not a fabricated percentage. Calls use platform demo quota without granting wallet transfer permissions. Preserve the request UUID for retries; the CLI does not resend an ambiguous service call.
273
+
274
+ Source verification:
275
+
276
+ ```sh
277
+ npm ci
278
+ npm run check
279
+ npm test
280
+ npm run build
281
+ node dist/index.js network help --json
282
+ ```
283
+
284
+ CLI unit tests use a fake credential store and temporary home directories. They do not verify the user's OS credential-store permissions or a deployed Network.
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import { discoverLocalModels } from "./provider/local.js";
12
12
  import { finalizeLocalProvider, listPersonalProviderSlots, prepareLocalProvider, waitForLocalProviderRelay } from "./provider/control.js";
13
13
  import { getLocalProvider, isSupportedLocalModelName, listLocalProviders, normalizeLoopbackOpenAiBaseUrl, saveLocalProvider } from "./provider/state.js";
14
14
  import { VERSION } from "./version.js";
15
+ import { runNetwork, publicNetworkError } from "./network.js";
15
16
  async function main() {
16
17
  const args = process.argv.slice(2);
17
18
  const command = args[0];
@@ -21,6 +22,14 @@ async function main() {
21
22
  }
22
23
  if (!command || command === "help" || command === "--help" || command === "-h")
23
24
  return usage();
25
+ if (command === "network") {
26
+ const value = await runNetwork(args);
27
+ if (args.includes("--json"))
28
+ stdout.write(`${JSON.stringify(value)}\n`);
29
+ else
30
+ stdout.write(`${JSON.stringify(value, null, 2)}\n`);
31
+ return;
32
+ }
24
33
  if (command === "login") {
25
34
  if (!stdin.isTTY || !stdout.isTTY)
26
35
  throw new Error("`frely login` requires an interactive TTY.");
@@ -262,6 +271,7 @@ function option(args, name) {
262
271
  }
263
272
  function usage() {
264
273
  stdout.write("Usage:\n" +
274
+ " frely network setup|status|find|use|logout [--json]\n" +
265
275
  " frely login [--relay <url>]\n" +
266
276
  " frely logout\n" +
267
277
  " frely whoami\n" +
@@ -280,7 +290,11 @@ function usage() {
280
290
  " frely mcp stdio [--workspace <path>]\n");
281
291
  }
282
292
  main().catch((error) => {
283
- process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
293
+ const message = error instanceof Error ? error.message : String(error);
294
+ if (process.argv.includes("--json") && process.argv[2] === "network")
295
+ process.stdout.write(`${JSON.stringify(publicNetworkError(error))}\n`);
296
+ else
297
+ process.stderr.write(`${message}\n`);
284
298
  process.exitCode = 1;
285
299
  });
286
300
  //# 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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { NetworkError } from "./network-errors.js";
2
+ export declare const NETWORK_SERVICE = "frely-network";
3
+ export declare const DEFAULT_NETWORK_ORIGIN = "https://network.frely.cloud";
4
+ export declare const NETWORK_HOSTS: readonly ["chatgpt", "claude-code", "opencode", "generic"];
5
+ export declare const CAPABILITIES: readonly ["web3.address-risk", "web3.url-risk"];
6
+ export type Capability = typeof CAPABILITIES[number];
7
+ export interface PendingGrant {
8
+ version: 1;
9
+ kind: "pending";
10
+ deviceCode: string;
11
+ userCode: string;
12
+ verificationUri: string;
13
+ expiresAt: string;
14
+ intervalSeconds: number;
15
+ }
16
+ export interface StoredNetworkSession {
17
+ version: 1;
18
+ kind: "session";
19
+ accessToken: string;
20
+ expiresAt: string;
21
+ sessionId: string;
22
+ }
23
+ export interface NetworkSessionView {
24
+ status: "ready";
25
+ sessionId: string;
26
+ walletAddress: string;
27
+ chainId: number;
28
+ expiresAt: string;
29
+ paymentMode: "platform_demo";
30
+ remainingCalls: number;
31
+ }
32
+ export type NetworkState = PendingGrant | StoredNetworkSession | null;
33
+ export declare const validExpiry: (value: unknown) => value is string;
34
+ export declare const ACCESS_TOKEN_PATTERN: RegExp;
35
+ export declare function parseNetworkArgs(args: string[]): {
36
+ command: string;
37
+ flags: Record<string, string>;
38
+ };
39
+ export declare function parseCapability(flags: Record<string, string>): Capability;
40
+ export declare function parseUseInput(flags: Record<string, string>, cap: Capability): Record<string, string>;
41
+ export declare function parsePendingGrant(value: Record<string, unknown>, origin: string): PendingGrant;
42
+ export declare function parseSessionView(value: Record<string, unknown>): NetworkSessionView;
43
+ export declare function networkServerError(value: Record<string, unknown>): NetworkError;
44
+ export declare function publicPendingGrant(value: PendingGrant): Record<string, unknown>;
@@ -0,0 +1,109 @@
1
+ import { NetworkError } from "./network-errors.js";
2
+ import { isRecord, UUID_PATTERN } from "./network-http.js";
3
+ export const NETWORK_SERVICE = "frely-network";
4
+ export const DEFAULT_NETWORK_ORIGIN = "https://network.frely.cloud";
5
+ export const NETWORK_HOSTS = ["chatgpt", "claude-code", "opencode", "generic"];
6
+ export const CAPABILITIES = ["web3.address-risk", "web3.url-risk"];
7
+ export const validExpiry = (value) => typeof value === "string" && /^\d{4}-\d\d-\d\dT/u.test(value) && Number.isFinite(Date.parse(value));
8
+ export const ACCESS_TOKEN_PATTERN = /^fn_[A-Za-z0-9_-]{43}$/u;
9
+ export function parseNetworkArgs(args) {
10
+ const command = args[1] ?? "help";
11
+ const allowed = {
12
+ setup: ["--host", "--network"], status: ["--network"], logout: ["--network"],
13
+ find: ["--network", "--capability"], use: ["--network", "--capability", "--input-json", "--task", "--request-id"], help: [],
14
+ };
15
+ if (!Object.hasOwn(allowed, command))
16
+ throw new NetworkError("NETWORK_COMMAND_UNKNOWN");
17
+ const flags = {};
18
+ for (let index = 2; index < args.length; index++) {
19
+ const flag = args[index];
20
+ if (Object.hasOwn(flags, flag))
21
+ throw new NetworkError("DUPLICATE_ARGUMENT");
22
+ if (flag === "--json") {
23
+ flags[flag] = "true";
24
+ continue;
25
+ }
26
+ if (!allowed[command].includes(flag))
27
+ throw new NetworkError("UNKNOWN_ARGUMENT");
28
+ const value = args[++index];
29
+ if (!value || value.startsWith("--"))
30
+ throw new NetworkError("ARGUMENT_VALUE_REQUIRED");
31
+ flags[flag] = value;
32
+ }
33
+ return { command, flags };
34
+ }
35
+ export function parseCapability(flags) {
36
+ const value = flags["--capability"];
37
+ if (!CAPABILITIES.includes(value))
38
+ throw new NetworkError("CAPABILITY_NOT_SUPPORTED");
39
+ return value;
40
+ }
41
+ export function parseUseInput(flags, cap) {
42
+ const text = flags["--input-json"];
43
+ if (!text || Buffer.byteLength(text) > 8192)
44
+ throw new NetworkError("INPUT_JSON_INVALID");
45
+ let value;
46
+ try {
47
+ value = JSON.parse(text);
48
+ }
49
+ catch {
50
+ throw new NetworkError("INPUT_JSON_INVALID");
51
+ }
52
+ if (!isRecord(value))
53
+ throw new NetworkError("INPUT_JSON_INVALID");
54
+ if (cap === "web3.address-risk") {
55
+ if (typeof value.address !== "string" || !/^0x[0-9a-fA-F]{40}$/u.test(value.address))
56
+ throw new NetworkError("INVALID_ADDRESS");
57
+ if (value.chainId === undefined)
58
+ throw new NetworkError("TARGET_CHAIN_REQUIRED");
59
+ if (String(value.chainId) !== "1")
60
+ throw new NetworkError("UNSUPPORTED_TARGET_CHAIN");
61
+ if (Object.keys(value).some((key) => !["address", "chainId"].includes(key)))
62
+ throw new NetworkError("INPUT_JSON_INVALID");
63
+ return { address: value.address.toLowerCase(), chainId: "1" };
64
+ }
65
+ if (typeof value.url !== "string" || value.url.length > 2048 || Object.keys(value).some((key) => key !== "url"))
66
+ throw new NetworkError("INVALID_URL");
67
+ let url;
68
+ try {
69
+ url = new URL(value.url);
70
+ }
71
+ catch {
72
+ throw new NetworkError("INVALID_URL");
73
+ }
74
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password || url.hash)
75
+ throw new NetworkError("INVALID_URL");
76
+ return { url: url.toString() };
77
+ }
78
+ export function parsePendingGrant(value, origin) {
79
+ if (typeof value.deviceCode !== "string" || !/^[A-Za-z0-9_-]{43}$/u.test(value.deviceCode) || typeof value.userCode !== "string" ||
80
+ !/^[A-F0-9]{4}(?:-[A-F0-9]{4}){5}$/u.test(value.userCode) || value.verificationUri !== `${origin}/connect/#code=${value.userCode}` ||
81
+ !validExpiry(value.expiresAt) || value.paymentMode !== "platform_demo" || !Number.isSafeInteger(value.intervalSeconds) ||
82
+ Number(value.intervalSeconds) < 1 || Number(value.intervalSeconds) > 300)
83
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
84
+ return { version: 1, kind: "pending", deviceCode: value.deviceCode, userCode: value.userCode,
85
+ verificationUri: String(value.verificationUri), expiresAt: value.expiresAt, intervalSeconds: Number(value.intervalSeconds) };
86
+ }
87
+ export function parseSessionView(value) {
88
+ if (value.status !== "ready" || typeof value.sessionId !== "string" || !UUID_PATTERN.test(value.sessionId) ||
89
+ typeof value.walletAddress !== "string" || !/^0x[0-9a-fA-F]{40}$/u.test(value.walletAddress) ||
90
+ !Number.isSafeInteger(value.chainId) || Number(value.chainId) < 1 || !validExpiry(value.expiresAt) ||
91
+ value.paymentMode !== "platform_demo" || !Number.isSafeInteger(value.remainingCalls) || Number(value.remainingCalls) < 0)
92
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
93
+ return { status: "ready", sessionId: value.sessionId, walletAddress: value.walletAddress, chainId: Number(value.chainId),
94
+ expiresAt: value.expiresAt, paymentMode: "platform_demo", remainingCalls: Number(value.remainingCalls) };
95
+ }
96
+ const PUBLIC_CODES = new Set([
97
+ "SESSION_REQUIRED", "SESSION_EXPIRED", "DEVICE_EXPIRED", "DEVICE_CONSUMED", "DEVICE_REJECTED", "RATE_LIMITED", "DEMO_LIMIT_EXCEEDED",
98
+ "REQUEST_IN_PROGRESS", "REQUEST_OUTCOME_UNKNOWN", "REQUEST_RESULT_EXPIRED", "IDEMPOTENCY_CONFLICT", "NETWORK_ONBOARDING_NOT_CONFIGURED",
99
+ "BROKER_NOT_READY", "NO_PROVIDER", "NO_VERIFIED_PROVIDER", "IDENTITY_VERIFICATION_FAILED", "PROVIDER_REQUEST_FAILED", "PROVIDER_RESPONSE_INVALID",
100
+ "PROVIDER_TARGET_MISMATCH", "CAPABILITY_NOT_SUPPORTED", "INVALID_REQUEST", "NETWORK_REQUEST_FAILED", "PROTOCOL_NOT_SUPPORTED",
101
+ ]);
102
+ export function networkServerError(value) {
103
+ return new NetworkError(typeof value.code === "string" && PUBLIC_CODES.has(value.code) ? value.code : "NETWORK_SERVICE_ERROR");
104
+ }
105
+ export function publicPendingGrant(value) {
106
+ return { status: "awaiting_wallet", verificationUri: value.verificationUri, userCode: value.userCode,
107
+ expiresAt: value.expiresAt, intervalSeconds: value.intervalSeconds, paymentMode: "platform_demo" };
108
+ }
109
+ //# sourceMappingURL=network-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-contract.js","sourceRoot":"","sources":["../src/network-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class NetworkError extends Error {
2
+ readonly code: string;
3
+ readonly details: Readonly<Record<string, unknown>>;
4
+ constructor(code: string, details?: Readonly<Record<string, unknown>>);
5
+ }
6
+ /** Expose bounded, client-owned fields rather than upstream messages or stack traces. */
7
+ export declare function publicNetworkError(error: unknown): Record<string, unknown>;
@@ -0,0 +1,22 @@
1
+ export class NetworkError extends Error {
2
+ code;
3
+ details;
4
+ constructor(code, details = {}) {
5
+ super(code);
6
+ this.code = code;
7
+ this.details = details;
8
+ this.name = "NetworkError";
9
+ }
10
+ }
11
+ /** Expose bounded, client-owned fields rather than upstream messages or stack traces. */
12
+ export function publicNetworkError(error) {
13
+ if (!(error instanceof NetworkError))
14
+ return { status: "error", code: "NETWORK_CLIENT_FAILED" };
15
+ const result = { status: "error", code: error.code };
16
+ for (const name of ["requestId", "verificationUri", "userCode", "recovery", "remoteRevocation"]) {
17
+ if (error.details[name] !== undefined)
18
+ result[name] = error.details[name];
19
+ }
20
+ return result;
21
+ }
22
+ //# sourceMappingURL=network-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-errors.js","sourceRoot":"","sources":["../src/network-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAChB;IAAuB;IAA5C,YAAqB,IAAY,EAAW,UAA6C,EAAE;QACzF,KAAK,CAAC,IAAI,CAAC,CAAC;QADO,SAAI,GAAJ,IAAI,CAAQ;QAAW,YAAO,GAAP,OAAO,CAAwC;QAEzF,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;IAChG,MAAM,MAAM,GAA4B,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAC9E,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAChG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,22 @@
1
+ export type NetworkHost = "chatgpt" | "claude-code" | "opencode" | "generic";
2
+ export interface NetworkConfig {
3
+ version: 1;
4
+ origin: string;
5
+ host: NetworkHost;
6
+ }
7
+ export declare const hashText: (value: string) => string;
8
+ /** Reject ancestor symlinks, including dangling links. Never traverse a user-managed redirect. */
9
+ export declare function assertSafePath(path: string): Promise<void>;
10
+ export declare class NetworkFiles {
11
+ private readonly home;
12
+ readonly directory: string;
13
+ constructor(home: string);
14
+ readConfig(): Promise<NetworkConfig | null>;
15
+ writeConfig(value: NetworkConfig): Promise<void>;
16
+ /** Serialize local grant exchange so competing CLI calls cannot consume or delete each other's session. */
17
+ lock(): Promise<() => Promise<void>>;
18
+ installSkill(host: NetworkHost, skill: string): Promise<{
19
+ instructionMode: "conversation" | "skill";
20
+ installed: boolean;
21
+ }>;
22
+ }
@@ -0,0 +1,166 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { lstat, mkdir, open, rename, unlink } from "node:fs/promises";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { NetworkError } from "./network-errors.js";
6
+ export const hashText = (value) => createHash("sha256").update(value).digest("hex");
7
+ const record = (value) => !!value && typeof value === "object" && !Array.isArray(value);
8
+ const absent = (error) => error.code === "ENOENT";
9
+ /** Reject ancestor symlinks, including dangling links. Never traverse a user-managed redirect. */
10
+ export async function assertSafePath(path) {
11
+ let current = resolve(path);
12
+ while (true) {
13
+ const stat = await lstat(current).catch((error) => { if (absent(error))
14
+ return null; throw error; });
15
+ if (stat?.isSymbolicLink())
16
+ throw new NetworkError("UNSAFE_LOCAL_PATH");
17
+ const parent = dirname(current);
18
+ if (parent === current)
19
+ break;
20
+ current = parent;
21
+ }
22
+ }
23
+ async function readOwnedFile(path, maxBytes = 512 * 1024) {
24
+ await assertSafePath(path);
25
+ let file;
26
+ try {
27
+ file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
28
+ }
29
+ catch (error) {
30
+ if (absent(error))
31
+ return null;
32
+ throw new NetworkError("LOCAL_FILE_READ_FAILED");
33
+ }
34
+ try {
35
+ const stat = await file.stat();
36
+ if (!stat.isFile() || stat.size > maxBytes)
37
+ throw new NetworkError("LOCAL_FILE_INVALID");
38
+ return await file.readFile("utf8");
39
+ }
40
+ finally {
41
+ await file.close();
42
+ }
43
+ }
44
+ async function atomicWrite(path, value) {
45
+ await assertSafePath(path);
46
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
47
+ await assertSafePath(path);
48
+ const temporary = `${path}.${randomUUID()}.tmp`;
49
+ const file = await open(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
50
+ try {
51
+ await file.writeFile(value, "utf8");
52
+ await file.sync();
53
+ }
54
+ finally {
55
+ await file.close();
56
+ }
57
+ try {
58
+ await assertSafePath(path);
59
+ await rename(temporary, path);
60
+ }
61
+ finally {
62
+ await unlink(temporary).catch(() => undefined);
63
+ }
64
+ }
65
+ export class NetworkFiles {
66
+ home;
67
+ directory;
68
+ constructor(home) {
69
+ this.home = home;
70
+ this.directory = join(home, ".config", "frely", "network");
71
+ }
72
+ async readConfig() {
73
+ const text = await readOwnedFile(join(this.directory, "config.json"), 4096);
74
+ if (text === null)
75
+ return null;
76
+ let value;
77
+ try {
78
+ value = JSON.parse(text);
79
+ }
80
+ catch {
81
+ throw new NetworkError("LOCAL_CONFIG_INVALID");
82
+ }
83
+ if (!record(value) || value.version !== 1 || typeof value.origin !== "string" ||
84
+ !["chatgpt", "claude-code", "opencode", "generic"].includes(String(value.host)))
85
+ throw new NetworkError("LOCAL_CONFIG_INVALID");
86
+ return { version: 1, origin: value.origin, host: value.host };
87
+ }
88
+ async writeConfig(value) { await atomicWrite(join(this.directory, "config.json"), JSON.stringify(value)); }
89
+ /** Serialize local grant exchange so competing CLI calls cannot consume or delete each other's session. */
90
+ async lock() {
91
+ await assertSafePath(this.directory);
92
+ await mkdir(this.directory, { recursive: true, mode: 0o700 });
93
+ const path = join(this.directory, "command.lock");
94
+ await assertSafePath(path);
95
+ for (let attempt = 0; attempt < 2; attempt++) {
96
+ try {
97
+ const handle = await open(path, "wx", 0o600);
98
+ const value = JSON.stringify({ pid: process.pid, nonce: randomUUID() });
99
+ await handle.writeFile(value);
100
+ await handle.close();
101
+ return async () => {
102
+ // Do not remove a lock replaced by another process.
103
+ if (await readOwnedFile(path, 512) === value)
104
+ await unlink(path).catch(() => undefined);
105
+ };
106
+ }
107
+ catch (error) {
108
+ if (error.code !== "EEXIST")
109
+ throw new NetworkError("LOCAL_LOCK_FAILED");
110
+ const text = await readOwnedFile(path, 512);
111
+ let pid = 0;
112
+ try {
113
+ const item = JSON.parse(text ?? "null");
114
+ if (record(item) && Number.isSafeInteger(item.pid) && Number(item.pid) > 0)
115
+ pid = Number(item.pid);
116
+ }
117
+ catch { /* Unknown lock ownership must not be overwritten. */ }
118
+ if (!pid)
119
+ throw new NetworkError("NETWORK_CLIENT_BUSY");
120
+ let alive = true;
121
+ try {
122
+ process.kill(pid, 0);
123
+ }
124
+ catch (failure) {
125
+ alive = failure.code !== "ESRCH";
126
+ }
127
+ if (alive || attempt > 0)
128
+ throw new NetworkError("NETWORK_CLIENT_BUSY");
129
+ if (await readOwnedFile(path, 512) === text)
130
+ await unlink(path);
131
+ }
132
+ }
133
+ throw new NetworkError("NETWORK_CLIENT_BUSY");
134
+ }
135
+ async installSkill(host, skill) {
136
+ if (host === "chatgpt")
137
+ return { instructionMode: "conversation", installed: false };
138
+ const root = host === "claude-code" ? join(this.home, ".claude", "skills") :
139
+ host === "opencode" ? join(this.home, ".config", "opencode", "skills") : join(this.home, ".agents", "skills");
140
+ const path = join(root, "frely-network", "SKILL.md");
141
+ const metadata = join(root, "frely-network", ".frely-managed.json");
142
+ const text = await readOwnedFile(path);
143
+ const metadataText = await readOwnedFile(metadata, 4096);
144
+ let marker = null;
145
+ if (metadataText !== null) {
146
+ try {
147
+ const value = JSON.parse(metadataText);
148
+ if (record(value))
149
+ marker = value;
150
+ }
151
+ catch { /* Fail closed below. */ }
152
+ if (!marker || marker.version !== 1 || marker.owner !== "frely-network")
153
+ throw new NetworkError("UNMANAGED_SKILL_EXISTS");
154
+ }
155
+ if (text !== null && (!marker || (hashText(text) !== marker.sha256 && hashText(text) !== marker.pendingSha256))) {
156
+ throw new NetworkError("UNMANAGED_SKILL_EXISTS");
157
+ }
158
+ const hash = hashText(skill);
159
+ // A pending hash recovers an interrupted managed-file replacement, not an unowned file.
160
+ await atomicWrite(metadata, JSON.stringify({ version: 1, owner: "frely-network", sha256: text === null ? null : hashText(text), pendingSha256: hash }));
161
+ await atomicWrite(path, skill);
162
+ await atomicWrite(metadata, JSON.stringify({ version: 1, owner: "frely-network", sha256: hash }));
163
+ return { instructionMode: "skill", installed: true };
164
+ }
165
+ }
166
+ //# sourceMappingURL=network-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-files.js","sourceRoot":"","sources":["../src/network-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
2
+ export declare const UUID_PATTERN: RegExp;
3
+ export declare function normalizeNetworkOrigin(input: string, allowLoopback: boolean): string;
4
+ export interface NetworkHttpResponse {
5
+ status: number;
6
+ text: string;
7
+ headers: Headers;
8
+ }
9
+ export declare class NetworkHttp {
10
+ private readonly fetcher;
11
+ private readonly timeoutMs;
12
+ constructor(fetcher: typeof fetch, timeoutMs: number);
13
+ request(origin: string, path: string, options?: {
14
+ body?: unknown;
15
+ token?: string;
16
+ method?: string;
17
+ requestId?: string;
18
+ }): Promise<NetworkHttpResponse>;
19
+ parse(response: NetworkHttpResponse, secrets?: string[]): Record<string, unknown>;
20
+ }
@@ -0,0 +1,92 @@
1
+ import { NetworkError } from "./network-errors.js";
2
+ export const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3
+ export const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
4
+ export function normalizeNetworkOrigin(input, allowLoopback) {
5
+ let url;
6
+ try {
7
+ url = new URL(input);
8
+ }
9
+ catch {
10
+ throw new NetworkError("NETWORK_ORIGIN_INVALID");
11
+ }
12
+ if ((url.protocol !== "https:" && !(allowLoopback && url.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname))) ||
13
+ url.username || url.password || url.search || url.hash || url.pathname !== "/")
14
+ throw new NetworkError("NETWORK_ORIGIN_INVALID");
15
+ return url.origin;
16
+ }
17
+ export class NetworkHttp {
18
+ fetcher;
19
+ timeoutMs;
20
+ constructor(fetcher, timeoutMs) {
21
+ this.fetcher = fetcher;
22
+ this.timeoutMs = timeoutMs;
23
+ }
24
+ async request(origin, path, options = {}) {
25
+ const controller = new AbortController();
26
+ let timer;
27
+ const run = async () => {
28
+ const response = await this.fetcher(`${origin}${path}`, {
29
+ method: options.method ?? (options.body === undefined ? "GET" : "POST"), redirect: "error",
30
+ signal: controller.signal,
31
+ headers: { accept: path === "/SKILL.md" ? "text/markdown" : "application/json",
32
+ ...(options.body === undefined ? {} : { "content-type": "application/json" }),
33
+ ...(options.token ? { authorization: `Bearer ${options.token}` } : {}),
34
+ ...(options.requestId ? { "idempotency-key": options.requestId } : {}) },
35
+ ...(options.body === undefined ? {} : { body: JSON.stringify(options.body) }),
36
+ });
37
+ if (response.redirected || (response.status >= 300 && response.status < 400) ||
38
+ (response.url && new URL(response.url).origin !== origin))
39
+ throw new NetworkError("NETWORK_REDIRECT_REJECTED");
40
+ const reader = response.body?.getReader();
41
+ const chunks = [];
42
+ let total = 0;
43
+ if (reader) {
44
+ try {
45
+ while (true) {
46
+ const chunk = await reader.read();
47
+ if (chunk.done)
48
+ break;
49
+ total += chunk.value.byteLength;
50
+ if (total > 512 * 1024) {
51
+ await reader.cancel();
52
+ throw new NetworkError("NETWORK_RESPONSE_TOO_LARGE");
53
+ }
54
+ chunks.push(chunk.value);
55
+ }
56
+ }
57
+ finally {
58
+ reader.releaseLock();
59
+ }
60
+ }
61
+ return { status: response.status, text: new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks)), headers: response.headers };
62
+ };
63
+ const timeout = new Promise((_, reject) => {
64
+ timer = setTimeout(() => { controller.abort(); reject(new NetworkError("NETWORK_TIMEOUT")); }, this.timeoutMs);
65
+ });
66
+ try {
67
+ return await Promise.race([run(), timeout]);
68
+ }
69
+ catch (error) {
70
+ throw error instanceof NetworkError ? error : new NetworkError("NETWORK_REQUEST_FAILED");
71
+ }
72
+ finally {
73
+ clearTimeout(timer);
74
+ }
75
+ }
76
+ parse(response, secrets = []) {
77
+ // No authenticated service response may reflect a credential to the host.
78
+ if (secrets.some((secret) => secret.length >= 16 && response.text.includes(secret)))
79
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
80
+ let value;
81
+ try {
82
+ value = JSON.parse(response.text);
83
+ }
84
+ catch {
85
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
86
+ }
87
+ if (!isRecord(value))
88
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
89
+ return value;
90
+ }
91
+ }
92
+ //# sourceMappingURL=network-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-http.js","sourceRoot":"","sources":["../src/network-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnJ,MAAM,CAAC,MAAM,YAAY,GAAG,6EAA6E,CAAC;AAC1G,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,aAAsB;IAC1E,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QAAC,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAAC,CAAC;IACzF,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG;QAAE,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC;IACrI,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,MAAM,OAAO,WAAW;IACO;IAAwC;IAArE,YAA6B,OAAqB,EAAmB,SAAiB;QAAzD,YAAO,GAAP,OAAO,CAAc;QAAmB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAC1F,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAY,EAAE,UAAmF,EAAE;QAC/H,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,KAAoC,CAAC;QACzC,MAAM,GAAG,GAAG,KAAK,IAAkC,EAAE;YACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE;gBACtD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO;gBAC1F,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB;oBAC5E,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;oBAC7E,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBAC1E,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;aAC9E,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxE,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;gBAAE,MAAM,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC;YACnH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAiB,EAAE,CAAC;YAAC,IAAI,KAAK,GAAG,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;wBAClC,IAAI,KAAK,CAAC,IAAI;4BAAE,MAAM;wBACtB,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;wBAChC,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;4BAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;4BAAC,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,CAAC;wBAAC,CAAC;wBACxG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;wBAAS,CAAC;oBAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAAC,CAAC;YACrC,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC/I,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC/C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YAAC,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,CAAC;QACpD,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC;QAAC,CAAC;gBACnG,CAAC;YAAC,YAAY,CAAC,KAAM,CAAC,CAAC;QAAC,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,QAA6B,EAAE,UAAoB,EAAE;QACzD,0EAA0E;QAC1E,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACxI,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;QAAC,CAAC;QACxG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { CredentialStore } from "./credential-store.js";
2
+ import { NetworkHttp } from "./network-http.js";
3
+ import { type NetworkState, type PendingGrant, type StoredNetworkSession, type NetworkSessionView } from "./network-contract.js";
4
+ export type ResolvedNetworkSession = {
5
+ kind: "none";
6
+ reason?: string;
7
+ } | {
8
+ kind: "pending";
9
+ value: PendingGrant;
10
+ } | {
11
+ kind: "ready";
12
+ credential: StoredNetworkSession;
13
+ view: NetworkSessionView;
14
+ };
15
+ /** Keep Network credentials separate from the Frely account and device-relay sessions. */
16
+ export declare class NetworkSessions {
17
+ private readonly origin;
18
+ private readonly store;
19
+ private readonly http;
20
+ private readonly now;
21
+ constructor(origin: string, store: CredentialStore, http: NetworkHttp, now: () => number);
22
+ save(value: Exclude<NetworkState, null>): Promise<void>;
23
+ remove(): Promise<void>;
24
+ read(): Promise<NetworkState>;
25
+ resolve(state: NetworkState): Promise<ResolvedNetworkSession>;
26
+ logout(state: NetworkState): Promise<Record<string, unknown>>;
27
+ }
@@ -0,0 +1,119 @@
1
+ import { NetworkError } from "./network-errors.js";
2
+ import { isRecord, UUID_PATTERN } from "./network-http.js";
3
+ import { ACCESS_TOKEN_PATTERN, NETWORK_SERVICE, parsePendingGrant, parseSessionView, validExpiry, networkServerError } from "./network-contract.js";
4
+ /** Keep Network credentials separate from the Frely account and device-relay sessions. */
5
+ export class NetworkSessions {
6
+ origin;
7
+ store;
8
+ http;
9
+ now;
10
+ constructor(origin, store, http, now) {
11
+ this.origin = origin;
12
+ this.store = store;
13
+ this.http = http;
14
+ this.now = now;
15
+ }
16
+ async save(value) {
17
+ try {
18
+ await this.store.setPassword(NETWORK_SERVICE, this.origin, JSON.stringify(value));
19
+ }
20
+ catch {
21
+ throw new NetworkError("CREDENTIAL_STORE_FAILED");
22
+ }
23
+ }
24
+ async remove() {
25
+ try {
26
+ await this.store.deletePassword(NETWORK_SERVICE, this.origin);
27
+ }
28
+ catch {
29
+ throw new NetworkError("CREDENTIAL_STORE_FAILED");
30
+ }
31
+ }
32
+ async read() {
33
+ let text;
34
+ try {
35
+ text = await this.store.getPassword(NETWORK_SERVICE, this.origin);
36
+ }
37
+ catch {
38
+ throw new NetworkError("CREDENTIAL_STORE_FAILED");
39
+ }
40
+ if (!text)
41
+ return null;
42
+ let value;
43
+ try {
44
+ value = JSON.parse(text);
45
+ }
46
+ catch {
47
+ throw new NetworkError("CREDENTIAL_STATE_INVALID");
48
+ }
49
+ if (!isRecord(value) || value.version !== 1 || !validExpiry(value.expiresAt))
50
+ throw new NetworkError("CREDENTIAL_STATE_INVALID");
51
+ if (value.kind === "pending")
52
+ return parsePendingGrant({ ...value, paymentMode: "platform_demo" }, this.origin);
53
+ if (value.kind !== "session" || typeof value.accessToken !== "string" || !ACCESS_TOKEN_PATTERN.test(value.accessToken) ||
54
+ typeof value.sessionId !== "string" || !UUID_PATTERN.test(value.sessionId))
55
+ throw new NetworkError("CREDENTIAL_STATE_INVALID");
56
+ return { version: 1, kind: "session", accessToken: value.accessToken, expiresAt: value.expiresAt, sessionId: value.sessionId };
57
+ }
58
+ async resolve(state) {
59
+ if (!state)
60
+ return { kind: "none" };
61
+ if (Date.parse(state.expiresAt) <= this.now()) {
62
+ await this.remove();
63
+ return { kind: "none", reason: "AUTHORIZATION_EXPIRED" };
64
+ }
65
+ if (state.kind === "pending") {
66
+ const response = await this.http.request(this.origin, "/api/network/device/token", { body: { deviceCode: state.deviceCode } });
67
+ const value = this.http.parse(response, [state.deviceCode]);
68
+ if (response.status === 202) {
69
+ if (value.status !== "awaiting_wallet" || !Number.isSafeInteger(value.intervalSeconds) || Number(value.intervalSeconds) < 1)
70
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
71
+ return { kind: "pending", value: state };
72
+ }
73
+ if (response.status !== 200) {
74
+ const error = networkServerError(value);
75
+ if (["DEVICE_EXPIRED", "DEVICE_CONSUMED", "DEVICE_REJECTED"].includes(error.code)) {
76
+ await this.remove();
77
+ return { kind: "none", reason: error.code };
78
+ }
79
+ throw error;
80
+ }
81
+ const view = parseSessionView(value);
82
+ if (typeof value.accessToken !== "string" || !ACCESS_TOKEN_PATTERN.test(value.accessToken) || Date.parse(view.expiresAt) <= this.now())
83
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
84
+ state = { version: 1, kind: "session", accessToken: value.accessToken, expiresAt: view.expiresAt, sessionId: view.sessionId };
85
+ await this.save(state);
86
+ }
87
+ const response = await this.http.request(this.origin, "/api/network/session", { token: state.accessToken });
88
+ const value = this.http.parse(response, [state.accessToken]);
89
+ if (response.status === 401) {
90
+ await this.remove();
91
+ return { kind: "none", reason: networkServerError(value).code };
92
+ }
93
+ if (response.status !== 200)
94
+ throw networkServerError(value);
95
+ const view = parseSessionView(value);
96
+ if (view.sessionId !== state.sessionId || Date.parse(view.expiresAt) <= this.now())
97
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
98
+ return { kind: "ready", credential: state, view };
99
+ }
100
+ async logout(state) {
101
+ if (state?.kind === "session") {
102
+ let revoked = false;
103
+ try {
104
+ const response = await this.http.request(this.origin, "/api/network/session", { method: "DELETE", token: state.accessToken });
105
+ const value = this.http.parse(response, [state.accessToken]);
106
+ revoked = response.status === 200 && value.status === "revoked";
107
+ }
108
+ catch { /* Report an unconfirmed revocation as a failure. */ }
109
+ await this.remove();
110
+ if (!revoked)
111
+ throw new NetworkError("REVOCATION_UNCONFIRMED", { remoteRevocation: false,
112
+ recovery: "The local credential was removed. The remote session expires at its original expiry." });
113
+ return { status: "logged_out", remoteRevocation: true, origin: this.origin };
114
+ }
115
+ await this.remove();
116
+ return { status: "logged_out", remoteRevocation: false, origin: this.origin, pendingGrantExpiresAt: state?.expiresAt ?? null };
117
+ }
118
+ }
119
+ //# sourceMappingURL=network-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-session.js","sourceRoot":"","sources":["../src/network-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAe,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAK1H,0FAA0F;AAC1F,MAAM,OAAO,eAAe;IACG;IAAiC;IAC3C;IAAoC;IADvD,YAA6B,MAAc,EAAmB,KAAsB,EACjE,IAAiB,EAAmB,GAAiB;QAD3C,WAAM,GAAN,MAAM,CAAQ;QAAmB,UAAK,GAAL,KAAK,CAAiB;QACjE,SAAI,GAAJ,IAAI,CAAa;QAAmB,QAAG,GAAH,GAAG,CAAc;IAAG,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,KAAkC;QAC3C,IAAI,CAAC;YAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,CAAC;QAC1F,MAAM,CAAC;YAAC,MAAM,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;QAAC,CAAC;IAC9D,CAAC;IACD,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YAAC,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QACtE,MAAM,CAAC;YAAC,MAAM,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;QAAC,CAAC;IAC9D,CAAC;IACD,KAAK,CAAC,IAAI;QACR,IAAI,IAAmB,CAAC;QACxB,IAAI,CAAC;YAAC,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC1E,MAAM,CAAC;YAAC,MAAM,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;QAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;QAAC,CAAC;QAC/F,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACjI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,iBAAiB,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChH,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAClH,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACnI,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACjI,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAmB;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;QAAC,CAAC;QACjI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC/H,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;gBAChL,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC3C,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;oBAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;gBACxJ,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;gBAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;YAC3L,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9H,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QACtH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACvI,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC9H,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC7D,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC,CAAC,oDAAoD,CAAC,CAAC;YAChE,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,YAAY,CAAC,wBAAwB,EAAE,EAAE,gBAAgB,EAAE,KAAK;oBACtF,QAAQ,EAAE,sFAAsF,EAAE,CAAC,CAAC;YACtG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/E,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;IACjI,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { CredentialStore } from "./credential-store.js";
2
+ export { NetworkError, publicNetworkError } from "./network-errors.js";
3
+ export interface NetworkDeps {
4
+ store?: CredentialStore;
5
+ fetch?: typeof fetch;
6
+ home?: string;
7
+ now?: () => number;
8
+ uuid?: () => string;
9
+ timeoutMs?: number;
10
+ allowLoopback?: boolean;
11
+ }
12
+ export declare function runNetwork(args: string[], deps?: NetworkDeps): Promise<Record<string, unknown>>;
@@ -0,0 +1,111 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { homedir } from "node:os";
3
+ import { VERSION } from "./version.js";
4
+ import { NetworkError } from "./network-errors.js";
5
+ import { NetworkFiles } from "./network-files.js";
6
+ import { NetworkHttp, normalizeNetworkOrigin, isRecord, UUID_PATTERN } from "./network-http.js";
7
+ import { NetworkSessions } from "./network-session.js";
8
+ import { DEFAULT_NETWORK_ORIGIN, NETWORK_HOSTS, parseNetworkArgs, parseCapability, parseUseInput, parsePendingGrant, publicPendingGrant, networkServerError } from "./network-contract.js";
9
+ export { NetworkError, publicNetworkError } from "./network-errors.js";
10
+ export async function runNetwork(args, deps = {}) {
11
+ const { command, flags } = parseNetworkArgs(args);
12
+ if (command === "help")
13
+ return { commands: ["network setup [--host chatgpt|claude-code|opencode|generic] [--network <origin>] --json",
14
+ "network status --json", "network find --capability <capability> --json",
15
+ "network use --capability <capability> --input-json <json> [--request-id <uuid>] --json", "network logout --json"] };
16
+ const cap = ["find", "use"].includes(command) ? parseCapability(flags) : undefined;
17
+ const input = command === "use" ? parseUseInput(flags, cap) : undefined;
18
+ const id = command === "use" ? (flags["--request-id"] ?? (deps.uuid ?? randomUUID)()).toLowerCase() : undefined;
19
+ if (id && !UUID_PATTERN.test(id))
20
+ throw new NetworkError("REQUEST_ID_INVALID");
21
+ const task = flags["--task"] ?? (cap ? `Assess ${cap} using the supplied target and source evidence.` : "");
22
+ if (command === "use" && (!task.trim() || task.length > 4000))
23
+ throw new NetworkError("TASK_INVALID");
24
+ if (Number(process.versions.node.split(".")[0]) < 22)
25
+ throw new NetworkError("NODE_VERSION_UNSUPPORTED");
26
+ const files = new NetworkFiles(deps.home ?? homedir());
27
+ let unlock;
28
+ try {
29
+ unlock = await files.lock();
30
+ const config = await files.readConfig();
31
+ const origin = normalizeNetworkOrigin(flags["--network"] ?? config?.origin ?? DEFAULT_NETWORK_ORIGIN, deps.allowLoopback ?? process.env.FRELY_NETWORK_ALLOW_LOOPBACK === "1");
32
+ const host = flags["--host"] ?? config?.host ?? "generic";
33
+ if (!NETWORK_HOSTS.includes(host))
34
+ throw new NetworkError("HOST_UNSUPPORTED");
35
+ const store = deps.store ?? (await import("./credential-store.js")).credentialStore;
36
+ const now = deps.now ?? Date.now;
37
+ const http = new NetworkHttp(deps.fetch ?? fetch, deps.timeoutMs ?? 30_000);
38
+ const sessions = new NetworkSessions(origin, store, http, now);
39
+ const state = await sessions.read();
40
+ if (command === "logout")
41
+ return await sessions.logout(state);
42
+ if (command === "setup") {
43
+ const response = await http.request(origin, "/SKILL.md");
44
+ if (response.status !== 200)
45
+ throw new NetworkError("SKILL_DOWNLOAD_FAILED");
46
+ const metadata = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/u.exec(response.text)?.[1];
47
+ if (!metadata || !/^name:\s*frely-network\s*$/mu.test(metadata) || !/^description:\s*\S/mu.test(metadata))
48
+ throw new NetworkError("SKILL_INVALID");
49
+ const installed = await files.installSkill(host, response.text);
50
+ await files.writeConfig({ version: 1, origin, host: host });
51
+ const resolved = await sessions.resolve(state);
52
+ if (resolved.kind === "ready")
53
+ return { ...resolved.view, origin, host, cliVersion: VERSION, ...installed };
54
+ if (resolved.kind === "pending")
55
+ return { ...publicPendingGrant(resolved.value), origin, host, cliVersion: VERSION, ...installed };
56
+ const start = await http.request(origin, "/api/network/device/start", { body: { clientName: "Frely CLI", host } });
57
+ const value = http.parse(start);
58
+ if (start.status !== 201)
59
+ throw networkServerError(value);
60
+ const pending = parsePendingGrant(value, origin);
61
+ if (Date.parse(pending.expiresAt) <= now() || Date.parse(pending.expiresAt) > now() + 3_600_000)
62
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
63
+ await sessions.save(pending);
64
+ return { ...publicPendingGrant(pending), origin, host, cliVersion: VERSION, ...installed };
65
+ }
66
+ const resolved = await sessions.resolve(state);
67
+ if (command === "status") {
68
+ if (resolved.kind === "ready")
69
+ return { ...resolved.view, origin };
70
+ if (resolved.kind === "pending")
71
+ return { ...publicPendingGrant(resolved.value), origin };
72
+ return { status: "setup_required", origin, ...(resolved.reason ? { code: resolved.reason } : {}), recovery: "Run frely network setup --json." };
73
+ }
74
+ if (resolved.kind !== "ready")
75
+ throw new NetworkError("NETWORK_SETUP_REQUIRED", {
76
+ recovery: "Run frely network setup --json and approve the browser request.",
77
+ ...(resolved.kind === "pending" ? { verificationUri: resolved.value.verificationUri, userCode: resolved.value.userCode } : {}),
78
+ });
79
+ const token = resolved.credential.accessToken;
80
+ const response = await http.request(origin, `/api/network/capabilities/${command}`, {
81
+ token, ...(id ? { requestId: id } : {}),
82
+ body: command === "find" ? { capabilities: [cap] } : { requestId: id, capabilities: [cap], task, input },
83
+ });
84
+ const value = http.parse(response, [token]);
85
+ if (response.status !== 200) {
86
+ if (response.status === 401)
87
+ await sessions.remove();
88
+ throw networkServerError(value);
89
+ }
90
+ if (value.paymentMode !== "platform_demo")
91
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
92
+ if (command === "find") {
93
+ if (!Array.isArray(value.capabilities))
94
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
95
+ return { capabilities: value.capabilities, paymentMode: "platform_demo" };
96
+ }
97
+ if (value.requestId !== id || value.status !== "succeeded" || !isRecord(value.result) || !isRecord(value.evidence) ||
98
+ value.result.scamProbability !== null || !Number.isSafeInteger(value.remainingCalls) || Number(value.remainingCalls) < 0)
99
+ throw new NetworkError("NETWORK_RESPONSE_INVALID");
100
+ return { requestId: id, status: "succeeded", paymentMode: "platform_demo", result: value.result, evidence: value.evidence, remainingCalls: value.remainingCalls };
101
+ }
102
+ catch (error) {
103
+ const known = error instanceof NetworkError ? error : new NetworkError("NETWORK_CLIENT_FAILED");
104
+ throw id ? new NetworkError(known.code, { ...known.details, requestId: id }) : known;
105
+ }
106
+ finally {
107
+ if (unlock)
108
+ await unlock();
109
+ }
110
+ }
111
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export async function invokeSkill(options) {
23
23
  const tokenConfigured = await hasConfiguredLocalToken(relayUrl);
24
24
  if (!tokenConfigured) {
25
25
  if (capability?.level === "advanced") {
26
- if (options.registrationUrl === undefined) {
26
+ if (options.registrationUrl === undefined || !isSafeRegistrationUrl(options.registrationUrl)) {
27
27
  throw new Error("registration_url_required");
28
28
  }
29
29
  throw new SkillInvocationError("payment_required", {
@@ -113,4 +113,13 @@ export const remoteAgentMcpInvoker = {
113
113
  function isRecord(value) {
114
114
  return value !== null && typeof value === "object" && !Array.isArray(value);
115
115
  }
116
+ function isSafeRegistrationUrl(value) {
117
+ try {
118
+ const url = new URL(value);
119
+ return url.protocol === "https:" && !url.username && !url.password && !url.hash;
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ }
116
125
  //# sourceMappingURL=router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/skill/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/skill/router.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frely-cli",
3
- "version": "0.3.8",
3
+ "version": "0.4.0",
4
4
  "description": "Frely account CLI and local MCP runtime",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {