@optima-chat/ads-cli 0.5.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.
- package/.claude/CLAUDE.md +279 -0
- package/dist/commands/account/check.d.ts +6 -0
- package/dist/commands/account/check.d.ts.map +1 -0
- package/dist/commands/account/check.js +179 -0
- package/dist/commands/account/check.js.map +1 -0
- package/dist/commands/account/create.d.ts +6 -0
- package/dist/commands/account/create.d.ts.map +1 -0
- package/dist/commands/account/create.js +172 -0
- package/dist/commands/account/create.js.map +1 -0
- package/dist/commands/account/index.d.ts +6 -0
- package/dist/commands/account/index.d.ts.map +1 -0
- package/dist/commands/account/index.js +11 -0
- package/dist/commands/account/index.js.map +1 -0
- package/dist/commands/ad/create.d.ts +6 -0
- package/dist/commands/ad/create.d.ts.map +1 -0
- package/dist/commands/ad/create.js +77 -0
- package/dist/commands/ad/create.js.map +1 -0
- package/dist/commands/ad/delete.d.ts +6 -0
- package/dist/commands/ad/delete.d.ts.map +1 -0
- package/dist/commands/ad/delete.js +50 -0
- package/dist/commands/ad/delete.js.map +1 -0
- package/dist/commands/ad/index.d.ts +6 -0
- package/dist/commands/ad/index.d.ts.map +1 -0
- package/dist/commands/ad/index.js +17 -0
- package/dist/commands/ad/index.js.map +1 -0
- package/dist/commands/ad/info.d.ts +6 -0
- package/dist/commands/ad/info.d.ts.map +1 -0
- package/dist/commands/ad/info.js +90 -0
- package/dist/commands/ad/info.js.map +1 -0
- package/dist/commands/ad/list.d.ts +6 -0
- package/dist/commands/ad/list.d.ts.map +1 -0
- package/dist/commands/ad/list.js +94 -0
- package/dist/commands/ad/list.js.map +1 -0
- package/dist/commands/ad/update.d.ts +6 -0
- package/dist/commands/ad/update.d.ts.map +1 -0
- package/dist/commands/ad/update.js +42 -0
- package/dist/commands/ad/update.js.map +1 -0
- package/dist/commands/ad-group/create.d.ts +6 -0
- package/dist/commands/ad-group/create.d.ts.map +1 -0
- package/dist/commands/ad-group/create.js +59 -0
- package/dist/commands/ad-group/create.js.map +1 -0
- package/dist/commands/ad-group/delete.d.ts +6 -0
- package/dist/commands/ad-group/delete.d.ts.map +1 -0
- package/dist/commands/ad-group/delete.js +49 -0
- package/dist/commands/ad-group/delete.js.map +1 -0
- package/dist/commands/ad-group/index.d.ts +6 -0
- package/dist/commands/ad-group/index.d.ts.map +1 -0
- package/dist/commands/ad-group/index.js +17 -0
- package/dist/commands/ad-group/index.js.map +1 -0
- package/dist/commands/ad-group/info.d.ts +6 -0
- package/dist/commands/ad-group/info.d.ts.map +1 -0
- package/dist/commands/ad-group/info.js +59 -0
- package/dist/commands/ad-group/info.js.map +1 -0
- package/dist/commands/ad-group/list.d.ts +6 -0
- package/dist/commands/ad-group/list.d.ts.map +1 -0
- package/dist/commands/ad-group/list.js +83 -0
- package/dist/commands/ad-group/list.js.map +1 -0
- package/dist/commands/ad-group/update.d.ts +6 -0
- package/dist/commands/ad-group/update.d.ts.map +1 -0
- package/dist/commands/ad-group/update.js +56 -0
- package/dist/commands/ad-group/update.js.map +1 -0
- package/dist/commands/auth/index.d.ts +6 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +13 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/login.d.ts +10 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +154 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +6 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +28 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/status.d.ts +6 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +47 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/campaign/create.d.ts +6 -0
- package/dist/commands/campaign/create.d.ts.map +1 -0
- package/dist/commands/campaign/create.js +58 -0
- package/dist/commands/campaign/create.js.map +1 -0
- package/dist/commands/campaign/delete.d.ts +6 -0
- package/dist/commands/campaign/delete.d.ts.map +1 -0
- package/dist/commands/campaign/delete.js +49 -0
- package/dist/commands/campaign/delete.js.map +1 -0
- package/dist/commands/campaign/index.d.ts +6 -0
- package/dist/commands/campaign/index.d.ts.map +1 -0
- package/dist/commands/campaign/index.js +17 -0
- package/dist/commands/campaign/index.js.map +1 -0
- package/dist/commands/campaign/info.d.ts +6 -0
- package/dist/commands/campaign/info.d.ts.map +1 -0
- package/dist/commands/campaign/info.js +57 -0
- package/dist/commands/campaign/info.js.map +1 -0
- package/dist/commands/campaign/list.d.ts +6 -0
- package/dist/commands/campaign/list.d.ts.map +1 -0
- package/dist/commands/campaign/list.js +71 -0
- package/dist/commands/campaign/list.js.map +1 -0
- package/dist/commands/campaign/update.d.ts +6 -0
- package/dist/commands/campaign/update.d.ts.map +1 -0
- package/dist/commands/campaign/update.js +56 -0
- package/dist/commands/campaign/update.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +104 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/keyword/add.d.ts +6 -0
- package/dist/commands/keyword/add.d.ts.map +1 -0
- package/dist/commands/keyword/add.js +47 -0
- package/dist/commands/keyword/add.js.map +1 -0
- package/dist/commands/keyword/delete.d.ts +6 -0
- package/dist/commands/keyword/delete.d.ts.map +1 -0
- package/dist/commands/keyword/delete.js +50 -0
- package/dist/commands/keyword/delete.js.map +1 -0
- package/dist/commands/keyword/index.d.ts +6 -0
- package/dist/commands/keyword/index.d.ts.map +1 -0
- package/dist/commands/keyword/index.js +15 -0
- package/dist/commands/keyword/index.js.map +1 -0
- package/dist/commands/keyword/list.d.ts +6 -0
- package/dist/commands/keyword/list.d.ts.map +1 -0
- package/dist/commands/keyword/list.js +77 -0
- package/dist/commands/keyword/list.js.map +1 -0
- package/dist/commands/keyword/update.d.ts +6 -0
- package/dist/commands/keyword/update.d.ts.map +1 -0
- package/dist/commands/keyword/update.js +51 -0
- package/dist/commands/keyword/update.js.map +1 -0
- package/dist/commands/query.d.ts +6 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +71 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +100 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +186 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/callback-server.d.ts +32 -0
- package/dist/lib/callback-server.d.ts.map +1 -0
- package/dist/lib/callback-server.js +132 -0
- package/dist/lib/callback-server.js.map +1 -0
- package/dist/lib/google-ads-client.d.ts +177 -0
- package/dist/lib/google-ads-client.d.ts.map +1 -0
- package/dist/lib/google-ads-client.js +826 -0
- package/dist/lib/google-ads-client.js.map +1 -0
- package/dist/lib/oauth2-manager.d.ts +27 -0
- package/dist/lib/oauth2-manager.d.ts.map +1 -0
- package/dist/lib/oauth2-manager.js +123 -0
- package/dist/lib/oauth2-manager.js.map +1 -0
- package/dist/lib/token-store.d.ts +43 -0
- package/dist/lib/token-store.d.ts.map +1 -0
- package/dist/lib/token-store.js +103 -0
- package/dist/lib/token-store.js.map +1 -0
- package/dist/utils/config.d.ts +9 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +34 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/customer-id.d.ts +10 -0
- package/dist/utils/customer-id.d.ts.map +1 -0
- package/dist/utils/customer-id.js +29 -0
- package/dist/utils/customer-id.js.map +1 -0
- package/dist/utils/env-updater.d.ts +8 -0
- package/dist/utils/env-updater.d.ts.map +1 -0
- package/dist/utils/env-updater.js +45 -0
- package/dist/utils/env-updater.js.map +1 -0
- package/dist/utils/errors.d.ts +32 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +68 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +25 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/optima-config.d.ts +9 -0
- package/dist/utils/optima-config.d.ts.map +1 -0
- package/dist/utils/optima-config.js +83 -0
- package/dist/utils/optima-config.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-ads-client.js","sourceRoot":"","sources":["../../src/lib/google-ads-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth2 Manager - Google Ads OAuth2 认证管理
|
|
3
|
+
*/
|
|
4
|
+
import { OAuth2Token } from '../config.js';
|
|
5
|
+
export declare class OAuth2Manager {
|
|
6
|
+
/**
|
|
7
|
+
* 生成授权 URL
|
|
8
|
+
*/
|
|
9
|
+
getAuthorizationUrl(redirectUri: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* 用授权码交换 token
|
|
12
|
+
*/
|
|
13
|
+
exchangeCodeForToken(code: string, redirectUri: string): Promise<OAuth2Token>;
|
|
14
|
+
/**
|
|
15
|
+
* 刷新 access token
|
|
16
|
+
*/
|
|
17
|
+
refreshAccessToken(refreshToken: string): Promise<OAuth2Token>;
|
|
18
|
+
/**
|
|
19
|
+
* 获取有效的 access token(自动刷新)
|
|
20
|
+
*/
|
|
21
|
+
getAccessToken(): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* 获取 refresh token
|
|
24
|
+
*/
|
|
25
|
+
getRefreshToken(): Promise<string>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=oauth2-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth2-manager.d.ts","sourceRoot":"","sources":["../../src/lib/oauth2-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAY3C,qBAAa,aAAa;IACxB;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAehD;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgCnF;;OAEG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA+BpE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAsBvC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;CASzC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth2 Manager - Google Ads OAuth2 认证管理
|
|
3
|
+
*/
|
|
4
|
+
import axios from 'axios';
|
|
5
|
+
import { loadConfig } from '../utils/config.js';
|
|
6
|
+
import { loadToken, isTokenExpired } from './token-store.js';
|
|
7
|
+
import { AuthError } from '../utils/errors.js';
|
|
8
|
+
// Google OAuth2 端点
|
|
9
|
+
const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth';
|
|
10
|
+
const OAUTH2_TOKEN_URL = 'https://oauth2.googleapis.com/token';
|
|
11
|
+
// Google Ads API 权限
|
|
12
|
+
const SCOPES = ['https://www.googleapis.com/auth/adwords'];
|
|
13
|
+
export class OAuth2Manager {
|
|
14
|
+
/**
|
|
15
|
+
* 生成授权 URL
|
|
16
|
+
*/
|
|
17
|
+
getAuthorizationUrl(redirectUri) {
|
|
18
|
+
const config = loadConfig();
|
|
19
|
+
const params = new URLSearchParams({
|
|
20
|
+
client_id: config.clientId,
|
|
21
|
+
redirect_uri: redirectUri,
|
|
22
|
+
response_type: 'code',
|
|
23
|
+
scope: SCOPES.join(' '),
|
|
24
|
+
access_type: 'offline', // 获取 refresh_token
|
|
25
|
+
prompt: 'consent', // 强制显示授权页面
|
|
26
|
+
});
|
|
27
|
+
return `${OAUTH2_AUTH_URL}?${params.toString()}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 用授权码交换 token
|
|
31
|
+
*/
|
|
32
|
+
async exchangeCodeForToken(code, redirectUri) {
|
|
33
|
+
const config = loadConfig();
|
|
34
|
+
try {
|
|
35
|
+
const response = await axios.post(OAUTH2_TOKEN_URL, {
|
|
36
|
+
code,
|
|
37
|
+
client_id: config.clientId,
|
|
38
|
+
client_secret: config.clientSecret,
|
|
39
|
+
redirect_uri: redirectUri,
|
|
40
|
+
grant_type: 'authorization_code',
|
|
41
|
+
});
|
|
42
|
+
const data = response.data;
|
|
43
|
+
// 计算过期时间
|
|
44
|
+
const expiresAt = Date.now() + data.expires_in * 1000;
|
|
45
|
+
return {
|
|
46
|
+
access_token: data.access_token,
|
|
47
|
+
refresh_token: data.refresh_token,
|
|
48
|
+
expires_at: expiresAt,
|
|
49
|
+
scope: data.scope,
|
|
50
|
+
token_type: data.token_type,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error.response?.data?.error_description) {
|
|
55
|
+
throw new AuthError(`OAuth2 错误: ${error.response.data.error_description}`);
|
|
56
|
+
}
|
|
57
|
+
throw new AuthError(`交换 token 失败: ${error.message}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 刷新 access token
|
|
62
|
+
*/
|
|
63
|
+
async refreshAccessToken(refreshToken) {
|
|
64
|
+
const config = loadConfig();
|
|
65
|
+
try {
|
|
66
|
+
const response = await axios.post(OAUTH2_TOKEN_URL, {
|
|
67
|
+
client_id: config.clientId,
|
|
68
|
+
client_secret: config.clientSecret,
|
|
69
|
+
refresh_token: refreshToken,
|
|
70
|
+
grant_type: 'refresh_token',
|
|
71
|
+
});
|
|
72
|
+
const data = response.data;
|
|
73
|
+
// 计算过期时间
|
|
74
|
+
const expiresAt = Date.now() + data.expires_in * 1000;
|
|
75
|
+
return {
|
|
76
|
+
access_token: data.access_token,
|
|
77
|
+
refresh_token: refreshToken, // refresh_token 保持不变
|
|
78
|
+
expires_at: expiresAt,
|
|
79
|
+
scope: data.scope,
|
|
80
|
+
token_type: data.token_type,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (error.response?.data?.error_description) {
|
|
85
|
+
throw new AuthError(`刷新 token 失败: ${error.response.data.error_description}`);
|
|
86
|
+
}
|
|
87
|
+
throw new AuthError(`刷新 token 失败: ${error.message}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 获取有效的 access token(自动刷新)
|
|
92
|
+
*/
|
|
93
|
+
async getAccessToken() {
|
|
94
|
+
const token = loadToken();
|
|
95
|
+
if (!token) {
|
|
96
|
+
throw new AuthError('未登录,请先运行: google-ads auth login');
|
|
97
|
+
}
|
|
98
|
+
// 如果 token 未过期,直接返回
|
|
99
|
+
if (!isTokenExpired(token)) {
|
|
100
|
+
return token.access_token;
|
|
101
|
+
}
|
|
102
|
+
// 如果过期,刷新 token
|
|
103
|
+
try {
|
|
104
|
+
const newToken = await this.refreshAccessToken(token.refresh_token);
|
|
105
|
+
// refresh_token 保存在环境变量中,只需返回新的 access_token
|
|
106
|
+
return newToken.access_token;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
throw new AuthError('Token 已过期且刷新失败,请重新登录: google-ads auth login');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 获取 refresh token
|
|
114
|
+
*/
|
|
115
|
+
async getRefreshToken() {
|
|
116
|
+
const token = loadToken();
|
|
117
|
+
if (!token) {
|
|
118
|
+
throw new AuthError('未登录,请先运行: google-ads auth login');
|
|
119
|
+
}
|
|
120
|
+
return token.refresh_token;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=oauth2-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth2-manager.js","sourceRoot":"","sources":["../../src/lib/oauth2-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Store - Optima JWT Token 存储和管理
|
|
3
|
+
*
|
|
4
|
+
* 支持从以下位置读取 token:
|
|
5
|
+
* 1. 环境变量 OPTIMA_TOKEN
|
|
6
|
+
* 2. ~/.optima/token.json 文件
|
|
7
|
+
*/
|
|
8
|
+
export declare class TokenStore {
|
|
9
|
+
private tokenFilePath;
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* 获取 JWT access token
|
|
13
|
+
*/
|
|
14
|
+
getToken(): Promise<string | null>;
|
|
15
|
+
/**
|
|
16
|
+
* 检查是否已有 token
|
|
17
|
+
*/
|
|
18
|
+
hasToken(): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* 保存 token 到文件
|
|
21
|
+
*/
|
|
22
|
+
saveToken(accessToken: string, refreshToken?: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* 清除 token
|
|
25
|
+
*/
|
|
26
|
+
clearToken(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
import { OAuth2Token } from '../config.js';
|
|
29
|
+
/**
|
|
30
|
+
* 加载 Google Ads refresh token(从环境变量)
|
|
31
|
+
* @deprecated 使用 TokenStore 类替代
|
|
32
|
+
*/
|
|
33
|
+
export declare function loadToken(): OAuth2Token | null;
|
|
34
|
+
/**
|
|
35
|
+
* 检查是否已有 Google Ads token
|
|
36
|
+
* @deprecated 使用 TokenStore 类替代
|
|
37
|
+
*/
|
|
38
|
+
export declare function hasToken(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 检查 token 是否过期
|
|
41
|
+
*/
|
|
42
|
+
export declare function isTokenExpired(token: OAuth2Token): boolean;
|
|
43
|
+
//# sourceMappingURL=token-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../src/lib/token-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,qBAAa,UAAU;IACrB,OAAO,CAAC,aAAa,CAAS;;IAM9B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBxC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAKlC;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1E;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAKlC;AAID,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,SAAS,IAAI,WAAW,GAAG,IAAI,CAc9C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAG1D"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Store - Optima JWT Token 存储和管理
|
|
3
|
+
*
|
|
4
|
+
* 支持从以下位置读取 token:
|
|
5
|
+
* 1. 环境变量 OPTIMA_TOKEN
|
|
6
|
+
* 2. ~/.optima/token.json 文件
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
export class TokenStore {
|
|
12
|
+
tokenFilePath;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.tokenFilePath = path.join(os.homedir(), '.optima', 'token.json');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 获取 JWT access token
|
|
18
|
+
*/
|
|
19
|
+
async getToken() {
|
|
20
|
+
// 1. 尝试从环境变量读取
|
|
21
|
+
if (process.env.OPTIMA_TOKEN) {
|
|
22
|
+
return process.env.OPTIMA_TOKEN;
|
|
23
|
+
}
|
|
24
|
+
// 2. 尝试从文件读取
|
|
25
|
+
try {
|
|
26
|
+
if (fs.existsSync(this.tokenFilePath)) {
|
|
27
|
+
const content = fs.readFileSync(this.tokenFilePath, 'utf-8');
|
|
28
|
+
const token = JSON.parse(content);
|
|
29
|
+
// 支持两种格式:camelCase 和 snake_case
|
|
30
|
+
const accessToken = token.accessToken || token.access_token;
|
|
31
|
+
if (accessToken) {
|
|
32
|
+
return accessToken;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// 忽略文件读取错误
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 检查是否已有 token
|
|
43
|
+
*/
|
|
44
|
+
async hasToken() {
|
|
45
|
+
const token = await this.getToken();
|
|
46
|
+
return !!token;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 保存 token 到文件
|
|
50
|
+
*/
|
|
51
|
+
async saveToken(accessToken, refreshToken) {
|
|
52
|
+
const dir = path.dirname(this.tokenFilePath);
|
|
53
|
+
if (!fs.existsSync(dir)) {
|
|
54
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
const token = {
|
|
57
|
+
accessToken,
|
|
58
|
+
refreshToken,
|
|
59
|
+
expiresAt: Date.now() + 24 * 60 * 60 * 1000, // 24 hours
|
|
60
|
+
};
|
|
61
|
+
fs.writeFileSync(this.tokenFilePath, JSON.stringify(token, null, 2));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 清除 token
|
|
65
|
+
*/
|
|
66
|
+
async clearToken() {
|
|
67
|
+
if (fs.existsSync(this.tokenFilePath)) {
|
|
68
|
+
fs.unlinkSync(this.tokenFilePath);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 加载 Google Ads refresh token(从环境变量)
|
|
74
|
+
* @deprecated 使用 TokenStore 类替代
|
|
75
|
+
*/
|
|
76
|
+
export function loadToken() {
|
|
77
|
+
const refreshToken = process.env.GOOGLE_ADS_REFRESH_TOKEN;
|
|
78
|
+
if (!refreshToken) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
access_token: '',
|
|
83
|
+
refresh_token: refreshToken,
|
|
84
|
+
expires_at: 0,
|
|
85
|
+
scope: 'https://www.googleapis.com/auth/adwords',
|
|
86
|
+
token_type: 'Bearer',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 检查是否已有 Google Ads token
|
|
91
|
+
* @deprecated 使用 TokenStore 类替代
|
|
92
|
+
*/
|
|
93
|
+
export function hasToken() {
|
|
94
|
+
return !!process.env.GOOGLE_ADS_REFRESH_TOKEN;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 检查 token 是否过期
|
|
98
|
+
*/
|
|
99
|
+
export function isTokenExpired(token) {
|
|
100
|
+
const expiryBuffer = 5 * 60 * 1000;
|
|
101
|
+
return Date.now() >= token.expires_at - expiryBuffer;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/lib/token-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;GAEG;AACH,wBAAgB,UAAU,IAAI,eAAe,CA8B5C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置管理工具 - 纯环境变量方式
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 从环境变量加载配置
|
|
6
|
+
*/
|
|
7
|
+
export function loadConfig() {
|
|
8
|
+
const developerToken = process.env.GOOGLE_ADS_DEVELOPER_TOKEN;
|
|
9
|
+
const clientId = process.env.GOOGLE_ADS_CLIENT_ID;
|
|
10
|
+
const clientSecret = process.env.GOOGLE_ADS_CLIENT_SECRET;
|
|
11
|
+
if (!developerToken || !clientId || !clientSecret) {
|
|
12
|
+
throw new Error('缺少必需的环境变量配置。请设置以下环境变量:\n\n' +
|
|
13
|
+
' GOOGLE_ADS_DEVELOPER_TOKEN\n' +
|
|
14
|
+
' GOOGLE_ADS_CLIENT_ID\n' +
|
|
15
|
+
' GOOGLE_ADS_CLIENT_SECRET\n\n' +
|
|
16
|
+
'方式 1: 创建 .env 文件(推荐)\n' +
|
|
17
|
+
' 复制 .env.example 为 .env 并填入实际值\n\n' +
|
|
18
|
+
'方式 2: 导出环境变量\n' +
|
|
19
|
+
' export GOOGLE_ADS_DEVELOPER_TOKEN=xxx\n' +
|
|
20
|
+
' export GOOGLE_ADS_CLIENT_ID=xxx\n' +
|
|
21
|
+
' export GOOGLE_ADS_CLIENT_SECRET=xxx\n\n' +
|
|
22
|
+
'详见: https://github.com/Optima-Chat/google-ads-cli#readme');
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
developerToken,
|
|
26
|
+
clientId,
|
|
27
|
+
clientSecret,
|
|
28
|
+
loginCustomerId: (process.env.GOOGLE_ADS_LOGIN_CUSTOMER_ID || process.env.GOOGLE_ADS_MANAGER_ACCOUNT_ID)?.replace(/-/g, ''),
|
|
29
|
+
defaultCustomerId: process.env.GOOGLE_ADS_CUSTOMER_ID,
|
|
30
|
+
outputFormat: process.env.GOOGLE_ADS_OUTPUT_FORMAT || 'table',
|
|
31
|
+
colorOutput: process.env.GOOGLE_ADS_COLOR_OUTPUT !== 'false',
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAE1D,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,4BAA4B;YAC5B,gCAAgC;YAChC,0BAA0B;YAC1B,gCAAgC;YAChC,wBAAwB;YACxB,qCAAqC;YACrC,gBAAgB;YAChB,2CAA2C;YAC3C,qCAAqC;YACrC,2CAA2C;YAC3C,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,cAAc;QACd,QAAQ;QACR,YAAY;QACZ,eAAe,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3H,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QACrD,YAAY,EAAG,OAAO,CAAC,GAAG,CAAC,wBAAgC,IAAI,OAAO;QACtE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,OAAO;KAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-id.d.ts","sourceRoot":"","sources":["../../src/utils/customer-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAqBtC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customer ID 获取工具
|
|
3
|
+
*/
|
|
4
|
+
import Conf from 'conf';
|
|
5
|
+
const config = new Conf({ projectName: 'google-ads-cli' });
|
|
6
|
+
/**
|
|
7
|
+
* 获取 Customer ID(从 CLI config 或环境变量)
|
|
8
|
+
* @returns Customer ID
|
|
9
|
+
* @throws 如果既没有配置也没有设置环境变量
|
|
10
|
+
*/
|
|
11
|
+
export function getCustomerId() {
|
|
12
|
+
// 1. 优先从 CLI config 读取(account create 保存的)
|
|
13
|
+
const configCustomerId = config.get('customerId');
|
|
14
|
+
if (configCustomerId) {
|
|
15
|
+
return configCustomerId;
|
|
16
|
+
}
|
|
17
|
+
// 2. 从环境变量读取(用于手动配置的情况)
|
|
18
|
+
const envCustomerId = process.env.GOOGLE_ADS_CUSTOMER_ID;
|
|
19
|
+
if (envCustomerId) {
|
|
20
|
+
return envCustomerId;
|
|
21
|
+
}
|
|
22
|
+
// 3. 都没有则报错
|
|
23
|
+
throw new Error('未找到 Google Ads 账号配置\n\n' +
|
|
24
|
+
'请先创建您的账号:\n' +
|
|
25
|
+
' google-ads account create --email <your-email> --name <your-name>\n\n' +
|
|
26
|
+
'或者在 .env 文件中手动配置:\n' +
|
|
27
|
+
' GOOGLE_ADS_CUSTOMER_ID=your-customer-id');
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=customer-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-id.js","sourceRoot":"","sources":["../../src/utils/customer-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,2CAA2C;IAC3C,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAuB,CAAC;IACxE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,wBAAwB;IACxB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACzD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,YAAY;IACZ,MAAM,IAAI,KAAK,CACb,yBAAyB;QACvB,aAAa;QACb,yEAAyE;QACzE,qBAAqB;QACrB,2CAA2C,CAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-updater.d.ts","sourceRoot":"","sources":["../../src/utils/env-updater.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA2C9D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .env 文件更新工具
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
/**
|
|
7
|
+
* 更新 .env 文件中的特定变量
|
|
8
|
+
*/
|
|
9
|
+
export function updateEnvFile(key, value) {
|
|
10
|
+
// .env 文件路径(假设在项目根目录)
|
|
11
|
+
const envPath = join(process.cwd(), '.env');
|
|
12
|
+
let envContent = '';
|
|
13
|
+
// 如果文件存在,读取现有内容
|
|
14
|
+
if (existsSync(envPath)) {
|
|
15
|
+
envContent = readFileSync(envPath, 'utf-8');
|
|
16
|
+
}
|
|
17
|
+
const lines = envContent.split('\n');
|
|
18
|
+
let found = false;
|
|
19
|
+
// 查找并更新目标行
|
|
20
|
+
for (let i = 0; i < lines.length; i++) {
|
|
21
|
+
const line = lines[i].trim();
|
|
22
|
+
// 跳过注释和空行
|
|
23
|
+
if (line.startsWith('#') || line === '') {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
// 检查是否是目标变量
|
|
27
|
+
if (line.startsWith(`${key}=`) || line.startsWith(`# ${key}=`)) {
|
|
28
|
+
lines[i] = `${key}=${value}`;
|
|
29
|
+
found = true;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// 如果没找到,追加到文件末尾
|
|
34
|
+
if (!found) {
|
|
35
|
+
// 确保最后有换行
|
|
36
|
+
if (envContent && !envContent.endsWith('\n')) {
|
|
37
|
+
lines.push('');
|
|
38
|
+
}
|
|
39
|
+
lines.push(`# OAuth2 Refresh Token(通过 google-ads auth login 自动获取)`);
|
|
40
|
+
lines.push(`${key}=${value}`);
|
|
41
|
+
}
|
|
42
|
+
// 写回文件
|
|
43
|
+
writeFileSync(envPath, lines.join('\n'), 'utf-8');
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=env-updater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-updater.js","sourceRoot":"","sources":["../../src/utils/env-updater.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,KAAa;IACtD,sBAAsB;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,gBAAgB;IAChB,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,WAAW;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7B,UAAU;QACV,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,YAAY;QACZ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,UAAU;QACV,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;IACP,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 错误处理工具
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 自定义错误类
|
|
6
|
+
*/
|
|
7
|
+
export declare class GoogleAdsError extends Error {
|
|
8
|
+
code?: string | undefined;
|
|
9
|
+
details?: any | undefined;
|
|
10
|
+
constructor(message: string, code?: string | undefined, details?: any | undefined);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 配置错误
|
|
14
|
+
*/
|
|
15
|
+
export declare class ConfigError extends GoogleAdsError {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 认证错误
|
|
20
|
+
*/
|
|
21
|
+
export declare class AuthError extends GoogleAdsError {
|
|
22
|
+
constructor(message: string);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 处理并显示错误
|
|
26
|
+
*/
|
|
27
|
+
export declare function handleError(err: any): void;
|
|
28
|
+
/**
|
|
29
|
+
* 格式化友好的错误信息
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatError(err: any): string;
|
|
32
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAG9B,IAAI,CAAC,EAAE,MAAM;IACb,OAAO,CAAC,EAAE,GAAG;gBAFpB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,GAAG,YAAA;CAKvB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,cAAc;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,cAAc;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAc1C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAU5C"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 错误处理工具
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { error as logError } from './logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* 自定义错误类
|
|
8
|
+
*/
|
|
9
|
+
export class GoogleAdsError extends Error {
|
|
10
|
+
code;
|
|
11
|
+
details;
|
|
12
|
+
constructor(message, code, details) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.details = details;
|
|
16
|
+
this.name = 'GoogleAdsError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 配置错误
|
|
21
|
+
*/
|
|
22
|
+
export class ConfigError extends GoogleAdsError {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message, 'CONFIG_ERROR');
|
|
25
|
+
this.name = 'ConfigError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 认证错误
|
|
30
|
+
*/
|
|
31
|
+
export class AuthError extends GoogleAdsError {
|
|
32
|
+
constructor(message) {
|
|
33
|
+
super(message, 'AUTH_ERROR');
|
|
34
|
+
this.name = 'AuthError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 处理并显示错误
|
|
39
|
+
*/
|
|
40
|
+
export function handleError(err) {
|
|
41
|
+
if (err instanceof GoogleAdsError) {
|
|
42
|
+
logError(err.message);
|
|
43
|
+
if (err.details) {
|
|
44
|
+
console.error(chalk.gray('详情:'), err.details);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (err.message) {
|
|
48
|
+
logError(err.message);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
logError('未知错误');
|
|
52
|
+
console.error(err);
|
|
53
|
+
}
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 格式化友好的错误信息
|
|
58
|
+
*/
|
|
59
|
+
export function formatError(err) {
|
|
60
|
+
if (err instanceof GoogleAdsError) {
|
|
61
|
+
return chalk.red(`✗ ${err.message}`);
|
|
62
|
+
}
|
|
63
|
+
if (err.message) {
|
|
64
|
+
return chalk.red(`✗ ${err.message}`);
|
|
65
|
+
}
|
|
66
|
+
return chalk.red('✗ 未知错误');
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG9B;IACA;IAHT,YACE,OAAe,EACR,IAAa,EACb,OAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAS;QACb,YAAO,GAAP,OAAO,CAAM;QAGpB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,cAAc;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,cAAc;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|