react-native-nitro-storage 0.11.0 → 0.13.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 +47 -0
- package/README.md +71 -11
- package/SECURITY.md +2 -2
- package/android/build.gradle +5 -0
- package/android/src/main/cpp/AndroidStorageAdapterCpp.cpp +12 -13
- package/android/src/main/cpp/JniSize.hpp +21 -0
- package/android/src/main/java/com/nitrostorage/AndroidStorageAdapter.kt +124 -16
- package/android/src/main/java/com/nitrostorage/DiskSqliteStore.kt +160 -43
- package/cpp/bindings/HybridStorage.cpp +12 -4
- package/cpp/core/SqliteDiskStore.cpp +191 -33
- package/cpp/core/SqliteDiskStore.hpp +11 -1
- package/docs/api-reference.md +11 -10
- package/docs/native-libraries.md +28 -0
- package/ios/IOSStorageAdapterCpp.mm +89 -22
- package/lib/commonjs/index.web.js +2 -1
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/storage-core.js +26 -6
- package/lib/commonjs/storage-core.js.map +1 -1
- package/lib/commonjs/storage-runtime.js +1 -1
- package/lib/commonjs/storage-runtime.js.map +1 -1
- package/lib/module/index.web.js +2 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/storage-core.js +26 -6
- package/lib/module/storage-core.js.map +1 -1
- package/lib/module/storage-runtime.js +1 -1
- package/lib/module/storage-runtime.js.map +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/index.web.d.ts.map +1 -1
- package/lib/typescript/storage-core.d.ts.map +1 -1
- package/lib/typescript/storage-runtime.d.ts +1 -1
- package/lib/typescript/storage-runtime.d.ts.map +1 -1
- package/lib/typescript/testing.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/index.web.ts +5 -1
- package/src/storage-core.ts +26 -6
- package/src/storage-runtime.ts +2 -0
|
@@ -1 +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,6BAA6B,GAC7B,uBAAuB,GACvB,aAAa,GACb,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;
|
|
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,cAAc,GACd,6BAA6B,GAC7B,uBAAuB,GACvB,aAAa,GACb,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;AAgBF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,GACX,gBAAgB,GAAG,SAAS,CAe9B;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GACjC,OAAO,CAMT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAalG,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,EAC/B,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACd,SAAS,EACT,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AA6GzE,iBAAS,kBAAkB;;kCAsCG,aAAa;yCAIN,OAAO;yCACP,MAAM;+BAClB,mBAAmB;uCAYX,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAalG,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,EAC/B,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACd,SAAS,EACT,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AA6GzE,iBAAS,kBAAkB;;kCAsCG,aAAa;yCAIN,OAAO;yCACP,MAAM;+BAClB,mBAAmB;uCAYX,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsG2nqG,CAAC;aAAqB,CAAC;kCAA0C,CAAC;;iBA/E9tqG,IAAI;EAyBvB;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI3E,eAAO,MAAM,OAAO;8BAxEU,aAAa;qCAIN,OAAO;qCACP,MAAM;2BAClB,mBAAmB;mCAYX,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDT,CAAC;AAC7C,eAAO,MAAM,iBAAiB,mHAAkC,CAAC;AACjE,eAAO,MAAM,UAAU,kIAA2B,CAAC;AACnD,eAAO,MAAM,QAAQ,kIAAyB,CAAC;AAC/C,eAAO,MAAM,UAAU,kIAA2B,CAAC;AACnD,eAAO,MAAM,aAAa,gJAA8B,CAAC;AACzD,eAAO,MAAM,QAAQ,uKAAyB,CAAC;AAC/C,eAAO,MAAM,QAAQ;;;;;kCAAyB,CAAC;AAC/C,eAAO,MAAM,WAAW,2FAA4B,CAAC;AACrD,eAAO,MAAM,iBAAiB,oEAAkC,CAAC;AACjE,eAAO,MAAM,eAAe,kCAAgC,CAAC;AAC7D,eAAO,MAAM,cAAc,yGAA+B,CAAC;AAC3D,eAAO,MAAM,uBAAuB;aAoC4oqG,CAAC;SAAqB,CAAC;8BAA0C,CAAC;6DApCtqqG,CAAC;AAE7E,wBAAgB,0BAA0B,CACxC,QAAQ,CAAC,EAAE,uBAAuB,GACjC,IAAI,CAAG;AAEV,wBAAgB,0BAA0B,IACxC,uBAAuB,GAAG,SAAS,CAEpC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,IAAI,CAAG;AAEV,wBAAgB,wBAAwB,IAAI,qBAAqB,GAAG,SAAS,CAE5E;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;AAEjE,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,sBAAsB,IAAI,sBAAsB,CAE/D;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,OAAO,iCACT,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-nitro-storage",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
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",
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"!cpp/build",
|
|
55
55
|
"!android/build",
|
|
56
56
|
"!android/.cxx",
|
|
57
|
+
"!android/src/test",
|
|
57
58
|
"!scripts"
|
|
58
59
|
],
|
|
59
60
|
"sideEffects": false,
|
package/src/index.web.ts
CHANGED
|
@@ -165,8 +165,12 @@ function createWebStorageError(
|
|
|
165
165
|
const backendName = getBackendName(scope, backend);
|
|
166
166
|
const message =
|
|
167
167
|
error instanceof Error ? error.message : String(error ?? "Unknown error");
|
|
168
|
+
const tag =
|
|
169
|
+
error instanceof Error && error.name === "QuotaExceededError"
|
|
170
|
+
? "[nitro-error:storage_full] "
|
|
171
|
+
: "";
|
|
168
172
|
const wrapped = new Error(
|
|
169
|
-
|
|
173
|
+
`${tag}NitroStorage(web): ${operation} failed for ${backendName}: ${message}`,
|
|
170
174
|
);
|
|
171
175
|
Object.defineProperty(wrapped, "cause", {
|
|
172
176
|
configurable: true,
|
package/src/storage-core.ts
CHANGED
|
@@ -574,8 +574,9 @@ export function createStorageCore(
|
|
|
574
574
|
operation: StorageChangeOperation,
|
|
575
575
|
source: StorageChangeSource,
|
|
576
576
|
changes: StorageKeyChangeEvent[],
|
|
577
|
+
emitWhenEmpty = false,
|
|
577
578
|
): void {
|
|
578
|
-
if (changes.length === 0) {
|
|
579
|
+
if (changes.length === 0 && !emitWhenEmpty) {
|
|
579
580
|
return;
|
|
580
581
|
}
|
|
581
582
|
|
|
@@ -1024,9 +1025,18 @@ export function createStorageCore(
|
|
|
1024
1025
|
return;
|
|
1025
1026
|
}
|
|
1026
1027
|
measureOperation("storage:clear", scope, () => {
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1028
|
+
let previousValues: Record<string, string> = {};
|
|
1029
|
+
let previousValuesUnreadable = false;
|
|
1030
|
+
if (shouldReadPreviousEventValues(scope)) {
|
|
1031
|
+
try {
|
|
1032
|
+
previousValues = storage.getAll(scope);
|
|
1033
|
+
} catch (error) {
|
|
1034
|
+
if (scope !== StorageScope.Disk) {
|
|
1035
|
+
throw error;
|
|
1036
|
+
}
|
|
1037
|
+
previousValuesUnreadable = true;
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1030
1040
|
if (scope === StorageScope.Memory) {
|
|
1031
1041
|
memoryStore.clear();
|
|
1032
1042
|
memoryExpirationDeadlines.clear();
|
|
@@ -1049,9 +1059,15 @@ export function createStorageCore(
|
|
|
1049
1059
|
return;
|
|
1050
1060
|
}
|
|
1051
1061
|
|
|
1062
|
+
let diskFlushFailed = false;
|
|
1052
1063
|
if (scope === StorageScope.Disk) {
|
|
1053
|
-
|
|
1054
|
-
|
|
1064
|
+
try {
|
|
1065
|
+
flushDiskWrites();
|
|
1066
|
+
durability.clearAllPendingDiskWrites();
|
|
1067
|
+
} catch {
|
|
1068
|
+
diskFlushFailed = true;
|
|
1069
|
+
previousValuesUnreadable = shouldReadPreviousEventValues(scope);
|
|
1070
|
+
}
|
|
1055
1071
|
}
|
|
1056
1072
|
|
|
1057
1073
|
if (scope === StorageScope.Secure) {
|
|
@@ -1061,6 +1077,9 @@ export function createStorageCore(
|
|
|
1061
1077
|
|
|
1062
1078
|
clearScopeRawCache(scope);
|
|
1063
1079
|
adapter.backend.clear(scope);
|
|
1080
|
+
if (diskFlushFailed) {
|
|
1081
|
+
durability.clearAllPendingDiskWrites();
|
|
1082
|
+
}
|
|
1064
1083
|
emitBatchChange(
|
|
1065
1084
|
scope,
|
|
1066
1085
|
"clear",
|
|
@@ -1075,6 +1094,7 @@ export function createStorageCore(
|
|
|
1075
1094
|
adapter.changeSource,
|
|
1076
1095
|
),
|
|
1077
1096
|
),
|
|
1097
|
+
previousValuesUnreadable,
|
|
1078
1098
|
);
|
|
1079
1099
|
});
|
|
1080
1100
|
},
|
package/src/storage-runtime.ts
CHANGED
|
@@ -3,6 +3,7 @@ export type StorageErrorCode =
|
|
|
3
3
|
| "authentication_required"
|
|
4
4
|
| "key_invalidated"
|
|
5
5
|
| "storage_corruption"
|
|
6
|
+
| "storage_full"
|
|
6
7
|
| "storage_compensation_failed"
|
|
7
8
|
| "biometric_unavailable"
|
|
8
9
|
| "unsupported"
|
|
@@ -63,6 +64,7 @@ const STORAGE_ERROR_CODES = new Set<StorageErrorCode>([
|
|
|
63
64
|
"authentication_required",
|
|
64
65
|
"key_invalidated",
|
|
65
66
|
"storage_corruption",
|
|
67
|
+
"storage_full",
|
|
66
68
|
"storage_compensation_failed",
|
|
67
69
|
"biometric_unavailable",
|
|
68
70
|
"unsupported",
|