import { ApiError } from './api.client'; import { CloudtApiClient } from './cloudt-api.client'; import { GssApiClient } from './gss-api.client'; import { WebsocketClient, WebsocketOptions } from './ws.client'; export type HeaderProcessor = () => object; export type ErrorHandler = (error: ApiError) => void; export class ApiClientFactory { /** * 使用 GSS Token 请求其他 API */ public gss: GssApiClient; /** * 使用筑联 Token 请求实体平台 API */ public entity: GssApiClient; /** * 通过网关使用 GSS Token 请求 CloudT API */ public cloudt: CloudtApiClient; /** * 使用 cookie 请求 CloudT API */ public cloudtRaw: CloudtApiClient; /** * 使用 GSS Token 请求数据中心 API */ public datahub: GssApiClient; /** * 菜单和文章管理 */ public appPlatform: GssApiClient; public websocket: WebsocketClient; /** * 使用筑联 Token 请求视频的数据 API */ public surveillance: GssApiClient; /** * 使用筑联 Token 请求基坑监测系统的数据 API */ public foundationPit: GssApiClient; /** * 使用筑联 Token 请求新的迁移接口数据 API */ public gssApi: GssApiClient; /** * 使用 GSS Token 请求新的迁移接口数据 API */ public gssParent: GssApiClient; /** * 使用筑联 Token 请求新的改造,主要针对/smart/api/menu接口 */ public entityMenu: GssApiClient; constructor({ gssOptions, cloudtOptions, cloudtRawOptions, datahubOptions, entityOptions, websocketOptions, surveOptions, foundationPitOptions, gssApiOptions, gssParentOptions, entityMenuOptions }: FactoryClientOptions) { this.gss = new GssApiClient(gssOptions); this.cloudt = new CloudtApiClient(cloudtOptions); this.cloudtRaw = new CloudtApiClient(cloudtRawOptions); this.datahub = new GssApiClient(datahubOptions); this.entity = new GssApiClient(entityOptions); this.websocket = new WebsocketClient(websocketOptions); this.surveillance = new GssApiClient(surveOptions); this.appPlatform = new GssApiClient(entityOptions); // TODO: 根据需要分离 entity 和 appPlatform 选项 this.foundationPit = new GssApiClient(foundationPitOptions); this.gssApi = new GssApiClient(gssApiOptions); this.gssParent = new GssApiClient(gssParentOptions); this.entityMenu = new GssApiClient(entityMenuOptions); } } export interface FactoryClientOptions { gssOptions: ClientOptions; cloudtOptions: ClientOptions; cloudtRawOptions: ClientOptions; datahubOptions: ClientOptions; entityOptions: ClientOptions; websocketOptions: WebsocketOptions; surveOptions: ClientOptions; foundationPitOptions: ClientOptions; gssApiOptions: ClientOptions; gssParentOptions?: ClientOptions; entityMenuOptions?: ClientOptions; } export interface ClientOptions { baseUrl: string; headerProcessor: HeaderProcessor; errorHandler: ErrorHandler; }