Skip to content

mediaApi

mediaApi<TDataModel, Visibility>(__namedParameters): object

Defined in: packages/core/src/media/api/server.ts:38

Registers getUrl as a convex query endpoint. Registers generateUploadUrl, createMediaDocument, and deleteMedia as Convex mutation endpoints.

Call in the user’s convex/vex/media.ts. The factory wraps the server functions in mutation() with v.args() schemas so Convex exposes them at api.vex.media.generateUploadUrl, api.vex.media.createMediaDocument, etc.

vexConvexApi.media.generateUploadUrl, vexConvexApi.media.createMediaDocument, etc. in @vexcms/core/src/convex/index.ts point at these paths.

TDataModel extends GenericDataModel = GenericDataModel

Visibility extends FunctionVisibility = "public"

VexConfig

The user’s resolved VexConfig.

(ctx) => Promise<VexApiAuth | undefined>

Server-side resolver for the current caller: receives the handler’s ctx and returns { user, organization? } (or undefined when unauthenticated). Called once per request, and only when config.access is configured. Never exposed to clients.

MutationBuilder<TDataModel, Visibility>

Convex mutation builder from _generated/server (or an internal builder to keep endpoints private).

QueryBuilder<TDataModel, Visibility>

Convex query builder from _generated/server (or an internal builder to keep endpoints private).

object

Registered getUrl Convex query, generateUploadUrl / createMediaDocument / deleteMedia Convex mutations.

createMediaDocument: RegisteredMutation<Visibility, { adapter: string; adapterFields?: any; alt?: string; collectionSlug: string; filename: string; mimeType: string; size: number; storageId: string; }, Promise<string>>

deleteMedia: RegisteredMutation<Visibility, { adapter: string; mediaId: string; softDelete?: boolean; }, Promise<boolean>>

generateUploadUrl: RegisteredMutation<Visibility, { adapter: string; collection: string; }, Promise<{ url: string; }>>

getUrl: RegisteredQuery<Visibility, { adapter: string; mediaId: string; }, Promise<GetUrlReturn>>

apps/test/convex/vex/media.ts
import { createGetAuth } from "@vexcms/better-auth"
import { mediaApi } from "@vexcms/core/convex";
import { mutation, query } from "../_generated/server";
import config from "../../src/vex.config";
export const { getUrl, generateUploadUrl, createMediaDocument, deleteMedia } = mediaApi({ config, query, mutation, getAuth: createGetAuth({...}) });