ntp_dart 1.5.1
ntp_dart: ^1.5.1 copied to clipboard
A lightweight, cross-platform NTP client for Dart & Flutter. Fetches highly accurate time via native UDP and Web HTTP fallbacks with microsecond precision and secure caching.
Changelog #
1.5.1 #
- Fixed License badge markdown link syntax in
README.md.
1.5.0 #
- Full NTP Telemetry (
NtpResponse): CallNtpClient().query()orAccurateTime.query()to inspectoffset,roundTripDelay,stratum,leapIndicator,referenceId,rootDelay, androotDispersion. - Multi-Sample Filtering & Server Fallbacks: Pass
samples: 3to select the lowest-RTT packet andfallbackServers: [...]to automatically failover if the primary server is unreachable. - Live Clock Stream & Tamper Detection: Listen to
AccurateTime.stream()for periodic accurate ticks andAccurateTime.onClockTampered(orAccurateTime.isTampered) to detect manual system clock changes. - Offline Cache Restore: Call
AccurateTime.restoreCache(offset: ...)on startup to hydrate a saved offset before network sync. - Zero-Conflict Web Parser: Removed
intldependency and added built-in support for RFC 1123, Cloudflare Trace (ts=), ISO-8601, and HTTPDateheaders.
1.4.0 #
- Web Local Time & Timeout Consistency: Fixed
isUtc: falsereturning UTC instead of localDateTimeinntp_web.dartand unified timeout errors to throwTimeoutExceptionacross all platforms. - High-Performance & Zero-Lag Architecture:
- Zero Post-Completion Lag (
ntp_io.dart): Computed finalDateTimeafter asynchronous socket/stream cleanup (await subscription.cancel(),socket.close()), eliminating microtask and cleanup delay bias from the measured offset. - Pure 64-bit Integer Timestamp Arithmetic: Replaced floating-point timestamp conversions with exact rounded 64-bit integer math in
writeNtpTimestampandparseNtpTimestamps, avoiding intermediateDateTimeheap allocations on the UDP receive hot path. - Monotonic RTT & Pre-compiled Web Parsers: Used monotonic
Stopwatchfor UDP and HTTP round-trip measurements, bypassed DNS lookup viaInternetAddress.tryParsewhenserveris already an IP literal, and pre-compiledUriandDateFormatinstances inntp_web.dart.
- Zero Post-Completion Lag (
- Monotonic Clock & Anti-Tamper Protection (
AccurateTime):- Paired wall-clock checks with a monotonic
Stopwatchto detect forward or backward system clock tampering (> 2sdivergence between wall-clock and monotonic elapsed time) and immediately force resynchronization.
- Paired wall-clock checks with a monotonic
- Cache Poisoning & Offline Resilience: Fixed issue where initial network failure would lock in a
Duration.zerooffset forsyncInterval(60m). Introduced configurableretryCooldown(default 15s) and ensuredlastSyncTimeonly updates on successful synchronizations. - RFC 5905 & RFC 4330 Protocol Compliance:
- Implemented Origin Timestamp validation against client request Transmit Timestamp to reject spoofed, delayed, or cross-talk packets.
- Added Leap Indicator check (
LI == 3) and Stratum validation (Stratum > 15), plus Kiss-o'-Death (KoD) detection (Stratum == 0) with zero-copy rejection code parsing (e.g.RATE,DENY). - Added Year 2036 NTP Era 1 rollover handling in timestamp parsing and SNTP compatibility when
Receive Timestamp (T2)is omitted.
- UDP Socket Buffer Draining & Concurrency:
- Drained all queued UDP datagrams per
RawSocketEvent.readin awhileloop so truncated or spoofed packets in the OS buffer do not stall valid responses behind them. - Resolved race condition where duplicate datagrams could throw
Bad state: Future already completed. - Added generation counter in
AccurateTime.clearCache()to discard in-flight network responses and prevent stale cache resurrection.
- Drained all queued UDP datagrams per
- Strict Analyzer & Expanded Test Suite: Enabled
strict-casts,strict-inference, andstrict-raw-typesinanalysis_options.yaml, exportedNtpBase, and expanded the test suite to 37 unit tests.
1.3.2 #
- Documentation & Showcase: Added package screenshot metadata in
pubspec.yamlfor pub.dev preview.
1.3.1 #
- Unhandled Exception Fix: Fixed uncaught asynchronous exceptions (
TimeoutException,SocketException, and DNS lookup errors) leaking toPlatformDispatcher.onErrorduring background synchronization triggered byAccurateTime.nowSync(). - In-Flight Request Deduplication: Added synchronization deduplication to prevent duplicate network requests and socket allocations when
AccurateTime.nowSync()orAccurateTime.now()are called concurrently. - Cache Management: Enhanced
AccurateTime.clearCache()to properly reset in-flight synchronization state.
1.3.0 #
- Refactored Cache: Transitioned
AccurateTimecache to use time offset calculation (cachedOffset) rather than absolute datetime tracking, boosting reliability and simplifying local drift corrections. - Microsecond Precision: Enhanced UDP packet timestamp parsing and math to support full microsecond accuracy (matching Dart's
DateTimeresolution). - Socket and Stream Safety: Rewrote UDP networking in
ntp_io.dartwith robusttry-finallyblocks to guarantee socket closure and prevent resource leakages on bad networks or cancellation. - RFC 5905 Security Compliance: Implemented transmit timestamp writing and randomized low-order bits on client request packets to resist off-path spoofing and replay attacks.
- NtpServer Enum: Introduced
NtpServerenum offering curated, ultra-reliable servers (google,cloudflare,apple,microsoft,nist,pool). - Flexible Fallbacks: Added
allowFallbackandforceRefreshtoAccurateTime.now(). - Test Suite: Introduced a comprehensive unit testing framework in
test/ntp_dart_test.dart.
1.2.1 #
- Added
isUtcparameter (defaultfalse) toAccurateTime.now(),AccurateTime.nowSync(), andAccurateTime.nowToIsoString(). - Fixed caching logic in
AccurateTimeto always store UTC and convert to local only when requested.
1.2.0 #
- Added
apiUrlandparseResponseparameters toNtpBaseto allow custom API endpoints and response parsing on Web. - Added
isUtcparameter (defaultfalse) to control whether to return UTC or Local time. - Implemented latency compensation for both Web and IO.
- Improved NTP timestamp parsing in IO to support millisecond precision.
- Added timeout support for Web NTP requests.
- Updated dependencies:
httpto ^1.6.0 andintlto ^0.20.2.
1.1.1 #
- Added
AccurateTime.nowSync()method to provide a synchronous time value, useful for UI rendering while the first sync is in progress. - Change logic for conditional import based on platform. No breaking API changes.
- Updated
httpdependency (previously 1.4.0) to 1.5.0. - Refreshed README and examples to reflect the new platform setup and usage notes.
1.0.2 #
- Update documentation
1.0.1 #
- Enable flutter web wasm compatibility
1.0.0 #
- Publish package
