ChatGPT-Next-Web/app/utils/cloud/index.ts

34 lines
789 B
TypeScript

import { createUpstashClient } from './upstash';
import { createWebDavClient } from './webdav';
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 interface SyncClient {
get: (key: string) => Promise<string>;
set: (key: string, value: string) => Promise<void>;
check: () => Promise<boolean>;
}
export function createSyncClient<T extends ProviderType>(
provider: T,
config: SyncClientConfig[T],
): SyncClient {
return SyncClients[provider](config as any) as any;
}