@optima-chat/ads-cli 0.8.0 → 0.9.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.
|
@@ -6,17 +6,18 @@ import { getApiClient } from '../../lib/api-client.js';
|
|
|
6
6
|
import { handleError } from '../../utils/errors.js';
|
|
7
7
|
import { getCustomerId } from '../../utils/customer-id.js';
|
|
8
8
|
export const checkCommand = new Command('check')
|
|
9
|
-
.description('
|
|
9
|
+
.description('检查账号配置状态(链接状态、权限等)')
|
|
10
10
|
.action(async () => {
|
|
11
11
|
try {
|
|
12
12
|
const customerId = getCustomerId();
|
|
13
13
|
const client = getApiClient();
|
|
14
14
|
// Check account via backend API
|
|
15
|
-
const
|
|
16
|
-
|
|
15
|
+
const checkResult = await client.checkAccount(customerId);
|
|
16
|
+
// New format with status field
|
|
17
17
|
const result = {
|
|
18
18
|
customer_id: checkResult.customerId || customerId,
|
|
19
|
-
|
|
19
|
+
status: checkResult.status || (checkResult.connected ? 'active' : 'not_linked'),
|
|
20
|
+
message: checkResult.message || null,
|
|
20
21
|
info: checkResult.info ? {
|
|
21
22
|
name: checkResult.info.descriptive_name || null,
|
|
22
23
|
currency: checkResult.info.currency_code || null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/commands/account/check.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,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/commands/account/check.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,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,gCAAgC;QAChC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAQ,CAAC;QAEjE,+BAA+B;QAC/B,MAAM,MAAM,GAAG;YACb,WAAW,EAAE,WAAW,CAAC,UAAU,IAAI,UAAU;YACjD,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;YAC/E,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,IAAI;YACpC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI;gBAC/C,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI;gBAChD,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI;aAC7C,CAAC,CAAC,CAAC,IAAI;SACT,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/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;
|
|
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"}
|
package/dist/commands/query.js
CHANGED
|
@@ -2,23 +2,17 @@
|
|
|
2
2
|
* Query Command - 执行 GAQL 查询
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from 'commander';
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
import ora from 'ora';
|
|
7
5
|
import { readFileSync } from 'fs';
|
|
8
6
|
import { getApiClient } from '../lib/api-client.js';
|
|
9
7
|
import { handleError } from '../utils/errors.js';
|
|
10
|
-
import { warn } from '../utils/logger.js';
|
|
11
8
|
import { getCustomerId } from '../utils/customer-id.js';
|
|
12
9
|
export const queryCommand = new Command('query')
|
|
13
10
|
.description('执行 GAQL 查询')
|
|
14
11
|
.option('-c, --customer-id <id>', '客户账号 ID(可选,默认从配置读取)')
|
|
15
12
|
.option('-q, --query <query>', 'GAQL 查询语句')
|
|
16
13
|
.option('-f, --file <file>', '从文件读取 GAQL 查询')
|
|
17
|
-
.option('--json', '以 JSON 格式输出(默认)')
|
|
18
|
-
.option('--pretty', '美化 JSON 输出')
|
|
19
14
|
.action(async (options) => {
|
|
20
15
|
try {
|
|
21
|
-
// 获取查询语句
|
|
22
16
|
let query;
|
|
23
17
|
if (options.query) {
|
|
24
18
|
query = options.query;
|
|
@@ -27,42 +21,24 @@ export const queryCommand = new Command('query')
|
|
|
27
21
|
query = readFileSync(options.file, 'utf-8');
|
|
28
22
|
}
|
|
29
23
|
else {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
console.log(chalk.cyan(' google-ads query -c 1234567890 -f query.gaql'));
|
|
24
|
+
console.log(JSON.stringify({
|
|
25
|
+
error: 'missing_query',
|
|
26
|
+
message: '请提供查询语句(使用 -q 或 -f 参数)'
|
|
27
|
+
}, null, 2));
|
|
35
28
|
process.exit(1);
|
|
36
29
|
}
|
|
37
|
-
// 清理查询语句
|
|
38
30
|
query = query.trim();
|
|
39
31
|
if (!query) {
|
|
40
|
-
|
|
32
|
+
console.log(JSON.stringify({
|
|
33
|
+
error: 'empty_query',
|
|
34
|
+
message: '查询语句不能为空'
|
|
35
|
+
}, null, 2));
|
|
41
36
|
process.exit(1);
|
|
42
37
|
}
|
|
43
38
|
const client = getApiClient();
|
|
44
39
|
const customerId = options.customerId || getCustomerId();
|
|
45
|
-
const spinner = ora('正在执行查询...').start();
|
|
46
|
-
// 执行查询
|
|
47
40
|
const results = await client.query(customerId, query);
|
|
48
|
-
|
|
49
|
-
// 输出结果
|
|
50
|
-
if (results.length === 0) {
|
|
51
|
-
warn('查询未返回任何结果');
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
// 总是输出 JSON 格式(LLM 友好)
|
|
55
|
-
if (options.pretty) {
|
|
56
|
-
console.log(JSON.stringify(results, null, 2));
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
console.log(JSON.stringify(results));
|
|
60
|
-
}
|
|
61
|
-
// 显示统计信息(仅当 pretty 模式时)
|
|
62
|
-
if (options.pretty) {
|
|
63
|
-
console.log();
|
|
64
|
-
console.log(chalk.gray(`共返回 ${results.length} 条记录`));
|
|
65
|
-
}
|
|
41
|
+
console.log(JSON.stringify(results, null, 2));
|
|
66
42
|
}
|
|
67
43
|
catch (error) {
|
|
68
44
|
handleError(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,YAAY,CAAC;KACzB,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,CAAC;KACvD,MAAM,CAAC,qBAAqB,EAAE,WAAW,CAAC;KAC1C,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,KAAa,CAAC;QAElB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACxB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,wBAAwB;aAClC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAErB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,UAAU;aACpB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC;QAEzD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC"}
|