react-native-nitro-storage 0.13.0 → 0.15.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/CHANGELOG.md +31 -0
- package/README.md +260 -7
- package/cpp/bindings/HybridStorage.cpp +21 -0
- package/cpp/bindings/HybridStorage.hpp +2 -0
- package/cpp/core/NativeStorageAdapter.hpp +6 -0
- package/docs/api-reference.md +68 -43
- package/docs/batch-transactions-migrations.md +7 -0
- package/docs/qa/agent-device-replay.md +106 -0
- package/docs/secure-storage.md +12 -6
- package/ios/IOSStorageAdapterCpp.hpp +12 -0
- package/ios/IOSStorageAdapterCpp.mm +180 -2
- package/lib/commonjs/Storage.types.js +4 -2
- package/lib/commonjs/Storage.types.js.map +1 -1
- package/lib/commonjs/core/durability.js +30 -2
- package/lib/commonjs/core/durability.js.map +1 -1
- package/lib/commonjs/index.js +16 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +10 -1
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/shared.js +6 -0
- package/lib/commonjs/shared.js.map +1 -1
- package/lib/commonjs/storage-core.js +116 -3
- package/lib/commonjs/storage-core.js.map +1 -1
- package/lib/commonjs/testing.js +32 -2
- package/lib/commonjs/testing.js.map +1 -1
- package/lib/module/Storage.types.js +4 -2
- package/lib/module/Storage.types.js.map +1 -1
- package/lib/module/core/durability.js +30 -2
- package/lib/module/core/durability.js.map +1 -1
- package/lib/module/index.js +16 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +10 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/shared.js +5 -0
- package/lib/module/shared.js.map +1 -1
- package/lib/module/storage-core.js +117 -4
- package/lib/module/storage-core.js.map +1 -1
- package/lib/module/testing.js +31 -1
- package/lib/module/testing.js.map +1 -1
- package/lib/typescript/Storage.nitro.d.ts +2 -0
- package/lib/typescript/Storage.nitro.d.ts.map +1 -1
- package/lib/typescript/Storage.types.d.ts +4 -2
- package/lib/typescript/Storage.types.d.ts.map +1 -1
- package/lib/typescript/core/durability.d.ts +7 -1
- package/lib/typescript/core/durability.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +8 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/index.web.d.ts +8 -3
- package/lib/typescript/index.web.d.ts.map +1 -1
- package/lib/typescript/shared.d.ts +9 -1
- package/lib/typescript/shared.d.ts.map +1 -1
- package/lib/typescript/storage-core.d.ts +34 -4
- package/lib/typescript/storage-core.d.ts.map +1 -1
- package/lib/typescript/storage-platform.d.ts +2 -0
- package/lib/typescript/storage-platform.d.ts.map +1 -1
- package/lib/typescript/testing.d.ts +16 -5
- package/lib/typescript/testing.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/HybridStorageSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridStorageSpec.hpp +2 -0
- package/package.json +2 -2
- package/src/Storage.nitro.ts +2 -0
- package/src/Storage.types.ts +4 -2
- package/src/core/durability.ts +46 -2
- package/src/index.ts +24 -0
- package/src/index.web.ts +18 -0
- package/src/shared.ts +27 -1
- package/src/storage-core.ts +182 -8
- package/src/storage-platform.ts +2 -0
- package/src/testing.ts +42 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Storage agent-device replay
|
|
2
|
+
|
|
3
|
+
Run these flows only against an already installed release example that matches
|
|
4
|
+
the source revision under test. Select the platform and exact device every time:
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
bun run example:replay --platform ios --udid <exact-udid>
|
|
8
|
+
bun run example:replay --platform android --serial <exact-serial>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
To run selected manifest suites, pass `--flow <id>`. The runner accepts this
|
|
12
|
+
option more than once for distinct suite IDs:
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
bun run example:replay --platform ios --udid <exact-udid> --flow integrity
|
|
16
|
+
bun run example:replay --platform android --serial <exact-serial> --flow keychain --flow persistence-relaunch
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Use an installed release build from the source being checked. The replay does
|
|
20
|
+
not start Metro, prebuild, or build an app. A development client, a different
|
|
21
|
+
source revision, an inferred device, or a run without the exact platform and
|
|
22
|
+
device selector is not release replay evidence. The task owner must separately
|
|
23
|
+
authorize device work after the required package implementations are ready.
|
|
24
|
+
|
|
25
|
+
Before replay, check that the example source and replay manifest match the
|
|
26
|
+
committed source lock. If a flow, status ID, or expected value changes, update
|
|
27
|
+
`e2e/storage-replay-coverage.json` and refresh that lock with the repository's
|
|
28
|
+
replay maintenance command. Run the checker again before the device command:
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
bun run example:replay:refresh
|
|
32
|
+
bun run example:replay:check
|
|
33
|
+
bun run example:replay:test
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The runner supplies a fresh UUID as `RUN_ID` to each replay. The persistence
|
|
37
|
+
flow writes one `RUN_ID`-scoped Disk key, closes and relaunches the installed
|
|
38
|
+
app with the same ID, compares the stored value with the expected value, and
|
|
39
|
+
deletes that key. Other smoke and lab cases use reserved QA keys and clean only
|
|
40
|
+
those keys. Only the final `clear-all` suite clears whole scopes.
|
|
41
|
+
|
|
42
|
+
The `clear-all` suite (`e2e/qa-clear-all.ad`) seeds one reserved key in Memory,
|
|
43
|
+
Disk, and Secure, then calls `storage.clearAll()`. This wipes all example
|
|
44
|
+
storage in every scope on the target install, not only QA keys. It is the last
|
|
45
|
+
suite in the manifest, and the runner passes suites to `agent-device test` in
|
|
46
|
+
manifest order, so it runs after every other suite. Run it only on a disposable
|
|
47
|
+
example install. Use `--flow` to skip it when the install holds data you need.
|
|
48
|
+
|
|
49
|
+
The `api-extended` suite (`e2e/qa-api-extended.ad`) opens a run-on-load screen
|
|
50
|
+
and asserts its results through the on-screen `e2e-ext-results` label, which
|
|
51
|
+
joins one `;`-terminated token per check. It covers item `merge` and
|
|
52
|
+
`setOrDelete`, Set `toggle` and `values`, `clearGroup`, TTL `onExpired` and
|
|
53
|
+
`subscribeExpired`, Secure metadata and export inventory, default access
|
|
54
|
+
control, coalesced Secure writes, the `invalid_key` error, scoped metrics,
|
|
55
|
+
native Disk key events, the React hooks, and `createSecureAuthStorage` TTL. It
|
|
56
|
+
uses reserved `__e2e_ext_`, `__e2e_inv_`, and `__e2e_auth` keys and restores the
|
|
57
|
+
default access control to `WhenUnlocked` after each access-control check. Its
|
|
58
|
+
passcode access-control row is a gating probe for later iOS biometric work: the
|
|
59
|
+
flow asserts only that a `passcode-acl=` result rendered. A device without a
|
|
60
|
+
passcode can reject that write, and the row is not a pass for passcode-protected
|
|
61
|
+
storage.
|
|
62
|
+
|
|
63
|
+
The `biometric-ios` suite (`e2e/qa-biometric-ios.ad`) runs only with
|
|
64
|
+
`--platform ios`; its manifest entry sets `platforms: ["ios"]`, the runner skips
|
|
65
|
+
it for Android, and `--flow biometric-ios` with `--platform android` fails before
|
|
66
|
+
any device command. It enrolls simulator Face ID, opens the run-on-load
|
|
67
|
+
`e2e-biometric` route with `RUN_ID`, and writes one `__e2e_bio_<RUN_ID>` item
|
|
68
|
+
with `biometric: true` and the default level. The `e2e-biometric-results` label
|
|
69
|
+
then shows the seed and metadata tokens and `bio:read=prompting;`. After a fixed
|
|
70
|
+
1500 ms wait, `settings faceid match` resolves the blocked read, and the flow
|
|
71
|
+
expects `bio:read=value-matched;` and `bio:cleanup=missing;` before it unenrolls
|
|
72
|
+
Face ID. Cleanup calls `storage.clearBiometric()`, which removes every
|
|
73
|
+
biometric Secure item in the example install. This is simulator evidence only,
|
|
74
|
+
not Secure Enclave hardware evidence. Android biometrics and iOS nonmatch or
|
|
75
|
+
cancel outcomes remain pending.
|
|
76
|
+
|
|
77
|
+
Each run uses a unique session and an artifact directory under the OS temporary
|
|
78
|
+
directory. `agent-device test` closes each attempt session itself, including
|
|
79
|
+
on failure.
|
|
80
|
+
|
|
81
|
+
A replay passes only when each suite reaches its finished status and every
|
|
82
|
+
required status ID contains its expected public API value. A `fail=0` summary by
|
|
83
|
+
itself is not sufficient. Smoke and integrity rows are asserted through the
|
|
84
|
+
on-screen `smoke-results` and `e2e-integrity-results` labels because
|
|
85
|
+
agent-device `.ad` waits only see on-screen elements. The keychain suite runs one no-prompt Secure
|
|
86
|
+
roundtrip and keeps biometric, lock, corruption, and hardware-backed checks
|
|
87
|
+
explicitly pending; only the iOS simulator Face ID match path is asserted, by
|
|
88
|
+
`biometric-ios`. The smoke test's constructed `storage_full` error is read
|
|
89
|
+
through the public `/testing` entrypoint; it proves error-code classification
|
|
90
|
+
at that test adapter boundary only.
|
|
91
|
+
|
|
92
|
+
The native smoke flow requires 39 passing cases out of 41, zero failures, and
|
|
93
|
+
the two expected web-only skips. Update that expected summary when cases change;
|
|
94
|
+
do not accept a new native skip as coverage. The integrity flow also checks that
|
|
95
|
+
a Promise-returning transaction rolls back and closes its context on Memory,
|
|
96
|
+
Disk, and Secure.
|
|
97
|
+
|
|
98
|
+
Native replay rows identify the public runtime platform and backend capability,
|
|
99
|
+
then assert values returned through the default package entrypoint. This
|
|
100
|
+
supports installed-app Disk and Secure behavior claims for that target. Apart
|
|
101
|
+
from the iOS simulator Face ID match in `biometric-ios`, it does not prove
|
|
102
|
+
hardware-backed keys, biometrics, locked-device behavior, corruption
|
|
103
|
+
recovery, or a native Disk/Secure write failure. Those checks need controlled
|
|
104
|
+
native or hardware prerequisites and remain pending in the coverage manifest.
|
|
105
|
+
Unit tests for an injected adapter boundary are useful logic evidence, but they
|
|
106
|
+
do not close a native-runtime prerequisite.
|
package/docs/secure-storage.md
CHANGED
|
@@ -206,12 +206,18 @@ refreshTokenItem.set("opaque-refresh-token");
|
|
|
206
206
|
```
|
|
207
207
|
|
|
208
208
|
Coalesced secure item writes remain in a last-write-wins queue until the next
|
|
209
|
-
microtask or an explicit `flushSecureWrites()`.
|
|
210
|
-
failed and unattempted writes queued for
|
|
211
|
-
`
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
209
|
+
microtask or an explicit `flushSecureWrites()`. An explicit flush failure throws
|
|
210
|
+
and keeps failed and unattempted writes queued for retry. Scheduled failures
|
|
211
|
+
propagate unless `storage.setScheduledFlushErrorObserver()` is installed; it
|
|
212
|
+
receives `{ scope, error }` while the failed writes remain queued.
|
|
213
|
+
|
|
214
|
+
`flushSecureWrites()` drains the JavaScript queue into the backend. It does not
|
|
215
|
+
wait for Android `apply()` persistence. Use the default synchronous mode or
|
|
216
|
+
select `storage.setSecureWritesAsync(false)` before writes that need synchronous
|
|
217
|
+
native persistence. Changing the mode is not a barrier for earlier `apply()`
|
|
218
|
+
calls. `storage.clearBiometric()` drains pending Secure writes before clearing
|
|
219
|
+
biometric entries and surfaces native clear failures; it also cannot wait for
|
|
220
|
+
earlier Android `apply()` calls.
|
|
215
221
|
|
|
216
222
|
## iOS Legacy Disk Migration
|
|
217
223
|
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
#include "../core/NativeStorageAdapter.hpp"
|
|
4
4
|
#include <atomic>
|
|
5
|
+
#include <functional>
|
|
6
|
+
#include <optional>
|
|
7
|
+
#include <memory>
|
|
5
8
|
#include <mutex>
|
|
6
9
|
#include <unordered_set>
|
|
7
10
|
|
|
@@ -9,7 +12,10 @@ namespace NitroStorage {
|
|
|
9
12
|
|
|
10
13
|
class IOSStorageAdapterCpp : public NativeStorageAdapter {
|
|
11
14
|
public:
|
|
15
|
+
using ProtectedDataReader = std::function<std::optional<bool>()>;
|
|
16
|
+
|
|
12
17
|
IOSStorageAdapterCpp();
|
|
18
|
+
explicit IOSStorageAdapterCpp(ProtectedDataReader protectedDataReader);
|
|
13
19
|
~IOSStorageAdapterCpp() override;
|
|
14
20
|
|
|
15
21
|
void setDisk(const std::string& key, const std::string& value) override;
|
|
@@ -48,7 +54,13 @@ public:
|
|
|
48
54
|
bool hasSecureBiometric(const std::string& key) override;
|
|
49
55
|
void clearSecureBiometric() override;
|
|
50
56
|
|
|
57
|
+
bool isProtectedDataAvailable() override;
|
|
58
|
+
std::function<void()> addProtectedDataAvailableListener(std::function<void()> listener) override;
|
|
59
|
+
|
|
51
60
|
private:
|
|
61
|
+
struct ProtectedDataState;
|
|
62
|
+
std::shared_ptr<ProtectedDataState> protectedData_;
|
|
63
|
+
|
|
52
64
|
int accessControlLevel_ = 0;
|
|
53
65
|
std::string keychainAccessGroup_;
|
|
54
66
|
mutable std::mutex secureKeysMutex_;
|
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
#import <Foundation/Foundation.h>
|
|
3
3
|
#import <Security/Security.h>
|
|
4
4
|
#import <LocalAuthentication/LocalAuthentication.h>
|
|
5
|
+
#if TARGET_OS_IPHONE
|
|
6
|
+
#import <UIKit/UIKit.h>
|
|
7
|
+
#endif
|
|
5
8
|
|
|
6
9
|
#include "SqliteDiskStore.hpp"
|
|
7
10
|
|
|
11
|
+
#include <chrono>
|
|
8
12
|
#include <unordered_set>
|
|
9
13
|
#include <utility>
|
|
10
14
|
#include <vector>
|
|
11
15
|
|
|
16
|
+
#import <objc/message.h>
|
|
17
|
+
|
|
12
18
|
namespace NitroStorage {
|
|
13
19
|
|
|
14
20
|
// Storage strings are length-delimited; C-string conversion aliases keys at NUL.
|
|
@@ -318,8 +324,180 @@ static CFStringRef accessControlAttr(int level) {
|
|
|
318
324
|
}
|
|
319
325
|
}
|
|
320
326
|
|
|
321
|
-
|
|
322
|
-
|
|
327
|
+
#if TARGET_OS_IPHONE
|
|
328
|
+
static NSNotificationName const kProtectedDataBecameAvailable = UIApplicationProtectedDataDidBecomeAvailable;
|
|
329
|
+
static NSNotificationName const kProtectedDataWillBecomeUnavailable = UIApplicationProtectedDataWillBecomeUnavailable;
|
|
330
|
+
static NSNotificationName const kApplicationDidBecomeActive = UIApplicationDidBecomeActiveNotification;
|
|
331
|
+
static NSNotificationName const kApplicationWillEnterForeground = UIApplicationWillEnterForegroundNotification;
|
|
332
|
+
#else
|
|
333
|
+
static NSNotificationName const kProtectedDataBecameAvailable = @"UIApplicationProtectedDataDidBecomeAvailable";
|
|
334
|
+
static NSNotificationName const kProtectedDataWillBecomeUnavailable = @"UIApplicationProtectedDataWillBecomeUnavailable";
|
|
335
|
+
static NSNotificationName const kApplicationDidBecomeActive = @"UIApplicationDidBecomeActiveNotification";
|
|
336
|
+
static NSNotificationName const kApplicationWillEnterForeground = @"UIApplicationWillEnterForegroundNotification";
|
|
337
|
+
#endif
|
|
338
|
+
|
|
339
|
+
struct IOSStorageAdapterCpp::ProtectedDataState {
|
|
340
|
+
struct Listener {
|
|
341
|
+
size_t id;
|
|
342
|
+
std::function<void()> callback;
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
// Unknown until the first read on the main thread. Unknown reports
|
|
346
|
+
// unavailable so a locked device never looks open; a transition to
|
|
347
|
+
// available from Unknown or Unavailable notifies listeners.
|
|
348
|
+
enum Value : int { Unknown = 0, Available = 1, Unavailable = 2 };
|
|
349
|
+
|
|
350
|
+
std::atomic<int> value{Unknown};
|
|
351
|
+
std::mutex mutex;
|
|
352
|
+
std::vector<Listener> listeners;
|
|
353
|
+
size_t nextListenerId = 0;
|
|
354
|
+
NSArray<id>* observers = nil;
|
|
355
|
+
ProtectedDataReader reader;
|
|
356
|
+
|
|
357
|
+
bool isAvailable() const {
|
|
358
|
+
return value.load(std::memory_order_acquire) == Available;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
void notifyBecameAvailable() {
|
|
362
|
+
std::vector<Listener> snapshot;
|
|
363
|
+
{
|
|
364
|
+
std::lock_guard<std::mutex> lock(mutex);
|
|
365
|
+
snapshot = listeners;
|
|
366
|
+
}
|
|
367
|
+
for (const auto& listener : snapshot) {
|
|
368
|
+
listener.callback();
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
void update(bool available) {
|
|
373
|
+
const int previous = value.exchange(available ? Available : Unavailable, std::memory_order_acq_rel);
|
|
374
|
+
if (!available || previous == Available) {
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
notifyBecameAvailable();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// The seed only resolves Unknown. A notification delivered before the
|
|
381
|
+
// queued seed runs is newer than the read and must not be overwritten.
|
|
382
|
+
void seed(std::optional<bool> available) {
|
|
383
|
+
if (!available.has_value()) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
int expected = Unknown;
|
|
387
|
+
if (value.compare_exchange_strong(expected, *available ? Available : Unavailable, std::memory_order_acq_rel)) {
|
|
388
|
+
if (*available) {
|
|
389
|
+
notifyBecameAvailable();
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
void reread(std::optional<bool> available) {
|
|
395
|
+
if (available.has_value()) {
|
|
396
|
+
update(*available);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
static void refreshOnMain(const std::shared_ptr<ProtectedDataState>& state, bool seedOnly) {
|
|
401
|
+
if ([NSThread isMainThread]) {
|
|
402
|
+
seedOnly ? state->seed(state->reader()) : state->reread(state->reader());
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
std::weak_ptr<ProtectedDataState> weakState = state;
|
|
406
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
407
|
+
if (auto alive = weakState.lock()) {
|
|
408
|
+
seedOnly ? alive->seed(alive->reader()) : alive->reread(alive->reader());
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
static std::optional<bool> readApplicationProtectedDataAvailability() {
|
|
415
|
+
if ([[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]) {
|
|
416
|
+
return true;
|
|
417
|
+
}
|
|
418
|
+
Class applicationClass = NSClassFromString(@"UIApplication");
|
|
419
|
+
if (applicationClass == nil || ![applicationClass respondsToSelector:@selector(sharedApplication)]) {
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
id application = ((id (*)(Class, SEL))objc_msgSend)(applicationClass, @selector(sharedApplication));
|
|
423
|
+
if (application == nil) {
|
|
424
|
+
return std::nullopt;
|
|
425
|
+
}
|
|
426
|
+
if (![application respondsToSelector:@selector(isProtectedDataAvailable)]) {
|
|
427
|
+
return true;
|
|
428
|
+
}
|
|
429
|
+
return ((BOOL (*)(id, SEL))objc_msgSend)(application, @selector(isProtectedDataAvailable));
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
IOSStorageAdapterCpp::IOSStorageAdapterCpp()
|
|
433
|
+
: IOSStorageAdapterCpp(&readApplicationProtectedDataAvailability) {}
|
|
434
|
+
|
|
435
|
+
IOSStorageAdapterCpp::IOSStorageAdapterCpp(ProtectedDataReader protectedDataReader)
|
|
436
|
+
: protectedData_(std::make_shared<ProtectedDataState>()) {
|
|
437
|
+
protectedData_->reader = std::move(protectedDataReader);
|
|
438
|
+
std::weak_ptr<ProtectedDataState> weakState = protectedData_;
|
|
439
|
+
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
|
440
|
+
id available = [center addObserverForName:kProtectedDataBecameAvailable
|
|
441
|
+
object:nil
|
|
442
|
+
queue:nil
|
|
443
|
+
usingBlock:^(NSNotification*) {
|
|
444
|
+
if (auto state = weakState.lock()) {
|
|
445
|
+
state->update(true);
|
|
446
|
+
}
|
|
447
|
+
}];
|
|
448
|
+
id unavailable = [center addObserverForName:kProtectedDataWillBecomeUnavailable
|
|
449
|
+
object:nil
|
|
450
|
+
queue:nil
|
|
451
|
+
usingBlock:^(NSNotification*) {
|
|
452
|
+
if (auto state = weakState.lock()) {
|
|
453
|
+
state->update(false);
|
|
454
|
+
}
|
|
455
|
+
}];
|
|
456
|
+
// DidBecomeAvailable is not guaranteed after WillBecomeUnavailable when the
|
|
457
|
+
// user unlocks inside the grace window, so foregrounding re-reads the truth.
|
|
458
|
+
auto refresh = ^(NSNotification*) {
|
|
459
|
+
if (auto state = weakState.lock()) {
|
|
460
|
+
ProtectedDataState::refreshOnMain(state, false);
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
id active = [center addObserverForName:kApplicationDidBecomeActive object:nil queue:nil usingBlock:refresh];
|
|
464
|
+
id foreground = [center addObserverForName:kApplicationWillEnterForeground object:nil queue:nil usingBlock:refresh];
|
|
465
|
+
protectedData_->observers = @[available, unavailable, active, foreground];
|
|
466
|
+
|
|
467
|
+
ProtectedDataState::refreshOnMain(protectedData_, true);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
IOSStorageAdapterCpp::~IOSStorageAdapterCpp() {
|
|
471
|
+
for (id observer in protectedData_->observers) {
|
|
472
|
+
[[NSNotificationCenter defaultCenter] removeObserver:observer];
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
bool IOSStorageAdapterCpp::isProtectedDataAvailable() {
|
|
477
|
+
return protectedData_->isAvailable();
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
std::function<void()> IOSStorageAdapterCpp::addProtectedDataAvailableListener(std::function<void()> listener) {
|
|
481
|
+
size_t id;
|
|
482
|
+
{
|
|
483
|
+
std::lock_guard<std::mutex> lock(protectedData_->mutex);
|
|
484
|
+
id = protectedData_->nextListenerId++;
|
|
485
|
+
protectedData_->listeners.push_back({id, std::move(listener)});
|
|
486
|
+
}
|
|
487
|
+
std::weak_ptr<ProtectedDataState> weakState = protectedData_;
|
|
488
|
+
return [weakState, id]() {
|
|
489
|
+
auto state = weakState.lock();
|
|
490
|
+
if (!state) return;
|
|
491
|
+
std::lock_guard<std::mutex> lock(state->mutex);
|
|
492
|
+
auto& listeners = state->listeners;
|
|
493
|
+
for (auto it = listeners.begin(); it != listeners.end(); ++it) {
|
|
494
|
+
if (it->id == id) {
|
|
495
|
+
listeners.erase(it);
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
};
|
|
500
|
+
}
|
|
323
501
|
|
|
324
502
|
void IOSStorageAdapterCpp::ensureDiskMigrated() {
|
|
325
503
|
if (diskMigrated_.load(std::memory_order_acquire)) {
|
|
@@ -26,9 +26,11 @@ let AccessControl = exports.AccessControl = /*#__PURE__*/function (AccessControl
|
|
|
26
26
|
let BiometricLevel = exports.BiometricLevel = /*#__PURE__*/function (BiometricLevel) {
|
|
27
27
|
/** No biometric requirement (default). */
|
|
28
28
|
BiometricLevel[BiometricLevel["None"] = 0] = "None";
|
|
29
|
-
/**
|
|
29
|
+
/** iOS: Keychain user presence. Android: recent authentication when opening
|
|
30
|
+
* the protected store; later access uses its cached keyset. Web: no biometric enforcement. */
|
|
30
31
|
BiometricLevel[BiometricLevel["BiometryOrPasscode"] = 1] = "BiometryOrPasscode";
|
|
31
|
-
/**
|
|
32
|
+
/** Biometric-only Keychain/Keystore policy, without passcode fallback.
|
|
33
|
+
* Android authenticates when opening the store, not each access. Web: no biometric enforcement. */
|
|
32
34
|
BiometricLevel[BiometricLevel["BiometryOnly"] = 2] = "BiometryOnly";
|
|
33
35
|
return BiometricLevel;
|
|
34
36
|
}({});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StorageScope","exports","AccessControl","BiometricLevel"],"sourceRoot":"../../src","sources":["Storage.types.ts"],"mappings":";;;;;;IAAYA,YAAY,GAAAC,OAAA,CAAAD,YAAA,0BAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAAA,IAMZE,aAAa,GAAAD,OAAA,CAAAC,aAAA,0BAAbA,aAAa;EACvB;EADUA,aAAa,CAAbA,aAAa;EAGvB;EAHUA,aAAa,CAAbA,aAAa;EAKvB;EALUA,aAAa,CAAbA,aAAa;EAOvB;EAPUA,aAAa,CAAbA,aAAa;EASvB;EATUA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAAA,IAabC,cAAc,GAAAF,OAAA,CAAAE,cAAA,0BAAdA,cAAc;EACxB;EADUA,cAAc,CAAdA,cAAc;EAGxB;
|
|
1
|
+
{"version":3,"names":["StorageScope","exports","AccessControl","BiometricLevel"],"sourceRoot":"../../src","sources":["Storage.types.ts"],"mappings":";;;;;;IAAYA,YAAY,GAAAC,OAAA,CAAAD,YAAA,0BAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAAA,IAMZE,aAAa,GAAAD,OAAA,CAAAC,aAAA,0BAAbA,aAAa;EACvB;EADUA,aAAa,CAAbA,aAAa;EAGvB;EAHUA,aAAa,CAAbA,aAAa;EAKvB;EALUA,aAAa,CAAbA,aAAa;EAOvB;EAPUA,aAAa,CAAbA,aAAa;EASvB;EATUA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAAA,IAabC,cAAc,GAAAF,OAAA,CAAAE,cAAA,0BAAdA,cAAc;EACxB;EADUA,cAAc,CAAdA,cAAc;EAGxB;AACF;EAJYA,cAAc,CAAdA,cAAc;EAMxB;AACF;EAPYA,cAAc,CAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA","ignoreList":[]}
|
|
@@ -11,6 +11,7 @@ function createDurabilityCoordinator(options) {
|
|
|
11
11
|
let nextGeneration = 0;
|
|
12
12
|
let diskFlushScheduled = false;
|
|
13
13
|
let diskWritesAsync = false;
|
|
14
|
+
let scheduledFlushErrorObserver;
|
|
14
15
|
const pendingSecureWrites = new Map();
|
|
15
16
|
let secureFlushScheduled = false;
|
|
16
17
|
const securePromotionsInProgress = new Set();
|
|
@@ -114,6 +115,30 @@ function createDurabilityCoordinator(options) {
|
|
|
114
115
|
clearPendingWrites(pendingSecureWrites, removeWrites);
|
|
115
116
|
}
|
|
116
117
|
}
|
|
118
|
+
function reportScheduledFlushError(scope, error) {
|
|
119
|
+
const observer = scheduledFlushErrorObserver;
|
|
120
|
+
if (observer === undefined) {
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
observer({
|
|
124
|
+
scope,
|
|
125
|
+
error
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function flushScheduledDiskWrites() {
|
|
129
|
+
try {
|
|
130
|
+
flushDiskWrites();
|
|
131
|
+
} catch (error) {
|
|
132
|
+
reportScheduledFlushError(_Storage.StorageScope.Disk, error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function flushScheduledSecureWrites() {
|
|
136
|
+
try {
|
|
137
|
+
flushSecureWrites();
|
|
138
|
+
} catch (error) {
|
|
139
|
+
reportScheduledFlushError(_Storage.StorageScope.Secure, error);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
117
142
|
function scheduleDiskWrite(key, value) {
|
|
118
143
|
const pendingWrite = {
|
|
119
144
|
key,
|
|
@@ -125,7 +150,7 @@ function createDurabilityCoordinator(options) {
|
|
|
125
150
|
return pendingWrite;
|
|
126
151
|
}
|
|
127
152
|
diskFlushScheduled = true;
|
|
128
|
-
(0, _shared.runMicrotask)(
|
|
153
|
+
(0, _shared.runMicrotask)(flushScheduledDiskWrites);
|
|
129
154
|
return pendingWrite;
|
|
130
155
|
}
|
|
131
156
|
function scheduleSecureWrite(key, value, accessControl) {
|
|
@@ -142,7 +167,7 @@ function createDurabilityCoordinator(options) {
|
|
|
142
167
|
return pendingWrite;
|
|
143
168
|
}
|
|
144
169
|
secureFlushScheduled = true;
|
|
145
|
-
(0, _shared.runMicrotask)(
|
|
170
|
+
(0, _shared.runMicrotask)(flushScheduledSecureWrites);
|
|
146
171
|
return pendingWrite;
|
|
147
172
|
}
|
|
148
173
|
function runSecurePromotion(key, promotion) {
|
|
@@ -160,6 +185,9 @@ function createDurabilityCoordinator(options) {
|
|
|
160
185
|
}
|
|
161
186
|
}
|
|
162
187
|
return {
|
|
188
|
+
setScheduledFlushErrorObserver(observer) {
|
|
189
|
+
scheduledFlushErrorObserver = observer;
|
|
190
|
+
},
|
|
163
191
|
setDiskWritesAsync(enabled) {
|
|
164
192
|
diskWritesAsync = enabled;
|
|
165
193
|
if (!enabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_shared","require","_Storage","createDurabilityCoordinator","options","pendingDiskWrites","Map","nextGeneration","diskFlushScheduled","diskWritesAsync","pendingSecureWrites","secureFlushScheduled","securePromotionsInProgress","Set","clearPendingWrites","pendingWrites","writes","forEach","write","get","key","delete","restorePendingWrites","has","set","flushDiskWrites","size","Array","from","values","setWrites","filter","value","undefined","removeWrites","length","backend","setBatch","map","StorageScope","Disk","error","removeBatch","flushSecureWrites","groupedSetWrites","accessControl","push","resolvedAccessControl","resolveSecureDefaultAccessControl","existingGroup","group","setSecureAccessControl","Secure","scheduleDiskWrite","pendingWrite","generation","runMicrotask","scheduleSecureWrite","runSecurePromotion","promotion","Error","add","setDiskWritesAsync","enabled","isDiskWritesAsync","hasPendingDiskWrite","hasPendingSecureWrite","getPendingDiskWrite","getPendingSecureWrite","clearPendingDiskWrite","clearPendingSecureWrite","clearPendingDiskWriteIf","clearPendingSecureWriteIf","clearAllPendingDiskWrites","clear","clearAllPendingSecureWrites"],"sourceRoot":"../../../src","sources":["core/durability.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_shared","require","_Storage","createDurabilityCoordinator","options","pendingDiskWrites","Map","nextGeneration","diskFlushScheduled","diskWritesAsync","scheduledFlushErrorObserver","pendingSecureWrites","secureFlushScheduled","securePromotionsInProgress","Set","clearPendingWrites","pendingWrites","writes","forEach","write","get","key","delete","restorePendingWrites","has","set","flushDiskWrites","size","Array","from","values","setWrites","filter","value","undefined","removeWrites","length","backend","setBatch","map","StorageScope","Disk","error","removeBatch","flushSecureWrites","groupedSetWrites","accessControl","push","resolvedAccessControl","resolveSecureDefaultAccessControl","existingGroup","group","setSecureAccessControl","Secure","reportScheduledFlushError","scope","observer","flushScheduledDiskWrites","flushScheduledSecureWrites","scheduleDiskWrite","pendingWrite","generation","runMicrotask","scheduleSecureWrite","runSecurePromotion","promotion","Error","add","setScheduledFlushErrorObserver","setDiskWritesAsync","enabled","isDiskWritesAsync","hasPendingDiskWrite","hasPendingSecureWrite","getPendingDiskWrite","getPendingSecureWrite","clearPendingDiskWrite","clearPendingSecureWrite","clearPendingDiskWriteIf","clearPendingSecureWriteIf","clearAllPendingDiskWrites","clear","clearAllPendingSecureWrites"],"sourceRoot":"../../../src","sources":["core/durability.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -64,7 +64,7 @@ Object.defineProperty(exports, "migrateFromMMKV", {
|
|
|
64
64
|
return _migration.migrateFromMMKV;
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
|
-
exports.setBatch = exports.secureItem = exports.runTransaction = exports.removeBatch = exports.registerMigration = exports.migrateToLatest = void 0;
|
|
67
|
+
exports.setBatch = exports.secureItem = exports.runTransaction = exports.removeBatch = exports.registerMigration = exports.migrateToLatest = exports.migrateSecureAccessControl = void 0;
|
|
68
68
|
exports.setWebDiskStorageBackend = setWebDiskStorageBackend;
|
|
69
69
|
exports.setWebSecureStorageBackend = setWebSecureStorageBackend;
|
|
70
70
|
exports.storage = void 0;
|
|
@@ -236,6 +236,7 @@ function buildNativeAdapter(internals) {
|
|
|
236
236
|
backend: nativeBackend,
|
|
237
237
|
changeSource: "native",
|
|
238
238
|
applyAccessControlOnSecureRawWrite: true,
|
|
239
|
+
supportsSecureAccessControlMigration: () => _reactNative.Platform.OS === "ios",
|
|
239
240
|
ensureScopeSubscription: ensureNativeScopeSubscription,
|
|
240
241
|
maybeCleanupScopeSubscription: maybeCleanupNativeScopeSubscription,
|
|
241
242
|
onWillEmitChanges: (scope, keys, operation, source) => {
|
|
@@ -266,6 +267,19 @@ const storage = exports.storage = {
|
|
|
266
267
|
getStorageModule().setSecureAccessControl(level);
|
|
267
268
|
});
|
|
268
269
|
},
|
|
270
|
+
isProtectedDataAvailable: () => {
|
|
271
|
+
const module = getStorageModule();
|
|
272
|
+
return typeof module.isProtectedDataAvailable === "function" ? module.isProtectedDataAvailable() : true;
|
|
273
|
+
},
|
|
274
|
+
onProtectedDataAvailable: listener => {
|
|
275
|
+
(0, _shared.assertProtectedDataListener)(listener);
|
|
276
|
+
const module = getStorageModule();
|
|
277
|
+
if (typeof module.onProtectedDataAvailable !== "function") {
|
|
278
|
+
return () => {};
|
|
279
|
+
}
|
|
280
|
+
const unsubscribe = module.onProtectedDataAvailable(listener);
|
|
281
|
+
return typeof unsubscribe === "function" ? unsubscribe : () => {};
|
|
282
|
+
},
|
|
269
283
|
setSecureWritesAsync: enabled => {
|
|
270
284
|
internals.measureOperation("storage:setSecureWritesAsync", _Storage.StorageScope.Secure, () => {
|
|
271
285
|
getStorageModule().setSecureWritesAsync(enabled);
|
|
@@ -318,6 +332,7 @@ const setBatch = exports.setBatch = core.setBatch;
|
|
|
318
332
|
const removeBatch = exports.removeBatch = core.removeBatch;
|
|
319
333
|
const registerMigration = exports.registerMigration = core.registerMigration;
|
|
320
334
|
const migrateToLatest = exports.migrateToLatest = core.migrateToLatest;
|
|
335
|
+
const migrateSecureAccessControl = exports.migrateSecureAccessControl = core.migrateSecureAccessControl;
|
|
321
336
|
const runTransaction = exports.runTransaction = core.runTransaction;
|
|
322
337
|
const createSecureAuthStorage = exports.createSecureAuthStorage = core.createSecureAuthStorage;
|
|
323
338
|
function setWebSecureStorageBackend(_backend) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeNitroModules","_capabilities","_indexeddbBackend","_internal","_shared","_storageCore","_Storage","_migration","_storageRuntime","_webBackendContract","_storageHooks","_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","notifyKeyListeners","oldValue","readCachedRawValue","invalidateRawCache","cacheRawValue","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","createIndexedDBBackend","createIndexedDBBackendFromSubpath"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeNitroModules","_capabilities","_indexeddbBackend","_internal","_shared","_storageCore","_Storage","_migration","_storageRuntime","_webBackendContract","_storageHooks","_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","notifyKeyListeners","oldValue","readCachedRawValue","invalidateRawCache","cacheRawValue","emitKeyChange","unescapeCollidingRawValue","maybeCleanupNativeScopeSubscription","listeners","hasScopeEventListeners","hasEventObserver","backend","changeSource","applyAccessControlOnSecureRawWrite","supportsSecureAccessControlMigration","Platform","OS","ensureScopeSubscription","maybeCleanupScopeSubscription","onWillEmitChanges","operation","source","Memory","forEach","getSecureMetadataProfile","encrypted","hardwareBacked","core","createStorageCore","secureWritesBuffered","DEFAULT_SECURE_WRITES_ASYNC","storage","exports","setAccessControl","measureOperation","assertAccessControlLevel","setSecureDefaultAccessControl","isProtectedDataAvailable","module","onProtectedDataAvailable","listener","assertProtectedDataListener","setSecureWritesAsync","enabled","setKeychainAccessGroup","group","getCapabilities","platform","disk","secure","writeBuffering","resolveNativeWriteBuffering","errorClassification","getSecurityCapabilities","secureStorage","accessControl","keychainAccessGroup","biometric","prompt","biometryOnly","biometryOrPasscode","metadata","perKey","listsWithoutValues","persistsTimestamps","createStorageItem","memoryItem","diskItem","secureItem","createSetItem","registerMigration","migrateToLatest","migrateSecureAccessControl","runTransaction","createSecureAuthStorage","setWebSecureStorageBackend","_backend","getWebSecureStorageBackend","setWebDiskStorageBackend","getWebDiskStorageBackend","flushWebStorageBackends","createIndexedDBBackend","createIndexedDBBackendFromSubpath"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|