mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-28 15:46:58 +09:00
51 lines
1.3 KiB
TypeScript
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,
|
|
});
|
|
},
|
|
};
|
|
};
|