@gooin/garmin-connect 1.7.6 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/FileMFASessionStorage.js +1 -247
- package/dist/common/HttpClient copy.js +1 -361
- package/dist/common/HttpClient.d.ts +1 -0
- package/dist/common/HttpClient.js +1 -612
- package/dist/common/HttpClient.js.map +1 -1
- package/dist/common/HttpClientOLD.js +1 -361
- package/dist/common/HttpClientOLDV1.js +1 -361
- package/dist/common/HttpClientV1.js +1 -577
- package/dist/common/MFAManager.js +1 -126
- package/dist/common/MFASessionStorage.js +1 -3
- package/dist/common/RedisMFASessionStorage.js +1 -281
- package/dist/common/RedisMFASessionStorage.js.map +1 -1
- package/dist/garmin/GarminConnect.d.ts +243 -66
- package/dist/garmin/GarminConnect.js +1 -592
- package/dist/garmin/GarminConnect.js.map +1 -1
- package/dist/garmin/UrlClass.d.ts +21 -0
- package/dist/garmin/UrlClass.js +1 -149
- package/dist/garmin/UrlClass.js.map +1 -1
- package/dist/garmin/common/DateUtils.d.ts +1 -0
- package/dist/garmin/common/DateUtils.js +1 -38
- package/dist/garmin/common/DateUtils.js.map +1 -1
- package/dist/garmin/common/HydrationUtils.js +1 -16
- package/dist/garmin/common/WeightUtils.js +1 -9
- package/dist/garmin/modules/activity/base.d.ts +39 -0
- package/dist/garmin/modules/activity/base.js +1 -0
- package/dist/garmin/modules/activity/base.js.map +1 -0
- package/dist/garmin/modules/activity/cycling.d.ts +16 -0
- package/dist/garmin/modules/activity/cycling.js +1 -0
- package/dist/garmin/modules/activity/cycling.js.map +1 -0
- package/dist/garmin/modules/activity/running.d.ts +15 -0
- package/dist/garmin/modules/activity/running.js +1 -0
- package/dist/garmin/modules/activity/running.js.map +1 -0
- package/dist/garmin/modules/activity/training-status.d.ts +13 -0
- package/dist/garmin/modules/activity/training-status.js +1 -0
- package/dist/garmin/modules/activity/training-status.js.map +1 -0
- package/dist/garmin/modules/coach/activity-summary.d.ts +20 -0
- package/dist/garmin/modules/coach/activity-summary.js +1 -0
- package/dist/garmin/modules/coach/activity-summary.js.map +1 -0
- package/dist/garmin/modules/coach/helpers.d.ts +157 -0
- package/dist/garmin/modules/coach/helpers.js +1 -0
- package/dist/garmin/modules/coach/helpers.js.map +1 -0
- package/dist/garmin/modules/coach/training-overview.d.ts +5 -0
- package/dist/garmin/modules/coach/training-overview.js +1 -0
- package/dist/garmin/modules/coach/training-overview.js.map +1 -0
- package/dist/garmin/modules/coach/wellness-overview.d.ts +5 -0
- package/dist/garmin/modules/coach/wellness-overview.js +1 -0
- package/dist/garmin/modules/coach/wellness-overview.js.map +1 -0
- package/dist/garmin/modules/coach/wellness-summary.d.ts +4 -0
- package/dist/garmin/modules/coach/wellness-summary.js +1 -0
- package/dist/garmin/modules/coach/wellness-summary.js.map +1 -0
- package/dist/garmin/modules/coach.d.ts +60 -0
- package/dist/garmin/modules/coach.js +1 -0
- package/dist/garmin/modules/coach.js.map +1 -0
- package/dist/garmin/modules/course.d.ts +27 -0
- package/dist/garmin/modules/course.js +1 -0
- package/dist/garmin/modules/course.js.map +1 -0
- package/dist/garmin/modules/device.d.ts +11 -0
- package/dist/garmin/modules/device.js +1 -0
- package/dist/garmin/modules/device.js.map +1 -0
- package/dist/garmin/modules/misc.d.ts +18 -0
- package/dist/garmin/modules/misc.js +1 -0
- package/dist/garmin/modules/misc.js.map +1 -0
- package/dist/garmin/modules/types.d.ts +10 -0
- package/dist/garmin/modules/types.js +1 -0
- package/dist/garmin/modules/types.js.map +1 -0
- package/dist/garmin/modules/user.d.ts +18 -0
- package/dist/garmin/modules/user.js +1 -0
- package/dist/garmin/modules/user.js.map +1 -0
- package/dist/garmin/modules/wellness/body-battery.d.ts +11 -0
- package/dist/garmin/modules/wellness/body-battery.js +1 -0
- package/dist/garmin/modules/wellness/body-battery.js.map +1 -0
- package/dist/garmin/modules/wellness/heart-rate.d.ts +11 -0
- package/dist/garmin/modules/wellness/heart-rate.js +1 -0
- package/dist/garmin/modules/wellness/heart-rate.js.map +1 -0
- package/dist/garmin/modules/wellness/hrv.d.ts +12 -0
- package/dist/garmin/modules/wellness/hrv.js +1 -0
- package/dist/garmin/modules/wellness/hrv.js.map +1 -0
- package/dist/garmin/modules/wellness/hydration.d.ts +12 -0
- package/dist/garmin/modules/wellness/hydration.js +1 -0
- package/dist/garmin/modules/wellness/hydration.js.map +1 -0
- package/dist/garmin/modules/wellness/sleep.d.ts +16 -0
- package/dist/garmin/modules/wellness/sleep.js +1 -0
- package/dist/garmin/modules/wellness/sleep.js.map +1 -0
- package/dist/garmin/modules/wellness/weight.d.ts +20 -0
- package/dist/garmin/modules/wellness/weight.js +1 -0
- package/dist/garmin/modules/wellness/weight.js.map +1 -0
- package/dist/garmin/modules/workout.d.ts +23 -0
- package/dist/garmin/modules/workout.js +1 -0
- package/dist/garmin/modules/workout.js.map +1 -0
- package/dist/garmin/types/activity-stats.d.ts +21 -0
- package/dist/garmin/types/activity-stats.js +1 -0
- package/dist/garmin/types/activity-stats.js.map +1 -0
- package/dist/garmin/types/activity.js +1 -27
- package/dist/garmin/types/body-battery.d.ts +7 -0
- package/dist/garmin/types/body-battery.js +1 -0
- package/dist/garmin/types/body-battery.js.map +1 -0
- package/dist/garmin/types/coach.d.ts +533 -0
- package/dist/garmin/types/coach.js +1 -0
- package/dist/garmin/types/coach.js.map +1 -0
- package/dist/garmin/types/course.d.ts +3 -11
- package/dist/garmin/types/course.js +1 -3
- package/dist/garmin/types/cycling.d.ts +70 -0
- package/dist/garmin/types/cycling.js +1 -0
- package/dist/garmin/types/cycling.js.map +1 -0
- package/dist/garmin/types/device.d.ts +32 -0
- package/dist/garmin/types/device.js +1 -0
- package/dist/garmin/types/device.js.map +1 -0
- package/dist/garmin/types/golf.d.ts +4 -4
- package/dist/garmin/types/golf.js +1 -3
- package/dist/garmin/types/golf.js.map +1 -1
- package/dist/garmin/types/heartrate.d.ts +3 -3
- package/dist/garmin/types/heartrate.js +1 -2
- package/dist/garmin/types/hrv.d.ts +3 -0
- package/dist/garmin/types/hrv.js +1 -3
- package/dist/garmin/types/hydration.d.ts +3 -3
- package/dist/garmin/types/hydration.js +1 -2
- package/dist/garmin/types/index.d.ts +15 -0
- package/dist/garmin/types/index.js +1 -36
- package/dist/garmin/types/index.js.map +1 -1
- package/dist/garmin/types/personal-info.js +1 -3
- package/dist/garmin/types/race-prediction.d.ts +50 -0
- package/dist/garmin/types/race-prediction.js +1 -0
- package/dist/garmin/types/race-prediction.js.map +1 -0
- package/dist/garmin/types/sleep.js +1 -3
- package/dist/garmin/types/training-status.js +1 -3
- package/dist/garmin/types/weight.d.ts +46 -4
- package/dist/garmin/types/weight.js +1 -3
- package/dist/garmin/workouts/Running.js +1 -47
- package/dist/garmin/workouts/templates/RunningTemplate.js +1 -78
- package/dist/index.js +1 -11
- package/dist/utils.js +1 -37
- package/package.json +4 -3
|
@@ -1,577 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.HttpClient = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const tough_cookie_1 = require("tough-cookie");
|
|
9
|
-
const form_data_1 = __importDefault(require("form-data"));
|
|
10
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
11
|
-
const luxon_1 = require("luxon");
|
|
12
|
-
const oauth_1_0a_1 = __importDefault(require("oauth-1.0a"));
|
|
13
|
-
const qs_1 = __importDefault(require("qs"));
|
|
14
|
-
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
15
|
-
const CSRF_RE = new RegExp('name="_csrf"\\s+value="(.+?)"');
|
|
16
|
-
const TICKET_RE = new RegExp('ticket=([^"]+)"');
|
|
17
|
-
const ACCOUNT_LOCKED_RE = new RegExp('var statuss*=s*"([^"]*)"');
|
|
18
|
-
const PAGE_TITLE_RE = new RegExp('<title>([^<]*)</title>');
|
|
19
|
-
const USER_AGENT_CONNECTMOBILE = 'com.garmin.android.apps.connectmobile';
|
|
20
|
-
const USER_AGENT_CONNECT_IOS = 'GCM-iOS-5.7.2.1';
|
|
21
|
-
const USER_AGENT_BROWSER = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36';
|
|
22
|
-
const USER_AGENT_BROWSER_MAC = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36';
|
|
23
|
-
const OAUTH_CONSUMER_URL = 'https://thegarth.s3.amazonaws.com/oauth_consumer.json';
|
|
24
|
-
const HTTP_STATUS = {
|
|
25
|
-
UNAUTHORIZED: 401
|
|
26
|
-
};
|
|
27
|
-
let tokenRefreshPromise = null;
|
|
28
|
-
let refreshSubscribers = [];
|
|
29
|
-
class HttpClient {
|
|
30
|
-
constructor(url, config) {
|
|
31
|
-
var _a, _b;
|
|
32
|
-
const jar = new tough_cookie_1.CookieJar();
|
|
33
|
-
this.url = url;
|
|
34
|
-
this.client = axios_1.default.create({
|
|
35
|
-
timeout: (_a = config === null || config === void 0 ? void 0 : config.timeout) !== null && _a !== void 0 ? _a : 5000,
|
|
36
|
-
timeoutErrorMessage: `Request Timeout: > ${(_b = config === null || config === void 0 ? void 0 : config.timeout) !== null && _b !== void 0 ? _b : 5000} ms`,
|
|
37
|
-
maxRedirects: 10,
|
|
38
|
-
validateStatus: function (status) {
|
|
39
|
-
return status >= 200 && status < 400;
|
|
40
|
-
},
|
|
41
|
-
withCredentials: true,
|
|
42
|
-
jar: jar,
|
|
43
|
-
});
|
|
44
|
-
this.config = config;
|
|
45
|
-
this.client.interceptors.response.use((response) => {
|
|
46
|
-
var _a, _b, _c, _d;
|
|
47
|
-
// 跟踪重定向过程
|
|
48
|
-
if (((_a = response.config.url) === null || _a === void 0 ? void 0 : _a.includes('signin')) ||
|
|
49
|
-
((_b = response.config.url) === null || _b === void 0 ? void 0 : _b.includes('verifyMFA'))) {
|
|
50
|
-
console.log('> 响应跟踪 - URL:', response.config.url);
|
|
51
|
-
console.log('响应跟踪 - 状态码:', response.status);
|
|
52
|
-
console.log('响应跟踪 - 最终URL:', ((_c = response.request) === null || _c === void 0 ? void 0 : _c.responseURL) || response.config.url);
|
|
53
|
-
console.log('响应跟踪 - 重定向次数:', ((_d = response.request) === null || _d === void 0 ? void 0 : _d.redirectCount) || 0);
|
|
54
|
-
// 检查是否有Location头
|
|
55
|
-
if (response.headers.location) {
|
|
56
|
-
console.log('响应跟踪 - Location头:', response.headers.location);
|
|
57
|
-
}
|
|
58
|
-
// 检查响应头中可能的重定向信息
|
|
59
|
-
if (response.status >= 300 && response.status < 400) {
|
|
60
|
-
console.log('响应跟踪 - 检测到重定向状态码:', response.status);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return response;
|
|
64
|
-
}, async (error) => {
|
|
65
|
-
var _a, _b, _c, _d;
|
|
66
|
-
if (axios_1.default.isAxiosError(error) &&
|
|
67
|
-
error.code === 'ECONNABORTED') {
|
|
68
|
-
throw new Error(error.message || 'Request Timeout');
|
|
69
|
-
}
|
|
70
|
-
const originalRequest = error.config;
|
|
71
|
-
if (((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) === HTTP_STATUS.UNAUTHORIZED &&
|
|
72
|
-
!(originalRequest === null || originalRequest === void 0 ? void 0 : originalRequest._retry)) {
|
|
73
|
-
if (!this.oauth2Token) {
|
|
74
|
-
throw new Error('No OAuth2 token available');
|
|
75
|
-
}
|
|
76
|
-
originalRequest._retry = true;
|
|
77
|
-
try {
|
|
78
|
-
if (!tokenRefreshPromise) {
|
|
79
|
-
tokenRefreshPromise =
|
|
80
|
-
this.refreshOauth2Token().finally(() => {
|
|
81
|
-
tokenRefreshPromise = null;
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
await tokenRefreshPromise;
|
|
85
|
-
originalRequest.headers.Authorization = `Bearer ${this.oauth2Token.access_token}`;
|
|
86
|
-
return this.client(originalRequest);
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
console.error('Token refresh failed:', err);
|
|
90
|
-
throw err;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (axios_1.default.isAxiosError(error) && error.response) {
|
|
94
|
-
// 添加错误响应的调试信息
|
|
95
|
-
if (((_b = error.response.config.url) === null || _b === void 0 ? void 0 : _b.includes('signin')) ||
|
|
96
|
-
((_c = error.response.config.url) === null || _c === void 0 ? void 0 : _c.includes('verifyMFA'))) {
|
|
97
|
-
console.log('> HTTP Error响应跟踪 - URL:', error.response.config.url);
|
|
98
|
-
console.log('HTTP Error响应跟踪 - 状态码:', error.response.status);
|
|
99
|
-
console.log('HTTP Error响应跟踪 - 最终URL:', ((_d = error.response.request) === null || _d === void 0 ? void 0 : _d.responseURL) ||
|
|
100
|
-
error.response.config.url);
|
|
101
|
-
if (error.response.headers.location) {
|
|
102
|
-
console.log('HTTP Error响应跟踪 - Location头:', error.response.headers.location);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
this.handleError(error.response);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
// 处理没有response的情况
|
|
109
|
-
throw new Error('Network error or unknown error occurred');
|
|
110
|
-
}
|
|
111
|
-
throw error;
|
|
112
|
-
});
|
|
113
|
-
this.client.interceptors.request.use(async (config) => {
|
|
114
|
-
if (this.oauth2Token) {
|
|
115
|
-
config.headers.Authorization =
|
|
116
|
-
'Bearer ' + this.oauth2Token.access_token;
|
|
117
|
-
}
|
|
118
|
-
return config;
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
async fetchOauthConsumer() {
|
|
122
|
-
const response = await axios_1.default.get(OAUTH_CONSUMER_URL);
|
|
123
|
-
this.OAUTH_CONSUMER = {
|
|
124
|
-
key: response.data.consumer_key,
|
|
125
|
-
secret: response.data.consumer_secret
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
async checkTokenVaild() {
|
|
129
|
-
if (this.oauth2Token) {
|
|
130
|
-
if (this.oauth2Token.expires_at < luxon_1.DateTime.now().toSeconds()) {
|
|
131
|
-
console.error('Token expired!');
|
|
132
|
-
await this.refreshOauth2Token();
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
async get(url, config) {
|
|
137
|
-
const response = await this.client.get(url, config);
|
|
138
|
-
return response === null || response === void 0 ? void 0 : response.data;
|
|
139
|
-
}
|
|
140
|
-
async post(url, data, config) {
|
|
141
|
-
var _a, _b;
|
|
142
|
-
try {
|
|
143
|
-
const response = await this.client.post(url, data, config);
|
|
144
|
-
// 如果是MFA验证请求,添加额外的调试信息
|
|
145
|
-
if (url.includes('verifyMFA')) {
|
|
146
|
-
console.log('MFA验证响应状态码:', response.status);
|
|
147
|
-
console.log('MFA验证响应头 Location:', response.headers.location);
|
|
148
|
-
console.log('MFA验证响应头 Set-Cookie:', response.headers['set-cookie']);
|
|
149
|
-
console.log('MFA验证最终URL:', ((_a = response.request) === null || _a === void 0 ? void 0 : _a.responseURL) || response.config.url);
|
|
150
|
-
// 检查是否重定向到了包含logintoken的URL
|
|
151
|
-
if (((_b = response.request) === null || _b === void 0 ? void 0 : _b.responseURL) &&
|
|
152
|
-
response.request.responseURL.includes('logintoken')) {
|
|
153
|
-
console.log('检测到重定向到包含logintoken的URL:', response.request.responseURL);
|
|
154
|
-
// 如果重定向到了包含logintoken的URL,我们需要获取重定向后的页面内容
|
|
155
|
-
// 因为Axios可能没有自动跟随重定向,我们需要手动获取
|
|
156
|
-
if (!response.data.includes('Success') &&
|
|
157
|
-
!response.data.includes('ticket=')) {
|
|
158
|
-
console.log('响应数据不包含成功标识,手动获取重定向后的页面内容');
|
|
159
|
-
const redirectResponse = await this.client.get(response.request.responseURL, {
|
|
160
|
-
headers: {
|
|
161
|
-
'User-Agent': USER_AGENT_CONNECT_IOS
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
console.log('手动获取重定向页面状态码:', redirectResponse.status);
|
|
165
|
-
console.log('手动获取重定向页面长度:', redirectResponse.data.length);
|
|
166
|
-
return redirectResponse.data;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return response.data;
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
console.error('POST请求失败:', error);
|
|
174
|
-
throw error;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
async put(url, data, config) {
|
|
178
|
-
const response = await this.client.put(url, data, config);
|
|
179
|
-
return response === null || response === void 0 ? void 0 : response.data;
|
|
180
|
-
}
|
|
181
|
-
async delete(url, config) {
|
|
182
|
-
const response = await this.client.post(url, null, {
|
|
183
|
-
...config,
|
|
184
|
-
headers: {
|
|
185
|
-
...config === null || config === void 0 ? void 0 : config.headers,
|
|
186
|
-
'X-Http-Method-Override': 'DELETE'
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
return response === null || response === void 0 ? void 0 : response.data;
|
|
190
|
-
}
|
|
191
|
-
setCommonHeader(headers) {
|
|
192
|
-
lodash_1.default.each(headers, (headerValue, key) => {
|
|
193
|
-
this.client.defaults.headers.common[key] = headerValue;
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
handleError(response) {
|
|
197
|
-
this.handleHttpError(response);
|
|
198
|
-
}
|
|
199
|
-
handleHttpError(response) {
|
|
200
|
-
const { status, statusText, data } = response;
|
|
201
|
-
const errorMessage = {
|
|
202
|
-
status,
|
|
203
|
-
statusText,
|
|
204
|
-
data: typeof data === 'object' ? JSON.stringify(data) : data
|
|
205
|
-
};
|
|
206
|
-
console.error('HTTP Error:', errorMessage);
|
|
207
|
-
throw new Error(`HTTP Error (${status}): ${statusText}`);
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Login to Garmin Connect
|
|
211
|
-
* @param username
|
|
212
|
-
* @param password
|
|
213
|
-
* @param mfaCallback Optional MFA callback function
|
|
214
|
-
* @returns {Promise<{oauth1: IOauth1; oauth2: IOauth2Token}>}
|
|
215
|
-
*/
|
|
216
|
-
async login(username, password, mfaCallback) {
|
|
217
|
-
try {
|
|
218
|
-
// 获取OAuth Consumer信息
|
|
219
|
-
if (!this.OAUTH_CONSUMER) {
|
|
220
|
-
await this.fetchOauthConsumer();
|
|
221
|
-
}
|
|
222
|
-
// 定义参数,与Python版本保持一致
|
|
223
|
-
const SSO = this.url.GARMIN_SSO;
|
|
224
|
-
const SSO_EMBED = this.url.GARMIN_SSO_EMBED;
|
|
225
|
-
const SSO_EMBED_PARAMS = {
|
|
226
|
-
id: 'gauth-widget',
|
|
227
|
-
embedWidget: 'true',
|
|
228
|
-
gauthHost: SSO
|
|
229
|
-
};
|
|
230
|
-
const SIGNIN_PARAMS = {
|
|
231
|
-
id: 'gauth-widget',
|
|
232
|
-
embedWidget: true,
|
|
233
|
-
clientId: 'GarminConnect',
|
|
234
|
-
locale: 'en',
|
|
235
|
-
gauthHost: this.url.GARMIN_SSO_EMBED,
|
|
236
|
-
service: this.url.GARMIN_SSO_EMBED,
|
|
237
|
-
source: this.url.GARMIN_SSO_EMBED,
|
|
238
|
-
redirectAfterAccountLoginUrl: this.url.GARMIN_SSO_EMBED,
|
|
239
|
-
redirectAfterAccountCreationUrl: this.url.GARMIN_SSO_EMBED
|
|
240
|
-
};
|
|
241
|
-
// 设置cookies - 与Python版本一致
|
|
242
|
-
await this.get(`${SSO}/embed`, {
|
|
243
|
-
params: SSO_EMBED_PARAMS,
|
|
244
|
-
headers: {
|
|
245
|
-
'User-Agent': USER_AGENT_CONNECT_IOS
|
|
246
|
-
}
|
|
247
|
-
});
|
|
248
|
-
// 获取CSRF令牌 - 与Python版本一致
|
|
249
|
-
const signinResponse = await this.get(`${SSO}/signin`, {
|
|
250
|
-
params: SIGNIN_PARAMS,
|
|
251
|
-
headers: {
|
|
252
|
-
'User-Agent': USER_AGENT_CONNECT_IOS,
|
|
253
|
-
Referer: `${SSO}/embed`
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
// 保存登录页面HTML用于调试
|
|
257
|
-
this.saveHtmlToFile(signinResponse, 'signin_page');
|
|
258
|
-
const csrfToken = this.extractCsrfToken(signinResponse);
|
|
259
|
-
console.log('🚀 - login - csrfToken:', csrfToken);
|
|
260
|
-
if (!csrfToken) {
|
|
261
|
-
throw new Error('无法从登录页面提取CSRF令牌');
|
|
262
|
-
}
|
|
263
|
-
// 提交登录表单 - 使用FormData方式,与旧版本一致
|
|
264
|
-
const form = new form_data_1.default();
|
|
265
|
-
form.append('username', username);
|
|
266
|
-
form.append('password', password);
|
|
267
|
-
form.append('embed', 'true');
|
|
268
|
-
form.append('_csrf', csrfToken);
|
|
269
|
-
const loginResponse = await this.post(`${SSO}/signin`, form, {
|
|
270
|
-
params: SIGNIN_PARAMS,
|
|
271
|
-
headers: {
|
|
272
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
273
|
-
'Dnt': 1,
|
|
274
|
-
'Origin': this.url.GARMIN_SSO_ORIGIN,
|
|
275
|
-
'Referer': `${SSO}/signin`,
|
|
276
|
-
'User-Agent': USER_AGENT_CONNECT_IOS
|
|
277
|
-
},
|
|
278
|
-
maxRedirects: 10 // 确保跟随重定向
|
|
279
|
-
});
|
|
280
|
-
``;
|
|
281
|
-
// 保存登录响应HTML用于调试
|
|
282
|
-
this.saveHtmlToFile(loginResponse, 'login_response');
|
|
283
|
-
const title = this.extractPageTitle(loginResponse);
|
|
284
|
-
console.log('登录后页面标题:', title);
|
|
285
|
-
// 处理MFA - 与Python版本一致
|
|
286
|
-
// 使用与Python版本相同的关键词检测MFA需求
|
|
287
|
-
const mfaKeywords = ['MFA', 'Enter security code', 'Enter MFA code'];
|
|
288
|
-
const needsMfa = mfaKeywords.some(keyword => title && title.toLowerCase().includes(keyword.toLowerCase()));
|
|
289
|
-
let finalResponse = loginResponse; // 默认使用登录响应
|
|
290
|
-
if (needsMfa) {
|
|
291
|
-
if (!mfaCallback) {
|
|
292
|
-
throw new Error('需要MFA验证但未提供回调函数');
|
|
293
|
-
}
|
|
294
|
-
console.log('检测到需要MFA验证,页面标题:', title);
|
|
295
|
-
// 处理MFA验证
|
|
296
|
-
finalResponse = await this.handleMfaVerification(loginResponse, SIGNIN_PARAMS, mfaCallback);
|
|
297
|
-
// 检查MFA验证后的响应是否包含成功标识
|
|
298
|
-
const mfaResultTitle = this.extractPageTitle(finalResponse);
|
|
299
|
-
console.log('MFA验证后页面标题:', mfaResultTitle);
|
|
300
|
-
if (mfaResultTitle !== 'Success' && !finalResponse.includes('ticket=')) {
|
|
301
|
-
throw new Error(`MFA验证后未获得成功页面,当前页面: ${mfaResultTitle}`);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
else if (title !== 'Success') {
|
|
305
|
-
throw new Error(`登录失败,页面标题: ${title}`);
|
|
306
|
-
}
|
|
307
|
-
// 提取ticket - 从最终响应中提取
|
|
308
|
-
const ticket = this.extractTicket(finalResponse);
|
|
309
|
-
if (!ticket) {
|
|
310
|
-
throw new Error('无法从响应中提取ticket');
|
|
311
|
-
}
|
|
312
|
-
// 获取OAuth1令牌
|
|
313
|
-
const oauth1 = await this.getOauth1Token(ticket);
|
|
314
|
-
// 交换OAuth2令牌
|
|
315
|
-
await this.exchange(oauth1);
|
|
316
|
-
return { oauth1, oauth2: this.oauth2Token };
|
|
317
|
-
}
|
|
318
|
-
catch (error) {
|
|
319
|
-
console.error('登录失败:', error);
|
|
320
|
-
throw error;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* 保存HTML内容到文件,用于调试
|
|
325
|
-
* @param htmlContent HTML内容
|
|
326
|
-
* @param filename 文件名(不含扩展名)
|
|
327
|
-
*/
|
|
328
|
-
saveHtmlToFile(htmlContent, filename) {
|
|
329
|
-
try {
|
|
330
|
-
const fs = require('fs');
|
|
331
|
-
const path = require('path');
|
|
332
|
-
const debugDir = path.join(process.cwd(), 'debug');
|
|
333
|
-
// 确保调试目录存在
|
|
334
|
-
if (!fs.existsSync(debugDir)) {
|
|
335
|
-
fs.mkdirSync(debugDir, { recursive: true });
|
|
336
|
-
}
|
|
337
|
-
const filePath = path.join(debugDir, `${filename}.html`);
|
|
338
|
-
fs.writeFileSync(filePath, htmlContent);
|
|
339
|
-
console.log(`已保存调试文件: ${filePath}`);
|
|
340
|
-
}
|
|
341
|
-
catch (error) {
|
|
342
|
-
console.error('保存调试文件失败:', error);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* 处理MFA验证
|
|
347
|
-
* @param loginResponse 登录响应HTML
|
|
348
|
-
* @param signinParams 登录参数
|
|
349
|
-
* @param mfaCallback MFA验证码回调函数
|
|
350
|
-
* @returns MFA验证响应
|
|
351
|
-
*/
|
|
352
|
-
async handleMfaVerification(loginResponse, signinParams, mfaCallback) {
|
|
353
|
-
try {
|
|
354
|
-
// 保存MFA页面HTML用于调试
|
|
355
|
-
this.saveHtmlToFile(loginResponse, 'mfa_page');
|
|
356
|
-
// 提取CSRF令牌
|
|
357
|
-
const csrfToken = this.extractCsrfToken(loginResponse);
|
|
358
|
-
if (!csrfToken) {
|
|
359
|
-
throw new Error('无法从MFA页面提取CSRF令牌');
|
|
360
|
-
}
|
|
361
|
-
// 获取MFA验证码
|
|
362
|
-
const mfaCode = await mfaCallback();
|
|
363
|
-
if (!mfaCode) {
|
|
364
|
-
throw new Error('未提供MFA验证码');
|
|
365
|
-
}
|
|
366
|
-
// 处理MFA验证 - 使用FormData方式,与旧版本一致
|
|
367
|
-
const SSO = this.url.GARMIN_SSO;
|
|
368
|
-
const mfaForm = new form_data_1.default();
|
|
369
|
-
mfaForm.append('mfa-code', mfaCode);
|
|
370
|
-
mfaForm.append('embed', 'true');
|
|
371
|
-
mfaForm.append('_csrf', csrfToken);
|
|
372
|
-
const mfaResult = await this.post(`${SSO}/mfa/verify`, mfaForm, {
|
|
373
|
-
params: signinParams,
|
|
374
|
-
headers: {
|
|
375
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
376
|
-
'Dnt': 1,
|
|
377
|
-
'Origin': this.url.GARMIN_SSO_ORIGIN,
|
|
378
|
-
'Referer': `${SSO}/signin`,
|
|
379
|
-
'User-Agent': USER_AGENT_BROWSER
|
|
380
|
-
},
|
|
381
|
-
maxRedirects: 10,
|
|
382
|
-
// 添加响应拦截器,确保获取重定向后的最终响应
|
|
383
|
-
transformResponse: [
|
|
384
|
-
function (data, headers) {
|
|
385
|
-
// 检查是否有重定向
|
|
386
|
-
if (headers.location &&
|
|
387
|
-
headers.location.includes('logintoken')) {
|
|
388
|
-
console.log('检测到重定向到包含logintoken的URL:', headers.location);
|
|
389
|
-
}
|
|
390
|
-
return data;
|
|
391
|
-
}
|
|
392
|
-
]
|
|
393
|
-
});
|
|
394
|
-
console.log('MFA验证完成,响应长度:', mfaResult.length);
|
|
395
|
-
// 保存MFA验证响应用于调试
|
|
396
|
-
this.saveHtmlToFile(mfaResult, 'mfa_verification_response');
|
|
397
|
-
// 检查MFA验证后的页面标题
|
|
398
|
-
const mfaResultTitle = this.extractPageTitle(mfaResult);
|
|
399
|
-
console.log('MFA验证后的页面标题:', mfaResultTitle);
|
|
400
|
-
// 验证MFA是否成功
|
|
401
|
-
if (mfaResultTitle !== 'Success' &&
|
|
402
|
-
!mfaResult.includes('ticket=')) {
|
|
403
|
-
throw new Error(`MFA验证失败,页面标题: ${mfaResultTitle}`);
|
|
404
|
-
}
|
|
405
|
-
// 如果MFA验证成功,更新loginResponse为MFA验证结果
|
|
406
|
-
// 这样后续的ticket提取将从MFA验证后的响应中进行
|
|
407
|
-
// 注意:这里我们不能直接修改loginResponse参数,但可以在返回值中提供MFA验证结果
|
|
408
|
-
return mfaResult;
|
|
409
|
-
}
|
|
410
|
-
catch (error) {
|
|
411
|
-
console.error('MFA验证失败:', error);
|
|
412
|
-
throw error;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* 从HTML中提取CSRF令牌
|
|
417
|
-
* @param html HTML字符串
|
|
418
|
-
* @returns CSRF令牌或null
|
|
419
|
-
*/
|
|
420
|
-
extractCsrfToken(html) {
|
|
421
|
-
const match = CSRF_RE.exec(html);
|
|
422
|
-
return match ? match[1] : null;
|
|
423
|
-
}
|
|
424
|
-
/**
|
|
425
|
-
* 从HTML中提取页面标题
|
|
426
|
-
* @param html HTML字符串
|
|
427
|
-
* @returns 页面标题或空字符串
|
|
428
|
-
*/
|
|
429
|
-
extractPageTitle(html) {
|
|
430
|
-
const match = PAGE_TITLE_RE.exec(html);
|
|
431
|
-
return match ? match[1] : '';
|
|
432
|
-
}
|
|
433
|
-
/**
|
|
434
|
-
* 从HTML中提取ticket
|
|
435
|
-
* @param html HTML字符串
|
|
436
|
-
* @returns ticket或null
|
|
437
|
-
*/
|
|
438
|
-
extractTicket(html) {
|
|
439
|
-
const match = TICKET_RE.exec(html);
|
|
440
|
-
return match ? match[1] : null;
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* 处理页面标题
|
|
444
|
-
* @param htmlStr HTML字符串
|
|
445
|
-
* @returns 页面标题
|
|
446
|
-
*/
|
|
447
|
-
handlePageTitle(htmlStr) {
|
|
448
|
-
const pageTitileRegResult = PAGE_TITLE_RE.exec(htmlStr);
|
|
449
|
-
if (pageTitileRegResult) {
|
|
450
|
-
const title = pageTitileRegResult[1];
|
|
451
|
-
console.log('login page title:', title);
|
|
452
|
-
if (lodash_1.default.includes(title, 'Update Phone Number')) {
|
|
453
|
-
// current I don't know where to update it
|
|
454
|
-
// See: https://github.com/matin/garth/issues/19
|
|
455
|
-
throw new Error('login failed (Update Phone number), please update your phone number, See: https://github.com/matin/garth/issues/19');
|
|
456
|
-
}
|
|
457
|
-
return title;
|
|
458
|
-
}
|
|
459
|
-
else {
|
|
460
|
-
return '';
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
handleAccountLocked(htmlStr) {
|
|
464
|
-
const accountLockedRegResult = ACCOUNT_LOCKED_RE.exec(htmlStr);
|
|
465
|
-
if (accountLockedRegResult) {
|
|
466
|
-
const msg = accountLockedRegResult[1];
|
|
467
|
-
console.error(msg);
|
|
468
|
-
throw new Error('login failed (AccountLocked), please open connect web page to unlock your account');
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
async refreshOauth2Token() {
|
|
472
|
-
try {
|
|
473
|
-
if (!this.OAUTH_CONSUMER) {
|
|
474
|
-
await this.fetchOauthConsumer();
|
|
475
|
-
}
|
|
476
|
-
if (!this.oauth2Token || !this.oauth1Token) {
|
|
477
|
-
throw new Error('Missing required tokens for refresh');
|
|
478
|
-
}
|
|
479
|
-
const oauth1 = {
|
|
480
|
-
oauth: this.getOauthClient(this.OAUTH_CONSUMER),
|
|
481
|
-
token: this.oauth1Token
|
|
482
|
-
};
|
|
483
|
-
await this.exchange(oauth1);
|
|
484
|
-
console.log(`「${this.config.username}」in「${this.url.domain}」 OAuth2 token refreshed successfully`);
|
|
485
|
-
}
|
|
486
|
-
catch (error) {
|
|
487
|
-
console.error('Failed to refresh OAuth2 token:', error);
|
|
488
|
-
throw error;
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
async getOauth1Token(ticket) {
|
|
492
|
-
if (!this.OAUTH_CONSUMER) {
|
|
493
|
-
throw new Error('No OAUTH_CONSUMER');
|
|
494
|
-
}
|
|
495
|
-
const params = {
|
|
496
|
-
ticket,
|
|
497
|
-
'login-url': this.url.GARMIN_SSO_EMBED,
|
|
498
|
-
'accepts-mfa-tokens': true
|
|
499
|
-
};
|
|
500
|
-
const url = `${this.url.OAUTH_URL}/preauthorized?${qs_1.default.stringify(params)}`;
|
|
501
|
-
const oauth = this.getOauthClient(this.OAUTH_CONSUMER);
|
|
502
|
-
const step4RequestData = {
|
|
503
|
-
url: url,
|
|
504
|
-
method: 'GET'
|
|
505
|
-
};
|
|
506
|
-
const headers = oauth.toHeader(oauth.authorize(step4RequestData));
|
|
507
|
-
// console.log('getOauth1Token - headers:', headers);
|
|
508
|
-
const response = await this.get(url, {
|
|
509
|
-
headers: {
|
|
510
|
-
...headers,
|
|
511
|
-
'User-Agent': USER_AGENT_CONNECTMOBILE
|
|
512
|
-
}
|
|
513
|
-
});
|
|
514
|
-
// console.log('getOauth1Token - response:', response);
|
|
515
|
-
const token = qs_1.default.parse(response);
|
|
516
|
-
// console.log('getOauth1Token - token:', token);
|
|
517
|
-
this.oauth1Token = token;
|
|
518
|
-
return { token, oauth };
|
|
519
|
-
}
|
|
520
|
-
getOauthClient(consumer) {
|
|
521
|
-
const oauth = new oauth_1_0a_1.default({
|
|
522
|
-
consumer: consumer,
|
|
523
|
-
signature_method: 'HMAC-SHA1',
|
|
524
|
-
hash_function(base_string, key) {
|
|
525
|
-
return node_crypto_1.default
|
|
526
|
-
.createHmac('sha1', key)
|
|
527
|
-
.update(base_string)
|
|
528
|
-
.digest('base64');
|
|
529
|
-
}
|
|
530
|
-
});
|
|
531
|
-
return oauth;
|
|
532
|
-
}
|
|
533
|
-
//
|
|
534
|
-
async exchange(oauth1) {
|
|
535
|
-
const token = {
|
|
536
|
-
key: oauth1.token.oauth_token,
|
|
537
|
-
secret: oauth1.token.oauth_token_secret
|
|
538
|
-
};
|
|
539
|
-
// console.log('exchange - token:', token);
|
|
540
|
-
const baseUrl = `${this.url.OAUTH_URL}/exchange/user/2.0`;
|
|
541
|
-
const requestData = {
|
|
542
|
-
url: baseUrl,
|
|
543
|
-
method: 'POST',
|
|
544
|
-
data: null
|
|
545
|
-
};
|
|
546
|
-
const step5AuthData = oauth1.oauth.authorize(requestData, token);
|
|
547
|
-
// console.log('login - step5AuthData:', step5AuthData);
|
|
548
|
-
const url = `${baseUrl}?${qs_1.default.stringify(step5AuthData)}`;
|
|
549
|
-
// console.log('exchange - url:', url);
|
|
550
|
-
this.oauth2Token = undefined;
|
|
551
|
-
const response = await this.post(url, null, {
|
|
552
|
-
headers: {
|
|
553
|
-
'User-Agent': USER_AGENT_CONNECTMOBILE,
|
|
554
|
-
'Content-Type': 'application/x-www-form-urlencoded'
|
|
555
|
-
}
|
|
556
|
-
});
|
|
557
|
-
// console.log('exchange - response:', response);
|
|
558
|
-
this.oauth2Token = this.setOauth2TokenExpiresAt(response);
|
|
559
|
-
// console.log('exchange - oauth2Token:', this.oauth2Token);
|
|
560
|
-
}
|
|
561
|
-
setOauth2TokenExpiresAt(token) {
|
|
562
|
-
const now = luxon_1.DateTime.now();
|
|
563
|
-
const expiresAt = now.plus({ seconds: token.expires_in });
|
|
564
|
-
const refreshTokenExpiresAt = now.plus({
|
|
565
|
-
seconds: token.refresh_token_expires_in
|
|
566
|
-
});
|
|
567
|
-
return {
|
|
568
|
-
...token,
|
|
569
|
-
last_update_date: now.toLocal().toString(),
|
|
570
|
-
expires_date: expiresAt.toLocal().toString(),
|
|
571
|
-
expires_at: expiresAt.toSeconds(),
|
|
572
|
-
refresh_token_expires_at: refreshTokenExpiresAt.toSeconds()
|
|
573
|
-
};
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
exports.HttpClient = HttpClient;
|
|
577
|
-
//# sourceMappingURL=HttpClientV1.js.map
|
|
1
|
+
'use strict';(function(_0x36fad0,_0x3457bf){const _0x1d6dd4=a5_0x5e2a,_0x4b35fd=_0x36fad0();while(!![]){try{const _0x1ba12f=-parseInt(_0x1d6dd4(0x249))/0x1*(parseInt(_0x1d6dd4(0x296))/0x2)+-parseInt(_0x1d6dd4(0x28e))/0x3+parseInt(_0x1d6dd4(0x288))/0x4*(parseInt(_0x1d6dd4(0x24d))/0x5)+parseInt(_0x1d6dd4(0x22b))/0x6+parseInt(_0x1d6dd4(0x284))/0x7*(-parseInt(_0x1d6dd4(0x251))/0x8)+-parseInt(_0x1d6dd4(0x26c))/0x9*(parseInt(_0x1d6dd4(0x27a))/0xa)+-parseInt(_0x1d6dd4(0x1e6))/0xb*(-parseInt(_0x1d6dd4(0x202))/0xc);if(_0x1ba12f===_0x3457bf)break;else _0x4b35fd['push'](_0x4b35fd['shift']());}catch(_0x211597){_0x4b35fd['push'](_0x4b35fd['shift']());}}}(a5_0x1fd0,0x8aad2));function a5_0x18e4(_0x53d607,_0x1f2ec4){_0x53d607=_0x53d607-0x154;const _0x3d594c=a5_0x5d44();let _0x57ba86=_0x3d594c[_0x53d607];return _0x57ba86;}(function(_0x2ee642,_0x34c108){const _0x23d316=a5_0x5e2a,_0x3302b6=a5_0x18e4,_0x31ddcf=_0x2ee642();while(!![]){try{const _0x53847a=-parseInt(_0x3302b6(0x211))/0x1+-parseInt(_0x3302b6(0x1ba))/0x2*(-parseInt(_0x3302b6(0x1fa))/0x3)+parseInt(_0x3302b6(0x1b7))/0x4+-parseInt(_0x3302b6(0x18e))/0x5+parseInt(_0x3302b6(0x1ab))/0x6+parseInt(_0x3302b6(0x1b8))/0x7*(-parseInt(_0x3302b6(0x200))/0x8)+parseInt(_0x3302b6(0x168))/0x9*(parseInt(_0x3302b6(0x15e))/0xa);if(_0x53847a===_0x34c108)break;else _0x31ddcf[_0x23d316(0x29c)](_0x31ddcf['shift']());}catch(_0x2d27af){_0x31ddcf[_0x23d316(0x29c)](_0x31ddcf['shift']());}}}(a5_0x5d44,0x28e75),function(_0x3b8c2f,_0x1bf3cf){const _0x4a1b86=a5_0x18e4,_0x112052=a5_0x46bf,_0x3c4cc8=_0x3b8c2f();while(!![]){try{const _0x1e1a03=parseInt(_0x112052(0x198))/0x1+-parseInt(_0x112052(0x1ed))/0x2+-parseInt(_0x112052(0x19f))/0x3*(parseInt(_0x112052(0x1e1))/0x4)+-parseInt(_0x112052(0x1d6))/0x5*(-parseInt(_0x112052(0x1c8))/0x6)+parseInt(_0x112052(0x1a4))/0x7+-parseInt(_0x112052(0x234))/0x8*(parseInt(_0x112052(0x21c))/0x9)+parseInt(_0x112052(0x1db))/0xa;if(_0x1e1a03===_0x1bf3cf)break;else _0x3c4cc8[_0x4a1b86(0x20a)](_0x3c4cc8['shift']());}catch(_0x47b04e){_0x3c4cc8['push'](_0x3c4cc8[_0x4a1b86(0x1c5)]());}}}(a5_0x3ef1,0x190d5));const a5_0x548147=a5_0x11aa;function a5_0x1fd0(){const _0x39c0a9=['Missing\x20required\x20tokens\x20for\x20refresh','base64','Success','6oTnHfL','application/x-www-form-urlencoded','2795504WIpRRb','put','setCommonHeader','setOauth2TokenExpiresAt','3rXsDBW','33WXDKap','includes','ticket=','4587951dxfFTq','Update\x20Phone\x20Number','toLowerCase','getOauth1Token','oauth_token_secret','9796136StraUp','无法从登录页面提取CSRF令牌','handleMfaVerification','GarminConnect','Enter\x20security\x20code','extractTicket','exchange','node:crypto','login_response','HTTP\x20Error:','code','now','checkTokenVaild','登录失败:','oauth2Token','登录失败,页面标题:\x20','16388449NUdKuC','1560958GXDZiR','3018753GrnEWT','MFA验证响应头\x20Location:','signin','4445588TCcouJ','embed','MFA验证完成,响应长度:','24082vXPqal','528952JGGjBs','检测到需要MFA验证,页面标题:','set-cookie','message','var\x20statuss*=s*\x22([^\x22]*)\x22','handleError','status','oauth_token','Authorization','refreshOauth2Token','保存调试文件失败:','HTTP\x20Error\x20(','domain','59014YrEKhO','consumer_key','exec','):\x20','HttpClient','手动获取重定向页面长度:','12WevPQT','5314496OYwCUo','64436Eotixp','598hIIDrj','Bearer\x20','ticket=([^\x22]+)\x22','digest','」in「','oauth-1.0a','__importDefault','axios','UNAUTHORIZED','plus','authorize','136lLqqAa','mfa_verification_response','Failed\x20to\x20refresh\x20OAuth2\x20token:','响应数据不包含成功标识,手动获取重定向后的页面内容','手动获取重定向页面状态码:','form-data','1382675CjMXFs','370450KVYGKg','join','get','>\x20HTTP\x20Error响应跟踪\x20-\x20URL:','87976JiWxHp','>\x20响应跟踪\x20-\x20URL:','响应跟踪\x20-\x20重定向次数:','1294840rGJXlH','_retry','ECONNABORTED','expires_at','/mfa/verify','expires_in','fetchOauthConsumer','53249HbXLpD','GARMIN_SSO','signin_page','HTTP\x20Error响应跟踪\x20-\x20Location头:','mfa-code','path','6037320lnxXVp','post','243236KvbGrh','1189kuVIgB','GET','48505996VHWiVi','响应跟踪\x20-\x20Location头:','_csrf','delete','已保存调试文件:\x20','login\x20failed\x20(AccountLocked),\x20please\x20open\x20connect\x20web\x20page\x20to\x20unlock\x20your\x20account','19174257JUOYWi','common','4651270ihYuGe','some','21092fYgiSG','1124988TLZetk','MFA验证后的页面标题:','stringify','2387614RgIHSy','DELETE','需要MFA验证但未提供回调函数','saveHtmlToFile','writeFileSync','length','登录后页面标题:','Network\x20error\x20or\x20unknown\x20error\x20occurred','响应跟踪\x20-\x20检测到重定向状态码:','POST','toLocal','1CivWgA','gauth-widget','Request\x20Timeout','data','7325cJRuNI','default','append','GCM-iOS-5.7.2.1','77992XXsdoj','7YfGpgB','9VjDKWO','create','config','97fQGpya','8PLKXsr','POST请求失败:','debug','isAxiosError','login\x20failed\x20(Update\x20Phone\x20number),\x20please\x20update\x20your\x20phone\x20number,\x20See:\x20\x20https://github.com/matin/garth/issues/19','consumer_secret','object','无法从响应中提取ticket','12wAYzNO','9rfhaJc','https://thegarth.s3.amazonaws.com/oauth_consumer.json','request','MFA验证最终URL:','name=\x22_csrf\x22\x5cs+value=\x22(.+?)\x22','each','1094025yRxHDo','log','sha1','MFA验证响应状态码:','1991896plNQvy','/signin','2456703oZdRHO','existsSync','2824588SxbnGZ','com.garmin.android.apps.connectmobile','响应跟踪\x20-\x20最终URL:','cwd','88503qawNsO','login','2071370EzyjVM','Mozilla/5.0\x20(Macintosh;\x20Intel\x20Mac\x20OS\x20X\x2010_15_7)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/131.0.0.0\x20Safari/537.36','Token\x20refresh\x20failed:','refresh_token_expires_in','toSeconds','username','30vdSedE','client','119ROKMHA','lodash','GARMIN_SSO_ORIGIN','oauth','No\x20OAUTH_CONSUMER','65tbUQrI','defaults','5hBEPzi','371lrKFDX','handleAccountLocked','location','login\x20page\x20title:','724UlhBad','3509124ojofHt','MFA验证后页面标题:','/preauthorized?','luxon','access_token','150267NLDnLU','password','verifyMFA','1551870qsRCwO','Mozilla/5.0\x20(Windows\x20NT\x2010.0;\x20Win64;\x20x64)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/117.0.0.0\x20Safari/537.36','13369450UGWnXo','handleHttpError','🚀\x20-\x20login\x20-\x20csrfToken:','1615078VaBUUc','true','370446tWhIBq','\x20ms','logintoken','OAUTH_URL','push','MFA','shift','use','mkdirSync','getOauthClient','/embed','HTTP\x20Error响应跟踪\x20-\x20状态码:'];a5_0x1fd0=function(){return _0x39c0a9;};return a5_0x1fd0();}(function(_0x14012e,_0x579680){const _0x3bf20a=a5_0x46bf,_0x161b2e=a5_0x11aa,_0x4206b3=_0x14012e();while(!![]){try{const _0x837df5=parseInt(_0x161b2e(0x157))/0x1+-parseInt(_0x161b2e(0x14f))/0x2+parseInt(_0x161b2e(0x146))/0x3+-parseInt(_0x161b2e(0xc2))/0x4*(-parseInt(_0x161b2e(0x154))/0x5)+parseInt(_0x161b2e(0xf7))/0x6*(parseInt(_0x161b2e(0x14d))/0x7)+parseInt(_0x161b2e(0xd2))/0x8+-parseInt(_0x161b2e(0xaa))/0x9*(parseInt(_0x161b2e(0xa3))/0xa);if(_0x837df5===_0x579680)break;else _0x4206b3[_0x3bf20a(0x20e)](_0x4206b3[_0x3bf20a(0x192)]());}catch(_0x14afcb){_0x4206b3[_0x3bf20a(0x20e)](_0x4206b3[_0x3bf20a(0x192)]());}}}(a5_0x2a2d,0x973ee));const a5_0x1df3ca=a5_0x4ded;(function(_0x2d73a5,_0x3738bb){const _0x15ac0e=a5_0x11aa,_0x2a9140=a5_0x4ded,_0x12eef3=_0x2d73a5();while(!![]){try{const _0x1d4b5c=-parseInt(_0x2a9140(0x179))/0x1*(-parseInt(_0x2a9140(0x14d))/0x2)+-parseInt(_0x2a9140(0x166))/0x3*(-parseInt(_0x2a9140(0x173))/0x4)+-parseInt(_0x2a9140(0x12c))/0x5+parseInt(_0x2a9140(0x180))/0x6*(-parseInt(_0x2a9140(0x13e))/0x7)+-parseInt(_0x2a9140(0x170))/0x8+-parseInt(_0x2a9140(0x1b2))/0x9+parseInt(_0x2a9140(0x140))/0xa;if(_0x1d4b5c===_0x3738bb)break;else _0x12eef3[_0x15ac0e(0x14b)](_0x12eef3[_0x15ac0e(0x158)]());}catch(_0x5b331b){_0x12eef3[_0x15ac0e(0x14b)](_0x12eef3[_0x15ac0e(0x158)]());}}}(a5_0x3bc7,0xadb6e));function a5_0x2a2d(){const _0x46e2fc=a5_0x5e2a,_0x2711d9=a5_0x18e4,_0x463c2e=a5_0x46bf,_0x5210b2=[_0x463c2e(0x1b7),_0x2711d9(0x174),_0x2711d9(0x1c3),_0x463c2e(0x196),_0x463c2e(0x215),_0x463c2e(0x23d),_0x463c2e(0x20f),_0x463c2e(0x243),_0x463c2e(0x21b),_0x463c2e(0x1b9),'extractPageTitle',_0x463c2e(0x22e),_0x463c2e(0x1cc),_0x463c2e(0x235),_0x463c2e(0x1ce),_0x463c2e(0x19b),_0x2711d9(0x187),_0x463c2e(0x1c4),_0x463c2e(0x231),_0x463c2e(0x230),_0x463c2e(0x210),_0x2711d9(0x1e2),_0x463c2e(0x17f),_0x2711d9(0x1d8),_0x463c2e(0x1d2),_0x2711d9(0x182),_0x463c2e(0x23b),_0x463c2e(0x22d),_0x463c2e(0x189),_0x46e2fc(0x1e3),_0x463c2e(0x1ad),_0x463c2e(0x217),_0x463c2e(0x20c),_0x463c2e(0x1dc),_0x463c2e(0x1c3),_0x463c2e(0x23f),_0x463c2e(0x1de),_0x463c2e(0x21e),_0x463c2e(0x1d9),_0x463c2e(0x180),_0x463c2e(0x1cb),_0x2711d9(0x1a6),_0x46e2fc(0x221),_0x463c2e(0x22b),_0x463c2e(0x1ca),_0x463c2e(0x20d),_0x463c2e(0x1b2),_0x463c2e(0x238),_0x463c2e(0x240),_0x2711d9(0x1d7),_0x2711d9(0x166),_0x463c2e(0x1bf),_0x463c2e(0x1b3),_0x463c2e(0x201),_0x463c2e(0x186),_0x463c2e(0x1b6),_0x46e2fc(0x294),_0x463c2e(0x227),_0x463c2e(0x1c0),_0x2711d9(0x1e0),_0x463c2e(0x218),_0x2711d9(0x1f1),_0x463c2e(0x1ab),_0x2711d9(0x180),_0x2711d9(0x1fb),_0x463c2e(0x194),_0x463c2e(0x1d5),_0x463c2e(0x204),_0x463c2e(0x22f),_0x2711d9(0x189),_0x463c2e(0x242),_0x463c2e(0x1df),_0x46e2fc(0x239),_0x463c2e(0x224),_0x2711d9(0x219),_0x46e2fc(0x203),_0x463c2e(0x216),_0x463c2e(0x19c),_0x463c2e(0x225),_0x463c2e(0x233),'timeout',_0x463c2e(0x1f3),_0x463c2e(0x20e),_0x463c2e(0x1e8),_0x463c2e(0x1d0),_0x463c2e(0x1b8),_0x463c2e(0x195),_0x46e2fc(0x1de),_0x463c2e(0x19a),_0x463c2e(0x1a3),_0x463c2e(0x21d),_0x463c2e(0x1fd),_0x463c2e(0x1c9),_0x46e2fc(0x265),'539150cXgROO',_0x463c2e(0x192),_0x463c2e(0x1af),_0x463c2e(0x1f5),_0x463c2e(0x23a),_0x463c2e(0x228),_0x46e2fc(0x275),_0x463c2e(0x1b4),_0x463c2e(0x203),_0x463c2e(0x1be),_0x463c2e(0x1c1),_0x463c2e(0x214),_0x463c2e(0x1b0),_0x2711d9(0x205),_0x463c2e(0x1c2),_0x463c2e(0x1f2),_0x463c2e(0x1e7),_0x463c2e(0x17e),_0x463c2e(0x208),_0x463c2e(0x17d),_0x463c2e(0x1bb),_0x46e2fc(0x20f),_0x463c2e(0x1a1),_0x2711d9(0x154),_0x463c2e(0x191),_0x463c2e(0x183),_0x2711d9(0x16a),_0x463c2e(0x213),_0x463c2e(0x226),_0x463c2e(0x18a),_0x463c2e(0x244),_0x463c2e(0x185),_0x463c2e(0x1d7),_0x2711d9(0x1f9),_0x463c2e(0x1f6),_0x2711d9(0x158),_0x2711d9(0x1f2),_0x463c2e(0x1b1),_0x463c2e(0x1f9),_0x2711d9(0x19c),_0x463c2e(0x1bc),_0x46e2fc(0x1fb),_0x463c2e(0x188),_0x463c2e(0x229),'responseURL',_0x463c2e(0x193),_0x2711d9(0x197),_0x463c2e(0x187),_0x2711d9(0x1e7),_0x463c2e(0x1dd),_0x463c2e(0x1a0),_0x463c2e(0x18f),_0x2711d9(0x18b),_0x463c2e(0x1b5),_0x463c2e(0x18b),_0x463c2e(0x1ec),_0x463c2e(0x199),_0x463c2e(0x22c),_0x463c2e(0x21a),_0x463c2e(0x190),_0x2711d9(0x1eb),_0x2711d9(0x20d),_0x463c2e(0x1ae),_0x463c2e(0x241),_0x463c2e(0x1e9),_0x2711d9(0x18a),_0x2711d9(0x1e1),_0x463c2e(0x1a9),_0x463c2e(0x1fb),_0x463c2e(0x221),_0x2711d9(0x191),_0x463c2e(0x211),_0x463c2e(0x23e),_0x463c2e(0x1eb),_0x2711d9(0x207),_0x463c2e(0x209),_0x463c2e(0x1c5),_0x463c2e(0x197),_0x463c2e(0x18e),_0x46e2fc(0x1ed),_0x463c2e(0x1f1),_0x463c2e(0x1d8),_0x463c2e(0x200),_0x463c2e(0x1a7),_0x463c2e(0x1f0),_0x463c2e(0x1fe),_0x463c2e(0x18d),_0x463c2e(0x1cd),_0x463c2e(0x20b),_0x2711d9(0x1cd),_0x463c2e(0x1ee),_0x463c2e(0x22a),_0x463c2e(0x23c),_0x463c2e(0x207),_0x463c2e(0x21f),_0x463c2e(0x20a),_0x463c2e(0x223),_0x463c2e(0x1f4),_0x463c2e(0x1cf),_0x463c2e(0x1a6),'检测到重定向到包含logintoken的URL:'];return a5_0x2a2d=function(){return _0x5210b2;},a5_0x2a2d();}function a5_0x11aa(_0x23ba8d,_0x331c36){_0x23ba8d=_0x23ba8d-0x97;const _0xb6bcc6=a5_0x2a2d();let _0x3c3248=_0xb6bcc6[_0x23ba8d];return _0x3c3248;}const a5_0x2e075f=a5_0xa90e;function a5_0x5e2a(_0x442e23,_0x24bf9a){_0x442e23=_0x442e23-0x1be;const _0x1fd0d4=a5_0x1fd0();let _0x5e2a1e=_0x1fd0d4[_0x442e23];return _0x5e2a1e;}(function(_0x466d5b,_0x3f2974){const _0x29243f=a5_0x46bf,_0x5c7e06=a5_0x4ded,_0x555f59=a5_0xa90e,_0x284521=_0x466d5b();while(!![]){try{const _0x385740=parseInt(_0x555f59(0x13d))/0x1*(-parseInt(_0x555f59(0x12c))/0x2)+parseInt(_0x555f59(0x16c))/0x3*(-parseInt(_0x555f59(0x1aa))/0x4)+parseInt(_0x555f59(0x112))/0x5*(-parseInt(_0x555f59(0x11b))/0x6)+-parseInt(_0x555f59(0x182))/0x7*(-parseInt(_0x555f59(0x105))/0x8)+parseInt(_0x555f59(0x176))/0x9+parseInt(_0x555f59(0x181))/0xa+parseInt(_0x555f59(0x16a))/0xb;if(_0x385740===_0x3f2974)break;else _0x284521[_0x5c7e06(0x13b)](_0x284521[_0x5c7e06(0x1b5)]());}catch(_0x4af383){_0x284521[_0x29243f(0x20e)](_0x284521[_0x5c7e06(0x1b5)]());}}}(a5_0x76da,0xa3e23));function a5_0x163b(_0x44f692,_0x3c3e4b){_0x44f692=_0x44f692-0x1b7;const _0x1c6058=a5_0x371a();let _0x3a1f33=_0x1c6058[_0x44f692];return _0x3a1f33;}const a5_0x4ee2c5=a5_0x163b;(function(_0x4aa17f,_0x44b625){const _0x44b8d6=a5_0xa90e,_0x4400e0=a5_0x163b,_0x48ac2a=_0x4aa17f();while(!![]){try{const _0x598b3e=-parseInt(_0x4400e0(0x269))/0x1*(parseInt(_0x4400e0(0x1e4))/0x2)+-parseInt(_0x4400e0(0x1d6))/0x3+-parseInt(_0x4400e0(0x242))/0x4*(-parseInt(_0x4400e0(0x234))/0x5)+parseInt(_0x4400e0(0x20a))/0x6*(-parseInt(_0x4400e0(0x220))/0x7)+-parseInt(_0x4400e0(0x245))/0x8*(-parseInt(_0x4400e0(0x253))/0x9)+-parseInt(_0x4400e0(0x232))/0xa+parseInt(_0x4400e0(0x25f))/0xb;if(_0x598b3e===_0x44b625)break;else _0x48ac2a[_0x44b8d6(0x158)](_0x48ac2a[_0x44b8d6(0x163)]());}catch(_0x52cb2b){_0x48ac2a[_0x44b8d6(0x158)](_0x48ac2a[_0x44b8d6(0x163)]());}}}(a5_0x371a,0xcacb5));function a5_0xa90e(_0x342438,_0x407862){_0x342438=_0x342438-0x100;const _0x40d8b2=a5_0x76da();let _0x141f27=_0x40d8b2[_0x342438];return _0x141f27;}var __importDefault=this&&this[a5_0x4ee2c5(0x20e)]||function(_0x5102ca){const _0x45dadb=a5_0x4ee2c5;return _0x5102ca&&_0x5102ca[_0x45dadb(0x1cb)]?_0x5102ca:{'default':_0x5102ca};};Object[a5_0x2e075f(0x186)](exports,a5_0x4ee2c5(0x1cb),{'value':!![]}),exports[a5_0x4ee2c5(0x21f)]=void 0x0;function a5_0x3bc7(){const _0x5bbcf8=a5_0x5e2a,_0x332f2e=a5_0x18e4,_0x5c7d82=a5_0x46bf,_0x3db529=a5_0x11aa,_0x102ead=[_0x3db529(0x97),_0x5c7d82(0x232),_0x3db529(0xa6),_0x3db529(0x145),_0x3db529(0xff),_0x3db529(0xf4),_0x3db529(0xd5),_0x3db529(0x114),_0x5c7d82(0x204),_0x3db529(0x110),_0x3db529(0x12b),_0x5c7d82(0x1fa),_0x3db529(0x151),_0x5c7d82(0x220),_0x5c7d82(0x1ac),_0x3db529(0x120),_0x3db529(0x105),_0x3db529(0xbe),_0x332f2e(0x193),_0x5c7d82(0x212),_0x3db529(0x130),_0x3db529(0x125),_0x5c7d82(0x1aa),_0x5c7d82(0x205),_0x3db529(0x10f),_0x5c7d82(0x222),_0x3db529(0xf1),_0x332f2e(0x217),_0x5c7d82(0x206),_0x5c7d82(0x182),_0x3db529(0xd0),_0x3db529(0xdd),_0x3db529(0x14b),_0x3db529(0x9f),_0x3db529(0x11b),_0x332f2e(0x19a),_0x3db529(0xe5),_0x3db529(0xc3),_0x3db529(0xfa),_0x3db529(0x100),_0x332f2e(0x20f),_0x3db529(0xc8),_0x3db529(0x10c),_0x3db529(0x121),_0x3db529(0x13f),_0x3db529(0xf9),_0x3db529(0x140),_0x3db529(0x134),_0x3db529(0x108),_0x3db529(0x133),_0x332f2e(0x17a),_0x5c7d82(0x1ea),_0x5c7d82(0x245),_0x5c7d82(0x1f7),_0x3db529(0xc9),_0x5c7d82(0x184),_0x3db529(0xd6),_0x3db529(0xaf),_0x3db529(0x102),_0x3db529(0x122),_0x3db529(0x104),_0x3db529(0xe3),_0x3db529(0xa0),_0x3db529(0xa2),_0x3db529(0x9a),_0x5c7d82(0x1e4),_0x3db529(0xe4),_0x3db529(0x156),_0x3db529(0xa7),_0x3db529(0x12a),_0x3db529(0x128),_0x3db529(0x115),_0x3db529(0x101),_0x3db529(0xea),_0x3db529(0xad),_0x3db529(0x12d),_0x5c7d82(0x239),_0x3db529(0xd4),_0x3db529(0xed),_0x3db529(0xb2),_0x5c7d82(0x1e5),_0x3db529(0xef),_0x3db529(0x106),_0x3db529(0x150),_0x3db529(0xdc),_0x3db529(0xd3),_0x3db529(0x14a),_0x3db529(0xfb),_0x3db529(0xce),_0x5c7d82(0x18c),_0x5c7d82(0x19e),_0x3db529(0x12f),_0x3db529(0xbb),_0x3db529(0x10a),_0x3db529(0xb5),_0x5c7d82(0x1c7),_0x5c7d82(0x181),_0x3db529(0xc7),_0x3db529(0xe1),_0x3db529(0x99),_0x3db529(0xdf),_0x5bbcf8(0x1c7),_0x3db529(0x14e),_0x3db529(0xcc),_0x5c7d82(0x1e2),_0x3db529(0xc6),_0x3db529(0x137),_0x3db529(0xcd),_0x3db529(0x153),_0x3db529(0x11f),_0x3db529(0x124),_0x3db529(0xda),_0x3db529(0x132),_0x3db529(0x103),_0x3db529(0xfc),_0x5c7d82(0x1e3),_0x5c7d82(0x1f8),_0x3db529(0xb7),_0x332f2e(0x216),_0x3db529(0xab),_0x332f2e(0x17c),_0x3db529(0x144),_0x3db529(0xd1),_0x5bbcf8(0x1cb),_0x3db529(0xc4),_0x3db529(0xbd),_0x3db529(0x9d),_0x5c7d82(0x1e0),_0x3db529(0x113),_0x3db529(0xee),_0x3db529(0x10b),_0x3db529(0x126),'/exchange/user/2.0',_0x3db529(0x111),_0x3db529(0x11e),_0x5c7d82(0x19d),_0x3db529(0xb1),_0x3db529(0xa9),_0x332f2e(0x1d2),_0x3db529(0x13b),_0x3db529(0x109),_0x3db529(0x141),_0x3db529(0x14c),_0x3db529(0x136),_0x3db529(0x118),_0x3db529(0x11c),_0x3db529(0x152),_0x3db529(0x13d),_0x3db529(0xf2),_0x3db529(0xf6),_0x3db529(0x138),_0x3db529(0x98),_0x5c7d82(0x1a8),_0x3db529(0xbc),_0x3db529(0x158),_0x3db529(0x107),_0x3db529(0xca),_0x5c7d82(0x1d1),_0x3db529(0xd7),_0x3db529(0xcf),_0x5c7d82(0x1d3),_0x3db529(0x10e),_0x3db529(0x116),_0x3db529(0x143),_0x3db529(0xd9),_0x3db529(0xe2),_0x3db529(0xb4),_0x3db529(0x13a),_0x3db529(0xb6),_0x3db529(0x112),_0x3db529(0xb3),_0x5c7d82(0x1d4),_0x3db529(0x149),_0x3db529(0xd8),_0x5c7d82(0x1a5),_0x5c7d82(0x236),_0x3db529(0xb8),_0x3db529(0xac),_0x3db529(0xae),_0x3db529(0xdb),_0x3db529(0xc1),_0x3db529(0x129),_0x3db529(0xa8),_0x3db529(0xbf),_0x3db529(0xe7),_0x3db529(0xa4),_0x3db529(0x139),_0x5c7d82(0x1ba),_0x332f2e(0x198),_0x3db529(0x127),_0x332f2e(0x1a2),_0x3db529(0x147),_0x3db529(0x11d),_0x3db529(0xf5),_0x5c7d82(0x1ff),_0x3db529(0x9b),_0x3db529(0x119),_0x3db529(0x12c)];return a5_0x3bc7=function(){return _0x102ead;},a5_0x3bc7();}const axios_1=__importDefault(require(a5_0x2e075f(0x1a4))),tough_cookie_1=require(a5_0x4ee2c5(0x1f4)),form_data_1=__importDefault(require(a5_0x4ee2c5(0x22e))),lodash_1=__importDefault(require(a5_0x4ee2c5(0x1c9))),luxon_1=require(a5_0x4ee2c5(0x25d)),oauth_1_0a_1=__importDefault(require(a5_0x4ee2c5(0x1e9))),qs_1=__importDefault(require('qs')),node_crypto_1=__importDefault(require(a5_0x4ee2c5(0x247))),CSRF_RE=new RegExp(a5_0x4ee2c5(0x1e6)),TICKET_RE=new RegExp(a5_0x4ee2c5(0x1d3)),ACCOUNT_LOCKED_RE=new RegExp(a5_0x4ee2c5(0x238)),PAGE_TITLE_RE=new RegExp(a5_0x4ee2c5(0x21a)),USER_AGENT_CONNECTMOBILE=a5_0x4ee2c5(0x1d2),USER_AGENT_CONNECT_IOS=a5_0x4ee2c5(0x261),USER_AGENT_BROWSER=a5_0x2e075f(0x126),USER_AGENT_BROWSER_MAC=a5_0x4ee2c5(0x255),OAUTH_CONSUMER_URL=a5_0x2e075f(0x184),HTTP_STATUS={'UNAUTHORIZED':0x191};function a5_0x4ded(_0x11e3e8,_0x1af276){_0x11e3e8=_0x11e3e8-0x102;const _0x1d1124=a5_0x3bc7();let _0x5a3e1c=_0x1d1124[_0x11e3e8];return _0x5a3e1c;}function a5_0x371a(){const _0x5a837b=a5_0x46bf,_0x1357ac=a5_0x11aa,_0x10e493=a5_0x4ded,_0x4f9474=a5_0x2e075f,_0x3002ac=[_0x4f9474(0x180),_0x4f9474(0x1af),_0x4f9474(0x14d),_0x4f9474(0x14c),_0x4f9474(0x114),_0x4f9474(0x18a),_0x4f9474(0x17d),_0x4f9474(0x108),_0x4f9474(0x190),_0x4f9474(0x135),_0x4f9474(0x18e),_0x10e493(0x1a8),_0x4f9474(0x13e),_0x4f9474(0x100),_0x4f9474(0x149),_0x4f9474(0x10b),_0x10e493(0x1a9),_0x4f9474(0x109),_0x10e493(0x18a),_0x1357ac(0xec),_0x1357ac(0xf0),_0x4f9474(0x138),_0x1357ac(0x11a),_0x4f9474(0x168),_0x4f9474(0x15a),_0x4f9474(0x195),_0x4f9474(0x166),_0x4f9474(0x1ae),_0x10e493(0x198),_0x10e493(0x139),_0x4f9474(0x151),_0x4f9474(0x141),_0x5a837b(0x1da),_0x1357ac(0xc6),_0x4f9474(0x142),_0x4f9474(0x113),_0x10e493(0x117),_0x4f9474(0x124),_0x10e493(0x131),_0x4f9474(0x101),_0x4f9474(0x17e),_0x4f9474(0x19c),_0x10e493(0x11e),_0x4f9474(0x197),_0x1357ac(0xb0),_0x10e493(0x1ba),_0x4f9474(0x17a),_0x5a837b(0x202),_0x1357ac(0xaf),_0x4f9474(0x19a),_0x4f9474(0x119),_0x4f9474(0x187),_0x4f9474(0x10d),_0x4f9474(0x10a),_0x10e493(0x112),_0x4f9474(0x18c),_0x1357ac(0xcb),_0x10e493(0x114),_0x4f9474(0x178),_0x4f9474(0x150),'3687900mgLmWY',_0x10e493(0x10e),_0x4f9474(0x19b),_0x10e493(0x189),_0x10e493(0x1bc),_0x5a837b(0x1ef),_0x4f9474(0x1a2),_0x10e493(0x15a),_0x4f9474(0x129),_0x1357ac(0x113),_0x10e493(0x118),_0x4f9474(0x19e),_0x4f9474(0x133),_0x4f9474(0x146),_0x10e493(0x11f),_0x4f9474(0x12d),_0x4f9474(0x194),_0x4f9474(0x159),_0x4f9474(0x139),_0x4f9474(0x18f),_0x4f9474(0x15c),_0x4f9474(0x11f),_0x4f9474(0x15d),_0x4f9474(0x118),_0x4f9474(0x153),_0x4f9474(0x14e),_0x10e493(0x1b0),_0x10e493(0x19d),_0x4f9474(0x11c),_0x4f9474(0x16f),_0x4f9474(0x1a7),_0x4f9474(0x128),_0x4f9474(0x125),_0x4f9474(0x106),_0x4f9474(0x13f),_0x10e493(0x15b),_0x4f9474(0x155),_0x4f9474(0x157),_0x4f9474(0x147),_0x10e493(0x11b),_0x4f9474(0x15f),_0x4f9474(0x173),_0x4f9474(0x116),_0x4f9474(0x140),_0x1357ac(0xb6),_0x10e493(0x193),_0x4f9474(0x19f),_0x10e493(0x177),_0x4f9474(0x145),_0x10e493(0x102),_0x10e493(0x119),_0x4f9474(0x132),_0x4f9474(0x193),_0x4f9474(0x152),_0x4f9474(0x196),_0x10e493(0x10f),_0x4f9474(0x115),_0x4f9474(0x172),_0x10e493(0x1b6),_0x4f9474(0x177),_0x4f9474(0x148),_0x4f9474(0x17b),_0x4f9474(0x18d),_0x10e493(0x1ad),_0x4f9474(0x17c),_0x4f9474(0x1a6),_0x4f9474(0x16d),_0x10e493(0x144),_0x10e493(0x15e),_0x1357ac(0x155),_0x10e493(0x11c),_0x4f9474(0x13b),_0x4f9474(0x120),_0x10e493(0x141),_0x4f9474(0x14f),_0x4f9474(0x175),_0x4f9474(0x1b0),_0x4f9474(0x14b),_0x10e493(0x146),_0x1357ac(0xa1),_0x4f9474(0x15b),_0x10e493(0x149),_0x4f9474(0x137),_0x4f9474(0x121),_0x4f9474(0x15e),_0x4f9474(0x179),_0x4f9474(0x13c),_0x4f9474(0x199),_0x4f9474(0x11d),_0x4f9474(0x10f),_0x4f9474(0x110),_0x4f9474(0x130),_0x4f9474(0x102),_0x10e493(0x1ab),_0x4f9474(0x143),_0x10e493(0x14b),_0x4f9474(0x11e),_0x4f9474(0x156),_0x4f9474(0x192),_0x4f9474(0x1ac),_0x4f9474(0x16b),_0x4f9474(0x171),_0x4f9474(0x12a),_0x4f9474(0x167),_0x10e493(0x186),_0x4f9474(0x1a3),_0x4f9474(0x1ab),_0x4f9474(0x191),_0x4f9474(0x160),_0x4f9474(0x1a1),_0x4f9474(0x170),_0x10e493(0x14e),_0x4f9474(0x183),_0x4f9474(0x131),_0x10e493(0x16f),_0x4f9474(0x12b),_0x4f9474(0x123),_0x4f9474(0x174),_0x1357ac(0xf8),_0x4f9474(0x154),_0x10e493(0x13d)];return a5_0x371a=function(){return _0x3002ac;},a5_0x371a();}let tokenRefreshPromise=null,refreshSubscribers=[];function a5_0x76da(){const _0x2ada80=a5_0x18e4,_0xc9a6f5=a5_0x46bf,_0x479b58=a5_0x11aa,_0x30f07e=a5_0x4ded,_0x1dd00d=[_0x30f07e(0x12d),_0x479b58(0xe9),_0x30f07e(0x174),_0x30f07e(0x148),_0xc9a6f5(0x1e6),_0x30f07e(0x124),_0x30f07e(0x121),_0x30f07e(0x199),_0x30f07e(0x1a7),_0x30f07e(0x175),_0x30f07e(0x167),_0x30f07e(0x1a5),_0x479b58(0xb9),_0x30f07e(0x1a9),_0x479b58(0xeb),_0x30f07e(0x185),_0x30f07e(0x133),_0x30f07e(0x129),_0x30f07e(0x1ae),_0x30f07e(0x1a6),_0x30f07e(0x107),_0x30f07e(0x1c4),_0x30f07e(0x15c),_0x479b58(0x142),_0x30f07e(0x1b3),_0x30f07e(0x112),_0x30f07e(0x113),_0x30f07e(0x111),_0x30f07e(0x19e),_0x30f07e(0x17a),_0x30f07e(0x16b),_0x30f07e(0x106),_0x30f07e(0x1c6),_0x30f07e(0x18b),_0x30f07e(0x190),_0x30f07e(0x14a),_0x30f07e(0x1b4),_0x30f07e(0x10c),_0xc9a6f5(0x23b),_0x30f07e(0x1a1),_0x479b58(0xe6),_0x30f07e(0x161),_0x30f07e(0x1c7),_0x30f07e(0x1ac),_0x30f07e(0x109),_0x479b58(0x9e),_0xc9a6f5(0x1fc),_0x30f07e(0x154),_0x30f07e(0x17d),_0x30f07e(0x10b),_0x30f07e(0x142),_0x30f07e(0x165),_0x30f07e(0x163),_0x479b58(0x123),_0x2ada80(0x1b4),_0x30f07e(0x19f),_0x479b58(0xde),_0x30f07e(0x1a3),_0x30f07e(0x104),_0x30f07e(0x17c),_0x30f07e(0x187),_0x30f07e(0x1b9),_0x30f07e(0x171),_0x479b58(0xdb),_0x30f07e(0x191),_0xc9a6f5(0x1a2),_0x479b58(0xa5),_0x30f07e(0x10e),_0x30f07e(0x188),_0x30f07e(0x1a2),_0x30f07e(0x12e),_0x30f07e(0x18e),_0x30f07e(0x122),_0x30f07e(0x132),_0x30f07e(0x136),_0x30f07e(0x10a),_0x30f07e(0x128),_0xc9a6f5(0x1c6),_0x30f07e(0x103),_0x30f07e(0x156),_0x30f07e(0x145),_0x30f07e(0x162),_0x30f07e(0x1a0),_0x30f07e(0x1bb),_0x30f07e(0x125),_0x30f07e(0x169),_0x30f07e(0x18c),_0x30f07e(0x1c0),_0x30f07e(0x105),_0x30f07e(0x17e),_0x479b58(0xd4),_0xc9a6f5(0x1bd),_0x479b58(0xba),_0x30f07e(0x130),_0x30f07e(0x1bf),_0x30f07e(0x176),_0x30f07e(0x158),_0x30f07e(0x123),_0x30f07e(0x16a),_0x30f07e(0x15f),_0x30f07e(0x19c),_0x30f07e(0x157),_0x30f07e(0x16e),_0x30f07e(0x12a),_0x479b58(0x135),_0x30f07e(0x110),_0x30f07e(0x15d),_0x30f07e(0x1b8),_0x30f07e(0x150),_0x30f07e(0x13b),_0x479b58(0x13e),_0x30f07e(0x152),_0x30f07e(0x182),_0x30f07e(0x13f),_0x30f07e(0x1a4),_0x30f07e(0x17b),_0x30f07e(0x147),_0x30f07e(0x1be),_0x30f07e(0x12f),_0x479b58(0x117),_0x479b58(0x158),_0x30f07e(0x17f),_0x30f07e(0x183),_0x479b58(0x131),_0x479b58(0x9c),_0x479b58(0xf3),_0x30f07e(0x184),_0x30f07e(0x194),_0x30f07e(0x137),_0x30f07e(0x138),_0x479b58(0x10d),_0x479b58(0x119),_0x30f07e(0x116),_0x30f07e(0x1c1),_0x30f07e(0x18d),_0x30f07e(0x10d),_0x30f07e(0x134),_0x30f07e(0x1bd),_0x30f07e(0x126),_0x479b58(0xfd),_0x479b58(0xe8),_0x479b58(0x12e),_0x30f07e(0x14c),_0x30f07e(0x192),_0x30f07e(0x1c2),_0x30f07e(0x19a),_0x479b58(0xa0),_0x30f07e(0x153),_0x30f07e(0x131),_0x30f07e(0x127),_0x30f07e(0x120),_0x479b58(0x159),_0x30f07e(0x164),_0x30f07e(0x18f),_0x30f07e(0x155),_0x30f07e(0x181),_0x30f07e(0x196),_0x30f07e(0x12b),_0x479b58(0xc5),_0x30f07e(0x1b7),_0x479b58(0xfa),_0x30f07e(0x14f),_0x479b58(0xfe),_0x30f07e(0x115),_0x30f07e(0x135),_0x30f07e(0x13a),_0x30f07e(0x1af),_0x30f07e(0x13c),_0x30f07e(0x160),_0x30f07e(0x16c),_0x479b58(0x148),_0x30f07e(0x16d),_0x30f07e(0x11a),_0x30f07e(0x178),_0x30f07e(0x151),_0x30f07e(0x1b1),_0x30f07e(0x197)];return a5_0x76da=function(){return _0x1dd00d;},a5_0x76da();}function a5_0x5d44(){const _0x5bc2e1=a5_0x5e2a,_0x457c2c=[_0x5bc2e1(0x1da),_0x5bc2e1(0x299),_0x5bc2e1(0x269),_0x5bc2e1(0x1d3),_0x5bc2e1(0x267),_0x5bc2e1(0x24c),_0x5bc2e1(0x293),_0x5bc2e1(0x1f5),_0x5bc2e1(0x20c),_0x5bc2e1(0x21a),'MFA验证后未获得成功页面,当前页面:\x20',_0x5bc2e1(0x1f3),'finally',_0x5bc2e1(0x1d2),_0x5bc2e1(0x27b),_0x5bc2e1(0x291),'parse',_0x5bc2e1(0x1df),_0x5bc2e1(0x290),_0x5bc2e1(0x23d),_0x5bc2e1(0x200),_0x5bc2e1(0x228),_0x5bc2e1(0x217),_0x5bc2e1(0x1e1),'16NjNGRA',_0x5bc2e1(0x1e8),'No\x20OAuth2\x20token\x20available',_0x5bc2e1(0x1eb),_0x5bc2e1(0x229),_0x5bc2e1(0x250),'OAUTH_CONSUMER','3551967fvmZoe',_0x5bc2e1(0x255),'HTTP\x20Error响应跟踪\x20-\x20最终URL:',_0x5bc2e1(0x1d1),_0x5bc2e1(0x26a),_0x5bc2e1(0x24e),_0x5bc2e1(0x201),_0x5bc2e1(0x263),_0x5bc2e1(0x1e9),_0x5bc2e1(0x1dd),_0x5bc2e1(0x282),_0x5bc2e1(0x261),_0x5bc2e1(0x273),'222066VBjYvi',_0x5bc2e1(0x22a),_0x5bc2e1(0x253),'mfa_page',_0x5bc2e1(0x1e2),_0x5bc2e1(0x1f9),_0x5bc2e1(0x20d),_0x5bc2e1(0x21d),_0x5bc2e1(0x224),_0x5bc2e1(0x25d),_0x5bc2e1(0x1f6),_0x5bc2e1(0x1cc),_0x5bc2e1(0x1ef),_0x5bc2e1(0x27c),_0x5bc2e1(0x295),_0x5bc2e1(0x1fc),_0x5bc2e1(0x270),'extractCsrfToken',_0x5bc2e1(0x298),_0x5bc2e1(0x25f),_0x5bc2e1(0x272),_0x5bc2e1(0x1c2),_0x5bc2e1(0x218),_0x5bc2e1(0x235),_0x5bc2e1(0x222),_0x5bc2e1(0x205),_0x5bc2e1(0x1be),_0x5bc2e1(0x27e),_0x5bc2e1(0x279),'url',_0x5bc2e1(0x20b),_0x5bc2e1(0x1ea),_0x5bc2e1(0x22c),_0x5bc2e1(0x238),_0x5bc2e1(0x28c),_0x5bc2e1(0x231),_0x5bc2e1(0x232),_0x5bc2e1(0x27f),_0x5bc2e1(0x21e),_0x5bc2e1(0x23c),_0x5bc2e1(0x1f2),_0x5bc2e1(0x29d),_0x5bc2e1(0x25b),_0x5bc2e1(0x1c4),_0x5bc2e1(0x262),_0x5bc2e1(0x1c8),_0x5bc2e1(0x1e5),'interceptors',_0x5bc2e1(0x207),_0x5bc2e1(0x223),_0x5bc2e1(0x22f),'无法从MFA页面提取CSRF令牌',_0x5bc2e1(0x1fd),_0x5bc2e1(0x245),'toHeader',_0x5bc2e1(0x248),_0x5bc2e1(0x234),_0x5bc2e1(0x266),_0x5bc2e1(0x1d8),_0x5bc2e1(0x1f8),'36265qZwSFh',_0x5bc2e1(0x254),_0x5bc2e1(0x1d7),'createHmac','Enter\x20MFA\x20code',_0x5bc2e1(0x292),'Token\x20expired!',_0x5bc2e1(0x1fa),'__esModule',_0x5bc2e1(0x281),'HMAC-SHA1',_0x5bc2e1(0x278),_0x5bc2e1(0x1dc),_0x5bc2e1(0x1ff),'token','MFA验证失败:',_0x5bc2e1(0x1d4),_0x5bc2e1(0x208),'67XlAMzg',_0x5bc2e1(0x1ce),_0x5bc2e1(0x256),'3TqdIPK',_0x5bc2e1(0x1d6),_0x5bc2e1(0x28b),_0x5bc2e1(0x233),_0x5bc2e1(0x21b),'6790030lhteYO',_0x5bc2e1(0x1ec),_0x5bc2e1(0x286),_0x5bc2e1(0x20e),_0x5bc2e1(0x21c),_0x5bc2e1(0x26e),_0x5bc2e1(0x1c5),_0x5bc2e1(0x1fe),'244940uIeYgr',_0x5bc2e1(0x29c),_0x5bc2e1(0x209),_0x5bc2e1(0x216),_0x5bc2e1(0x1d9),_0x5bc2e1(0x212),_0x5bc2e1(0x247),_0x5bc2e1(0x28a),_0x5bc2e1(0x22d),_0x5bc2e1(0x25e),_0x5bc2e1(0x285),_0x5bc2e1(0x1ca),_0x5bc2e1(0x1f1),'redirectCount','GARMIN_SSO_EMBED',_0x5bc2e1(0x24b),_0x5bc2e1(0x20a),'defineProperty','handlePageTitle',_0x5bc2e1(0x211),_0x5bc2e1(0x29b),_0x5bc2e1(0x29a),'DateTime',_0x5bc2e1(0x258),_0x5bc2e1(0x243),'MFA验证响应头\x20Set-Cookie:',_0x5bc2e1(0x1f0),_0x5bc2e1(0x1d5),_0x5bc2e1(0x274),'MFA验证失败,页面标题:\x20','10119888IWJTCo',_0x5bc2e1(0x23a),_0x5bc2e1(0x204),_0x5bc2e1(0x257),'response','toString',_0x5bc2e1(0x241),'2576721JWEXcV','18XIEAjh',_0x5bc2e1(0x22e),_0x5bc2e1(0x27d),_0x5bc2e1(0x206),_0x5bc2e1(0x287),_0x5bc2e1(0x1c1),'Request\x20Timeout:\x20>\x20',_0x5bc2e1(0x26d),_0x5bc2e1(0x23e),_0x5bc2e1(0x215),_0x5bc2e1(0x219),_0x5bc2e1(0x1cd),'error',_0x5bc2e1(0x214),_0x5bc2e1(0x26f),_0x5bc2e1(0x210),_0x5bc2e1(0x1c9),_0x5bc2e1(0x28f),_0x5bc2e1(0x1ee),_0x5bc2e1(0x26b),_0x5bc2e1(0x230),_0x5bc2e1(0x268),'responseURL'];return a5_0x5d44=function(){return _0x457c2c;},a5_0x5d44();}function a5_0x3ef1(){const _0x20de7c=a5_0x5e2a,_0x1d3151=a5_0x18e4,_0x3c323d=[_0x1d3151(0x17e),_0x1d3151(0x156),_0x1d3151(0x1dc),_0x20de7c(0x280),_0x1d3151(0x1fd),_0x20de7c(0x252),_0x1d3151(0x172),_0x1d3151(0x1df),_0x20de7c(0x1f7),_0x1d3151(0x1fc),_0x20de7c(0x23f),_0x1d3151(0x1cb),_0x1d3151(0x181),_0x1d3151(0x186),_0x1d3151(0x21a),_0x1d3151(0x1d4),'tough-cookie',_0x20de7c(0x24a),_0x1d3151(0x1a1),_0x1d3151(0x1e3),_0x20de7c(0x264),_0x1d3151(0x1ea),_0x1d3151(0x176),_0x20de7c(0x21f),_0x1d3151(0x1de),_0x1d3151(0x164),_0x1d3151(0x1e8),_0x1d3151(0x1ff),_0x1d3151(0x155),_0x1d3151(0x1f4),_0x20de7c(0x23b),_0x20de7c(0x1c3),_0x1d3151(0x17b),_0x1d3151(0x1ef),_0x20de7c(0x213),_0x1d3151(0x206),_0x1d3151(0x18c),_0x1d3151(0x18f),_0x20de7c(0x1e7),_0x1d3151(0x165),_0x1d3151(0x169),_0x1d3151(0x202),_0x1d3151(0x175),_0x1d3151(0x15f),_0x20de7c(0x283),_0x1d3151(0x16c),_0x20de7c(0x28d),_0x1d3151(0x20e),_0x20de7c(0x237),_0x1d3151(0x209),_0x1d3151(0x210),_0x1d3151(0x15c),_0x1d3151(0x204),_0x1d3151(0x1f5),_0x1d3151(0x1d3),_0x1d3151(0x162),_0x20de7c(0x25a),_0x1d3151(0x1bb),_0x20de7c(0x1c0),_0x1d3151(0x208),_0x1d3151(0x191),_0x1d3151(0x183),_0x1d3151(0x19d),_0x1d3151(0x1c1),_0x1d3151(0x1d0),'CookieJar',_0x1d3151(0x171),_0x1d3151(0x195),_0x1d3151(0x157),_0x1d3151(0x1ee),_0x1d3151(0x1e9),_0x20de7c(0x1e4),'10wprvwB',_0x1d3151(0x190),_0x1d3151(0x20b),_0x1d3151(0x1e5),'extractCsrfToken',_0x1d3151(0x192),_0x1d3151(0x1a9),_0x1d3151(0x1f7),_0x20de7c(0x244),'update',_0x1d3151(0x159),_0x1d3151(0x1e4),'」\x20OAuth2\x20token\x20refreshed\x20successfully','<title>([^<]*)</title>',_0x20de7c(0x24f),_0x1d3151(0x15b),_0x1d3151(0x1ca),_0x1d3151(0x161),_0x1d3151(0x19f),_0x20de7c(0x277),_0x1d3151(0x1af),_0x1d3151(0x163),_0x1d3151(0x1fe),_0x1d3151(0x1d5),_0x1d3151(0x1f8),_0x1d3151(0x1a0),_0x1d3151(0x184),_0x20de7c(0x271),_0x1d3151(0x20a),_0x1d3151(0x1d6),_0x1d3151(0x1e6),_0x20de7c(0x1cf),_0x1d3151(0x213),_0x1d3151(0x1b3),_0x1d3151(0x1b1),_0x1d3151(0x160),_0x20de7c(0x225),'headers',_0x1d3151(0x1b0),_0x1d3151(0x215),_0x20de7c(0x289),_0x1d3151(0x1a7),_0x20de7c(0x260),_0x1d3151(0x179),_0x1d3151(0x1f0),_0x1d3151(0x214),'未提供MFA验证码',_0x1d3151(0x1b6),_0x20de7c(0x1c6),_0x1d3151(0x201),_0x20de7c(0x259),_0x1d3151(0x1d9),_0x20de7c(0x25c),_0x1d3151(0x1ce),_0x1d3151(0x188),'oauth1Token',_0x1d3151(0x177),_0x1d3151(0x1f3),_0x20de7c(0x226),_0x1d3151(0x1a3),_0x1d3151(0x1c6),_0x1d3151(0x1c0),_0x1d3151(0x16d),_0x1d3151(0x1c7),'.html',_0x1d3151(0x15a),_0x1d3151(0x1d1),'响应跟踪\x20-\x20状态码:',_0x1d3151(0x1aa),_0x1d3151(0x194),_0x1d3151(0x1a5),_0x20de7c(0x1e0),_0x1d3151(0x19e),_0x1d3151(0x18d),'978vcOcoR',_0x1d3151(0x19b),_0x1d3151(0x1dd),_0x1d3151(0x1ac),_0x20de7c(0x242),_0x1d3151(0x178),_0x20de7c(0x240),_0x20de7c(0x1bf),_0x1d3151(0x1ed),_0x1d3151(0x15d),_0x1d3151(0x1b9),_0x1d3151(0x1c8),_0x1d3151(0x203),_0x20de7c(0x246),_0x20de7c(0x1d0),_0x1d3151(0x173),_0x1d3151(0x1cf),_0x1d3151(0x1c9),_0x1d3151(0x212),_0x1d3151(0x16f),_0x1d3151(0x185),_0x1d3151(0x1cc),_0x1d3151(0x1db),_0x1d3151(0x1a4),_0x20de7c(0x1f4),_0x20de7c(0x297),_0x1d3151(0x16e),_0x1d3151(0x1b5),_0x1d3151(0x1ec),_0x20de7c(0x220),_0x20de7c(0x227),_0x1d3151(0x1c5),_0x20de7c(0x1db),_0x1d3151(0x17d),_0x1d3151(0x170),_0x1d3151(0x16b),_0x1d3151(0x1bd),_0x1d3151(0x1bf),_0x1d3151(0x1a8),_0x1d3151(0x17f),_0x1d3151(0x218),_0x1d3151(0x167),_0x1d3151(0x196),_0x20de7c(0x276),_0x1d3151(0x1ad),_0x1d3151(0x1da),_0x20de7c(0x236),_0x1d3151(0x1c4),_0x1d3151(0x1b2),_0x1d3151(0x20c),_0x1d3151(0x1f6),_0x1d3151(0x1be),_0x1d3151(0x199),_0x1d3151(0x1c2),_0x1d3151(0x1ae)];return a5_0x3ef1=function(){return _0x3c323d;},a5_0x3ef1();}function a5_0x46bf(_0x4c29e3,_0x52fc05){_0x4c29e3=_0x4c29e3-0x17d;const _0x1a0738=a5_0x3ef1();let _0x1ffa32=_0x1a0738[_0x4c29e3];return _0x1ffa32;}class HttpClient{constructor(_0xf0e7db,_0x25b32a){const _0x242e3f=a5_0x2e075f,_0xe90c3a=a5_0x4ee2c5;var _0x7c08fd,_0x625fa5;const _0x163b24=new tough_cookie_1[(_0xe90c3a(0x1fe))]();this[_0xe90c3a(0x241)]=_0xf0e7db,this[_0xe90c3a(0x23b)]=axios_1[_0xe90c3a(0x23e)][_0x242e3f(0x198)]({'timeout':(_0x7c08fd=_0x25b32a===null||_0x25b32a===void 0x0?void 0x0:_0x25b32a[_0xe90c3a(0x26a)])!==null&&_0x7c08fd!==void 0x0?_0x7c08fd:0x1388,'timeoutErrorMessage':_0xe90c3a(0x1ed)+((_0x625fa5=_0x25b32a===null||_0x25b32a===void 0x0?void 0x0:_0x25b32a[_0xe90c3a(0x26a)])!==null&&_0x625fa5!==void 0x0?_0x625fa5:0x1388)+_0xe90c3a(0x227),'maxRedirects':0xa,'validateStatus':function(_0x4ef36b){return _0x4ef36b>=0xc8&&_0x4ef36b<0x190;},'withCredentials':!![],'jar':_0x163b24}),this[_0x242e3f(0x14c)]=_0x25b32a,this[_0xe90c3a(0x23b)][_0xe90c3a(0x217)][_0xe90c3a(0x1f5)][_0xe90c3a(0x1d5)](_0x682c5d=>{const _0x42798b=a5_0x4ded,_0x1dc455=_0x242e3f,_0x32fd3d=_0xe90c3a;var _0x45e0e9,_0x12a7c0,_0x183547,_0x4749d0;return(((_0x45e0e9=_0x682c5d[_0x32fd3d(0x1f9)][_0x32fd3d(0x241)])===null||_0x45e0e9===void 0x0?void 0x0:_0x45e0e9[_0x32fd3d(0x1e3)](_0x32fd3d(0x225)))||((_0x12a7c0=_0x682c5d[_0x1dc455(0x14c)][_0x32fd3d(0x241)])===null||_0x12a7c0===void 0x0?void 0x0:_0x12a7c0[_0x32fd3d(0x1e3)](_0x32fd3d(0x208))))&&(console[_0x32fd3d(0x233)](_0x32fd3d(0x1cc),_0x682c5d[_0x32fd3d(0x1f9)][_0x1dc455(0x12d)]),console[_0x1dc455(0x12e)](_0x32fd3d(0x268),_0x682c5d[_0x32fd3d(0x260)]),console[_0x32fd3d(0x233)](_0x32fd3d(0x265),((_0x183547=_0x682c5d[_0x32fd3d(0x266)])===null||_0x183547===void 0x0?void 0x0:_0x183547[_0x32fd3d(0x21c)])||_0x682c5d[_0x42798b(0x123)][_0x32fd3d(0x241)]),console[_0x32fd3d(0x233)](_0x32fd3d(0x1bc),((_0x4749d0=_0x682c5d[_0x32fd3d(0x266)])===null||_0x4749d0===void 0x0?void 0x0:_0x4749d0[_0x32fd3d(0x1f0)])||0x0),_0x682c5d[_0x32fd3d(0x1da)][_0x32fd3d(0x1e0)]&&console[_0x42798b(0x10e)](_0x1dc455(0x10c),_0x682c5d[_0x32fd3d(0x1da)][_0x32fd3d(0x1e0)]),_0x682c5d[_0x1dc455(0x19f)]>=0x12c&&_0x682c5d[_0x32fd3d(0x260)]<0x190&&console[_0x32fd3d(0x233)](_0x32fd3d(0x267),_0x682c5d[_0x32fd3d(0x260)])),_0x682c5d;},async _0x1263b1=>{const _0x4a03b0=a5_0x46bf,_0x4a07c1=a5_0x4ded,_0x409b97=_0x242e3f,_0x44f132=_0xe90c3a;var _0x441a70,_0x1b0991,_0x59f497,_0xa2b213;if(axios_1[_0x44f132(0x23e)][_0x409b97(0x165)](_0x1263b1)&&_0x1263b1[_0x44f132(0x1be)]===_0x44f132(0x223))throw new Error(_0x1263b1[_0x44f132(0x1bd)]||_0x44f132(0x1dc));const _0x3f3341=_0x1263b1[_0x44f132(0x1f9)];if(((_0x441a70=_0x1263b1===null||_0x1263b1===void 0x0?void 0x0:_0x1263b1[_0x44f132(0x1f5)])===null||_0x441a70===void 0x0?void 0x0:_0x441a70[_0x44f132(0x260)])===HTTP_STATUS[_0x44f132(0x1df)]&&!(_0x3f3341===null||_0x3f3341===void 0x0?void 0x0:_0x3f3341[_0x44f132(0x249)])){if(!this[_0x44f132(0x256)])throw new Error(_0x44f132(0x26b));_0x3f3341[_0x44f132(0x249)]=!![];try{return!tokenRefreshPromise&&(tokenRefreshPromise=this[_0x409b97(0x16d)]()[_0x44f132(0x1c0)](()=>{tokenRefreshPromise=null;})),await tokenRefreshPromise,_0x3f3341[_0x44f132(0x1da)][_0x409b97(0x104)]=_0x44f132(0x1e2)+this[_0x44f132(0x256)][_0x4a07c1(0x13f)],this[_0x44f132(0x23b)](_0x3f3341);}catch(_0x3b5c79){console[_0x44f132(0x1c6)](_0x409b97(0x1a5),_0x3b5c79);throw _0x3b5c79;}}if(axios_1[_0x44f132(0x23e)][_0x409b97(0x165)](_0x1263b1)&&_0x1263b1[_0x44f132(0x1f5)])(((_0x1b0991=_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x1f9)][_0x44f132(0x241)])===null||_0x1b0991===void 0x0?void 0x0:_0x1b0991[_0x409b97(0x12a)](_0x44f132(0x225)))||((_0x59f497=_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x1f9)][_0x44f132(0x241)])===null||_0x59f497===void 0x0?void 0x0:_0x59f497[_0x44f132(0x1e3)](_0x44f132(0x208))))&&(console[_0x44f132(0x233)](_0x409b97(0x144),_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x1f9)][_0x44f132(0x241)]),console[_0x44f132(0x233)](_0x44f132(0x1c2),_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x260)]),console[_0x44f132(0x233)](_0x44f132(0x209),((_0xa2b213=_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x266)])===null||_0xa2b213===void 0x0?void 0x0:_0xa2b213[_0x409b97(0x17f)])||_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x1f9)][_0x44f132(0x241)]),_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x1da)][_0x4a07c1(0x133)]&&console[_0x44f132(0x233)](_0x4a03b0(0x237),_0x1263b1[_0x44f132(0x1f5)][_0x44f132(0x1da)][_0x44f132(0x1e0)])),this[_0x44f132(0x1fb)](_0x1263b1[_0x44f132(0x1f5)]);else throw new Error(_0x409b97(0x10e));throw _0x1263b1;}),this[_0x242e3f(0x111)][_0x242e3f(0x169)][_0xe90c3a(0x266)][_0xe90c3a(0x1d5)](async _0x531bfd=>{const _0x10d5f=a5_0x11aa,_0x3a853e=_0xe90c3a;return this[_0x3a853e(0x256)]&&(_0x531bfd[_0x3a853e(0x1da)][_0x3a853e(0x22c)]=_0x10d5f(0xfc)+this[_0x3a853e(0x256)][_0x3a853e(0x246)]),_0x531bfd;});}async[a5_0x4ee2c5(0x226)](){const _0x466d22=a5_0x2e075f,_0x5065b6=a5_0x4ee2c5,_0x5e9d9b=await axios_1[_0x5065b6(0x23e)][_0x466d22(0x17d)](OAUTH_CONSUMER_URL);this[_0x5065b6(0x206)]={'key':_0x5e9d9b[_0x5065b6(0x264)][_0x466d22(0x1a8)],'secret':_0x5e9d9b[_0x5065b6(0x264)][_0x5065b6(0x222)]};}async[a5_0x4ee2c5(0x1e1)](){const _0x471599=a5_0x2e075f,_0x39b472=a5_0x4ee2c5;this[_0x39b472(0x256)]&&(this[_0x39b472(0x256)][_0x39b472(0x1c5)]<luxon_1[_0x471599(0x10d)][_0x39b472(0x1d8)]()[_0x39b472(0x1db)]()&&(console[_0x39b472(0x1c6)](_0x39b472(0x1f8)),await this[_0x39b472(0x1bf)]()));}async[a5_0x4ee2c5(0x1fc)](_0x3ab9a6,_0x2c8b45){const _0x28e4eb=a5_0x4ee2c5,_0x2e7bc9=await this[_0x28e4eb(0x23b)][_0x28e4eb(0x1fc)](_0x3ab9a6,_0x2c8b45);return _0x2e7bc9===null||_0x2e7bc9===void 0x0?void 0x0:_0x2e7bc9[_0x28e4eb(0x264)];}async[a5_0x4ee2c5(0x1d4)](_0x1d6e48,_0x31896f,_0x11a855){const _0x2613da=a5_0x46bf,_0x12124f=a5_0x11aa,_0x242856=a5_0x4ded,_0x304652=a5_0x2e075f,_0xf13033=a5_0x4ee2c5;var _0x2c95d7,_0x487354;try{const _0x16b78a=await this[_0x242856(0x19b)][_0xf13033(0x1d4)](_0x1d6e48,_0x31896f,_0x11a855);if(_0x1d6e48[_0xf13033(0x1e3)](_0x304652(0x1a0))){console[_0xf13033(0x233)](_0x304652(0x161),_0x16b78a[_0x304652(0x19f)]),console[_0xf13033(0x233)](_0x304652(0x13a),_0x16b78a[_0xf13033(0x1da)][_0xf13033(0x1e0)]),console[_0xf13033(0x233)](_0xf13033(0x230),_0x16b78a[_0xf13033(0x1da)][_0x2613da(0x219)]),console[_0x304652(0x12e)](_0xf13033(0x1fa),((_0x2c95d7=_0x16b78a[_0x12124f(0x12a)])===null||_0x2c95d7===void 0x0?void 0x0:_0x2c95d7[_0x242856(0x131)])||_0x16b78a[_0x12124f(0x13c)][_0xf13033(0x241)]);if(((_0x487354=_0x16b78a[_0xf13033(0x266)])===null||_0x487354===void 0x0?void 0x0:_0x487354[_0x12124f(0xc0)])&&_0x16b78a[_0xf13033(0x266)][_0xf13033(0x21c)][_0xf13033(0x1e3)](_0xf13033(0x1c7))){console[_0x304652(0x12e)](_0xf13033(0x1f3),_0x16b78a[_0xf13033(0x266)][_0x304652(0x17f)]);if(!_0x16b78a[_0xf13033(0x264)][_0x304652(0x12a)](_0xf13033(0x25b))&&!_0x16b78a[_0xf13033(0x264)][_0xf13033(0x1e3)](_0xf13033(0x1d1))){console[_0xf13033(0x233)](_0x304652(0x188));const _0x4ffd9d=await this[_0x304652(0x111)][_0x242856(0x159)](_0x16b78a[_0x304652(0x193)][_0xf13033(0x21c)],{'headers':{'User-Agent':USER_AGENT_CONNECT_IOS}});return console[_0xf13033(0x233)](_0xf13033(0x205),_0x4ffd9d[_0xf13033(0x260)]),console[_0xf13033(0x233)](_0xf13033(0x21b),_0x4ffd9d[_0xf13033(0x264)][_0xf13033(0x20f)]),_0x4ffd9d[_0x304652(0x16e)];}}}return _0x16b78a[_0x304652(0x16e)];}catch(_0x45c092){console[_0x304652(0x18b)](_0xf13033(0x228),_0x45c092);throw _0x45c092;}}async[a5_0x4ee2c5(0x1e8)](_0x17cdaf,_0x4780ff,_0x26c66f){const _0x214a2c=a5_0x4ded,_0xb9a936=a5_0x4ee2c5,_0x34292e=await this[_0x214a2c(0x19b)][_0xb9a936(0x1e8)](_0x17cdaf,_0x4780ff,_0x26c66f);return _0x34292e===null||_0x34292e===void 0x0?void 0x0:_0x34292e[_0xb9a936(0x264)];}async[a5_0x548147(0xe0)](_0x1789a2,_0x3328bc){const _0x19e861=a5_0x2e075f,_0x9bf9fc=a5_0x4ee2c5,_0x5b9571=await this[_0x19e861(0x111)][_0x9bf9fc(0x1d4)](_0x1789a2,null,{..._0x3328bc,'headers':{..._0x3328bc===null||_0x3328bc===void 0x0?void 0x0:_0x3328bc[_0x9bf9fc(0x1da)],'X-Http-Method-Override':_0x9bf9fc(0x23c)}});return _0x5b9571===null||_0x5b9571===void 0x0?void 0x0:_0x5b9571[_0x9bf9fc(0x264)];}[a5_0x4ee2c5(0x229)](_0x4ee6fe){const _0x3c2ce5=a5_0x4ee2c5;lodash_1[_0x3c2ce5(0x23e)][_0x3c2ce5(0x1c1)](_0x4ee6fe,(_0x512af1,_0x515259)=>{const _0x2c943e=_0x3c2ce5;this[_0x2c943e(0x23b)][_0x2c943e(0x1cd)][_0x2c943e(0x1da)][_0x2c943e(0x216)][_0x515259]=_0x512af1;});}[a5_0x1df3ca(0x1b7)](_0x3c3317){const _0x1b2be9=a5_0x548147;this[_0x1b2be9(0x131)](_0x3c3317);}[a5_0x4ee2c5(0x210)](_0x55c01c){const _0x9bc39=a5_0x4ee2c5,{status:_0xe45853,statusText:_0x10e093,data:_0xffb551}=_0x55c01c,_0x3ec719={'status':_0xe45853,'statusText':_0x10e093,'data':typeof _0xffb551===_0x9bc39(0x1d0)?JSON[_0x9bc39(0x257)](_0xffb551):_0xffb551};console[_0x9bc39(0x1c6)](_0x9bc39(0x23a),_0x3ec719);throw new Error(_0x9bc39(0x237)+_0xe45853+_0x9bc39(0x1fd)+_0x10e093);}async[a5_0x4ee2c5(0x252)](_0x3d6895,_0x1ec82c,_0x2d323b){const _0x28fa1f=a5_0x46bf,_0x2213a0=a5_0x548147,_0x331fd5=a5_0x1df3ca,_0x509c4e=a5_0x2e075f,_0x1e20d6=a5_0x4ee2c5;try{!this[_0x1e20d6(0x206)]&&await this[_0x509c4e(0x11a)]();const _0x227a84=this[_0x1e20d6(0x241)][_0x1e20d6(0x1e5)],_0x54493b=this[_0x509c4e(0x12d)][_0x331fd5(0x136)],_0x1436df={'id':_0x1e20d6(0x24e),'embedWidget':_0x509c4e(0x19e),'gauthHost':_0x227a84},_0x225edb={'id':_0x1e20d6(0x24e),'embedWidget':!![],'clientId':_0x331fd5(0x195),'locale':'en','gauthHost':this[_0x509c4e(0x12d)][_0x1e20d6(0x1ff)],'service':this[_0x1e20d6(0x241)][_0x1e20d6(0x1ff)],'source':this[_0x28fa1f(0x17e)][_0x509c4e(0x135)],'redirectAfterAccountLoginUrl':this[_0x1e20d6(0x241)][_0x1e20d6(0x1ff)],'redirectAfterAccountCreationUrl':this[_0x1e20d6(0x241)][_0x1e20d6(0x1ff)]};await this[_0x1e20d6(0x1fc)](_0x227a84+_0x1e20d6(0x211),{'params':_0x1436df,'headers':{'User-Agent':USER_AGENT_CONNECT_IOS}});const _0x415257=await this[_0x1e20d6(0x1fc)](_0x227a84+_0x1e20d6(0x1b9),{'params':_0x225edb,'headers':{'User-Agent':USER_AGENT_CONNECT_IOS,'Referer':_0x227a84+_0x1e20d6(0x211)}});this[_0x331fd5(0x125)](_0x415257,_0x1e20d6(0x22b));const _0x35e306=this[_0x1e20d6(0x25e)](_0x415257);console[_0x509c4e(0x12e)](_0x1e20d6(0x24b),_0x35e306);if(!_0x35e306)throw new Error(_0x1e20d6(0x1b8));const _0x2807f8=new form_data_1[(_0x509c4e(0x133))]();_0x2807f8[_0x1e20d6(0x219)](_0x1e20d6(0x24d),_0x3d6895),_0x2807f8[_0x1e20d6(0x219)](_0x509c4e(0x127),_0x1ec82c),_0x2807f8[_0x1e20d6(0x219)](_0x509c4e(0x13e),_0x1e20d6(0x23d)),_0x2807f8[_0x2213a0(0xe6)](_0x1e20d6(0x1dd),_0x35e306);const _0x20b1e4=await this[_0x1e20d6(0x1d4)](_0x227a84+_0x1e20d6(0x1b9),_0x2807f8,{'params':_0x225edb,'headers':{'Content-Type':_0x1e20d6(0x1ea),'Dnt':0x1,'Origin':this[_0x1e20d6(0x241)][_0x331fd5(0x157)],'Referer':_0x227a84+_0x331fd5(0x130),'User-Agent':USER_AGENT_CONNECT_IOS},'maxRedirects':0xa});'',this[_0x1e20d6(0x254)](_0x20b1e4,_0x1e20d6(0x214));const _0x13cd40=this[_0x1e20d6(0x215)](_0x20b1e4);console[_0x1e20d6(0x233)](_0x1e20d6(0x1c8),_0x13cd40);const _0x12ac94=[_0x509c4e(0x185),_0x1e20d6(0x1f6),_0x1e20d6(0x213)],_0x533b32=_0x12ac94[_0x1e20d6(0x201)](_0x5cb196=>_0x13cd40&&_0x13cd40[_0x1e20d6(0x203)]()[_0x1e20d6(0x1e3)](_0x5cb196[_0x1e20d6(0x203)]()));let _0xa3b7d1=_0x20b1e4;if(_0x533b32){if(!_0x2d323b)throw new Error(_0x1e20d6(0x25a));console[_0x1e20d6(0x233)](_0x509c4e(0x189),_0x13cd40),_0xa3b7d1=await this[_0x1e20d6(0x259)](_0x20b1e4,_0x225edb,_0x2d323b);const _0x1b8439=this[_0x1e20d6(0x215)](_0xa3b7d1);console[_0x28fa1f(0x1e7)](_0x1e20d6(0x20c),_0x1b8439);if(_0x1b8439!==_0x509c4e(0x173)&&!_0xa3b7d1[_0x1e20d6(0x1e3)](_0x1e20d6(0x1d1)))throw new Error(_0x1e20d6(0x243)+_0x1b8439);}else{if(_0x13cd40!==_0x1e20d6(0x25b))throw new Error(_0x1e20d6(0x22f)+_0x13cd40);}const _0x42a31b=this[_0x2213a0(0xc1)](_0xa3b7d1);if(!_0x42a31b)throw new Error(_0x331fd5(0x1c5));const _0x459cd9=await this[_0x1e20d6(0x258)](_0x42a31b);return await this[_0x1e20d6(0x235)](_0x459cd9),{'oauth1':_0x459cd9,'oauth2':this[_0x509c4e(0x155)]};}catch(_0xea38aa){console[_0x1e20d6(0x1c6)](_0x1e20d6(0x1f2),_0xea38aa);throw _0xea38aa;}}[a5_0x4ee2c5(0x254)](_0x2da7c1,_0x58f633){const _0xb76116=a5_0x1df3ca,_0x2c580b=a5_0x2e075f,_0x13f854=a5_0x4ee2c5;try{const _0x1f32db=require('fs'),_0x13474f=require(_0x13f854(0x25c)),_0x3ea9de=_0x13474f[_0xb76116(0x168)](process[_0x2c580b(0x107)](),_0x13f854(0x1d9));!_0x1f32db[_0x2c580b(0x14a)](_0x3ea9de)&&_0x1f32db[_0x13f854(0x21d)](_0x3ea9de,{'recursive':!![]});const _0xdd43bd=_0x13474f[_0x13f854(0x262)](_0x3ea9de,_0x58f633+_0x13f854(0x1c3));_0x1f32db[_0x2c580b(0x136)](_0xdd43bd,_0x2da7c1),console[_0x2c580b(0x12e)](_0x13f854(0x23f)+_0xdd43bd);}catch(_0x150fa3){console[_0x13f854(0x1c6)](_0x13f854(0x24a),_0x150fa3);}}async[a5_0x4ee2c5(0x259)](_0x169408,_0x19b05c,_0x4b82cf){const _0x49d796=a5_0x18e4,_0xdae1c4=a5_0x1df3ca,_0xe10eab=a5_0x2e075f,_0x127eb2=a5_0x4ee2c5;try{this[_0x127eb2(0x254)](_0x169408,_0x127eb2(0x251));const _0xd7508d=this[_0x49d796(0x1bc)](_0x169408);if(!_0xd7508d)throw new Error(_0x127eb2(0x239));const _0x26f5e9=await _0x4b82cf();if(!_0x26f5e9)throw new Error(_0x127eb2(0x1cf));const _0x33540d=this[_0x127eb2(0x241)][_0x127eb2(0x1e5)],_0x530f98=new form_data_1[(_0x127eb2(0x23e))]();_0x530f98[_0x127eb2(0x219)](_0x127eb2(0x1bb),_0x26f5e9),_0x530f98[_0x127eb2(0x219)](_0x127eb2(0x202),_0x127eb2(0x23d)),_0x530f98[_0x127eb2(0x219)](_0x127eb2(0x1dd),_0xd7508d);const _0x152a2f=await this[_0x127eb2(0x1d4)](_0x33540d+_0xdae1c4(0x172),_0x530f98,{'params':_0x19b05c,'headers':{'Content-Type':_0x127eb2(0x1ea),'Dnt':0x1,'Origin':this[_0xe10eab(0x12d)][_0x127eb2(0x231)],'Referer':_0x33540d+_0x127eb2(0x1b9),'User-Agent':USER_AGENT_BROWSER},'maxRedirects':0xa,'transformResponse':[function(_0x18ebe7,_0x4ff21d){const _0x4d0093=_0xe10eab,_0x26f0d3=_0x127eb2;return _0x4ff21d[_0x26f0d3(0x1e0)]&&_0x4ff21d[_0x26f0d3(0x1e0)][_0x4d0093(0x12a)](_0x26f0d3(0x1c7))&&console[_0x26f0d3(0x233)](_0x26f0d3(0x1f3),_0x4ff21d[_0x26f0d3(0x1e0)]),_0x18ebe7;}]});console[_0x127eb2(0x233)](_0x127eb2(0x1ca),_0x152a2f[_0xe10eab(0x195)]),this[_0xe10eab(0x13f)](_0x152a2f,_0x127eb2(0x20b));const _0x31fb06=this[_0x127eb2(0x215)](_0x152a2f);console[_0x127eb2(0x233)](_0x127eb2(0x250),_0x31fb06);if(_0x31fb06!==_0xdae1c4(0x134)&&!_0x152a2f[_0xdae1c4(0x108)](_0x127eb2(0x1d1)))throw new Error(_0x127eb2(0x1f7)+_0x31fb06);return _0x152a2f;}catch(_0x4238d1){console[_0x127eb2(0x1c6)](_0x127eb2(0x244),_0x4238d1);throw _0x4238d1;}}[a5_0x1df3ca(0x1c3)](_0x27da5a){const _0x3ede12=a5_0x4ee2c5,_0x36c175=CSRF_RE[_0x3ede12(0x207)](_0x27da5a);return _0x36c175?_0x36c175[0x1]:null;}[a5_0x4ee2c5(0x215)](_0x43b1a9){const _0x5972c8=a5_0x4ee2c5,_0x25d988=PAGE_TITLE_RE[_0x5972c8(0x207)](_0x43b1a9);return _0x25d988?_0x25d988[0x1]:'';}[a5_0x2e075f(0x117)](_0x2c4984){const _0x52f4d4=a5_0x4ee2c5,_0x201d82=TICKET_RE[_0x52f4d4(0x207)](_0x2c4984);return _0x201d82?_0x201d82[0x1]:null;}[a5_0x4ee2c5(0x224)](_0x3ac14a){const _0xe431c2=a5_0x2e075f,_0x3711c7=a5_0x4ee2c5,_0x98896f=PAGE_TITLE_RE[_0x3711c7(0x207)](_0x3ac14a);if(_0x98896f){const _0x18a819=_0x98896f[0x1];console[_0x3711c7(0x233)](_0x3711c7(0x1eb),_0x18a819);if(lodash_1[_0x3711c7(0x23e)][_0x3711c7(0x1e3)](_0x18a819,_0x3711c7(0x1b7)))throw new Error(_0xe431c2(0x164));return _0x18a819;}else return'';}[a5_0x4ee2c5(0x1ee)](_0x2dc174){const _0xcb715e=a5_0x2e075f,_0x4cbee8=a5_0x4ee2c5,_0x427c13=ACCOUNT_LOCKED_RE[_0x4cbee8(0x207)](_0x2dc174);if(_0x427c13){const _0x48dadd=_0x427c13[0x1];console[_0x4cbee8(0x1c6)](_0x48dadd);throw new Error(_0xcb715e(0x103));}}async[a5_0x4ee2c5(0x1bf)](){const _0x426acb=a5_0x2e075f,_0x28d7f5=a5_0x4ee2c5;try{!this[_0x28d7f5(0x206)]&&await this[_0x28d7f5(0x226)]();if(!this[_0x28d7f5(0x256)]||!this[_0x28d7f5(0x1d7)])throw new Error(_0x28d7f5(0x240));const _0x3c548b={'oauth':this[_0x28d7f5(0x1c4)](this[_0x28d7f5(0x206)]),'token':this[_0x28d7f5(0x1d7)]};await this[_0x28d7f5(0x235)](_0x3c548b),console[_0x28d7f5(0x233)]('「'+this[_0x28d7f5(0x1f9)][_0x28d7f5(0x24d)]+_0x28d7f5(0x24f)+this[_0x28d7f5(0x241)][_0x28d7f5(0x212)]+_0x426acb(0x19d));}catch(_0x528fe0){console[_0x28d7f5(0x1c6)](_0x426acb(0x12f),_0x528fe0);throw _0x528fe0;}}async[a5_0x2e075f(0x147)](_0x41474f){const _0xa4d1bd=a5_0x1df3ca,_0x1b5813=a5_0x2e075f,_0x25989d=a5_0x4ee2c5;if(!this[_0x1b5813(0x1a9)])throw new Error(_0x1b5813(0x162));const _0x460674={'ticket':_0x41474f,'login-url':this[_0x25989d(0x241)][_0x1b5813(0x135)],'accepts-mfa-tokens':!![]},_0x693bcc=this[_0x25989d(0x241)][_0x25989d(0x1e7)]+_0xa4d1bd(0x11d)+qs_1[_0x25989d(0x23e)][_0x25989d(0x257)](_0x460674),_0x25b571=this[_0x25989d(0x1c4)](this[_0x1b5813(0x1a9)]),_0x42a033={'url':_0x693bcc,'method':_0x25989d(0x1ef)},_0x5d4bc1=_0x25b571[_0x25989d(0x21e)](_0x25b571[_0x25989d(0x248)](_0x42a033)),_0x310a7d=await this[_0x25989d(0x1fc)](_0x693bcc,{'headers':{..._0x5d4bc1,'User-Agent':USER_AGENT_CONNECTMOBILE}}),_0xf94008=qs_1[_0x25989d(0x23e)][_0x25989d(0x24c)](_0x310a7d);return this[_0x25989d(0x1d7)]=_0xf94008,{'token':_0xf94008,'oauth':_0x25b571};}[a5_0x4ee2c5(0x1c4)](_0xe1731f){const _0x5b46f8=a5_0x1df3ca,_0x2188a3=a5_0x4ee2c5,_0x5894ea=new oauth_1_0a_1[(_0x2188a3(0x23e))]({'consumer':_0xe1731f,'signature_method':_0x5b46f8(0x1aa),'hash_function'(_0x208737,_0x553137){const _0x2cb0c0=_0x2188a3;return node_crypto_1[_0x2cb0c0(0x23e)][_0x2cb0c0(0x221)](_0x2cb0c0(0x1ba),_0x553137)[_0x2cb0c0(0x263)](_0x208737)[_0x2cb0c0(0x20d)](_0x2cb0c0(0x1f1));}});return _0x5894ea;}async[a5_0x4ee2c5(0x235)](_0x42f130){const _0xf8a744=a5_0x548147,_0x23ac9f=a5_0x1df3ca,_0x7dbc25=a5_0x2e075f,_0x3ea7d8=a5_0x4ee2c5,_0x536c31={'key':_0x42f130[_0x3ea7d8(0x1ce)][_0x3ea7d8(0x218)],'secret':_0x42f130[_0x3ea7d8(0x1ce)][_0x3ea7d8(0x22d)]},_0x3bb73f=this[_0xf8a744(0xa5)][_0x3ea7d8(0x1e7)]+_0x7dbc25(0x122),_0x23a1da={'url':_0x3bb73f,'method':_0x23ac9f(0x143),'data':null},_0x59bf9a=_0x42f130[_0x3ea7d8(0x1ec)][_0x3ea7d8(0x248)](_0x23a1da,_0x536c31),_0x334731=_0x3bb73f+'?'+qs_1[_0x7dbc25(0x133)][_0x3ea7d8(0x257)](_0x59bf9a);this[_0x7dbc25(0x155)]=undefined;const _0x34c5b3=await this[_0x3ea7d8(0x1d4)](_0x334731,null,{'headers':{'User-Agent':USER_AGENT_CONNECTMOBILE,'Content-Type':_0x3ea7d8(0x1ea)}});this[_0x7dbc25(0x155)]=this[_0x3ea7d8(0x204)](_0x34c5b3);}[a5_0x4ee2c5(0x204)](_0xaad5d1){const _0x2e7c3f=a5_0x2e075f,_0x5b1942=a5_0x4ee2c5,_0x2164e8=luxon_1[_0x5b1942(0x22a)][_0x2e7c3f(0x130)](),_0x2d2ecd=_0x2164e8[_0x5b1942(0x200)]({'seconds':_0xaad5d1[_0x2e7c3f(0x1ad)]}),_0x114083=_0x2164e8[_0x5b1942(0x200)]({'seconds':_0xaad5d1[_0x2e7c3f(0x134)]});return{..._0xaad5d1,'last_update_date':_0x2164e8[_0x5b1942(0x236)]()[_0x5b1942(0x1de)](),'expires_date':_0x2d2ecd[_0x5b1942(0x236)]()[_0x5b1942(0x1de)](),'expires_at':_0x2d2ecd[_0x2e7c3f(0x143)](),'refresh_token_expires_at':_0x114083[_0x2e7c3f(0x143)]()};}}exports[a5_0x4ee2c5(0x21f)]=HttpClient;
|