Path: blob/master/src/packages/sync-client/lib/project-client.ts
1503 views
import type {1ProjectClient as Client,2ProjectWebsocket,3} from "@cocalc/sync/client/types";4import connectToProject from "./connect-to-project";5import API from "./api";67export default class ProjectClient implements Client {8private websocketCache: { [project_id: string]: ProjectWebsocket } = {};9private apiCache: { [project_id: string]: API } = {};1011// TODO [ ]: will prob need to reuseInFlight websocket and api.1213async websocket(project_id: string): Promise<ProjectWebsocket> {14if (this.websocketCache[project_id] != null) {15return this.websocketCache[project_id];16}17const w = await connectToProject(project_id);18this.websocketCache[project_id] = w;19return w;20}2122async api(project_id: string): Promise<API> {23if (this.apiCache[project_id] != null) {24return this.apiCache[project_id];25}26const conn = await this.websocket(project_id);27this.apiCache[project_id] = new API(conn);28return this.apiCache[project_id];29}30}313233