import { createWebDavClient } from "./webdav"; import { createUpstashClient } from "./upstash"; import { SyncStore } from "@/app/store/sync"; export enum ProviderType { WebDAV = "webdav", UpStash = "upstash", } export const SyncClients = { [ProviderType.UpStash]: createUpstashClient, [ProviderType.WebDAV]: createWebDavClient, } as const; type SyncClientConfig = { [K in keyof typeof SyncClients]: (typeof SyncClients)[K] extends ( _: infer C, ) => any ? C : never; }; export type SyncClient = { get: (key: string) => Promise; set: (key: string, value: string) => Promise; check: () => Promise; }; export function createSyncClient( provider: T, store: SyncStore, ): SyncClient { return SyncClients[provider](store); }