mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
import {
|
|
StorageProviderKind,
|
|
StorageInput,
|
|
StorageResult,
|
|
} from '../types';
|
|
|
|
import {uploadLocal, getLocal, deleteLocal, pingLocal} from './local';
|
|
import {deleteS3, getS3, pingS3, uploadS3} from "@/features/storages/providers/s3";
|
|
import {
|
|
deleteGoogleDrive,
|
|
getGoogleDrive,
|
|
pingGoogleDrive,
|
|
uploadGoogleDrive
|
|
} from "@/features/storages/providers/google-drive";
|
|
|
|
type ProviderHandler = {
|
|
upload: (config: any, input: StorageInput & { action: 'upload' }) => Promise<StorageResult>;
|
|
get: (config: any, input: StorageInput & { action: 'get' }) => Promise<StorageResult>;
|
|
delete: (config: any, input: StorageInput & { action: 'delete' }) => Promise<StorageResult>;
|
|
ping: (config: any, input: { action: 'ping' }) => Promise<StorageResult>;
|
|
};
|
|
|
|
const handlers: Record<StorageProviderKind, ProviderHandler> = {
|
|
local: {
|
|
upload: uploadLocal,
|
|
get: getLocal,
|
|
delete: deleteLocal,
|
|
ping: pingLocal,
|
|
},
|
|
s3: {
|
|
upload: uploadS3,
|
|
get: getS3,
|
|
delete: deleteS3,
|
|
ping: pingS3,
|
|
},
|
|
"google-drive": {
|
|
upload: uploadGoogleDrive,
|
|
get: getGoogleDrive,
|
|
delete: deleteGoogleDrive,
|
|
ping: pingGoogleDrive,
|
|
}
|
|
};
|
|
|
|
export async function dispatchViaProvider(
|
|
kind: StorageProviderKind,
|
|
config: any,
|
|
input: StorageInput,
|
|
): Promise<StorageResult> {
|
|
const provider = handlers[kind];
|
|
|
|
if (!provider) {
|
|
return {
|
|
success: false,
|
|
provider: kind,
|
|
error: `Unsupported storage provider: ${kind}`,
|
|
};
|
|
}
|
|
|
|
try {
|
|
return await provider[input.action](config, input as any);
|
|
} catch (err: any) {
|
|
return {
|
|
success: false,
|
|
provider: kind,
|
|
error: err.message || 'Storage provider error',
|
|
};
|
|
}
|
|
}
|