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