forgex-cli 1.0.24 → 1.0.26

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.
@@ -10,6 +10,7 @@
10
10
  */
11
11
  import { createProgram } from '../src/index.js';
12
12
  import { migrateToEncryptedStore, setMasterPassword } from '../src/wallet-store.js';
13
+ import { trackCommand, shutdownTelemetry } from '../src/telemetry.js';
13
14
  /**
14
15
  * 从 argv 中提取全局 --password 参数(子命令名之前的位置)。
15
16
  *
@@ -46,10 +47,18 @@ async function main() {
46
47
  // 检测并迁移旧格式的钱包存储(明文私钥 → AES 加密)
47
48
  await migrateToEncryptedStore();
48
49
  const program = createProgram();
50
+ // 埋点:追踪命令执行(提取子命令名称)
51
+ const args = cleanedArgv.slice(2).filter(a => !a.startsWith('-'));
52
+ const command = args.join(' ') || 'help';
53
+ trackCommand(command);
49
54
  program.parse(cleanedArgv);
50
55
  }
51
- main().catch((err) => {
56
+ main()
57
+ .catch((err) => {
52
58
  console.error('启动失败:', err.message || err);
53
59
  process.exit(1);
60
+ })
61
+ .finally(() => {
62
+ shutdownTelemetry();
54
63
  });
55
64
  //# sourceMappingURL=forgex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"forgex.js","sourceRoot":"","sources":["../../bin/forgex.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEpF;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,IAAc;IAI3C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,gCAAgC;QAChC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM;QAEvC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1D,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAChD,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,kEAAkE;IAClE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,IAAI,QAAQ;QAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE1C,+BAA+B;IAC/B,MAAM,uBAAuB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"forgex.js","sourceRoot":"","sources":["../../bin/forgex.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEtE;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,IAAc;IAI3C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,gCAAgC;QAChC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM;QAEvC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1D,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAChD,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,kEAAkE;IAClE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,IAAI,QAAQ;QAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE1C,+BAA+B;IAC/B,MAAM,uBAAuB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,qBAAqB;IACrB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;IACzC,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC;AAED,IAAI,EAAE;KACH,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,OAAO,CAAC,GAAG,EAAE;IACZ,iBAAiB,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC"}
package/dist/src/index.js CHANGED
@@ -18,7 +18,7 @@ export function createProgram() {
18
18
  program
19
19
  .name('forgex')
20
20
  .description('ForgeX CLI - Solana 链上做市系统命令行工具')
21
- .version('1.0.24')
21
+ .version('1.0.25')
22
22
  .option('--format <format>', '输出格式: json | table | minimal', 'json');
23
23
  // 在 --help 中提示 --password 全局参数
24
24
  program.addHelpText('after', `
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ForgeX CLI 匿名使用统计 (Telemetry)
3
+ *
4
+ * - 异步 fire-and-forget,不阻塞命令执行
5
+ * - 失败静默忽略,不影响用户体验
6
+ * - 支持 opt-out: `forgex config set telemetry false` 或 `FORGEX_NO_TELEMETRY=1`
7
+ * - 不收集任何私钥、地址、交易内容等敏感信息
8
+ */
9
+ /** 追踪命令执行事件 */
10
+ export declare function trackCommand(command: string, properties?: Record<string, unknown>): void;
11
+ /** 追踪自定义事件 */
12
+ export declare function trackEvent(event: string, properties?: Record<string, unknown>): void;
13
+ /** 在进程退出前 flush 所有待发送的事件 */
14
+ export declare function shutdownTelemetry(): Promise<void>;
15
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsHH,eAAe;AACf,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAsBxF;AAED,cAAc;AACd,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAiBpF;AAED,4BAA4B;AAC5B,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CASvD"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * ForgeX CLI 匿名使用统计 (Telemetry)
3
+ *
4
+ * - 异步 fire-and-forget,不阻塞命令执行
5
+ * - 失败静默忽略,不影响用户体验
6
+ * - 支持 opt-out: `forgex config set telemetry false` 或 `FORGEX_NO_TELEMETRY=1`
7
+ * - 不收集任何私钥、地址、交易内容等敏感信息
8
+ */
9
+ import { PostHog } from 'posthog-node';
10
+ import { randomUUID } from 'crypto';
11
+ import fs from 'fs';
12
+ import os from 'os';
13
+ import path from 'path';
14
+ import { FORGEX_DIR, ensureConfigDir, loadConfig } from './config.js';
15
+ // ============================================================
16
+ // 常量
17
+ // ============================================================
18
+ const POSTHOG_API_KEY = 'phx_vSIGADbpPIvlpvtX27myNnajZsWjjcwM4JiZAljukmU6LYI';
19
+ const POSTHOG_HOST = 'https://us.i.posthog.com';
20
+ const ANONYMOUS_ID_FILE = path.join(FORGEX_DIR, '.anonymous-id');
21
+ // ============================================================
22
+ // 匿名 ID 管理
23
+ // ============================================================
24
+ /** 获取或生成持久化的匿名 ID(不关联任何用户身份) */
25
+ function getAnonymousId() {
26
+ ensureConfigDir();
27
+ try {
28
+ if (fs.existsSync(ANONYMOUS_ID_FILE)) {
29
+ return fs.readFileSync(ANONYMOUS_ID_FILE, 'utf-8').trim();
30
+ }
31
+ }
32
+ catch {
33
+ // ignore
34
+ }
35
+ const id = randomUUID();
36
+ try {
37
+ fs.writeFileSync(ANONYMOUS_ID_FILE, id, { encoding: 'utf-8', mode: 0o600 });
38
+ }
39
+ catch {
40
+ // ignore
41
+ }
42
+ return id;
43
+ }
44
+ // ============================================================
45
+ // 安装来源检测
46
+ // ============================================================
47
+ function detectInstallSource() {
48
+ // npm install
49
+ if (process.env.npm_config_registry || process.env.npm_execpath) {
50
+ return 'npm';
51
+ }
52
+ const execPath = process.argv[1] || '';
53
+ // Homebrew
54
+ if (execPath.includes('/opt/homebrew/') || execPath.includes('/usr/local/Cellar/')) {
55
+ return 'brew';
56
+ }
57
+ // Global npm install (in node_modules)
58
+ if (execPath.includes('node_modules')) {
59
+ return 'npm-global';
60
+ }
61
+ return 'manual';
62
+ }
63
+ // ============================================================
64
+ // Telemetry 开关
65
+ // ============================================================
66
+ function isTelemetryEnabled() {
67
+ // 环境变量优先
68
+ if (process.env.FORGEX_NO_TELEMETRY === '1' || process.env.DO_NOT_TRACK === '1') {
69
+ return false;
70
+ }
71
+ // CI 环境默认关闭
72
+ if (process.env.CI === 'true' || process.env.CI === '1') {
73
+ return false;
74
+ }
75
+ // 配置文件
76
+ try {
77
+ const config = loadConfig();
78
+ if (config.telemetry === false) {
79
+ return false;
80
+ }
81
+ }
82
+ catch {
83
+ // ignore
84
+ }
85
+ return true;
86
+ }
87
+ // ============================================================
88
+ // PostHog 客户端(懒初始化)
89
+ // ============================================================
90
+ let _client = null;
91
+ function getClient() {
92
+ if (!isTelemetryEnabled())
93
+ return null;
94
+ if (!_client) {
95
+ _client = new PostHog(POSTHOG_API_KEY, {
96
+ host: POSTHOG_HOST,
97
+ flushAt: 1,
98
+ flushInterval: 0,
99
+ });
100
+ }
101
+ return _client;
102
+ }
103
+ // ============================================================
104
+ // 公共 API
105
+ // ============================================================
106
+ /** 追踪命令执行事件 */
107
+ export function trackCommand(command, properties) {
108
+ try {
109
+ const client = getClient();
110
+ if (!client)
111
+ return;
112
+ client.capture({
113
+ distinctId: getAnonymousId(),
114
+ event: 'cli_command',
115
+ properties: {
116
+ command,
117
+ version: getCliVersion(),
118
+ os: os.platform(),
119
+ os_version: os.release(),
120
+ arch: os.arch(),
121
+ node_version: process.version,
122
+ install_source: detectInstallSource(),
123
+ ...properties,
124
+ },
125
+ });
126
+ }
127
+ catch {
128
+ // 埋点失败不影响用户操作
129
+ }
130
+ }
131
+ /** 追踪自定义事件 */
132
+ export function trackEvent(event, properties) {
133
+ try {
134
+ const client = getClient();
135
+ if (!client)
136
+ return;
137
+ client.capture({
138
+ distinctId: getAnonymousId(),
139
+ event,
140
+ properties: {
141
+ version: getCliVersion(),
142
+ os: os.platform(),
143
+ ...properties,
144
+ },
145
+ });
146
+ }
147
+ catch {
148
+ // 埋点失败不影响用户操作
149
+ }
150
+ }
151
+ /** 在进程退出前 flush 所有待发送的事件 */
152
+ export async function shutdownTelemetry() {
153
+ try {
154
+ if (_client) {
155
+ await _client.shutdown();
156
+ _client = null;
157
+ }
158
+ }
159
+ catch {
160
+ // ignore
161
+ }
162
+ }
163
+ // ============================================================
164
+ // 工具函数
165
+ // ============================================================
166
+ function getCliVersion() {
167
+ try {
168
+ const pkgPath = path.resolve(path.dirname(new URL(import.meta.url).pathname), '../package.json');
169
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
170
+ return pkg.version || 'unknown';
171
+ }
172
+ catch {
173
+ return 'unknown';
174
+ }
175
+ }
176
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forgex-cli",
3
- "version": "1.0.24",
3
+ "version": "1.0.26",
4
4
  "description": "ForgeX CLI - Solana on-chain market making system command-line tool",
5
5
  "type": "module",
6
6
  "author": "cat",
@@ -60,7 +60,8 @@
60
60
  "inquirer": "^12.3.0",
61
61
  "lodash": "^4.17.21",
62
62
  "ora": "^8.1.1",
63
- "pino-pretty": "^13.0.0"
63
+ "pino-pretty": "^13.0.0",
64
+ "posthog-node": "^5.21.2"
64
65
  },
65
66
  "devDependencies": {
66
67
  "@types/cli-progress": "^3.11.6",