Skip to main content

Server API

Reference for the published server caller, token exchange, and user projection helper.

Imports

Inside Nuxt server code:

ts
import { serverConvex } from '#convex/server'

Outside Nuxt aliases:

ts
import { serverConvex } from '@lupinum/better-convex-nuxt/server'

serverConvex

ts
serverConvex(event: H3Event, options?: ServerConvexOptions): ServerConvexCaller

Options:

ts
type ServerConvexOptions =
  | {
      auth?: 'required' | 'optional' | 'none'
      authToken?: never
      credential?: never
    }
  | {
      auth?: never
      authToken: string
      credential?: never
    }
  | {
      auth?: never
      authToken?: never
      credential: { type: 'cookie'; value: string }
    }

authToken accepts an already-issued Convex JWT. credential accepts a Better Auth cookie header. Raw Better Auth session tokens are not a public bearer credential. Both explicit-principal forms imply required authentication, so do not add a redundant auth: 'required' field.

The caller exposes:

ts
getToken(): Promise<string | null>
query(query, ...args: OptionalRestArgs<Query>): Promise<Result>
mutation(mutation, ...args: OptionalRestArgs<Mutation>): Promise<Result>
action(action, ...args: OptionalRestArgs<Action>): Promise<Result>

No-argument Convex functions omit the artificial {} argument. Functions with declared arguments still require their generated argument object.

Cookie exchange remains request-bound: use serverConvex(event, { credential: { type: 'cookie', value: cookieHeader } }). The package does not expose a raw cookie-to-token helper because a request-less exchange cannot preserve the trusted client identity used for rate-limit isolation.

createUserProjectionTriggers

Import inside Convex code:

ts
import { createUserProjectionTriggers } from '@lupinum/better-convex-nuxt/convex-auth'

Options: table, index, optional authIdField, createDoc, optional patchDoc, optional rebuildDoc.

Returns user onCreate, onUpdate, onDelete, and rebuild handlers for a derived projection. Better Auth remains canonical.