@hangox/mg-cli 1.1.2 → 1.1.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/cli.js +119 -42
- package/dist/cli.js.map +1 -1
- package/dist/daemon-runner.js +79 -7
- package/dist/daemon-runner.js.map +1 -1
- package/dist/{index-CM3G8ywC.d.ts → index-DorC5U6y.d.ts} +5 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +77 -7
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +76 -4
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -278,9 +278,6 @@ function parseMgpLink(link) {
|
|
|
278
278
|
}
|
|
279
279
|
if (encodedPageId) {
|
|
280
280
|
const pageId = decodeURIComponent(encodedPageId);
|
|
281
|
-
if (!/^\d+:\d+$/.test(pageId)) {
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
281
|
return {
|
|
285
282
|
pageUrl,
|
|
286
283
|
pageId
|
|
@@ -670,8 +667,8 @@ var ConnectionManager = class {
|
|
|
670
667
|
allConnections = /* @__PURE__ */ new Map();
|
|
671
668
|
/** 心跳检查定时器 */
|
|
672
669
|
heartbeatTimer = null;
|
|
673
|
-
constructor(
|
|
674
|
-
this.logger =
|
|
670
|
+
constructor(logger2) {
|
|
671
|
+
this.logger = logger2;
|
|
675
672
|
}
|
|
676
673
|
/**
|
|
677
674
|
* 启动心跳检查
|
|
@@ -898,9 +895,9 @@ var RequestHandler = class {
|
|
|
898
895
|
connectionManager;
|
|
899
896
|
/** 待处理的请求 */
|
|
900
897
|
pendingRequests = /* @__PURE__ */ new Map();
|
|
901
|
-
constructor(connectionManager,
|
|
898
|
+
constructor(connectionManager, logger2) {
|
|
902
899
|
this.connectionManager = connectionManager;
|
|
903
|
-
this.logger =
|
|
900
|
+
this.logger = logger2;
|
|
904
901
|
}
|
|
905
902
|
/**
|
|
906
903
|
* 处理 Consumer 请求
|
|
@@ -1043,6 +1040,60 @@ var RequestHandler = class {
|
|
|
1043
1040
|
}
|
|
1044
1041
|
};
|
|
1045
1042
|
|
|
1043
|
+
// src/server/analytics.ts
|
|
1044
|
+
import { PostHog } from "posthog-node";
|
|
1045
|
+
var POSTHOG_API_KEY = "phc_cSZZIxZOPhWOlsw92Wz8tmKQ5z8eQYsI3m9aM2Ujia9";
|
|
1046
|
+
var POSTHOG_HOST = "https://us.i.posthog.com";
|
|
1047
|
+
var posthogClient = null;
|
|
1048
|
+
var logger = null;
|
|
1049
|
+
function isTelemetryDisabled() {
|
|
1050
|
+
return process.env.MG_TELEMETRY_DISABLED === "1" || process.env.MG_TELEMETRY_DISABLED === "true" || process.env.DO_NOT_TRACK === "1" || process.env.DO_NOT_TRACK === "true";
|
|
1051
|
+
}
|
|
1052
|
+
function initServerAnalytics(serverLogger) {
|
|
1053
|
+
logger = serverLogger;
|
|
1054
|
+
if (isTelemetryDisabled()) {
|
|
1055
|
+
logger.info("\u9065\u6D4B\u5DF2\u7981\u7528 (MG_TELEMETRY_DISABLED \u6216 DO_NOT_TRACK)");
|
|
1056
|
+
return;
|
|
1057
|
+
}
|
|
1058
|
+
if (!posthogClient) {
|
|
1059
|
+
posthogClient = new PostHog(POSTHOG_API_KEY, {
|
|
1060
|
+
host: POSTHOG_HOST,
|
|
1061
|
+
// Server 端使用批量模式,减少网络请求
|
|
1062
|
+
flushAt: 10,
|
|
1063
|
+
flushInterval: 3e4
|
|
1064
|
+
// 30 秒
|
|
1065
|
+
});
|
|
1066
|
+
logger.info("PostHog Analytics \u5DF2\u521D\u59CB\u5316");
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
function trackEvent(eventData) {
|
|
1070
|
+
if (!posthogClient) {
|
|
1071
|
+
return;
|
|
1072
|
+
}
|
|
1073
|
+
try {
|
|
1074
|
+
posthogClient.capture({
|
|
1075
|
+
distinctId: eventData.distinctId,
|
|
1076
|
+
event: eventData.event,
|
|
1077
|
+
properties: eventData.properties
|
|
1078
|
+
});
|
|
1079
|
+
logger?.info(`\u7EDF\u8BA1\u4E8B\u4EF6\u5DF2\u8BB0\u5F55: ${eventData.event}`, eventData.properties);
|
|
1080
|
+
} catch (error) {
|
|
1081
|
+
logger?.error("\u7EDF\u8BA1\u4E8B\u4EF6\u8BB0\u5F55\u5931\u8D25:", error);
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
async function shutdownServerAnalytics() {
|
|
1085
|
+
if (posthogClient) {
|
|
1086
|
+
try {
|
|
1087
|
+
logger?.info("\u6B63\u5728\u53D1\u9001\u5269\u4F59\u7EDF\u8BA1\u4E8B\u4EF6...");
|
|
1088
|
+
await posthogClient.shutdown();
|
|
1089
|
+
logger?.info("PostHog Analytics \u5DF2\u5173\u95ED");
|
|
1090
|
+
} catch (error) {
|
|
1091
|
+
logger?.error("\u5173\u95ED PostHog \u5931\u8D25:", error);
|
|
1092
|
+
}
|
|
1093
|
+
posthogClient = null;
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1046
1097
|
// src/server/websocket-server.ts
|
|
1047
1098
|
var MGServer = class {
|
|
1048
1099
|
wss = null;
|
|
@@ -1074,6 +1125,7 @@ var MGServer = class {
|
|
|
1074
1125
|
this.startedAt = /* @__PURE__ */ new Date();
|
|
1075
1126
|
this.logger.info(`Server \u542F\u52A8\u6210\u529F\uFF0C\u76D1\u542C\u7AEF\u53E3: ${port}`);
|
|
1076
1127
|
this.connectionManager.startHeartbeatCheck(HEARTBEAT_INTERVAL);
|
|
1128
|
+
initServerAnalytics(this.logger);
|
|
1077
1129
|
resolve9(port);
|
|
1078
1130
|
});
|
|
1079
1131
|
this.wss.on("error", (error) => {
|
|
@@ -1133,6 +1185,10 @@ var MGServer = class {
|
|
|
1133
1185
|
this.handleRegister(ws, message);
|
|
1134
1186
|
return;
|
|
1135
1187
|
}
|
|
1188
|
+
if (message.type === "track_analytics" /* TRACK_ANALYTICS */) {
|
|
1189
|
+
this.handleTrackAnalytics(message);
|
|
1190
|
+
return;
|
|
1191
|
+
}
|
|
1136
1192
|
const managedWs = ws;
|
|
1137
1193
|
if (!managedWs.connectionId) {
|
|
1138
1194
|
this.logger.warn("\u672A\u6CE8\u518C\u7684\u8FDE\u63A5\u53D1\u9001\u6D88\u606F\uFF0C\u5FFD\u7565");
|
|
@@ -1210,6 +1266,9 @@ var MGServer = class {
|
|
|
1210
1266
|
case "navigate_to_node" /* NAVIGATE_TO_NODE */:
|
|
1211
1267
|
this.handleNavigateToNode(ws, message);
|
|
1212
1268
|
break;
|
|
1269
|
+
case "track_analytics" /* TRACK_ANALYTICS */:
|
|
1270
|
+
this.handleTrackAnalytics(message);
|
|
1271
|
+
break;
|
|
1213
1272
|
case "response" /* RESPONSE */:
|
|
1214
1273
|
case "error" /* ERROR */:
|
|
1215
1274
|
this.requestHandler.handleResponse(message);
|
|
@@ -1355,6 +1414,15 @@ var MGServer = class {
|
|
|
1355
1414
|
}
|
|
1356
1415
|
});
|
|
1357
1416
|
}
|
|
1417
|
+
/**
|
|
1418
|
+
* 处理统计事件
|
|
1419
|
+
*/
|
|
1420
|
+
handleTrackAnalytics(message) {
|
|
1421
|
+
const eventData = message.data;
|
|
1422
|
+
if (eventData) {
|
|
1423
|
+
trackEvent(eventData);
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1358
1426
|
/**
|
|
1359
1427
|
* 处理节点导航请求
|
|
1360
1428
|
*/
|
|
@@ -1428,6 +1496,7 @@ var MGServer = class {
|
|
|
1428
1496
|
return;
|
|
1429
1497
|
}
|
|
1430
1498
|
this.logger.info("\u6B63\u5728\u505C\u6B62 Server...");
|
|
1499
|
+
await shutdownServerAnalytics();
|
|
1431
1500
|
this.requestHandler.cleanupAll();
|
|
1432
1501
|
this.connectionManager.closeAll();
|
|
1433
1502
|
return new Promise((resolve9) => {
|
|
@@ -1488,14 +1557,14 @@ async function startServerForeground(port) {
|
|
|
1488
1557
|
);
|
|
1489
1558
|
}
|
|
1490
1559
|
ensureConfigDir();
|
|
1491
|
-
const
|
|
1560
|
+
const logger2 = createLogger({
|
|
1492
1561
|
console: true,
|
|
1493
1562
|
file: true,
|
|
1494
1563
|
minLevel: "INFO" /* INFO */
|
|
1495
1564
|
});
|
|
1496
1565
|
const server = createServer({
|
|
1497
1566
|
port: port || DEFAULT_PORT,
|
|
1498
|
-
logger
|
|
1567
|
+
logger: logger2
|
|
1499
1568
|
});
|
|
1500
1569
|
const cleanup = async () => {
|
|
1501
1570
|
console.log("\n\u6B63\u5728\u505C\u6B62 Server...");
|
|
@@ -1521,7 +1590,7 @@ MG Server \u542F\u52A8\u6210\u529F`);
|
|
|
1521
1590
|
console.log(`
|
|
1522
1591
|
\u6309 Ctrl+C \u505C\u6B62...`);
|
|
1523
1592
|
} catch (error) {
|
|
1524
|
-
|
|
1593
|
+
logger2.error("Server \u542F\u52A8\u5931\u8D25:", error);
|
|
1525
1594
|
throw error;
|
|
1526
1595
|
}
|
|
1527
1596
|
}
|
|
@@ -1781,14 +1850,11 @@ var MGClient = class {
|
|
|
1781
1850
|
};
|
|
1782
1851
|
|
|
1783
1852
|
// src/cli/analytics.ts
|
|
1784
|
-
import {
|
|
1853
|
+
import { WebSocket as WebSocket3 } from "ws";
|
|
1785
1854
|
import { createHash } from "crypto";
|
|
1786
1855
|
import { hostname, userInfo, platform, release } from "os";
|
|
1787
|
-
var POSTHOG_API_KEY = "phc_cSZZIxZOPhWOlsw92Wz8tmKQ5z8eQYsI3m9aM2Ujia9";
|
|
1788
|
-
var POSTHOG_HOST = "https://us.i.posthog.com";
|
|
1789
|
-
var posthogClient = null;
|
|
1790
1856
|
var machineId = null;
|
|
1791
|
-
function
|
|
1857
|
+
function isTelemetryDisabled2() {
|
|
1792
1858
|
return process.env.MG_TELEMETRY_DISABLED === "1" || process.env.MG_TELEMETRY_DISABLED === "true" || process.env.DO_NOT_TRACK === "1" || process.env.DO_NOT_TRACK === "true";
|
|
1793
1859
|
}
|
|
1794
1860
|
function getMachineId() {
|
|
@@ -1805,39 +1871,50 @@ function getMachineId() {
|
|
|
1805
1871
|
}
|
|
1806
1872
|
return machineId;
|
|
1807
1873
|
}
|
|
1808
|
-
function
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1874
|
+
function sendToServer(eventData) {
|
|
1875
|
+
try {
|
|
1876
|
+
const serverInfo = readServerInfo();
|
|
1877
|
+
if (!serverInfo) {
|
|
1878
|
+
return;
|
|
1879
|
+
}
|
|
1880
|
+
if (!isProcessRunning(serverInfo.pid)) {
|
|
1881
|
+
return;
|
|
1882
|
+
}
|
|
1883
|
+
const ws = new WebSocket3(`ws://localhost:${serverInfo.port}`);
|
|
1884
|
+
const timeout = setTimeout(() => {
|
|
1885
|
+
ws.close();
|
|
1886
|
+
}, 1e3);
|
|
1887
|
+
ws.on("open", () => {
|
|
1888
|
+
const message = {
|
|
1889
|
+
type: "track_analytics" /* TRACK_ANALYTICS */,
|
|
1890
|
+
data: eventData
|
|
1891
|
+
};
|
|
1892
|
+
ws.send(JSON.stringify(message));
|
|
1893
|
+
clearTimeout(timeout);
|
|
1894
|
+
ws.close();
|
|
1818
1895
|
});
|
|
1896
|
+
ws.on("error", () => {
|
|
1897
|
+
clearTimeout(timeout);
|
|
1898
|
+
});
|
|
1899
|
+
} catch {
|
|
1819
1900
|
}
|
|
1820
|
-
return posthogClient;
|
|
1821
1901
|
}
|
|
1822
1902
|
function trackCommand(properties) {
|
|
1823
|
-
|
|
1824
|
-
if (!client) {
|
|
1903
|
+
if (isTelemetryDisabled2()) {
|
|
1825
1904
|
return;
|
|
1826
1905
|
}
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
properties
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
} catch {
|
|
1840
|
-
}
|
|
1906
|
+
const eventData = {
|
|
1907
|
+
distinctId: getMachineId(),
|
|
1908
|
+
event: "cli_command",
|
|
1909
|
+
properties: {
|
|
1910
|
+
...properties,
|
|
1911
|
+
version: getVersion(),
|
|
1912
|
+
os: platform(),
|
|
1913
|
+
os_release: release(),
|
|
1914
|
+
node_version: process.version
|
|
1915
|
+
}
|
|
1916
|
+
};
|
|
1917
|
+
sendToServer(eventData);
|
|
1841
1918
|
}
|
|
1842
1919
|
function createCommandTracker(commandName) {
|
|
1843
1920
|
const startTime = Date.now();
|