API referansı

@thefinder/core/client

HTTP protokolünü saran, bağımlılıksız API istemcisi. Arayüz bunu kullanır; tarayıcıda, Node.js'te, Bun'da ya da başka bir framework'te (Vue, Svelte, vanilla JS) kendi arayüzünüzü yazmak için de kullanılabilir. createClient, TheFinderClient, ApiError ve encodeId @thefinder/react'tan da alınabilir.

import { createClient, ApiError } from "@thefinder/core/client";

const client = createClient({ endpoint: "/api/files" });
const { volumes } = await client.init();
const { entries } = await client.ls(volumes[0].root.id);

createClient(options) / new TheFinderClient(options)#

SeçenekTipVarsayılanAçıklama
endpointstring—Zorunlu. Göreli ("/api/files") ya da mutlak adres
headersRecord<string, string> \| () => Record<string, string>—Her isteğe eklenecek başlıklar. Fonksiyon verilirse her istekte yeniden çağrılır (yenilenen token için).
credentialsRequestCredentials"same-origin"Cross-origin API'de çerez göndermek için "include"
fetchtypeof fetchglobal fetchÖzel fetch. Verilirse yüklemeler de XHR yerine bu fetch ile yapılır (bayt düzeyinde ilerleme olmaz).

Değişiklik yapan istekler POST ile ve x-thefinder başlığıyla gönderilir.

Metotlar#

Her metot Promise döner ve hata durumunda ApiError fırlatır. Dönüş tipleri sunucudaki data alanıdır.

Gezinme#

MetotDöner
init()InitResult. Ayrıca sunucunun chunkSize değerini istemciye kaydeder; yüklemeden önce bir kez çağrılmalıdır.
ls(id, signal?){ cwd, entries }
tree(id){ entries }
parents(id){ entries }
info(ids){ entries }
size(ids){ size, files, dirs }
search(id, q, signal?){ entries, truncated }

Değiştirme#

MetotDöner
mkdir(id, name){ entry }
mkfile(id, name, content = ""){ entry }
rename(id, name){ entry, removed }
duplicate(ids){ added }
paste(ids, dst, cut, conflict = "rename"){ added, removed, skipped }. conflict: "rename" \| "overwrite" \| "skip"
rm(ids, permanent = false){ removed, trashed }
archive(ids, name?){ entry }
extract(id){ entry, skipped }

Çöp kutusu#

MetotDöner
trash(volume?){ entries }
restore(ids){ restored, removed }
purge(ids){ removed }
emptyTrash(volume?){ all: true }

İçerik#

MetotDöner
getContent(id){ content, bom, entry }
putContent(id, content){ entry }. Metnin üzerine yazar.
putBlob(id, blob, reason?){ entry }. İkili içerikle üzerine yazar; eski hali sürüm geçmişine girer.
saveBlobAs(dst, name, blob){ entry }. Yeni dosya olarak kaydeder; ad doluysa boş bir ad seçilir.

Sürüm geçmişi ve depolama#

MetotDöner
versions(id){ versions, entry } (entry dosya silinmişse null)
revert(id, vid){ entry, created }
rmVersions(id, vids?){ removed, freed }
stats(volume, signal?)StorageStats
cleanup(volume, request){ removed, freed }
transform(ids, options?, signal?){ results: TransformResult[] }
type CleanupRequest =
  | { target: "cache" }
  | { target: "versions"; mode: "all" | "orphaned" }
  | { target: "versions"; mode: "older"; days: number }
  | { target: "versions"; mode: "keep"; keep: number };

interface TransformOptions {
  format?: ImageFormat | "keep";  // varsayılan "keep"
  width?: number; height?: number;
  quality?: number;               // 1–100, varsayılan 80
  output?: "overwrite" | "copy";  // varsayılan "overwrite"
  skipLarger?: boolean;           // varsayılan true
  conflict?: "rename" | "overwrite";
  suffix?: string;                // varsayılan "optimized"
  dryRun?: boolean;               // sadece boyutları bildir, hiçbir şey yazma
}

Yükleme#

const entry = await client.upload(file, folderId, {
  relativePath: "fotoğraflar/2024", // klasör yüklemede
  conflict: "overwrite",             // varsayılan: yeni ad ("ad (2)")
  onProgress: ({ loaded, total }) => bar.value = loaded / total,
  signal: controller.signal,
});
SeçenekAçıklama
relativePathHedef altında oluşturulacak göreli klasör
conflict"rename" ya da "overwrite"
onProgress{ loaded, total }. Tarayıcıda XHR sayesinde parça içinde de güncellenir.
signalİptal edilince sunucudaki yarım yükleme de silinir ve ApiError("ABORTED") fırlatılır

Dosya chunkSize boyutunda parçalara bölünür; parçalar sırayla gönderilir. Yüklemeden önce init() çağrılmamışsa varsayılan 5 MiB kullanılır.

Adres üreticiler#

Bu metotlar istek atmaz, yalnızca adres üretir. <img src>, <a href> ya da <video src> içinde kullanılır.

MetotAçıklama
fileUrl(entry, download = false)Dosyanın kendisi. Adreste v=<mtime> bulunduğu için dosya değişince adres de değişir.
thumbUrl(entry, size)Küçük resim (sunucuda kapalıysa orijinal)
versionUrl(id, vid, download = false)Bir sürümün içeriği
downloadUrl(ids)Tek dosya ya da zip

Alt düzey#

MetotAçıklama
get<T>(cmd, params?, signal?)Herhangi bir komutu GET ile çağırır
post<T>(cmd, body, signal?)JSON nesnesi ya da FormData ile POST
endpointYapılandırılmış adres

ApiError#

try {
  await client.mkdir(id, "Raporlar");
} catch (e) {
  if (e instanceof ApiError && e.code === "EXISTS") { /* ... */ }
}
AlanAçıklama
codeSunucu hata kodu (liste) ya da istemci kodu: NETWORK, ABORTED, UPLOAD, UNKNOWN
messageSunucunun mesajı
statusHTTP durumu; ağ hatası ve iptalde 0

Diğer dışa aktarımlar#

Bu sayfa docs/api/tr/client.md dosyasından üretildi.