Commit Graph

5 Commits

Author SHA1 Message Date
saravanakumardb1
067a23449f feat(auth): SmartAuth admin-web — OAuth proxy, MFA settings, devices, passkeys, security dashboard
- Add 15 API proxy routes for SmartAuth endpoints (OAuth, MFA, devices, passkeys, security)
- Add MFA Settings page (/settings/security) with TOTP setup/verify/disable flow
- Add Device Management page (/settings/devices) with trust badges and revoke actions
- Add Passkey Management page (/settings/passkeys) with WebAuthn registration
- Add Admin Security Dashboard (/ops/security) with stats, provider distribution, login events
- Update login page with Google Sign-In button (env-gated) and MFA challenge flow
- Add sidebar nav links for new security pages
- Fix sidebar nav highlighting for nested routes (exact match for parent items)
- Add NEXT_PUBLIC_GOOGLE_CLIENT_ID to .env.example
2026-03-12 11:13:14 -07:00
saravanakumardb1
2c330387fc feat(auth): native SDK passkey + BLAuthUI Swift + Kotlin social/MFA
SmartAuth v2 SDK extensions for both Swift and Kotlin platform SDKs:

Swift (BLAuthClient.swift):
- Social login, MFA, passkeys, providers, devices, step-up, login history
- New types: BLMfaChallenge, BLTotpSetup, BLMfaStatus, BLAuthProvider, etc.
- BLAuthState: added .mfaRequired case

Swift (BLAuthUI.swift) — 4 reusable views:
- BLLoginView, BLMfaChallengeView, BLPasskeyView, BLStepUpSheet

Kotlin (BLAuthClient.kt):
- Social login, MFA, providers, devices, step-up, login history
- MFA challenge detection in login(), encodeMap() helper

Kotlin (BLPasskeyManager.kt) — Credential Manager passkey wrapper
Kotlin (BLAuthUI.kt) — 5 Compose screens matching Swift BLAuthUI
Kotlin build.gradle.kts — Credential Manager dependencies

Tests: Swift (6 methods), Kotlin (5 methods)
2026-03-12 10:55:32 -07:00
saravanakumardb1
78b942a105 fix(sdk): normalize API path convention — all SDK components now include /api prefix in paths 2026-03-02 09:10:19 -08:00
saravanakumardb1
b4be39888b fix(swift-sdk): remove productId prefix from BLAuthClient keychain keys
BLAuthClient stored tokens as '{productId}_access_token' but all app
wrappers use KeychainHelper.read(key: "access_token") — the bare key.
This caused a critical mismatch: after login, BlobService/LicenseService
could not find the token, and token migration from UserDefaults was invisible
to BLAuthClient.isAuthenticated.

The Keychain service name (bundleId) already namespaces per product,
making the productId prefix redundant. Now uses bare 'access_token' and
'refresh_token' keys matching existing app conventions.
2026-02-28 22:54:01 -08:00
saravanakumardb1
78000cdf6a feat(swift-sdk): add ByteLystPlatformSDK — shared Swift package for all iOS/watchOS/macOS apps
Extracts duplicated platform integration code from ChronoMind + LysnrAI into a
single Swift Package. Eliminates ~1,100+ lines of copied code per product app.

Components:
- BLPlatformConfig — product-specific configuration (productId, baseURL, bundleId)
- BLPlatformClient — generic HTTP client with auth injection, x-request-id, timeout
- BLKeychain — Keychain CRUD for secure token storage
- BLTelemetryClient — telemetry queue + batch flush (matches @bytelyst/telemetry-client)
- BLAuthClient — full auth operations (matches @bytelyst/auth-client)
- BLFeatureFlagClient — feature flag polling from platform-service /flags/poll
- BLSyncEngine — generic offline-first sync with delta pull + batch push

Platforms: iOS 17+, watchOS 10+, macOS 14+
2026-02-28 22:12:20 -08:00