Files
webstudio/apps/builder/app/shared/sync/singleplayer-client.ts

51 lines
1.3 KiB
TypeScript

import type { Project } from "@webstudio-is/project";
import type { Build } from "@webstudio-is/project-build";
import type { AuthPermit } from "@webstudio-is/trpc-interface/index.server";
import type { SyncStorage } from "~/shared/sync-client";
import type { ServerSyncState } from "./sync-stores";
import {
ServerSyncStorage,
enqueueProjectDetails,
stopPolling,
} from "./project-queue";
export type SingleplayerSyncClient = {
storages: SyncStorage[];
destroy(): void;
onDataLoaded(data: { id: Build["id"]; version: number }): void;
};
export const createSingleplayerSyncClient = ({
authPermit,
authToken,
initialServerState,
projectId,
}: {
authPermit: AuthPermit;
authToken: string | undefined;
initialServerState?: ServerSyncState;
projectId: Project["id"];
}): SingleplayerSyncClient => {
return {
storages:
authPermit === "view" || initialServerState === undefined
? []
: [new ServerSyncStorage(projectId, initialServerState)],
destroy() {
stopPolling();
},
onDataLoaded(data) {
if (authPermit === "view") {
return;
}
enqueueProjectDetails({
projectId,
buildId: data.id,
version: data.version,
authPermit,
authToken,
});
},
};
};