@hawcx/react-native-sdk 1.0.8 → 1.1.1

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 (137) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/HawcxReactNative.podspec +2 -2
  3. package/README.md +325 -109
  4. package/android/build.gradle +2 -2
  5. package/android/src/main/java/com/hawcx/reactnative/HawcxEventDispatcher.kt +4 -0
  6. package/android/src/main/java/com/hawcx/reactnative/HawcxReactNativeModule.kt +324 -1
  7. package/android/src/main/java/com/hawcx/reactnative/v6/HawcxV6Bridge.kt +402 -0
  8. package/ios/Frameworks/HawcxFramework.xcframework/Info.plist +5 -5
  9. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/HawcxFramework +0 -0
  10. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Info.plist +0 -0
  11. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.abi.json +22145 -2
  12. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.private.swiftinterface +628 -0
  13. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  14. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.swiftinterface +628 -0
  15. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios.swiftmodule +0 -0
  16. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/HawcxFramework +0 -0
  17. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Info.plist +0 -0
  18. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.abi.json +22145 -2
  19. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +628 -0
  20. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  21. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftinterface +628 -0
  22. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftmodule +0 -0
  23. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.abi.json +22145 -2
  24. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +628 -0
  25. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  26. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +628 -0
  27. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftmodule +0 -0
  28. package/ios/Frameworks/HawcxFramework.xcframework/ios-arm64_x86_64-simulator/HawcxFramework.framework/_CodeSignature/CodeResources +21 -21
  29. package/ios/HawcxReactNative.m +56 -0
  30. package/ios/HawcxReactNative.swift +380 -1
  31. package/ios/HawcxV6BridgeSupport.swift +468 -0
  32. package/lib/commonjs/index.js +326 -3
  33. package/lib/commonjs/index.js.map +1 -1
  34. package/lib/commonjs/v6Normalization.js +325 -0
  35. package/lib/commonjs/v6Normalization.js.map +1 -0
  36. package/lib/commonjs/v6State.js +186 -0
  37. package/lib/commonjs/v6State.js.map +1 -0
  38. package/lib/commonjs/v6Types.js +2 -0
  39. package/lib/commonjs/v6Types.js.map +1 -0
  40. package/lib/commonjs/v6WebLogin.js +101 -0
  41. package/lib/commonjs/v6WebLogin.js.map +1 -0
  42. package/lib/module/index.js +287 -1
  43. package/lib/module/index.js.map +1 -1
  44. package/lib/module/v6Normalization.js +318 -0
  45. package/lib/module/v6Normalization.js.map +1 -0
  46. package/lib/module/v6State.js +173 -0
  47. package/lib/module/v6State.js.map +1 -0
  48. package/lib/module/v6Types.js +2 -0
  49. package/lib/module/v6Types.js.map +1 -0
  50. package/lib/module/v6WebLogin.js +92 -0
  51. package/lib/module/v6WebLogin.js.map +1 -0
  52. package/lib/typescript/index.d.ts +83 -0
  53. package/lib/typescript/index.d.ts.map +1 -1
  54. package/lib/typescript/v6Normalization.d.ts +3 -0
  55. package/lib/typescript/v6Normalization.d.ts.map +1 -0
  56. package/lib/typescript/v6State.d.ts +13 -0
  57. package/lib/typescript/v6State.d.ts.map +1 -0
  58. package/lib/typescript/v6Types.d.ts +157 -0
  59. package/lib/typescript/v6Types.d.ts.map +1 -0
  60. package/lib/typescript/v6WebLogin.d.ts +32 -0
  61. package/lib/typescript/v6WebLogin.d.ts.map +1 -0
  62. package/package.json +21 -9
  63. package/src/index.ts +477 -0
  64. package/src/v6Normalization.ts +356 -0
  65. package/src/v6State.ts +238 -0
  66. package/src/v6Types.ts +194 -0
  67. package/src/v6WebLogin.ts +154 -0
  68. package/android/.settings/org.eclipse.buildship.core.prefs +0 -2
  69. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  70. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  71. package/android/gradlew +0 -185
  72. package/android/gradlew.bat +0 -89
  73. package/android/libs/hawcx-5.1.4.aar +0 -0
  74. package/docs/RELEASE.md +0 -129
  75. package/example/README.md +0 -59
  76. package/example/android/app/build.gradle +0 -126
  77. package/example/android/app/debug.keystore +0 -0
  78. package/example/android/app/proguard-rules.pro +0 -10
  79. package/example/android/app/src/debug/AndroidManifest.xml +0 -9
  80. package/example/android/app/src/main/AndroidManifest.xml +0 -27
  81. package/example/android/app/src/main/java/com/hawcx/example/MainActivity.kt +0 -22
  82. package/example/android/app/src/main/java/com/hawcx/example/MainApplication.kt +0 -45
  83. package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -36
  84. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  85. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  86. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  87. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  88. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  89. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  90. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  91. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  92. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  93. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  94. package/example/android/app/src/main/res/values/strings.xml +0 -3
  95. package/example/android/app/src/main/res/values/styles.xml +0 -9
  96. package/example/android/build.gradle +0 -35
  97. package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  98. package/example/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  99. package/example/android/gradle.properties +0 -41
  100. package/example/android/gradlew +0 -249
  101. package/example/android/gradlew.bat +0 -92
  102. package/example/android/local.properties +0 -2
  103. package/example/android/settings.gradle +0 -38
  104. package/example/app.json +0 -4
  105. package/example/babel.config.js +0 -3
  106. package/example/e2e/README.md +0 -17
  107. package/example/e2e/hawcx-login.yaml +0 -14
  108. package/example/index.js +0 -5
  109. package/example/ios/.xcode.env +0 -11
  110. package/example/ios/HawcxExampleApp/AppDelegate.h +0 -6
  111. package/example/ios/HawcxExampleApp/AppDelegate.mm +0 -31
  112. package/example/ios/HawcxExampleApp/Images.xcassets/AppIcon.appiconset/Contents.json +0 -53
  113. package/example/ios/HawcxExampleApp/Images.xcassets/Contents.json +0 -6
  114. package/example/ios/HawcxExampleApp/Info.plist +0 -55
  115. package/example/ios/HawcxExampleApp/LaunchScreen.storyboard +0 -47
  116. package/example/ios/HawcxExampleApp/PrivacyInfo.xcprivacy +0 -37
  117. package/example/ios/HawcxExampleApp/main.m +0 -10
  118. package/example/ios/HawcxExampleApp.xcodeproj/project.pbxproj +0 -704
  119. package/example/ios/HawcxExampleApp.xcodeproj/project.xcworkspace/xcuserdata/agambhullar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  120. package/example/ios/HawcxExampleApp.xcodeproj/xcshareddata/xcschemes/HawcxExampleApp.xcscheme +0 -90
  121. package/example/ios/HawcxExampleApp.xcodeproj/xcuserdata/agambhullar.xcuserdatad/xcschemes/xcschememanagement.plist +0 -16
  122. package/example/ios/HawcxExampleApp.xcworkspace/contents.xcworkspacedata +0 -10
  123. package/example/ios/HawcxExampleAppTests/HawcxExampleAppTests.m +0 -66
  124. package/example/ios/HawcxExampleAppTests/Info.plist +0 -24
  125. package/example/ios/Podfile +0 -79
  126. package/example/ios/Podfile.lock +0 -1290
  127. package/example/metro.config.js +0 -16
  128. package/example/package-lock.json +0 -13220
  129. package/example/package.json +0 -30
  130. package/example/src/App.tsx +0 -755
  131. package/example/src/hawcx.config.ts +0 -25
  132. package/example/tsconfig.json +0 -8
  133. package/ios/Frameworks/.keep +0 -0
  134. package/lib/typescript/__tests__/index.test.d.ts +0 -2
  135. package/lib/typescript/__tests__/index.test.d.ts.map +0 -1
  136. package/react_mobile_sdk_plan.md +0 -242
  137. 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
- g1//TaKOyxUHqz6i0YUtEuqDlfU=
13
+ DtGZDypKI9W4rGyyoBq9vKeLZMU=
14
14
  </data>
15
15
  <key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.abi.json</key>
16
16
  <data>
17
- EdMOEv8eqEcj9hWsF0nXj3y5a1w=
17
+ fIlcAUMPiVXPPr8ZWKiNvznubZ8=
18
18
  </data>
19
19
  <key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface</key>
20
20
  <data>
21
- Bm3T4LX8N45TYNe1SemcgwO7HaU=
21
+ HrGd8LG9KWHcS6wvsLN3IjwS5aw=
22
22
  </data>
23
23
  <key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftdoc</key>
24
24
  <data>
25
- mp2rdbrnklStgHCr9ntTR1kUkpg=
25
+ UNWHFYoHOI0AVupXJv0UhMxVyFE=
26
26
  </data>
27
27
  <key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftinterface</key>
28
28
  <data>
29
- Bm3T4LX8N45TYNe1SemcgwO7HaU=
29
+ HrGd8LG9KWHcS6wvsLN3IjwS5aw=
30
30
  </data>
31
31
  <key>Modules/HawcxFramework.swiftmodule/arm64-apple-ios-simulator.swiftmodule</key>
32
32
  <data>
33
- t3Dp5ylLkkjguIlbmlyKKXGfaUc=
33
+ 7RDBP4LGMkQCTFTOaCkhLI3QHjE=
34
34
  </data>
35
35
  <key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.abi.json</key>
36
36
  <data>
37
- EdMOEv8eqEcj9hWsF0nXj3y5a1w=
37
+ fIlcAUMPiVXPPr8ZWKiNvznubZ8=
38
38
  </data>
39
39
  <key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface</key>
40
40
  <data>
41
- KlvKxbKZ8QfYXxTviTGMl/h0Bxs=
41
+ s/7DMFz6MJEkqeO5jmA3QnEF8Lw=
42
42
  </data>
43
43
  <key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftdoc</key>
44
44
  <data>
45
- ylbSQdYR6Be3deD+8MLI/QCJUlQ=
45
+ +uwAqW5iDU1yrnp4VeROTuM+fD0=
46
46
  </data>
47
47
  <key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftinterface</key>
48
48
  <data>
49
- KlvKxbKZ8QfYXxTviTGMl/h0Bxs=
49
+ s/7DMFz6MJEkqeO5jmA3QnEF8Lw=
50
50
  </data>
51
51
  <key>Modules/HawcxFramework.swiftmodule/x86_64-apple-ios-simulator.swiftmodule</key>
52
52
  <data>
53
- iHRKUnXkV2F/cMn7tOFUYMCBg1o=
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
- 6rSkV3c50B3C+zFRqTOWOX5WUtVUPvDpDH40gx4ZKz0=
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
- zTBtozs6oNA0W7IXJmApJ1DZwp3M2IHwXXHULOte23U=
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
- ztoturzDnGo0opf0JI8qm8t6nY4S/eAV0DE7TYWzis4=
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
- zTBtozs6oNA0W7IXJmApJ1DZwp3M2IHwXXHULOte23U=
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
- gRZxF26UbpBfqWSo0KL4W5E6hVfl+UEnrYYd+T2vlDw=
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
- 6rSkV3c50B3C+zFRqTOWOX5WUtVUPvDpDH40gx4ZKz0=
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
- vFSpXvNgNv2Zs8pay56iH+dL6W5KoXYekAaAcni6MiA=
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
- HkPEPcDKiHNA9RcWsGV2FQ0i4ltz9MuatjF0guDFySo=
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
- vFSpXvNgNv2Zs8pay56iH+dL6W5KoXYekAaAcni6MiA=
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
- CGtJHlOOo7IycrcBQk5d0Owq69q93BiBe95oXK1iY2c=
136
+ OJDXO1ruoVDbCnC87ak4uE4CtQg10z+5zZjiUptI9rA=
137
137
  </data>
138
138
  </dict>
139
139
  <key>Modules/module.modulemap</key>
@@ -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,