react-native-nitro-storage 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +237 -862
- package/SECURITY.md +26 -0
- package/android/src/main/java/com/nitrostorage/AndroidStorageAdapter.kt +61 -10
- package/docs/api-reference.md +217 -0
- package/docs/batch-transactions-migrations.md +186 -0
- package/docs/benchmarks.md +37 -0
- package/docs/mmkv-migration.md +80 -0
- package/docs/react-hooks.md +113 -0
- package/docs/recipes.md +281 -0
- package/docs/secure-storage.md +171 -0
- package/docs/web-backends.md +141 -0
- package/ios/IOSStorageAdapterCpp.mm +44 -14
- package/lib/commonjs/index.js +271 -5
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +498 -202
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/indexeddb-backend.js +129 -7
- package/lib/commonjs/indexeddb-backend.js.map +1 -1
- package/lib/commonjs/storage-runtime.js +41 -0
- package/lib/commonjs/storage-runtime.js.map +1 -0
- package/lib/commonjs/web-storage-backend.js +90 -0
- package/lib/commonjs/web-storage-backend.js.map +1 -0
- package/lib/module/index.js +263 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +490 -202
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/indexeddb-backend.js +129 -7
- package/lib/module/indexeddb-backend.js.map +1 -1
- package/lib/module/storage-runtime.js +36 -0
- package/lib/module/storage-runtime.js.map +1 -0
- package/lib/module/web-storage-backend.js +86 -0
- package/lib/module/web-storage-backend.js.map +1 -0
- package/lib/typescript/index.d.ts +14 -7
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/index.web.d.ts +15 -8
- package/lib/typescript/index.web.d.ts.map +1 -1
- package/lib/typescript/indexeddb-backend.d.ts +6 -2
- package/lib/typescript/indexeddb-backend.d.ts.map +1 -1
- package/lib/typescript/storage-runtime.d.ts +48 -0
- package/lib/typescript/storage-runtime.d.ts.map +1 -0
- package/lib/typescript/web-storage-backend.d.ts +30 -0
- package/lib/typescript/web-storage-backend.d.ts.map +1 -0
- package/package.json +21 -8
- package/src/index.ts +330 -20
- package/src/index.web.ts +673 -245
- package/src/indexeddb-backend.ts +147 -6
- package/src/storage-runtime.ts +129 -0
- package/src/web-storage-backend.ts +129 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function getResolvedStorage(resolveStorage) {
|
|
4
|
+
if (resolveStorage) {
|
|
5
|
+
return resolveStorage();
|
|
6
|
+
}
|
|
7
|
+
if (typeof globalThis.localStorage === "undefined") {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
return globalThis.localStorage;
|
|
11
|
+
}
|
|
12
|
+
export function createLocalStorageWebBackend(options = {}) {
|
|
13
|
+
const includeKey = options.includeKey;
|
|
14
|
+
const resolveStorage = options.resolveStorage;
|
|
15
|
+
const listKeys = () => {
|
|
16
|
+
const storage = getResolvedStorage(resolveStorage);
|
|
17
|
+
if (!storage) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const keys = [];
|
|
21
|
+
for (let index = 0; index < storage.length; index += 1) {
|
|
22
|
+
const key = storage.key(index);
|
|
23
|
+
if (!key) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (includeKey && !includeKey(key)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
keys.push(key);
|
|
30
|
+
}
|
|
31
|
+
return keys;
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
name: options.name ?? "localStorage",
|
|
35
|
+
getItem(key) {
|
|
36
|
+
return getResolvedStorage(resolveStorage)?.getItem(key) ?? null;
|
|
37
|
+
},
|
|
38
|
+
setItem(key, value) {
|
|
39
|
+
getResolvedStorage(resolveStorage)?.setItem(key, value);
|
|
40
|
+
},
|
|
41
|
+
removeItem(key) {
|
|
42
|
+
getResolvedStorage(resolveStorage)?.removeItem(key);
|
|
43
|
+
},
|
|
44
|
+
clear() {
|
|
45
|
+
const storage = getResolvedStorage(resolveStorage);
|
|
46
|
+
if (!storage) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
listKeys().forEach(key => {
|
|
50
|
+
storage.removeItem(key);
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
getAllKeys() {
|
|
54
|
+
return listKeys();
|
|
55
|
+
},
|
|
56
|
+
getMany(keys) {
|
|
57
|
+
const storage = getResolvedStorage(resolveStorage);
|
|
58
|
+
if (!storage) {
|
|
59
|
+
return keys.map(() => null);
|
|
60
|
+
}
|
|
61
|
+
return keys.map(key => storage.getItem(key));
|
|
62
|
+
},
|
|
63
|
+
setMany(entries) {
|
|
64
|
+
const storage = getResolvedStorage(resolveStorage);
|
|
65
|
+
if (!storage) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
entries.forEach(([key, value]) => {
|
|
69
|
+
storage.setItem(key, value);
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
removeMany(keys) {
|
|
73
|
+
const storage = getResolvedStorage(resolveStorage);
|
|
74
|
+
if (!storage) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
keys.forEach(key => {
|
|
78
|
+
storage.removeItem(key);
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
size() {
|
|
82
|
+
return listKeys().length;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=web-storage-backend.js.map
|
|
@@ -0,0 +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":"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","ignoreList":[]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
|
|
2
|
+
import type { WebDiskStorageBackend, WebSecureStorageBackend } from "./web-storage-backend";
|
|
3
|
+
import { type SecureStorageMetadata, type SecurityCapabilities, type StorageCapabilities } from "./storage-runtime";
|
|
2
4
|
export { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
|
|
3
5
|
export type { Storage } from "./Storage.nitro";
|
|
4
6
|
export { migrateFromMMKV } from "./migration";
|
|
7
|
+
export { getStorageErrorCode, type SecureStorageMetadata, type SecurityCapabilities, type StorageCapabilities, type StorageErrorCode, } from "./storage-runtime";
|
|
8
|
+
export type { WebStorageBackend, WebStorageChangeEvent, WebStorageScope, } from "./web-storage-backend";
|
|
5
9
|
export type Validator<T> = (value: unknown) => value is T;
|
|
6
10
|
export type ExpirationConfig = {
|
|
7
11
|
ttlMs: number;
|
|
@@ -24,13 +28,6 @@ export type StorageMetricSummary = {
|
|
|
24
28
|
avgDurationMs: number;
|
|
25
29
|
maxDurationMs: number;
|
|
26
30
|
};
|
|
27
|
-
export type WebSecureStorageBackend = {
|
|
28
|
-
getItem: (key: string) => string | null;
|
|
29
|
-
setItem: (key: string, value: string) => void;
|
|
30
|
-
removeItem: (key: string) => void;
|
|
31
|
-
clear: () => void;
|
|
32
|
-
getAllKeys: () => string[];
|
|
33
|
-
};
|
|
34
31
|
export type MigrationContext = {
|
|
35
32
|
scope: StorageScope;
|
|
36
33
|
getRaw: (key: string) => string | undefined;
|
|
@@ -60,11 +57,17 @@ export declare const storage: {
|
|
|
60
57
|
size: (scope: StorageScope) => number;
|
|
61
58
|
setAccessControl: (level: AccessControl) => void;
|
|
62
59
|
setSecureWritesAsync: (enabled: boolean) => void;
|
|
60
|
+
setDiskWritesAsync: (enabled: boolean) => void;
|
|
61
|
+
flushDiskWrites: () => void;
|
|
63
62
|
flushSecureWrites: () => void;
|
|
64
63
|
setKeychainAccessGroup: (group: string) => void;
|
|
65
64
|
setMetricsObserver: (observer?: StorageMetricsObserver) => void;
|
|
66
65
|
getMetricsSnapshot: () => Record<string, StorageMetricSummary>;
|
|
67
66
|
resetMetrics: () => void;
|
|
67
|
+
getCapabilities: () => StorageCapabilities;
|
|
68
|
+
getSecurityCapabilities: () => SecurityCapabilities;
|
|
69
|
+
getSecureMetadata: (key: string) => SecureStorageMetadata;
|
|
70
|
+
getAllSecureMetadata: () => SecureStorageMetadata[];
|
|
68
71
|
getString: (key: string, scope: StorageScope) => string | undefined;
|
|
69
72
|
setString: (key: string, value: string, scope: StorageScope) => void;
|
|
70
73
|
deleteString: (key: string, scope: StorageScope) => void;
|
|
@@ -72,6 +75,9 @@ export declare const storage: {
|
|
|
72
75
|
};
|
|
73
76
|
export declare function setWebSecureStorageBackend(_backend?: WebSecureStorageBackend): void;
|
|
74
77
|
export declare function getWebSecureStorageBackend(): WebSecureStorageBackend | undefined;
|
|
78
|
+
export declare function setWebDiskStorageBackend(_backend?: WebDiskStorageBackend): void;
|
|
79
|
+
export declare function getWebDiskStorageBackend(): WebDiskStorageBackend | undefined;
|
|
80
|
+
export declare function flushWebStorageBackends(): Promise<void>;
|
|
75
81
|
export interface StorageItemConfig<T> {
|
|
76
82
|
key: string;
|
|
77
83
|
scope: StorageScope;
|
|
@@ -83,6 +89,7 @@ export interface StorageItemConfig<T> {
|
|
|
83
89
|
expiration?: ExpirationConfig;
|
|
84
90
|
onExpired?: (key: string) => void;
|
|
85
91
|
readCache?: boolean;
|
|
92
|
+
coalesceDiskWrites?: boolean;
|
|
86
93
|
coalesceSecureWrites?: boolean;
|
|
87
94
|
namespace?: string;
|
|
88
95
|
biometric?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
|
|
2
|
+
import { type WebDiskStorageBackend, type WebSecureStorageBackend } from "./web-storage-backend";
|
|
3
|
+
import { type SecureStorageMetadata, type SecurityCapabilities, type StorageCapabilities } from "./storage-runtime";
|
|
2
4
|
export { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
|
|
3
5
|
export { migrateFromMMKV } from "./migration";
|
|
6
|
+
export { getStorageErrorCode, type SecureStorageMetadata, type SecurityCapabilities, type StorageCapabilities, type StorageErrorCode, } from "./storage-runtime";
|
|
7
|
+
export type { WebStorageBackend, WebStorageChangeEvent, WebStorageScope, } from "./web-storage-backend";
|
|
4
8
|
export type Validator<T> = (value: unknown) => value is T;
|
|
5
9
|
export type ExpirationConfig = {
|
|
6
10
|
ttlMs: number;
|
|
@@ -23,13 +27,6 @@ export type StorageMetricSummary = {
|
|
|
23
27
|
avgDurationMs: number;
|
|
24
28
|
maxDurationMs: number;
|
|
25
29
|
};
|
|
26
|
-
export type WebSecureStorageBackend = {
|
|
27
|
-
getItem: (key: string) => string | null;
|
|
28
|
-
setItem: (key: string, value: string) => void;
|
|
29
|
-
removeItem: (key: string) => void;
|
|
30
|
-
clear: () => void;
|
|
31
|
-
getAllKeys: () => string[];
|
|
32
|
-
};
|
|
33
30
|
export type MigrationContext = {
|
|
34
31
|
scope: StorageScope;
|
|
35
32
|
getRaw: (key: string) => string | undefined;
|
|
@@ -86,11 +83,17 @@ export declare const storage: {
|
|
|
86
83
|
size: (scope: StorageScope) => number;
|
|
87
84
|
setAccessControl: (level: AccessControl) => void;
|
|
88
85
|
setSecureWritesAsync: (_enabled: boolean) => void;
|
|
86
|
+
setDiskWritesAsync: (enabled: boolean) => void;
|
|
87
|
+
flushDiskWrites: () => void;
|
|
89
88
|
flushSecureWrites: () => void;
|
|
90
89
|
setKeychainAccessGroup: (_group: string) => void;
|
|
91
90
|
setMetricsObserver: (observer?: StorageMetricsObserver) => void;
|
|
92
91
|
getMetricsSnapshot: () => Record<string, StorageMetricSummary>;
|
|
93
92
|
resetMetrics: () => void;
|
|
93
|
+
getCapabilities: () => StorageCapabilities;
|
|
94
|
+
getSecurityCapabilities: () => SecurityCapabilities;
|
|
95
|
+
getSecureMetadata: (key: string) => SecureStorageMetadata;
|
|
96
|
+
getAllSecureMetadata: () => SecureStorageMetadata[];
|
|
94
97
|
getString: (key: string, scope: StorageScope) => string | undefined;
|
|
95
98
|
setString: (key: string, value: string, scope: StorageScope) => void;
|
|
96
99
|
deleteString: (key: string, scope: StorageScope) => void;
|
|
@@ -98,6 +101,9 @@ export declare const storage: {
|
|
|
98
101
|
};
|
|
99
102
|
export declare function setWebSecureStorageBackend(backend?: WebSecureStorageBackend): void;
|
|
100
103
|
export declare function getWebSecureStorageBackend(): WebSecureStorageBackend | undefined;
|
|
104
|
+
export declare function setWebDiskStorageBackend(backend?: WebDiskStorageBackend): void;
|
|
105
|
+
export declare function getWebDiskStorageBackend(): WebDiskStorageBackend | undefined;
|
|
106
|
+
export declare function flushWebStorageBackends(): Promise<void>;
|
|
101
107
|
export interface StorageItemConfig<T> {
|
|
102
108
|
key: string;
|
|
103
109
|
scope: StorageScope;
|
|
@@ -109,6 +115,7 @@ export interface StorageItemConfig<T> {
|
|
|
109
115
|
expiration?: ExpirationConfig;
|
|
110
116
|
onExpired?: (key: string) => void;
|
|
111
117
|
readCache?: boolean;
|
|
118
|
+
coalesceDiskWrites?: boolean;
|
|
112
119
|
coalesceSecureWrites?: boolean;
|
|
113
120
|
namespace?: string;
|
|
114
121
|
biometric?: boolean;
|
|
@@ -159,5 +166,5 @@ export type SecureAuthStorageConfig<K extends string = string> = Record<K, {
|
|
|
159
166
|
export declare function createSecureAuthStorage<K extends string>(config: SecureAuthStorageConfig<K>, options?: {
|
|
160
167
|
namespace?: string;
|
|
161
168
|
}): Record<K, StorageItem<string>>;
|
|
162
|
-
export declare function isKeychainLockedError(
|
|
169
|
+
export declare function isKeychainLockedError(err: unknown): boolean;
|
|
163
170
|
//# sourceMappingURL=index.web.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../src/index.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../src/index.web.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type { WebSecureStorageBackend } from "./
|
|
1
|
+
import type { WebSecureStorageBackend } from "./web-storage-backend";
|
|
2
|
+
export type IndexedDBBackendOptions = {
|
|
3
|
+
channelName?: string;
|
|
4
|
+
onError?: (error: Error) => void;
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
7
|
* Creates a `WebSecureStorageBackend` backed by IndexedDB.
|
|
4
8
|
*
|
|
@@ -25,5 +29,5 @@ import type { WebSecureStorageBackend } from "./index.web";
|
|
|
25
29
|
* setWebSecureStorageBackend(backend);
|
|
26
30
|
* ```
|
|
27
31
|
*/
|
|
28
|
-
export declare function createIndexedDBBackend(dbName?: string, storeName?: string): Promise<WebSecureStorageBackend>;
|
|
32
|
+
export declare function createIndexedDBBackend(dbName?: string, storeName?: string, options?: IndexedDBBackendOptions): Promise<WebSecureStorageBackend>;
|
|
29
33
|
//# sourceMappingURL=indexeddb-backend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb-backend.d.ts","sourceRoot":"","sources":["../../src/indexeddb-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"indexeddb-backend.d.ts","sourceRoot":"","sources":["../../src/indexeddb-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,CAAC;AA4BF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,SAAkB,EACxB,SAAS,SAAqB,EAC9B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAqNlC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type StorageErrorCode = "keychain_locked" | "authentication_required" | "key_invalidated" | "storage_corruption" | "biometric_unavailable" | "unsupported";
|
|
2
|
+
export type StorageCapabilities = {
|
|
3
|
+
platform: "native" | "web";
|
|
4
|
+
backend: {
|
|
5
|
+
disk: string;
|
|
6
|
+
secure: string;
|
|
7
|
+
};
|
|
8
|
+
writeBuffering: {
|
|
9
|
+
disk: boolean;
|
|
10
|
+
secure: boolean;
|
|
11
|
+
};
|
|
12
|
+
errorClassification: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type SecurityCapabilityStatus = "available" | "unavailable" | "unknown";
|
|
15
|
+
export type SecurityCapabilities = {
|
|
16
|
+
platform: "native" | "web";
|
|
17
|
+
secureStorage: {
|
|
18
|
+
backend: string;
|
|
19
|
+
encrypted: SecurityCapabilityStatus;
|
|
20
|
+
accessControl: SecurityCapabilityStatus;
|
|
21
|
+
keychainAccessGroup: SecurityCapabilityStatus;
|
|
22
|
+
hardwareBacked: SecurityCapabilityStatus;
|
|
23
|
+
};
|
|
24
|
+
biometric: {
|
|
25
|
+
storage: SecurityCapabilityStatus;
|
|
26
|
+
prompt: SecurityCapabilityStatus;
|
|
27
|
+
biometryOnly: SecurityCapabilityStatus;
|
|
28
|
+
biometryOrPasscode: SecurityCapabilityStatus;
|
|
29
|
+
};
|
|
30
|
+
metadata: {
|
|
31
|
+
perKey: boolean;
|
|
32
|
+
listsWithoutValues: boolean;
|
|
33
|
+
persistsTimestamps: boolean;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export type SecureStorageMetadata = {
|
|
37
|
+
key: string;
|
|
38
|
+
exists: boolean;
|
|
39
|
+
kind: "secure" | "biometric" | "missing";
|
|
40
|
+
backend: string;
|
|
41
|
+
encrypted: SecurityCapabilityStatus;
|
|
42
|
+
hardwareBacked: SecurityCapabilityStatus;
|
|
43
|
+
biometricProtected: boolean;
|
|
44
|
+
valueExposed: false;
|
|
45
|
+
};
|
|
46
|
+
export declare function getStorageErrorCode(err: unknown): StorageErrorCode | undefined;
|
|
47
|
+
export declare function isLockedStorageErrorCode(code: StorageErrorCode | undefined): boolean;
|
|
48
|
+
//# sourceMappingURL=storage-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-runtime.d.ts","sourceRoot":"","sources":["../../src/storage-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,yBAAyB,GACzB,iBAAiB,GACjB,oBAAoB,GACpB,uBAAuB,GACvB,aAAa,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,EAAE;QACd,IAAI,EAAE,OAAO,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,aAAa,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,wBAAwB,CAAC;QACpC,aAAa,EAAE,wBAAwB,CAAC;QACxC,mBAAmB,EAAE,wBAAwB,CAAC;QAC9C,cAAc,EAAE,wBAAwB,CAAC;KAC1C,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,wBAAwB,CAAC;QAClC,MAAM,EAAE,wBAAwB,CAAC;QACjC,YAAY,EAAE,wBAAwB,CAAC;QACvC,kBAAkB,EAAE,wBAAwB,CAAC;KAC9C,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,wBAAwB,CAAC;IACpC,cAAc,EAAE,wBAAwB,CAAC;IACzC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,KAAK,CAAC;CACrB,CAAC;AAIF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,GACX,gBAAgB,GAAG,SAAS,CA0D9B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GACjC,OAAO,CAMT"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { StorageScope } from "./Storage.types";
|
|
2
|
+
export type WebStorageChangeEvent = {
|
|
3
|
+
key: string | null;
|
|
4
|
+
newValue: string | null;
|
|
5
|
+
};
|
|
6
|
+
export type WebStorageScope = StorageScope.Disk | StorageScope.Secure;
|
|
7
|
+
export type WebStorageBackend = {
|
|
8
|
+
getItem: (key: string) => string | null;
|
|
9
|
+
setItem: (key: string, value: string) => void;
|
|
10
|
+
removeItem: (key: string) => void;
|
|
11
|
+
clear: () => void;
|
|
12
|
+
getAllKeys: () => string[];
|
|
13
|
+
getMany?: (keys: string[]) => (string | null)[];
|
|
14
|
+
setMany?: (entries: readonly (readonly [key: string, value: string])[]) => void;
|
|
15
|
+
removeMany?: (keys: string[]) => void;
|
|
16
|
+
size?: () => number;
|
|
17
|
+
subscribe?: (listener: (event: WebStorageChangeEvent) => void) => () => void;
|
|
18
|
+
flush?: () => Promise<void>;
|
|
19
|
+
name?: string;
|
|
20
|
+
};
|
|
21
|
+
export type WebDiskStorageBackend = WebStorageBackend;
|
|
22
|
+
export type WebSecureStorageBackend = WebStorageBackend;
|
|
23
|
+
type LocalStorageBackendOptions = {
|
|
24
|
+
includeKey?: (key: string) => boolean;
|
|
25
|
+
name?: string;
|
|
26
|
+
resolveStorage?: () => Storage | undefined;
|
|
27
|
+
};
|
|
28
|
+
export declare function createLocalStorageWebBackend(options?: LocalStorageBackendOptions): WebStorageBackend;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=web-storage-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-storage-backend.d.ts","sourceRoot":"","sources":["../../src/web-storage-backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAChD,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,KACxD,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC7E,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AACtD,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAExD,KAAK,0BAA0B,GAAG;IAChC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;CAC5C,CAAC;AAgBF,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE,0BAA+B,GACvC,iBAAiB,CA6EnB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-nitro-storage",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Synchronous React Native storage powered by Nitro Modules and JSI: typed Memory, Disk, Keychain/Android Keystore secure storage, biometric auth, MMKV migration, Expo, Zustand/Jotai persistence, and web IndexedDB support.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
7
7
|
"types": "lib/typescript/index.d.ts",
|
|
@@ -30,9 +30,11 @@
|
|
|
30
30
|
"cpp",
|
|
31
31
|
"android",
|
|
32
32
|
"ios",
|
|
33
|
+
"docs",
|
|
33
34
|
"nitrogen",
|
|
34
35
|
"nitro.json",
|
|
35
36
|
"*.podspec",
|
|
37
|
+
"SECURITY.md",
|
|
36
38
|
"app.plugin.js",
|
|
37
39
|
"!**/__tests__",
|
|
38
40
|
"!**/__fixtures__",
|
|
@@ -48,8 +50,8 @@
|
|
|
48
50
|
"clean": "rimraf lib nitrogen/generated",
|
|
49
51
|
"codegen": "nitrogen --logLevel=\"debug\"",
|
|
50
52
|
"lint": "bunx eslint src --max-warnings=0 --fix",
|
|
51
|
-
"format": "bunx prettier --write \"src/**/*.{ts,tsx}\" \"../../README.md\"",
|
|
52
|
-
"format:check": "bunx prettier --check \"src/**/*.{ts,tsx}\" \"../../README.md\"",
|
|
53
|
+
"format": "bunx prettier --write \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\" \"../../SECURITY.md\" \"../../docs/**/*.md\"",
|
|
54
|
+
"format:check": "bunx prettier --check \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\" \"../../SECURITY.md\" \"../../docs/**/*.md\"",
|
|
53
55
|
"typecheck": "tsc --noEmit",
|
|
54
56
|
"test:types": "tsc --noEmit -p tsconfig.types.json",
|
|
55
57
|
"test": "jest",
|
|
@@ -58,25 +60,36 @@
|
|
|
58
60
|
"test:cpp": "node scripts/test-cpp.js",
|
|
59
61
|
"check:pack": "node scripts/check-pack-contents.js",
|
|
60
62
|
"prepublishOnly": "bun run clean && bun run codegen && bun run build && bun run test:types && bun run benchmark",
|
|
61
|
-
"prepack": "node -
|
|
62
|
-
"postpack": "node -
|
|
63
|
+
"prepack": "node scripts/sync-package-docs.js prepare",
|
|
64
|
+
"postpack": "node scripts/sync-package-docs.js cleanup"
|
|
63
65
|
},
|
|
64
66
|
"keywords": [
|
|
65
67
|
"react-native",
|
|
68
|
+
"react-native-storage",
|
|
69
|
+
"react-native-secure-storage",
|
|
66
70
|
"storage",
|
|
71
|
+
"secure-storage",
|
|
72
|
+
"encrypted-storage",
|
|
73
|
+
"biometric-storage",
|
|
74
|
+
"biometrics",
|
|
75
|
+
"ios-keychain",
|
|
76
|
+
"android-keystore",
|
|
67
77
|
"nitro",
|
|
78
|
+
"nitro-modules",
|
|
68
79
|
"jsi",
|
|
80
|
+
"synchronous-storage",
|
|
69
81
|
"synchronous",
|
|
70
82
|
"state-management",
|
|
83
|
+
"react-native-mmkv",
|
|
71
84
|
"mmkv",
|
|
72
85
|
"async-storage",
|
|
86
|
+
"expo-secure-store",
|
|
73
87
|
"secure-store",
|
|
74
88
|
"keychain",
|
|
75
89
|
"persistence",
|
|
76
90
|
"zustand",
|
|
77
91
|
"jotai",
|
|
78
|
-
"
|
|
79
|
-
"react-native-storage",
|
|
92
|
+
"indexeddb",
|
|
80
93
|
"native-module",
|
|
81
94
|
"performance",
|
|
82
95
|
"fast-storage"
|