Convex + Better Auth
API

Type Utilities

Type utilities for Better Auth

requireRunMutationCtx()

A type guard to ensure a given context object has a runMutation property. Requires a mutation context or action context. Will error if a query context is provided.

requireActionCtx()

A type guard to ensure the ctx is an action ctx. Will error if the provided ctx is not an action ctx.

Example usage

import { requireActionCtx } from "@convex-dev/better-auth/utils";
import { Resend } from "@convex-dev/resend";
import { components } from "./_generated/api";
import { type ActionCtx } from "./_generated/server";

export const resend = new Resend(components.resend);

export const createAuth = (
  ctx: ActionCtx,
  { optionsOnly } = { optionsOnly: false }
) =>
  betterAuth({
    baseURL: siteUrl,
    sendVerificationEmail: async ({ user, url }) => {
      // This function only requires a `runMutation` property on the ctx object,
      // but we'll make sure we have an action ctx because we know a network
      // request is being made, which requires an action ctx.
      await resend.sendEmail(requireActionCtx(ctx), {
        to: user.email,
        subject: "Verify your email",
        html: `<p>Click <a href="${url}">here</a> to verify your email</p>`,
      });
    },
  });