react-native-security-suite 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +40 -3
  2. package/android/.gradle/7.4/checksums/checksums.lock +0 -0
  3. package/android/.gradle/7.4/checksums/md5-checksums.bin +0 -0
  4. package/android/.gradle/7.4/checksums/sha1-checksums.bin +0 -0
  5. package/android/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock +0 -0
  6. package/android/.gradle/7.4/dependencies-accessors/gc.properties +0 -0
  7. package/android/.gradle/7.4/executionHistory/executionHistory.bin +0 -0
  8. package/android/.gradle/7.4/executionHistory/executionHistory.lock +0 -0
  9. package/android/.gradle/7.4/fileChanges/last-build.bin +0 -0
  10. package/android/.gradle/7.4/fileHashes/fileHashes.bin +0 -0
  11. package/android/.gradle/7.4/fileHashes/fileHashes.lock +0 -0
  12. package/android/.gradle/7.4/fileHashes/resourceHashesCache.bin +0 -0
  13. package/android/.gradle/7.4/gc.properties +0 -0
  14. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  15. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  16. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  17. package/android/.gradle/file-system.probe +0 -0
  18. package/android/.gradle/vcs-1/gc.properties +0 -0
  19. package/android/.idea/compiler.xml +6 -0
  20. package/android/.idea/gradle.xml +17 -0
  21. package/android/.idea/jarRepositories.xml +40 -0
  22. package/android/.idea/misc.xml +10 -0
  23. package/android/.idea/vcs.xml +6 -0
  24. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  25. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  26. package/android/gradlew +234 -0
  27. package/android/gradlew.bat +89 -0
  28. package/android/local.properties +8 -0
  29. package/android/src/main/java/com/reactnativesecuritysuite/SecuritySuiteModule.java +182 -18
  30. package/android/src/main/java/com/reactnativesecuritysuite/SecuritySuitePackage.java +12 -12
  31. package/android/src/main/java/com/reactnativesecuritysuite/StorageEncryption.java +53 -0
  32. package/ios/DataHashingMethods.swift +196 -0
  33. package/ios/SecuritySuite-Bridging-Header.h +1 -0
  34. package/ios/SecuritySuite.m +14 -0
  35. package/ios/SecuritySuite.swift +129 -0
  36. package/ios/SecuritySuite.xcodeproj/project.pbxproj +9 -15
  37. package/ios/SecuritySuite.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  38. package/ios/SecuritySuite.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  39. package/ios/SecuritySuite.xcodeproj/project.xcworkspace/xcuserdata/Navabi.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  40. package/ios/SecuritySuite.xcodeproj/xcuserdata/Navabi.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  41. package/ios/StorageEncryption.swift +81 -0
  42. package/lib/commonjs/helpers.js +19 -0
  43. package/lib/commonjs/helpers.js.map +1 -0
  44. package/lib/commonjs/index.js +173 -1
  45. package/lib/commonjs/index.js.map +1 -1
  46. package/lib/module/helpers.js +10 -0
  47. package/lib/module/helpers.js.map +1 -0
  48. package/lib/module/index.js +143 -0
  49. package/lib/module/index.js.map +1 -1
  50. package/lib/typescript/helpers.d.ts +1 -0
  51. package/lib/typescript/index.d.ts +19 -0
  52. package/package.json +12 -1
  53. package/react-native-security-suite.podspec +1 -1
  54. package/src/helpers.ts +8 -0
  55. package/src/index.tsx +195 -3
@@ -7,10 +7,9 @@
7
7
  objects = {
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
-
11
- 5E555C0D2413F4C50049A1A2 /* SecuritySuite.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* SecuritySuite.m */; };
12
- F4FF95D7245B92E800C19C63 /* SecuritySuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* SecuritySuite.swift */; };
13
-
10
+ 59F427012A67C7B90072365D /* StorageEncryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59F426FF2A67C7B90072365D /* StorageEncryption.swift */; };
11
+ 59F427022A67C7B90072365D /* DataHashingMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59F427002A67C7B90072365D /* DataHashingMethods.swift */; };
12
+ F4FF95D7245B92E800C19C63 /* SecuritySuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* SecuritySuite.swift */; };
14
13
  /* End PBXBuildFile section */
15
14
 
16
15
  /* Begin PBXCopyFilesBuildPhase section */
@@ -27,11 +26,11 @@
27
26
 
28
27
  /* Begin PBXFileReference section */
29
28
  134814201AA4EA6300B7C361 /* libSecuritySuite.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSecuritySuite.a; sourceTree = BUILT_PRODUCTS_DIR; };
30
-
29
+ 59F426FF2A67C7B90072365D /* StorageEncryption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageEncryption.swift; sourceTree = "<group>"; };
30
+ 59F427002A67C7B90072365D /* DataHashingMethods.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataHashingMethods.swift; sourceTree = "<group>"; };
31
31
  B3E7B5891CC2AC0600A0062D /* SecuritySuite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecuritySuite.m; sourceTree = "<group>"; };
32
32
  F4FF95D5245B92E700C19C63 /* SecuritySuite-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SecuritySuite-Bridging-Header.h"; sourceTree = "<group>"; };
33
33
  F4FF95D6245B92E800C19C63 /* SecuritySuite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecuritySuite.swift; sourceTree = "<group>"; };
34
-
35
34
  /* End PBXFileReference section */
36
35
 
37
36
  /* Begin PBXFrameworksBuildPhase section */
@@ -56,11 +55,11 @@
56
55
  58B511D21A9E6C8500147676 = {
57
56
  isa = PBXGroup;
58
57
  children = (
59
-
60
58
  F4FF95D6245B92E800C19C63 /* SecuritySuite.swift */,
61
59
  B3E7B5891CC2AC0600A0062D /* SecuritySuite.m */,
62
60
  F4FF95D5245B92E700C19C63 /* SecuritySuite-Bridging-Header.h */,
63
-
61
+ 59F427002A67C7B90072365D /* DataHashingMethods.swift */,
62
+ 59F426FF2A67C7B90072365D /* StorageEncryption.swift */,
64
63
  134814211AA4EA7D00B7C361 /* Products */,
65
64
  );
66
65
  sourceTree = "<group>";
@@ -122,10 +121,9 @@
122
121
  isa = PBXSourcesBuildPhase;
123
122
  buildActionMask = 2147483647;
124
123
  files = (
125
-
124
+ 59F427022A67C7B90072365D /* DataHashingMethods.swift in Sources */,
125
+ 59F427012A67C7B90072365D /* StorageEncryption.swift in Sources */,
126
126
  F4FF95D7245B92E800C19C63 /* SecuritySuite.swift in Sources */,
127
- B3E7B58A1CC2AC0600A0062D /* SecuritySuite.m in Sources */,
128
-
129
127
  );
130
128
  runOnlyForDeploymentPostprocessing = 0;
131
129
  };
@@ -238,11 +236,9 @@
238
236
  OTHER_LDFLAGS = "-ObjC";
239
237
  PRODUCT_NAME = SecuritySuite;
240
238
  SKIP_INSTALL = YES;
241
-
242
239
  SWIFT_OBJC_BRIDGING_HEADER = "SecuritySuite-Bridging-Header.h";
243
240
  SWIFT_OPTIMIZATION_LEVEL = "-Onone";
244
241
  SWIFT_VERSION = 5.0;
245
-
246
242
  };
247
243
  name = Debug;
248
244
  };
@@ -259,10 +255,8 @@
259
255
  OTHER_LDFLAGS = "-ObjC";
260
256
  PRODUCT_NAME = SecuritySuite;
261
257
  SKIP_INSTALL = YES;
262
-
263
258
  SWIFT_OBJC_BRIDGING_HEADER = "SecuritySuite-Bridging-Header.h";
264
259
  SWIFT_VERSION = 5.0;
265
-
266
260
  };
267
261
  name = Release;
268
262
  };
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workspace
3
+ version = "1.0">
4
+ <FileRef
5
+ location = "self:">
6
+ </FileRef>
7
+ </Workspace>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>IDEDidComputeMac32BitWarning</key>
6
+ <true/>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>SchemeUserState</key>
6
+ <dict>
7
+ <key>SecuritySuite.xcscheme_^#shared#^_</key>
8
+ <dict>
9
+ <key>orderHint</key>
10
+ <integer>0</integer>
11
+ </dict>
12
+ </dict>
13
+ </dict>
14
+ </plist>
@@ -0,0 +1,81 @@
1
+ //
2
+ // SoftEncryption.swift
3
+ // EncryptionSecurity
4
+ //
5
+ // Created by Mohammad on 5/9/1401 AP.
6
+ // Copyright © 1401 AP Facebook. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+ import CryptoKit
11
+
12
+ @available(iOS 13.0, *)
13
+ class StorageEncryption {
14
+ let nonce = try! AES.GCM.Nonce(data: Data(base64Encoded: "bj1nixTVoYpSvpdA")!)
15
+
16
+ func encrypt(plain: String, encryptionKey: String, hardEncryption: Bool) throws -> String {
17
+ do {
18
+ guard let encryptionKeyData = Data(base64Encoded: encryptionKey) else {
19
+ return "Could not decode encryptionKey text: \(encryptionKey)"
20
+ }
21
+ guard let plainData = plain.data(using: .utf8) else {
22
+ return "Could not decode plain text: \(plain)"
23
+ }
24
+ let symmetricKey = SymmetricKey(data: encryptionKeyData)
25
+ var encrypted = try AES.GCM.seal(plainData, using: symmetricKey, nonce: nonce, authenticating: ASN1.ec256)
26
+ if (hardEncryption) {
27
+ encrypted = try AES.GCM.seal(plainData, using: symmetricKey)
28
+ }
29
+ return encrypted.combined!.base64EncodedString()
30
+ } catch let error {
31
+ return "Error encrypting message: \(error.localizedDescription)"
32
+ }
33
+ }
34
+
35
+ func decrypt(decoded: String, encryptionKey: String, hardEncryption: Bool) throws -> String {
36
+ do {
37
+ guard let encryptionKeyData = Data(base64Encoded: encryptionKey) else {
38
+ return "Could not decode encryption key: \(encryptionKey)"
39
+ }
40
+ guard let decodedData = Data(base64Encoded: decoded) else {
41
+ return "Could not decode decoded text: \(decoded)"
42
+ }
43
+ let symmetricKey = SymmetricKey(data: encryptionKeyData)
44
+ if (hardEncryption) {
45
+ let sealedBoxToOpen = try AES.GCM.SealedBox(combined: decodedData)
46
+ let decrypted = try AES.GCM.open(sealedBoxToOpen, using: symmetricKey)
47
+ return String(data: decrypted, encoding: .utf8)!
48
+ } else {
49
+ let sealedBoxRestored = try AES.GCM.SealedBox(combined: decodedData)
50
+ let decrypted = try AES.GCM.open(sealedBoxRestored, using: symmetricKey, authenticating: ASN1.ec256)
51
+ return String(data: decrypted, encoding: .utf8)!
52
+ }
53
+ } catch let error {
54
+ return "Error decrypting message: \(error.localizedDescription)"
55
+ }
56
+ }
57
+ }
58
+
59
+ public extension Data {
60
+ init?(hexString: String) {
61
+ let len = hexString.count / 2
62
+ var data = Data(capacity: len)
63
+ var i = hexString.startIndex
64
+ for _ in 0..<len {
65
+ let j = hexString.index(i, offsetBy: 2)
66
+ let bytes = hexString[i..<j]
67
+ if var num = UInt8(bytes, radix: 16) {
68
+ data.append(&num, count: 1)
69
+ } else {
70
+ return nil
71
+ }
72
+ i = j
73
+ }
74
+ self = data
75
+ }
76
+ /// Hexadecimal string representation of `Data` object.
77
+ var hexadecimal: String {
78
+ return map { String(format: "%02x", $0) }
79
+ .joined()
80
+ }
81
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isJsonString = void 0;
7
+
8
+ const isJsonString = value => {
9
+ try {
10
+ JSON.parse(value);
11
+ } catch (e) {
12
+ return false;
13
+ }
14
+
15
+ return true;
16
+ };
17
+
18
+ exports.isJsonString = isJsonString;
19
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isJsonString","value","JSON","parse","e"],"sources":["helpers.ts"],"sourcesContent":["export const isJsonString = (value: string): boolean => {\n try {\n JSON.parse(value);\n } catch (e) {\n return false;\n }\n return true;\n};\n"],"mappings":";;;;;;;AAAO,MAAMA,YAAY,GAAIC,KAAD,IAA4B;EACtD,IAAI;IACFC,IAAI,CAACC,KAAL,CAAWF,KAAX;EACD,CAFD,CAEE,OAAOG,CAAP,EAAU;IACV,OAAO,KAAP;EACD;;EACD,OAAO,IAAP;AACD,CAPM"}
@@ -3,11 +3,20 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.default = exports.decryptBySharedKey = exports.decrypt = exports.SecureStorage = void 0;
7
7
  exports.deviceHasSecurityRisk = deviceHasSecurityRisk;
8
+ exports.getSharedKey = exports.getPublicKey = exports.getDeviceId = exports.encryptBySharedKey = exports.encrypt = void 0;
8
9
 
9
10
  var _reactNative = require("react-native");
10
11
 
12
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
13
+
14
+ var _lodash = _interopRequireDefault(require("lodash"));
15
+
16
+ var _helpers = require("./helpers");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
11
20
  const LINKING_ERROR = `The package 'react-native-security-suite' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
12
21
  ios: "- You have run 'pod install'\n",
13
22
  default: ''
@@ -19,6 +28,169 @@ const SecuritySuite = _reactNative.NativeModules.SecuritySuite ? _reactNative.Na
19
28
 
20
29
  });
21
30
 
31
+ const getPublicKey = () => SecuritySuite.getPublicKey();
32
+
33
+ exports.getPublicKey = getPublicKey;
34
+
35
+ const getSharedKey = serverPublicKey => SecuritySuite.getSharedKey(serverPublicKey);
36
+
37
+ exports.getSharedKey = getSharedKey;
38
+
39
+ const encryptBySharedKey = input => input && typeof input === 'string' ? SecuritySuite.encrypt(input) : '';
40
+
41
+ exports.encryptBySharedKey = encryptBySharedKey;
42
+
43
+ const decryptBySharedKey = input => input && typeof input === 'string' ? SecuritySuite.decrypt(input) : '';
44
+
45
+ exports.decryptBySharedKey = decryptBySharedKey;
46
+
47
+ const getDeviceId = () => new Promise((resolve, reject) => {
48
+ SecuritySuite.getDeviceId((result, error) => {
49
+ if (error !== null) reject(error);else resolve(result);
50
+ });
51
+ });
52
+
53
+ exports.getDeviceId = getDeviceId;
54
+
55
+ const encrypt = function (input) {
56
+ let hardEncryption = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
57
+ let secretKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
58
+ return new Promise((resolve, reject) => {
59
+ if (!input) resolve(input);
60
+ SecuritySuite.storageEncrypt(input, secretKey, hardEncryption, (result, error) => {
61
+ if (error !== null) reject(error);else resolve(result);
62
+ });
63
+ });
64
+ };
65
+
66
+ exports.encrypt = encrypt;
67
+
68
+ const decrypt = function (input) {
69
+ let hardEncryption = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
70
+ let secretKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
71
+ return new Promise((resolve, reject) => {
72
+ if (!input) resolve(input);
73
+ SecuritySuite.storageDecrypt(input, secretKey, hardEncryption, (result, error) => {
74
+ if (error !== null) reject(error);else resolve(result);
75
+ });
76
+ });
77
+ };
78
+
79
+ exports.decrypt = decrypt;
80
+ const SecureStorage = {
81
+ setItem: async (key, value) => {
82
+ try {
83
+ const encryptedKey = await encrypt(key, false);
84
+ const encryptedValue = await encrypt(value);
85
+ return _asyncStorage.default.setItem(encryptedKey, encryptedValue);
86
+ } catch (e) {
87
+ return e;
88
+ }
89
+ },
90
+ getItem: async key => {
91
+ try {
92
+ const encryptedKey = await encrypt(key, false);
93
+ const encryptedData = await _asyncStorage.default.getItem(encryptedKey);
94
+ return decrypt(encryptedData ?? '');
95
+ } catch (e) {
96
+ return e;
97
+ }
98
+ },
99
+ mergeItem: async (key, value) => {
100
+ try {
101
+ const encryptedKey = await encrypt(key, false);
102
+ const encryptedData = await _asyncStorage.default.getItem(encryptedKey);
103
+ const data = await decrypt(encryptedData ?? '');
104
+ if (!(0, _helpers.isJsonString)(data) || !(0, _helpers.isJsonString)(value)) return null;
105
+ const mergedData = await JSON.stringify(_lodash.default.merge(JSON.parse(data), JSON.parse(value)));
106
+ const encryptedValue = await encrypt(mergedData);
107
+ return _asyncStorage.default.setItem(encryptedKey, encryptedValue);
108
+ } catch (e) {
109
+ return e;
110
+ }
111
+ },
112
+ removeItem: async key => {
113
+ try {
114
+ const encryptedKey = await encrypt(key, false);
115
+ return _asyncStorage.default.removeItem(encryptedKey);
116
+ } catch (e) {
117
+ return e;
118
+ }
119
+ },
120
+ getAllKeys: async () => {
121
+ try {
122
+ const encryptedKeys = await _asyncStorage.default.getAllKeys();
123
+ return await Promise.all(encryptedKeys.map(async item => {
124
+ const decryptedKey = await decrypt(item, false);
125
+ return decryptedKey ? decryptedKey : item;
126
+ }));
127
+ } catch (e) {
128
+ return e;
129
+ }
130
+ },
131
+ multiSet: async keyValuePairs => {
132
+ try {
133
+ const encryptedKeyValuePairs = await Promise.all(keyValuePairs.map(async item => {
134
+ if (item.length !== 2) return [];
135
+ const encryptedKey = await encrypt(item[0], false);
136
+ const encryptedValue = await encrypt(item[1]);
137
+ return [encryptedKey, encryptedValue];
138
+ }));
139
+
140
+ _asyncStorage.default.multiSet(encryptedKeyValuePairs);
141
+ } catch (e) {
142
+ return e;
143
+ }
144
+ },
145
+ multiGet: async keys => {
146
+ try {
147
+ if (!Array.isArray(keys)) return null;
148
+ const encryptedKeys = await Promise.all(keys.map(async item => await encrypt(item, false)));
149
+ const encryptedItems = await _asyncStorage.default.multiGet(encryptedKeys);
150
+ return await Promise.all(encryptedItems && encryptedItems.length ? encryptedItems.map(async item => {
151
+ const decryptedKey = await decrypt(item[0], false);
152
+ const decryptedalue = await decrypt(item[1]);
153
+ return [decryptedKey, decryptedalue];
154
+ }) : []);
155
+ } catch (e) {
156
+ return e;
157
+ }
158
+ },
159
+ multiMerge: async keyValuePairs => {
160
+ try {
161
+ return keyValuePairs.map(async item => {
162
+ if (item.length !== 2) return;
163
+ const encryptedKey = await encrypt(item[0], false);
164
+ const encryptedData = await _asyncStorage.default.getItem(item[0]);
165
+ const data = await decrypt(encryptedData ?? '');
166
+ if (!(0, _helpers.isJsonString)(data) || !(0, _helpers.isJsonString)(item[1])) return null;
167
+ const mergedData = await JSON.stringify(_lodash.default.merge(JSON.parse(data), JSON.parse(item[1])));
168
+ const encryptedValue = await encrypt(mergedData, false);
169
+ return _asyncStorage.default.setItem(encryptedKey, encryptedValue);
170
+ });
171
+ } catch (e) {
172
+ return e;
173
+ }
174
+ },
175
+ multiRemove: async keys => {
176
+ try {
177
+ if (!Array.isArray(keys)) return keys;
178
+ const encryptedKeys = await Promise.all(keys.map(async item => await encrypt(item, false)));
179
+ return _asyncStorage.default.multiRemove(encryptedKeys);
180
+ } catch (e) {
181
+ return e;
182
+ }
183
+ },
184
+ clear: async () => {
185
+ try {
186
+ return _asyncStorage.default.clear();
187
+ } catch (e) {
188
+ return e;
189
+ }
190
+ }
191
+ };
192
+ exports.SecureStorage = SecureStorage;
193
+
22
194
  function deviceHasSecurityRisk() {
23
195
  return SecuritySuite.deviceHasSecurityRisk();
24
196
  }
@@ -1 +1 @@
1
- {"version":3,"names":["LINKING_ERROR","Platform","select","ios","default","SecuritySuite","NativeModules","Proxy","get","Error","deviceHasSecurityRisk"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules, Platform } from 'react-native';\n\nconst LINKING_ERROR =\n `The package 'react-native-security-suite' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nconst SecuritySuite = NativeModules.SecuritySuite\n ? NativeModules.SecuritySuite\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n \nexport function deviceHasSecurityRisk(): Promise<boolean> {\n return SecuritySuite.deviceHasSecurityRisk();\n}\n\nexport default SecuritySuite;"],"mappings":";;;;;;;;AAAA;;AAEA,MAAMA,aAAa,GAChB,sFAAD,GACAC,qBAAA,CAASC,MAAT,CAAgB;EAAEC,GAAG,EAAE,gCAAP;EAAyCC,OAAO,EAAE;AAAlD,CAAhB,CADA,GAEA,sDAFA,GAGA,6CAJF;AAMA,MAAMC,aAAa,GAAGC,0BAAA,CAAcD,aAAd,GAClBC,0BAAA,CAAcD,aADI,GAElB,IAAIE,KAAJ,CACE,EADF,EAEE;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAJ,CAAUT,aAAV,CAAN;EACD;;AAHH,CAFF,CAFJ;;AAWO,SAASU,qBAAT,GAAmD;EACxD,OAAOL,aAAa,CAACK,qBAAd,EAAP;AACD;;eAEcL,a"}
1
+ {"version":3,"names":["LINKING_ERROR","Platform","select","ios","default","SecuritySuite","NativeModules","Proxy","get","Error","getPublicKey","getSharedKey","serverPublicKey","encryptBySharedKey","input","encrypt","decryptBySharedKey","decrypt","getDeviceId","Promise","resolve","reject","result","error","hardEncryption","secretKey","storageEncrypt","storageDecrypt","SecureStorage","setItem","key","value","encryptedKey","encryptedValue","AsyncStorage","e","getItem","encryptedData","mergeItem","data","isJsonString","mergedData","JSON","stringify","_","merge","parse","removeItem","getAllKeys","encryptedKeys","all","map","item","decryptedKey","multiSet","keyValuePairs","encryptedKeyValuePairs","length","multiGet","keys","Array","isArray","encryptedItems","decryptedalue","multiMerge","multiRemove","clear","deviceHasSecurityRisk"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules, Platform } from 'react-native';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport _ from 'lodash';\nimport { isJsonString } from './helpers';\n\nconst LINKING_ERROR =\n `The package 'react-native-security-suite' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nconst SecuritySuite = NativeModules.SecuritySuite\n ? NativeModules.SecuritySuite\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nexport const getPublicKey = (): Promise<string> => SecuritySuite.getPublicKey();\n\nexport const getSharedKey = (serverPublicKey: string): Promise<string> =>\n SecuritySuite.getSharedKey(serverPublicKey);\n\nexport const encryptBySharedKey = (input: string): Promise<string> =>\n input && typeof input === 'string' ? SecuritySuite.encrypt(input) : '';\n\nexport const decryptBySharedKey = (input: string) =>\n input && typeof input === 'string' ? SecuritySuite.decrypt(input) : '';\n\nexport const getDeviceId = (): Promise<string> =>\n new Promise((resolve: any, reject: any) => {\n SecuritySuite.getDeviceId((result: string | null, error: string | null) => {\n if (error !== null) reject(error);\n else resolve(result);\n });\n });\n\nexport const encrypt = (\n input: string,\n hardEncryption = true,\n secretKey = null\n): Promise<string> =>\n new Promise((resolve: any, reject: any) => {\n if (!input) resolve(input);\n\n SecuritySuite.storageEncrypt(\n input,\n secretKey,\n hardEncryption,\n (result: string | null, error: string | null) => {\n if (error !== null) reject(error);\n else resolve(result);\n }\n );\n });\n\nexport const decrypt = (\n input: string,\n hardEncryption = true,\n secretKey = null\n): Promise<string> =>\n new Promise((resolve: any, reject: any) => {\n if (!input) resolve(input);\n\n SecuritySuite.storageDecrypt(\n input,\n secretKey,\n hardEncryption,\n (result: string | null, error: string | null) => {\n if (error !== null) reject(error);\n else resolve(result);\n }\n );\n });\n\nexport const SecureStorage = {\n setItem: async (key: string, value: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n const encryptedValue = await encrypt(value);\n return AsyncStorage.setItem(encryptedKey, encryptedValue);\n } catch (e) {\n return e;\n }\n },\n getItem: async (key: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n const encryptedData = await AsyncStorage.getItem(encryptedKey);\n return decrypt(encryptedData ?? '');\n } catch (e) {\n return e;\n }\n },\n mergeItem: async (key: string, value: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n const encryptedData = await AsyncStorage.getItem(encryptedKey);\n const data = await decrypt(encryptedData ?? '');\n if (!isJsonString(data) || !isJsonString(value)) return null;\n const mergedData = await JSON.stringify(\n _.merge(JSON.parse(data), JSON.parse(value))\n );\n const encryptedValue = await encrypt(mergedData);\n return AsyncStorage.setItem(encryptedKey, encryptedValue);\n } catch (e) {\n return e;\n }\n },\n removeItem: async (key: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n return AsyncStorage.removeItem(encryptedKey);\n } catch (e) {\n return e;\n }\n },\n getAllKeys: async () => {\n try {\n const encryptedKeys = await AsyncStorage.getAllKeys();\n return await Promise.all(\n encryptedKeys.map(async (item: string): Promise<string> => {\n const decryptedKey = await decrypt(item, false);\n return decryptedKey ? decryptedKey : item;\n })\n );\n } catch (e) {\n return e;\n }\n },\n multiSet: async (keyValuePairs: Array<Array<string>>) => {\n try {\n const encryptedKeyValuePairs: any = await Promise.all(\n keyValuePairs.map(async (item: Array<string>) => {\n if (item.length !== 2) return [];\n const encryptedKey = await encrypt(item[0], false);\n const encryptedValue = await encrypt(item[1]);\n return [encryptedKey, encryptedValue];\n })\n );\n AsyncStorage.multiSet(encryptedKeyValuePairs);\n } catch (e) {\n return e;\n }\n },\n multiGet: async (keys: Array<string>) => {\n try {\n if (!Array.isArray(keys)) return null;\n const encryptedKeys = await Promise.all(\n keys.map(\n async (item: string): Promise<string> => await encrypt(item, false)\n )\n );\n const encryptedItems = await AsyncStorage.multiGet(encryptedKeys);\n return await Promise.all(\n encryptedItems && encryptedItems.length\n ? encryptedItems.map(async (item: any): Promise<string[]> => {\n const decryptedKey = await decrypt(item[0], false);\n const decryptedalue = await decrypt(item[1]);\n return [decryptedKey, decryptedalue];\n })\n : []\n );\n } catch (e) {\n return e;\n }\n },\n multiMerge: async (keyValuePairs: Array<Array<string>>) => {\n try {\n return keyValuePairs.map(async (item: Array<string>) => {\n if (item.length !== 2) return;\n const encryptedKey = await encrypt(item[0], false);\n const encryptedData = await AsyncStorage.getItem(item[0]);\n const data = await decrypt(encryptedData ?? '');\n if (!isJsonString(data) || !isJsonString(item[1])) return null;\n const mergedData = await JSON.stringify(\n _.merge(JSON.parse(data), JSON.parse(item[1]))\n );\n const encryptedValue = await encrypt(mergedData, false);\n return AsyncStorage.setItem(encryptedKey, encryptedValue);\n });\n } catch (e) {\n return e;\n }\n },\n multiRemove: async (keys: Array<string>) => {\n try {\n if (!Array.isArray(keys)) return keys;\n const encryptedKeys = await Promise.all(\n keys.map(\n async (item: string): Promise<string> => await encrypt(item, false)\n )\n );\n return AsyncStorage.multiRemove(encryptedKeys);\n } catch (e) {\n return e;\n }\n },\n clear: async () => {\n try {\n return AsyncStorage.clear();\n } catch (e) {\n return e;\n }\n },\n};\n\nexport function deviceHasSecurityRisk(): Promise<boolean> {\n return SecuritySuite.deviceHasSecurityRisk();\n}\n\nexport default SecuritySuite;\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export const isJsonString = value => {
2
+ try {
3
+ JSON.parse(value);
4
+ } catch (e) {
5
+ return false;
6
+ }
7
+
8
+ return true;
9
+ };
10
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isJsonString","value","JSON","parse","e"],"sources":["helpers.ts"],"sourcesContent":["export const isJsonString = (value: string): boolean => {\n try {\n JSON.parse(value);\n } catch (e) {\n return false;\n }\n return true;\n};\n"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAIC,KAAD,IAA4B;EACtD,IAAI;IACFC,IAAI,CAACC,KAAL,CAAWF,KAAX;EACD,CAFD,CAEE,OAAOG,CAAP,EAAU;IACV,OAAO,KAAP;EACD;;EACD,OAAO,IAAP;AACD,CAPM"}
@@ -1,4 +1,7 @@
1
1
  import { NativeModules, Platform } from 'react-native';
2
+ import AsyncStorage from '@react-native-async-storage/async-storage';
3
+ import _ from 'lodash';
4
+ import { isJsonString } from './helpers';
2
5
  const LINKING_ERROR = `The package 'react-native-security-suite' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
3
6
  ios: "- You have run 'pod install'\n",
4
7
  default: ''
@@ -9,6 +12,146 @@ const SecuritySuite = NativeModules.SecuritySuite ? NativeModules.SecuritySuite
9
12
  }
10
13
 
11
14
  });
15
+ export const getPublicKey = () => SecuritySuite.getPublicKey();
16
+ export const getSharedKey = serverPublicKey => SecuritySuite.getSharedKey(serverPublicKey);
17
+ export const encryptBySharedKey = input => input && typeof input === 'string' ? SecuritySuite.encrypt(input) : '';
18
+ export const decryptBySharedKey = input => input && typeof input === 'string' ? SecuritySuite.decrypt(input) : '';
19
+ export const getDeviceId = () => new Promise((resolve, reject) => {
20
+ SecuritySuite.getDeviceId((result, error) => {
21
+ if (error !== null) reject(error);else resolve(result);
22
+ });
23
+ });
24
+ export const encrypt = function (input) {
25
+ let hardEncryption = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
26
+ let secretKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
27
+ return new Promise((resolve, reject) => {
28
+ if (!input) resolve(input);
29
+ SecuritySuite.storageEncrypt(input, secretKey, hardEncryption, (result, error) => {
30
+ if (error !== null) reject(error);else resolve(result);
31
+ });
32
+ });
33
+ };
34
+ export const decrypt = function (input) {
35
+ let hardEncryption = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
36
+ let secretKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
37
+ return new Promise((resolve, reject) => {
38
+ if (!input) resolve(input);
39
+ SecuritySuite.storageDecrypt(input, secretKey, hardEncryption, (result, error) => {
40
+ if (error !== null) reject(error);else resolve(result);
41
+ });
42
+ });
43
+ };
44
+ export const SecureStorage = {
45
+ setItem: async (key, value) => {
46
+ try {
47
+ const encryptedKey = await encrypt(key, false);
48
+ const encryptedValue = await encrypt(value);
49
+ return AsyncStorage.setItem(encryptedKey, encryptedValue);
50
+ } catch (e) {
51
+ return e;
52
+ }
53
+ },
54
+ getItem: async key => {
55
+ try {
56
+ const encryptedKey = await encrypt(key, false);
57
+ const encryptedData = await AsyncStorage.getItem(encryptedKey);
58
+ return decrypt(encryptedData ?? '');
59
+ } catch (e) {
60
+ return e;
61
+ }
62
+ },
63
+ mergeItem: async (key, value) => {
64
+ try {
65
+ const encryptedKey = await encrypt(key, false);
66
+ const encryptedData = await AsyncStorage.getItem(encryptedKey);
67
+ const data = await decrypt(encryptedData ?? '');
68
+ if (!isJsonString(data) || !isJsonString(value)) return null;
69
+ const mergedData = await JSON.stringify(_.merge(JSON.parse(data), JSON.parse(value)));
70
+ const encryptedValue = await encrypt(mergedData);
71
+ return AsyncStorage.setItem(encryptedKey, encryptedValue);
72
+ } catch (e) {
73
+ return e;
74
+ }
75
+ },
76
+ removeItem: async key => {
77
+ try {
78
+ const encryptedKey = await encrypt(key, false);
79
+ return AsyncStorage.removeItem(encryptedKey);
80
+ } catch (e) {
81
+ return e;
82
+ }
83
+ },
84
+ getAllKeys: async () => {
85
+ try {
86
+ const encryptedKeys = await AsyncStorage.getAllKeys();
87
+ return await Promise.all(encryptedKeys.map(async item => {
88
+ const decryptedKey = await decrypt(item, false);
89
+ return decryptedKey ? decryptedKey : item;
90
+ }));
91
+ } catch (e) {
92
+ return e;
93
+ }
94
+ },
95
+ multiSet: async keyValuePairs => {
96
+ try {
97
+ const encryptedKeyValuePairs = await Promise.all(keyValuePairs.map(async item => {
98
+ if (item.length !== 2) return [];
99
+ const encryptedKey = await encrypt(item[0], false);
100
+ const encryptedValue = await encrypt(item[1]);
101
+ return [encryptedKey, encryptedValue];
102
+ }));
103
+ AsyncStorage.multiSet(encryptedKeyValuePairs);
104
+ } catch (e) {
105
+ return e;
106
+ }
107
+ },
108
+ multiGet: async keys => {
109
+ try {
110
+ if (!Array.isArray(keys)) return null;
111
+ const encryptedKeys = await Promise.all(keys.map(async item => await encrypt(item, false)));
112
+ const encryptedItems = await AsyncStorage.multiGet(encryptedKeys);
113
+ return await Promise.all(encryptedItems && encryptedItems.length ? encryptedItems.map(async item => {
114
+ const decryptedKey = await decrypt(item[0], false);
115
+ const decryptedalue = await decrypt(item[1]);
116
+ return [decryptedKey, decryptedalue];
117
+ }) : []);
118
+ } catch (e) {
119
+ return e;
120
+ }
121
+ },
122
+ multiMerge: async keyValuePairs => {
123
+ try {
124
+ return keyValuePairs.map(async item => {
125
+ if (item.length !== 2) return;
126
+ const encryptedKey = await encrypt(item[0], false);
127
+ const encryptedData = await AsyncStorage.getItem(item[0]);
128
+ const data = await decrypt(encryptedData ?? '');
129
+ if (!isJsonString(data) || !isJsonString(item[1])) return null;
130
+ const mergedData = await JSON.stringify(_.merge(JSON.parse(data), JSON.parse(item[1])));
131
+ const encryptedValue = await encrypt(mergedData, false);
132
+ return AsyncStorage.setItem(encryptedKey, encryptedValue);
133
+ });
134
+ } catch (e) {
135
+ return e;
136
+ }
137
+ },
138
+ multiRemove: async keys => {
139
+ try {
140
+ if (!Array.isArray(keys)) return keys;
141
+ const encryptedKeys = await Promise.all(keys.map(async item => await encrypt(item, false)));
142
+ return AsyncStorage.multiRemove(encryptedKeys);
143
+ } catch (e) {
144
+ return e;
145
+ }
146
+ },
147
+ clear: async () => {
148
+ try {
149
+ return AsyncStorage.clear();
150
+ } catch (e) {
151
+ return e;
152
+ }
153
+ }
154
+ };
12
155
  export function deviceHasSecurityRisk() {
13
156
  return SecuritySuite.deviceHasSecurityRisk();
14
157
  }
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","SecuritySuite","Proxy","get","Error","deviceHasSecurityRisk"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules, Platform } from 'react-native';\n\nconst LINKING_ERROR =\n `The package 'react-native-security-suite' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nconst SecuritySuite = NativeModules.SecuritySuite\n ? NativeModules.SecuritySuite\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n \nexport function deviceHasSecurityRisk(): Promise<boolean> {\n return SecuritySuite.deviceHasSecurityRisk();\n}\n\nexport default SecuritySuite;"],"mappings":"AAAA,SAASA,aAAT,EAAwBC,QAAxB,QAAwC,cAAxC;AAEA,MAAMC,aAAa,GAChB,sFAAD,GACAD,QAAQ,CAACE,MAAT,CAAgB;EAAEC,GAAG,EAAE,gCAAP;EAAyCC,OAAO,EAAE;AAAlD,CAAhB,CADA,GAEA,sDAFA,GAGA,6CAJF;AAMA,MAAMC,aAAa,GAAGN,aAAa,CAACM,aAAd,GAClBN,aAAa,CAACM,aADI,GAElB,IAAIC,KAAJ,CACE,EADF,EAEE;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAJ,CAAUP,aAAV,CAAN;EACD;;AAHH,CAFF,CAFJ;AAWA,OAAO,SAASQ,qBAAT,GAAmD;EACxD,OAAOJ,aAAa,CAACI,qBAAd,EAAP;AACD;AAED,eAAeJ,aAAf"}
1
+ {"version":3,"names":["NativeModules","Platform","AsyncStorage","_","isJsonString","LINKING_ERROR","select","ios","default","SecuritySuite","Proxy","get","Error","getPublicKey","getSharedKey","serverPublicKey","encryptBySharedKey","input","encrypt","decryptBySharedKey","decrypt","getDeviceId","Promise","resolve","reject","result","error","hardEncryption","secretKey","storageEncrypt","storageDecrypt","SecureStorage","setItem","key","value","encryptedKey","encryptedValue","e","getItem","encryptedData","mergeItem","data","mergedData","JSON","stringify","merge","parse","removeItem","getAllKeys","encryptedKeys","all","map","item","decryptedKey","multiSet","keyValuePairs","encryptedKeyValuePairs","length","multiGet","keys","Array","isArray","encryptedItems","decryptedalue","multiMerge","multiRemove","clear","deviceHasSecurityRisk"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules, Platform } from 'react-native';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport _ from 'lodash';\nimport { isJsonString } from './helpers';\n\nconst LINKING_ERROR =\n `The package 'react-native-security-suite' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nconst SecuritySuite = NativeModules.SecuritySuite\n ? NativeModules.SecuritySuite\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nexport const getPublicKey = (): Promise<string> => SecuritySuite.getPublicKey();\n\nexport const getSharedKey = (serverPublicKey: string): Promise<string> =>\n SecuritySuite.getSharedKey(serverPublicKey);\n\nexport const encryptBySharedKey = (input: string): Promise<string> =>\n input && typeof input === 'string' ? SecuritySuite.encrypt(input) : '';\n\nexport const decryptBySharedKey = (input: string) =>\n input && typeof input === 'string' ? SecuritySuite.decrypt(input) : '';\n\nexport const getDeviceId = (): Promise<string> =>\n new Promise((resolve: any, reject: any) => {\n SecuritySuite.getDeviceId((result: string | null, error: string | null) => {\n if (error !== null) reject(error);\n else resolve(result);\n });\n });\n\nexport const encrypt = (\n input: string,\n hardEncryption = true,\n secretKey = null\n): Promise<string> =>\n new Promise((resolve: any, reject: any) => {\n if (!input) resolve(input);\n\n SecuritySuite.storageEncrypt(\n input,\n secretKey,\n hardEncryption,\n (result: string | null, error: string | null) => {\n if (error !== null) reject(error);\n else resolve(result);\n }\n );\n });\n\nexport const decrypt = (\n input: string,\n hardEncryption = true,\n secretKey = null\n): Promise<string> =>\n new Promise((resolve: any, reject: any) => {\n if (!input) resolve(input);\n\n SecuritySuite.storageDecrypt(\n input,\n secretKey,\n hardEncryption,\n (result: string | null, error: string | null) => {\n if (error !== null) reject(error);\n else resolve(result);\n }\n );\n });\n\nexport const SecureStorage = {\n setItem: async (key: string, value: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n const encryptedValue = await encrypt(value);\n return AsyncStorage.setItem(encryptedKey, encryptedValue);\n } catch (e) {\n return e;\n }\n },\n getItem: async (key: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n const encryptedData = await AsyncStorage.getItem(encryptedKey);\n return decrypt(encryptedData ?? '');\n } catch (e) {\n return e;\n }\n },\n mergeItem: async (key: string, value: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n const encryptedData = await AsyncStorage.getItem(encryptedKey);\n const data = await decrypt(encryptedData ?? '');\n if (!isJsonString(data) || !isJsonString(value)) return null;\n const mergedData = await JSON.stringify(\n _.merge(JSON.parse(data), JSON.parse(value))\n );\n const encryptedValue = await encrypt(mergedData);\n return AsyncStorage.setItem(encryptedKey, encryptedValue);\n } catch (e) {\n return e;\n }\n },\n removeItem: async (key: string) => {\n try {\n const encryptedKey = await encrypt(key, false);\n return AsyncStorage.removeItem(encryptedKey);\n } catch (e) {\n return e;\n }\n },\n getAllKeys: async () => {\n try {\n const encryptedKeys = await AsyncStorage.getAllKeys();\n return await Promise.all(\n encryptedKeys.map(async (item: string): Promise<string> => {\n const decryptedKey = await decrypt(item, false);\n return decryptedKey ? decryptedKey : item;\n })\n );\n } catch (e) {\n return e;\n }\n },\n multiSet: async (keyValuePairs: Array<Array<string>>) => {\n try {\n const encryptedKeyValuePairs: any = await Promise.all(\n keyValuePairs.map(async (item: Array<string>) => {\n if (item.length !== 2) return [];\n const encryptedKey = await encrypt(item[0], false);\n const encryptedValue = await encrypt(item[1]);\n return [encryptedKey, encryptedValue];\n })\n );\n AsyncStorage.multiSet(encryptedKeyValuePairs);\n } catch (e) {\n return e;\n }\n },\n multiGet: async (keys: Array<string>) => {\n try {\n if (!Array.isArray(keys)) return null;\n const encryptedKeys = await Promise.all(\n keys.map(\n async (item: string): Promise<string> => await encrypt(item, false)\n )\n );\n const encryptedItems = await AsyncStorage.multiGet(encryptedKeys);\n return await Promise.all(\n encryptedItems && encryptedItems.length\n ? encryptedItems.map(async (item: any): Promise<string[]> => {\n const decryptedKey = await decrypt(item[0], false);\n const decryptedalue = await decrypt(item[1]);\n return [decryptedKey, decryptedalue];\n })\n : []\n );\n } catch (e) {\n return e;\n }\n },\n multiMerge: async (keyValuePairs: Array<Array<string>>) => {\n try {\n return keyValuePairs.map(async (item: Array<string>) => {\n if (item.length !== 2) return;\n const encryptedKey = await encrypt(item[0], false);\n const encryptedData = await AsyncStorage.getItem(item[0]);\n const data = await decrypt(encryptedData ?? '');\n if (!isJsonString(data) || !isJsonString(item[1])) return null;\n const mergedData = await JSON.stringify(\n _.merge(JSON.parse(data), JSON.parse(item[1]))\n );\n const encryptedValue = await encrypt(mergedData, false);\n return AsyncStorage.setItem(encryptedKey, encryptedValue);\n });\n } catch (e) {\n return e;\n }\n },\n multiRemove: async (keys: Array<string>) => {\n try {\n if (!Array.isArray(keys)) return keys;\n const encryptedKeys = await Promise.all(\n keys.map(\n async (item: string): Promise<string> => await encrypt(item, false)\n )\n );\n return AsyncStorage.multiRemove(encryptedKeys);\n } catch (e) {\n return e;\n }\n },\n clear: async () => {\n try {\n return AsyncStorage.clear();\n } catch (e) {\n return e;\n }\n },\n};\n\nexport function deviceHasSecurityRisk(): Promise<boolean> {\n return SecuritySuite.deviceHasSecurityRisk();\n}\n\nexport default SecuritySuite;\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const isJsonString: (value: string) => boolean;