@hangox/mg-cli 1.1.2 → 1.1.3

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 CHANGED
@@ -45,6 +45,7 @@ var MessageType = /* @__PURE__ */ ((MessageType2) => {
45
45
  MessageType2["OPEN_PAGE"] = "open_page";
46
46
  MessageType2["NAVIGATE_TO_NODE"] = "navigate_to_node";
47
47
  MessageType2["GET_SERVER_STATUS"] = "get_server_status";
48
+ MessageType2["TRACK_ANALYTICS"] = "track_analytics";
48
49
  MessageType2["RESPONSE"] = "response";
49
50
  MessageType2["ERROR"] = "error";
50
51
  return MessageType2;
@@ -665,8 +666,8 @@ var ConnectionManager = class {
665
666
  allConnections = /* @__PURE__ */ new Map();
666
667
  /** 心跳检查定时器 */
667
668
  heartbeatTimer = null;
668
- constructor(logger) {
669
- this.logger = logger;
669
+ constructor(logger2) {
670
+ this.logger = logger2;
670
671
  }
671
672
  /**
672
673
  * 启动心跳检查
@@ -893,9 +894,9 @@ var RequestHandler = class {
893
894
  connectionManager;
894
895
  /** 待处理的请求 */
895
896
  pendingRequests = /* @__PURE__ */ new Map();
896
- constructor(connectionManager, logger) {
897
+ constructor(connectionManager, logger2) {
897
898
  this.connectionManager = connectionManager;
898
- this.logger = logger;
899
+ this.logger = logger2;
899
900
  }
900
901
  /**
901
902
  * 处理 Consumer 请求
@@ -1080,6 +1081,60 @@ function isVersionMatch(version1, version2) {
1080
1081
  return version1 === version2;
1081
1082
  }
1082
1083
 
1084
+ // src/server/analytics.ts
1085
+ import { PostHog } from "posthog-node";
1086
+ var POSTHOG_API_KEY = "phc_cSZZIxZOPhWOlsw92Wz8tmKQ5z8eQYsI3m9aM2Ujia9";
1087
+ var POSTHOG_HOST = "https://us.i.posthog.com";
1088
+ var posthogClient = null;
1089
+ var logger = null;
1090
+ function isTelemetryDisabled() {
1091
+ 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";
1092
+ }
1093
+ function initServerAnalytics(serverLogger) {
1094
+ logger = serverLogger;
1095
+ if (isTelemetryDisabled()) {
1096
+ logger.info("\u9065\u6D4B\u5DF2\u7981\u7528 (MG_TELEMETRY_DISABLED \u6216 DO_NOT_TRACK)");
1097
+ return;
1098
+ }
1099
+ if (!posthogClient) {
1100
+ posthogClient = new PostHog(POSTHOG_API_KEY, {
1101
+ host: POSTHOG_HOST,
1102
+ // Server 端使用批量模式,减少网络请求
1103
+ flushAt: 10,
1104
+ flushInterval: 3e4
1105
+ // 30 秒
1106
+ });
1107
+ logger.info("PostHog Analytics \u5DF2\u521D\u59CB\u5316");
1108
+ }
1109
+ }
1110
+ function trackEvent(eventData) {
1111
+ if (!posthogClient) {
1112
+ return;
1113
+ }
1114
+ try {
1115
+ posthogClient.capture({
1116
+ distinctId: eventData.distinctId,
1117
+ event: eventData.event,
1118
+ properties: eventData.properties
1119
+ });
1120
+ logger?.info(`\u7EDF\u8BA1\u4E8B\u4EF6\u5DF2\u8BB0\u5F55: ${eventData.event}`, eventData.properties);
1121
+ } catch (error) {
1122
+ logger?.error("\u7EDF\u8BA1\u4E8B\u4EF6\u8BB0\u5F55\u5931\u8D25:", error);
1123
+ }
1124
+ }
1125
+ async function shutdownServerAnalytics() {
1126
+ if (posthogClient) {
1127
+ try {
1128
+ logger?.info("\u6B63\u5728\u53D1\u9001\u5269\u4F59\u7EDF\u8BA1\u4E8B\u4EF6...");
1129
+ await posthogClient.shutdown();
1130
+ logger?.info("PostHog Analytics \u5DF2\u5173\u95ED");
1131
+ } catch (error) {
1132
+ logger?.error("\u5173\u95ED PostHog \u5931\u8D25:", error);
1133
+ }
1134
+ posthogClient = null;
1135
+ }
1136
+ }
1137
+
1083
1138
  // src/server/websocket-server.ts
1084
1139
  var MGServer = class {
1085
1140
  wss = null;
@@ -1111,6 +1166,7 @@ var MGServer = class {
1111
1166
  this.startedAt = /* @__PURE__ */ new Date();
1112
1167
  this.logger.info(`Server \u542F\u52A8\u6210\u529F\uFF0C\u76D1\u542C\u7AEF\u53E3: ${port}`);
1113
1168
  this.connectionManager.startHeartbeatCheck(HEARTBEAT_INTERVAL);
1169
+ initServerAnalytics(this.logger);
1114
1170
  resolve2(port);
1115
1171
  });
1116
1172
  this.wss.on("error", (error) => {
@@ -1170,6 +1226,10 @@ var MGServer = class {
1170
1226
  this.handleRegister(ws, message);
1171
1227
  return;
1172
1228
  }
1229
+ if (message.type === "track_analytics" /* TRACK_ANALYTICS */) {
1230
+ this.handleTrackAnalytics(message);
1231
+ return;
1232
+ }
1173
1233
  const managedWs = ws;
1174
1234
  if (!managedWs.connectionId) {
1175
1235
  this.logger.warn("\u672A\u6CE8\u518C\u7684\u8FDE\u63A5\u53D1\u9001\u6D88\u606F\uFF0C\u5FFD\u7565");
@@ -1247,6 +1307,9 @@ var MGServer = class {
1247
1307
  case "navigate_to_node" /* NAVIGATE_TO_NODE */:
1248
1308
  this.handleNavigateToNode(ws, message);
1249
1309
  break;
1310
+ case "track_analytics" /* TRACK_ANALYTICS */:
1311
+ this.handleTrackAnalytics(message);
1312
+ break;
1250
1313
  case "response" /* RESPONSE */:
1251
1314
  case "error" /* ERROR */:
1252
1315
  this.requestHandler.handleResponse(message);
@@ -1392,6 +1455,15 @@ var MGServer = class {
1392
1455
  }
1393
1456
  });
1394
1457
  }
1458
+ /**
1459
+ * 处理统计事件
1460
+ */
1461
+ handleTrackAnalytics(message) {
1462
+ const eventData = message.data;
1463
+ if (eventData) {
1464
+ trackEvent(eventData);
1465
+ }
1466
+ }
1395
1467
  /**
1396
1468
  * 处理节点导航请求
1397
1469
  */
@@ -1465,6 +1537,7 @@ var MGServer = class {
1465
1537
  return;
1466
1538
  }
1467
1539
  this.logger.info("\u6B63\u5728\u505C\u6B62 Server...");
1540
+ await shutdownServerAnalytics();
1468
1541
  this.requestHandler.cleanupAll();
1469
1542
  this.connectionManager.closeAll();
1470
1543
  return new Promise((resolve2) => {