react-native-hyperswitch-dev-sdk 0.4.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 (262) hide show
  1. package/HyperswitchSdkReactNative.podspec +42 -0
  2. package/LICENSE +201 -0
  3. package/android/build.gradle +161 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/hyperswitch_autolinking.gradle +378 -0
  6. package/android/proguard-rules.pro +72 -0
  7. package/android/src/legacy/java/com/facebook/react/viewmanagers/GooglePayButtonManagerDelegate.java +41 -0
  8. package/android/src/legacy/java/com/facebook/react/viewmanagers/GooglePayButtonManagerInterface.java +20 -0
  9. package/android/src/legacy/java/com/facebook/react/viewmanagers/NativePaymentWidgetManagerDelegate.java +38 -0
  10. package/android/src/legacy/java/com/facebook/react/viewmanagers/NativePaymentWidgetManagerInterface.java +21 -0
  11. package/android/src/legacy/java/com/hyperswitchsdkreactnative/NativeHyperswitchSdkNativeSpec.java +106 -0
  12. package/android/src/legacy/java/com/hyperswitchsdkreactnative/NativeHyperswitchSdkReactNativeSpec.java +77 -0
  13. package/android/src/legacy/java/com/hyperswitchsdkreactnative/NativePaymentWidgetNativeSpec.java +36 -0
  14. package/android/src/main/AndroidManifest.xml +15 -0
  15. package/android/src/main/assets/hyperswitch.bundle +1535 -0
  16. package/android/src/main/java/com/hyperswitchsdkreactnative/HyperswitchSdkReactNativePackage.kt +47 -0
  17. package/android/src/main/java/com/hyperswitchsdkreactnative/modules/NativePaymentWidgetModule.kt +173 -0
  18. package/android/src/main/java/com/hyperswitchsdkreactnative/modules/ReactNativeHyperswitchModule.kt +396 -0
  19. package/android/src/main/java/com/hyperswitchsdkreactnative/views/PaymentElementViewManager.kt +99 -0
  20. package/android/src/main/java/io/hyperswitch/HyperswitchReactPackageProvider.kt +19 -0
  21. package/android/src/main/java/io/hyperswitch/PaymentEventType.kt +18 -0
  22. package/android/src/main/java/io/hyperswitch/model/ElementConfiguration.kt +58 -0
  23. package/android/src/main/java/io/hyperswitch/paymentsession/ExitHeadlessCallBackManager.kt +47 -0
  24. package/android/src/main/java/io/hyperswitch/paymentsession/GetPaymentSessionCallBackManager.kt +23 -0
  25. package/android/src/main/java/io/hyperswitch/paymentsession/PaymentMethod.kt +167 -0
  26. package/android/src/main/java/io/hyperswitch/paymentsession/PaymentSessionHandler.kt +68 -0
  27. package/android/src/main/java/io/hyperswitch/paymentsession/PaymentSessionHandlerImpl.kt +179 -0
  28. package/android/src/main/java/io/hyperswitch/paymentsession/PaymentSessionReactLauncher.kt +226 -0
  29. package/android/src/main/java/io/hyperswitch/paymentsession/PaymentSheetCallbackManager.kt +40 -0
  30. package/android/src/main/java/io/hyperswitch/paymentsheet/PaymentResult.kt +63 -0
  31. package/android/src/main/java/io/hyperswitch/react/GooglePayButtonManager.kt +54 -0
  32. package/android/src/main/java/io/hyperswitch/react/HyperActivity.kt +73 -0
  33. package/android/src/main/java/io/hyperswitch/react/HyperEventEmitter.kt +144 -0
  34. package/android/src/main/java/io/hyperswitch/react/HyperFragment.kt +429 -0
  35. package/android/src/main/java/io/hyperswitch/react/HyperFragmentManager.kt +155 -0
  36. package/android/src/main/java/io/hyperswitch/react/HyperHeadlessModule.kt +43 -0
  37. package/android/src/main/java/io/hyperswitch/react/HyperModule.kt +405 -0
  38. package/android/src/main/java/io/hyperswitch/react/HyperPackage.kt +16 -0
  39. package/android/src/main/java/io/hyperswitch/react/ReactNativeController.kt +251 -0
  40. package/android/src/main/java/io/hyperswitch/utils/ConversionUtils.kt +256 -0
  41. package/android/src/main/java/io/hyperswitch/utils/StandardResult.kt +45 -0
  42. package/android/src/main/java/io/hyperswitch/view/GooglePayButtonView.kt +59 -0
  43. package/android/src/main/java/io/hyperswitch/view/PaymentWidgetView.kt +405 -0
  44. package/android/src/main/res/values/attrs.xml +6 -0
  45. package/android/src/main/res/values/strings.xml +5 -0
  46. package/android/src/main/res/values/theme.xml +16 -0
  47. package/ios/Modules/ReactNative/HyperswitchModule.swift +470 -0
  48. package/ios/Modules/ReactNative/HyperswitchSdkReactNative.h +5 -0
  49. package/ios/Modules/ReactNative/HyperswitchSdkReactNative.mm +121 -0
  50. package/ios/Modules/ReactNative/NativeHyperswitchModule.h +18 -0
  51. package/ios/Modules/ReactNative/NativeHyperswitchModule.mm +165 -0
  52. package/ios/Modules/ReactNative/NativeHyperswitchModuleImpl.swift +290 -0
  53. package/ios/Modules/ReactNative/NativePaymentElementModule.mm +129 -0
  54. package/ios/Views/Fabric/ApplePayView.h +14 -0
  55. package/ios/Views/Fabric/ApplePayView.mm +89 -0
  56. package/ios/Views/Fabric/NativePaymentElementView.h +21 -0
  57. package/ios/Views/Fabric/NativePaymentElementView.mm +200 -0
  58. package/ios/Views/Fabric/NativePaymentWidgetViewRegistry.h +37 -0
  59. package/ios/Views/Fabric/NativePaymentWidgetViewRegistry.m +45 -0
  60. package/ios/Views/Native/NativePaymentWidget.m +26 -0
  61. package/ios/Views/Native/NativePaymentWidget.swift +420 -0
  62. package/ios/hyperswitchSDK/Core/ApplePay/ApplePayHandler.swift +261 -0
  63. package/ios/hyperswitchSDK/Core/ApplePay/ApplePayViewManager.m +18 -0
  64. package/ios/hyperswitchSDK/Core/ApplePay/ApplePayViewManager.swift +126 -0
  65. package/ios/hyperswitchSDK/Core/DeviceDataCollection/HeadlessWebView.swift +144 -0
  66. package/ios/hyperswitchSDK/Core/HyperCVCWidget/CVCWidget.swift +136 -0
  67. package/ios/hyperswitchSDK/Core/HyperExpressCheckout/ExpressCheckoutLauncher.swift +116 -0
  68. package/ios/hyperswitchSDK/Core/HyperExpressCheckout/ExpressCheckoutWidget.swift +42 -0
  69. package/ios/hyperswitchSDK/Core/HyperPaymentCardTextField/PaymentCardTextField+SwiftUI.swift +67 -0
  70. package/ios/hyperswitchSDK/Core/HyperPaymentCardTextField/PaymentCardTextField.swift +44 -0
  71. package/ios/hyperswitchSDK/Core/HyperPaymentCardTextField/PaymentHandler.swift +59 -0
  72. package/ios/hyperswitchSDK/Core/HyperPaymentCardTextField/PaymentIntentParams.swift +31 -0
  73. package/ios/hyperswitchSDK/Core/HyperPaymentCardTextField/PaymentMethodParams.swift +25 -0
  74. package/ios/hyperswitchSDK/Core/HyperPaymentMethodManagement/PaymentManagementConfiguration.swift +213 -0
  75. package/ios/hyperswitchSDK/Core/HyperPaymentMethodManagement/PaymentMethodManagementWidget.swift +92 -0
  76. package/ios/hyperswitchSDK/Core/HyperPaymentSheet/PaymentSheet+Events.swift +36 -0
  77. package/ios/hyperswitchSDK/Core/HyperPaymentSheet/PaymentSheetView+SwiftUI.swift +49 -0
  78. package/ios/hyperswitchSDK/Core/HyperPaymentSheet/PaymentSheetView+UIKit.swift +49 -0
  79. package/ios/hyperswitchSDK/Core/HyperPaymentSheet/PaymentSheetView.swift +68 -0
  80. package/ios/hyperswitchSDK/Core/HyperPaymentWidget/PaymentWidget.swift +212 -0
  81. package/ios/hyperswitchSDK/Core/HyperSession/PaymentSession+UIKit.swift +228 -0
  82. package/ios/hyperswitchSDK/Core/HyperSession/PaymentSessionTypes.swift +174 -0
  83. package/ios/hyperswitchSDK/Core/NativeModule/HyperHeadless.m +15 -0
  84. package/ios/hyperswitchSDK/Core/NativeModule/HyperHeadless.swift +108 -0
  85. package/ios/hyperswitchSDK/Core/NativeModule/HyperModule.m +31 -0
  86. package/ios/hyperswitchSDK/Core/NativeModule/HyperModule.swift +343 -0
  87. package/ios/hyperswitchSDK/Core/NativeModule/OTAServices.swift +117 -0
  88. package/ios/hyperswitchSDK/Core/NativeModule/RNHeadlessManager.swift +47 -0
  89. package/ios/hyperswitchSDK/Core/NativeModule/RNResponseHandler.swift +12 -0
  90. package/ios/hyperswitchSDK/Core/NativeModule/RNViewManager.swift +55 -0
  91. package/ios/hyperswitchSDK/Core/NativeModule/WidgetAction.swift +30 -0
  92. package/ios/hyperswitchSDK/Core/NativeModule/WidgetResponseRegistry.swift +92 -0
  93. package/ios/hyperswitchSDK/Core/NativeModule/hyper-Bridging-Header.h +12 -0
  94. package/ios/hyperswitchSDK/Core/Resources/HyperOTA.plist +20 -0
  95. package/ios/hyperswitchSDK/Core/Resources/hyperswitch.bundle +1531 -0
  96. package/ios/hyperswitchSDK/CoreLite/ApplePayHandlerLite.swift +251 -0
  97. package/ios/hyperswitchSDK/CoreLite/PaymentSession+Lite.swift +25 -0
  98. package/ios/hyperswitchSDK/CoreLite/PaymentSheetView+Lite.swift +45 -0
  99. package/ios/hyperswitchSDK/CoreLite/SwiftUI+Lite.swift +48 -0
  100. package/ios/hyperswitchSDK/CoreLite/WebViewController.swift +278 -0
  101. package/ios/hyperswitchSDK/Shared/APIClient.swift +22 -0
  102. package/ios/hyperswitchSDK/Shared/Codable+UIKit.swift +75 -0
  103. package/ios/hyperswitchSDK/Shared/CustomEndpointConfiguration.swift +67 -0
  104. package/ios/hyperswitchSDK/Shared/DictionaryConverter.swift +104 -0
  105. package/ios/hyperswitchSDK/Shared/Environment.swift +24 -0
  106. package/ios/hyperswitchSDK/Shared/Extensions.swift +101 -0
  107. package/ios/hyperswitchSDK/Shared/Helper.swift +40 -0
  108. package/ios/hyperswitchSDK/Shared/HyperEvents/PaymentEventData.swift +125 -0
  109. package/ios/hyperswitchSDK/Shared/HyperEvents/PaymentEventSubscriptionBuilder.swift +45 -0
  110. package/ios/hyperswitchSDK/Shared/HyperEvents/PaymentEventType.swift +30 -0
  111. package/ios/hyperswitchSDK/Shared/HyperNetworking.swift +151 -0
  112. package/ios/hyperswitchSDK/Shared/HyperParams.swift +44 -0
  113. package/ios/hyperswitchSDK/Shared/HyperUIViewController.swift +27 -0
  114. package/ios/hyperswitchSDK/Shared/Hyperswitch.swift +20 -0
  115. package/ios/hyperswitchSDK/Shared/HyperswitchConfigurationSchema.swift +54 -0
  116. package/ios/hyperswitchSDK/Shared/HyperswitchEnvironment.swift +11 -0
  117. package/ios/hyperswitchSDK/Shared/NativeLogger/Debouncer.swift +37 -0
  118. package/ios/hyperswitchSDK/Shared/NativeLogger/LogBuilder.swift +113 -0
  119. package/ios/hyperswitchSDK/Shared/NativeLogger/LogFileManager.swift +76 -0
  120. package/ios/hyperswitchSDK/Shared/NativeLogger/LogManager.swift +113 -0
  121. package/ios/hyperswitchSDK/Shared/NativeLogger/LogPayload.swift +91 -0
  122. package/ios/hyperswitchSDK/Shared/PaymentMethodType.swift +15 -0
  123. package/ios/hyperswitchSDK/Shared/PaymentSession.swift +98 -0
  124. package/ios/hyperswitchSDK/Shared/PaymentSessionConfiguration.swift +14 -0
  125. package/ios/hyperswitchSDK/Shared/PaymentSheet.swift +33 -0
  126. package/ios/hyperswitchSDK/Shared/PaymentSheetAppearance+Codable.swift +182 -0
  127. package/ios/hyperswitchSDK/Shared/PaymentSheetAppearance.swift +238 -0
  128. package/ios/hyperswitchSDK/Shared/PaymentSheetConfiguration.swift +161 -0
  129. package/ios/hyperswitchSDK/Shared/SDKParams.swift +43 -0
  130. package/ios/hyperswitchSDK/Shared/SavedPaymentMethodsConfiguration.swift +20 -0
  131. package/ios/hyperswitchSDK/Shared/SwiftUIManager.swift +28 -0
  132. package/ios/hyperswitchSDK/Shared/Version.swift +12 -0
  133. package/lib/bs/JuspayTechReactNativeHyperswitch.cmi +0 -0
  134. package/lib/bs/JuspayTechReactNativeHyperswitch.cmj +0 -0
  135. package/lib/bs/JuspayTechReactNativeHyperswitch.cmt +0 -0
  136. package/lib/bs/JuspayTechReactNativeHyperswitch.mlmap +0 -0
  137. package/lib/bs/build.ninja +8 -0
  138. package/lib/bs/install.ninja +9 -0
  139. package/lib/bs/src/context/HyperProvider-JuspayTechReactNativeHyperswitch.cmt +0 -0
  140. package/lib/bs/src/context/WidgetRegistry-JuspayTechReactNativeHyperswitch.cmt +0 -0
  141. package/lib/bs/src/core/Hyper-JuspayTechReactNativeHyperswitch.cmt +0 -0
  142. package/lib/bs/src/core/HyperElements-JuspayTechReactNativeHyperswitch.cmt +0 -0
  143. package/lib/bs/src/hooks/usePaymentSession-JuspayTechReactNativeHyperswitch.cmt +0 -0
  144. package/lib/bs/src/hooks/useWidget-JuspayTechReactNativeHyperswitch.cmt +0 -0
  145. package/lib/bs/src/modules/NativeHyperswitchSdk-JuspayTechReactNativeHyperswitch.cmt +0 -0
  146. package/lib/bs/src/types/HyperTypes-JuspayTechReactNativeHyperswitch.cmt +0 -0
  147. package/lib/bs/src/types/NativeModuleTypes-JuspayTechReactNativeHyperswitch.cmt +0 -0
  148. package/lib/bs/src/types/PaymentSheetConfiguration-JuspayTechReactNativeHyperswitch.cmt +0 -0
  149. package/lib/bs/src/utils/AppearanceTransformer-JuspayTechReactNativeHyperswitch.cmt +0 -0
  150. package/lib/bs/src/utils/EventValidator-JuspayTechReactNativeHyperswitch.cmt +0 -0
  151. package/lib/bs/src/utils/NewArchUtils-JuspayTechReactNativeHyperswitch.cmt +0 -0
  152. package/lib/bs/src/utils/PaymentSheetEventManager-JuspayTechReactNativeHyperswitch.cmt +0 -0
  153. package/lib/bs/src/utils/ReactNativeUtils-JuspayTechReactNativeHyperswitch.cmt +0 -0
  154. package/lib/bs/src/utils/ResponseHandler-JuspayTechReactNativeHyperswitch.cmt +0 -0
  155. package/lib/bs/src/views/CVCElement-JuspayTechReactNativeHyperswitch.cmt +0 -0
  156. package/lib/bs/src/views/NativePaymentWidget-JuspayTechReactNativeHyperswitch.cmt +0 -0
  157. package/lib/bs/src/views/NativePaymentWidgetImpl-JuspayTechReactNativeHyperswitch.cmt +0 -0
  158. package/lib/bs/src/views/PaymentElement-JuspayTechReactNativeHyperswitch.cmt +0 -0
  159. package/lib/commonjs/index.bundle.js +2 -0
  160. package/lib/commonjs/index.bundle.js.map +1 -0
  161. package/lib/module/index.bundle.js +2 -0
  162. package/lib/module/index.bundle.js.map +1 -0
  163. package/lib/typescript/babel.config.d.ts +10 -0
  164. package/lib/typescript/babel.config.d.ts.map +1 -0
  165. package/lib/typescript/eslint.config.d.mts +3 -0
  166. package/lib/typescript/eslint.config.d.mts.map +1 -0
  167. package/lib/typescript/rollup.config.d.ts +23 -0
  168. package/lib/typescript/rollup.config.d.ts.map +1 -0
  169. package/lib/typescript/scripts/bootstrap.d.ts +2 -0
  170. package/lib/typescript/scripts/bootstrap.d.ts.map +1 -0
  171. package/lib/typescript/src/context/Elements.d.ts +7 -0
  172. package/lib/typescript/src/context/Elements.d.ts.map +1 -0
  173. package/lib/typescript/src/context/HyperElements.d.ts +23 -0
  174. package/lib/typescript/src/context/HyperElements.d.ts.map +1 -0
  175. package/lib/typescript/src/context/PaymentSession.d.ts +15 -0
  176. package/lib/typescript/src/context/PaymentSession.d.ts.map +1 -0
  177. package/lib/typescript/src/context/SavedPaymentMethods.d.ts +5 -0
  178. package/lib/typescript/src/context/SavedPaymentMethods.d.ts.map +1 -0
  179. package/lib/typescript/src/context/WidgetRegistry.d.ts +8 -0
  180. package/lib/typescript/src/context/WidgetRegistry.d.ts.map +1 -0
  181. package/lib/typescript/src/context/hooks.d.ts +5 -0
  182. package/lib/typescript/src/context/hooks.d.ts.map +1 -0
  183. package/lib/typescript/src/index.d.ts +10 -0
  184. package/lib/typescript/src/index.d.ts.map +1 -0
  185. package/lib/typescript/src/modules/NativeHyperswitchSdk.d.ts +61 -0
  186. package/lib/typescript/src/modules/NativeHyperswitchSdk.d.ts.map +1 -0
  187. package/lib/typescript/src/specs/ApplePayViewNativeComponent.d.ts +10 -0
  188. package/lib/typescript/src/specs/ApplePayViewNativeComponent.d.ts.map +1 -0
  189. package/lib/typescript/src/specs/NativeHyperHeadless.d.ts +14 -0
  190. package/lib/typescript/src/specs/NativeHyperHeadless.d.ts.map +1 -0
  191. package/lib/typescript/src/specs/NativeHyperswitchModule.d.ts +32 -0
  192. package/lib/typescript/src/specs/NativeHyperswitchModule.d.ts.map +1 -0
  193. package/lib/typescript/src/specs/NativeHyperswitchSdkNative.d.ts +33 -0
  194. package/lib/typescript/src/specs/NativeHyperswitchSdkNative.d.ts.map +1 -0
  195. package/lib/typescript/src/specs/NativePaymentElementModule.d.ts +9 -0
  196. package/lib/typescript/src/specs/NativePaymentElementModule.d.ts.map +1 -0
  197. package/lib/typescript/src/specs/PaymentElementNativeComponent.d.ts +19 -0
  198. package/lib/typescript/src/specs/PaymentElementNativeComponent.d.ts.map +1 -0
  199. package/lib/typescript/src/specs/utils.d.ts +15 -0
  200. package/lib/typescript/src/specs/utils.d.ts.map +1 -0
  201. package/lib/typescript/src/types/NativeModuleTypes.d.ts +67 -0
  202. package/lib/typescript/src/types/NativeModuleTypes.d.ts.map +1 -0
  203. package/lib/typescript/src/types/PaymentSheetConfiguration.d.ts +255 -0
  204. package/lib/typescript/src/types/PaymentSheetConfiguration.d.ts.map +1 -0
  205. package/lib/typescript/src/types/definitions.d.ts +85 -0
  206. package/lib/typescript/src/types/definitions.d.ts.map +1 -0
  207. package/lib/typescript/src/types/elements/index.d.ts +23 -0
  208. package/lib/typescript/src/types/elements/index.d.ts.map +1 -0
  209. package/lib/typescript/src/types/paymentresult/index.d.ts +5 -0
  210. package/lib/typescript/src/types/paymentresult/index.d.ts.map +1 -0
  211. package/lib/typescript/src/types/savedPaymentMethods/index.d.ts +69 -0
  212. package/lib/typescript/src/types/savedPaymentMethods/index.d.ts.map +1 -0
  213. package/lib/typescript/src/utils/EventValidator.d.ts +9 -0
  214. package/lib/typescript/src/utils/EventValidator.d.ts.map +1 -0
  215. package/lib/typescript/src/utils/InitializationState.d.ts +13 -0
  216. package/lib/typescript/src/utils/InitializationState.d.ts.map +1 -0
  217. package/lib/typescript/src/utils/LaunchOptions.d.ts +7 -0
  218. package/lib/typescript/src/utils/LaunchOptions.d.ts.map +1 -0
  219. package/lib/typescript/src/utils/NewArchUtils.d.ts +7 -0
  220. package/lib/typescript/src/utils/NewArchUtils.d.ts.map +1 -0
  221. package/lib/typescript/src/utils/ReactNativeUtils.d.ts +3 -0
  222. package/lib/typescript/src/utils/ReactNativeUtils.d.ts.map +1 -0
  223. package/lib/typescript/src/views/CVCElement.d.ts +15 -0
  224. package/lib/typescript/src/views/CVCElement.d.ts.map +1 -0
  225. package/lib/typescript/src/views/NativePaymentWidget.d.ts +3 -0
  226. package/lib/typescript/src/views/NativePaymentWidget.d.ts.map +1 -0
  227. package/lib/typescript/src/views/NativePaymentWidgetImpl.d.ts +5 -0
  228. package/lib/typescript/src/views/NativePaymentWidgetImpl.d.ts.map +1 -0
  229. package/lib/typescript/src/views/PaymentElement.d.ts +18 -0
  230. package/lib/typescript/src/views/PaymentElement.d.ts.map +1 -0
  231. package/package.json +184 -0
  232. package/src/context/Elements.ts +80 -0
  233. package/src/context/HyperElements.tsx +81 -0
  234. package/src/context/PaymentSession.ts +121 -0
  235. package/src/context/SavedPaymentMethods.ts +80 -0
  236. package/src/context/WidgetRegistry.ts +74 -0
  237. package/src/context/hooks.ts +79 -0
  238. package/src/index.ts +53 -0
  239. package/src/modules/NativeHyperswitchSdk.ts +155 -0
  240. package/src/specs/ApplePayViewNativeComponent.ts +11 -0
  241. package/src/specs/NativeHyperHeadless.ts +22 -0
  242. package/src/specs/NativeHyperswitchModule.ts +51 -0
  243. package/src/specs/NativeHyperswitchSdkNative.ts +62 -0
  244. package/src/specs/NativePaymentElementModule.ts +25 -0
  245. package/src/specs/PaymentElementNativeComponent.ts +21 -0
  246. package/src/specs/utils.ts +15 -0
  247. package/src/types/NativeModuleTypes.ts +73 -0
  248. package/src/types/PaymentSheetConfiguration.ts +360 -0
  249. package/src/types/definitions.ts +109 -0
  250. package/src/types/elements/index.ts +33 -0
  251. package/src/types/paymentresult/index.ts +4 -0
  252. package/src/types/savedPaymentMethods/index.ts +74 -0
  253. package/src/utils/EventValidator.ts +39 -0
  254. package/src/utils/InitializationState.ts +28 -0
  255. package/src/utils/LaunchOptions.ts +41 -0
  256. package/src/utils/NewArchUtils.ts +18 -0
  257. package/src/utils/ReactNativeUtils.ts +13 -0
  258. package/src/views/CVCElement.tsx +122 -0
  259. package/src/views/NativePaymentWidget.ts +2 -0
  260. package/src/views/NativePaymentWidgetImpl.ts +16 -0
  261. package/src/views/PaymentElement.tsx +189 -0
  262. package/tsconfig.build.json +21 -0
@@ -0,0 +1,108 @@
1
+ //
2
+ // HyperHeadless.swift
3
+ // Hyperswitch
4
+ //
5
+ // Created by Shivam Shashank on 06/03/24.
6
+ //
7
+
8
+ import Foundation
9
+ import React
10
+ import WebKit
11
+
12
+ @objc(HyperHeadless)
13
+ internal class HyperHeadless: RCTEventEmitter {
14
+
15
+ internal static var shared: HyperHeadless?
16
+
17
+ private var setNativeProps: RCTResponseSenderBlock?
18
+ private var confirmWithDefault: RCTResponseSenderBlock?
19
+ private var defaultPMData: ((NSDictionary?) -> Void)?
20
+
21
+ internal override init() {
22
+ super.init()
23
+ HyperHeadless.shared = self
24
+ }
25
+
26
+ @objc
27
+ internal override static func requiresMainQueueSetup() -> Bool {
28
+ return true
29
+ }
30
+
31
+ @objc
32
+ internal override func supportedEvents() -> [String] {
33
+ return ["test"]
34
+ }
35
+
36
+ @objc
37
+ private func confirm(data: [String: Any]) {
38
+ self.sendEvent(withName: "test", body: data)
39
+ }
40
+
41
+ @objc
42
+ private func getPaymentSession(
43
+ _ rootTag: NSNumber,
44
+ _ rnMessage: NSDictionary,
45
+ _ rnMessage2: NSDictionary,
46
+ _ rnMessage3: NSArray,
47
+ _ rnCallback: @escaping RCTResponseSenderBlock
48
+ ) {
49
+ PaymentSession.getPaymentSession(
50
+ getPaymentMethodData: rnMessage,
51
+ getPaymentMethodData2: rnMessage2,
52
+ getPaymentMethodDataArray: rnMessage3,
53
+ callback: rnCallback
54
+ )
55
+ }
56
+
57
+ @objc
58
+ private func exitHeadless(_ rootTag: NSNumber, _ rnMessage: String) {
59
+ PaymentSession.exitHeadless(rnMessage: rnMessage)
60
+ }
61
+
62
+ private func paymentResult(from rnMessage: String) -> PaymentResult {
63
+ guard let data = rnMessage.data(using: .utf8) else {
64
+ return .failed(
65
+ error: NSError(
66
+ domain: "UNKNOWN_ERROR",
67
+ code: 0,
68
+ userInfo: ["message": "An error has occurred."]
69
+ )
70
+ )
71
+ }
72
+
73
+ do {
74
+ guard let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String: String] else {
75
+ return .failed(
76
+ error: NSError(
77
+ domain: "UNKNOWN_ERROR",
78
+ code: 0,
79
+ userInfo: ["message": "An error has occurred."]
80
+ )
81
+ )
82
+ }
83
+
84
+ let status = jsonDictionary["status"]
85
+
86
+ if status == "failed" || status == "requires_payment_method" {
87
+ let error = NSError(
88
+ domain: (jsonDictionary["code"] ?? "") != "" ? jsonDictionary["code"]! : "UNKNOWN_ERROR",
89
+ code: 0,
90
+ userInfo: ["message": jsonDictionary["message"] ?? "An error has occurred."]
91
+ )
92
+ return .failed(error: error)
93
+ } else if status == "cancelled" {
94
+ return .canceled(data: "cancelled")
95
+ } else {
96
+ return .completed(data: status ?? "failed")
97
+ }
98
+ } catch {
99
+ return .failed(
100
+ error: NSError(
101
+ domain: "UNKNOWN_ERROR",
102
+ code: 0,
103
+ userInfo: ["message": "An error has occurred."]
104
+ )
105
+ )
106
+ }
107
+ }
108
+ }
@@ -0,0 +1,31 @@
1
+ #import <React/RCTEventEmitter.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(HyperModule, RCTEventEmitter)
4
+
5
+ RCT_EXTERN_METHOD(sendMessageToNative: (NSString)rnMessage)
6
+ RCT_EXTERN_METHOD(exitPaymentsheet: (nonnull NSNumber *)reactTag :(NSString)rnMessage :(BOOL)reset)
7
+ RCT_EXTERN_METHOD(exitPaymentMethodManagement: (nonnull NSNumber *)reactTag :(NSString)rnMessage :(BOOL)reset)
8
+ RCT_EXTERN_METHOD(exitCardForm: (NSString)rnMessage)
9
+ RCT_EXTERN_METHOD(launchWidgetPaymentSheet: (NSDictionary) rnMessage :(RCTResponseSenderBlock)rnCallback)
10
+ RCT_EXTERN_METHOD(onAddPaymentMethod: (NSString)rnMessage)
11
+ RCT_EXTERN_METHOD(exitWidgetPaymentsheet: (nonnull NSNumber *)reactTag :(NSString)rnMessage :(BOOL)reset)
12
+ RCT_EXTERN_METHOD(launchApplePay: (NSString)rnMessage :(RCTResponseSenderBlock)rnCallback)
13
+ RCT_EXTERN_METHOD(startApplePay: (NSString)rnMessage :(RCTResponseSenderBlock)startCallback)
14
+ RCT_EXTERN_METHOD(presentApplePay: (NSString)rnMessage :(RCTResponseSenderBlock)presentCallback)
15
+ RCT_EXTERN_METHOD(notifyWidgetPaymentResult: (nonnull NSNumber *)rootTag :(NSString)rnMessage)
16
+ RCT_EXTERN_METHOD(emitPaymentEvent: (nonnull NSNumber *)rootTag :(NSString)eventType :(NSDictionary)payload)
17
+ RCT_EXTERN_METHOD(onUpdateIntentEvent: (nonnull NSNumber *)rootTag :(NSString)type :(NSString)result)
18
+ RCT_EXTERN_METHOD(onPaymentConfirmButtonClick: (nonnull NSNumber *)rootTag :(NSString)payload :(RCTResponseSenderBlock)callback)
19
+ RCT_EXTERN_METHOD(openIframeBridge: (NSString)url :(nonnull NSNumber *)timeoutMs :(RCTResponseSenderBlock)callback)
20
+
21
+ + (BOOL)requiresMainQueueSetup
22
+ {
23
+ return YES;
24
+ }
25
+
26
+ - (dispatch_queue_t)methodQueue
27
+ {
28
+ return dispatch_get_main_queue();
29
+ }
30
+
31
+ @end
@@ -0,0 +1,343 @@
1
+ //
2
+ // HyperModule.swift
3
+ // Hyperswitch
4
+ //
5
+ // Created by Harshit Srivastava on 07/03/24.
6
+ //
7
+
8
+ import Foundation
9
+ import React
10
+
11
+ @objc(HyperModule)
12
+ internal class HyperModule: RCTEventEmitter {
13
+
14
+ private let applePayPaymentHandler = ApplePayHandler()
15
+ private let expressCheckoutHandler = ExpressCheckoutLauncher()
16
+ private var presentCallback: RCTResponseSenderBlock? = nil
17
+ internal static var shared: HyperModule?
18
+
19
+ override init() {
20
+ super.init()
21
+ HyperModule.shared = self
22
+ }
23
+
24
+ @objc
25
+ internal override static func requiresMainQueueSetup() -> Bool {
26
+ return true
27
+ }
28
+
29
+ @objc
30
+ internal override func supportedEvents() -> [String] {
31
+ return ["confirm", "confirmEC", "triggerWidgetAction", "updateIntentInit", "updateIntentComplete"]
32
+ }
33
+
34
+ @objc
35
+ internal func confirm(data: [String: Any]) {
36
+ self.sendEvent(withName: "confirm", body: data)
37
+ }
38
+ // MARK: WIP
39
+ // @objc func confirmEC(data: [String: Any]) {
40
+ // self.sendEvent(withName: "confirmEC", body: data)
41
+ // }
42
+
43
+ @objc
44
+ private func sendMessageToNative(_ rnMessage: String) {}
45
+
46
+ @objc
47
+ private func launchWidgetPaymentSheet(_ request: NSMutableDictionary, _ callback: @escaping RCTResponseSenderBlock) {
48
+ expressCheckoutHandler.launchPaymentSheet(paymentResult: request, callBack: callback)
49
+ }
50
+
51
+ @objc
52
+ private func onAddPaymentMethod(_ rnMessage: String) {
53
+ PaymentMethodManagementWidget.onAddPaymentMethod?()
54
+ }
55
+
56
+ @objc
57
+ private func launchApplePay(_ rnMessage: String, _ rnCallback: @escaping RCTResponseSenderBlock) {
58
+ applePayPaymentHandler.startPayment(rnMessage: rnMessage, rnCallback: rnCallback, presentCallback: self.presentCallback)
59
+ }
60
+
61
+ @objc
62
+ private func startApplePay(_ rnMessage: String, _ rnCallback: @escaping RCTResponseSenderBlock) {
63
+ rnCallback([])
64
+ }
65
+
66
+ @objc
67
+ private func presentApplePay(_ rnMessage: String, _ rnCallback: @escaping RCTResponseSenderBlock) {
68
+ self.presentCallback = rnCallback
69
+ }
70
+
71
+ @objc
72
+ private func exitPaymentsheet(_ reactTag: NSNumber, _ rnMessage: String, _ reset: Bool) {
73
+ let result = paymentResult(from: rnMessage)
74
+ withPaymentSheet(reactTag) { vc, sheet in
75
+ sheet?.completion?(result)
76
+ vc?.dismiss(animated: false, completion: nil)
77
+ }
78
+ }
79
+
80
+ @objc
81
+ private func exitWidgetPaymentsheet(_ reactTag: NSNumber, _ rnMessage: String, _ reset: Bool) {
82
+ let result = paymentResult(from: rnMessage)
83
+ withWidget(reactTag) { w in
84
+ w.handleConfirmPaymentResponse(result)
85
+ }
86
+ }
87
+
88
+ private func paymentResult(from rnMessage: String) -> PaymentResult {
89
+ guard let data = rnMessage.data(using: .utf8) else {
90
+ return .failed(
91
+ error: NSError(
92
+ domain: "UNKNOWN_ERROR",
93
+ code: 0,
94
+ userInfo: ["message": "An error has occurred."]
95
+ )
96
+ )
97
+ }
98
+
99
+ do {
100
+ guard let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String: String] else {
101
+ return .failed(
102
+ error: NSError(
103
+ domain: "UNKNOWN_ERROR",
104
+ code: 0,
105
+ userInfo: ["message": "An error has occurred."]
106
+ )
107
+ )
108
+ }
109
+
110
+ let status = jsonDictionary["status"]
111
+
112
+ if status == "success" || status == "succeeded" || status == "completed" {
113
+ return .completed(data: status ?? "success")
114
+ } else if status == "cancelled" || status == "canceled" {
115
+ return .canceled(data: status ?? "cancelled")
116
+ } else {
117
+ let error = NSError(
118
+ domain: (jsonDictionary["code"] ?? "") != "" ? jsonDictionary["code"]! : "UNKNOWN_ERROR",
119
+ code: 0,
120
+ userInfo: ["message": jsonDictionary["message"] ?? status ?? "An error has occurred."]
121
+ )
122
+ return .failed(error: error)
123
+ }
124
+ } catch {
125
+ return .failed(
126
+ error: NSError(
127
+ domain: "UNKNOWN_ERROR",
128
+ code: 0,
129
+ userInfo: ["message": "An error has occurred."]
130
+ )
131
+ )
132
+ }
133
+ }
134
+
135
+ @objc
136
+ private func exitPaymentMethodManagement(_ reactTag: NSNumber, _ rnMessage: String, _ reset: Bool) {
137
+ exitSheet(rnMessage)
138
+ }
139
+
140
+ @objc
141
+ private func notifyWidgetPaymentResult(_ rootTag: NSNumber, _ rnMessage: String) {
142
+ let result = paymentResult(from: rnMessage)
143
+ guard case .failed = result else { return }
144
+ withNativePaymentWidgetView(rootTag) { view in
145
+ view.handleConfirmPaymentNotification(result)
146
+ }
147
+ }
148
+
149
+ @objc
150
+ private func onUpdateIntentEvent(_ rootTag: NSNumber, _ type: String, _ result: String) {
151
+ withWidget(rootTag) { widget in
152
+ widget.handleUpdateIntentEvent(type: type, result: result)
153
+ }
154
+ }
155
+
156
+ @objc func emitPaymentEvent(_ rootTag: NSNumber, _ eventType: String, _ payload: NSDictionary) {
157
+ let map = (payload as? [String: Any]) ?? [:]
158
+ resolveSubscribingTarget(rootTag) { target in
159
+ if let widget = target as? PaymentWidget, widget.paymentEventListener != nil {
160
+ widget.dispatchPaymentEvent(type: eventType, payload: map)
161
+ } else if let cvc = target as? CVCWidget, cvc.paymentEventListener != nil {
162
+ cvc.dispatchPaymentEvent(type: eventType, payload: map)
163
+ } else if let sheet = target as? PaymentSheet, sheet.paymentEventListener != nil {
164
+ sheet.dispatchPaymentEvent(type: eventType, payload: map)
165
+ }
166
+ }
167
+ }
168
+
169
+ @objc
170
+ private func exitCardForm(_ rnMessage: String) {
171
+ var response: String?
172
+ var error: NSError?
173
+
174
+ if let data = rnMessage.data(using: .utf8) {
175
+ do {
176
+ if let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String: String] {
177
+ let status = jsonDictionary["status"]
178
+
179
+ if status == "failed" || status == "requires_payment_method" {
180
+ error = NSError(
181
+ domain: (jsonDictionary["code"] ?? "") != "" ? jsonDictionary["code"]! : "UNKNOWN_ERROR",
182
+ code: 0,
183
+ userInfo: ["message": jsonDictionary["message"] ?? "An error has occurred."]
184
+ )
185
+ } else {
186
+ response = status
187
+ }
188
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(response: response, error: error)
189
+ } else {
190
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(
191
+ response: "failed",
192
+ error: NSError(domain: "UNKNOWN_ERROR", code: 0, userInfo: ["message": "An error has occurred."])
193
+ )
194
+ }
195
+ } catch {
196
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(
197
+ response: "failed",
198
+ error: NSError(domain: "UNKNOWN_ERROR", code: 0, userInfo: ["message": "An error has occurred."])
199
+ )
200
+ }
201
+ } else {
202
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(
203
+ response: "failed",
204
+ error: NSError(domain: "UNKNOWN_ERROR", code: 0, userInfo: ["message": "An error has occurred."])
205
+ )
206
+ }
207
+ }
208
+
209
+ @objc
210
+ private func exitSheet(_ rnMessage: String) {
211
+ var response: String?
212
+ var error: NSError?
213
+
214
+ if let data = rnMessage.data(using: .utf8) {
215
+ do {
216
+ if let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String: String] {
217
+ let status = jsonDictionary["status"]
218
+
219
+ if status == "failed" || status == "requires_payment_method" {
220
+ error = NSError(
221
+ domain: (jsonDictionary["code"] ?? "") != "" ? jsonDictionary["code"]! : "UNKNOWN_ERROR",
222
+ code: 0,
223
+ userInfo: ["message": jsonDictionary["message"] ?? "An error has occurred."]
224
+ )
225
+ } else {
226
+ response = status
227
+ }
228
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(response: response, error: error)
229
+ } else {
230
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(
231
+ response: "failed",
232
+ error: NSError(domain: "UNKNOWN_ERROR", code: 0, userInfo: ["message": "An error has occurred."])
233
+ )
234
+ }
235
+ } catch {
236
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(
237
+ response: "failed",
238
+ error: NSError(domain: "UNKNOWN_ERROR", code: 0, userInfo: ["message": "An error has occurred."])
239
+ )
240
+ }
241
+ } else {
242
+ RNViewManager.sharedInstance.responseHandler?.didReceiveResponse(
243
+ response: "failed",
244
+ error: NSError(domain: "UNKNOWN_ERROR", code: 0, userInfo: ["message": "An error has occurred."])
245
+ )
246
+ }
247
+ DispatchQueue.main.async {
248
+ if let view = RNViewManager.sharedInstance.rootView {
249
+ let reactNativeVC: UIViewController? = view.reactViewController()
250
+ reactNativeVC?.dismiss(animated: false, completion: nil)
251
+ }
252
+ }
253
+ }
254
+
255
+ @objc
256
+ private func onPaymentConfirmButtonClick(_ rootTag: NSNumber, _ payload: String, _ callback: @escaping RCTResponseSenderBlock) {
257
+ resolveSubscribingTarget(rootTag) { target in
258
+ if let widget = target as? PaymentWidget {
259
+ widget.handleShouldProceedWithPayment(payload: payload) { shouldProceed in
260
+ callback([shouldProceed])
261
+ }
262
+ } else if let sheet = target as? PaymentSheet {
263
+ sheet.handleShouldProceedWithPayment(payload: payload) { shouldProceed in
264
+ callback([shouldProceed])
265
+ }
266
+ } else {
267
+ callback([true])
268
+ }
269
+ }
270
+ }
271
+
272
+ @objc
273
+ private func openIframeBridge(_ url: String, _ timeoutMs: NSNumber, _ callback: @escaping RCTResponseSenderBlock) {
274
+ DispatchQueue.main.async {
275
+ let headlessWebView = HeadlessWebView(url: url, timeoutMs: timeoutMs, callback: callback)
276
+ headlessWebView.startFlow()
277
+ }
278
+ }
279
+
280
+ private func withWidget(_ rootTag: NSNumber, _ block: @escaping (PaymentWidget) -> Void) {
281
+ RCTGetUIManagerQueue().async {
282
+ self.bridge.uiManager.addUIBlock { _, viewRegistry in
283
+ guard let view = viewRegistry?[rootTag] else { return }
284
+ var current: UIView? = view
285
+ while let v = current {
286
+ if let widget = v as? PaymentWidget {
287
+ block(widget)
288
+ return
289
+ }
290
+ current = v.superview
291
+ }
292
+ }
293
+ }
294
+ }
295
+
296
+ private func withNativePaymentWidgetView(_ rootTag: NSNumber, _ block: @escaping (NativePaymentWidgetView) -> Void) {
297
+ RCTGetUIManagerQueue().async {
298
+ self.bridge.uiManager.addUIBlock { _, viewRegistry in
299
+ guard let view = viewRegistry?[rootTag] else { return }
300
+ var current: UIView? = view
301
+ while let v = current {
302
+ if let nativeWidget = v as? NativePaymentWidgetView {
303
+ block(nativeWidget)
304
+ return
305
+ }
306
+ current = v.superview
307
+ }
308
+ }
309
+ }
310
+ }
311
+
312
+ private func resolveSubscribingTarget(_ rootTag: NSNumber, _ block: @escaping (AnyObject?) -> Void) {
313
+ RCTGetUIManagerQueue().async {
314
+ self.bridge.uiManager.addUIBlock { _, viewRegistry in
315
+ guard let view = viewRegistry?[rootTag] else {
316
+ DispatchQueue.main.async { block(nil) }
317
+ return
318
+ }
319
+ var current: UIView? = view
320
+ while let v = current {
321
+ if v is PaymentWidget || v is CVCWidget {
322
+ DispatchQueue.main.async { block(v) }
323
+ return
324
+ }
325
+ current = v.superview
326
+ }
327
+ let sheet = (view.reactViewController() as? HyperUIViewController)?.paymentSheet
328
+ DispatchQueue.main.async { block(sheet) }
329
+ }
330
+ }
331
+ }
332
+
333
+ private func withPaymentSheet(_ rootTag: NSNumber, _ block: @escaping (UIViewController?, PaymentSheet?) -> Void) {
334
+ RCTGetUIManagerQueue().async {
335
+ self.bridge.uiManager.addUIBlock { _, viewRegistry in
336
+ let view = viewRegistry?[rootTag]
337
+ let vc = view?.reactViewController() as? HyperUIViewController
338
+ let sheet = vc?.paymentSheet
339
+ DispatchQueue.main.async { block(vc, sheet) }
340
+ }
341
+ }
342
+ }
343
+ }
@@ -0,0 +1,117 @@
1
+ //
2
+ // OTAServices.swift
3
+ // hyperswitch
4
+ //
5
+ // Created by Kuntimaddi Manideep on 24/01/25.
6
+ //
7
+
8
+ #if canImport(HyperOTA)
9
+ import HyperOTA
10
+ import Foundation
11
+
12
+ private func getHyperOTAPlist(_ key: String) -> String? {
13
+ guard let path = Bundle(for: RNViewManager.self).path(forResource: "HyperOTA", ofType: "plist"),
14
+ let dict = NSDictionary(contentsOfFile: path),
15
+ let value = dict[key] as? String, !value.isEmpty
16
+ else {
17
+ return nil
18
+ }
19
+ return value
20
+ }
21
+
22
+ internal class EventLogger: NSObject, HPJPLoggerDelegate {
23
+ private func isJSONSerializable(_ value: Any) -> Bool {
24
+ return JSONSerialization.isValidJSONObject(["key": value])
25
+ }
26
+ internal func addLog(eventData: [String: Any], logLevel: String, key: String?) {
27
+ do {
28
+ let jsonData = try JSONSerialization.data(withJSONObject: eventData, options: [])
29
+ guard let jsonString = String(data: jsonData, encoding: .utf8) else {
30
+ print("Error: JSON data encoding failed.")
31
+ return
32
+ }
33
+ var log = LogBuilder()
34
+ .setLogType(logLevel)
35
+ .setValue(jsonString)
36
+
37
+ switch key {
38
+ case "init_with_local_config_versions":
39
+ log = log.setEventName(.hyperOTAInit)
40
+ break
41
+ case "init":
42
+ log = log.setEventName(.hyperOTAInit)
43
+ break
44
+ case "update_end":
45
+ log = log.setEventName(.hyperOTAFinish)
46
+ case "end":
47
+ log = log.setEventName(.hyperOTAFinish)
48
+ break
49
+ default:
50
+ log = log.setEventName(.hyperOTAEvent)
51
+ }
52
+ LogManager.addLog(log.build())
53
+
54
+ } catch {
55
+ print("Error serializing event data: \(error.localizedDescription)")
56
+ }
57
+ }
58
+ func trackEvent(
59
+ withLevel logLevel: String,
60
+ label eventLabel: String,
61
+ key eventKey: String? = nil,
62
+ value eventValue: Any,
63
+ category eventCategory: String,
64
+ subcategory eventSubcategory: String
65
+ ) {
66
+ let eventData: [String: Any] = [
67
+ "label": eventLabel,
68
+ "value": isJSONSerializable(eventValue) ? eventValue : String(describing: eventValue),
69
+ "key": eventKey ?? "",
70
+ "category": eventCategory,
71
+ "subcategory": eventSubcategory,
72
+ ]
73
+ addLog(eventData: eventData, logLevel: logLevel, key: eventKey)
74
+ }
75
+ func trackEvent(
76
+ withLevel logLevel: String,
77
+ label eventLabel: String,
78
+ value eventValue: Any,
79
+ category eventCategory: String,
80
+ subcategory eventSubcategory: String
81
+ ) {
82
+ let eventData: [String: Any] = [
83
+ "label": eventLabel,
84
+ "value": isJSONSerializable(eventValue) ? eventValue : String(describing: eventValue),
85
+ "category": eventCategory,
86
+ "subcategory": eventSubcategory,
87
+ ]
88
+ addLog(eventData: eventData, logLevel: logLevel, key: eventLabel)
89
+
90
+ }
91
+ }
92
+
93
+ public final class OTAServices {
94
+ public static var shared = OTAServices()
95
+ public var otaServices: HyperOTAServices? = nil
96
+ let logger = EventLogger()
97
+ public func initialize(publishableKey: String) {
98
+ if self.otaServices == nil {
99
+ let environment = SDKEnvironment.getEnvironment(publishableKey)
100
+ let configKey = (environment == .SANDBOX) ? "sandBoxReleaseConfigURL" : "releaseConfigURL"
101
+ let payload =
102
+ [
103
+ "clientId": getHyperOTAPlist("clientId") ?? "",
104
+ "namespace": getHyperOTAPlist("namespace") ?? "",
105
+ "forceUpdate": true,
106
+ "localAssets": (getHyperOTAPlist(configKey) ?? "releaseConfigURL") == "releaseConfigURL",
107
+ "fileName": getHyperOTAPlist("fileName") ?? "",
108
+ "releaseConfigURL": (getHyperOTAPlist(configKey) ?? "") + "/mobile-ota/ios/" + SDKVersion.current + "/config.json",
109
+ ] as [String: Any]
110
+ self.otaServices = HyperOTAServices(payload: payload, loggerDelegate: logger, baseBundle: Bundle(for: OTAServices.self))
111
+ }
112
+ }
113
+ public func getBundleURL() -> URL? {
114
+ return otaServices?.bundleURL() ?? Bundle(for: OTAServices.self).url(forResource: "hyperswitch", withExtension: "bundle")
115
+ }
116
+ }
117
+ #endif
@@ -0,0 +1,47 @@
1
+ //
2
+ // RNHeadlessManager.swift
3
+ // Hyperswitch
4
+ //
5
+ // Created by Shivam Shashank on 09/11/22.
6
+ //
7
+
8
+ import Foundation
9
+ import React
10
+
11
+ internal class RNHeadlessManager: NSObject {
12
+
13
+ internal var responseHandler: RNResponseHandler?
14
+ internal var rootView: RCTRootView?
15
+
16
+ internal lazy var bridgeHeadless: RCTBridge = {
17
+ RCTBridge.init(delegate: self, launchOptions: nil)
18
+ }()
19
+
20
+ internal static let sharedInstance = RNHeadlessManager()
21
+
22
+ internal func viewForModule(_ moduleName: String, initialProperties: [String: Any]?) -> RCTRootView {
23
+ let rootView: RCTRootView = RCTRootView(
24
+ bridge: self.bridgeHeadless,
25
+ moduleName: moduleName,
26
+ initialProperties: initialProperties
27
+ )
28
+ self.rootView = rootView
29
+ return rootView
30
+ }
31
+
32
+ internal func reinvalidateBridge() {
33
+ self.bridgeHeadless.invalidate()
34
+ self.bridgeHeadless = RCTBridge.init(delegate: self, launchOptions: nil)
35
+ }
36
+ }
37
+
38
+ extension RNHeadlessManager: RCTBridgeDelegate {
39
+ func sourceURL(for bridge: RCTBridge) -> URL? {
40
+ switch Helper.getInfoPlist("HyperswitchSource") {
41
+ case "LocalHosted":
42
+ return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
43
+ default:
44
+ return Bundle(for: RNHeadlessManager.self).url(forResource: "hyperswitch", withExtension: "bundle")
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,12 @@
1
+ //
2
+ // RNResponseHandler.swift
3
+ // hyperswitch
4
+ //
5
+ // Created by Harshit Srivastava on 22/10/24.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ internal protocol RNResponseHandler {
11
+ func didReceiveResponse(response: String?, error: Error?)
12
+ }