Releases: Tap30/ripple-ts
@tapsioss/ripple-node@1.0.1
@tapsioss/ripple-browser@1.0.1
@tapsioss/ripple-node@1.0.0
Major Changes
-
aa268eaThanks @mimshins! - BREAKING CHANGE: Add validation to prevent invalid Dispatcher configurationThe Dispatcher constructor now throws an error if
maxBufferSize < maxBatchSize. This configuration was previously allowed but would cause events to be dropped unnecessarily since the batch size could never be reached.If you're using this configuration, update it to ensure
maxBufferSize >= maxBatchSize:const dispatcher = new Dispatcher({ maxBatchSize: 100, - maxBufferSize: 50, // Invalid - will throw error + maxBufferSize: 100, // Valid - buffer can hold at least one full batch }); -
6c90393Thanks @mimshins! - BREAKING CHANGE: RenameConsoleLoggerAdoptertoConsoleLoggerAdapterto fix typoIf you're using the logger directly, update your imports:
- import { ConsoleLoggerAdopter } from '@tapsioss/ripple-browser'; + import { ConsoleLoggerAdapter } from '@tapsioss/ripple-browser'; - const logger = new ConsoleLoggerAdopter(LogLevel.DEBUG); + const logger = new ConsoleLoggerAdapter(LogLevel.DEBUG);
-
459f336Thanks @mimshins! - Remove SessionStorageAdapter, CookieStorageAdapter from browser package and FileStorageAdapter from node package. These adapters are no longer exported or available. For browser, use LocalStorageAdapter or IndexedDBAdapter instead. For node, use NoOpStorageAdapter or implement a custom storage adapter.
Minor Changes
5610631Thanks @mimshins! - Add close() method to StorageAdapter interface for resource cleanup. The close() method is now called automatically during client disposal to properly release storage resources. IndexedDBAdapter implements close() to close database connections, while other adapters provide empty implementations as they don't require cleanup.
Patch Changes
-
dcda392Thanks @mimshins! - Add disposal state tracking to prevent operations after client disposal. The client now tracks disposal state with a_disposedflag that preventstrack()calls from re-initializing a disposed client. Explicitinit()call is required to re-enable a disposed client. -
684f87aThanks @mimshins! - Fix race condition in client initialization when track() is called before init() -
705a71cThanks @mimshins! - Add validation for negative configuration values. The client constructor now throws errors whenflushInterval,maxBatchSize, ormaxBufferSizeare zero or negative, or whenmaxRetriesis negative. -
95ec7b2Thanks @mimshins! - Fix memory leak in Dispatcher by preventing timer scheduling after disposal -
13a732eThanks @mimshins! - Fix mutex disposal to properly reject new acquisitions and support reinitialization. The mutex now throwsMutexDisposedErrorwhen attempting to acquire a disposed mutex, preventing silent failures. Addedreset()method to allow mutex reuse after disposal, enabling proper client and dispatcher reinitialization workflows. -
827706fThanks @mimshins! - Fix unsafe mutex release that could cause hanging promises during disposal. The mutex now properly resolves all queued tasks before clearing, preventing deadlocks when the dispatcher is disposed.
@tapsioss/ripple-browser@1.0.0
Major Changes
-
aa268eaThanks @mimshins! - BREAKING CHANGE: Add validation to prevent invalid Dispatcher configurationThe Dispatcher constructor now throws an error if
maxBufferSize < maxBatchSize. This configuration was previously allowed but would cause events to be dropped unnecessarily since the batch size could never be reached.If you're using this configuration, update it to ensure
maxBufferSize >= maxBatchSize:const dispatcher = new Dispatcher({ maxBatchSize: 100, - maxBufferSize: 50, // Invalid - will throw error + maxBufferSize: 100, // Valid - buffer can hold at least one full batch }); -
6c90393Thanks @mimshins! - BREAKING CHANGE: RenameConsoleLoggerAdoptertoConsoleLoggerAdapterto fix typoIf you're using the logger directly, update your imports:
- import { ConsoleLoggerAdopter } from '@tapsioss/ripple-browser'; + import { ConsoleLoggerAdapter } from '@tapsioss/ripple-browser'; - const logger = new ConsoleLoggerAdopter(LogLevel.DEBUG); + const logger = new ConsoleLoggerAdapter(LogLevel.DEBUG);
-
459f336Thanks @mimshins! - Remove SessionStorageAdapter, CookieStorageAdapter from browser package and FileStorageAdapter from node package. These adapters are no longer exported or available. For browser, use LocalStorageAdapter or IndexedDBAdapter instead. For node, use NoOpStorageAdapter or implement a custom storage adapter.
Minor Changes
5610631Thanks @mimshins! - Add close() method to StorageAdapter interface for resource cleanup. The close() method is now called automatically during client disposal to properly release storage resources. IndexedDBAdapter implements close() to close database connections, while other adapters provide empty implementations as they don't require cleanup.
Patch Changes
-
dcda392Thanks @mimshins! - Add disposal state tracking to prevent operations after client disposal. The client now tracks disposal state with a_disposedflag that preventstrack()calls from re-initializing a disposed client. Explicitinit()call is required to re-enable a disposed client. -
684f87aThanks @mimshins! - Fix race condition in client initialization when track() is called before init() -
705a71cThanks @mimshins! - Add validation for negative configuration values. The client constructor now throws errors whenflushInterval,maxBatchSize, ormaxBufferSizeare zero or negative, or whenmaxRetriesis negative. -
95ec7b2Thanks @mimshins! - Fix memory leak in Dispatcher by preventing timer scheduling after disposal -
13a732eThanks @mimshins! - Fix mutex disposal to properly reject new acquisitions and support reinitialization. The mutex now throwsMutexDisposedErrorwhen attempting to acquire a disposed mutex, preventing silent failures. Addedreset()method to allow mutex reuse after disposal, enabling proper client and dispatcher reinitialization workflows. -
e51dcd9Thanks @mimshins! - Fix inconsistent error handling in storage adapters. Changed fromPromise.reject()tothrowfor consistent async/await error handling in LocalStorageAdapter, SessionStorageAdapter, and CookieStorageAdapter. -
827706fThanks @mimshins! - Fix unsafe mutex release that could cause hanging promises during disposal. The mutex now properly resolves all queued tasks before clearing, preventing deadlocks when the dispatcher is disposed.
@tapsioss/ripple-node@0.9.0
Minor Changes
-
#28
9eca791Thanks @mimshins! - Improved initialization behavior with automatic pre-init operation queuingPreviously, calling
track()beforeinit()would throw an error. Now, track operations are automatically queued and processed after initialization completes.What changed:
track()no longer throws an error when called beforeinit()- Operations are queued using a mutex and executed after
init()completes init()can be called multiple times safely (subsequent calls are no-ops)
Migration:
No code changes required. Existing code continues to work. You can now safely calltrack()beforeinit()if needed, and the SDK will handle queuing automatically.Benefits:
- Better developer experience - no need to ensure strict initialization order
- Prevents race conditions
- Thread-safe operation queuing
@tapsioss/ripple-browser@0.9.0
Minor Changes
-
#28
9eca791Thanks @mimshins! - Improved initialization behavior with automatic pre-init operation queuingPreviously, calling
track()beforeinit()would throw an error. Now, track operations are automatically queued and processed after initialization completes.What changed:
track()no longer throws an error when called beforeinit()- Operations are queued using a mutex and executed after
init()completes init()can be called multiple times safely (subsequent calls are no-ops)
Migration:
No code changes required. Existing code continues to work. You can now safely calltrack()beforeinit()if needed, and the SDK will handle queuing automatically.Benefits:
- Better developer experience - no need to ensure strict initialization order
- Prevents race conditions
- Thread-safe operation queuing
-
#26
34806bbThanks @mimshins! - Feat: Add no-operation storage adapter that discards all events.
@tapsioss/ripple-node@0.8.0
Minor Changes
-
#24
f54bb12Thanks @mimshins! - BREAKING CHANGE: Fix critical event duplication bug by moving queue limit logic to dispatcher- Fix: Storage adapters no longer merge events, eliminating exponential duplication bug
- Refactor:
maxBufferSizemoved from storage adapter configs to client/dispatcher config - Refactor: Storage adapters now simply save what they're given (no merge, no limit logic)
- Feat: Dispatcher applies FIFO eviction before saving to storage
- Impact: High-throughput offline scenarios now have linear I/O instead of exponential growth
- Migration: Remove
maxBufferSizefrom storage adapter constructors and add it to client config instead
Patch Changes
-
#24
f54bb12Thanks @mimshins! - - Fix: ApplymaxBufferSizelimit during restore from storage to prevent silent event loss- Fix: Preserve original error type in IndexedDB adapter for proper QuotaExceededError retry handling
- Feat: Add runtime validation warning when
maxBufferSize < maxBatchSize - Test: Add comprehensive storage quota error handling test coverage
-
#24
f54bb12Thanks @mimshins! - Fix: Add comprehensive error handling for storage operations.- Wrap all storage adapter operations (
save(),load(),clear()) in try-catch blocks - Log storage errors via logger adapter instead of throwing unhandled rejections
- Handle errors during enqueue, flush, restore, and retry operations
- Support both Error objects and non-Error values in error logging
- Prevent application crashes from storage failures (QuotaExceededError, SecurityError, etc.)
- Wrap all storage adapter operations (
@tapsioss/ripple-browser@0.8.0
Minor Changes
-
#24
f54bb12Thanks @mimshins! - BREAKING CHANGE: Fix critical event duplication bug by moving queue limit logic to dispatcher- Fix: Storage adapters no longer merge events, eliminating exponential duplication bug
- Refactor:
maxBufferSizemoved from storage adapter configs to client/dispatcher config - Refactor: Storage adapters now simply save what they're given (no merge, no limit logic)
- Feat: Dispatcher applies FIFO eviction before saving to storage
- Impact: High-throughput offline scenarios now have linear I/O instead of exponential growth
- Migration: Remove
maxBufferSizefrom storage adapter constructors and add it to client config instead
-
#24
f54bb12Thanks @mimshins! - - Feat: Add staticisAvailable()method to all storage adapters for detecting storage availability before instantiation.- Fix: Implement atomic read-write transactions in IndexedDBAdapter to prevent race conditions across tabs.
- Fix: Add connection lifecycle handlers (onclose, onversionchange) to IndexedDBAdapter for automatic reconnection.
- Fix: Support graceful degradation when storage is unavailable (private browsing, disabled storage, quota exceeded).
Patch Changes
-
#24
f54bb12Thanks @mimshins! - - Fix: ApplymaxBufferSizelimit during restore from storage to prevent silent event loss- Fix: Preserve original error type in IndexedDB adapter for proper QuotaExceededError retry handling
- Feat: Add runtime validation warning when
maxBufferSize < maxBatchSize - Test: Add comprehensive storage quota error handling test coverage
-
#24
f54bb12Thanks @mimshins! - Fix: update schema version of IndexedDB due to the schema changes. -
#24
f54bb12Thanks @mimshins! - Fix: Add comprehensive error handling for storage operations.- Wrap all storage adapter operations (
save(),load(),clear()) in try-catch blocks - Log storage errors via logger adapter instead of throwing unhandled rejections
- Handle errors during enqueue, flush, restore, and retry operations
- Support both Error objects and non-Error values in error logging
- Prevent application crashes from storage failures (QuotaExceededError, SecurityError, etc.)
- Wrap all storage adapter operations (
-
#24
f54bb12Thanks @mimshins! - Fix: the IndexedDB connection is now opened once and reused for all subsequent operations.
@tapsioss/ripple-node@0.7.0
@tapsioss/ripple-browser@0.7.0
Minor Changes
-
#20
333cd0cThanks @mimshins! - Feat: addpersistedQueueLimitproperty to adapters. -
#23
7bd9101Thanks @mimshins! - Refactor!: update HttpResponse interface to removeokfield from it. -
#22
ca157cbThanks @mimshins! - Refactor!: update browser runtime prebuilt adapters to accept config object instead of separate params.