saravanakumardb1
7714ab51fb
fix(events): add missing platform event schemas for campaign engine and notifications
2026-03-03 12:24:39 -08:00
saravanakumardb1
914e344a92
fix(feedback-client): correct ApiClient method usage and types
2026-03-03 12:20:43 -08:00
saravanakumardb1
7f5ff4c790
feat(config): implement P0-1 - Product manifest specification (product.json schema)
...
- Add ProductManifestSchema with Zod validation for product identity
- Support theme tokens, cosmos containers, feature flags, ports
- Add loadProductManifest(), validateProductManifest(), resolveTheme()
- Export all schemas and types from config package index
2026-03-03 10:01:40 -08:00
saravanakumardb1
fc8f8d33dc
feat(kotlin-platform-sdk): add diagnostics module (Phase 2.3)
...
New diagnostics package in kotlin-platform-sdk:
- DiagnosticsTypes: Session, TraceSpan, LogEntry, Breadcrumb, NetworkRequest
- DiagnosticsClient: singleton with StateFlow for reactive state
- BreadcrumbTrail: ring buffer (max 100) for timeline
- NetworkInterceptor: OkHttp interceptor for HTTP capture
- DeviceStateCollector: battery, memory, storage, network
- 16+ JUnit tests for types and breadcrumbs
Features:
- configure()/start()/stop() lifecycle
- trace() suspend span wrapper
- log() with breadcrumb integration
- ETag-based config polling
- 30-second batch flush
2026-03-03 09:31:59 -08:00
saravanakumardb1
abcf817cb3
feat(swift-diagnostics): implement Phase 2.2 Swift Client SDK
...
New package ByteLystDiagnostics with:
- Core types: DiagnosticsSession, TraceSpan, LogEntry, Breadcrumb
- DiagnosticsClient: actor-based singleton with polling
- BreadcrumbTrail: ring buffer (max 100) for timeline
- NetworkInterceptor: URLProtocol-based HTTP capture
- DeviceState: battery, memory, storage, network, thermal
- 20+ XCTest unit tests
Features:
- configure()/start()/stop() lifecycle
- trace() async span wrapper
- log() with breadcrumb integration
- breadcrumb() manual timeline markers
- ETag-based config polling
- 30-second batch flush
Platforms: iOS 15+, macOS 13+, watchOS 8+, tvOS 15+
2026-03-03 09:28:11 -08:00
saravanakumardb1
45dbb789a1
feat(react-native): React Native SDK foundation for NomGap
...
- package.json with React Native/Expo peer dependencies
- Main index.ts with module exports for all platform services
- Providers and hooks for auth, telemetry, feature flags, kill switch, broadcasts, surveys
2026-03-03 08:40:24 -08:00
saravanakumardb1
8acb8db7d7
feat(diagnostics-client): implement Phase 2.1 TypeScript SDK
...
New package @bytelyst/diagnostics-client with:
- DiagnosticsClient: singleton with polling for active sessions
- BreadcrumbTrail: ring buffer (max 100) for timeline
- NetworkInterceptor: fetch wrapper for HTTP capture
- DeviceState: memory, storage, network collection
- 21 Vitest tests (all passing)
2026-03-03 08:35:00 -08: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
6e0b6c33c9
test(admin-web): Add Playwright E2E tests for broadcasts and surveys
...
- Broadcasts: list, create, target, clone, pause/resume, metrics, delete
- Surveys: list, create with NPS/questions, conditional logic, activate/pause
- Integration: navigation, targeting, incentives, export
2026-03-03 08:31:31 -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
80df7c1c1e
docs(packages): Add comprehensive README for broadcast-client and survey-client
...
- Installation, quick start, API reference
- React integration examples with hooks and providers
- Offline support documentation
- Type definitions and error handling
2026-03-03 08:29:07 -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
6027d618b7
feat(kotlin-sdk): Phase 3.4 - Broadcast and Survey clients
...
- BLBroadcastClient.kt: In-app message fetch, read/dismiss, click tracking, polling
- BLSurveyClient.kt: Survey fetch, start/submit/complete, offline cache, polling
- Full coroutine support with Result<T> return types
2026-03-03 07:44:39 -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
307b84c2a2
feat(packages): Phase 3.2 - Create @bytelyst/survey-client package
...
- package.json: ESM module config
- src/index.ts: Survey client factory with types, validation, offline cache
- tsconfig.json: TypeScript configuration
Includes offline response caching for resilience
2026-03-03 07:36:12 -08:00
saravanakumardb1
c720f1c8de
feat(packages): Phase 3.1 - Create @bytelyst/broadcast-client package
...
- package.json: ESM module config
- src/index.ts: Broadcast client factory with types, hooks
- tsconfig.json: TypeScript configuration
2026-03-03 07:34:39 -08:00
saravanakumardb1
88fda8cf39
test(feedback): implement TODO-5 and TODO-7 - GDPR test and Azure lifecycle docs
...
- Add gdpr.test.ts with GDPR deletion compliance tests
- Add Azure lifecycle policy configuration section to roadmap
- Include Azure Portal, CLI, and Terraform examples
- Document 90-day TTL for GDPR compliance
2026-03-03 07:20:23 -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
bd19d444f1
test(feedback-client): implement TODO-4 - integration tests for screenshot flow
...
- Add integration tests for full SAS flow (generate SAS → upload → submit)
- Add test for feedback without screenshot
- Add upload progress tracking test
- Add unit tests for content type validation and size limits
- Skip integration tests if blob storage not configured
2026-03-03 07:11:40 -08:00
saravanakumardb1
921f21164d
feat(feedback-client): implement TODO-1 - web screenshot capture
...
- Add ScreenshotOptions and CaptureResult interfaces
- Implement captureScreenshot() with getDisplayMedia for screen capture
- Implement captureElement() placeholder for DOM element capture
- Implement captureAndSubmit() flow
- Fix getDisplayMedia constraints (remove cursor property)
2026-03-03 07:11:07 -08:00
saravanakumardb1
b261cda1cd
feat(feedback-client): Phase 2.1 - create @bytelyst/feedback-client TypeScript SDK
2026-03-03 00:03:03 -08:00
saravanakumardb1
d876bb0626
feat(blob): add feedbackScreenshots container for user feedback attachments
2026-03-02 23:54:38 -08:00
saravanakumardb1
6a23a02cd4
fix(diagnostics): BUG-4, BUG-5, BUG-7, BUG-8 - race condition, transactions, test isolation, auth validation
...
- BUG-4: Add optimistic concurrency control with retry to updateSessionStats
- BUG-5: Document transaction limitations in batch operations
- BUG-7: Fix test isolation with unique productIds per test run
- BUG-8: Add session ownership validation to ingest endpoints
2026-03-02 23:47:14 -08:00
saravanakumardb1
ee9d4b358d
feat(cloud-agnostic): complete Sprints 4-6 — secrets consumer migration, @bytelyst/speech package, push verified
2026-03-02 09:46:24 -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
053190d660
fix(kotlin-sdk): add missing /api prefix to flags, kill-switch, and telemetry routes
2026-03-02 09:15:03 -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
10e252617b
feat(packages): fix test assertions for x-request-id header compatibility
...
- Update kill-switch-client and feature-flag-client tests to use
expect.objectContaining for headers to handle x-request-id
- Move React Native SDK roadmap to completed/
Total: 44 client-side package tests passing
2026-03-02 09:08:45 -08:00
saravanakumardb1
7ca2139418
refactor(storage): migrate to storage abstraction
2026-03-02 09:07:33 -08:00
saravanakumardb1
6fe41de481
fix(datastore): SQL now emits ARRAY_CONTAINS OR CONTAINS for array+string support
2026-03-02 01:50:09 -08:00
saravanakumardb1
4d126cb051
feat(platform-service): migrate 6 repositories to @bytelyst/datastore (flags, settings, comments, votes, products, themes) — 756/756 tests pass
2026-03-02 00:51:03 -08:00
saravanakumardb1
dfa5eb73fa
feat(packages): add cloud-agnostic abstraction packages — datastore, storage, llm, push + refactor secrets (58 tests)
2026-03-02 00:43:06 -08:00
saravanakumardb1
b33d3cf2b3
feat(platform): add webhook subscriptions module, DB migration runner, Swagger UI — complete 23/25 roadmap items
2026-03-01 23:38:48 -08:00
saravanakumardb1
1373b6dd8b
feat(blob-client): scaffold @bytelyst/blob-client — browser/RN-safe blob storage via SAS URLs (12 tests)
2026-03-01 21:51:34 -08:00
saravanakumardb1
5c5a18570d
fix(ts-clients): add DOM lib to browser-safe package tsconfigs (fetch/AbortController/setTimeout require DOM types)
2026-03-01 21:33:53 -08:00
saravanakumardb1
2518e1a92e
fix(ts-clients): add x-request-id header to feature-flag-client and kill-switch-client
2026-03-01 21:17:38 -08:00
saravanakumardb1
f953c2b0bc
fix(kotlin-sdk): thread-safety, resource leaks, URL encoding, JSON safety, deprecated API
...
- BLTelemetryClient/BLAuditLogger/BLCrashReporter: @Synchronized isoNow() for SimpleDateFormat thread-safety
- BLCrashReporter: replace unsafe JSON string interpolation with buildJsonObject + JsonArray
- BLBlobClient: close OkHttp Response body with .use {} to prevent resource leak
- BLFeatureFlagClient/BLKillSwitchClient: URL-encode query parameter values
- build.gradle.kts: kotlinOptions {} -> compilerOptions {} (Kotlin 2.1 convention)
2026-03-01 21:17:27 -08:00
saravanakumardb1
70703a5009
test(kotlin-sdk): add JUnit5 + MockWebServer tests for PlatformConfig, PlatformClient, FeatureFlag, KillSwitch, License (35 tests)
2026-03-01 20:36:58 -08:00
saravanakumardb1
91c48a7bc7
feat(sdk): add kotlin-platform-sdk (13 components) + 4 new TS client packages (32 tests)
2026-03-01 18:15:57 -08:00
saravanakumardb1
dcabe46de2
feat(jarvis): add jarvis-agents, jarvis-sessions, jarvis-memory modules (63 tests)
2026-03-01 07:09:12 -08:00
saravanakumardb1
a0157211f5
feat(design-tokens): add JarvisJr product color palette to bytelyst.tokens.json
2026-03-01 06:49:47 -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
saravanakumardb1
4863b62055
feat(fastify-core): deny CORS by default when origin unset, add graceful shutdown handlers
2026-02-28 20:23:58 -08:00
saravanakumardb1
04f4a5f81e
feat(api-client): add timeout, retry with exponential backoff for idempotent requests
2026-02-28 20:23:49 -08:00