@gooin/garmin-connect
Version:
Makes it simple to interface with Garmin Connect to get or set any data point
174 lines (173 loc) • 4.92 kB
TypeScript
import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from 'axios';
import OAuth from 'oauth-1.0a';
import { MFAManager } from './MFAManager';
import { UrlClass } from '../garmin/UrlClass';
import { GCConfig, IOauth1, IOauth1Consumer, IOauth1Token, IOauth2Token } from '../garmin/types';
export declare class HttpClient {
client: AxiosInstance;
url: UrlClass;
config: GCConfig;
oauth1Token: IOauth1Token | undefined;
oauth2Token: IOauth2Token | undefined;
OAUTH_CONSUMER: IOauth1Consumer | undefined;
mfaManager: MFAManager;
constructor(url: UrlClass, config: GCConfig);
/**
* 设置请求和响应拦截器
*/
private setupInterceptors;
/**
* 记录响应跟踪信息
*/
private logResponseTracking;
/**
* 处理响应错误
*/
private handleResponseError;
/**
* 获取OAuth消费者信息
*/
fetchOauthConsumer(): Promise<void>;
/**
* 检查令牌有效性
*/
checkTokenVaild(): Promise<void>;
/**
* GET请求
*/
get<T>(url: string, config?: AxiosRequestConfig<any>): Promise<T>;
/**
* POST请求
*/
post<T>(url: string, data: any, config?: AxiosRequestConfig<any>): Promise<T>;
/**
* PUT请求
*/
put<T>(url: string, data: any, config?: AxiosRequestConfig<any>): Promise<T>;
/**
* DELETE请求
*/
delete<T>(url: string, config?: AxiosRequestConfig<any>): Promise<T>;
/**
* 设置通用请求头
*/
setCommonHeader(headers: RawAxiosRequestHeaders): void;
/**
* 处理错误
*/
handleError(response: AxiosResponse): void;
/**
* 处理HTTP错误
*/
handleHttpError(response: AxiosResponse): void;
/**
* 登录到Garmin Connect
* @param username 用户名
* @param password 密码
* @param mfaCallback MFA验证回调函数
* @param sessionId 会话ID,用于分步登录
* @returns Promise<HttpClient>
*/
login(username: string, password: string, sessionId?: string): Promise<HttpClient>;
/**
* 获取登录票据
* @param username 用户名
* @param password 密码
* @param mfaCallback MFA验证回调函数
* @param sessionId 会话ID,用于分步登录
* @returns 登录票据
*/
private getLoginTicket;
/**
* 准备登录参数
*/
private prepareLoginParams;
/**
* 执行登录步骤1:设置cookie
*/
private performLoginStep1;
/**
* 执行登录步骤2:获取CSRF令牌
*/
private performLoginStep2;
/**
* 执行登录步骤3:提交凭据
*/
private performLoginStep3;
/**
* 判断是否需要MFA验证
*/
private isMFARequired;
/**
* 从响应中提取票据
*/
private extractTicket;
/**
* 处理MFA验证(使用直接提供的验证码)
* @param htmlStr HTML响应字符串
* @param signinParams 登录参数
* @param mfaCode MFA验证码
* @returns MFA验证后的响应字符串
*/
handleMFAWithCode(htmlStr: string, signinParams: Record<string, any>, mfaCode: string): Promise<string>;
/**
* 处理MFA验证
* @param htmlStr HTML响应字符串
* @param signinParams 登录参数
* @param mfaCallback MFA验证回调函数
* @returns MFA验证后的响应字符串
*/
handleMFA(htmlStr: string, signinParams: Record<string, any>, mfaCallback?: () => Promise<string>): Promise<string>;
/**
* 提交MFA验证码
*/
private submitMFACode;
/**
* 验证MFA结果
*/
private validateMFAResult;
/**
* 从HTML中提取CSRF令牌
* @param html HTML字符串
* @returns CSRF令牌或null
*/
extractCsrfToken(html: string): string | null;
/**
* 处理页面标题
* @param htmlStr HTML字符串
* @returns 页面标题
*/
handlePageTitle(htmlStr: string): string;
/**
* 处理账户锁定状态
* @param htmlStr HTML字符串
*/
handleAccountLocked(htmlStr: string): void;
/**
* 刷新OAuth2令牌
*/
refreshOauth2Token(): Promise<void>;
/**
* 获取OAuth1令牌
* @param ticket 登录票据
* @returns OAuth1令牌和客户端
*/
getOauth1Token(ticket: string): Promise<IOauth1>;
/**
* 获取OAuth客户端
* @param consumer OAuth消费者信息
* @returns OAuth客户端
*/
getOauthClient(consumer: IOauth1Consumer): OAuth;
/**
* 交换OAuth2令牌
* @param oauth1 OAuth1令牌和客户端
*/
exchange(oauth1: IOauth1): Promise<void>;
/**
* 设置OAuth2令牌过期时间
* @param token OAuth2令牌
* @returns 设置了过期时间的OAuth2令牌
*/
setOauth2TokenExpiresAt(token: IOauth2Token): IOauth2Token;
}