@akbeniwal/react-native-smart-netinfo 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,9 +3,10 @@ declare class SmartNetInfoManager {
3
3
  private config;
4
4
  private state;
5
5
  private listeners;
6
- private intervalId;
6
+ private timeoutId;
7
7
  private appStateSubscription;
8
8
  private isMonitoring;
9
+ private isChecking;
9
10
  /**
10
11
  * Configure the SmartNetInfo options.
11
12
  * If already monitoring, it will restart the monitoring process to apply new intervals.
@@ -47,6 +48,7 @@ declare class SmartNetInfoManager {
47
48
  private handleAppStateChange;
48
49
  private handleWebOnline;
49
50
  private handleWebOffline;
51
+ private scheduleNextCheck;
50
52
  private checkConnectivity;
51
53
  private updateState;
52
54
  private notifyListeners;
@@ -1 +1 @@
1
- {"version":3,"file":"SmartNetInfo.d.ts","sourceRoot":"","sources":["../src/SmartNetInfo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAQjF,cAAM,mBAAmB;IACvB,OAAO,CAAC,MAAM,CAKZ;IAEF,OAAO,CAAC,KAAK,CAOX;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,YAAY,CAAS;IAE7B;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAQ3D;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;IAK3C;;;;;;OAMG;IACI,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAanE;;;;;OAKG;IACI,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAOhE;;;;OAIG;IACU,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBnD;;OAEG;IACI,eAAe,IAAI,IAAI;IAoC9B;;OAEG;IACI,cAAc,IAAI,IAAI;IA0B7B,OAAO,CAAC,oBAAoB,CAI1B;IAEF,OAAO,CAAC,eAAe,CAGrB;IAEF,OAAO,CAAC,gBAAgB,CAOtB;YAEY,iBAAiB;IAuB/B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;CASxB;AAED,eAAO,MAAM,YAAY,qBAA4B,CAAC;AACtD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"SmartNetInfo.d.ts","sourceRoot":"","sources":["../src/SmartNetInfo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAQjF,cAAM,mBAAmB;IACvB,OAAO,CAAC,MAAM,CAKZ;IAEF,OAAO,CAAC,KAAK,CAOX;IAEF,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAQ3D;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;IAK3C;;;;;;OAMG;IACI,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAanE;;;;;OAKG;IACI,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAOhE;;;;OAIG;IACU,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkBnD;;OAEG;IACI,eAAe,IAAI,IAAI;IAgC9B;;OAEG;IACI,cAAc,IAAI,IAAI;IA0B7B,OAAO,CAAC,oBAAoB,CAM1B;IAEF,OAAO,CAAC,eAAe,CAKrB;IAEF,OAAO,CAAC,gBAAgB,CAOtB;IAEF,OAAO,CAAC,iBAAiB;YAuBX,iBAAiB;IAsC/B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;CASxB;AAED,eAAO,MAAM,YAAY,qBAA4B,CAAC;AACtD,eAAe,YAAY,CAAC"}
@@ -21,17 +21,22 @@ class SmartNetInfoManager {
21
21
  isTestingSpeed: false,
22
22
  };
23
23
  this.listeners = new Set();
24
- this.intervalId = null;
24
+ this.timeoutId = null;
25
25
  this.appStateSubscription = null;
26
26
  this.isMonitoring = false;
27
+ this.isChecking = false;
27
28
  this.handleAppStateChange = (nextAppState) => {
28
29
  if (nextAppState === 'active') {
29
- this.checkConnectivity();
30
+ this.checkConnectivity().finally(() => {
31
+ this.scheduleNextCheck();
32
+ });
30
33
  }
31
34
  };
32
35
  this.handleWebOnline = () => {
33
36
  this.updateState({ isConnected: true, isInternetReachable: true });
34
- this.checkConnectivity();
37
+ this.checkConnectivity().finally(() => {
38
+ this.scheduleNextCheck();
39
+ });
35
40
  };
36
41
  this.handleWebOffline = () => {
37
42
  this.updateState({
@@ -98,7 +103,8 @@ class SmartNetInfoManager {
98
103
  return this.state.internetSpeed;
99
104
  }
100
105
  this.updateState({ isTestingSpeed: true });
101
- const speed = await executeSpeedTest(SPEED_TEST_URL, this.config.speedTestFileSizeInBytes);
106
+ const timeout = Math.max(this.config.timeoutMs * 3, 15000);
107
+ const speed = await executeSpeedTest(SPEED_TEST_URL, this.config.speedTestFileSizeInBytes, timeout);
102
108
  this.updateState({
103
109
  internetSpeed: speed,
104
110
  isTestingSpeed: false,
@@ -112,7 +118,7 @@ class SmartNetInfoManager {
112
118
  if (this.isMonitoring)
113
119
  return;
114
120
  this.isMonitoring = true;
115
- // Run initial check immediately
121
+ // Run initial check immediately and then schedule subsequent checks
116
122
  this.checkConnectivity().then(() => {
117
123
  // Auto run speed test on initial connect if online
118
124
  if (this.state.isInternetReachable &&
@@ -120,11 +126,8 @@ class SmartNetInfoManager {
120
126
  !this.config.disableAutoSpeedTest) {
121
127
  this.runSpeedTest();
122
128
  }
129
+ this.scheduleNextCheck();
123
130
  });
124
- // Set up periodic polling
125
- if (this.config.pingIntervalMs > 0) {
126
- this.intervalId = setInterval(() => this.checkConnectivity(), this.config.pingIntervalMs);
127
- }
128
131
  // React Native AppState listener to detect foreground transitions
129
132
  try {
130
133
  this.appStateSubscription = AppState.addEventListener('change', this.handleAppStateChange);
@@ -146,9 +149,9 @@ class SmartNetInfoManager {
146
149
  if (!this.isMonitoring)
147
150
  return;
148
151
  this.isMonitoring = false;
149
- if (this.intervalId) {
150
- clearInterval(this.intervalId);
151
- this.intervalId = null;
152
+ if (this.timeoutId) {
153
+ clearTimeout(this.timeoutId);
154
+ this.timeoutId = null;
152
155
  }
153
156
  if (this.appStateSubscription) {
154
157
  if (typeof this.appStateSubscription.remove === 'function') {
@@ -166,21 +169,57 @@ class SmartNetInfoManager {
166
169
  window.removeEventListener('offline', this.handleWebOffline);
167
170
  }
168
171
  }
172
+ scheduleNextCheck() {
173
+ if (!this.isMonitoring)
174
+ return;
175
+ if (this.timeoutId) {
176
+ clearTimeout(this.timeoutId);
177
+ this.timeoutId = null;
178
+ }
179
+ if (this.config.pingIntervalMs <= 0)
180
+ return;
181
+ // When offline, check more frequently (every 3 seconds) to detect recovery quickly.
182
+ // When online, use the configured pingIntervalMs.
183
+ const isOffline = this.state.isInternetReachable === false;
184
+ const interval = isOffline
185
+ ? Math.min(this.config.pingIntervalMs, 3000)
186
+ : this.config.pingIntervalMs;
187
+ this.timeoutId = setTimeout(async () => {
188
+ await this.checkConnectivity();
189
+ this.scheduleNextCheck();
190
+ }, interval);
191
+ }
169
192
  async checkConnectivity() {
170
- const { isReachable, latencyMs } = await getLatency(PING_URL, this.config.timeoutMs);
171
- const wasInternetReachable = this.state.isInternetReachable;
172
- this.updateState({
173
- isConnected: isReachable,
174
- isInternetReachable: isReachable,
175
- latencyMs,
176
- connectionQuality: getConnectionQuality(latencyMs),
177
- });
178
- // If internet just became reachable and we haven't run speed test yet, trigger auto speed test
179
- if (isReachable &&
180
- wasInternetReachable === false &&
181
- this.state.internetSpeed === null &&
182
- !this.config.disableAutoSpeedTest) {
183
- this.runSpeedTest();
193
+ if (this.isChecking)
194
+ return;
195
+ this.isChecking = true;
196
+ try {
197
+ // Add a buffer to timeout when we are currently offline to allow the radio to wake up
198
+ const isCurrentlyOffline = this.state.isInternetReachable === false;
199
+ const actualTimeout = isCurrentlyOffline
200
+ ? Math.max(this.config.timeoutMs, 4000)
201
+ : this.config.timeoutMs;
202
+ const { isReachable, latencyMs } = await getLatency(PING_URL, actualTimeout);
203
+ const wasInternetReachable = this.state.isInternetReachable;
204
+ this.updateState({
205
+ isConnected: isReachable,
206
+ isInternetReachable: isReachable,
207
+ latencyMs,
208
+ connectionQuality: getConnectionQuality(latencyMs),
209
+ });
210
+ // If internet just became reachable and we haven't run speed test yet, trigger auto speed test
211
+ if (isReachable &&
212
+ wasInternetReachable === false &&
213
+ this.state.internetSpeed === null &&
214
+ !this.config.disableAutoSpeedTest) {
215
+ this.runSpeedTest();
216
+ }
217
+ }
218
+ catch (error) {
219
+ console.warn('SmartNetInfo failed during checkConnectivity:', error);
220
+ }
221
+ finally {
222
+ this.isChecking = false;
184
223
  }
185
224
  }
186
225
  updateState(partialState) {
@@ -1 +1 @@
1
- {"version":3,"file":"SmartNetInfo.js","sourceRoot":"","sources":["../src/SmartNetInfo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SmartNetInfo.js","sourceRoot":"","sources":["../src/SmartNetInfo.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export interface LatencyResult {
5
5
  latencyMs: number | null;
6
6
  }
7
7
  /**
8
- * Pings a URL (normally with a HEAD request) to verify internet reachability and measure round-trip latency.
8
+ * Pings a URL to verify internet reachability and measure round-trip latency.
9
9
  * Uses an AbortController to support timeouts.
10
10
  *
11
11
  * @param pingUrl The target URL to ping
@@ -1 +1 @@
1
- {"version":3,"file":"getLatency.d.ts","sourceRoot":"","sources":["../../src/utils/getLatency.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,WAAW,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B3F"}
1
+ {"version":3,"file":"getLatency.d.ts","sourceRoot":"","sources":["../../src/utils/getLatency.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,WAAW,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4C3F"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pings a URL (normally with a HEAD request) to verify internet reachability and measure round-trip latency.
2
+ * Pings a URL to verify internet reachability and measure round-trip latency.
3
3
  * Uses an AbortController to support timeouts.
4
4
  *
5
5
  * @param pingUrl The target URL to ping
@@ -8,14 +8,20 @@
8
8
  */
9
9
  export async function getLatency(pingUrl, timeoutMs) {
10
10
  const startTime = Date.now();
11
+ let timeoutId = null;
11
12
  try {
12
13
  const controller = new AbortController();
13
- const timeoutId = setTimeout(() => {
14
+ timeoutId = setTimeout(() => {
14
15
  controller.abort();
15
16
  }, timeoutMs);
16
- // Perform HEAD request to verify connectivity and save bandwidth
17
- const response = await fetch(pingUrl, {
18
- method: 'HEAD',
17
+ // Append dynamic timestamp and random string to strictly bypass network/DNS caching
18
+ const uniqueUrl = `${pingUrl}${pingUrl.includes('?') ? '&' : '?'}t=${Date.now()}&r=${Math.random().toString().slice(2)}`;
19
+ // Perform GET request to verify connectivity.
20
+ // We use GET instead of HEAD for maximum compatibility across various CDNs and proxies.
21
+ // Since clients3.google.com/generate_204 returns a 204 No Content response,
22
+ // using GET has negligible bandwidth usage.
23
+ const response = await fetch(uniqueUrl, {
24
+ method: 'GET',
19
25
  signal: controller.signal,
20
26
  headers: {
21
27
  'Cache-Control': 'no-cache, no-store, must-revalidate',
@@ -23,15 +29,25 @@ export async function getLatency(pingUrl, timeoutMs) {
23
29
  'Expires': '0',
24
30
  },
25
31
  });
26
- clearTimeout(timeoutId);
32
+ // Fully consume the response body to prevent connection leaks in React Native
33
+ try {
34
+ await response.text();
35
+ }
36
+ catch (e) {
37
+ // ignore
38
+ }
27
39
  const isReachable = response.ok || response.status < 400;
28
40
  const latencyMs = Date.now() - startTime;
29
41
  return { isReachable, latencyMs };
30
42
  }
31
43
  catch (error) {
32
- // If HEAD fails, we could try GET, but usually standard endpoints support HEAD or GET.
33
44
  // If it fails due to network/timeout, we are offline.
34
45
  return { isReachable: false, latencyMs: null };
35
46
  }
47
+ finally {
48
+ if (timeoutId) {
49
+ clearTimeout(timeoutId);
50
+ }
51
+ }
36
52
  }
37
53
  //# sourceMappingURL=getLatency.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getLatency.js","sourceRoot":"","sources":["../../src/utils/getLatency.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,SAAiB;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,iEAAiE;QACjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE;gBACP,eAAe,EAAE,qCAAqC;gBACtD,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,GAAG;aACf;SACF,CAAC,CAAC;QAEH,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uFAAuF;QACvF,sDAAsD;QACtD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"getLatency.js","sourceRoot":"","sources":["../../src/utils/getLatency.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,SAAiB;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,SAAS,GAAyC,IAAI,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,oFAAoF;QACpF,MAAM,SAAS,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzH,8CAA8C;QAC9C,wFAAwF;QACxF,4EAA4E;QAC5E,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YACtC,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE;gBACP,eAAe,EAAE,qCAAqC;gBACtD,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,GAAG;aACf;SACF,CAAC,CAAC;QAEH,8EAA8E;QAC9E,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sDAAsD;QACtD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -6,5 +6,5 @@
6
6
  * @param speedTestFileSizeInBytes Known size of the remote asset in bytes
7
7
  * @returns A promise resolving to the estimated download speed in Mbps, or null if the test fails
8
8
  */
9
- export declare function runSpeedTest(speedTestUrl: string, speedTestFileSizeInBytes: number): Promise<number | null>;
9
+ export declare function runSpeedTest(speedTestUrl: string, speedTestFileSizeInBytes: number, timeoutMs?: number): Promise<number | null>;
10
10
  //# sourceMappingURL=runSpeedTest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runSpeedTest.d.ts","sourceRoot":"","sources":["../../src/utils/runSpeedTest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,wBAAwB,EAAE,MAAM,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkCxB"}
1
+ {"version":3,"file":"runSpeedTest.d.ts","sourceRoot":"","sources":["../../src/utils/runSpeedTest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,wBAAwB,EAAE,MAAM,EAChC,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+CxB"}
@@ -6,11 +6,18 @@
6
6
  * @param speedTestFileSizeInBytes Known size of the remote asset in bytes
7
7
  * @returns A promise resolving to the estimated download speed in Mbps, or null if the test fails
8
8
  */
9
- export async function runSpeedTest(speedTestUrl, speedTestFileSizeInBytes) {
9
+ export async function runSpeedTest(speedTestUrl, speedTestFileSizeInBytes, timeoutMs = 15000) {
10
+ let timeoutId = null;
10
11
  try {
11
12
  const startTime = Date.now();
12
- const response = await fetch(speedTestUrl, {
13
+ const controller = new AbortController();
14
+ timeoutId = setTimeout(() => {
15
+ controller.abort();
16
+ }, timeoutMs);
17
+ const uniqueUrl = `${speedTestUrl}${speedTestUrl.includes('?') ? '&' : '?'}t=${Date.now()}&r=${Math.random().toString().slice(2)}`;
18
+ const response = await fetch(uniqueUrl, {
13
19
  method: 'GET',
20
+ signal: controller.signal,
14
21
  headers: {
15
22
  'Cache-Control': 'no-cache, no-store, must-revalidate',
16
23
  'Pragma': 'no-cache',
@@ -35,5 +42,10 @@ export async function runSpeedTest(speedTestUrl, speedTestFileSizeInBytes) {
35
42
  console.warn('Network speed test failed:', error);
36
43
  return null;
37
44
  }
45
+ finally {
46
+ if (timeoutId) {
47
+ clearTimeout(timeoutId);
48
+ }
49
+ }
38
50
  }
39
51
  //# sourceMappingURL=runSpeedTest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runSpeedTest.js","sourceRoot":"","sources":["../../src/utils/runSpeedTest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,YAAoB,EACpB,wBAAgC;IAEhC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;YACzC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,eAAe,EAAE,qCAAqC;gBACtD,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,GAAG;aACf;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,oFAAoF;QACpF,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACpD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,wBAAwB,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;QAEvD,yCAAyC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"runSpeedTest.js","sourceRoot":"","sources":["../../src/utils/runSpeedTest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,YAAoB,EACpB,wBAAgC,EAChC,YAAoB,KAAK;IAEzB,IAAI,SAAS,GAAyC,IAAI,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,SAAS,GAAG,GAAG,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YACtC,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE;gBACP,eAAe,EAAE,qCAAqC;gBACtD,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,GAAG;aACf;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,oFAAoF;QACpF,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACpD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,wBAAwB,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;QAEvD,yCAAyC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@akbeniwal/react-native-smart-netinfo",
3
- "version": "1.0.1",
3
+
4
+ "version": "1.0.3",
4
5
  "description": "A lightweight smart network monitoring library for React Native with internet reachability, latency monitoring, connection quality detection and speed testing.",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",