@gooin/garmin-connect 1.8.4 → 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) 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.d.ts +1 -1
  11. package/dist/garmin/GarminConnect.js +1 -1
  12. package/dist/garmin/UrlClass.js +1 -1
  13. package/dist/garmin/common/DateUtils.js +1 -1
  14. package/dist/garmin/common/HydrationUtils.js +1 -1
  15. package/dist/garmin/common/WeightUtils.js +1 -1
  16. package/dist/garmin/modules/activity/base.d.ts +1 -1
  17. package/dist/garmin/modules/activity/base.js +1 -1
  18. package/dist/garmin/modules/activity/base.js.map +1 -1
  19. package/dist/garmin/modules/activity/cycling.js +1 -1
  20. package/dist/garmin/modules/activity/running.js +1 -1
  21. package/dist/garmin/modules/activity/training-status.js +1 -1
  22. package/dist/garmin/modules/coach/activity-summary.js +1 -1
  23. package/dist/garmin/modules/coach/activity-summary.js.map +1 -1
  24. package/dist/garmin/modules/coach/helpers.d.ts +1 -1
  25. package/dist/garmin/modules/coach/helpers.js +1 -1
  26. package/dist/garmin/modules/coach/helpers.js.map +1 -1
  27. package/dist/garmin/modules/coach/training-overview.js +1 -1
  28. package/dist/garmin/modules/coach/wellness-overview.js +1 -1
  29. package/dist/garmin/modules/coach/wellness-summary.js +1 -1
  30. package/dist/garmin/modules/coach.js +1 -1
  31. package/dist/garmin/modules/course.js +1 -1
  32. package/dist/garmin/modules/device.js +1 -1
  33. package/dist/garmin/modules/misc.js +1 -1
  34. package/dist/garmin/modules/types.js +1 -1
  35. package/dist/garmin/modules/user.js +1 -1
  36. package/dist/garmin/modules/wellness/body-battery.js +1 -1
  37. package/dist/garmin/modules/wellness/heart-rate.js +1 -1
  38. package/dist/garmin/modules/wellness/hrv.js +1 -1
  39. package/dist/garmin/modules/wellness/hydration.js +1 -1
  40. package/dist/garmin/modules/wellness/sleep.js +1 -1
  41. package/dist/garmin/modules/wellness/weight.js +1 -1
  42. package/dist/garmin/modules/workout.js +1 -1
  43. package/dist/garmin/types/activity-stats.js +1 -1
  44. package/dist/garmin/types/activity.js +1 -1
  45. package/dist/garmin/types/body-battery.js +1 -1
  46. package/dist/garmin/types/coach.d.ts +6 -0
  47. package/dist/garmin/types/coach.js +1 -1
  48. package/dist/garmin/types/course.js +1 -1
  49. package/dist/garmin/types/cycling.js +1 -1
  50. package/dist/garmin/types/device.js +1 -1
  51. package/dist/garmin/types/golf.js +1 -1
  52. package/dist/garmin/types/heartrate.js +1 -1
  53. package/dist/garmin/types/hrv.js +1 -1
  54. package/dist/garmin/types/hydration.js +1 -1
  55. package/dist/garmin/types/index.js +1 -1
  56. package/dist/garmin/types/personal-info.js +1 -1
  57. package/dist/garmin/types/race-prediction.js +1 -1
  58. package/dist/garmin/types/sleep.js +1 -1
  59. package/dist/garmin/types/training-status.js +1 -1
  60. package/dist/garmin/types/weight.js +1 -1
  61. package/dist/garmin/workouts/Running.js +1 -1
  62. package/dist/garmin/workouts/templates/RunningTemplate.js +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/utils.js +1 -1
  65. package/package.json +8 -3
@@ -1 +1 @@
1
- 'use strict';function a2_0x8e43(){const _0x20641b=['consumer_key','登录失败(账户已锁定),请打开Connect网页解锁您的账户','oauth1Token','step1Params','Request\x20Timeout','response','handleMFAWithCode','lodash','Token\x20expired!','MFAManager','use','isAxiosError','登录失败(未找到页面标题)','extractCsrfToken','GET','application/x-www-form-urlencoded','handleError','consumer_secret','true','响应跟踪\x20-\x20Location头:','handlePageTitle','exec','__importDefault','login','176523kQPVUh','performLoginStep1','1267184aqQCbs','var\x20statuss*=s*\x22([^\x22]*)\x22','status','username','No\x20OAuth2\x20token\x20available\x20(登录失败,密码错误)','url','Authorization','headers','submitMFACode','domain','🚀\x20-\x20handleMFA\x20-\x20mfaCode:','/verifyMFA/loginEnterMfaCode','oauth2Token','getOauth1Token','toSeconds','GARMIN_SSO','Login\x20failed:','isMFARequired','onTokenChange','Update\x20Phone\x20Number','./MFAManager','响应跟踪\x20-\x20最终URL:','fetchOauthConsumer','setOauth2TokenExpiresAt','luxon','each','request','append','响应跟踪\x20-\x20重定向次数:','CookieJar','oauth_token_secret','sha1','parse','/signin','/preauthorized?','validateMFAResult','tough-cookie','__esModule','expires_at','axios-cookiejar-support','OAUTH_URL','无法从MFA页面提取CSRF令牌','Bearer\x20','expires_in','HMAC-SHA1','embed','OAUTH_CONSUMER','>\x20响应跟踪\x20-\x20URL:','name=\x22_csrf\x22\x5cs+value=\x22(.+?)\x22','Token\x20refresh\x20failed:','prepareLoginParams','waitForMFACode','performLoginStep3','5374854RQQEDB','刷新OAuth2令牌失败:','GC_MODERN','defaults','file','):\x20','响应跟踪\x20-\x20检测到重定向状态码:','data','_retry','1289310FzqyUF','22cZOMot','create','access_token','1701120iOiVwM','mfaStorageDir','config','缺少刷新令牌所需的必要令牌','performLoginStep2','setupInterceptors','检测到重定向到包含logintoken的URL:','handleAccountLocked','defineProperty','登录页面标题:','update','wrapper','put','getInstance','includes','responseURL','refreshOauth2Token','exchange','toLocal','error','MFA验证失败:','_csrf','oauth','getOauthClient','com.garmin.android.apps.connectmobile','handleResponseError','sign','common','GARMIN_SSO_EMBED','interceptors','toString','timeout','」的OAuth2令牌刷新成功','authorize','setCommonHeader','🚀\x20-\x20getLoginTicket\x20-\x20等待验证码\x20sessionId:','client','mfa','Network\x20error\x20or\x20unknown\x20error\x20occurred','mfa-code','verifyMFA','SIGNIN_URL','password','base64','default','post','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','GarminConnect','location','🚀\x20-\x20getLoginTicket\x20-\x20收到验证码\x20mfaCode:','HttpClient','delete','stringify','mfaManager','GARMIN_SSO_ORIGIN','MFA验证失败:\x20','log','gauth-widget','UNAUTHORIZED','MFA验证后的页面标题:','DELETE','extractTicket','handleHttpError','logResponseTracking','get','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','\x20ms','Request\x20Timeout:\x20>\x20','code','step3Params','handleMFA','toHeader','登录失败(需要更新电话号码),请更新您的电话号码,参考:\x20https://github.com/matin/garth/issues/19','415774AnFsqB','HTTP\x20Error\x20(','6985447URokJB','https://thegarth.s3.amazonaws.com/oauth_consumer.json'];a2_0x8e43=function(){return _0x20641b;};return a2_0x8e43();}const a2_0x539e2b=a2_0x8c4b;(function(_0x15ae0e,_0x2a0313){const _0x2ebdb0=a2_0x8c4b,_0x4baae7=_0x15ae0e();while(!![]){try{const _0x49170d=parseInt(_0x2ebdb0(0x247))/0x1+-parseInt(_0x2ebdb0(0x1fb))/0x2*(-parseInt(_0x2ebdb0(0x263))/0x3)+-parseInt(_0x2ebdb0(0x265))/0x4+parseInt(_0x2ebdb0(0x1fa))/0x5+parseInt(_0x2ebdb0(0x1f1))/0x6+-parseInt(_0x2ebdb0(0x249))/0x7+-parseInt(_0x2ebdb0(0x1fe))/0x8;if(_0x49170d===_0x2a0313)break;else _0x4baae7['push'](_0x4baae7['shift']());}catch(_0x292a48){_0x4baae7['push'](_0x4baae7['shift']());}}}(a2_0x8e43,0xa84bb));var __importDefault=this&&this[a2_0x539e2b(0x261)]||function(_0x1b5365){return _0x1b5365&&_0x1b5365['__esModule']?_0x1b5365:{'default':_0x1b5365};};Object[a2_0x539e2b(0x206)](exports,a2_0x539e2b(0x1e1),{'value':!![]}),exports[a2_0x539e2b(0x230)]=void 0x0;const axios_1=__importDefault(require('axios')),lodash_1=__importDefault(require(a2_0x539e2b(0x252))),luxon_1=require(a2_0x539e2b(0x1d4)),oauth_1_0a_1=__importDefault(require('oauth-1.0a')),qs_1=__importDefault(require('qs')),MFAManager_1=require(a2_0x539e2b(0x279)),node_crypto_1=__importDefault(require('node:crypto')),tough_cookie_1=require(a2_0x539e2b(0x1e0)),axios_cookiejar_support_1=require(a2_0x539e2b(0x1e3)),CSRF_RE=new RegExp(a2_0x539e2b(0x1ec)),TICKET_RE=new RegExp('ticket=([^\x22]+)\x22'),ACCOUNT_LOCKED_RE=new RegExp(a2_0x539e2b(0x266)),PAGE_TITLE_RE=new RegExp('<title>([^<]*)</title>'),USER_AGENT_CONNECTMOBILE=a2_0x539e2b(0x216),USER_AGENT_BROWSER=a2_0x539e2b(0x23f),USER_AGENT_BROWSER_MAC=a2_0x539e2b(0x22c),OAUTH_CONSUMER_URL=a2_0x539e2b(0x24a),HTTP_STATUS={'UNAUTHORIZED':0x191};let tokenRefreshPromise=null,refreshSubscribers=[];class HttpClient{constructor(_0x1b77d1,_0x18abfb){const _0x470bb3=a2_0x539e2b;var _0x16c330,_0x2f48ab;const _0x22a760=new tough_cookie_1[(_0x470bb3(0x1d9))]();this[_0x470bb3(0x26a)]=_0x1b77d1,this['client']=(0x0,axios_cookiejar_support_1[_0x470bb3(0x209)])(axios_1[_0x470bb3(0x22a)][_0x470bb3(0x1fc)]({'timeout':(_0x16c330=_0x18abfb===null||_0x18abfb===void 0x0?void 0x0:_0x18abfb[_0x470bb3(0x21d)])!==null&&_0x16c330!==void 0x0?_0x16c330:0x1388,'timeoutErrorMessage':_0x470bb3(0x241)+((_0x2f48ab=_0x18abfb===null||_0x18abfb===void 0x0?void 0x0:_0x18abfb[_0x470bb3(0x21d)])!==null&&_0x2f48ab!==void 0x0?_0x2f48ab:0x1388)+_0x470bb3(0x240),'maxRedirects':0xa,'validateStatus':function(_0x5aa234){return _0x5aa234>=0xc8&&_0x5aa234<0x190;},'withCredentials':!![],'jar':_0x22a760})),this['config']=_0x18abfb;const _0x13a318=_0x18abfb[_0x470bb3(0x223)]||{'type':_0x470bb3(0x1f5),'dir':_0x18abfb[_0x470bb3(0x1ff)]||'/tmp'};this[_0x470bb3(0x233)]=MFAManager_1[_0x470bb3(0x254)][_0x470bb3(0x20b)](_0x13a318),this[_0x470bb3(0x203)]();}[a2_0x539e2b(0x203)](){const _0x32f3ee=a2_0x539e2b;this[_0x32f3ee(0x222)][_0x32f3ee(0x21b)]['response']['use'](_0x43f146=>{return _0x43f146;},async _0x1de86c=>{const _0x43c466=_0x32f3ee;return this[_0x43c466(0x217)](_0x1de86c);}),this[_0x32f3ee(0x222)]['interceptors'][_0x32f3ee(0x1d6)][_0x32f3ee(0x255)](async _0x7785a=>{const _0x2d769a=_0x32f3ee;return this[_0x2d769a(0x271)]&&(_0x7785a[_0x2d769a(0x26c)][_0x2d769a(0x26b)]=_0x2d769a(0x1e6)+this[_0x2d769a(0x271)][_0x2d769a(0x1fd)]),_0x7785a;});}[a2_0x539e2b(0x23d)](_0x488086){const _0x991866=a2_0x539e2b;var _0x287f50,_0x3b86a4,_0x550acf,_0x53b579;(((_0x287f50=_0x488086[_0x991866(0x200)][_0x991866(0x26a)])===null||_0x287f50===void 0x0?void 0x0:_0x287f50[_0x991866(0x20c)]('signin'))||((_0x3b86a4=_0x488086['config']['url'])===null||_0x3b86a4===void 0x0?void 0x0:_0x3b86a4[_0x991866(0x20c)](_0x991866(0x226))))&&(console[_0x991866(0x236)](_0x991866(0x1eb),_0x488086['config'][_0x991866(0x26a)]),console[_0x991866(0x236)]('响应跟踪\x20-\x20状态码:',_0x488086['status']),console[_0x991866(0x236)](_0x991866(0x27a),((_0x550acf=_0x488086[_0x991866(0x1d6)])===null||_0x550acf===void 0x0?void 0x0:_0x550acf[_0x991866(0x20d)])||_0x488086[_0x991866(0x200)]['url']),console[_0x991866(0x236)](_0x991866(0x1d8),((_0x53b579=_0x488086['request'])===null||_0x53b579===void 0x0?void 0x0:_0x53b579['redirectCount'])||0x0),_0x488086['headers'][_0x991866(0x22e)]&&console[_0x991866(0x236)](_0x991866(0x25e),_0x488086[_0x991866(0x26c)][_0x991866(0x22e)]),_0x488086[_0x991866(0x267)]>=0x12c&&_0x488086['status']<0x190&&console['log'](_0x991866(0x1f7),_0x488086[_0x991866(0x267)]));}async[a2_0x539e2b(0x217)](_0x243251){const _0x1f50bd=a2_0x539e2b;var _0x3e5f81,_0x4acf88,_0x5c5df2;if(axios_1['default']['isAxiosError'](_0x243251)&&_0x243251[_0x1f50bd(0x242)]==='ECONNABORTED')throw new Error(_0x243251['message']||_0x1f50bd(0x24f));const _0x1faded=_0x243251[_0x1f50bd(0x200)];if(((_0x3e5f81=_0x243251===null||_0x243251===void 0x0?void 0x0:_0x243251[_0x1f50bd(0x250)])===null||_0x3e5f81===void 0x0?void 0x0:_0x3e5f81['status'])===HTTP_STATUS[_0x1f50bd(0x238)]&&!(_0x1faded===null||_0x1faded===void 0x0?void 0x0:_0x1faded[_0x1f50bd(0x1f9)])){if(!this[_0x1f50bd(0x271)]){if(((_0x4acf88=_0x1faded===null||_0x1faded===void 0x0?void 0x0:_0x1faded['url'])===null||_0x4acf88===void 0x0?void 0x0:_0x4acf88[_0x1f50bd(0x20c)]('signin'))||((_0x5c5df2=_0x1faded===null||_0x1faded===void 0x0?void 0x0:_0x1faded[_0x1f50bd(0x26a)])===null||_0x5c5df2===void 0x0?void 0x0:_0x5c5df2[_0x1f50bd(0x20c)](_0x1f50bd(0x262))))throw new Error(_0x1f50bd(0x269));throw new Error('No\x20OAuth2\x20token\x20available');}_0x1faded[_0x1f50bd(0x1f9)]=!![];try{return!tokenRefreshPromise&&(tokenRefreshPromise=this[_0x1f50bd(0x20e)]()['finally'](()=>{tokenRefreshPromise=null;})),await tokenRefreshPromise,_0x1faded['headers'][_0x1f50bd(0x26b)]=_0x1f50bd(0x1e6)+this[_0x1f50bd(0x271)]['access_token'],this[_0x1f50bd(0x222)](_0x1faded);}catch(_0x1f42f9){console[_0x1f50bd(0x211)](_0x1f50bd(0x1ed),_0x1f42f9);throw _0x1f42f9;}}if(axios_1[_0x1f50bd(0x22a)][_0x1f50bd(0x256)](_0x243251)&&_0x243251['response'])this[_0x1f50bd(0x25b)](_0x243251[_0x1f50bd(0x250)]);else throw new Error(_0x1f50bd(0x224));throw _0x243251;}async[a2_0x539e2b(0x27b)](){const _0x298e50=a2_0x539e2b,_0x4da485=await axios_1[_0x298e50(0x22a)][_0x298e50(0x23e)](OAUTH_CONSUMER_URL);this[_0x298e50(0x1ea)]={'key':_0x4da485['data'][_0x298e50(0x24b)],'secret':_0x4da485['data'][_0x298e50(0x25c)]};}async['checkTokenVaild'](){const _0x3c26be=a2_0x539e2b;this[_0x3c26be(0x271)]&&(this['oauth2Token'][_0x3c26be(0x1e2)]<luxon_1['DateTime']['now']()[_0x3c26be(0x273)]()&&(console[_0x3c26be(0x211)](_0x3c26be(0x253)),await this[_0x3c26be(0x20e)]()));}async['get'](_0x356346,_0xdc4c89){const _0x51579c=a2_0x539e2b,_0x44da27=await this[_0x51579c(0x222)][_0x51579c(0x23e)](_0x356346,_0xdc4c89);return _0x44da27===null||_0x44da27===void 0x0?void 0x0:_0x44da27[_0x51579c(0x1f8)];}async[a2_0x539e2b(0x22b)](_0x1efd19,_0x10902c,_0x48b5b2){const _0x2ef48d=a2_0x539e2b,_0x1bb457=await this[_0x2ef48d(0x222)][_0x2ef48d(0x22b)](_0x1efd19,_0x10902c,_0x48b5b2);return _0x1bb457===null||_0x1bb457===void 0x0?void 0x0:_0x1bb457['data'];}async['put'](_0x23ed3f,_0x2deb72,_0x19ccfe){const _0x218000=a2_0x539e2b,_0x3eb3c7=await this[_0x218000(0x222)][_0x218000(0x20a)](_0x23ed3f,_0x2deb72,_0x19ccfe);return _0x3eb3c7===null||_0x3eb3c7===void 0x0?void 0x0:_0x3eb3c7[_0x218000(0x1f8)];}async[a2_0x539e2b(0x231)](_0x6495dc,_0x1b22f2){const _0x59727c=a2_0x539e2b,_0xdbc29b=await this[_0x59727c(0x222)][_0x59727c(0x22b)](_0x6495dc,null,{..._0x1b22f2,'headers':{..._0x1b22f2===null||_0x1b22f2===void 0x0?void 0x0:_0x1b22f2['headers'],'X-Http-Method-Override':_0x59727c(0x23a)}});return _0xdbc29b===null||_0xdbc29b===void 0x0?void 0x0:_0xdbc29b[_0x59727c(0x1f8)];}[a2_0x539e2b(0x220)](_0xee3327){const _0xde0907=a2_0x539e2b;lodash_1[_0xde0907(0x22a)][_0xde0907(0x1d5)](_0xee3327,(_0x450643,_0x2923ad)=>{const _0x493db2=_0xde0907;this[_0x493db2(0x222)][_0x493db2(0x1f4)][_0x493db2(0x26c)][_0x493db2(0x219)][_0x2923ad]=_0x450643;});}['handleError'](_0x4f59b1){const _0x4e89ac=a2_0x539e2b;this[_0x4e89ac(0x23c)](_0x4f59b1);}['handleHttpError'](_0x16f07f){const _0xe441a0=a2_0x539e2b,{status:_0x457519,statusText:_0x354bfc,data:_0x1c7ef8}=_0x16f07f,_0x3a89dc={'status':_0x457519,'statusText':_0x354bfc,'data':typeof _0x1c7ef8==='object'?JSON['stringify'](_0x1c7ef8):_0x1c7ef8};console['error']('HTTP\x20Error:',_0x3a89dc);throw new Error(_0xe441a0(0x248)+_0x457519+_0xe441a0(0x1f6)+_0x354bfc);}async[a2_0x539e2b(0x262)](_0x314923,_0x3856d4,_0x1d48d0){const _0xb82ecb=a2_0x539e2b;try{await this[_0xb82ecb(0x27b)]();const _0xf5ab39=await this['getLoginTicket'](_0x314923,_0x3856d4,_0x1d48d0),_0x35aa5e=await this[_0xb82ecb(0x272)](_0xf5ab39);return await this[_0xb82ecb(0x20f)](_0x35aa5e),this;}catch(_0x32d939){console['error'](_0xb82ecb(0x275),_0x32d939);throw _0x32d939;}}async['getLoginTicket'](_0x5ab636,_0x1db664,_0x14e921){const _0xb1f01e=a2_0x539e2b,_0x16ac40=this['prepareLoginParams']();await this['performLoginStep1'](_0x16ac40[_0xb1f01e(0x24e)]);const _0x4ce44e=await this['performLoginStep2'](_0x16ac40['step2Params']);let _0x357e4f=await this[_0xb1f01e(0x1f0)](_0x5ab636,_0x1db664,_0x4ce44e,_0x16ac40['step3Params']);this['handleAccountLocked'](_0x357e4f);const _0x466025=this[_0xb1f01e(0x25f)](_0x357e4f);if(this['isMFARequired'](_0x466025)){if(_0x14e921){console[_0xb1f01e(0x236)](_0xb1f01e(0x221),_0x14e921);const _0x554883=await this[_0xb1f01e(0x233)][_0xb1f01e(0x1ef)](_0x14e921);console[_0xb1f01e(0x236)](_0xb1f01e(0x22f),_0x554883),_0x357e4f=await this[_0xb1f01e(0x251)](_0x357e4f,_0x16ac40[_0xb1f01e(0x243)],_0x554883);}else throw new Error('需要MFA验证,但未提供验证码获取方式');}const _0x26fa63=this[_0xb1f01e(0x23b)](_0x357e4f);if(!_0x26fa63)throw new Error('登录失败(未找到票据或MFA验证失败),请检查用户名和密码');return _0x26fa63;}[a2_0x539e2b(0x1ee)](){const _0x373a8c=a2_0x539e2b;return{'step1Params':{'clientId':_0x373a8c(0x22d),'locale':'en','service':this[_0x373a8c(0x26a)][_0x373a8c(0x1f3)]},'step2Params':{'id':_0x373a8c(0x237),'embedWidget':!![],'locale':'en','gauthHost':this[_0x373a8c(0x26a)][_0x373a8c(0x21a)]},'step3Params':{'id':_0x373a8c(0x237),'embedWidget':!![],'clientId':_0x373a8c(0x22d),'locale':'en','gauthHost':this[_0x373a8c(0x26a)]['GARMIN_SSO_EMBED'],'service':this[_0x373a8c(0x26a)][_0x373a8c(0x21a)],'source':this[_0x373a8c(0x26a)]['GARMIN_SSO_EMBED'],'redirectAfterAccountLoginUrl':this[_0x373a8c(0x26a)]['GARMIN_SSO_EMBED'],'redirectAfterAccountCreationUrl':this[_0x373a8c(0x26a)]['GARMIN_SSO_EMBED']}};}async[a2_0x539e2b(0x264)](_0x400b08){const _0x1d7020=a2_0x539e2b,_0x4987ad=this['url']['GARMIN_SSO_EMBED']+'?'+qs_1['default'][_0x1d7020(0x232)](_0x400b08);await this[_0x1d7020(0x222)][_0x1d7020(0x23e)](_0x4987ad);}async[a2_0x539e2b(0x202)](_0x3394e6){const _0x24852a=a2_0x539e2b,_0x36526f=this[_0x24852a(0x26a)][_0x24852a(0x227)]+'?'+qs_1[_0x24852a(0x22a)][_0x24852a(0x232)](_0x3394e6),_0x96a0f4=await this['get'](_0x36526f),_0x3a9c27=this[_0x24852a(0x258)](_0x96a0f4);if(!_0x3a9c27)throw new Error('登录\x20-\x20未找到CSRF令牌');return _0x3a9c27;}async['performLoginStep3'](_0x448fdf,_0xca9d2f,_0xba2a06,_0x596977){const _0x2456c9=a2_0x539e2b,_0x27c44e=this[_0x2456c9(0x26a)][_0x2456c9(0x227)]+'?'+qs_1[_0x2456c9(0x22a)][_0x2456c9(0x232)](_0x596977),_0x30613=new URLSearchParams();return _0x30613[_0x2456c9(0x1d7)](_0x2456c9(0x268),_0x448fdf),_0x30613[_0x2456c9(0x1d7)](_0x2456c9(0x228),_0xca9d2f),_0x30613['append'](_0x2456c9(0x1e9),_0x2456c9(0x25d)),_0x30613['append'](_0x2456c9(0x213),_0xba2a06),this[_0x2456c9(0x22b)](_0x27c44e,_0x30613,{'headers':{'Content-Type':_0x2456c9(0x25a),'Dnt':0x1,'Origin':this[_0x2456c9(0x26a)][_0x2456c9(0x234)],'Referer':this['url']['SIGNIN_URL'],'User-Agent':USER_AGENT_CONNECTMOBILE}});}[a2_0x539e2b(0x276)](_0x4e29a9){const _0x15106a=a2_0x539e2b,_0x1a2ff4=_0x4e29a9['toLowerCase']();return _0x1a2ff4[_0x15106a(0x20c)](_0x15106a(0x223))||_0x1a2ff4['includes']('authentication')&&!_0x1a2ff4[_0x15106a(0x20c)](_0x15106a(0x218));}['extractTicket'](_0x321976){const _0x4627fb=a2_0x539e2b,_0x58b0b4=TICKET_RE[_0x4627fb(0x260)](_0x321976);return _0x58b0b4?_0x58b0b4[0x1]:null;}async[a2_0x539e2b(0x251)](_0x5b301e,_0x517d44,_0x238e3f){const _0xd01eca=a2_0x539e2b;try{const _0x4a413a=this['extractCsrfToken'](_0x5b301e);if(!_0x4a413a)throw new Error('MFA验证\x20-\x20未找到CSRF令牌');const _0x598891=await this['submitMFACode'](_0x4a413a,_0x238e3f,_0x517d44);return this[_0xd01eca(0x1df)](_0x598891);}catch(_0x21e1f8){console[_0xd01eca(0x211)](_0xd01eca(0x212),_0x21e1f8);throw new Error(_0xd01eca(0x235)+_0x21e1f8);}}async[a2_0x539e2b(0x244)](_0xc64596,_0x2e12c3,_0x45c653){const _0x8d69b6=a2_0x539e2b;if(!_0x45c653)throw new Error('登录失败(需要MFA验证),请提供MFA回调函数');const _0x37120e=this['extractCsrfToken'](_0xc64596);if(!_0x37120e)throw new Error(_0x8d69b6(0x1e5));const _0x536d82=await _0x45c653();console['log'](_0x8d69b6(0x26f),_0x536d82);const _0x134932=await this[_0x8d69b6(0x26d)](_0x37120e,_0x536d82,_0x2e12c3);return this[_0x8d69b6(0x1df)](_0x134932);}async[a2_0x539e2b(0x26d)](_0x1831de,_0x45a0a4,_0x268588){const _0x43a4d4=a2_0x539e2b,_0x2b8a7d=this[_0x43a4d4(0x26a)][_0x43a4d4(0x274)],_0x1c0440=new URLSearchParams();return _0x1c0440['append'](_0x43a4d4(0x225),_0x45a0a4),_0x1c0440[_0x43a4d4(0x1d7)](_0x43a4d4(0x1e9),_0x43a4d4(0x25d)),_0x1c0440[_0x43a4d4(0x1d7)](_0x43a4d4(0x213),_0x1831de),this['post'](_0x2b8a7d+_0x43a4d4(0x270),_0x1c0440,{'params':_0x268588,'headers':{'Content-Type':_0x43a4d4(0x25a),'Dnt':0x1,'Origin':this['url'][_0x43a4d4(0x234)],'Referer':_0x2b8a7d+_0x43a4d4(0x1dd),'User-Agent':USER_AGENT_BROWSER},'maxRedirects':0xa,'transformResponse':[function(_0xd7dab3,_0x33e46f){const _0x18686f=_0x43a4d4;return _0x33e46f[_0x18686f(0x22e)]&&_0x33e46f['location']['includes']('logintoken')&&console[_0x18686f(0x236)](_0x18686f(0x204),_0x33e46f[_0x18686f(0x22e)]),_0xd7dab3;}]});}[a2_0x539e2b(0x1df)](_0x364bb4){const _0x35c118=a2_0x539e2b,_0x19321a=this[_0x35c118(0x25f)](_0x364bb4);return console['log'](_0x35c118(0x239),_0x19321a),_0x364bb4;}[a2_0x539e2b(0x258)](_0x542785){const _0xe07e6c=a2_0x539e2b,_0xe26bbf=CSRF_RE[_0xe07e6c(0x260)](_0x542785);return _0xe26bbf?_0xe26bbf[0x1]:null;}[a2_0x539e2b(0x25f)](_0x5d0b7b){const _0x28995c=a2_0x539e2b,_0x32fc1b=PAGE_TITLE_RE['exec'](_0x5d0b7b);if(_0x32fc1b){const _0x2a152b=_0x32fc1b[0x1];console[_0x28995c(0x236)](_0x28995c(0x207),_0x2a152b);if(lodash_1[_0x28995c(0x22a)][_0x28995c(0x20c)](_0x2a152b,_0x28995c(0x278)))throw new Error(_0x28995c(0x246));return _0x2a152b;}else throw new Error(_0x28995c(0x257));}[a2_0x539e2b(0x205)](_0x3cc0a2){const _0x4f807a=a2_0x539e2b,_0x40a066=ACCOUNT_LOCKED_RE[_0x4f807a(0x260)](_0x3cc0a2);if(_0x40a066){const _0x32c66d=_0x40a066[0x1];console[_0x4f807a(0x211)](_0x32c66d);throw new Error(_0x4f807a(0x24c));}}async[a2_0x539e2b(0x20e)](){const _0x271ef4=a2_0x539e2b;try{!this[_0x271ef4(0x1ea)]&&await this[_0x271ef4(0x27b)]();if(!this[_0x271ef4(0x271)]||!this[_0x271ef4(0x24d)])throw new Error(_0x271ef4(0x201));const _0x45db5b={'oauth':this[_0x271ef4(0x215)](this[_0x271ef4(0x1ea)]),'token':this[_0x271ef4(0x24d)]};await this[_0x271ef4(0x20f)](_0x45db5b),console[_0x271ef4(0x236)]('「'+this['config'][_0x271ef4(0x268)]+'」在「'+this[_0x271ef4(0x26a)][_0x271ef4(0x26e)]+_0x271ef4(0x21e));}catch(_0x293873){console[_0x271ef4(0x211)](_0x271ef4(0x1f2),_0x293873);throw _0x293873;}}async[a2_0x539e2b(0x272)](_0x2ae045){const _0x4aae69=a2_0x539e2b;if(!this['OAUTH_CONSUMER'])throw new Error('未找到OAuth消费者信息');const _0xcb8fb2={'ticket':_0x2ae045,'login-url':this[_0x4aae69(0x26a)][_0x4aae69(0x21a)],'accepts-mfa-tokens':!![]},_0x1ca938=this[_0x4aae69(0x26a)][_0x4aae69(0x1e4)]+_0x4aae69(0x1de)+qs_1[_0x4aae69(0x22a)][_0x4aae69(0x232)](_0xcb8fb2),_0x365825=this[_0x4aae69(0x215)](this[_0x4aae69(0x1ea)]),_0x5045c1={'url':_0x1ca938,'method':_0x4aae69(0x259)},_0x3d4dbb=_0x365825[_0x4aae69(0x245)](_0x365825[_0x4aae69(0x21f)](_0x5045c1)),_0x7a6be4=await this[_0x4aae69(0x23e)](_0x1ca938,{'headers':{..._0x3d4dbb,'User-Agent':USER_AGENT_CONNECTMOBILE}}),_0x4c3a36=qs_1[_0x4aae69(0x22a)][_0x4aae69(0x1dc)](_0x7a6be4);return this[_0x4aae69(0x24d)]=_0x4c3a36,{'token':_0x4c3a36,'oauth':_0x365825};}['getOauthClient'](_0x10aee2){const _0x29bc61=a2_0x539e2b;return new oauth_1_0a_1[(_0x29bc61(0x22a))]({'consumer':_0x10aee2,'signature_method':_0x29bc61(0x1e8),'hash_function'(_0x45050c,_0x3950c9){const _0x4ea462=_0x29bc61;return node_crypto_1[_0x4ea462(0x22a)]['createHmac'](_0x4ea462(0x1db),_0x3950c9)[_0x4ea462(0x208)](_0x45050c)['digest'](_0x4ea462(0x229));}});}async['exchange'](_0x5c7687){const _0x3e327f=a2_0x539e2b,_0x5ad49a={'key':_0x5c7687['token']['oauth_token'],'secret':_0x5c7687['token'][_0x3e327f(0x1da)]},_0x78aa2e=this[_0x3e327f(0x26a)][_0x3e327f(0x1e4)]+'/exchange/user/2.0',_0x5c80cf={'url':_0x78aa2e,'method':'POST','data':null},_0x3530d8=_0x5c7687[_0x3e327f(0x214)][_0x3e327f(0x21f)](_0x5c80cf,_0x5ad49a),_0x52a2eb=_0x78aa2e+'?'+qs_1['default'][_0x3e327f(0x232)](_0x3530d8);this[_0x3e327f(0x271)]=undefined;const _0xcc2591=await this[_0x3e327f(0x22b)](_0x52a2eb,null,{'headers':{'User-Agent':USER_AGENT_CONNECTMOBILE,'Content-Type':'application/x-www-form-urlencoded'}});this[_0x3e327f(0x271)]=this[_0x3e327f(0x1d3)](_0xcc2591),this[_0x3e327f(0x277)]&&this[_0x3e327f(0x24d)]&&this[_0x3e327f(0x271)]&&this[_0x3e327f(0x277)]({'oauth1':this[_0x3e327f(0x24d)],'oauth2':this[_0x3e327f(0x271)]});}[a2_0x539e2b(0x1d3)](_0x2e0f99){const _0x575cb3=a2_0x539e2b,_0x4fc89b=luxon_1['DateTime']['now'](),_0x593216=_0x4fc89b['plus']({'seconds':_0x2e0f99[_0x575cb3(0x1e7)]}),_0x45850b=_0x4fc89b['plus']({'seconds':_0x2e0f99['refresh_token_expires_in']});return{..._0x2e0f99,'last_update_date':_0x4fc89b[_0x575cb3(0x210)]()[_0x575cb3(0x21c)](),'expires_date':_0x593216[_0x575cb3(0x210)]()[_0x575cb3(0x21c)](),'expires_at':_0x593216[_0x575cb3(0x273)](),'refresh_token_expires_at':_0x45850b[_0x575cb3(0x273)]()};}}function a2_0x8c4b(_0x495512,_0x4c0ad2){_0x495512=_0x495512-0x1d3;const _0x8e4312=a2_0x8e43();let _0x8c4b55=_0x8e4312[_0x495512];return _0x8c4b55;}exports[a2_0x539e2b(0x230)]=HttpClient;
1
+ 'use strict';const a2_0x21807e=a2_0xc98e;(function(_0x3ab901,_0x4bfea6){const _0x36eb7f=a2_0xc98e,_0x3b68bd=_0x3ab901();while(!![]){try{const _0x1888ff=parseInt(_0x36eb7f(0xb6))/0x1+-parseInt(_0x36eb7f(0x70))/0x2*(-parseInt(_0x36eb7f(0xc0))/0x3)+-parseInt(_0x36eb7f(0x115))/0x4*(-parseInt(_0x36eb7f(0xcb))/0x5)+parseInt(_0x36eb7f(0xea))/0x6+-parseInt(_0x36eb7f(0xc1))/0x7*(parseInt(_0x36eb7f(0xa0))/0x8)+parseInt(_0x36eb7f(0x89))/0x9*(-parseInt(_0x36eb7f(0x77))/0xa)+parseInt(_0x36eb7f(0xff))/0xb*(-parseInt(_0x36eb7f(0xe9))/0xc);if(_0x1888ff===_0x4bfea6)break;else _0x3b68bd['push'](_0x3b68bd['shift']());}catch(_0x496959){_0x3b68bd['push'](_0x3b68bd['shift']());}}}(a2_0x5a39,0xea072));function a2_0xc98e(_0x29d107,_0x90a0cc){_0x29d107=_0x29d107-0x6e;const _0x5a3966=a2_0x5a39();let _0xc98e76=_0x5a3966[_0x29d107];return _0xc98e76;}var __importDefault=this&&this[a2_0x21807e(0x7d)]||function(_0x137c6c){const _0x397c5a=a2_0x21807e;return _0x137c6c&&_0x137c6c[_0x397c5a(0xa8)]?_0x137c6c:{'default':_0x137c6c};};Object[a2_0x21807e(0xb2)](exports,'__esModule',{'value':!![]}),exports[a2_0x21807e(0xf9)]=void 0x0;function a2_0x5a39(){const _0x36983b=['DELETE','url','status','响应跟踪\x20-\x20重定向次数:','handleResponseError','append','responseURL','isAxiosError','axios-cookiejar-support','request','<title>([^<]*)</title>','mfa-code','logintoken','tough-cookie','No\x20OAuth2\x20token\x20available\x20(登录失败,密码错误)','oauth-1.0a','interceptors','348DiWDHE','5850186joOsQt','」在「','digest','domain','verifyMFA','未找到OAuth消费者信息','access_token','setOauth2TokenExpiresAt','fetchOauthConsumer','HTTP\x20Error\x20(','/tmp','./MFAManager','performLoginStep2','common','expires_in','HttpClient','MFA验证\x20-\x20未找到CSRF令牌','OAUTH_CONSUMER','signin','extractTicket','handleMFA','901153YOGmcL','update','performLoginStep1','toSeconds','base64','No\x20OAuth2\x20token\x20available','node:crypto','use','登录页面标题:','登录失败(需要更新电话号码),请更新您的电话号码,参考:\x20https://github.com/matin/garth/issues/19','checkTokenVaild','includes','MFA验证失败:\x20','DateTime','):\x20','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','响应跟踪\x20-\x20状态码:','refreshOauth2Token','getInstance','无法从MFA页面提取CSRF令牌','file','/exchange/user/2.0','7296156NTbjaN','config','handleAccountLocked','检测到重定向到包含logintoken的URL:','stringify','com.garmin.android.apps.connectmobile','Update\x20Phone\x20Number','oauth_token','authentication','var\x20statuss*=s*\x22([^\x22]*)\x22','username','toString','client','oauth1Token','performLoginStep3','/verifyMFA/loginEnterMfaCode','sha1','GarminConnect','41718VPTwDk','delete','true','get','toLocal','handleError','submitMFACode','24770msbDSO','token','_retry','now','setupInterceptors','parse','__importDefault','」的OAuth2令牌刷新成功','onTokenChange','mfa','extractCsrfToken','lodash','default','expires_at','\x20ms','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','put','exchange','45ESCFgg','response','缺少刷新令牌所需的必要令牌','Login\x20failed:','toHeader','HTTP\x20Error:','oauth2Token','waitForMFACode','登录失败(账户已锁定),请打开Connect网页解锁您的账户','Request\x20Timeout','application/x-www-form-urlencoded','handleHttpError','axios','gauth-widget','location','🚀\x20-\x20handleMFA\x20-\x20mfaCode:','exec','GARMIN_SSO_EMBED','headers','CookieJar','logResponseTracking','Authorization','log','16HZLKlx','step1Params','oauth_token_secret','authorize','MFA验证后的页面标题:','setCommonHeader','message','each','__esModule','Request\x20Timeout:\x20>\x20','toLowerCase','validateMFAResult','step3Params','响应跟踪\x20-\x20Location头:','/preauthorized?','OAUTH_URL','MFA验证失败:','响应跟踪\x20-\x20检测到重定向状态码:','defineProperty','post','🚀\x20-\x20getLoginTicket\x20-\x20收到验证码\x20mfaCode:','getOauthClient','806041unhboP','oauth','password','timeout','consumer_key','handlePageTitle','luxon','POST','mfaManager','🚀\x20-\x20getLoginTicket\x20-\x20等待验证码\x20sessionId:','165OZNWdy','4919691wbDAAR','data','_csrf','getLoginTicket','HMAC-SHA1','createHmac','ECONNABORTED','prepareLoginParams','登录失败(需要MFA验证),请提供MFA回调函数','Token\x20expired!','5koDYUA','GARMIN_SSO_ORIGIN','plus','code','error','GARMIN_SSO','isMFARequired','GET','embed','SIGNIN_URL','handleMFAWithCode','https://thegarth.s3.amazonaws.com/oauth_consumer.json','object'];a2_0x5a39=function(){return _0x36983b;};return a2_0x5a39();}const axios_1=__importDefault(require(a2_0x21807e(0x95))),lodash_1=__importDefault(require(a2_0x21807e(0x82))),luxon_1=require(a2_0x21807e(0xbc)),oauth_1_0a_1=__importDefault(require(a2_0x21807e(0xe7))),qs_1=__importDefault(require('qs')),MFAManager_1=require(a2_0x21807e(0xf5)),node_crypto_1=__importDefault(require(a2_0x21807e(0x105))),tough_cookie_1=require(a2_0x21807e(0xe5)),axios_cookiejar_support_1=require(a2_0x21807e(0xe0)),CSRF_RE=new RegExp('name=\x22_csrf\x22\x5cs+value=\x22(.+?)\x22'),TICKET_RE=new RegExp('ticket=([^\x22]+)\x22'),ACCOUNT_LOCKED_RE=new RegExp(a2_0x21807e(0x11e)),PAGE_TITLE_RE=new RegExp(a2_0x21807e(0xe2)),USER_AGENT_CONNECTMOBILE=a2_0x21807e(0x11a),USER_AGENT_BROWSER=a2_0x21807e(0x10e),USER_AGENT_BROWSER_MAC=a2_0x21807e(0x86),OAUTH_CONSUMER_URL=a2_0x21807e(0xd6),HTTP_STATUS={'UNAUTHORIZED':0x191};let tokenRefreshPromise=null,refreshSubscribers=[];class HttpClient{constructor(_0x32162f,_0x118d83){const _0x3be3e3=a2_0x21807e;var _0x1cd566,_0x177a00;const _0x315a11=new tough_cookie_1[(_0x3be3e3(0x9c))]();this[_0x3be3e3(0xd9)]=_0x32162f,this[_0x3be3e3(0x121)]=(0x0,axios_cookiejar_support_1['wrapper'])(axios_1[_0x3be3e3(0x83)]['create']({'timeout':(_0x1cd566=_0x118d83===null||_0x118d83===void 0x0?void 0x0:_0x118d83['timeout'])!==null&&_0x1cd566!==void 0x0?_0x1cd566:0x1388,'timeoutErrorMessage':_0x3be3e3(0xa9)+((_0x177a00=_0x118d83===null||_0x118d83===void 0x0?void 0x0:_0x118d83[_0x3be3e3(0xb9)])!==null&&_0x177a00!==void 0x0?_0x177a00:0x1388)+_0x3be3e3(0x85),'maxRedirects':0xa,'validateStatus':function(_0x247108){return _0x247108>=0xc8&&_0x247108<0x190;},'withCredentials':!![],'jar':_0x315a11})),this[_0x3be3e3(0x116)]=_0x118d83;const _0x159344=_0x118d83[_0x3be3e3(0x80)]||{'type':_0x3be3e3(0x113),'dir':_0x118d83['mfaStorageDir']||_0x3be3e3(0xf4)};this[_0x3be3e3(0xbe)]=MFAManager_1['MFAManager'][_0x3be3e3(0x111)](_0x159344),this[_0x3be3e3(0x7b)]();}[a2_0x21807e(0x7b)](){const _0x6fa81d=a2_0x21807e;this[_0x6fa81d(0x121)][_0x6fa81d(0xe8)][_0x6fa81d(0x8a)][_0x6fa81d(0x106)](_0x21a39a=>{return _0x21a39a;},async _0x4251a7=>{const _0x37a1ec=_0x6fa81d;return this[_0x37a1ec(0xdc)](_0x4251a7);}),this['client']['interceptors'][_0x6fa81d(0xe1)][_0x6fa81d(0x106)](async _0x195e42=>{const _0x535b20=_0x6fa81d;return this['oauth2Token']&&(_0x195e42[_0x535b20(0x9b)][_0x535b20(0x9e)]='Bearer\x20'+this[_0x535b20(0x8f)]['access_token']),_0x195e42;});}[a2_0x21807e(0x9d)](_0x80848d){const _0x242efb=a2_0x21807e;var _0x469c51,_0x141fb4,_0x228fc5,_0x5ba0fd;(((_0x469c51=_0x80848d[_0x242efb(0x116)][_0x242efb(0xd9)])===null||_0x469c51===void 0x0?void 0x0:_0x469c51[_0x242efb(0x10a)]('signin'))||((_0x141fb4=_0x80848d[_0x242efb(0x116)][_0x242efb(0xd9)])===null||_0x141fb4===void 0x0?void 0x0:_0x141fb4[_0x242efb(0x10a)](_0x242efb(0xee))))&&(console['log']('>\x20响应跟踪\x20-\x20URL:',_0x80848d[_0x242efb(0x116)][_0x242efb(0xd9)]),console[_0x242efb(0x9f)](_0x242efb(0x10f),_0x80848d[_0x242efb(0xda)]),console[_0x242efb(0x9f)]('响应跟踪\x20-\x20最终URL:',((_0x228fc5=_0x80848d[_0x242efb(0xe1)])===null||_0x228fc5===void 0x0?void 0x0:_0x228fc5[_0x242efb(0xde)])||_0x80848d[_0x242efb(0x116)][_0x242efb(0xd9)]),console[_0x242efb(0x9f)](_0x242efb(0xdb),((_0x5ba0fd=_0x80848d[_0x242efb(0xe1)])===null||_0x5ba0fd===void 0x0?void 0x0:_0x5ba0fd['redirectCount'])||0x0),_0x80848d[_0x242efb(0x9b)][_0x242efb(0x97)]&&console[_0x242efb(0x9f)](_0x242efb(0xad),_0x80848d[_0x242efb(0x9b)]['location']),_0x80848d[_0x242efb(0xda)]>=0x12c&&_0x80848d[_0x242efb(0xda)]<0x190&&console[_0x242efb(0x9f)](_0x242efb(0xb1),_0x80848d[_0x242efb(0xda)]));}async[a2_0x21807e(0xdc)](_0x543964){const _0x283b58=a2_0x21807e;var _0x3d46cc,_0x1b933d,_0x478868;if(axios_1[_0x283b58(0x83)][_0x283b58(0xdf)](_0x543964)&&_0x543964[_0x283b58(0xce)]===_0x283b58(0xc7))throw new Error(_0x543964[_0x283b58(0xa6)]||_0x283b58(0x92));const _0x2f3e84=_0x543964[_0x283b58(0x116)];if(((_0x3d46cc=_0x543964===null||_0x543964===void 0x0?void 0x0:_0x543964['response'])===null||_0x3d46cc===void 0x0?void 0x0:_0x3d46cc[_0x283b58(0xda)])===HTTP_STATUS['UNAUTHORIZED']&&!(_0x2f3e84===null||_0x2f3e84===void 0x0?void 0x0:_0x2f3e84[_0x283b58(0x79)])){if(!this[_0x283b58(0x8f)]){if(((_0x1b933d=_0x2f3e84===null||_0x2f3e84===void 0x0?void 0x0:_0x2f3e84[_0x283b58(0xd9)])===null||_0x1b933d===void 0x0?void 0x0:_0x1b933d[_0x283b58(0x10a)](_0x283b58(0xfc)))||((_0x478868=_0x2f3e84===null||_0x2f3e84===void 0x0?void 0x0:_0x2f3e84['url'])===null||_0x478868===void 0x0?void 0x0:_0x478868[_0x283b58(0x10a)]('login')))throw new Error(_0x283b58(0xe6));throw new Error(_0x283b58(0x104));}_0x2f3e84[_0x283b58(0x79)]=!![];try{return!tokenRefreshPromise&&(tokenRefreshPromise=this[_0x283b58(0x110)]()['finally'](()=>{tokenRefreshPromise=null;})),await tokenRefreshPromise,_0x2f3e84[_0x283b58(0x9b)][_0x283b58(0x9e)]='Bearer\x20'+this[_0x283b58(0x8f)][_0x283b58(0xf0)],this[_0x283b58(0x121)](_0x2f3e84);}catch(_0x29b6ea){console['error']('Token\x20refresh\x20failed:',_0x29b6ea);throw _0x29b6ea;}}if(axios_1['default'][_0x283b58(0xdf)](_0x543964)&&_0x543964[_0x283b58(0x8a)])this[_0x283b58(0x75)](_0x543964[_0x283b58(0x8a)]);else throw new Error('Network\x20error\x20or\x20unknown\x20error\x20occurred');throw _0x543964;}async[a2_0x21807e(0xf2)](){const _0x1ca399=a2_0x21807e,_0x15f9c8=await axios_1['default']['get'](OAUTH_CONSUMER_URL);this[_0x1ca399(0xfb)]={'key':_0x15f9c8[_0x1ca399(0xc2)][_0x1ca399(0xba)],'secret':_0x15f9c8[_0x1ca399(0xc2)]['consumer_secret']};}async[a2_0x21807e(0x109)](){const _0x22aa41=a2_0x21807e;this[_0x22aa41(0x8f)]&&(this[_0x22aa41(0x8f)][_0x22aa41(0x84)]<luxon_1[_0x22aa41(0x10c)]['now']()[_0x22aa41(0x102)]()&&(console[_0x22aa41(0xcf)](_0x22aa41(0xca)),await this[_0x22aa41(0x110)]()));}async[a2_0x21807e(0x73)](_0x82e99e,_0x35d8ec){const _0x549455=a2_0x21807e,_0x4c618b=await this[_0x549455(0x121)]['get'](_0x82e99e,_0x35d8ec);return _0x4c618b===null||_0x4c618b===void 0x0?void 0x0:_0x4c618b[_0x549455(0xc2)];}async[a2_0x21807e(0xb3)](_0x4de844,_0x3ec3d9,_0xe911b3){const _0x379fc0=a2_0x21807e,_0x5abcc2=await this[_0x379fc0(0x121)][_0x379fc0(0xb3)](_0x4de844,_0x3ec3d9,_0xe911b3);return _0x5abcc2===null||_0x5abcc2===void 0x0?void 0x0:_0x5abcc2[_0x379fc0(0xc2)];}async[a2_0x21807e(0x87)](_0x18b6ef,_0xb61f26,_0x2d25d3){const _0x5af175=a2_0x21807e,_0x2aa90b=await this[_0x5af175(0x121)][_0x5af175(0x87)](_0x18b6ef,_0xb61f26,_0x2d25d3);return _0x2aa90b===null||_0x2aa90b===void 0x0?void 0x0:_0x2aa90b[_0x5af175(0xc2)];}async[a2_0x21807e(0x71)](_0x3d9ec1,_0x31ef61){const _0x212286=a2_0x21807e,_0x443e25=await this[_0x212286(0x121)]['post'](_0x3d9ec1,null,{..._0x31ef61,'headers':{..._0x31ef61===null||_0x31ef61===void 0x0?void 0x0:_0x31ef61[_0x212286(0x9b)],'X-Http-Method-Override':_0x212286(0xd8)}});return _0x443e25===null||_0x443e25===void 0x0?void 0x0:_0x443e25[_0x212286(0xc2)];}[a2_0x21807e(0xa5)](_0x4f1b8f){const _0x302d92=a2_0x21807e;lodash_1[_0x302d92(0x83)][_0x302d92(0xa7)](_0x4f1b8f,(_0x4edd56,_0x3ebf08)=>{const _0x3021f6=_0x302d92;this['client']['defaults'][_0x3021f6(0x9b)][_0x3021f6(0xf7)][_0x3ebf08]=_0x4edd56;});}[a2_0x21807e(0x75)](_0xfcf553){const _0x3f8c99=a2_0x21807e;this[_0x3f8c99(0x94)](_0xfcf553);}[a2_0x21807e(0x94)](_0x53357e){const _0x4a2fbb=a2_0x21807e,{status:_0x28c58b,statusText:_0x599fc8,data:_0x475bab}=_0x53357e,_0x3bff89={'status':_0x28c58b,'statusText':_0x599fc8,'data':typeof _0x475bab===_0x4a2fbb(0xd7)?JSON['stringify'](_0x475bab):_0x475bab};console[_0x4a2fbb(0xcf)](_0x4a2fbb(0x8e),_0x3bff89);throw new Error(_0x4a2fbb(0xf3)+_0x28c58b+_0x4a2fbb(0x10d)+_0x599fc8);}async['login'](_0x580019,_0x5ab083,_0xe52e05){const _0x1d74f4=a2_0x21807e;try{await this['fetchOauthConsumer']();const _0x371a8e=await this[_0x1d74f4(0xc4)](_0x580019,_0x5ab083,_0xe52e05),_0x412809=await this['getOauth1Token'](_0x371a8e);return await this[_0x1d74f4(0x88)](_0x412809),this;}catch(_0x4786a5){console['error'](_0x1d74f4(0x8c),_0x4786a5);throw _0x4786a5;}}async['getLoginTicket'](_0x77b3cd,_0x1ffe29,_0x2f0708){const _0x4e7d69=a2_0x21807e,_0x3ef9b4=this['prepareLoginParams']();await this['performLoginStep1'](_0x3ef9b4[_0x4e7d69(0xa1)]);const _0x135a86=await this[_0x4e7d69(0xf6)](_0x3ef9b4['step2Params']);let _0x46e4f4=await this['performLoginStep3'](_0x77b3cd,_0x1ffe29,_0x135a86,_0x3ef9b4[_0x4e7d69(0xac)]);this[_0x4e7d69(0x117)](_0x46e4f4);const _0x2ba3f5=this[_0x4e7d69(0xbb)](_0x46e4f4);if(this[_0x4e7d69(0xd1)](_0x2ba3f5)){if(_0x2f0708){console[_0x4e7d69(0x9f)](_0x4e7d69(0xbf),_0x2f0708);const _0x4181e6=await this['mfaManager'][_0x4e7d69(0x90)](_0x2f0708);console['log'](_0x4e7d69(0xb4),_0x4181e6),_0x46e4f4=await this[_0x4e7d69(0xd5)](_0x46e4f4,_0x3ef9b4[_0x4e7d69(0xac)],_0x4181e6);}else throw new Error('需要MFA验证,但未提供验证码获取方式');}const _0xc628d1=this['extractTicket'](_0x46e4f4);if(!_0xc628d1)throw new Error('登录失败(未找到票据或MFA验证失败),请检查用户名和密码');return _0xc628d1;}[a2_0x21807e(0xc8)](){const _0x220a85=a2_0x21807e;return{'step1Params':{'clientId':_0x220a85(0x6f),'locale':'en','service':this[_0x220a85(0xd9)]['GC_MODERN']},'step2Params':{'id':_0x220a85(0x96),'embedWidget':!![],'locale':'en','gauthHost':this[_0x220a85(0xd9)][_0x220a85(0x9a)]},'step3Params':{'id':'gauth-widget','embedWidget':!![],'clientId':'GarminConnect','locale':'en','gauthHost':this[_0x220a85(0xd9)][_0x220a85(0x9a)],'service':this['url'][_0x220a85(0x9a)],'source':this[_0x220a85(0xd9)]['GARMIN_SSO_EMBED'],'redirectAfterAccountLoginUrl':this[_0x220a85(0xd9)][_0x220a85(0x9a)],'redirectAfterAccountCreationUrl':this[_0x220a85(0xd9)][_0x220a85(0x9a)]}};}async[a2_0x21807e(0x101)](_0x1f54ef){const _0x1b1e73=a2_0x21807e,_0xca9085=this[_0x1b1e73(0xd9)][_0x1b1e73(0x9a)]+'?'+qs_1[_0x1b1e73(0x83)]['stringify'](_0x1f54ef);await this[_0x1b1e73(0x121)][_0x1b1e73(0x73)](_0xca9085);}async[a2_0x21807e(0xf6)](_0x32cafd){const _0x46013a=a2_0x21807e,_0x41f9fb=this[_0x46013a(0xd9)][_0x46013a(0xd4)]+'?'+qs_1[_0x46013a(0x83)][_0x46013a(0x119)](_0x32cafd),_0x5a7282=await this['get'](_0x41f9fb),_0x133fa9=this[_0x46013a(0x81)](_0x5a7282);if(!_0x133fa9)throw new Error('登录\x20-\x20未找到CSRF令牌');return _0x133fa9;}async[a2_0x21807e(0x123)](_0x363fc3,_0x321fcf,_0x41e9e4,_0x7efb4a){const _0xaa79de=a2_0x21807e,_0x4db5ff=this[_0xaa79de(0xd9)]['SIGNIN_URL']+'?'+qs_1[_0xaa79de(0x83)][_0xaa79de(0x119)](_0x7efb4a),_0x124c75=new URLSearchParams();return _0x124c75[_0xaa79de(0xdd)](_0xaa79de(0x11f),_0x363fc3),_0x124c75[_0xaa79de(0xdd)](_0xaa79de(0xb8),_0x321fcf),_0x124c75['append']('embed','true'),_0x124c75['append'](_0xaa79de(0xc3),_0x41e9e4),this[_0xaa79de(0xb3)](_0x4db5ff,_0x124c75,{'headers':{'Content-Type':_0xaa79de(0x93),'Dnt':0x1,'Origin':this[_0xaa79de(0xd9)][_0xaa79de(0xcc)],'Referer':this[_0xaa79de(0xd9)]['SIGNIN_URL'],'User-Agent':USER_AGENT_CONNECTMOBILE}});}[a2_0x21807e(0xd1)](_0x4b212a){const _0x1060a2=a2_0x21807e,_0x5dc882=_0x4b212a[_0x1060a2(0xaa)]();return _0x5dc882['includes'](_0x1060a2(0x80))||_0x5dc882['includes'](_0x1060a2(0x11d))&&!_0x5dc882[_0x1060a2(0x10a)]('sign');}[a2_0x21807e(0xfd)](_0x23dcf5){const _0x5c8b00=a2_0x21807e,_0xb2632b=TICKET_RE[_0x5c8b00(0x99)](_0x23dcf5);return _0xb2632b?_0xb2632b[0x1]:null;}async[a2_0x21807e(0xd5)](_0x3fb456,_0x59d403,_0x389270){const _0x680a5e=a2_0x21807e;try{const _0x126cfe=this[_0x680a5e(0x81)](_0x3fb456);if(!_0x126cfe)throw new Error(_0x680a5e(0xfa));const _0xb41db7=await this[_0x680a5e(0x76)](_0x126cfe,_0x389270,_0x59d403);return this['validateMFAResult'](_0xb41db7);}catch(_0x424b40){console[_0x680a5e(0xcf)](_0x680a5e(0xb0),_0x424b40);throw new Error(_0x680a5e(0x10b)+_0x424b40);}}async[a2_0x21807e(0xfe)](_0x5c4d33,_0x3bc0db,_0x40d5ed){const _0x436e37=a2_0x21807e;if(!_0x40d5ed)throw new Error(_0x436e37(0xc9));const _0x126835=this[_0x436e37(0x81)](_0x5c4d33);if(!_0x126835)throw new Error(_0x436e37(0x112));const _0x2d22f2=await _0x40d5ed();console[_0x436e37(0x9f)](_0x436e37(0x98),_0x2d22f2);const _0xca5e13=await this[_0x436e37(0x76)](_0x126835,_0x2d22f2,_0x3bc0db);return this['validateMFAResult'](_0xca5e13);}async[a2_0x21807e(0x76)](_0x3f562d,_0x4e802f,_0x330d24){const _0x1bd895=a2_0x21807e,_0x2c151c=this[_0x1bd895(0xd9)][_0x1bd895(0xd0)],_0x5aa43e=new URLSearchParams();return _0x5aa43e['append'](_0x1bd895(0xe3),_0x4e802f),_0x5aa43e['append'](_0x1bd895(0xd3),_0x1bd895(0x72)),_0x5aa43e[_0x1bd895(0xdd)](_0x1bd895(0xc3),_0x3f562d),this[_0x1bd895(0xb3)](_0x2c151c+_0x1bd895(0x124),_0x5aa43e,{'params':_0x330d24,'headers':{'Content-Type':_0x1bd895(0x93),'Dnt':0x1,'Origin':this[_0x1bd895(0xd9)][_0x1bd895(0xcc)],'Referer':_0x2c151c+'/signin','User-Agent':USER_AGENT_BROWSER},'maxRedirects':0xa,'transformResponse':[function(_0x161cc0,_0x367326){const _0x1e893d=_0x1bd895;return _0x367326[_0x1e893d(0x97)]&&_0x367326['location'][_0x1e893d(0x10a)](_0x1e893d(0xe4))&&console['log'](_0x1e893d(0x118),_0x367326[_0x1e893d(0x97)]),_0x161cc0;}]});}[a2_0x21807e(0xab)](_0x3fc5aa){const _0x29965a=a2_0x21807e,_0x2dbd03=this[_0x29965a(0xbb)](_0x3fc5aa);return console['log'](_0x29965a(0xa4),_0x2dbd03),_0x3fc5aa;}[a2_0x21807e(0x81)](_0x14700b){const _0x43e807=a2_0x21807e,_0x2cffc7=CSRF_RE[_0x43e807(0x99)](_0x14700b);return _0x2cffc7?_0x2cffc7[0x1]:null;}[a2_0x21807e(0xbb)](_0x540f33){const _0x644812=a2_0x21807e,_0x18c964=PAGE_TITLE_RE[_0x644812(0x99)](_0x540f33);if(_0x18c964){const _0x20ba19=_0x18c964[0x1];console[_0x644812(0x9f)](_0x644812(0x107),_0x20ba19);if(lodash_1[_0x644812(0x83)][_0x644812(0x10a)](_0x20ba19,_0x644812(0x11b)))throw new Error(_0x644812(0x108));return _0x20ba19;}else throw new Error('登录失败(未找到页面标题)');}['handleAccountLocked'](_0x57a6fb){const _0x5952a3=a2_0x21807e,_0x32edb4=ACCOUNT_LOCKED_RE[_0x5952a3(0x99)](_0x57a6fb);if(_0x32edb4){const _0x149070=_0x32edb4[0x1];console[_0x5952a3(0xcf)](_0x149070);throw new Error(_0x5952a3(0x91));}}async[a2_0x21807e(0x110)](){const _0x4fad36=a2_0x21807e;try{!this[_0x4fad36(0xfb)]&&await this['fetchOauthConsumer']();if(!this[_0x4fad36(0x8f)]||!this['oauth1Token'])throw new Error(_0x4fad36(0x8b));const _0x1a5c98={'oauth':this[_0x4fad36(0xb5)](this[_0x4fad36(0xfb)]),'token':this['oauth1Token']};await this[_0x4fad36(0x88)](_0x1a5c98),console[_0x4fad36(0x9f)]('「'+this[_0x4fad36(0x116)][_0x4fad36(0x11f)]+_0x4fad36(0xeb)+this[_0x4fad36(0xd9)][_0x4fad36(0xed)]+_0x4fad36(0x7e));}catch(_0x312622){console[_0x4fad36(0xcf)]('刷新OAuth2令牌失败:',_0x312622);throw _0x312622;}}async['getOauth1Token'](_0x5b73e3){const _0x5c75cf=a2_0x21807e;if(!this[_0x5c75cf(0xfb)])throw new Error(_0x5c75cf(0xef));const _0x4bd7e3={'ticket':_0x5b73e3,'login-url':this[_0x5c75cf(0xd9)]['GARMIN_SSO_EMBED'],'accepts-mfa-tokens':!![]},_0x3079ef=this[_0x5c75cf(0xd9)][_0x5c75cf(0xaf)]+_0x5c75cf(0xae)+qs_1[_0x5c75cf(0x83)][_0x5c75cf(0x119)](_0x4bd7e3),_0x301238=this[_0x5c75cf(0xb5)](this['OAUTH_CONSUMER']),_0x2f7424={'url':_0x3079ef,'method':_0x5c75cf(0xd2)},_0x5dfc89=_0x301238[_0x5c75cf(0x8d)](_0x301238[_0x5c75cf(0xa3)](_0x2f7424)),_0x1e0e3f=await this[_0x5c75cf(0x73)](_0x3079ef,{'headers':{..._0x5dfc89,'User-Agent':USER_AGENT_CONNECTMOBILE}}),_0x303786=qs_1['default'][_0x5c75cf(0x7c)](_0x1e0e3f);return this[_0x5c75cf(0x122)]=_0x303786,{'token':_0x303786,'oauth':_0x301238};}[a2_0x21807e(0xb5)](_0x875f6c){const _0x3c960f=a2_0x21807e;return new oauth_1_0a_1[(_0x3c960f(0x83))]({'consumer':_0x875f6c,'signature_method':_0x3c960f(0xc5),'hash_function'(_0x3a15fb,_0x5a6f08){const _0x3d6095=_0x3c960f;return node_crypto_1['default'][_0x3d6095(0xc6)](_0x3d6095(0x6e),_0x5a6f08)[_0x3d6095(0x100)](_0x3a15fb)[_0x3d6095(0xec)](_0x3d6095(0x103));}});}async[a2_0x21807e(0x88)](_0xc99acb){const _0x2b8daf=a2_0x21807e,_0x1a9b80={'key':_0xc99acb[_0x2b8daf(0x78)][_0x2b8daf(0x11c)],'secret':_0xc99acb['token'][_0x2b8daf(0xa2)]},_0x5278f6=this[_0x2b8daf(0xd9)][_0x2b8daf(0xaf)]+_0x2b8daf(0x114),_0x49a02e={'url':_0x5278f6,'method':_0x2b8daf(0xbd),'data':null},_0x50d0a1=_0xc99acb[_0x2b8daf(0xb7)]['authorize'](_0x49a02e,_0x1a9b80),_0x3fce5a=_0x5278f6+'?'+qs_1[_0x2b8daf(0x83)][_0x2b8daf(0x119)](_0x50d0a1);this[_0x2b8daf(0x8f)]=undefined;const _0x443e57=await this['post'](_0x3fce5a,null,{'headers':{'User-Agent':USER_AGENT_CONNECTMOBILE,'Content-Type':_0x2b8daf(0x93)}});this[_0x2b8daf(0x8f)]=this[_0x2b8daf(0xf1)](_0x443e57),this['onTokenChange']&&this[_0x2b8daf(0x122)]&&this[_0x2b8daf(0x8f)]&&this[_0x2b8daf(0x7f)]({'oauth1':this[_0x2b8daf(0x122)],'oauth2':this[_0x2b8daf(0x8f)]});}[a2_0x21807e(0xf1)](_0xd038c7){const _0x212e76=a2_0x21807e,_0x335b48=luxon_1[_0x212e76(0x10c)][_0x212e76(0x7a)](),_0x3eeb63=_0x335b48[_0x212e76(0xcd)]({'seconds':_0xd038c7[_0x212e76(0xf8)]}),_0x13fc24=_0x335b48['plus']({'seconds':_0xd038c7['refresh_token_expires_in']});return{..._0xd038c7,'last_update_date':_0x335b48['toLocal']()[_0x212e76(0x120)](),'expires_date':_0x3eeb63[_0x212e76(0x74)]()[_0x212e76(0x120)](),'expires_at':_0x3eeb63[_0x212e76(0x102)](),'refresh_token_expires_at':_0x13fc24[_0x212e76(0x102)]()};}}exports[a2_0x21807e(0xf9)]=HttpClient;