@gooin/garmin-connect 1.8.3 → 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 (66) 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/device.js.map +1 -1
  34. package/dist/garmin/modules/misc.js +1 -1
  35. package/dist/garmin/modules/types.js +1 -1
  36. package/dist/garmin/modules/user.js +1 -1
  37. package/dist/garmin/modules/wellness/body-battery.js +1 -1
  38. package/dist/garmin/modules/wellness/heart-rate.js +1 -1
  39. package/dist/garmin/modules/wellness/hrv.js +1 -1
  40. package/dist/garmin/modules/wellness/hydration.js +1 -1
  41. package/dist/garmin/modules/wellness/sleep.js +1 -1
  42. package/dist/garmin/modules/wellness/weight.js +1 -1
  43. package/dist/garmin/modules/workout.js +1 -1
  44. package/dist/garmin/types/activity-stats.js +1 -1
  45. package/dist/garmin/types/activity.js +1 -1
  46. package/dist/garmin/types/body-battery.js +1 -1
  47. package/dist/garmin/types/coach.d.ts +6 -0
  48. package/dist/garmin/types/coach.js +1 -1
  49. package/dist/garmin/types/course.js +1 -1
  50. package/dist/garmin/types/cycling.js +1 -1
  51. package/dist/garmin/types/device.js +1 -1
  52. package/dist/garmin/types/golf.js +1 -1
  53. package/dist/garmin/types/heartrate.js +1 -1
  54. package/dist/garmin/types/hrv.js +1 -1
  55. package/dist/garmin/types/hydration.js +1 -1
  56. package/dist/garmin/types/index.js +1 -1
  57. package/dist/garmin/types/personal-info.js +1 -1
  58. package/dist/garmin/types/race-prediction.js +1 -1
  59. package/dist/garmin/types/sleep.js +1 -1
  60. package/dist/garmin/types/training-status.js +1 -1
  61. package/dist/garmin/types/weight.js +1 -1
  62. package/dist/garmin/workouts/Running.js +1 -1
  63. package/dist/garmin/workouts/templates/RunningTemplate.js +1 -1
  64. package/dist/index.js +1 -1
  65. package/dist/utils.js +1 -1
  66. package/package.json +8 -3
@@ -1 +1 @@
1
- 'use strict';const a2_0x41f3ce=a2_0x5ec6;(function(_0x4d384b,_0x5ce979){const _0x3f7027=a2_0x5ec6,_0x402bf5=_0x4d384b();while(!![]){try{const _0x27e024=-parseInt(_0x3f7027(0x19f))/0x1+parseInt(_0x3f7027(0x176))/0x2*(parseInt(_0x3f7027(0x18d))/0x3)+parseInt(_0x3f7027(0x198))/0x4+-parseInt(_0x3f7027(0x16b))/0x5*(-parseInt(_0x3f7027(0x183))/0x6)+parseInt(_0x3f7027(0x188))/0x7+-parseInt(_0x3f7027(0x18b))/0x8*(parseInt(_0x3f7027(0x18c))/0x9)+-parseInt(_0x3f7027(0x1de))/0xa;if(_0x27e024===_0x5ce979)break;else _0x402bf5['push'](_0x402bf5['shift']());}catch(_0x5b6108){_0x402bf5['push'](_0x402bf5['shift']());}}}(a2_0x2815,0x4bf53));var __importDefault=this&&this[a2_0x41f3ce(0x147)]||function(_0x56fe6a){const _0x40b03a=a2_0x41f3ce;return _0x56fe6a&&_0x56fe6a[_0x40b03a(0x19b)]?_0x56fe6a:{'default':_0x56fe6a};};Object['defineProperty'](exports,a2_0x41f3ce(0x19b),{'value':!![]}),exports[a2_0x41f3ce(0x190)]=void 0x0;function a2_0x5ec6(_0x2bb4e5,_0x27e69d){_0x2bb4e5=_0x2bb4e5-0x135;const _0x281537=a2_0x2815();let _0x5ec616=_0x281537[_0x2bb4e5];return _0x5ec616;}const axios_1=__importDefault(require(a2_0x41f3ce(0x181))),lodash_1=__importDefault(require(a2_0x41f3ce(0x15d))),luxon_1=require(a2_0x41f3ce(0x1d8)),oauth_1_0a_1=__importDefault(require(a2_0x41f3ce(0x187))),qs_1=__importDefault(require('qs')),MFAManager_1=require('./MFAManager'),node_crypto_1=__importDefault(require(a2_0x41f3ce(0x167))),tough_cookie_1=require(a2_0x41f3ce(0x157)),axios_cookiejar_support_1=require(a2_0x41f3ce(0x14a)),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_0x41f3ce(0x142)),PAGE_TITLE_RE=new RegExp(a2_0x41f3ce(0x186)),USER_AGENT_CONNECTMOBILE='com.garmin.android.apps.connectmobile',USER_AGENT_BROWSER=a2_0x41f3ce(0x1c4),USER_AGENT_BROWSER_MAC=a2_0x41f3ce(0x1d5),OAUTH_CONSUMER_URL=a2_0x41f3ce(0x162),HTTP_STATUS={'UNAUTHORIZED':0x191};function a2_0x2815(){const _0x1ab345=['validateMFAResult','consumer_secret','GARMIN_SSO','OAUTH_URL','expires_at','logResponseTracking','/exchange/user/2.0','axios','fetchOauthConsumer','1302oHxlIs','toSeconds','code','<title>([^<]*)</title>','oauth-1.0a','4262594XUBegp','extractTicket','getInstance','4186376tQkANP','9ryPlIe','159gZaUCF','application/x-www-form-urlencoded','GARMIN_SSO_EMBED','HttpClient','exec','/verifyMFA/loginEnterMfaCode','message','MFA验证\x20-\x20未找到CSRF令牌','use','登录失败(账户已锁定),请打开Connect网页解锁您的账户','data','860412qbgElo','CookieJar','performLoginStep1','__esModule','Bearer\x20','响应跟踪\x20-\x20最终URL:','login','51358BmkAru','HTTP\x20Error:','plus','Authorization','Token\x20refresh\x20failed:','signin','extractCsrfToken','getOauthClient','digest','/tmp','base64','log','responseURL','setCommonHeader','append','MFA验证失败:\x20','config','HMAC-SHA1','/signin','consumer_key','object','access_token','toLocal','checkTokenVaild','oauth_token_secret','No\x20OAuth2\x20token\x20available\x20(登录失败,密码错误)','MFA验证失败:','oauth','toString','ECONNABORTED','toLowerCase','/preauthorized?','getOauth1Token','handleAccountLocked','username','setOauth2TokenExpiresAt','HTTP\x20Error\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','」的OAuth2令牌刷新成功','toHeader','):\x20','handleError','UNAUTHORIZED','登录失败(未找到页面标题)','default','authentication','domain','refreshOauth2Token','」在「','handleMFA','step1Params','now','authorize','step3Params','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','oauth1Token','headers','luxon','GARMIN_SSO_ORIGIN','exchange','setupInterceptors','Token\x20expired!','getLoginTicket','6711350CNbgSf','gauth-widget','step2Params','GarminConnect','put','mfaManager','handleMFAWithCode','登录\x20-\x20未找到CSRF令牌','handlePageTitle','_csrf','password','DateTime','post','location','响应跟踪\x20-\x20状态码:','token','🚀\x20-\x20handleMFA\x20-\x20mfaCode:','var\x20statuss*=s*\x22([^\x22]*)\x22','需要MFA验证,但未提供验证码获取方式','无法从MFA页面提取CSRF令牌','true','get','__importDefault','响应跟踪\x20-\x20检测到重定向状态码:','handleHttpError','axios-cookiejar-support','缺少刷新令牌所需的必要令牌','expires_in','timeout','Login\x20failed:','url','onTokenChange','file','Request\x20Timeout:\x20>\x20','defaults','interceptors','request','MFA验证后的页面标题:','tough-cookie','No\x20OAuth2\x20token\x20available','mfa-code','SIGNIN_URL','POST','createHmac','lodash','error','parse','Request\x20Timeout','sha1','https://thegarth.s3.amazonaws.com/oauth_consumer.json','登录失败(需要MFA验证),请提供MFA回调函数','isMFARequired','client','OAUTH_CONSUMER','node:crypto','oauth2Token','wrapper','响应跟踪\x20-\x20Location头:','8570wmEXwY','🚀\x20-\x20getLoginTicket\x20-\x20收到验证码\x20mfaCode:','embed','stringify','Update\x20Phone\x20Number','redirectCount','status','登录失败(未找到票据或MFA验证失败),请检查用户名和密码','includes','_retry','common','13620MVMTDo','sign','isAxiosError','submitMFACode'];a2_0x2815=function(){return _0x1ab345;};return a2_0x2815();}let tokenRefreshPromise=null,refreshSubscribers=[];class HttpClient{constructor(_0x416f0a,_0x823eab){const _0x4f108d=a2_0x41f3ce;var _0x5f2e33,_0x2814a7;const _0x598470=new tough_cookie_1[(_0x4f108d(0x199))]();this[_0x4f108d(0x14f)]=_0x416f0a,this[_0x4f108d(0x165)]=(0x0,axios_cookiejar_support_1[_0x4f108d(0x169)])(axios_1['default']['create']({'timeout':(_0x5f2e33=_0x823eab===null||_0x823eab===void 0x0?void 0x0:_0x823eab[_0x4f108d(0x14d)])!==null&&_0x5f2e33!==void 0x0?_0x5f2e33:0x1388,'timeoutErrorMessage':_0x4f108d(0x152)+((_0x2814a7=_0x823eab===null||_0x823eab===void 0x0?void 0x0:_0x823eab[_0x4f108d(0x14d)])!==null&&_0x2814a7!==void 0x0?_0x2814a7:0x1388)+'\x20ms','maxRedirects':0xa,'validateStatus':function(_0x203bbe){return _0x203bbe>=0xc8&&_0x203bbe<0x190;},'withCredentials':!![],'jar':_0x598470})),this['config']=_0x823eab;const _0x51c97c=_0x823eab['mfa']||{'type':_0x4f108d(0x151),'dir':_0x823eab['mfaStorageDir']||_0x4f108d(0x1a8)};this[_0x4f108d(0x136)]=MFAManager_1['MFAManager'][_0x4f108d(0x18a)](_0x51c97c),this[_0x4f108d(0x1db)]();}[a2_0x41f3ce(0x1db)](){const _0x405957=a2_0x41f3ce;this['client'][_0x405957(0x154)]['response'][_0x405957(0x195)](_0x5b6dd9=>{return _0x5b6dd9;},async _0x1fb970=>{return this['handleResponseError'](_0x1fb970);}),this[_0x405957(0x165)]['interceptors'][_0x405957(0x155)]['use'](async _0x3bae90=>{const _0x11d52a=_0x405957;return this[_0x11d52a(0x168)]&&(_0x3bae90[_0x11d52a(0x1d7)]['Authorization']=_0x11d52a(0x19c)+this[_0x11d52a(0x168)][_0x11d52a(0x1b4)]),_0x3bae90;});}[a2_0x41f3ce(0x17f)](_0x40fb59){const _0x538ee5=a2_0x41f3ce;var _0x21dd41,_0x45f6a4,_0x424336,_0x4cbb7b;(((_0x21dd41=_0x40fb59[_0x538ee5(0x1af)][_0x538ee5(0x14f)])===null||_0x21dd41===void 0x0?void 0x0:_0x21dd41['includes']('signin'))||((_0x45f6a4=_0x40fb59[_0x538ee5(0x1af)][_0x538ee5(0x14f)])===null||_0x45f6a4===void 0x0?void 0x0:_0x45f6a4[_0x538ee5(0x173)]('verifyMFA')))&&(console['log']('>\x20响应跟踪\x20-\x20URL:',_0x40fb59[_0x538ee5(0x1af)][_0x538ee5(0x14f)]),console[_0x538ee5(0x1aa)](_0x538ee5(0x13f),_0x40fb59[_0x538ee5(0x171)]),console[_0x538ee5(0x1aa)](_0x538ee5(0x19d),((_0x424336=_0x40fb59[_0x538ee5(0x155)])===null||_0x424336===void 0x0?void 0x0:_0x424336[_0x538ee5(0x1ab)])||_0x40fb59[_0x538ee5(0x1af)][_0x538ee5(0x14f)]),console[_0x538ee5(0x1aa)]('响应跟踪\x20-\x20重定向次数:',((_0x4cbb7b=_0x40fb59[_0x538ee5(0x155)])===null||_0x4cbb7b===void 0x0?void 0x0:_0x4cbb7b[_0x538ee5(0x170)])||0x0),_0x40fb59[_0x538ee5(0x1d7)]['location']&&console['log'](_0x538ee5(0x16a),_0x40fb59[_0x538ee5(0x1d7)][_0x538ee5(0x13e)]),_0x40fb59['status']>=0x12c&&_0x40fb59[_0x538ee5(0x171)]<0x190&&console['log'](_0x538ee5(0x148),_0x40fb59[_0x538ee5(0x171)]));}async['handleResponseError'](_0x168689){const _0x14123c=a2_0x41f3ce;var _0x53d0a7,_0x527351,_0x3d5270;if(axios_1[_0x14123c(0x1cb)][_0x14123c(0x178)](_0x168689)&&_0x168689[_0x14123c(0x185)]===_0x14123c(0x1bc))throw new Error(_0x168689[_0x14123c(0x193)]||_0x14123c(0x160));const _0x32e3f3=_0x168689['config'];if(((_0x53d0a7=_0x168689===null||_0x168689===void 0x0?void 0x0:_0x168689['response'])===null||_0x53d0a7===void 0x0?void 0x0:_0x53d0a7[_0x14123c(0x171)])===HTTP_STATUS[_0x14123c(0x1c9)]&&!(_0x32e3f3===null||_0x32e3f3===void 0x0?void 0x0:_0x32e3f3[_0x14123c(0x174)])){if(!this[_0x14123c(0x168)]){if(((_0x527351=_0x32e3f3===null||_0x32e3f3===void 0x0?void 0x0:_0x32e3f3[_0x14123c(0x14f)])===null||_0x527351===void 0x0?void 0x0:_0x527351[_0x14123c(0x173)](_0x14123c(0x1a4)))||((_0x3d5270=_0x32e3f3===null||_0x32e3f3===void 0x0?void 0x0:_0x32e3f3['url'])===null||_0x3d5270===void 0x0?void 0x0:_0x3d5270[_0x14123c(0x173)](_0x14123c(0x19e))))throw new Error(_0x14123c(0x1b8));throw new Error(_0x14123c(0x158));}_0x32e3f3['_retry']=!![];try{return!tokenRefreshPromise&&(tokenRefreshPromise=this[_0x14123c(0x1ce)]()['finally'](()=>{tokenRefreshPromise=null;})),await tokenRefreshPromise,_0x32e3f3[_0x14123c(0x1d7)][_0x14123c(0x1a2)]=_0x14123c(0x19c)+this[_0x14123c(0x168)][_0x14123c(0x1b4)],this['client'](_0x32e3f3);}catch(_0x147b2a){console[_0x14123c(0x15e)](_0x14123c(0x1a3),_0x147b2a);throw _0x147b2a;}}if(axios_1[_0x14123c(0x1cb)]['isAxiosError'](_0x168689)&&_0x168689['response'])this[_0x14123c(0x1c8)](_0x168689['response']);else throw new Error('Network\x20error\x20or\x20unknown\x20error\x20occurred');throw _0x168689;}async[a2_0x41f3ce(0x182)](){const _0x2d94b7=a2_0x41f3ce,_0x41d4f5=await axios_1[_0x2d94b7(0x1cb)]['get'](OAUTH_CONSUMER_URL);this[_0x2d94b7(0x166)]={'key':_0x41d4f5['data'][_0x2d94b7(0x1b2)],'secret':_0x41d4f5['data'][_0x2d94b7(0x17b)]};}async[a2_0x41f3ce(0x1b6)](){const _0x249f98=a2_0x41f3ce;this[_0x249f98(0x168)]&&(this[_0x249f98(0x168)][_0x249f98(0x17e)]<luxon_1[_0x249f98(0x13c)][_0x249f98(0x1d2)]()[_0x249f98(0x184)]()&&(console[_0x249f98(0x15e)](_0x249f98(0x1dc)),await this[_0x249f98(0x1ce)]()));}async[a2_0x41f3ce(0x146)](_0x2d42c8,_0x59637f){const _0x24e030=a2_0x41f3ce,_0x2f1ffe=await this['client'][_0x24e030(0x146)](_0x2d42c8,_0x59637f);return _0x2f1ffe===null||_0x2f1ffe===void 0x0?void 0x0:_0x2f1ffe[_0x24e030(0x197)];}async[a2_0x41f3ce(0x13d)](_0x3fbb58,_0xd9a1fa,_0x56b66b){const _0x88405f=a2_0x41f3ce,_0x46f80e=await this[_0x88405f(0x165)][_0x88405f(0x13d)](_0x3fbb58,_0xd9a1fa,_0x56b66b);return _0x46f80e===null||_0x46f80e===void 0x0?void 0x0:_0x46f80e[_0x88405f(0x197)];}async[a2_0x41f3ce(0x135)](_0x2a7bf6,_0x59f8cb,_0x289aa1){const _0xed7cf6=a2_0x41f3ce,_0x1e6c56=await this['client'][_0xed7cf6(0x135)](_0x2a7bf6,_0x59f8cb,_0x289aa1);return _0x1e6c56===null||_0x1e6c56===void 0x0?void 0x0:_0x1e6c56['data'];}async['delete'](_0x48ab69,_0x19f201){const _0xc6d92a=a2_0x41f3ce,_0x3e09fe=await this[_0xc6d92a(0x165)][_0xc6d92a(0x13d)](_0x48ab69,null,{..._0x19f201,'headers':{..._0x19f201===null||_0x19f201===void 0x0?void 0x0:_0x19f201[_0xc6d92a(0x1d7)],'X-Http-Method-Override':'DELETE'}});return _0x3e09fe===null||_0x3e09fe===void 0x0?void 0x0:_0x3e09fe['data'];}[a2_0x41f3ce(0x1ac)](_0x5a60c7){const _0x261bcb=a2_0x41f3ce;lodash_1[_0x261bcb(0x1cb)]['each'](_0x5a60c7,(_0x52b1b9,_0x25745c)=>{const _0x180ef1=_0x261bcb;this[_0x180ef1(0x165)][_0x180ef1(0x153)]['headers'][_0x180ef1(0x175)][_0x25745c]=_0x52b1b9;});}[a2_0x41f3ce(0x1c8)](_0x3d7d54){this['handleHttpError'](_0x3d7d54);}[a2_0x41f3ce(0x149)](_0x5e35da){const _0x12d138=a2_0x41f3ce,{status:_0x165d2e,statusText:_0x1b0a44,data:_0x4f71eb}=_0x5e35da,_0x1183e5={'status':_0x165d2e,'statusText':_0x1b0a44,'data':typeof _0x4f71eb===_0x12d138(0x1b3)?JSON['stringify'](_0x4f71eb):_0x4f71eb};console[_0x12d138(0x15e)](_0x12d138(0x1a0),_0x1183e5);throw new Error(_0x12d138(0x1c3)+_0x165d2e+_0x12d138(0x1c7)+_0x1b0a44);}async[a2_0x41f3ce(0x19e)](_0x5b7b76,_0x4a7632,_0x4ede7e){const _0x1a3bed=a2_0x41f3ce;try{await this[_0x1a3bed(0x182)]();const _0x47ab9e=await this['getLoginTicket'](_0x5b7b76,_0x4a7632,_0x4ede7e),_0x46390c=await this['getOauth1Token'](_0x47ab9e);return await this[_0x1a3bed(0x1da)](_0x46390c),this;}catch(_0x309eaa){console[_0x1a3bed(0x15e)](_0x1a3bed(0x14e),_0x309eaa);throw _0x309eaa;}}async[a2_0x41f3ce(0x1dd)](_0x141956,_0x2a74ea,_0x3804bb){const _0x178d53=a2_0x41f3ce,_0x3cdce3=this['prepareLoginParams']();await this[_0x178d53(0x19a)](_0x3cdce3[_0x178d53(0x1d1)]);const _0x23bb5d=await this['performLoginStep2'](_0x3cdce3[_0x178d53(0x1e0)]);let _0x51a772=await this['performLoginStep3'](_0x141956,_0x2a74ea,_0x23bb5d,_0x3cdce3[_0x178d53(0x1d4)]);this[_0x178d53(0x1c0)](_0x51a772);const _0x1b4424=this[_0x178d53(0x139)](_0x51a772);if(this[_0x178d53(0x164)](_0x1b4424)){if(_0x3804bb){console['log']('🚀\x20-\x20getLoginTicket\x20-\x20等待验证码\x20sessionId:',_0x3804bb);const _0x347b39=await this[_0x178d53(0x136)]['waitForMFACode'](_0x3804bb);console[_0x178d53(0x1aa)](_0x178d53(0x16c),_0x347b39),_0x51a772=await this[_0x178d53(0x137)](_0x51a772,_0x3cdce3[_0x178d53(0x1d4)],_0x347b39);}else throw new Error(_0x178d53(0x143));}const _0x520dc6=this['extractTicket'](_0x51a772);if(!_0x520dc6)throw new Error(_0x178d53(0x172));return _0x520dc6;}['prepareLoginParams'](){const _0x5d9a60=a2_0x41f3ce;return{'step1Params':{'clientId':_0x5d9a60(0x1e1),'locale':'en','service':this[_0x5d9a60(0x14f)]['GC_MODERN']},'step2Params':{'id':_0x5d9a60(0x1df),'embedWidget':!![],'locale':'en','gauthHost':this['url'][_0x5d9a60(0x18f)]},'step3Params':{'id':_0x5d9a60(0x1df),'embedWidget':!![],'clientId':_0x5d9a60(0x1e1),'locale':'en','gauthHost':this[_0x5d9a60(0x14f)][_0x5d9a60(0x18f)],'service':this[_0x5d9a60(0x14f)][_0x5d9a60(0x18f)],'source':this['url'][_0x5d9a60(0x18f)],'redirectAfterAccountLoginUrl':this['url']['GARMIN_SSO_EMBED'],'redirectAfterAccountCreationUrl':this[_0x5d9a60(0x14f)][_0x5d9a60(0x18f)]}};}async[a2_0x41f3ce(0x19a)](_0x43ecb0){const _0x1c542e=a2_0x41f3ce,_0xfd362a=this['url'][_0x1c542e(0x18f)]+'?'+qs_1['default']['stringify'](_0x43ecb0);await this['client'][_0x1c542e(0x146)](_0xfd362a);}async['performLoginStep2'](_0x586b7d){const _0x20ee56=a2_0x41f3ce,_0x5c770d=this[_0x20ee56(0x14f)][_0x20ee56(0x15a)]+'?'+qs_1[_0x20ee56(0x1cb)][_0x20ee56(0x16e)](_0x586b7d),_0x29293f=await this[_0x20ee56(0x146)](_0x5c770d),_0x507526=this['extractCsrfToken'](_0x29293f);if(!_0x507526)throw new Error(_0x20ee56(0x138));return _0x507526;}async['performLoginStep3'](_0x1e9842,_0x329c84,_0xa98367,_0x552686){const _0x295072=a2_0x41f3ce,_0x54cace=this[_0x295072(0x14f)][_0x295072(0x15a)]+'?'+qs_1[_0x295072(0x1cb)][_0x295072(0x16e)](_0x552686),_0x42273b=new URLSearchParams();return _0x42273b[_0x295072(0x1ad)](_0x295072(0x1c1),_0x1e9842),_0x42273b['append'](_0x295072(0x13b),_0x329c84),_0x42273b[_0x295072(0x1ad)](_0x295072(0x16d),_0x295072(0x145)),_0x42273b[_0x295072(0x1ad)](_0x295072(0x13a),_0xa98367),this[_0x295072(0x13d)](_0x54cace,_0x42273b,{'headers':{'Content-Type':_0x295072(0x18e),'Dnt':0x1,'Origin':this[_0x295072(0x14f)][_0x295072(0x1d9)],'Referer':this[_0x295072(0x14f)][_0x295072(0x15a)],'User-Agent':USER_AGENT_CONNECTMOBILE}});}[a2_0x41f3ce(0x164)](_0x7e5a7e){const _0x3df742=a2_0x41f3ce,_0x2c60cb=_0x7e5a7e[_0x3df742(0x1bd)]();return _0x2c60cb[_0x3df742(0x173)]('mfa')||_0x2c60cb[_0x3df742(0x173)](_0x3df742(0x1cc))&&!_0x2c60cb[_0x3df742(0x173)](_0x3df742(0x177));}[a2_0x41f3ce(0x189)](_0x353297){const _0x97d441=a2_0x41f3ce,_0x4dbabd=TICKET_RE[_0x97d441(0x191)](_0x353297);return _0x4dbabd?_0x4dbabd[0x1]:null;}async['handleMFAWithCode'](_0x1aeb80,_0x405f04,_0x602dde){const _0x1da5b2=a2_0x41f3ce;try{const _0x33d361=this[_0x1da5b2(0x1a5)](_0x1aeb80);if(!_0x33d361)throw new Error(_0x1da5b2(0x194));const _0x265ecb=await this[_0x1da5b2(0x179)](_0x33d361,_0x602dde,_0x405f04);return this[_0x1da5b2(0x17a)](_0x265ecb);}catch(_0x1c54c8){console[_0x1da5b2(0x15e)](_0x1da5b2(0x1b9),_0x1c54c8);throw new Error(_0x1da5b2(0x1ae)+_0x1c54c8);}}async[a2_0x41f3ce(0x1d0)](_0x6e3d38,_0x12cc83,_0x520da6){const _0x447f83=a2_0x41f3ce;if(!_0x520da6)throw new Error(_0x447f83(0x163));const _0x36bc66=this['extractCsrfToken'](_0x6e3d38);if(!_0x36bc66)throw new Error(_0x447f83(0x144));const _0x4a9736=await _0x520da6();console['log'](_0x447f83(0x141),_0x4a9736);const _0x222655=await this[_0x447f83(0x179)](_0x36bc66,_0x4a9736,_0x12cc83);return this['validateMFAResult'](_0x222655);}async[a2_0x41f3ce(0x179)](_0x21832c,_0x59101f,_0x31d165){const _0x189716=a2_0x41f3ce,_0x247c58=this['url'][_0x189716(0x17c)],_0xbbcded=new URLSearchParams();return _0xbbcded[_0x189716(0x1ad)](_0x189716(0x159),_0x59101f),_0xbbcded[_0x189716(0x1ad)](_0x189716(0x16d),_0x189716(0x145)),_0xbbcded['append'](_0x189716(0x13a),_0x21832c),this[_0x189716(0x13d)](_0x247c58+_0x189716(0x192),_0xbbcded,{'params':_0x31d165,'headers':{'Content-Type':_0x189716(0x18e),'Dnt':0x1,'Origin':this[_0x189716(0x14f)]['GARMIN_SSO_ORIGIN'],'Referer':_0x247c58+_0x189716(0x1b1),'User-Agent':USER_AGENT_BROWSER},'maxRedirects':0xa,'transformResponse':[function(_0x5c114e,_0x4290a5){const _0x5bcc27=_0x189716;return _0x4290a5[_0x5bcc27(0x13e)]&&_0x4290a5['location'][_0x5bcc27(0x173)]('logintoken')&&console[_0x5bcc27(0x1aa)]('检测到重定向到包含logintoken的URL:',_0x4290a5[_0x5bcc27(0x13e)]),_0x5c114e;}]});}[a2_0x41f3ce(0x17a)](_0x52aa47){const _0x3f1f25=a2_0x41f3ce,_0xe7959d=this[_0x3f1f25(0x139)](_0x52aa47);return console['log'](_0x3f1f25(0x156),_0xe7959d),_0x52aa47;}[a2_0x41f3ce(0x1a5)](_0x58ee05){const _0x2661c6=a2_0x41f3ce,_0x3e2dfb=CSRF_RE[_0x2661c6(0x191)](_0x58ee05);return _0x3e2dfb?_0x3e2dfb[0x1]:null;}[a2_0x41f3ce(0x139)](_0x1618a2){const _0xe726ca=a2_0x41f3ce,_0x39c646=PAGE_TITLE_RE[_0xe726ca(0x191)](_0x1618a2);if(_0x39c646){const _0x5b97a5=_0x39c646[0x1];console['log']('登录页面标题:',_0x5b97a5);if(lodash_1[_0xe726ca(0x1cb)][_0xe726ca(0x173)](_0x5b97a5,_0xe726ca(0x16f)))throw new Error('登录失败(需要更新电话号码),请更新您的电话号码,参考:\x20https://github.com/matin/garth/issues/19');return _0x5b97a5;}else throw new Error(_0xe726ca(0x1ca));}[a2_0x41f3ce(0x1c0)](_0x2fcace){const _0x43287a=a2_0x41f3ce,_0x1b82e7=ACCOUNT_LOCKED_RE[_0x43287a(0x191)](_0x2fcace);if(_0x1b82e7){const _0x543d34=_0x1b82e7[0x1];console['error'](_0x543d34);throw new Error(_0x43287a(0x196));}}async[a2_0x41f3ce(0x1ce)](){const _0x1aa793=a2_0x41f3ce;try{!this[_0x1aa793(0x166)]&&await this[_0x1aa793(0x182)]();if(!this[_0x1aa793(0x168)]||!this[_0x1aa793(0x1d6)])throw new Error(_0x1aa793(0x14b));const _0x541080={'oauth':this[_0x1aa793(0x1a6)](this[_0x1aa793(0x166)]),'token':this['oauth1Token']};await this[_0x1aa793(0x1da)](_0x541080),console[_0x1aa793(0x1aa)]('「'+this[_0x1aa793(0x1af)][_0x1aa793(0x1c1)]+_0x1aa793(0x1cf)+this[_0x1aa793(0x14f)][_0x1aa793(0x1cd)]+_0x1aa793(0x1c5));}catch(_0x514ae6){console['error']('刷新OAuth2令牌失败:',_0x514ae6);throw _0x514ae6;}}async[a2_0x41f3ce(0x1bf)](_0x59cafb){const _0x105c90=a2_0x41f3ce;if(!this['OAUTH_CONSUMER'])throw new Error('未找到OAuth消费者信息');const _0x3da058={'ticket':_0x59cafb,'login-url':this[_0x105c90(0x14f)][_0x105c90(0x18f)],'accepts-mfa-tokens':!![]},_0x1635fc=this[_0x105c90(0x14f)]['OAUTH_URL']+_0x105c90(0x1be)+qs_1['default'][_0x105c90(0x16e)](_0x3da058),_0x2a31b4=this[_0x105c90(0x1a6)](this[_0x105c90(0x166)]),_0x3ed00e={'url':_0x1635fc,'method':'GET'},_0x2b9947=_0x2a31b4[_0x105c90(0x1c6)](_0x2a31b4[_0x105c90(0x1d3)](_0x3ed00e)),_0x11e277=await this[_0x105c90(0x146)](_0x1635fc,{'headers':{..._0x2b9947,'User-Agent':USER_AGENT_CONNECTMOBILE}}),_0x377c56=qs_1[_0x105c90(0x1cb)][_0x105c90(0x15f)](_0x11e277);return this[_0x105c90(0x1d6)]=_0x377c56,{'token':_0x377c56,'oauth':_0x2a31b4};}[a2_0x41f3ce(0x1a6)](_0x107ff1){const _0x3534e2=a2_0x41f3ce;return new oauth_1_0a_1['default']({'consumer':_0x107ff1,'signature_method':_0x3534e2(0x1b0),'hash_function'(_0x2165b0,_0x2930fe){const _0x3cceea=_0x3534e2;return node_crypto_1['default'][_0x3cceea(0x15c)](_0x3cceea(0x161),_0x2930fe)['update'](_0x2165b0)[_0x3cceea(0x1a7)](_0x3cceea(0x1a9));}});}async['exchange'](_0x4f35dd){const _0x3fc568=a2_0x41f3ce,_0x350905={'key':_0x4f35dd[_0x3fc568(0x140)]['oauth_token'],'secret':_0x4f35dd['token'][_0x3fc568(0x1b7)]},_0x59c722=this[_0x3fc568(0x14f)][_0x3fc568(0x17d)]+_0x3fc568(0x180),_0x298250={'url':_0x59c722,'method':_0x3fc568(0x15b),'data':null},_0xc79b20=_0x4f35dd[_0x3fc568(0x1ba)][_0x3fc568(0x1d3)](_0x298250,_0x350905),_0x3c7e58=_0x59c722+'?'+qs_1['default'][_0x3fc568(0x16e)](_0xc79b20);this['oauth2Token']=undefined;const _0x3460e4=await this[_0x3fc568(0x13d)](_0x3c7e58,null,{'headers':{'User-Agent':USER_AGENT_CONNECTMOBILE,'Content-Type':'application/x-www-form-urlencoded'}});this[_0x3fc568(0x168)]=this[_0x3fc568(0x1c2)](_0x3460e4),this[_0x3fc568(0x150)]&&this[_0x3fc568(0x1d6)]&&this[_0x3fc568(0x168)]&&this[_0x3fc568(0x150)]({'oauth1':this[_0x3fc568(0x1d6)],'oauth2':this[_0x3fc568(0x168)]});}['setOauth2TokenExpiresAt'](_0x1b70b7){const _0x5957b1=a2_0x41f3ce,_0x18f96e=luxon_1['DateTime'][_0x5957b1(0x1d2)](),_0x4a622a=_0x18f96e[_0x5957b1(0x1a1)]({'seconds':_0x1b70b7[_0x5957b1(0x14c)]}),_0x2793a8=_0x18f96e[_0x5957b1(0x1a1)]({'seconds':_0x1b70b7['refresh_token_expires_in']});return{..._0x1b70b7,'last_update_date':_0x18f96e[_0x5957b1(0x1b5)]()[_0x5957b1(0x1bb)](),'expires_date':_0x4a622a['toLocal']()[_0x5957b1(0x1bb)](),'expires_at':_0x4a622a[_0x5957b1(0x184)](),'refresh_token_expires_at':_0x2793a8[_0x5957b1(0x184)]()};}}exports[a2_0x41f3ce(0x190)]=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;