Skip to content

StorageAdapterPresignedUrl

Defined in: packages/core/src/media/types.ts:285

Base class for storage adapters.

All file storage adapters must extend this class to ensure consistent behavior in the admin panel. Adapters override methods to implement adapter-specific logic (e.g., different storage backends).

// In file-storage-convex/src/adapter/index.ts
import { BaseStorageAdapter } from "@vexcms/core";
export class ConvexStorageAdapter extends BaseStorageAdapter {
readonly name = "convex";
async generateUploadUrl(ctx) {
const url = await ctx.storage.generateUploadUrl();
return { url };
}
// Override other methods as needed...
}

new StorageAdapterPresignedUrl(): StorageAdapterPresignedUrl

StorageAdapterPresignedUrl

abstract admin: object

Defined in: packages/core/src/media/types.ts:293

softDelete: boolean

StorageAdapterPresignedUrlInterface.admin


abstract mediaCollections: MediaCollectionConfig<BaseFieldMeta, MediaCollectionMeta, string, string, ComponentHKT>[]

Defined in: packages/core/src/media/types.ts:291

Processed media collections ready for schema generation and admin panel.

The adapter validates, augments, and returns these collections. Each collection is tagged with meta.storageAdapterName equal to this adapter’s name. Core merges all collections from all adapters into VexConfig.mediaCollections — separate from user-defined collections.

StorageAdapterPresignedUrlInterface.mediaCollections


abstract readonly name: string

Defined in: packages/core/src/media/types.ts:287

Protocol name — tells the admin panel what the identifier of this storage adapter is.

StorageAdapterPresignedUrlInterface.name


abstract readonly type: "presigned-url"

Defined in: packages/core/src/media/types.ts:289

Protocol type — tells the admin panel how to upload files.

StorageAdapterPresignedUrlInterface.type

abstract createMediaDocument<TDataModel>(ctx, args): Promise<string>

Defined in: packages/core/src/media/types.ts:307

Creates a media document in Convex after the file is uploaded. Override in subclass for adapter-specific implementation.

TDataModel extends GenericDataModel = GenericDataModel

GenericMutationCtx<TDataModel>

Record<string, unknown>

string

string

string

string

number

string

Promise<string>

StorageAdapterPresignedUrlInterface.createMediaDocument


abstract deleteMedia<TDataModel>(ctx, args): Promise<boolean>

Defined in: packages/core/src/media/types.ts:324

Deletes a media document and its file from storage. Override in subclass for adapter-specific implementation.

TDataModel extends GenericDataModel = GenericDataModel

GenericMutationCtx<TDataModel>

string

string

boolean

Promise<boolean>

StorageAdapterPresignedUrlInterface.deleteMedia


abstract generateUploadUrl<TDataModel>(ctx): Promise<{ storageId?: string; url: string; }>

Defined in: packages/core/src/media/types.ts:299

Generates a URL to upload a file to. Override in subclass for adapter-specific implementation.

TDataModel extends GenericDataModel = GenericDataModel

GenericMutationCtx<TDataModel>

Promise<{ storageId?: string; url: string; }>

StorageAdapterPresignedUrlInterface.generateUploadUrl


abstract getUrl<TDataModel>(ctx, args): Promise<{ error?: undefined; url: string; } | { error: string; url?: undefined; }>

Defined in: packages/core/src/media/types.ts:337

Returns a URL for a media file. Override in subclass for adapter-specific implementation.

TDataModel extends GenericDataModel = GenericDataModel

GenericQueryCtx<TDataModel>

string

string

Promise<{ error?: undefined; url: string; } | { error: string; url?: undefined; }>

StorageAdapterPresignedUrlInterface.getUrl


abstract uploadFile(file, uploadUrl): Promise<{[key: string]: unknown; storageId: string; url?: string; }>

Defined in: packages/core/src/media/types.ts:362

Uploads a file to the storage backend and returns the storage ID.

This is a pure JS function that can be called from any framework (React, Next.js, Svelte, etc.) or even directly in the browser.

any

The file to upload

string

The presigned URL from generateUploadUrl

Promise<{[key: string]: unknown; storageId: string; url?: string; }>

Promise resolving to { storageId, url, … } with adapter-specific fields

// React component
const { storageId } = await adapter.uploadFile(file, uploadUrl);
await createMediaDocument({ storageId, ... });

StorageAdapterPresignedUrlInterface.uploadFile