No dashboard. No client IDs. No environment variables. No redirect configuration.Protect a page:
import { getQuickIdentity, startQuickSignIn } from "@ave-id/sdk/client";const user = getQuickIdentity();if (!user) await startQuickSignIn();
Callback route — create a page at /ave/callback that does exactly one thing:
import { handleQuickCallback } from "@ave-id/sdk/client";await handleQuickCallback();
That’s it. Quick Ave derives a client ID from your origin, handles PKCE, stores the token locally, and redirects back to where the user was. Nothing to register.
Evaluating whether this is easier than Clerk or Auth0? It is — because there’s no dashboard step at all. Ship a working prototype in under 2 minutes, then upgrade to the full OIDC flow when you’re ready for refresh tokens, app branding, or confidential flows.
Convenience wrapper: calls finishQuickSignIn, then redirects the user to where they were before startQuickSignIn was called.
async function handleQuickCallback(options?: { issuer?: string; redirectUri?: string; // must match the redirectUri used in startQuickSignIn fallbackPath?: string; // where to go if no return-to is stored (default: "/")}): Promise<QuickIdentity | null>
interface QuickIdentity { userId: string; // Ave identity UUID handle?: string; // @handle displayName?: string; email?: string; avatarUrl?: string; /** * JWT access token (`access_token_jwt`) for Ave APIs. * Its audience is Ave's resource audience, not your app. Use `idToken` or * your own session for app API authentication. * Always verify server-side: check `iss`, `aud`, `exp`, and the JWT signature * against the JWKS endpoint before trusting claims. * The JWT payload always contains `quick: true` — Standard-only API * middleware can check for the absence of this claim to reject Quick tokens. * Upgrade to Standard Ave for confidential flows. */ token: string; /** * OIDC id_token — pass this to Convex (`convex.setAuth`) or any service * that validates OIDC identity. Only present when `openid` scope was * requested (the default). `aud` equals your Quick Ave clientId: * `"origin:https://yourapp.com"`. */ idToken?: string; expiresIn: number; // seconds until expiry receivedAt: number; // Unix ms when the token was stored}
For a full walkthrough including Convex wiring, session monitoring, and the upgrade path see the Quick Ave guide.