@gooin/garmin-connect 1.7.3 → 1.7.4
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.d.ts +59 -0
- package/dist/common/FileMFASessionStorage.js +247 -0
- package/dist/common/FileMFASessionStorage.js.map +1 -0
- package/dist/common/HttpClient.js +7 -3
- package/dist/common/HttpClient.js.map +1 -1
- package/dist/common/MFAManager.d.ts +10 -14
- package/dist/common/MFAManager.js +49 -192
- package/dist/common/MFAManager.js.map +1 -1
- package/dist/common/MFASessionStorage.d.ts +42 -0
- package/dist/common/MFASessionStorage.js +3 -0
- package/dist/common/MFASessionStorage.js.map +1 -0
- package/dist/common/RedisMFASessionStorage.d.ts +60 -0
- package/dist/common/RedisMFASessionStorage.js +281 -0
- package/dist/common/RedisMFASessionStorage.js.map +1 -0
- package/dist/garmin/types/index.d.ts +8 -0
- package/dist/garmin/types/index.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { MFASessionStorage } from './MFASessionStorage';
|
|
2
|
+
/**
|
|
3
|
+
* 文件系统实现的MFA会话存储
|
|
4
|
+
*/
|
|
5
|
+
export declare class FileMFASessionStorage implements MFASessionStorage {
|
|
6
|
+
private readonly storageDir;
|
|
7
|
+
private readonly DEFAULT_TIMEOUT;
|
|
8
|
+
constructor(storageDir: string);
|
|
9
|
+
/**
|
|
10
|
+
* 确保存储目录存在
|
|
11
|
+
*/
|
|
12
|
+
private ensureStorageDir;
|
|
13
|
+
/**
|
|
14
|
+
* 获取会话文件路径
|
|
15
|
+
*/
|
|
16
|
+
private getSessionFilePath;
|
|
17
|
+
/**
|
|
18
|
+
* 创建一个等待MFA验证码的Promise
|
|
19
|
+
* @param sessionId 会话ID
|
|
20
|
+
* @param timeout 超时时间(毫秒)
|
|
21
|
+
* @returns Promise<string> 返回验证码
|
|
22
|
+
*/
|
|
23
|
+
waitForMFACode(sessionId: string, timeout?: number): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* 提交MFA验证码
|
|
26
|
+
* @param sessionId 会话ID
|
|
27
|
+
* @param code 验证码
|
|
28
|
+
* @returns 是否成功提交
|
|
29
|
+
*/
|
|
30
|
+
submitMFACode(sessionId: string, code: string): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* 取消MFA验证
|
|
33
|
+
* @param sessionId 会话ID
|
|
34
|
+
* @param reason 取消原因
|
|
35
|
+
* @returns 是否成功取消
|
|
36
|
+
*/
|
|
37
|
+
cancelMFARequest(sessionId: string, reason?: string): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* 检查会话是否存在
|
|
40
|
+
* @param sessionId 会话ID
|
|
41
|
+
* @returns 是否存在
|
|
42
|
+
*/
|
|
43
|
+
hasSession(sessionId: string): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* 获取所有活跃的会话ID
|
|
46
|
+
* @returns 会话ID列表
|
|
47
|
+
*/
|
|
48
|
+
getActiveSessions(): Promise<string[]>;
|
|
49
|
+
/**
|
|
50
|
+
* 清理过期的请求
|
|
51
|
+
* @param maxAge 最大存活时间(毫秒)
|
|
52
|
+
*/
|
|
53
|
+
cleanupExpiredRequests(maxAge?: number): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* 清理指定会话的资源
|
|
56
|
+
* @param sessionId 会话ID
|
|
57
|
+
*/
|
|
58
|
+
private cleanupRequest;
|
|
59
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
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.FileMFASessionStorage = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
/**
|
|
10
|
+
* 文件系统实现的MFA会话存储
|
|
11
|
+
*/
|
|
12
|
+
class FileMFASessionStorage {
|
|
13
|
+
constructor(storageDir) {
|
|
14
|
+
this.DEFAULT_TIMEOUT = 5 * 60 * 1000; // 5分钟
|
|
15
|
+
this.storageDir = storageDir;
|
|
16
|
+
this.ensureStorageDir();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 确保存储目录存在
|
|
20
|
+
*/
|
|
21
|
+
async ensureStorageDir() {
|
|
22
|
+
try {
|
|
23
|
+
await fs_1.promises.mkdir(this.storageDir, { recursive: true });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('创建MFA存储目录失败:', error);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 获取会话文件路径
|
|
31
|
+
*/
|
|
32
|
+
getSessionFilePath(sessionId) {
|
|
33
|
+
return path_1.default.join(this.storageDir, `${sessionId}.json`);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 创建一个等待MFA验证码的Promise
|
|
37
|
+
* @param sessionId 会话ID
|
|
38
|
+
* @param timeout 超时时间(毫秒)
|
|
39
|
+
* @returns Promise<string> 返回验证码
|
|
40
|
+
*/
|
|
41
|
+
async waitForMFACode(sessionId, timeout = this.DEFAULT_TIMEOUT) {
|
|
42
|
+
// 确保存储目录存在
|
|
43
|
+
await this.ensureStorageDir();
|
|
44
|
+
// 清理可能存在的旧会话
|
|
45
|
+
await this.cleanupRequest(sessionId);
|
|
46
|
+
// 创建会话文件
|
|
47
|
+
const sessionData = {
|
|
48
|
+
sessionId,
|
|
49
|
+
status: 'waiting',
|
|
50
|
+
createdAt: new Date().toISOString(),
|
|
51
|
+
timeout: timeout
|
|
52
|
+
};
|
|
53
|
+
const sessionFilePath = this.getSessionFilePath(sessionId);
|
|
54
|
+
await fs_1.promises.writeFile(sessionFilePath, JSON.stringify(sessionData), 'utf8');
|
|
55
|
+
console.log(`MFA验证会话已创建: ${sessionId}`);
|
|
56
|
+
// 轮询检查验证码是否已提交
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const startTime = Date.now();
|
|
59
|
+
const checkInterval = setInterval(async () => {
|
|
60
|
+
try {
|
|
61
|
+
// 检查是否超时
|
|
62
|
+
if (Date.now() - startTime > timeout) {
|
|
63
|
+
clearInterval(checkInterval);
|
|
64
|
+
await this.cleanupRequest(sessionId);
|
|
65
|
+
reject(new Error('MFA验证超时,请重新登录'));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// 检查会话文件是否存在
|
|
69
|
+
try {
|
|
70
|
+
const data = await fs_1.promises.readFile(sessionFilePath, 'utf8');
|
|
71
|
+
const session = JSON.parse(data);
|
|
72
|
+
// 如果状态已更新为resolved,则返回验证码
|
|
73
|
+
if (session.status === 'resolved' && session.code) {
|
|
74
|
+
clearInterval(checkInterval);
|
|
75
|
+
await this.cleanupRequest(sessionId);
|
|
76
|
+
resolve(session.code);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// 如果状态已更新为rejected,则抛出错误
|
|
80
|
+
if (session.status === 'rejected' && session.error) {
|
|
81
|
+
clearInterval(checkInterval);
|
|
82
|
+
await this.cleanupRequest(sessionId);
|
|
83
|
+
reject(new Error(session.error));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// 文件不存在或其他错误,继续等待
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
clearInterval(checkInterval);
|
|
93
|
+
await this.cleanupRequest(sessionId);
|
|
94
|
+
reject(error instanceof Error
|
|
95
|
+
? error
|
|
96
|
+
: new Error(String(error)));
|
|
97
|
+
}
|
|
98
|
+
}, 1000); // 每秒检查一次
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 提交MFA验证码
|
|
103
|
+
* @param sessionId 会话ID
|
|
104
|
+
* @param code 验证码
|
|
105
|
+
* @returns 是否成功提交
|
|
106
|
+
*/
|
|
107
|
+
async submitMFACode(sessionId, code) {
|
|
108
|
+
const sessionFilePath = this.getSessionFilePath(sessionId);
|
|
109
|
+
try {
|
|
110
|
+
// 检查会话文件是否存在
|
|
111
|
+
const data = await fs_1.promises.readFile(sessionFilePath, 'utf8');
|
|
112
|
+
const session = JSON.parse(data);
|
|
113
|
+
if (session.status !== 'waiting') {
|
|
114
|
+
console.log(`MFA验证会话状态不正确: ${sessionId}, 状态: ${session.status}`);
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
// 更新会话状态为已解决
|
|
118
|
+
session.status = 'resolved';
|
|
119
|
+
session.code = code;
|
|
120
|
+
session.resolvedAt = new Date().toISOString();
|
|
121
|
+
await fs_1.promises.writeFile(sessionFilePath, JSON.stringify(session), 'utf8');
|
|
122
|
+
console.log(`MFA验证码已提交: code ${code}, sessionId ${sessionId}`);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.log(`未找到MFA验证会话: ${sessionId}, 错误: ${error instanceof Error ? error.message : String(error)}`);
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 取消MFA验证
|
|
132
|
+
* @param sessionId 会话ID
|
|
133
|
+
* @param reason 取消原因
|
|
134
|
+
* @returns 是否成功取消
|
|
135
|
+
*/
|
|
136
|
+
async cancelMFARequest(sessionId, reason = 'MFA验证已取消') {
|
|
137
|
+
const sessionFilePath = this.getSessionFilePath(sessionId);
|
|
138
|
+
try {
|
|
139
|
+
// 检查会话文件是否存在
|
|
140
|
+
const data = await fs_1.promises.readFile(sessionFilePath, 'utf8');
|
|
141
|
+
const session = JSON.parse(data);
|
|
142
|
+
// 更新会话状态为已拒绝
|
|
143
|
+
session.status = 'rejected';
|
|
144
|
+
session.error = reason;
|
|
145
|
+
session.rejectedAt = new Date().toISOString();
|
|
146
|
+
await fs_1.promises.writeFile(sessionFilePath, JSON.stringify(session), 'utf8');
|
|
147
|
+
console.log(`MFA验证已取消: ${sessionId}, 原因: ${reason}`);
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
console.log(`未找到MFA验证会话: ${sessionId}, 错误: ${error instanceof Error ? error.message : String(error)}`);
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 检查会话是否存在
|
|
157
|
+
* @param sessionId 会话ID
|
|
158
|
+
* @returns 是否存在
|
|
159
|
+
*/
|
|
160
|
+
async hasSession(sessionId) {
|
|
161
|
+
const sessionFilePath = this.getSessionFilePath(sessionId);
|
|
162
|
+
try {
|
|
163
|
+
await fs_1.promises.access(sessionFilePath);
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
catch (_a) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 获取所有活跃的会话ID
|
|
172
|
+
* @returns 会话ID列表
|
|
173
|
+
*/
|
|
174
|
+
async getActiveSessions() {
|
|
175
|
+
try {
|
|
176
|
+
await this.ensureStorageDir();
|
|
177
|
+
const files = await fs_1.promises.readdir(this.storageDir);
|
|
178
|
+
return files
|
|
179
|
+
.filter((file) => file.endsWith('.json'))
|
|
180
|
+
.map((file) => file.replace('.json', ''));
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
console.error('获取活跃会话失败:', error instanceof Error ? error : String(error));
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* 清理过期的请求
|
|
189
|
+
* @param maxAge 最大存活时间(毫秒)
|
|
190
|
+
*/
|
|
191
|
+
async cleanupExpiredRequests(maxAge = this.DEFAULT_TIMEOUT) {
|
|
192
|
+
try {
|
|
193
|
+
await this.ensureStorageDir();
|
|
194
|
+
const files = await fs_1.promises.readdir(this.storageDir);
|
|
195
|
+
const now = new Date();
|
|
196
|
+
let cleanedCount = 0;
|
|
197
|
+
for (const file of files) {
|
|
198
|
+
if (!file.endsWith('.json'))
|
|
199
|
+
continue;
|
|
200
|
+
try {
|
|
201
|
+
const filePath = path_1.default.join(this.storageDir, file);
|
|
202
|
+
const data = await fs_1.promises.readFile(filePath, 'utf8');
|
|
203
|
+
const session = JSON.parse(data);
|
|
204
|
+
const createdAt = new Date(session.createdAt);
|
|
205
|
+
// 检查是否过期
|
|
206
|
+
if (now.getTime() - createdAt.getTime() > maxAge) {
|
|
207
|
+
await fs_1.promises.unlink(filePath);
|
|
208
|
+
cleanedCount++;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
// 如果文件读取失败,直接删除
|
|
213
|
+
try {
|
|
214
|
+
await fs_1.promises.unlink(path_1.default.join(this.storageDir, file));
|
|
215
|
+
cleanedCount++;
|
|
216
|
+
}
|
|
217
|
+
catch (unlinkError) {
|
|
218
|
+
console.error(`删除过期会话文件失败: ${file}`, unlinkError instanceof Error
|
|
219
|
+
? unlinkError
|
|
220
|
+
: String(unlinkError));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (cleanedCount > 0) {
|
|
225
|
+
console.log(`清理了 ${cleanedCount} 个过期的MFA验证会话`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
console.error('清理过期请求失败:', error instanceof Error ? error : String(error));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 清理指定会话的资源
|
|
234
|
+
* @param sessionId 会话ID
|
|
235
|
+
*/
|
|
236
|
+
async cleanupRequest(sessionId) {
|
|
237
|
+
const sessionFilePath = this.getSessionFilePath(sessionId);
|
|
238
|
+
try {
|
|
239
|
+
await fs_1.promises.unlink(sessionFilePath);
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
// 文件不存在,忽略错误
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
exports.FileMFASessionStorage = FileMFASessionStorage;
|
|
247
|
+
//# sourceMappingURL=FileMFASessionStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileMFASessionStorage.js","sourceRoot":"","sources":["../../src/common/FileMFASessionStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,8 +48,12 @@ class HttpClient {
|
|
|
48
48
|
jar: jar
|
|
49
49
|
}));
|
|
50
50
|
this.config = config;
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
// 使用新的MFA配置初始化MFAManager
|
|
52
|
+
const mfaConfig = config.mfa || {
|
|
53
|
+
type: 'file',
|
|
54
|
+
dir: config.mfaStorageDir || '/tmp'
|
|
55
|
+
};
|
|
56
|
+
this.mfaManager = MFAManager_1.MFAManager.getInstance(mfaConfig);
|
|
53
57
|
this.setupInterceptors();
|
|
54
58
|
}
|
|
55
59
|
/**
|
|
@@ -262,7 +266,7 @@ class HttpClient {
|
|
|
262
266
|
// 如果提供了sessionId,则使用分步登录模式
|
|
263
267
|
if (sessionId) {
|
|
264
268
|
// 等待外部提供验证码
|
|
265
|
-
const mfaCode = await
|
|
269
|
+
const mfaCode = await this.mfaManager.waitForMFACode(sessionId);
|
|
266
270
|
// 使用获取到的验证码完成MFA验证
|
|
267
271
|
signinResult = await this.handleMFAWithCode(signinResult, loginParams.step3Params, mfaCode);
|
|
268
272
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/common/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/common/HttpClient.ts"],"names":[],"mappings":";;;;;;AAAA,kDAKe;AACf,0DAAiC;AACjC,oDAAuB;AACvB,iCAAiC;AACjC,4DAA+B;AAC/B,4CAAoB;AACpB,6CAA0C;AAS1C,8DAAiC;AACjC,+CAAyC;AACzC,qEAAkD;AAElD,UAAU;AACV,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAC5D,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChD,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,0BAA0B,CAAC,CAAC;AACjE,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAE3D,SAAS;AACT,MAAM,wBAAwB,GAAG,uCAAuC,CAAC;AACzE,MAAM,kBAAkB,GACpB,iHAAiH,CAAC;AACtH,MAAM,sBAAsB,GACxB,uHAAuH,CAAC;AAE5H,QAAQ;AACR,MAAM,kBAAkB,GACpB,uDAAuD,CAAC;AAE5D,YAAY;AACZ,MAAM,WAAW,GAAG;IAChB,YAAY,EAAE,GAAG;CACX,CAAC;AAcX,OAAO;AACP,IAAI,mBAAmB,GAAyB,IAAI,CAAC;AACrD,IAAI,kBAAkB,GAAwB,EAAE,CAAC;AAEjD,MAAa,UAAU;IASnB,YAAY,GAAa,EAAE,MAAgB;;QACvC,MAAM,GAAG,GAAG,IAAI,wBAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,IAAA,iCAAO,EACjB,eAAK,CAAC,MAAM,CAAC;YACT,OAAO,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,mCAAI,IAAI;YAChC,mBAAmB,EAAE,sBACjB,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,mCAAI,IACvB,KAAK;YACL,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,UAAU,MAAM;gBAC5B,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;YACzC,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,GAAG,EAAE,GAAG;SACX,CAAC,CACL,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,yBAAyB;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,IAAI;YAC5B,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM;SACtC,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,uBAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,iBAAiB;QACrB,QAAQ;QACR,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACjC,CAAC,QAAQ,EAAE,EAAE;YACT,sCAAsC;YACtC,OAAO,QAAQ,CAAC;QACpB,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACZ,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CACJ,CAAC;QAEF,QAAQ;QACR,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAClD,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,MAAM,CAAC,OAAO,CAAC,aAAa;oBACxB,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;aACjD;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,QAAuB;;QAC/C,IACI,CAAA,MAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,0CAAE,QAAQ,CAAC,QAAQ,CAAC;aACvC,MAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,0CAAE,QAAQ,CAAC,WAAW,CAAC,CAAA,EAC5C;YACE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CACP,eAAe,EACf,CAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,WAAW,KAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CACvD,CAAC;YACF,OAAO,CAAC,GAAG,CACP,eAAe,EACf,CAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,aAAa,KAAI,CAAC,CACvC,CAAC;YAEF,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAC3B,OAAO,CAAC,GAAG,CACP,mBAAmB,EACnB,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAC5B,CAAC;aACL;YAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;gBACjD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACrD;SACJ;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,KAAU;;QACxC,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;YAC5D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAC;SACvD;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC;QAErC,IACI,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,MAAM,MAAK,WAAW,CAAC,YAAY;YACpD,CAAC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,CAAA,EAC1B;YACE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;aAChD;YAED,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC;YAE9B,IAAI;gBACA,IAAI,CAAC,mBAAmB,EAAE;oBACtB,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,CACnD,GAAG,EAAE;wBACD,mBAAmB,GAAG,IAAI,CAAC;oBAC/B,CAAC,CACJ,CAAC;iBACL;gBAED,MAAM,mBAAmB,CAAC;gBAE1B,eAAe,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;gBAClF,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;aACvC;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;gBAC5C,MAAM,GAAG,CAAC;aACb;SACJ;QAED,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE;YAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACpC;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;SAC9D;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACpB,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG;YAClB,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,eAAe;SACxC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACjB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE;gBAC1D,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAChC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;aACnC;SACJ;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAAgC;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACN,GAAW,EACX,IAAS,EACT,MAAgC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9D,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACL,GAAW,EACX,IAAS,EACT,MAAgC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAI,GAAW,EAAE,MAAgC;QACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE;YAClD,GAAG,MAAM;YACT,OAAO,EAAE;gBACL,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO;gBAClB,wBAAwB,EAAE,QAAQ;aACrC;SACJ,CAAC,CAAC;QACH,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,OAA+B;QAC3C,gBAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAuB;QAC/B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAuB;QACnC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QAC9C,MAAM,YAAY,GAAG;YACjB,MAAM;YACN,UAAU;YACV,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SAC/D,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,MAAM,UAAU,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CACP,QAAgB,EAChB,QAAgB,EAChB,SAAkB;QAElB,IAAI;YACA,OAAO;YACP,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEhC,SAAS;YACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CACpC,QAAQ,EACR,QAAQ,EACR,SAAS,CACZ,CAAC;YAEF,aAAa;YACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAEjD,aAAa;YACb,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE5B,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;SACf;IACL,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,cAAc,CACxB,QAAgB,EAChB,QAAgB,EAChB,SAAkB;QAElB,SAAS;QACT,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9C,gBAAgB;QAChB,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEtD,gBAAgB;QAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAExE,YAAY;QACZ,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAC3C,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,CAAC,WAAW,CAC1B,CAAC;QAEF,WAAW;QACX,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAEvC,mBAAmB;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAErD,kBAAkB;QAClB,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;YAC/B,2BAA2B;YAC3B,IAAI,SAAS,EAAE;gBACX,YAAY;gBACZ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAEhE,mBAAmB;gBACnB,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACvC,YAAY,EACZ,WAAW,CAAC,WAAW,EACvB,OAAO,CACV,CAAC;aACL;iBAAM;gBACH,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aAC1C;SACJ;QAED,OAAO;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,IAAI,KAAK,CACX,+BAA+B,CAClC,CAAC;SACL;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,kBAAkB;QACtB,OAAO;YACH,WAAW,EAAE;gBACT,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;aAC9B;YACD,WAAW,EAAE;gBACT,EAAE,EAAE,cAAc;gBAClB,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;aACvC;YACD,WAAW,EAAE;gBACT,EAAE,EAAE,cAAc;gBAClB,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;gBACpC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;gBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;gBACjC,4BAA4B,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;gBACvD,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;aAC7D;SACJ,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC3B,WAAmC;QAEnC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,YAAE,CAAC,SAAS,CACzD,WAAW,CACd,EAAE,CAAC;QACJ,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC3B,WAAmC;QAEnC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,YAAE,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACvE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,QAAQ,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACrC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC3B,QAAgB,EAChB,QAAgB,EAChB,SAAiB,EACjB,WAAmC;QAEnC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,YAAE,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACvE,4DAA4D;QAE5D,MAAM,SAAS,GAAG,IAAI,mBAAQ,EAAE,CAAC;QACjC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAErC,OAAO,IAAI,CAAC,IAAI,CAAS,QAAQ,EAAE,SAAS,EAAE;YAC1C,OAAO,EAAE;gBACL,cAAc,EAAE,mCAAmC;gBACnD,GAAG,EAAE,CAAC;gBACN,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB;gBAClC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU;gBAC5B,YAAY,EAAE,wBAAwB;aACzC;SACJ,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,SAAiB;QACnC,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,YAAoB;QACtC,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,OAAO,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,CACnB,OAAe,EACf,YAAiC,EACjC,OAAe;QAEf,IAAI;YACA,WAAW;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;aACxC;YAED,WAAW;YACX,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CACtC,SAAS,EACT,OAAO,EACP,YAAY,CACf,CAAC;YAEF,UAAU;YACV,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;SAC5C;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;SACxC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACX,OAAe,EACf,YAAiC,EACjC,WAAmC;QAEnC,YAAY;QACZ,IAAI,CAAC,WAAW,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC/C;QAED,WAAW;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACjD,yDAAyD;QACzD,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACvC;QAED,WAAW;QACX,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;QAElD,UAAU;QACV,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CACtC,SAAS,EACT,OAAO,EACP,YAAY,CACf,CAAC;QAEF,UAAU;QACV,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACvB,SAAiB,EACjB,OAAe,EACf,YAAiC;QAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC,IAAI,CACZ,GAAG,GAAG,8BAA8B,EACpC,OAAO,EACP;YACI,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE;gBACL,cAAc,EAAE,mCAAmC;gBACnD,GAAG,EAAE,CAAC;gBACN,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB;gBAClC,OAAO,EAAE,GAAG,GAAG,SAAS;gBACxB,YAAY,EAAE,kBAAkB;aACnC;YACD,YAAY,EAAE,EAAE;YAChB,iBAAiB,EAAE;gBACf,UAAU,IAAI,EAAE,OAAO;oBACnB,IACI,OAAO,CAAC,QAAQ;wBAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EACzC;wBACE,OAAO,CAAC,GAAG,CACP,0BAA0B,EAC1B,OAAO,CAAC,QAAQ,CACnB,CAAC;qBACL;oBACD,OAAO,IAAI,CAAC;gBAChB,CAAC;aACJ;SACJ,CACJ,CAAC;IACN,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAiB;QACvC,sCAAsC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAe;QAC3B,MAAM,kBAAkB,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,kBAAkB,EAAE;YACpB,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9B,IAAI,gBAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,EAAE;gBAC1C,MAAM,IAAI,KAAK,CACX,uEAAuE,CAC1E,CAAC;aACL;YACD,OAAO,KAAK,CAAC;SAChB;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;SACpC;IACL,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,OAAe;QAC/B,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,sBAAsB,EAAE;YACxB,MAAM,GAAG,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,IAAI,KAAK,CACX,gCAAgC,CACnC,CAAC;SACL;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACpB,IAAI;YACA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACtB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;aACnC;YAED,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACxC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;aACpC;YAED,MAAM,MAAM,GAAG;gBACX,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAe,CAAC;gBAChD,KAAK,EAAE,IAAI,CAAC,WAAW;aAC1B,CAAC;YAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CACP,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,gBAAgB,CAChE,CAAC;SACL;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;SACf;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,MAAc;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;SACpC;QAED,MAAM,MAAM,GAAG;YACX,MAAM;YACN,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;YACtC,oBAAoB,EAAE,IAAI;SAC7B,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,kBAAkB,YAAE,CAAC,SAAS,CAC3D,MAAM,CACT,EAAE,CAAC;QAEJ,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEvD,MAAM,WAAW,GAAG;YAChB,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,GAAG,EAAE;YACzC,OAAO,EAAE;gBACL,GAAG,OAAO;gBACV,YAAY,EAAE,wBAAwB;aACzC;SACJ,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,YAAE,CAAC,KAAK,CAAC,QAAQ,CAA4B,CAAC;QAC5D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,QAAyB;QACpC,OAAO,IAAI,oBAAK,CAAC;YACb,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,WAAW;YAC7B,aAAa,CAAC,WAAmB,EAAE,GAAW;gBAC1C,OAAO,qBAAM;qBACR,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;qBACvB,MAAM,CAAC,WAAW,CAAC;qBACnB,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAe;QAC1B,MAAM,KAAK,GAAG;YACV,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;YAC7B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB;SAC1C,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,oBAAoB,CAAC;QAC1D,MAAM,WAAW,GAAG;YAChB,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI;SACb,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,YAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAEnD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAe,GAAG,EAAE,IAAI,EAAE;YACtD,OAAO,EAAE;gBACL,YAAY,EAAE,wBAAwB;gBACtC,cAAc,EAAE,mCAAmC;aACtD;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACH,uBAAuB,CAAC,KAAmB;QACvC,MAAM,GAAG,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,MAAM,qBAAqB,GAAG,GAAG,CAAC,IAAI,CAAC;YACnC,OAAO,EAAE,KAAK,CAAC,wBAAwB;SAC1C,CAAC,CAAC;QAEH,OAAO;YACH,GAAG,KAAK;YACR,gBAAgB,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC1C,YAAY,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC5C,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE;YACjC,wBAAwB,EAAE,qBAAqB,CAAC,SAAS,EAAE;SAC9D,CAAC;IACN,CAAC;CACJ;AAlvBD,gCAkvBC"}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
+
import { MFAConfig } from '../garmin/types';
|
|
1
2
|
/**
|
|
2
3
|
* MFA管理器,用于处理需要等待外部验证码的登录流程
|
|
3
|
-
*
|
|
4
|
+
* 支持文件系统和Redis两种存储方式
|
|
4
5
|
*/
|
|
5
6
|
export declare class MFAManager {
|
|
6
7
|
private static instance;
|
|
7
|
-
|
|
8
|
+
private storage;
|
|
8
9
|
private readonly DEFAULT_TIMEOUT;
|
|
9
10
|
private constructor();
|
|
10
11
|
/**
|
|
11
12
|
* 获取MFA管理器单例
|
|
12
13
|
*/
|
|
13
|
-
static getInstance(
|
|
14
|
+
static getInstance(config?: MFAConfig): MFAManager;
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
+
* 重置单例实例,用于测试或重新配置
|
|
16
17
|
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* 获取会话文件路径
|
|
20
|
-
*/
|
|
21
|
-
private getSessionFilePath;
|
|
18
|
+
static resetInstance(): void;
|
|
22
19
|
/**
|
|
23
20
|
* 创建一个等待MFA验证码的Promise
|
|
24
21
|
* @param sessionId 会话ID
|
|
@@ -56,13 +53,12 @@ export declare class MFAManager {
|
|
|
56
53
|
* @param maxAge 最大存活时间(毫秒)
|
|
57
54
|
*/
|
|
58
55
|
cleanupExpiredRequests(maxAge?: number): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* 清理指定会话的资源
|
|
61
|
-
* @param sessionId 会话ID
|
|
62
|
-
*/
|
|
63
|
-
private cleanupRequest;
|
|
64
56
|
/**
|
|
65
57
|
* 定期清理过期请求
|
|
66
58
|
*/
|
|
67
59
|
startCleanupTask(interval?: number): void;
|
|
60
|
+
/**
|
|
61
|
+
* 关闭资源连接(主要用于Redis)
|
|
62
|
+
*/
|
|
63
|
+
disconnect(): Promise<void>;
|
|
68
64
|
}
|
|
@@ -4,47 +4,57 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MFAManager = void 0;
|
|
7
|
-
const
|
|
7
|
+
const FileMFASessionStorage_1 = require("./FileMFASessionStorage");
|
|
8
|
+
const RedisMFASessionStorage_1 = require("./RedisMFASessionStorage");
|
|
8
9
|
const path_1 = __importDefault(require("path"));
|
|
9
10
|
/**
|
|
10
11
|
* MFA管理器,用于处理需要等待外部验证码的登录流程
|
|
11
|
-
*
|
|
12
|
+
* 支持文件系统和Redis两种存储方式
|
|
12
13
|
*/
|
|
13
14
|
class MFAManager {
|
|
14
|
-
constructor(
|
|
15
|
+
constructor(config) {
|
|
15
16
|
this.DEFAULT_TIMEOUT = 5 * 60 * 1000; // 5分钟
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
// 根据配置创建不同的存储实现
|
|
18
|
+
if (config.type === 'redis') {
|
|
19
|
+
if (config.redis) {
|
|
20
|
+
this.storage = new RedisMFASessionStorage_1.RedisMFASessionStorage(undefined, undefined, config.redis);
|
|
21
|
+
}
|
|
22
|
+
else if (config.redisUrl && config.redisToken) {
|
|
23
|
+
this.storage = new RedisMFASessionStorage_1.RedisMFASessionStorage(config.redisUrl, config.redisToken);
|
|
24
|
+
}
|
|
25
|
+
else if (config.redisUrl) {
|
|
26
|
+
this.storage = new RedisMFASessionStorage_1.RedisMFASessionStorage(config.redisUrl);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error('Redis配置不完整,需要提供redisUrl或redis实例');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (config.type === 'file') {
|
|
33
|
+
const storageDir = config.dir || path_1.default.join(process.cwd(), '.mfa-sessions');
|
|
34
|
+
this.storage = new FileMFASessionStorage_1.FileMFASessionStorage(storageDir);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
throw new Error(`不支持的MFA存储类型: ${config.type}`);
|
|
38
|
+
}
|
|
20
39
|
}
|
|
21
40
|
/**
|
|
22
41
|
* 获取MFA管理器单例
|
|
23
42
|
*/
|
|
24
|
-
static getInstance(
|
|
43
|
+
static getInstance(config) {
|
|
25
44
|
if (!MFAManager.instance) {
|
|
26
|
-
|
|
27
|
-
|
|
45
|
+
if (!config) {
|
|
46
|
+
throw new Error('首次创建MFAManager实例必须提供配置');
|
|
47
|
+
}
|
|
48
|
+
console.log('创建MFA管理器实例', config);
|
|
49
|
+
MFAManager.instance = new MFAManager(config);
|
|
28
50
|
}
|
|
29
|
-
console.log('返回MFA管理器实例', MFAManager.instance.storageDir);
|
|
30
51
|
return MFAManager.instance;
|
|
31
52
|
}
|
|
32
53
|
/**
|
|
33
|
-
*
|
|
34
|
-
*/
|
|
35
|
-
async ensureStorageDir() {
|
|
36
|
-
try {
|
|
37
|
-
await fs_1.promises.mkdir(this.storageDir, { recursive: true });
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
console.error('创建MFA存储目录失败:', error);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 获取会话文件路径
|
|
54
|
+
* 重置单例实例,用于测试或重新配置
|
|
45
55
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
56
|
+
static resetInstance() {
|
|
57
|
+
MFAManager.instance = undefined;
|
|
48
58
|
}
|
|
49
59
|
/**
|
|
50
60
|
* 创建一个等待MFA验证码的Promise
|
|
@@ -53,64 +63,7 @@ class MFAManager {
|
|
|
53
63
|
* @returns Promise<string> 返回验证码
|
|
54
64
|
*/
|
|
55
65
|
async waitForMFACode(sessionId, timeout = this.DEFAULT_TIMEOUT) {
|
|
56
|
-
|
|
57
|
-
await this.ensureStorageDir();
|
|
58
|
-
// 清理可能存在的旧会话
|
|
59
|
-
await this.cleanupRequest(sessionId);
|
|
60
|
-
// 创建会话文件
|
|
61
|
-
const sessionData = {
|
|
62
|
-
sessionId,
|
|
63
|
-
status: 'waiting',
|
|
64
|
-
createdAt: new Date().toISOString(),
|
|
65
|
-
timeout: timeout
|
|
66
|
-
};
|
|
67
|
-
const sessionFilePath = this.getSessionFilePath(sessionId);
|
|
68
|
-
await fs_1.promises.writeFile(sessionFilePath, JSON.stringify(sessionData), 'utf8');
|
|
69
|
-
console.log(`MFA验证会话已创建: ${sessionId}`);
|
|
70
|
-
// 轮询检查验证码是否已提交
|
|
71
|
-
return new Promise((resolve, reject) => {
|
|
72
|
-
const startTime = Date.now();
|
|
73
|
-
const checkInterval = setInterval(async () => {
|
|
74
|
-
try {
|
|
75
|
-
// 检查是否超时
|
|
76
|
-
if (Date.now() - startTime > timeout) {
|
|
77
|
-
clearInterval(checkInterval);
|
|
78
|
-
await this.cleanupRequest(sessionId);
|
|
79
|
-
reject(new Error('MFA验证超时,请重新登录'));
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
// 检查会话文件是否存在
|
|
83
|
-
try {
|
|
84
|
-
const data = await fs_1.promises.readFile(sessionFilePath, 'utf8');
|
|
85
|
-
const session = JSON.parse(data);
|
|
86
|
-
// 如果状态已更新为resolved,则返回验证码
|
|
87
|
-
if (session.status === 'resolved' && session.code) {
|
|
88
|
-
clearInterval(checkInterval);
|
|
89
|
-
await this.cleanupRequest(sessionId);
|
|
90
|
-
resolve(session.code);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
// 如果状态已更新为rejected,则抛出错误
|
|
94
|
-
if (session.status === 'rejected' && session.error) {
|
|
95
|
-
clearInterval(checkInterval);
|
|
96
|
-
await this.cleanupRequest(sessionId);
|
|
97
|
-
reject(new Error(session.error));
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
// 文件不存在或其他错误,继续等待
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
clearInterval(checkInterval);
|
|
107
|
-
await this.cleanupRequest(sessionId);
|
|
108
|
-
reject(error instanceof Error
|
|
109
|
-
? error
|
|
110
|
-
: new Error(String(error)));
|
|
111
|
-
}
|
|
112
|
-
}, 1000); // 每秒检查一次
|
|
113
|
-
});
|
|
66
|
+
return this.storage.waitForMFACode(sessionId, timeout);
|
|
114
67
|
}
|
|
115
68
|
/**
|
|
116
69
|
* 提交MFA验证码
|
|
@@ -119,27 +72,7 @@ class MFAManager {
|
|
|
119
72
|
* @returns 是否成功提交
|
|
120
73
|
*/
|
|
121
74
|
async submitMFACode(sessionId, code) {
|
|
122
|
-
|
|
123
|
-
try {
|
|
124
|
-
// 检查会话文件是否存在
|
|
125
|
-
const data = await fs_1.promises.readFile(sessionFilePath, 'utf8');
|
|
126
|
-
const session = JSON.parse(data);
|
|
127
|
-
if (session.status !== 'waiting') {
|
|
128
|
-
console.log(`MFA验证会话状态不正确: ${sessionId}, 状态: ${session.status}`);
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
// 更新会话状态为已解决
|
|
132
|
-
session.status = 'resolved';
|
|
133
|
-
session.code = code;
|
|
134
|
-
session.resolvedAt = new Date().toISOString();
|
|
135
|
-
await fs_1.promises.writeFile(sessionFilePath, JSON.stringify(session), 'utf8');
|
|
136
|
-
console.log(`MFA验证码已提交: code ${code}, sessionId ${sessionId}`);
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
console.log(`未找到MFA验证会话: ${sessionId}, 错误: ${error instanceof Error ? error.message : String(error)}`);
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
75
|
+
return this.storage.submitMFACode(sessionId, code);
|
|
143
76
|
}
|
|
144
77
|
/**
|
|
145
78
|
* 取消MFA验证
|
|
@@ -148,23 +81,7 @@ class MFAManager {
|
|
|
148
81
|
* @returns 是否成功取消
|
|
149
82
|
*/
|
|
150
83
|
async cancelMFARequest(sessionId, reason = 'MFA验证已取消') {
|
|
151
|
-
|
|
152
|
-
try {
|
|
153
|
-
// 检查会话文件是否存在
|
|
154
|
-
const data = await fs_1.promises.readFile(sessionFilePath, 'utf8');
|
|
155
|
-
const session = JSON.parse(data);
|
|
156
|
-
// 更新会话状态为已拒绝
|
|
157
|
-
session.status = 'rejected';
|
|
158
|
-
session.error = reason;
|
|
159
|
-
session.rejectedAt = new Date().toISOString();
|
|
160
|
-
await fs_1.promises.writeFile(sessionFilePath, JSON.stringify(session), 'utf8');
|
|
161
|
-
console.log(`MFA验证已取消: ${sessionId}, 原因: ${reason}`);
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
catch (error) {
|
|
165
|
-
console.log(`未找到MFA验证会话: ${sessionId}, 错误: ${error instanceof Error ? error.message : String(error)}`);
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
84
|
+
return this.storage.cancelMFARequest(sessionId, reason);
|
|
168
85
|
}
|
|
169
86
|
/**
|
|
170
87
|
* 检查会话是否存在
|
|
@@ -172,89 +89,21 @@ class MFAManager {
|
|
|
172
89
|
* @returns 是否存在
|
|
173
90
|
*/
|
|
174
91
|
async hasSession(sessionId) {
|
|
175
|
-
|
|
176
|
-
try {
|
|
177
|
-
await fs_1.promises.access(sessionFilePath);
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
catch (_a) {
|
|
181
|
-
return false;
|
|
182
|
-
}
|
|
92
|
+
return this.storage.hasSession(sessionId);
|
|
183
93
|
}
|
|
184
94
|
/**
|
|
185
95
|
* 获取所有活跃的会话ID
|
|
186
96
|
* @returns 会话ID列表
|
|
187
97
|
*/
|
|
188
98
|
async getActiveSessions() {
|
|
189
|
-
|
|
190
|
-
await this.ensureStorageDir();
|
|
191
|
-
const files = await fs_1.promises.readdir(this.storageDir);
|
|
192
|
-
return files
|
|
193
|
-
.filter((file) => file.endsWith('.json'))
|
|
194
|
-
.map((file) => file.replace('.json', ''));
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
console.error('获取活跃会话失败:', error instanceof Error ? error : String(error));
|
|
198
|
-
return [];
|
|
199
|
-
}
|
|
99
|
+
return this.storage.getActiveSessions();
|
|
200
100
|
}
|
|
201
101
|
/**
|
|
202
102
|
* 清理过期的请求
|
|
203
103
|
* @param maxAge 最大存活时间(毫秒)
|
|
204
104
|
*/
|
|
205
105
|
async cleanupExpiredRequests(maxAge = this.DEFAULT_TIMEOUT) {
|
|
206
|
-
|
|
207
|
-
await this.ensureStorageDir();
|
|
208
|
-
const files = await fs_1.promises.readdir(this.storageDir);
|
|
209
|
-
const now = new Date();
|
|
210
|
-
let cleanedCount = 0;
|
|
211
|
-
for (const file of files) {
|
|
212
|
-
if (!file.endsWith('.json'))
|
|
213
|
-
continue;
|
|
214
|
-
try {
|
|
215
|
-
const filePath = path_1.default.join(this.storageDir, file);
|
|
216
|
-
const data = await fs_1.promises.readFile(filePath, 'utf8');
|
|
217
|
-
const session = JSON.parse(data);
|
|
218
|
-
const createdAt = new Date(session.createdAt);
|
|
219
|
-
// 检查是否过期
|
|
220
|
-
if (now.getTime() - createdAt.getTime() > maxAge) {
|
|
221
|
-
await fs_1.promises.unlink(filePath);
|
|
222
|
-
cleanedCount++;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
// 如果文件读取失败,直接删除
|
|
227
|
-
try {
|
|
228
|
-
await fs_1.promises.unlink(path_1.default.join(this.storageDir, file));
|
|
229
|
-
cleanedCount++;
|
|
230
|
-
}
|
|
231
|
-
catch (unlinkError) {
|
|
232
|
-
console.error(`删除过期会话文件失败: ${file}`, unlinkError instanceof Error
|
|
233
|
-
? unlinkError
|
|
234
|
-
: String(unlinkError));
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
if (cleanedCount > 0) {
|
|
239
|
-
console.log(`清理了 ${cleanedCount} 个过期的MFA验证会话`);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
catch (error) {
|
|
243
|
-
console.error('清理过期请求失败:', error instanceof Error ? error : String(error));
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* 清理指定会话的资源
|
|
248
|
-
* @param sessionId 会话ID
|
|
249
|
-
*/
|
|
250
|
-
async cleanupRequest(sessionId) {
|
|
251
|
-
const sessionFilePath = this.getSessionFilePath(sessionId);
|
|
252
|
-
try {
|
|
253
|
-
await fs_1.promises.unlink(sessionFilePath);
|
|
254
|
-
}
|
|
255
|
-
catch (error) {
|
|
256
|
-
// 文件不存在,忽略错误
|
|
257
|
-
}
|
|
106
|
+
return this.storage.cleanupExpiredRequests(maxAge);
|
|
258
107
|
}
|
|
259
108
|
/**
|
|
260
109
|
* 定期清理过期请求
|
|
@@ -264,6 +113,14 @@ class MFAManager {
|
|
|
264
113
|
this.cleanupExpiredRequests();
|
|
265
114
|
}, interval);
|
|
266
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* 关闭资源连接(主要用于Redis)
|
|
118
|
+
*/
|
|
119
|
+
async disconnect() {
|
|
120
|
+
if (this.storage instanceof RedisMFASessionStorage_1.RedisMFASessionStorage) {
|
|
121
|
+
await this.storage.disconnect();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
267
124
|
}
|
|
268
125
|
exports.MFAManager = MFAManager;
|
|
269
126
|
//# sourceMappingURL=MFAManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MFAManager.js","sourceRoot":"","sources":["../../src/common/MFAManager.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"MFAManager.js","sourceRoot":"","sources":["../../src/common/MFAManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MFA存储接口,定义了MFA会话存储的基本操作
|
|
3
|
+
*/
|
|
4
|
+
export interface MFASessionStorage {
|
|
5
|
+
/**
|
|
6
|
+
* 创建一个等待MFA验证码的会话
|
|
7
|
+
* @param sessionId 会话ID
|
|
8
|
+
* @param timeout 超时时间(毫秒)
|
|
9
|
+
* @returns Promise<string> 返回验证码
|
|
10
|
+
*/
|
|
11
|
+
waitForMFACode(sessionId: string, timeout?: number): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* 提交MFA验证码
|
|
14
|
+
* @param sessionId 会话ID
|
|
15
|
+
* @param code 验证码
|
|
16
|
+
* @returns 是否成功提交
|
|
17
|
+
*/
|
|
18
|
+
submitMFACode(sessionId: string, code: string): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* 取消MFA验证
|
|
21
|
+
* @param sessionId 会话ID
|
|
22
|
+
* @param reason 取消原因
|
|
23
|
+
* @returns 是否成功取消
|
|
24
|
+
*/
|
|
25
|
+
cancelMFARequest(sessionId: string, reason?: string): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* 检查会话是否存在
|
|
28
|
+
* @param sessionId 会话ID
|
|
29
|
+
* @returns 是否存在
|
|
30
|
+
*/
|
|
31
|
+
hasSession(sessionId: string): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* 获取所有活跃的会话ID
|
|
34
|
+
* @returns 会话ID列表
|
|
35
|
+
*/
|
|
36
|
+
getActiveSessions(): Promise<string[]>;
|
|
37
|
+
/**
|
|
38
|
+
* 清理过期的请求
|
|
39
|
+
* @param maxAge 最大存活时间(毫秒)
|
|
40
|
+
*/
|
|
41
|
+
cleanupExpiredRequests(maxAge?: number): Promise<void>;
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MFASessionStorage.js","sourceRoot":"","sources":["../../src/common/MFASessionStorage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { MFASessionStorage } from './MFASessionStorage';
|
|
2
|
+
/**
|
|
3
|
+
* Redis实现的MFA会话存储
|
|
4
|
+
*/
|
|
5
|
+
export declare class RedisMFASessionStorage implements MFASessionStorage {
|
|
6
|
+
private redis;
|
|
7
|
+
private readonly DEFAULT_TIMEOUT;
|
|
8
|
+
private readonly KEY_PREFIX;
|
|
9
|
+
constructor(redisUrl?: string, redisToken?: string, redisClient?: any);
|
|
10
|
+
/**
|
|
11
|
+
* 获取会话键名
|
|
12
|
+
*/
|
|
13
|
+
private getSessionKey;
|
|
14
|
+
/**
|
|
15
|
+
* 创建一个等待MFA验证码的Promise
|
|
16
|
+
* @param sessionId 会话ID
|
|
17
|
+
* @param timeout 超时时间(毫秒)
|
|
18
|
+
* @returns Promise<string> 返回验证码
|
|
19
|
+
*/
|
|
20
|
+
waitForMFACode(sessionId: string, timeout?: number): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* 提交MFA验证码
|
|
23
|
+
* @param sessionId 会话ID
|
|
24
|
+
* @param code 验证码
|
|
25
|
+
* @returns 是否成功提交
|
|
26
|
+
*/
|
|
27
|
+
submitMFACode(sessionId: string, code: string): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* 取消MFA验证
|
|
30
|
+
* @param sessionId 会话ID
|
|
31
|
+
* @param reason 取消原因
|
|
32
|
+
* @returns 是否成功取消
|
|
33
|
+
*/
|
|
34
|
+
cancelMFARequest(sessionId: string, reason?: string): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* 检查会话是否存在
|
|
37
|
+
* @param sessionId 会话ID
|
|
38
|
+
* @returns 是否存在
|
|
39
|
+
*/
|
|
40
|
+
hasSession(sessionId: string): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* 获取所有活跃的会话ID
|
|
43
|
+
* @returns 会话ID列表
|
|
44
|
+
*/
|
|
45
|
+
getActiveSessions(): Promise<string[]>;
|
|
46
|
+
/**
|
|
47
|
+
* 清理过期的请求
|
|
48
|
+
* @param maxAge 最大存活时间(毫秒)
|
|
49
|
+
*/
|
|
50
|
+
cleanupExpiredRequests(maxAge?: number): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* 清理指定会话的资源
|
|
53
|
+
* @param sessionId 会话ID
|
|
54
|
+
*/
|
|
55
|
+
private cleanupRequest;
|
|
56
|
+
/**
|
|
57
|
+
* 关闭Redis连接
|
|
58
|
+
*/
|
|
59
|
+
disconnect(): Promise<void>;
|
|
60
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RedisMFASessionStorage = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Redis实现的MFA会话存储
|
|
6
|
+
*/
|
|
7
|
+
class RedisMFASessionStorage {
|
|
8
|
+
constructor(redisUrl, redisToken, redisClient) {
|
|
9
|
+
this.DEFAULT_TIMEOUT = 5 * 60 * 1000; // 5分钟
|
|
10
|
+
this.KEY_PREFIX = 'mfa:session:';
|
|
11
|
+
if (redisClient) {
|
|
12
|
+
this.redis = redisClient;
|
|
13
|
+
}
|
|
14
|
+
else if (redisUrl && redisToken) {
|
|
15
|
+
// 使用Upstash Redis
|
|
16
|
+
try {
|
|
17
|
+
const { Redis } = require('@upstash/redis');
|
|
18
|
+
this.redis = new Redis({
|
|
19
|
+
url: redisUrl,
|
|
20
|
+
token: redisToken
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new Error('Upstash Redis module not found. Please install @upstash/redis: npm install @upstash/redis');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else if (redisUrl) {
|
|
28
|
+
// 动态导入redis模块
|
|
29
|
+
try {
|
|
30
|
+
const Redis = require('ioredis');
|
|
31
|
+
this.redis = new Redis(redisUrl);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new Error('Redis module not found. Please install ioredis: npm install ioredis');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
throw new Error('Either redisUrl with redisToken (for Upstash) or redisClient must be provided');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 获取会话键名
|
|
43
|
+
*/
|
|
44
|
+
getSessionKey(sessionId) {
|
|
45
|
+
return `${this.KEY_PREFIX}${sessionId}`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 创建一个等待MFA验证码的Promise
|
|
49
|
+
* @param sessionId 会话ID
|
|
50
|
+
* @param timeout 超时时间(毫秒)
|
|
51
|
+
* @returns Promise<string> 返回验证码
|
|
52
|
+
*/
|
|
53
|
+
async waitForMFACode(sessionId, timeout = this.DEFAULT_TIMEOUT) {
|
|
54
|
+
// 清理可能存在的旧会话
|
|
55
|
+
await this.cleanupRequest(sessionId);
|
|
56
|
+
// 创建会话数据
|
|
57
|
+
const sessionData = {
|
|
58
|
+
sessionId,
|
|
59
|
+
status: 'waiting',
|
|
60
|
+
createdAt: new Date().toISOString(),
|
|
61
|
+
timeout: timeout
|
|
62
|
+
};
|
|
63
|
+
const sessionKey = this.getSessionKey(sessionId);
|
|
64
|
+
// 使用Redis的SET命令存储会话数据,并设置过期时间
|
|
65
|
+
await this.redis.setex(sessionKey, Math.ceil(timeout / 1000), // Redis的TTL是秒
|
|
66
|
+
JSON.stringify(sessionData));
|
|
67
|
+
console.log(`MFA验证会话已创建: ${sessionId}`);
|
|
68
|
+
// 轮询检查验证码是否已提交
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
const startTime = Date.now();
|
|
71
|
+
const checkInterval = setInterval(async () => {
|
|
72
|
+
try {
|
|
73
|
+
// 检查是否超时
|
|
74
|
+
if (Date.now() - startTime > timeout) {
|
|
75
|
+
clearInterval(checkInterval);
|
|
76
|
+
await this.cleanupRequest(sessionId);
|
|
77
|
+
reject(new Error('MFA验证超时,请重新登录'));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// 检查会话状态
|
|
81
|
+
const data = await this.redis.get(sessionKey);
|
|
82
|
+
if (!data) {
|
|
83
|
+
clearInterval(checkInterval);
|
|
84
|
+
reject(new Error('MFA验证会话已过期'));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// 确保data是字符串,如果是对象则先转换为字符串
|
|
88
|
+
const dataStr = typeof data === 'string' ? data : JSON.stringify(data);
|
|
89
|
+
const session = JSON.parse(dataStr);
|
|
90
|
+
// 如果状态已更新为resolved,则返回验证码
|
|
91
|
+
if (session.status === 'resolved' && session.code) {
|
|
92
|
+
clearInterval(checkInterval);
|
|
93
|
+
await this.cleanupRequest(sessionId);
|
|
94
|
+
resolve(session.code);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// 如果状态已更新为rejected,则抛出错误
|
|
98
|
+
if (session.status === 'rejected' && session.error) {
|
|
99
|
+
clearInterval(checkInterval);
|
|
100
|
+
await this.cleanupRequest(sessionId);
|
|
101
|
+
reject(new Error(session.error));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
clearInterval(checkInterval);
|
|
107
|
+
await this.cleanupRequest(sessionId);
|
|
108
|
+
reject(error instanceof Error
|
|
109
|
+
? error
|
|
110
|
+
: new Error(String(error)));
|
|
111
|
+
}
|
|
112
|
+
}, 1000); // 每秒检查一次
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 提交MFA验证码
|
|
117
|
+
* @param sessionId 会话ID
|
|
118
|
+
* @param code 验证码
|
|
119
|
+
* @returns 是否成功提交
|
|
120
|
+
*/
|
|
121
|
+
async submitMFACode(sessionId, code) {
|
|
122
|
+
const sessionKey = this.getSessionKey(sessionId);
|
|
123
|
+
try {
|
|
124
|
+
// 获取会话数据
|
|
125
|
+
const data = await this.redis.get(sessionKey);
|
|
126
|
+
if (!data) {
|
|
127
|
+
console.log(`未找到MFA验证会话: ${sessionId}`);
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
// 确保data是字符串,如果是对象则先转换为字符串
|
|
131
|
+
const dataStr = typeof data === 'string' ? data : JSON.stringify(data);
|
|
132
|
+
const session = JSON.parse(dataStr);
|
|
133
|
+
if (session.status !== 'waiting') {
|
|
134
|
+
console.log(`MFA验证会话状态不正确: ${sessionId}, 状态: ${session.status}`);
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
// 更新会话状态为已解决
|
|
138
|
+
session.status = 'resolved';
|
|
139
|
+
session.code = code;
|
|
140
|
+
session.resolvedAt = new Date().toISOString();
|
|
141
|
+
await this.redis.set(sessionKey, JSON.stringify(session));
|
|
142
|
+
console.log(`MFA验证码已提交: code ${code}, sessionId ${sessionId}`);
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.log(`提交MFA验证码失败: ${sessionId}, 错误: ${error instanceof Error ? error.message : String(error)}`);
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 取消MFA验证
|
|
152
|
+
* @param sessionId 会话ID
|
|
153
|
+
* @param reason 取消原因
|
|
154
|
+
* @returns 是否成功取消
|
|
155
|
+
*/
|
|
156
|
+
async cancelMFARequest(sessionId, reason = 'MFA验证已取消') {
|
|
157
|
+
const sessionKey = this.getSessionKey(sessionId);
|
|
158
|
+
try {
|
|
159
|
+
// 获取会话数据
|
|
160
|
+
const data = await this.redis.get(sessionKey);
|
|
161
|
+
if (!data) {
|
|
162
|
+
console.log(`未找到MFA验证会话: ${sessionId}`);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
// 确保data是字符串,如果是对象则先转换为字符串
|
|
166
|
+
const dataStr = typeof data === 'string' ? data : JSON.stringify(data);
|
|
167
|
+
const session = JSON.parse(dataStr);
|
|
168
|
+
// 更新会话状态为已拒绝
|
|
169
|
+
session.status = 'rejected';
|
|
170
|
+
session.error = reason;
|
|
171
|
+
session.rejectedAt = new Date().toISOString();
|
|
172
|
+
await this.redis.set(sessionKey, JSON.stringify(session));
|
|
173
|
+
console.log(`MFA验证已取消: ${sessionId}, 原因: ${reason}`);
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
console.log(`取消MFA验证失败: ${sessionId}, 错误: ${error instanceof Error ? error.message : String(error)}`);
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 检查会话是否存在
|
|
183
|
+
* @param sessionId 会话ID
|
|
184
|
+
* @returns 是否存在
|
|
185
|
+
*/
|
|
186
|
+
async hasSession(sessionId) {
|
|
187
|
+
const sessionKey = this.getSessionKey(sessionId);
|
|
188
|
+
try {
|
|
189
|
+
const exists = await this.redis.exists(sessionKey);
|
|
190
|
+
return exists === 1;
|
|
191
|
+
}
|
|
192
|
+
catch (_a) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 获取所有活跃的会话ID
|
|
198
|
+
* @returns 会话ID列表
|
|
199
|
+
*/
|
|
200
|
+
async getActiveSessions() {
|
|
201
|
+
try {
|
|
202
|
+
const keys = await this.redis.keys(`${this.KEY_PREFIX}*`);
|
|
203
|
+
return keys.map((key) => key.replace(this.KEY_PREFIX, ''));
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.error('获取活跃会话失败:', error instanceof Error ? error : String(error));
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* 清理过期的请求
|
|
212
|
+
* @param maxAge 最大存活时间(毫秒)
|
|
213
|
+
*/
|
|
214
|
+
async cleanupExpiredRequests(maxAge = this.DEFAULT_TIMEOUT) {
|
|
215
|
+
try {
|
|
216
|
+
const keys = await this.redis.keys(`${this.KEY_PREFIX}*`);
|
|
217
|
+
const now = new Date();
|
|
218
|
+
let cleanedCount = 0;
|
|
219
|
+
for (const key of keys) {
|
|
220
|
+
try {
|
|
221
|
+
const data = await this.redis.get(key);
|
|
222
|
+
if (!data)
|
|
223
|
+
continue;
|
|
224
|
+
// 确保data是字符串,如果是对象则先转换为字符串
|
|
225
|
+
const dataStr = typeof data === 'string' ? data : JSON.stringify(data);
|
|
226
|
+
const session = JSON.parse(dataStr);
|
|
227
|
+
const createdAt = new Date(session.createdAt);
|
|
228
|
+
// 检查是否过期
|
|
229
|
+
if (now.getTime() - createdAt.getTime() > maxAge) {
|
|
230
|
+
await this.redis.del(key);
|
|
231
|
+
cleanedCount++;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
// 如果处理失败,直接删除
|
|
236
|
+
try {
|
|
237
|
+
await this.redis.del(key);
|
|
238
|
+
cleanedCount++;
|
|
239
|
+
}
|
|
240
|
+
catch (unlinkError) {
|
|
241
|
+
console.error(`删除过期会话失败: ${key}`, unlinkError instanceof Error
|
|
242
|
+
? unlinkError
|
|
243
|
+
: String(unlinkError));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (cleanedCount > 0) {
|
|
248
|
+
console.log(`清理了 ${cleanedCount} 个过期的MFA验证会话`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
console.error('清理过期请求失败:', error instanceof Error ? error : String(error));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 清理指定会话的资源
|
|
257
|
+
* @param sessionId 会话ID
|
|
258
|
+
*/
|
|
259
|
+
async cleanupRequest(sessionId) {
|
|
260
|
+
const sessionKey = this.getSessionKey(sessionId);
|
|
261
|
+
try {
|
|
262
|
+
await this.redis.del(sessionKey);
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
// 忽略错误
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* 关闭Redis连接
|
|
270
|
+
*/
|
|
271
|
+
async disconnect() {
|
|
272
|
+
if (this.redis && typeof this.redis.disconnect === 'function') {
|
|
273
|
+
await this.redis.disconnect();
|
|
274
|
+
}
|
|
275
|
+
else if (this.redis && typeof this.redis.quit === 'function') {
|
|
276
|
+
await this.redis.quit();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.RedisMFASessionStorage = RedisMFASessionStorage;
|
|
281
|
+
//# sourceMappingURL=RedisMFASessionStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisMFASessionStorage.js","sourceRoot":"","sources":["../../src/common/RedisMFASessionStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,14 @@ export type GCHttpClientConfig = {
|
|
|
14
14
|
timeout?: number;
|
|
15
15
|
domain?: GarminDomain;
|
|
16
16
|
mfaStorageDir?: string;
|
|
17
|
+
mfa?: MFAConfig;
|
|
18
|
+
};
|
|
19
|
+
export type MFAConfig = {
|
|
20
|
+
type: 'file' | 'redis';
|
|
21
|
+
dir?: string;
|
|
22
|
+
redisUrl?: string;
|
|
23
|
+
redisToken?: string;
|
|
24
|
+
redis?: any;
|
|
17
25
|
};
|
|
18
26
|
export type EventCallback<T> = (data: T) => void;
|
|
19
27
|
export interface Listeners {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/garmin/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAMA,6CAA2B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/garmin/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAMA,6CAA2B;AA8B3B,IAAY,KAEX;AAFD,WAAY,KAAK;IACb,wCAA+B,CAAA;AACnC,CAAC,EAFW,KAAK,GAAL,aAAK,KAAL,aAAK,QAEhB;AAED,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,6BAAW,CAAA;IACX,6BAAW,CAAA;IACX,6BAAW,CAAA;IACX,6BAAW,CAAA;AACf,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB;AAED,IAAY,cAIX;AAJD,WAAY,cAAc;IACtB,6BAAW,CAAA;IACX,6BAAW,CAAA;IACX,6BAAW,CAAA;AACf,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooin/garmin-connect",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.4",
|
|
4
4
|
"description": "Makes it simple to interface with Garmin Connect to get or set any data point",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"@types/luxon": "^3.3.2",
|
|
42
42
|
"@types/node": "^18.11.15",
|
|
43
43
|
"@types/qs": "^6.9.7",
|
|
44
|
+
"@types/redis": "^4.0.11",
|
|
44
45
|
"@types/request-promise": "^4.1.48",
|
|
45
46
|
"pre-commit": "^1.2.2",
|
|
46
47
|
"prettier": "^2.8.1",
|
|
@@ -53,15 +54,18 @@
|
|
|
53
54
|
},
|
|
54
55
|
"runkitExampleFilename": "./examples/example.js",
|
|
55
56
|
"dependencies": {
|
|
57
|
+
"@upstash/redis": "^1.35.6",
|
|
56
58
|
"app-root-path": "^3.1.0",
|
|
57
59
|
"axios": "^1.5.1",
|
|
58
60
|
"axios-cookiejar-support": "^6.0.4",
|
|
59
61
|
"crypto": "^1.0.1",
|
|
60
62
|
"form-data": "^4.0.0",
|
|
63
|
+
"ioredis": "^5.8.1",
|
|
61
64
|
"lodash": "^4.17.21",
|
|
62
65
|
"luxon": "^3.4.3",
|
|
63
66
|
"oauth-1.0a": "^2.2.6",
|
|
64
67
|
"qs": "^6.11.2",
|
|
68
|
+
"redis": "^4.6.10",
|
|
65
69
|
"tough-cookie": "^6.0.0"
|
|
66
70
|
},
|
|
67
71
|
"pre-commit": "pretty"
|