import type { FileListObject, FileMeta } from "media"; import type { FileBody, FileUploadPayload } from "media/storage/Storage"; import type { s } from "core/object/schema"; const SYMBOL = Symbol.for("bknd:storage"); export abstract class StorageAdapter { constructor() { this[SYMBOL] = true; } /** * This is a helper function to manage Connection classes * coming from different places * @param conn */ static isAdapter(conn: unknown): conn is StorageAdapter { if (!conn) return false; return conn[SYMBOL] === true; } /** * The unique name of the storage adapter */ abstract getName(): string; // @todo: method requires limit/offset parameters abstract listObjects(prefix?: string): Promise; abstract putObject(key: string, body: FileBody): Promise; abstract deleteObject(key: string): Promise; abstract objectExists(key: string): Promise; abstract getObject(key: string, headers: Headers): Promise; abstract getObjectUrl(key: string): string; abstract getObjectMeta(key: string): Promise; abstract getSchema(): s.Schema | undefined; abstract toJSON(secrets?: boolean): any; }