@clawmarket.cc/marketcc 0.5.4 → 0.5.5

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.
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export default function registerSetupKeys(program: Command): void;
@@ -0,0 +1,373 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { unlink } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ import { exec } from 'node:child_process';
6
+ import { promisify } from 'node:util';
7
+ import { randomBytes } from 'node:crypto';
8
+ import prompts from 'prompts';
9
+ import ora from 'ora';
10
+ import chalk from 'chalk';
11
+ const execAsync = promisify(exec);
12
+ const DEFAULT_BOT_PATH = join(homedir(), '.openclaw');
13
+ const VALIDATORS = {
14
+ 'moonshot': (v) => /^sk-[A-Za-z0-9_-]{20,}$/.test(v),
15
+ 'openai': (v) => /^sk-[A-Za-z0-9_-]{20,}$/.test(v),
16
+ 'anthropic': (v) => /^sk-ant-[A-Za-z0-9_-]{20,}$/.test(v),
17
+ 'xai': (v) => /^xai-[A-Za-z0-9_-]{20,}$/.test(v),
18
+ 'google': (v) => /^AIza[A-Za-z0-9_-]{35}$/.test(v),
19
+ 'brave': (v) => /^BSA[A-Za-z0-9]{20,}$/.test(v),
20
+ 'telegram': (v) => /^[0-9]{8,10}:[A-Za-z0-9_-]{35}$/.test(v),
21
+ 'stripe': (v) => /^sk_live_[A-Za-z0-9]{24,}$/.test(v),
22
+ };
23
+ function setNestedValue(obj, path, value) {
24
+ const parts = path.split('.');
25
+ let current = obj;
26
+ for (let i = 0; i < parts.length - 1; i++) {
27
+ const next = current[parts[i]];
28
+ if (typeof next !== 'object' || next === null)
29
+ return;
30
+ current = next;
31
+ }
32
+ current[parts[parts.length - 1]] = value;
33
+ }
34
+ function replaceKeyInFiles(botPath, placeholder, value, locations) {
35
+ let replaced = 0;
36
+ for (const location of locations) {
37
+ const filePath = join(botPath, location.file);
38
+ if (!existsSync(filePath))
39
+ continue;
40
+ if (filePath.endsWith('.json') && location.json_path) {
41
+ try {
42
+ const raw = readFileSync(filePath, 'utf-8');
43
+ const data = JSON.parse(raw);
44
+ setNestedValue(data, location.json_path, value);
45
+ writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n');
46
+ replaced++;
47
+ }
48
+ catch {
49
+ // Fallback to string replacement
50
+ let content = readFileSync(filePath, 'utf-8');
51
+ if (content.includes(placeholder)) {
52
+ content = content.replaceAll(placeholder, value);
53
+ writeFileSync(filePath, content);
54
+ replaced++;
55
+ }
56
+ }
57
+ }
58
+ else {
59
+ let content = readFileSync(filePath, 'utf-8');
60
+ if (content.includes(placeholder)) {
61
+ content = content.replaceAll(placeholder, value);
62
+ writeFileSync(filePath, content);
63
+ replaced++;
64
+ }
65
+ }
66
+ }
67
+ return replaced;
68
+ }
69
+ export default function registerSetupKeys(program) {
70
+ program
71
+ .command('setup-keys [path]')
72
+ .description('Configure API keys for a downloaded bot')
73
+ .action(async (botPath) => {
74
+ const targetPath = botPath || DEFAULT_BOT_PATH;
75
+ try {
76
+ console.log('');
77
+ console.log(chalk.cyan('Setting up API keys...'));
78
+ console.log('');
79
+ const manifestPath = join(targetPath, 'KEYS_REQUIRED.json');
80
+ const setupMdPath = join(targetPath, 'SETUP.md');
81
+ if (!existsSync(manifestPath)) {
82
+ console.log(chalk.green('+ No keys to configure. Bot is ready!'));
83
+ console.log('');
84
+ return;
85
+ }
86
+ // Hint about manual setup guide
87
+ if (existsSync(setupMdPath)) {
88
+ console.log(chalk.dim('Tip: See SETUP.md for manual setup instructions.'));
89
+ console.log('');
90
+ }
91
+ let manifest;
92
+ try {
93
+ manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
94
+ }
95
+ catch {
96
+ console.error(chalk.red('Error: Could not parse KEYS_REQUIRED.json'));
97
+ process.exit(1);
98
+ }
99
+ if (!manifest.keys || manifest.keys.length === 0) {
100
+ console.log(chalk.green('+ No keys to configure. Bot is ready!'));
101
+ await unlink(manifestPath);
102
+ console.log('');
103
+ return;
104
+ }
105
+ const providers = new Set(manifest.keys.map(k => k.provider.name));
106
+ console.log(chalk.dim(`Found ${manifest.keys.length} key${manifest.keys.length === 1 ? '' : 's'} to configure across ${providers.size} provider${providers.size === 1 ? '' : 's'}.`));
107
+ console.log('');
108
+ // Group keys by category
109
+ const llmKeys = manifest.keys.filter(k => k.type === 'API_KEY' || k.type === 'ENV_VAR');
110
+ const oauthKeys = manifest.keys.filter(k => k.type === 'OAUTH_ACCESS_TOKEN' || k.type === 'OAUTH_REFRESH_TOKEN');
111
+ const serviceKeys = manifest.keys.filter(k => k.type === 'BOT_TOKEN' || k.type === 'AUTH_TOKEN');
112
+ let keyIndex = 0;
113
+ const total = manifest.keys.length;
114
+ const reauthedProviders = new Set();
115
+ // ── LLM Provider Keys ──
116
+ if (llmKeys.length > 0) {
117
+ console.log(chalk.bold('--- LLM Provider Keys ---'));
118
+ console.log('');
119
+ for (const key of llmKeys) {
120
+ keyIndex++;
121
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${key.provider.name.toUpperCase()} -- ${key.type === 'ENV_VAR' ? 'Environment Variable' : 'API Key'}`));
122
+ if (key.provider.baseUrl) {
123
+ console.log(chalk.dim(` Provider: ${key.provider.name} (${key.provider.baseUrl})`));
124
+ }
125
+ else {
126
+ console.log(chalk.dim(` Provider: ${key.provider.name}`));
127
+ }
128
+ if (key.models.length > 0) {
129
+ console.log(chalk.dim(` Models: ${key.models.map(m => m.id).join(', ')}`));
130
+ }
131
+ const files = key.found_in.map(f => f.file).join(', ');
132
+ console.log(chalk.dim(` Used in: ${files}`));
133
+ if (key.description) {
134
+ const hintMatch = key.description.match(/starts with ([^ )]+)/);
135
+ if (hintMatch) {
136
+ console.log(chalk.dim(` Hint: Starts with ${hintMatch[1]}`));
137
+ }
138
+ }
139
+ const response = await prompts({
140
+ type: 'text',
141
+ name: 'value',
142
+ message: 'Enter value',
143
+ });
144
+ if (!response.value) {
145
+ console.log(chalk.yellow(' ! Skipped'));
146
+ console.log('');
147
+ continue;
148
+ }
149
+ // Validate format
150
+ const validator = VALIDATORS[key.provider.name];
151
+ if (validator && !validator(response.value)) {
152
+ const confirmResp = await prompts({
153
+ type: 'confirm',
154
+ name: 'useAnyway',
155
+ message: `Value doesn't match expected format for ${key.provider.name}. Use anyway?`,
156
+ initial: true,
157
+ });
158
+ if (!confirmResp.useAnyway) {
159
+ console.log(chalk.yellow(' ! Skipped'));
160
+ console.log('');
161
+ continue;
162
+ }
163
+ }
164
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, response.value, key.found_in);
165
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
166
+ console.log('');
167
+ }
168
+ }
169
+ // ── OAuth Tokens ──
170
+ if (oauthKeys.length > 0) {
171
+ console.log(chalk.bold('--- OAuth Tokens ---'));
172
+ console.log('');
173
+ const byProvider = new Map();
174
+ for (const key of oauthKeys) {
175
+ const existing = byProvider.get(key.provider.name) || [];
176
+ existing.push(key);
177
+ byProvider.set(key.provider.name, existing);
178
+ }
179
+ for (const [provider, providerKeys] of byProvider) {
180
+ const accessKey = providerKeys.find(k => k.type === 'OAUTH_ACCESS_TOKEN');
181
+ const refreshKey = providerKeys.find(k => k.type === 'OAUTH_REFRESH_TOKEN');
182
+ if (accessKey) {
183
+ keyIndex++;
184
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${provider.toUpperCase()} -- OAuth Access Token`));
185
+ console.log(chalk.dim(` Provider: ${provider}`));
186
+ if (accessKey.models.length > 0) {
187
+ console.log(chalk.dim(` Models: ${accessKey.models.map(m => m.id).join(', ')}`));
188
+ }
189
+ console.log(chalk.yellow(` ! OAuth tokens expire. Recommended: run 'openclaw auth login ${provider}' instead.`));
190
+ const authResponse = await prompts({
191
+ type: 'confirm',
192
+ name: 'reauth',
193
+ message: 'Re-authenticate now?',
194
+ initial: true,
195
+ });
196
+ if (authResponse.reauth) {
197
+ const spinnerAuth = ora(`Running: openclaw auth login ${provider}...`).start();
198
+ try {
199
+ await execAsync(`openclaw auth login ${provider}`);
200
+ spinnerAuth.succeed('Authenticated successfully');
201
+ reauthedProviders.add(provider);
202
+ }
203
+ catch {
204
+ spinnerAuth.fail('Authentication failed');
205
+ console.log(chalk.dim(' You can try manually later with:'));
206
+ console.log(chalk.dim(` openclaw auth login ${provider}`));
207
+ }
208
+ }
209
+ else {
210
+ const response = await prompts({
211
+ type: 'text',
212
+ name: 'value',
213
+ message: 'Enter access token (or leave empty to skip)',
214
+ });
215
+ if (response.value) {
216
+ const replaced = replaceKeyInFiles(targetPath, accessKey.placeholder, response.value, accessKey.found_in);
217
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
218
+ }
219
+ else {
220
+ console.log(chalk.yellow(' ! Skipped'));
221
+ }
222
+ }
223
+ console.log('');
224
+ }
225
+ if (refreshKey) {
226
+ keyIndex++;
227
+ if (reauthedProviders.has(provider)) {
228
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${provider.toUpperCase()} -- OAuth Refresh Token`));
229
+ console.log(chalk.green(' + Handled by re-authentication above'));
230
+ }
231
+ else {
232
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${provider.toUpperCase()} -- OAuth Refresh Token`));
233
+ const response = await prompts({
234
+ type: 'text',
235
+ name: 'value',
236
+ message: 'Enter refresh token (or leave empty to skip)',
237
+ });
238
+ if (response.value) {
239
+ const replaced = replaceKeyInFiles(targetPath, refreshKey.placeholder, response.value, refreshKey.found_in);
240
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
241
+ }
242
+ else {
243
+ console.log(chalk.yellow(' ! Skipped'));
244
+ }
245
+ }
246
+ console.log('');
247
+ }
248
+ }
249
+ }
250
+ // ── Service Keys ──
251
+ if (serviceKeys.length > 0) {
252
+ console.log(chalk.bold('--- Service Keys ---'));
253
+ console.log('');
254
+ for (const key of serviceKeys) {
255
+ keyIndex++;
256
+ const typeLabel = key.type === 'BOT_TOKEN' ? 'Bot Token' : 'Auth Token';
257
+ console.log(chalk.bold(`[${keyIndex}/${total}] ${key.provider.name.toUpperCase()} -- ${typeLabel}`));
258
+ if (key.provider.service) {
259
+ console.log(chalk.dim(` Service: ${key.provider.service}`));
260
+ }
261
+ const files = key.found_in.map(f => f.file).join(', ');
262
+ console.log(chalk.dim(` Used in: ${files}`));
263
+ // Gateway token: offer auto-generation
264
+ if (key.type === 'AUTH_TOKEN' && key.provider.name === 'openclaw-gateway') {
265
+ console.log(chalk.yellow(' ! Auto-generated on setup. Generate new token?'));
266
+ const genResponse = await prompts({
267
+ type: 'confirm',
268
+ name: 'generate',
269
+ message: 'Generate new token?',
270
+ initial: true,
271
+ });
272
+ if (genResponse.generate) {
273
+ const newToken = randomBytes(32).toString('hex');
274
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, newToken, key.found_in);
275
+ console.log(chalk.green(` + Generated new gateway token (replaced in ${replaced} file${replaced === 1 ? '' : 's'})`));
276
+ }
277
+ else {
278
+ const response = await prompts({
279
+ type: 'text',
280
+ name: 'value',
281
+ message: 'Enter token value',
282
+ });
283
+ if (response.value) {
284
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, response.value, key.found_in);
285
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
286
+ }
287
+ else {
288
+ console.log(chalk.yellow(' ! Skipped'));
289
+ }
290
+ }
291
+ }
292
+ else {
293
+ const response = await prompts({
294
+ type: 'text',
295
+ name: 'value',
296
+ message: 'Enter value',
297
+ });
298
+ if (!response.value) {
299
+ console.log(chalk.yellow(' ! Skipped'));
300
+ console.log('');
301
+ continue;
302
+ }
303
+ // Validate format
304
+ const validator = VALIDATORS[key.provider.name];
305
+ if (validator && !validator(response.value)) {
306
+ const confirmResp = await prompts({
307
+ type: 'confirm',
308
+ name: 'useAnyway',
309
+ message: `Value doesn't match expected format for ${key.provider.name}. Use anyway?`,
310
+ initial: true,
311
+ });
312
+ if (!confirmResp.useAnyway) {
313
+ console.log(chalk.yellow(' ! Skipped'));
314
+ console.log('');
315
+ continue;
316
+ }
317
+ }
318
+ const replaced = replaceKeyInFiles(targetPath, key.placeholder, response.value, key.found_in);
319
+ console.log(chalk.green(` + Replaced in ${replaced} file${replaced === 1 ? '' : 's'}`));
320
+ }
321
+ console.log('');
322
+ }
323
+ }
324
+ // Remove manifest files
325
+ console.log(chalk.cyan('Cleaning up manifest files...'));
326
+ await unlink(manifestPath);
327
+ if (existsSync(setupMdPath)) {
328
+ await unlink(setupMdPath);
329
+ }
330
+ console.log('');
331
+ // Restart gateway
332
+ const spinnerRestart = ora('Restarting gateway...').start();
333
+ try {
334
+ await execAsync('systemctl restart openclaw-gateway');
335
+ spinnerRestart.succeed('Gateway restarted');
336
+ }
337
+ catch {
338
+ try {
339
+ await execAsync('pm2 restart openclaw-gateway');
340
+ spinnerRestart.succeed('Gateway restarted');
341
+ }
342
+ catch {
343
+ spinnerRestart.warn('Could not restart gateway automatically. Please restart manually.');
344
+ }
345
+ }
346
+ console.log('');
347
+ console.log(chalk.green('All API keys configured!'));
348
+ if (manifest.model_context) {
349
+ const mc = manifest.model_context;
350
+ console.log('');
351
+ if (mc.primary_model) {
352
+ console.log(chalk.dim(` Primary: ${mc.primary_model}`));
353
+ }
354
+ if (mc.fallback_models.length > 0) {
355
+ const shown = mc.fallback_models.slice(0, 3).join(', ');
356
+ const extra = mc.fallback_models.length > 3 ? `, +${mc.fallback_models.length - 3} more` : '';
357
+ console.log(chalk.dim(` Fallbacks: ${shown}${extra}`));
358
+ }
359
+ }
360
+ console.log('');
361
+ }
362
+ catch (err) {
363
+ if (err instanceof Error) {
364
+ console.error(chalk.red(`\nError: ${err.message}`));
365
+ }
366
+ else {
367
+ console.error(chalk.red('\nAn unexpected error occurred.'));
368
+ }
369
+ process.exit(1);
370
+ }
371
+ });
372
+ }
373
+ //# sourceMappingURL=setup-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-keys.js","sourceRoot":"","sources":["../../src/commands/setup-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export default function registerUploadBot(program: Command): void;