Configuration
Provider selection and storage extension points
Environment Setup
For all environment variables and provider credentials, use:
Provider Selection
The active provider is selected in src/config/app.ts:
Storage: {
STORAGE_PROVIDER: "firebase", // or "s3"
}Runtime Resolution
Storage routes resolve the provider at runtime from src/lib/storage/server.ts:
export async function getStorageProvider(): Promise<StorageProvider> {
switch (Config.Storage.STORAGE_PROVIDER) {
case "firebase":
return (await import("./providers/firebase")).firebaseStorageProvider;
case "s3":
return (await import("./providers/s3")).s3StorageProvider;
default:
throw new Error(`Unknown storage provider: ${Config.Storage.STORAGE_PROVIDER}`);
}
}Custom Provider Interface
You can implement custom storage providers by implementing the StorageProvider interface:
interface StorageProvider {
readonly name: string;
upload(options: UploadOptions): Promise<UploadResult>;
download(path: string): Promise<DownloadResult>;
getPublicUrl(path: string): string;
getSignedUrl(options: SignedUrlOptions): Promise<string>;
exists(path: string): Promise<boolean>;
getMetadata(path: string): Promise<FileMetadata>;
delete(path: string): Promise<void>;
}