@optima-chat/ads-cli 0.7.0 → 0.8.1

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 (68) hide show
  1. package/dist/commands/ad/create.d.ts.map +1 -1
  2. package/dist/commands/ad/create.js +29 -28
  3. package/dist/commands/ad/create.js.map +1 -1
  4. package/dist/commands/ad/delete.d.ts.map +1 -1
  5. package/dist/commands/ad/delete.js +1 -28
  6. package/dist/commands/ad/delete.js.map +1 -1
  7. package/dist/commands/ad/info.d.ts.map +1 -1
  8. package/dist/commands/ad/info.js +3 -66
  9. package/dist/commands/ad/info.js.map +1 -1
  10. package/dist/commands/ad/list.d.ts.map +1 -1
  11. package/dist/commands/ad/list.js +1 -65
  12. package/dist/commands/ad/list.js.map +1 -1
  13. package/dist/commands/ad/update.d.ts.map +1 -1
  14. package/dist/commands/ad/update.js +8 -17
  15. package/dist/commands/ad/update.js.map +1 -1
  16. package/dist/commands/ad-group/create.d.ts.map +1 -1
  17. package/dist/commands/ad-group/create.js +1 -23
  18. package/dist/commands/ad-group/create.js.map +1 -1
  19. package/dist/commands/ad-group/delete.d.ts.map +1 -1
  20. package/dist/commands/ad-group/delete.js +1 -28
  21. package/dist/commands/ad-group/delete.js.map +1 -1
  22. package/dist/commands/ad-group/info.d.ts.map +1 -1
  23. package/dist/commands/ad-group/info.js +4 -37
  24. package/dist/commands/ad-group/info.js.map +1 -1
  25. package/dist/commands/ad-group/list.d.ts.map +1 -1
  26. package/dist/commands/ad-group/list.js +1 -57
  27. package/dist/commands/ad-group/list.js.map +1 -1
  28. package/dist/commands/ad-group/update.d.ts.map +1 -1
  29. package/dist/commands/ad-group/update.js +11 -28
  30. package/dist/commands/ad-group/update.js.map +1 -1
  31. package/dist/commands/auth/status.d.ts +0 -2
  32. package/dist/commands/auth/status.d.ts.map +1 -1
  33. package/dist/commands/auth/status.js +12 -47
  34. package/dist/commands/auth/status.js.map +1 -1
  35. package/dist/commands/campaign/create.d.ts.map +1 -1
  36. package/dist/commands/campaign/create.js +1 -24
  37. package/dist/commands/campaign/create.js.map +1 -1
  38. package/dist/commands/campaign/delete.d.ts.map +1 -1
  39. package/dist/commands/campaign/delete.js +1 -28
  40. package/dist/commands/campaign/delete.js.map +1 -1
  41. package/dist/commands/campaign/info.d.ts.map +1 -1
  42. package/dist/commands/campaign/info.js +3 -34
  43. package/dist/commands/campaign/info.js.map +1 -1
  44. package/dist/commands/campaign/list.d.ts.map +1 -1
  45. package/dist/commands/campaign/list.js +1 -46
  46. package/dist/commands/campaign/list.js.map +1 -1
  47. package/dist/commands/campaign/update.d.ts.map +1 -1
  48. package/dist/commands/campaign/update.js +11 -28
  49. package/dist/commands/campaign/update.js.map +1 -1
  50. package/dist/commands/config.d.ts.map +1 -1
  51. package/dist/commands/config.js +16 -72
  52. package/dist/commands/config.js.map +1 -1
  53. package/dist/commands/keyword/add.d.ts.map +1 -1
  54. package/dist/commands/keyword/add.js +1 -20
  55. package/dist/commands/keyword/add.js.map +1 -1
  56. package/dist/commands/keyword/delete.d.ts.map +1 -1
  57. package/dist/commands/keyword/delete.js +1 -28
  58. package/dist/commands/keyword/delete.js.map +1 -1
  59. package/dist/commands/keyword/list.d.ts.map +1 -1
  60. package/dist/commands/keyword/list.js +1 -51
  61. package/dist/commands/keyword/list.js.map +1 -1
  62. package/dist/commands/keyword/update.d.ts.map +1 -1
  63. package/dist/commands/keyword/update.js +10 -24
  64. package/dist/commands/keyword/update.js.map +1 -1
  65. package/dist/commands/query.d.ts.map +1 -1
  66. package/dist/commands/query.js +9 -33
  67. package/dist/commands/query.js.map +1 -1
  68. package/package.json +1 -1
@@ -2,67 +2,22 @@
2
2
  * Campaign List Command - 列出广告系列
3
3
  */
4
4
  import { Command } from 'commander';
5
- import chalk from 'chalk';
6
- import Table from 'cli-table3';
7
- import ora from 'ora';
8
5
  import { getApiClient } from '../../lib/api-client.js';
9
6
  import { handleError } from '../../utils/errors.js';
10
- import { warn } from '../../utils/logger.js';
11
7
  import { getCustomerId } from '../../utils/customer-id.js';
12
8
  export const listCommand = new Command('list')
13
9
  .description('列出广告系列')
14
10
  .option('--status <status>', '按状态过滤 (ENABLED/PAUSED/REMOVED)')
15
11
  .option('--limit <number>', '限制返回数量', '50')
16
- .option('--json', '以 JSON 格式输出')
17
12
  .action(async (options) => {
18
13
  try {
19
14
  const customerId = getCustomerId();
20
15
  const client = getApiClient();
21
- const spinner = ora('正在获取广告系列列表...').start();
22
- // 获取广告系列列表
23
16
  const campaigns = await client.listCampaigns(customerId, {
24
17
  status: options.status,
25
18
  limit: parseInt(options.limit),
26
19
  });
27
- spinner.stop();
28
- if (campaigns.length === 0) {
29
- warn('未找到广告系列');
30
- return;
31
- }
32
- // 输出结果
33
- if (options.json) {
34
- console.log(JSON.stringify(campaigns, null, 2));
35
- }
36
- else {
37
- const table = new Table({
38
- head: [
39
- chalk.cyan('ID'),
40
- chalk.cyan('名称'),
41
- chalk.cyan('状态'),
42
- chalk.cyan('类型'),
43
- chalk.cyan('展示量'),
44
- chalk.cyan('点击量'),
45
- chalk.cyan('费用'),
46
- ],
47
- colWidths: [12, 25, 10, 15, 12, 10, 15],
48
- });
49
- campaigns.forEach((campaign) => {
50
- const cost = campaign.metrics?.cost_micros
51
- ? (campaign.metrics.cost_micros / 1000000).toFixed(2)
52
- : '0.00';
53
- table.push([
54
- campaign.campaign?.id || 'N/A',
55
- campaign.campaign?.name || '未命名',
56
- campaign.campaign?.status || 'N/A',
57
- campaign.campaign?.advertising_channel_type || 'N/A',
58
- campaign.metrics?.impressions || 0,
59
- campaign.metrics?.clicks || 0,
60
- cost,
61
- ]);
62
- });
63
- console.log('\n' + table.toString() + '\n');
64
- console.log(chalk.gray(`共 ${campaigns.length} 个广告系列\n`));
65
- }
20
+ console.log(JSON.stringify(campaigns, null, 2));
66
21
  }
67
22
  catch (error) {
68
23
  handleError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/campaign/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/campaign/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;KAC7D,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE,IAAI,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE;YACvD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;SAC/B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/campaign/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SA8CtB,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/campaign/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA8BtB,CAAC"}
@@ -2,8 +2,6 @@
2
2
  * Campaign Update Command - 更新广告系列
3
3
  */
4
4
  import { Command } from 'commander';
5
- import chalk from 'chalk';
6
- import ora from 'ora';
7
5
  import { getApiClient } from '../../lib/api-client.js';
8
6
  import { handleError } from '../../utils/errors.js';
9
7
  import { getCustomerId } from '../../utils/customer-id.js';
@@ -13,43 +11,28 @@ export const updateCommand = new Command('update')
13
11
  .option('--status <status>', '状态 (ENABLED, PAUSED)')
14
12
  .option('--name <name>', '新名称')
15
13
  .option('--budget <amount>', '新每日预算(美元)')
16
- .option('--json', '以 JSON 格式输出')
17
14
  .action(async (options) => {
18
- if (!options.status && !options.name && !options.budget) {
19
- console.log(chalk.red('请至少指定一个要更新的字段: --status, --name, 或 --budget'));
20
- return;
21
- }
22
- const spinner = ora('更新广告系列...').start();
23
15
  try {
16
+ if (!options.status && !options.name && !options.budget) {
17
+ console.log(JSON.stringify({
18
+ error: 'missing_fields',
19
+ message: '请至少指定一个要更新的字段: --status, --name, 或 --budget'
20
+ }, null, 2));
21
+ process.exit(1);
22
+ }
24
23
  const customerId = getCustomerId();
25
24
  const client = getApiClient();
26
25
  const updateData = {};
27
- if (options.status) {
26
+ if (options.status)
28
27
  updateData.status = options.status;
29
- }
30
- if (options.name) {
28
+ if (options.name)
31
29
  updateData.name = options.name;
32
- }
33
- if (options.budget) {
30
+ if (options.budget)
34
31
  updateData.budgetAmountMicros = Math.round(parseFloat(options.budget) * 1000000);
35
- }
36
32
  const result = await client.updateCampaign(customerId, options.campaignId, updateData);
37
- spinner.succeed('广告系列已更新');
38
- if (options.json) {
39
- console.log(JSON.stringify(result, null, 2));
40
- }
41
- else {
42
- console.log(chalk.green(`\n✅ 广告系列 ${options.campaignId} 已更新`));
43
- if (options.status)
44
- console.log(chalk.gray(`状态: ${options.status}`));
45
- if (options.name)
46
- console.log(chalk.gray(`名称: ${options.name}`));
47
- if (options.budget)
48
- console.log(chalk.gray(`预算: $${options.budget}/天`));
49
- }
33
+ console.log(JSON.stringify(result, null, 2));
50
34
  }
51
35
  catch (error) {
52
- spinner.fail('更新失败');
53
36
  handleError(error);
54
37
  }
55
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/campaign/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/campaign/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,QAAQ,CAAC;KACrB,cAAc,CAAC,oBAAoB,EAAE,SAAS,CAAC;KAC/C,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC;KAC9B,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC;KACxC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,6CAA6C;aACvD,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,UAAU,GAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,MAAM;YAAE,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACvD,IAAI,OAAO,CAAC,IAAI;YAAE,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACjD,IAAI,OAAO,CAAC,MAAM;YAAE,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;QAErG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEvF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,aAAa,SACC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SACC,CAAC"}
@@ -2,10 +2,7 @@
2
2
  * Config Command - 配置管理
3
3
  */
4
4
  import { Command } from 'commander';
5
- import chalk from 'chalk';
6
5
  import Conf from 'conf';
7
- import Table from 'cli-table3';
8
- import inquirer from 'inquirer';
9
6
  const config = new Conf({ projectName: 'google-ads-cli' });
10
7
  export const configCommand = new Command('config')
11
8
  .description('管理 CLI 配置');
@@ -13,92 +10,39 @@ export const configCommand = new Command('config')
13
10
  configCommand
14
11
  .command('show')
15
12
  .description('显示当前配置')
16
- .option('--json', '以 JSON 格式输出')
17
- .action((options) => {
13
+ .action(() => {
18
14
  const customerId = config.get('customerId');
19
15
  const accountName = config.get('accountName');
20
16
  const currency = config.get('currency');
21
17
  const timezone = config.get('timezone');
22
18
  const email = config.get('email');
23
19
  const createdAt = config.get('createdAt');
24
- if (!customerId) {
25
- console.log(chalk.yellow('\n⚠️ 未找到账号配置\n'));
26
- console.log(chalk.gray('请先运行: ') + chalk.cyan('google-ads account create\n'));
27
- return;
28
- }
29
- if (options.json) {
30
- const result = {
31
- customer_id: customerId,
32
- account_name: accountName,
33
- currency,
34
- timezone,
35
- email,
36
- created_at: createdAt,
37
- config_path: config.path,
38
- };
39
- console.log(JSON.stringify(result, null, 2));
40
- }
41
- else {
42
- console.log(chalk.cyan.bold('\n📋 当前配置\n'));
43
- const table = new Table({
44
- chars: {
45
- top: '─',
46
- 'top-mid': '┬',
47
- 'top-left': '┌',
48
- 'top-right': '┐',
49
- bottom: '─',
50
- 'bottom-mid': '┴',
51
- 'bottom-left': '└',
52
- 'bottom-right': '┘',
53
- left: '│',
54
- 'left-mid': '├',
55
- mid: '─',
56
- 'mid-mid': '┼',
57
- right: '│',
58
- 'right-mid': '┤',
59
- middle: '│',
60
- },
61
- });
62
- const formattedCustomerId = customerId.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
63
- table.push([chalk.gray('Customer ID'), chalk.white(formattedCustomerId)], [chalk.gray('账号名称'), chalk.white(accountName || 'N/A')], [chalk.gray('货币'), chalk.white(currency || 'N/A')], [chalk.gray('时区'), chalk.white(timezone || 'N/A')], [chalk.gray('邮箱'), chalk.white(email || 'N/A')], [chalk.gray('创建时间'), chalk.white(createdAt ? new Date(createdAt).toLocaleString() : 'N/A')]);
64
- console.log(table.toString());
65
- console.log(chalk.gray(`\n配置文件路径: ${config.path}\n`));
66
- }
20
+ const linkedAt = config.get('linkedAt');
21
+ const result = {
22
+ customer_id: customerId || null,
23
+ account_name: accountName || null,
24
+ currency: currency || null,
25
+ timezone: timezone || null,
26
+ email: email || null,
27
+ created_at: createdAt || null,
28
+ linked_at: linkedAt || null,
29
+ config_path: config.path,
30
+ };
31
+ console.log(JSON.stringify(result, null, 2));
67
32
  });
68
33
  // config reset - 重置配置
69
34
  configCommand
70
35
  .command('reset')
71
36
  .description('重置配置(删除所有已保存的配置)')
72
- .option('--force', '跳过确认直接重置')
73
- .action(async (options) => {
74
- const customerId = config.get('customerId');
75
- if (!customerId) {
76
- console.log(chalk.yellow('\n⚠️ 当前没有配置需要重置\n'));
77
- return;
78
- }
79
- if (!options.force) {
80
- const answers = await inquirer.prompt([
81
- {
82
- type: 'confirm',
83
- name: 'confirm',
84
- message: '确定要重置配置吗?这将删除所有已保存的账号信息。',
85
- default: false,
86
- },
87
- ]);
88
- if (!answers.confirm) {
89
- console.log(chalk.gray('\n已取消\n'));
90
- return;
91
- }
92
- }
37
+ .action(() => {
93
38
  config.clear();
94
- console.log(chalk.green('\n✅ 配置已重置\n'));
95
- console.log(chalk.gray('您可以重新运行: ') + chalk.cyan('google-ads account create\n'));
39
+ console.log(JSON.stringify({ success: true, message: '配置已重置' }, null, 2));
96
40
  });
97
41
  // config path - 显示配置文件路径
98
42
  configCommand
99
43
  .command('path')
100
44
  .description('显示配置文件路径')
101
45
  .action(() => {
102
- console.log(config.path);
46
+ console.log(JSON.stringify({ path: config.path }, null, 2));
103
47
  });
104
48
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,WAAW,CAAC,CAAC;AAE5B,uBAAuB;AACvB,aAAa;KACV,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAuB,CAAC;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAuB,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAuB,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAuB,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAuB,CAAC;IACxD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAuB,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAuB,CAAC;IAE9D,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,UAAU,IAAI,IAAI;QAC/B,YAAY,EAAE,WAAW,IAAI,IAAI;QACjC,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC1B,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC1B,KAAK,EAAE,KAAK,IAAI,IAAI;QACpB,UAAU,EAAE,SAAS,IAAI,IAAI;QAC7B,SAAS,EAAE,QAAQ,IAAI,IAAI;QAC3B,WAAW,EAAE,MAAM,CAAC,IAAI;KACzB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,sBAAsB;AACtB,aAAa;KACV,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC;AAEL,yBAAyB;AACzB,aAAa;KACV,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,UAAU,CAAC;KACvB,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,UAAU,SA6CnB,CAAC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,UAAU,SA0BnB,CAAC"}
@@ -2,8 +2,6 @@
2
2
  * Keyword Add Command - 添加关键词
3
3
  */
4
4
  import { Command } from 'commander';
5
- import chalk from 'chalk';
6
- import ora from 'ora';
7
5
  import { getApiClient } from '../../lib/api-client.js';
8
6
  import { handleError } from '../../utils/errors.js';
9
7
  import { getCustomerId } from '../../utils/customer-id.js';
@@ -12,36 +10,19 @@ export const addCommand = new Command('add')
12
10
  .requiredOption('--ad-group-id <id>', '广告组 ID')
13
11
  .requiredOption('-k, --keywords <keywords>', '关键词(逗号分隔)')
14
12
  .option('--match-type <type>', '匹配类型 (BROAD, PHRASE, EXACT)', 'BROAD')
15
- .option('--json', '以 JSON 格式输出')
16
13
  .action(async (options) => {
17
- const spinner = ora('添加关键词...').start();
18
14
  try {
19
15
  const customerId = getCustomerId();
20
16
  const client = getApiClient();
21
- // 解析关键词
22
17
  const keywordTexts = options.keywords.split(',').map((k) => k.trim());
23
18
  const keywords = keywordTexts.map((text) => ({
24
19
  text,
25
20
  matchType: options.matchType,
26
21
  }));
27
22
  const result = await client.addKeywords(customerId, options.adGroupId, keywords);
28
- spinner.succeed(`成功添加 ${keywordTexts.length} 个关键词`);
29
- if (options.json) {
30
- console.log(JSON.stringify(result, null, 2));
31
- }
32
- else {
33
- console.log(chalk.green(`\n✅ 已添加 ${keywordTexts.length} 个关键词`));
34
- console.log(chalk.gray('匹配类型:'), chalk.white(options.matchType));
35
- console.log(chalk.gray('\n关键词列表:'));
36
- keywordTexts.forEach((text, index) => {
37
- console.log(chalk.white(` ${index + 1}. ${text}`));
38
- });
39
- console.log(chalk.gray('\n💡 查看关键词:'));
40
- console.log(chalk.cyan(` google-ads keyword list`));
41
- }
23
+ console.log(JSON.stringify(result, null, 2));
42
24
  }
43
25
  catch (error) {
44
- spinner.fail('添加失败');
45
26
  handleError(error);
46
27
  }
47
28
  });
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/keyword/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,OAAO,CAAC;KACpB,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC;KAC9C,cAAc,CAAC,2BAA2B,EAAE,WAAW,CAAC;KACxD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,OAAO,CAAC;KACrE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;KAC/B,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,QAAQ;QACR,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CACrC,UAAU,EACV,OAAO,CAAC,SAAS,EACjB,QAAQ,CACT,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,QAAQ,YAAY,CAAC,MAAM,OAAO,CAAC,CAAC;QAEpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;gBACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/keyword/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,OAAO,CAAC;KACpB,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC;KAC9C,cAAc,CAAC,2BAA2B,EAAE,WAAW,CAAC;KACxD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,OAAO,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CACrC,UAAU,EACV,OAAO,CAAC,SAAS,EACjB,QAAQ,CACT,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,aAAa,SA8CtB,CAAC"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAmBtB,CAAC"}
@@ -2,9 +2,6 @@
2
2
  * Keyword Delete Command - 删除关键词
3
3
  */
4
4
  import { Command } from 'commander';
5
- import chalk from 'chalk';
6
- import ora from 'ora';
7
- import inquirer from 'inquirer';
8
5
  import { getApiClient } from '../../lib/api-client.js';
9
6
  import { handleError } from '../../utils/errors.js';
10
7
  import { getCustomerId } from '../../utils/customer-id.js';
@@ -12,36 +9,12 @@ export const deleteCommand = new Command('delete')
12
9
  .description('删除关键词')
13
10
  .requiredOption('--ad-group-id <id>', '广告组 ID')
14
11
  .requiredOption('--criterion-id <id>', '关键词 Criterion ID')
15
- .option('-y, --yes', '跳过确认')
16
- .option('--json', '以 JSON 格式输出')
17
12
  .action(async (options) => {
18
13
  try {
19
14
  const customerId = getCustomerId();
20
- // 确认删除
21
- if (!options.yes) {
22
- const answer = await inquirer.prompt([
23
- {
24
- type: 'confirm',
25
- name: 'confirm',
26
- message: `确定要删除关键词 ${options.criterionId} 吗?`,
27
- default: false,
28
- },
29
- ]);
30
- if (!answer.confirm) {
31
- console.log(chalk.yellow('已取消'));
32
- return;
33
- }
34
- }
35
- const spinner = ora('删除关键词...').start();
36
15
  const client = getApiClient();
37
16
  const result = await client.deleteKeyword(customerId, options.adGroupId, options.criterionId);
38
- spinner.succeed('关键词已删除');
39
- if (options.json) {
40
- console.log(JSON.stringify(result, null, 2));
41
- }
42
- else {
43
- console.log(chalk.green(`\n✅ 关键词 ${options.criterionId} 已删除`));
44
- }
17
+ console.log(JSON.stringify(result, null, 2));
45
18
  }
46
19
  catch (error) {
47
20
  handleError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/keyword/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,OAAO,CAAC;KACpB,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC;KAC9C,cAAc,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACzD,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;KAC/B,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QAEnC,OAAO;QACP,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACnC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,YAAY,OAAO,CAAC,WAAW,KAAK;oBAC7C,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QAExC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CACvC,UAAU,EACV,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,WAAW,CACpB,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/keyword/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,OAAO,CAAC;KACpB,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC;KAC9C,cAAc,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CACvC,UAAU,EACV,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,WAAW,CACpB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,WAAW,SAwEpB,CAAC"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAoBpB,CAAC"}
@@ -2,74 +2,24 @@
2
2
  * Keyword List Command - 列出关键词
3
3
  */
4
4
  import { Command } from 'commander';
5
- import chalk from 'chalk';
6
- import Table from 'cli-table3';
7
- import ora from 'ora';
8
5
  import { getApiClient } from '../../lib/api-client.js';
9
6
  import { handleError } from '../../utils/errors.js';
10
- import { warn } from '../../utils/logger.js';
11
7
  import { getCustomerId } from '../../utils/customer-id.js';
12
8
  export const listCommand = new Command('list')
13
9
  .description('列出关键词')
14
10
  .option('--campaign-id <id>', '按广告系列过滤')
15
11
  .option('--status <status>', '按状态过滤 (ENABLED/PAUSED/REMOVED)')
16
12
  .option('--limit <number>', '限制返回数量', '100')
17
- .option('--json', '以 JSON 格式输出')
18
13
  .action(async (options) => {
19
14
  try {
20
15
  const customerId = getCustomerId();
21
16
  const client = getApiClient();
22
- const spinner = ora('正在获取关键词列表...').start();
23
- // 获取关键词列表
24
17
  const keywords = await client.listKeywords(customerId, {
25
18
  campaignId: options.campaignId,
26
19
  status: options.status,
27
20
  limit: parseInt(options.limit),
28
21
  });
29
- spinner.stop();
30
- if (keywords.length === 0) {
31
- warn('未找到关键词');
32
- return;
33
- }
34
- // 输出结果
35
- if (options.json) {
36
- console.log(JSON.stringify(keywords, null, 2));
37
- }
38
- else {
39
- const table = new Table({
40
- head: [
41
- chalk.cyan('关键词'),
42
- chalk.cyan('匹配类型'),
43
- chalk.cyan('状态'),
44
- chalk.cyan('质量得分'),
45
- chalk.cyan('展示量'),
46
- chalk.cyan('点击量'),
47
- chalk.cyan('费用'),
48
- chalk.cyan('点击率'),
49
- ],
50
- colWidths: [25, 12, 10, 10, 12, 10, 12, 10],
51
- });
52
- keywords.forEach((keyword) => {
53
- const cost = keyword.metrics?.cost_micros
54
- ? (keyword.metrics.cost_micros / 1000000).toFixed(2)
55
- : '0.00';
56
- const ctr = keyword.metrics?.ctr
57
- ? (keyword.metrics.ctr * 100).toFixed(2) + '%'
58
- : '0.00%';
59
- table.push([
60
- keyword.ad_group_criterion?.keyword?.text || 'N/A',
61
- keyword.ad_group_criterion?.keyword?.match_type || 'N/A',
62
- keyword.ad_group_criterion?.status || 'N/A',
63
- keyword.ad_group_criterion?.quality_info?.quality_score || 'N/A',
64
- keyword.metrics?.impressions || 0,
65
- keyword.metrics?.clicks || 0,
66
- cost,
67
- ctr,
68
- ]);
69
- });
70
- console.log('\n' + table.toString() + '\n');
71
- console.log(chalk.gray(`共 ${keywords.length} 个关键词\n`));
72
- }
22
+ console.log(JSON.stringify(keywords, null, 2));
73
23
  }
74
24
  catch (error) {
75
25
  handleError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/keyword/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/keyword/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,oBAAoB,EAAE,SAAS,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;KAC7D,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE,KAAK,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE;YACrD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;SAC/B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SA0CtB,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/keyword/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA6BtB,CAAC"}
@@ -2,8 +2,6 @@
2
2
  * Keyword Update Command - 更新关键词
3
3
  */
4
4
  import { Command } from 'commander';
5
- import chalk from 'chalk';
6
- import ora from 'ora';
7
5
  import { getApiClient } from '../../lib/api-client.js';
8
6
  import { handleError } from '../../utils/errors.js';
9
7
  import { getCustomerId } from '../../utils/customer-id.js';
@@ -13,38 +11,26 @@ export const updateCommand = new Command('update')
13
11
  .requiredOption('--criterion-id <id>', '关键词条件 ID')
14
12
  .option('--status <status>', '状态 (ENABLED, PAUSED)')
15
13
  .option('--bid <amount>', '每次点击出价(美元)')
16
- .option('--json', '以 JSON 格式输出')
17
14
  .action(async (options) => {
18
- if (!options.status && !options.bid) {
19
- console.log(chalk.red('请至少指定一个要更新的字段: --status 或 --bid'));
20
- return;
21
- }
22
- const spinner = ora('更新关键词...').start();
23
15
  try {
16
+ if (!options.status && !options.bid) {
17
+ console.log(JSON.stringify({
18
+ error: 'missing_fields',
19
+ message: '请至少指定一个要更新的字段: --status 或 --bid'
20
+ }, null, 2));
21
+ process.exit(1);
22
+ }
24
23
  const customerId = getCustomerId();
25
24
  const client = getApiClient();
26
25
  const updateData = {};
27
- if (options.status) {
26
+ if (options.status)
28
27
  updateData.status = options.status;
29
- }
30
- if (options.bid) {
28
+ if (options.bid)
31
29
  updateData.cpcBidMicros = Math.round(parseFloat(options.bid) * 1000000);
32
- }
33
30
  const result = await client.updateKeyword(customerId, options.adGroupId, options.criterionId, updateData);
34
- spinner.succeed('关键词已更新');
35
- if (options.json) {
36
- console.log(JSON.stringify(result, null, 2));
37
- }
38
- else {
39
- console.log(chalk.green(`\n✅ 关键词 ${options.criterionId} 已更新`));
40
- if (options.status)
41
- console.log(chalk.gray(`状态: ${options.status}`));
42
- if (options.bid)
43
- console.log(chalk.gray(`出价: $${options.bid}`));
44
- }
31
+ console.log(JSON.stringify(result, null, 2));
45
32
  }
46
33
  catch (error) {
47
- spinner.fail('更新失败');
48
34
  handleError(error);
49
35
  }
50
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/keyword/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,OAAO,CAAC;KACpB,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC;KAC9C,cAAc,CAAC,qBAAqB,EAAE,UAAU,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC;KACtC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;KAC/B,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,UAAU,GAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE1G,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC;YAC/D,IAAI,OAAO,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrE,IAAI,OAAO,CAAC,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/keyword/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,OAAO,CAAC;KACpB,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC;KAC9C,cAAc,CAAC,qBAAqB,EAAE,UAAU,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC;KACtC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,iCAAiC;aAC3C,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,UAAU,GAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,MAAM;YAAE,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACvD,IAAI,OAAO,CAAC,GAAG;YAAE,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAEzF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE1G,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,YAAY,SA+DrB,CAAC"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SAwCrB,CAAC"}