@gooin/garmin-connect 1.7.5 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 -613
- 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 +15 -69
- package/dist/garmin/GarminConnect.js +1 -509
- package/dist/garmin/GarminConnect.js.map +1 -1
- package/dist/garmin/UrlClass.d.ts +28 -0
- package/dist/garmin/UrlClass.js +1 -128
- 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 +47 -0
- package/dist/garmin/types/hrv.js +1 -0
- package/dist/garmin/types/hrv.js.map +1 -0
- 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.d.ts +29 -0
- package/dist/garmin/types/personal-info.js +1 -0
- package/dist/garmin/types/personal-info.js.map +1 -0
- 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.d.ts +46 -0
- package/dist/garmin/types/sleep.js +1 -3
- package/dist/garmin/types/training-status.d.ts +70 -0
- package/dist/garmin/types/training-status.js +1 -0
- package/dist/garmin/types/training-status.js.map +1 -0
- 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,126 +1 @@
|
|
|
1
|
-
|
|
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.MFAManager = void 0;
|
|
7
|
-
const FileMFASessionStorage_1 = require("./FileMFASessionStorage");
|
|
8
|
-
const RedisMFASessionStorage_1 = require("./RedisMFASessionStorage");
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
/**
|
|
11
|
-
* MFA管理器,用于处理需要等待外部验证码的登录流程
|
|
12
|
-
* 支持文件系统和Redis两种存储方式
|
|
13
|
-
*/
|
|
14
|
-
class MFAManager {
|
|
15
|
-
constructor(config) {
|
|
16
|
-
this.DEFAULT_TIMEOUT = 5 * 60 * 1000; // 5分钟
|
|
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
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 获取MFA管理器单例
|
|
42
|
-
*/
|
|
43
|
-
static getInstance(config) {
|
|
44
|
-
if (!MFAManager.instance) {
|
|
45
|
-
if (!config) {
|
|
46
|
-
throw new Error('首次创建MFAManager实例必须提供配置');
|
|
47
|
-
}
|
|
48
|
-
console.log('创建MFA管理器实例', config);
|
|
49
|
-
MFAManager.instance = new MFAManager(config);
|
|
50
|
-
}
|
|
51
|
-
return MFAManager.instance;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* 重置单例实例,用于测试或重新配置
|
|
55
|
-
*/
|
|
56
|
-
static resetInstance() {
|
|
57
|
-
MFAManager.instance = undefined;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* 创建一个等待MFA验证码的Promise
|
|
61
|
-
* @param sessionId 会话ID
|
|
62
|
-
* @param timeout 超时时间(毫秒)
|
|
63
|
-
* @returns Promise<string> 返回验证码
|
|
64
|
-
*/
|
|
65
|
-
async waitForMFACode(sessionId, timeout = this.DEFAULT_TIMEOUT) {
|
|
66
|
-
return this.storage.waitForMFACode(sessionId, timeout);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* 提交MFA验证码
|
|
70
|
-
* @param sessionId 会话ID
|
|
71
|
-
* @param code 验证码
|
|
72
|
-
* @returns 是否成功提交
|
|
73
|
-
*/
|
|
74
|
-
async submitMFACode(sessionId, code) {
|
|
75
|
-
return this.storage.submitMFACode(sessionId, code);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* 取消MFA验证
|
|
79
|
-
* @param sessionId 会话ID
|
|
80
|
-
* @param reason 取消原因
|
|
81
|
-
* @returns 是否成功取消
|
|
82
|
-
*/
|
|
83
|
-
async cancelMFARequest(sessionId, reason = 'MFA验证已取消') {
|
|
84
|
-
return this.storage.cancelMFARequest(sessionId, reason);
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* 检查会话是否存在
|
|
88
|
-
* @param sessionId 会话ID
|
|
89
|
-
* @returns 是否存在
|
|
90
|
-
*/
|
|
91
|
-
async hasSession(sessionId) {
|
|
92
|
-
return this.storage.hasSession(sessionId);
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* 获取所有活跃的会话ID
|
|
96
|
-
* @returns 会话ID列表
|
|
97
|
-
*/
|
|
98
|
-
async getActiveSessions() {
|
|
99
|
-
return this.storage.getActiveSessions();
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* 清理过期的请求
|
|
103
|
-
* @param maxAge 最大存活时间(毫秒)
|
|
104
|
-
*/
|
|
105
|
-
async cleanupExpiredRequests(maxAge = this.DEFAULT_TIMEOUT) {
|
|
106
|
-
return this.storage.cleanupExpiredRequests(maxAge);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* 定期清理过期请求
|
|
110
|
-
*/
|
|
111
|
-
startCleanupTask(interval = 60000) {
|
|
112
|
-
setInterval(() => {
|
|
113
|
-
this.cleanupExpiredRequests();
|
|
114
|
-
}, interval);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* 关闭资源连接(主要用于Redis)
|
|
118
|
-
*/
|
|
119
|
-
async disconnect() {
|
|
120
|
-
if (this.storage instanceof RedisMFASessionStorage_1.RedisMFASessionStorage) {
|
|
121
|
-
await this.storage.disconnect();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
exports.MFAManager = MFAManager;
|
|
126
|
-
//# sourceMappingURL=MFAManager.js.map
|
|
1
|
+
'use strict';const a6_0x1cb87b=a6_0x4a43;(function(_0x15b86b,_0x5d5421){const _0x478736=a6_0x4a43,_0x2cb36b=_0x15b86b();while(!![]){try{const _0x27fa3c=-parseInt(_0x478736(0x1f6))/0x1*(-parseInt(_0x478736(0x1d0))/0x2)+-parseInt(_0x478736(0x1da))/0x3*(-parseInt(_0x478736(0x1e8))/0x4)+-parseInt(_0x478736(0x1f7))/0x5*(parseInt(_0x478736(0x1d2))/0x6)+parseInt(_0x478736(0x1d1))/0x7+-parseInt(_0x478736(0x1d5))/0x8*(parseInt(_0x478736(0x1e3))/0x9)+parseInt(_0x478736(0x1d9))/0xa*(-parseInt(_0x478736(0x1f4))/0xb)+parseInt(_0x478736(0x1df))/0xc*(parseInt(_0x478736(0x1d4))/0xd);if(_0x27fa3c===_0x5d5421)break;else _0x2cb36b['push'](_0x2cb36b['shift']());}catch(_0x4f92d1){_0x2cb36b['push'](_0x2cb36b['shift']());}}}(a6_0x55ab,0xbbf5e));var __importDefault=this&&this[a6_0x1cb87b(0x1d8)]||function(_0x219bf3){const _0x377673=a6_0x1cb87b;return _0x219bf3&&_0x219bf3[_0x377673(0x1e0)]?_0x219bf3:{'default':_0x219bf3};};Object['defineProperty'](exports,a6_0x1cb87b(0x1e0),{'value':!![]}),exports['MFAManager']=void 0x0;const FileMFASessionStorage_1=require(a6_0x1cb87b(0x1dc)),RedisMFASessionStorage_1=require(a6_0x1cb87b(0x1e6)),path_1=__importDefault(require(a6_0x1cb87b(0x1f2)));function a6_0x55ab(){const _0x5a6c1a=['12gbOsYe','首次创建MFAManager实例必须提供配置','./FileMFASessionStorage','RedisMFASessionStorage','redisUrl','12GyJAwK','__esModule','disconnect','getActiveSessions','738EdZJEh','file','default','./RedisMFASessionStorage','cancelMFARequest','1140376GvZRGa','DEFAULT_TIMEOUT','MFAManager','redis','dir','FileMFASessionStorage','redisToken','storage','type','instance','path','.mfa-sessions','12276583FfQVKt','submitMFACode','141Lgemyf','71430NrYUgh','cleanupExpiredRequests','log','cwd','9154FWZscm','693539OLSWbr','48PKfzCa','Redis配置不完整,需要提供redisUrl或redis实例','16733561xvWrMg','114320kMtaop','getInstance','waitForMFACode','__importDefault','10FykeVz'];a6_0x55ab=function(){return _0x5a6c1a;};return a6_0x55ab();}function a6_0x4a43(_0xe120e2,_0x1fd8dc){_0xe120e2=_0xe120e2-0x1ce;const _0x55aba0=a6_0x55ab();let _0x4a4339=_0x55aba0[_0xe120e2];return _0x4a4339;}class MFAManager{constructor(_0x29654e){const _0x9c9fd3=a6_0x1cb87b;this[_0x9c9fd3(0x1e9)]=0x5*0x3c*0x3e8;if(_0x29654e[_0x9c9fd3(0x1f0)]===_0x9c9fd3(0x1eb)){if(_0x29654e['redis'])this['storage']=new RedisMFASessionStorage_1['RedisMFASessionStorage'](undefined,undefined,_0x29654e[_0x9c9fd3(0x1eb)]);else{if(_0x29654e[_0x9c9fd3(0x1de)]&&_0x29654e[_0x9c9fd3(0x1ee)])this[_0x9c9fd3(0x1ef)]=new RedisMFASessionStorage_1['RedisMFASessionStorage'](_0x29654e[_0x9c9fd3(0x1de)],_0x29654e[_0x9c9fd3(0x1ee)]);else{if(_0x29654e[_0x9c9fd3(0x1de)])this[_0x9c9fd3(0x1ef)]=new RedisMFASessionStorage_1['RedisMFASessionStorage'](_0x29654e['redisUrl']);else throw new Error(_0x9c9fd3(0x1d3));}}}else{if(_0x29654e[_0x9c9fd3(0x1f0)]===_0x9c9fd3(0x1e4)){const _0x14e6ce=_0x29654e[_0x9c9fd3(0x1ec)]||path_1[_0x9c9fd3(0x1e5)]['join'](process[_0x9c9fd3(0x1cf)](),_0x9c9fd3(0x1f3));this[_0x9c9fd3(0x1ef)]=new FileMFASessionStorage_1[(_0x9c9fd3(0x1ed))](_0x14e6ce);}else throw new Error('不支持的MFA存储类型:\x20'+_0x29654e[_0x9c9fd3(0x1f0)]);}}static[a6_0x1cb87b(0x1d6)](_0x606671){const _0x3c7d90=a6_0x1cb87b;if(!MFAManager[_0x3c7d90(0x1f1)]){if(!_0x606671)throw new Error(_0x3c7d90(0x1db));console[_0x3c7d90(0x1ce)]('创建MFA管理器实例',_0x606671),MFAManager[_0x3c7d90(0x1f1)]=new MFAManager(_0x606671);}return MFAManager[_0x3c7d90(0x1f1)];}static['resetInstance'](){MFAManager['instance']=undefined;}async[a6_0x1cb87b(0x1d7)](_0x5ab7a1,_0x35dfd0=this['DEFAULT_TIMEOUT']){const _0x347aa3=a6_0x1cb87b;return this[_0x347aa3(0x1ef)][_0x347aa3(0x1d7)](_0x5ab7a1,_0x35dfd0);}async[a6_0x1cb87b(0x1f5)](_0x3739ec,_0x850a0c){const _0x124480=a6_0x1cb87b;return this[_0x124480(0x1ef)][_0x124480(0x1f5)](_0x3739ec,_0x850a0c);}async[a6_0x1cb87b(0x1e7)](_0x1f52a7,_0x50b3bf='MFA验证已取消'){const _0x4c5fa2=a6_0x1cb87b;return this[_0x4c5fa2(0x1ef)][_0x4c5fa2(0x1e7)](_0x1f52a7,_0x50b3bf);}async['hasSession'](_0x42f0f7){const _0x189283=a6_0x1cb87b;return this[_0x189283(0x1ef)]['hasSession'](_0x42f0f7);}async['getActiveSessions'](){const _0x4b5005=a6_0x1cb87b;return this[_0x4b5005(0x1ef)][_0x4b5005(0x1e2)]();}async[a6_0x1cb87b(0x1f8)](_0x307f16=this[a6_0x1cb87b(0x1e9)]){return this['storage']['cleanupExpiredRequests'](_0x307f16);}['startCleanupTask'](_0x3be320=0xea60){setInterval(()=>{const _0x5b4f8d=a6_0x4a43;this[_0x5b4f8d(0x1f8)]();},_0x3be320);}async[a6_0x1cb87b(0x1e1)](){const _0x2f8274=a6_0x1cb87b;this[_0x2f8274(0x1ef)]instanceof RedisMFASessionStorage_1[_0x2f8274(0x1dd)]&&await this['storage'][_0x2f8274(0x1e1)]();}}exports[a6_0x1cb87b(0x1ea)]=MFAManager;
|
|
@@ -1,3 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=MFASessionStorage.js.map
|
|
1
|
+
'use strict';function a7_0x430c(_0x38720f,_0x56ca7a){_0x38720f=_0x38720f-0x190;var _0x5b6be1=a7_0x5b6b();var _0x430c48=_0x5b6be1[_0x38720f];return _0x430c48;}var a7_0x56d331=a7_0x430c;(function(_0x5bc874,_0x51637c){var _0x3e9fe7=a7_0x430c,_0x2f644e=_0x5bc874();while(!![]){try{var _0x42f093=-parseInt(_0x3e9fe7(0x190))/0x1+parseInt(_0x3e9fe7(0x194))/0x2+-parseInt(_0x3e9fe7(0x197))/0x3*(parseInt(_0x3e9fe7(0x196))/0x4)+-parseInt(_0x3e9fe7(0x192))/0x5+parseInt(_0x3e9fe7(0x199))/0x6+parseInt(_0x3e9fe7(0x191))/0x7+-parseInt(_0x3e9fe7(0x193))/0x8*(-parseInt(_0x3e9fe7(0x195))/0x9);if(_0x42f093===_0x51637c)break;else _0x2f644e['push'](_0x2f644e['shift']());}catch(_0x5e93f7){_0x2f644e['push'](_0x2f644e['shift']());}}}(a7_0x5b6b,0xc7f8f));function a7_0x5b6b(){var _0x402d52=['421932HuLGNp','919636uLBzGj','8633541qakrJs','4598995FRCqsS','13022544SSxUAh','2178194MOmljO','9DYxaVh','29292PRgnCW','558ZpklLj','__esModule'];a7_0x5b6b=function(){return _0x402d52;};return a7_0x5b6b();}Object['defineProperty'](exports,a7_0x56d331(0x198),{'value':!![]});
|
|
@@ -1,281 +1 @@
|
|
|
1
|
-
|
|
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
|
|
1
|
+
'use strict';function a8_0x5711(){const _0x4fdfc8=['parse','环境不支持定时器,无法等待MFA验证码','ioredis','rejected',',\x20sessionId\x20','提交MFA验证码失败:\x20','waiting','waitForMFACode','redis','UpstashRedis','defineProperty','35393196PXsoke','stringify','2806265cfHEOt','submitMFACode','resolvedAt','rejectedAt','resolved','toISOString','KEY_PREFIX','getActiveSessions','cancelMFARequest','MFA验证会话状态不正确:\x20','MFA验证会话已创建:\x20','MFA验证已取消','status','cleanupRequest','取消MFA验证失败:\x20','keys','undefined','getSessionKey','4VHBWNp','删除过期会话失败:\x20','replace','DEFAULT_TIMEOUT','1304355oVbdxs','\x20个过期的MFA验证会话','772uPIKtk','disconnect','Either\x20redisUrl\x20with\x20redisToken\x20(for\x20Upstash)\x20or\x20redisClient\x20must\x20be\x20provided',',\x20错误:\x20','__esModule','清理过期请求失败:','53577HlqZyI','MFA验证已取消:\x20','hasSession','now','MFA验证超时,请重新登录','string','getTime','mfa:session:','code','187qRJCQa','416qZXALQ','1511730nNjHfo','ceil','set','error','18yjPSVi','del','log','createdAt','Redis\x20module\x20not\x20found.\x20Please\x20install\x20ioredis:\x20npm\x20install\x20ioredis',',\x20状态:\x20','map',',\x20原因:\x20','RedisMFASessionStorage','message','exists','402530CRYZpT','未找到MFA验证会话:\x20','MFA验证码已提交:\x20code\x20','1104FuquWR','清理了\x20','Upstash\x20Redis\x20module\x20not\x20found.\x20Please\x20install\x20@upstash/redis:\x20npm\x20install\x20@upstash/redis','@upstash/redis','get'];a8_0x5711=function(){return _0x4fdfc8;};return a8_0x5711();}const a8_0x582af3=a8_0x11c7;(function(_0x1c6b87,_0x3ca7ac){const _0x3861e9=a8_0x11c7,_0x8d77b8=_0x1c6b87();while(!![]){try{const _0x542e8a=parseInt(_0x3861e9(0x1c7))/0x1*(-parseInt(_0x3861e9(0x1a4))/0x2)+-parseInt(_0x3861e9(0x1a2))/0x3*(parseInt(_0x3861e9(0x19e))/0x4)+-parseInt(_0x3861e9(0x1b5))/0x5*(parseInt(_0x3861e9(0x1b9))/0x6)+parseInt(_0x3861e9(0x1d9))/0x7+-parseInt(_0x3861e9(0x1b4))/0x8*(parseInt(_0x3861e9(0x1aa))/0x9)+-parseInt(_0x3861e9(0x1c4))/0xa*(parseInt(_0x3861e9(0x1b3))/0xb)+parseInt(_0x3861e9(0x1d7))/0xc;if(_0x542e8a===_0x3ca7ac)break;else _0x8d77b8['push'](_0x8d77b8['shift']());}catch(_0xe1ec4c){_0x8d77b8['push'](_0x8d77b8['shift']());}}}(a8_0x5711,0x8fad8));Object[a8_0x582af3(0x1d6)](exports,a8_0x582af3(0x1a8),{'value':!![]}),exports[a8_0x582af3(0x1c1)]=void 0x0;class RedisMFASessionStorage{constructor(_0x402a24,_0x3fc4b2,_0x1b3050){const _0x1d8085=a8_0x582af3;this[_0x1d8085(0x1a1)]=0x5*0x3c*0x3e8,this[_0x1d8085(0x1df)]=_0x1d8085(0x1b1);if(_0x1b3050)this[_0x1d8085(0x1d4)]=_0x1b3050;else{if(_0x402a24&&_0x3fc4b2)try{let _0x5116a5;typeof require!==_0x1d8085(0x1e9)?_0x5116a5=require(_0x1d8085(0x1ca)):_0x5116a5=globalThis[_0x1d8085(0x1d5)];const {Redis:_0x2e755c}=_0x5116a5;this[_0x1d8085(0x1d4)]=new _0x2e755c({'url':_0x402a24,'token':_0x3fc4b2});}catch(_0x13765c){throw new Error(_0x1d8085(0x1c9));}else{if(_0x402a24)try{const _0x1f5b73=require(_0x1d8085(0x1ce));this[_0x1d8085(0x1d4)]=new _0x1f5b73(_0x402a24);}catch(_0x4d99ff){throw new Error(_0x1d8085(0x1bd));}else throw new Error(_0x1d8085(0x1a6));}}}[a8_0x582af3(0x1ea)](_0x4d9af9){const _0x4b0266=a8_0x582af3;return''+this[_0x4b0266(0x1df)]+_0x4d9af9;}async[a8_0x582af3(0x1d3)](_0x2906bc,_0x4d5aaf=this[a8_0x582af3(0x1a1)]){const _0x5d2f07=a8_0x582af3;await this[_0x5d2f07(0x1e6)](_0x2906bc);const _0x20cbf4={'sessionId':_0x2906bc,'status':'waiting','createdAt':new Date()['toISOString'](),'timeout':_0x4d5aaf},_0xa99351=this[_0x5d2f07(0x1ea)](_0x2906bc);return await this[_0x5d2f07(0x1d4)]['setex'](_0xa99351,Math[_0x5d2f07(0x1b6)](_0x4d5aaf/0x3e8),JSON['stringify'](_0x20cbf4)),console['log'](_0x5d2f07(0x1e3)+_0x2906bc),new Promise((_0x754f4c,_0x577e44)=>{const _0xc28078=_0x5d2f07,_0x3ba115=Date[_0xc28078(0x1ad)](),_0x2734dc=async()=>{const _0xf9e0d6=_0xc28078;try{if(Date[_0xf9e0d6(0x1ad)]()-_0x3ba115>_0x4d5aaf){await this[_0xf9e0d6(0x1e6)](_0x2906bc),_0x577e44(new Error(_0xf9e0d6(0x1ae)));return;}const _0x13762e=await this['redis'][_0xf9e0d6(0x1cb)](_0xa99351);if(!_0x13762e){await this[_0xf9e0d6(0x1e6)](_0x2906bc),_0x577e44(new Error('MFA验证会话已过期'));return;}const _0x5c9334=typeof _0x13762e===_0xf9e0d6(0x1af)?_0x13762e:JSON[_0xf9e0d6(0x1d8)](_0x13762e),_0x74e482=JSON[_0xf9e0d6(0x1cc)](_0x5c9334);if(_0x74e482[_0xf9e0d6(0x1e5)]===_0xf9e0d6(0x1dd)&&_0x74e482[_0xf9e0d6(0x1b2)]){await this[_0xf9e0d6(0x1e6)](_0x2906bc),console['log']('🚀\x20RedisMFASessionStorage\x20收到验证码:',_0x74e482['code']),_0x754f4c(_0x74e482[_0xf9e0d6(0x1b2)]);return;}if(_0x74e482['status']===_0xf9e0d6(0x1cf)&&_0x74e482[_0xf9e0d6(0x1b8)]){await this[_0xf9e0d6(0x1e6)](_0x2906bc),_0x577e44(new Error(_0x74e482[_0xf9e0d6(0x1b8)]));return;}typeof setTimeout==='function'?setTimeout(_0x2734dc,0x3e8):_0x577e44(new Error(_0xf9e0d6(0x1cd)));}catch(_0x4c4577){await this[_0xf9e0d6(0x1e6)](_0x2906bc),_0x577e44(_0x4c4577 instanceof Error?_0x4c4577:new Error(String(_0x4c4577)));}};_0x2734dc();});}async[a8_0x582af3(0x1da)](_0x11969e,_0x5d8863){const _0x42c809=a8_0x582af3,_0x27c7f9=this[_0x42c809(0x1ea)](_0x11969e);try{const _0x44e67d=await this['redis'][_0x42c809(0x1cb)](_0x27c7f9);if(!_0x44e67d)return console[_0x42c809(0x1bb)](_0x42c809(0x1c5)+_0x11969e),![];const _0x2f50ac=typeof _0x44e67d===_0x42c809(0x1af)?_0x44e67d:JSON[_0x42c809(0x1d8)](_0x44e67d),_0x4c5728=JSON[_0x42c809(0x1cc)](_0x2f50ac);if(_0x4c5728[_0x42c809(0x1e5)]!==_0x42c809(0x1d2))return console[_0x42c809(0x1bb)](_0x42c809(0x1e2)+_0x11969e+_0x42c809(0x1be)+_0x4c5728['status']),![];return _0x4c5728['status']=_0x42c809(0x1dd),_0x4c5728['code']=_0x5d8863,_0x4c5728[_0x42c809(0x1db)]=new Date()[_0x42c809(0x1de)](),await this[_0x42c809(0x1d4)]['set'](_0x27c7f9,JSON[_0x42c809(0x1d8)](_0x4c5728)),console[_0x42c809(0x1bb)](_0x42c809(0x1c6)+_0x5d8863+_0x42c809(0x1d0)+_0x11969e),!![];}catch(_0x3f405c){return console['log'](_0x42c809(0x1d1)+_0x11969e+_0x42c809(0x1a7)+(_0x3f405c instanceof Error?_0x3f405c[_0x42c809(0x1c2)]:String(_0x3f405c))),![];}}async[a8_0x582af3(0x1e1)](_0x28ee2d,_0x5c9c19=a8_0x582af3(0x1e4)){const _0x44164e=a8_0x582af3,_0x12f703=this[_0x44164e(0x1ea)](_0x28ee2d);try{const _0x1cd6cc=await this[_0x44164e(0x1d4)][_0x44164e(0x1cb)](_0x12f703);if(!_0x1cd6cc)return console['log']('未找到MFA验证会话:\x20'+_0x28ee2d),![];const _0x3a3b69=typeof _0x1cd6cc===_0x44164e(0x1af)?_0x1cd6cc:JSON[_0x44164e(0x1d8)](_0x1cd6cc),_0x3e5154=JSON[_0x44164e(0x1cc)](_0x3a3b69);return _0x3e5154['status']=_0x44164e(0x1cf),_0x3e5154['error']=_0x5c9c19,_0x3e5154[_0x44164e(0x1dc)]=new Date()[_0x44164e(0x1de)](),await this[_0x44164e(0x1d4)][_0x44164e(0x1b7)](_0x12f703,JSON['stringify'](_0x3e5154)),console[_0x44164e(0x1bb)](_0x44164e(0x1ab)+_0x28ee2d+_0x44164e(0x1c0)+_0x5c9c19),!![];}catch(_0x55a01d){return console[_0x44164e(0x1bb)](_0x44164e(0x1e7)+_0x28ee2d+_0x44164e(0x1a7)+(_0x55a01d instanceof Error?_0x55a01d[_0x44164e(0x1c2)]:String(_0x55a01d))),![];}}async[a8_0x582af3(0x1ac)](_0x4d30bb){const _0x99abdc=a8_0x582af3,_0x27790e=this['getSessionKey'](_0x4d30bb);try{const _0x44c915=await this[_0x99abdc(0x1d4)][_0x99abdc(0x1c3)](_0x27790e);return _0x44c915===0x1;}catch(_0x2d0700){return![];}}async[a8_0x582af3(0x1e0)](){const _0x34360f=a8_0x582af3;try{const _0x594285=await this[_0x34360f(0x1d4)][_0x34360f(0x1e8)](this[_0x34360f(0x1df)]+'*');return _0x594285[_0x34360f(0x1bf)](_0x53d513=>_0x53d513[_0x34360f(0x1a0)](this[_0x34360f(0x1df)],''));}catch(_0xc4950a){return console[_0x34360f(0x1b8)]('获取活跃会话失败:',_0xc4950a instanceof Error?_0xc4950a:String(_0xc4950a)),[];}}async['cleanupExpiredRequests'](_0x1e875d=this[a8_0x582af3(0x1a1)]){const _0x398a40=a8_0x582af3;try{const _0x1b416f=await this[_0x398a40(0x1d4)]['keys'](this[_0x398a40(0x1df)]+'*'),_0xa776f3=new Date();let _0x4920b4=0x0;for(const _0x15aab0 of _0x1b416f){try{const _0x54de2f=await this['redis'][_0x398a40(0x1cb)](_0x15aab0);if(!_0x54de2f)continue;const _0x5f5023=typeof _0x54de2f===_0x398a40(0x1af)?_0x54de2f:JSON[_0x398a40(0x1d8)](_0x54de2f),_0x39bc9a=JSON['parse'](_0x5f5023),_0x1e8c8b=new Date(_0x39bc9a[_0x398a40(0x1bc)]);_0xa776f3['getTime']()-_0x1e8c8b[_0x398a40(0x1b0)]()>_0x1e875d&&(await this[_0x398a40(0x1d4)][_0x398a40(0x1ba)](_0x15aab0),_0x4920b4++);}catch(_0x1ae9f8){try{await this[_0x398a40(0x1d4)][_0x398a40(0x1ba)](_0x15aab0),_0x4920b4++;}catch(_0x4f6ef9){console[_0x398a40(0x1b8)](_0x398a40(0x19f)+_0x15aab0,_0x4f6ef9 instanceof Error?_0x4f6ef9:String(_0x4f6ef9));}}}_0x4920b4>0x0&&console['log'](_0x398a40(0x1c8)+_0x4920b4+_0x398a40(0x1a3));}catch(_0x1eab88){console['error'](_0x398a40(0x1a9),_0x1eab88 instanceof Error?_0x1eab88:String(_0x1eab88));}}async['cleanupRequest'](_0x410a90){const _0x19270e=a8_0x582af3,_0x36d7d6=this[_0x19270e(0x1ea)](_0x410a90);try{await this[_0x19270e(0x1d4)][_0x19270e(0x1ba)](_0x36d7d6);}catch(_0x57747a){}}async[a8_0x582af3(0x1a5)](){const _0x220e07=a8_0x582af3;if(this['redis']&&typeof this[_0x220e07(0x1d4)][_0x220e07(0x1a5)]==='function')await this[_0x220e07(0x1d4)]['disconnect']();else this[_0x220e07(0x1d4)]&&typeof this['redis']['quit']==='function'&&await this[_0x220e07(0x1d4)]['quit']();}}function a8_0x11c7(_0x3c39c0,_0x4b7e6e){_0x3c39c0=_0x3c39c0-0x19e;const _0x571179=a8_0x5711();let _0x11c735=_0x571179[_0x3c39c0];return _0x11c735;}exports[a8_0x582af3(0x1c1)]=RedisMFASessionStorage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisMFASessionStorage.js","sourceRoot":"","sources":["../../src/common/RedisMFASessionStorage.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"RedisMFASessionStorage.js","sourceRoot":"","sources":["../../src/common/RedisMFASessionStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,74 +1,20 @@
|
|
|
1
1
|
import { HttpClient } from '../common/HttpClient';
|
|
2
2
|
import { UrlClass } from './UrlClass';
|
|
3
|
-
import {
|
|
4
|
-
import { ActivitySubType, ActivityType, GCActivityId, IActivity } from './types/activity';
|
|
5
|
-
import { ICourse, ICourseDetail } from './types/course';
|
|
6
|
-
import { SleepData } from './types/sleep';
|
|
7
|
-
import Running from './workouts/Running';
|
|
3
|
+
import { GarminDomain, ISocialProfile } from './types';
|
|
8
4
|
export interface Session {
|
|
9
5
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
getUserSettings(): Promise<IUserSettings>;
|
|
24
|
-
getUserProfile(): Promise<ISocialProfile>;
|
|
25
|
-
getActivities(start?: number, limit?: number, activityType?: ActivityType, subActivityType?: ActivitySubType): Promise<IActivity[]>;
|
|
26
|
-
getActivity(activity: {
|
|
27
|
-
activityId: GCActivityId;
|
|
28
|
-
}): Promise<IActivity>;
|
|
29
|
-
countActivities(): Promise<ICountActivities>;
|
|
30
|
-
downloadWellnessData(date: Date, dir: string): Promise<void>;
|
|
31
|
-
downloadOriginalActivityData(activity: {
|
|
32
|
-
activityId: GCActivityId;
|
|
33
|
-
}, dir: string, type?: ExportFileTypeValue): Promise<void>;
|
|
34
|
-
uploadActivity(file: string, format?: UploadFileTypeTypeValue): Promise<unknown>;
|
|
35
|
-
deleteActivity(activity: {
|
|
36
|
-
activityId: GCActivityId;
|
|
37
|
-
}): Promise<void>;
|
|
38
|
-
getWorkouts(start: number, limit: number): Promise<IWorkout[]>;
|
|
39
|
-
getWorkoutDetail(workout: {
|
|
40
|
-
workoutId: string;
|
|
41
|
-
}): Promise<IWorkoutDetail>;
|
|
42
|
-
addWorkout(workout: IWorkoutDetail | Running): Promise<IWorkoutDetail>;
|
|
43
|
-
addRunningWorkout(name: string, meters: number, description: string): Promise<IWorkoutDetail>;
|
|
44
|
-
deleteWorkout(workout: {
|
|
45
|
-
workoutId: string;
|
|
46
|
-
}): Promise<unknown>;
|
|
47
|
-
scheduleWorkout(workout: {
|
|
48
|
-
workoutId: string;
|
|
49
|
-
}, date?: Date): Promise<IScheduleWorkout>;
|
|
50
|
-
getCalendar(year?: number, month?: number): Promise<ICalendar>;
|
|
51
|
-
getSteps(date?: Date): Promise<number>;
|
|
52
|
-
getSleepData(date?: Date): Promise<SleepData>;
|
|
53
|
-
getSleepDuration(date?: Date): Promise<{
|
|
54
|
-
hours: number;
|
|
55
|
-
minutes: number;
|
|
56
|
-
}>;
|
|
57
|
-
getDailyWeightData(date?: Date): Promise<WeightData>;
|
|
58
|
-
getDailyWeightInPounds(date?: Date): Promise<number>;
|
|
59
|
-
getDailyHydration(date?: Date): Promise<number>;
|
|
60
|
-
updateWeight(date: Date | undefined, lbs: number, timezone: string): Promise<UpdateWeight>;
|
|
61
|
-
updateHydrationLogOunces(date: Date | undefined, valueInOz: number): Promise<WaterIntake>;
|
|
62
|
-
getGolfSummary(): Promise<GolfSummary>;
|
|
63
|
-
getGolfScorecard(scorecardId: number): Promise<GolfScorecard>;
|
|
64
|
-
getHeartRate(date?: Date): Promise<HeartRate>;
|
|
65
|
-
getCourses(): Promise<ICourse[]>;
|
|
66
|
-
getCourse(course: {
|
|
67
|
-
courseId: number;
|
|
68
|
-
}): Promise<ICourseDetail>;
|
|
69
|
-
createCourse(course: ICourseDetail): Promise<ICourseDetail>;
|
|
70
|
-
consentGrant(): Promise<void>;
|
|
71
|
-
get<T>(url: string, data?: any): Promise<T>;
|
|
72
|
-
post<T>(url: string, data: any): Promise<T>;
|
|
73
|
-
put<T>(url: string, data: any): Promise<T>;
|
|
6
|
+
declare const WithCoach: {
|
|
7
|
+
new (...args: any[]): {
|
|
8
|
+
getTrainingOverview(options?: import("./types").TrainingOverviewOptions): Promise<import("./types").TrainingOverview>;
|
|
9
|
+
getWellnessOverview(options?: import("./types").WellnessOverviewOptions): Promise<import("./types").WellnessOverview>;
|
|
10
|
+
getActivitiesSummary(options?: import("./types").ActivitiesSummaryOptions): Promise<import("./types").ActivitiesSummary>;
|
|
11
|
+
getActivityDetailSummary(options: number | import("./types").ActivityDetailSummaryOptions): Promise<import("./types").ActivityDetailSummary>;
|
|
12
|
+
client: HttpClient;
|
|
13
|
+
url: UrlClass;
|
|
14
|
+
domain: GarminDomain;
|
|
15
|
+
getUserProfile(): Promise<ISocialProfile>;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export default class GarminConnect extends WithCoach {
|
|
74
19
|
}
|
|
20
|
+
export {};
|