react-native-nitro-storage 0.7.0 → 0.9.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.
Files changed (110) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +89 -22
  3. package/SECURITY.md +2 -2
  4. package/cpp/bindings/HybridStorage.cpp +5 -12
  5. package/cpp/bindings/HybridStorage.hpp +1 -1
  6. package/docs/api-reference.md +11 -1
  7. package/docs/batch-transactions-migrations.md +8 -2
  8. package/docs/benchmarks.md +19 -15
  9. package/docs/web-backends.md +18 -1
  10. package/ios/IOSStorageAdapterCpp.mm +162 -17
  11. package/lib/commonjs/capabilities.js +26 -0
  12. package/lib/commonjs/capabilities.js.map +1 -0
  13. package/lib/commonjs/core/durability.js +137 -0
  14. package/lib/commonjs/core/durability.js.map +1 -0
  15. package/lib/commonjs/core/metrics.js +91 -0
  16. package/lib/commonjs/core/metrics.js.map +1 -0
  17. package/lib/commonjs/index.js +47 -22
  18. package/lib/commonjs/index.js.map +1 -1
  19. package/lib/commonjs/index.web.js +118 -66
  20. package/lib/commonjs/index.web.js.map +1 -1
  21. package/lib/commonjs/indexeddb-backend.js +73 -23
  22. package/lib/commonjs/indexeddb-backend.js.map +1 -1
  23. package/lib/commonjs/internal.js +27 -4
  24. package/lib/commonjs/internal.js.map +1 -1
  25. package/lib/commonjs/shared.js +2 -2
  26. package/lib/commonjs/shared.js.map +1 -1
  27. package/lib/commonjs/storage-core.js +224 -237
  28. package/lib/commonjs/storage-core.js.map +1 -1
  29. package/lib/commonjs/storage-events.js.map +1 -1
  30. package/lib/commonjs/storage-platform.js +6 -0
  31. package/lib/commonjs/storage-platform.js.map +1 -0
  32. package/lib/commonjs/storage-runtime.js +3 -21
  33. package/lib/commonjs/storage-runtime.js.map +1 -1
  34. package/lib/commonjs/testing.js +19 -4
  35. package/lib/commonjs/testing.js.map +1 -1
  36. package/lib/commonjs/web-backend-contract.js +27 -0
  37. package/lib/commonjs/web-backend-contract.js.map +1 -0
  38. package/lib/module/capabilities.js +21 -0
  39. package/lib/module/capabilities.js.map +1 -0
  40. package/lib/module/core/durability.js +133 -0
  41. package/lib/module/core/durability.js.map +1 -0
  42. package/lib/module/core/metrics.js +87 -0
  43. package/lib/module/core/metrics.js.map +1 -0
  44. package/lib/module/index.js +48 -23
  45. package/lib/module/index.js.map +1 -1
  46. package/lib/module/index.web.js +103 -64
  47. package/lib/module/index.web.js.map +1 -1
  48. package/lib/module/indexeddb-backend.js +73 -23
  49. package/lib/module/indexeddb-backend.js.map +1 -1
  50. package/lib/module/internal.js +24 -3
  51. package/lib/module/internal.js.map +1 -1
  52. package/lib/module/shared.js +2 -2
  53. package/lib/module/shared.js.map +1 -1
  54. package/lib/module/storage-core.js +225 -238
  55. package/lib/module/storage-core.js.map +1 -1
  56. package/lib/module/storage-events.js.map +1 -1
  57. package/lib/module/storage-platform.js +4 -0
  58. package/lib/module/storage-platform.js.map +1 -0
  59. package/lib/module/storage-runtime.js +3 -21
  60. package/lib/module/storage-runtime.js.map +1 -1
  61. package/lib/module/testing.js +5 -3
  62. package/lib/module/testing.js.map +1 -1
  63. package/lib/module/web-backend-contract.js +22 -0
  64. package/lib/module/web-backend-contract.js.map +1 -0
  65. package/lib/typescript/capabilities.d.ts +11 -0
  66. package/lib/typescript/capabilities.d.ts.map +1 -0
  67. package/lib/typescript/core/durability.d.ts +27 -0
  68. package/lib/typescript/core/durability.d.ts.map +1 -0
  69. package/lib/typescript/core/metrics.d.ts +12 -0
  70. package/lib/typescript/core/metrics.d.ts.map +1 -0
  71. package/lib/typescript/index.d.ts +5 -2
  72. package/lib/typescript/index.d.ts.map +1 -1
  73. package/lib/typescript/index.web.d.ts +8 -4
  74. package/lib/typescript/index.web.d.ts.map +1 -1
  75. package/lib/typescript/indexeddb-backend.d.ts.map +1 -1
  76. package/lib/typescript/internal.d.ts +3 -0
  77. package/lib/typescript/internal.d.ts.map +1 -1
  78. package/lib/typescript/shared.d.ts +2 -1
  79. package/lib/typescript/shared.d.ts.map +1 -1
  80. package/lib/typescript/storage-core.d.ts +6 -6
  81. package/lib/typescript/storage-core.d.ts.map +1 -1
  82. package/lib/typescript/storage-events.d.ts +2 -2
  83. package/lib/typescript/storage-events.d.ts.map +1 -1
  84. package/lib/typescript/storage-platform.d.ts +12 -0
  85. package/lib/typescript/storage-platform.d.ts.map +1 -0
  86. package/lib/typescript/storage-runtime.d.ts.map +1 -1
  87. package/lib/typescript/testing.d.ts +5 -1
  88. package/lib/typescript/testing.d.ts.map +1 -1
  89. package/lib/typescript/web-backend-contract.d.ts +10 -0
  90. package/lib/typescript/web-backend-contract.d.ts.map +1 -0
  91. package/lib/typescript/web-storage-backend.d.ts +1 -1
  92. package/lib/typescript/web-storage-backend.d.ts.map +1 -1
  93. package/nitrogen/generated/shared/c++/HybridStorageSpec.hpp +1 -1
  94. package/package.json +4 -3
  95. package/react-native-nitro-storage.podspec +3 -1
  96. package/src/capabilities.ts +36 -0
  97. package/src/core/durability.ts +170 -0
  98. package/src/core/metrics.ts +133 -0
  99. package/src/index.ts +66 -40
  100. package/src/index.web.ts +158 -86
  101. package/src/indexeddb-backend.ts +91 -20
  102. package/src/internal.ts +50 -4
  103. package/src/shared.ts +7 -6
  104. package/src/storage-core.ts +327 -292
  105. package/src/storage-events.ts +2 -1
  106. package/src/storage-platform.ts +16 -0
  107. package/src/storage-runtime.ts +13 -47
  108. package/src/testing.ts +14 -7
  109. package/src/web-backend-contract.ts +34 -0
  110. package/src/web-storage-backend.ts +1 -1
@@ -85,11 +85,13 @@ Object.defineProperty(exports, "useStorageValue", {
85
85
  return _storageHooks.useStorageValue;
86
86
  }
87
87
  });
88
- var _shared = require("./shared");
88
+ var _reactNative = require("react-native");
89
89
  var _reactNativeNitroModules = require("react-native-nitro-modules");
90
- var _Storage = require("./Storage.types");
90
+ var _capabilities = require("./capabilities");
91
91
  var _internal = require("./internal");
92
+ var _shared = require("./shared");
92
93
  var _storageCore = require("./storage-core");
94
+ var _Storage = require("./Storage.types");
93
95
  var _migration = require("./migration");
94
96
  var _storageRuntime = require("./storage-runtime");
95
97
  var _storageHooks = require("./storage-hooks");
@@ -104,33 +106,56 @@ function getStorageModule() {
104
106
  const nativeSecureBackend = "platform-secure-storage";
105
107
  const nativeBackend = {
106
108
  get: (key, scope) => getStorageModule().get(key, scope),
107
- set: (key, value, scope) => getStorageModule().set(key, value, scope),
108
- remove: (key, scope) => getStorageModule().remove(key, scope),
109
- clear: scope => getStorageModule().clear(scope),
109
+ set: (key, value, scope) => {
110
+ getStorageModule().set(key, value, scope);
111
+ },
112
+ remove: (key, scope) => {
113
+ getStorageModule().remove(key, scope);
114
+ },
115
+ clear: scope => {
116
+ getStorageModule().clear(scope);
117
+ },
110
118
  has: (key, scope) => getStorageModule().has(key, scope),
111
119
  getAllKeys: scope => getStorageModule().getAllKeys(scope) ?? [],
112
120
  getKeysByPrefix: (prefix, scope) => getStorageModule().getKeysByPrefix(prefix, scope) ?? [],
113
121
  size: scope => getStorageModule().size(scope),
114
- setBatch: (keys, values, scope) => getStorageModule().setBatch(keys, values, scope),
122
+ setBatch: (keys, values, scope) => {
123
+ getStorageModule().setBatch(keys, values, scope);
124
+ },
115
125
  getBatch: (keys, scope) => (getStorageModule().getBatch(keys, scope) ?? []).map(value => (0, _internal.decodeNativeBatchValue)(value)),
116
- removeBatch: (keys, scope) => getStorageModule().removeBatch(keys, scope),
117
- removeByPrefix: (prefix, scope) => getStorageModule().removeByPrefix(prefix, scope),
118
- setSecureAccessControl: level => getStorageModule().setSecureAccessControl(level),
126
+ removeBatch: (keys, scope) => {
127
+ getStorageModule().removeBatch(keys, scope);
128
+ },
129
+ removeByPrefix: (prefix, scope) => {
130
+ getStorageModule().removeByPrefix(prefix, scope);
131
+ },
132
+ setSecureAccessControl: level => {
133
+ getStorageModule().setSecureAccessControl(level);
134
+ },
119
135
  getSecureBiometric: key => getStorageModule().getSecureBiometric(key),
120
- setSecureBiometricWithLevel: (key, value, level) => getStorageModule().setSecureBiometricWithLevel(key, value, level),
121
- deleteSecureBiometric: key => getStorageModule().deleteSecureBiometric(key),
136
+ setSecureBiometricWithLevel: (key, value, level) => {
137
+ getStorageModule().setSecureBiometricWithLevel(key, value, level);
138
+ },
139
+ deleteSecureBiometric: key => {
140
+ getStorageModule().deleteSecureBiometric(key);
141
+ },
122
142
  hasSecureBiometric: key => getStorageModule().hasSecureBiometric(key),
123
- clearSecureBiometric: () => getStorageModule().clearSecureBiometric()
143
+ clearSecureBiometric: () => {
144
+ getStorageModule().clearSecureBiometric();
145
+ }
124
146
  };
125
147
  function buildNativeAdapter(internals) {
126
148
  const scopedUnsubscribers = new Map();
127
- const suppressedNativeEvents = new Map([[_Storage.StorageScope.Disk, new Map()], [_Storage.StorageScope.Secure, new Map()]]);
149
+ const suppressedNativeEvents = {
150
+ [_Storage.StorageScope.Disk]: new Map(),
151
+ [_Storage.StorageScope.Secure]: new Map()
152
+ };
128
153
  function suppressNativeEvent(scope, key) {
129
- const suppressedEvents = suppressedNativeEvents.get(scope);
154
+ const suppressedEvents = suppressedNativeEvents[scope];
130
155
  suppressedEvents.set(key, (suppressedEvents.get(key) ?? 0) + 1);
131
156
  }
132
157
  function consumeSuppressedNativeEvent(scope, key) {
133
- const suppressedEvents = suppressedNativeEvents.get(scope);
158
+ const suppressedEvents = suppressedNativeEvents[scope];
134
159
  const count = suppressedEvents.get(key);
135
160
  if (count === undefined) {
136
161
  return false;
@@ -172,7 +197,7 @@ function buildNativeAdapter(internals) {
172
197
  if (consumeSuppressedNativeEvent(scope, key)) {
173
198
  return;
174
199
  }
175
- internals.emitKeyChange(scope, key, oldValue, value, "external", "native");
200
+ internals.emitKeyChange(scope, key, oldValue === undefined ? undefined : (0, _internal.unescapeCollidingRawValue)(oldValue), value === undefined ? undefined : (0, _internal.unescapeCollidingRawValue)(value), "external", "native");
176
201
  });
177
202
  scopedUnsubscribers.set(scope, typeof unsubscribe === "function" ? unsubscribe : () => {});
178
203
  }
@@ -192,12 +217,13 @@ function buildNativeAdapter(internals) {
192
217
  backend: nativeBackend,
193
218
  changeSource: "native",
194
219
  applyAccessControlOnSecureRawWrite: true,
195
- flushDiskWritesOnImport: false,
196
220
  ensureScopeSubscription: ensureNativeScopeSubscription,
197
221
  maybeCleanupScopeSubscription: maybeCleanupNativeScopeSubscription,
198
222
  onWillEmitChanges: (scope, keys, operation, source) => {
199
223
  if (source === "native" && operation !== "external" && scope !== _Storage.StorageScope.Memory && scopedUnsubscribers.has(scope)) {
200
- keys.forEach(key => suppressNativeEvent(scope, key));
224
+ keys.forEach(key => {
225
+ suppressNativeEvent(scope, key);
226
+ });
201
227
  }
202
228
  },
203
229
  getSecureMetadataProfile: () => ({
@@ -211,6 +237,7 @@ const core = (0, _storageCore.createStorageCore)(buildNativeAdapter);
211
237
  const {
212
238
  internals
213
239
  } = core;
240
+ let secureWritesBuffered = false;
214
241
  const storage = exports.storage = {
215
242
  ...core.storage,
216
243
  setAccessControl: level => {
@@ -222,6 +249,7 @@ const storage = exports.storage = {
222
249
  },
223
250
  setSecureWritesAsync: enabled => {
224
251
  internals.measureOperation("storage:setSecureWritesAsync", _Storage.StorageScope.Secure, () => {
252
+ secureWritesBuffered = enabled;
225
253
  getStorageModule().setSecureWritesAsync(enabled);
226
254
  });
227
255
  },
@@ -236,10 +264,7 @@ const storage = exports.storage = {
236
264
  disk: "platform-preferences",
237
265
  secure: nativeSecureBackend
238
266
  },
239
- writeBuffering: {
240
- disk: true,
241
- secure: true
242
- },
267
+ writeBuffering: (0, _capabilities.resolveNativeWriteBuffering)(_reactNative.Platform.OS === "android" ? "android" : "ios", secureWritesBuffered),
243
268
  errorClassification: true
244
269
  }),
245
270
  getSecurityCapabilities: () => ({
@@ -1 +1 @@
1
- {"version":3,"names":["_shared","require","_reactNativeNitroModules","_Storage","_internal","_storageCore","_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","map","decodeNativeBatchValue","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","cacheRawValue","notifyKeyListeners","emitKeyChange","maybeCleanupNativeScopeSubscription","listeners","hasScopeEventListeners","hasEventObserver","backend","changeSource","applyAccessControlOnSecureRawWrite","flushDiskWritesOnImport","ensureScopeSubscription","maybeCleanupScopeSubscription","onWillEmitChanges","operation","source","Memory","forEach","getSecureMetadataProfile","encrypted","hardwareBacked","core","createStorageCore","storage","exports","setAccessControl","measureOperation","assertAccessControlLevel","setSecureDefaultAccessControl","setSecureWritesAsync","enabled","setKeychainAccessGroup","group","getCapabilities","platform","disk","secure","writeBuffering","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","map","decodeNativeBatchValue","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","cacheRawValue","notifyKeyListeners","emitKeyChange","unescapeCollidingRawValue","maybeCleanupNativeScopeSubscription","listeners","hasScopeEventListeners","hasEventObserver","backend","changeSource","applyAccessControlOnSecureRawWrite","ensureScopeSubscription","maybeCleanupScopeSubscription","onWillEmitChanges","operation","source","Memory","forEach","getSecureMetadataProfile","encrypted","hardwareBacked","core","createStorageCore","secureWritesBuffered","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":[]}
@@ -27,7 +27,14 @@ Object.defineProperty(exports, "createIndexedDBBackend", {
27
27
  return _indexeddbBackend.createIndexedDBBackend;
28
28
  }
29
29
  });
30
- exports.diskItem = exports.createStorageItem = exports.createSetItem = exports.createSecureAuthStorage = void 0;
30
+ exports.createStorageItem = exports.createSetItem = exports.createSecureAuthStorage = void 0;
31
+ Object.defineProperty(exports, "describeWebBackendCapabilities", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _webBackendContract.describeWebBackendCapabilities;
35
+ }
36
+ });
37
+ exports.diskItem = void 0;
31
38
  exports.flushWebStorageBackends = flushWebStorageBackends;
32
39
  exports.getBatch = void 0;
33
40
  Object.defineProperty(exports, "getStorageErrorCode", {
@@ -38,6 +45,12 @@ Object.defineProperty(exports, "getStorageErrorCode", {
38
45
  });
39
46
  exports.getWebDiskStorageBackend = getWebDiskStorageBackend;
40
47
  exports.getWebSecureStorageBackend = getWebSecureStorageBackend;
48
+ Object.defineProperty(exports, "isIndexedDBWebBackend", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _webBackendContract.isIndexedDBWebBackend;
52
+ }
53
+ });
41
54
  Object.defineProperty(exports, "isKeychainLockedError", {
42
55
  enumerable: true,
43
56
  get: function () {
@@ -85,21 +98,33 @@ Object.defineProperty(exports, "useStorageValue", {
85
98
  return _storageHooks.useStorageValue;
86
99
  }
87
100
  });
101
+ var _capabilities = require("./capabilities");
102
+ var _internal = require("./internal");
88
103
  var _shared = require("./shared");
104
+ var _storageCore = require("./storage-core");
89
105
  var _Storage = require("./Storage.types");
90
106
  var _webStorageBackend = require("./web-storage-backend");
91
- var _storageCore = require("./storage-core");
92
107
  var _migration = require("./migration");
93
108
  var _storageRuntime = require("./storage-runtime");
109
+ var _webBackendContract = require("./web-backend-contract");
94
110
  var _storageHooks = require("./storage-hooks");
95
111
  var _indexeddbBackend = require("./indexeddb-backend");
96
- const webScopeKeyIndex = new Map([[_Storage.StorageScope.Disk, new Set()], [_Storage.StorageScope.Secure, new Set()]]);
112
+ const webScopeKeyIndex = {
113
+ [_Storage.StorageScope.Disk]: new Set(),
114
+ [_Storage.StorageScope.Secure]: new Set()
115
+ };
97
116
  const hydratedWebScopeKeyIndex = new Set();
98
117
  const SECURE_WEB_PREFIX = "__secure_";
99
118
  const BIOMETRIC_WEB_PREFIX = "__bio_";
100
119
  let hasWarnedAboutWebBiometricFallback = false;
101
120
  let hasWindowStorageEventSubscription = false;
102
121
  let internals;
122
+ function getInternals() {
123
+ if (internals === undefined) {
124
+ throw new Error("NitroStorage(web): storage core is not initialized.");
125
+ }
126
+ return internals;
127
+ }
103
128
  function createDefaultDiskBackend() {
104
129
  return (0, _webStorageBackend.createLocalStorageWebBackend)({
105
130
  name: "localStorage:disk",
@@ -115,6 +140,7 @@ function createDefaultSecureBackend() {
115
140
  let webDiskStorageBackend = createDefaultDiskBackend();
116
141
  let webSecureStorageBackend = createDefaultSecureBackend();
117
142
  const externalSyncUnsubscribers = new Map();
143
+ const retiredWebBackends = new Map();
118
144
  function getBackendName(scope, backend) {
119
145
  const scopeName = scope === _Storage.StorageScope.Disk ? "disk" : "secure";
120
146
  return backend?.name ?? `web:${scopeName}`;
@@ -155,7 +181,7 @@ function fromBiometricStorageKey(key) {
155
181
  return key.slice(BIOMETRIC_WEB_PREFIX.length);
156
182
  }
157
183
  function getWebScopeKeyIndex(scope) {
158
- return webScopeKeyIndex.get(scope);
184
+ return webScopeKeyIndex[scope];
159
185
  }
160
186
  function hydrateWebScopeKeyIndex(scope) {
161
187
  if (hydratedWebScopeKeyIndex.has(scope)) {
@@ -186,51 +212,51 @@ function ensureWebScopeKeyIndex(scope) {
186
212
  }
187
213
  function applyExternalChangeEvent(scope, key, newValue) {
188
214
  if (key === null) {
189
- internals.clearScopeRawCache(scope);
215
+ getInternals().clearScopeRawCache(scope);
190
216
  ensureWebScopeKeyIndex(scope).clear();
191
- (0, _shared.notifyAllListeners)(internals.getScopedListeners(scope));
217
+ (0, _shared.notifyAllListeners)(getInternals().getScopedListeners(scope));
192
218
  return;
193
219
  }
194
220
  if (scope === _Storage.StorageScope.Secure && key.startsWith(SECURE_WEB_PREFIX)) {
195
221
  const plainKey = fromSecureStorageKey(key);
196
- const oldValue = internals.readCachedRawValue(_Storage.StorageScope.Secure, plainKey);
222
+ const oldValue = getInternals().readCachedRawValue(_Storage.StorageScope.Secure, plainKey);
197
223
  if (newValue === null) {
198
224
  ensureWebScopeKeyIndex(_Storage.StorageScope.Secure).delete(plainKey);
199
- internals.cacheRawValue(_Storage.StorageScope.Secure, plainKey, undefined);
225
+ getInternals().cacheRawValue(_Storage.StorageScope.Secure, plainKey, undefined);
200
226
  } else {
201
227
  ensureWebScopeKeyIndex(_Storage.StorageScope.Secure).add(plainKey);
202
- internals.cacheRawValue(_Storage.StorageScope.Secure, plainKey, newValue);
228
+ getInternals().cacheRawValue(_Storage.StorageScope.Secure, plainKey, newValue);
203
229
  }
204
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(_Storage.StorageScope.Secure), plainKey);
205
- internals.emitKeyChange(_Storage.StorageScope.Secure, plainKey, oldValue, newValue ?? undefined, "external", "external");
230
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(_Storage.StorageScope.Secure), plainKey);
231
+ getInternals().emitKeyChange(_Storage.StorageScope.Secure, plainKey, oldValue === undefined ? undefined : (0, _internal.unescapeCollidingRawValue)(oldValue), newValue === null ? undefined : (0, _internal.unescapeCollidingRawValue)(newValue), "external", "external");
206
232
  return;
207
233
  }
208
234
  if (scope === _Storage.StorageScope.Secure && key.startsWith(BIOMETRIC_WEB_PREFIX)) {
209
235
  const plainKey = fromBiometricStorageKey(key);
210
- const oldValue = internals.readCachedRawValue(_Storage.StorageScope.Secure, plainKey);
236
+ const oldValue = getInternals().readCachedRawValue(_Storage.StorageScope.Secure, plainKey);
211
237
  if (newValue === null) {
212
238
  if (withWebBackendOperation(_Storage.StorageScope.Secure, "external-sync:getItem", backend => backend.getItem(toSecureStorageKey(plainKey))) === null) {
213
239
  ensureWebScopeKeyIndex(_Storage.StorageScope.Secure).delete(plainKey);
214
240
  }
215
- internals.cacheRawValue(_Storage.StorageScope.Secure, plainKey, undefined);
241
+ getInternals().cacheRawValue(_Storage.StorageScope.Secure, plainKey, undefined);
216
242
  } else {
217
243
  ensureWebScopeKeyIndex(_Storage.StorageScope.Secure).add(plainKey);
218
- internals.cacheRawValue(_Storage.StorageScope.Secure, plainKey, newValue);
244
+ getInternals().cacheRawValue(_Storage.StorageScope.Secure, plainKey, newValue);
219
245
  }
220
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(_Storage.StorageScope.Secure), plainKey);
221
- internals.emitKeyChange(_Storage.StorageScope.Secure, plainKey, oldValue, newValue ?? undefined, "external", "external");
246
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(_Storage.StorageScope.Secure), plainKey);
247
+ getInternals().emitKeyChange(_Storage.StorageScope.Secure, plainKey, oldValue === undefined ? undefined : (0, _internal.unescapeCollidingRawValue)(oldValue), newValue === null ? undefined : (0, _internal.unescapeCollidingRawValue)(newValue), "external", "external");
222
248
  return;
223
249
  }
224
- const oldValue = internals.readCachedRawValue(scope, key);
250
+ const oldValue = getInternals().readCachedRawValue(scope, key);
225
251
  if (newValue === null) {
226
252
  ensureWebScopeKeyIndex(scope).delete(key);
227
- internals.cacheRawValue(scope, key, undefined);
253
+ getInternals().cacheRawValue(scope, key, undefined);
228
254
  } else {
229
255
  ensureWebScopeKeyIndex(scope).add(key);
230
- internals.cacheRawValue(scope, key, newValue);
256
+ getInternals().cacheRawValue(scope, key, newValue);
231
257
  }
232
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(scope), key);
233
- internals.emitKeyChange(scope, key, oldValue, newValue ?? undefined, "external", "external");
258
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(scope), key);
259
+ getInternals().emitKeyChange(scope, key, oldValue === undefined ? undefined : (0, _internal.unescapeCollidingRawValue)(oldValue), newValue === null ? undefined : (0, _internal.unescapeCollidingRawValue)(newValue), "external", "external");
234
260
  }
235
261
  function handleWebStorageEvent(event) {
236
262
  const key = event.key;
@@ -272,6 +298,16 @@ function closeWebBackend(scope, backend) {
272
298
  throw createWebStorageError(scope, "close", error, backend);
273
299
  }
274
300
  }
301
+ function retireWebBackend(scope, previousBackend, nextBackend) {
302
+ if (!previousBackend || previousBackend === nextBackend) {
303
+ return;
304
+ }
305
+ if (previousBackend.flush) {
306
+ retiredWebBackends.set(previousBackend, scope);
307
+ return;
308
+ }
309
+ closeWebBackend(scope, previousBackend);
310
+ }
275
311
  function ensureExternalSyncSubscriptions() {
276
312
  if (!hasWindowStorageEventSubscription && typeof window !== "undefined" && typeof window.addEventListener === "function") {
277
313
  window.addEventListener("storage", handleWebStorageEvent);
@@ -293,7 +329,7 @@ const WebStorage = {
293
329
  backend.setItem(storageKey, value);
294
330
  });
295
331
  ensureWebScopeKeyIndex(scope).add(key);
296
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(scope), key);
332
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(scope), key);
297
333
  },
298
334
  get: (key, scope) => {
299
335
  if (scope !== _Storage.StorageScope.Disk && scope !== _Storage.StorageScope.Secure) {
@@ -322,7 +358,7 @@ const WebStorage = {
322
358
  });
323
359
  }
324
360
  ensureWebScopeKeyIndex(scope).delete(key);
325
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(scope), key);
361
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(scope), key);
326
362
  },
327
363
  clear: scope => {
328
364
  if (scope !== _Storage.StorageScope.Disk && scope !== _Storage.StorageScope.Secure) {
@@ -332,7 +368,7 @@ const WebStorage = {
332
368
  backend.clear();
333
369
  });
334
370
  ensureWebScopeKeyIndex(scope).clear();
335
- (0, _shared.notifyAllListeners)(internals.getScopedListeners(scope));
371
+ (0, _shared.notifyAllListeners)(getInternals().getScopedListeners(scope));
336
372
  },
337
373
  setBatch: (keys, values, scope) => {
338
374
  if (scope !== _Storage.StorageScope.Disk && scope !== _Storage.StorageScope.Secure) {
@@ -360,8 +396,10 @@ const WebStorage = {
360
396
  });
361
397
  const keyIndex = ensureWebScopeKeyIndex(scope);
362
398
  entries.forEach(([storageKey]) => keyIndex.add(scope === _Storage.StorageScope.Secure ? storageKey.slice(SECURE_WEB_PREFIX.length) : storageKey));
363
- const listeners = internals.getScopedListeners(scope);
364
- keys.forEach(key => (0, _shared.notifyKeyListeners)(listeners, key));
399
+ const listeners = getInternals().getScopedListeners(scope);
400
+ keys.forEach(key => {
401
+ (0, _shared.notifyKeyListeners)(listeners, key);
402
+ });
365
403
  },
366
404
  getBatch: (keys, scope) => {
367
405
  if (scope !== _Storage.StorageScope.Disk && scope !== _Storage.StorageScope.Secure) {
@@ -404,8 +442,10 @@ const WebStorage = {
404
442
  }
405
443
  const keyIndex = ensureWebScopeKeyIndex(scope);
406
444
  keys.forEach(key => keyIndex.delete(key));
407
- const listeners = internals.getScopedListeners(scope);
408
- keys.forEach(key => (0, _shared.notifyKeyListeners)(listeners, key));
445
+ const listeners = getInternals().getScopedListeners(scope);
446
+ keys.forEach(key => {
447
+ (0, _shared.notifyKeyListeners)(listeners, key);
448
+ });
409
449
  },
410
450
  removeByPrefix: (prefix, scope) => {
411
451
  if (scope !== _Storage.StorageScope.Disk && scope !== _Storage.StorageScope.Secure) {
@@ -461,27 +501,32 @@ const WebStorage = {
461
501
  backend.setItem(toSecureStorageKey(key), value);
462
502
  });
463
503
  ensureWebScopeKeyIndex(_Storage.StorageScope.Secure).add(key);
464
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(_Storage.StorageScope.Secure), key);
504
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(_Storage.StorageScope.Secure), key);
465
505
  return;
466
506
  }
467
507
  if (typeof __DEV__ !== "undefined" && __DEV__ && !hasWarnedAboutWebBiometricFallback) {
468
508
  hasWarnedAboutWebBiometricFallback = true;
469
509
  console.warn("[NitroStorage] Biometric storage is not supported on web. Using localStorage.");
470
510
  }
471
- withWebBackendOperation(_Storage.StorageScope.Secure, "setSecureBiometric", backend => backend.setItem(toBiometricStorageKey(key), value));
511
+ withWebBackendOperation(_Storage.StorageScope.Secure, "setSecureBiometric", backend => {
512
+ backend.setItem(toBiometricStorageKey(key), value);
513
+ backend.removeItem(toSecureStorageKey(key));
514
+ });
472
515
  ensureWebScopeKeyIndex(_Storage.StorageScope.Secure).add(key);
473
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(_Storage.StorageScope.Secure), key);
516
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(_Storage.StorageScope.Secure), key);
474
517
  },
475
518
  getSecureBiometric: key => {
476
519
  const value = withWebBackendOperation(_Storage.StorageScope.Secure, "getSecureBiometric", backend => backend.getItem(toBiometricStorageKey(key)));
477
520
  return value ?? undefined;
478
521
  },
479
522
  deleteSecureBiometric: key => {
480
- withWebBackendOperation(_Storage.StorageScope.Secure, "deleteSecureBiometric", backend => backend.removeItem(toBiometricStorageKey(key)));
523
+ withWebBackendOperation(_Storage.StorageScope.Secure, "deleteSecureBiometric", backend => {
524
+ backend.removeItem(toBiometricStorageKey(key));
525
+ });
481
526
  if (withWebBackendOperation(_Storage.StorageScope.Secure, "deleteSecureBiometric:getItem", backend => backend.getItem(toSecureStorageKey(key))) === null) {
482
527
  ensureWebScopeKeyIndex(_Storage.StorageScope.Secure).delete(key);
483
528
  }
484
- (0, _shared.notifyKeyListeners)(internals.getScopedListeners(_Storage.StorageScope.Secure), key);
529
+ (0, _shared.notifyKeyListeners)(getInternals().getScopedListeners(_Storage.StorageScope.Secure), key);
485
530
  },
486
531
  hasSecureBiometric: key => {
487
532
  return withWebBackendOperation(_Storage.StorageScope.Secure, "hasSecureBiometric", backend => backend.getItem(toBiometricStorageKey(key))) !== null;
@@ -508,8 +553,10 @@ const WebStorage = {
508
553
  keyIndex.delete(key);
509
554
  }
510
555
  });
511
- const listeners = internals.getScopedListeners(_Storage.StorageScope.Secure);
512
- keysToNotify.forEach(key => (0, _shared.notifyKeyListeners)(listeners, key));
556
+ const listeners = getInternals().getScopedListeners(_Storage.StorageScope.Secure);
557
+ keysToNotify.forEach(key => {
558
+ (0, _shared.notifyKeyListeners)(listeners, key);
559
+ });
513
560
  }
514
561
  };
515
562
  function buildWebAdapter(coreInternals) {
@@ -518,7 +565,6 @@ function buildWebAdapter(coreInternals) {
518
565
  backend: WebStorage,
519
566
  changeSource: "web",
520
567
  applyAccessControlOnSecureRawWrite: false,
521
- flushDiskWritesOnImport: true,
522
568
  ensureScopeSubscription: () => {
523
569
  ensureExternalSyncSubscriptions();
524
570
  },
@@ -536,14 +582,14 @@ const storage = exports.storage = {
536
582
  ...core.storage,
537
583
  setAccessControl: level => {
538
584
  (0, _shared.assertAccessControlLevel)(level);
539
- internals.setSecureDefaultAccessControl(level);
540
- internals.recordMetric("storage:setAccessControl", _Storage.StorageScope.Secure, 0);
585
+ getInternals().setSecureDefaultAccessControl(level);
586
+ getInternals().recordMetric("storage:setAccessControl", _Storage.StorageScope.Secure, 0);
541
587
  },
542
588
  setSecureWritesAsync: _enabled => {
543
- internals.recordMetric("storage:setSecureWritesAsync", _Storage.StorageScope.Secure, 0);
589
+ getInternals().recordMetric("storage:setSecureWritesAsync", _Storage.StorageScope.Secure, 0);
544
590
  },
545
591
  setKeychainAccessGroup: _group => {
546
- internals.recordMetric("storage:setKeychainAccessGroup", _Storage.StorageScope.Secure, 0);
592
+ getInternals().recordMetric("storage:setKeychainAccessGroup", _Storage.StorageScope.Secure, 0);
547
593
  },
548
594
  getCapabilities: () => ({
549
595
  platform: "web",
@@ -551,10 +597,7 @@ const storage = exports.storage = {
551
597
  disk: getBackendName(_Storage.StorageScope.Disk, webDiskStorageBackend),
552
598
  secure: getBackendName(_Storage.StorageScope.Secure, webSecureStorageBackend)
553
599
  },
554
- writeBuffering: {
555
- disk: true,
556
- secure: true
557
- },
600
+ writeBuffering: (0, _capabilities.resolveWebWriteBuffering)(webDiskStorageBackend?.name, webSecureStorageBackend?.name),
558
601
  errorClassification: true
559
602
  }),
560
603
  getSecurityCapabilities: () => {
@@ -597,15 +640,13 @@ const createSecureAuthStorage = exports.createSecureAuthStorage = core.createSec
597
640
  function setWebSecureStorageBackend(backend) {
598
641
  const previousBackend = webSecureStorageBackend;
599
642
  const nextBackend = backend ?? createDefaultSecureBackend();
600
- internals.clearAllPendingSecureWrites();
643
+ getInternals().flushSecureWrites();
601
644
  resetBackendChangeSubscription(_Storage.StorageScope.Secure);
602
645
  webSecureStorageBackend = nextBackend;
603
646
  hydratedWebScopeKeyIndex.delete(_Storage.StorageScope.Secure);
604
- internals.clearScopeRawCache(_Storage.StorageScope.Secure);
647
+ getInternals().clearScopeRawCache(_Storage.StorageScope.Secure);
605
648
  ensureExternalSyncSubscriptions();
606
- if (previousBackend !== nextBackend) {
607
- closeWebBackend(_Storage.StorageScope.Secure, previousBackend);
608
- }
649
+ retireWebBackend(_Storage.StorageScope.Secure, previousBackend, nextBackend);
609
650
  }
610
651
  function getWebSecureStorageBackend() {
611
652
  return webSecureStorageBackend;
@@ -613,31 +654,42 @@ function getWebSecureStorageBackend() {
613
654
  function setWebDiskStorageBackend(backend) {
614
655
  const previousBackend = webDiskStorageBackend;
615
656
  const nextBackend = backend ?? createDefaultDiskBackend();
616
- internals.clearAllPendingDiskWrites();
657
+ getInternals().flushDiskWrites();
617
658
  resetBackendChangeSubscription(_Storage.StorageScope.Disk);
618
659
  webDiskStorageBackend = nextBackend;
619
660
  hydratedWebScopeKeyIndex.delete(_Storage.StorageScope.Disk);
620
- internals.clearScopeRawCache(_Storage.StorageScope.Disk);
661
+ getInternals().clearScopeRawCache(_Storage.StorageScope.Disk);
621
662
  ensureExternalSyncSubscriptions();
622
- if (previousBackend !== nextBackend) {
623
- closeWebBackend(_Storage.StorageScope.Disk, previousBackend);
624
- }
663
+ retireWebBackend(_Storage.StorageScope.Disk, previousBackend, nextBackend);
625
664
  }
626
665
  function getWebDiskStorageBackend() {
627
666
  return webDiskStorageBackend;
628
667
  }
629
668
  async function flushWebStorageBackends() {
630
- internals.flushDiskWrites();
631
- internals.flushSecureWrites();
632
- const flushes = [];
633
- const diskFlush = webDiskStorageBackend?.flush;
634
- const secureFlush = webSecureStorageBackend?.flush;
635
- if (diskFlush) {
636
- flushes.push(diskFlush());
637
- }
638
- if (secureFlush) {
639
- flushes.push(secureFlush());
640
- }
641
- await Promise.all(flushes);
669
+ getInternals().flushDiskWrites();
670
+ getInternals().flushSecureWrites();
671
+ const backends = Array.from(new Set([webDiskStorageBackend, webSecureStorageBackend, ...retiredWebBackends.keys()])).filter(backend => backend !== undefined);
672
+ const results = await Promise.allSettled(backends.map(async backend => {
673
+ if (backend.flush) {
674
+ await backend.flush();
675
+ }
676
+ if (!retiredWebBackends.has(backend)) {
677
+ return;
678
+ }
679
+ if (backend === webDiskStorageBackend || backend === webSecureStorageBackend) {
680
+ retiredWebBackends.delete(backend);
681
+ return;
682
+ }
683
+ const scope = retiredWebBackends.get(backend);
684
+ if (scope === undefined) {
685
+ return;
686
+ }
687
+ closeWebBackend(scope, backend);
688
+ retiredWebBackends.delete(backend);
689
+ }));
690
+ const failure = results.find(result => result.status === "rejected");
691
+ if (failure) {
692
+ throw failure.reason;
693
+ }
642
694
  }
643
695
  //# sourceMappingURL=index.web.js.map