@schuttdev/kon 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +57 -22
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -341,7 +341,7 @@ function createHttpClient(serverUrl, sessionToken) {
|
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
// ../cli/src/version.ts
|
|
344
|
-
var VERSION = "0.3.
|
|
344
|
+
var VERSION = "0.3.4";
|
|
345
345
|
|
|
346
346
|
// ../cli/src/connect.ts
|
|
347
347
|
async function connect(serverName) {
|
|
@@ -363,21 +363,24 @@ async function connect(serverName) {
|
|
|
363
363
|
const { name, entry } = active;
|
|
364
364
|
if (entry.sessionToken && entry.sessionExpiresAt) {
|
|
365
365
|
if (Date.now() < entry.sessionExpiresAt - 5 * 60 * 1e3) {
|
|
366
|
-
await checkAndUpdateServer(entry.server, entry.sessionToken);
|
|
367
|
-
return { serverUrl: entry.server, sessionToken:
|
|
366
|
+
const token = await checkAndUpdateServer(entry.server, entry.sessionToken, name, entry.token);
|
|
367
|
+
return { serverUrl: entry.server, sessionToken: token };
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
|
+
return refreshSession(name, entry.server, entry.token);
|
|
371
|
+
}
|
|
372
|
+
async function refreshSession(serverName, serverUrl, encryptedToken) {
|
|
370
373
|
const orgUuid = getOrgUUID();
|
|
371
|
-
const http = createHttpClient(
|
|
374
|
+
const http = createHttpClient(serverUrl);
|
|
372
375
|
const res = await http.post("/auth/connect", {
|
|
373
|
-
encryptedToken
|
|
376
|
+
encryptedToken,
|
|
374
377
|
orgUuid
|
|
375
378
|
});
|
|
376
|
-
await updateServerSession(
|
|
377
|
-
await checkAndUpdateServer(
|
|
378
|
-
return { serverUrl
|
|
379
|
+
await updateServerSession(serverName, res.sessionToken, res.expiresAt);
|
|
380
|
+
const token = await checkAndUpdateServer(serverUrl, res.sessionToken, serverName, encryptedToken);
|
|
381
|
+
return { serverUrl, sessionToken: token };
|
|
379
382
|
}
|
|
380
|
-
async function checkAndUpdateServer(serverUrl, sessionToken) {
|
|
383
|
+
async function checkAndUpdateServer(serverUrl, sessionToken, serverName, encryptedToken) {
|
|
381
384
|
try {
|
|
382
385
|
const http = createHttpClient(serverUrl);
|
|
383
386
|
const health = await http.get("/health");
|
|
@@ -400,12 +403,23 @@ async function checkAndUpdateServer(serverUrl, sessionToken) {
|
|
|
400
403
|
console.log("Server updated and restarting.");
|
|
401
404
|
await waitForServer(serverUrl, 15e3);
|
|
402
405
|
console.log("Server is back online.");
|
|
406
|
+
if (serverName && encryptedToken) {
|
|
407
|
+
const orgUuid = getOrgUUID();
|
|
408
|
+
const unauthHttp = createHttpClient(serverUrl);
|
|
409
|
+
const connectRes = await unauthHttp.post("/auth/connect", {
|
|
410
|
+
encryptedToken,
|
|
411
|
+
orgUuid
|
|
412
|
+
});
|
|
413
|
+
await updateServerSession(serverName, connectRes.sessionToken, connectRes.expiresAt);
|
|
414
|
+
return connectRes.sessionToken;
|
|
415
|
+
}
|
|
403
416
|
} else {
|
|
404
417
|
console.log(`Server update failed: ${res.error ?? "unknown error"}`);
|
|
405
418
|
}
|
|
406
419
|
}
|
|
407
420
|
} catch {
|
|
408
421
|
}
|
|
422
|
+
return sessionToken;
|
|
409
423
|
}
|
|
410
424
|
async function waitForServer(serverUrl, timeoutMs) {
|
|
411
425
|
const start = Date.now();
|
|
@@ -1015,22 +1029,43 @@ if (firstArg && !firstArg.startsWith("-") && !KNOWN_COMMANDS.has(firstArg)) {
|
|
|
1015
1029
|
const toolName = firstArg;
|
|
1016
1030
|
const toolArgs = process.argv.slice(3);
|
|
1017
1031
|
try {
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
const
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1032
|
+
let { serverUrl, sessionToken } = await connect();
|
|
1033
|
+
let http = createHttpClient(serverUrl, sessionToken);
|
|
1034
|
+
const runTool = async () => {
|
|
1035
|
+
const { tool: detail } = await fetchToolDetail(http, toolName);
|
|
1036
|
+
if (detail.type === "mcp") {
|
|
1037
|
+
const mcpToolName = toolArgs[0];
|
|
1038
|
+
if (!mcpToolName) {
|
|
1039
|
+
const toolNames = (detail.mcpTools ?? []).map((t) => ` ${t.name} \u2014 ${t.description}`);
|
|
1040
|
+
console.log(`MCP tools for ${toolName}:
|
|
1026
1041
|
${toolNames.join("\n")}`);
|
|
1042
|
+
} else {
|
|
1043
|
+
const jsonArg = toolArgs.slice(1).join(" ");
|
|
1044
|
+
const args = jsonArg ? JSON.parse(jsonArg) : {};
|
|
1045
|
+
await execMcpTool(http, toolName, mcpToolName, args);
|
|
1046
|
+
}
|
|
1047
|
+
} else {
|
|
1048
|
+
await execTool(http, toolName, toolArgs);
|
|
1049
|
+
}
|
|
1050
|
+
};
|
|
1051
|
+
try {
|
|
1052
|
+
await runTool();
|
|
1053
|
+
} catch (e) {
|
|
1054
|
+
const msg = e.message;
|
|
1055
|
+
if (msg.includes("Invalid session") || msg.includes("Session expired") || msg.includes("Authorization")) {
|
|
1056
|
+
const config = await readConfig();
|
|
1057
|
+
const active = getActiveEntry(config);
|
|
1058
|
+
if (active) {
|
|
1059
|
+
const refreshed = await refreshSession(active.name, active.entry.server, active.entry.token);
|
|
1060
|
+
sessionToken = refreshed.sessionToken;
|
|
1061
|
+
http = createHttpClient(serverUrl, sessionToken);
|
|
1062
|
+
await runTool();
|
|
1063
|
+
} else {
|
|
1064
|
+
throw e;
|
|
1065
|
+
}
|
|
1027
1066
|
} else {
|
|
1028
|
-
|
|
1029
|
-
const args = jsonArg ? JSON.parse(jsonArg) : {};
|
|
1030
|
-
await execMcpTool(http, toolName, mcpToolName, args);
|
|
1067
|
+
throw e;
|
|
1031
1068
|
}
|
|
1032
|
-
} else {
|
|
1033
|
-
await execTool(http, toolName, toolArgs);
|
|
1034
1069
|
}
|
|
1035
1070
|
} catch (e) {
|
|
1036
1071
|
console.error(`Error: ${e.message}`);
|