@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
@@ -0,0 +1,328 @@
1
+ package com.klarna.mobile.sdk.reactnative.klarnanetwork.payment
2
+
3
+ import com.facebook.react.bridge.ReadableArray
4
+ import com.facebook.react.bridge.ReadableMap
5
+ import com.klarna.mobile.sdk.klarna.network.core.api.models.KlarnaAddress
6
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaBillingPlan
7
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaCollectCustomerProfileType
8
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaFreeTrial
9
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaInterval
10
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaLineItem
11
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaOndemandService
12
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaPartnerCustomer
13
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaPaymentRequestData
14
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaRequestCustomerToken
15
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaRequestCustomerTokenScope
16
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShipping
17
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingConfig
18
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingConfigMode
19
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingOption
20
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingRecipient
21
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingType
22
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingTypeAttribute
23
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaSubscription
24
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaSupplementaryPurchaseData
25
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationData
26
+ import com.klarna.mobile.sdk.klarna.network.payment.api.presentation.models.KlarnaPaymentPresentationIntent
27
+ import java.text.SimpleDateFormat
28
+ import java.util.Locale
29
+ import java.util.TimeZone
30
+
31
+ internal object KlarnaPaymentRequestMapper {
32
+
33
+ // KlarnaPaymentRequestData
34
+ private const val AMOUNT = "amount"
35
+ private const val CURRENCY = "currency"
36
+ private const val PAYMENT_OPTION_ID = "paymentOptionId"
37
+ private const val PAYMENT_REQUEST_REFERENCE = "paymentRequestReference"
38
+ private const val REQUEST_CUSTOMER_TOKEN = "requestCustomerToken"
39
+ private const val SHIPPING_CONFIG = "shippingConfig"
40
+ private const val COLLECT_CUSTOMER_PROFILE = "collectCustomerProfile"
41
+ private const val SUPPLEMENTARY_PURCHASE_DATA = "supplementaryPurchaseData"
42
+
43
+ // KlarnaPaymentPresentationData
44
+ private const val INTENT = "intent"
45
+ private const val PAYMENT_PROGRAM_ENABLEMENT_CODES = "paymentProgramEnablementCodes"
46
+ private const val SUBSCRIPTION_BILLING_INTERVAL = "subscriptionBillingInterval"
47
+ private const val SUBSCRIPTION_BILLING_INTERVAL_FREQUENCY = "subscriptionBillingIntervalFrequency"
48
+
49
+ // KlarnaRequestCustomerToken
50
+ private const val SCOPES = "scopes"
51
+ private const val CUSTOMER_TOKEN_REFERENCE = "customerTokenReference"
52
+
53
+ // KlarnaShippingConfig
54
+ private const val MODE = "mode"
55
+ private const val SUPPORTED_COUNTRIES = "supportedCountries"
56
+
57
+ // KlarnaSupplementaryPurchaseData
58
+ private const val CUSTOMER = "customer"
59
+ private const val LINE_ITEMS = "lineItems"
60
+ private const val PURCHASE_REFERENCE = "purchaseReference"
61
+ private const val SHIPPING = "shipping"
62
+ private const val ONDEMAND_SERVICE = "ondemandService"
63
+ private const val SUBSCRIPTIONS = "subscriptions"
64
+
65
+ // KlarnaPartnerCustomer / KlarnaShippingRecipient (shared keys)
66
+ private const val ADDRESS = "address"
67
+ private const val EMAIL = "email"
68
+ private const val FAMILY_NAME = "familyName"
69
+ private const val GIVEN_NAME = "givenName"
70
+ private const val PHONE = "phone"
71
+
72
+ // KlarnaAddress
73
+ private const val CITY = "city"
74
+ private const val COUNTRY = "country"
75
+ private const val POSTAL_CODE = "postalCode"
76
+ private const val REGION = "region"
77
+ private const val STREET_ADDRESS = "streetAddress"
78
+ private const val STREET_ADDRESS2 = "streetAddress2"
79
+
80
+ // KlarnaLineItem
81
+ private const val IMAGE_URL = "imageUrl"
82
+ private const val LINE_ITEM_REFERENCE = "lineItemReference"
83
+ private const val NAME = "name"
84
+ private const val PRODUCT_IDENTIFIER = "productIdentifier"
85
+ private const val PRODUCT_URL = "productUrl"
86
+ private const val QUANTITY = "quantity"
87
+ private const val SHIPPING_REFERENCE = "shippingReference"
88
+ private const val SUBSCRIPTION_REFERENCE = "subscriptionReference"
89
+ private const val TOTAL_AMOUNT = "totalAmount"
90
+ private const val TOTAL_TAX_AMOUNT = "totalTaxAmount"
91
+ private const val UNIT_PRICE = "unitPrice"
92
+
93
+ // KlarnaShipping
94
+ private const val RECIPIENT = "recipient"
95
+ private const val SHIPPING_OPTION = "shippingOption"
96
+
97
+ // KlarnaShippingRecipient
98
+ private const val ATTENTION = "attention"
99
+
100
+ // KlarnaShippingOption
101
+ private const val SHIPPING_TYPE = "shippingType"
102
+ private const val SHIPPING_TYPE_ATTRIBUTES = "shippingTypeAttributes"
103
+ private const val SHIPPING_CARRIER = "shippingCarrier"
104
+
105
+ // KlarnaOndemandService
106
+ private const val AVERAGE_AMOUNT = "averageAmount"
107
+ private const val MINIMUM_AMOUNT = "minimumAmount"
108
+ private const val MAXIMUM_AMOUNT = "maximumAmount"
109
+ private const val PURCHASE_INTERVAL = "purchaseInterval"
110
+ private const val PURCHASE_INTERVAL_FREQUENCY = "purchaseIntervalFrequency"
111
+
112
+ // KlarnaSubscription
113
+ private const val FREE_TRIAL = "freeTrial"
114
+ private const val BILLING_PLANS = "billingPlans"
115
+
116
+ // KlarnaBillingPlan
117
+ private const val FROM = "from"
118
+ private const val INTERVAL = "interval"
119
+ private const val INTERVAL_FREQUENCY = "intervalFrequency"
120
+ private const val BILLING_AMOUNT = "billingAmount"
121
+
122
+ fun buildPaymentRequestData(data: ReadableMap): KlarnaPaymentRequestData {
123
+ require(data.hasKey(AMOUNT)) { "Amount is required" }
124
+ val currency = data.getString(CURRENCY)
125
+ require(!currency.isNullOrEmpty()) { "Currency is required" }
126
+ return KlarnaPaymentRequestData(
127
+ amount = data.getDouble(AMOUNT).toLong(),
128
+ currency = currency,
129
+ paymentOptionId = data.getString(PAYMENT_OPTION_ID),
130
+ paymentRequestReference = data.getString(PAYMENT_REQUEST_REFERENCE),
131
+ requestCustomerToken = data.getMap(REQUEST_CUSTOMER_TOKEN)?.let { buildRequestCustomerToken(it) },
132
+ shippingConfig = data.getMap(SHIPPING_CONFIG)?.let { buildShippingConfig(it) },
133
+ collectCustomerProfile = data.getArray(COLLECT_CUSTOMER_PROFILE)?.let { buildCollectCustomerProfile(it) },
134
+ supplementaryPurchaseData = data.getMap(SUPPLEMENTARY_PURCHASE_DATA)?.let { buildSupplementaryPurchaseData(it) },
135
+ )
136
+ }
137
+
138
+ fun buildPresentationData(map: ReadableMap): KlarnaPaymentPresentationData {
139
+ return KlarnaPaymentPresentationData(
140
+ amount = map.getDouble(AMOUNT).toLong(),
141
+ currency = map.getString(CURRENCY) ?: "",
142
+ intent = map.getString(INTENT)?.let { raw ->
143
+ KlarnaPaymentPresentationIntent.entries.find { it.toString() == raw }
144
+ },
145
+ paymentProgramEnablementCodes = map.getArray(PAYMENT_PROGRAM_ENABLEMENT_CODES)?.let { arr ->
146
+ (0 until arr.size()).mapNotNull { arr.getString(it) }
147
+ },
148
+ subscriptionBillingInterval = map.getString(SUBSCRIPTION_BILLING_INTERVAL)?.let { raw ->
149
+ KlarnaInterval.entries.find { it.toString() == raw }
150
+ },
151
+ subscriptionBillingIntervalFrequency = if (map.hasKey(SUBSCRIPTION_BILLING_INTERVAL_FREQUENCY) &&
152
+ !map.isNull(SUBSCRIPTION_BILLING_INTERVAL_FREQUENCY))
153
+ map.getInt(SUBSCRIPTION_BILLING_INTERVAL_FREQUENCY) else null,
154
+ )
155
+ }
156
+
157
+ private fun buildRequestCustomerToken(map: ReadableMap): KlarnaRequestCustomerToken {
158
+ val scopes = map.getArray(SCOPES)?.let { arr ->
159
+ (0 until arr.size()).mapNotNull { i ->
160
+ KlarnaRequestCustomerTokenScope.entries.find { it.toString() == arr.getString(i) }
161
+ }
162
+ } ?: emptyList()
163
+ return KlarnaRequestCustomerToken(
164
+ scopes = scopes,
165
+ customerTokenReference = map.getString(CUSTOMER_TOKEN_REFERENCE),
166
+ )
167
+ }
168
+
169
+ private fun buildShippingConfig(map: ReadableMap): KlarnaShippingConfig {
170
+ val mode = KlarnaShippingConfigMode.entries.find { it.toString() == map.getString(MODE) }
171
+ ?: KlarnaShippingConfigMode.EDITABLE
172
+ val supportedCountries = map.getArray(SUPPORTED_COUNTRIES)?.let { arr ->
173
+ (0 until arr.size()).map { arr.getString(it) ?: "" }
174
+ }
175
+ return KlarnaShippingConfig(supportedCountries = supportedCountries, mode = mode)
176
+ }
177
+
178
+ private fun buildCollectCustomerProfile(arr: ReadableArray): List<KlarnaCollectCustomerProfileType> {
179
+ return (0 until arr.size()).mapNotNull { i ->
180
+ KlarnaCollectCustomerProfileType.entries.find { it.toString() == arr.getString(i) }
181
+ }
182
+ }
183
+
184
+ private fun buildSupplementaryPurchaseData(map: ReadableMap): KlarnaSupplementaryPurchaseData {
185
+ return KlarnaSupplementaryPurchaseData(
186
+ customer = map.getMap(CUSTOMER)?.let { buildPartnerCustomer(it) },
187
+ lineItems = map.getArray(LINE_ITEMS)?.let { arr ->
188
+ (0 until arr.size()).mapNotNull { i -> arr.getMap(i)?.let { buildLineItem(it) } }
189
+ },
190
+ purchaseReference = map.getString(PURCHASE_REFERENCE),
191
+ shipping = map.getArray(SHIPPING)?.let { arr ->
192
+ (0 until arr.size()).mapNotNull { i -> arr.getMap(i)?.let { buildShipping(it) } }
193
+ },
194
+ ondemandService = map.getMap(ONDEMAND_SERVICE)?.let { buildOndemandService(it) },
195
+ subscriptions = map.getArray(SUBSCRIPTIONS)?.let { arr ->
196
+ (0 until arr.size()).mapNotNull { i -> arr.getMap(i)?.let { buildSubscription(it) } }
197
+ },
198
+ )
199
+ }
200
+
201
+ private fun buildPartnerCustomer(map: ReadableMap): KlarnaPartnerCustomer {
202
+ return KlarnaPartnerCustomer(
203
+ address = map.getMap(ADDRESS)?.let { buildAddress(it) },
204
+ email = map.getString(EMAIL),
205
+ familyName = map.getString(FAMILY_NAME),
206
+ givenName = map.getString(GIVEN_NAME),
207
+ phone = map.getString(PHONE),
208
+ )
209
+ }
210
+
211
+ private fun buildAddress(map: ReadableMap): KlarnaAddress {
212
+ return KlarnaAddress(
213
+ city = map.getString(CITY),
214
+ country = map.getString(COUNTRY),
215
+ postalCode = map.getString(POSTAL_CODE),
216
+ region = map.getString(REGION),
217
+ streetAddress = map.getString(STREET_ADDRESS),
218
+ streetAddress2 = map.getString(STREET_ADDRESS2),
219
+ )
220
+ }
221
+
222
+ private fun buildLineItem(map: ReadableMap): KlarnaLineItem? {
223
+ val name = map.getString(NAME) ?: return null
224
+ if (!map.hasKey(TOTAL_AMOUNT) || map.isNull(TOTAL_AMOUNT)) return null
225
+ if (!map.hasKey(QUANTITY) || map.isNull(QUANTITY)) return null
226
+ return KlarnaLineItem(
227
+ currency = map.getString(CURRENCY),
228
+ imageUrl = map.getString(IMAGE_URL),
229
+ lineItemReference = map.getString(LINE_ITEM_REFERENCE),
230
+ name = name,
231
+ productIdentifier = map.getString(PRODUCT_IDENTIFIER),
232
+ productUrl = map.getString(PRODUCT_URL),
233
+ quantity = map.getInt(QUANTITY),
234
+ shippingReference = map.getString(SHIPPING_REFERENCE),
235
+ subscriptionReference = map.getString(SUBSCRIPTION_REFERENCE),
236
+ totalAmount = map.getDouble(TOTAL_AMOUNT).toLong(),
237
+ totalTaxAmount = if (map.hasKey(TOTAL_TAX_AMOUNT) && !map.isNull(TOTAL_TAX_AMOUNT)) map.getDouble(TOTAL_TAX_AMOUNT).toLong() else null,
238
+ unitPrice = if (map.hasKey(UNIT_PRICE) && !map.isNull(UNIT_PRICE)) map.getDouble(UNIT_PRICE).toLong() else null,
239
+ )
240
+ }
241
+
242
+ private fun buildShipping(map: ReadableMap): KlarnaShipping {
243
+ return KlarnaShipping(
244
+ address = map.getMap(ADDRESS)?.let { buildAddress(it) },
245
+ recipient = map.getMap(RECIPIENT)?.let { buildShippingRecipient(it) },
246
+ shippingOption = map.getMap(SHIPPING_OPTION)?.let { buildShippingOption(it) },
247
+ shippingReference = map.getString(SHIPPING_REFERENCE),
248
+ )
249
+ }
250
+
251
+ private fun buildShippingRecipient(map: ReadableMap): KlarnaShippingRecipient {
252
+ return KlarnaShippingRecipient(
253
+ attention = map.getString(ATTENTION),
254
+ email = map.getString(EMAIL),
255
+ familyName = map.getString(FAMILY_NAME) ?: "",
256
+ givenName = map.getString(GIVEN_NAME) ?: "",
257
+ phone = map.getString(PHONE),
258
+ )
259
+ }
260
+
261
+ private fun buildShippingOption(map: ReadableMap): KlarnaShippingOption {
262
+ val shippingType = KlarnaShippingType.entries.find { it.toString() == map.getString(SHIPPING_TYPE) }
263
+ ?: KlarnaShippingType.TO_DOOR
264
+ val attrs = map.getArray(SHIPPING_TYPE_ATTRIBUTES)?.let { arr ->
265
+ (0 until arr.size()).mapNotNull { i ->
266
+ KlarnaShippingTypeAttribute.entries.find { it.toString() == arr.getString(i) }
267
+ }
268
+ }
269
+ return KlarnaShippingOption(
270
+ shippingCarrier = map.getString(SHIPPING_CARRIER),
271
+ shippingType = shippingType,
272
+ shippingTypeAttributes = attrs,
273
+ )
274
+ }
275
+
276
+ private fun buildOndemandService(map: ReadableMap): KlarnaOndemandService {
277
+ return KlarnaOndemandService(
278
+ currency = map.getString(CURRENCY),
279
+ averageAmount = if (map.hasKey(AVERAGE_AMOUNT) && !map.isNull(AVERAGE_AMOUNT)) map.getDouble(AVERAGE_AMOUNT).toLong() else null,
280
+ minimumAmount = if (map.hasKey(MINIMUM_AMOUNT) && !map.isNull(MINIMUM_AMOUNT)) map.getDouble(MINIMUM_AMOUNT).toLong() else null,
281
+ maximumAmount = if (map.hasKey(MAXIMUM_AMOUNT) && !map.isNull(MAXIMUM_AMOUNT)) map.getDouble(MAXIMUM_AMOUNT).toLong() else null,
282
+ purchaseInterval = map.getString(PURCHASE_INTERVAL)?.let { raw -> KlarnaInterval.entries.find { it.toString() == raw } },
283
+ purchaseIntervalFrequency = if (map.hasKey(PURCHASE_INTERVAL_FREQUENCY) && !map.isNull(PURCHASE_INTERVAL_FREQUENCY)) map.getInt(PURCHASE_INTERVAL_FREQUENCY) else null,
284
+ )
285
+ }
286
+
287
+ private fun buildSubscription(map: ReadableMap): KlarnaSubscription {
288
+ return KlarnaSubscription(
289
+ subscriptionReference = map.getString(SUBSCRIPTION_REFERENCE) ?: "",
290
+ name = map.getString(NAME),
291
+ freeTrial = map.getString(FREE_TRIAL)?.let { raw -> KlarnaFreeTrial.entries.find { it.toString() == raw } },
292
+ billingPlans = map.getArray(BILLING_PLANS)?.let { arr ->
293
+ (0 until arr.size()).mapNotNull { i -> arr.getMap(i)?.let { buildBillingPlan(it) } }
294
+ },
295
+ )
296
+ }
297
+
298
+ private fun buildBillingPlan(map: ReadableMap): KlarnaBillingPlan? {
299
+ val fromStr = map.getString(FROM) ?: return null
300
+ val interval = KlarnaInterval.entries.find { it.toString() == map.getString(INTERVAL) } ?: return null
301
+ val from = parseIso8601Date(fromStr) ?: return null
302
+ if (!map.hasKey(BILLING_AMOUNT) || !map.hasKey(INTERVAL_FREQUENCY)) return null
303
+ return KlarnaBillingPlan(
304
+ billingAmount = map.getDouble(BILLING_AMOUNT).toLong(),
305
+ from = from,
306
+ interval = interval,
307
+ intervalFrequency = map.getInt(INTERVAL_FREQUENCY),
308
+ currency = map.getString(CURRENCY),
309
+ )
310
+ }
311
+
312
+ private fun parseIso8601Date(isoStr: String): java.util.Date? {
313
+ val formats = listOf(
314
+ "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
315
+ "yyyy-MM-dd'T'HH:mm:ss'Z'",
316
+ )
317
+ return formats.firstNotNullOfOrNull { pattern ->
318
+ try {
319
+ SimpleDateFormat(pattern, Locale.US).apply {
320
+ isLenient = false
321
+ timeZone = TimeZone.getTimeZone("UTC")
322
+ }.parse(isoStr)
323
+ } catch (e: Exception) {
324
+ null
325
+ }
326
+ }
327
+ }
328
+ }
@@ -0,0 +1,145 @@
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.klarna.mobile.sdk.klarna.network.core.api.models.KlarnaAddress
6
+ import com.klarna.mobile.sdk.klarna.network.core.api.models.KlarnaCustomerProfile
7
+ import com.klarna.mobile.sdk.klarna.network.payment.api.KlarnaPaymentRequest
8
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaCustomer
9
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaPaymentRequestStateContext
10
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShipping
11
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingOption
12
+ import com.klarna.mobile.sdk.klarna.network.payment.api.models.KlarnaShippingRecipient
13
+
14
+ internal fun KlarnaPaymentRequest.toWritableMap(): WritableMap = Arguments.createMap().apply {
15
+ putString(ResponseKeys.PAYMENT_REQUEST_ID, paymentRequestId)
16
+ putString(ResponseKeys.STATE, state.toString())
17
+ putString(ResponseKeys.PREVIOUS_STATE, previousState?.toString())
18
+ putString(ResponseKeys.STATE_REASON, stateReason?.toString())
19
+ putString(ResponseKeys.PAYMENT_REQUEST_REFERENCE, paymentRequestReference)
20
+ val ctx = stateContext
21
+ if (ctx != null) putMap(ResponseKeys.STATE_CONTEXT, ctx.toWritableMap()) else putNull(ResponseKeys.STATE_CONTEXT)
22
+ }
23
+
24
+ internal fun KlarnaPaymentRequestStateContext.toWritableMap(): WritableMap = Arguments.createMap().apply {
25
+ putString(ResponseKeys.KLARNA_NETWORK_SESSION_TOKEN, klarnaNetworkSessionToken)
26
+ val customer = klarnaCustomer
27
+ if (customer != null) putMap(ResponseKeys.KLARNA_CUSTOMER, customer.toWritableMap()) else putNull(ResponseKeys.KLARNA_CUSTOMER)
28
+ val ship = shipping
29
+ if (ship != null) putMap(ResponseKeys.SHIPPING, ship.toWritableMap()) else putNull(ResponseKeys.SHIPPING)
30
+ }
31
+
32
+ internal fun KlarnaCustomer.toWritableMap(): WritableMap = Arguments.createMap().apply {
33
+ putString(ResponseKeys.CUSTOMER_TOKEN, customerToken)
34
+ putString(ResponseKeys.CUSTOMER_TOKEN_REFERENCE, customerTokenReference)
35
+ val profile = customerProfile
36
+ if (profile != null) putMap(ResponseKeys.CUSTOMER_PROFILE, profile.toWritableMap()) else putNull(ResponseKeys.CUSTOMER_PROFILE)
37
+ }
38
+
39
+ internal fun KlarnaCustomerProfile.toWritableMap(): WritableMap = Arguments.createMap().apply {
40
+ val addr = address
41
+ if (addr != null) putMap(ResponseKeys.ADDRESS, addr.toWritableMap()) else putNull(ResponseKeys.ADDRESS)
42
+ putString(ResponseKeys.CUSTOMER_ID, customerId)
43
+ putString(ResponseKeys.COUNTRY, country)
44
+ putString(ResponseKeys.EMAIL, email)
45
+ val ev = emailVerified
46
+ if (ev != null) putBoolean(ResponseKeys.EMAIL_VERIFIED, ev) else putNull(ResponseKeys.EMAIL_VERIFIED)
47
+ putString(ResponseKeys.FAMILY_NAME, familyName)
48
+ putString(ResponseKeys.GIVEN_NAME, givenName)
49
+ putString(ResponseKeys.LOCALE, locale)
50
+ putString(ResponseKeys.PHONE, phone)
51
+ val pv = phoneVerified
52
+ if (pv != null) putBoolean(ResponseKeys.PHONE_VERIFIED, pv) else putNull(ResponseKeys.PHONE_VERIFIED)
53
+ }
54
+
55
+ internal fun KlarnaShipping.toWritableMap(): WritableMap = Arguments.createMap().apply {
56
+ val addr = address
57
+ if (addr != null) putMap(ResponseKeys.ADDRESS, addr.toWritableMap()) else putNull(ResponseKeys.ADDRESS)
58
+ val rec = recipient
59
+ if (rec != null) putMap(ResponseKeys.RECIPIENT, rec.toWritableMap()) else putNull(ResponseKeys.RECIPIENT)
60
+ val opt = shippingOption
61
+ if (opt != null) putMap(ResponseKeys.SHIPPING_OPTION, opt.toWritableMap()) else putNull(ResponseKeys.SHIPPING_OPTION)
62
+ putString(ResponseKeys.SHIPPING_REFERENCE, shippingReference)
63
+ }
64
+
65
+ internal fun KlarnaAddress.toWritableMap(): WritableMap = Arguments.createMap().apply {
66
+ putString(ResponseKeys.CITY, city)
67
+ putString(ResponseKeys.COUNTRY, country)
68
+ putString(ResponseKeys.POSTAL_CODE, postalCode)
69
+ putString(ResponseKeys.REGION, region)
70
+ putString(ResponseKeys.STREET_ADDRESS, streetAddress)
71
+ putString(ResponseKeys.STREET_ADDRESS2, streetAddress2)
72
+ }
73
+
74
+ internal fun KlarnaShippingRecipient.toWritableMap(): WritableMap = Arguments.createMap().apply {
75
+ putString(ResponseKeys.ATTENTION, attention)
76
+ putString(ResponseKeys.EMAIL, email)
77
+ putString(ResponseKeys.FAMILY_NAME, familyName)
78
+ putString(ResponseKeys.GIVEN_NAME, givenName)
79
+ putString(ResponseKeys.PHONE, phone)
80
+ }
81
+
82
+ internal fun KlarnaShippingOption.toWritableMap(): WritableMap = Arguments.createMap().apply {
83
+ putString(ResponseKeys.SHIPPING_CARRIER, shippingCarrier)
84
+ putString(ResponseKeys.SHIPPING_TYPE, shippingType.toString())
85
+ val attrs = shippingTypeAttributes
86
+ if (attrs != null) {
87
+ val arr = Arguments.createArray()
88
+ attrs.forEach { arr.pushString(it.toString()) }
89
+ putArray(ResponseKeys.SHIPPING_TYPE_ATTRIBUTES, arr)
90
+ } else {
91
+ putNull(ResponseKeys.SHIPPING_TYPE_ATTRIBUTES)
92
+ }
93
+ }
94
+
95
+ private object ResponseKeys {
96
+ // KlarnaPaymentRequest
97
+ const val PAYMENT_REQUEST_ID = "paymentRequestId"
98
+ const val STATE = "state"
99
+ const val PREVIOUS_STATE = "previousState"
100
+ const val STATE_REASON = "stateReason"
101
+ const val PAYMENT_REQUEST_REFERENCE = "paymentRequestReference"
102
+ const val STATE_CONTEXT = "stateContext"
103
+
104
+ // KlarnaPaymentRequestStateContext
105
+ const val KLARNA_NETWORK_SESSION_TOKEN = "klarnaNetworkSessionToken"
106
+ const val KLARNA_CUSTOMER = "klarnaCustomer"
107
+ const val SHIPPING = "shipping"
108
+
109
+ // KlarnaCustomer
110
+ const val CUSTOMER_TOKEN = "customerToken"
111
+ const val CUSTOMER_TOKEN_REFERENCE = "customerTokenReference"
112
+ const val CUSTOMER_PROFILE = "customerProfile"
113
+
114
+ // KlarnaCustomerProfile / KlarnaAddress / KlarnaShippingRecipient (shared keys)
115
+ const val ADDRESS = "address"
116
+ const val CUSTOMER_ID = "customerId"
117
+ const val COUNTRY = "country"
118
+ const val EMAIL = "email"
119
+ const val EMAIL_VERIFIED = "emailVerified"
120
+ const val FAMILY_NAME = "familyName"
121
+ const val GIVEN_NAME = "givenName"
122
+ const val LOCALE = "locale"
123
+ const val PHONE = "phone"
124
+ const val PHONE_VERIFIED = "phoneVerified"
125
+
126
+ // KlarnaAddress
127
+ const val CITY = "city"
128
+ const val POSTAL_CODE = "postalCode"
129
+ const val REGION = "region"
130
+ const val STREET_ADDRESS = "streetAddress"
131
+ const val STREET_ADDRESS2 = "streetAddress2"
132
+
133
+ // KlarnaShipping
134
+ const val RECIPIENT = "recipient"
135
+ const val SHIPPING_OPTION = "shippingOption"
136
+ const val SHIPPING_REFERENCE = "shippingReference"
137
+
138
+ // KlarnaShippingRecipient
139
+ const val ATTENTION = "attention"
140
+
141
+ // KlarnaShippingOption
142
+ const val SHIPPING_CARRIER = "shippingCarrier"
143
+ const val SHIPPING_TYPE = "shippingType"
144
+ const val SHIPPING_TYPE_ATTRIBUTES = "shippingTypeAttributes"
145
+ }