@123456btc/123456btc-cli 1.0.3 → 1.0.5

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 (58) hide show
  1. package/dist/api/auth.js +2 -2
  2. package/dist/api/auth.js.map +1 -1
  3. package/dist/api/client.d.ts +10 -6
  4. package/dist/api/client.d.ts.map +1 -1
  5. package/dist/api/client.js +62 -19
  6. package/dist/api/client.js.map +1 -1
  7. package/dist/api/client.test.js +24 -16
  8. package/dist/api/client.test.js.map +1 -1
  9. package/dist/api/token-manager.d.ts.map +1 -1
  10. package/dist/api/token-manager.js +4 -0
  11. package/dist/api/token-manager.js.map +1 -1
  12. package/dist/cli.js +17 -1
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands/auth.d.ts.map +1 -1
  15. package/dist/commands/auth.js +49 -80
  16. package/dist/commands/auth.js.map +1 -1
  17. package/dist/commands/gas.d.ts.map +1 -1
  18. package/dist/commands/gas.js +3 -2
  19. package/dist/commands/gas.js.map +1 -1
  20. package/dist/commands/health.d.ts.map +1 -1
  21. package/dist/commands/health.js +5 -3
  22. package/dist/commands/health.js.map +1 -1
  23. package/dist/commands/provider.d.ts.map +1 -1
  24. package/dist/commands/provider.js +17 -20
  25. package/dist/commands/provider.js.map +1 -1
  26. package/dist/commands/signals.d.ts.map +1 -1
  27. package/dist/commands/signals.js +3 -2
  28. package/dist/commands/signals.js.map +1 -1
  29. package/dist/commands/strategy.d.ts.map +1 -1
  30. package/dist/commands/strategy.js +10 -2
  31. package/dist/commands/strategy.js.map +1 -1
  32. package/dist/commands/tier.d.ts.map +1 -1
  33. package/dist/commands/tier.js +3 -2
  34. package/dist/commands/tier.js.map +1 -1
  35. package/dist/commands/wallet.d.ts.map +1 -1
  36. package/dist/commands/wallet.js +3 -2
  37. package/dist/commands/wallet.js.map +1 -1
  38. package/dist/config.d.ts +12 -4
  39. package/dist/config.d.ts.map +1 -1
  40. package/dist/config.js +28 -56
  41. package/dist/config.js.map +1 -1
  42. package/dist/index.d.ts +0 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +1 -3
  45. package/dist/index.js.map +1 -1
  46. package/dist/session/store.d.ts +25 -0
  47. package/dist/session/store.d.ts.map +1 -0
  48. package/dist/session/store.js +108 -0
  49. package/dist/session/store.js.map +1 -0
  50. package/dist/session/store.test.d.ts +2 -0
  51. package/dist/session/store.test.d.ts.map +1 -0
  52. package/dist/session/store.test.js +118 -0
  53. package/dist/session/store.test.js.map +1 -0
  54. package/dist/utils/auth.d.ts +2 -5
  55. package/dist/utils/auth.d.ts.map +1 -1
  56. package/dist/utils/auth.js +5 -5
  57. package/dist/utils/auth.js.map +1 -1
  58. package/package.json +1 -1
package/dist/api/auth.js CHANGED
@@ -10,7 +10,7 @@ class AuthApi {
10
10
  * Verify API key and get identity tier
11
11
  */
12
12
  async verifyKey() {
13
- return this.client.get('/v1/auth/verify');
13
+ return this.client.get('/auth/verify');
14
14
  }
15
15
  /**
16
16
  * Refresh session token
@@ -22,7 +22,7 @@ class AuthApi {
22
22
  * Get current user info
23
23
  */
24
24
  async userInfo() {
25
- return this.client.get('/v1/auth/user');
25
+ return this.client.get('/auth/user');
26
26
  }
27
27
  }
28
28
  exports.AuthApi = AuthApi;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":";;;AAGA,MAAa,OAAO;IACV,MAAM,CAAY;IAE1B,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAe,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QAMZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAKnB,eAAe,CAAC,CAAC;IACtB,CAAC;CACF;AAvCD,0BAuCC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":";;;AAGA,MAAa,OAAO;IACV,MAAM,CAAY;IAE1B,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAe,cAAc,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QAMZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAKnB,YAAY,CAAC,CAAC;IACnB,CAAC;CACF;AAvCD,0BAuCC"}
@@ -1,17 +1,21 @@
1
1
  import { AxiosRequestConfig } from 'axios';
2
2
  import { ApiResponse } from '../types/api';
3
- import { TokenManager } from './token-manager';
3
+ import { SessionStore } from '../session/store';
4
4
  export declare class ApiClient {
5
5
  private client;
6
- private baseUrl;
7
- private apiKey;
8
- private tokenManager;
9
- constructor(baseUrl: string, apiKey: string);
6
+ private store;
7
+ constructor(store: SessionStore);
8
+ /**
9
+ * Resolve the auth token to send with each request.
10
+ * Priority:
11
+ * 1. If apiKey present → exchange for access token (cached in session.json)
12
+ * 2. If jwt present → use JWT directly
13
+ */
14
+ private resolveAuthToken;
10
15
  get<T>(endpoint: string, params?: Record<string, unknown>): Promise<ApiResponse<T>>;
11
16
  post<T>(endpoint: string, data?: unknown, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
12
17
  put<T>(endpoint: string, data?: unknown): Promise<ApiResponse<T>>;
13
18
  patch<T>(endpoint: string, data?: unknown): Promise<ApiResponse<T>>;
14
19
  delete<T>(endpoint: string): Promise<ApiResponse<T>>;
15
- getTokenManager(): TokenManager;
16
20
  }
17
21
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,WAAW,EAAY,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAe;gBAEvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAyErC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgBnF,IAAI,CAAC,CAAC,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgBpB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgBjE,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgBnE,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgB1D,eAAe,IAAI,YAAY;CAGhC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAe;gBAEhB,KAAK,EAAE,YAAY;IAsF/B;;;;;OAKG;YACW,gBAAgB;IA4CxB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgBnF,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgB/F,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgBjE,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgBnE,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAe3D"}
@@ -5,16 +5,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ApiClient = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
- const token_manager_1 = require("./token-manager");
9
8
  class ApiClient {
10
9
  client;
11
- baseUrl;
12
- apiKey;
13
- tokenManager;
14
- constructor(baseUrl, apiKey) {
15
- this.baseUrl = baseUrl;
16
- this.apiKey = apiKey;
17
- this.tokenManager = new token_manager_1.TokenManager(baseUrl, apiKey);
10
+ store;
11
+ constructor(store) {
12
+ this.store = store;
13
+ const creds = store.getCredentials();
14
+ if (!creds) {
15
+ throw new Error('No credentials found. Run "123456btc-cli auth login" or "123456btc-cli auth wallet-login"');
16
+ }
17
+ // Normalize baseUrl: ensure /api suffix
18
+ let baseUrl = creds.baseUrl;
19
+ if (baseUrl.endsWith('/ext-api')) {
20
+ baseUrl = baseUrl.slice(0, -8);
21
+ }
22
+ if (baseUrl.endsWith('/')) {
23
+ baseUrl = baseUrl.slice(0, -1);
24
+ }
25
+ if (!baseUrl.endsWith('/api')) {
26
+ baseUrl = baseUrl + '/api';
27
+ }
18
28
  this.client = axios_1.default.create({
19
29
  baseURL: baseUrl,
20
30
  timeout: 30000,
@@ -22,26 +32,24 @@ class ApiClient {
22
32
  'Content-Type': 'application/json',
23
33
  },
24
34
  });
25
- // Request interceptor: inject access token
35
+ // Request interceptor: inject auth token
26
36
  this.client.interceptors.request.use(async (config) => {
27
- const token = await this.tokenManager.getAccessToken();
37
+ const token = await this.resolveAuthToken();
28
38
  config.headers['Authorization'] = `Bearer ${token}`;
29
39
  return config;
30
40
  });
31
- // Response interceptor: handle 401 by refreshing token and retrying once
41
+ // Response interceptor: handle 401 by clearing session and retrying once
32
42
  this.client.interceptors.response.use((response) => response, async (error) => {
33
43
  const originalRequest = error.config;
34
- // If 401 and we haven't retried yet
35
44
  if (error.response?.status === 401 && originalRequest && !originalRequest._retry) {
36
45
  originalRequest._retry = true;
37
46
  try {
38
- // Clear session and get fresh token
39
- this.tokenManager.clearSession();
40
- const token = await this.tokenManager.getAccessToken();
47
+ this.store.clearAccessToken();
48
+ const token = await this.resolveAuthToken();
41
49
  originalRequest.headers['Authorization'] = `Bearer ${token}`;
42
50
  return this.client(originalRequest);
43
51
  }
44
- catch (refreshError) {
52
+ catch {
45
53
  return {
46
54
  data: {
47
55
  success: false,
@@ -76,6 +84,44 @@ class ApiClient {
76
84
  };
77
85
  });
78
86
  }
87
+ /**
88
+ * Resolve the auth token to send with each request.
89
+ * Priority:
90
+ * 1. If apiKey present → exchange for access token (cached in session.json)
91
+ * 2. If jwt present → use JWT directly
92
+ */
93
+ async resolveAuthToken() {
94
+ const creds = this.store.getCredentials();
95
+ if (!creds) {
96
+ throw new Error('Not authenticated');
97
+ }
98
+ // API Key mode: exchange for short-lived access token
99
+ if (creds.apiKey) {
100
+ const cached = this.store.getAccessToken();
101
+ if (cached && cached.expiresAt > Date.now() + 5 * 60 * 1000) {
102
+ return cached.token;
103
+ }
104
+ const res = await axios_1.default.post(`${this.client.defaults.baseURL}/v1/auth/token`, {}, {
105
+ headers: { Authorization: `Bearer ${creds.apiKey}` },
106
+ timeout: 15000,
107
+ });
108
+ const data = res.data?.data || res.data;
109
+ if (!data?.access_token) {
110
+ throw new Error('Failed to exchange token: invalid response');
111
+ }
112
+ this.store.saveAccessToken({
113
+ token: data.access_token,
114
+ expiresAt: data.expires_at || Date.now() + 24 * 60 * 60 * 1000,
115
+ scopes: data.scopes || [],
116
+ });
117
+ return data.access_token;
118
+ }
119
+ // JWT mode: use directly
120
+ if (creds.jwt) {
121
+ return creds.jwt;
122
+ }
123
+ throw new Error('No valid authentication credentials');
124
+ }
79
125
  async get(endpoint, params) {
80
126
  try {
81
127
  const response = await this.client.get(endpoint, { params });
@@ -156,9 +202,6 @@ class ApiClient {
156
202
  };
157
203
  }
158
204
  }
159
- getTokenManager() {
160
- return this.tokenManager;
161
- }
162
205
  }
163
206
  exports.ApiClient = ApiClient;
164
207
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const client_1 = require("./client");
4
+ const store_1 = require("../session/store");
5
+ // Mock SessionStore
6
+ jest.mock('../session/store', () => {
7
+ return {
8
+ SessionStore: jest.fn().mockImplementation(() => ({
9
+ getCredentials: jest.fn().mockReturnValue({
10
+ apiKey: 'sk-bbt-test123',
11
+ baseUrl: 'https://platform.123456btc.com',
12
+ environment: 'live',
13
+ savedAt: new Date().toISOString(),
14
+ }),
15
+ getAccessToken: jest.fn().mockReturnValue(null),
16
+ saveAccessToken: jest.fn(),
17
+ })),
18
+ };
19
+ });
4
20
  describe('ApiClient', () => {
5
21
  let client;
6
22
  beforeEach(() => {
7
- client = new client_1.ApiClient('https://api.test.com', 'sk_test_test123');
8
- });
9
- describe('constructor', () => {
10
- it('should create client with correct base url', () => {
11
- expect(client).toBeDefined();
12
- });
23
+ client = new client_1.ApiClient(new store_1.SessionStore());
13
24
  });
14
- describe('get', () => {
15
- it('should return success response on 200', async () => {
16
- const response = await client.get('/test');
17
- expect(response).toHaveProperty('success');
18
- });
25
+ it('should create client when credentials exist', () => {
26
+ expect(client).toBeDefined();
19
27
  });
20
- describe('post', () => {
21
- it('should return success response on 200', async () => {
22
- const response = await client.post('/test', { data: 'test' });
23
- expect(response).toHaveProperty('success');
24
- });
28
+ it('should throw when no credentials exist', () => {
29
+ store_1.SessionStore.mockImplementationOnce(() => ({
30
+ getCredentials: jest.fn().mockReturnValue(null),
31
+ }));
32
+ expect(() => new client_1.ApiClient(new store_1.SessionStore())).toThrow('No credentials found');
25
33
  });
26
34
  });
27
35
  //# sourceMappingURL=client.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/api/client.test.ts"],"names":[],"mappings":";;AAAA,qCAAqC;AAErC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,MAAiB,CAAC;IAEtB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,kBAAS,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/api/client.test.ts"],"names":[],"mappings":";;AAAA,qCAAqC;AACrC,4CAAgD;AAEhD,oBAAoB;AACpB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;YAChD,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gBACxC,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EAAE,gCAAgC;gBACzC,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAClC,CAAC;YACF,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YAC/C,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;SAC3B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,MAAiB,CAAC;IAEtB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,kBAAS,CAAC,IAAI,oBAAY,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC/C,oBAA0B,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,CAAC;YACxD,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;SAChD,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,kBAAS,CAAC,IAAI,oBAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/api/token-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAM3C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAuBvC;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAanB,YAAY,IAAI,IAAI;IAWpB,SAAS,IAAI,MAAM,EAAE;CAGtB"}
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/api/token-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAM3C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BvC;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAanB,YAAY,IAAI,IAAI;IAWpB,SAAS,IAAI,MAAM,EAAE;CAGtB"}
@@ -64,6 +64,10 @@ class TokenManager {
64
64
  * Get valid access token, auto-refresh if needed
65
65
  */
66
66
  async getAccessToken() {
67
+ // If apiKey is a JWT (direct auth for /api routes), use it directly
68
+ if (this.apiKey.startsWith('eyJ')) {
69
+ return this.apiKey;
70
+ }
67
71
  // Check cached session
68
72
  if (this.session && this.session.expiresAt > Date.now() + 5 * 60 * 1000) {
69
73
  return this.session.accessToken;
@@ -1 +1 @@
1
- {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/api/token-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/api/token-manager.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -2,6 +2,7 @@
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const commander_1 = require("commander");
5
+ const store_1 = require("./session/store");
5
6
  const auth_1 = require("./commands/auth");
6
7
  const strategy_1 = require("./commands/strategy");
7
8
  const wallet_1 = require("./commands/wallet");
@@ -22,8 +23,23 @@ program
22
23
  .name('123456btc-cli')
23
24
  .description('123456btc CLI - Strategy dispatch & gas settlement for AI agents')
24
25
  .version('1.0.0');
25
- // Add all commands
26
+ // Top-level logout shortcut
26
27
  (0, auth_1.createAuthCommand)(program);
28
+ program
29
+ .command('logout')
30
+ .description('Clear authentication (shortcut for auth logout)')
31
+ .action(() => {
32
+ const store = new store_1.SessionStore();
33
+ const hadCreds = store.getCredentials() !== null;
34
+ store.clearAll();
35
+ if (hadCreds) {
36
+ console.log('✓ Authentication cleared');
37
+ }
38
+ else {
39
+ console.log('Not authenticated');
40
+ }
41
+ });
42
+ // Add all other commands
27
43
  (0, strategy_1.createStrategyCommand)(program);
28
44
  (0, provider_1.createProviderCommand)(program);
29
45
  (0, wallet_1.createWalletCommand)(program);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AAEpC,0CAAoD;AACpD,kDAA4D;AAC5D,8CAAwD;AACxD,gDAA0D;AAC1D,0CAAoD;AACpD,8CAAwD;AACxD,gDAA0D;AAC1D,kDAA4D;AAC5D,4CAAyD;AAEzD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,iBAAiB;AACjB,OAAO;KACJ,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;KACtE,MAAM,CAAC,sBAAsB,EAAE,cAAc,CAAC;KAC9C,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAE7C,UAAU;AACV,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB;AACnB,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,gCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,gCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,4BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,8BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,4BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,8BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAE/B,wBAAwB;AACxB,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;IAC5B,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,QAAQ;AACR,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,oCAAoC;AACpC,MAAM,MAAM,GAAQ,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AAEpC,2CAA+C;AAC/C,0CAAoD;AACpD,kDAA4D;AAC5D,8CAAwD;AACxD,gDAA0D;AAC1D,0CAAoD;AACpD,8CAAwD;AACxD,gDAA0D;AAC1D,kDAA4D;AAC5D,4CAAyD;AAEzD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,iBAAiB;AACjB,OAAO;KACJ,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;KACtE,MAAM,CAAC,sBAAsB,EAAE,cAAc,CAAC;KAC9C,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAE7C,UAAU;AACV,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,4BAA4B;AAC5B,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,KAAK,GAAG,IAAI,oBAAY,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,yBAAyB;AACzB,IAAA,gCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,gCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,4BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,8BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,4BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,8BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAE/B,wBAAwB;AACxB,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;IAC5B,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,QAAQ;AACR,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,oCAAoC;AACpC,MAAM,MAAM,GAAQ,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,QAmPjD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,QAqPjD"}
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
@@ -39,16 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
6
  exports.createAuthCommand = createAuthCommand;
40
7
  const commander_1 = require("commander");
41
8
  const inquirer_1 = __importDefault(require("inquirer"));
42
- const fs = __importStar(require("fs"));
43
- const path = __importStar(require("path"));
44
9
  const axios_1 = __importDefault(require("axios"));
45
10
  const qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
46
11
  const client_1 = require("../api/client");
47
12
  const auth_1 = require("../api/auth");
48
13
  const auth_2 = require("../utils/auth");
49
- const CREDENTIALS_FILE = path.join(process.env.HOME || process.env.USERPROFILE || '.', '.123456btc-cli', 'credentials.json');
14
+ const store_1 = require("../session/store");
50
15
  function createAuthCommand(program) {
51
16
  const authCmd = new commander_1.Command('auth');
17
+ const store = new store_1.SessionStore();
52
18
  // Login command
53
19
  authCmd
54
20
  .command('login')
@@ -67,26 +33,18 @@ function createAuthCommand(program) {
67
33
  ]);
68
34
  apiKey = answers.apiKey;
69
35
  }
70
- // Validate API key format (支持新旧格式)
71
36
  if (!apiKey.startsWith('sk_live_') && !apiKey.startsWith('sk_test_') && !apiKey.startsWith('sk-bbt-')) {
72
37
  console.error('Invalid API key format. Should start with sk_live_, sk_test_, or sk-bbt-');
73
38
  process.exit(1);
74
39
  }
75
- // Create credentials directory
76
- const dir = path.dirname(CREDENTIALS_FILE);
77
- if (!fs.existsSync(dir)) {
78
- fs.mkdirSync(dir, { recursive: true });
79
- }
80
- // Save credentials
81
- const credentials = {
40
+ store.saveCredentials({
82
41
  apiKey,
83
42
  baseUrl: process.env.API_BASE_URL || 'https://platform.123456btc.com',
84
43
  environment: options.env,
85
44
  savedAt: new Date().toISOString(),
86
- };
87
- fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2));
88
- console.log('✓ Authentication saved to', CREDENTIALS_FILE);
89
- console.log(` Base URL: ${credentials.baseUrl}`);
45
+ });
46
+ console.log('✓ Authentication saved');
47
+ console.log(` Base URL: ${store.getCredentials()?.baseUrl}`);
90
48
  console.log(` Environment: ${options.env}`);
91
49
  });
92
50
  // Status command
@@ -94,23 +52,25 @@ function createAuthCommand(program) {
94
52
  .command('status')
95
53
  .description('Show authentication status')
96
54
  .action(async () => {
97
- if (!fs.existsSync(CREDENTIALS_FILE)) {
55
+ const creds = store.getCredentials();
56
+ if (!creds) {
98
57
  console.log('Not authenticated. Run "123456btc-cli auth login" first.');
99
58
  return;
100
59
  }
101
- const credentials = JSON.parse(fs.readFileSync(CREDENTIALS_FILE, 'utf-8'));
102
60
  console.log('Authentication Status:');
103
- console.log(` API Key: ${credentials.apiKey.substring(0, 20)}...`);
104
- console.log(` Environment: ${credentials.environment}`);
105
- console.log(` Saved: ${credentials.savedAt}`);
61
+ console.log(` API Key: ${creds.apiKey?.substring(0, 20) ?? 'N/A'}...`);
62
+ console.log(` JWT: ${creds.jwt ? 'Present' : 'None'}`);
63
+ console.log(` Environment: ${creds.environment}`);
64
+ console.log(` Saved: ${creds.savedAt}`);
106
65
  });
107
66
  // Logout command
108
67
  authCmd
109
68
  .command('logout')
110
69
  .description('Clear authentication')
111
70
  .action(() => {
112
- if (fs.existsSync(CREDENTIALS_FILE)) {
113
- fs.unlinkSync(CREDENTIALS_FILE);
71
+ const hadCreds = store.getCredentials() !== null;
72
+ store.clearAll();
73
+ if (hadCreds) {
114
74
  console.log('✓ Authentication cleared');
115
75
  }
116
76
  else {
@@ -122,8 +82,8 @@ function createAuthCommand(program) {
122
82
  .command('verify')
123
83
  .description('Verify API key and show tier info')
124
84
  .action(async () => {
125
- const creds = (0, auth_2.checkAuth)();
126
- const client = new client_1.ApiClient(creds.baseUrl, creds.apiKey);
85
+ (0, auth_2.checkAuth)();
86
+ const client = new client_1.ApiClient(new store_1.SessionStore());
127
87
  const authApi = new auth_1.AuthApi(client);
128
88
  console.log('Verifying API key...');
129
89
  const tierResponse = await authApi.verifyKey();
@@ -144,7 +104,6 @@ function createAuthCommand(program) {
144
104
  console.error('✗ API Key Invalid');
145
105
  console.error('Error:', tierResponse.error?.message);
146
106
  }
147
- // Also get user info
148
107
  const userInfoResponse = await authApi.userInfo();
149
108
  if (userInfoResponse.success && userInfoResponse.data) {
150
109
  console.log('');
@@ -155,8 +114,14 @@ function createAuthCommand(program) {
155
114
  }
156
115
  console.log(` Created: ${userInfoResponse.data.createdAt}`);
157
116
  }
117
+ const creds = store.getCredentials();
118
+ if (creds?.walletAddress) {
119
+ console.log('');
120
+ console.log('Wallet:');
121
+ console.log(` Address: ${creds.walletAddress}`);
122
+ }
158
123
  });
159
- // Wallet login command (扫码登录)
124
+ // Wallet login command
160
125
  authCmd
161
126
  .command('wallet-login')
162
127
  .description('Login with Solana wallet scan (generates QR code link)')
@@ -164,17 +129,14 @@ function createAuthCommand(program) {
164
129
  .action(async (options) => {
165
130
  const baseUrl = options.url;
166
131
  try {
167
- // 1. 获取 session nonce
168
132
  const sessionRes = await axios_1.default.get(`${baseUrl}/api/auth/wallet-session`);
169
- const { nonce, sessionId } = sessionRes.data;
170
- // 2. 生成登录 URL(指向 platform 的扫码登录页面)
133
+ const { nonce } = sessionRes.data;
171
134
  const loginUrl = `${baseUrl}/login?nonce=${nonce}`;
172
135
  console.log('');
173
136
  console.log('═══════════════════════════════════════════════════════');
174
137
  console.log(' Wallet Login');
175
138
  console.log('═══════════════════════════════════════════════════════');
176
139
  console.log('');
177
- // 在终端显示二维码
178
140
  qrcode_terminal_1.default.generate(loginUrl, { small: true }, (qrcodeStr) => {
179
141
  console.log(qrcodeStr);
180
142
  });
@@ -185,10 +147,10 @@ function createAuthCommand(program) {
185
147
  console.log('');
186
148
  console.log(' Waiting for wallet signature...');
187
149
  console.log('');
188
- // 3. 轮询等待签名
189
150
  let attempts = 0;
190
- const maxAttempts = 60; // 5 minutes (5s interval)
151
+ const maxAttempts = 60;
191
152
  let loginResult = null;
153
+ let wallet_address = null;
192
154
  while (attempts < maxAttempts) {
193
155
  await new Promise(r => setTimeout(r, 5000));
194
156
  attempts++;
@@ -196,23 +158,24 @@ function createAuthCommand(program) {
196
158
  try {
197
159
  const pollRes = await axios_1.default.get(`${baseUrl}/api/auth/wallet-poll/${nonce}`);
198
160
  if (pollRes.data.ready) {
199
- const { wallet_address, signature, message } = pollRes.data;
161
+ const { signature, message } = pollRes.data;
162
+ wallet_address = pollRes.data.wallet_address;
200
163
  console.log('\n✓ Signature received!');
201
- // 4. 调用 wallet-login 获取 JWT
164
+ console.log(` Wallet: ${wallet_address}`);
202
165
  const loginRes = await axios_1.default.post(`${baseUrl}/api/auth/wallet-login`, {
203
166
  wallet_address,
204
167
  signature,
205
168
  nonce,
206
169
  message,
207
170
  });
208
- if (loginRes.data.success) {
209
- loginResult = loginRes.data;
171
+ if (loginRes.data.success && loginRes.data.data) {
172
+ loginResult = loginRes.data.data;
210
173
  break;
211
174
  }
212
175
  }
213
176
  }
214
177
  catch {
215
- // 继续轮询
178
+ // continue polling
216
179
  }
217
180
  }
218
181
  if (!loginResult) {
@@ -221,35 +184,41 @@ function createAuthCommand(program) {
221
184
  }
222
185
  console.log(`✓ Logged in as ${loginResult.user.sol_address}`);
223
186
  console.log(' Creating API Key...');
224
- // 5. 用 JWT 创建 API Key
225
187
  const keyRes = await axios_1.default.post(`${baseUrl}/api/api-keys`, { name: '123456btc-cli' }, { headers: { Authorization: `Bearer ${loginResult.token}` } });
226
188
  const apiKey = keyRes.data?.data?.key || keyRes.data?.key;
227
189
  if (!apiKey) {
228
190
  console.error('✗ Failed to create API key');
229
191
  process.exit(1);
230
192
  }
231
- // 6. 保存凭证
232
- const dir = path.dirname(CREDENTIALS_FILE);
233
- if (!fs.existsSync(dir)) {
234
- fs.mkdirSync(dir, { recursive: true });
235
- }
236
- const credentials = {
193
+ store.saveCredentials({
237
194
  apiKey,
238
195
  baseUrl,
239
196
  jwt: loginResult.token,
197
+ walletAddress: wallet_address || undefined,
240
198
  environment: 'live',
241
199
  savedAt: new Date().toISOString(),
242
- };
243
- fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2));
200
+ });
201
+ store.clearAccessToken();
244
202
  console.log('');
245
203
  console.log('✓ Login successful!');
246
204
  console.log(` API Key: ${apiKey.slice(0, 20)}...`);
247
- console.log(` Saved to: ${CREDENTIALS_FILE}`);
205
+ if (loginResult?.debug) {
206
+ console.log('');
207
+ console.log(' Debug:');
208
+ console.log(` Wallet: ${loginResult.debug.received_address}`);
209
+ console.log(` User ID: ${loginResult.debug.matched_user_id}`);
210
+ console.log(` Matched by: ${loginResult.debug.matched_by}`);
211
+ console.log(` New user: ${loginResult.debug.is_new_user ? 'Yes' : 'No'}`);
212
+ }
248
213
  console.log('');
249
214
  console.log(' You can now use:');
250
215
  console.log(' 123456btc-cli signals latest');
251
216
  console.log(' 123456btc-cli strategy list');
252
217
  console.log('');
218
+ console.log(' To switch account:');
219
+ console.log(' 123456btc-cli auth logout');
220
+ console.log(' 123456btc-cli auth wallet-login');
221
+ console.log('');
253
222
  }
254
223
  catch (err) {
255
224
  console.error('Login error:', err instanceof Error ? err.message : String(err));