@klarna/react-native-klarna-network-payment 0.0.1 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +143 -29
  2. package/android/build.gradle +95 -0
  3. package/android/src/main/AndroidManifest.xml +1 -0
  4. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentButtonViewSpec.kt +22 -0
  5. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModule.kt +46 -0
  6. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModuleImpl.kt +163 -0
  7. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentPackage.kt +30 -0
  8. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonPressEvent.kt +19 -0
  9. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonViewManager.kt +276 -0
  10. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentPresentationMapper.kt +132 -0
  11. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentRequestMapper.kt +328 -0
  12. package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentResponseMapper.kt +145 -0
  13. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModuleImplTest.kt +361 -0
  14. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonViewManagerTest.kt +155 -0
  15. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentPresentationMapperTest.kt +447 -0
  16. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentRequestMapperTest.kt +489 -0
  17. package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentResponseMapperTest.kt +456 -0
  18. package/ios/Sources/KlarnaNetworkPayment.h +5 -0
  19. package/ios/Sources/KlarnaNetworkPayment.mm +110 -0
  20. package/ios/Sources/KlarnaNetworkPaymentModuleImpl.swift +196 -0
  21. package/ios/Sources/KlarnaPaymentButtonComponentView.mm +147 -0
  22. package/ios/Sources/KlarnaPaymentButtonViewImpl.swift +77 -0
  23. package/ios/Sources/KlarnaPaymentPresentationMapping.swift +102 -0
  24. package/ios/Sources/KlarnaPaymentRequestDataMapping.swift +232 -0
  25. package/ios/Sources/KlarnaPaymentRequestMapping.swift +103 -0
  26. package/ios/Tests/KlarnaNetworkPaymentModuleImplTests.swift +143 -0
  27. package/ios/Tests/KlarnaPaymentButtonViewImplTests.swift +122 -0
  28. package/ios/Tests/KlarnaPaymentPresentationMappingTests.swift +335 -0
  29. package/lib/commonjs/KlarnaNetworkPayment.js +6 -0
  30. package/lib/commonjs/KlarnaNetworkPayment.js.map +1 -0
  31. package/lib/commonjs/KlarnaNetworkPaymentImpl.js +44 -0
  32. package/lib/commonjs/KlarnaNetworkPaymentImpl.js.map +1 -0
  33. package/lib/commonjs/KlarnaNetworkPaymentMapper.js +164 -0
  34. package/lib/commonjs/KlarnaNetworkPaymentMapper.js.map +1 -0
  35. package/lib/commonjs/KlarnaPaymentButton.js +43 -0
  36. package/lib/commonjs/KlarnaPaymentButton.js.map +1 -0
  37. package/lib/commonjs/Specs/KlarnaPaymentButtonNativeComponent.js +10 -0
  38. package/lib/commonjs/Specs/KlarnaPaymentButtonNativeComponent.js.map +1 -0
  39. package/lib/commonjs/Specs/NativeKlarnaNetworkPayment.js +13 -0
  40. package/lib/commonjs/Specs/NativeKlarnaNetworkPayment.js.map +1 -0
  41. package/lib/commonjs/index.js +51 -0
  42. package/lib/commonjs/index.js.map +1 -0
  43. package/lib/commonjs/types/KlarnaPaymentRequest.js +6 -0
  44. package/lib/commonjs/types/KlarnaPaymentRequest.js.map +1 -0
  45. package/lib/commonjs/types/KlarnaPaymentRequestState.js +2 -0
  46. package/lib/commonjs/types/KlarnaPaymentRequestState.js.map +1 -0
  47. package/lib/commonjs/types/KlarnaPaymentRequestStateContext.js +6 -0
  48. package/lib/commonjs/types/KlarnaPaymentRequestStateContext.js.map +1 -0
  49. package/lib/commonjs/types/KlarnaPaymentRequestStateReason.js +2 -0
  50. package/lib/commonjs/types/KlarnaPaymentRequestStateReason.js.map +1 -0
  51. package/lib/commonjs/types/models/KlarnaBillingPlan.js +6 -0
  52. package/lib/commonjs/types/models/KlarnaBillingPlan.js.map +1 -0
  53. package/lib/commonjs/types/models/KlarnaCollectCustomerProfileType.js +2 -0
  54. package/lib/commonjs/types/models/KlarnaCollectCustomerProfileType.js.map +1 -0
  55. package/lib/commonjs/types/models/KlarnaCustomer.js +6 -0
  56. package/lib/commonjs/types/models/KlarnaCustomer.js.map +1 -0
  57. package/lib/commonjs/types/models/KlarnaFreeTrial.js +2 -0
  58. package/lib/commonjs/types/models/KlarnaFreeTrial.js.map +1 -0
  59. package/lib/commonjs/types/models/KlarnaInterval.js +2 -0
  60. package/lib/commonjs/types/models/KlarnaInterval.js.map +1 -0
  61. package/lib/commonjs/types/models/KlarnaLineItem.js +2 -0
  62. package/lib/commonjs/types/models/KlarnaLineItem.js.map +1 -0
  63. package/lib/commonjs/types/models/KlarnaOndemandService.js +6 -0
  64. package/lib/commonjs/types/models/KlarnaOndemandService.js.map +1 -0
  65. package/lib/commonjs/types/models/KlarnaPartnerCustomer.js +6 -0
  66. package/lib/commonjs/types/models/KlarnaPartnerCustomer.js.map +1 -0
  67. package/lib/commonjs/types/models/KlarnaPaymentPresentation.js +6 -0
  68. package/lib/commonjs/types/models/KlarnaPaymentPresentation.js.map +1 -0
  69. package/lib/commonjs/types/models/KlarnaPaymentRequestData.js +6 -0
  70. package/lib/commonjs/types/models/KlarnaPaymentRequestData.js.map +1 -0
  71. package/lib/commonjs/types/models/KlarnaRequestCustomerToken.js +6 -0
  72. package/lib/commonjs/types/models/KlarnaRequestCustomerToken.js.map +1 -0
  73. package/lib/commonjs/types/models/KlarnaRequestCustomerTokenScope.js +2 -0
  74. package/lib/commonjs/types/models/KlarnaRequestCustomerTokenScope.js.map +1 -0
  75. package/lib/commonjs/types/models/KlarnaShipping.js +6 -0
  76. package/lib/commonjs/types/models/KlarnaShipping.js.map +1 -0
  77. package/lib/commonjs/types/models/KlarnaShippingConfig.js +6 -0
  78. package/lib/commonjs/types/models/KlarnaShippingConfig.js.map +1 -0
  79. package/lib/commonjs/types/models/KlarnaShippingConfigMode.js +2 -0
  80. package/lib/commonjs/types/models/KlarnaShippingConfigMode.js.map +1 -0
  81. package/lib/commonjs/types/models/KlarnaShippingOption.js +6 -0
  82. package/lib/commonjs/types/models/KlarnaShippingOption.js.map +1 -0
  83. package/lib/commonjs/types/models/KlarnaShippingRecipient.js +2 -0
  84. package/lib/commonjs/types/models/KlarnaShippingRecipient.js.map +1 -0
  85. package/lib/commonjs/types/models/KlarnaShippingType.js +2 -0
  86. package/lib/commonjs/types/models/KlarnaShippingType.js.map +1 -0
  87. package/lib/commonjs/types/models/KlarnaShippingTypeAttribute.js +2 -0
  88. package/lib/commonjs/types/models/KlarnaShippingTypeAttribute.js.map +1 -0
  89. package/lib/commonjs/types/models/KlarnaSubscription.js +6 -0
  90. package/lib/commonjs/types/models/KlarnaSubscription.js.map +1 -0
  91. package/lib/commonjs/types/models/KlarnaSupplementaryPurchaseData.js +6 -0
  92. package/lib/commonjs/types/models/KlarnaSupplementaryPurchaseData.js.map +1 -0
  93. package/lib/commonjs/types/models/index.js +2 -0
  94. package/lib/commonjs/types/models/index.js.map +1 -0
  95. package/lib/module/KlarnaNetworkPayment.js +2 -0
  96. package/lib/module/KlarnaNetworkPayment.js.map +1 -0
  97. package/lib/module/KlarnaNetworkPaymentImpl.js +36 -0
  98. package/lib/module/KlarnaNetworkPaymentImpl.js.map +1 -0
  99. package/lib/module/KlarnaNetworkPaymentMapper.js +146 -0
  100. package/lib/module/KlarnaNetworkPaymentMapper.js.map +1 -0
  101. package/lib/module/KlarnaPaymentButton.js +37 -0
  102. package/lib/module/KlarnaPaymentButton.js.map +1 -0
  103. package/lib/module/Specs/KlarnaPaymentButtonNativeComponent.js +3 -0
  104. package/lib/module/Specs/KlarnaPaymentButtonNativeComponent.js.map +1 -0
  105. package/lib/module/Specs/NativeKlarnaNetworkPayment.js +9 -0
  106. package/lib/module/Specs/NativeKlarnaNetworkPayment.js.map +1 -0
  107. package/lib/module/index.js +40 -0
  108. package/lib/module/index.js.map +1 -0
  109. package/lib/module/types/KlarnaPaymentRequest.js +2 -0
  110. package/lib/module/types/KlarnaPaymentRequest.js.map +1 -0
  111. package/lib/module/types/KlarnaPaymentRequestState.js +2 -0
  112. package/lib/module/types/KlarnaPaymentRequestState.js.map +1 -0
  113. package/lib/module/types/KlarnaPaymentRequestStateContext.js +2 -0
  114. package/lib/module/types/KlarnaPaymentRequestStateContext.js.map +1 -0
  115. package/lib/module/types/KlarnaPaymentRequestStateReason.js +2 -0
  116. package/lib/module/types/KlarnaPaymentRequestStateReason.js.map +1 -0
  117. package/lib/module/types/models/KlarnaBillingPlan.js +2 -0
  118. package/lib/module/types/models/KlarnaBillingPlan.js.map +1 -0
  119. package/lib/module/types/models/KlarnaCollectCustomerProfileType.js +2 -0
  120. package/lib/module/types/models/KlarnaCollectCustomerProfileType.js.map +1 -0
  121. package/lib/module/types/models/KlarnaCustomer.js +2 -0
  122. package/lib/module/types/models/KlarnaCustomer.js.map +1 -0
  123. package/lib/module/types/models/KlarnaFreeTrial.js +2 -0
  124. package/lib/module/types/models/KlarnaFreeTrial.js.map +1 -0
  125. package/lib/module/types/models/KlarnaInterval.js +2 -0
  126. package/lib/module/types/models/KlarnaInterval.js.map +1 -0
  127. package/lib/module/types/models/KlarnaLineItem.js +2 -0
  128. package/lib/module/types/models/KlarnaLineItem.js.map +1 -0
  129. package/lib/module/types/models/KlarnaOndemandService.js +2 -0
  130. package/lib/module/types/models/KlarnaOndemandService.js.map +1 -0
  131. package/lib/module/types/models/KlarnaPartnerCustomer.js +2 -0
  132. package/lib/module/types/models/KlarnaPartnerCustomer.js.map +1 -0
  133. package/lib/module/types/models/KlarnaPaymentPresentation.js +2 -0
  134. package/lib/module/types/models/KlarnaPaymentPresentation.js.map +1 -0
  135. package/lib/module/types/models/KlarnaPaymentRequestData.js +2 -0
  136. package/lib/module/types/models/KlarnaPaymentRequestData.js.map +1 -0
  137. package/lib/module/types/models/KlarnaRequestCustomerToken.js +2 -0
  138. package/lib/module/types/models/KlarnaRequestCustomerToken.js.map +1 -0
  139. package/lib/module/types/models/KlarnaRequestCustomerTokenScope.js +2 -0
  140. package/lib/module/types/models/KlarnaRequestCustomerTokenScope.js.map +1 -0
  141. package/lib/module/types/models/KlarnaShipping.js +2 -0
  142. package/lib/module/types/models/KlarnaShipping.js.map +1 -0
  143. package/lib/module/types/models/KlarnaShippingConfig.js +2 -0
  144. package/lib/module/types/models/KlarnaShippingConfig.js.map +1 -0
  145. package/lib/module/types/models/KlarnaShippingConfigMode.js +2 -0
  146. package/lib/module/types/models/KlarnaShippingConfigMode.js.map +1 -0
  147. package/lib/module/types/models/KlarnaShippingOption.js +2 -0
  148. package/lib/module/types/models/KlarnaShippingOption.js.map +1 -0
  149. package/lib/module/types/models/KlarnaShippingRecipient.js +2 -0
  150. package/lib/module/types/models/KlarnaShippingRecipient.js.map +1 -0
  151. package/lib/module/types/models/KlarnaShippingType.js +2 -0
  152. package/lib/module/types/models/KlarnaShippingType.js.map +1 -0
  153. package/lib/module/types/models/KlarnaShippingTypeAttribute.js +2 -0
  154. package/lib/module/types/models/KlarnaShippingTypeAttribute.js.map +1 -0
  155. package/lib/module/types/models/KlarnaSubscription.js +2 -0
  156. package/lib/module/types/models/KlarnaSubscription.js.map +1 -0
  157. package/lib/module/types/models/KlarnaSupplementaryPurchaseData.js +2 -0
  158. package/lib/module/types/models/KlarnaSupplementaryPurchaseData.js.map +1 -0
  159. package/lib/module/types/models/index.js +2 -0
  160. package/lib/module/types/models/index.js.map +1 -0
  161. package/lib/typescript/KlarnaNetworkPayment.d.ts +22 -0
  162. package/lib/typescript/KlarnaNetworkPayment.d.ts.map +1 -0
  163. package/lib/typescript/KlarnaNetworkPaymentImpl.d.ts +12 -0
  164. package/lib/typescript/KlarnaNetworkPaymentImpl.d.ts.map +1 -0
  165. package/lib/typescript/KlarnaNetworkPaymentMapper.d.ts +273 -0
  166. package/lib/typescript/KlarnaNetworkPaymentMapper.d.ts.map +1 -0
  167. package/lib/typescript/KlarnaPaymentButton.d.ts +51 -0
  168. package/lib/typescript/KlarnaPaymentButton.d.ts.map +1 -0
  169. package/lib/typescript/Specs/KlarnaPaymentButtonNativeComponent.d.ts +16 -0
  170. package/lib/typescript/Specs/KlarnaPaymentButtonNativeComponent.d.ts.map +1 -0
  171. package/lib/typescript/Specs/NativeKlarnaNetworkPayment.d.ts +13 -0
  172. package/lib/typescript/Specs/NativeKlarnaNetworkPayment.d.ts.map +1 -0
  173. package/lib/typescript/index.d.ts +14 -0
  174. package/lib/typescript/index.d.ts.map +1 -0
  175. package/lib/typescript/types/KlarnaPaymentRequest.d.ts +19 -0
  176. package/lib/typescript/types/KlarnaPaymentRequest.d.ts.map +1 -0
  177. package/lib/typescript/types/KlarnaPaymentRequestState.d.ts +15 -0
  178. package/lib/typescript/types/KlarnaPaymentRequestState.d.ts.map +1 -0
  179. package/lib/typescript/types/KlarnaPaymentRequestStateContext.d.ts +12 -0
  180. package/lib/typescript/types/KlarnaPaymentRequestStateContext.d.ts.map +1 -0
  181. package/lib/typescript/types/KlarnaPaymentRequestStateReason.d.ts +13 -0
  182. package/lib/typescript/types/KlarnaPaymentRequestStateReason.d.ts.map +1 -0
  183. package/lib/typescript/types/models/KlarnaBillingPlan.d.ts +17 -0
  184. package/lib/typescript/types/models/KlarnaBillingPlan.d.ts.map +1 -0
  185. package/lib/typescript/types/models/KlarnaCollectCustomerProfileType.d.ts +19 -0
  186. package/lib/typescript/types/models/KlarnaCollectCustomerProfileType.d.ts.map +1 -0
  187. package/lib/typescript/types/models/KlarnaCustomer.d.ts +11 -0
  188. package/lib/typescript/types/models/KlarnaCustomer.d.ts.map +1 -0
  189. package/lib/typescript/types/models/KlarnaFreeTrial.d.ts +7 -0
  190. package/lib/typescript/types/models/KlarnaFreeTrial.d.ts.map +1 -0
  191. package/lib/typescript/types/models/KlarnaInterval.d.ts +11 -0
  192. package/lib/typescript/types/models/KlarnaInterval.d.ts.map +1 -0
  193. package/lib/typescript/types/models/KlarnaLineItem.d.ts +28 -0
  194. package/lib/typescript/types/models/KlarnaLineItem.d.ts.map +1 -0
  195. package/lib/typescript/types/models/KlarnaOndemandService.d.ts +17 -0
  196. package/lib/typescript/types/models/KlarnaOndemandService.d.ts.map +1 -0
  197. package/lib/typescript/types/models/KlarnaPartnerCustomer.d.ts +15 -0
  198. package/lib/typescript/types/models/KlarnaPartnerCustomer.d.ts.map +1 -0
  199. package/lib/typescript/types/models/KlarnaPaymentPresentation.d.ts +119 -0
  200. package/lib/typescript/types/models/KlarnaPaymentPresentation.d.ts.map +1 -0
  201. package/lib/typescript/types/models/KlarnaPaymentRequestData.d.ts +24 -0
  202. package/lib/typescript/types/models/KlarnaPaymentRequestData.d.ts.map +1 -0
  203. package/lib/typescript/types/models/KlarnaRequestCustomerToken.d.ts +9 -0
  204. package/lib/typescript/types/models/KlarnaRequestCustomerToken.d.ts.map +1 -0
  205. package/lib/typescript/types/models/KlarnaRequestCustomerTokenScope.d.ts +9 -0
  206. package/lib/typescript/types/models/KlarnaRequestCustomerTokenScope.d.ts.map +1 -0
  207. package/lib/typescript/types/models/KlarnaShipping.d.ts +15 -0
  208. package/lib/typescript/types/models/KlarnaShipping.d.ts.map +1 -0
  209. package/lib/typescript/types/models/KlarnaShippingConfig.d.ts +9 -0
  210. package/lib/typescript/types/models/KlarnaShippingConfig.d.ts.map +1 -0
  211. package/lib/typescript/types/models/KlarnaShippingConfigMode.d.ts +5 -0
  212. package/lib/typescript/types/models/KlarnaShippingConfigMode.d.ts.map +1 -0
  213. package/lib/typescript/types/models/KlarnaShippingOption.d.ts +12 -0
  214. package/lib/typescript/types/models/KlarnaShippingOption.d.ts.map +1 -0
  215. package/lib/typescript/types/models/KlarnaShippingRecipient.d.ts +14 -0
  216. package/lib/typescript/types/models/KlarnaShippingRecipient.d.ts.map +1 -0
  217. package/lib/typescript/types/models/KlarnaShippingType.d.ts +25 -0
  218. package/lib/typescript/types/models/KlarnaShippingType.d.ts.map +1 -0
  219. package/lib/typescript/types/models/KlarnaShippingTypeAttribute.d.ts +21 -0
  220. package/lib/typescript/types/models/KlarnaShippingTypeAttribute.d.ts.map +1 -0
  221. package/lib/typescript/types/models/KlarnaSubscription.d.ts +14 -0
  222. package/lib/typescript/types/models/KlarnaSubscription.d.ts.map +1 -0
  223. package/lib/typescript/types/models/KlarnaSupplementaryPurchaseData.d.ts +21 -0
  224. package/lib/typescript/types/models/KlarnaSupplementaryPurchaseData.d.ts.map +1 -0
  225. package/lib/typescript/types/models/index.d.ts +22 -0
  226. package/lib/typescript/types/models/index.d.ts.map +1 -0
  227. package/package.json +120 -6
  228. package/react-native-klarna-network-payment.podspec +28 -0
  229. package/src/KlarnaNetworkPayment.ts +30 -0
  230. package/src/KlarnaNetworkPaymentImpl.ts +79 -0
  231. package/src/KlarnaNetworkPaymentMapper.ts +204 -0
  232. package/src/KlarnaPaymentButton.tsx +80 -0
  233. package/src/Specs/KlarnaPaymentButtonNativeComponent.ts +22 -0
  234. package/src/Specs/NativeKlarnaNetworkPayment.ts +17 -0
  235. package/src/index.tsx +63 -0
  236. package/src/types/KlarnaPaymentRequest.ts +19 -0
  237. package/src/types/KlarnaPaymentRequestState.ts +14 -0
  238. package/src/types/KlarnaPaymentRequestStateContext.ts +12 -0
  239. package/src/types/KlarnaPaymentRequestStateReason.ts +12 -0
  240. package/src/types/models/KlarnaBillingPlan.ts +17 -0
  241. package/src/types/models/KlarnaCollectCustomerProfileType.ts +18 -0
  242. package/src/types/models/KlarnaCustomer.ts +11 -0
  243. package/src/types/models/KlarnaFreeTrial.ts +6 -0
  244. package/src/types/models/KlarnaInterval.ts +10 -0
  245. package/src/types/models/KlarnaLineItem.ts +27 -0
  246. package/src/types/models/KlarnaOndemandService.ts +17 -0
  247. package/src/types/models/KlarnaPartnerCustomer.ts +15 -0
  248. package/src/types/models/KlarnaPaymentPresentation.ts +135 -0
  249. package/src/types/models/KlarnaPaymentRequestData.ts +24 -0
  250. package/src/types/models/KlarnaRequestCustomerToken.ts +9 -0
  251. package/src/types/models/KlarnaRequestCustomerTokenScope.ts +8 -0
  252. package/src/types/models/KlarnaShipping.ts +15 -0
  253. package/src/types/models/KlarnaShippingConfig.ts +9 -0
  254. package/src/types/models/KlarnaShippingConfigMode.ts +4 -0
  255. package/src/types/models/KlarnaShippingOption.ts +12 -0
  256. package/src/types/models/KlarnaShippingRecipient.ts +13 -0
  257. package/src/types/models/KlarnaShippingType.ts +24 -0
  258. package/src/types/models/KlarnaShippingTypeAttribute.ts +20 -0
  259. package/src/types/models/KlarnaSubscription.ts +14 -0
  260. package/src/types/models/KlarnaSupplementaryPurchaseData.ts +21 -0
  261. package/src/types/models/index.ts +35 -0
package/README.md CHANGED
@@ -1,45 +1,159 @@
1
- # @klarna/react-native-klarna-network-payment
1
+ # Klarna Network Payment SDK React Native
2
2
 
3
- ## ⚠️ IMPORTANT NOTICE ⚠️
3
+ [![NPM][npm-badge]][npm-url]
4
+ [![React Native][dependency-badge]][dependency-url]
5
+ [![Platform][platform-badge]][platform-url]
6
+ [![License][license-badge]][license-url]
7
+ [![Developed at Klarna][klarna-badge]][klarna-url]
4
8
 
5
- **This package is created solely for the purpose of setting up OIDC (OpenID Connect) trusted publishing with npm.**
9
+ React Native package for Klarna Network Payment. This library wraps KlarnaNetworkPayment and exposes payment request functionality directly on the `Klarna` instance via `klarna.payment`.
6
10
 
7
- This is **NOT** a functional package and contains **NO** code or functionality beyond the OIDC setup configuration.
11
+ Requires [`@klarna/react-native-klarna-network-core`](https://www.npmjs.com/package/@klarna/react-native-klarna-network-core) to be installed and initialized first.
8
12
 
9
- ## Purpose
13
+ **New Architecture only** (TurboModule).
10
14
 
11
- This package exists to:
12
- 1. Configure OIDC trusted publishing for the package name `@klarna/react-native-klarna-network-payment`
13
- 2. Enable secure, token-less publishing from CI/CD workflows
14
- 3. Establish provenance for packages published under this name
15
+ ## Requirements
15
16
 
16
- ## What is OIDC Trusted Publishing?
17
+ - iOS 13 or later.
18
+ - Android 5.0 (API 21) or later.
19
+ - React Native 0.76.0 or later (New Architecture required).
20
+ - `@klarna/react-native-klarna-network-core` installed and initialized.
17
21
 
18
- OIDC trusted publishing allows package maintainers to publish packages directly from their CI/CD workflows without needing to manage npm access tokens. Instead, it uses OpenID Connect to establish trust between the CI/CD provider (like GitHub Actions) and npm.
22
+ ## Getting started
19
23
 
20
- ## Setup Instructions
24
+ ### Add Dependency
21
25
 
22
- To properly configure OIDC trusted publishing for this package:
26
+ #### NPM
23
27
 
24
- 1. Go to [npmjs.com](https://www.npmjs.com/) and navigate to your package settings
25
- 2. Configure the trusted publisher (e.g., GitHub Actions)
26
- 3. Specify the repository and workflow that should be allowed to publish
27
- 4. Use the configured workflow to publish your actual package
28
+ ```shell
29
+ npm install @klarna/react-native-klarna-network-payment --save
30
+ ```
28
31
 
29
- ## DO NOT USE THIS PACKAGE
32
+ #### Yarn
30
33
 
31
- This package is a placeholder for OIDC configuration only. It:
32
- - Contains no executable code
33
- - Provides no functionality
34
- - Should not be installed as a dependency
35
- - Exists only for administrative purposes
34
+ ```shell
35
+ yarn add @klarna/react-native-klarna-network-payment
36
+ ```
36
37
 
37
- ## More Information
38
+ ## Usage
38
39
 
39
- For more details about npm's trusted publishing feature, see:
40
- - [npm Trusted Publishing Documentation](https://docs.npmjs.com/generating-provenance-statements)
41
- - [GitHub Actions OIDC Documentation](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)
40
+ Import this package once at app startup (e.g. in your root `index.js`) to activate the `payment` property on `Klarna`. After that, `klarna.payment` is available anywhere you have a `Klarna` instance.
42
41
 
43
- ---
42
+ ```ts
43
+ import '@klarna/react-native-klarna-network-payment';
44
+ ```
44
45
 
45
- **Maintained for OIDC setup purposes only**
46
+ ### Initiate with a payment request ID
47
+
48
+ Use this when a payment request already exists on the server side.
49
+
50
+ ```ts
51
+ import { Klarna } from '@klarna/react-native-klarna-network-core';
52
+
53
+ const klarna = await Klarna.initialize({
54
+ clientId: '...',
55
+ appReturnUrl: '...',
56
+ });
57
+
58
+ const paymentRequest = await klarna.payment.initiate('payment-request-id');
59
+ console.log(paymentRequest.state); // 'IN_PROGRESS'
60
+ ```
61
+
62
+ ### Initiate with payment request data
63
+
64
+ Use this to create and initiate a payment request in one step.
65
+
66
+ ```ts
67
+ import type { KlarnaPaymentRequestData } from '@klarna/react-native-klarna-network-payment';
68
+
69
+ const data: KlarnaPaymentRequestData = {
70
+ amount: 10000, // in minor currency units (e.g. cents)
71
+ currency: 'SEK',
72
+ paymentOptionId: 'option-id', // optional
73
+ paymentRequestReference: 'ref-123', // optional
74
+ };
75
+
76
+ const paymentRequest = await klarna.payment.initiate(data);
77
+ ```
78
+
79
+ ### Fetch a payment request
80
+
81
+ ```ts
82
+ const paymentRequest = await klarna.payment.fetch('payment-request-id');
83
+ ```
84
+
85
+ ### Cancel a payment request
86
+
87
+ ```ts
88
+ const paymentRequest = await klarna.payment.cancel('payment-request-id');
89
+ ```
90
+
91
+ ## API
92
+
93
+ ### `klarna.payment`
94
+
95
+ Accessible on any initialized `Klarna` instance after importing this package.
96
+
97
+ | Method | Signature | Description |
98
+ | ---------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
99
+ | `initiate` | `(paymentRequestIdOrData: string \| KlarnaPaymentRequestData) => Promise<KlarnaPaymentRequest>` | Initiates a payment request by ID or creates and initiates one from data. |
100
+ | `fetch` | `(paymentRequestId: string) => Promise<KlarnaPaymentRequest>` | Fetches the current state of a payment request. |
101
+ | `cancel` | `(paymentRequestId: string) => Promise<KlarnaPaymentRequest>` | Cancels a payment request. |
102
+
103
+ ### `KlarnaPaymentRequest`
104
+
105
+ | Field | Type | Description |
106
+ | ------------------------- | ------------------------------------------ | ---------------------------------------------- |
107
+ | `paymentRequestId` | `string` | Unique identifier for the payment request. |
108
+ | `state` | `KlarnaPaymentRequestState` | Current state of the payment request. |
109
+ | `previousState` | `KlarnaPaymentRequestState \| null` | Previous state, if any. |
110
+ | `stateContext` | `KlarnaPaymentRequestStateContext \| null` | Additional context for the current state. |
111
+ | `stateReason` | `KlarnaPaymentRequestStateReason \| null` | Reason for the current state, if any. |
112
+ | `paymentRequestReference` | `string \| null` | Partner-supplied reference for reconciliation. |
113
+
114
+ ### `KlarnaPaymentRequestState`
115
+
116
+ `'SUBMITTED' | 'IN_PROGRESS' | 'COMPLETED' | 'EXPIRED' | 'CANCELED' | 'DECLINED'`
117
+
118
+ ### `KlarnaPaymentRequestStateReason`
119
+
120
+ `'PARTNER_CANCELED' | 'PURCHASE_FLOW_ABORTED' | 'TECHNICAL_ERROR' | 'PAYMENT_DECLINED' | 'PAYMENT_REQUEST_SUBMITTED'`
121
+
122
+ ### `KlarnaPaymentRequestData`
123
+
124
+ | Field | Type | Required | Description |
125
+ | --------------------------- | ------------------------------------ | -------- | ----------------------------------------------------------- |
126
+ | `amount` | `number` | Yes | Total amount in minor currency units (e.g. cents). |
127
+ | `currency` | `string` | Yes | ISO 4217 currency code (e.g. `"SEK"`). |
128
+ | `paymentOptionId` | `string` | No | Pre-select a specific payment option in the flow. |
129
+ | `paymentRequestReference` | `string` | No | Partner reference for webhook correlation. |
130
+ | `requestCustomerToken` | `KlarnaRequestCustomerToken` | No | Request a customer token to be returned on completion. |
131
+ | `shippingConfig` | `KlarnaShippingConfig` | No | Configure shipping address collection. |
132
+ | `collectCustomerProfile` | `KlarnaCollectCustomerProfileType[]` | No | Customer profile fields to collect during the flow. |
133
+ | `supplementaryPurchaseData` | `KlarnaSupplementaryPurchaseData` | No | Line items, shipping, subscriptions, and on-demand details. |
134
+
135
+ ## Support
136
+
137
+ If you are having any issues using the SDK in your project or if you think that something is wrong with the SDK itself, please follow our [support guide](https://github.com/klarna/react-native-klarna-inapp-sdk/blob/master/SUPPORT.md).
138
+
139
+ ## Contribution
140
+
141
+ If you want to contribute to this project please follow our [contribution guide](https://github.com/klarna/react-native-klarna-inapp-sdk/blob/master/CONTRIBUTING.md).
142
+
143
+ ## License
144
+
145
+ This project is licensed under
146
+ [Apache License, Version 2.0](https://github.com/klarna/react-native-klarna-inapp-sdk/blob/master/LICENSE).
147
+
148
+ <!-- Markdown images & links -->
149
+
150
+ [npm-badge]: https://img.shields.io/npm/v/@klarna/react-native-klarna-network-payment?style=flat-square
151
+ [npm-url]: https://www.npmjs.com/package/@klarna/react-native-klarna-network-payment
152
+ [dependency-badge]: https://img.shields.io/npm/dependency-version/@klarna/react-native-klarna-network-payment/peer/react-native?style=flat-square
153
+ [dependency-url]: https://www.npmjs.com/package/@klarna/react-native-klarna-network-payment?activeTab=dependencies
154
+ [platform-badge]: https://img.shields.io/badge/platform-React%20Native-lightgrey?style=flat-square
155
+ [platform-url]: https://reactnative.dev
156
+ [license-badge]: https://img.shields.io/github/license/klarna/react-native-klarna-inapp-sdk?style=flat-square
157
+ [license-url]: https://github.com/klarna/react-native-klarna-inapp-sdk/blob/master/LICENSE
158
+ [klarna-badge]: https://img.shields.io/badge/%20-Developed%20at%20Klarna-black?labelColor=ffb3c7&style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAIRlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAALQAAAAAQAAAtAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABCgAwAEAAAAAQAAAA4AAAAA0LMKiwAAAAlwSFlzAABuugAAbroB1t6xFwAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAAVBJREFUKBVtkz0vREEUhsdXgo5qJXohkUgQ0fgFNFpR2V5ClP6CQu9PiB6lEL1I7B9A4/treZ47c252s97k2ffMmZkz5869m1JKL/AFbzAHaiRbmsIf4BdaMAZqMFsOXNxXkroKbxCPV5l8yHOJLVipn9/vEreLa7FguSN3S2ynA/ATeQuI8tTY6OOY34DQaQnq9mPCDtxoBwuRxPfAvPMWnARlB12KAi6eLTPruOOP4gcl33O6+Sjgc83DJkRH+h2MgorLzaPy68W48BG2S+xYnmAa1L+nOxEduMH3fgjGFvZeVkANZau68B6CrgJxWosFFpF7iG+h5wKZqwt42qIJtARu/ix+gqsosEq8D35o6R3c7OL4lAnTDljEe9B3Qa2BYzmHemDCt6Diwo6JY7E+A82OnN9HuoBruAQvUQ1nSxP4GVzBDRyBfygf6RW2/gD3NmEv+K/DZgAAAABJRU5ErkJggg==
159
+ [klarna-url]: https://github.com/klarna
@@ -0,0 +1,95 @@
1
+ def klarnaNetworkCorePkgJson = providers.exec {
2
+ commandLine "node", "--print",
3
+ "require.resolve('@klarna/react-native-klarna-network-core/package.json')"
4
+ }.standardOutput.asText.get().trim()
5
+
6
+ apply from: "${file(klarnaNetworkCorePkgJson).parent}/android/klarna-network-versions.gradle"
7
+
8
+ buildscript {
9
+ ext.KlarnaNetworkPayment = [
10
+ kotlinVersion: "2.0.21",
11
+ minSdkVersion: 21,
12
+ compileSdkVersion: 36,
13
+ targetSdkVersion: 36
14
+ ]
15
+
16
+ ext.getExtOrDefault = { prop ->
17
+ if (rootProject.ext.has(prop)) {
18
+ return rootProject.ext.get(prop)
19
+ }
20
+
21
+ return KlarnaNetworkPayment[prop]
22
+ }
23
+
24
+ repositories {
25
+ google()
26
+ mavenCentral()
27
+ }
28
+
29
+ dependencies {
30
+ classpath "com.android.tools.build:gradle:8.7.2"
31
+ // noinspection DifferentKotlinGradleVersion
32
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
33
+ }
34
+ }
35
+
36
+
37
+ apply plugin: "com.android.library"
38
+ apply plugin: "kotlin-android"
39
+
40
+ apply plugin: "com.facebook.react"
41
+
42
+ android {
43
+ namespace "com.klarna.mobile.sdk.reactnative.klarnanetwork.payment"
44
+
45
+ compileSdkVersion getExtOrDefault("compileSdkVersion")
46
+
47
+ defaultConfig {
48
+ minSdkVersion getExtOrDefault("minSdkVersion")
49
+ targetSdkVersion getExtOrDefault("targetSdkVersion")
50
+ }
51
+
52
+ buildFeatures {
53
+ buildConfig true
54
+ }
55
+
56
+ buildTypes {
57
+ release {
58
+ minifyEnabled false
59
+ }
60
+ }
61
+
62
+ lint {
63
+ disable "GradleCompatible"
64
+ }
65
+
66
+ testOptions {
67
+ unitTests.returnDefaultValues = true
68
+ }
69
+
70
+ compileOptions {
71
+ sourceCompatibility JavaVersion.VERSION_1_8
72
+ targetCompatibility JavaVersion.VERSION_1_8
73
+ }
74
+ }
75
+
76
+ repositories {
77
+ mavenCentral()
78
+ google()
79
+ maven {
80
+ url 'https://x.klarnacdn.net/mobile-sdk/'
81
+ }
82
+ }
83
+
84
+ dependencies {
85
+ implementation "com.facebook.react:react-android"
86
+
87
+ implementation "com.klarna.mobile.sdk:klarna-network-payment:${klarnaNetworkVersions.klarnaMobileSdkVersion}"
88
+ implementation "com.klarna.mobile.sdk:klarna-network-payment-button:${klarnaNetworkVersions.klarnaMobileSdkVersion}"
89
+ compileOnly project(":klarna_react-native-klarna-network-core")
90
+
91
+ testImplementation project(":klarna_react-native-klarna-network-core")
92
+ testImplementation "junit:junit:4.13.2"
93
+ testImplementation "org.jetbrains.kotlin:kotlin-test-junit:${getExtOrDefault('kotlinVersion')}"
94
+ testImplementation "io.mockk:mockk:1.14.5"
95
+ }
@@ -0,0 +1 @@
1
+ <manifest />
@@ -0,0 +1,22 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import android.view.View
4
+ import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.uimanager.SimpleViewManager
6
+ import com.facebook.react.uimanager.ViewManagerDelegate
7
+ import com.facebook.react.viewmanagers.KlarnaNetworkPaymentButtonManagerDelegate
8
+ import com.facebook.react.viewmanagers.KlarnaNetworkPaymentButtonManagerInterface
9
+
10
+ abstract class KlarnaNetworkPaymentButtonViewSpec<T : View> :
11
+ SimpleViewManager<T>(),
12
+ KlarnaNetworkPaymentButtonManagerInterface<T> {
13
+
14
+ private val delegate: ViewManagerDelegate<T> =
15
+ KlarnaNetworkPaymentButtonManagerDelegate(this)
16
+
17
+ override fun getDelegate(): ViewManagerDelegate<T> = delegate
18
+
19
+ override fun receiveCommand(root: T, commandId: String, args: ReadableArray) {
20
+ delegate.receiveCommand(root, commandId, args)
21
+ }
22
+ }
@@ -0,0 +1,46 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.module.annotations.ReactModule
6
+ import com.klarna.mobile.sdk.reactnative.klarnanetwork.payment.NativeKlarnaNetworkPaymentSpec
7
+ import com.facebook.react.bridge.ReadableMap
8
+
9
+ @ReactModule(name = KlarnaNetworkPaymentModule.NAME)
10
+ class KlarnaNetworkPaymentModule(reactContext: ReactApplicationContext) :
11
+ NativeKlarnaNetworkPaymentSpec(reactContext) {
12
+
13
+ private val impl = KlarnaNetworkPaymentModuleImpl(reactContext)
14
+
15
+ companion object {
16
+ const val NAME = NativeKlarnaNetworkPaymentSpec.NAME
17
+ }
18
+
19
+ override fun initiateWithId(instanceId: String, paymentRequestId: String, promise: Promise?) {
20
+ impl.initiateWithId(instanceId, paymentRequestId, promise)
21
+ }
22
+
23
+ override fun initiateWithData(instanceId: String, data: ReadableMap?, promise: Promise?) {
24
+ impl.initiateWithData(instanceId, data, promise)
25
+ }
26
+
27
+ override fun fetch(instanceId: String, paymentRequestId: String, promise: Promise?) {
28
+ impl.fetch(instanceId, paymentRequestId, promise)
29
+ }
30
+
31
+ override fun cancel(instanceId: String, paymentRequestId: String, promise: Promise?) {
32
+ impl.cancel(instanceId, paymentRequestId, promise)
33
+ }
34
+
35
+ override fun presentationFetch(instanceId: String, data: ReadableMap?, promise: Promise?) {
36
+ impl.presentationFetch(instanceId, data, promise)
37
+ }
38
+
39
+ override fun presentationHandleLink(instanceId: String, url: String, promise: Promise?) {
40
+ impl.presentationHandleLink(instanceId, url, promise)
41
+ }
42
+
43
+ override fun dispose(instanceId: String, promise: Promise?) {
44
+ impl.dispose(instanceId, promise)
45
+ }
46
+ }
@@ -0,0 +1,163 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import android.os.Handler
4
+ import android.os.Looper
5
+ import com.facebook.react.bridge.Promise
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.ReadableMap
8
+ import com.klarna.mobile.sdk.klarna.network.core.api.common.KlarnaResult
9
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationContent
10
+ import com.klarna.mobile.sdk.klarna.network.payment.api.payment
11
+ import com.klarna.mobile.sdk.reactnative.klarnanetwork.core.KlarnaNetworkCoreModuleImpl
12
+ import java.util.concurrent.ConcurrentHashMap
13
+
14
+ class KlarnaNetworkPaymentModuleImpl(
15
+ private val reactContext: ReactApplicationContext
16
+ ) {
17
+ companion object {
18
+ const val NAME = "KlarnaNetworkPayment"
19
+ private const val ERROR_ACTIVITY_NOT_FOUND = "Main Activity not found."
20
+ private const val ERROR_INSTANCE_NOT_FOUND = "No instance found for the given instanceId. Call initialize first."
21
+ private const val ERROR_NO_PRESENTATION_CONTENT = "No presentation content found. Call presentationFetch first."
22
+ val storedPresentationContent: ConcurrentHashMap<String, KlarnaPaymentPresentationContent> = ConcurrentHashMap()
23
+ }
24
+
25
+ fun initiateWithId(instanceId: String, paymentRequestId: String, promise: Promise?) {
26
+ val sdk = KlarnaNetworkCoreModuleImpl.getInstance(instanceId) ?: run {
27
+ promise?.reject(NAME, ERROR_INSTANCE_NOT_FOUND)
28
+ return
29
+ }
30
+ val activity = reactContext.currentActivity ?: run {
31
+ promise?.reject(NAME, ERROR_ACTIVITY_NOT_FOUND)
32
+ return
33
+ }
34
+ // PaymentControllerImpl calls fragmentManager.setFragmentResultListener() synchronously
35
+ // inside initiate(), which calls lifecycle.addObserver() — must run on the main thread.
36
+ Handler(Looper.getMainLooper()).post {
37
+ sdk.payment.initiate(activity = activity, paymentRequestId = paymentRequestId) { result ->
38
+ when (result) {
39
+ is KlarnaResult.Success -> promise?.resolve(result.value.toWritableMap())
40
+ is KlarnaResult.Failure -> promise?.reject(result.error.name, result.error.message)
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ fun initiateWithData(instanceId: String, data: ReadableMap?, promise: Promise?) {
47
+ val sdk = KlarnaNetworkCoreModuleImpl.getInstance(instanceId) ?: run {
48
+ promise?.reject(NAME, ERROR_INSTANCE_NOT_FOUND)
49
+ return
50
+ }
51
+ val activity = reactContext.currentActivity ?: run {
52
+ promise?.reject(NAME, ERROR_ACTIVITY_NOT_FOUND)
53
+ return
54
+ }
55
+ val paymentRequestData = try {
56
+ data?.let { KlarnaPaymentRequestMapper.buildPaymentRequestData(it) }
57
+ } catch (e: Exception) {
58
+ promise?.reject(NAME, e.message ?: "Invalid payment request data")
59
+ return
60
+ } ?: run {
61
+ promise?.reject(NAME, "data is required")
62
+ return
63
+ }
64
+ // Same as initiateWithId — must run on the main thread for the same reason.
65
+ Handler(Looper.getMainLooper()).post {
66
+ sdk.payment.initiate(activity = activity, paymentRequestData = paymentRequestData) { result ->
67
+ when (result) {
68
+ is KlarnaResult.Success -> promise?.resolve(result.value.toWritableMap())
69
+ is KlarnaResult.Failure -> promise?.reject(result.error.name, result.error.message)
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ // No Handler wrap needed: fetch and cancel dispatch to Dispatchers.Main internally.
76
+ fun fetch(instanceId: String, paymentRequestId: String, promise: Promise?) {
77
+ val sdk = KlarnaNetworkCoreModuleImpl.getInstance(instanceId) ?: run {
78
+ promise?.reject(NAME, ERROR_INSTANCE_NOT_FOUND)
79
+ return
80
+ }
81
+ sdk.payment.fetch(paymentRequestId = paymentRequestId) { result ->
82
+ when (result) {
83
+ is KlarnaResult.Success -> promise?.resolve(result.value.toWritableMap())
84
+ is KlarnaResult.Failure -> promise?.reject(result.error.name, result.error.message)
85
+ }
86
+ }
87
+ }
88
+
89
+ fun cancel(instanceId: String, paymentRequestId: String, promise: Promise?) {
90
+ val sdk = KlarnaNetworkCoreModuleImpl.getInstance(instanceId) ?: run {
91
+ promise?.reject(NAME, ERROR_INSTANCE_NOT_FOUND)
92
+ return
93
+ }
94
+ sdk.payment.cancel(paymentRequestId = paymentRequestId) { result ->
95
+ when (result) {
96
+ is KlarnaResult.Success -> promise?.resolve(result.value.toWritableMap())
97
+ is KlarnaResult.Failure -> promise?.reject(result.error.name, result.error.message)
98
+ }
99
+ }
100
+ }
101
+
102
+ // No Handler wrap needed: fetch dispatches to Dispatchers.Main internally.
103
+ fun presentationFetch(instanceId: String, data: ReadableMap?, promise: Promise?) {
104
+ val sdk = KlarnaNetworkCoreModuleImpl.getInstance(instanceId) ?: run {
105
+ promise?.reject(NAME, ERROR_INSTANCE_NOT_FOUND)
106
+ return
107
+ }
108
+ val presentationData = try {
109
+ data?.let { KlarnaPaymentRequestMapper.buildPresentationData(it) } ?: run {
110
+ promise?.reject(NAME, "data is required")
111
+ return
112
+ }
113
+ } catch (e: Exception) {
114
+ promise?.reject(NAME, e.message ?: "Invalid presentation data")
115
+ return
116
+ }
117
+ sdk.payment.presentation.fetch(data = presentationData) { result ->
118
+ when (result) {
119
+ is KlarnaResult.Success -> {
120
+ if (KlarnaNetworkCoreModuleImpl.getInstance(instanceId) != null) {
121
+ storedPresentationContent[instanceId] = result.value
122
+ }
123
+ promise?.resolve(result.value.toWritableMap())
124
+ }
125
+ is KlarnaResult.Failure -> promise?.reject(result.error.name, result.error.message)
126
+ }
127
+ }
128
+ }
129
+
130
+ fun presentationHandleLink(instanceId: String, url: String, promise: Promise?) {
131
+ val sdk = KlarnaNetworkCoreModuleImpl.getInstance(instanceId) ?: run {
132
+ promise?.reject(NAME, ERROR_INSTANCE_NOT_FOUND)
133
+ return
134
+ }
135
+ val activity = reactContext.currentActivity ?: run {
136
+ promise?.reject(NAME, ERROR_ACTIVITY_NOT_FOUND)
137
+ return
138
+ }
139
+ val content = storedPresentationContent[instanceId] ?: run {
140
+ promise?.reject(NAME, ERROR_NO_PRESENTATION_CONTENT)
141
+ return
142
+ }
143
+ // handleLink opens a browser/web flow and must run on the main thread.
144
+ Handler(Looper.getMainLooper()).post {
145
+ sdk.payment.presentation.handleLink(activity = activity, content = content, url = url) { result ->
146
+ when (result) {
147
+ is KlarnaResult.Success -> {
148
+ if (KlarnaNetworkCoreModuleImpl.getInstance(instanceId) != null) {
149
+ storedPresentationContent[instanceId] = result.value
150
+ }
151
+ promise?.resolve(result.value.toWritableMap())
152
+ }
153
+ is KlarnaResult.Failure -> promise?.reject(result.error.name, result.error.message)
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ fun dispose(instanceId: String, promise: Promise?) {
160
+ storedPresentationContent.remove(instanceId)
161
+ promise?.resolve(null)
162
+ }
163
+ }
@@ -0,0 +1,30 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.model.ReactModuleInfo
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider
8
+ import com.facebook.react.uimanager.ViewManager
9
+ import java.util.HashMap
10
+
11
+ class KlarnaNetworkPaymentPackage : BaseReactPackage() {
12
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? =
13
+ if (name == KlarnaNetworkPaymentModule.NAME) KlarnaNetworkPaymentModule(reactContext) else null
14
+
15
+ override fun getReactModuleInfoProvider() = ReactModuleInfoProvider {
16
+ mapOf(
17
+ KlarnaNetworkPaymentModule.NAME to ReactModuleInfo(
18
+ name = KlarnaNetworkPaymentModule.NAME,
19
+ className = KlarnaNetworkPaymentModule.NAME,
20
+ canOverrideExistingModule = false,
21
+ needsEagerInit = false,
22
+ isCxxModule = false,
23
+ isTurboModule = true
24
+ )
25
+ )
26
+ }
27
+
28
+ override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> =
29
+ listOf(KlarnaPaymentButtonViewManager())
30
+ }
@@ -0,0 +1,19 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import com.facebook.react.bridge.Arguments
4
+ import com.facebook.react.bridge.WritableMap
5
+ import com.facebook.react.uimanager.events.Event
6
+
7
+ internal class KlarnaPaymentButtonPressEvent(surfaceId: Int, viewId: Int) :
8
+ Event<KlarnaPaymentButtonPressEvent>(surfaceId, viewId) {
9
+
10
+ override fun getEventName(): String = EVENT_NAME
11
+
12
+ override fun canCoalesce(): Boolean = false
13
+
14
+ override fun getEventData(): WritableMap = Arguments.createMap()
15
+
16
+ companion object {
17
+ const val EVENT_NAME = "topButtonPress"
18
+ }
19
+ }