@usex/mikrotik-mcp 3.45.0 → 3.46.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/dist/cli.js CHANGED
@@ -1134,7 +1134,7 @@ function computeStats(events, opts) {
1134
1134
  // package.json
1135
1135
  var package_default = {
1136
1136
  name: "@usex/mikrotik-mcp",
1137
- version: "3.45.0",
1137
+ version: "3.46.0",
1138
1138
  description: "MCP server for MikroTik RouterOS \u2014 660+ tools over SSH for firewall, NAT, routing, DHCP, DNS, WireGuard, wireless, QoS and more.",
1139
1139
  keywords: [
1140
1140
  "ai",
@@ -1274,6 +1274,44 @@ var SERVER_NAME = "mcp-mikrotik";
1274
1274
 
1275
1275
  // src/observability/dashboard.ts
1276
1276
  var SERVER_TAG2 = "mikrotik-mcp";
1277
+ var releaseCache = null;
1278
+ var RELEASE_CACHE_TTL = 15 * 60 * 1000;
1279
+ function compareVersions(a, b) {
1280
+ const pa = a.replace(/^v/, "").split(".").map(Number);
1281
+ const pb = b.replace(/^v/, "").split(".").map(Number);
1282
+ for (let i = 0;i < Math.max(pa.length, pb.length); i++) {
1283
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
1284
+ if (diff !== 0)
1285
+ return diff;
1286
+ }
1287
+ return 0;
1288
+ }
1289
+ async function fetchLatestRelease() {
1290
+ if (releaseCache && Date.now() - releaseCache.fetchedAt < RELEASE_CACHE_TTL) {
1291
+ return releaseCache.data;
1292
+ }
1293
+ const res = await fetch("https://api.github.com/repos/ali-master/mikrotik-mcp/releases/latest", {
1294
+ headers: {
1295
+ accept: "application/vnd.github+json",
1296
+ "user-agent": "mikrotik-mcp-dashboard"
1297
+ }
1298
+ });
1299
+ if (!res.ok)
1300
+ throw new Error(`GitHub API ${res.status}`);
1301
+ const gh = await res.json();
1302
+ const latestVersion = gh.tag_name.replace(/^v/, "");
1303
+ const data = {
1304
+ version: latestVersion,
1305
+ name: gh.name || `v${latestVersion}`,
1306
+ body: gh.body || "",
1307
+ publishedAt: gh.published_at,
1308
+ url: gh.html_url,
1309
+ isNewer: compareVersions(latestVersion, VERSION) > 0,
1310
+ currentVersion: VERSION
1311
+ };
1312
+ releaseCache = { data, fetchedAt: Date.now() };
1313
+ return data;
1314
+ }
1277
1315
  var JSON_HEADERS = { "content-type": "application/json; charset=utf-8" };
1278
1316
  function json(body, status = 200) {
1279
1317
  return new Response(JSON.stringify(body), { status, headers: JSON_HEADERS });
@@ -2189,6 +2227,13 @@ async function runDashboard(cfg, transportLabel) {
2189
2227
  headers: { "content-type": "text/html; charset=utf-8" }
2190
2228
  });
2191
2229
  }
2230
+ if (url.pathname === "/api/releases/latest") {
2231
+ try {
2232
+ return json(await fetchLatestRelease());
2233
+ } catch (e) {
2234
+ return json({ error: e instanceof Error ? e.message : "fetch failed" }, 502);
2235
+ }
2236
+ }
2192
2237
  if (url.pathname === "/api/meta") {
2193
2238
  const f = facets(db);
2194
2239
  return json({
package/dist/index.js CHANGED
@@ -131,7 +131,7 @@ function registerPrompts(server) {
131
131
  // package.json
132
132
  var package_default = {
133
133
  name: "@usex/mikrotik-mcp",
134
- version: "3.45.0",
134
+ version: "3.46.0",
135
135
  description: "MCP server for MikroTik RouterOS \u2014 660+ tools over SSH for firewall, NAT, routing, DHCP, DNS, WireGuard, wireless, QoS and more.",
136
136
  keywords: [
137
137
  "ai",