@datalyr/react-native 1.3.0 → 1.4.0

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.
@@ -6,12 +6,28 @@
6
6
  * - iOS: Meta SDK, TikTok SDK, Apple Search Ads (AdServices)
7
7
  * - Android: Meta SDK, TikTok SDK, Play Install Referrer
8
8
  */
9
- var _a;
9
+ var _a, _b;
10
10
  import { NativeModules, Platform } from 'react-native';
11
+ import { requireNativeModule } from 'expo-modules-core';
11
12
  // Native modules - available on both iOS and Android
12
- const DatalyrNative = (_a = NativeModules.DatalyrNative) !== null && _a !== void 0 ? _a : null;
13
- // Play Install Referrer - Android only
14
- const DatalyrPlayInstallReferrer = Platform.OS === 'android' ? NativeModules.DatalyrPlayInstallReferrer : null;
13
+ // iOS uses Expo Modules (new arch compatible), Android uses NativeModules (interop layer)
14
+ let DatalyrNative = null;
15
+ if (Platform.OS === 'ios') {
16
+ try {
17
+ DatalyrNative = requireNativeModule('DatalyrNative');
18
+ }
19
+ catch (_c) {
20
+ // Native module not available
21
+ }
22
+ }
23
+ else if (Platform.OS === 'android') {
24
+ DatalyrNative = (_a = NativeModules.DatalyrNative) !== null && _a !== void 0 ? _a : null;
25
+ }
26
+ // Play Install Referrer - Android only (stays on NativeModules)
27
+ let DatalyrPlayInstallReferrer = null;
28
+ if (Platform.OS === 'android') {
29
+ DatalyrPlayInstallReferrer = (_b = NativeModules.DatalyrPlayInstallReferrer) !== null && _b !== void 0 ? _b : null;
30
+ }
15
31
  /**
16
32
  * Check if native module is available
17
33
  */
@@ -5,6 +5,46 @@ export interface SKANConversionResult {
5
5
  lockWindow: boolean;
6
6
  priority: number;
7
7
  }
8
+ export interface PostbackUpdateResponse {
9
+ success: boolean;
10
+ framework: 'AdAttributionKit' | 'SKAdNetwork';
11
+ fineValue: number;
12
+ coarseValue: string;
13
+ lockWindow: boolean;
14
+ type?: 'reengagement';
15
+ }
16
+ export interface AttributionFrameworkInfo {
17
+ framework: 'AdAttributionKit' | 'SKAdNetwork' | 'none';
18
+ version: string;
19
+ reengagement_available: boolean;
20
+ overlapping_windows: boolean;
21
+ fine_value_range: {
22
+ min: number;
23
+ max: number;
24
+ };
25
+ coarse_values: string[];
26
+ }
27
+ export interface EnhancedAttributionInfo extends AttributionFrameworkInfo {
28
+ geo_postback_available: boolean;
29
+ development_postbacks: boolean;
30
+ features: string[];
31
+ }
32
+ export interface PostbackEnvironmentResponse {
33
+ environment: 'production' | 'sandbox';
34
+ isSandbox: boolean;
35
+ note: string;
36
+ }
37
+ export interface OverlappingWindowPostbackResponse {
38
+ success: boolean;
39
+ framework: string;
40
+ version: string;
41
+ fineValue: number;
42
+ coarseValue: string;
43
+ lockWindow: boolean;
44
+ windowIndex: number;
45
+ overlappingWindows: boolean;
46
+ note?: string;
47
+ }
8
48
  export declare class SKAdNetworkBridge {
9
49
  private static _isSKAN4Available;
10
50
  /**
@@ -22,4 +62,85 @@ export declare class SKAdNetworkBridge {
22
62
  */
23
63
  static isSKAN4Available(): Promise<boolean>;
24
64
  static isAvailable(): boolean;
65
+ /**
66
+ * Check if AdAttributionKit is available (iOS 17.4+)
67
+ * AdAttributionKit is Apple's replacement for SKAdNetwork with enhanced features
68
+ */
69
+ private static _isAdAttributionKitAvailable;
70
+ static isAdAttributionKitAvailable(): Promise<boolean>;
71
+ /**
72
+ * Register for ad network attribution
73
+ * Uses AdAttributionKit on iOS 17.4+, SKAdNetwork on earlier versions
74
+ */
75
+ static registerForAttribution(): Promise<{
76
+ framework: string;
77
+ registered: boolean;
78
+ } | null>;
79
+ /**
80
+ * Get attribution framework info
81
+ * Returns details about which framework is being used and its capabilities
82
+ */
83
+ static getAttributionInfo(): Promise<AttributionFrameworkInfo | null>;
84
+ /**
85
+ * Check if overlapping conversion windows are available (iOS 18.4+)
86
+ * Overlapping windows allow multiple conversion windows to be active simultaneously
87
+ */
88
+ private static _isOverlappingWindowsAvailable;
89
+ static isOverlappingWindowsAvailable(): Promise<boolean>;
90
+ /**
91
+ * Update conversion value for re-engagement attribution (AdAttributionKit iOS 17.4+ only)
92
+ * Re-engagement tracks users who return to the app via an ad after initial install.
93
+ *
94
+ * @param result - Conversion result with fine value (0-63), coarse value, and lock window
95
+ * @returns Response with framework info, or null if not supported
96
+ */
97
+ static updateReengagementConversionValue(result: SKANConversionResult): Promise<PostbackUpdateResponse | null>;
98
+ /**
99
+ * Get a summary of attribution capabilities for the current device
100
+ */
101
+ static getCapabilitiesSummary(): Promise<{
102
+ skadnetwork3: boolean;
103
+ skadnetwork4: boolean;
104
+ adAttributionKit: boolean;
105
+ reengagement: boolean;
106
+ overlappingWindows: boolean;
107
+ geoPostback: boolean;
108
+ developmentPostbacks: boolean;
109
+ framework: string;
110
+ }>;
111
+ /**
112
+ * Check if geo-level postback data is available (iOS 18.4+)
113
+ * Geo postbacks include country code information for regional analytics
114
+ */
115
+ private static _isGeoPostbackAvailable;
116
+ static isGeoPostbackAvailable(): Promise<boolean>;
117
+ /**
118
+ * Set postback environment for testing (iOS 18.4+)
119
+ * Note: Actual sandbox mode requires Developer Mode enabled in iOS Settings
120
+ *
121
+ * @param environment - 'production' or 'sandbox'
122
+ */
123
+ static setPostbackEnvironment(environment: 'production' | 'sandbox'): Promise<PostbackEnvironmentResponse | null>;
124
+ /**
125
+ * Get enhanced attribution info including iOS 18.4+ features
126
+ * Returns details about geo postbacks, development mode, and all available features
127
+ */
128
+ static getEnhancedAttributionInfo(): Promise<EnhancedAttributionInfo | null>;
129
+ /**
130
+ * Update postback with overlapping window support (iOS 18.4+)
131
+ * Allows tracking conversions across multiple time windows simultaneously
132
+ *
133
+ * @param result - Conversion result with fine value, coarse value, and lock window
134
+ * @param windowIndex - Window index: 0 (0-2 days), 1 (3-7 days), 2 (8-35 days)
135
+ */
136
+ static updatePostbackWithWindow(result: SKANConversionResult, windowIndex: 0 | 1 | 2): Promise<OverlappingWindowPostbackResponse | null>;
137
+ /**
138
+ * Enable development/sandbox mode for testing attribution
139
+ * Convenience method that sets sandbox environment
140
+ */
141
+ static enableDevelopmentMode(): Promise<boolean>;
142
+ /**
143
+ * Disable development mode (switch to production)
144
+ */
145
+ static disableDevelopmentMode(): Promise<boolean>;
25
146
  }
@@ -1,5 +1,15 @@
1
- import { NativeModules, Platform } from 'react-native';
2
- const { DatalyrSKAdNetwork } = NativeModules;
1
+ import { Platform } from 'react-native';
2
+ import { requireNativeModule } from 'expo-modules-core';
3
+ // SKAdNetwork is iOS-only, use Expo Modules for new arch compatibility
4
+ let DatalyrSKAdNetwork;
5
+ if (Platform.OS === 'ios') {
6
+ try {
7
+ DatalyrSKAdNetwork = requireNativeModule('DatalyrSKAdNetwork');
8
+ }
9
+ catch (_a) {
10
+ // Module not available
11
+ }
12
+ }
3
13
  export class SKAdNetworkBridge {
4
14
  /**
5
15
  * SKAN 3.0 - Update conversion value (0-63)
@@ -36,7 +46,7 @@ export class SKAdNetworkBridge {
36
46
  return false;
37
47
  }
38
48
  try {
39
- const success = await DatalyrSKAdNetwork.updatePostbackConversionValue(result.fineValue, result.coarseValue, result.lockWindow);
49
+ const response = await DatalyrSKAdNetwork.updatePostbackConversionValue(result.fineValue, result.coarseValue, result.lockWindow);
40
50
  const isSKAN4 = await this.isSKAN4Available();
41
51
  if (isSKAN4) {
42
52
  console.log(`[Datalyr] SKAN 4.0 postback updated: fineValue=${result.fineValue}, coarseValue=${result.coarseValue}, lockWindow=${result.lockWindow}`);
@@ -44,7 +54,7 @@ export class SKAdNetworkBridge {
44
54
  else {
45
55
  console.log(`[Datalyr] SKAN 3.0 fallback: conversionValue=${result.fineValue}`);
46
56
  }
47
- return success;
57
+ return response.success;
48
58
  }
49
59
  catch (error) {
50
60
  console.warn('[Datalyr] Failed to update SKAdNetwork postback conversion value:', error);
@@ -75,5 +85,279 @@ export class SKAdNetworkBridge {
75
85
  static isAvailable() {
76
86
  return Platform.OS === 'ios' && !!DatalyrSKAdNetwork;
77
87
  }
88
+ static async isAdAttributionKitAvailable() {
89
+ if (Platform.OS !== 'ios') {
90
+ return false;
91
+ }
92
+ if (this._isAdAttributionKitAvailable !== null) {
93
+ return this._isAdAttributionKitAvailable;
94
+ }
95
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.isAdAttributionKitAvailable)) {
96
+ return false;
97
+ }
98
+ try {
99
+ this._isAdAttributionKitAvailable = await DatalyrSKAdNetwork.isAdAttributionKitAvailable();
100
+ return this._isAdAttributionKitAvailable;
101
+ }
102
+ catch (_a) {
103
+ return false;
104
+ }
105
+ }
106
+ /**
107
+ * Register for ad network attribution
108
+ * Uses AdAttributionKit on iOS 17.4+, SKAdNetwork on earlier versions
109
+ */
110
+ static async registerForAttribution() {
111
+ if (Platform.OS !== 'ios') {
112
+ return null;
113
+ }
114
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.registerForAttribution)) {
115
+ console.warn('[Datalyr] Attribution registration not available');
116
+ return null;
117
+ }
118
+ try {
119
+ const result = await DatalyrSKAdNetwork.registerForAttribution();
120
+ console.log(`[Datalyr] Registered for attribution: ${result.framework}`);
121
+ return result;
122
+ }
123
+ catch (error) {
124
+ console.warn('[Datalyr] Failed to register for attribution:', error);
125
+ return null;
126
+ }
127
+ }
128
+ /**
129
+ * Get attribution framework info
130
+ * Returns details about which framework is being used and its capabilities
131
+ */
132
+ static async getAttributionInfo() {
133
+ if (Platform.OS !== 'ios') {
134
+ return {
135
+ framework: 'none',
136
+ version: '0',
137
+ reengagement_available: false,
138
+ overlapping_windows: false,
139
+ fine_value_range: { min: 0, max: 0 },
140
+ coarse_values: [],
141
+ };
142
+ }
143
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.getAttributionInfo)) {
144
+ return null;
145
+ }
146
+ try {
147
+ return await DatalyrSKAdNetwork.getAttributionInfo();
148
+ }
149
+ catch (error) {
150
+ console.warn('[Datalyr] Failed to get attribution info:', error);
151
+ return null;
152
+ }
153
+ }
154
+ static async isOverlappingWindowsAvailable() {
155
+ if (Platform.OS !== 'ios') {
156
+ return false;
157
+ }
158
+ if (this._isOverlappingWindowsAvailable !== null) {
159
+ return this._isOverlappingWindowsAvailable;
160
+ }
161
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.isOverlappingWindowsAvailable)) {
162
+ return false;
163
+ }
164
+ try {
165
+ this._isOverlappingWindowsAvailable = await DatalyrSKAdNetwork.isOverlappingWindowsAvailable();
166
+ return this._isOverlappingWindowsAvailable;
167
+ }
168
+ catch (_a) {
169
+ return false;
170
+ }
171
+ }
172
+ /**
173
+ * Update conversion value for re-engagement attribution (AdAttributionKit iOS 17.4+ only)
174
+ * Re-engagement tracks users who return to the app via an ad after initial install.
175
+ *
176
+ * @param result - Conversion result with fine value (0-63), coarse value, and lock window
177
+ * @returns Response with framework info, or null if not supported
178
+ */
179
+ static async updateReengagementConversionValue(result) {
180
+ if (Platform.OS !== 'ios') {
181
+ return null; // Android doesn't support AdAttributionKit
182
+ }
183
+ // Check if AdAttributionKit is available (required for re-engagement)
184
+ const isAAKAvailable = await this.isAdAttributionKitAvailable();
185
+ if (!isAAKAvailable) {
186
+ console.warn('[Datalyr] Re-engagement attribution requires iOS 17.4+ (AdAttributionKit)');
187
+ return null;
188
+ }
189
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.updateReengagementConversionValue)) {
190
+ console.warn('[Datalyr] Re-engagement native module not available');
191
+ return null;
192
+ }
193
+ try {
194
+ const response = await DatalyrSKAdNetwork.updateReengagementConversionValue(result.fineValue, result.coarseValue, result.lockWindow);
195
+ console.log(`[Datalyr] AdAttributionKit re-engagement updated: fineValue=${result.fineValue}, coarseValue=${result.coarseValue}, lockWindow=${result.lockWindow}`);
196
+ return response;
197
+ }
198
+ catch (error) {
199
+ console.warn('[Datalyr] Failed to update re-engagement conversion value:', error);
200
+ return null;
201
+ }
202
+ }
203
+ /**
204
+ * Get a summary of attribution capabilities for the current device
205
+ */
206
+ static async getCapabilitiesSummary() {
207
+ var _a, _b;
208
+ const info = await this.getAttributionInfo();
209
+ const isSKAN4 = await this.isSKAN4Available();
210
+ const isAAK = await this.isAdAttributionKitAvailable();
211
+ const isOverlapping = await this.isOverlappingWindowsAvailable();
212
+ const isGeo = await this.isGeoPostbackAvailable();
213
+ return {
214
+ skadnetwork3: Platform.OS === 'ios',
215
+ skadnetwork4: isSKAN4,
216
+ adAttributionKit: isAAK,
217
+ reengagement: (_a = info === null || info === void 0 ? void 0 : info.reengagement_available) !== null && _a !== void 0 ? _a : false,
218
+ overlappingWindows: isOverlapping,
219
+ geoPostback: isGeo,
220
+ developmentPostbacks: isGeo, // Same iOS version requirement
221
+ framework: (_b = info === null || info === void 0 ? void 0 : info.framework) !== null && _b !== void 0 ? _b : 'none',
222
+ };
223
+ }
224
+ static async isGeoPostbackAvailable() {
225
+ if (Platform.OS !== 'ios') {
226
+ return false;
227
+ }
228
+ if (this._isGeoPostbackAvailable !== null) {
229
+ return this._isGeoPostbackAvailable;
230
+ }
231
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.isGeoPostbackAvailable)) {
232
+ return false;
233
+ }
234
+ try {
235
+ this._isGeoPostbackAvailable = await DatalyrSKAdNetwork.isGeoPostbackAvailable();
236
+ return this._isGeoPostbackAvailable;
237
+ }
238
+ catch (_a) {
239
+ return false;
240
+ }
241
+ }
242
+ /**
243
+ * Set postback environment for testing (iOS 18.4+)
244
+ * Note: Actual sandbox mode requires Developer Mode enabled in iOS Settings
245
+ *
246
+ * @param environment - 'production' or 'sandbox'
247
+ */
248
+ static async setPostbackEnvironment(environment) {
249
+ if (Platform.OS !== 'ios') {
250
+ return null;
251
+ }
252
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.setPostbackEnvironment)) {
253
+ console.warn('[Datalyr] Development postbacks require iOS 18.4+');
254
+ return null;
255
+ }
256
+ try {
257
+ const result = await DatalyrSKAdNetwork.setPostbackEnvironment(environment);
258
+ console.log(`[Datalyr] Postback environment: ${result.environment}`);
259
+ return result;
260
+ }
261
+ catch (error) {
262
+ console.warn('[Datalyr] Failed to set postback environment:', error);
263
+ return null;
264
+ }
265
+ }
266
+ /**
267
+ * Get enhanced attribution info including iOS 18.4+ features
268
+ * Returns details about geo postbacks, development mode, and all available features
269
+ */
270
+ static async getEnhancedAttributionInfo() {
271
+ if (Platform.OS !== 'ios') {
272
+ return {
273
+ framework: 'none',
274
+ version: '0',
275
+ reengagement_available: false,
276
+ overlapping_windows: false,
277
+ geo_postback_available: false,
278
+ development_postbacks: false,
279
+ fine_value_range: { min: 0, max: 0 },
280
+ coarse_values: [],
281
+ features: [],
282
+ };
283
+ }
284
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.getEnhancedAttributionInfo)) {
285
+ // Fallback to basic info if enhanced not available
286
+ const basicInfo = await this.getAttributionInfo();
287
+ if (basicInfo) {
288
+ return {
289
+ ...basicInfo,
290
+ geo_postback_available: false,
291
+ development_postbacks: false,
292
+ features: [],
293
+ };
294
+ }
295
+ return null;
296
+ }
297
+ try {
298
+ return await DatalyrSKAdNetwork.getEnhancedAttributionInfo();
299
+ }
300
+ catch (error) {
301
+ console.warn('[Datalyr] Failed to get enhanced attribution info:', error);
302
+ return null;
303
+ }
304
+ }
305
+ /**
306
+ * Update postback with overlapping window support (iOS 18.4+)
307
+ * Allows tracking conversions across multiple time windows simultaneously
308
+ *
309
+ * @param result - Conversion result with fine value, coarse value, and lock window
310
+ * @param windowIndex - Window index: 0 (0-2 days), 1 (3-7 days), 2 (8-35 days)
311
+ */
312
+ static async updatePostbackWithWindow(result, windowIndex) {
313
+ if (Platform.OS !== 'ios') {
314
+ return null;
315
+ }
316
+ if (!(DatalyrSKAdNetwork === null || DatalyrSKAdNetwork === void 0 ? void 0 : DatalyrSKAdNetwork.updatePostbackWithWindow)) {
317
+ console.warn('[Datalyr] Overlapping windows require iOS 16.1+ (full support on iOS 18.4+)');
318
+ return null;
319
+ }
320
+ try {
321
+ const response = await DatalyrSKAdNetwork.updatePostbackWithWindow(result.fineValue, result.coarseValue, result.lockWindow, windowIndex);
322
+ console.log(`[Datalyr] Postback updated for window ${windowIndex}: fineValue=${result.fineValue}, overlapping=${response.overlappingWindows}`);
323
+ return response;
324
+ }
325
+ catch (error) {
326
+ console.warn('[Datalyr] Failed to update postback with window:', error);
327
+ return null;
328
+ }
329
+ }
330
+ /**
331
+ * Enable development/sandbox mode for testing attribution
332
+ * Convenience method that sets sandbox environment
333
+ */
334
+ static async enableDevelopmentMode() {
335
+ var _a;
336
+ const result = await this.setPostbackEnvironment('sandbox');
337
+ return (_a = result === null || result === void 0 ? void 0 : result.isSandbox) !== null && _a !== void 0 ? _a : false;
338
+ }
339
+ /**
340
+ * Disable development mode (switch to production)
341
+ */
342
+ static async disableDevelopmentMode() {
343
+ const result = await this.setPostbackEnvironment('production');
344
+ return result !== null && !result.isSandbox;
345
+ }
78
346
  }
79
347
  SKAdNetworkBridge._isSKAN4Available = null;
348
+ /**
349
+ * Check if AdAttributionKit is available (iOS 17.4+)
350
+ * AdAttributionKit is Apple's replacement for SKAdNetwork with enhanced features
351
+ */
352
+ SKAdNetworkBridge._isAdAttributionKitAvailable = null;
353
+ /**
354
+ * Check if overlapping conversion windows are available (iOS 18.4+)
355
+ * Overlapping windows allow multiple conversion windows to be active simultaneously
356
+ */
357
+ SKAdNetworkBridge._isOverlappingWindowsAvailable = null;
358
+ // ===== iOS 18.4+ Features =====
359
+ /**
360
+ * Check if geo-level postback data is available (iOS 18.4+)
361
+ * Geo postbacks include country code information for regional analytics
362
+ */
363
+ SKAdNetworkBridge._isGeoPostbackAvailable = null;
@@ -0,0 +1,84 @@
1
+ export type NetworkState = {
2
+ isConnected: boolean;
3
+ isInternetReachable: boolean | null;
4
+ type: 'wifi' | 'cellular' | 'ethernet' | 'bluetooth' | 'vpn' | 'none' | 'unknown';
5
+ };
6
+ export type NetworkStateListener = (state: NetworkState) => void;
7
+ /**
8
+ * Network status manager that detects online/offline status
9
+ * Uses @react-native-community/netinfo for React Native or expo-network for Expo
10
+ */
11
+ declare class NetworkStatusManager {
12
+ private state;
13
+ private listeners;
14
+ private unsubscribe;
15
+ private initialized;
16
+ private netInfoModule;
17
+ private expoNetworkModule;
18
+ /**
19
+ * Initialize network status monitoring
20
+ * Call this during SDK initialization
21
+ */
22
+ initialize(): Promise<void>;
23
+ /**
24
+ * Initialize with @react-native-community/netinfo
25
+ */
26
+ private initializeWithNetInfo;
27
+ /**
28
+ * Update state from NetInfo response
29
+ */
30
+ private updateStateFromNetInfo;
31
+ /**
32
+ * Map NetInfo type to our simplified type
33
+ */
34
+ private mapNetInfoType;
35
+ /**
36
+ * Initialize with expo-network
37
+ */
38
+ private initializeWithExpoNetwork;
39
+ /**
40
+ * Update state from expo-network response
41
+ */
42
+ private updateStateFromExpoNetwork;
43
+ /**
44
+ * Map expo-network type to our simplified type
45
+ */
46
+ private mapExpoNetworkType;
47
+ /**
48
+ * Poll expo-network for changes (since it doesn't have a listener API)
49
+ */
50
+ private pollingInterval;
51
+ private startExpoNetworkPolling;
52
+ /**
53
+ * Notify all listeners of state change
54
+ */
55
+ private notifyListeners;
56
+ /**
57
+ * Get current network state
58
+ */
59
+ getState(): NetworkState;
60
+ /**
61
+ * Check if device is currently online
62
+ */
63
+ isOnline(): boolean;
64
+ /**
65
+ * Get current network type
66
+ */
67
+ getNetworkType(): NetworkState['type'];
68
+ /**
69
+ * Subscribe to network state changes
70
+ * Returns an unsubscribe function
71
+ */
72
+ subscribe(listener: NetworkStateListener): () => void;
73
+ /**
74
+ * Refresh network state manually
75
+ * Useful when returning from background
76
+ */
77
+ refresh(): Promise<NetworkState>;
78
+ /**
79
+ * Cleanup and stop monitoring
80
+ */
81
+ destroy(): void;
82
+ }
83
+ export declare const networkStatusManager: NetworkStatusManager;
84
+ export default networkStatusManager;