Production Best Practices
Security Checklist
1. HTTPS
Always use HTTPS when communicating with the Kyqu API. The client SDK uses fetch and respects the protocol of the baseUrl.
2. Session Token Storage
Store bearer tokens securely:
- Web apps: Use
HttpOnlycookies if you have a backend, or securelocalStoragewith proper CSP headers - Mobile apps: Use the platform's secure keychain (iOS Keychain, Android Keystore)
- Node.js/Bun/Deno: Keep tokens in memory or environment variables — never log them
3. Token Validation
Validate the user's session on app startup:
try {
const user = await kyqu.getUser(token);
// User is authenticated
} catch {
// Token expired or revoked — redirect to login
}
4. Handle TOTP 2FA
Always handle the TOTP_REQUIRED error in your login flow:
try {
const { user, session } = await kyqu.login({ email, password });
} catch (err) {
if (err.status === 403 && err.data?.error === "TOTP_REQUIRED") {
// Prompt user for their 2FA code
const { user, session } = await kyqu.login({ email, password, totpCode });
}
}
5. Verify Webhook Signatures
If your app receives Kyqu webhooks, verify the HMAC-SHA256 signature:
import { createHmac } from "node:crypto";
function verifyWebhookSignature(payload, signature, secret) {
const expected = createHmac("sha256", secret)
.update(JSON.stringify(payload))
.digest("hex");
return `sha256=${expected}` === signature;
}
6. Rate Limiting
Kyqu applies rate limits on credential endpoints. Handle 429 Too Many Requests responses gracefully in your integration.
7. Monitor Webhook Events
Subscribe to key auth events to keep your systems in sync:
| Event | Action |
|---|---|
user.suspended | Revoke access in your app |
user.reactivated | Restore access |
user.password_reset | Invalidate active sessions |
user.totp_enabled / user.totp_disabled | Update 2FA status display |
8. Use Auto-Refresh
Wrap sessions with withAutoRefresh() to avoid expired token errors:
const managed = kyqu.withAutoRefresh(session, {
marginSeconds: 60,
onError: () => redirectToLogin()
});
9. CORS Configuration
For browser-based integrations, configure allowedOrigins in your project's auth settings to restrict which origins can call the Kyqu API.