frely-cli 0.4.1 → 0.5.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.
Files changed (82) hide show
  1. package/README.md +24 -32
  2. package/dist/auth.d.ts +3 -0
  3. package/dist/auth.js +43 -58
  4. package/dist/auth.js.map +1 -1
  5. package/dist/cli-launch.d.ts +2 -0
  6. package/dist/cli-launch.js +5 -0
  7. package/dist/cli-launch.js.map +1 -0
  8. package/dist/credential-basic.d.ts +5 -0
  9. package/dist/credential-basic.js +84 -0
  10. package/dist/credential-basic.js.map +1 -0
  11. package/dist/credential-command.d.ts +8 -0
  12. package/dist/credential-command.js +42 -0
  13. package/dist/credential-command.js.map +1 -0
  14. package/dist/credential-file.d.ts +6 -0
  15. package/dist/credential-file.js +212 -0
  16. package/dist/credential-file.js.map +1 -0
  17. package/dist/credential-native.d.ts +3 -0
  18. package/dist/credential-native.js +196 -0
  19. package/dist/credential-native.js.map +1 -0
  20. package/dist/credential-store.d.ts +11 -4
  21. package/dist/credential-store.js +48 -10
  22. package/dist/credential-store.js.map +1 -1
  23. package/dist/credential-system.d.ts +3 -0
  24. package/dist/credential-system.js +99 -0
  25. package/dist/credential-system.js.map +1 -0
  26. package/dist/device/control.d.ts +8 -1
  27. package/dist/device/control.js +7 -14
  28. package/dist/device/control.js.map +1 -1
  29. package/dist/device/identity.d.ts +1 -0
  30. package/dist/device/identity.js +4 -4
  31. package/dist/device/identity.js.map +1 -1
  32. package/dist/device/protocol.d.ts +7 -1
  33. package/dist/device/protocol.js +9 -1
  34. package/dist/device/protocol.js.map +1 -1
  35. package/dist/device/relay-client.js +55 -24
  36. package/dist/device/relay-client.js.map +1 -1
  37. package/dist/device/state.d.ts +1 -2
  38. package/dist/device/state.js +2 -2
  39. package/dist/device/state.js.map +1 -1
  40. package/dist/diagnostics.d.ts +13 -10
  41. package/dist/diagnostics.js +26 -45
  42. package/dist/diagnostics.js.map +1 -1
  43. package/dist/index.js +46 -53
  44. package/dist/index.js.map +1 -1
  45. package/dist/mcp-authorization.d.ts +35 -0
  46. package/dist/mcp-authorization.js +171 -0
  47. package/dist/mcp-authorization.js.map +1 -0
  48. package/dist/network-contract.d.ts +2 -3
  49. package/dist/network-contract.js +16 -13
  50. package/dist/network-contract.js.map +1 -1
  51. package/dist/network.js +3 -3
  52. package/dist/network.js.map +1 -1
  53. package/dist/runtime/mcp-lease.d.ts +14 -0
  54. package/dist/runtime/mcp-lease.js +38 -0
  55. package/dist/runtime/mcp-lease.js.map +1 -0
  56. package/dist/runtime/mcp.d.ts +6 -2
  57. package/dist/runtime/mcp.js +14 -7
  58. package/dist/runtime/mcp.js.map +1 -1
  59. package/dist/runtime/process-manager.d.ts +2 -0
  60. package/dist/runtime/process-manager.js +11 -8
  61. package/dist/runtime/process-manager.js.map +1 -1
  62. package/dist/runtime/process-tree.d.ts +6 -0
  63. package/dist/runtime/process-tree.js +54 -0
  64. package/dist/runtime/process-tree.js.map +1 -0
  65. package/dist/runtime/relay-mcp.d.ts +3 -1
  66. package/dist/runtime/relay-mcp.js +5 -2
  67. package/dist/runtime/relay-mcp.js.map +1 -1
  68. package/dist/runtime/scheduler.d.ts +2 -1
  69. package/dist/runtime/scheduler.js +5 -3
  70. package/dist/runtime/scheduler.js.map +1 -1
  71. package/dist/runtime/workspace.d.ts +1 -1
  72. package/dist/runtime/workspace.js +13 -12
  73. package/dist/runtime/workspace.js.map +1 -1
  74. package/dist/service-windows.d.ts +9 -0
  75. package/dist/service-windows.js +55 -0
  76. package/dist/service-windows.js.map +1 -0
  77. package/dist/service.d.ts +5 -0
  78. package/dist/service.js +81 -78
  79. package/dist/service.js.map +1 -1
  80. package/dist/version.js +8 -5
  81. package/dist/version.js.map +1 -1
  82. package/package.json +7 -6
@@ -0,0 +1,99 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { mkdir, readdir, rmdir } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { createEncryptedCredentialStore, ensureCredentialDirectory } from "./credential-file.js";
5
+ const MASTER_SERVICE = "frely-cli-vault";
6
+ /** The OS stores a 32-byte master key; authenticated files hold variable-size credentials. */
7
+ export function createSystemCredentialStore(root, native) {
8
+ const masterAccount = `v1:${createHash("sha256").update(root).digest("hex")}`;
9
+ async function masterKey(create) {
10
+ const read = async () => {
11
+ const key = await native.getPassword(MASTER_SERVICE, masterAccount);
12
+ if (key !== null && !/^[a-f0-9]{64}$/u.test(key))
13
+ throw new Error("The OS credential vault master key is invalid. Existing credentials were not replaced.");
14
+ return key;
15
+ };
16
+ const existing = await read();
17
+ if (existing !== null)
18
+ return existing;
19
+ const directoryExists = await ensureCredentialDirectory(root, create);
20
+ const hasData = async () => directoryExists && (await readdir(root)).some((name) => name.endsWith(".json"));
21
+ if (await hasData())
22
+ throw new Error("The OS credential vault master key is missing or inaccessible. Restore OS credential access; Frely will not generate a replacement key over existing data.");
23
+ if (!create)
24
+ return null;
25
+ const lock = join(root, ".system-init.lock");
26
+ let locked = false;
27
+ for (let attempt = 0; attempt < 100; attempt++) {
28
+ try {
29
+ await mkdir(lock, { mode: 0o700 });
30
+ locked = true;
31
+ break;
32
+ }
33
+ catch (error) {
34
+ if (!directoryLockBusy(error))
35
+ throw error;
36
+ await new Promise((resolve) => setTimeout(resolve, 50));
37
+ }
38
+ }
39
+ if (!locked)
40
+ throw new Error("OS credential vault initialization is locked. Check other Frely processes or a stale .system-init.lock directory.");
41
+ try {
42
+ const current = await read();
43
+ if (current !== null)
44
+ return current;
45
+ if (await hasData())
46
+ throw new Error("OS credential vault master key is missing. Existing encrypted data was not replaced.");
47
+ const key = randomBytes(32).toString("hex");
48
+ await native.setPassword(MASTER_SERVICE, masterAccount, key);
49
+ if (await read() !== key)
50
+ throw new Error("OS credential vault master-key readback failed.");
51
+ return key;
52
+ }
53
+ finally {
54
+ await rmdir(lock);
55
+ }
56
+ }
57
+ return {
58
+ async getPassword(service, account) {
59
+ const key = await masterKey(false);
60
+ if (key !== null) {
61
+ const stored = await createEncryptedCredentialStore(root, key).getPassword(service, account);
62
+ if (stored !== null)
63
+ return stored;
64
+ }
65
+ // Preserve old keytar credentials, including enrolled device keys. An OS error
66
+ // propagates instead of being interpreted as a missing device identity.
67
+ return native.getPassword(service, account);
68
+ },
69
+ async setPassword(service, account, password) {
70
+ const key = await masterKey(true);
71
+ if (key === null)
72
+ throw new Error("OS credential vault initialization failed.");
73
+ const files = createEncryptedCredentialStore(root, key);
74
+ await files.setPassword(service, account, password);
75
+ if (await files.getPassword(service, account) !== password)
76
+ throw new Error("Credential vault readback failed.");
77
+ // Persist the replacement before removing a legacy entry. Deletion failures
78
+ // remain errors, and logout retries both stores so old tokens cannot reappear.
79
+ await native.deletePassword(service, account);
80
+ },
81
+ async deletePassword(service, account) {
82
+ const key = await masterKey(false);
83
+ const legacyDeleted = await native.deletePassword(service, account);
84
+ const fileDeleted = key === null ? false : await createEncryptedCredentialStore(root, key).deletePassword(service, account);
85
+ return legacyDeleted || fileDeleted;
86
+ },
87
+ };
88
+ }
89
+ function directoryLockBusy(error) {
90
+ if (typeof error !== "object" || error === null || !("code" in error))
91
+ return false;
92
+ const code = error.code;
93
+ if (code === "EEXIST")
94
+ return true;
95
+ // Windows may surface directory-lock contention as a sharing/access error.
96
+ // Retry only inside the bounded initialization window; no fallback is used.
97
+ return process.platform === "win32" && (code === "EPERM" || code === "EBUSY" || code === "ENOTEMPTY");
98
+ }
99
+ //# sourceMappingURL=credential-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-system.js","sourceRoot":"","sources":["../src/credential-system.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,12 @@ export interface ConnectionGrant {
6
6
  }
7
7
  export declare function ensureDevice(): Promise<DeviceBinding>;
8
8
  export declare function currentDevice(): Promise<DeviceBinding | null>;
9
- export declare function connectionGrant(binding?: DeviceBinding): Promise<ConnectionGrant>;
9
+ export declare function connectionGrant(binding?: DeviceBinding, mcp?: {
10
+ authorizationId: string;
11
+ sign(message: string): string;
12
+ }): Promise<ConnectionGrant>;
10
13
  export declare function revokeDevice(): Promise<void>;
14
+ export declare function relayFetch(relayUrl: string, credential: {
15
+ scheme: "bearer" | "cookie";
16
+ value: string;
17
+ }, path: string, init: RequestInit): Promise<Response>;
@@ -28,15 +28,13 @@ export async function ensureDevice() {
28
28
  throw new Error(publicError(payload, response.status));
29
29
  const record = object(payload);
30
30
  const deviceId = requiredString(record, "deviceId", 256);
31
- const mcpUrl = validateMcpUrl(requiredString(record, "mcpUrl", 4096));
32
31
  const binding = {
33
- version: 1,
32
+ version: 2,
34
33
  relayUrl: auth.config.relayUrl,
35
34
  userId: auth.user.id,
36
35
  deviceId,
37
36
  publicKeySpki: identity.publicKeySpki,
38
37
  keyThumbprint: identity.keyThumbprint,
39
- mcpUrl,
40
38
  updatedAt: new Date().toISOString(),
41
39
  };
42
40
  await writeDeviceBinding(binding);
@@ -49,7 +47,7 @@ export async function currentDevice() {
49
47
  return null;
50
48
  return binding;
51
49
  }
52
- export async function connectionGrant(binding) {
50
+ export async function connectionGrant(binding, mcp) {
53
51
  const auth = await requireLogin();
54
52
  const device = binding ?? await ensureDevice();
55
53
  if (device.relayUrl !== auth.config.relayUrl || device.userId !== auth.user.id)
@@ -60,7 +58,10 @@ export async function connectionGrant(binding) {
60
58
  const proof = createConnectionProof(identity, device.deviceId);
61
59
  const response = await relayFetch(auth.config.relayUrl, auth.credential, "/api/user/device-relay/connect", {
62
60
  method: "POST",
63
- body: JSON.stringify(proof),
61
+ body: JSON.stringify({ ...proof, ...(mcp ? {
62
+ mcpAuthorizationId: mcp.authorizationId,
63
+ mcpSignature: mcp.sign(["frely.mcp.connect.v1", device.deviceId, mcp.authorizationId, proof.issuedAt, proof.nonce].join("\n")),
64
+ } : {}) }),
64
65
  });
65
66
  if (response.status === 404 || response.status === 405)
66
67
  throw new Error("This Frely Relay does not provide Device Relay connections yet.");
@@ -95,7 +96,7 @@ export async function revokeDevice() {
95
96
  await clearDeviceBinding();
96
97
  await deleteDeviceIdentity(auth.config.relayUrl, auth.user.id);
97
98
  }
98
- async function relayFetch(relayUrl, credential, path, init) {
99
+ export async function relayFetch(relayUrl, credential, path, init) {
99
100
  const controller = new AbortController();
100
101
  const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
101
102
  timer.unref?.();
@@ -122,14 +123,6 @@ async function relayFetch(relayUrl, credential, path, init) {
122
123
  clearTimeout(timer);
123
124
  }
124
125
  }
125
- function validateMcpUrl(value) {
126
- const url = new URL(value);
127
- if (url.protocol !== "https:" && !(url.protocol === "http:" && ["127.0.0.1", "localhost", "::1"].includes(url.hostname)))
128
- throw new Error("Relay returned an invalid MCP URL.");
129
- if (url.username || url.password || url.search || url.hash)
130
- throw new Error("MCP URL must not contain URL userinfo, query parameters, or fragments.");
131
- return url.toString();
132
- }
133
126
  function validateWebSocketUrl(value) {
134
127
  const url = new URL(value);
135
128
  if (url.protocol !== "wss:" && !(url.protocol === "ws:" && ["127.0.0.1", "localhost", "::1"].includes(url.hostname)))
@@ -1 +1 @@
1
- {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/device/control.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/device/control.ts"],"names":[],"mappings":"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"}
@@ -16,3 +16,4 @@ export declare function createConnectionProof(identity: DeviceIdentity, deviceId
16
16
  nonce: string;
17
17
  signature: string;
18
18
  };
19
+ export declare function identityFromPrivateKey(privateKeyPem: string): DeviceIdentity;
@@ -1,6 +1,6 @@
1
1
  import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, randomBytes, sign } from "node:crypto";
2
- import { credentialStore } from "../credential-store.js";
3
- const SERVICE = "frely-cli-device";
2
+ import { basicCredentialStore as credentialStore } from "../credential-basic.js";
3
+ const SERVICE = "frely-cli-provider-device-v1";
4
4
  function account(relayUrl, userId) {
5
5
  return `${new URL(relayUrl).origin}|${userId}`;
6
6
  }
@@ -15,7 +15,7 @@ export async function loadOrCreateDeviceIdentity(relayUrl, userId) {
15
15
  return identityFromPrivateKey(privateKeyPem);
16
16
  }
17
17
  export async function deleteDeviceIdentity(relayUrl, userId) {
18
- await credentialStore.deletePassword(SERVICE, account(relayUrl, userId)).catch(() => false);
18
+ await credentialStore.deletePassword(SERVICE, account(relayUrl, userId));
19
19
  }
20
20
  export function connectionProofMessage(deviceId, issuedAt, nonce) {
21
21
  return `frely.device-relay.connect.v1\n${deviceId}\n${issuedAt}\n${nonce}`;
@@ -41,7 +41,7 @@ export function createConnectionProof(identity, deviceId) {
41
41
  signature: identity.signMessage(message),
42
42
  };
43
43
  }
44
- function identityFromPrivateKey(privateKeyPem) {
44
+ export function identityFromPrivateKey(privateKeyPem) {
45
45
  const privateKey = createPrivateKey(privateKeyPem);
46
46
  const publicDer = createPublicKey(privateKey).export({ type: "spki", format: "der" });
47
47
  const publicKeySpki = Buffer.from(publicDer).toString("base64url");
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/device/identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/device/identity.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export type DeviceRelayRequest = {
6
6
  type: "request";
7
7
  id: string;
8
8
  method: "mcp" | "provider";
9
+ authorizationId?: string;
9
10
  payload: unknown;
10
11
  };
11
12
  export type DeviceRelayResponse = {
@@ -42,7 +43,12 @@ export type DeviceRelayStreamEnd = {
42
43
  type: "stream_end";
43
44
  id: string;
44
45
  };
45
- export type DeviceRelayEnvelope = DeviceRelayRequest | DeviceRelayResponse | DeviceRelayCancel | DeviceRelayStreamStart | DeviceRelayStreamChunk | DeviceRelayStreamEnd;
46
+ export type DeviceRelayMcpDisabled = {
47
+ protocol: typeof DEVICE_RELAY_PROTOCOL;
48
+ type: "mcp_disabled";
49
+ id: string;
50
+ };
51
+ export type DeviceRelayEnvelope = DeviceRelayMcpDisabled | DeviceRelayRequest | DeviceRelayResponse | DeviceRelayCancel | DeviceRelayStreamStart | DeviceRelayStreamChunk | DeviceRelayStreamEnd;
46
52
  export declare class DeviceRelayProtocolError extends Error {
47
53
  readonly code: "frame_invalid" | "frame_too_large" | "duplicate_request" | "inflight_limit";
48
54
  constructor(code: "frame_invalid" | "frame_too_large" | "duplicate_request" | "inflight_limit");
@@ -37,11 +37,19 @@ export function validateDeviceRelayEnvelope(value) {
37
37
  throw new DeviceRelayProtocolError("frame_invalid");
38
38
  assertRequestId(record.id);
39
39
  if (record.type === "request") {
40
- exactKeys(record, ["protocol", "type", "id", "method", "payload"]);
40
+ exactKeys(record, ["protocol", "type", "id", "method", "payload", ...(record.authorizationId !== undefined ? ["authorizationId"] : [])]);
41
+ if (record.authorizationId !== undefined && (record.method !== "mcp" || typeof record.authorizationId !== "string" || !/^mca_[a-f0-9]{32}$/u.test(record.authorizationId)))
42
+ throw new DeviceRelayProtocolError("frame_invalid");
41
43
  if (record.method !== "mcp" && record.method !== "provider")
42
44
  throw new DeviceRelayProtocolError("frame_invalid");
43
45
  return;
44
46
  }
47
+ if (record.type === "mcp_disabled") {
48
+ exactKeys(record, ["protocol", "type", "id"]);
49
+ if (!/^mca_[a-f0-9]{32}$/u.test(record.id))
50
+ throw new DeviceRelayProtocolError("frame_invalid");
51
+ return;
52
+ }
45
53
  if (record.type === "cancel") {
46
54
  exactKeys(record, ["protocol", "type", "id"]);
47
55
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/device/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/device/protocol.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { requireMcpAuthorization } from "../mcp-authorization.js";
2
+ import { McpLease } from "../runtime/mcp-lease.js";
1
3
  import WebSocket from "ws";
2
4
  import { connectionGrant, ensureDevice } from "./control.js";
3
5
  import { DEVICE_RELAY_DEFAULT_MAX_INFLIGHT, DEVICE_RELAY_MAX_FRAME_BYTES, DEVICE_RELAY_PROTOCOL, decodeDeviceRelayEnvelope, encodeDeviceRelayEnvelope, } from "./protocol.js";
@@ -5,30 +7,51 @@ import { RelayMcpSession } from "../runtime/relay-mcp.js";
5
7
  import { openLocalProviderRequest, readLocalProviderBody } from "../provider/local.js";
6
8
  export async function serveDeviceRelay(options) {
7
9
  const device = await ensureDevice();
8
- const session = options.workspace ? await RelayMcpSession.create(options.workspace) : null;
9
10
  const log = options.log ?? (() => undefined);
10
11
  let delayMs = 1000;
11
- try {
12
- while (!options.signal.aborted) {
13
- try {
14
- const grant = await connectionGrant(device);
15
- await serveConnection(grant.websocketUrl, grant.accessToken, device.deviceId, session, options.signal, log);
16
- delayMs = 1000;
17
- }
18
- catch (error) {
19
- if (options.signal.aborted)
20
- break;
21
- log(`Device Relay disconnected: ${safeMessage(error)}. Reconnecting.`);
22
- await wait(delayMs, options.signal);
23
- delayMs = Math.min(delayMs * 2, 15_000);
12
+ while (!options.signal.aborted) {
13
+ let session = null;
14
+ let lease = null;
15
+ try {
16
+ let authorization = null;
17
+ if (options.workspace) {
18
+ try {
19
+ authorization = await requireMcpAuthorization(options.workspace);
20
+ if (authorization.grant.deviceId !== device.deviceId)
21
+ throw new Error("MCP device differs from the connected device.");
22
+ lease = new McpLease(authorization.grant.id, Date.parse(authorization.grant.expiresAt));
23
+ const guard = lease;
24
+ session = await RelayMcpSession.create(options.workspace, { assertAuthorized: () => guard.assert(), signal: guard.controller.signal });
25
+ const activeSession = session;
26
+ guard.controller.signal.addEventListener("abort", () => { void activeSession.close(); }, { once: true });
27
+ }
28
+ catch {
29
+ authorization = null;
30
+ lease?.close();
31
+ await session?.close();
32
+ session = null;
33
+ lease = null;
34
+ log("MCP execution disabled: authorization unavailable. Provider relay remains enabled. Run frely mcp renew.");
35
+ }
24
36
  }
37
+ const grant = await connectionGrant(device, authorization ? { authorizationId: authorization.grant.id, sign: authorization.sign } : undefined);
38
+ await serveConnection(grant.websocketUrl, grant.accessToken, device.deviceId, session, lease, options.signal, log);
39
+ delayMs = 1000;
40
+ }
41
+ catch (error) {
42
+ if (options.signal.aborted)
43
+ break;
44
+ log(`Device Relay disconnected: ${safeMessage(error)}. Reconnecting.`);
45
+ await wait(delayMs, options.signal);
46
+ delayMs = Math.min(delayMs * 2, 15_000);
47
+ }
48
+ finally {
49
+ lease?.close();
50
+ await session?.close();
25
51
  }
26
- }
27
- finally {
28
- await session?.close();
29
52
  }
30
53
  }
31
- async function serveConnection(websocketUrl, accessToken, deviceId, session, signal, log) {
54
+ async function serveConnection(websocketUrl, accessToken, deviceId, session, lease, signal, log) {
32
55
  await new Promise((resolve, reject) => {
33
56
  const socket = new WebSocket(websocketUrl, DEVICE_RELAY_PROTOCOL, {
34
57
  headers: { authorization: `Bearer ${accessToken}`, "x-frely-device-id": deviceId },
@@ -72,12 +95,19 @@ async function serveConnection(websocketUrl, accessToken, deviceId, session, sig
72
95
  // WebSocket peers may deliver the same JSON envelope as either a text
73
96
  // or a binary frame. `rawDataBuffer` normalizes both forms before the
74
97
  // protocol validator parses the JSON.
75
- void handleFrame(rawDataBuffer(data), socket, inflight, cancelled, session).catch((error) => finish(error));
98
+ void handleFrame(rawDataBuffer(data), socket, inflight, cancelled, session, lease).catch((error) => finish(error));
76
99
  });
77
100
  });
78
101
  }
79
- async function handleFrame(data, socket, inflight, cancelled, session) {
102
+ async function handleFrame(data, socket, inflight, cancelled, session, lease) {
80
103
  const envelope = decodeDeviceRelayEnvelope(data);
104
+ if (envelope.type === "mcp_disabled") {
105
+ if (lease?.authorizationId === envelope.id) {
106
+ lease.close();
107
+ await session?.close();
108
+ }
109
+ return;
110
+ }
81
111
  if (envelope.type === "cancel") {
82
112
  const item = inflight.get(envelope.id);
83
113
  if (item) {
@@ -102,7 +132,7 @@ async function handleFrame(data, socket, inflight, cancelled, session) {
102
132
  inflight.set(envelope.id, { request: envelope, controller });
103
133
  const operation = envelope.method === "provider"
104
134
  ? executeProviderRequest(envelope, socket, controller.signal, cancelled)
105
- : executeMcpRequest(envelope, session).then((payload) => {
135
+ : executeMcpRequest(envelope, session, lease).then((payload) => {
106
136
  if (!cancelled.has(envelope.id))
107
137
  send(socket, { protocol: DEVICE_RELAY_PROTOCOL, type: "response", id: envelope.id, ok: true, payload });
108
138
  });
@@ -114,9 +144,10 @@ async function handleFrame(data, socket, inflight, cancelled, session) {
114
144
  cancelled.delete(envelope.id);
115
145
  });
116
146
  }
117
- async function executeMcpRequest(request, session) {
118
- if (!session)
119
- throw new Error("MCP workspace is not configured on this device.");
147
+ async function executeMcpRequest(request, session, lease) {
148
+ if (!session || !lease || request.authorizationId !== lease.authorizationId)
149
+ throw new Error("MCP execution authorization is missing or mismatched.");
150
+ lease.assert();
120
151
  return session.execute(request.payload);
121
152
  }
122
153
  async function executeProviderRequest(request, socket, signal, cancelled) {
@@ -1 +1 @@
1
- {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../../src/device/relay-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../../src/device/relay-client.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  export interface DeviceBinding {
2
- version: 1;
2
+ version: 2;
3
3
  relayUrl: string;
4
4
  userId: string;
5
5
  deviceId: string;
6
6
  publicKeySpki: string;
7
7
  keyThumbprint: string;
8
- mcpUrl: string;
9
8
  updatedAt: string;
10
9
  }
11
10
  export declare function deviceStatePath(): string;
@@ -3,7 +3,7 @@ import { homedir } from "node:os";
3
3
  import { dirname, join } from "node:path";
4
4
  export function deviceStatePath() {
5
5
  const root = process.env.XDG_CONFIG_HOME || join(homedir(), ".config");
6
- return join(root, "frely", "device.json");
6
+ return join(root, "frely", "device-basic-v1.json");
7
7
  }
8
8
  export async function readDeviceBinding() {
9
9
  const raw = await readFile(deviceStatePath(), "utf8").catch(() => null);
@@ -11,7 +11,7 @@ export async function readDeviceBinding() {
11
11
  return null;
12
12
  try {
13
13
  const value = JSON.parse(raw);
14
- if (value.version !== 1 || typeof value.relayUrl !== "string" || typeof value.userId !== "string" || typeof value.deviceId !== "string" || typeof value.publicKeySpki !== "string" || typeof value.keyThumbprint !== "string" || typeof value.mcpUrl !== "string")
14
+ if (value.version !== 2 || typeof value.relayUrl !== "string" || typeof value.userId !== "string" || typeof value.deviceId !== "string" || typeof value.publicKeySpki !== "string" || typeof value.keyThumbprint !== "string")
15
15
  return null;
16
16
  return value;
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/device/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAa1C,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;QACxD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/Q,OAAO,KAAsB,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAsB;IAC7D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACxD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5F,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzB,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/device/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAY1C,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;QACxD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3O,OAAO,KAAsB,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAsB;IAC7D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACxD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5F,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzB,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC"}
@@ -8,18 +8,21 @@ export declare function statusSnapshot(): Promise<{
8
8
  node: string;
9
9
  platform: NodeJS.Platform;
10
10
  auth: import("./auth.js").AuthSnapshot;
11
- device: {
12
- deviceId: string;
13
- keyThumbprint: string;
14
- provisioned: boolean;
15
- } | null;
16
- service: import("./service.js").McpServiceInfo | {
17
- installed: boolean;
18
- active: boolean;
19
- platform: NodeJS.Platform;
11
+ mcp: {
12
+ configured: boolean;
13
+ authorizationId: string;
14
+ expiresAt: string | null;
15
+ expired: boolean;
16
+ } | {
17
+ configured: boolean;
18
+ authorizationId?: never;
19
+ expiresAt?: never;
20
+ expired?: never;
20
21
  };
21
22
  }>;
22
- export declare function doctor(): Promise<{
23
+ export declare function doctor(options?: {
24
+ mcp?: boolean;
25
+ }): Promise<{
23
26
  ok: boolean;
24
27
  checks: DiagnosticCheck[];
25
28
  }>;