@simplepasskey/browser
v0.3.3
Published
Browser SDK for SimplePasskey — passkey authentication as a service
Maintainers
Readme
@simplepasskey/browser
Browser SDK for SimplePasskey — passkey authentication as a service.
Install
npm install @simplepasskey/browser @simplewebauthn/browserUsage
import { SimplePasskey } from '@simplepasskey/browser';
const auth = new SimplePasskey({ clientId: 'your-client-id' });
// Register a new user
const { jwt, userId } = await auth.register({ displayName: 'Sam' });
// Sign in
const { jwt, userId } = await auth.signIn();
// Check auth state
if (auth.isAuthenticated()) {
console.log('Logged in as', auth.getSession().userId);
}
// Auto-refresh on 401
const resp = await auth.fetch('/api/protected-endpoint');
// Listen for auth changes
auth.onAuthChange((session) => {
if (session) console.log('Signed in');
else console.log('Signed out');
});
// Logout
await auth.logout();API
new SimplePasskey({ clientId, baseUrl?, autoRefresh? })
Create an instance. baseUrl defaults to https://api.simplepasskey.com. autoRefresh defaults to true.
auth.register({ displayName? }) → { jwt, userId }
Register a new passkey. Prompts the user's authenticator.
auth.signIn(options?) → { jwt, userId }
Authenticate with an existing passkey. Pass { useBrowserAutofill: true } to use conditional UI (autofill) instead of a modal.
auth.refresh() → { jwt }
Refresh an expired JWT using the HttpOnly refresh token cookie.
auth.logout()
Clear the session and invalidate the refresh token.
auth.getSession() → { jwt, userId, isExpired }
Get current session state.
auth.isAuthenticated() → boolean
Check if the user has a valid (non-expired) JWT.
auth.fetch(url, options?) → Response
Fetch with automatic JWT auth and 401 auto-refresh.
auth.onAuthChange(callback) → () => void
Subscribe to auth state changes. Returns an unsubscribe function.
auth.ready → Promise<Session>
A promise that resolves once auto-refresh on initialization is complete. Use await auth.ready to wait for session restoration.
Session Restoration
The SDK automatically refreshes expired JWTs on initialization:
const auth = new SimplePasskey({ clientId: 'your-client-id' });
// Wait for session restoration
const session = await auth.ready;
if (session.jwt) {
console.log('Welcome back', session.userId);
} else {
// Show login UI
}Disable with autoRefresh: false if you handle refresh yourself.
Conditional UI (Autofill)
For a seamless sign-in experience, use browser autofill instead of a modal:
<input type="text" autocomplete="webauthn" placeholder="Sign in" />// Call early on page load — the passkey appears in the autofill dropdown
const { jwt, userId } = await auth.signIn({ useBrowserAutofill: true });