saravanakumardb1
9bb322113a
feat(native-sdks): add Keychain/SecureStore key derivation to BLFieldEncrypt
...
- Swift: getOrCreateKey(service:account:), loadKey(), deleteKey()
- Generates random AES-256 key, persists as hex in BLKeychain
- Subsequent calls return the same key for stable per-device DEK
- Kotlin: getOrCreateKey(store:account:), loadKey(), deleteKey()
- Generates random AES-256 key, persists as hex in BLSecureStore
- Uses EncryptedSharedPreferences for at-rest protection
- All existing tests still pass (21/21 Kotlin)
2026-03-21 11:10:02 -07:00
saravanakumardb1
ee762b4612
feat(native-sdks): add BLFieldEncrypt to Swift + Kotlin platform SDKs
...
- Swift: BLFieldEncrypt.swift + BLFieldEncryptTests.swift (22 tests)
- CryptoKit AES-256-GCM, BLEncryptedField Codable struct
- encrypt/decrypt, AAD support, generateKey, keyFromHex, isEncrypted
- Data hex helpers (hexString, init?(hexString:))
- Kotlin: BLFieldEncrypt.kt + BLFieldEncryptTest.kt (21 tests)
- javax.crypto AES-256-GCM, BLEncryptedField data class
- encrypt/decrypt, AAD support, generateKey, keyFromHex, isEncrypted
- ByteArray/String hex extension functions
- Wire-compatible: same EncryptedField JSON structure as @bytelyst/field-encrypt (TS)
- { __encrypted: true, v: 1, alg: 'aes-256-gcm', ct, iv, tag, dekId }
- All hex-encoded, 12-byte IV, 16-byte auth tag
- Fix: ByteLystPlatform.kt getString() → read() (pre-existing compile error)
2026-03-21 10:58:02 -07:00
saravanakumardb1
6856d23a2e
fix(swift-sdk): resolve BLAuditLogger + BLCrashReporter build errors in ByteLystPlatform
...
- BLAuditLogger is an enum (static API) — cannot be constructed; use .Type reference + configure()
- BLCrashReporter is @MainActor — defer construction to start() via Task { @MainActor }
2026-03-20 23:28:47 -07:00
saravanakumardb1
933390e89b
feat(swift-sdk): add ByteLystPlatform unified entry point + 5 new test files (4.1)
...
New source:
- ByteLystPlatform.swift — unified entry point wiring all services
(config, client, telemetry, flags, killSwitch, crashReporter, keychain, auditLog, auth)
- BLKeychainAccessor — convenience wrapper binding BLKeychain to a bundleId
- start(userId:) / stop() lifecycle for telemetry + flags + killSwitch
New tests (5 files, ~25 test cases):
- ByteLystPlatformTests — init, start/stop, idempotency, keychain accessor
- BLPlatformConfigTests — default + custom init
- BLKillSwitchClientTests — default state, reset
- BLFeatureFlagClientTests — empty flags, unknown key, stop
- BLTelemetryClientTests — installId stability, session rotation, track/flush
Also: add .build/ and .swiftpm/ to .gitignore
2026-03-19 21:05:58 -07:00
saravanakumardb1
c9e58505a2
chore: gitignore swift-platform-sdk build artifacts
2026-03-19 17:01:52 -07:00
saravanakumardb1
6b63fda434
fix(kotlin-sdk): fix compile errors in kotlin-platform-sdk core components
...
- Fix MapSerializer/serializer imports in BLAuthClient, BLBlobClient, BLLicenseClient
- Add material-icons-extended dependency to build.gradle.kts
- Move 13 uncompiled files (UI, diagnostics, extended) to _deferred_ui/
(SurveyUI, BroadcastUI, BLAuthUI, DiagnosticsClient, NetworkInterceptor,
BreadcrumbTrail, DeviceStateCollector, DiagnosticsTypes, BLSurveyClient,
BLBroadcastClient, BLFeedbackClient, BLPasskeyManager, DeepLinkRouter)
- Move 2 broken test files to _deferred_ui/
- Core SDK compiles: 38/39 tests pass
- Unblocks all Android app builds (MindLyst, JarvisJr, LysnrAI, ChronoMind)
2026-03-19 17:01:34 -07:00
saravanakumardb1
96866dcaf6
fix(swift-sdk): add buildRequest, BLPlatformError, fix SDK compile errors for iOS 26
2026-03-19 14:22:18 -07:00
saravanakumardb1
b8f22be677
fix(auth): SDK device/login-events response wrappers + correct API paths
...
- Swift + Kotlin SDKs: listDevices() now unwraps { devices: [...] }
- Swift + Kotlin SDKs: getLoginHistory() now unwraps { events: [...] }
- Swift + Kotlin SDKs: revokeDevice() uses fingerprint param (not doc ID)
- Swift + Kotlin SDKs: revokeAllDevices() uses POST /revoke-all (not DELETE)
- Swift + Kotlin SDKs: getLoginHistory() path /login-events (not /login-events/me)
- Swift + Kotlin SDKs: Device model updated to match backend response fields
- All 53 auth tests passing
2026-03-12 15:42:54 -07:00
saravanakumardb1
f4b9124065
feat(auth): add Phase 5C-5E endpoints + SDK methods — TOTP secret, push approvals, QR auth
...
- GET /auth/mfa/totp/secret — retrieve decrypted TOTP secret for auth app
- POST /auth/mfa/push/create, GET /pending, POST /:id/respond, GET /:id/status
- POST /auth/qr/create, POST /auth/qr/confirm, GET /auth/qr/:id/status
- Kotlin SDK: getTotpSecret, getPendingApprovals, respondToApproval, confirmQrLogin
- Swift SDK: getTotpSecret, getPendingApprovals, respondToApproval, confirmQrLogin
- All 53 auth tests passing
2026-03-12 15:01:51 -07:00
saravanakumardb1
ae13abfab2
fix(auth): address SmartAuth agent review gaps — Swift mock wiring, passkey SDK consistency, device list parity, JSDoc, SSR docs
2026-03-12 12:27:08 -07:00
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
18dd263797
feat(sdk): Push deep link routing for all platforms
...
- TypeScript: DeepLinkRouter with URL parsing and handler registration
- Swift: BLDeepLinkRouter with iOS URL handling and Logger integration
- Kotlin: DeepLinkRouter with Android Uri parsing and handler mapping
- Common screen constants: broadcasts, surveys, settings, profile, etc.
2026-03-03 08:33:56 -08:00
saravanakumardb1
55a1256d8b
docs(swift,kotlin): Add comprehensive SDK READMEs with broadcast and survey examples
...
- Swift SDK README: Installation, Broadcast/Survey clients, SwiftUI integration, push notifications
- Kotlin SDK README: Gradle setup, Jetpack Compose components, FCM integration
2026-03-03 08:30:26 -08:00
saravanakumardb1
b472f73c94
feat(platform-sdk): Phase 4.2/4.3 - iOS and Android native UI components
...
- BLInAppMessageUI.swift: Banner + Modal SwiftUI components
- BLSurveyUI.swift: Survey modal with all 9 question types for iOS
- BroadcastUI.kt: Banner + Modal Jetpack Compose components
- SurveyUI.kt: Survey modal with all 9 question types for Android
2026-03-03 08:20:01 -08:00
saravanakumardb1
b96503dc2d
feat(swift-sdk): Phase 3.3 - Broadcast and Survey clients
...
- BLBroadcastClient.swift: In-app message fetch, read/dismiss, click tracking, polling
- BLSurveyClient.swift: Survey fetch, start/submit/complete, offline cache, polling
2026-03-03 07:40:56 -08:00
saravanakumardb1
85d9356a19
feat(platform-sdk): implement TODO-2 and TODO-3 - Swift and Kotlin feedback clients
...
- Add BLFeedbackClient.swift with submitFeedback(), captureAndSubmit(), captureScreen()
- Add BLFeedbackClient.kt with FeedbackParams, DeviceContext, screenshot capture
- Include implementation instructions and error handling
- Mirror API structure between Swift and Kotlin SDKs
2026-03-03 07:18:45 -08:00
saravanakumardb1
faca108813
docs(sdk): fix stale route references in Swift SDK source comments and README
2026-03-02 09:17:09 -08:00
saravanakumardb1
1beb6ae7ed
fix(kotlin-sdk): add /api prefix to all API paths for consistency
...
Normalize Kotlin SDK API paths to match Swift SDK and TypeScript SDK convention:
- BLAuthClient: /auth/* → /api/auth/*
- BLBlobClient: /blob/sas → /api/blob/sas
- BLCrashReporter: /telemetry/events → /api/telemetry/events
- BLFeatureFlagClient: /flags/poll → /api/flags/poll
- BLKillSwitchClient: /flags/kill-switch → /api/flags/kill-switch
- BLLicenseClient: /licenses/* → /api/licenses/*
- BLTelemetryClient: /telemetry/events → /api/telemetry/events
All SDKs now consistently include /api prefix in paths, with baseUrl
configured as http://host:port/api . Fixes incompatibility introduced
in recent path normalization (commit 78b942a ).
2026-03-02 09:16:12 -08: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
ae55616444
fix(swift-sdk): match date decoding strategy in BLAuditLogger
...
saveEvents used .iso8601 encoding but loadEvents used the default
decoder (.deferredToDate). ISO8601 date strings could not be decoded
back, causing loadEvents() to return [] after the first log — breaking
event rotation and losing all previous audit entries.
2026-02-28 22:55:00 -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
77d6ff328f
fix(swift-sdk): URL-encode license key + add request tracing to kill switch
...
BLLicenseClient.checkStatus: percent-encode key before inserting into URL
path to prevent malformed URLs with special characters.
BLKillSwitchClient: add X-Product-Id and X-Request-Id headers for
consistency with BLPlatformClient request tracing pattern.
2026-02-28 22:52:00 -08:00
saravanakumardb1
b068e4bc1a
fix(swift-sdk): guard BLBiometricAuth and BLCrashReporter for watchOS compatibility
...
BLBiometricAuth imports LocalAuthentication (unavailable on watchOS).
BLCrashReporter imports MetricKit (unavailable on watchOS).
Package.swift declares watchOS 10+ as a platform target.
Fix: wrap both files in #if canImport() guards.
BLCrashReport model struct stays outside the guard (data-only, all platforms).
2026-02-28 22:51:26 -08:00
saravanakumardb1
23d14f33ea
feat(swift-sdk): add 6 new components — BLBlobClient, BLKillSwitchClient, BLLicenseClient, BLBiometricAuth, BLCrashReporter, BLAuditLogger
...
New SDK components extracted from product apps:
- BLBlobClient — Azure Blob Storage upload via SAS tokens (from LysnrAI BlobService)
- BLKillSwitchClient — Kill switch check from platform-service (from LysnrAI KillSwitchService)
- BLLicenseClient — License key activation + status (from LysnrAI LicenseService)
- BLBiometricAuth — Face ID / Touch ID wrapper (from LysnrAI BiometricAuth)
- BLCrashReporter — MetricKit crash reporting (from ChronoMind CrashReporter)
- BLAuditLogger — Local rotating JSON audit log (from LysnrAI AuditLogger)
SDK now has 13 source files. Updated README with full component table
and migration status (3 apps fully migrated, 18 wrappers total).
2026-02-28 22:38:43 -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