@opendatalabs/vana-sdk
Version:
A TypeScript library for interacting with Vana Network smart contracts.
67 lines (66 loc) • 2.79 kB
TypeScript
/**
* Storage API for Vana SDK
*
* Provides unified interface for different storage providers
* to upload, download, and manage user data files.
*
* ## Storage Provider Decision Tree
*
* Choose your storage provider based on your needs:
*
* **Default backend hosted by ODL?**
* - ✅ Use `VanaStorage` - storage.vana.org with Web3Signed auth.
*
* **Need full CRUD operations and metadata?**
* - ✅ Use `PinataStorage` - Managed IPFS with listing, deletion, and rich metadata
*
* **Want to use your own IPFS infrastructure?**
* - ✅ Use `IpfsStorage.forInfura()` - Connect to Infura IPFS service
* - ✅ Use `IpfsStorage.forLocalNode()` - Connect to local IPFS node
* - ✅ Use `new IpfsStorage()` - Connect to any IPFS-compatible service
*
* **Want flexible callback-based storage?**
* - ✅ Use `CallbackStorage` - Implement storage via custom callbacks (HTTP, WebSocket, etc.)
*
* **Need Google Drive integration?**
* - ✅ Use `GoogleDriveStorage` - Direct Google Drive API with folder management
*
* @example
* ```typescript
* // Managed IPFS with full features
* const pinata = new PinataStorage({ jwt: "your-jwt" });
*
* // Standard IPFS with Infura
* const ipfs = IpfsStorage.forInfura({ projectId: "...", projectSecret: "..." });
*
* // Callback-based storage (flexible)
* const storage = new CallbackStorage({
* async upload(blob, filename) {
* // Your custom upload logic
* const response = await fetch('/api/upload', { method: 'POST', body: blob });
* const data = await response.json();
* return { url: data.url, size: blob.size, contentType: blob.type };
* },
* async download(identifier) {
* // Your custom download logic
* const response = await fetch(`/api/download/${identifier}`);
* return response.blob();
* }
* });
* ```
*/
export type { StorageProvider, StorageUploadResult, StorageFile, StorageListOptions, StorageProviderConfig, } from "../types/storage";
export { StorageError } from "../types/storage";
export { createVanaStorageProvider } from "./default";
export type { VanaStorageProviderOptions } from "./default";
export { R2Storage } from "./providers/r2";
export type { R2Config } from "./providers/r2";
export { VanaStorage } from "./providers/vana-storage";
export type { VanaStorageConfig, VanaStorageSigner, } from "./providers/vana-storage";
export { GoogleDriveStorage } from "./providers/google-drive";
export { DropboxStorage } from "./providers/dropbox";
export { IpfsStorage } from "./providers/ipfs";
export { PinataStorage } from "./providers/pinata";
export { CallbackStorage } from "./providers/callback-storage";
export { StorageManager } from "./manager";
export type { StorageCallbacks, StorageDownloadOptions, StorageListResult, } from "../types/config";