@trops/dash-core 0.1.77 → 0.1.79
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/electron/index.js
CHANGED
|
@@ -4838,6 +4838,8 @@ const layoutController$1 = {
|
|
|
4838
4838
|
|
|
4839
4839
|
var layoutController_1 = layoutController$1;
|
|
4840
4840
|
|
|
4841
|
+
var mcpController$3 = {exports: {}};
|
|
4842
|
+
|
|
4841
4843
|
/**
|
|
4842
4844
|
* mcpController.js
|
|
4843
4845
|
*
|
|
@@ -5030,6 +5032,101 @@ function interpolate(template, credentials) {
|
|
|
5030
5032
|
});
|
|
5031
5033
|
}
|
|
5032
5034
|
|
|
5035
|
+
/**
|
|
5036
|
+
* Refresh a Google OAuth access token before starting the MCP server.
|
|
5037
|
+
* This sidesteps the upstream bug where `new google.auth.OAuth2()` is called
|
|
5038
|
+
* without client_id/client_secret, preventing token refresh.
|
|
5039
|
+
*
|
|
5040
|
+
* Uses only Node built-in `https` — no external dependencies.
|
|
5041
|
+
*
|
|
5042
|
+
* @param {object} tokenRefresh { credentialsPath, oauthKeysPath }
|
|
5043
|
+
*/
|
|
5044
|
+
async function refreshGoogleOAuthToken(tokenRefresh) {
|
|
5045
|
+
const home = process.env.HOME || "";
|
|
5046
|
+
const credPath = tokenRefresh.credentialsPath.replace(/^~/, home);
|
|
5047
|
+
const keysPath = tokenRefresh.oauthKeysPath.replace(/^~/, home);
|
|
5048
|
+
|
|
5049
|
+
if (!fs$5.existsSync(credPath) || !fs$5.existsSync(keysPath)) {
|
|
5050
|
+
console.log(
|
|
5051
|
+
"[mcpController] Token refresh skipped: credential files not found",
|
|
5052
|
+
);
|
|
5053
|
+
return;
|
|
5054
|
+
}
|
|
5055
|
+
|
|
5056
|
+
const credentials = JSON.parse(fs$5.readFileSync(credPath, "utf8"));
|
|
5057
|
+
const keysFile = JSON.parse(fs$5.readFileSync(keysPath, "utf8"));
|
|
5058
|
+
const keyData = keysFile.installed || keysFile.web;
|
|
5059
|
+
|
|
5060
|
+
if (
|
|
5061
|
+
!credentials.refresh_token ||
|
|
5062
|
+
!keyData?.client_id ||
|
|
5063
|
+
!keyData?.client_secret
|
|
5064
|
+
) {
|
|
5065
|
+
console.log(
|
|
5066
|
+
"[mcpController] Token refresh skipped: missing refresh_token or client credentials",
|
|
5067
|
+
);
|
|
5068
|
+
return;
|
|
5069
|
+
}
|
|
5070
|
+
|
|
5071
|
+
// Skip if token is still valid (expiry > 5 minutes from now)
|
|
5072
|
+
if (
|
|
5073
|
+
credentials.expiry_date &&
|
|
5074
|
+
credentials.expiry_date > Date.now() + 5 * 60 * 1000
|
|
5075
|
+
) {
|
|
5076
|
+
console.log("[mcpController] Token still valid, skipping refresh");
|
|
5077
|
+
return;
|
|
5078
|
+
}
|
|
5079
|
+
|
|
5080
|
+
console.log("[mcpController] Refreshing Google OAuth token...");
|
|
5081
|
+
|
|
5082
|
+
const https = require$$8;
|
|
5083
|
+
const postData = [
|
|
5084
|
+
`client_id=${encodeURIComponent(keyData.client_id)}`,
|
|
5085
|
+
`client_secret=${encodeURIComponent(keyData.client_secret)}`,
|
|
5086
|
+
`refresh_token=${encodeURIComponent(credentials.refresh_token)}`,
|
|
5087
|
+
"grant_type=refresh_token",
|
|
5088
|
+
].join("&");
|
|
5089
|
+
|
|
5090
|
+
const body = await new Promise((resolve, reject) => {
|
|
5091
|
+
const req = https.request(
|
|
5092
|
+
{
|
|
5093
|
+
hostname: "oauth2.googleapis.com",
|
|
5094
|
+
path: "/token",
|
|
5095
|
+
method: "POST",
|
|
5096
|
+
headers: {
|
|
5097
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
5098
|
+
"Content-Length": Buffer.byteLength(postData),
|
|
5099
|
+
},
|
|
5100
|
+
},
|
|
5101
|
+
(res) => {
|
|
5102
|
+
let data = "";
|
|
5103
|
+
res.on("data", (chunk) => (data += chunk));
|
|
5104
|
+
res.on("end", () => {
|
|
5105
|
+
if (res.statusCode === 200) {
|
|
5106
|
+
resolve(JSON.parse(data));
|
|
5107
|
+
} else {
|
|
5108
|
+
reject(
|
|
5109
|
+
new Error(`Token refresh failed (${res.statusCode}): ${data}`),
|
|
5110
|
+
);
|
|
5111
|
+
}
|
|
5112
|
+
});
|
|
5113
|
+
},
|
|
5114
|
+
);
|
|
5115
|
+
req.on("error", reject);
|
|
5116
|
+
req.write(postData);
|
|
5117
|
+
req.end();
|
|
5118
|
+
});
|
|
5119
|
+
|
|
5120
|
+
credentials.access_token = body.access_token;
|
|
5121
|
+
credentials.expiry_date = Date.now() + (body.expires_in || 3600) * 1000;
|
|
5122
|
+
if (body.refresh_token) {
|
|
5123
|
+
credentials.refresh_token = body.refresh_token;
|
|
5124
|
+
}
|
|
5125
|
+
|
|
5126
|
+
fs$5.writeFileSync(credPath, JSON.stringify(credentials, null, 2));
|
|
5127
|
+
console.log("[mcpController] Google OAuth token refreshed successfully");
|
|
5128
|
+
}
|
|
5129
|
+
|
|
5033
5130
|
const mcpController$2 = {
|
|
5034
5131
|
/**
|
|
5035
5132
|
* startServer
|
|
@@ -5121,6 +5218,18 @@ const mcpController$2 = {
|
|
|
5121
5218
|
});
|
|
5122
5219
|
}
|
|
5123
5220
|
|
|
5221
|
+
// Pre-start token refresh (e.g., Google OAuth)
|
|
5222
|
+
if (mcpConfig.tokenRefresh) {
|
|
5223
|
+
try {
|
|
5224
|
+
await refreshGoogleOAuthToken(mcpConfig.tokenRefresh);
|
|
5225
|
+
} catch (err) {
|
|
5226
|
+
console.warn(
|
|
5227
|
+
"[mcpController] Token refresh failed, continuing:",
|
|
5228
|
+
err.message,
|
|
5229
|
+
);
|
|
5230
|
+
}
|
|
5231
|
+
}
|
|
5232
|
+
|
|
5124
5233
|
// Build args - start with static args, then append dynamic args from credentials
|
|
5125
5234
|
const args = [...(mcpConfig.args || [])];
|
|
5126
5235
|
if (mcpConfig.argsMapping && credentials) {
|
|
@@ -5146,7 +5255,10 @@ const mcpController$2 = {
|
|
|
5146
5255
|
// Interpolate {{MCP_DIR}} in args to resolve local MCP server scripts
|
|
5147
5256
|
const mcpDir = path$6.join(__dirname, "..", "mcp");
|
|
5148
5257
|
for (let i = 0; i < args.length; i++) {
|
|
5149
|
-
if (
|
|
5258
|
+
if (
|
|
5259
|
+
typeof args[i] === "string" &&
|
|
5260
|
+
args[i].includes("{{MCP_DIR}}")
|
|
5261
|
+
) {
|
|
5150
5262
|
args[i] = args[i].replace(/\{\{MCP_DIR\}\}/g, mcpDir);
|
|
5151
5263
|
}
|
|
5152
5264
|
}
|
|
@@ -5699,7 +5811,10 @@ const mcpController$2 = {
|
|
|
5699
5811
|
},
|
|
5700
5812
|
};
|
|
5701
5813
|
|
|
5702
|
-
|
|
5814
|
+
mcpController$3.exports = mcpController$2;
|
|
5815
|
+
mcpController$3.exports.refreshGoogleOAuthToken = refreshGoogleOAuthToken;
|
|
5816
|
+
|
|
5817
|
+
var mcpControllerExports = mcpController$3.exports;
|
|
5703
5818
|
|
|
5704
5819
|
/**
|
|
5705
5820
|
* registryController.js
|
|
@@ -7070,7 +7185,7 @@ var cliController_1 = cliController$2;
|
|
|
7070
7185
|
*/
|
|
7071
7186
|
|
|
7072
7187
|
const Anthropic = require$$0$4;
|
|
7073
|
-
const mcpController$1 =
|
|
7188
|
+
const mcpController$1 = mcpControllerExports;
|
|
7074
7189
|
const cliController$1 = cliController_1;
|
|
7075
7190
|
const {
|
|
7076
7191
|
LLM_STREAM_DELTA: LLM_STREAM_DELTA$1,
|
|
@@ -10363,7 +10478,7 @@ const dataController = dataController_1;
|
|
|
10363
10478
|
const settingsController = settingsController_1;
|
|
10364
10479
|
const providerController = requireProviderController();
|
|
10365
10480
|
const layoutController = layoutController_1;
|
|
10366
|
-
const mcpController =
|
|
10481
|
+
const mcpController = mcpControllerExports;
|
|
10367
10482
|
const registryController = registryController$1;
|
|
10368
10483
|
const algoliaController = algoliaController_1;
|
|
10369
10484
|
const openaiController = openaiController_1;
|