import { CombinedError, Exchange } from "urql"; import { RequestHeaderAuthorizationMode } from "./requestInterceptor.js"; import { i18n } from 'i18next'; export interface AuthExchangeOpts { store: { /** * 获取需要的数据 * @returns */ getState: () => { token: string; tenantId: string; refreshToken: string; }; /** * 更新token后外部可获取处理 * @param token * @returns */ setStateToken: (token: string) => void; /** * 获取i18n实例 */ getI18n?: () => i18n; }; /** * 添加额外的headers */ appendHeaders?: () => Record; /** * 签名模式 */ headerMode?: RequestHeaderAuthorizationMode; /** * 提前多久刷新token默认0 * 单位是毫秒 */ beforeRefreshTime?: number; /** * token刷新api */ refreshApi: string; /** * 登陆地址 */ login?: string; /** * 登陆地址记录当前路由key * 默认值:redirect */ loginRedirectKey?: string; /** * 在header上扩展租户id的key 兼容旧版本 */ tenantIdExtendKeys?: string[]; /** * 异常处理 * @param error * @returns */ error?: (error: CombinedError, errStr?: string, traceId?: string) => boolean; /** * 异常追踪id的配置 */ errTraceId?: { /** * 是否显示错误traceId */ isShow: boolean; /** * response.status * 默认过滤掉200状态码 如有需要的请自行添加[200,400,...] */ exclusionStatus?: number[]; }; } /** * 身份验证相关的exchange * @param handler * @returns */ export declare function authExchange(handler: AuthExchangeOpts): Exchange; export interface SubExchangeOpts { /** * 链接socket的地址 */ url: string; /** * 添加额外的headers */ appendHeaders?: () => Record; store: { /** * 获取需要的数据 * @returns */ getState: () => { token: string; tenantId: string; appCode?: string; deviceId?: string; }; }; } /** * 订阅相关的exchange * @param handler * @returns */ export declare function subExchange(handler: SubExchangeOpts): Exchange;