react-native-nitro-storage 0.5.4 → 0.5.5
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 +45 -5
- package/android/build.gradle +5 -5
- package/android/src/main/java/com/nitrostorage/AndroidStorageAdapter.kt +12 -25
- package/app.plugin.js +114 -9
- package/docs/api-reference.md +39 -36
- package/docs/batch-transactions-migrations.md +1 -1
- package/docs/recipes.md +1 -1
- package/docs/secure-storage.md +15 -4
- package/docs/web-backends.md +5 -0
- package/lib/commonjs/index.js +49 -9
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +71 -11
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/indexeddb-backend.js +28 -0
- package/lib/commonjs/indexeddb-backend.js.map +1 -1
- package/lib/commonjs/web-storage-backend.js.map +1 -1
- package/lib/module/index.js +49 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +71 -11
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/indexeddb-backend.js +28 -0
- package/lib/module/indexeddb-backend.js.map +1 -1
- package/lib/module/web-storage-backend.js.map +1 -1
- package/lib/typescript/index.d.ts +10 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/index.web.d.ts +10 -3
- package/lib/typescript/index.web.d.ts.map +1 -1
- package/lib/typescript/indexeddb-backend.d.ts.map +1 -1
- package/lib/typescript/web-storage-backend.d.ts +1 -0
- package/lib/typescript/web-storage-backend.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +80 -9
- package/src/index.web.ts +107 -11
- package/src/indexeddb-backend.ts +30 -0
- package/src/web-storage-backend.ts +1 -0
|
@@ -61,9 +61,15 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
61
61
|
const pendingWrites = new Set();
|
|
62
62
|
const pendingErrors = [];
|
|
63
63
|
const subscribers = new Set();
|
|
64
|
+
let closed = false;
|
|
64
65
|
const sourceId = `nitro-storage-${Math.random().toString(36).slice(2)}`;
|
|
65
66
|
const channelName = options.channelName ?? `nitro-storage:${dbName}:${storeName}`;
|
|
66
67
|
const channel = typeof BroadcastChannel !== "undefined" ? new BroadcastChannel(channelName) : null;
|
|
68
|
+
function assertOpen() {
|
|
69
|
+
if (closed) {
|
|
70
|
+
throw new Error(`IndexedDB backend "${dbName}/${storeName}" is closed.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
67
73
|
function emitExternal(event) {
|
|
68
74
|
subscribers.forEach(subscriber => {
|
|
69
75
|
subscriber(event);
|
|
@@ -75,6 +81,9 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
75
81
|
options.onError?.(normalized);
|
|
76
82
|
}
|
|
77
83
|
channel?.addEventListener("message", event => {
|
|
84
|
+
if (closed) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
78
87
|
const data = event.data;
|
|
79
88
|
if (!data || data.sourceId === sourceId) {
|
|
80
89
|
return;
|
|
@@ -166,9 +175,11 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
166
175
|
const backend = {
|
|
167
176
|
name: `indexeddb:${dbName}/${storeName}`,
|
|
168
177
|
getItem(key) {
|
|
178
|
+
assertOpen();
|
|
169
179
|
return cache.get(key) ?? null;
|
|
170
180
|
},
|
|
171
181
|
setItem(key, value) {
|
|
182
|
+
assertOpen();
|
|
172
183
|
cache.set(key, value);
|
|
173
184
|
persistSet(key, value);
|
|
174
185
|
publish({
|
|
@@ -177,6 +188,7 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
177
188
|
});
|
|
178
189
|
},
|
|
179
190
|
removeItem(key) {
|
|
191
|
+
assertOpen();
|
|
180
192
|
cache.delete(key);
|
|
181
193
|
persistDelete(key);
|
|
182
194
|
publish({
|
|
@@ -185,6 +197,7 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
185
197
|
});
|
|
186
198
|
},
|
|
187
199
|
clear() {
|
|
200
|
+
assertOpen();
|
|
188
201
|
cache.clear();
|
|
189
202
|
persistClear();
|
|
190
203
|
publish({
|
|
@@ -193,12 +206,15 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
193
206
|
});
|
|
194
207
|
},
|
|
195
208
|
getAllKeys() {
|
|
209
|
+
assertOpen();
|
|
196
210
|
return Array.from(cache.keys());
|
|
197
211
|
},
|
|
198
212
|
getMany(keys) {
|
|
213
|
+
assertOpen();
|
|
199
214
|
return keys.map(key => cache.get(key) ?? null);
|
|
200
215
|
},
|
|
201
216
|
setMany(entries) {
|
|
217
|
+
assertOpen();
|
|
202
218
|
entries.forEach(([key, value]) => {
|
|
203
219
|
cache.set(key, value);
|
|
204
220
|
});
|
|
@@ -218,6 +234,7 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
218
234
|
}
|
|
219
235
|
},
|
|
220
236
|
removeMany(keys) {
|
|
237
|
+
assertOpen();
|
|
221
238
|
keys.forEach(key => {
|
|
222
239
|
cache.delete(key);
|
|
223
240
|
});
|
|
@@ -237,9 +254,11 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
237
254
|
}
|
|
238
255
|
},
|
|
239
256
|
size() {
|
|
257
|
+
assertOpen();
|
|
240
258
|
return cache.size;
|
|
241
259
|
},
|
|
242
260
|
subscribe(listener) {
|
|
261
|
+
assertOpen();
|
|
243
262
|
subscribers.add(listener);
|
|
244
263
|
return () => {
|
|
245
264
|
subscribers.delete(listener);
|
|
@@ -252,6 +271,15 @@ async function createIndexedDBBackend(dbName = DEFAULT_DB_NAME, storeName = DEFA
|
|
|
252
271
|
}
|
|
253
272
|
const [error] = pendingErrors.splice(0);
|
|
254
273
|
throw error;
|
|
274
|
+
},
|
|
275
|
+
close() {
|
|
276
|
+
if (closed) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
closed = true;
|
|
280
|
+
subscribers.clear();
|
|
281
|
+
channel?.close();
|
|
282
|
+
db.close();
|
|
255
283
|
}
|
|
256
284
|
};
|
|
257
285
|
return backend;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_DB_NAME","DEFAULT_STORE_NAME","DB_VERSION","openDB","dbName","storeName","Promise","resolve","reject","indexedDB","Error","request","open","onupgradeneeded","db","result","objectStoreNames","contains","createObjectStore","onsuccess","onerror","error","createIndexedDBBackend","options","cache","Map","pendingWrites","Set","pendingErrors","subscribers","sourceId","Math","random","toString","slice","channelName","channel","BroadcastChannel","emitExternal","event","forEach","subscriber","handleAsyncError","normalized","String","push","onError","addEventListener","data","key","clear","newValue","delete","set","publish","postMessage","tx","transaction","store","objectStore","openCursor","cursor","value","continue","oncomplete","trackWrite","pending","onabort","add","finally","persistSet","put","persistDelete","persistClear","backend","name","getItem","get","setItem","removeItem","getAllKeys","Array","from","keys","getMany","map","setMany","entries","removeMany","size","subscribe","listener","flush","all","length","splice"],"sourceRoot":"../../src","sources":["indexeddb-backend.ts"],"mappings":";;;;;;AAKA,MAAMA,eAAe,GAAG,sBAAsB;AAC9C,MAAMC,kBAAkB,GAAG,UAAU;AACrC,MAAMC,UAAU,GAAG,CAAC;AAOpB;AACA;AACA;AACA;AACA,SAASC,MAAMA,CAACC,MAAc,EAAEC,SAAiB,EAAwB;EACvE,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI,OAAOC,SAAS,KAAK,WAAW,EAAE;MACpCD,MAAM,CAAC,IAAIE,KAAK,CAAC,iDAAiD,CAAC,CAAC;MACpE;IACF;IAEA,MAAMC,OAAO,GAAGF,SAAS,CAACG,IAAI,CAACR,MAAM,EAAEF,UAAU,CAAC;IAElDS,OAAO,CAACE,eAAe,GAAG,MAAM;MAC9B,MAAMC,EAAE,GAAGH,OAAO,CAACI,MAAM;MACzB,IAAI,CAACD,EAAE,CAACE,gBAAgB,CAACC,QAAQ,CAACZ,SAAS,CAAC,EAAE;QAC5CS,EAAE,CAACI,iBAAiB,CAACb,SAAS,CAAC;MACjC;IACF,CAAC;IAEDM,OAAO,CAACQ,SAAS,GAAG,MAAMZ,OAAO,CAACI,OAAO,CAACI,MAAM,CAAC;IACjDJ,OAAO,CAACS,OAAO,GAAG,MAChBZ,MAAM,CAACG,OAAO,CAACU,KAAK,IAAI,IAAIX,KAAK,CAAC,oCAAoC,CAAC,CAAC;EAC5E,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeY,sBAAsBA,CAC1ClB,MAAM,GAAGJ,eAAe,EACxBK,SAAS,GAAGJ,kBAAkB,EAC9BsB,OAAgC,GAAG,CAAC,CAAC,EACH;EAClC,MAAMT,EAAE,GAAG,MAAMX,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC;EAC1C,MAAMmB,KAAK,GAAG,IAAIC,GAAG,CAAiB,CAAC;EACvC,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAAgB,CAAC;EAC9C,MAAMC,aAAsB,GAAG,EAAE;EACjC,MAAMC,WAAW,GAAG,IAAIF,GAAG,CAAyC,CAAC;EACrE,
|
|
1
|
+
{"version":3,"names":["DEFAULT_DB_NAME","DEFAULT_STORE_NAME","DB_VERSION","openDB","dbName","storeName","Promise","resolve","reject","indexedDB","Error","request","open","onupgradeneeded","db","result","objectStoreNames","contains","createObjectStore","onsuccess","onerror","error","createIndexedDBBackend","options","cache","Map","pendingWrites","Set","pendingErrors","subscribers","closed","sourceId","Math","random","toString","slice","channelName","channel","BroadcastChannel","assertOpen","emitExternal","event","forEach","subscriber","handleAsyncError","normalized","String","push","onError","addEventListener","data","key","clear","newValue","delete","set","publish","postMessage","tx","transaction","store","objectStore","openCursor","cursor","value","continue","oncomplete","trackWrite","pending","onabort","add","finally","persistSet","put","persistDelete","persistClear","backend","name","getItem","get","setItem","removeItem","getAllKeys","Array","from","keys","getMany","map","setMany","entries","removeMany","size","subscribe","listener","flush","all","length","splice","close"],"sourceRoot":"../../src","sources":["indexeddb-backend.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getResolvedStorage","resolveStorage","globalThis","localStorage","undefined","createLocalStorageWebBackend","options","includeKey","listKeys","storage","keys","index","length","key","push","name","getItem","setItem","value","removeItem","clear","forEach","getAllKeys","getMany","map","setMany","entries","removeMany","size"],"sourceRoot":"../../src","sources":["web-storage-backend.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["getResolvedStorage","resolveStorage","globalThis","localStorage","undefined","createLocalStorageWebBackend","options","includeKey","listKeys","storage","keys","index","length","key","push","name","getItem","setItem","value","removeItem","clear","forEach","getAllKeys","getMany","map","setMany","entries","removeMany","size"],"sourceRoot":"../../src","sources":["web-storage-backend.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -57,6 +57,7 @@ let secureDefaultAccessControl = AccessControl.WhenUnlocked;
|
|
|
57
57
|
const suppressedNativeEvents = new Map([[StorageScope.Disk, new Map()], [StorageScope.Secure, new Map()]]);
|
|
58
58
|
let metricsObserver;
|
|
59
59
|
let eventObserver;
|
|
60
|
+
let eventObserverRedactSecureValues = true;
|
|
60
61
|
const metricsCounters = new Map();
|
|
61
62
|
const storageEvents = new StorageEventRegistry();
|
|
62
63
|
const nativeSecureBackend = "platform-secure-storage";
|
|
@@ -180,13 +181,45 @@ function createKeyChange(scope, key, oldValue, newValue, operation, source) {
|
|
|
180
181
|
function hasStorageChangeObservers(scope) {
|
|
181
182
|
return storageEvents.hasListeners(scope) || eventObserver !== undefined;
|
|
182
183
|
}
|
|
184
|
+
function shouldReadPreviousEventValues(scope) {
|
|
185
|
+
if (storageEvents.hasListeners(scope)) {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
if (!eventObserver) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
return scope !== StorageScope.Secure || !eventObserverRedactSecureValues;
|
|
192
|
+
}
|
|
193
|
+
const SECURE_EVENT_REDACTED_VALUE = "[secure]";
|
|
194
|
+
function redactSecureKeyChange(event) {
|
|
195
|
+
if (event.scope !== StorageScope.Secure) {
|
|
196
|
+
return event;
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
...event,
|
|
200
|
+
oldValue: event.oldValue === undefined ? undefined : SECURE_EVENT_REDACTED_VALUE,
|
|
201
|
+
newValue: event.newValue === undefined ? undefined : SECURE_EVENT_REDACTED_VALUE
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
function eventForGlobalObserver(event) {
|
|
205
|
+
if (!eventObserverRedactSecureValues || event.scope !== StorageScope.Secure) {
|
|
206
|
+
return event;
|
|
207
|
+
}
|
|
208
|
+
if (event.type === "key") {
|
|
209
|
+
return redactSecureKeyChange(event);
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
...event,
|
|
213
|
+
changes: event.changes.map(redactSecureKeyChange)
|
|
214
|
+
};
|
|
215
|
+
}
|
|
183
216
|
function emitKeyChange(scope, key, oldValue, newValue, operation, source) {
|
|
184
217
|
if (source === "native" && operation !== "external" && scope !== StorageScope.Memory && scopedUnsubscribers.has(scope)) {
|
|
185
218
|
suppressNativeEvent(scope, key);
|
|
186
219
|
}
|
|
187
220
|
const event = createKeyChange(scope, key, oldValue, newValue, operation, source);
|
|
188
221
|
storageEvents.emitKey(event);
|
|
189
|
-
eventObserver?.(event);
|
|
222
|
+
eventObserver?.(eventForGlobalObserver(event));
|
|
190
223
|
}
|
|
191
224
|
function emitBatchChange(scope, operation, source, changes) {
|
|
192
225
|
if (changes.length === 0) {
|
|
@@ -203,7 +236,7 @@ function emitBatchChange(scope, operation, source, changes) {
|
|
|
203
236
|
changes
|
|
204
237
|
};
|
|
205
238
|
storageEvents.emitBatch(event);
|
|
206
|
-
eventObserver?.(event);
|
|
239
|
+
eventObserver?.(eventForGlobalObserver(event));
|
|
207
240
|
}
|
|
208
241
|
function readPendingSecureWrite(key) {
|
|
209
242
|
return pendingSecureWrites.get(key)?.value;
|
|
@@ -483,8 +516,9 @@ export const storage = {
|
|
|
483
516
|
subscribeNamespace: (namespace, scope, listener) => {
|
|
484
517
|
return storage.subscribePrefix(scope, prefixKey(namespace, ""), listener);
|
|
485
518
|
},
|
|
486
|
-
setEventObserver: observer => {
|
|
519
|
+
setEventObserver: (observer, options = {}) => {
|
|
487
520
|
eventObserver = observer;
|
|
521
|
+
eventObserverRedactSecureValues = options.redactSecureValues !== false;
|
|
488
522
|
if (observer) {
|
|
489
523
|
ensureNativeScopeSubscription(StorageScope.Disk);
|
|
490
524
|
ensureNativeScopeSubscription(StorageScope.Secure);
|
|
@@ -495,7 +529,7 @@ export const storage = {
|
|
|
495
529
|
},
|
|
496
530
|
clear: scope => {
|
|
497
531
|
measureOperation("storage:clear", scope, () => {
|
|
498
|
-
const previousValues =
|
|
532
|
+
const previousValues = shouldReadPreviousEventValues(scope) ? storage.getAll(scope) : {};
|
|
499
533
|
if (scope === StorageScope.Memory) {
|
|
500
534
|
memoryStore.clear();
|
|
501
535
|
notifyAllListeners(memoryListeners);
|
|
@@ -545,7 +579,7 @@ export const storage = {
|
|
|
545
579
|
return;
|
|
546
580
|
}
|
|
547
581
|
const keyPrefix = prefixKey(namespace, "");
|
|
548
|
-
const previousValues =
|
|
582
|
+
const previousValues = shouldReadPreviousEventValues(scope) ? storage.getByPrefix(keyPrefix, scope) : {};
|
|
549
583
|
if (scope === StorageScope.Disk) {
|
|
550
584
|
flushDiskWrites();
|
|
551
585
|
}
|
|
@@ -671,9 +705,15 @@ export const storage = {
|
|
|
671
705
|
return result;
|
|
672
706
|
});
|
|
673
707
|
},
|
|
674
|
-
export: scope => {
|
|
708
|
+
export: (scope, options = {}) => {
|
|
709
|
+
if (scope === StorageScope.Secure && options.includeSecureValues !== true) {
|
|
710
|
+
throw new Error("NitroStorage: exporting Secure scope exposes raw secret values. Pass { includeSecureValues: true } or use exportSecureUnsafe().");
|
|
711
|
+
}
|
|
675
712
|
return measureOperation("storage:export", scope, () => storage.getAll(scope));
|
|
676
713
|
},
|
|
714
|
+
exportSecureUnsafe: () => {
|
|
715
|
+
return measureOperation("storage:exportSecureUnsafe", StorageScope.Secure, () => storage.getAll(StorageScope.Secure));
|
|
716
|
+
},
|
|
677
717
|
size: scope => {
|
|
678
718
|
return measureOperation("storage:size", scope, () => {
|
|
679
719
|
assertValidScope(scope);
|
|
@@ -1375,7 +1415,7 @@ export function setBatch(items, scope) {
|
|
|
1375
1415
|
const keys = secureEntries.map(({
|
|
1376
1416
|
item
|
|
1377
1417
|
}) => item.key);
|
|
1378
|
-
const oldValues =
|
|
1418
|
+
const oldValues = shouldReadPreviousEventValues(scope) ? storageModule.getBatch(keys, scope) ?? [] : [];
|
|
1379
1419
|
const groupedByAccessControl = new Map();
|
|
1380
1420
|
secureEntries.forEach(({
|
|
1381
1421
|
item,
|
|
@@ -1418,7 +1458,7 @@ export function setBatch(items, scope) {
|
|
|
1418
1458
|
}
|
|
1419
1459
|
const keys = items.map(entry => entry.item.key);
|
|
1420
1460
|
const values = items.map(entry => entry.item.serialize(entry.value));
|
|
1421
|
-
const oldValues =
|
|
1461
|
+
const oldValues = shouldReadPreviousEventValues(scope) ? getStorageModule().getBatch(keys, scope) ?? [] : [];
|
|
1422
1462
|
getStorageModule().setBatch(keys, values, scope);
|
|
1423
1463
|
keys.forEach((key, index) => cacheRawValue(scope, key, values[index]));
|
|
1424
1464
|
emitBatchChange(scope, "setBatch", "native", keys.map((key, index) => createKeyChange(scope, key, oldValues[index], values[index], "setBatch", "native")));
|
|
@@ -1440,7 +1480,7 @@ export function removeBatch(items, scope) {
|
|
|
1440
1480
|
if (scope === StorageScope.Secure) {
|
|
1441
1481
|
flushSecureWrites();
|
|
1442
1482
|
}
|
|
1443
|
-
const oldValues =
|
|
1483
|
+
const oldValues = shouldReadPreviousEventValues(scope) ? getStorageModule().getBatch(keys, scope) ?? [] : [];
|
|
1444
1484
|
getStorageModule().removeBatch(keys, scope);
|
|
1445
1485
|
keys.forEach(key => cacheRawValue(scope, key, undefined));
|
|
1446
1486
|
emitBatchChange(scope, "removeBatch", "native", keys.map((key, index) => createKeyChange(scope, key, oldValues[index], undefined, "removeBatch", "native")));
|