frely-cli 0.4.1 → 0.6.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 +24 -32
- package/dist/auth.d.ts +3 -0
- package/dist/auth.js +43 -58
- package/dist/auth.js.map +1 -1
- package/dist/cli-launch.d.ts +2 -0
- package/dist/cli-launch.js +5 -0
- package/dist/cli-launch.js.map +1 -0
- package/dist/credential-basic.d.ts +5 -0
- package/dist/credential-basic.js +84 -0
- package/dist/credential-basic.js.map +1 -0
- package/dist/credential-command.d.ts +8 -0
- package/dist/credential-command.js +42 -0
- package/dist/credential-command.js.map +1 -0
- package/dist/credential-file.d.ts +6 -0
- package/dist/credential-file.js +212 -0
- package/dist/credential-file.js.map +1 -0
- package/dist/credential-native.d.ts +3 -0
- package/dist/credential-native.js +196 -0
- package/dist/credential-native.js.map +1 -0
- package/dist/credential-store.d.ts +11 -4
- package/dist/credential-store.js +48 -10
- package/dist/credential-store.js.map +1 -1
- package/dist/credential-system.d.ts +3 -0
- package/dist/credential-system.js +99 -0
- package/dist/credential-system.js.map +1 -0
- package/dist/device/control.d.ts +8 -1
- package/dist/device/control.js +7 -14
- package/dist/device/control.js.map +1 -1
- package/dist/device/identity.d.ts +1 -0
- package/dist/device/identity.js +4 -4
- package/dist/device/identity.js.map +1 -1
- package/dist/device/protocol.d.ts +7 -1
- package/dist/device/protocol.js +9 -1
- package/dist/device/protocol.js.map +1 -1
- package/dist/device/relay-client.js +55 -24
- package/dist/device/relay-client.js.map +1 -1
- package/dist/device/state.d.ts +1 -2
- package/dist/device/state.js +2 -2
- package/dist/device/state.js.map +1 -1
- package/dist/diagnostics.d.ts +13 -10
- package/dist/diagnostics.js +26 -45
- package/dist/diagnostics.js.map +1 -1
- package/dist/index.js +46 -53
- package/dist/index.js.map +1 -1
- package/dist/mcp-authorization.d.ts +36 -0
- package/dist/mcp-authorization.js +197 -0
- package/dist/mcp-authorization.js.map +1 -0
- package/dist/network-contract.d.ts +2 -3
- package/dist/network-contract.js +16 -13
- package/dist/network-contract.js.map +1 -1
- package/dist/network.js +3 -3
- package/dist/network.js.map +1 -1
- package/dist/runtime/mcp-lease.d.ts +14 -0
- package/dist/runtime/mcp-lease.js +38 -0
- package/dist/runtime/mcp-lease.js.map +1 -0
- package/dist/runtime/mcp.d.ts +6 -2
- package/dist/runtime/mcp.js +14 -7
- package/dist/runtime/mcp.js.map +1 -1
- package/dist/runtime/process-manager.d.ts +2 -0
- package/dist/runtime/process-manager.js +11 -8
- package/dist/runtime/process-manager.js.map +1 -1
- package/dist/runtime/process-tree.d.ts +6 -0
- package/dist/runtime/process-tree.js +54 -0
- package/dist/runtime/process-tree.js.map +1 -0
- package/dist/runtime/relay-mcp.d.ts +3 -1
- package/dist/runtime/relay-mcp.js +5 -2
- package/dist/runtime/relay-mcp.js.map +1 -1
- package/dist/runtime/scheduler.d.ts +2 -1
- package/dist/runtime/scheduler.js +5 -3
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/runtime/workspace.d.ts +1 -1
- package/dist/runtime/workspace.js +13 -12
- package/dist/runtime/workspace.js.map +1 -1
- package/dist/service-windows.d.ts +9 -0
- package/dist/service-windows.js +55 -0
- package/dist/service-windows.js.map +1 -0
- package/dist/service.d.ts +5 -0
- package/dist/service.js +81 -78
- package/dist/service.js.map +1 -1
- package/dist/version.js +8 -5
- package/dist/version.js.map +1 -1
- package/package.json +8 -6
package/dist/diagnostics.js
CHANGED
|
@@ -1,65 +1,46 @@
|
|
|
1
1
|
import { inspectAuth, probeCredentialStore, whoami } from "./auth.js";
|
|
2
|
-
import {
|
|
3
|
-
import { serviceStatus } from "./service.js";
|
|
2
|
+
import { inspectMcpMetadata, requireMcpAuthorization } from "./mcp-authorization.js";
|
|
4
3
|
import { VERSION } from "./version.js";
|
|
5
4
|
export async function statusSnapshot() {
|
|
6
5
|
const auth = await inspectAuth();
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return {
|
|
12
|
-
version: VERSION,
|
|
13
|
-
node: process.version,
|
|
14
|
-
platform: process.platform,
|
|
15
|
-
auth,
|
|
16
|
-
device: device ? { deviceId: device.deviceId, keyThumbprint: device.keyThumbprint, provisioned: true } : null,
|
|
17
|
-
service,
|
|
18
|
-
};
|
|
6
|
+
const metadata = await inspectMcpMetadata().catch(() => null);
|
|
7
|
+
return { version: VERSION, node: process.version, platform: process.platform, auth,
|
|
8
|
+
mcp: metadata ? { configured: true, authorizationId: metadata.grant.id, expiresAt: metadata.grant.expiresAt,
|
|
9
|
+
expired: !metadata.grant.expiresAt || Date.parse(metadata.grant.expiresAt) <= Date.now() } : { configured: false } };
|
|
19
10
|
}
|
|
20
|
-
export async function doctor() {
|
|
21
|
-
const checks = [];
|
|
22
|
-
const major = Number(process.versions.node.split(".", 1)[0]);
|
|
23
|
-
checks.push({ name: "node", ok: major >= 22, detail: process.version });
|
|
11
|
+
export async function doctor(options = {}) {
|
|
12
|
+
const checks = [{ name: "runtime", ok: Number(process.versions.node.split(".")[0]) >= 22, detail: process.version }];
|
|
24
13
|
try {
|
|
25
14
|
await probeCredentialStore();
|
|
26
|
-
checks.push({ name: "
|
|
15
|
+
checks.push({ name: "basic_storage", ok: true, detail: "private session files; no OS keyring required" });
|
|
27
16
|
}
|
|
28
|
-
catch
|
|
29
|
-
checks.push({ name: "
|
|
17
|
+
catch {
|
|
18
|
+
checks.push({ name: "basic_storage", ok: false, detail: "User-private session directory is not writable." });
|
|
30
19
|
}
|
|
31
20
|
const auth = await inspectAuth();
|
|
32
|
-
checks.push({
|
|
33
|
-
|
|
34
|
-
ok: auth.configured && (auth.configMode === undefined || auth.configMode === 0o600),
|
|
35
|
-
detail: auth.configured ? `${auth.configPath}${auth.configMode === undefined ? "" : ` mode=${auth.configMode.toString(8)}`}` : "not configured",
|
|
36
|
-
});
|
|
37
|
-
checks.push({ name: "credential", ok: auth.credentialStored, detail: auth.credentialStored ? "stored" : "missing" });
|
|
38
|
-
if (auth.configured && auth.credentialStored) {
|
|
21
|
+
checks.push({ name: "account", ok: !auth.credentialError, detail: auth.credentialError ?? (auth.credentialStored ? "configured" : "not logged in; account features require frely login") });
|
|
22
|
+
if (auth.credentialStored) {
|
|
39
23
|
try {
|
|
40
|
-
|
|
41
|
-
checks.push({ name: "
|
|
42
|
-
|
|
43
|
-
|
|
24
|
+
await whoami();
|
|
25
|
+
checks.push({ name: "account_session", ok: true, detail: "valid" });
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
checks.push({ name: "account_session", ok: false, detail: "Session unavailable; run frely login." });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (options.mcp) {
|
|
32
|
+
try {
|
|
33
|
+
const authorization = await requireMcpAuthorization();
|
|
34
|
+
checks.push({ name: "mcp", ok: true, detail: `authorized until ${authorization.grant.expiresAt}` });
|
|
44
35
|
}
|
|
45
36
|
catch (error) {
|
|
46
|
-
checks.push({ name: "
|
|
47
|
-
checks.push({ name: "mcp_device", ok: false, detail: "unavailable until login is valid" });
|
|
37
|
+
checks.push({ name: "mcp", ok: false, detail: error instanceof Error ? error.message : "MCP authorization unavailable." });
|
|
48
38
|
}
|
|
49
39
|
}
|
|
50
40
|
else {
|
|
51
|
-
|
|
52
|
-
checks.push({ name: "
|
|
41
|
+
const metadata = await inspectMcpMetadata().catch(() => null);
|
|
42
|
+
checks.push({ name: "mcp", ok: true, detail: metadata ? "optional; use frely doctor --mcp for MCP checks" : "not enabled (optional)" });
|
|
53
43
|
}
|
|
54
|
-
const service = await serviceStatus().catch((error) => ({ installed: false, active: false, platform: process.platform, error: message(error) }));
|
|
55
|
-
checks.push({
|
|
56
|
-
name: "mcp_service",
|
|
57
|
-
ok: service.installed && service.active,
|
|
58
|
-
detail: "error" in service ? service.error : service.active ? `running${service.workspace ? ` workspace=${service.workspace}` : ""}` : service.installed ? "installed but stopped" : "not installed; run frely mcp setup",
|
|
59
|
-
});
|
|
60
44
|
return { ok: checks.every((check) => check.ok), checks };
|
|
61
45
|
}
|
|
62
|
-
function message(error) {
|
|
63
|
-
return error instanceof Error ? error.message : String(error);
|
|
64
|
-
}
|
|
65
46
|
//# sourceMappingURL=diagnostics.js.map
|
package/dist/diagnostics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { setupMcpAuthorization, requireMcpAuthorization, inspectMcpMetadata, revokeMcpAuthorization } from "./mcp-authorization.js";
|
|
3
|
+
import { McpLease } from "./runtime/mcp-lease.js";
|
|
2
4
|
import { resolve } from "node:path";
|
|
3
|
-
import {
|
|
5
|
+
import { stdout } from "node:process";
|
|
4
6
|
import { loginDevice, logout, requireLogin, whoami } from "./auth.js";
|
|
5
7
|
import { doctor, statusSnapshot } from "./diagnostics.js";
|
|
6
|
-
import {
|
|
8
|
+
import { ensureDevice } from "./device/control.js";
|
|
7
9
|
import { createLocalProviderToken, loadOrCreateDeviceIdentity } from "./device/identity.js";
|
|
8
10
|
import { serveDeviceRelay } from "./device/relay-client.js";
|
|
9
11
|
import { startStdioMcp } from "./runtime/mcp.js";
|
|
@@ -16,6 +18,10 @@ import { runNetwork, publicNetworkError } from "./network.js";
|
|
|
16
18
|
async function main() {
|
|
17
19
|
const args = process.argv.slice(2);
|
|
18
20
|
const command = args[0];
|
|
21
|
+
if (command === "mcp" && ["--help", "help", "-h"].includes(args[1] ?? ""))
|
|
22
|
+
return usage();
|
|
23
|
+
if (command === "mcp" && args.length === 1)
|
|
24
|
+
args.push("setup");
|
|
19
25
|
if (command === "--version" || command === "-v" || command === "version") {
|
|
20
26
|
stdout.write(`${VERSION}\n`);
|
|
21
27
|
return;
|
|
@@ -31,17 +37,12 @@ async function main() {
|
|
|
31
37
|
return;
|
|
32
38
|
}
|
|
33
39
|
if (command === "login") {
|
|
34
|
-
if (!stdin.isTTY || !stdout.isTTY)
|
|
35
|
-
throw new Error("`frely login` requires an interactive TTY.");
|
|
36
40
|
const relay = option(args, "--relay");
|
|
37
41
|
const result = await loginDevice(relay, ({ verificationUri, userCode }) => {
|
|
38
42
|
stdout.write(`Open this URL to authorize Frely CLI:\n${verificationUri}\n`);
|
|
39
43
|
stdout.write(`Device code: ${userCode}\nWaiting for approval...\n`);
|
|
40
44
|
});
|
|
41
45
|
const user = result.user;
|
|
42
|
-
const service = await serviceStatus().catch(() => null);
|
|
43
|
-
if (service?.installed && !service.active)
|
|
44
|
-
await startMcpService().catch(() => undefined);
|
|
45
46
|
stdout.write(`Logged in as ${user.email}.\n`);
|
|
46
47
|
stdout.write("Run `frely mcp setup --workspace <path>` to provision this machine and get the ChatGPT MCP address.\n");
|
|
47
48
|
return;
|
|
@@ -70,7 +71,7 @@ async function main() {
|
|
|
70
71
|
return;
|
|
71
72
|
}
|
|
72
73
|
if (command === "doctor") {
|
|
73
|
-
const value = await doctor();
|
|
74
|
+
const value = await doctor({ mcp: args.includes("--mcp") });
|
|
74
75
|
if (args.includes("--json"))
|
|
75
76
|
stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
76
77
|
else
|
|
@@ -150,54 +151,42 @@ async function main() {
|
|
|
150
151
|
stdout.write(`${provider.providerId} ${provider.driver} ${provider.name} ${provider.models.join(", ")}\n`);
|
|
151
152
|
return;
|
|
152
153
|
}
|
|
153
|
-
if (command === "mcp" && args[1] === "setup") {
|
|
154
|
-
await
|
|
155
|
-
const workspace =
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
stdout.write(`
|
|
161
|
-
stdout.write("
|
|
154
|
+
if (command === "mcp" && (args[1] === "setup" || args[1] === "renew")) {
|
|
155
|
+
const old = await inspectMcpMetadata();
|
|
156
|
+
const workspace = option(args, "--workspace") ?? (args[1] === "renew" ? old?.grant.workspace : undefined) ?? process.cwd();
|
|
157
|
+
const authorization = await setupMcpAuthorization(workspace, option(args, "--days"), args[1] === "renew", ({ verificationUri, keyThumbprint, days }) => {
|
|
158
|
+
stdout.write(`MCP remote execution authorization: ${days} days\nMCP key: ${keyThumbprint}\nApprove: ${verificationUri}\n`);
|
|
159
|
+
});
|
|
160
|
+
const service = await installMcpService(authorization.grant.workspace);
|
|
161
|
+
stdout.write(`MCP URL: ${authorization.mcpUrl}\nExpires: ${authorization.grant.expiresAt}\nBackground service: ${service.active ? "running" : "installed"}\n`);
|
|
162
|
+
stdout.write("MCP URL is stable. Configure the remote client with OAuth; renewal does not change the URL.\n");
|
|
162
163
|
return;
|
|
163
164
|
}
|
|
164
|
-
if (command === "mcp" && args[1] === "url") {
|
|
165
|
-
const
|
|
165
|
+
if (command === "mcp" && (args[1] === "url" || args[1] === "chatgpt")) {
|
|
166
|
+
const authorization = await requireMcpAuthorization();
|
|
167
|
+
const value = { deviceId: authorization.grant.deviceId, mcpUrl: authorization.mcpUrl, authentication: "oauth", expiresAt: authorization.grant.expiresAt };
|
|
166
168
|
if (args.includes("--json"))
|
|
167
|
-
stdout.write(`${JSON.stringify(
|
|
169
|
+
stdout.write(`${JSON.stringify(value)}\n`);
|
|
170
|
+
else if (args[1] === "chatgpt")
|
|
171
|
+
stdout.write(`MCP URL: ${authorization.mcpUrl}\nAuthentication: OAuth\n`);
|
|
168
172
|
else
|
|
169
|
-
stdout.write(`${
|
|
173
|
+
stdout.write(`${authorization.mcpUrl}\n`);
|
|
170
174
|
return;
|
|
171
175
|
}
|
|
172
176
|
if (command === "mcp" && args[1] === "status") {
|
|
173
|
-
await
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
stdout.write(`${JSON.stringify({ provisioned: Boolean(device), device: safeDevice }, null, 2)}\n`);
|
|
178
|
-
else if (!device)
|
|
179
|
-
stdout.write("MCP device is not provisioned. Run `frely mcp url`.\n");
|
|
180
|
-
else {
|
|
181
|
-
stdout.write(`Device: ${device.deviceId}\n`);
|
|
182
|
-
stdout.write("MCP URL: private; run `frely mcp url` to reveal it.\n");
|
|
183
|
-
stdout.write(`Key: ${device.keyThumbprint}\n`);
|
|
184
|
-
}
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
if (command === "mcp" && args[1] === "chatgpt") {
|
|
188
|
-
const device = await ensureDevice();
|
|
189
|
-
const service = await serviceStatus().catch(() => null);
|
|
190
|
-
stdout.write("Frely MCP for ChatGPT\n\n");
|
|
191
|
-
stdout.write(`MCP URL: ${device.mcpUrl}\n`);
|
|
192
|
-
stdout.write(`Background service: ${service?.active ? "running" : "not running"}\n\n`);
|
|
193
|
-
if (!service?.active)
|
|
194
|
-
stdout.write("Run `frely mcp setup --workspace <path>` before adding the server to ChatGPT.\n\n");
|
|
195
|
-
stdout.write("1. Add the MCP URL above as a custom MCP server in ChatGPT.\n");
|
|
196
|
-
stdout.write("2. Set MCP Authentication to None.\n");
|
|
197
|
-
stdout.write("3. Treat the full MCP URL as a private bearer credential and do not share it.\n");
|
|
177
|
+
const metadata = await inspectMcpMetadata();
|
|
178
|
+
const value = metadata ? { configured: true, deviceId: metadata.grant.deviceId, workspace: metadata.grant.workspace,
|
|
179
|
+
expiresAt: metadata.grant.expiresAt, expired: !metadata.grant.expiresAt || Date.parse(metadata.grant.expiresAt) <= Date.now() } : { configured: false };
|
|
180
|
+
stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
198
181
|
return;
|
|
199
182
|
}
|
|
200
183
|
if (command === "mcp" && args[1] === "serve") {
|
|
184
|
+
const serviceConfigHome = option(args, "--service-config-home");
|
|
185
|
+
const serviceCredentialStore = option(args, "--service-credential-store");
|
|
186
|
+
if (serviceConfigHome)
|
|
187
|
+
process.env.XDG_CONFIG_HOME = resolve(serviceConfigHome);
|
|
188
|
+
if (serviceCredentialStore)
|
|
189
|
+
process.env.FRELY_CREDENTIAL_STORE = serviceCredentialStore;
|
|
201
190
|
await requireLogin();
|
|
202
191
|
const providerOnly = args.includes("--provider-only");
|
|
203
192
|
const workspace = providerOnly ? undefined : resolve(option(args, "--workspace") || process.cwd());
|
|
@@ -246,15 +235,18 @@ async function main() {
|
|
|
246
235
|
throw new Error("Unknown MCP service action. Use status, start, stop, or uninstall.");
|
|
247
236
|
}
|
|
248
237
|
if (command === "mcp" && args[1] === "revoke") {
|
|
249
|
-
await
|
|
250
|
-
|
|
251
|
-
stdout.write("Frely MCP device revoked, local device key removed, and background service uninstalled.\n");
|
|
238
|
+
await revokeMcpAuthorization();
|
|
239
|
+
stdout.write("MCP execution authorization revoked. The Provider device and service were retained.\n");
|
|
252
240
|
return;
|
|
253
241
|
}
|
|
254
242
|
if (command === "mcp" && args[1] === "stdio") {
|
|
255
|
-
await requireLogin();
|
|
256
243
|
const workspace = resolve(option(args, "--workspace") || process.cwd());
|
|
257
|
-
await
|
|
244
|
+
const authorization = await requireMcpAuthorization(workspace);
|
|
245
|
+
const lease = new McpLease(authorization.grant.id, Date.parse(authorization.grant.expiresAt));
|
|
246
|
+
await startStdioMcp(workspace, { assertAuthorized: () => lease.assert(), signal: lease.controller.signal });
|
|
247
|
+
const verify = setInterval(() => { void requireMcpAuthorization(workspace).catch(() => lease.close()); }, 5000);
|
|
248
|
+
verify.unref?.();
|
|
249
|
+
lease.controller.signal.addEventListener("abort", () => clearInterval(verify), { once: true });
|
|
258
250
|
return;
|
|
259
251
|
}
|
|
260
252
|
usage();
|
|
@@ -276,11 +268,12 @@ function usage() {
|
|
|
276
268
|
" frely logout\n" +
|
|
277
269
|
" frely whoami\n" +
|
|
278
270
|
" frely status [--json]\n" +
|
|
279
|
-
" frely doctor [--json]\n" +
|
|
271
|
+
" frely doctor [--mcp] [--json]\n" +
|
|
280
272
|
" frely provider share [ollama|openai-compatible] [--url <loopback-v1-url>] [--models <a,b>] [--slot <slot-id>] [--name <name>]\n" +
|
|
281
273
|
" frely provider list [--json]\n" +
|
|
282
274
|
" frely provider finalize <provider-id>\n" +
|
|
283
|
-
" frely mcp setup [--workspace <path>]\n" +
|
|
275
|
+
" frely mcp [setup] [--workspace <path>] [--days 1..180]\n" +
|
|
276
|
+
" frely mcp renew [--days 1..180]\n" +
|
|
284
277
|
" frely mcp url [--json]\n" +
|
|
285
278
|
" frely mcp status [--json]\n" +
|
|
286
279
|
" frely mcp chatgpt\n" +
|
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":";AACA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACpI,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAS,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAiB,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACjJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC1I,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACzJ,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9D,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,KAAK,EAAE,CAAC;IAC1F,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,EAAE,CAAC;IAE/F,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;YACnE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxE,MAAM,CAAC,KAAK,CAAC,0CAA0C,eAAe,IAAI,CAAC,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,gBAAgB,QAAQ,6BAA6B,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,uGAAuG,CAAC,CAAC;QACtH,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;aAC5E,CAAC;YACJ,MAAM,CAAC,KAAK,CAAC,aAAa,OAAO,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,gBAAgB,IAAI,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,eAAe,IAAI,CAAC,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;QACtF,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;;YAC5E,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACtH,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACnC,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,mBAAmB;YAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACvI,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAClG,MAAM,OAAO,GAAG,8BAA8B,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1G,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;QAClN,MAAM,KAAK,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QACpL,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC;QAC5J,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC3I,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1G,MAAM,iBAAiB,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5K,MAAM,OAAO,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrG,IAAI,CAAC;YACH,MAAM,yBAAyB,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACjE,MAAM,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,UAAU,6DAA6D,QAAQ,CAAC,UAAU,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClM,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC7G,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5F,MAAM,yBAAyB,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACjE,MAAM,qBAAqB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,aAAa,UAAU,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACjD,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;aACpF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;;YAChG,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrJ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3H,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE;YACrJ,MAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,mBAAmB,aAAa,cAAc,eAAe,IAAI,CAAC,CAAC;QAC7H,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,MAAM,cAAc,aAAa,CAAC,KAAK,CAAC,SAAS,yBAAyB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;QAC/J,MAAM,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;QAC9G,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;QACtE,MAAM,aAAa,GAAG,MAAM,uBAAuB,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC1J,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACnE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,MAAM,2BAA2B,CAAC,CAAC;;YACrG,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS;YACjH,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC1J,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC7C,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QAChE,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QAC1E,IAAI,iBAAiB;YAAE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAChF,IAAI,sBAAsB;YAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QACxF,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACnG,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QACrJ,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACnC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC9E,CAAC;gBACJ,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBACjE,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC3D,IAAI,OAAO,CAAC,SAAS;oBAAE,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAAC,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/J,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAAC,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/J,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAAC,MAAM,mBAAmB,EAAE,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7H,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,sBAAsB,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAC;QACtG,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC,CAAC;QAC/F,MAAM,aAAa,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,uBAAuB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACjB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/F,OAAO;IACT,CAAC;IAED,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,MAAM,CAAC,IAAc,EAAE,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK;IACZ,MAAM,CAAC,KAAK,CACV,UAAU;QACV,yDAAyD;QACzD,iCAAiC;QACjC,kBAAkB;QAClB,kBAAkB;QAClB,2BAA2B;QAC3B,mCAAmC;QACnC,mIAAmI;QACnI,kCAAkC;QAClC,2CAA2C;QAC3C,4DAA4D;QAC5D,qCAAqC;QACrC,4BAA4B;QAC5B,+BAA+B;QAC/B,uBAAuB;QACvB,0CAA0C;QAC1C,4DAA4D;QAC5D,sBAAsB;QACtB,0CAA0C,CAC3C,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;;QACxI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IAC1C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const MCP_DEFAULT_DAYS = 90;
|
|
2
|
+
export declare const MCP_MAX_DAYS = 180;
|
|
3
|
+
export interface McpAuthorizationView {
|
|
4
|
+
id: string;
|
|
5
|
+
deviceId: string;
|
|
6
|
+
keyThumbprint: string;
|
|
7
|
+
workspace: string;
|
|
8
|
+
days: number;
|
|
9
|
+
approvalDeadline: string;
|
|
10
|
+
approvedAt: string | null;
|
|
11
|
+
expiresAt: string | null;
|
|
12
|
+
status: "pending" | "active" | "expired" | "revoked";
|
|
13
|
+
}
|
|
14
|
+
export interface McpMetadata {
|
|
15
|
+
version: 1;
|
|
16
|
+
relayUrl: string;
|
|
17
|
+
mcpResource: string;
|
|
18
|
+
userId: string;
|
|
19
|
+
grant: McpAuthorizationView;
|
|
20
|
+
}
|
|
21
|
+
export interface McpAuthorization extends McpMetadata {
|
|
22
|
+
mcpUrl: string;
|
|
23
|
+
sign(message: string): string;
|
|
24
|
+
}
|
|
25
|
+
export declare function parseMcpDays(input?: string | number): number;
|
|
26
|
+
export declare function mcpMetadataPath(): string;
|
|
27
|
+
export declare function inspectMcpMetadata(): Promise<McpMetadata | null>;
|
|
28
|
+
export declare function loadMcpAuthorization(): Promise<McpAuthorization | null>;
|
|
29
|
+
export declare function requireMcpAuthorization(workspace?: string): Promise<McpAuthorization>;
|
|
30
|
+
export declare function setupMcpAuthorization(workspaceInput: string, daysInput?: string | number, renew?: boolean, notify?: (value: {
|
|
31
|
+
verificationUri: string;
|
|
32
|
+
keyThumbprint: string;
|
|
33
|
+
days: number;
|
|
34
|
+
}) => void | Promise<void>): Promise<McpAuthorization>;
|
|
35
|
+
export declare function revokeMcpAuthorization(): Promise<void>;
|
|
36
|
+
export declare function assertMcpActive(view: McpAuthorizationView, now?: number): void;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { generateKeyPairSync, randomBytes, randomUUID } from "node:crypto";
|
|
2
|
+
import { realpath, unlink } from "node:fs/promises";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { requireLogin, openVerificationUrl } from "./auth.js";
|
|
6
|
+
import { credentialStore } from "./credential-store.js";
|
|
7
|
+
import { ensureCredentialDirectory, readPrivateFile, writePrivateFile } from "./credential-file.js";
|
|
8
|
+
import { ensureDevice, relayFetch } from "./device/control.js";
|
|
9
|
+
import { identityFromPrivateKey } from "./device/identity.js";
|
|
10
|
+
export const MCP_DEFAULT_DAYS = 90;
|
|
11
|
+
export const MCP_MAX_DAYS = 180;
|
|
12
|
+
const SERVICE = "frely-cli-mcp-authorization-v1";
|
|
13
|
+
const ENDPOINT = "/api/user/device-relay/mcp";
|
|
14
|
+
export function parseMcpDays(input) {
|
|
15
|
+
const value = input === undefined ? MCP_DEFAULT_DAYS : typeof input === "string" && /^\d{1,3}$/u.test(input) ? Number(input) : input;
|
|
16
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1 || value > MCP_MAX_DAYS)
|
|
17
|
+
throw new Error("MCP authorization must be 1 to 180 whole days.");
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
export function mcpMetadataPath() { return join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "frely", "mcp-v1", "authorization.json"); }
|
|
21
|
+
export async function inspectMcpMetadata() {
|
|
22
|
+
const raw = await readPrivateFile(mcpMetadataPath());
|
|
23
|
+
if (!raw)
|
|
24
|
+
return null;
|
|
25
|
+
const value = JSON.parse(raw);
|
|
26
|
+
if (value.version !== 1 || typeof value.relayUrl !== "string" || typeof value.mcpResource !== "string" || typeof value.userId !== "string")
|
|
27
|
+
throw new Error("MCP configuration is invalid.");
|
|
28
|
+
value.grant = validateView(value.grant);
|
|
29
|
+
value.mcpResource = validateMcpResource(value.mcpResource, value.grant.deviceId);
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
async function writeMetadata(metadata) {
|
|
33
|
+
const path = mcpMetadataPath();
|
|
34
|
+
await ensureCredentialDirectory(dirname(path), true);
|
|
35
|
+
await writePrivateFile(path, JSON.stringify(metadata) + "\n");
|
|
36
|
+
}
|
|
37
|
+
const account = (metadata) => `${new URL(metadata.relayUrl).origin}|${metadata.userId}|${metadata.grant.id}`;
|
|
38
|
+
export async function loadMcpAuthorization() {
|
|
39
|
+
const metadata = await inspectMcpMetadata();
|
|
40
|
+
if (!metadata)
|
|
41
|
+
return null;
|
|
42
|
+
const raw = await credentialStore.getPassword(SERVICE, account(metadata));
|
|
43
|
+
if (!raw)
|
|
44
|
+
throw new Error("MCP secure credential is unavailable. Run frely mcp renew; no replacement key was generated.");
|
|
45
|
+
const value = JSON.parse(raw);
|
|
46
|
+
if (value.version !== 1 || JSON.stringify(value.metadata) !== JSON.stringify(metadata) || typeof value.privateKeyPem !== "string")
|
|
47
|
+
throw new Error("MCP credential does not match its authorization.");
|
|
48
|
+
const identity = identityFromPrivateKey(value.privateKeyPem);
|
|
49
|
+
if (identity.keyThumbprint !== metadata.grant.keyThumbprint)
|
|
50
|
+
throw new Error("MCP private key does not match its authorization.");
|
|
51
|
+
return { ...metadata, mcpUrl: metadata.mcpResource, sign: (message) => identity.signMessage(message) };
|
|
52
|
+
}
|
|
53
|
+
export async function requireMcpAuthorization(workspace) {
|
|
54
|
+
const authorization = await loadMcpAuthorization();
|
|
55
|
+
if (!authorization)
|
|
56
|
+
throw new Error("MCP is not enabled. Run frely mcp setup.");
|
|
57
|
+
assertMcpActive(authorization.grant);
|
|
58
|
+
if (workspace !== undefined && await realpath(resolve(workspace)) !== authorization.grant.workspace)
|
|
59
|
+
throw new Error("Workspace differs from the approved MCP workspace. Run frely mcp setup for the new workspace.");
|
|
60
|
+
const auth = await requireLogin();
|
|
61
|
+
if (authorization.relayUrl !== auth.config.relayUrl || authorization.userId !== auth.user.id)
|
|
62
|
+
throw new Error("MCP authorization belongs to a different account.");
|
|
63
|
+
const response = await relayFetch(auth.config.relayUrl, auth.credential, `${ENDPOINT}?requestId=${authorization.grant.id}`, { method: "GET" });
|
|
64
|
+
const current = await readView(response);
|
|
65
|
+
assertMcpActive(current);
|
|
66
|
+
if (JSON.stringify(current) !== JSON.stringify(authorization.grant))
|
|
67
|
+
throw new Error("MCP authorization changed. Run frely mcp renew.");
|
|
68
|
+
return authorization;
|
|
69
|
+
}
|
|
70
|
+
export async function setupMcpAuthorization(workspaceInput, daysInput, renew = false, notify) {
|
|
71
|
+
const days = parseMcpDays(daysInput);
|
|
72
|
+
const workspace = await realpath(resolve(workspaceInput));
|
|
73
|
+
if (/[\x00-\x1f\x7f]/u.test(workspace))
|
|
74
|
+
throw new Error("MCP workspace contains control characters.");
|
|
75
|
+
const auth = await requireLogin();
|
|
76
|
+
const old = await inspectMcpMetadata();
|
|
77
|
+
if (!renew && old?.relayUrl === auth.config.relayUrl && old.userId === auth.user.id && old.grant.workspace === workspace
|
|
78
|
+
&& old.grant.status === "active" && Date.parse(old.grant.expiresAt ?? "") > Date.now())
|
|
79
|
+
return requireMcpAuthorization(workspace);
|
|
80
|
+
// Secure storage belongs to MCP setup, not basic login, status, Network or installation.
|
|
81
|
+
const probe = "probe:" + randomUUID();
|
|
82
|
+
await credentialStore.setPassword(SERVICE, probe, probe);
|
|
83
|
+
try {
|
|
84
|
+
if (await credentialStore.getPassword(SERVICE, probe) !== probe)
|
|
85
|
+
throw new Error("MCP secure storage readback failed.");
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
if (!await credentialStore.deletePassword(SERVICE, probe))
|
|
89
|
+
throw new Error("MCP secure storage deletion failed.");
|
|
90
|
+
}
|
|
91
|
+
const device = await ensureDevice();
|
|
92
|
+
const privateKeyPem = generateKeyPairSync("ed25519").privateKey.export({ type: "pkcs8", format: "pem" }).toString();
|
|
93
|
+
const identity = identityFromPrivateKey(privateKeyPem);
|
|
94
|
+
const issuedAt = new Date().toISOString();
|
|
95
|
+
const nonce = randomBytes(24).toString("base64url");
|
|
96
|
+
const signature = identity.signMessage(JSON.stringify(["frely.mcp.request.v2", device.deviceId, identity.keyThumbprint, days, workspace, issuedAt, nonce]));
|
|
97
|
+
const response = await relayFetch(auth.config.relayUrl, auth.credential, ENDPOINT, { method: "POST", body: JSON.stringify({ action: "request",
|
|
98
|
+
deviceId: device.deviceId, publicKeySpki: identity.publicKeySpki, keyThumbprint: identity.keyThumbprint,
|
|
99
|
+
days, workspace, issuedAt, nonce, signature }) });
|
|
100
|
+
const requested = await readRequest(response);
|
|
101
|
+
const pending = requested.grant;
|
|
102
|
+
if (pending.status !== "pending" || pending.days !== days || pending.workspace !== workspace || pending.deviceId !== device.deviceId || pending.keyThumbprint !== identity.keyThumbprint)
|
|
103
|
+
throw new Error("MCP approval response does not match this request.");
|
|
104
|
+
let metadata = { version: 1, relayUrl: auth.config.relayUrl, mcpResource: requested.mcpResource, userId: auth.user.id, grant: pending };
|
|
105
|
+
const save = () => credentialStore.setPassword(SERVICE, account(metadata), JSON.stringify({ version: 1, privateKeyPem, metadata }));
|
|
106
|
+
await save(); // Preserve the generated key before asking the user to approve it.
|
|
107
|
+
const verificationUri = new URL(`/device?mcp_request=${pending.id}`, auth.config.relayUrl).toString();
|
|
108
|
+
await notify?.({ verificationUri, keyThumbprint: identity.keyThumbprint, days });
|
|
109
|
+
openVerificationUrl(verificationUri);
|
|
110
|
+
while (Date.now() < Date.parse(pending.approvalDeadline)) {
|
|
111
|
+
const result = await relayFetch(auth.config.relayUrl, auth.credential, `${ENDPOINT}?requestId=${pending.id}`, { method: "GET" });
|
|
112
|
+
const current = await readView(result);
|
|
113
|
+
if (current.id !== pending.id || current.deviceId !== device.deviceId || current.keyThumbprint !== identity.keyThumbprint || current.workspace !== workspace || current.days !== days)
|
|
114
|
+
throw new Error("MCP authorization binding changed.");
|
|
115
|
+
if (current.status === "active") {
|
|
116
|
+
metadata = { ...metadata, grant: current };
|
|
117
|
+
await save();
|
|
118
|
+
await writeMetadata(metadata);
|
|
119
|
+
if (old && old.grant.id !== current.id)
|
|
120
|
+
await credentialStore.deletePassword(SERVICE, account(old));
|
|
121
|
+
const enabled = await loadMcpAuthorization();
|
|
122
|
+
if (!enabled)
|
|
123
|
+
throw new Error("MCP authorization could not be loaded.");
|
|
124
|
+
return enabled;
|
|
125
|
+
}
|
|
126
|
+
if (current.status !== "pending")
|
|
127
|
+
throw new Error("MCP approval was denied or expired.");
|
|
128
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
129
|
+
}
|
|
130
|
+
throw new Error("MCP approval expired. Run frely mcp setup.");
|
|
131
|
+
}
|
|
132
|
+
export async function revokeMcpAuthorization() {
|
|
133
|
+
const metadata = await inspectMcpMetadata();
|
|
134
|
+
if (!metadata)
|
|
135
|
+
return;
|
|
136
|
+
const auth = await requireLogin();
|
|
137
|
+
if (metadata.relayUrl !== auth.config.relayUrl || metadata.userId !== auth.user.id)
|
|
138
|
+
throw new Error("MCP authorization belongs to another account.");
|
|
139
|
+
const response = await relayFetch(auth.config.relayUrl, auth.credential, ENDPOINT, { method: "POST", body: JSON.stringify({ action: "revoke", requestId: metadata.grant.id }) });
|
|
140
|
+
if (!response.ok)
|
|
141
|
+
throw new Error("Remote MCP revocation was not confirmed.");
|
|
142
|
+
// Retain metadata on cleanup failure so status/cleanup remain possible.
|
|
143
|
+
await credentialStore.deletePassword(SERVICE, account(metadata));
|
|
144
|
+
await unlink(mcpMetadataPath());
|
|
145
|
+
}
|
|
146
|
+
export function assertMcpActive(view, now = Date.now()) {
|
|
147
|
+
if (view.status !== "active" || !view.expiresAt || !Number.isFinite(Date.parse(view.expiresAt)) || Date.parse(view.expiresAt) <= now) {
|
|
148
|
+
throw new Error("MCP_AUTHORIZATION_EXPIRED: run frely mcp renew. Basic features remain available.");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function validateView(input) {
|
|
152
|
+
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
153
|
+
throw new Error("MCP authorization response is invalid.");
|
|
154
|
+
const value = input;
|
|
155
|
+
if (!/^mca_[a-f0-9]{32}$/u.test(value.id) || !/^drd_[a-f0-9]{32}$/u.test(value.deviceId) || typeof value.workspace !== "string"
|
|
156
|
+
|| !/^[A-Za-z0-9_-]{43}$/u.test(value.keyThumbprint) || !["pending", "active", "expired", "revoked"].includes(value.status)
|
|
157
|
+
|| !Number.isFinite(Date.parse(value.approvalDeadline)))
|
|
158
|
+
throw new Error("MCP authorization response is invalid.");
|
|
159
|
+
parseMcpDays(value.days);
|
|
160
|
+
if (value.approvedAt !== null || value.expiresAt !== null) {
|
|
161
|
+
if (typeof value.approvedAt !== "string" || typeof value.expiresAt !== "string"
|
|
162
|
+
|| Date.parse(value.expiresAt) - Date.parse(value.approvedAt) !== value.days * 86_400_000)
|
|
163
|
+
throw new Error("MCP authorization dates are invalid.");
|
|
164
|
+
}
|
|
165
|
+
return { id: value.id, deviceId: value.deviceId, workspace: value.workspace, keyThumbprint: value.keyThumbprint,
|
|
166
|
+
days: value.days, approvalDeadline: value.approvalDeadline, approvedAt: value.approvedAt, expiresAt: value.expiresAt, status: value.status };
|
|
167
|
+
}
|
|
168
|
+
function validateMcpResource(input, deviceId) {
|
|
169
|
+
if (typeof input !== "string" || input.length > 4096)
|
|
170
|
+
throw new Error("MCP resource URL is invalid.");
|
|
171
|
+
let url;
|
|
172
|
+
try {
|
|
173
|
+
url = new URL(input);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
throw new Error("MCP resource URL is invalid.");
|
|
177
|
+
}
|
|
178
|
+
const loopbackHttp = url.protocol === "http:" && ["127.0.0.1", "localhost", "::1"].includes(url.hostname);
|
|
179
|
+
if ((url.protocol !== "https:" && !loopbackHttp) || url.username || url.password || url.search || url.hash || url.pathname !== `/mcp/${deviceId}`) {
|
|
180
|
+
throw new Error("MCP resource URL is invalid.");
|
|
181
|
+
}
|
|
182
|
+
return url.toString();
|
|
183
|
+
}
|
|
184
|
+
async function readRequest(response) {
|
|
185
|
+
if (!response.ok)
|
|
186
|
+
throw new Error(`MCP authorization request failed (HTTP ${response.status}).`);
|
|
187
|
+
const payload = await response.json();
|
|
188
|
+
const grant = validateView(payload);
|
|
189
|
+
const record = payload;
|
|
190
|
+
return { grant, mcpResource: validateMcpResource(record.mcpResource, grant.deviceId) };
|
|
191
|
+
}
|
|
192
|
+
async function readView(response) {
|
|
193
|
+
if (!response.ok)
|
|
194
|
+
throw new Error(`MCP authorization request failed (HTTP ${response.status}).`);
|
|
195
|
+
return validateView(await response.json());
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=mcp-authorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-authorization.js","sourceRoot":"","sources":["../src/mcp-authorization.ts"],"names":[],"mappings":"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"}
|