Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/chrisvander/crate. The future of cloud storage.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687import { api, unwrap, type FileEntry, type FileVersion } from "./api"import { restoreOrder } from "./restore"
export const actions = { create: (name: string, kind: FileEntry["kind"], parentId?: string) => async (signal: AbortSignal) => unwrap(await api.POST("/api/v1/files", { body: { name, kind, parentId }, signal })), rename: (file: FileEntry, name: string) => async (signal: AbortSignal) => unwrap( await api.PUT("/api/v1/files/{id}", { params: { path: { id: file.id } }, body: { revision: file.revision, name }, signal, }), ), duplicate: (file: FileEntry, name: string) => async (signal: AbortSignal) => unwrap( await api.POST("/api/v1/files/{id}/duplicate", { params: { path: { id: file.id } }, body: { revision: file.revision, name, parentId: file.parentId }, signal, }), ), trash: (file: FileEntry) => async (signal: AbortSignal) => unwrap( await api.POST("/api/v1/files/{id}/trash", { params: { path: { id: file.id } }, body: { revision: file.revision }, signal, }), ), restore: (file: FileEntry) => async (signal: AbortSignal) => unwrap( await api.POST("/api/v1/files/{id}/restore", { params: { path: { id: file.id } }, body: { revision: file.revision }, signal, }), ), restoreMany: (files: FileEntry[]) => async (signal: AbortSignal) => { const ordered = await restoreOrder(files, async (id) => { const result = await api.GET("/api/v1/files/{id}", { params: { path: { id } }, signal, }) return result.response.status === 404 ? undefined : unwrap(result) }) for (const file of ordered) await actions.restore(file)(signal) }, upload: (files: File[], parentId?: string) => async (signal: AbortSignal) => { for (const file of files) unwrap( await api.POST("/api/v1/files/upload", { params: { query: { name: file.name, parentId, mimeType: file.type || "application/octet-stream" }, }, body: file, bodySerializer: (body) => body, headers: { "Content-Type": "application/octet-stream" }, signal, }), ) }, replace: (entry: FileEntry, file: File) => async (signal: AbortSignal) => unwrap( await api.PUT("/api/v1/files/{id}/content", { params: { path: { id: entry.id }, query: { revision: entry.revision, mimeType: file.type || "application/octet-stream" }, }, body: file, bodySerializer: (body) => body, headers: { "Content-Type": "application/octet-stream" }, signal, }), ), restoreVersion: (file: FileEntry, version: FileVersion) => async (signal: AbortSignal) => unwrap( await api.POST("/api/v1/files/{id}/versions/{versionId}/restore", { params: { path: { id: file.id, versionId: version.id } }, body: { revision: file.revision }, signal, }), ),}export type Command = (signal: AbortSignal) => Promise<unknown>