gate-wallet-cli 1.0.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/bin/gate-wallet.js +2 -0
- package/dist/cli/auth.cmd.d.ts +5 -0
- package/dist/cli/auth.cmd.d.ts.map +1 -0
- package/dist/cli/auth.cmd.js +1152 -0
- package/dist/cli/auth.cmd.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +157 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/openapi.cmd.d.ts +8 -0
- package/dist/cli/openapi.cmd.d.ts.map +1 -0
- package/dist/cli/openapi.cmd.js +1243 -0
- package/dist/cli/openapi.cmd.js.map +1 -0
- package/dist/core/mcp-client.d.ts +2110 -0
- package/dist/core/mcp-client.d.ts.map +1 -0
- package/dist/core/mcp-client.js +187 -0
- package/dist/core/mcp-client.js.map +1 -0
- package/dist/core/oauth.d.ts +70 -0
- package/dist/core/oauth.d.ts.map +1 -0
- package/dist/core/oauth.js +247 -0
- package/dist/core/oauth.js.map +1 -0
- package/dist/core/openapi-client.d.ts +148 -0
- package/dist/core/openapi-client.d.ts.map +1 -0
- package/dist/core/openapi-client.js +133 -0
- package/dist/core/openapi-client.js.map +1 -0
- package/dist/core/openapi-config.d.ts +38 -0
- package/dist/core/openapi-config.d.ts.map +1 -0
- package/dist/core/openapi-config.js +86 -0
- package/dist/core/openapi-config.js.map +1 -0
- package/dist/core/token-store.d.ts +17 -0
- package/dist/core/token-store.d.ts.map +1 -0
- package/dist/core/token-store.js +43 -0
- package/dist/core/token-store.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate DEX OpenAPI Client
|
|
3
|
+
* 封装 HMAC-SHA256 签名 + 统一端点调用
|
|
4
|
+
* 支持 trade.swap.* / base.token.* / market.* 三类 Action
|
|
5
|
+
*/
|
|
6
|
+
import { type OpenApiConfig } from "./openapi-config.js";
|
|
7
|
+
export interface OpenApiResponse<T = unknown> {
|
|
8
|
+
code: number;
|
|
9
|
+
message?: string;
|
|
10
|
+
msg?: string;
|
|
11
|
+
data: T;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Gate DEX OpenAPI 客户端
|
|
15
|
+
*/
|
|
16
|
+
export declare class GateOpenApiClient {
|
|
17
|
+
private config;
|
|
18
|
+
constructor(config: OpenApiConfig);
|
|
19
|
+
private credForAction;
|
|
20
|
+
/**
|
|
21
|
+
* Generic API call — automatically selects the correct AK/SK based on action prefix.
|
|
22
|
+
* trade.swap.* → trade credentials, base.token.* / market.* → query credentials.
|
|
23
|
+
*/
|
|
24
|
+
call<T = unknown>(action: string, params?: Record<string, unknown>): Promise<OpenApiResponse<T>>;
|
|
25
|
+
/** 查询支持的链列表 */
|
|
26
|
+
swapChains(): Promise<OpenApiResponse<{
|
|
27
|
+
chain_id: string;
|
|
28
|
+
chain: string;
|
|
29
|
+
chain_name: string;
|
|
30
|
+
native_currency: string;
|
|
31
|
+
native_decimals: number;
|
|
32
|
+
}[]>>;
|
|
33
|
+
/** 查询 Gas 价格 */
|
|
34
|
+
swapGasPrice(chainId: number): Promise<OpenApiResponse<unknown>>;
|
|
35
|
+
/** 获取 Swap 报价 */
|
|
36
|
+
swapQuote(params: {
|
|
37
|
+
chain_id: number;
|
|
38
|
+
token_in: string;
|
|
39
|
+
token_out: string;
|
|
40
|
+
amount_in: string;
|
|
41
|
+
slippage: number;
|
|
42
|
+
slippage_type: number;
|
|
43
|
+
user_wallet: string;
|
|
44
|
+
fee_recipient?: string;
|
|
45
|
+
fee_rate?: string;
|
|
46
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
47
|
+
/** 获取 ERC20 approve calldata */
|
|
48
|
+
swapApproveTransaction(params: {
|
|
49
|
+
user_wallet: string;
|
|
50
|
+
approve_amount: string;
|
|
51
|
+
quote_id: string;
|
|
52
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
53
|
+
/** 构建 Swap 未签名交易 */
|
|
54
|
+
swapBuild(params: {
|
|
55
|
+
chain_id: number;
|
|
56
|
+
amount_in: string;
|
|
57
|
+
token_in: string;
|
|
58
|
+
token_out: string;
|
|
59
|
+
slippage: string;
|
|
60
|
+
slippage_type: string;
|
|
61
|
+
user_wallet: string;
|
|
62
|
+
receiver: string;
|
|
63
|
+
quote_id?: string;
|
|
64
|
+
sol_tip_amount?: string;
|
|
65
|
+
sol_priority_fee?: string;
|
|
66
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
67
|
+
/** 提交已签名交易 */
|
|
68
|
+
swapSubmit(params: {
|
|
69
|
+
order_id: string;
|
|
70
|
+
signed_tx_string?: string;
|
|
71
|
+
tx_hash?: string;
|
|
72
|
+
signed_approve_tx_string?: string;
|
|
73
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
74
|
+
/** 查询订单状态 */
|
|
75
|
+
swapStatus(params: {
|
|
76
|
+
chain_id: number;
|
|
77
|
+
order_id: string;
|
|
78
|
+
tx_hash: string;
|
|
79
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
80
|
+
/** 查询历史订单 */
|
|
81
|
+
swapHistory(params: {
|
|
82
|
+
user_wallet: string[];
|
|
83
|
+
page_number?: number;
|
|
84
|
+
page_size?: number;
|
|
85
|
+
chain_id?: number;
|
|
86
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
87
|
+
/** 查询可 Swap 代币列表 */
|
|
88
|
+
tokenSwapList(params: {
|
|
89
|
+
chain_id?: string;
|
|
90
|
+
tag?: string;
|
|
91
|
+
wallet?: string;
|
|
92
|
+
search?: string;
|
|
93
|
+
search_auth?: string;
|
|
94
|
+
ignore_bridge?: string;
|
|
95
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
96
|
+
/** 代币排行榜 */
|
|
97
|
+
tokenRanking(params: {
|
|
98
|
+
chain_id?: {
|
|
99
|
+
eq?: string;
|
|
100
|
+
in?: string[];
|
|
101
|
+
};
|
|
102
|
+
sort: Array<{
|
|
103
|
+
field: string;
|
|
104
|
+
order: string;
|
|
105
|
+
}>;
|
|
106
|
+
limit: number;
|
|
107
|
+
cursor?: string;
|
|
108
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
109
|
+
/** 按创建时间筛选新币 */
|
|
110
|
+
tokenRangeByCreatedAt(params: {
|
|
111
|
+
start: string;
|
|
112
|
+
end: string;
|
|
113
|
+
chain_id?: string;
|
|
114
|
+
limit?: string;
|
|
115
|
+
cursor?: string;
|
|
116
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
117
|
+
/** 代币安全审计 */
|
|
118
|
+
tokenRiskInfos(params: {
|
|
119
|
+
chain_id: string;
|
|
120
|
+
address: string;
|
|
121
|
+
lan?: string;
|
|
122
|
+
ignore?: string;
|
|
123
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
124
|
+
/** 跨链桥代币列表 */
|
|
125
|
+
tokenBridgeList(params: {
|
|
126
|
+
source_chain_id: string;
|
|
127
|
+
source_address: string;
|
|
128
|
+
chain_id: string;
|
|
129
|
+
search?: string;
|
|
130
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
131
|
+
/** 交易量统计 */
|
|
132
|
+
marketVolumeStats(params: {
|
|
133
|
+
chain_id: number;
|
|
134
|
+
token_address: string;
|
|
135
|
+
pair_address?: string;
|
|
136
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
137
|
+
/** 流动性池事件列表 */
|
|
138
|
+
marketLiquidityList(params: {
|
|
139
|
+
chain_id: number;
|
|
140
|
+
token_address: string;
|
|
141
|
+
pair_address?: string;
|
|
142
|
+
page_index?: number;
|
|
143
|
+
page_size?: number;
|
|
144
|
+
}): Promise<OpenApiResponse<unknown>>;
|
|
145
|
+
}
|
|
146
|
+
export declare function getOpenApiClient(): GateOpenApiClient | null;
|
|
147
|
+
export declare function resetOpenApiClient(): void;
|
|
148
|
+
//# sourceMappingURL=openapi-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-client.d.ts","sourceRoot":"","sources":["../../src/core/openapi-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate DEX OpenAPI Client
|
|
3
|
+
* 封装 HMAC-SHA256 签名 + 统一端点调用
|
|
4
|
+
* 支持 trade.swap.* / base.token.* / market.* 三类 Action
|
|
5
|
+
*/
|
|
6
|
+
import { createHmac, randomUUID } from "node:crypto";
|
|
7
|
+
import { loadOpenApiConfig, } from "./openapi-config.js";
|
|
8
|
+
const DEFAULT_ENDPOINT = "https://openapi.gateweb3.cc/api/v1/dex";
|
|
9
|
+
const SIGN_PATH = "/api/v1/dex";
|
|
10
|
+
/**
|
|
11
|
+
* Gate DEX OpenAPI 客户端
|
|
12
|
+
*/
|
|
13
|
+
export class GateOpenApiClient {
|
|
14
|
+
config;
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.config = config;
|
|
17
|
+
}
|
|
18
|
+
credForAction(action) {
|
|
19
|
+
if (action.startsWith("trade.swap."))
|
|
20
|
+
return this.config.trade;
|
|
21
|
+
return this.config.query;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generic API call — automatically selects the correct AK/SK based on action prefix.
|
|
25
|
+
* trade.swap.* → trade credentials, base.token.* / market.* → query credentials.
|
|
26
|
+
*/
|
|
27
|
+
async call(action, params = {}) {
|
|
28
|
+
const cred = this.credForAction(action);
|
|
29
|
+
const endpoint = cred.endpoint ?? DEFAULT_ENDPOINT;
|
|
30
|
+
const signPath = new URL(endpoint).pathname;
|
|
31
|
+
const compactBody = JSON.stringify({ action, params });
|
|
32
|
+
const ts = String(Date.now());
|
|
33
|
+
const prehash = ts + signPath + compactBody;
|
|
34
|
+
const signature = createHmac("sha256", cred.secret_key)
|
|
35
|
+
.update(prehash)
|
|
36
|
+
.digest("base64");
|
|
37
|
+
const headers = {
|
|
38
|
+
"Content-Type": "application/json",
|
|
39
|
+
"X-API-Key": cred.api_key,
|
|
40
|
+
"X-Timestamp": ts,
|
|
41
|
+
"X-Signature": signature,
|
|
42
|
+
"X-Request-Id": randomUUID(),
|
|
43
|
+
};
|
|
44
|
+
const res = await fetch(endpoint, {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers,
|
|
47
|
+
body: compactBody,
|
|
48
|
+
});
|
|
49
|
+
if (!res.ok) {
|
|
50
|
+
const text = await res.text();
|
|
51
|
+
throw new Error(`OpenAPI HTTP ${res.status}: ${text}`);
|
|
52
|
+
}
|
|
53
|
+
return (await res.json());
|
|
54
|
+
}
|
|
55
|
+
// ─── trade.swap.* ─────────────────────────────────────
|
|
56
|
+
/** 查询支持的链列表 */
|
|
57
|
+
async swapChains() {
|
|
58
|
+
return this.call("trade.swap.chain", {});
|
|
59
|
+
}
|
|
60
|
+
/** 查询 Gas 价格 */
|
|
61
|
+
async swapGasPrice(chainId) {
|
|
62
|
+
return this.call("trade.swap.gasprice", { chain_id: chainId });
|
|
63
|
+
}
|
|
64
|
+
/** 获取 Swap 报价 */
|
|
65
|
+
async swapQuote(params) {
|
|
66
|
+
return this.call("trade.swap.quote", params);
|
|
67
|
+
}
|
|
68
|
+
/** 获取 ERC20 approve calldata */
|
|
69
|
+
async swapApproveTransaction(params) {
|
|
70
|
+
return this.call("trade.swap.approve_transaction", params);
|
|
71
|
+
}
|
|
72
|
+
/** 构建 Swap 未签名交易 */
|
|
73
|
+
async swapBuild(params) {
|
|
74
|
+
return this.call("trade.swap.build", params);
|
|
75
|
+
}
|
|
76
|
+
/** 提交已签名交易 */
|
|
77
|
+
async swapSubmit(params) {
|
|
78
|
+
return this.call("trade.swap.submit", params);
|
|
79
|
+
}
|
|
80
|
+
/** 查询订单状态 */
|
|
81
|
+
async swapStatus(params) {
|
|
82
|
+
return this.call("trade.swap.status", params);
|
|
83
|
+
}
|
|
84
|
+
/** 查询历史订单 */
|
|
85
|
+
async swapHistory(params) {
|
|
86
|
+
return this.call("trade.swap.history", params);
|
|
87
|
+
}
|
|
88
|
+
// ─── base.token.* ─────────────────────────────────────
|
|
89
|
+
/** 查询可 Swap 代币列表 */
|
|
90
|
+
async tokenSwapList(params) {
|
|
91
|
+
return this.call("base.token.swap_list", params);
|
|
92
|
+
}
|
|
93
|
+
/** 代币排行榜 */
|
|
94
|
+
async tokenRanking(params) {
|
|
95
|
+
return this.call("base.token.ranking", params);
|
|
96
|
+
}
|
|
97
|
+
/** 按创建时间筛选新币 */
|
|
98
|
+
async tokenRangeByCreatedAt(params) {
|
|
99
|
+
return this.call("base.token.range_by_created_at", params);
|
|
100
|
+
}
|
|
101
|
+
/** 代币安全审计 */
|
|
102
|
+
async tokenRiskInfos(params) {
|
|
103
|
+
return this.call("base.token.risk_infos", params);
|
|
104
|
+
}
|
|
105
|
+
/** 跨链桥代币列表 */
|
|
106
|
+
async tokenBridgeList(params) {
|
|
107
|
+
return this.call("base.token.bridge_list", params);
|
|
108
|
+
}
|
|
109
|
+
// ─── market.* ─────────────────────────────────────────
|
|
110
|
+
/** 交易量统计 */
|
|
111
|
+
async marketVolumeStats(params) {
|
|
112
|
+
return this.call("market.volume_stats", params);
|
|
113
|
+
}
|
|
114
|
+
/** 流动性池事件列表 */
|
|
115
|
+
async marketLiquidityList(params) {
|
|
116
|
+
return this.call("market.pair.liquidity.list", params);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// ─── 单例 ─────────────────────────────────────────────
|
|
120
|
+
let instance = null;
|
|
121
|
+
export function getOpenApiClient() {
|
|
122
|
+
if (!instance) {
|
|
123
|
+
const config = loadOpenApiConfig();
|
|
124
|
+
if (!config)
|
|
125
|
+
return null;
|
|
126
|
+
instance = new GateOpenApiClient(config);
|
|
127
|
+
}
|
|
128
|
+
return instance;
|
|
129
|
+
}
|
|
130
|
+
export function resetOpenApiClient() {
|
|
131
|
+
instance = null;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=openapi-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-client.js","sourceRoot":"","sources":["../../src/core/openapi-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI 配置管理 - 保存/读取 AK/SK 到 ~/.gate-wallet/openapi.json
|
|
3
|
+
* 与 auth.json 同目录,独立文件
|
|
4
|
+
*/
|
|
5
|
+
export interface OpenApiCredential {
|
|
6
|
+
api_key: string;
|
|
7
|
+
secret_key: string;
|
|
8
|
+
endpoint?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface OpenApiConfig {
|
|
11
|
+
trade: OpenApiCredential;
|
|
12
|
+
query: OpenApiCredential;
|
|
13
|
+
default_slippage?: number;
|
|
14
|
+
default_slippage_type?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 加载 OpenAPI 配置。
|
|
18
|
+
* 优先读取 ~/.gate-dex-openapi/config.json(扁平格式),
|
|
19
|
+
* 其次读取 ~/.gate-wallet/openapi.json(双通道格式)。
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadOpenApiConfig(): OpenApiConfig | null;
|
|
22
|
+
/**
|
|
23
|
+
* 保存 OpenAPI 配置到磁盘
|
|
24
|
+
*/
|
|
25
|
+
export declare function saveOpenApiConfig(config: OpenApiConfig): void;
|
|
26
|
+
/**
|
|
27
|
+
* 判断 OpenAPI 配置文件是否存在且有效
|
|
28
|
+
*/
|
|
29
|
+
export declare function hasOpenApiConfig(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* 获取配置文件路径
|
|
32
|
+
*/
|
|
33
|
+
export declare function getOpenApiConfigPath(): string;
|
|
34
|
+
/**
|
|
35
|
+
* 脱敏展示 Secret Key(仅显示末 4 位)
|
|
36
|
+
*/
|
|
37
|
+
export declare function maskSecretKey(sk: string): string;
|
|
38
|
+
//# sourceMappingURL=openapi-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-config.d.ts","sourceRoot":"","sources":["../../src/core/openapi-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,iBAAiB,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAQD;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CA+BxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAQ7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAGhD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI 配置管理 - 保存/读取 AK/SK 到 ~/.gate-wallet/openapi.json
|
|
3
|
+
* 与 auth.json 同目录,独立文件
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, chmodSync, } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
const CONFIG_DIR = join(homedir(), ".gate-wallet");
|
|
9
|
+
const CONFIG_FILE = join(CONFIG_DIR, "openapi.json");
|
|
10
|
+
const DEX_CONFIG_DIR = join(homedir(), ".gate-dex-openapi");
|
|
11
|
+
const DEX_CONFIG_FILE = join(DEX_CONFIG_DIR, "config.json");
|
|
12
|
+
/**
|
|
13
|
+
* 加载 OpenAPI 配置。
|
|
14
|
+
* 优先读取 ~/.gate-dex-openapi/config.json(扁平格式),
|
|
15
|
+
* 其次读取 ~/.gate-wallet/openapi.json(双通道格式)。
|
|
16
|
+
*/
|
|
17
|
+
export function loadOpenApiConfig() {
|
|
18
|
+
// Try new flat config first
|
|
19
|
+
if (existsSync(DEX_CONFIG_FILE)) {
|
|
20
|
+
try {
|
|
21
|
+
const raw = JSON.parse(readFileSync(DEX_CONFIG_FILE, "utf-8"));
|
|
22
|
+
if (raw?.api_key && raw?.secret_key) {
|
|
23
|
+
const cred = {
|
|
24
|
+
api_key: raw.api_key,
|
|
25
|
+
secret_key: raw.secret_key,
|
|
26
|
+
endpoint: raw.endpoint,
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
trade: cred,
|
|
30
|
+
query: cred,
|
|
31
|
+
default_slippage: raw.default_slippage,
|
|
32
|
+
default_slippage_type: raw.default_slippage_type,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// fall through
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Fallback to legacy dual-channel config
|
|
41
|
+
if (!existsSync(CONFIG_FILE))
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
const raw = JSON.parse(readFileSync(CONFIG_FILE, "utf-8"));
|
|
45
|
+
if (!raw?.trade?.api_key || !raw?.query?.api_key)
|
|
46
|
+
return null;
|
|
47
|
+
return raw;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 保存 OpenAPI 配置到磁盘
|
|
55
|
+
*/
|
|
56
|
+
export function saveOpenApiConfig(config) {
|
|
57
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
58
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
59
|
+
try {
|
|
60
|
+
chmodSync(CONFIG_FILE, 0o600);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// ignore
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 判断 OpenAPI 配置文件是否存在且有效
|
|
68
|
+
*/
|
|
69
|
+
export function hasOpenApiConfig() {
|
|
70
|
+
return loadOpenApiConfig() !== null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 获取配置文件路径
|
|
74
|
+
*/
|
|
75
|
+
export function getOpenApiConfigPath() {
|
|
76
|
+
return CONFIG_FILE;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 脱敏展示 Secret Key(仅显示末 4 位)
|
|
80
|
+
*/
|
|
81
|
+
export function maskSecretKey(sk) {
|
|
82
|
+
if (sk.length <= 4)
|
|
83
|
+
return "sk_****";
|
|
84
|
+
return `sk_****${sk.slice(-4)}`;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=openapi-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-config.js","sourceRoot":"","sources":["../../src/core/openapi-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAelC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACnD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAErD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,4BAA4B;IAC5B,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,IAAI,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAsB;oBAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;iBACvB,CAAC;gBACF,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,IAAI;oBACX,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;oBACtC,qBAAqB,EAAE,GAAG,CAAC,qBAAqB;iBACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IACD,yCAAyC;IACzC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO;YAAE,OAAO,IAAI,CAAC;QAC9D,OAAO,GAAoB,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,iBAAiB,EAAE,KAAK,IAAI,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token 持久化 - 保存/读取 mcp_token 到 ~/.gate-wallet/auth.json
|
|
3
|
+
* 避免每次 CLI 启动都需要重新登录
|
|
4
|
+
*/
|
|
5
|
+
export interface StoredAuth {
|
|
6
|
+
mcp_token: string;
|
|
7
|
+
provider: "gate" | "google";
|
|
8
|
+
user_id?: string | undefined;
|
|
9
|
+
expires_at?: number | undefined;
|
|
10
|
+
env: string;
|
|
11
|
+
server_url: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function saveAuth(auth: StoredAuth): void;
|
|
14
|
+
export declare function loadAuth(env?: string): StoredAuth | null;
|
|
15
|
+
export declare function clearAuth(): void;
|
|
16
|
+
export declare function getAuthFilePath(): string;
|
|
17
|
+
//# sourceMappingURL=token-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../src/core/token-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAG/C;AAED,wBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAkBxD;AAED,wBAAgB,SAAS,IAAI,IAAI,CAMhC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token 持久化 - 保存/读取 mcp_token 到 ~/.gate-wallet/auth.json
|
|
3
|
+
* 避免每次 CLI 启动都需要重新登录
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, mkdirSync, unlinkSync, existsSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
const AUTH_DIR = join(homedir(), ".gate-wallet");
|
|
9
|
+
const AUTH_FILE = join(AUTH_DIR, "auth.json");
|
|
10
|
+
export function saveAuth(auth) {
|
|
11
|
+
mkdirSync(AUTH_DIR, { recursive: true });
|
|
12
|
+
writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), { mode: 0o600 });
|
|
13
|
+
}
|
|
14
|
+
export function loadAuth(env) {
|
|
15
|
+
try {
|
|
16
|
+
if (!existsSync(AUTH_FILE))
|
|
17
|
+
return null;
|
|
18
|
+
const data = JSON.parse(readFileSync(AUTH_FILE, "utf-8"));
|
|
19
|
+
if (data.expires_at && Date.now() >= data.expires_at) {
|
|
20
|
+
clearAuth();
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (env && data.env !== env) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function clearAuth() {
|
|
33
|
+
try {
|
|
34
|
+
unlinkSync(AUTH_FILE);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// ignore
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function getAuthFilePath() {
|
|
41
|
+
return AUTH_FILE;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/core/token-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWlC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACjD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAE9C,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAe,CAAC;QAExE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD,SAAS,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,UAAU,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gate-wallet-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Gate Wallet CLI - MCP Custodial Wallet Management Tool",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/cli/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"gate-wallet": "./bin/gate-wallet.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"bin"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"cli": "tsx src/cli/index.ts",
|
|
16
|
+
"build": "tsc && chmod +x bin/gate-wallet.js",
|
|
17
|
+
"dev": "tsx --watch src/cli/index.ts",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"gate",
|
|
22
|
+
"wallet",
|
|
23
|
+
"cli",
|
|
24
|
+
"mcp",
|
|
25
|
+
"web3"
|
|
26
|
+
],
|
|
27
|
+
"author": "Gate",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/gate/gate-wallet-cli.git",
|
|
32
|
+
"directory": "cli"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/gate/gate-wallet-cli#readme",
|
|
35
|
+
"packageManager": "pnpm@10.30.3",
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
41
|
+
"chalk": "^5.6.2",
|
|
42
|
+
"commander": "^14.0.3",
|
|
43
|
+
"open": "^11.0.0",
|
|
44
|
+
"ora": "^9.3.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^25.3.5",
|
|
48
|
+
"tsx": "^4.21.0",
|
|
49
|
+
"typescript": "^5.9.3"
|
|
50
|
+
}
|
|
51
|
+
}
|