@kesha-antonov/react-native-background-downloader 3.0.0-beta.1 → 3.0.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.
package/README.md CHANGED
@@ -163,10 +163,12 @@ for (let task of lostTasks) {
163
163
  ### Using custom headers
164
164
  If you need to send custom headers with your download request, you can do in it 2 ways:
165
165
 
166
- 1) Globally using `RNBackgroundDownloader.setHeaders()`:
166
+ 1) Globally using `RNBackgroundDownloader.setConfig()`:
167
167
  ```javascript
168
- RNBackgroundDownloader.setHeaders({
169
- Authorization: 'Bearer 2we$@$@Ddd223'
168
+ RNBackgroundDownloader.setConfig({
169
+ headers: {
170
+ Authorization: 'Bearer 2we$@$@Ddd223',
171
+ }
170
172
  })
171
173
  ```
172
174
  This way, all downloads with have the given headers.
@@ -190,7 +192,7 @@ let task = RNBackgroundDownloader.download({
190
192
  console.log('Download canceled due to error: ', error)
191
193
  })
192
194
  ```
193
- Headers given in the `download` function are **merged** with the ones given in `setHeaders`.
195
+ Headers given in the `download` function are **merged** with the ones given in `setConfig({ headers: { ... } })`.
194
196
 
195
197
  ## API
196
198
 
@@ -210,7 +212,7 @@ An object containing options properties
210
212
  | `url` | String | ✅ | All | URL to file you want to download |
211
213
  | `destination` | String | ✅ | All | Where to copy the file to once the download is done |
212
214
  | `metadata` | Object | | All | Data to be preserved on reboot. |
213
- | `headers` | Object | | All | Costume headers to add to the download request. These are merged with the headers given in the `setHeaders` function |
215
+ | `headers` | Object | | All | Costume headers to add to the download request. These are merged with the headers given in the `setConfig({ headers: { ... } })` function |
214
216
  | `isAllowedOverRoaming` | Boolean | | Android | whether this download may proceed over a roaming connection. By default, roaming is allowed |
215
217
  | `isAllowedOverMetered` | Boolean | | Android | Whether this download may proceed over a metered network connection. By default, metered networks are allowed |
216
218
 
@@ -228,11 +230,13 @@ Recommended to run at the init stage of the app.
228
230
 
229
231
  `DownloadTask[]` - Array of tasks that were running in the background so you can re-attach callbacks to them
230
232
 
231
- ### `setHeaders(headers)`
232
-
233
- Sets headers to use in all future downloads.
233
+ ### `setConfig({})`
234
234
 
235
- **headers** - Object
235
+ | Name | Type | Info |
236
+ | -------------- | ------ | ---------------------------------------------------------------------------------------------------- |
237
+ | `headers` | Object | optional headers to use in all future downloads |
238
+ | `progressInterval` | Number | Interval in which download progress sent from downloader. Number should be >= 250. It's in ms |
239
+ | `isLogsEnabled` | Boolean | Enables/disables logs in library |
236
240
 
237
241
  ### DownloadTask
238
242
 
@@ -51,7 +51,6 @@ public class Downloader {
51
51
  }
52
52
 
53
53
  public int cancelDownload(long downloadId) {
54
- Log.d("RNBackgroundDownloader", "Downloader cancelDownload " + downloadId);
55
54
  return downloadManager.remove(downloadId);
56
55
  }
57
56
 
@@ -38,7 +38,6 @@ public class OnProgress extends Thread {
38
38
 
39
39
  private void handleInterrupt() {
40
40
  try {
41
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress handleInterrupt. downloadId " + downloadId);
42
41
  if (cursor != null) {
43
42
  cursor.close();
44
43
  }
@@ -50,11 +49,8 @@ public class OnProgress extends Thread {
50
49
 
51
50
  @Override
52
51
  public void run() {
53
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-1. downloadId " + downloadId);
54
52
  while (downloadId > 0) {
55
53
  try {
56
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-2. downloadId " + downloadId + " destination " + config.destination);
57
-
58
54
  cursor = downloader.downloadManager.query(query);
59
55
 
60
56
  if (!cursor.moveToFirst()) {
@@ -67,13 +63,10 @@ public class OnProgress extends Thread {
67
63
  }
68
64
 
69
65
  if (status == DownloadManager.STATUS_PAUSED) {
70
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-2.1. downloadId " + downloadId);
71
66
  Thread.sleep(5000);
72
67
  } else if (status == DownloadManager.STATUS_PENDING) {
73
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-2.2. downloadId " + downloadId);
74
68
  Thread.sleep(1000);
75
69
  } else {
76
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-2.3. downloadId " + downloadId);
77
70
  Thread.sleep(250);
78
71
  }
79
72
 
@@ -90,9 +83,6 @@ public class OnProgress extends Thread {
90
83
  lastBytesDownloaded = bytesDownloaded;
91
84
  }
92
85
 
93
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-3. downloadId " + downloadId + " bytesDownloaded "
94
- + bytesDownloaded + " bytesTotal " + bytesTotal);
95
-
96
86
  if (lastBytesDownloaded > 0 && bytesTotal > 0) {
97
87
  callback.onProgress(config.id, lastBytesDownloaded, bytesTotal);
98
88
  }
@@ -102,11 +92,11 @@ public class OnProgress extends Thread {
102
92
 
103
93
  try {
104
94
  if (cursor != null) {
105
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-5. downloadId " + downloadId);
106
95
  cursor.close();
107
- Log.d("RNBackgroundDownloader", "RNBD: OnProgress-6. downloadId " + downloadId);
108
96
  }
109
97
  } catch (Exception e) {
98
+ e.printStackTrace();
99
+ Log.e("RNBackgroundDownloader", "RNBD: OnProgress e: " + Log.getStackTraceString(e));
110
100
  return;
111
101
  }
112
102
  }
@@ -94,19 +94,15 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
94
94
  BroadcastReceiver downloadReceiver = new BroadcastReceiver() {
95
95
  @Override
96
96
  public void onReceive(Context context, Intent intent) {
97
- Log.d(getName(), "RNBD: onReceive-1");
98
97
  try {
99
98
  long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
100
- Log.d(getName(), "RNBD: onReceive-2 " + downloadId);
101
99
 
102
100
  RNBGDTaskConfig config = downloadIdToConfig.get(downloadId);
103
101
 
104
102
  if (config != null) {
105
- Log.d(getName(), "RNBD: onReceive-3");
106
103
  WritableMap downloadStatus = downloader.checkDownloadStatus(downloadId);
107
104
  int status = downloadStatus.getInt("status");
108
105
 
109
- Log.d(getName(), "RNBD: onReceive: status - " + status);
110
106
 
111
107
  stopTrackingProgress(config.id);
112
108
 
@@ -115,11 +111,8 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
115
111
  case DownloadManager.STATUS_SUCCESSFUL: {
116
112
  // MOVES FILE TO DESTINATION
117
113
  String localUri = downloadStatus.getString("localUri");
118
- Log.d(getName(), "RNBD: onReceive: localUri " + localUri + " destination " + config.destination);
119
114
  File file = new File(localUri);
120
- Log.d(getName(), "RNBD: onReceive: file exists " + file.exists());
121
115
  File dest = new File(config.destination);
122
- Log.d(getName(), "RNBD: onReceive: dest exists " + dest.exists());
123
116
  Files.move(file.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);
124
117
 
125
118
  WritableMap params = Arguments.createMap();
@@ -146,6 +139,7 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
146
139
  }
147
140
  }
148
141
  } catch (Exception e) {
142
+ e.printStackTrace();
149
143
  Log.e(getName(), "downloadReceiver: onReceive. " + Log.getStackTraceString(e));
150
144
  }
151
145
  }
@@ -236,8 +230,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
236
230
  }
237
231
 
238
232
  private void removeFromMaps(long downloadId) {
239
- Log.d(getName(), "RNBD: removeFromMaps");
240
-
241
233
  synchronized (sharedLock) {
242
234
  RNBGDTaskConfig config = downloadIdToConfig.get(downloadId);
243
235
  if (config != null) {
@@ -251,8 +243,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
251
243
  }
252
244
 
253
245
  private void saveDownloadIdToConfigMap() {
254
- Log.d(getName(), "RNBD: saveDownloadIdToConfigMap");
255
-
256
246
  synchronized (sharedLock) {
257
247
  File file = new File(this.getReactApplicationContext().getFilesDir(), getName() + "_downloadIdToConfig");
258
248
  try {
@@ -267,8 +257,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
267
257
  }
268
258
 
269
259
  private void loadDownloadIdToConfigMap() {
270
- Log.d(getName(), "RNBD: loadDownloadIdToConfigMap");
271
-
272
260
  File file = new File(this.getReactApplicationContext().getFilesDir(), getName() + "_downloadIdToConfig");
273
261
  if (file.exists()) {
274
262
  try {
@@ -281,8 +269,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
281
269
  }
282
270
 
283
271
  private void saveConfigMap () {
284
- Log.d(getName(), "RNBD: saveConfigMap");
285
-
286
272
  synchronized (sharedLock) {
287
273
  File file = new File(this.getReactApplicationContext().getFilesDir(), getName() + "_config");
288
274
  try {
@@ -300,8 +286,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
300
286
  }
301
287
 
302
288
  private void loadConfigMap () {
303
- Log.d(getName(), "RNBD: loadConfigMap");
304
-
305
289
  File file = new File(this.getReactApplicationContext().getFilesDir(), getName() + "_config");
306
290
  if (file.exists()) {
307
291
  try {
@@ -312,7 +296,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
312
296
  String key = entry.getKey();
313
297
 
314
298
  Object valueObj = entry.getValue();
315
- Log.d(getName(), "RNBD: loadConfigMap-1 " + " key " + key + " valueObj " + valueObj);
316
299
  String value = null;
317
300
  if (valueObj instanceof Long) {
318
301
  value = Long.toString((Long) valueObj);
@@ -354,8 +337,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
354
337
  boolean isAllowedOverRoaming = options.getBoolean("isAllowedOverRoaming");
355
338
  boolean isAllowedOverMetered = options.getBoolean("isAllowedOverMetered");
356
339
 
357
- Log.d(getName(), "RNBD: download " + id + " " + url + " " + destination + " " + metadata + " " + progressInterval);
358
-
359
340
  if (id == null || url == null || destination == null) {
360
341
  Log.e(getName(), "id, url and destination must be set");
361
342
  return;
@@ -398,8 +379,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
398
379
  WritableMap downloadStatus = downloader.checkDownloadStatus(downloadId);
399
380
  int status = downloadStatus.getInt("status");
400
381
 
401
- Log.d(getName(), "RNBD: download-1. status: " + status + " downloadId: " + downloadId);
402
-
403
382
  if (config.reportedBegin) {
404
383
  return;
405
384
  }
@@ -409,31 +388,24 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
409
388
  }
410
389
 
411
390
  private void startReportingTasks(Long downloadId, RNBGDTaskConfig config) {
412
- Log.d(getName(), "RNBD: startReportingTasks-1 downloadId " + downloadId + " config.id " + config.id);
413
391
  config.reportedBegin = true;
414
392
  downloadIdToConfig.put(downloadId, config);
415
393
  saveDownloadIdToConfigMap();
416
394
 
417
- Log.d(getName(), "RNBD: startReportingTasks-2 downloadId: " + downloadId);
418
395
  // report begin & progress
419
396
  //
420
397
  // overlaped with thread to not block main thread
421
398
  new Thread(new Runnable() {
422
399
  public void run() {
423
400
  try {
424
- Log.d(getName(), "RNBD: startReportingTasks-3 downloadId: " + downloadId);
425
-
426
401
  while (true) {
427
402
  WritableMap downloadStatus = downloader.checkDownloadStatus(downloadId);
428
403
  int status = downloadStatus.getInt("status");
429
404
 
430
- Log.d(getName(), "RNBD: startReportingTasks-3.1 " + status + " downloadId: " + downloadId);
431
-
432
405
  if (status == DownloadManager.STATUS_RUNNING) {
433
406
  break;
434
407
  }
435
408
  if (status == DownloadManager.STATUS_FAILED || status == DownloadManager.STATUS_SUCCESSFUL) {
436
- Log.d(getName(), "RNBD: startReportingTasks-3.2 " + status + " downloadId: " + downloadId);
437
409
  Thread.currentThread().interrupt();
438
410
  }
439
411
 
@@ -446,7 +418,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
446
418
  // wait for onBeginTh to finish
447
419
  onBeginTh.join();
448
420
 
449
- Log.d(getName(), "RNBD: startReportingTasks-4 downloadId: " + downloadId);
450
421
  OnProgress onProgressTh = new OnProgress(
451
422
  config,
452
423
  downloadId,
@@ -454,12 +425,9 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
454
425
  new ProgressCallback() {
455
426
  @Override
456
427
  public void onProgress(String configId, int bytesDownloaded, int bytesTotal) {
457
- Log.d(getName(), "RNBD: onProgress-1 " + configId + " " + bytesDownloaded + " " + bytesTotal);
458
-
459
428
  double prevPercent = configIdToPercent.get(configId);
460
429
  double percent = (double) bytesDownloaded / bytesTotal;
461
430
  if (percent - prevPercent > 0.01) {
462
- Log.d(getName(), "RNBD: onProgress-2 " + configId + " " + bytesDownloaded + " " + bytesTotal);
463
431
  WritableMap params = Arguments.createMap();
464
432
  params.putString("id", configId);
465
433
  params.putInt("bytesDownloaded", bytesDownloaded);
@@ -474,7 +442,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
474
442
  now.getTime() - lastProgressReportedAt.getTime() > progressInterval &&
475
443
  progressReports.size() > 0
476
444
  ) {
477
- Log.d(getName(), "RNBD: onProgress-3 " + configId + " " + bytesDownloaded + " " + bytesTotal);
478
445
  WritableArray reportsArray = Arguments.createArray();
479
446
  for (Object report : progressReports.values()) {
480
447
  reportsArray.pushMap((WritableMap) report);
@@ -488,20 +455,17 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
488
455
  );
489
456
  onProgressThreads.put(config.id, onProgressTh);
490
457
  onProgressTh.start();
491
- Log.d(getName(), "RNBD: startReportingTasks-5 downloadId: " + downloadId);
492
458
  } catch (Exception e) {
493
- Log.d(getName(), "RNBD: Runnable e: " + e.toString());
459
+ e.printStackTrace();
460
+ Log.e(getName(), "RNBD: Runnable e: " + Log.getStackTraceString(e));
494
461
  }
495
462
  }
496
463
  }).start();
497
- Log.d(getName(), "RNBD: startReportingTasks-6 downloadId: " + downloadId);
498
464
  }
499
465
 
500
466
  // TODO: NOT WORKING WITH DownloadManager FOR NOW
501
467
  @ReactMethod
502
468
  public void pauseTask(String configId) {
503
- Log.d(getName(), "RNBD: pauseTask " + configId);
504
-
505
469
  synchronized (sharedLock) {
506
470
  Long downloadId = configIdToDownloadId.get(configId);
507
471
  if (downloadId != null) {
@@ -513,8 +477,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
513
477
  // TODO: NOT WORKING WITH DownloadManager FOR NOW
514
478
  @ReactMethod
515
479
  public void resumeTask(String configId) {
516
- Log.d(getName(), "RNBD: resumeTask " + configId);
517
-
518
480
  synchronized (sharedLock) {
519
481
  Long downloadId = configIdToDownloadId.get(configId);
520
482
  if (downloadId != null) {
@@ -525,11 +487,8 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
525
487
 
526
488
  @ReactMethod
527
489
  public void stopTask(String configId) {
528
- Log.d(getName(), "RNBD: stopTask-1 " + configId);
529
-
530
490
  synchronized (sharedLock) {
531
491
  Long downloadId = configIdToDownloadId.get(configId);
532
- Log.d(getName(), "RNBD: stopTask-2 " + configId + " downloadId " + downloadId);
533
492
  if (downloadId != null) {
534
493
  // DELETES CONFIG HERE SO receiver WILL NOT THROW ERROR DOWNLOAD_FAILED TO THE
535
494
  // USER
@@ -543,11 +502,8 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
543
502
 
544
503
  @ReactMethod
545
504
  public void completeHandler(String configId, final Promise promise) {
546
- Log.d(getName(), "RNBD: completeHandler-1 " + configId);
547
-
548
505
  synchronized (sharedLock) {
549
506
  Long downloadId = configIdToDownloadId.get(configId);
550
- Log.d(getName(), "RNBD: completeHandler-2 " + configId + " downloadId " + downloadId);
551
507
  if (downloadId != null) {
552
508
  removeFromMaps(downloadId);
553
509
  // REMOVES DOWNLOAD FROM DownloadManager SO IT WOULD NOT BE RETURNED IN checkForExistingDownloads
@@ -558,8 +514,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
558
514
 
559
515
  @ReactMethod
560
516
  public void checkForExistingDownloads(final Promise promise) {
561
- Log.d(getName(), "RNBD: checkForExistingDownloads-1");
562
-
563
517
  WritableArray foundIds = Arguments.createArray();
564
518
 
565
519
  synchronized (sharedLock) {
@@ -573,7 +527,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
573
527
  Long downloadId = Long.parseLong(downloadStatus.getString("downloadId"));
574
528
 
575
529
  if (downloadIdToConfig.containsKey(downloadId)) {
576
- Log.d(getName(), "RNBD: checkForExistingDownloads-2");
577
530
  RNBGDTaskConfig config = downloadIdToConfig.get(downloadId);
578
531
  WritableMap params = Arguments.createMap();
579
532
  params.putString("id", config.id);
@@ -596,7 +549,6 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
596
549
  // TOREMOVE
597
550
  // config.reportedBegin = true;
598
551
  } else {
599
- Log.d(getName(), "RNBD: checkForExistingDownloads-3");
600
552
  downloader.cancelDownload(downloadId);
601
553
  }
602
554
  } while (cursor.moveToNext());
@@ -604,7 +556,8 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule {
604
556
 
605
557
  cursor.close();
606
558
  } catch (Exception e) {
607
- Log.e(getName(), "Error in checkForExistingDownloads: " + e.getLocalizedMessage());
559
+ e.printStackTrace();
560
+ Log.e(getName(), "CheckForExistingDownloads e: " + Log.getStackTraceString(e));
608
561
  }
609
562
  }
610
563
 
package/index.ts CHANGED
@@ -4,6 +4,7 @@ import DownloadTask from './lib/DownloadTask'
4
4
  const { RNBackgroundDownloader } = NativeModules
5
5
  const RNBackgroundDownloaderEmitter = new NativeEventEmitter(RNBackgroundDownloader)
6
6
 
7
+ const MIN_PROGRESS_INTERVAL = 250
7
8
  const tasksMap = new Map()
8
9
 
9
10
  const config = {
@@ -24,11 +25,11 @@ RNBackgroundDownloaderEmitter.addListener('downloadBegin', ({ id, ...rest }) =>
24
25
  })
25
26
 
26
27
  RNBackgroundDownloaderEmitter.addListener('downloadProgress', events => {
27
- // log('[RNBackgroundDownloader] downloadProgress-1', events, tasksMap)
28
+ log('[RNBackgroundDownloader] downloadProgress-1', events, tasksMap)
28
29
  for (const event of events) {
29
30
  const { id, ...rest } = event
30
31
  const task = tasksMap.get(id)
31
- // log('[RNBackgroundDownloader] downloadProgress-2', id, task)
32
+ log('[RNBackgroundDownloader] downloadProgress-2', id, task)
32
33
  task?.onProgress(rest)
33
34
  }
34
35
  })
@@ -53,10 +54,10 @@ export function setConfig({ headers, progressInterval, isLogsEnabled }) {
53
54
  if (typeof headers === 'object') config.headers = headers
54
55
 
55
56
  if (progressInterval != null)
56
- if (typeof progressInterval === 'number' && progressInterval >= 200)
57
+ if (typeof progressInterval === 'number' && progressInterval >= MIN_PROGRESS_INTERVAL)
57
58
  config.progressInterval = progressInterval
58
59
  else
59
- console.warn(`[RNBackgroundDownloader] progressInterval must be a number >= 200. You passed ${progressInterval}`)
60
+ console.warn(`[RNBackgroundDownloader] progressInterval must be a number >= ${MIN_PROGRESS_INTERVAL}. You passed ${progressInterval}`)
60
61
 
61
62
  if (typeof isLogsEnabled === 'boolean') config.isLogsEnabled = isLogsEnabled
62
63
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kesha-antonov/react-native-background-downloader",
3
- "version": "3.0.0-beta.1",
3
+ "version": "3.0.0",
4
4
  "description": "A library for React-Native to help you download large files on iOS and Android both in the foreground and most importantly in the background.",
5
5
  "keywords": [
6
6
  "react-native",
@@ -55,21 +55,21 @@
55
55
  ]
56
56
  },
57
57
  "devDependencies": {
58
- "@babel/core": "^7.23.6",
58
+ "@babel/core": "^7.23.7",
59
59
  "@babel/eslint-parser": "^7.23.3",
60
- "@babel/preset-env": "^7.23.6",
60
+ "@babel/preset-env": "^7.23.7",
61
61
  "@babel/preset-typescript": "^7.23.3",
62
- "@babel/runtime": "^7.23.6",
62
+ "@babel/runtime": "^7.23.7",
63
63
  "@react-native/babel-preset": "^0.74.0",
64
64
  "@react-native/eslint-config": "^0.74.0",
65
- "@typescript-eslint/eslint-plugin": "^6.13.1",
66
- "@typescript-eslint/parser": "^6.13.1",
65
+ "@typescript-eslint/eslint-plugin": "^6.17.0",
66
+ "@typescript-eslint/parser": "^6.17.0",
67
67
  "babel-jest": "^29.7.0",
68
68
  "eslint": "^8.56.0",
69
69
  "eslint-config-standard": "^17.1.0",
70
70
  "eslint-config-standard-jsx": "^11.0.0",
71
71
  "eslint-plugin-import": "^2.29.1",
72
- "eslint-plugin-n": "^16.5.0",
72
+ "eslint-plugin-n": "^16.6.1",
73
73
  "eslint-plugin-node": "^11.1.0",
74
74
  "eslint-plugin-promise": "^6.1.1",
75
75
  "eslint-plugin-react": "^7.33.2",
@@ -80,7 +80,7 @@
80
80
  "lint-staged": ">=15",
81
81
  "metro-react-native-babel-preset": "^0.77.0",
82
82
  "react": "18.2.0",
83
- "react-native": "0.73.0",
83
+ "react-native": "0.73.1",
84
84
  "react-native-fs": "^2.20.0",
85
85
  "react-native-vector-icons": "^10.0.3",
86
86
  "react-test-renderer": "18.2.0",