Spaces:
Build error
Build error
| import { STORAGE_KEY } from "@/app/constant"; | |
| import { SyncStore } from "@/app/store/sync"; | |
| import { corsFetch } from "../cors"; | |
| export type WebDAVConfig = SyncStore["webdav"]; | |
| export type WebDavClient = ReturnType<typeof createWebDavClient>; | |
| export function createWebDavClient(store: SyncStore) { | |
| const folder = STORAGE_KEY; | |
| const fileName = `${folder}/backup.json`; | |
| const config = store.webdav; | |
| const proxyUrl = | |
| store.useProxy && store.proxyUrl.length > 0 ? store.proxyUrl : undefined; | |
| return { | |
| async check() { | |
| try { | |
| const res = await corsFetch(this.path(folder), { | |
| method: "MKCOL", | |
| headers: this.headers(), | |
| proxyUrl, | |
| }); | |
| console.log("[WebDav] check", res.status, res.statusText); | |
| return [201, 200, 404, 301, 302, 307, 308].includes(res.status); | |
| } catch (e) { | |
| console.error("[WebDav] failed to check", e); | |
| } | |
| return false; | |
| }, | |
| async get(key: string) { | |
| const res = await corsFetch(this.path(fileName), { | |
| method: "GET", | |
| headers: this.headers(), | |
| proxyUrl, | |
| }); | |
| console.log("[WebDav] get key = ", key, res.status, res.statusText); | |
| return await res.text(); | |
| }, | |
| async set(key: string, value: string) { | |
| const res = await corsFetch(this.path(fileName), { | |
| method: "PUT", | |
| headers: this.headers(), | |
| body: value, | |
| proxyUrl, | |
| }); | |
| console.log("[WebDav] set key = ", key, res.status, res.statusText); | |
| }, | |
| headers() { | |
| const auth = btoa(config.username + ":" + config.password); | |
| return { | |
| authorization: `Basic ${auth}`, | |
| }; | |
| }, | |
| path(path: string) { | |
| let url = config.endpoint; | |
| if (!url.endsWith("/")) { | |
| url += "/"; | |
| } | |
| if (path.startsWith("/")) { | |
| path = path.slice(1); | |
| } | |
| return url + path; | |
| }, | |
| }; | |
| } | |