@123456btc/123456btc-cli 1.0.0 → 1.0.2

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.
Files changed (135) hide show
  1. package/dist/api/client.d.ts +4 -0
  2. package/dist/api/client.d.ts.map +1 -1
  3. package/dist/api/client.js +74 -16
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/provider.d.ts +163 -0
  6. package/dist/api/provider.d.ts.map +1 -0
  7. package/dist/api/provider.js +123 -0
  8. package/dist/api/provider.js.map +1 -0
  9. package/dist/api/signal-crypto.d.ts +17 -0
  10. package/dist/api/signal-crypto.d.ts.map +1 -0
  11. package/dist/api/signal-crypto.js +48 -0
  12. package/dist/api/signal-crypto.js.map +1 -0
  13. package/dist/api/signals.d.ts +47 -0
  14. package/dist/api/signals.d.ts.map +1 -0
  15. package/dist/api/signals.js +34 -0
  16. package/dist/api/signals.js.map +1 -0
  17. package/dist/api/strategy-stream.d.ts +59 -0
  18. package/dist/api/strategy-stream.d.ts.map +1 -0
  19. package/dist/api/strategy-stream.js +136 -0
  20. package/dist/api/strategy-stream.js.map +1 -0
  21. package/dist/api/strategy.d.ts +66 -20
  22. package/dist/api/strategy.d.ts.map +1 -1
  23. package/dist/api/strategy.js +15 -18
  24. package/dist/api/strategy.js.map +1 -1
  25. package/dist/api/token-manager.d.ts +37 -0
  26. package/dist/api/token-manager.d.ts.map +1 -0
  27. package/dist/api/token-manager.js +191 -0
  28. package/dist/api/token-manager.js.map +1 -0
  29. package/dist/api/wallet.d.ts +38 -0
  30. package/dist/api/wallet.d.ts.map +1 -0
  31. package/dist/api/wallet.js +23 -0
  32. package/dist/api/wallet.js.map +1 -0
  33. package/dist/cli.js +12 -2
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/auth.d.ts.map +1 -1
  36. package/dist/commands/auth.js +149 -3
  37. package/dist/commands/auth.js.map +1 -1
  38. package/dist/commands/gas.d.ts.map +1 -1
  39. package/dist/commands/gas.js +10 -9
  40. package/dist/commands/gas.js.map +1 -1
  41. package/dist/commands/health.d.ts +3 -0
  42. package/dist/commands/health.d.ts.map +1 -0
  43. package/dist/commands/health.js +77 -0
  44. package/dist/commands/health.js.map +1 -0
  45. package/dist/commands/install.d.ts.map +1 -1
  46. package/dist/commands/install.js +156 -50
  47. package/dist/commands/install.js.map +1 -1
  48. package/dist/commands/provider.d.ts +3 -0
  49. package/dist/commands/provider.d.ts.map +1 -0
  50. package/dist/commands/provider.js +371 -0
  51. package/dist/commands/provider.js.map +1 -0
  52. package/dist/commands/signals.d.ts +3 -0
  53. package/dist/commands/signals.d.ts.map +1 -0
  54. package/dist/commands/signals.js +104 -0
  55. package/dist/commands/signals.js.map +1 -0
  56. package/dist/commands/strategy.d.ts.map +1 -1
  57. package/dist/commands/strategy.js +156 -67
  58. package/dist/commands/strategy.js.map +1 -1
  59. package/dist/commands/tier.d.ts +3 -0
  60. package/dist/commands/tier.d.ts.map +1 -0
  61. package/dist/commands/tier.js +105 -0
  62. package/dist/commands/tier.js.map +1 -0
  63. package/dist/commands/vault.d.ts +7 -0
  64. package/dist/commands/vault.d.ts.map +1 -0
  65. package/dist/commands/vault.js +377 -0
  66. package/dist/commands/vault.js.map +1 -0
  67. package/dist/commands/wallet.d.ts +3 -0
  68. package/dist/commands/wallet.d.ts.map +1 -0
  69. package/dist/commands/wallet.js +74 -0
  70. package/dist/commands/wallet.js.map +1 -0
  71. package/dist/config.d.ts +1 -0
  72. package/dist/config.d.ts.map +1 -1
  73. package/dist/config.js +16 -2
  74. package/dist/config.js.map +1 -1
  75. package/dist/index.d.ts +12 -4
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +22 -6
  78. package/dist/index.js.map +1 -1
  79. package/dist/providers/executor.d.ts +55 -20
  80. package/dist/providers/executor.d.ts.map +1 -1
  81. package/dist/providers/executor.js +260 -58
  82. package/dist/providers/executor.js.map +1 -1
  83. package/dist/providers/risk.d.ts +17 -0
  84. package/dist/providers/risk.d.ts.map +1 -0
  85. package/dist/providers/risk.js +67 -0
  86. package/dist/providers/risk.js.map +1 -0
  87. package/dist/providers/state.d.ts +30 -0
  88. package/dist/providers/state.d.ts.map +1 -0
  89. package/dist/providers/state.js +190 -0
  90. package/dist/providers/state.js.map +1 -0
  91. package/dist/types/strategy.d.ts +65 -1
  92. package/dist/types/strategy.d.ts.map +1 -1
  93. package/dist/types/strategy.js +1 -0
  94. package/dist/types/strategy.js.map +1 -1
  95. package/dist/utils/auth.d.ts +10 -0
  96. package/dist/utils/auth.d.ts.map +1 -0
  97. package/dist/utils/auth.js +26 -0
  98. package/dist/utils/auth.js.map +1 -0
  99. package/dist/utils/device.d.ts +13 -0
  100. package/dist/utils/device.d.ts.map +1 -0
  101. package/dist/utils/device.js +104 -0
  102. package/dist/utils/device.js.map +1 -0
  103. package/dist/vault/backends/file.d.ts +15 -0
  104. package/dist/vault/backends/file.d.ts.map +1 -0
  105. package/dist/vault/backends/file.js +39 -0
  106. package/dist/vault/backends/file.js.map +1 -0
  107. package/dist/vault/backends/os-keychain.d.ts +13 -0
  108. package/dist/vault/backends/os-keychain.d.ts.map +1 -0
  109. package/dist/vault/backends/os-keychain.js +60 -0
  110. package/dist/vault/backends/os-keychain.js.map +1 -0
  111. package/dist/vault/backends/os-secret.d.ts +13 -0
  112. package/dist/vault/backends/os-secret.d.ts.map +1 -0
  113. package/dist/vault/backends/os-secret.js +57 -0
  114. package/dist/vault/backends/os-secret.js.map +1 -0
  115. package/dist/vault/backends/os-win-cred.d.ts +13 -0
  116. package/dist/vault/backends/os-win-cred.d.ts.map +1 -0
  117. package/dist/vault/backends/os-win-cred.js +76 -0
  118. package/dist/vault/backends/os-win-cred.js.map +1 -0
  119. package/dist/vault/crypto.d.ts +49 -0
  120. package/dist/vault/crypto.d.ts.map +1 -0
  121. package/dist/vault/crypto.js +122 -0
  122. package/dist/vault/crypto.js.map +1 -0
  123. package/dist/vault/index.d.ts +88 -0
  124. package/dist/vault/index.d.ts.map +1 -0
  125. package/dist/vault/index.js +276 -0
  126. package/dist/vault/index.js.map +1 -0
  127. package/dist/vault/storage.d.ts +14 -0
  128. package/dist/vault/storage.d.ts.map +1 -0
  129. package/dist/vault/storage.js +68 -0
  130. package/dist/vault/storage.js.map +1 -0
  131. package/dist/vault/types.d.ts +41 -0
  132. package/dist/vault/types.d.ts.map +1 -0
  133. package/dist/vault/types.js +6 -0
  134. package/dist/vault/types.js.map +1 -0
  135. package/package.json +3 -1
@@ -42,16 +42,127 @@ const inquirer_1 = __importDefault(require("inquirer"));
42
42
  const axios_1 = __importDefault(require("axios"));
43
43
  const fs = __importStar(require("fs"));
44
44
  const path = __importStar(require("path"));
45
+ const tar = __importStar(require("tar"));
46
+ const auth_1 = require("../utils/auth");
45
47
  const PACKAGES_DIR = path.join(process.env.HOME || process.env.USERPROFILE || '.', '.123456btc-cli', 'packages');
46
48
  function createInstallCommand(program) {
47
49
  const installCmd = new commander_1.Command('install');
48
- // Install OpenClaw package
50
+ // List installed packages
51
+ installCmd
52
+ .command('list')
53
+ .description('List installed packages')
54
+ .action(() => {
55
+ if (!fs.existsSync(PACKAGES_DIR)) {
56
+ console.log('No packages installed');
57
+ return;
58
+ }
59
+ const packages = fs.readdirSync(PACKAGES_DIR);
60
+ if (packages.length === 0) {
61
+ console.log('No packages installed');
62
+ return;
63
+ }
64
+ console.log('Installed Packages:');
65
+ console.log('='.repeat(60));
66
+ packages.forEach((pkg) => {
67
+ const manifestPath = path.join(PACKAGES_DIR, pkg, 'manifest.json');
68
+ if (fs.existsSync(manifestPath)) {
69
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
70
+ console.log(` ${manifest.name} v${manifest.version}`);
71
+ console.log(` Entry: ${manifest.entryPoint}`);
72
+ console.log(` Installed: ${manifest.installedAt}`);
73
+ console.log(` AI Compatible: ${manifest.aiCompatible || 'N/A'}`);
74
+ console.log(` LLM Compatible: ${manifest.llmCompatible || 'N/A'}`);
75
+ console.log('');
76
+ }
77
+ });
78
+ });
79
+ // Uninstall package
80
+ installCmd
81
+ .command('uninstall <name>')
82
+ .description('Uninstall a package')
83
+ .option('--force', 'Force uninstall without confirmation')
84
+ .action(async (name, options) => {
85
+ const packageDir = path.join(PACKAGES_DIR, name);
86
+ if (!fs.existsSync(packageDir)) {
87
+ console.error(`Package not found: ${name}`);
88
+ return;
89
+ }
90
+ if (!options.force) {
91
+ const answers = await inquirer_1.default.prompt([
92
+ {
93
+ type: 'confirm',
94
+ name: 'confirm',
95
+ message: `Uninstall ${name}?`,
96
+ default: true,
97
+ },
98
+ ]);
99
+ if (!answers.confirm) {
100
+ console.log('Cancelled');
101
+ return;
102
+ }
103
+ }
104
+ // Remove package directory
105
+ fs.rmSync(packageDir, { recursive: true, force: true });
106
+ console.log(`✓ Package uninstalled: ${name}`);
107
+ });
108
+ // Update package
109
+ installCmd
110
+ .command('update <name>')
111
+ .description('Update a package to latest version')
112
+ .action(async (name, options) => {
113
+ const packageDir = path.join(PACKAGES_DIR, name);
114
+ if (!fs.existsSync(packageDir)) {
115
+ console.error(`Package not found: ${name}`);
116
+ return;
117
+ }
118
+ const manifestPath = path.join(packageDir, 'manifest.json');
119
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
120
+ console.log(`Updating package: ${name}`);
121
+ console.log(` Current version: ${manifest.version}`);
122
+ // Re-fetch package info
123
+ const packageUrl = manifest.packageUrl;
124
+ if (!packageUrl) {
125
+ console.error('Package URL not found in manifest');
126
+ return;
127
+ }
128
+ try {
129
+ const response = await axios_1.default.get(`${packageUrl}/package.json`);
130
+ const newVersion = response.data.version;
131
+ if (newVersion === manifest.version) {
132
+ console.log('Already up to date');
133
+ return;
134
+ }
135
+ console.log(` New version: ${newVersion}`);
136
+ const answers = await inquirer_1.default.prompt([
137
+ {
138
+ type: 'confirm',
139
+ name: 'confirm',
140
+ message: `Update ${name} to v${newVersion}?`,
141
+ default: true,
142
+ },
143
+ ]);
144
+ if (!answers.confirm) {
145
+ console.log('Cancelled');
146
+ return;
147
+ }
148
+ // Download and extract
149
+ await downloadAndExtractPackage(packageUrl, name, packageDir);
150
+ console.log(`✓ Package updated: ${name} v${manifest.version} -> v${newVersion}`);
151
+ }
152
+ catch (error) {
153
+ const err = error;
154
+ console.error('Update failed:', err.message);
155
+ }
156
+ });
157
+ // Install package
49
158
  installCmd
50
159
  .command('package <url>')
51
160
  .description('Install an OpenClaw-compatible package')
52
161
  .option('--name <name>', 'Package name')
53
162
  .option('--force', 'Force reinstall')
54
163
  .action(async (url, options) => {
164
+ // Check auth
165
+ const creds = (0, auth_1.checkAuth)();
55
166
  // Download package info
56
167
  console.log('Fetching package info from:', url);
57
168
  let packageInfo;
@@ -96,56 +207,51 @@ function createInstallCommand(program) {
96
207
  if (!fs.existsSync(PACKAGES_DIR)) {
97
208
  fs.mkdirSync(PACKAGES_DIR, { recursive: true });
98
209
  }
99
- // Download package
100
- console.log('\nDownloading package...');
101
- try {
102
- const packageUrl = `${url}/package.tar.gz`;
103
- const response = await axios_1.default.get(packageUrl, {
104
- responseType: 'arraybuffer',
105
- });
106
- // Save package (simplified - in reality would extract)
107
- const packagePath = path.join(PACKAGES_DIR, packageInfo.name || 'package');
108
- fs.mkdirSync(packagePath, { recursive: true });
109
- const manifest = {
110
- name: packageInfo.name,
111
- version: packageInfo.version,
112
- entryPoint: packageInfo.entryPoint,
113
- installedAt: new Date().toISOString(),
114
- };
115
- fs.writeFileSync(path.join(packagePath, 'manifest.json'), JSON.stringify(manifest, null, 2));
116
- console.log('✓ Package installed to:', packagePath);
117
- }
118
- catch (error) {
119
- const err = error;
120
- console.error('Download failed:', err.message);
121
- }
122
- });
123
- // List installed packages
124
- installCmd
125
- .command('list')
126
- .description('List installed packages')
127
- .action(() => {
128
- if (!fs.existsSync(PACKAGES_DIR)) {
129
- console.log('No packages installed');
130
- return;
131
- }
132
- const packages = fs.readdirSync(PACKAGES_DIR);
133
- if (packages.length === 0) {
134
- console.log('No packages installed');
135
- return;
136
- }
137
- console.log('Installed Packages:');
138
- console.log('='.repeat(60));
139
- packages.forEach((pkg) => {
140
- const manifestPath = path.join(PACKAGES_DIR, pkg, 'manifest.json');
141
- if (fs.existsSync(manifestPath)) {
142
- const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
143
- console.log(` ${manifest.name} v${manifest.version}`);
144
- console.log(` Entry: ${manifest.entryPoint}`);
145
- console.log(` Installed: ${manifest.installedAt}`);
146
- }
147
- });
210
+ // Download and extract
211
+ await downloadAndExtractPackage(url, packageInfo.name || 'package', packageDir);
212
+ console.log(`✓ Package installed: ${packageInfo.name} v${packageInfo.version}`);
148
213
  });
149
214
  program.addCommand(installCmd);
150
215
  }
216
+ /**
217
+ * Download and extract a package
218
+ */
219
+ async function downloadAndExtractPackage(url, packageName, packageDir) {
220
+ const packageUrl = `${url}/package.tar.gz`;
221
+ console.log(`\nDownloading package from: ${packageUrl}`);
222
+ // Download tarball
223
+ const response = await axios_1.default.get(packageUrl, {
224
+ responseType: 'arraybuffer',
225
+ });
226
+ // Extract to package directory
227
+ console.log(`Extracting to: ${packageDir}`);
228
+ if (!fs.existsSync(packageDir)) {
229
+ fs.mkdirSync(packageDir, { recursive: true });
230
+ }
231
+ // Extract tarball
232
+ await tar.x({
233
+ file: packageUrl,
234
+ cwd: packageDir,
235
+ });
236
+ // Create manifest
237
+ const manifest = {
238
+ name: packageName,
239
+ version: '1.0.0', // Will be updated from package.json
240
+ entryPoint: 'index.js', // Default, will be updated
241
+ installedAt: new Date().toISOString(),
242
+ packageUrl: url,
243
+ aiCompatible: true,
244
+ llmCompatible: true,
245
+ };
246
+ // Read actual manifest from extracted package
247
+ const extractedManifestPath = path.join(packageDir, 'package.json');
248
+ if (fs.existsSync(extractedManifestPath)) {
249
+ const extractedManifest = JSON.parse(fs.readFileSync(extractedManifestPath, 'utf-8'));
250
+ manifest.version = extractedManifest.version || '1.0.0';
251
+ manifest.entryPoint = extractedManifest.main || 'index.js';
252
+ manifest.aiCompatible = extractedManifest.aiCompatible || true;
253
+ manifest.llmCompatible = extractedManifest.llmCompatible || true;
254
+ }
255
+ fs.writeFileSync(path.join(packageDir, 'manifest.json'), JSON.stringify(manifest, null, 2));
256
+ }
151
257
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createProviderCommand(program: Command): void;
3
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/commands/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA8XrD"}
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProviderCommand = createProviderCommand;
4
+ const commander_1 = require("commander");
5
+ const client_1 = require("../api/client");
6
+ const provider_1 = require("../api/provider");
7
+ const auth_1 = require("../utils/auth");
8
+ function createProviderCommand(program) {
9
+ const providerCmd = new commander_1.Command('provider');
10
+ function getClient(jwt) {
11
+ const creds = (0, auth_1.checkAuth)();
12
+ if (jwt && creds.jwt) {
13
+ // Provider 管理操作使用 JWT 直接认证
14
+ return new client_1.ApiClient(creds.baseUrl.replace('/ext-api', '/api'), creds.jwt);
15
+ }
16
+ return new client_1.ApiClient(creds.baseUrl, creds.apiKey);
17
+ }
18
+ // ── Provider 入驻 ──
19
+ providerCmd
20
+ .command('apply')
21
+ .description('Apply to become a strategy provider (requires ≥1M BBT)')
22
+ .requiredOption('-n, --name <name>', 'Provider name')
23
+ .option('-d, --description <desc>', 'Description')
24
+ .option('-e, --email <email>', 'Contact email')
25
+ .action(async (options) => {
26
+ const client = getClient(true);
27
+ const providerApi = new provider_1.ProviderApi(client);
28
+ console.log('Applying to become a provider...');
29
+ const response = await providerApi.apply({
30
+ name: options.name,
31
+ description: options.description,
32
+ contact_email: options.email,
33
+ });
34
+ if (response.success && response.data) {
35
+ console.log('✓ Application successful!');
36
+ console.log(` Provider ID: ${response.data.provider_id}`);
37
+ console.log(` Name: ${response.data.name}`);
38
+ console.log(` BBT Verified: ${response.data.bbt_verified}`);
39
+ console.log('');
40
+ console.log('⚠️ IMPORTANT: Your Provider Key is shown below. SAVE IT NOW!');
41
+ console.log(` Key: ${response.data.key}`);
42
+ console.log(` Prefix: ${response.data.prefix}`);
43
+ console.log('');
44
+ console.log(' Store it in your environment:');
45
+ console.log(` export PROVIDER_API_KEY=${response.data.key}`);
46
+ }
47
+ else {
48
+ console.error('Application failed:', response.error?.message);
49
+ }
50
+ });
51
+ // ── Provider 信息 ──
52
+ providerCmd
53
+ .command('me')
54
+ .description('Show my provider info and stats')
55
+ .action(async () => {
56
+ const client = getClient(true);
57
+ const providerApi = new provider_1.ProviderApi(client);
58
+ const response = await providerApi.me();
59
+ if (response.success && response.data) {
60
+ const p = response.data.provider;
61
+ const s = response.data;
62
+ console.log('Provider Info:');
63
+ console.log('='.repeat(60));
64
+ console.log(` ID: ${p.id}`);
65
+ console.log(` Name: ${p.name}`);
66
+ console.log(` Status: ${p.status}`);
67
+ console.log(` Contact: ${p.contact_email || 'N/A'}`);
68
+ console.log('');
69
+ console.log('Stats:');
70
+ console.log(` Strategies: ${s.strategy_count}`);
71
+ console.log(` Signals Pushed: ${p.total_signals_pushed}`);
72
+ console.log(` Active Subscriptions: ${s.active_subscriptions}`);
73
+ console.log(` Total Earnings: ${p.total_earnings} BBT`);
74
+ console.log(` Total Burned: ${p.total_burned} BBT`);
75
+ console.log(` Total Settled: ${p.total_revenue_settled} BBT`);
76
+ console.log(` Pending Reviews: ${s.pending_review_count}`);
77
+ }
78
+ else {
79
+ console.error('Error:', response.error?.message);
80
+ }
81
+ });
82
+ // ── 收益查询 ──
83
+ providerCmd
84
+ .command('earnings')
85
+ .description('Show earnings summary and available balance')
86
+ .action(async () => {
87
+ const client = getClient(true);
88
+ const providerApi = new provider_1.ProviderApi(client);
89
+ const response = await providerApi.earnings();
90
+ if (response.success && response.data) {
91
+ const e = response.data;
92
+ console.log('Earnings Summary:');
93
+ console.log('='.repeat(60));
94
+ console.log(` Total Earnings: ${e.total_earnings.toFixed(6)} BBT`);
95
+ console.log(` Total Settled: ${e.total_settled.toFixed(6)} BBT`);
96
+ console.log(` Available: ${e.available.toFixed(6)} BBT`);
97
+ console.log(` Pending Withdrawal: ${e.pending_withdrawal.toFixed(6)} BBT`);
98
+ console.log(` Approved Withdrawal: ${e.approved_withdrawal.toFixed(6)} BBT`);
99
+ }
100
+ else {
101
+ console.error('Error:', response.error?.message);
102
+ }
103
+ });
104
+ // ── 申请提现 ──
105
+ providerCmd
106
+ .command('withdraw')
107
+ .description('Request a withdrawal')
108
+ .requiredOption('-a, --amount <amount>', 'Amount in BBT')
109
+ .requiredOption('-s, --sol-address <address>', 'Solana receiving address')
110
+ .action(async (options) => {
111
+ const client = getClient(true);
112
+ const providerApi = new provider_1.ProviderApi(client);
113
+ const amount = parseFloat(options.amount);
114
+ console.log(`Requesting withdrawal of ${amount} BBT to ${options.solAddress}...`);
115
+ const response = await providerApi.withdraw({
116
+ amount,
117
+ sol_address: options.solAddress,
118
+ });
119
+ if (response.success && response.data) {
120
+ console.log('✓ Withdrawal request submitted');
121
+ console.log(` ID: ${response.data.id}`);
122
+ console.log(` Amount: ${response.data.amount} BBT`);
123
+ console.log(` Status: ${response.data.status}`);
124
+ console.log(' Waiting for admin approval...');
125
+ }
126
+ else {
127
+ console.error('Withdrawal failed:', response.error?.message);
128
+ }
129
+ });
130
+ // ── 提现记录 ──
131
+ providerCmd
132
+ .command('withdrawals')
133
+ .description('Show withdrawal history')
134
+ .action(async () => {
135
+ const client = getClient(true);
136
+ const providerApi = new provider_1.ProviderApi(client);
137
+ const response = await providerApi.withdrawals();
138
+ if (response.success && response.data) {
139
+ console.log('Withdrawal History:');
140
+ console.log('='.repeat(80));
141
+ if (response.data.withdrawals.length === 0) {
142
+ console.log('No withdrawals found.');
143
+ return;
144
+ }
145
+ response.data.withdrawals.forEach((w) => {
146
+ console.log(` ${w.id} — ${w.amount} BBT — ${w.status.toUpperCase()}`);
147
+ console.log(` Sol Address: ${w.sol_address}`);
148
+ if (w.note)
149
+ console.log(` Note: ${w.note}`);
150
+ if (w.tx_signature)
151
+ console.log(` Tx: ${w.tx_signature}`);
152
+ console.log(` Created: ${new Date(w.created_at).toISOString()}`);
153
+ console.log('');
154
+ });
155
+ }
156
+ else {
157
+ console.error('Error:', response.error?.message);
158
+ }
159
+ });
160
+ // ── 我的策略 ──
161
+ providerCmd
162
+ .command('strategies')
163
+ .description('List my strategies')
164
+ .action(async () => {
165
+ const client = getClient(true);
166
+ const providerApi = new provider_1.ProviderApi(client);
167
+ const response = await providerApi.strategies();
168
+ if (response.success && response.data) {
169
+ console.log('My Strategies:');
170
+ console.log('='.repeat(80));
171
+ if (response.data.strategies.length === 0) {
172
+ console.log('No strategies yet. Create one with: provider create-strategy');
173
+ return;
174
+ }
175
+ response.data.strategies.forEach((s) => {
176
+ const pricing = s.pricing_model === 'free'
177
+ ? 'Free'
178
+ : s.pricing_model === 'daily_bbt'
179
+ ? `${s.price_per_day} BBT/day`
180
+ : `${s.price_per_signal} BBT/signal`;
181
+ console.log(` ${s.id} [${s.status}] [${s.review_status}]`);
182
+ console.log(` Name: ${s.name}`);
183
+ console.log(` Market: ${s.market_type} | Symbol: ${s.symbol_pattern || 'N/A'}`);
184
+ console.log(` Pricing: ${pricing}`);
185
+ console.log(` Subscribers: ${s.subscriber_count} | Signals: ${s.total_signals}`);
186
+ console.log('');
187
+ });
188
+ }
189
+ else {
190
+ console.error('Error:', response.error?.message);
191
+ }
192
+ });
193
+ // ── 创建策略 ──
194
+ providerCmd
195
+ .command('create-strategy')
196
+ .description('Create a new strategy (draft)')
197
+ .requiredOption('-n, --name <name>', 'Strategy name')
198
+ .requiredOption('--symbol <pattern>', 'Symbol pattern (e.g. BTC,ETH)')
199
+ .requiredOption('--market <type>', 'Market type: crypto, stock, futures, forex, options')
200
+ .requiredOption('--pricing <model>', 'Pricing: free, daily_bbt, per_signal_bbt')
201
+ .option('-d, --description <desc>', 'Description')
202
+ .option('--price-day <num>', 'Price per day (for daily_bbt)')
203
+ .option('--price-signal <num>', 'Price per signal (for per_signal_bbt)')
204
+ .option('--min-bbt <num>', 'Minimum BBT tier required')
205
+ .option('--burn-rate <num>', 'Burn rate (default 0.7)', '0.7')
206
+ .option('--provider-rate <num>', 'Provider revenue rate (default 0.3)', '0.3')
207
+ .action(async (options) => {
208
+ const client = getClient(true);
209
+ const providerApi = new provider_1.ProviderApi(client);
210
+ const body = {
211
+ name: options.name,
212
+ description: options.description || '',
213
+ symbol_pattern: options.symbol,
214
+ market_type: options.market,
215
+ pricing_model: options.pricing,
216
+ };
217
+ if (options.priceDay)
218
+ body.price_per_day = parseFloat(options.priceDay);
219
+ if (options.priceSignal)
220
+ body.price_per_signal = parseFloat(options.priceSignal);
221
+ if (options.minBbt)
222
+ body.min_bbt_tier = parseInt(options.minBbt);
223
+ body.burn_rate = parseFloat(options.burnRate);
224
+ body.provider_revenue_rate = parseFloat(options.providerRate);
225
+ const response = await providerApi.createStrategy(body);
226
+ if (response.success && response.data) {
227
+ console.log('✓ Strategy created');
228
+ console.log(` ID: ${response.data.id}`);
229
+ console.log(` Name: ${response.data.name}`);
230
+ console.log(` Status: ${response.data.status}`);
231
+ console.log('');
232
+ console.log(` Submit for review: provider submit ${response.data.id}`);
233
+ }
234
+ else {
235
+ console.error('Create failed:', response.error?.message);
236
+ }
237
+ });
238
+ // ── 提交审核 ──
239
+ providerCmd
240
+ .command('submit <strategyId>')
241
+ .description('Submit strategy for admin review')
242
+ .action(async (strategyId) => {
243
+ const client = getClient(true);
244
+ const providerApi = new provider_1.ProviderApi(client);
245
+ const response = await providerApi.submitStrategy(strategyId);
246
+ if (response.success && response.data) {
247
+ console.log('✓ Strategy submitted for review');
248
+ console.log(` Status: ${response.data.status}`);
249
+ console.log(` Review: ${response.data.review_status}`);
250
+ }
251
+ else {
252
+ console.error('Submit failed:', response.error?.message);
253
+ }
254
+ });
255
+ // ── 暂停策略 ──
256
+ providerCmd
257
+ .command('pause <strategyId>')
258
+ .description('Pause a live strategy')
259
+ .action(async (strategyId) => {
260
+ const client = getClient(true);
261
+ const providerApi = new provider_1.ProviderApi(client);
262
+ const response = await providerApi.pauseStrategy(strategyId);
263
+ if (response.success && response.data) {
264
+ console.log(`✓ Strategy paused (${response.data.status})`);
265
+ }
266
+ else {
267
+ console.error('Error:', response.error?.message);
268
+ }
269
+ });
270
+ // ── 恢复策略 ──
271
+ providerCmd
272
+ .command('resume <strategyId>')
273
+ .description('Resume a paused strategy')
274
+ .action(async (strategyId) => {
275
+ const client = getClient(true);
276
+ const providerApi = new provider_1.ProviderApi(client);
277
+ const response = await providerApi.resumeStrategy(strategyId);
278
+ if (response.success && response.data) {
279
+ console.log(`✓ Strategy resumed (${response.data.status})`);
280
+ }
281
+ else {
282
+ console.error('Error:', response.error?.message);
283
+ }
284
+ });
285
+ // ── 删除策略 ──
286
+ providerCmd
287
+ .command('delete <strategyId>')
288
+ .description('Delete a draft strategy')
289
+ .action(async (strategyId) => {
290
+ const client = getClient(true);
291
+ const providerApi = new provider_1.ProviderApi(client);
292
+ const response = await providerApi.deleteStrategy(strategyId);
293
+ if (response.success && response.data) {
294
+ console.log('✓ Strategy deleted');
295
+ }
296
+ else {
297
+ console.error('Error:', response.error?.message);
298
+ }
299
+ });
300
+ // ── 推送信号 (pk-bbt 认证) ──
301
+ providerCmd
302
+ .command('push-signal')
303
+ .description('Push a signal to the platform (uses PROVIDER_API_KEY)')
304
+ .requiredOption('-s, --strategy-id <id>', 'Strategy ID')
305
+ .requiredOption('--symbol <symbol>', 'Symbol (e.g. BTCUSDT)')
306
+ .requiredOption('--decision <decision>', 'Decision: long, short, close_long, close_short, tp, sl')
307
+ .option('--price <price>', 'Current price')
308
+ .option('--confidence <num>', 'Confidence 0-1', '0.9')
309
+ .option('--stop-loss <price>', 'Stop loss price')
310
+ .option('--take-profit <price>', 'Take profit price')
311
+ .option('--reasoning <text>', 'Signal reasoning')
312
+ .action(async (options) => {
313
+ const creds = (0, auth_1.checkAuth)();
314
+ const pkKey = process.env.PROVIDER_API_KEY;
315
+ if (!pkKey) {
316
+ console.error('Error: PROVIDER_API_KEY environment variable not set');
317
+ console.error(' export PROVIDER_API_KEY=pk-bbt-your_key');
318
+ process.exit(1);
319
+ }
320
+ const providerApi = new provider_1.ProviderApi(new client_1.ApiClient(creds.baseUrl, ''));
321
+ const body = {
322
+ strategy_id: options.strategyId,
323
+ symbol: options.symbol,
324
+ decision: options.decision,
325
+ price: options.price ? parseFloat(options.price) : undefined,
326
+ confidence: parseFloat(options.confidence),
327
+ stop_loss: options.stopLoss ? parseFloat(options.stopLoss) : undefined,
328
+ take_profit: options.takeProfit ? parseFloat(options.takeProfit) : undefined,
329
+ reasoning: options.reasoning || `CLI push at ${new Date().toISOString()}`,
330
+ };
331
+ console.log(`Pushing signal: ${body.decision} ${body.symbol}...`);
332
+ const response = await providerApi.pushSignal(pkKey, creds.baseUrl, body);
333
+ if (response.success && response.data) {
334
+ console.log('✓ Signal pushed');
335
+ console.log(` Signal ID: ${response.data.id}`);
336
+ console.log(` Dispatched: ${response.data.dispatched}`);
337
+ }
338
+ else {
339
+ console.error('Push failed:', response.error?.message);
340
+ }
341
+ });
342
+ // ── Provider 统计 (pk-bbt 认证) ──
343
+ providerCmd
344
+ .command('stats')
345
+ .description('Show provider stats (uses PROVIDER_API_KEY)')
346
+ .action(async () => {
347
+ const creds = (0, auth_1.checkAuth)();
348
+ const pkKey = process.env.PROVIDER_API_KEY;
349
+ if (!pkKey) {
350
+ console.error('Error: PROVIDER_API_KEY environment variable not set');
351
+ process.exit(1);
352
+ }
353
+ const providerApi = new provider_1.ProviderApi(new client_1.ApiClient(creds.baseUrl, ''));
354
+ const response = await providerApi.stats(pkKey, creds.baseUrl);
355
+ if (response.success && response.data) {
356
+ const d = response.data;
357
+ console.log('Provider Stats:');
358
+ console.log('='.repeat(60));
359
+ console.log(` Signals Pushed: ${d.provider.total_signals_pushed}`);
360
+ console.log(` Total Earnings: ${d.provider.total_earnings} BBT`);
361
+ console.log(` Strategies: ${d.strategy_count}`);
362
+ console.log(` Signal Count: ${d.signal_count}`);
363
+ console.log(` Active Subscriptions: ${d.active_subscriptions}`);
364
+ }
365
+ else {
366
+ console.error('Error:', response.error?.message);
367
+ }
368
+ });
369
+ program.addCommand(providerCmd);
370
+ }
371
+ //# sourceMappingURL=provider.js.map