@gooin/garmin-connect 1.8.7 → 1.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/common/FileMFASessionStorage.js +1 -1
  2. package/dist/common/HttpClient copy.js +1 -1
  3. package/dist/common/HttpClient.js +1 -1
  4. package/dist/common/HttpClientOLD.js +1 -1
  5. package/dist/common/HttpClientOLDV1.js +1 -1
  6. package/dist/common/HttpClientV1.js +1 -1
  7. package/dist/common/MFAManager.js +1 -1
  8. package/dist/common/MFASessionStorage.js +1 -1
  9. package/dist/common/RedisMFASessionStorage.js +1 -1
  10. package/dist/garmin/GarminConnect.js +1 -1
  11. package/dist/garmin/UrlClass.js +1 -1
  12. package/dist/garmin/common/DateUtils.js +1 -1
  13. package/dist/garmin/common/HydrationUtils.js +1 -1
  14. package/dist/garmin/common/WeightUtils.js +1 -1
  15. package/dist/garmin/modules/activity/base.js +1 -1
  16. package/dist/garmin/modules/activity/cycling.js +1 -1
  17. package/dist/garmin/modules/activity/running.js +1 -1
  18. package/dist/garmin/modules/activity/training-status.js +1 -1
  19. package/dist/garmin/modules/coach/activity-summary.js +1 -1
  20. package/dist/garmin/modules/coach/helpers.js +1 -1
  21. package/dist/garmin/modules/coach/sleep-analysis.js +1 -1
  22. package/dist/garmin/modules/coach/training-overview.js +1 -1
  23. package/dist/garmin/modules/coach/wellness-overview.js +1 -1
  24. package/dist/garmin/modules/coach/wellness-summary.js +1 -1
  25. package/dist/garmin/modules/coach.js +1 -1
  26. package/dist/garmin/modules/course.js +1 -1
  27. package/dist/garmin/modules/device.js +1 -1
  28. package/dist/garmin/modules/misc.js +1 -1
  29. package/dist/garmin/modules/types.js +1 -1
  30. package/dist/garmin/modules/user.js +1 -1
  31. package/dist/garmin/modules/wellness/body-battery.js +1 -1
  32. package/dist/garmin/modules/wellness/heart-rate.js +1 -1
  33. package/dist/garmin/modules/wellness/hrv.js +1 -1
  34. package/dist/garmin/modules/wellness/hydration.js +1 -1
  35. package/dist/garmin/modules/wellness/sleep.js +1 -1
  36. package/dist/garmin/modules/wellness/weight.d.ts +13 -1
  37. package/dist/garmin/modules/wellness/weight.js +1 -1
  38. package/dist/garmin/modules/wellness/weight.js.map +1 -1
  39. package/dist/garmin/modules/workout.js +1 -1
  40. package/dist/garmin/types/activity-stats.js +1 -1
  41. package/dist/garmin/types/activity.js +1 -1
  42. package/dist/garmin/types/body-battery.js +1 -1
  43. package/dist/garmin/types/coach.js +1 -1
  44. package/dist/garmin/types/course.js +1 -1
  45. package/dist/garmin/types/cycling.js +1 -1
  46. package/dist/garmin/types/device.js +1 -1
  47. package/dist/garmin/types/golf.js +1 -1
  48. package/dist/garmin/types/heartrate.js +1 -1
  49. package/dist/garmin/types/hrv.js +1 -1
  50. package/dist/garmin/types/hydration.js +1 -1
  51. package/dist/garmin/types/index.js +1 -1
  52. package/dist/garmin/types/personal-info.js +1 -1
  53. package/dist/garmin/types/race-prediction.js +1 -1
  54. package/dist/garmin/types/sleep.js +1 -1
  55. package/dist/garmin/types/training-status.js +1 -1
  56. package/dist/garmin/types/weight.js +1 -1
  57. package/dist/garmin/types/workout.js +1 -1
  58. package/dist/garmin/workouts/Running.js +1 -1
  59. package/dist/garmin/workouts/templates/RunningTemplate.js +1 -1
  60. package/dist/garmin/workouts/workout-draft.js +1 -1
  61. package/dist/index.js +1 -1
  62. package/dist/utils.js +1 -1
  63. package/package.json +1 -1
@@ -1 +1 @@
1
- 'use strict';const a2_0x413d94=a2_0x50dc;(function(_0x2806d7,_0x5b473a){const _0x53ac02=a2_0x50dc,_0x1a2b30=_0x2806d7();while(!![]){try{const _0x117572=parseInt(_0x53ac02(0x1d7))/0x1+-parseInt(_0x53ac02(0x215))/0x2+parseInt(_0x53ac02(0x26b))/0x3*(parseInt(_0x53ac02(0x254))/0x4)+-parseInt(_0x53ac02(0x248))/0x5+-parseInt(_0x53ac02(0x239))/0x6+-parseInt(_0x53ac02(0x1cd))/0x7*(-parseInt(_0x53ac02(0x232))/0x8)+-parseInt(_0x53ac02(0x261))/0x9*(-parseInt(_0x53ac02(0x244))/0xa);if(_0x117572===_0x5b473a)break;else _0x1a2b30['push'](_0x1a2b30['shift']());}catch(_0x438c62){_0x1a2b30['push'](_0x1a2b30['shift']());}}}(a2_0x1785,0xbfd93));var __importDefault=this&&this['__importDefault']||function(_0x540aba){return _0x540aba&&_0x540aba['__esModule']?_0x540aba:{'default':_0x540aba};};Object[a2_0x413d94(0x1cc)](exports,a2_0x413d94(0x207),{'value':!![]}),exports['HttpClient']=void 0x0;const axios_1=__importDefault(require(a2_0x413d94(0x1c9))),lodash_1=__importDefault(require(a2_0x413d94(0x1dc))),luxon_1=require(a2_0x413d94(0x26f)),oauth_1_0a_1=__importDefault(require(a2_0x413d94(0x1d4))),qs_1=__importDefault(require('qs')),MFAManager_1=require(a2_0x413d94(0x1d2)),node_crypto_1=__importDefault(require(a2_0x413d94(0x1c4))),tough_cookie_1=require(a2_0x413d94(0x23e)),axios_cookiejar_support_1=require(a2_0x413d94(0x200)),CSRF_RE=new RegExp('name=\x22_csrf\x22\x5cs+value=\x22(.+?)\x22'),TICKET_RE=new RegExp(a2_0x413d94(0x273)),ACCOUNT_LOCKED_RE=new RegExp('var\x20statuss*=s*\x22([^\x22]*)\x22'),PAGE_TITLE_RE=new RegExp('<title>([^<]*)</title>'),USER_AGENT_CONNECTMOBILE='com.garmin.android.apps.connectmobile',USER_AGENT_BROWSER='Mozilla/5.0\x20(Windows\x20NT\x2010.0;\x20Win64;\x20x64)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/117.0.0.0\x20Safari/537.36',USER_AGENT_BROWSER_MAC=a2_0x413d94(0x22b),OAUTH_CONSUMER_URL=a2_0x413d94(0x275),OAUTH_CONSUMER_URL_CN=a2_0x413d94(0x1de),HTTP_STATUS={'UNAUTHORIZED':0x191};function a2_0x50dc(_0x1c33a2,_0x12cdfc){_0x1c33a2=_0x1c33a2-0x1c3;const _0x178565=a2_0x1785();let _0x50dc78=_0x178565[_0x1c33a2];return _0x50dc78;}let tokenRefreshPromise=null,refreshSubscribers=[];class HttpClient{constructor(_0x241b6c,_0x38a2ee){const _0x47c63f=a2_0x413d94;var _0x393cb2,_0x341043;const _0x42213c=new tough_cookie_1['CookieJar']();this[_0x47c63f(0x20a)]=_0x241b6c,this['client']=(0x0,axios_cookiejar_support_1['wrapper'])(axios_1[_0x47c63f(0x253)][_0x47c63f(0x25e)]({'timeout':(_0x393cb2=_0x38a2ee===null||_0x38a2ee===void 0x0?void 0x0:_0x38a2ee[_0x47c63f(0x249)])!==null&&_0x393cb2!==void 0x0?_0x393cb2:0x1388,'timeoutErrorMessage':_0x47c63f(0x262)+((_0x341043=_0x38a2ee===null||_0x38a2ee===void 0x0?void 0x0:_0x38a2ee[_0x47c63f(0x249)])!==null&&_0x341043!==void 0x0?_0x341043:0x1388)+_0x47c63f(0x270),'maxRedirects':0xa,'validateStatus':function(_0x43a1c4){return _0x43a1c4>=0xc8&&_0x43a1c4<0x190;},'withCredentials':!![],'jar':_0x42213c})),this[_0x47c63f(0x1e9)]=_0x38a2ee;const _0x35d50f=_0x38a2ee[_0x47c63f(0x235)]||{'type':_0x47c63f(0x25b),'dir':_0x38a2ee[_0x47c63f(0x224)]||'/tmp'};this[_0x47c63f(0x1f5)]=MFAManager_1[_0x47c63f(0x1f8)][_0x47c63f(0x1ed)](_0x35d50f),this[_0x47c63f(0x220)]();}[a2_0x413d94(0x220)](){const _0x433b0c=a2_0x413d94;this['client'][_0x433b0c(0x1cf)][_0x433b0c(0x24b)][_0x433b0c(0x21f)](_0x3ec8a7=>{return _0x3ec8a7;},async _0x198318=>{const _0xe85acb=_0x433b0c;return this[_0xe85acb(0x216)](_0x198318);}),this['client'][_0x433b0c(0x1cf)][_0x433b0c(0x209)]['use'](async _0xc23285=>{const _0x302cb6=_0x433b0c;return this[_0x302cb6(0x227)]&&(_0xc23285[_0x302cb6(0x20d)][_0x302cb6(0x1e5)]=_0x302cb6(0x23c)+this[_0x302cb6(0x227)][_0x302cb6(0x202)]),_0xc23285;});}[a2_0x413d94(0x1e8)](_0x24a69e){const _0x2f694c=a2_0x413d94;var _0x2db854,_0x425ef9,_0x358859,_0x3e03d1;(((_0x2db854=_0x24a69e[_0x2f694c(0x1e9)][_0x2f694c(0x20a)])===null||_0x2db854===void 0x0?void 0x0:_0x2db854['includes'](_0x2f694c(0x23b)))||((_0x425ef9=_0x24a69e[_0x2f694c(0x1e9)]['url'])===null||_0x425ef9===void 0x0?void 0x0:_0x425ef9[_0x2f694c(0x1c8)]('verifyMFA')))&&(console[_0x2f694c(0x1ef)](_0x2f694c(0x218),_0x24a69e[_0x2f694c(0x1e9)][_0x2f694c(0x20a)]),console[_0x2f694c(0x1ef)](_0x2f694c(0x272),_0x24a69e['status']),console['log'](_0x2f694c(0x276),((_0x358859=_0x24a69e[_0x2f694c(0x209)])===null||_0x358859===void 0x0?void 0x0:_0x358859[_0x2f694c(0x229)])||_0x24a69e['config']['url']),console['log'](_0x2f694c(0x228),((_0x3e03d1=_0x24a69e[_0x2f694c(0x209)])===null||_0x3e03d1===void 0x0?void 0x0:_0x3e03d1['redirectCount'])||0x0),_0x24a69e[_0x2f694c(0x20d)][_0x2f694c(0x23d)]&&console['log'](_0x2f694c(0x21a),_0x24a69e['headers'][_0x2f694c(0x23d)]),_0x24a69e[_0x2f694c(0x1f2)]>=0x12c&&_0x24a69e[_0x2f694c(0x1f2)]<0x190&&console['log'](_0x2f694c(0x1e6),_0x24a69e[_0x2f694c(0x1f2)]));}async[a2_0x413d94(0x216)](_0x48bc27){const _0x27c534=a2_0x413d94;var _0x4f396e,_0x574116,_0x354e86;if(axios_1[_0x27c534(0x253)][_0x27c534(0x1c7)](_0x48bc27)&&_0x48bc27[_0x27c534(0x237)]===_0x27c534(0x226))throw new Error(_0x48bc27['message']||_0x27c534(0x221));const _0x23774c=_0x48bc27[_0x27c534(0x1e9)];if(((_0x4f396e=_0x48bc27===null||_0x48bc27===void 0x0?void 0x0:_0x48bc27[_0x27c534(0x24b)])===null||_0x4f396e===void 0x0?void 0x0:_0x4f396e['status'])===HTTP_STATUS[_0x27c534(0x1fc)]&&!(_0x23774c===null||_0x23774c===void 0x0?void 0x0:_0x23774c['_retry'])){if(!this[_0x27c534(0x227)]){if(((_0x574116=_0x23774c===null||_0x23774c===void 0x0?void 0x0:_0x23774c['url'])===null||_0x574116===void 0x0?void 0x0:_0x574116[_0x27c534(0x1c8)](_0x27c534(0x23b)))||((_0x354e86=_0x23774c===null||_0x23774c===void 0x0?void 0x0:_0x23774c[_0x27c534(0x20a)])===null||_0x354e86===void 0x0?void 0x0:_0x354e86[_0x27c534(0x1c8)](_0x27c534(0x21e))))throw new Error(_0x27c534(0x1ec));throw new Error(_0x27c534(0x203));}_0x23774c[_0x27c534(0x22c)]=!![];try{return!tokenRefreshPromise&&(tokenRefreshPromise=this[_0x27c534(0x1e3)]()[_0x27c534(0x1e0)](()=>{tokenRefreshPromise=null;})),await tokenRefreshPromise,_0x23774c[_0x27c534(0x20d)][_0x27c534(0x1e5)]=_0x27c534(0x23c)+this[_0x27c534(0x227)][_0x27c534(0x202)],this[_0x27c534(0x242)](_0x23774c);}catch(_0x57c5d7){console[_0x27c534(0x22e)](_0x27c534(0x217),_0x57c5d7);throw _0x57c5d7;}}if(axios_1[_0x27c534(0x253)][_0x27c534(0x1c7)](_0x48bc27)&&_0x48bc27['response'])this[_0x27c534(0x233)](_0x48bc27[_0x27c534(0x24b)]);else throw new Error(_0x27c534(0x269));throw _0x48bc27;}async['fetchOauthConsumer'](){const _0x1b5244=a2_0x413d94,_0x3ee104=[OAUTH_CONSUMER_URL,OAUTH_CONSUMER_URL_CN];let _0xfe8c76;for(const _0x3d9722 of _0x3ee104){try{const _0x437cf2=await axios_1['default'][_0x1b5244(0x245)](_0x3d9722);this[_0x1b5244(0x1e2)]={'key':_0x437cf2[_0x1b5244(0x1df)][_0x1b5244(0x256)],'secret':_0x437cf2[_0x1b5244(0x1df)][_0x1b5244(0x246)]};return;}catch(_0xc6d1f1){_0xfe8c76=_0xc6d1f1,console['warn'](_0x1b5244(0x1d9)+_0x3d9722,_0xc6d1f1 instanceof Error?_0xc6d1f1[_0x1b5244(0x1fe)]:_0xc6d1f1);}}throw _0xfe8c76 instanceof Error?_0xfe8c76:new Error('Failed\x20to\x20fetch\x20OAuth\x20consumer\x20from\x20all\x20URLs');}async[a2_0x413d94(0x267)](){const _0x34603b=a2_0x413d94;this['oauth2Token']&&(this[_0x34603b(0x227)][_0x34603b(0x26c)]<luxon_1[_0x34603b(0x1c6)]['now']()['toSeconds']()&&(console[_0x34603b(0x22e)](_0x34603b(0x210)),await this[_0x34603b(0x1e3)]()));}async[a2_0x413d94(0x245)](_0x1fd63f,_0x4bbdf1){const _0x7cb5b9=a2_0x413d94,_0x71530b=await this[_0x7cb5b9(0x242)][_0x7cb5b9(0x245)](_0x1fd63f,_0x4bbdf1);return _0x71530b===null||_0x71530b===void 0x0?void 0x0:_0x71530b[_0x7cb5b9(0x1df)];}async[a2_0x413d94(0x1c3)](_0x520c8f,_0x722c1d,_0x3af3e9){const _0xc6cbc5=a2_0x413d94,_0x1470bf=await this[_0xc6cbc5(0x242)][_0xc6cbc5(0x1c3)](_0x520c8f,_0x722c1d,_0x3af3e9);return _0x1470bf===null||_0x1470bf===void 0x0?void 0x0:_0x1470bf['data'];}async[a2_0x413d94(0x274)](_0x1be96c,_0x281848,_0x2ac909){const _0x20fb25=a2_0x413d94,_0x1f99e7=await this[_0x20fb25(0x242)][_0x20fb25(0x274)](_0x1be96c,_0x281848,_0x2ac909);return _0x1f99e7===null||_0x1f99e7===void 0x0?void 0x0:_0x1f99e7['data'];}async[a2_0x413d94(0x223)](_0xad8676,_0x5562af){const _0x123881=a2_0x413d94,_0x181215=await this['client']['post'](_0xad8676,null,{..._0x5562af,'headers':{..._0x5562af===null||_0x5562af===void 0x0?void 0x0:_0x5562af[_0x123881(0x20d)],'X-Http-Method-Override':_0x123881(0x205)}});return _0x181215===null||_0x181215===void 0x0?void 0x0:_0x181215[_0x123881(0x1df)];}[a2_0x413d94(0x219)](_0x138a17){const _0x1fa109=a2_0x413d94;lodash_1[_0x1fa109(0x253)][_0x1fa109(0x24e)](_0x138a17,(_0x5ca8d4,_0xa69eef)=>{const _0x908bcb=_0x1fa109;this['client'][_0x908bcb(0x230)][_0x908bcb(0x20d)][_0x908bcb(0x20c)][_0xa69eef]=_0x5ca8d4;});}[a2_0x413d94(0x233)](_0x47350c){const _0x532842=a2_0x413d94;this[_0x532842(0x1d1)](_0x47350c);}['handleHttpError'](_0x59bae4){const _0x2c257f=a2_0x413d94,{status:_0x270b79,statusText:_0x4e1351,data:_0x5d4cf3}=_0x59bae4,_0x3ac585={'status':_0x270b79,'statusText':_0x4e1351,'data':typeof _0x5d4cf3===_0x2c257f(0x22d)?JSON['stringify'](_0x5d4cf3):_0x5d4cf3};console[_0x2c257f(0x22e)](_0x2c257f(0x1db),_0x3ac585);throw new Error('HTTP\x20Error\x20('+_0x270b79+_0x2c257f(0x24c)+_0x4e1351);}async[a2_0x413d94(0x21e)](_0x5c7753,_0xd622c4,_0x2f672e){const _0x2354e4=a2_0x413d94;try{await this['fetchOauthConsumer']();const _0x4170a5=await this['getLoginTicket'](_0x5c7753,_0xd622c4,_0x2f672e),_0x38558c=await this['getOauth1Token'](_0x4170a5);return await this[_0x2354e4(0x264)](_0x38558c),this;}catch(_0x5a850d){console['error'](_0x2354e4(0x255),_0x5a850d);throw _0x5a850d;}}async[a2_0x413d94(0x1f3)](_0x34ddd4,_0x151687,_0x9f345e){const _0x74b33=a2_0x413d94,_0x447f2e=this[_0x74b33(0x1d8)]();await this[_0x74b33(0x1e7)](_0x447f2e[_0x74b33(0x1eb)]);const _0x915b84=await this[_0x74b33(0x20f)](_0x447f2e[_0x74b33(0x212)]);let _0x1dbf3d=await this['performLoginStep3'](_0x34ddd4,_0x151687,_0x915b84,_0x447f2e['step3Params']);this['handleAccountLocked'](_0x1dbf3d);const _0x2ab5f2=this[_0x74b33(0x251)](_0x1dbf3d);if(this[_0x74b33(0x1f4)](_0x2ab5f2)){if(_0x9f345e){console[_0x74b33(0x1ef)](_0x74b33(0x240),_0x9f345e);const _0x5a6b4e=await this['mfaManager'][_0x74b33(0x266)](_0x9f345e);console['log'](_0x74b33(0x1d5),_0x5a6b4e),_0x1dbf3d=await this[_0x74b33(0x20e)](_0x1dbf3d,_0x447f2e['step3Params'],_0x5a6b4e);}else throw new Error('需要MFA验证,但未提供验证码获取方式');}const _0x2f9be2=this[_0x74b33(0x258)](_0x1dbf3d);if(!_0x2f9be2)throw new Error('登录失败(未找到票据或MFA验证失败),请检查用户名和密码');return _0x2f9be2;}['prepareLoginParams'](){const _0x24da32=a2_0x413d94;return{'step1Params':{'clientId':'GarminConnect','locale':'en','service':this[_0x24da32(0x20a)][_0x24da32(0x238)]},'step2Params':{'id':'gauth-widget','embedWidget':!![],'locale':'en','gauthHost':this[_0x24da32(0x20a)][_0x24da32(0x268)]},'step3Params':{'id':'gauth-widget','embedWidget':!![],'clientId':'GarminConnect','locale':'en','gauthHost':this[_0x24da32(0x20a)][_0x24da32(0x268)],'service':this[_0x24da32(0x20a)][_0x24da32(0x268)],'source':this[_0x24da32(0x20a)]['GARMIN_SSO_EMBED'],'redirectAfterAccountLoginUrl':this['url']['GARMIN_SSO_EMBED'],'redirectAfterAccountCreationUrl':this[_0x24da32(0x20a)][_0x24da32(0x268)]}};}async[a2_0x413d94(0x1e7)](_0x28a35b){const _0x2bb16b=a2_0x413d94,_0x473c71=this[_0x2bb16b(0x20a)]['GARMIN_SSO_EMBED']+'?'+qs_1[_0x2bb16b(0x253)][_0x2bb16b(0x25d)](_0x28a35b);await this[_0x2bb16b(0x242)][_0x2bb16b(0x245)](_0x473c71);}async[a2_0x413d94(0x20f)](_0x3f68aa){const _0xf21ab3=a2_0x413d94,_0x1d962b=this[_0xf21ab3(0x20a)]['SIGNIN_URL']+'?'+qs_1[_0xf21ab3(0x253)][_0xf21ab3(0x25d)](_0x3f68aa),_0x41261b=await this[_0xf21ab3(0x245)](_0x1d962b),_0x2eb0bd=this[_0xf21ab3(0x1ca)](_0x41261b);if(!_0x2eb0bd)throw new Error('登录\x20-\x20未找到CSRF令牌');return _0x2eb0bd;}async[a2_0x413d94(0x231)](_0x4ad024,_0x5deb41,_0x5030c9,_0x38e270){const _0x51544=a2_0x413d94,_0x395ff7=this[_0x51544(0x20a)][_0x51544(0x1da)]+'?'+qs_1['default'][_0x51544(0x25d)](_0x38e270),_0x33e878=new URLSearchParams();return _0x33e878[_0x51544(0x211)](_0x51544(0x1f7),_0x4ad024),_0x33e878[_0x51544(0x211)](_0x51544(0x1dd),_0x5deb41),_0x33e878['append'](_0x51544(0x222),_0x51544(0x1e4)),_0x33e878[_0x51544(0x211)]('_csrf',_0x5030c9),this['post'](_0x395ff7,_0x33e878,{'headers':{'Content-Type':_0x51544(0x25c),'Dnt':0x1,'Origin':this['url']['GARMIN_SSO_ORIGIN'],'Referer':this[_0x51544(0x20a)][_0x51544(0x1da)],'User-Agent':USER_AGENT_CONNECTMOBILE}});}[a2_0x413d94(0x1f4)](_0x1fb7c3){const _0x7285e5=a2_0x413d94,_0x8b50ee=_0x1fb7c3[_0x7285e5(0x204)]();return _0x8b50ee['includes'](_0x7285e5(0x235))||_0x8b50ee[_0x7285e5(0x1c8)](_0x7285e5(0x1d6))&&!_0x8b50ee[_0x7285e5(0x1c8)](_0x7285e5(0x25f));}[a2_0x413d94(0x258)](_0x10d76b){const _0x48b507=TICKET_RE['exec'](_0x10d76b);return _0x48b507?_0x48b507[0x1]:null;}async[a2_0x413d94(0x20e)](_0x39d2ad,_0x3add06,_0x5be788){const _0x19ea17=a2_0x413d94;try{const _0x53babb=this[_0x19ea17(0x1ca)](_0x39d2ad);if(!_0x53babb)throw new Error(_0x19ea17(0x1e1));const _0x52a8f8=await this['submitMFACode'](_0x53babb,_0x5be788,_0x3add06);return this[_0x19ea17(0x20b)](_0x52a8f8);}catch(_0x3e642b){console[_0x19ea17(0x22e)](_0x19ea17(0x21c),_0x3e642b);throw new Error(_0x19ea17(0x236)+_0x3e642b);}}async[a2_0x413d94(0x225)](_0x5cba4c,_0x29d92b,_0x37635d){const _0x24c06e=a2_0x413d94;if(!_0x37635d)throw new Error('登录失败(需要MFA验证),请提供MFA回调函数');const _0x101b41=this['extractCsrfToken'](_0x5cba4c);if(!_0x101b41)throw new Error('无法从MFA页面提取CSRF令牌');const _0x3b8e49=await _0x37635d();console[_0x24c06e(0x1ef)](_0x24c06e(0x24d),_0x3b8e49);const _0x47987e=await this['submitMFACode'](_0x101b41,_0x3b8e49,_0x29d92b);return this[_0x24c06e(0x20b)](_0x47987e);}async['submitMFACode'](_0x4f082f,_0x59359d,_0x42c01c){const _0xc4ce97=a2_0x413d94,_0x33c11c=this[_0xc4ce97(0x20a)]['GARMIN_SSO'],_0x24698d=new URLSearchParams();return _0x24698d[_0xc4ce97(0x211)](_0xc4ce97(0x206),_0x59359d),_0x24698d['append'](_0xc4ce97(0x222),_0xc4ce97(0x1e4)),_0x24698d['append'](_0xc4ce97(0x201),_0x4f082f),this[_0xc4ce97(0x1c3)](_0x33c11c+_0xc4ce97(0x1ce),_0x24698d,{'params':_0x42c01c,'headers':{'Content-Type':_0xc4ce97(0x25c),'Dnt':0x1,'Origin':this[_0xc4ce97(0x20a)][_0xc4ce97(0x1fb)],'Referer':_0x33c11c+'/signin','User-Agent':USER_AGENT_BROWSER},'maxRedirects':0xa,'transformResponse':[function(_0x434e35,_0x2fe7f9){const _0x3c75db=_0xc4ce97;return _0x2fe7f9['location']&&_0x2fe7f9[_0x3c75db(0x23d)][_0x3c75db(0x1c8)](_0x3c75db(0x234))&&console[_0x3c75db(0x1ef)](_0x3c75db(0x21d),_0x2fe7f9[_0x3c75db(0x23d)]),_0x434e35;}]});}[a2_0x413d94(0x20b)](_0x37d286){const _0x5e8cf0=a2_0x413d94,_0x25ca9c=this[_0x5e8cf0(0x251)](_0x37d286);return console[_0x5e8cf0(0x1ef)](_0x5e8cf0(0x25a),_0x25ca9c),_0x37d286;}['extractCsrfToken'](_0x1e48e5){const _0x373b54=a2_0x413d94,_0x52dc64=CSRF_RE[_0x373b54(0x26a)](_0x1e48e5);return _0x52dc64?_0x52dc64[0x1]:null;}[a2_0x413d94(0x251)](_0x3f9fcc){const _0x129f35=a2_0x413d94,_0x3cba50=PAGE_TITLE_RE[_0x129f35(0x26a)](_0x3f9fcc);if(_0x3cba50){const _0x58de74=_0x3cba50[0x1];console['log'](_0x129f35(0x22a),_0x58de74);if(lodash_1[_0x129f35(0x253)]['includes'](_0x58de74,_0x129f35(0x24a)))throw new Error(_0x129f35(0x213));return _0x58de74;}else throw new Error(_0x129f35(0x1d0));}['handleAccountLocked'](_0x4ce50c){const _0x1941ee=a2_0x413d94,_0x16e57f=ACCOUNT_LOCKED_RE[_0x1941ee(0x26a)](_0x4ce50c);if(_0x16e57f){const _0x53ab5c=_0x16e57f[0x1];console['error'](_0x53ab5c);throw new Error(_0x1941ee(0x1fa));}}async['refreshOauth2Token'](){const _0x2f8bb4=a2_0x413d94;try{!this[_0x2f8bb4(0x1e2)]&&await this['fetchOauthConsumer']();if(!this['oauth2Token']||!this[_0x2f8bb4(0x247)])throw new Error(_0x2f8bb4(0x1ea));const _0x3a0a14={'oauth':this[_0x2f8bb4(0x243)](this[_0x2f8bb4(0x1e2)]),'token':this[_0x2f8bb4(0x247)]};await this[_0x2f8bb4(0x264)](_0x3a0a14),console[_0x2f8bb4(0x1ef)]('「'+this['config'][_0x2f8bb4(0x1f7)]+_0x2f8bb4(0x250)+this[_0x2f8bb4(0x20a)]['domain']+_0x2f8bb4(0x265));}catch(_0x2ac3f1){console[_0x2f8bb4(0x22e)](_0x2f8bb4(0x23a),_0x2ac3f1);throw _0x2ac3f1;}}async[a2_0x413d94(0x1ee)](_0x352a84){const _0x4c7c3d=a2_0x413d94;if(!this[_0x4c7c3d(0x1e2)])throw new Error(_0x4c7c3d(0x271));const _0x12b916={'ticket':_0x352a84,'login-url':this[_0x4c7c3d(0x20a)][_0x4c7c3d(0x268)],'accepts-mfa-tokens':!![]},_0x383d91=this[_0x4c7c3d(0x20a)]['OAUTH_URL']+_0x4c7c3d(0x1cb)+qs_1['default']['stringify'](_0x12b916),_0x34345c=this['getOauthClient'](this[_0x4c7c3d(0x1e2)]),_0x372861={'url':_0x383d91,'method':_0x4c7c3d(0x208)},_0x3f660c=_0x34345c['toHeader'](_0x34345c[_0x4c7c3d(0x26e)](_0x372861)),_0x34bf23=await this[_0x4c7c3d(0x245)](_0x383d91,{'headers':{..._0x3f660c,'User-Agent':USER_AGENT_CONNECTMOBILE}}),_0x40dc05=qs_1[_0x4c7c3d(0x253)][_0x4c7c3d(0x1fd)](_0x34bf23);return this[_0x4c7c3d(0x247)]=_0x40dc05,{'token':_0x40dc05,'oauth':_0x34345c};}[a2_0x413d94(0x243)](_0x3faa9a){const _0x3f9605=a2_0x413d94;return new oauth_1_0a_1[(_0x3f9605(0x253))]({'consumer':_0x3faa9a,'signature_method':_0x3f9605(0x21b),'hash_function'(_0x213386,_0x6d6aaf){const _0x1fd1ec=_0x3f9605;return node_crypto_1[_0x1fd1ec(0x253)][_0x1fd1ec(0x1d3)]('sha1',_0x6d6aaf)[_0x1fd1ec(0x1c5)](_0x213386)[_0x1fd1ec(0x252)]('base64');}});}async[a2_0x413d94(0x264)](_0xe70263){const _0x5b0dbc=a2_0x413d94,_0x447ffb={'key':_0xe70263[_0x5b0dbc(0x1f9)][_0x5b0dbc(0x214)],'secret':_0xe70263[_0x5b0dbc(0x1f9)][_0x5b0dbc(0x263)]},_0x1e310b=this[_0x5b0dbc(0x20a)][_0x5b0dbc(0x26d)]+_0x5b0dbc(0x241),_0x3a94e5={'url':_0x1e310b,'method':_0x5b0dbc(0x24f),'data':null},_0x5b5d3a=_0xe70263[_0x5b0dbc(0x1f1)][_0x5b0dbc(0x26e)](_0x3a94e5,_0x447ffb),_0x588f89=_0x1e310b+'?'+qs_1[_0x5b0dbc(0x253)][_0x5b0dbc(0x25d)](_0x5b5d3a);this[_0x5b0dbc(0x227)]=undefined;const _0x1b5470=await this[_0x5b0dbc(0x1c3)](_0x588f89,null,{'headers':{'User-Agent':USER_AGENT_CONNECTMOBILE,'Content-Type':_0x5b0dbc(0x25c)}});this[_0x5b0dbc(0x227)]=this[_0x5b0dbc(0x23f)](_0x1b5470),this[_0x5b0dbc(0x1f6)]&&this[_0x5b0dbc(0x247)]&&this['oauth2Token']&&this[_0x5b0dbc(0x1f6)]({'oauth1':this[_0x5b0dbc(0x247)],'oauth2':this['oauth2Token']});}[a2_0x413d94(0x23f)](_0x4b7d81){const _0x483d3d=a2_0x413d94,_0xdc8a35=luxon_1[_0x483d3d(0x1c6)]['now'](),_0x3cafa8=_0xdc8a35[_0x483d3d(0x1ff)]({'seconds':_0x4b7d81[_0x483d3d(0x257)]}),_0xe0b955=_0xdc8a35[_0x483d3d(0x1ff)]({'seconds':_0x4b7d81[_0x483d3d(0x260)]});return{..._0x4b7d81,'last_update_date':_0xdc8a35[_0x483d3d(0x22f)]()[_0x483d3d(0x259)](),'expires_date':_0x3cafa8[_0x483d3d(0x22f)]()[_0x483d3d(0x259)](),'expires_at':_0x3cafa8[_0x483d3d(0x1f0)](),'refresh_token_expires_at':_0xe0b955['toSeconds']()};}}exports['HttpClient']=HttpClient;function a2_0x1785(){const _0xc97e34=['检测到重定向到包含logintoken的URL:','login','use','setupInterceptors','Request\x20Timeout','embed','delete','mfaStorageDir','handleMFA','ECONNABORTED','oauth2Token','响应跟踪\x20-\x20重定向次数:','responseURL','登录页面标题:','Mozilla/5.0\x20(Macintosh;\x20Intel\x20Mac\x20OS\x20X\x2010_15_7)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/131.0.0.0\x20Safari/537.36','_retry','object','error','toLocal','defaults','performLoginStep3','3164848tzICdI','handleError','logintoken','mfa','MFA验证失败:\x20','code','GC_MODERN','1746438kgrIJV','刷新OAuth2令牌失败:','signin','Bearer\x20','location','tough-cookie','setOauth2TokenExpiresAt','🚀\x20-\x20getLoginTicket\x20-\x20等待验证码\x20sessionId:','/exchange/user/2.0','client','getOauthClient','896540mUwiac','get','consumer_secret','oauth1Token','4593775wLBPpn','timeout','Update\x20Phone\x20Number','response','):\x20','🚀\x20-\x20handleMFA\x20-\x20mfaCode:','each','POST','」在「','handlePageTitle','digest','default','16MDUkze','Login\x20failed:','consumer_key','expires_in','extractTicket','toString','MFA验证后的页面标题:','file','application/x-www-form-urlencoded','stringify','create','sign','refresh_token_expires_in','216bEaYUg','Request\x20Timeout:\x20>\x20','oauth_token_secret','exchange','」的OAuth2令牌刷新成功','waitForMFACode','checkTokenVaild','GARMIN_SSO_EMBED','Network\x20error\x20or\x20unknown\x20error\x20occurred','exec','352047tAuIMO','expires_at','OAUTH_URL','authorize','luxon','\x20ms','未找到OAuth消费者信息','响应跟踪\x20-\x20状态码:','ticket=([^\x22]+)\x22','put','https://thegarth.s3.amazonaws.com/oauth_consumer.json','响应跟踪\x20-\x20最终URL:','post','node:crypto','update','DateTime','isAxiosError','includes','axios','extractCsrfToken','/preauthorized?','defineProperty','7ULCLkV','/verifyMFA/loginEnterMfaCode','interceptors','登录失败(未找到页面标题)','handleHttpError','./MFAManager','createHmac','oauth-1.0a','🚀\x20-\x20getLoginTicket\x20-\x20收到验证码\x20mfaCode:','authentication','298760DrhUnF','prepareLoginParams','[fetchOauthConsumer]\x20请求失败,尝试下一个\x20URL:\x20','SIGNIN_URL','HTTP\x20Error:','lodash','password','https://cos.dailysync.cn/oauth_consumer.json','data','finally','MFA验证\x20-\x20未找到CSRF令牌','OAUTH_CONSUMER','refreshOauth2Token','true','Authorization','响应跟踪\x20-\x20检测到重定向状态码:','performLoginStep1','logResponseTracking','config','缺少刷新令牌所需的必要令牌','step1Params','No\x20OAuth2\x20token\x20available\x20(登录失败,密码错误)','getInstance','getOauth1Token','log','toSeconds','oauth','status','getLoginTicket','isMFARequired','mfaManager','onTokenChange','username','MFAManager','token','登录失败(账户已锁定),请打开Connect网页解锁您的账户','GARMIN_SSO_ORIGIN','UNAUTHORIZED','parse','message','plus','axios-cookiejar-support','_csrf','access_token','No\x20OAuth2\x20token\x20available','toLowerCase','DELETE','mfa-code','__esModule','GET','request','url','validateMFAResult','common','headers','handleMFAWithCode','performLoginStep2','Token\x20expired!','append','step2Params','登录失败(需要更新电话号码),请更新您的电话号码,参考:\x20https://github.com/matin/garth/issues/19','oauth_token','2639638fAiARS','handleResponseError','Token\x20refresh\x20failed:','>\x20响应跟踪\x20-\x20URL:','setCommonHeader','响应跟踪\x20-\x20Location头:','HMAC-SHA1','MFA验证失败:'];a2_0x1785=function(){return _0xc97e34;};return a2_0x1785();}
1
+ 'use strict';const a2_0x491f5c=a2_0x4b86;(function(_0x25ec43,_0x40710e){const _0x1a7f87=a2_0x4b86,_0x4c7372=_0x25ec43();while(!![]){try{const _0x5b1880=-parseInt(_0x1a7f87(0x14b))/0x1+-parseInt(_0x1a7f87(0x14d))/0x2+parseInt(_0x1a7f87(0x144))/0x3*(-parseInt(_0x1a7f87(0x16a))/0x4)+-parseInt(_0x1a7f87(0x145))/0x5*(parseInt(_0x1a7f87(0x11c))/0x6)+parseInt(_0x1a7f87(0x16d))/0x7+-parseInt(_0x1a7f87(0x19e))/0x8*(-parseInt(_0x1a7f87(0x10b))/0x9)+parseInt(_0x1a7f87(0x154))/0xa;if(_0x5b1880===_0x40710e)break;else _0x4c7372['push'](_0x4c7372['shift']());}catch(_0xd62e1b){_0x4c7372['push'](_0x4c7372['shift']());}}}(a2_0x1889,0x5a63a));function a2_0x4b86(_0x3a4d36,_0x3c9860){_0x3a4d36=_0x3a4d36-0xf5;const _0x18893e=a2_0x1889();let _0x4b865a=_0x18893e[_0x3a4d36];return _0x4b865a;}function a2_0x1889(){const _0xd68717=['setCommonHeader','mfaStorageDir','createHmac','https://cos.dailysync.cn/oauth_consumer.json','put','toLowerCase','GarminConnect','interceptors','responseURL','4828youJxk','MFA验证失败:\x20','node:crypto','1144192ZosRQw','plus','luxon','step3Params','无法从MFA页面提取CSRF令牌','append','expires_at','>\x20响应跟踪\x20-\x20URL:','🚀\x20-\x20getLoginTicket\x20-\x20等待验证码\x20sessionId:','lodash','config','__importDefault','data','warn','SIGNIN_URL','登录失败(账户已锁定),请打开Connect网页解锁您的账户','handleError','signin','refresh_token_expires_in','Authorization','getOauthClient','handleMFAWithCode','需要MFA验证,但未提供验证码获取方式','No\x20OAuth2\x20token\x20available','mfa-code','defineProperty','name=\x22_csrf\x22\x5cs+value=\x22(.+?)\x22','logintoken','mfa','响应跟踪\x20-\x20重定向次数:','logResponseTracking','get','oauth2Token','oauth1Token','isMFARequired','Mozilla/5.0\x20(Windows\x20NT\x2010.0;\x20Win64;\x20x64)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/117.0.0.0\x20Safari/537.36','log','location','axios','响应跟踪\x20-\x20最终URL:','getInstance','timeout','verifyMFA','CookieJar','now','true','tough-cookie','登录失败(未找到票据或MFA验证失败),请检查用户名和密码','status','131576rULSDK','oauth','com.garmin.android.apps.connectmobile','token','handleHttpError','message','digest','未找到OAuth消费者信息','expires_in','toString','_csrf','HTTP\x20Error\x20(','object','[fetchOauthConsumer]\x20请求失败,尝试下一个\x20URL:\x20','application/x-www-form-urlencoded','includes','exec','authorize','响应跟踪\x20-\x20Location头:','GARMIN_SSO_ORIGIN','refreshOauth2Token','ticket=([^\x22]+)\x22','/exchange/user/2.0','响应跟踪\x20-\x20检测到重定向状态码:','DateTime','headers','GARMIN_SSO','access_token','isAxiosError','oauth_token','setOauth2TokenExpiresAt','prepareLoginParams','登录失败(未找到页面标题)','getLoginTicket','Update\x20Phone\x20Number','DELETE','update','登录页面标题:','/tmp','No\x20OAuth2\x20token\x20available\x20(登录失败,密码错误)','63kYCLRU','step2Params','validateMFAResult','/verifyMFA/loginEnterMfaCode','oauth_token_secret','redirectCount','_retry','OAUTH_CONSUMER','client','performLoginStep3','delete','password','MFA验证\x20-\x20未找到CSRF令牌','toLocal','Failed\x20to\x20fetch\x20OAuth\x20consumer\x20from\x20all\x20URLs','toHeader','username','567738SDmTrT','Mozilla/5.0\x20(Macintosh;\x20Intel\x20Mac\x20OS\x20X\x2010_15_7)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/131.0.0.0\x20Safari/537.36','extractTicket','checkTokenVaild','缺少刷新令牌所需的必要令牌','https://thegarth.s3.amazonaws.com/oauth_consumer.json','\x20ms','GC_MODERN','embed','consumer_key','HttpClient','base64','Token\x20refresh\x20failed:','MFAManager','axios-cookiejar-support','response','」的OAuth2令牌刷新成功','Login\x20failed:','code','Network\x20error\x20or\x20unknown\x20error\x20occurred','getOauth1Token','handlePageTitle','authentication','onTokenChange','」在「','响应跟踪\x20-\x20状态码:','finally','POST','performLoginStep2','toSeconds','登录\x20-\x20未找到CSRF令牌','login','handleMFA','request','MFA验证失败:','performLoginStep1','Bearer\x20','登录失败(需要更新电话号码),请更新您的电话号码,参考:\x20https://github.com/matin/garth/issues/19','sha1','stringify','372Xnyeix','25gudmey','url','defaults','Request\x20Timeout','waitForMFACode','检测到重定向到包含logintoken的URL:','157535mndipF','submitMFACode','190062tINzGo','OAUTH_URL','登录失败(需要MFA验证),请提供MFA回调函数','parse','ECONNABORTED','post','step1Params','9669980RCGUUe','UNAUTHORIZED','default','extractCsrfToken','fetchOauthConsumer','GARMIN_SSO_EMBED','var\x20statuss*=s*\x22([^\x22]*)\x22','error','exchange','/preauthorized?','):\x20','handleAccountLocked','gauth-widget'];a2_0x1889=function(){return _0xd68717;};return a2_0x1889();}var __importDefault=this&&this[a2_0x491f5c(0x178)]||function(_0x542c37){return _0x542c37&&_0x542c37['__esModule']?_0x542c37:{'default':_0x542c37};};Object[a2_0x491f5c(0x186)](exports,'__esModule',{'value':!![]}),exports[a2_0x491f5c(0x126)]=void 0x0;const axios_1=__importDefault(require(a2_0x491f5c(0x193))),lodash_1=__importDefault(require(a2_0x491f5c(0x176))),luxon_1=require(a2_0x491f5c(0x16f)),oauth_1_0a_1=__importDefault(require('oauth-1.0a')),qs_1=__importDefault(require('qs')),MFAManager_1=require('./MFAManager'),node_crypto_1=__importDefault(require(a2_0x491f5c(0x16c))),tough_cookie_1=require(a2_0x491f5c(0x19b)),axios_cookiejar_support_1=require(a2_0x491f5c(0x12a)),CSRF_RE=new RegExp(a2_0x491f5c(0x187)),TICKET_RE=new RegExp(a2_0x491f5c(0xf8)),ACCOUNT_LOCKED_RE=new RegExp(a2_0x491f5c(0x15a)),PAGE_TITLE_RE=new RegExp('<title>([^<]*)</title>'),USER_AGENT_CONNECTMOBILE=a2_0x491f5c(0x1a0),USER_AGENT_BROWSER=a2_0x491f5c(0x190),USER_AGENT_BROWSER_MAC=a2_0x491f5c(0x11d),OAUTH_CONSUMER_URL=a2_0x491f5c(0x121),OAUTH_CONSUMER_URL_CN=a2_0x491f5c(0x164),HTTP_STATUS={'UNAUTHORIZED':0x191};let tokenRefreshPromise=null,refreshSubscribers=[];class HttpClient{constructor(_0x354ef0,_0x3dc026){const _0x2dfd8f=a2_0x491f5c;var _0x19e03b,_0x20b56;const _0x2e23a6=new tough_cookie_1[(_0x2dfd8f(0x198))]();this[_0x2dfd8f(0x146)]=_0x354ef0,this[_0x2dfd8f(0x113)]=(0x0,axios_cookiejar_support_1['wrapper'])(axios_1[_0x2dfd8f(0x156)]['create']({'timeout':(_0x19e03b=_0x3dc026===null||_0x3dc026===void 0x0?void 0x0:_0x3dc026[_0x2dfd8f(0x196)])!==null&&_0x19e03b!==void 0x0?_0x19e03b:0x1388,'timeoutErrorMessage':'Request\x20Timeout:\x20>\x20'+((_0x20b56=_0x3dc026===null||_0x3dc026===void 0x0?void 0x0:_0x3dc026[_0x2dfd8f(0x196)])!==null&&_0x20b56!==void 0x0?_0x20b56:0x1388)+_0x2dfd8f(0x122),'maxRedirects':0xa,'validateStatus':function(_0x7edb2f){return _0x7edb2f>=0xc8&&_0x7edb2f<0x190;},'withCredentials':!![],'jar':_0x2e23a6})),this['config']=_0x3dc026;const _0x16ba40=_0x3dc026[_0x2dfd8f(0x189)]||{'type':'file','dir':_0x3dc026[_0x2dfd8f(0x162)]||_0x2dfd8f(0x109)};this['mfaManager']=MFAManager_1[_0x2dfd8f(0x129)][_0x2dfd8f(0x195)](_0x16ba40),this['setupInterceptors']();}['setupInterceptors'](){const _0x12eb65=a2_0x491f5c;this[_0x12eb65(0x113)][_0x12eb65(0x168)]['response']['use'](_0x24ecbc=>{return _0x24ecbc;},async _0x1c9356=>{return this['handleResponseError'](_0x1c9356);}),this[_0x12eb65(0x113)][_0x12eb65(0x168)][_0x12eb65(0x13d)]['use'](async _0x5cfce0=>{const _0x45cf16=_0x12eb65;return this[_0x45cf16(0x18d)]&&(_0x5cfce0[_0x45cf16(0xfc)][_0x45cf16(0x180)]=_0x45cf16(0x140)+this[_0x45cf16(0x18d)][_0x45cf16(0xfe)]),_0x5cfce0;});}[a2_0x491f5c(0x18b)](_0x1be089){const _0x25c0f7=a2_0x491f5c;var _0x594846,_0x560467,_0x1056a0,_0x34ac5a;(((_0x594846=_0x1be089['config']['url'])===null||_0x594846===void 0x0?void 0x0:_0x594846[_0x25c0f7(0x1ad)](_0x25c0f7(0x17e)))||((_0x560467=_0x1be089['config'][_0x25c0f7(0x146)])===null||_0x560467===void 0x0?void 0x0:_0x560467[_0x25c0f7(0x1ad)](_0x25c0f7(0x197))))&&(console['log'](_0x25c0f7(0x174),_0x1be089['config']['url']),console['log'](_0x25c0f7(0x135),_0x1be089['status']),console[_0x25c0f7(0x191)](_0x25c0f7(0x194),((_0x1056a0=_0x1be089[_0x25c0f7(0x13d)])===null||_0x1056a0===void 0x0?void 0x0:_0x1056a0[_0x25c0f7(0x169)])||_0x1be089[_0x25c0f7(0x177)]['url']),console[_0x25c0f7(0x191)](_0x25c0f7(0x18a),((_0x34ac5a=_0x1be089[_0x25c0f7(0x13d)])===null||_0x34ac5a===void 0x0?void 0x0:_0x34ac5a[_0x25c0f7(0x110)])||0x0),_0x1be089[_0x25c0f7(0xfc)][_0x25c0f7(0x192)]&&console[_0x25c0f7(0x191)](_0x25c0f7(0xf5),_0x1be089['headers'][_0x25c0f7(0x192)]),_0x1be089[_0x25c0f7(0x19d)]>=0x12c&&_0x1be089[_0x25c0f7(0x19d)]<0x190&&console[_0x25c0f7(0x191)](_0x25c0f7(0xfa),_0x1be089['status']));}async['handleResponseError'](_0x74f939){const _0x5e8b02=a2_0x491f5c;var _0x1a6769,_0xb328d1,_0x29db94;if(axios_1['default'][_0x5e8b02(0xff)](_0x74f939)&&_0x74f939[_0x5e8b02(0x12e)]===_0x5e8b02(0x151))throw new Error(_0x74f939[_0x5e8b02(0x1a3)]||_0x5e8b02(0x148));const _0x588471=_0x74f939[_0x5e8b02(0x177)];if(((_0x1a6769=_0x74f939===null||_0x74f939===void 0x0?void 0x0:_0x74f939['response'])===null||_0x1a6769===void 0x0?void 0x0:_0x1a6769[_0x5e8b02(0x19d)])===HTTP_STATUS[_0x5e8b02(0x155)]&&!(_0x588471===null||_0x588471===void 0x0?void 0x0:_0x588471['_retry'])){if(!this['oauth2Token']){if(((_0xb328d1=_0x588471===null||_0x588471===void 0x0?void 0x0:_0x588471[_0x5e8b02(0x146)])===null||_0xb328d1===void 0x0?void 0x0:_0xb328d1[_0x5e8b02(0x1ad)](_0x5e8b02(0x17e)))||((_0x29db94=_0x588471===null||_0x588471===void 0x0?void 0x0:_0x588471[_0x5e8b02(0x146)])===null||_0x29db94===void 0x0?void 0x0:_0x29db94['includes']('login')))throw new Error(_0x5e8b02(0x10a));throw new Error(_0x5e8b02(0x184));}_0x588471[_0x5e8b02(0x111)]=!![];try{return!tokenRefreshPromise&&(tokenRefreshPromise=this['refreshOauth2Token']()[_0x5e8b02(0x136)](()=>{tokenRefreshPromise=null;})),await tokenRefreshPromise,_0x588471['headers']['Authorization']=_0x5e8b02(0x140)+this[_0x5e8b02(0x18d)][_0x5e8b02(0xfe)],this[_0x5e8b02(0x113)](_0x588471);}catch(_0x19ebfc){console['error'](_0x5e8b02(0x128),_0x19ebfc);throw _0x19ebfc;}}if(axios_1[_0x5e8b02(0x156)][_0x5e8b02(0xff)](_0x74f939)&&_0x74f939['response'])this[_0x5e8b02(0x17d)](_0x74f939[_0x5e8b02(0x12b)]);else throw new Error(_0x5e8b02(0x12f));throw _0x74f939;}async[a2_0x491f5c(0x158)](){const _0x282170=a2_0x491f5c,_0x2d8b47=[OAUTH_CONSUMER_URL,OAUTH_CONSUMER_URL_CN];let _0x26dcc9;for(const _0xae0c14 of _0x2d8b47){try{const _0x3ad6d3=await axios_1[_0x282170(0x156)]['get'](_0xae0c14);this['OAUTH_CONSUMER']={'key':_0x3ad6d3[_0x282170(0x179)][_0x282170(0x125)],'secret':_0x3ad6d3[_0x282170(0x179)]['consumer_secret']};return;}catch(_0x5bb366){_0x26dcc9=_0x5bb366,console[_0x282170(0x17a)](_0x282170(0x1ab)+_0xae0c14,_0x5bb366 instanceof Error?_0x5bb366[_0x282170(0x1a3)]:_0x5bb366);}}throw _0x26dcc9 instanceof Error?_0x26dcc9:new Error(_0x282170(0x119));}async[a2_0x491f5c(0x11f)](){const _0x434c2a=a2_0x491f5c;this['oauth2Token']&&(this[_0x434c2a(0x18d)][_0x434c2a(0x173)]<luxon_1[_0x434c2a(0xfb)][_0x434c2a(0x199)]()[_0x434c2a(0x139)]()&&(console[_0x434c2a(0x15b)]('Token\x20expired!'),await this['refreshOauth2Token']()));}async[a2_0x491f5c(0x18c)](_0x36f76f,_0x55d792){const _0x3fed6d=a2_0x491f5c,_0x36d1b0=await this[_0x3fed6d(0x113)][_0x3fed6d(0x18c)](_0x36f76f,_0x55d792);return _0x36d1b0===null||_0x36d1b0===void 0x0?void 0x0:_0x36d1b0[_0x3fed6d(0x179)];}async[a2_0x491f5c(0x152)](_0x3ab9c2,_0x169613,_0x5d6cf1){const _0xa511f0=a2_0x491f5c,_0x4b0454=await this[_0xa511f0(0x113)]['post'](_0x3ab9c2,_0x169613,_0x5d6cf1);return _0x4b0454===null||_0x4b0454===void 0x0?void 0x0:_0x4b0454[_0xa511f0(0x179)];}async[a2_0x491f5c(0x165)](_0x159ce7,_0x4f8c30,_0x5da53d){const _0x40750e=a2_0x491f5c,_0x3f9aed=await this[_0x40750e(0x113)][_0x40750e(0x165)](_0x159ce7,_0x4f8c30,_0x5da53d);return _0x3f9aed===null||_0x3f9aed===void 0x0?void 0x0:_0x3f9aed[_0x40750e(0x179)];}async[a2_0x491f5c(0x115)](_0x414167,_0x4b0ccb){const _0x3dd9e2=a2_0x491f5c,_0x1bd3e3=await this[_0x3dd9e2(0x113)][_0x3dd9e2(0x152)](_0x414167,null,{..._0x4b0ccb,'headers':{..._0x4b0ccb===null||_0x4b0ccb===void 0x0?void 0x0:_0x4b0ccb[_0x3dd9e2(0xfc)],'X-Http-Method-Override':_0x3dd9e2(0x106)}});return _0x1bd3e3===null||_0x1bd3e3===void 0x0?void 0x0:_0x1bd3e3[_0x3dd9e2(0x179)];}[a2_0x491f5c(0x161)](_0x3dad59){const _0x2a3d8c=a2_0x491f5c;lodash_1[_0x2a3d8c(0x156)]['each'](_0x3dad59,(_0x5a343f,_0x1c5727)=>{const _0x30ceb1=_0x2a3d8c;this[_0x30ceb1(0x113)][_0x30ceb1(0x147)][_0x30ceb1(0xfc)]['common'][_0x1c5727]=_0x5a343f;});}[a2_0x491f5c(0x17d)](_0x3377da){const _0x4d19d3=a2_0x491f5c;this[_0x4d19d3(0x1a2)](_0x3377da);}[a2_0x491f5c(0x1a2)](_0x5b0f27){const _0x41c8f8=a2_0x491f5c,{status:_0x2d0711,statusText:_0x3e748f,data:_0x5e1d26}=_0x5b0f27,_0x392292={'status':_0x2d0711,'statusText':_0x3e748f,'data':typeof _0x5e1d26===_0x41c8f8(0x1aa)?JSON['stringify'](_0x5e1d26):_0x5e1d26};console[_0x41c8f8(0x15b)]('HTTP\x20Error:',_0x392292);throw new Error(_0x41c8f8(0x1a9)+_0x2d0711+_0x41c8f8(0x15e)+_0x3e748f);}async[a2_0x491f5c(0x13b)](_0x588a91,_0x4bb6da,_0x2b79d4){const _0x35053e=a2_0x491f5c;try{await this['fetchOauthConsumer']();const _0x14817c=await this[_0x35053e(0x104)](_0x588a91,_0x4bb6da,_0x2b79d4),_0x334ded=await this[_0x35053e(0x130)](_0x14817c);return await this[_0x35053e(0x15c)](_0x334ded),this;}catch(_0x29000d){console[_0x35053e(0x15b)](_0x35053e(0x12d),_0x29000d);throw _0x29000d;}}async[a2_0x491f5c(0x104)](_0x22a0c8,_0x255550,_0x4fd496){const _0x50a8ec=a2_0x491f5c,_0x53cc1b=this[_0x50a8ec(0x102)]();await this[_0x50a8ec(0x13f)](_0x53cc1b[_0x50a8ec(0x153)]);const _0x2af2d8=await this[_0x50a8ec(0x138)](_0x53cc1b[_0x50a8ec(0x10c)]);let _0x19781b=await this[_0x50a8ec(0x114)](_0x22a0c8,_0x255550,_0x2af2d8,_0x53cc1b['step3Params']);this[_0x50a8ec(0x15f)](_0x19781b);const _0x50e5e7=this[_0x50a8ec(0x131)](_0x19781b);if(this[_0x50a8ec(0x18f)](_0x50e5e7)){if(_0x4fd496){console[_0x50a8ec(0x191)](_0x50a8ec(0x175),_0x4fd496);const _0x37c843=await this['mfaManager'][_0x50a8ec(0x149)](_0x4fd496);console['log']('🚀\x20-\x20getLoginTicket\x20-\x20收到验证码\x20mfaCode:',_0x37c843),_0x19781b=await this[_0x50a8ec(0x182)](_0x19781b,_0x53cc1b[_0x50a8ec(0x170)],_0x37c843);}else throw new Error(_0x50a8ec(0x183));}const _0x1d7777=this[_0x50a8ec(0x11e)](_0x19781b);if(!_0x1d7777)throw new Error(_0x50a8ec(0x19c));return _0x1d7777;}[a2_0x491f5c(0x102)](){const _0x1c9072=a2_0x491f5c;return{'step1Params':{'clientId':_0x1c9072(0x167),'locale':'en','service':this[_0x1c9072(0x146)][_0x1c9072(0x123)]},'step2Params':{'id':_0x1c9072(0x160),'embedWidget':!![],'locale':'en','gauthHost':this['url'][_0x1c9072(0x159)]},'step3Params':{'id':_0x1c9072(0x160),'embedWidget':!![],'clientId':_0x1c9072(0x167),'locale':'en','gauthHost':this['url']['GARMIN_SSO_EMBED'],'service':this['url'][_0x1c9072(0x159)],'source':this[_0x1c9072(0x146)]['GARMIN_SSO_EMBED'],'redirectAfterAccountLoginUrl':this[_0x1c9072(0x146)][_0x1c9072(0x159)],'redirectAfterAccountCreationUrl':this['url'][_0x1c9072(0x159)]}};}async[a2_0x491f5c(0x13f)](_0x41c3c7){const _0x387736=a2_0x491f5c,_0xc422ba=this[_0x387736(0x146)][_0x387736(0x159)]+'?'+qs_1[_0x387736(0x156)][_0x387736(0x143)](_0x41c3c7);await this[_0x387736(0x113)][_0x387736(0x18c)](_0xc422ba);}async[a2_0x491f5c(0x138)](_0x3d49ca){const _0x36defc=a2_0x491f5c,_0x2f7443=this[_0x36defc(0x146)][_0x36defc(0x17b)]+'?'+qs_1[_0x36defc(0x156)]['stringify'](_0x3d49ca),_0x1c63a0=await this[_0x36defc(0x18c)](_0x2f7443),_0x1836ff=this[_0x36defc(0x157)](_0x1c63a0);if(!_0x1836ff)throw new Error(_0x36defc(0x13a));return _0x1836ff;}async[a2_0x491f5c(0x114)](_0x23fd00,_0x481357,_0x15fd37,_0x3f5b93){const _0x3d1dfb=a2_0x491f5c,_0x32bc52=this[_0x3d1dfb(0x146)][_0x3d1dfb(0x17b)]+'?'+qs_1[_0x3d1dfb(0x156)][_0x3d1dfb(0x143)](_0x3f5b93),_0x232397=new URLSearchParams();return _0x232397[_0x3d1dfb(0x172)](_0x3d1dfb(0x11b),_0x23fd00),_0x232397['append'](_0x3d1dfb(0x116),_0x481357),_0x232397['append'](_0x3d1dfb(0x124),_0x3d1dfb(0x19a)),_0x232397['append']('_csrf',_0x15fd37),this[_0x3d1dfb(0x152)](_0x32bc52,_0x232397,{'headers':{'Content-Type':_0x3d1dfb(0x1ac),'Dnt':0x1,'Origin':this[_0x3d1dfb(0x146)]['GARMIN_SSO_ORIGIN'],'Referer':this['url'][_0x3d1dfb(0x17b)],'User-Agent':USER_AGENT_CONNECTMOBILE}});}['isMFARequired'](_0x69b570){const _0x16ba41=a2_0x491f5c,_0x16bf88=_0x69b570[_0x16ba41(0x166)]();return _0x16bf88[_0x16ba41(0x1ad)](_0x16ba41(0x189))||_0x16bf88[_0x16ba41(0x1ad)](_0x16ba41(0x132))&&!_0x16bf88['includes']('sign');}[a2_0x491f5c(0x11e)](_0x2c9b56){const _0x22bf47=a2_0x491f5c,_0x256741=TICKET_RE[_0x22bf47(0x1ae)](_0x2c9b56);return _0x256741?_0x256741[0x1]:null;}async[a2_0x491f5c(0x182)](_0x1b5e93,_0x51967b,_0x53137f){const _0x393123=a2_0x491f5c;try{const _0x20b26f=this[_0x393123(0x157)](_0x1b5e93);if(!_0x20b26f)throw new Error(_0x393123(0x117));const _0x558aa2=await this[_0x393123(0x14c)](_0x20b26f,_0x53137f,_0x51967b);return this[_0x393123(0x10d)](_0x558aa2);}catch(_0x1c4f98){console['error'](_0x393123(0x13e),_0x1c4f98);throw new Error(_0x393123(0x16b)+_0x1c4f98);}}async[a2_0x491f5c(0x13c)](_0x34a52f,_0x5cfb74,_0x11cdb0){const _0x5c62db=a2_0x491f5c;if(!_0x11cdb0)throw new Error(_0x5c62db(0x14f));const _0x8d7a62=this[_0x5c62db(0x157)](_0x34a52f);if(!_0x8d7a62)throw new Error(_0x5c62db(0x171));const _0xb0c28=await _0x11cdb0();console['log']('🚀\x20-\x20handleMFA\x20-\x20mfaCode:',_0xb0c28);const _0x5bac98=await this[_0x5c62db(0x14c)](_0x8d7a62,_0xb0c28,_0x5cfb74);return this[_0x5c62db(0x10d)](_0x5bac98);}async[a2_0x491f5c(0x14c)](_0x26acad,_0x34997a,_0x55b0a6){const _0x53b814=a2_0x491f5c,_0x39602d=this['url'][_0x53b814(0xfd)],_0x177ed0=new URLSearchParams();return _0x177ed0['append'](_0x53b814(0x185),_0x34997a),_0x177ed0['append'](_0x53b814(0x124),_0x53b814(0x19a)),_0x177ed0[_0x53b814(0x172)](_0x53b814(0x1a8),_0x26acad),this['post'](_0x39602d+_0x53b814(0x10e),_0x177ed0,{'params':_0x55b0a6,'headers':{'Content-Type':_0x53b814(0x1ac),'Dnt':0x1,'Origin':this[_0x53b814(0x146)][_0x53b814(0xf6)],'Referer':_0x39602d+'/signin','User-Agent':USER_AGENT_BROWSER},'maxRedirects':0xa,'transformResponse':[function(_0x48b3dc,_0x46dd31){const _0x753305=_0x53b814;return _0x46dd31['location']&&_0x46dd31[_0x753305(0x192)][_0x753305(0x1ad)](_0x753305(0x188))&&console[_0x753305(0x191)](_0x753305(0x14a),_0x46dd31['location']),_0x48b3dc;}]});}[a2_0x491f5c(0x10d)](_0x50c91c){const _0x4fcded=a2_0x491f5c,_0x400d47=this[_0x4fcded(0x131)](_0x50c91c);return console[_0x4fcded(0x191)]('MFA验证后的页面标题:',_0x400d47),_0x50c91c;}[a2_0x491f5c(0x157)](_0x12bded){const _0x483bca=CSRF_RE['exec'](_0x12bded);return _0x483bca?_0x483bca[0x1]:null;}[a2_0x491f5c(0x131)](_0x38decd){const _0xe7b707=a2_0x491f5c,_0x34bfdc=PAGE_TITLE_RE[_0xe7b707(0x1ae)](_0x38decd);if(_0x34bfdc){const _0x417346=_0x34bfdc[0x1];console['log'](_0xe7b707(0x108),_0x417346);if(lodash_1['default'][_0xe7b707(0x1ad)](_0x417346,_0xe7b707(0x105)))throw new Error(_0xe7b707(0x141));return _0x417346;}else throw new Error(_0xe7b707(0x103));}['handleAccountLocked'](_0x1fb6c3){const _0x5cdb01=a2_0x491f5c,_0x19176e=ACCOUNT_LOCKED_RE[_0x5cdb01(0x1ae)](_0x1fb6c3);if(_0x19176e){const _0x5c6703=_0x19176e[0x1];console[_0x5cdb01(0x15b)](_0x5c6703);throw new Error(_0x5cdb01(0x17c));}}async[a2_0x491f5c(0xf7)](){const _0x3df5e6=a2_0x491f5c;try{!this[_0x3df5e6(0x112)]&&await this['fetchOauthConsumer']();if(!this['oauth2Token']||!this['oauth1Token'])throw new Error(_0x3df5e6(0x120));const _0x590a04={'oauth':this['getOauthClient'](this[_0x3df5e6(0x112)]),'token':this[_0x3df5e6(0x18e)]};await this[_0x3df5e6(0x15c)](_0x590a04),console[_0x3df5e6(0x191)]('「'+this['config'][_0x3df5e6(0x11b)]+_0x3df5e6(0x134)+this[_0x3df5e6(0x146)]['domain']+_0x3df5e6(0x12c));}catch(_0x29a380){console['error']('刷新OAuth2令牌失败:',_0x29a380);throw _0x29a380;}}async[a2_0x491f5c(0x130)](_0x5a1b27){const _0x1d1d41=a2_0x491f5c;if(!this[_0x1d1d41(0x112)])throw new Error(_0x1d1d41(0x1a5));const _0x16186e={'ticket':_0x5a1b27,'login-url':this[_0x1d1d41(0x146)][_0x1d1d41(0x159)],'accepts-mfa-tokens':!![]},_0x580dad=this[_0x1d1d41(0x146)][_0x1d1d41(0x14e)]+_0x1d1d41(0x15d)+qs_1['default'][_0x1d1d41(0x143)](_0x16186e),_0x1c7071=this['getOauthClient'](this[_0x1d1d41(0x112)]),_0x1ee3fb={'url':_0x580dad,'method':'GET'},_0x4cca29=_0x1c7071[_0x1d1d41(0x11a)](_0x1c7071['authorize'](_0x1ee3fb)),_0x37f77b=await this[_0x1d1d41(0x18c)](_0x580dad,{'headers':{..._0x4cca29,'User-Agent':USER_AGENT_CONNECTMOBILE}}),_0x357841=qs_1[_0x1d1d41(0x156)][_0x1d1d41(0x150)](_0x37f77b);return this[_0x1d1d41(0x18e)]=_0x357841,{'token':_0x357841,'oauth':_0x1c7071};}[a2_0x491f5c(0x181)](_0x3b0b68){const _0xdbed74=a2_0x491f5c;return new oauth_1_0a_1[(_0xdbed74(0x156))]({'consumer':_0x3b0b68,'signature_method':'HMAC-SHA1','hash_function'(_0x156436,_0x234d70){const _0x1f09fa=_0xdbed74;return node_crypto_1[_0x1f09fa(0x156)][_0x1f09fa(0x163)](_0x1f09fa(0x142),_0x234d70)[_0x1f09fa(0x107)](_0x156436)[_0x1f09fa(0x1a4)](_0x1f09fa(0x127));}});}async[a2_0x491f5c(0x15c)](_0x1900c0){const _0x378248=a2_0x491f5c,_0x3f60ed={'key':_0x1900c0['token'][_0x378248(0x100)],'secret':_0x1900c0[_0x378248(0x1a1)][_0x378248(0x10f)]},_0x51fc40=this[_0x378248(0x146)][_0x378248(0x14e)]+_0x378248(0xf9),_0x5c5106={'url':_0x51fc40,'method':_0x378248(0x137),'data':null},_0x3dcb7c=_0x1900c0[_0x378248(0x19f)][_0x378248(0x1af)](_0x5c5106,_0x3f60ed),_0x3ed163=_0x51fc40+'?'+qs_1['default']['stringify'](_0x3dcb7c);this[_0x378248(0x18d)]=undefined;const _0x343290=await this[_0x378248(0x152)](_0x3ed163,null,{'headers':{'User-Agent':USER_AGENT_CONNECTMOBILE,'Content-Type':_0x378248(0x1ac)}});this['oauth2Token']=this['setOauth2TokenExpiresAt'](_0x343290),this[_0x378248(0x133)]&&this['oauth1Token']&&this[_0x378248(0x18d)]&&this[_0x378248(0x133)]({'oauth1':this[_0x378248(0x18e)],'oauth2':this[_0x378248(0x18d)]});}[a2_0x491f5c(0x101)](_0x481b06){const _0x13d33a=a2_0x491f5c,_0xd3609d=luxon_1[_0x13d33a(0xfb)][_0x13d33a(0x199)](),_0xfd0e78=_0xd3609d[_0x13d33a(0x16e)]({'seconds':_0x481b06[_0x13d33a(0x1a6)]}),_0x4329a1=_0xd3609d['plus']({'seconds':_0x481b06[_0x13d33a(0x17f)]});return{..._0x481b06,'last_update_date':_0xd3609d[_0x13d33a(0x118)]()[_0x13d33a(0x1a7)](),'expires_date':_0xfd0e78[_0x13d33a(0x118)]()[_0x13d33a(0x1a7)](),'expires_at':_0xfd0e78['toSeconds'](),'refresh_token_expires_at':_0x4329a1[_0x13d33a(0x139)]()};}}exports[a2_0x491f5c(0x126)]=HttpClient;