@optima-chat/commerce-cli 1.5.0 → 1.6.0

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 (40) hide show
  1. package/dist/api/rest/auth.d.ts +0 -4
  2. package/dist/api/rest/auth.d.ts.map +1 -1
  3. package/dist/api/rest/auth.js +1 -17
  4. package/dist/api/rest/auth.js.map +1 -1
  5. package/dist/api/rest/base.d.ts +1 -1
  6. package/dist/api/rest/base.js +4 -4
  7. package/dist/api/rest/base.js.map +1 -1
  8. package/dist/api/rest/commerce.d.ts +1 -1
  9. package/dist/api/rest/commerce.d.ts.map +1 -1
  10. package/dist/commands/auth/index.d.ts.map +1 -1
  11. package/dist/commands/auth/index.js +1 -5
  12. package/dist/commands/auth/index.js.map +1 -1
  13. package/dist/commands/auth/login.d.ts.map +1 -1
  14. package/dist/commands/auth/login.js +61 -15
  15. package/dist/commands/auth/login.js.map +1 -1
  16. package/dist/commands/auth/logout.d.ts.map +1 -1
  17. package/dist/commands/auth/logout.js +10 -56
  18. package/dist/commands/auth/logout.js.map +1 -1
  19. package/dist/commands/auth/whoami.d.ts.map +1 -1
  20. package/dist/commands/auth/whoami.js +34 -26
  21. package/dist/commands/auth/whoami.js.map +1 -1
  22. package/dist/commands/merchant/info.js +3 -3
  23. package/dist/commands/merchant/info.js.map +1 -1
  24. package/dist/commands/merchant/setup.js +3 -3
  25. package/dist/commands/merchant/setup.js.map +1 -1
  26. package/dist/commands/merchant/update.js +5 -5
  27. package/dist/commands/merchant/update.js.map +1 -1
  28. package/dist/utils/config.d.ts +13 -45
  29. package/dist/utils/config.d.ts.map +1 -1
  30. package/dist/utils/config.js +128 -214
  31. package/dist/utils/config.js.map +1 -1
  32. package/package.json +1 -2
  33. package/dist/commands/auth/switch.d.ts +0 -3
  34. package/dist/commands/auth/switch.d.ts.map +0 -1
  35. package/dist/commands/auth/switch.js +0 -111
  36. package/dist/commands/auth/switch.js.map +0 -1
  37. package/dist/commands/auth/test-refresh.d.ts +0 -3
  38. package/dist/commands/auth/test-refresh.d.ts.map +0 -1
  39. package/dist/commands/auth/test-refresh.js +0 -43
  40. package/dist/commands/auth/test-refresh.js.map +0 -1
@@ -1,4 +1,3 @@
1
- import Conf from 'conf';
2
1
  import { readFileSync, existsSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
3
2
  import { join } from 'path';
4
3
  import { homedir } from 'os';
@@ -9,95 +8,110 @@ export const ENV_CONFIG = {
9
8
  apiUrl: 'https://api.optima.shop',
10
9
  storeDomain: 'optima.shop',
11
10
  clientId: 'optima-cli-cwkbnadr',
12
- configFile: 'config-prod.json',
13
11
  },
14
12
  stage: {
15
- authUrl: 'https://auth-stage.optima.shop',
13
+ authUrl: 'https://auth.stage.optima.onl',
16
14
  apiUrl: 'https://api-stage.optima.shop',
17
15
  storeDomain: 'stage.optima.shop',
18
16
  clientId: 'optima-cli-c5ljkuwx',
19
- configFile: 'config-stage.json',
20
17
  },
21
18
  development: {
22
19
  authUrl: 'https://auth.optima.chat',
23
20
  apiUrl: 'https://api.optima.chat',
24
21
  storeDomain: 'optima.sh',
25
22
  clientId: 'optima-cli-q1hiavyg',
26
- configFile: 'config-dev.json',
27
23
  },
28
24
  };
29
- // ============== 配置实例管理 ==============
30
- const configDir = join(homedir(), '.config', 'commerce-cli');
31
- const currentEnvFile = join(configDir, 'current-env.json');
32
- // 配置实例缓存(多环境隔离)
33
- const configCache = new Map();
25
+ // ============== Token 文件路径 ==============
26
+ const OPTIMA_DIR = join(homedir(), '.optima');
27
+ const TOKEN_FILE = join(OPTIMA_DIR, 'token.json');
28
+ // ============== 环境映射 ==============
34
29
  /**
35
- * 获取指定环境的配置实例
30
+ * 将 token.json 的 env 字段映射到 Environment 类型
36
31
  */
37
- function getConfigForEnv(env) {
38
- if (configCache.has(env)) {
39
- return configCache.get(env);
32
+ function tokenEnvToEnvironment(tokenEnv) {
33
+ switch (tokenEnv) {
34
+ case 'prod':
35
+ return 'production';
36
+ case 'stage':
37
+ return 'stage';
38
+ case 'ci':
39
+ return 'development';
40
+ default:
41
+ return 'production';
40
42
  }
41
- const envConfig = ENV_CONFIG[env];
42
- const conf = new Conf({
43
- projectName: 'commerce-cli',
44
- configName: envConfig.configFile.replace('.json', ''), // Conf 会自动添加 .json
45
- encryptionKey: 'commerce-cli-secret-key-2025',
46
- defaults: {
47
- tokens: null,
48
- user: null,
49
- api_url: envConfig.apiUrl,
50
- auth_url: envConfig.authUrl,
51
- },
52
- });
53
- configCache.set(env, conf);
54
- return conf;
55
43
  }
56
44
  /**
57
- * 获取当前激活的环境
45
+ * 将 Environment 类型映射到 token.json 的 env 字段
58
46
  */
59
- export function getCurrentEnvironment() {
60
- // 1. 优先从环境变量读取
61
- const envFromEnv = process.env.OPTIMA_ENV;
62
- if (envFromEnv && ['production', 'stage', 'development'].includes(envFromEnv)) {
63
- return envFromEnv;
47
+ function environmentToTokenEnv(env) {
48
+ switch (env) {
49
+ case 'production':
50
+ return 'prod';
51
+ case 'stage':
52
+ return 'stage';
53
+ case 'development':
54
+ return 'ci';
55
+ default:
56
+ return 'prod';
57
+ }
58
+ }
59
+ // ============== Token 文件操作 ==============
60
+ /**
61
+ * 从 ~/.optima/token.json 读取 token 数据
62
+ */
63
+ function getOptimaToken() {
64
+ if (!existsSync(TOKEN_FILE)) {
65
+ return null;
64
66
  }
65
- // 2. 从配置文件读取
66
67
  try {
67
- if (existsSync(currentEnvFile)) {
68
- const data = JSON.parse(readFileSync(currentEnvFile, 'utf-8'));
69
- if (data.env && ['production', 'stage', 'development'].includes(data.env)) {
70
- return data.env;
71
- }
72
- }
68
+ const content = readFileSync(TOKEN_FILE, 'utf-8');
69
+ return JSON.parse(content);
73
70
  }
74
71
  catch (error) {
75
- // 文件读取失败,使用默认值
72
+ // 文件读取或解析失败
73
+ return null;
76
74
  }
77
- // 3. 默认使用生产环境
78
- return 'production';
79
75
  }
80
76
  /**
81
- * 设置当前激活的环境
77
+ * 保存 token 到 ~/.optima/token.json
78
+ */
79
+ function saveOptimaToken(token) {
80
+ // 确保目录存在
81
+ mkdirSync(OPTIMA_DIR, { recursive: true });
82
+ writeFileSync(TOKEN_FILE, JSON.stringify(token, null, 2), 'utf-8');
83
+ }
84
+ /**
85
+ * 删除 ~/.optima/token.json
82
86
  */
83
- export function setCurrentEnvironment(env) {
87
+ function deleteOptimaToken() {
84
88
  try {
85
- // 确保目录存在
86
- mkdirSync(configDir, { recursive: true });
87
- // 写入环境配置
88
- const data = { env };
89
- writeFileSync(currentEnvFile, JSON.stringify(data, null, 2), 'utf-8');
89
+ if (existsSync(TOKEN_FILE)) {
90
+ unlinkSync(TOKEN_FILE);
91
+ }
90
92
  }
91
93
  catch (error) {
92
- console.error(`无法保存环境配置: ${error.message}`);
94
+ // 忽略删除失败
93
95
  }
94
96
  }
97
+ // ============== 公开 API ==============
95
98
  /**
96
- * 获取当前环境的配置实例
99
+ * 获取当前环境
100
+ * 优先级:OPTIMA_ENV 环境变量 > token.json 的 env 字段 > 默认 production
97
101
  */
98
- function getConfig() {
99
- const env = getCurrentEnvironment();
100
- return getConfigForEnv(env);
102
+ export function getCurrentEnvironment() {
103
+ // 1. 优先从环境变量读取
104
+ const envFromEnv = process.env.OPTIMA_ENV;
105
+ if (envFromEnv && ['production', 'stage', 'development'].includes(envFromEnv)) {
106
+ return envFromEnv;
107
+ }
108
+ // 2. 从 token.json 读取
109
+ const token = getOptimaToken();
110
+ if (token?.env) {
111
+ return tokenEnvToEnvironment(token.env);
112
+ }
113
+ // 3. 默认使用生产环境
114
+ return 'production';
101
115
  }
102
116
  /**
103
117
  * 获取当前环境的配置信息
@@ -106,247 +120,147 @@ export function getCurrentEnvConfig() {
106
120
  const env = getCurrentEnvironment();
107
121
  return ENV_CONFIG[env];
108
122
  }
109
- // ============== 向后兼容的配置变量(使用当前环境) ==============
110
- const config = getConfig();
111
- /**
112
- * 从 ~/.optima/token 文件读取 token
113
- */
114
- function getTokenFromFile() {
115
- const tokenFile = join(homedir(), '.optima', 'token');
116
- if (!existsSync(tokenFile)) {
117
- return null;
118
- }
119
- try {
120
- return readFileSync(tokenFile, 'utf-8').trim();
121
- }
122
- catch (error) {
123
- // 文件读取失败,返回 null
124
- return null;
125
- }
126
- }
127
123
  /**
128
124
  * 保存认证令牌
129
125
  */
130
- export function saveTokens(access_token, refresh_token, expires_in) {
126
+ export function saveTokens(access_token, refresh_token, expires_in, env, user) {
131
127
  const expires_at = Date.now() + expires_in * 1000;
132
- config.set('tokens', {
128
+ const token = {
129
+ env: environmentToTokenEnv(env),
133
130
  access_token,
134
131
  refresh_token,
135
- expires_in,
132
+ token_type: 'Bearer',
136
133
  expires_at,
137
- });
134
+ user,
135
+ };
136
+ saveOptimaToken(token);
138
137
  }
139
138
  /**
140
- * 获取访问令牌(不刷新)
141
- * 优先级:OPTIMA_TOKEN 环境变量 > ~/.optima/token 文件 > 配置文件
139
+ * 获取访问令牌
140
+ * 优先级:OPTIMA_TOKEN 环境变量 > ~/.optima/token.json
142
141
  */
143
142
  export function getAccessToken() {
144
143
  // 1. 优先从环境变量读取
145
144
  if (process.env.OPTIMA_TOKEN) {
146
145
  return process.env.OPTIMA_TOKEN;
147
146
  }
148
- // 2. 从 ~/.optima/token 文件读取
149
- const tokenFromFile = getTokenFromFile();
150
- if (tokenFromFile) {
151
- return tokenFromFile;
152
- }
153
- // 3. 从配置文件读取
154
- const tokens = config.get('tokens');
155
- if (!tokens)
156
- return null;
157
- return tokens.access_token;
147
+ // 2. 从 token.json 读取
148
+ const token = getOptimaToken();
149
+ return token?.access_token ?? null;
158
150
  }
159
- /**
160
- * 提前刷新的缓冲时间(5 分钟)
161
- * 在 token 过期前 5 分钟就开始刷新,避免请求过程中 token 过期
162
- */
163
- const TOKEN_REFRESH_BUFFER_MS = 5 * 60 * 1000;
164
151
  /**
165
152
  * 获取 token 过期时间
166
153
  */
167
154
  export function getTokenExpiresAt() {
168
- const tokens = config.get('tokens');
169
- return tokens?.expires_at ?? null;
155
+ const token = getOptimaToken();
156
+ return token?.expires_at ?? null;
170
157
  }
171
158
  /**
172
- * 检查 token 是否过期(或即将过期)
173
- * 采用提前 5 分钟刷新策略,避免以下问题:
174
- * 1. 请求过程中 token 过期
175
- * 2. 网络延迟导致刷新不及时
159
+ * 检查 token 是否过期
176
160
  */
177
161
  export function isTokenExpired() {
162
+ // 环境变量 token 不检查过期
163
+ if (process.env.OPTIMA_TOKEN) {
164
+ return false;
165
+ }
178
166
  const expiresAt = getTokenExpiresAt();
179
167
  if (!expiresAt)
180
168
  return true;
181
- return Date.now() >= (expiresAt - TOKEN_REFRESH_BUFFER_MS);
182
- }
183
- /**
184
- * 获取刷新令牌
185
- */
186
- export function getRefreshToken() {
187
- const tokens = config.get('tokens');
188
- return tokens?.refresh_token ?? null;
169
+ return Date.now() >= expiresAt;
189
170
  }
190
171
  /**
191
172
  * 检查是否已认证(不检查过期)
192
173
  */
193
174
  export function isAuthenticated() {
194
- // 环境变量或配置文件中有 token
195
175
  const token = getAccessToken();
196
176
  return token !== null;
197
177
  }
198
178
  /**
199
- * 确保有效的访问令牌(自动刷新)
179
+ * 确保有效的访问令牌
200
180
  * @returns 有效的访问令牌,如果无法获取则返回 null
201
- * @throws AuthenticationError 当 token 刷新失败时
181
+ * @throws AuthenticationError 当 token 过期时
202
182
  */
203
183
  export async function ensureValidToken() {
204
- // 1. 如果使用环境变量 token,直接返回(不刷新)
184
+ // 1. 如果使用环境变量 token,直接返回(不检查过期)
205
185
  if (process.env.OPTIMA_TOKEN) {
206
186
  if (process.env.DEBUG === 'true') {
207
187
  console.log('[Token] Using OPTIMA_TOKEN environment variable');
208
188
  }
209
189
  return process.env.OPTIMA_TOKEN;
210
190
  }
211
- // 2. 如果使用 ~/.optima/token 文件,直接返回(不刷新)
212
- const tokenFromFile = getTokenFromFile();
213
- if (tokenFromFile) {
214
- if (process.env.DEBUG === 'true') {
215
- console.log('[Token] Using token from ~/.optima/token file');
216
- }
217
- return tokenFromFile;
218
- }
219
- // 3. 使用配置文件 token(支持自动刷新)
220
- const tokens = config.get('tokens');
221
- if (!tokens) {
222
- // 没有保存的 token,需要登录
191
+ // 2. token.json 读取
192
+ const token = getOptimaToken();
193
+ if (!token) {
194
+ // 没有 token,需要登录
223
195
  return null;
224
196
  }
225
- // 如果未过期,直接返回
226
- if (!isTokenExpired()) {
197
+ // 3. 检查是否过期
198
+ if (Date.now() >= token.expires_at) {
227
199
  if (process.env.DEBUG === 'true') {
228
- const remaining = Math.floor((tokens.expires_at - Date.now()) / 1000 / 60);
229
- console.log(`[Token] Valid token, expires in ${remaining} minutes`);
200
+ console.log('[Token] Token expired');
230
201
  }
231
- return tokens.access_token;
232
- }
233
- // Token 已过期,尝试刷新
234
- if (process.env.DEBUG === 'true') {
235
- console.log('[Token] Token expired, attempting refresh...');
236
- }
237
- try {
238
- // 动态导入避免循环依赖
239
- const { authApi } = await import('../api/rest/auth.js');
240
- const result = await authApi.refreshToken(tokens.refresh_token);
241
- if (result.access_token && result.refresh_token && result.expires_in) {
242
- // 保存新的 token
243
- saveTokens(result.access_token, result.refresh_token, result.expires_in);
244
- if (process.env.DEBUG === 'true') {
245
- console.log(`[Token] Refresh successful, new token expires in ${result.expires_in / 60} minutes`);
246
- }
247
- return result.access_token;
248
- }
249
- // 刷新失败,清除配置并抛出错误
250
- clearConfig();
251
202
  const { AuthenticationError } = await import('./error.js');
252
- throw new AuthenticationError('登录已过期,请重新登录: commerce auth login');
203
+ throw new AuthenticationError('登录已过期,请重新登录: commerce auth login 或 optima');
253
204
  }
254
- catch (error) {
255
- // 刷新失败(可能 refresh token 也过期了),清除配置
256
- clearConfig();
257
- // 如果已经是 AuthenticationError,直接抛出
258
- if (error.name === 'AuthenticationError') {
259
- throw error;
260
- }
261
- // 其他错误(网络问题等),包装成 AuthenticationError
262
- const { AuthenticationError } = await import('./error.js');
263
- const message = error.response?.data?.error_description || error.message || '未知错误';
264
- throw new AuthenticationError(`Token 刷新失败: ${message}。请重新登录: commerce auth login`);
205
+ if (process.env.DEBUG === 'true') {
206
+ const remaining = Math.floor((token.expires_at - Date.now()) / 1000 / 60);
207
+ console.log(`[Token] Valid token, expires in ${remaining} minutes`);
265
208
  }
209
+ return token.access_token;
266
210
  }
267
211
  /**
268
- * 保存用户信息
212
+ * 保存用户信息到 token.json
269
213
  */
270
214
  export function saveUser(user) {
271
- config.set('user', user);
215
+ const token = getOptimaToken();
216
+ if (token) {
217
+ token.user = user;
218
+ saveOptimaToken(token);
219
+ }
272
220
  }
273
221
  /**
274
222
  * 获取当前用户信息
275
223
  */
276
224
  export function getUser() {
277
- return config.get('user');
225
+ const token = getOptimaToken();
226
+ return token?.user ?? null;
278
227
  }
279
228
  /**
280
- * 清除当前环境的配置(登出)
229
+ * 清除配置(登出)- 删除 token.json
281
230
  */
282
231
  export function clearConfig() {
283
- const currentConfig = getConfig();
284
- currentConfig.clear();
285
- }
286
- /**
287
- * 清除指定环境的配置
288
- */
289
- export function clearConfigForEnv(env) {
290
- const conf = getConfigForEnv(env);
291
- conf.clear();
292
- }
293
- /**
294
- * 清除所有环境的配置
295
- */
296
- export function clearAllConfigs() {
297
- const environments = ['production', 'stage', 'development'];
298
- environments.forEach(env => {
299
- const conf = getConfigForEnv(env);
300
- conf.clear();
301
- });
302
- // 同时清除当前环境标记
303
- try {
304
- if (existsSync(currentEnvFile)) {
305
- unlinkSync(currentEnvFile);
306
- }
307
- }
308
- catch (error) {
309
- // 忽略错误
310
- }
232
+ deleteOptimaToken();
311
233
  }
312
234
  /**
313
235
  * 获取配置文件路径
314
236
  */
315
237
  export function getConfigPath() {
316
- return config.path;
238
+ return TOKEN_FILE;
317
239
  }
318
240
  /**
319
241
  * 获取 Commerce API URL
320
- * 优先级:环境变量 > 配置文件 > 默认值
242
+ * 优先级:环境变量 > 当前环境配置
321
243
  */
322
244
  export function getApiUrl() {
323
- return process.env.OPTIMA_API_URL || config.get('api_url') || 'https://api.optima.shop';
245
+ if (process.env.OPTIMA_API_URL) {
246
+ return process.env.OPTIMA_API_URL;
247
+ }
248
+ const envConfig = getCurrentEnvConfig();
249
+ return envConfig.apiUrl;
324
250
  }
325
251
  /**
326
252
  * 获取 Auth API URL
327
- * 优先级:环境变量 > 配置文件 > 默认值
253
+ * 优先级:环境变量 > 当前环境配置
328
254
  */
329
255
  export function getAuthUrl() {
330
- return process.env.OPTIMA_AUTH_URL || config.get('auth_url') || 'https://auth.optima.shop';
331
- }
332
- /**
333
- * 设置 Commerce API URL
334
- */
335
- export function setApiUrl(url) {
336
- config.set('api_url', url);
337
- }
338
- /**
339
- * 设置 Auth API URL
340
- */
341
- export function setAuthUrl(url) {
342
- config.set('auth_url', url);
256
+ if (process.env.OPTIMA_AUTH_URL) {
257
+ return process.env.OPTIMA_AUTH_URL;
258
+ }
259
+ const envConfig = getCurrentEnvConfig();
260
+ return envConfig.authUrl;
343
261
  }
344
262
  /**
345
263
  * 获取店铺前端域名
346
- * 根据当前环境返回对应的前端域名
347
- * - production: optima.shop
348
- * - stage: stage.optima.shop
349
- * - development: optima.sh
350
264
  */
351
265
  export function getStoreDomain() {
352
266
  const env = getCurrentEnvironment();
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/commerce-cli",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "用自然语言管理电商店铺 - 专为 Claude Code 设计的对话式 CLI 工具,支持多环境和功能测试",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -54,7 +54,6 @@
54
54
  "chalk": "^5.3.0",
55
55
  "cli-table3": "^0.6.5",
56
56
  "commander": "^12.0.0",
57
- "conf": "^12.0.0",
58
57
  "dayjs": "^1.11.18",
59
58
  "form-data": "^4.0.4",
60
59
  "inquirer": "^9.2.14",
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const switchCommand: Command;
3
- //# sourceMappingURL=switch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/switch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiIpC,eAAO,MAAM,aAAa,SAAM,CAAC"}
@@ -1,111 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import { setCurrentEnvironment, isAuthenticated, getUser, getCurrentEnvironment, ENV_CONFIG } from '../../utils/config.js';
4
- import { authApi } from '../../api/rest/auth.js';
5
- import { commerceApi } from '../../api/rest/commerce.js';
6
- import { output } from '../../utils/output.js';
7
- import { addEnhancedHelp } from '../../utils/helpText.js';
8
- const cmd = new Command('switch')
9
- .description('Switch to a different environment')
10
- .requiredOption('--env <environment>', 'Target environment: production, stage, or development')
11
- .action(async (options) => {
12
- try {
13
- // 验证环境参数
14
- const validEnvironments = ['production', 'stage', 'development'];
15
- if (!validEnvironments.includes(options.env)) {
16
- console.log(chalk.red(`\n❌ 无效的环境: ${options.env}`));
17
- console.log(chalk.gray(' 支持的环境: production, stage, development\n'));
18
- return;
19
- }
20
- const currentEnv = getCurrentEnvironment();
21
- // 检查是否已经是目标环境
22
- if (currentEnv === options.env) {
23
- console.log(chalk.yellow(`\n⚠️ 已经在 ${options.env} 环境\n`));
24
- return;
25
- }
26
- // 切换环境
27
- setCurrentEnvironment(options.env);
28
- // 重新初始化 API 客户端
29
- authApi.reinitialize();
30
- commerceApi.reinitialize();
31
- const envConfig = ENV_CONFIG[options.env];
32
- // 检查目标环境是否已登录
33
- const isLoggedIn = isAuthenticated();
34
- const user = isLoggedIn ? getUser() : null;
35
- if (output.isJson()) {
36
- output.success({
37
- switched: true,
38
- from: currentEnv,
39
- to: options.env,
40
- logged_in: isLoggedIn,
41
- user: user ? { email: user.email, name: user.name } : null,
42
- auth_url: envConfig.authUrl,
43
- api_url: envConfig.apiUrl
44
- });
45
- }
46
- else {
47
- console.log(chalk.green(`\n✓ 已切换到 ${options.env} 环境\n`));
48
- console.log(chalk.white('环境信息:'));
49
- console.log(chalk.gray(` Auth URL: ${envConfig.authUrl}`));
50
- console.log(chalk.gray(` API URL: ${envConfig.apiUrl}`));
51
- console.log(chalk.gray(` 店铺域名: ${envConfig.storeDomain}`));
52
- if (isLoggedIn && user) {
53
- console.log(chalk.white('\n登录状态:'));
54
- console.log(chalk.green(` ✓ 已登录`));
55
- console.log(chalk.gray(` 账号: ${user.email}`));
56
- }
57
- else {
58
- console.log(chalk.white('\n登录状态:'));
59
- console.log(chalk.yellow(` ⚠️ 未登录`));
60
- console.log(chalk.gray(' 使用 ') + chalk.cyan(`commerce auth login --env ${options.env}`) + chalk.gray(' 登录'));
61
- }
62
- console.log('');
63
- }
64
- }
65
- catch (error) {
66
- console.log(chalk.red(`\n❌ 切换环境失败: ${error.message}\n`));
67
- }
68
- });
69
- addEnhancedHelp(cmd, {
70
- examples: [
71
- '# Switch to stage environment',
72
- '$ commerce auth switch --env stage',
73
- '',
74
- '# Switch to development environment',
75
- '$ commerce auth switch --env development',
76
- '',
77
- '# Switch back to production',
78
- '$ commerce auth switch --env production',
79
- ],
80
- output: {
81
- example: JSON.stringify({
82
- success: true,
83
- data: {
84
- switched: true,
85
- from: 'production',
86
- to: 'stage',
87
- logged_in: true,
88
- user: {
89
- email: 'user@example.com',
90
- name: 'User Name'
91
- },
92
- auth_url: 'https://auth-stage.optima.shop',
93
- api_url: 'https://api-stage.optima.shop'
94
- }
95
- }, null, 2)
96
- },
97
- relatedCommands: [
98
- { command: 'auth whoami', description: 'Check current environment and login status' },
99
- { command: 'auth login', description: 'Login to an environment' },
100
- { command: 'auth logout', description: 'Logout from current or specific environment' },
101
- ],
102
- notes: [
103
- 'Switches the active environment without requiring re-login',
104
- 'Each environment maintains separate credentials',
105
- 'API clients are automatically reinitialized to use the new environment URLs',
106
- 'Use "auth whoami" to verify current environment after switching',
107
- 'If not logged in to target environment, you will need to run "auth login"',
108
- ]
109
- });
110
- export const switchCommand = cmd;
111
- //# sourceMappingURL=switch.js.map