Skip to main content

SDK Reference

@kyqu/client v0.2.0​

Zero-dependency JavaScript/TypeScript client for the Kyqu auth platform.

Installation​

npm install @kyqu/client

Exports​

import { KyquClient, KyquError } from "@kyqu/client";

KyquError​

class KyquError extends Error {
name: "KyquError";
status: number; // HTTP status code
data: Record<string, any>; // Full response body
}

KyquClient​

Constructor​

new KyquClient(options: KyquClientOptions)

KyquClientOptions​

PropertyTypeRequiredDescription
baseUrlstringYesRoot URL of Kyqu API
projectIdstringYesProject UUID from dashboard
publicKeystringYesPublic key (pk_...) from dashboard

Methods (32 total)​

getFields()​

Returns custom field definitions for building dynamic signup forms.

Returns: Promise<KyquFieldDef[]>

signup(input)​

Registers a new user. Custom field values as top-level keys.

Input: { email: string, password: string, name?: string, [key: string]: any } Returns: Promise<KyquSignupResult>

login(input)​

Authenticates a user. Include totpCode or backupCode for 2FA.

Input: { email: string, password: string, totpCode?: string, backupCode?: string } Returns: Promise<KyquLoginResult> Throws: KyquError with message: "TOTP_REQUIRED" (status 403) when 2FA is enabled and no code supplied.

logout(token)​

Revokes the given bearer token.

Returns: Promise<{ ok: boolean }>

getUser(token)​

Returns the user associated with the session token.

Returns: Promise<KyquUser>

updateMetadata(token, metadata)​

Update custom metadata fields for the authenticated user.

Input: token (bearer), metadata key-value object Returns: Promise<{ user: KyquUser }>

requestEmailVerification(email)​

Sends verification email.

Returns: Promise<{ ok: boolean }>

confirmEmailVerification(token)​

Confirms verification token.

Returns: Promise<{ user: KyquUser }>

requestPasswordReset(email)​

Initiates password reset.

Returns: Promise<{ ok: boolean }>

confirmPasswordReset(input)​

Confirms reset with token and new password.

Input: { token: string, password: string } Returns: Promise<{ user: KyquUser, session: KyquSession }>

changePassword(token, input)​

Changes password for the authenticated user.

Input: token (bearer), { currentPassword: string, newPassword: string } Returns: Promise<{ ok: boolean }> Note: Revokes all other active sessions on success.

deleteAccount(token, input)​

Permanently deletes the authenticated user's account. Requires password confirmation for security.

Input: token (bearer), { password: string } Returns: Promise<{ ok: boolean }> Note: Revokes all sessions. Irreversible.

requestMagicLink(email)​

Sends magic sign-in link.

Returns: Promise<{ ok: boolean }>

confirmMagicLink(token)​

Confirms magic link token via API (POST). Returns session directly.

Returns: Promise<{ user: KyquUser, session: KyquSession }>

exchangeSessionCode(sessionCode)​

Exchanges ?session_code=… from a browser magic-link redirect for a bearer session.

Returns: Promise<{ user: KyquUser, session: KyquSession }>

enrollTotp(token)​

Starts TOTP enrollment.

Returns: Promise<KyquTotpEnrollResult> (contains enrollmentUrl: string)

confirmTotp(token, code)​

Confirms TOTP enrollment with code from authenticator app.

Returns: Promise<KyquTotpConfirmResult> (contains backupCodes: string[])

disableTotp(token, code)​

Disables TOTP after verifying one last code.

Returns: Promise<{ ok: boolean }>

listSessions(token)​

Lists all active sessions for the user. Each entry indicates whether it's the current session.

Returns: Promise<KyquSessionInfo[]>

revokeSession(token, sessionId)​

Revokes a specific session by ID. Useful for "sign out from other devices."

Returns: Promise<{ ok: boolean }>

OAuth / Social Login​

getOAuthAuthorizeUrl(provider, redirectUrl = "")​

Returns the provider's authorization URL for browser redirect (synchronous, no network call).

Input: provider: "google" | "github", optional redirect URL Returns: string

getOAuthUser(token)​

Get user linked to an OAuth identity.

Returns: Promise<{ provider, providerId }>

Passkeys / WebAuthn​

getPasskeyRegistrationOptions(token)​

Get WebAuthn PublicKeyCredentialCreationOptions for registering a new passkey.

Returns: Promise<CreationOptions>

registerPasskey(token, credential, name = "")​

Store a new WebAuthn credential after browser creates it.

Input: credential (from navigator.credentials.create), optional name Returns: Promise<{ passkey }>

getPasskeyAuthenticationOptions(userId = null)​

Get WebAuthn assertion options for authenticating with a passkey.

Returns: Promise<AssertionOptions>

authenticateWithPasskey(assertion)​

Authenticate with a WebAuthn assertion. Returns session directly.

Input: assertion (from navigator.credentials.get) Returns: Promise<{ user: KyquUser, session: KyquSession }>

listPasskeys(token)​

List registered passkey credentials.

Returns: Promise<{ passkeys: KyquPasskeyInfo[] }>

deletePasskey(token, credentialId)​

Delete a passkey credential by ID.

Returns: Promise<{ ok: boolean }>

OIDC / ID Token​

getIdToken(token)​

Issue an RS256-signed OIDC ID token.

Returns: Promise<{ idToken: string }>

getOidcDiscovery()​

Fetch the OpenID Connect Discovery document.

Returns: Promise<OidcDiscovery>

getJwks()​

Fetch the JSON Web Key Set.

Returns: Promise<{ keys: JsonWebKey[] }>

Event Logs​

getLogs(token, filters = {})​

Query auth event logs.

Input: filters: { limit?, offset?, event? } Returns: Promise<{ logs: KyquLogEntry[], total: number }>

Auto-Refresh Session​

withAutoRefresh(session, options = {})​

Wraps a session token with automatic refresh before expiry.

Input: session: { token, expiresAt }, options: { marginSeconds?, onRefresh?, onError?, storage? } Returns: ManagedSession

The ManagedSession class provides:

class ManagedSession {
getToken(): string; // Returns current valid token
getSession(): KyquSession; // Returns current session info
destroy(): void; // Stop refresh timer and clear
}

Usage:

const managed = kyqu.withAutoRefresh(session, {
storage: localStorage, // Persists/restores across page reloads
marginSeconds: 60, // Refresh 60s before expiry
onRefresh: (newSession) => {},// Called when token refreshes
onError: (err) => {} // Called when refresh fails
});

const token = managed.getToken(); // Always fresh

Types​

interface KyquUser {
id: string;
projectId: string;
email: string;
name: string;
status: string;
emailVerifiedAt: string | null;
passwordResetRequired: boolean;
totpEnabled: boolean;
lockedUntil: string | null;
metadata: Record<string, any>;
createdAt: string;
}

interface KyquSession {
token: string;
expiresAt: string;
}

interface KyquSignupResult {
user: KyquUser;
session: KyquSession | null; // null when email verification required
verificationRequired: boolean;
verificationQueued: { expiresAt: string } | null;
}

interface KyquLoginResult {
user: KyquUser;
session: KyquSession;
}

interface KyquTotpEnrollResult {
enrollmentUrl: string; // otpauth:// URI
}

interface KyquTotpConfirmResult {
ok: boolean;
backupCodes: string[]; // 8 one-time codes
}

interface KyquFieldDef {
id: string;
name: string;
label: string;
fieldType: "text" | "number" | "boolean" | "date";
required: boolean;
defaultValue: string | null;
sortOrder: number;
}

interface KyquSessionInfo {
id: string;
isCurrent: boolean;
ipAddress: string | null;
userAgent: string | null;
createdAt: string;
expiresAt: string;
}

interface KyquPasskeyInfo {
id: string;
name: string;
createdAt: string;
lastUsedAt: string | null;
}

interface KyquLogEntry {
id: string;
event: string;
ipAddress: string | null;
userAgent: string | null;
metadata: Record<string, any>;
createdAt: string;
}

interface OidcDiscovery {
issuer: string;
authorization_endpoint: string;
token_endpoint: string;
jwks_uri: string;
id_token_signing_alg_values_supported: string[];
subject_types_supported: string[];
claims_supported: string[];
}

interface KyquClientOptions {
baseUrl: string;
projectId: string;
publicKey: string;
}

React Hooks (@kyqu/client/react)​

import { KyquProvider, useKyqu, useKyquUser, useKyquSession, useKyquLoading } from "@kyqu/client/react";

KyquProvider​

Wraps your app with auth state context. Restores session from storage on mount.

<KyquProvider client={kyquClient}>
<App />
</KyquProvider>

Props:

PropTypeRequiredDescription
clientKyquClientYesInitialized KyquClient instance
storageStorageNoCustom storage (defaults to localStorage)
storageKeystringNoKey for session storage (default "kyqu_session")

useKyqu()​

Returns the full auth context.

const { client, session, user, loading, login, signup, logout, applySession } = useKyqu();
ReturnTypeDescription
clientKyquClientThe client instance
sessionKyquSession | nullCurrent session or null
userKyquUser | nullCurrent user or null
loadingbooleanTrue while restoring session on mount
login(input) => PromiseLogs in and stores session
signup(input) => PromiseSigns up and optionally stores session
logout() => PromiseLogs out and clears session
applySession(result) => voidManually apply a login/signup result

useKyquUser()​

Shorthand for useKyqu().user.

Returns: KyquUser | null

useKyquSession()​

Shorthand for useKyqu().session.

Returns: KyquSession | null

useKyquLoading()​

Shorthand for useKyqu().loading.

Returns: boolean

Package Metadata​

FieldValue
Name@kyqu/client
Version0.2.0
LicenseMIT
Runtime depsNone
Module formatESM (src/index.js) + CJS (dist/index.cjs)
TypeScriptDeclarations in src/index.d.ts
React entrysrc/react.js (@kyqu/client/react)
Test runnernode:test