react-native-nitro-storage 0.10.2 → 0.10.4

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +38 -8
  3. package/android/CMakeLists.txt +2 -0
  4. package/android/src/main/cpp/AndroidStorageAdapterCpp.cpp +47 -29
  5. package/android/src/main/java/com/nitrostorage/AndroidStorageAdapter.kt +12 -25
  6. package/android/src/main/java/com/nitrostorage/DiskSqliteStore.kt +174 -0
  7. package/cpp/core/SqliteDiskStore.cpp +416 -0
  8. package/cpp/core/SqliteDiskStore.hpp +69 -0
  9. package/docs/api-reference.md +4 -1
  10. package/docs/benchmarks.md +37 -0
  11. package/docs/native-libraries.md +30 -0
  12. package/docs/secure-storage.md +5 -0
  13. package/ios/IOSStorageAdapterCpp.mm +146 -52
  14. package/lib/commonjs/index.js.map +1 -1
  15. package/lib/commonjs/index.web.js.map +1 -1
  16. package/lib/commonjs/shared.js.map +1 -1
  17. package/lib/commonjs/storage-core.js +57 -11
  18. package/lib/commonjs/storage-core.js.map +1 -1
  19. package/lib/commonjs/testing.js.map +1 -1
  20. package/lib/module/index.js.map +1 -1
  21. package/lib/module/index.web.js.map +1 -1
  22. package/lib/module/shared.js.map +1 -1
  23. package/lib/module/storage-core.js +57 -11
  24. package/lib/module/storage-core.js.map +1 -1
  25. package/lib/module/testing.js.map +1 -1
  26. package/lib/typescript/index.d.ts +2 -1
  27. package/lib/typescript/index.d.ts.map +1 -1
  28. package/lib/typescript/index.web.d.ts +2 -1
  29. package/lib/typescript/index.web.d.ts.map +1 -1
  30. package/lib/typescript/shared.d.ts +6 -0
  31. package/lib/typescript/shared.d.ts.map +1 -1
  32. package/lib/typescript/storage-core.d.ts +2 -1
  33. package/lib/typescript/storage-core.d.ts.map +1 -1
  34. package/lib/typescript/testing.d.ts +3 -1
  35. package/lib/typescript/testing.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/react-native-nitro-storage.podspec +2 -0
  38. package/src/index.ts +1 -0
  39. package/src/index.web.ts +1 -0
  40. package/src/shared.ts +7 -0
  41. package/src/storage-core.ts +65 -14
  42. package/src/testing.ts +1 -0
@@ -3,12 +3,32 @@
3
3
  #import <Security/Security.h>
4
4
  #import <LocalAuthentication/LocalAuthentication.h>
5
5
 
6
+ #include "SqliteDiskStore.hpp"
7
+
6
8
  #include <unordered_set>
7
9
  #include <utility>
8
10
  #include <vector>
9
11
 
10
12
  namespace NitroStorage {
11
13
 
14
+ // Storage strings are length-delimited; C-string conversion aliases keys at NUL.
15
+ static NSString* nsStringFromStdString(const std::string& value) {
16
+ NSString* result = [[NSString alloc] initWithBytes:value.data()
17
+ length:value.size() encoding:NSUTF8StringEncoding];
18
+ if (!result) {
19
+ throw std::runtime_error("NitroStorage: String is not valid UTF-8");
20
+ }
21
+ return result;
22
+ }
23
+
24
+ static std::string stdStringFromNSString(NSString* value) {
25
+ const char* bytes = [value UTF8String];
26
+ if (!bytes) {
27
+ throw std::runtime_error("NitroStorage: String cannot be encoded as UTF-8");
28
+ }
29
+ return std::string(bytes, [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
30
+ }
31
+
12
32
  static NSString* const kKeychainService = @"com.nitrostorage.keychain";
13
33
  static NSString* const kBiometricKeychainService = @"com.nitrostorage.biometric";
14
34
  static NSString* const kDiskSuiteName = @"com.nitrostorage.disk";
@@ -88,6 +108,50 @@ static void unregisterLegacyDiskKeys(NSArray<NSString*>* keys) {
88
108
  static NSString* const kLegacyDiskMigrationMarkerKey =
89
109
  @"__nitro_storage_legacy_disk_migration_v1__";
90
110
 
111
+ static std::string NitroDiskStorePath() {
112
+ NSArray<NSURL*>* urls = [[NSFileManager defaultManager]
113
+ URLsForDirectory:NSApplicationSupportDirectory
114
+ inDomains:NSUserDomainMask];
115
+ NSURL* directory = urls.firstObject;
116
+ if (directory == nil) {
117
+ return NitroStorage::SqliteDiskStore::defaultPath();
118
+ }
119
+ [[NSFileManager defaultManager]
120
+ createDirectoryAtURL:directory
121
+ withIntermediateDirectories:YES
122
+ attributes:nil
123
+ error:nil];
124
+ NSString* path = [[directory URLByAppendingPathComponent:@"nitro-storage-disk.sqlite"] path];
125
+ return stdStringFromNSString(path);
126
+ }
127
+
128
+ static NitroStorage::SqliteDiskStore& NitroSqliteDiskStore() {
129
+ return NitroStorage::SqliteDiskStore::shared(NitroDiskStorePath());
130
+ }
131
+
132
+ static bool isInternalDiskKey(NSString* key) {
133
+ return [key isEqualToString:kLegacyDiskKeysRegistryKey] ||
134
+ [key isEqualToString:kLegacyDiskMigrationMarkerKey];
135
+ }
136
+
137
+ static void migrateSuiteIntoSqlite() {
138
+ NSDictionary<NSString*, id>* entries =
139
+ [NitroDiskDefaults() persistentDomainForName:kDiskSuiteName] ?: @{};
140
+ std::vector<std::pair<std::string, std::string>> pairs;
141
+ pairs.reserve(entries.count);
142
+ for (NSString* key in entries) {
143
+ if (isInternalDiskKey(key)) {
144
+ continue;
145
+ }
146
+ id value = entries[key];
147
+ if (![value isKindOfClass:[NSString class]]) {
148
+ continue;
149
+ }
150
+ pairs.emplace_back(stdStringFromNSString(key), stdStringFromNSString((NSString*)value));
151
+ }
152
+ NitroSqliteDiskStore().migrateIfAbsent(pairs);
153
+ }
154
+
91
155
  static void runLegacyDiskMigrationCutover(
92
156
  NSUserDefaults* defaults,
93
157
  NSUserDefaults* standard
@@ -247,16 +311,27 @@ IOSStorageAdapterCpp::IOSStorageAdapterCpp() {
247
311
  NitroDiskDefaults(),
248
312
  [NSUserDefaults standardUserDefaults]
249
313
  );
314
+ migrateSuiteIntoSqlite();
250
315
  }
251
316
  IOSStorageAdapterCpp::~IOSStorageAdapterCpp() {}
252
317
 
318
+ #ifdef NITRO_STORAGE_TESTING
319
+ void resetSqliteDiskStoreForTesting() {
320
+ SqliteDiskStore::resetShared();
321
+ NSString* path = nsStringFromStdString(NitroDiskStorePath());
322
+ NSFileManager* files = [NSFileManager defaultManager];
323
+ [files removeItemAtPath:path error:nil];
324
+ [files removeItemAtPath:[path stringByAppendingString:@"-wal"] error:nil];
325
+ [files removeItemAtPath:[path stringByAppendingString:@"-shm"] error:nil];
326
+ }
327
+ #endif
328
+
253
329
  // --- Disk ---
254
330
 
255
331
  void IOSStorageAdapterCpp::setDisk(const std::string& key, const std::string& value) {
256
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
257
- NSString* nsValue = [NSString stringWithUTF8String:value.c_str()];
332
+ NitroSqliteDiskStore().set(key, value);
333
+ NSString* nsKey = nsStringFromStdString(key);
258
334
  NSUserDefaults* defaults = NitroDiskDefaults();
259
- [defaults setObject:nsValue forKey:nsKey];
260
335
  NSUserDefaults* standard = [NSUserDefaults standardUserDefaults];
261
336
  if (defaults != standard && [standard objectForKey:nsKey] != nil) {
262
337
  [standard removeObjectForKey:nsKey];
@@ -265,14 +340,20 @@ void IOSStorageAdapterCpp::setDisk(const std::string& key, const std::string& va
265
340
  }
266
341
 
267
342
  std::optional<std::string> IOSStorageAdapterCpp::getDisk(const std::string& key) {
268
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
343
+ if (auto stored = NitroSqliteDiskStore().get(key)) {
344
+ return stored;
345
+ }
346
+ NSString* nsKey = nsStringFromStdString(key);
269
347
  NSString* result = migrateLegacyDiskValue(nsKey);
270
348
  if (!result) return std::nullopt;
271
- return std::string([result UTF8String]);
349
+ const std::string value = stdStringFromNSString(result);
350
+ NitroSqliteDiskStore().set(key, value);
351
+ return value;
272
352
  }
273
353
 
274
354
  void IOSStorageAdapterCpp::deleteDisk(const std::string& key) {
275
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
355
+ NitroSqliteDiskStore().remove(key);
356
+ NSString* nsKey = nsStringFromStdString(key);
276
357
  NSUserDefaults* defaults = NitroDiskDefaults();
277
358
  [defaults removeObjectForKey:nsKey];
278
359
  NSUserDefaults* standard = [NSUserDefaults standardUserDefaults];
@@ -283,7 +364,10 @@ void IOSStorageAdapterCpp::deleteDisk(const std::string& key) {
283
364
  }
284
365
 
285
366
  bool IOSStorageAdapterCpp::hasDisk(const std::string& key) {
286
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
367
+ if (NitroSqliteDiskStore().has(key)) {
368
+ return true;
369
+ }
370
+ NSString* nsKey = nsStringFromStdString(key);
287
371
  NSUserDefaults* defaults = NitroDiskDefaults();
288
372
  if ([defaults objectForKey:nsKey] != nil) {
289
373
  return true;
@@ -296,20 +380,22 @@ bool IOSStorageAdapterCpp::hasDisk(const std::string& key) {
296
380
  }
297
381
 
298
382
  std::vector<std::string> IOSStorageAdapterCpp::getAllKeysDisk() {
383
+ std::unordered_set<std::string> combined;
384
+ for (const auto& key : NitroSqliteDiskStore().getAllKeys()) {
385
+ combined.insert(key);
386
+ }
299
387
  NSUserDefaults* defaults = NitroDiskDefaults();
300
388
  NSDictionary<NSString*, id>* entries = [defaults persistentDomainForName:kDiskSuiteName] ?: @{};
301
389
  NSUserDefaults* standard = [NSUserDefaults standardUserDefaults];
302
- std::unordered_set<std::string> combined;
303
390
  for (NSString* key in entries) {
304
- if (![key isEqualToString:kLegacyDiskKeysRegistryKey] &&
305
- ![key isEqualToString:kLegacyDiskMigrationMarkerKey]) {
306
- combined.insert(std::string([key UTF8String]));
391
+ if (!isInternalDiskKey(key)) {
392
+ combined.insert(stdStringFromNSString(key));
307
393
  }
308
394
  }
309
395
  for (NSString* key in [registeredLegacyDiskKeys() allObjects]) {
310
396
  if ([entries objectForKey:key] == nil &&
311
397
  [standard stringForKey:key] != nil) {
312
- combined.insert(std::string([key UTF8String]));
398
+ combined.insert(stdStringFromNSString(key));
313
399
  }
314
400
  }
315
401
  std::vector<std::string> keys;
@@ -321,14 +407,20 @@ std::vector<std::string> IOSStorageAdapterCpp::getAllKeysDisk() {
321
407
  }
322
408
 
323
409
  std::vector<std::string> IOSStorageAdapterCpp::getKeysByPrefixDisk(const std::string& prefix) {
324
- const auto keys = getAllKeysDisk();
325
- std::vector<std::string> filtered;
326
- filtered.reserve(keys.size());
327
- for (const auto& key : keys) {
410
+ std::unordered_set<std::string> combined;
411
+ for (const auto& key : NitroSqliteDiskStore().getKeysByPrefix(prefix)) {
412
+ combined.insert(key);
413
+ }
414
+ for (const auto& key : getAllKeysDisk()) {
328
415
  if (key.rfind(prefix, 0) == 0) {
329
- filtered.push_back(key);
416
+ combined.insert(key);
330
417
  }
331
418
  }
419
+ std::vector<std::string> filtered;
420
+ filtered.reserve(combined.size());
421
+ for (const auto& key : combined) {
422
+ filtered.push_back(key);
423
+ }
332
424
  return filtered;
333
425
  }
334
426
 
@@ -340,13 +432,12 @@ void IOSStorageAdapterCpp::setDiskBatch(
340
432
  const std::vector<std::string>& keys,
341
433
  const std::vector<std::string>& values
342
434
  ) {
435
+ NitroSqliteDiskStore().setBatch(keys, values);
343
436
  NSUserDefaults* defaults = NitroDiskDefaults();
344
437
  NSUserDefaults* standard = [NSUserDefaults standardUserDefaults];
345
438
  NSMutableArray* legacyKeysToRemove = [NSMutableArray array];
346
439
  for (size_t i = 0; i < keys.size() && i < values.size(); ++i) {
347
- NSString* nsKey = [NSString stringWithUTF8String:keys[i].c_str()];
348
- NSString* nsValue = [NSString stringWithUTF8String:values[i].c_str()];
349
- [defaults setObject:nsValue forKey:nsKey];
440
+ NSString* nsKey = nsStringFromStdString(keys[i]);
350
441
  if (defaults != standard && [standard objectForKey:nsKey] != nil) {
351
442
  [legacyKeysToRemove addObject:nsKey];
352
443
  }
@@ -369,18 +460,26 @@ std::vector<std::optional<std::string>> IOSStorageAdapterCpp::getDiskBatch(
369
460
  }
370
461
 
371
462
  void IOSStorageAdapterCpp::deleteDiskBatch(const std::vector<std::string>& keys) {
463
+ NitroSqliteDiskStore().removeBatch(keys);
372
464
  for (const auto& key : keys) {
373
- deleteDisk(key);
465
+ NSString* nsKey = nsStringFromStdString(key);
466
+ NSUserDefaults* defaults = NitroDiskDefaults();
467
+ [defaults removeObjectForKey:nsKey];
468
+ NSUserDefaults* standard = [NSUserDefaults standardUserDefaults];
469
+ if (defaults != standard && [standard objectForKey:nsKey] != nil) {
470
+ [standard removeObjectForKey:nsKey];
471
+ }
472
+ unregisterLegacyDiskKeys(@[nsKey]);
374
473
  }
375
474
  }
376
475
 
377
476
  void IOSStorageAdapterCpp::clearDisk() {
477
+ NitroSqliteDiskStore().clear();
378
478
  NSUserDefaults* defaults = NitroDiskDefaults();
379
479
  NSDictionary<NSString*, id>* entries = [defaults persistentDomainForName:kDiskSuiteName] ?: @{};
380
480
  NSMutableSet* legacyKeys = [registeredLegacyDiskKeys() mutableCopy];
381
481
  for (NSString* key in entries) {
382
- if ([key isEqualToString:kLegacyDiskKeysRegistryKey] ||
383
- [key isEqualToString:kLegacyDiskMigrationMarkerKey]) {
482
+ if (isInternalDiskKey(key)) {
384
483
  continue;
385
484
  }
386
485
  [defaults removeObjectForKey:key];
@@ -388,8 +487,7 @@ void IOSStorageAdapterCpp::clearDisk() {
388
487
  NSUserDefaults* standard = [NSUserDefaults standardUserDefaults];
389
488
  if (defaults != standard) {
390
489
  for (NSString* key in entries) {
391
- if ([key isEqualToString:kLegacyDiskKeysRegistryKey] ||
392
- [key isEqualToString:kLegacyDiskMigrationMarkerKey]) {
490
+ if (isInternalDiskKey(key)) {
393
491
  continue;
394
492
  }
395
493
  [standard removeObjectForKey:key];
@@ -472,7 +570,7 @@ static BiometricKeychainSnapshot captureBiometricValue(
472
570
  throw std::runtime_error("NitroStorage: Biometric snapshot value is not UTF-8");
473
571
  }
474
572
  snapshot.present = true;
475
- snapshot.value = std::string([stringValue UTF8String]);
573
+ snapshot.value = stdStringFromNSString(stringValue);
476
574
  snapshot.accessControl = (SecAccessControlRef)CFRetain((__bridge CFTypeRef)accessControl);
477
575
  CFRelease(result);
478
576
  return snapshot;
@@ -491,10 +589,6 @@ static NSMutableDictionary* allAccountsQuery(NSString* service, NSString* access
491
589
  return query;
492
590
  }
493
591
 
494
- static NSString* nsStringFromStdString(const std::string& value) {
495
- return [NSString stringWithUTF8String:value.c_str()];
496
- }
497
-
498
592
  static NSData* nsDataFromStdString(const std::string& value) {
499
593
  return [nsStringFromStdString(value) dataUsingEncoding:NSUTF8StringEncoding];
500
594
  }
@@ -553,7 +647,7 @@ static std::optional<std::string> getSecureValue(NSString* nsKey, NSString* grou
553
647
  if (status == errSecSuccess && result) {
554
648
  NSData* data = (__bridge_transfer NSData*)result;
555
649
  NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
556
- if (str) return std::string([str UTF8String]);
650
+ if (str) return stdStringFromNSString(str);
557
651
  }
558
652
  if (status == errSecInteractionNotAllowed) {
559
653
  throw taggedStorageError(
@@ -647,7 +741,7 @@ static std::vector<std::string> keychainAccountsForService(NSString* service, NS
647
741
  for (NSDictionary* item in itemArray) {
648
742
  NSString* account = item[(__bridge id)kSecAttrAccount];
649
743
  if (account) {
650
- keys.push_back(std::string([account UTF8String]));
744
+ keys.push_back(stdStringFromNSString(account));
651
745
  }
652
746
  }
653
747
  }
@@ -665,7 +759,7 @@ void IOSStorageAdapterCpp::setSecure(const std::string& key, const std::string&
665
759
  groupStr = keychainAccessGroup_;
666
760
  accessControlLevel = accessControlLevel_;
667
761
  }
668
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
762
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
669
763
  setSecureValue(nsKey, data, group, accessControlLevel);
670
764
  markSecureKeySet(key);
671
765
  }
@@ -677,7 +771,7 @@ std::optional<std::string> IOSStorageAdapterCpp::getSecure(const std::string& ke
677
771
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
678
772
  groupStr = keychainAccessGroup_;
679
773
  }
680
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
774
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
681
775
  return getSecureValue(nsKey, group);
682
776
  }
683
777
 
@@ -688,20 +782,20 @@ void IOSStorageAdapterCpp::deleteSecure(const std::string& key) {
688
782
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
689
783
  groupStr = keychainAccessGroup_;
690
784
  }
691
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
785
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
692
786
  deleteSecureValue(nsKey, group);
693
787
  markSecureKeyRemoved(key);
694
788
  markBiometricKeyRemoved(key);
695
789
  }
696
790
 
697
791
  bool IOSStorageAdapterCpp::hasSecure(const std::string& key) {
698
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
792
+ NSString* nsKey = nsStringFromStdString(key);
699
793
  std::string groupStr;
700
794
  {
701
795
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
702
796
  groupStr = keychainAccessGroup_;
703
797
  }
704
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
798
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
705
799
  NSMutableDictionary* secureQuery = baseKeychainQuery(nsKey, kKeychainService, group);
706
800
  disableKeychainInteraction(secureQuery);
707
801
  if (SecItemCopyMatching((__bridge CFDictionaryRef)secureQuery, NULL) == errSecSuccess) {
@@ -756,7 +850,7 @@ void IOSStorageAdapterCpp::setSecureBatch(
756
850
  groupStr = keychainAccessGroup_;
757
851
  accessControlLevel = accessControlLevel_;
758
852
  }
759
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
853
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
760
854
  for (size_t i = 0; i < keys.size() && i < values.size(); ++i) {
761
855
  setSecureValue(
762
856
  nsStringFromStdString(keys[i]),
@@ -776,7 +870,7 @@ std::vector<std::optional<std::string>> IOSStorageAdapterCpp::getSecureBatch(
776
870
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
777
871
  groupStr = keychainAccessGroup_;
778
872
  }
779
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
873
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
780
874
  std::vector<std::optional<std::string>> results;
781
875
  results.reserve(keys.size());
782
876
  for (const auto& key : keys) {
@@ -791,7 +885,7 @@ void IOSStorageAdapterCpp::deleteSecureBatch(const std::vector<std::string>& key
791
885
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
792
886
  groupStr = keychainAccessGroup_;
793
887
  }
794
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
888
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
795
889
  for (const auto& key : keys) {
796
890
  deleteSecureValue(nsStringFromStdString(key), group);
797
891
  markSecureKeyRemoved(key);
@@ -805,7 +899,7 @@ void IOSStorageAdapterCpp::clearSecure() {
805
899
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
806
900
  groupStr = keychainAccessGroup_;
807
901
  }
808
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
902
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
809
903
  NSMutableDictionary* secureQuery = [@{
810
904
  (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
811
905
  (__bridge id)kSecAttrService: kKeychainService
@@ -874,7 +968,7 @@ void IOSStorageAdapterCpp::setSecureBiometricWithLevel(const std::string& key, c
874
968
  if (level < 0 || level > 2) {
875
969
  throw std::runtime_error("NitroStorage: Invalid biometric level");
876
970
  }
877
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
971
+ NSString* nsKey = nsStringFromStdString(key);
878
972
  NSData* data = nsDataFromStdString(value);
879
973
  std::string groupStr;
880
974
  int accessControlLevel;
@@ -883,7 +977,7 @@ void IOSStorageAdapterCpp::setSecureBiometricWithLevel(const std::string& key, c
883
977
  groupStr = keychainAccessGroup_;
884
978
  accessControlLevel = accessControlLevel_;
885
979
  }
886
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
980
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
887
981
 
888
982
  const BiometricKeychainSnapshot previousBiometric = captureBiometricValue(nsKey, group);
889
983
  const std::optional<std::string> previousPlain = getSecureValue(nsKey, group);
@@ -984,13 +1078,13 @@ void IOSStorageAdapterCpp::setSecureBiometricWithLevel(const std::string& key, c
984
1078
  }
985
1079
 
986
1080
  std::optional<std::string> IOSStorageAdapterCpp::getSecureBiometric(const std::string& key) {
987
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
1081
+ NSString* nsKey = nsStringFromStdString(key);
988
1082
  std::string groupStr;
989
1083
  {
990
1084
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
991
1085
  groupStr = keychainAccessGroup_;
992
1086
  }
993
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
1087
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
994
1088
  NSMutableDictionary* query = baseKeychainQuery(nsKey, kBiometricKeychainService, group);
995
1089
  query[(__bridge id)kSecReturnData] = @YES;
996
1090
  query[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne;
@@ -1000,7 +1094,7 @@ std::optional<std::string> IOSStorageAdapterCpp::getSecureBiometric(const std::s
1000
1094
  if (status == errSecSuccess && result) {
1001
1095
  NSData* data = (__bridge_transfer NSData*)result;
1002
1096
  NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
1003
- if (str) return std::string([str UTF8String]);
1097
+ if (str) return stdStringFromNSString(str);
1004
1098
  }
1005
1099
  if (status == errSecInteractionNotAllowed) {
1006
1100
  throw taggedStorageError(
@@ -1022,13 +1116,13 @@ std::optional<std::string> IOSStorageAdapterCpp::getSecureBiometric(const std::s
1022
1116
  }
1023
1117
 
1024
1118
  void IOSStorageAdapterCpp::deleteSecureBiometric(const std::string& key) {
1025
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
1119
+ NSString* nsKey = nsStringFromStdString(key);
1026
1120
  std::string groupStr;
1027
1121
  {
1028
1122
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
1029
1123
  groupStr = keychainAccessGroup_;
1030
1124
  }
1031
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
1125
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
1032
1126
  NSMutableDictionary* query = baseKeychainQuery(nsKey, kBiometricKeychainService, group);
1033
1127
  const OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query);
1034
1128
  throwIfDeleteFailed(status, "Biometric delete");
@@ -1036,13 +1130,13 @@ void IOSStorageAdapterCpp::deleteSecureBiometric(const std::string& key) {
1036
1130
  }
1037
1131
 
1038
1132
  bool IOSStorageAdapterCpp::hasSecureBiometric(const std::string& key) {
1039
- NSString* nsKey = [NSString stringWithUTF8String:key.c_str()];
1133
+ NSString* nsKey = nsStringFromStdString(key);
1040
1134
  std::string groupStr;
1041
1135
  {
1042
1136
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
1043
1137
  groupStr = keychainAccessGroup_;
1044
1138
  }
1045
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
1139
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
1046
1140
  NSMutableDictionary* query = baseKeychainQuery(nsKey, kBiometricKeychainService, group);
1047
1141
  disableKeychainInteraction(query);
1048
1142
  const OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, NULL);
@@ -1063,7 +1157,7 @@ void IOSStorageAdapterCpp::clearSecureBiometric() {
1063
1157
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
1064
1158
  groupStr = keychainAccessGroup_;
1065
1159
  }
1066
- NSString* group = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
1160
+ NSString* group = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
1067
1161
  NSMutableDictionary* query = [@{
1068
1162
  (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
1069
1163
  (__bridge id)kSecAttrService: kBiometricKeychainService
@@ -1099,7 +1193,7 @@ void IOSStorageAdapterCpp::ensureSecureKeyCacheHydrated() {
1099
1193
  std::lock_guard<std::mutex> lock(accessGroupMutex_);
1100
1194
  groupStr = keychainAccessGroup_;
1101
1195
  }
1102
- NSString* nsGroup = groupStr.empty() ? nil : [NSString stringWithUTF8String:groupStr.c_str()];
1196
+ NSString* nsGroup = groupStr.empty() ? nil : nsStringFromStdString(groupStr);
1103
1197
 
1104
1198
  // These can throw errSecInteractionNotAllowed — let the exception propagate
1105
1199
  // so the cache is NOT marked hydrated (will be retried on next access)
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativeNitroModules","_capabilities","_internal","_shared","_storageCore","_Storage","_migration","_storageRuntime","_storageHooks","_indexeddbBackend","_storageModule","getStorageModule","NitroModules","createHybridObject","nativeSecureBackend","nativeBackend","get","key","scope","set","value","remove","clear","has","getAllKeys","getKeysByPrefix","prefix","size","setBatch","keys","values","getBatch","removeBatch","removeByPrefix","setSecureAccessControl","level","getSecureBiometric","setSecureBiometricWithLevel","deleteSecureBiometric","hasSecureBiometric","clearSecureBiometric","buildNativeAdapter","internals","scopedUnsubscribers","Map","suppressedNativeEvents","StorageScope","Disk","Secure","suppressNativeEvent","suppressedEvents","consumeSuppressedNativeEvent","count","undefined","delete","ensureNativeScopeSubscription","unsubscribe","addOnChange","clearAllPendingDiskWrites","clearPendingDiskWrite","clearAllPendingSecureWrites","clearPendingSecureWrite","clearScopeRawCache","notifyAllListeners","getScopedListeners","oldValue","readCachedRawValue","invalidateRawCache","cacheRawValue","notifyKeyListeners","emitKeyChange","unescapeCollidingRawValue","maybeCleanupNativeScopeSubscription","listeners","hasScopeEventListeners","hasEventObserver","backend","changeSource","applyAccessControlOnSecureRawWrite","ensureScopeSubscription","maybeCleanupScopeSubscription","onWillEmitChanges","operation","source","Memory","forEach","getSecureMetadataProfile","encrypted","hardwareBacked","core","createStorageCore","secureWritesBuffered","DEFAULT_SECURE_WRITES_ASYNC","storage","exports","setAccessControl","measureOperation","assertAccessControlLevel","setSecureDefaultAccessControl","setSecureWritesAsync","enabled","setKeychainAccessGroup","group","getCapabilities","platform","disk","secure","writeBuffering","resolveNativeWriteBuffering","Platform","OS","errorClassification","getSecurityCapabilities","secureStorage","accessControl","keychainAccessGroup","biometric","prompt","biometryOnly","biometryOrPasscode","metadata","perKey","listsWithoutValues","persistsTimestamps","createStorageItem","memoryItem","diskItem","secureItem","createSetItem","registerMigration","migrateToLatest","runTransaction","createSecureAuthStorage","setWebSecureStorageBackend","_backend","getWebSecureStorageBackend","setWebDiskStorageBackend","getWebDiskStorageBackend","flushWebStorageBackends"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_reactNativeNitroModules","_capabilities","_internal","_shared","_storageCore","_Storage","_migration","_storageRuntime","_storageHooks","_indexeddbBackend","_storageModule","getStorageModule","NitroModules","createHybridObject","nativeSecureBackend","nativeBackend","get","key","scope","set","value","remove","clear","has","getAllKeys","getKeysByPrefix","prefix","size","setBatch","keys","values","getBatch","removeBatch","removeByPrefix","setSecureAccessControl","level","getSecureBiometric","setSecureBiometricWithLevel","deleteSecureBiometric","hasSecureBiometric","clearSecureBiometric","buildNativeAdapter","internals","scopedUnsubscribers","Map","suppressedNativeEvents","StorageScope","Disk","Secure","suppressNativeEvent","suppressedEvents","consumeSuppressedNativeEvent","count","undefined","delete","ensureNativeScopeSubscription","unsubscribe","addOnChange","clearAllPendingDiskWrites","clearPendingDiskWrite","clearAllPendingSecureWrites","clearPendingSecureWrite","clearScopeRawCache","notifyAllListeners","getScopedListeners","oldValue","readCachedRawValue","invalidateRawCache","cacheRawValue","notifyKeyListeners","emitKeyChange","unescapeCollidingRawValue","maybeCleanupNativeScopeSubscription","listeners","hasScopeEventListeners","hasEventObserver","backend","changeSource","applyAccessControlOnSecureRawWrite","ensureScopeSubscription","maybeCleanupScopeSubscription","onWillEmitChanges","operation","source","Memory","forEach","getSecureMetadataProfile","encrypted","hardwareBacked","core","createStorageCore","secureWritesBuffered","DEFAULT_SECURE_WRITES_ASYNC","storage","exports","setAccessControl","measureOperation","assertAccessControlLevel","setSecureDefaultAccessControl","setSecureWritesAsync","enabled","setKeychainAccessGroup","group","getCapabilities","platform","disk","secure","writeBuffering","resolveNativeWriteBuffering","Platform","OS","errorClassification","getSecurityCapabilities","secureStorage","accessControl","keychainAccessGroup","biometric","prompt","biometryOnly","biometryOrPasscode","metadata","perKey","listsWithoutValues","persistsTimestamps","createStorageItem","memoryItem","diskItem","secureItem","createSetItem","registerMigration","migrateToLatest","runTransaction","createSecureAuthStorage","setWebSecureStorageBackend","_backend","getWebSecureStorageBackend","setWebDiskStorageBackend","getWebDiskStorageBackend","flushWebStorageBackends"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}