* feat(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation and immutability
* feat(client): remove unused tap operator
* feat(client): implement generic type parameter
* feat(client): replace constructor based DI with inject functions
* feat(client): implement default date range
* feat(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation
* fix(client): remove dead code
* feat(client): enforce immutability
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert errors to signal
* feat(client): convert hasImpersonationId to signal
* feat(client): convert user to signal
* feat(client): convert to computed signals
* feat(client): convert historicalDataItems and isLoadingPerformance to signals
* feat(client): convert performance and precision to signals
* feat(client): implement OnPush change detection strategy
* fix(common): revert DateRange type change
* fix(client): format file
* fix(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation
* fix(client): remove dead code
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert isLoading to signal
* feat(client): convert hasImpersonationId to signal
* feat(client): convert summary to signal
* feat(client): convert user and hasPermissionToUpdateUserSettings to signals
* feat(client): implement OnPush change detection strategy
* fix(client): remove nested subscription
* feat(client): resolve error
* feat(client): enforce encapsulation
* feat(client): enforce immutability
* feat(client): replace constructor based DI with inject function
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert benchmarks to signal
* feat(client): convert historicalDataItems to signal
* feat(client): convert fearAndGreedIndex to signal
- Add setImmediate yield in computeTransactionPoints, computeSnapshot, and getSymbolMetrics loops
- Make computeTransactionPoints async to allow yielding during heavy activity processing
- Add skipInitialize flag to prevent double initialization in portfolio snapshot processor
- Restore MAX_CHART_ITEMS downsampling to keep chart dates manageable
- Replace throw/catch pattern with direct if/else checks to avoid V8 stack trace overhead
- Add setImmediate yield every 500 iterations to unblock Bull heartbeat
- Downgrade missing rate logs from error to debug level
- Add dates array support for targeted queries instead of full date ranges
- Split large market data queries into batches of 10 to use composite indexes efficiently
- Chunk activities queries to avoid exceeding Prisma parameter limits