Skip to content

PairPasskey.js

Viames Marino edited this page Feb 24, 2026 · 1 revision

Pair framework: PairPasskey.js

/assets/PairPasskey.js is the browser helper for Passkey/WebAuthn flows in Pair.

It handles:

  • fetching login/registration options from backend
  • calling navigator.credentials.create/get
  • serializing credentials to JSON-safe payloads
  • posting verification payloads to API endpoints
  • listing and revoking registered passkeys

Installation

<script src="/assets/PairPasskey.js" defer></script>

Global object:

window.PairPasskey

Requirements

  • secure context (https, or localhost where applicable)
  • PublicKeyCredential support
  • backend endpoints compatible with PasskeyController

High-level methods

PairPasskey.login(options)

Performs full login flow:

  1. beginLogin() -> fetch publicKey options
  2. getAssertion() -> call WebAuthn API
  3. finishLogin() -> verify on backend

PairPasskey.register(options)

Performs full registration flow:

  1. beginRegistration()
  2. createCredential()
  3. finishRegistration()

PairPasskey.list(options)

Calls GET /api/passkey/list.

PairPasskey.revoke({ id, ... })

Calls DELETE /api/passkey/revoke/{id}.

Lower-level methods

  • beginLogin(), finishLogin()
  • beginRegistration(), finishRegistration()
  • createCredential(), getAssertion()
  • prepareCreationOptions(), prepareRequestOptions()
  • serializeCredential()
  • requestJson(), readJsonResponse()
  • isSupported(), ensureSupported()
  • getDefaultTimeZone()

Quick example

// login
const loginResult = await PairPasskey.login({
  optionsUrl: "/api/passkey/login/options",
  verifyUrl: "/api/passkey/login/verify",
  username: "john"
});

// register (authenticated session required)
const registrationResult = await PairPasskey.register({
  optionsUrl: "/api/passkey/register/options?sid=YOUR_SESSION_ID",
  verifyUrl: "/api/passkey/register/verify?sid=YOUR_SESSION_ID",
  label: "My MacBook"
});

Error behavior

requestJson() throws Error for non-2xx responses and adds:

  • error.status
  • error.payload

Notes

  • isSupported() checks secure context and required credential APIs.
  • Credential binary fields are converted with base64url helpers.
  • Time zone defaults to browser zone (fallback UTC) when verifying login.

See also: PasskeyController, PasskeyAuth, PWA, PairPush.js.

Clone this wiki locally