@optima-chat/commerce-cli 1.7.2 → 1.7.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.
Files changed (181) hide show
  1. package/.claude/settings.local.json +70 -0
  2. package/README.md +7 -7
  3. package/dist/commands/address/create.d.ts +3 -0
  4. package/dist/commands/address/create.d.ts.map +1 -0
  5. package/dist/commands/address/create.js +122 -0
  6. package/dist/commands/address/create.js.map +1 -0
  7. package/dist/commands/address/delete.d.ts +3 -0
  8. package/dist/commands/address/delete.d.ts.map +1 -0
  9. package/dist/commands/address/delete.js +50 -0
  10. package/dist/commands/address/delete.js.map +1 -0
  11. package/dist/commands/address/get.d.ts +3 -0
  12. package/dist/commands/address/get.d.ts.map +1 -0
  13. package/dist/commands/address/get.js +50 -0
  14. package/dist/commands/address/get.js.map +1 -0
  15. package/dist/commands/address/index.d.ts +3 -0
  16. package/dist/commands/address/index.d.ts.map +1 -0
  17. package/dist/commands/address/index.js +16 -0
  18. package/dist/commands/address/index.js.map +1 -0
  19. package/dist/commands/address/list.d.ts +3 -0
  20. package/dist/commands/address/list.d.ts.map +1 -0
  21. package/dist/commands/address/list.js +34 -0
  22. package/dist/commands/address/list.js.map +1 -0
  23. package/dist/commands/address/set-default.d.ts +3 -0
  24. package/dist/commands/address/set-default.d.ts.map +1 -0
  25. package/dist/commands/address/set-default.js +34 -0
  26. package/dist/commands/address/set-default.js.map +1 -0
  27. package/dist/commands/address/update.d.ts +3 -0
  28. package/dist/commands/address/update.d.ts.map +1 -0
  29. package/dist/commands/address/update.js +120 -0
  30. package/dist/commands/address/update.js.map +1 -0
  31. package/dist/commands/auth/login.js +1 -1
  32. package/dist/commands/auth/login.js.map +1 -1
  33. package/dist/commands/auth/switch.d.ts +3 -0
  34. package/dist/commands/auth/switch.d.ts.map +1 -0
  35. package/dist/commands/auth/switch.js +111 -0
  36. package/dist/commands/auth/switch.js.map +1 -0
  37. package/dist/commands/auth/test-refresh.d.ts +3 -0
  38. package/dist/commands/auth/test-refresh.d.ts.map +1 -0
  39. package/dist/commands/auth/test-refresh.js +43 -0
  40. package/dist/commands/auth/test-refresh.js.map +1 -0
  41. package/dist/commands/auth/whoami.d.ts.map +1 -1
  42. package/dist/commands/auth/whoami.js +5 -5
  43. package/dist/commands/auth/whoami.js.map +1 -1
  44. package/dist/commands/category/create.d.ts +3 -0
  45. package/dist/commands/category/create.d.ts.map +1 -0
  46. package/dist/commands/category/create.js +142 -0
  47. package/dist/commands/category/create.js.map +1 -0
  48. package/dist/commands/category/delete.d.ts +3 -0
  49. package/dist/commands/category/delete.d.ts.map +1 -0
  50. package/dist/commands/category/delete.js +98 -0
  51. package/dist/commands/category/delete.js.map +1 -0
  52. package/dist/commands/category/get.d.ts +3 -0
  53. package/dist/commands/category/get.d.ts.map +1 -0
  54. package/dist/commands/category/get.js +74 -0
  55. package/dist/commands/category/get.js.map +1 -0
  56. package/dist/commands/category/index.d.ts +3 -0
  57. package/dist/commands/category/index.d.ts.map +1 -0
  58. package/dist/commands/category/index.js +14 -0
  59. package/dist/commands/category/index.js.map +1 -0
  60. package/dist/commands/category/list.d.ts +3 -0
  61. package/dist/commands/category/list.d.ts.map +1 -0
  62. package/dist/commands/category/list.js +77 -0
  63. package/dist/commands/category/list.js.map +1 -0
  64. package/dist/commands/category/update.d.ts +3 -0
  65. package/dist/commands/category/update.d.ts.map +1 -0
  66. package/dist/commands/category/update.js +104 -0
  67. package/dist/commands/category/update.js.map +1 -0
  68. package/dist/commands/cleanup.d.ts +3 -0
  69. package/dist/commands/cleanup.d.ts.map +1 -0
  70. package/dist/commands/cleanup.js +100 -0
  71. package/dist/commands/cleanup.js.map +1 -0
  72. package/dist/commands/i18n/category/create.d.ts +3 -0
  73. package/dist/commands/i18n/category/create.d.ts.map +1 -0
  74. package/dist/commands/i18n/category/create.js +113 -0
  75. package/dist/commands/i18n/category/create.js.map +1 -0
  76. package/dist/commands/i18n/category/delete.d.ts +3 -0
  77. package/dist/commands/i18n/category/delete.d.ts.map +1 -0
  78. package/dist/commands/i18n/category/delete.js +63 -0
  79. package/dist/commands/i18n/category/delete.js.map +1 -0
  80. package/dist/commands/i18n/category/get.d.ts +3 -0
  81. package/dist/commands/i18n/category/get.d.ts.map +1 -0
  82. package/dist/commands/i18n/category/get.js +56 -0
  83. package/dist/commands/i18n/category/get.js.map +1 -0
  84. package/dist/commands/i18n/category/index.d.ts +3 -0
  85. package/dist/commands/i18n/category/index.d.ts.map +1 -0
  86. package/dist/commands/i18n/category/index.js +14 -0
  87. package/dist/commands/i18n/category/index.js.map +1 -0
  88. package/dist/commands/i18n/category/list.d.ts +3 -0
  89. package/dist/commands/i18n/category/list.d.ts.map +1 -0
  90. package/dist/commands/i18n/category/list.js +72 -0
  91. package/dist/commands/i18n/category/list.js.map +1 -0
  92. package/dist/commands/i18n/category/update.d.ts +3 -0
  93. package/dist/commands/i18n/category/update.d.ts.map +1 -0
  94. package/dist/commands/i18n/category/update.js +68 -0
  95. package/dist/commands/i18n/category/update.js.map +1 -0
  96. package/dist/commands/i18n/merchant/get.d.ts +3 -0
  97. package/dist/commands/i18n/merchant/get.d.ts.map +1 -0
  98. package/dist/commands/i18n/merchant/get.js +30 -0
  99. package/dist/commands/i18n/merchant/get.js.map +1 -0
  100. package/dist/commands/section/create.d.ts +3 -0
  101. package/dist/commands/section/create.d.ts.map +1 -0
  102. package/dist/commands/section/create.js +218 -0
  103. package/dist/commands/section/create.js.map +1 -0
  104. package/dist/commands/section/delete.d.ts +3 -0
  105. package/dist/commands/section/delete.d.ts.map +1 -0
  106. package/dist/commands/section/delete.js +86 -0
  107. package/dist/commands/section/delete.js.map +1 -0
  108. package/dist/commands/section/hide.d.ts +3 -0
  109. package/dist/commands/section/hide.d.ts.map +1 -0
  110. package/dist/commands/section/hide.js +82 -0
  111. package/dist/commands/section/hide.js.map +1 -0
  112. package/dist/commands/section/index.d.ts +4 -0
  113. package/dist/commands/section/index.d.ts.map +1 -0
  114. package/dist/commands/section/index.js +23 -0
  115. package/dist/commands/section/index.js.map +1 -0
  116. package/dist/commands/section/list.d.ts +3 -0
  117. package/dist/commands/section/list.d.ts.map +1 -0
  118. package/dist/commands/section/list.js +164 -0
  119. package/dist/commands/section/list.js.map +1 -0
  120. package/dist/commands/section/product/create.d.ts +3 -0
  121. package/dist/commands/section/product/create.d.ts.map +1 -0
  122. package/dist/commands/section/product/create.js +208 -0
  123. package/dist/commands/section/product/create.js.map +1 -0
  124. package/dist/commands/section/product/delete.d.ts +3 -0
  125. package/dist/commands/section/product/delete.d.ts.map +1 -0
  126. package/dist/commands/section/product/delete.js +85 -0
  127. package/dist/commands/section/product/delete.js.map +1 -0
  128. package/dist/commands/section/product/hide.d.ts +3 -0
  129. package/dist/commands/section/product/hide.d.ts.map +1 -0
  130. package/dist/commands/section/product/hide.js +78 -0
  131. package/dist/commands/section/product/hide.js.map +1 -0
  132. package/dist/commands/section/product/index.d.ts +4 -0
  133. package/dist/commands/section/product/index.d.ts.map +1 -0
  134. package/dist/commands/section/product/index.js +17 -0
  135. package/dist/commands/section/product/index.js.map +1 -0
  136. package/dist/commands/section/product/list.d.ts +3 -0
  137. package/dist/commands/section/product/list.d.ts.map +1 -0
  138. package/dist/commands/section/product/list.js +157 -0
  139. package/dist/commands/section/product/list.js.map +1 -0
  140. package/dist/commands/section/product/reorder.d.ts +3 -0
  141. package/dist/commands/section/product/reorder.d.ts.map +1 -0
  142. package/dist/commands/section/product/reorder.js +110 -0
  143. package/dist/commands/section/product/reorder.js.map +1 -0
  144. package/dist/commands/section/product/update.d.ts +3 -0
  145. package/dist/commands/section/product/update.d.ts.map +1 -0
  146. package/dist/commands/section/product/update.js +127 -0
  147. package/dist/commands/section/product/update.js.map +1 -0
  148. package/dist/commands/section/reorder.d.ts +3 -0
  149. package/dist/commands/section/reorder.d.ts.map +1 -0
  150. package/dist/commands/section/reorder.js +111 -0
  151. package/dist/commands/section/reorder.js.map +1 -0
  152. package/dist/commands/section/translation/delete.d.ts +3 -0
  153. package/dist/commands/section/translation/delete.d.ts.map +1 -0
  154. package/dist/commands/section/translation/delete.js +97 -0
  155. package/dist/commands/section/translation/delete.js.map +1 -0
  156. package/dist/commands/section/translation/index.d.ts +4 -0
  157. package/dist/commands/section/translation/index.d.ts.map +1 -0
  158. package/dist/commands/section/translation/index.js +11 -0
  159. package/dist/commands/section/translation/index.js.map +1 -0
  160. package/dist/commands/section/translation/list.d.ts +3 -0
  161. package/dist/commands/section/translation/list.d.ts.map +1 -0
  162. package/dist/commands/section/translation/list.js +104 -0
  163. package/dist/commands/section/translation/list.js.map +1 -0
  164. package/dist/commands/section/translation/set.d.ts +3 -0
  165. package/dist/commands/section/translation/set.d.ts.map +1 -0
  166. package/dist/commands/section/translation/set.js +151 -0
  167. package/dist/commands/section/translation/set.js.map +1 -0
  168. package/dist/commands/section/update.d.ts +3 -0
  169. package/dist/commands/section/update.d.ts.map +1 -0
  170. package/dist/commands/section/update.js +137 -0
  171. package/dist/commands/section/update.js.map +1 -0
  172. package/dist/commands/test/health.js +2 -2
  173. package/dist/commands/test/health.js.map +1 -1
  174. package/dist/commands/variant/get.d.ts +3 -0
  175. package/dist/commands/variant/get.d.ts.map +1 -0
  176. package/dist/commands/variant/get.js +41 -0
  177. package/dist/commands/variant/get.js.map +1 -0
  178. package/dist/index.js +0 -0
  179. package/dist/utils/config.js +3 -3
  180. package/dist/utils/config.js.map +1 -1
  181. package/package.json +1 -1
@@ -0,0 +1,70 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(gh pr view:*)",
5
+ "Bash(gh run watch:*)",
6
+ "Bash(for cmd in create list get update delete)",
7
+ "Bash(do echo \"=== category $cmd ===\")",
8
+ "Bash(CI=true OPTIMA_INTERACTIVE=1 npx tsx tests/manual-interactive-test.ts)",
9
+ "Bash(NON_INTERACTIVE=1 npx tsx tests/manual-interactive-test.ts)",
10
+ "Bash(NON_INTERACTIVE=1 optima shipping calculate)",
11
+ "Bash(NON_INTERACTIVE=1 optima order:*)",
12
+ "Bash(NON_INTERACTIVE=1 optima category create)",
13
+ "Bash(NON_INTERACTIVE=1 optima shipping-zone create)",
14
+ "Bash(NON_INTERACTIVE=1 optima shipping-zone add-rate)",
15
+ "Bash(NON_INTERACTIVE=1 optima shipping-zone list-rates)",
16
+ "Bash(NON_INTERACTIVE=1 optima product delete --id test-123)",
17
+ "Bash(NON_INTERACTIVE=1 optima shipping update-status --id order-123)",
18
+ "Bash(NON_INTERACTIVE=1 optima i18n product create --product-id prod-123)",
19
+ "Bash(NON_INTERACTIVE=1 optima i18n merchant create)",
20
+ "Bash(./tests/test-non-interactive.sh:*)",
21
+ "Bash(NON_INTERACTIVE=1 optima product create)",
22
+ "Bash(NON_INTERACTIVE=1 node dist/index.js product create)",
23
+ "Bash(NON_INTERACTIVE=1 node dist/index.js product delete --id test-123)",
24
+ "Bash(NON_INTERACTIVE=1 node dist/index.js i18n product create --product-id test)",
25
+ "Bash(git pull:*)",
26
+ "Bash(git fetch:*)",
27
+ "Bash(gh repo view:*)",
28
+ "Bash(gh api:*)",
29
+ "Bash(gh pr list:*)",
30
+ "Bash(git checkout:*)",
31
+ "Bash(git push:*)",
32
+ "Bash(npm run build:*)",
33
+ "Bash(git add:*)",
34
+ "Bash(node:*)",
35
+ "Bash(DEBUG=true node dist/index.js collection list --json)",
36
+ "Read(//Users/verypro/**)",
37
+ "Bash(curl:*)",
38
+ "Bash(echo:*)",
39
+ "Bash(DEBUG=true node dist/index.js collection remove-products --id \"56b01a6f-aa9e-4ffd-ae66-88247fad00c3\" --product-ids \"1da6fa36-b30c-4b6e-ac23-bcb75db1c157\" --yes --json)",
40
+ "Bash(npm uninstall:*)",
41
+ "Bash(optima version:*)",
42
+ "Bash(optima:*)",
43
+ "Bash(DEBUG=true node dist/index.js auth whoami)",
44
+ "Bash(timeout 5 optima auth login:*)",
45
+ "Bash(npm version:*)",
46
+ "Bash(cat:*)",
47
+ "Bash(npm view:*)",
48
+ "Read(//private/tmp/**)",
49
+ "Read(//tmp/commerce-backend/src/api/**)",
50
+ "Read(//tmp/commerce-backend/src/models/**)",
51
+ "Read(//tmp/commerce-backend/src/services/**)",
52
+ "Read(//tmp/commerce-backend/src/schemas/**)",
53
+ "Bash(find:*)",
54
+ "Bash(xargs sed:*)",
55
+ "Bash(git remote set-url:*)",
56
+ "Bash(gh run list:*)",
57
+ "Bash(gh run view:*)",
58
+ "Bash(git tag:*)",
59
+ "WebFetch(domain:code.claude.com)",
60
+ "Bash(tree:*)",
61
+ "Bash(git commit:*)",
62
+ "Read(//tmp/test-v1.2.0/.claude/skills/commerce-i18n/**)",
63
+ "Read(//tmp/test-v1.2.0/.claude/skills/commerce-order/**)",
64
+ "Bash(gh issue view:*)",
65
+ "Bash(gh release:*)"
66
+ ],
67
+ "deny": [],
68
+ "ask": []
69
+ }
70
+ }
package/README.md CHANGED
@@ -392,15 +392,15 @@ commerce auth logout --all # 登出所有环境
392
392
 
393
393
  **多环境支持**(v0.19.0+):
394
394
 
395
- Commerce CLI 支持三个独立环境,各自拥有独立的配置文件:
395
+ Commerce CLI 支持三个独立环境,共享统一的 token 文件:
396
396
 
397
- | 环境 | Auth API | Commerce API | 前端域名 | 配置文件 |
398
- |------|----------|--------------|---------|----------|
399
- | Production(默认) | auth.optima.shop | api.optima.shop | optima.shop | config-prod.json |
400
- | **Stage** | **auth-stage.optima.shop** | **api-stage.optima.shop** | **stage.optima.shop** | **config-stage.json** |
401
- | Development | auth.optima.chat | api.optima.chat | optima.sh | config-dev.json |
397
+ | 环境 | Auth API | Commerce API | 店铺前端域名 | token.json env |
398
+ |------|----------|--------------|------------|----------------|
399
+ | Production(默认) | auth.optima.shop | api.optima.shop | optima.shop | `prod` |
400
+ | **Stage** | **auth.stage.optima.onl** | **api.stage.optima.onl** | **store.stage.optima.onl** | `stage` |
401
+ | Development | auth.optima.chat | api.optima.chat | optima.sh | `ci` |
402
402
 
403
- **配置文件位置**:`~/.config/commerce-cli/`
403
+ **Token 文件位置**:`~/.optima/token.json`(所有环境共享)
404
404
 
405
405
  ```bash
406
406
  # 登录到不同环境
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const createAddressCommand: Command;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/address/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,oBAAoB,SAgB7B,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { Command } from 'commander';
2
+ import inquirer from 'inquirer';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import { commerceApi } from '../../api/rest/commerce.js';
6
+ import { handleError, createApiError } from '../../utils/error.js';
7
+ export const createAddressCommand = new Command('create')
8
+ .description('创建地址')
9
+ .option('-n, --name <name>', '收件人姓名')
10
+ .option('-p, --phone <phone>', '电话')
11
+ .option('--line1 <line1>', '地址行1')
12
+ .option('--line2 <line2>', '地址行2')
13
+ .option('--city <city>', '城市')
14
+ .option('--state <state>', '省/州')
15
+ .option('--postal <postal>', '邮政编码')
16
+ .option('--country <country>', '国家代码 (如 CN, US)')
17
+ .action(async (options) => {
18
+ try {
19
+ await createAddress(options);
20
+ }
21
+ catch (error) {
22
+ handleError(error);
23
+ }
24
+ });
25
+ async function createAddress(options) {
26
+ let { name, phone, line1, line2, city, state, postal, country } = options;
27
+ // 交互式输入缺失的必填字段
28
+ if (!name || !phone || !line1 || !city || !postal || !country) {
29
+ const answers = await inquirer.prompt([
30
+ {
31
+ type: 'input',
32
+ name: 'name',
33
+ message: '收件人姓名:',
34
+ when: !name,
35
+ validate: (input) => input.trim().length > 0 || '姓名不能为空',
36
+ },
37
+ {
38
+ type: 'input',
39
+ name: 'phone',
40
+ message: '电话:',
41
+ when: !phone,
42
+ validate: (input) => input.trim().length > 0 || '电话不能为空',
43
+ },
44
+ {
45
+ type: 'input',
46
+ name: 'line1',
47
+ message: '地址行1:',
48
+ when: !line1,
49
+ validate: (input) => input.trim().length > 0 || '地址不能为空',
50
+ },
51
+ {
52
+ type: 'input',
53
+ name: 'line2',
54
+ message: '地址行2(可选):',
55
+ when: !line2,
56
+ },
57
+ {
58
+ type: 'input',
59
+ name: 'city',
60
+ message: '城市:',
61
+ when: !city,
62
+ validate: (input) => input.trim().length > 0 || '城市不能为空',
63
+ },
64
+ {
65
+ type: 'input',
66
+ name: 'state',
67
+ message: '省/州(可选):',
68
+ when: !state,
69
+ },
70
+ {
71
+ type: 'input',
72
+ name: 'postal',
73
+ message: '邮政编码:',
74
+ when: !postal,
75
+ validate: (input) => input.trim().length > 0 || '邮政编码不能为空',
76
+ },
77
+ {
78
+ type: 'input',
79
+ name: 'country',
80
+ message: '国家代码 (如 CN, US):',
81
+ when: !country,
82
+ validate: (input) => input.trim().length === 2 || '国家代码必须是2位字母',
83
+ },
84
+ ]);
85
+ name = name || answers.name;
86
+ phone = phone || answers.phone;
87
+ line1 = line1 || answers.line1;
88
+ line2 = line2 || answers.line2;
89
+ city = city || answers.city;
90
+ state = state || answers.state;
91
+ postal = postal || answers.postal;
92
+ country = country || answers.country;
93
+ }
94
+ const spinner = ora('正在创建地址...').start();
95
+ try {
96
+ const data = {
97
+ recipient_name: name,
98
+ phone,
99
+ line_1: line1,
100
+ city,
101
+ postal_code: postal,
102
+ country: country?.toUpperCase(),
103
+ };
104
+ if (line2)
105
+ data.line_2 = line2;
106
+ if (state)
107
+ data.state = state;
108
+ const address = await commerceApi.addresses.create(data);
109
+ spinner.succeed('地址创建成功!');
110
+ console.log();
111
+ console.log(chalk.gray('地址 ID: ') + chalk.cyan(address.id));
112
+ console.log(chalk.gray('收件人: ') + name);
113
+ console.log(chalk.gray('电话: ') + phone);
114
+ console.log(chalk.gray('地址: ') + [line1, line2, city, state, postal, country].filter(Boolean).join(', '));
115
+ console.log();
116
+ }
117
+ catch (error) {
118
+ spinner.fail('地址创建失败');
119
+ throw createApiError(error);
120
+ }
121
+ }
122
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/address/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const deleteAddressCommand: Command;
3
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/address/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,oBAAoB,SAU7B,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { Command } from 'commander';
2
+ import inquirer from 'inquirer';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import { commerceApi } from '../../api/rest/commerce.js';
6
+ import { handleError, createApiError, ValidationError } from '../../utils/error.js';
7
+ export const deleteAddressCommand = new Command('delete')
8
+ .description('删除地址')
9
+ .argument('<address-id>', '地址 ID')
10
+ .option('-y, --yes', '跳过确认')
11
+ .action(async (addressId, options) => {
12
+ try {
13
+ await deleteAddress(addressId, options);
14
+ }
15
+ catch (error) {
16
+ handleError(error);
17
+ }
18
+ });
19
+ async function deleteAddress(addressId, options) {
20
+ if (!addressId || addressId.trim().length === 0) {
21
+ throw new ValidationError('地址 ID 不能为空', 'address-id');
22
+ }
23
+ if (!options.yes) {
24
+ const answers = await inquirer.prompt([
25
+ {
26
+ type: 'confirm',
27
+ name: 'confirm',
28
+ message: `确定要删除地址 ${addressId} 吗?`,
29
+ default: false,
30
+ },
31
+ ]);
32
+ if (!answers.confirm) {
33
+ console.log(chalk.yellow('已取消删除'));
34
+ return;
35
+ }
36
+ }
37
+ const spinner = ora('正在删除地址...').start();
38
+ try {
39
+ await commerceApi.addresses.delete(addressId);
40
+ spinner.succeed('地址删除成功!');
41
+ console.log();
42
+ console.log(chalk.gray('已删除地址: ') + chalk.cyan(addressId));
43
+ console.log();
44
+ }
45
+ catch (error) {
46
+ spinner.fail('地址删除失败');
47
+ throw createApiError(error);
48
+ }
49
+ }
50
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/address/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMpF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KACtD,WAAW,CAAC,MAAM,CAAC;KACnB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;KACjC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAsB,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAsB;IACpE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,WAAW,SAAS,KAAK;gBAClC,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE3B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const getAddressCommand: Command;
3
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/address/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,iBAAiB,SAS1B,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { Command } from 'commander';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import { commerceApi } from '../../api/rest/commerce.js';
5
+ import { handleError, createApiError, ValidationError } from '../../utils/error.js';
6
+ export const getAddressCommand = new Command('get')
7
+ .description('地址详情')
8
+ .argument('<address-id>', '地址 ID')
9
+ .action(async (addressId) => {
10
+ try {
11
+ await getAddress(addressId);
12
+ }
13
+ catch (error) {
14
+ handleError(error);
15
+ }
16
+ });
17
+ async function getAddress(addressId) {
18
+ if (!addressId || addressId.trim().length === 0) {
19
+ throw new ValidationError('地址 ID 不能为空', 'address-id');
20
+ }
21
+ const spinner = ora('正在获取地址详情...').start();
22
+ try {
23
+ const address = await commerceApi.addresses.get(addressId);
24
+ spinner.succeed('地址详情获取成功');
25
+ console.log('\n' + '─'.repeat(60));
26
+ console.log(chalk.bold('地址详情'));
27
+ console.log('─'.repeat(60));
28
+ console.log(chalk.gray('地址 ID: ') + chalk.cyan(address.id));
29
+ console.log(chalk.gray('收件人: ') + (address.recipient_name || '-'));
30
+ console.log(chalk.gray('电话: ') + (address.phone || '-'));
31
+ const fullAddress = [
32
+ address.line_1,
33
+ address.line_2,
34
+ address.city,
35
+ address.state,
36
+ address.postal_code,
37
+ address.country,
38
+ ].filter(Boolean).join(', ');
39
+ console.log(chalk.gray('地址: ') + fullAddress);
40
+ if (address.is_default) {
41
+ console.log(chalk.gray('默认地址: ') + chalk.green('是'));
42
+ }
43
+ console.log('─'.repeat(60) + '\n');
44
+ }
45
+ catch (error) {
46
+ spinner.fail('获取地址详情失败');
47
+ throw createApiError(error);
48
+ }
49
+ }
50
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/address/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KAChD,WAAW,CAAC,MAAM,CAAC;KACnB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;KACjC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,UAAU,CAAC,SAAiB;IACzC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG;YAClB,OAAO,CAAC,MAAM;YACd,OAAO,CAAC,MAAM;YACd,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,WAAW;YACnB,OAAO,CAAC,OAAO;SAChB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;QAE9C,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const addressCommand: Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/address/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,cAAc,SAOY,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Command } from 'commander';
2
+ import { listAddressesCommand } from './list.js';
3
+ import { getAddressCommand } from './get.js';
4
+ import { createAddressCommand } from './create.js';
5
+ import { updateAddressCommand } from './update.js';
6
+ import { deleteAddressCommand } from './delete.js';
7
+ import { setDefaultAddressCommand } from './set-default.js';
8
+ export const addressCommand = new Command('address')
9
+ .description('地址管理')
10
+ .addCommand(listAddressesCommand)
11
+ .addCommand(getAddressCommand)
12
+ .addCommand(createAddressCommand)
13
+ .addCommand(updateAddressCommand)
14
+ .addCommand(deleteAddressCommand)
15
+ .addCommand(setDefaultAddressCommand);
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/address/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,MAAM,CAAC;KACnB,UAAU,CAAC,oBAAoB,CAAC;KAChC,UAAU,CAAC,iBAAiB,CAAC;KAC7B,UAAU,CAAC,oBAAoB,CAAC;KAChC,UAAU,CAAC,oBAAoB,CAAC;KAChC,UAAU,CAAC,oBAAoB,CAAC;KAChC,UAAU,CAAC,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const listAddressesCommand: Command;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/address/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,oBAAoB,SA8B7B,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Command } from 'commander';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import Table from 'cli-table3';
5
+ import { commerceApi } from '../../api/rest/commerce.js';
6
+ import { handleError } from '../../utils/error.js';
7
+ export const listAddressesCommand = new Command('list')
8
+ .description('地址列表')
9
+ .action(async () => {
10
+ try {
11
+ const spinner = ora('正在获取地址列表...').start();
12
+ const addresses = await commerceApi.addresses.list();
13
+ spinner.succeed('地址列表获取成功');
14
+ if (addresses.length === 0) {
15
+ console.log(chalk.yellow('\n暂无地址\n'));
16
+ return;
17
+ }
18
+ const table = new Table({
19
+ head: [chalk.cyan('ID'), chalk.cyan('姓名'), chalk.cyan('地址'), chalk.cyan('电话'), chalk.cyan('默认')],
20
+ colWidths: [38, 15, 50, 15, 8],
21
+ });
22
+ addresses.forEach((addr) => {
23
+ const fullAddress = [addr.line_1, addr.line_2, addr.city, addr.state, addr.postal_code, addr.country]
24
+ .filter(Boolean).join(', ');
25
+ const isDefault = addr.is_default ? chalk.green('是') : '-';
26
+ table.push([addr.id, addr.recipient_name || '-', fullAddress, addr.phone || '-', isDefault]);
27
+ });
28
+ console.log('\n' + table.toString() + '\n');
29
+ }
30
+ catch (error) {
31
+ handleError(error);
32
+ }
33
+ });
34
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/address/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACpD,WAAW,CAAC,MAAM,CAAC;KACnB,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACrD,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SAC/B,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;YAC9B,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;iBAClG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAE3D,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,IAAI,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const setDefaultAddressCommand: Command;
3
+ //# sourceMappingURL=set-default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-default.d.ts","sourceRoot":"","sources":["../../../src/commands/address/set-default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,wBAAwB,SASjC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Command } from 'commander';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import { commerceApi } from '../../api/rest/commerce.js';
5
+ import { handleError, createApiError, ValidationError } from '../../utils/error.js';
6
+ export const setDefaultAddressCommand = new Command('set-default')
7
+ .description('设为默认地址')
8
+ .argument('<address-id>', '地址 ID')
9
+ .action(async (addressId) => {
10
+ try {
11
+ await setDefaultAddress(addressId);
12
+ }
13
+ catch (error) {
14
+ handleError(error);
15
+ }
16
+ });
17
+ async function setDefaultAddress(addressId) {
18
+ if (!addressId || addressId.trim().length === 0) {
19
+ throw new ValidationError('地址 ID 不能为空', 'address-id');
20
+ }
21
+ const spinner = ora('正在设置默认地址...').start();
22
+ try {
23
+ await commerceApi.addresses.setDefault(addressId);
24
+ spinner.succeed('默认地址设置成功!');
25
+ console.log();
26
+ console.log(chalk.gray('默认地址: ') + chalk.cyan(addressId));
27
+ console.log();
28
+ }
29
+ catch (error) {
30
+ spinner.fail('设置默认地址失败');
31
+ throw createApiError(error);
32
+ }
33
+ }
34
+ //# sourceMappingURL=set-default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-default.js","sourceRoot":"","sources":["../../../src/commands/address/set-default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEpF,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;KAC/D,WAAW,CAAC,QAAQ,CAAC;KACrB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;KACjC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IAChD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAClD,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE7B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const updateAddressCommand: Command;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/address/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,oBAAoB,SAiB7B,CAAC"}
@@ -0,0 +1,120 @@
1
+ import { Command } from 'commander';
2
+ import inquirer from 'inquirer';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import { commerceApi } from '../../api/rest/commerce.js';
6
+ import { handleError, createApiError, ValidationError } from '../../utils/error.js';
7
+ export const updateAddressCommand = new Command('update')
8
+ .description('更新地址')
9
+ .argument('<address-id>', '地址 ID')
10
+ .option('-n, --name <name>', '收件人姓名')
11
+ .option('-p, --phone <phone>', '电话')
12
+ .option('--line1 <line1>', '地址行1')
13
+ .option('--line2 <line2>', '地址行2')
14
+ .option('--city <city>', '城市')
15
+ .option('--state <state>', '省/州')
16
+ .option('--postal <postal>', '邮政编码')
17
+ .option('--country <country>', '国家代码')
18
+ .action(async (addressId, options) => {
19
+ try {
20
+ await updateAddress(addressId, options);
21
+ }
22
+ catch (error) {
23
+ handleError(error);
24
+ }
25
+ });
26
+ async function updateAddress(addressId, options) {
27
+ if (!addressId || addressId.trim().length === 0) {
28
+ throw new ValidationError('地址 ID 不能为空', 'address-id');
29
+ }
30
+ const { name, phone, line1, line2, city, state, postal, country } = options;
31
+ // 至少需要一个更新字段
32
+ if (!name && !phone && !line1 && !line2 && !city && !state && !postal && !country) {
33
+ console.log(chalk.yellow('未提供任何更新字段'));
34
+ const answers = await inquirer.prompt([
35
+ {
36
+ type: 'confirm',
37
+ name: 'continue',
38
+ message: '是否继续交互式更新?',
39
+ default: true,
40
+ },
41
+ ]);
42
+ if (!answers.continue) {
43
+ return;
44
+ }
45
+ // 交互式更新
46
+ const updateAnswers = await inquirer.prompt([
47
+ {
48
+ type: 'input',
49
+ name: 'name',
50
+ message: '收件人姓名(留空跳过):',
51
+ },
52
+ {
53
+ type: 'input',
54
+ name: 'phone',
55
+ message: '电话(留空跳过):',
56
+ },
57
+ {
58
+ type: 'input',
59
+ name: 'line1',
60
+ message: '地址行1(留空跳过):',
61
+ },
62
+ {
63
+ type: 'input',
64
+ name: 'line2',
65
+ message: '地址行2(留空跳过):',
66
+ },
67
+ {
68
+ type: 'input',
69
+ name: 'city',
70
+ message: '城市(留空跳过):',
71
+ },
72
+ {
73
+ type: 'input',
74
+ name: 'state',
75
+ message: '省/州(留空跳过):',
76
+ },
77
+ {
78
+ type: 'input',
79
+ name: 'postal',
80
+ message: '邮政编码(留空跳过):',
81
+ },
82
+ {
83
+ type: 'input',
84
+ name: 'country',
85
+ message: '国家代码(留空跳过):',
86
+ },
87
+ ]);
88
+ Object.assign(options, updateAnswers);
89
+ }
90
+ const spinner = ora('正在更新地址...').start();
91
+ try {
92
+ const data = {};
93
+ if (name)
94
+ data.recipient_name = name;
95
+ if (phone)
96
+ data.phone = phone;
97
+ if (line1)
98
+ data.line_1 = line1;
99
+ if (line2)
100
+ data.line_2 = line2;
101
+ if (city)
102
+ data.city = city;
103
+ if (state)
104
+ data.state = state;
105
+ if (postal)
106
+ data.postal_code = postal;
107
+ if (country)
108
+ data.country = country.toUpperCase();
109
+ await commerceApi.addresses.update(addressId, data);
110
+ spinner.succeed('地址更新成功!');
111
+ console.log();
112
+ console.log(chalk.gray('地址 ID: ') + chalk.cyan(addressId));
113
+ console.log();
114
+ }
115
+ catch (error) {
116
+ spinner.fail('地址更新失败');
117
+ throw createApiError(error);
118
+ }
119
+ }
120
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/address/update.ts"],"names":[],"mappings":"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"}