@hawcx/react-native-sdk 1.0.8 → 1.1.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 +3 -0
- package/HawcxReactNative.podspec +2 -2
- package/README.md +327 -109
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/hawcx/reactnative/HawcxEventDispatcher.kt +4 -0
- package/android/src/main/java/com/hawcx/reactnative/HawcxReactNativeModule.kt +324 -1
- package/android/src/main/java/com/hawcx/reactnative/v6/HawcxV6Bridge.kt +402 -0
- package/ios/Frameworks/HawcxFramework.xcframework/Info.plist +5 -5
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/HawcxFramework +0 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Info.plist +0 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.abi.json +22145 -2
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.private.swiftinterface +628 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.swiftinterface +628 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/HawcxFramework +0 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Info.plist +0 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.abi.json +22145 -2
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +628 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftinterface +628 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.abi.json +22145 -2
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +628 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +628 -0
- package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/_CodeSignature/CodeResources +21 -21
- package/ios/HawcxReactNative.m +56 -0
- package/ios/HawcxReactNative.swift +380 -1
- package/ios/HawcxV6BridgeSupport.swift +468 -0
- package/lib/commonjs/index.js +326 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/v6Normalization.js +325 -0
- package/lib/commonjs/v6Normalization.js.map +1 -0
- package/lib/commonjs/v6State.js +186 -0
- package/lib/commonjs/v6State.js.map +1 -0
- package/lib/commonjs/v6Types.js +2 -0
- package/lib/commonjs/v6Types.js.map +1 -0
- package/lib/commonjs/v6WebLogin.js +101 -0
- package/lib/commonjs/v6WebLogin.js.map +1 -0
- package/lib/module/index.js +287 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/v6Normalization.js +318 -0
- package/lib/module/v6Normalization.js.map +1 -0
- package/lib/module/v6State.js +173 -0
- package/lib/module/v6State.js.map +1 -0
- package/lib/module/v6Types.js +2 -0
- package/lib/module/v6Types.js.map +1 -0
- package/lib/module/v6WebLogin.js +92 -0
- package/lib/module/v6WebLogin.js.map +1 -0
- package/lib/typescript/index.d.ts +83 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/v6Normalization.d.ts +3 -0
- package/lib/typescript/v6Normalization.d.ts.map +1 -0
- package/lib/typescript/v6State.d.ts +13 -0
- package/lib/typescript/v6State.d.ts.map +1 -0
- package/lib/typescript/v6Types.d.ts +157 -0
- package/lib/typescript/v6Types.d.ts.map +1 -0
- package/lib/typescript/v6WebLogin.d.ts +32 -0
- package/lib/typescript/v6WebLogin.d.ts.map +1 -0
- package/package.json +21 -9
- package/src/index.ts +477 -0
- package/src/v6Normalization.ts +356 -0
- package/src/v6State.ts +238 -0
- package/src/v6Types.ts +194 -0
- package/src/v6WebLogin.ts +154 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +0 -2
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/android/gradlew +0 -185
- package/android/gradlew.bat +0 -89
- package/android/libs/hawcx-5.1.4.aar +0 -0
- package/docs/RELEASE.md +0 -129
- package/example/README.md +0 -59
- package/example/android/app/build.gradle +0 -126
- package/example/android/app/debug.keystore +0 -0
- package/example/android/app/proguard-rules.pro +0 -10
- package/example/android/app/src/debug/AndroidManifest.xml +0 -9
- package/example/android/app/src/main/AndroidManifest.xml +0 -27
- package/example/android/app/src/main/java/com/hawcx/example/MainActivity.kt +0 -22
- package/example/android/app/src/main/java/com/hawcx/example/MainApplication.kt +0 -45
- package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -36
- package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/example/android/app/src/main/res/values/strings.xml +0 -3
- package/example/android/app/src/main/res/values/styles.xml +0 -9
- package/example/android/build.gradle +0 -35
- package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/example/android/gradle/wrapper/gradle-wrapper.properties +0 -7
- package/example/android/gradle.properties +0 -41
- package/example/android/gradlew +0 -249
- package/example/android/gradlew.bat +0 -92
- package/example/android/local.properties +0 -2
- package/example/android/settings.gradle +0 -38
- package/example/app.json +0 -4
- package/example/babel.config.js +0 -3
- package/example/e2e/README.md +0 -17
- package/example/e2e/hawcx-login.yaml +0 -14
- package/example/index.js +0 -5
- package/example/ios/.xcode.env +0 -11
- package/example/ios/HawcxExampleApp/AppDelegate.h +0 -6
- package/example/ios/HawcxExampleApp/AppDelegate.mm +0 -31
- package/example/ios/HawcxExampleApp/Images.xcassets/AppIcon.appiconset/Contents.json +0 -53
- package/example/ios/HawcxExampleApp/Images.xcassets/Contents.json +0 -6
- package/example/ios/HawcxExampleApp/Info.plist +0 -55
- package/example/ios/HawcxExampleApp/LaunchScreen.storyboard +0 -47
- package/example/ios/HawcxExampleApp/PrivacyInfo.xcprivacy +0 -37
- package/example/ios/HawcxExampleApp/main.m +0 -10
- package/example/ios/HawcxExampleApp.xcodeproj/project.pbxproj +0 -704
- package/example/ios/HawcxExampleApp.xcodeproj/project.xcworkspace/xcuserdata/agambhullar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/HawcxExampleApp.xcodeproj/xcshareddata/xcschemes/HawcxExampleApp.xcscheme +0 -90
- package/example/ios/HawcxExampleApp.xcodeproj/xcuserdata/agambhullar.xcuserdatad/xcschemes/xcschememanagement.plist +0 -16
- package/example/ios/HawcxExampleApp.xcworkspace/contents.xcworkspacedata +0 -10
- package/example/ios/HawcxExampleAppTests/HawcxExampleAppTests.m +0 -66
- package/example/ios/HawcxExampleAppTests/Info.plist +0 -24
- package/example/ios/Podfile +0 -79
- package/example/ios/Podfile.lock +0 -1290
- package/example/metro.config.js +0 -16
- package/example/package-lock.json +0 -13220
- package/example/package.json +0 -30
- package/example/src/App.tsx +0 -755
- package/example/src/hawcx.config.ts +0 -25
- package/example/tsconfig.json +0 -8
- package/ios/Frameworks/.keep +0 -0
- package/lib/typescript/__tests__/index.test.d.ts +0 -2
- package/lib/typescript/__tests__/index.test.d.ts.map +0 -1
- package/react_mobile_sdk_plan.md +0 -242
- package/src/__tests__/index.test.ts +0 -206
|
@@ -10,47 +10,47 @@
|
|
|
10
10
|
</data>
|
|
11
11
|
<key>Info.plist</key>
|
|
12
12
|
<data>
|
|
13
|
-
|
|
13
|
+
qsU/iUUf7sYfApgoapeWAYoZc0w=
|
|
14
14
|
</data>
|
|
15
15
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.abi.json</key>
|
|
16
16
|
<data>
|
|
17
|
-
|
|
17
|
+
fIlcAUMPiVXPPr8ZWKiNvznubZ8=
|
|
18
18
|
</data>
|
|
19
19
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface</key>
|
|
20
20
|
<data>
|
|
21
|
-
|
|
21
|
+
HrGd8LG9KWHcS6wvsLN3IjwS5aw=
|
|
22
22
|
</data>
|
|
23
23
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftdoc</key>
|
|
24
24
|
<data>
|
|
25
|
-
|
|
25
|
+
UNWHFYoHOI0AVupXJv0UhMxVyFE=
|
|
26
26
|
</data>
|
|
27
27
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftinterface</key>
|
|
28
28
|
<data>
|
|
29
|
-
|
|
29
|
+
HrGd8LG9KWHcS6wvsLN3IjwS5aw=
|
|
30
30
|
</data>
|
|
31
31
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftmodule</key>
|
|
32
32
|
<data>
|
|
33
|
-
|
|
33
|
+
7RDBP4LGMkQCTFTOaCkhLI3QHjE=
|
|
34
34
|
</data>
|
|
35
35
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.abi.json</key>
|
|
36
36
|
<data>
|
|
37
|
-
|
|
37
|
+
fIlcAUMPiVXPPr8ZWKiNvznubZ8=
|
|
38
38
|
</data>
|
|
39
39
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface</key>
|
|
40
40
|
<data>
|
|
41
|
-
|
|
41
|
+
s/7DMFz6MJEkqeO5jmA3QnEF8Lw=
|
|
42
42
|
</data>
|
|
43
43
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftdoc</key>
|
|
44
44
|
<data>
|
|
45
|
-
|
|
45
|
+
+uwAqW5iDU1yrnp4VeROTuM+fD0=
|
|
46
46
|
</data>
|
|
47
47
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftinterface</key>
|
|
48
48
|
<data>
|
|
49
|
-
|
|
49
|
+
s/7DMFz6MJEkqeO5jmA3QnEF8Lw=
|
|
50
50
|
</data>
|
|
51
51
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftmodule</key>
|
|
52
52
|
<data>
|
|
53
|
-
|
|
53
|
+
YpnEISqOeWQoUhn3SWmEiGI7l9E=
|
|
54
54
|
</data>
|
|
55
55
|
<key>Modules/module.modulemap</key>
|
|
56
56
|
<data>
|
|
@@ -70,70 +70,70 @@
|
|
|
70
70
|
<dict>
|
|
71
71
|
<key>hash2</key>
|
|
72
72
|
<data>
|
|
73
|
-
|
|
73
|
+
T0aGlHy2zzkrAtEttBWHStawLbPvKru4Fid3sbr/JgM=
|
|
74
74
|
</data>
|
|
75
75
|
</dict>
|
|
76
76
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface</key>
|
|
77
77
|
<dict>
|
|
78
78
|
<key>hash2</key>
|
|
79
79
|
<data>
|
|
80
|
-
|
|
80
|
+
B+WWDbFAqvYTa5cz2g/N/zSfn24e7fuyClMITwe1wZM=
|
|
81
81
|
</data>
|
|
82
82
|
</dict>
|
|
83
83
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftdoc</key>
|
|
84
84
|
<dict>
|
|
85
85
|
<key>hash2</key>
|
|
86
86
|
<data>
|
|
87
|
-
|
|
87
|
+
Q9sXG9xqQWrkonkEH5NHvXUJa76S8eOYxNxAIbczc4w=
|
|
88
88
|
</data>
|
|
89
89
|
</dict>
|
|
90
90
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftinterface</key>
|
|
91
91
|
<dict>
|
|
92
92
|
<key>hash2</key>
|
|
93
93
|
<data>
|
|
94
|
-
|
|
94
|
+
B+WWDbFAqvYTa5cz2g/N/zSfn24e7fuyClMITwe1wZM=
|
|
95
95
|
</data>
|
|
96
96
|
</dict>
|
|
97
97
|
<key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftmodule</key>
|
|
98
98
|
<dict>
|
|
99
99
|
<key>hash2</key>
|
|
100
100
|
<data>
|
|
101
|
-
|
|
101
|
+
xa1bLdceGnoq0NY/fKEhgCbehMc9jLe+DehMVxaTGQc=
|
|
102
102
|
</data>
|
|
103
103
|
</dict>
|
|
104
104
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.abi.json</key>
|
|
105
105
|
<dict>
|
|
106
106
|
<key>hash2</key>
|
|
107
107
|
<data>
|
|
108
|
-
|
|
108
|
+
T0aGlHy2zzkrAtEttBWHStawLbPvKru4Fid3sbr/JgM=
|
|
109
109
|
</data>
|
|
110
110
|
</dict>
|
|
111
111
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface</key>
|
|
112
112
|
<dict>
|
|
113
113
|
<key>hash2</key>
|
|
114
114
|
<data>
|
|
115
|
-
|
|
115
|
+
KyoIsPFAGWcDbzscnSnN+hrzdDercJXi7lZHFnG0zh8=
|
|
116
116
|
</data>
|
|
117
117
|
</dict>
|
|
118
118
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftdoc</key>
|
|
119
119
|
<dict>
|
|
120
120
|
<key>hash2</key>
|
|
121
121
|
<data>
|
|
122
|
-
|
|
122
|
+
dxCA6FZFdJwXc28PBi22m6zglOpbc0AYzKFXFlv9ttU=
|
|
123
123
|
</data>
|
|
124
124
|
</dict>
|
|
125
125
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftinterface</key>
|
|
126
126
|
<dict>
|
|
127
127
|
<key>hash2</key>
|
|
128
128
|
<data>
|
|
129
|
-
|
|
129
|
+
KyoIsPFAGWcDbzscnSnN+hrzdDercJXi7lZHFnG0zh8=
|
|
130
130
|
</data>
|
|
131
131
|
</dict>
|
|
132
132
|
<key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftmodule</key>
|
|
133
133
|
<dict>
|
|
134
134
|
<key>hash2</key>
|
|
135
135
|
<data>
|
|
136
|
-
|
|
136
|
+
OJDXO1ruoVDbCnC87ak4uE4CtQg10z+5zZjiUptI9rA=
|
|
137
137
|
</data>
|
|
138
138
|
</dict>
|
|
139
139
|
<key>Modules/module.modulemap</key>
|
package/ios/HawcxReactNative.m
CHANGED
|
@@ -16,6 +16,62 @@ RCT_EXTERN_METHOD(submitOtp:(NSString *)otp
|
|
|
16
16
|
resolver:(RCTPromiseResolveBlock)resolve
|
|
17
17
|
rejecter:(RCTPromiseRejectBlock)reject)
|
|
18
18
|
|
|
19
|
+
RCT_EXTERN_METHOD(v6Start:(NSDictionary *)options
|
|
20
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
21
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
22
|
+
|
|
23
|
+
RCT_EXTERN_METHOD(v6SelectMethod:(NSString *)methodId
|
|
24
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
25
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
26
|
+
|
|
27
|
+
RCT_EXTERN_METHOD(v6SubmitCode:(NSString *)code
|
|
28
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
29
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
30
|
+
|
|
31
|
+
RCT_EXTERN_METHOD(v6SubmitTotp:(NSString *)code
|
|
32
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
33
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
34
|
+
|
|
35
|
+
RCT_EXTERN_METHOD(v6SubmitPhone:(NSString *)phone
|
|
36
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
37
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
38
|
+
|
|
39
|
+
RCT_EXTERN_METHOD(v6Resend:(RCTPromiseResolveBlock)resolve
|
|
40
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
41
|
+
|
|
42
|
+
RCT_EXTERN_METHOD(v6Poll:(RCTPromiseResolveBlock)resolve
|
|
43
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
44
|
+
|
|
45
|
+
RCT_EXTERN_METHOD(v6Cancel:(RCTPromiseResolveBlock)resolve
|
|
46
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
47
|
+
|
|
48
|
+
RCT_EXTERN_METHOD(v6Reset:(RCTPromiseResolveBlock)resolve
|
|
49
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
50
|
+
|
|
51
|
+
RCT_EXTERN_METHOD(v6ApproveQr:(NSString *)rawPayload
|
|
52
|
+
identifier:(NSString *)identifier
|
|
53
|
+
rememberDevice:(nonnull NSNumber *)rememberDevice
|
|
54
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
55
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
56
|
+
|
|
57
|
+
RCT_EXTERN_METHOD(v6HandleRedirectUrl:(NSString *)url
|
|
58
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
59
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
60
|
+
|
|
61
|
+
RCT_EXTERN_METHOD(getLastLoggedInUser:(RCTPromiseResolveBlock)resolve
|
|
62
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
63
|
+
|
|
64
|
+
RCT_EXTERN_METHOD(clearSessionTokens:(NSString *)userId
|
|
65
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
66
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
67
|
+
|
|
68
|
+
RCT_EXTERN_METHOD(clearUserKeychainData:(NSString *)userId
|
|
69
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
70
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
71
|
+
|
|
72
|
+
RCT_EXTERN_METHOD(clearLastLoggedInUser:(RCTPromiseResolveBlock)resolve
|
|
73
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
74
|
+
|
|
19
75
|
RCT_EXTERN_METHOD(getDeviceDetails:(RCTPromiseResolveBlock)resolve
|
|
20
76
|
rejecter:(RCTPromiseRejectBlock)reject)
|
|
21
77
|
|
|
@@ -9,7 +9,9 @@ class HawcxReactNative: RCTEventEmitter {
|
|
|
9
9
|
private let authEventName = "hawcx.auth.event"
|
|
10
10
|
private let sessionEventName = "hawcx.session.event"
|
|
11
11
|
private let pushEventName = "hawcx.push.event"
|
|
12
|
+
private let v6FlowEventName = HAWCX_V6_FLOW_EVENT_NAME
|
|
12
13
|
private var hawcxSDK: HawcxSDK?
|
|
14
|
+
private var hawcxV6Bridge: HawcxV6Bridge?
|
|
13
15
|
private var authCallbackProxy: AuthCallbackProxy?
|
|
14
16
|
private var sessionCallbackProxy: SessionCallbackProxy?
|
|
15
17
|
private var pushDelegateProxy: PushDelegateProxy?
|
|
@@ -21,7 +23,12 @@ class HawcxReactNative: RCTEventEmitter {
|
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
override func supportedEvents() -> [String]! {
|
|
24
|
-
[authEventName, sessionEventName, pushEventName]
|
|
26
|
+
[authEventName, sessionEventName, pushEventName, v6FlowEventName]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override func invalidate() {
|
|
30
|
+
tearDownNativeLanes(resetV6Flow: true)
|
|
31
|
+
super.invalidate()
|
|
25
32
|
}
|
|
26
33
|
|
|
27
34
|
@objc
|
|
@@ -49,12 +56,27 @@ class HawcxReactNative: RCTEventEmitter {
|
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
DispatchQueue.main.async {
|
|
59
|
+
self.tearDownNativeLanes(resetV6Flow: true)
|
|
52
60
|
self.hawcxSDK = HawcxSDK(projectApiKey: projectApiKey, baseURL: baseUrl, oauthConfig: oauthConfig)
|
|
53
61
|
self.authCallbackProxy = AuthCallbackProxy(emitter: self)
|
|
54
62
|
self.sessionCallbackProxy = SessionCallbackProxy(emitter: self)
|
|
55
63
|
let pushDelegate = PushDelegateProxy(emitter: self)
|
|
56
64
|
self.pushDelegateProxy = pushDelegate
|
|
57
65
|
self.hawcxSDK?.pushAuthDelegate = pushDelegate
|
|
66
|
+
|
|
67
|
+
guard let v6BaseURL = URL(string: baseUrl) else {
|
|
68
|
+
self.tearDownNativeLanes(resetV6Flow: true)
|
|
69
|
+
reject("hawcx.config", "baseUrl must be a valid URL", nil)
|
|
70
|
+
return
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
let v6Bridge = HawcxV6Bridge(emitter: self)
|
|
74
|
+
v6Bridge.configure(
|
|
75
|
+
configId: projectApiKey,
|
|
76
|
+
baseURL: v6BaseURL,
|
|
77
|
+
options: HawcxV6InitializeOptions.from(config: config)
|
|
78
|
+
)
|
|
79
|
+
self.hawcxV6Bridge = v6Bridge
|
|
58
80
|
resolve(nil)
|
|
59
81
|
}
|
|
60
82
|
}
|
|
@@ -76,6 +98,28 @@ class HawcxReactNative: RCTEventEmitter {
|
|
|
76
98
|
return nil
|
|
77
99
|
}
|
|
78
100
|
|
|
101
|
+
private func rejectV6Error(_ error: Error, reject: @escaping RCTPromiseRejectBlock) {
|
|
102
|
+
let code: String
|
|
103
|
+
if case HawcxV6BridgeError.notInitialized = error {
|
|
104
|
+
code = "hawcx.sdk"
|
|
105
|
+
} else {
|
|
106
|
+
code = "hawcx.input"
|
|
107
|
+
}
|
|
108
|
+
reject(code, error.localizedDescription, error)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private func qrApprovalNSError(_ error: HawcxV1QrApprovalError) -> NSError {
|
|
112
|
+
var userInfo: [String: Any] = [
|
|
113
|
+
NSLocalizedDescriptionKey: error.message,
|
|
114
|
+
"retryable": error.retryable,
|
|
115
|
+
"shouldClearRecord": error.shouldClearRecord
|
|
116
|
+
]
|
|
117
|
+
if let retryAfterSeconds = error.retryAfterSeconds {
|
|
118
|
+
userInfo["retryAfterSeconds"] = retryAfterSeconds
|
|
119
|
+
}
|
|
120
|
+
return NSError(domain: "com.hawcx.reactnative.qr", code: 0, userInfo: userInfo)
|
|
121
|
+
}
|
|
122
|
+
|
|
79
123
|
@objc
|
|
80
124
|
func authenticate(_ userId: NSString,
|
|
81
125
|
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
@@ -121,6 +165,256 @@ class HawcxReactNative: RCTEventEmitter {
|
|
|
121
165
|
}
|
|
122
166
|
}
|
|
123
167
|
|
|
168
|
+
@objc
|
|
169
|
+
func v6Start(_ options: NSDictionary,
|
|
170
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
171
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
172
|
+
DispatchQueue.main.async {
|
|
173
|
+
do {
|
|
174
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
175
|
+
throw HawcxV6BridgeError.notInitialized
|
|
176
|
+
}
|
|
177
|
+
let v6Options = try HawcxV6StartOptions.from(options: options)
|
|
178
|
+
try bridge.start(options: v6Options)
|
|
179
|
+
resolve(nil)
|
|
180
|
+
} catch {
|
|
181
|
+
self.rejectV6Error(error, reject: reject)
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
@objc
|
|
187
|
+
func v6SelectMethod(_ methodId: NSString,
|
|
188
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
189
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
190
|
+
let trimmed = methodId.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
191
|
+
guard !trimmed.isEmpty else {
|
|
192
|
+
reject("hawcx.input", "methodId is required", nil)
|
|
193
|
+
return
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
DispatchQueue.main.async {
|
|
197
|
+
do {
|
|
198
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
199
|
+
throw HawcxV6BridgeError.notInitialized
|
|
200
|
+
}
|
|
201
|
+
try bridge.selectMethod(trimmed)
|
|
202
|
+
resolve(nil)
|
|
203
|
+
} catch {
|
|
204
|
+
self.rejectV6Error(error, reject: reject)
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@objc
|
|
210
|
+
func v6SubmitCode(_ code: NSString,
|
|
211
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
212
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
213
|
+
let trimmed = code.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
214
|
+
guard !trimmed.isEmpty else {
|
|
215
|
+
reject("hawcx.input", "code is required", nil)
|
|
216
|
+
return
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
DispatchQueue.main.async {
|
|
220
|
+
do {
|
|
221
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
222
|
+
throw HawcxV6BridgeError.notInitialized
|
|
223
|
+
}
|
|
224
|
+
try bridge.submitCode(trimmed)
|
|
225
|
+
resolve(nil)
|
|
226
|
+
} catch {
|
|
227
|
+
self.rejectV6Error(error, reject: reject)
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
@objc
|
|
233
|
+
func v6SubmitTotp(_ code: NSString,
|
|
234
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
235
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
236
|
+
let trimmed = code.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
237
|
+
guard !trimmed.isEmpty else {
|
|
238
|
+
reject("hawcx.input", "code is required", nil)
|
|
239
|
+
return
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
DispatchQueue.main.async {
|
|
243
|
+
do {
|
|
244
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
245
|
+
throw HawcxV6BridgeError.notInitialized
|
|
246
|
+
}
|
|
247
|
+
try bridge.submitTotp(trimmed)
|
|
248
|
+
resolve(nil)
|
|
249
|
+
} catch {
|
|
250
|
+
self.rejectV6Error(error, reject: reject)
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
@objc
|
|
256
|
+
func v6SubmitPhone(_ phone: NSString,
|
|
257
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
258
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
259
|
+
let trimmed = phone.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
260
|
+
guard !trimmed.isEmpty else {
|
|
261
|
+
reject("hawcx.input", "phone is required", nil)
|
|
262
|
+
return
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
DispatchQueue.main.async {
|
|
266
|
+
do {
|
|
267
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
268
|
+
throw HawcxV6BridgeError.notInitialized
|
|
269
|
+
}
|
|
270
|
+
try bridge.submitPhone(trimmed)
|
|
271
|
+
resolve(nil)
|
|
272
|
+
} catch {
|
|
273
|
+
self.rejectV6Error(error, reject: reject)
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
@objc
|
|
279
|
+
func v6Resend(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
280
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
281
|
+
DispatchQueue.main.async {
|
|
282
|
+
do {
|
|
283
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
284
|
+
throw HawcxV6BridgeError.notInitialized
|
|
285
|
+
}
|
|
286
|
+
let dispatched = try bridge.resend()
|
|
287
|
+
resolve(dispatched)
|
|
288
|
+
} catch {
|
|
289
|
+
self.rejectV6Error(error, reject: reject)
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
@objc
|
|
295
|
+
func v6Poll(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
296
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
297
|
+
DispatchQueue.main.async {
|
|
298
|
+
do {
|
|
299
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
300
|
+
throw HawcxV6BridgeError.notInitialized
|
|
301
|
+
}
|
|
302
|
+
try bridge.poll()
|
|
303
|
+
resolve(nil)
|
|
304
|
+
} catch {
|
|
305
|
+
self.rejectV6Error(error, reject: reject)
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
@objc
|
|
311
|
+
func v6Cancel(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
312
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
313
|
+
DispatchQueue.main.async {
|
|
314
|
+
do {
|
|
315
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
316
|
+
throw HawcxV6BridgeError.notInitialized
|
|
317
|
+
}
|
|
318
|
+
try bridge.cancel()
|
|
319
|
+
resolve(nil)
|
|
320
|
+
} catch {
|
|
321
|
+
self.rejectV6Error(error, reject: reject)
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
@objc
|
|
327
|
+
func v6Reset(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
328
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
329
|
+
DispatchQueue.main.async {
|
|
330
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
331
|
+
self.rejectV6Error(HawcxV6BridgeError.notInitialized, reject: reject)
|
|
332
|
+
return
|
|
333
|
+
}
|
|
334
|
+
bridge.sdk?.reset()
|
|
335
|
+
resolve(nil)
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
@objc
|
|
340
|
+
func v6HandleRedirectUrl(_ url: NSString,
|
|
341
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
342
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
343
|
+
let trimmed = url.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
344
|
+
guard !trimmed.isEmpty else {
|
|
345
|
+
reject("hawcx.input", "url is required", nil)
|
|
346
|
+
return
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
DispatchQueue.main.async {
|
|
350
|
+
do {
|
|
351
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
352
|
+
throw HawcxV6BridgeError.notInitialized
|
|
353
|
+
}
|
|
354
|
+
try bridge.handleRedirect(urlString: trimmed)
|
|
355
|
+
resolve(nil)
|
|
356
|
+
} catch {
|
|
357
|
+
self.rejectV6Error(error, reject: reject)
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
@objc
|
|
363
|
+
func v6ApproveQr(_ rawPayload: NSString,
|
|
364
|
+
identifier: NSString,
|
|
365
|
+
rememberDevice: NSNumber,
|
|
366
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
367
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
368
|
+
let trimmedPayload = rawPayload.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
369
|
+
guard !trimmedPayload.isEmpty else {
|
|
370
|
+
reject("hawcx.input", "rawPayload is required", nil)
|
|
371
|
+
return
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
let trimmedIdentifier = identifier.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
375
|
+
guard !trimmedIdentifier.isEmpty else {
|
|
376
|
+
reject("hawcx.input", "identifier is required", nil)
|
|
377
|
+
return
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
DispatchQueue.main.async {
|
|
381
|
+
do {
|
|
382
|
+
guard let bridge = self.hawcxV6Bridge else {
|
|
383
|
+
throw HawcxV6BridgeError.notInitialized
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
try bridge.approveQr(
|
|
387
|
+
rawPayload: trimmedPayload,
|
|
388
|
+
identifier: trimmedIdentifier,
|
|
389
|
+
rememberDevice: rememberDevice.boolValue
|
|
390
|
+
) { result in
|
|
391
|
+
DispatchQueue.main.async {
|
|
392
|
+
switch result {
|
|
393
|
+
case .success(.approved(let payloadType)):
|
|
394
|
+
resolve([
|
|
395
|
+
"outcome": "approved",
|
|
396
|
+
"payloadType": payloadType
|
|
397
|
+
])
|
|
398
|
+
case .success(.bound(let payloadType, let userId)):
|
|
399
|
+
var payload: [String: Any] = [
|
|
400
|
+
"outcome": "bound",
|
|
401
|
+
"payloadType": payloadType
|
|
402
|
+
]
|
|
403
|
+
if let userId, !userId.isEmpty {
|
|
404
|
+
payload["userId"] = userId
|
|
405
|
+
}
|
|
406
|
+
resolve(payload)
|
|
407
|
+
case .failure(let error):
|
|
408
|
+
reject(error.code, error.message, self.qrApprovalNSError(error))
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
} catch {
|
|
413
|
+
self.rejectV6Error(error, reject: reject)
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
124
418
|
@objc
|
|
125
419
|
func getDeviceDetails(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
126
420
|
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
@@ -226,6 +520,77 @@ class HawcxReactNative: RCTEventEmitter {
|
|
|
226
520
|
}
|
|
227
521
|
}
|
|
228
522
|
|
|
523
|
+
@objc
|
|
524
|
+
func getLastLoggedInUser(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
525
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
526
|
+
guard let sdk = hawcxSDK else {
|
|
527
|
+
reject("hawcx.sdk", "initialize must be called before getLastLoggedInUser", nil)
|
|
528
|
+
return
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
DispatchQueue.main.async {
|
|
532
|
+
resolve(sdk.getLastLoggedInUser())
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
@objc
|
|
537
|
+
func clearSessionTokens(_ userId: NSString,
|
|
538
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
539
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
540
|
+
guard let sdk = hawcxSDK else {
|
|
541
|
+
reject("hawcx.sdk", "initialize must be called before clearSessionTokens", nil)
|
|
542
|
+
return
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
let trimmedUser = userId.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
546
|
+
guard !trimmedUser.isEmpty else {
|
|
547
|
+
reject("hawcx.input", "userId cannot be empty", nil)
|
|
548
|
+
return
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
DispatchQueue.main.async {
|
|
552
|
+
self.hawcxV6Bridge?.sdk?.reset()
|
|
553
|
+
sdk.clearSessionTokens(forUser: trimmedUser)
|
|
554
|
+
resolve(nil)
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
@objc
|
|
559
|
+
func clearUserKeychainData(_ userId: NSString,
|
|
560
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
561
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
562
|
+
guard let sdk = hawcxSDK else {
|
|
563
|
+
reject("hawcx.sdk", "initialize must be called before clearUserKeychainData", nil)
|
|
564
|
+
return
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
let trimmedUser = userId.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
568
|
+
guard !trimmedUser.isEmpty else {
|
|
569
|
+
reject("hawcx.input", "userId cannot be empty", nil)
|
|
570
|
+
return
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
DispatchQueue.main.async {
|
|
574
|
+
self.hawcxV6Bridge?.sdk?.reset()
|
|
575
|
+
sdk.clearUserKeychainData(forUser: trimmedUser)
|
|
576
|
+
resolve(nil)
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
@objc
|
|
581
|
+
func clearLastLoggedInUser(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
582
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
583
|
+
guard let sdk = hawcxSDK else {
|
|
584
|
+
reject("hawcx.sdk", "initialize must be called before clearLastLoggedInUser", nil)
|
|
585
|
+
return
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
DispatchQueue.main.async {
|
|
589
|
+
sdk.clearLastLoggedInUser()
|
|
590
|
+
resolve(nil)
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
229
594
|
fileprivate func emitAuthEvent(_ body: [String: Any]) {
|
|
230
595
|
sendEvent(withName: authEventName, body: body)
|
|
231
596
|
}
|
|
@@ -238,6 +603,20 @@ class HawcxReactNative: RCTEventEmitter {
|
|
|
238
603
|
sendEvent(withName: pushEventName, body: body)
|
|
239
604
|
}
|
|
240
605
|
|
|
606
|
+
func emitV6FlowEvent(_ body: [String: Any]) {
|
|
607
|
+
sendEvent(withName: v6FlowEventName, body: body)
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
private func tearDownNativeLanes(resetV6Flow: Bool) {
|
|
611
|
+
hawcxSDK?.pushAuthDelegate = nil
|
|
612
|
+
pushDelegateProxy = nil
|
|
613
|
+
sessionCallbackProxy = nil
|
|
614
|
+
authCallbackProxy = nil
|
|
615
|
+
hawcxV6Bridge?.dispose(resetFlow: resetV6Flow)
|
|
616
|
+
hawcxV6Bridge = nil
|
|
617
|
+
hawcxSDK = nil
|
|
618
|
+
}
|
|
619
|
+
|
|
241
620
|
private func makeOAuthConfig(from dict: [String: Any]) throws -> HawcxOAuthConfig {
|
|
242
621
|
guard
|
|
243
622
|
let endpointString = dict["tokenEndpoint"] as? String,
|