@klarna/react-native-klarna-network-payment 0.0.1 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -29
- package/android/build.gradle +95 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentButtonViewSpec.kt +22 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModule.kt +46 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModuleImpl.kt +163 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentPackage.kt +30 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonPressEvent.kt +19 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonViewManager.kt +276 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentPresentationMapper.kt +132 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentRequestMapper.kt +328 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentResponseMapper.kt +145 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaNetworkPaymentModuleImplTest.kt +361 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentButtonViewManagerTest.kt +155 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentPresentationMapperTest.kt +447 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentRequestMapperTest.kt +489 -0
- package/android/src/test/java/com/klarna/mobile/sdk/reactnative/klarnanetwork/payment/KlarnaPaymentResponseMapperTest.kt +456 -0
- package/ios/Sources/KlarnaNetworkPayment.h +5 -0
- package/ios/Sources/KlarnaNetworkPayment.mm +110 -0
- package/ios/Sources/KlarnaNetworkPaymentModuleImpl.swift +196 -0
- package/ios/Sources/KlarnaPaymentButtonComponentView.mm +147 -0
- package/ios/Sources/KlarnaPaymentButtonViewImpl.swift +78 -0
- package/ios/Sources/KlarnaPaymentPresentationMapping.swift +102 -0
- package/ios/Sources/KlarnaPaymentRequestDataMapping.swift +232 -0
- package/ios/Sources/KlarnaPaymentRequestMapping.swift +103 -0
- package/ios/Tests/KlarnaNetworkPaymentModuleImplTests.swift +143 -0
- package/ios/Tests/KlarnaPaymentButtonViewImplTests.swift +122 -0
- package/ios/Tests/KlarnaPaymentPresentationMappingTests.swift +335 -0
- package/lib/commonjs/KlarnaNetworkPayment.js +6 -0
- package/lib/commonjs/KlarnaNetworkPayment.js.map +1 -0
- package/lib/commonjs/KlarnaNetworkPaymentImpl.js +44 -0
- package/lib/commonjs/KlarnaNetworkPaymentImpl.js.map +1 -0
- package/lib/commonjs/KlarnaNetworkPaymentMapper.js +164 -0
- package/lib/commonjs/KlarnaNetworkPaymentMapper.js.map +1 -0
- package/lib/commonjs/KlarnaPaymentButton.js +43 -0
- package/lib/commonjs/KlarnaPaymentButton.js.map +1 -0
- package/lib/commonjs/Specs/KlarnaPaymentButtonNativeComponent.js +10 -0
- package/lib/commonjs/Specs/KlarnaPaymentButtonNativeComponent.js.map +1 -0
- package/lib/commonjs/Specs/NativeKlarnaNetworkPayment.js +13 -0
- package/lib/commonjs/Specs/NativeKlarnaNetworkPayment.js.map +1 -0
- package/lib/commonjs/index.js +51 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/types/KlarnaPaymentRequest.js +6 -0
- package/lib/commonjs/types/KlarnaPaymentRequest.js.map +1 -0
- package/lib/commonjs/types/KlarnaPaymentRequestState.js +2 -0
- package/lib/commonjs/types/KlarnaPaymentRequestState.js.map +1 -0
- package/lib/commonjs/types/KlarnaPaymentRequestStateContext.js +6 -0
- package/lib/commonjs/types/KlarnaPaymentRequestStateContext.js.map +1 -0
- package/lib/commonjs/types/KlarnaPaymentRequestStateReason.js +2 -0
- package/lib/commonjs/types/KlarnaPaymentRequestStateReason.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaBillingPlan.js +6 -0
- package/lib/commonjs/types/models/KlarnaBillingPlan.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaCollectCustomerProfileType.js +2 -0
- package/lib/commonjs/types/models/KlarnaCollectCustomerProfileType.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaCustomer.js +6 -0
- package/lib/commonjs/types/models/KlarnaCustomer.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaFreeTrial.js +2 -0
- package/lib/commonjs/types/models/KlarnaFreeTrial.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaInterval.js +2 -0
- package/lib/commonjs/types/models/KlarnaInterval.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaLineItem.js +2 -0
- package/lib/commonjs/types/models/KlarnaLineItem.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaOndemandService.js +6 -0
- package/lib/commonjs/types/models/KlarnaOndemandService.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaPartnerCustomer.js +6 -0
- package/lib/commonjs/types/models/KlarnaPartnerCustomer.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaPaymentPresentation.js +6 -0
- package/lib/commonjs/types/models/KlarnaPaymentPresentation.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaPaymentRequestData.js +6 -0
- package/lib/commonjs/types/models/KlarnaPaymentRequestData.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaRequestCustomerToken.js +6 -0
- package/lib/commonjs/types/models/KlarnaRequestCustomerToken.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaRequestCustomerTokenScope.js +2 -0
- package/lib/commonjs/types/models/KlarnaRequestCustomerTokenScope.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaShipping.js +6 -0
- package/lib/commonjs/types/models/KlarnaShipping.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaShippingConfig.js +6 -0
- package/lib/commonjs/types/models/KlarnaShippingConfig.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaShippingConfigMode.js +2 -0
- package/lib/commonjs/types/models/KlarnaShippingConfigMode.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaShippingOption.js +6 -0
- package/lib/commonjs/types/models/KlarnaShippingOption.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaShippingRecipient.js +2 -0
- package/lib/commonjs/types/models/KlarnaShippingRecipient.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaShippingType.js +2 -0
- package/lib/commonjs/types/models/KlarnaShippingType.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaShippingTypeAttribute.js +2 -0
- package/lib/commonjs/types/models/KlarnaShippingTypeAttribute.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaSubscription.js +6 -0
- package/lib/commonjs/types/models/KlarnaSubscription.js.map +1 -0
- package/lib/commonjs/types/models/KlarnaSupplementaryPurchaseData.js +6 -0
- package/lib/commonjs/types/models/KlarnaSupplementaryPurchaseData.js.map +1 -0
- package/lib/commonjs/types/models/index.js +2 -0
- package/lib/commonjs/types/models/index.js.map +1 -0
- package/lib/module/KlarnaNetworkPayment.js +2 -0
- package/lib/module/KlarnaNetworkPayment.js.map +1 -0
- package/lib/module/KlarnaNetworkPaymentImpl.js +36 -0
- package/lib/module/KlarnaNetworkPaymentImpl.js.map +1 -0
- package/lib/module/KlarnaNetworkPaymentMapper.js +146 -0
- package/lib/module/KlarnaNetworkPaymentMapper.js.map +1 -0
- package/lib/module/KlarnaPaymentButton.js +37 -0
- package/lib/module/KlarnaPaymentButton.js.map +1 -0
- package/lib/module/Specs/KlarnaPaymentButtonNativeComponent.js +3 -0
- package/lib/module/Specs/KlarnaPaymentButtonNativeComponent.js.map +1 -0
- package/lib/module/Specs/NativeKlarnaNetworkPayment.js +9 -0
- package/lib/module/Specs/NativeKlarnaNetworkPayment.js.map +1 -0
- package/lib/module/index.js +40 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/types/KlarnaPaymentRequest.js +2 -0
- package/lib/module/types/KlarnaPaymentRequest.js.map +1 -0
- package/lib/module/types/KlarnaPaymentRequestState.js +2 -0
- package/lib/module/types/KlarnaPaymentRequestState.js.map +1 -0
- package/lib/module/types/KlarnaPaymentRequestStateContext.js +2 -0
- package/lib/module/types/KlarnaPaymentRequestStateContext.js.map +1 -0
- package/lib/module/types/KlarnaPaymentRequestStateReason.js +2 -0
- package/lib/module/types/KlarnaPaymentRequestStateReason.js.map +1 -0
- package/lib/module/types/models/KlarnaBillingPlan.js +2 -0
- package/lib/module/types/models/KlarnaBillingPlan.js.map +1 -0
- package/lib/module/types/models/KlarnaCollectCustomerProfileType.js +2 -0
- package/lib/module/types/models/KlarnaCollectCustomerProfileType.js.map +1 -0
- package/lib/module/types/models/KlarnaCustomer.js +2 -0
- package/lib/module/types/models/KlarnaCustomer.js.map +1 -0
- package/lib/module/types/models/KlarnaFreeTrial.js +2 -0
- package/lib/module/types/models/KlarnaFreeTrial.js.map +1 -0
- package/lib/module/types/models/KlarnaInterval.js +2 -0
- package/lib/module/types/models/KlarnaInterval.js.map +1 -0
- package/lib/module/types/models/KlarnaLineItem.js +2 -0
- package/lib/module/types/models/KlarnaLineItem.js.map +1 -0
- package/lib/module/types/models/KlarnaOndemandService.js +2 -0
- package/lib/module/types/models/KlarnaOndemandService.js.map +1 -0
- package/lib/module/types/models/KlarnaPartnerCustomer.js +2 -0
- package/lib/module/types/models/KlarnaPartnerCustomer.js.map +1 -0
- package/lib/module/types/models/KlarnaPaymentPresentation.js +2 -0
- package/lib/module/types/models/KlarnaPaymentPresentation.js.map +1 -0
- package/lib/module/types/models/KlarnaPaymentRequestData.js +2 -0
- package/lib/module/types/models/KlarnaPaymentRequestData.js.map +1 -0
- package/lib/module/types/models/KlarnaRequestCustomerToken.js +2 -0
- package/lib/module/types/models/KlarnaRequestCustomerToken.js.map +1 -0
- package/lib/module/types/models/KlarnaRequestCustomerTokenScope.js +2 -0
- package/lib/module/types/models/KlarnaRequestCustomerTokenScope.js.map +1 -0
- package/lib/module/types/models/KlarnaShipping.js +2 -0
- package/lib/module/types/models/KlarnaShipping.js.map +1 -0
- package/lib/module/types/models/KlarnaShippingConfig.js +2 -0
- package/lib/module/types/models/KlarnaShippingConfig.js.map +1 -0
- package/lib/module/types/models/KlarnaShippingConfigMode.js +2 -0
- package/lib/module/types/models/KlarnaShippingConfigMode.js.map +1 -0
- package/lib/module/types/models/KlarnaShippingOption.js +2 -0
- package/lib/module/types/models/KlarnaShippingOption.js.map +1 -0
- package/lib/module/types/models/KlarnaShippingRecipient.js +2 -0
- package/lib/module/types/models/KlarnaShippingRecipient.js.map +1 -0
- package/lib/module/types/models/KlarnaShippingType.js +2 -0
- package/lib/module/types/models/KlarnaShippingType.js.map +1 -0
- package/lib/module/types/models/KlarnaShippingTypeAttribute.js +2 -0
- package/lib/module/types/models/KlarnaShippingTypeAttribute.js.map +1 -0
- package/lib/module/types/models/KlarnaSubscription.js +2 -0
- package/lib/module/types/models/KlarnaSubscription.js.map +1 -0
- package/lib/module/types/models/KlarnaSupplementaryPurchaseData.js +2 -0
- package/lib/module/types/models/KlarnaSupplementaryPurchaseData.js.map +1 -0
- package/lib/module/types/models/index.js +2 -0
- package/lib/module/types/models/index.js.map +1 -0
- package/lib/typescript/KlarnaNetworkPayment.d.ts +22 -0
- package/lib/typescript/KlarnaNetworkPayment.d.ts.map +1 -0
- package/lib/typescript/KlarnaNetworkPaymentImpl.d.ts +12 -0
- package/lib/typescript/KlarnaNetworkPaymentImpl.d.ts.map +1 -0
- package/lib/typescript/KlarnaNetworkPaymentMapper.d.ts +273 -0
- package/lib/typescript/KlarnaNetworkPaymentMapper.d.ts.map +1 -0
- package/lib/typescript/KlarnaPaymentButton.d.ts +51 -0
- package/lib/typescript/KlarnaPaymentButton.d.ts.map +1 -0
- package/lib/typescript/Specs/KlarnaPaymentButtonNativeComponent.d.ts +16 -0
- package/lib/typescript/Specs/KlarnaPaymentButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/Specs/NativeKlarnaNetworkPayment.d.ts +13 -0
- package/lib/typescript/Specs/NativeKlarnaNetworkPayment.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +14 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/types/KlarnaPaymentRequest.d.ts +19 -0
- package/lib/typescript/types/KlarnaPaymentRequest.d.ts.map +1 -0
- package/lib/typescript/types/KlarnaPaymentRequestState.d.ts +15 -0
- package/lib/typescript/types/KlarnaPaymentRequestState.d.ts.map +1 -0
- package/lib/typescript/types/KlarnaPaymentRequestStateContext.d.ts +12 -0
- package/lib/typescript/types/KlarnaPaymentRequestStateContext.d.ts.map +1 -0
- package/lib/typescript/types/KlarnaPaymentRequestStateReason.d.ts +13 -0
- package/lib/typescript/types/KlarnaPaymentRequestStateReason.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaBillingPlan.d.ts +17 -0
- package/lib/typescript/types/models/KlarnaBillingPlan.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaCollectCustomerProfileType.d.ts +19 -0
- package/lib/typescript/types/models/KlarnaCollectCustomerProfileType.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaCustomer.d.ts +11 -0
- package/lib/typescript/types/models/KlarnaCustomer.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaFreeTrial.d.ts +7 -0
- package/lib/typescript/types/models/KlarnaFreeTrial.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaInterval.d.ts +11 -0
- package/lib/typescript/types/models/KlarnaInterval.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaLineItem.d.ts +28 -0
- package/lib/typescript/types/models/KlarnaLineItem.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaOndemandService.d.ts +17 -0
- package/lib/typescript/types/models/KlarnaOndemandService.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaPartnerCustomer.d.ts +15 -0
- package/lib/typescript/types/models/KlarnaPartnerCustomer.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaPaymentPresentation.d.ts +119 -0
- package/lib/typescript/types/models/KlarnaPaymentPresentation.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaPaymentRequestData.d.ts +24 -0
- package/lib/typescript/types/models/KlarnaPaymentRequestData.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaRequestCustomerToken.d.ts +9 -0
- package/lib/typescript/types/models/KlarnaRequestCustomerToken.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaRequestCustomerTokenScope.d.ts +9 -0
- package/lib/typescript/types/models/KlarnaRequestCustomerTokenScope.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaShipping.d.ts +15 -0
- package/lib/typescript/types/models/KlarnaShipping.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaShippingConfig.d.ts +9 -0
- package/lib/typescript/types/models/KlarnaShippingConfig.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaShippingConfigMode.d.ts +5 -0
- package/lib/typescript/types/models/KlarnaShippingConfigMode.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaShippingOption.d.ts +12 -0
- package/lib/typescript/types/models/KlarnaShippingOption.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaShippingRecipient.d.ts +14 -0
- package/lib/typescript/types/models/KlarnaShippingRecipient.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaShippingType.d.ts +25 -0
- package/lib/typescript/types/models/KlarnaShippingType.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaShippingTypeAttribute.d.ts +21 -0
- package/lib/typescript/types/models/KlarnaShippingTypeAttribute.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaSubscription.d.ts +14 -0
- package/lib/typescript/types/models/KlarnaSubscription.d.ts.map +1 -0
- package/lib/typescript/types/models/KlarnaSupplementaryPurchaseData.d.ts +21 -0
- package/lib/typescript/types/models/KlarnaSupplementaryPurchaseData.d.ts.map +1 -0
- package/lib/typescript/types/models/index.d.ts +22 -0
- package/lib/typescript/types/models/index.d.ts.map +1 -0
- package/package.json +120 -6
- package/react-native-klarna-network-payment.podspec +29 -0
- package/src/KlarnaNetworkPayment.ts +30 -0
- package/src/KlarnaNetworkPaymentImpl.ts +79 -0
- package/src/KlarnaNetworkPaymentMapper.ts +204 -0
- package/src/KlarnaPaymentButton.tsx +80 -0
- package/src/Specs/KlarnaPaymentButtonNativeComponent.ts +22 -0
- package/src/Specs/NativeKlarnaNetworkPayment.ts +17 -0
- package/src/index.tsx +63 -0
- package/src/types/KlarnaPaymentRequest.ts +19 -0
- package/src/types/KlarnaPaymentRequestState.ts +14 -0
- package/src/types/KlarnaPaymentRequestStateContext.ts +12 -0
- package/src/types/KlarnaPaymentRequestStateReason.ts +12 -0
- package/src/types/models/KlarnaBillingPlan.ts +17 -0
- package/src/types/models/KlarnaCollectCustomerProfileType.ts +18 -0
- package/src/types/models/KlarnaCustomer.ts +11 -0
- package/src/types/models/KlarnaFreeTrial.ts +6 -0
- package/src/types/models/KlarnaInterval.ts +10 -0
- package/src/types/models/KlarnaLineItem.ts +27 -0
- package/src/types/models/KlarnaOndemandService.ts +17 -0
- package/src/types/models/KlarnaPartnerCustomer.ts +15 -0
- package/src/types/models/KlarnaPaymentPresentation.ts +135 -0
- package/src/types/models/KlarnaPaymentRequestData.ts +24 -0
- package/src/types/models/KlarnaRequestCustomerToken.ts +9 -0
- package/src/types/models/KlarnaRequestCustomerTokenScope.ts +8 -0
- package/src/types/models/KlarnaShipping.ts +15 -0
- package/src/types/models/KlarnaShippingConfig.ts +9 -0
- package/src/types/models/KlarnaShippingConfigMode.ts +4 -0
- package/src/types/models/KlarnaShippingOption.ts +12 -0
- package/src/types/models/KlarnaShippingRecipient.ts +13 -0
- package/src/types/models/KlarnaShippingType.ts +24 -0
- package/src/types/models/KlarnaShippingTypeAttribute.ts +20 -0
- package/src/types/models/KlarnaSubscription.ts +14 -0
- package/src/types/models/KlarnaSupplementaryPurchaseData.ts +21 -0
- package/src/types/models/index.ts +35 -0
package/README.md
CHANGED
|
@@ -1,45 +1,159 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Klarna Network Payment SDK React Native
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13
|
+
**New Architecture only** (TurboModule).
|
|
10
14
|
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
22
|
+
## Getting started
|
|
19
23
|
|
|
20
|
-
|
|
24
|
+
### Add Dependency
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
#### NPM
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
32
|
+
#### Yarn
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
##
|
|
38
|
+
## Usage
|
|
38
39
|
|
|
39
|
-
|
|
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
|
-
|
|
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
|
+
}
|