index.ts 807 B

12345678910111213141516171819202122232425262728293031323334
  1. import { createWebDavClient } from "./webdav";
  2. import { createUpstashClient } from "./upstash";
  3. import { SyncStore } from "@/app/store/sync";
  4. export enum ProviderType {
  5. WebDAV = "webdav",
  6. UpStash = "upstash",
  7. }
  8. export const SyncClients = {
  9. [ProviderType.UpStash]: createUpstashClient,
  10. [ProviderType.WebDAV]: createWebDavClient,
  11. } as const;
  12. type SyncClientConfig = {
  13. [K in keyof typeof SyncClients]: (typeof SyncClients)[K] extends (
  14. _: infer C,
  15. ) => any
  16. ? C
  17. : never;
  18. };
  19. export type SyncClient = {
  20. get: (key: string) => Promise<string>;
  21. set: (key: string, value: string) => Promise<void>;
  22. check: () => Promise<boolean>;
  23. };
  24. export function createSyncClient<T extends ProviderType>(
  25. provider: T,
  26. store: SyncStore,
  27. ): SyncClient {
  28. return SyncClients[provider](store);
  29. }