@primer-io/react-native 0.13.0-beta.1 → 0.15.2
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/android/build.gradle +6 -2
- package/android/consumer-rules.pro +12 -0
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +192 -153
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +131 -86
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +3 -14
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +4 -3
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +14 -0
- package/ios/DataModels/PrimerErrorRN.swift +1 -1
- package/ios/DataModels/PrimerSettingsRN.swift +6 -0
- package/ios/RNTPrimer.m +43 -0
- package/ios/RNTPrimer.swift +394 -0
- package/ios/ReactNative-Bridging-Header.h +3 -0
- package/ios/ReactNative.xcodeproj/project.pbxproj +44 -0
- package/lib/commonjs/Primer.js +220 -209
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +145 -0
- package/lib/commonjs/RNPrimer.js.map +1 -0
- package/lib/commonjs/index.js +1 -28
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/primer-intent.js.map +1 -1
- package/lib/commonjs/models/utils/redirectScheme.js +4 -0
- package/lib/commonjs/models/utils/redirectScheme.js.map +1 -0
- package/lib/module/Primer.js +204 -210
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +136 -0
- package/lib/module/RNPrimer.js.map +1 -0
- package/lib/module/index.js +3 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/primer-intent.js.map +1 -1
- package/lib/module/models/utils/redirectScheme.js +2 -0
- package/lib/module/models/utils/redirectScheme.js.map +1 -0
- package/lib/typescript/Primer.d.ts +13 -0
- package/lib/typescript/RNPrimer.d.ts +24 -0
- package/lib/typescript/index.d.ts +1 -3
- package/lib/typescript/models/primer-callbacks.d.ts +7 -9
- package/lib/typescript/models/primer-config.d.ts +16 -13
- package/lib/typescript/models/primer-intent.d.ts +1 -1
- package/lib/typescript/models/primer-request.d.ts +2 -12
- package/lib/typescript/models/primer-settings.d.ts +5 -6
- package/lib/typescript/models/primer.d.ts +4 -4
- package/lib/typescript/models/utils/redirectScheme.d.ts +3 -0
- package/package.json +4 -1
- package/primer-io-react-native.podspec +2 -3
- package/src/Primer.ts +227 -178
- package/src/RNPrimer.ts +170 -0
- package/src/index.tsx +2 -3
- package/src/models/primer-callbacks.ts +9 -27
- package/src/models/primer-config.ts +23 -20
- package/src/models/primer-intent.ts +1 -1
- package/src/models/primer-request.ts +2 -16
- package/src/models/primer-settings.ts +5 -6
- package/src/models/primer.ts +5 -5
- package/src/models/utils/redirectScheme.ts +5 -0
- package/android/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +0 -83
- package/android/src/main/java/com/primerioreactnative/PrimerHeadlessUniversalCheckout.kt +0 -201
- package/android/src/main/java/com/primerioreactnative/huc/assets/AssetsManager.kt +0 -56
- package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +0 -11
- package/android/src/main/java/com/primerioreactnative/huc/extensions/Map.kt +0 -10
- package/ios/Core/PrimerRN+PrimerDelegate.swift +0 -148
- package/ios/Core/PrimerRN.m +0 -34
- package/ios/Core/PrimerRN.swift +0 -168
- package/ios/Core/ReactNative-Bridging-Header.h +0 -13
- package/ios/Headless Universal Checkout/RNTPrimerCardNumberInputElementManager.m +0 -23
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +0 -30
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +0 -241
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +0 -14
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +0 -117
- package/lib/commonjs/PrimerInput.js +0 -80
- package/lib/commonjs/PrimerInput.js.map +0 -1
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -14
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +0 -1
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -73
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -119
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/headless_checkout/types.js +0 -2
- package/lib/commonjs/headless_checkout/types.js.map +0 -1
- package/lib/module/PrimerInput.js +0 -46
- package/lib/module/PrimerInput.js.map +0 -1
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -5
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +0 -1
- package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -64
- package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -104
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/headless_checkout/types.js +0 -2
- package/lib/module/headless_checkout/types.js.map +0 -1
- package/lib/typescript/PrimerInput.d.ts +0 -15
- package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +0 -1
- package/lib/typescript/headless_checkout/NativePrimerHeadlessUniversalCheckout.d.ts +0 -10
- package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +0 -14
- package/lib/typescript/headless_checkout/types.d.ts +0 -16
- package/src/PrimerInput.tsx +0 -73
- package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +0 -2
- package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +0 -94
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +0 -136
- package/src/headless_checkout/types.ts +0 -18
|
@@ -1,47 +1,50 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
OnSavedPaymentInstrumentsFetchedCallback,
|
|
6
|
-
OnTokenAddedToVaultCallback,
|
|
7
|
-
OnTokenizeSuccessCallback,
|
|
8
|
-
} from './primer-callbacks';
|
|
1
|
+
import type { IClientSessionAction } from 'src/Primer';
|
|
2
|
+
import type { IPrimerError } from 'src/RNPrimer';
|
|
3
|
+
import type { PaymentInstrumentToken } from './payment-instrument-token';
|
|
4
|
+
import type { PrimerResumeHandler } from './primer-request';
|
|
9
5
|
import type { PrimerSettings } from './primer-settings';
|
|
10
6
|
import type { PrimerTheme } from './primer-theme';
|
|
11
7
|
|
|
12
|
-
export
|
|
13
|
-
interface IPrimerConfig {
|
|
8
|
+
export interface IPrimerConfig {
|
|
14
9
|
/**
|
|
15
10
|
* Include data for different payment methods (e.g. amount or business details)
|
|
16
11
|
*/
|
|
17
12
|
settings?: PrimerSettings;
|
|
13
|
+
|
|
18
14
|
/**
|
|
19
15
|
* Set colors and dimensions for the Primer UI.
|
|
20
16
|
*/
|
|
21
17
|
theme?: PrimerTheme;
|
|
18
|
+
|
|
19
|
+
// onClientTokenCallback?: (resumeHandler: PrimerResumeHandler) => void;
|
|
20
|
+
|
|
22
21
|
/**
|
|
23
|
-
* Use this callback to grab a Primer payment instrument
|
|
22
|
+
* Use this callback to grab a Primer payment instrument and complete a payment.
|
|
24
23
|
*/
|
|
25
|
-
onTokenizeSuccess?:
|
|
24
|
+
onTokenizeSuccess?: (paymentInstrument: PaymentInstrumentToken, resumeHandler: PrimerResumeHandler) => void;
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Use this callback to resume a PENDING payment with the token provided.
|
|
28
|
+
*/
|
|
29
|
+
onResumeSuccess?: (resumeToken: string, resumeHandler: PrimerResumeHandler | null) => void;
|
|
28
30
|
|
|
29
31
|
/**
|
|
30
32
|
* Use this callback to perform some action when a payment instrument was saved to Primer.
|
|
31
33
|
*/
|
|
32
|
-
onTokenAddedToVault?:
|
|
34
|
+
onTokenAddedToVault?: (paymentInstrument: PaymentInstrumentToken) => void;
|
|
35
|
+
|
|
33
36
|
/**
|
|
34
37
|
* Use this callback to perform some action when the Primer UI is dismissed.
|
|
35
38
|
*/
|
|
36
|
-
onDismiss?:
|
|
39
|
+
onDismiss?: () => void;
|
|
40
|
+
|
|
37
41
|
/**
|
|
38
42
|
* Use this callback to perform some action when the SDK throws an error.
|
|
39
43
|
*/
|
|
40
|
-
onError?:
|
|
44
|
+
onError?: (err: IPrimerError, resumeHandler: PrimerResumeHandler) => void;
|
|
45
|
+
|
|
41
46
|
/**
|
|
42
|
-
* Use this to
|
|
47
|
+
* Use this callback to perform actions on payment methods, like surcharging.
|
|
43
48
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
onClientSessionActions?: OnClientSessionActionsCallback;
|
|
49
|
+
onClientSessionActions?: (clientSessionActions: IClientSessionAction[], resumeHandler: PrimerResumeHandler | null) => void;
|
|
47
50
|
}
|
|
@@ -34,7 +34,7 @@ const paymentMethods = [
|
|
|
34
34
|
export type SinglePrimerPaymentMethod = typeof paymentMethods[number];
|
|
35
35
|
export interface AnyPrimerPaymentMethodIntent {
|
|
36
36
|
vault: boolean;
|
|
37
|
-
paymentMethod:
|
|
37
|
+
paymentMethod: SinglePrimerPaymentMethod;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export type PrimerPaymentMethodIntent = ISinglePrimerPaymentMethodIntent;
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
export type PrimerResumeHandler = IPrimerResumeHandler;
|
|
2
2
|
|
|
3
3
|
interface IPrimerResumeHandler {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
handleNewClientToken: (clientToken: string) => void;
|
|
5
|
+
handleError: (error: Error) => void;
|
|
6
6
|
handleSuccess: () => void;
|
|
7
|
-
|
|
8
|
-
handleNewClientToken: (token: string) => void;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @deprecated This method should not be used
|
|
12
|
-
* Please use handleError instead.
|
|
13
|
-
*/
|
|
14
|
-
resumeWithError: (error: string | null) => void;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @deprecated This method should not be used.
|
|
18
|
-
* Please use handleSuccess or handleNewClientToken instead.
|
|
19
|
-
*/
|
|
20
|
-
resumeWithSuccess: (clientToken: string | null) => void;
|
|
21
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CountryCode } from './utils/countryCode';
|
|
2
2
|
import type { CurrencyCode } from './utils/currencyCode';
|
|
3
|
+
import type { RedirectScheme } from './utils/redirectScheme';
|
|
3
4
|
|
|
4
5
|
export type PrimerSettings = IPrimerSettings;
|
|
5
6
|
interface IPrimerSettings {
|
|
@@ -20,7 +21,7 @@ interface IOrder {
|
|
|
20
21
|
|
|
21
22
|
interface IOrderItem {
|
|
22
23
|
name: string;
|
|
23
|
-
|
|
24
|
+
amount: number;
|
|
24
25
|
quantity: number;
|
|
25
26
|
isPending?: boolean;
|
|
26
27
|
}
|
|
@@ -46,10 +47,11 @@ interface IOptions {
|
|
|
46
47
|
isResultScreenEnabled?: boolean;
|
|
47
48
|
isLoadingScreenEnabled?: boolean;
|
|
48
49
|
isFullScreenEnabled?: boolean;
|
|
49
|
-
|
|
50
|
+
is3DSOnVaultingEnabled?: boolean;
|
|
51
|
+
is3DSDevelopmentModeEnabled?: boolean;
|
|
50
52
|
locale?: string;
|
|
51
53
|
ios?: IIosOptions;
|
|
52
|
-
|
|
54
|
+
redirectScheme?: RedirectScheme;
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
interface IIosOptions {
|
|
@@ -57,9 +59,6 @@ interface IIosOptions {
|
|
|
57
59
|
urlSchemeIdentifier?: string;
|
|
58
60
|
merchantIdentifier?: string;
|
|
59
61
|
}
|
|
60
|
-
interface IAndroidOptions {
|
|
61
|
-
redirectScheme?: string;
|
|
62
|
-
}
|
|
63
62
|
|
|
64
63
|
interface IAddress {
|
|
65
64
|
line1?: String;
|
package/src/models/primer.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IPrimerConfig } from './primer-config';
|
|
2
2
|
import type { PrimerPaymentMethodIntent } from './primer-intent';
|
|
3
3
|
|
|
4
4
|
export interface IPrimer {
|
|
@@ -11,7 +11,7 @@ export interface IPrimer {
|
|
|
11
11
|
* @param config Configuration object for the SDK. Use this to set listeners, theme,
|
|
12
12
|
* and payment method specific settings.
|
|
13
13
|
*/
|
|
14
|
-
showUniversalCheckout(token:
|
|
14
|
+
showUniversalCheckout(token: string | null, config: IPrimerConfig): void;
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Launch Primer's Vault Manager.
|
|
@@ -20,7 +20,7 @@ export interface IPrimer {
|
|
|
20
20
|
* @param config Configuration object for the SDK. Use this to set listeners, theme,
|
|
21
21
|
* and payment method specific settings.
|
|
22
22
|
*/
|
|
23
|
-
showVaultManager(token:
|
|
23
|
+
showVaultManager(token: string | null, config: IPrimerConfig): void;
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Launch checkout with a specific payment method
|
|
@@ -29,9 +29,9 @@ export interface IPrimer {
|
|
|
29
29
|
* @param config Configuration for the SDK.
|
|
30
30
|
*/
|
|
31
31
|
showPaymentMethod(
|
|
32
|
-
token:
|
|
32
|
+
token: string | null,
|
|
33
33
|
intent: PrimerPaymentMethodIntent,
|
|
34
|
-
config:
|
|
34
|
+
config: IPrimerConfig
|
|
35
35
|
): void;
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
package com.primerioreactnative
|
|
2
|
-
|
|
3
|
-
import android.content.res.ColorStateList
|
|
4
|
-
import android.graphics.Color
|
|
5
|
-
import android.graphics.drawable.ColorDrawable
|
|
6
|
-
import android.graphics.drawable.GradientDrawable
|
|
7
|
-
import android.view.ViewGroup
|
|
8
|
-
import android.widget.EditText
|
|
9
|
-
import android.widget.LinearLayout
|
|
10
|
-
import android.widget.TextView
|
|
11
|
-
import com.facebook.drawee.backends.pipeline.Fresco
|
|
12
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
13
|
-
import com.facebook.react.uimanager.SimpleViewManager
|
|
14
|
-
import com.facebook.react.uimanager.ThemedReactContext
|
|
15
|
-
import com.facebook.react.uimanager.ViewProps
|
|
16
|
-
import com.facebook.react.uimanager.annotations.ReactProp
|
|
17
|
-
import com.facebook.react.views.image.ReactImageView
|
|
18
|
-
import io.primer.android.components.manager.PrimerCardManager
|
|
19
|
-
import io.primer.android.components.manager.PrimerUniversalCheckoutCardManagerInterface
|
|
20
|
-
import io.primer.android.components.ui.widgets.*
|
|
21
|
-
|
|
22
|
-
val listOfTextInputs = mutableListOf<PrimerEditText>()
|
|
23
|
-
|
|
24
|
-
class PrimerCardNumberEditTextManager : SimpleViewManager<PrimerCardNumberEditText>() {
|
|
25
|
-
|
|
26
|
-
override fun getName(): String {
|
|
27
|
-
return REACT_CLASS
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
override fun createViewInstance(reactContext: ThemedReactContext): PrimerCardNumberEditText {
|
|
31
|
-
val editText = PrimerCardNumberEditText(reactContext)
|
|
32
|
-
return editText
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
companion object {
|
|
36
|
-
const val REACT_CLASS = "PrimerCardNumberEditText"
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
class PrimerCardholderNameEditTextManager : SimpleViewManager<PrimerCardholderNameEditText>() {
|
|
41
|
-
|
|
42
|
-
override fun getName(): String {
|
|
43
|
-
return REACT_CLASS
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
override fun createViewInstance(reactContext: ThemedReactContext): PrimerCardholderNameEditText {
|
|
47
|
-
return PrimerCardholderNameEditText(reactContext)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
companion object {
|
|
51
|
-
const val REACT_CLASS = "PrimerCardholderNameEditText"
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
class PrimerExpiryEditTextManager : SimpleViewManager<PrimerExpiryEditText>() {
|
|
56
|
-
|
|
57
|
-
override fun getName(): String {
|
|
58
|
-
return REACT_CLASS
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
override fun createViewInstance(reactContext: ThemedReactContext): PrimerExpiryEditText {
|
|
62
|
-
return PrimerExpiryEditText(reactContext)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
companion object {
|
|
66
|
-
const val REACT_CLASS = "PrimerExpiryEditText"
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
class PrimerCvvEditTextManager : SimpleViewManager<PrimerCvvEditText>() {
|
|
71
|
-
|
|
72
|
-
override fun getName(): String {
|
|
73
|
-
return REACT_CLASS
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
override fun createViewInstance(reactContext: ThemedReactContext): PrimerCvvEditText {
|
|
77
|
-
return PrimerCvvEditText(reactContext)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
companion object {
|
|
81
|
-
const val REACT_CLASS = "PrimerCvvEditText"
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
package com.primerioreactnative
|
|
2
|
-
|
|
3
|
-
import androidx.annotation.Nullable
|
|
4
|
-
import androidx.core.content.ContextCompat
|
|
5
|
-
import com.facebook.react.bridge.*
|
|
6
|
-
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
7
|
-
import com.primerioreactnative.datamodels.ErrorTypeRN
|
|
8
|
-
import com.primerioreactnative.datamodels.PrimerErrorRN
|
|
9
|
-
import com.primerioreactnative.datamodels.PrimerPaymentInstrumentTokenRN
|
|
10
|
-
import com.primerioreactnative.datamodels.PrimerSettingsRN
|
|
11
|
-
import com.primerioreactnative.huc.assets.AssetsManager
|
|
12
|
-
import com.primerioreactnative.huc.assets.AssetsManager.drawableToBitmap
|
|
13
|
-
import com.primerioreactnative.huc.assets.AssetsManager.getFile
|
|
14
|
-
import com.primerioreactnative.huc.events.PrimerHeadlessUniversalCheckoutEvent
|
|
15
|
-
import com.primerioreactnative.huc.extensions.toArgumentsMap
|
|
16
|
-
import io.primer.android.completion.ResumeHandler
|
|
17
|
-
import io.primer.android.components.PrimerHeadlessUniversalCheckout
|
|
18
|
-
import io.primer.android.components.PrimerHeadlessUniversalCheckoutListener
|
|
19
|
-
import io.primer.android.components.domain.core.models.PrimerHeadlessUniversalCheckoutPaymentMethod
|
|
20
|
-
import io.primer.android.components.ui.assets.ImageType
|
|
21
|
-
import io.primer.android.model.dto.*
|
|
22
|
-
import kotlinx.serialization.decodeFromString
|
|
23
|
-
import kotlinx.serialization.encodeToString
|
|
24
|
-
import kotlinx.serialization.json.Json
|
|
25
|
-
|
|
26
|
-
class PrimerHeadlessUniversalCheckout(
|
|
27
|
-
private val reactContext: ReactApplicationContext,
|
|
28
|
-
private val json: Json,
|
|
29
|
-
) : ReactContextBaseJavaModule(reactContext), PrimerHeadlessUniversalCheckoutListener {
|
|
30
|
-
|
|
31
|
-
override fun getName(): String {
|
|
32
|
-
return "PrimerHeadlessUniversalCheckout"
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
private var resumeHandler: ResumeHandler? = null
|
|
36
|
-
private var successCallback: Callback? = null
|
|
37
|
-
|
|
38
|
-
@ReactMethod
|
|
39
|
-
fun startWithClientToken(
|
|
40
|
-
clientToken: String,
|
|
41
|
-
settingsStr: String?,
|
|
42
|
-
errorCallback: Callback,
|
|
43
|
-
successCallback: Callback
|
|
44
|
-
) {
|
|
45
|
-
try {
|
|
46
|
-
val settings = json.decodeFromString<PrimerSettingsRN>(settingsStr.orEmpty())
|
|
47
|
-
this.successCallback = successCallback
|
|
48
|
-
PrimerHeadlessUniversalCheckout.current.start(
|
|
49
|
-
reactContext,
|
|
50
|
-
clientToken,
|
|
51
|
-
PrimerConfig(settings = settings.format()),
|
|
52
|
-
this
|
|
53
|
-
)
|
|
54
|
-
} catch (e: Exception) {
|
|
55
|
-
errorCallback.invoke(
|
|
56
|
-
json.encodeToString(
|
|
57
|
-
PrimerErrorRN(
|
|
58
|
-
ErrorTypeRN.InitFailed,
|
|
59
|
-
"failed to initialise PrimerHeadlessUniversalCheckout SDK, error: $e",
|
|
60
|
-
)
|
|
61
|
-
)
|
|
62
|
-
)
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
@ReactMethod
|
|
67
|
-
fun resumeWithClientToken(resumeToken: String) {
|
|
68
|
-
this.resumeHandler?.handleNewClientToken(resumeToken)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
@ReactMethod
|
|
72
|
-
fun showPaymentMethod(paymentMethodType: String) {
|
|
73
|
-
val primerPaymentMethodType = PrimerPaymentMethodType.safeValueOf(paymentMethodType)
|
|
74
|
-
PrimerHeadlessUniversalCheckout.current.showPaymentMethod(
|
|
75
|
-
reactContext,
|
|
76
|
-
primerPaymentMethodType
|
|
77
|
-
)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
@ReactMethod
|
|
81
|
-
fun disposeHeadlessCheckout() {
|
|
82
|
-
PrimerHeadlessUniversalCheckout.current.cleanup()
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@ReactMethod
|
|
86
|
-
fun getAssetForPaymentMethodType(
|
|
87
|
-
paymentMethodType: String,
|
|
88
|
-
assetType: String,
|
|
89
|
-
errorCallback: Callback,
|
|
90
|
-
successCallback: Callback
|
|
91
|
-
) {
|
|
92
|
-
|
|
93
|
-
val primerPaymentMethodType = PrimerPaymentMethodType.safeValueOf(paymentMethodType)
|
|
94
|
-
val type = ImageType.values().find { it.name.equals(assetType, ignoreCase = true) }
|
|
95
|
-
when {
|
|
96
|
-
primerPaymentMethodType == PaymentMethodType.UNKNOWN -> {
|
|
97
|
-
errorCallback.invoke(
|
|
98
|
-
json.encodeToString(
|
|
99
|
-
PrimerErrorRN(
|
|
100
|
-
ErrorTypeRN.AssetMissing,
|
|
101
|
-
"Asset for $paymentMethodType does not exist, make sure you don't have any typos."
|
|
102
|
-
)
|
|
103
|
-
)
|
|
104
|
-
)
|
|
105
|
-
}
|
|
106
|
-
type == null -> {
|
|
107
|
-
errorCallback.invoke(
|
|
108
|
-
json.encodeToString(
|
|
109
|
-
PrimerErrorRN(
|
|
110
|
-
ErrorTypeRN.AssetMismatch,
|
|
111
|
-
"You have provided assetType=$assetType, but variable assetType can be 'LOGO' or 'ICON'."
|
|
112
|
-
)
|
|
113
|
-
)
|
|
114
|
-
)
|
|
115
|
-
}
|
|
116
|
-
else -> {
|
|
117
|
-
PrimerHeadlessUniversalCheckout.getAsset(primerPaymentMethodType, type)?.let { resourceId ->
|
|
118
|
-
val file = getFile(reactContext, paymentMethodType)
|
|
119
|
-
AssetsManager.saveBitmapToFile(
|
|
120
|
-
file,
|
|
121
|
-
drawableToBitmap(ContextCompat.getDrawable(reactContext, resourceId)!!),
|
|
122
|
-
)
|
|
123
|
-
successCallback.invoke("file://${file.absolutePath}")
|
|
124
|
-
} ?: run {
|
|
125
|
-
errorCallback.invoke(
|
|
126
|
-
json.encodeToString(
|
|
127
|
-
PrimerErrorRN(
|
|
128
|
-
ErrorTypeRN.AssetMissing,
|
|
129
|
-
"Failed to find $paymentMethodType for $assetType"
|
|
130
|
-
)
|
|
131
|
-
)
|
|
132
|
-
)
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
override fun onClientSessionSetupSuccessfully(paymentMethods: List<PrimerHeadlessUniversalCheckoutPaymentMethod>) {
|
|
139
|
-
sendEvent(PrimerHeadlessUniversalCheckoutEvent.CLIENT_SESSION_SETUP_SUCCESS)
|
|
140
|
-
successCallback?.invoke(
|
|
141
|
-
Arguments.fromList(paymentMethods.map { it.paymentMethodType.name })
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
override fun onTokenizationPreparation() {
|
|
146
|
-
sendEvent(PrimerHeadlessUniversalCheckoutEvent.TOKENIZATION_PREPARATION_STARTED)
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
override fun onTokenizationStarted() {
|
|
150
|
-
sendEvent(PrimerHeadlessUniversalCheckoutEvent.TOKENIZATION_STARTED)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
override fun onPaymentMethodShowed() {
|
|
154
|
-
sendEvent(PrimerHeadlessUniversalCheckoutEvent.PAYMENT_METH0D_SHOWED)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
override fun onTokenizationSuccess(
|
|
158
|
-
paymentMethodToken: PaymentMethodToken,
|
|
159
|
-
resumeHandler: ResumeHandler
|
|
160
|
-
) {
|
|
161
|
-
this.resumeHandler = resumeHandler
|
|
162
|
-
|
|
163
|
-
sendEvent(
|
|
164
|
-
PrimerHeadlessUniversalCheckoutEvent.TOKENIZATION_SUCCESS,
|
|
165
|
-
mapOf(
|
|
166
|
-
"paymentMethodToken" to json.encodeToString(
|
|
167
|
-
PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(
|
|
168
|
-
paymentMethodToken
|
|
169
|
-
)
|
|
170
|
-
)
|
|
171
|
-
).toArgumentsMap()
|
|
172
|
-
)
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
override fun onResumeSuccess(resumeToken: String, resumeHandler: ResumeHandler) {
|
|
176
|
-
this.resumeHandler = resumeHandler
|
|
177
|
-
|
|
178
|
-
sendEvent(
|
|
179
|
-
PrimerHeadlessUniversalCheckoutEvent.RESUME,
|
|
180
|
-
mapOf("resumeToken" to resumeToken).toArgumentsMap()
|
|
181
|
-
)
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
override fun onError(error: APIError) {
|
|
186
|
-
sendEvent(
|
|
187
|
-
PrimerHeadlessUniversalCheckoutEvent.ERROR,
|
|
188
|
-
mapOf("error" to error.toString()).toArgumentsMap()
|
|
189
|
-
)
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
private fun sendEvent(
|
|
194
|
-
event: PrimerHeadlessUniversalCheckoutEvent,
|
|
195
|
-
@Nullable params: WritableMap? = null
|
|
196
|
-
) {
|
|
197
|
-
reactContext
|
|
198
|
-
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
199
|
-
.emit(event.eventName, params)
|
|
200
|
-
}
|
|
201
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
package com.primerioreactnative.huc.assets
|
|
2
|
-
|
|
3
|
-
import android.graphics.Bitmap
|
|
4
|
-
import android.graphics.Canvas
|
|
5
|
-
import android.graphics.drawable.BitmapDrawable
|
|
6
|
-
import android.graphics.drawable.Drawable
|
|
7
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
8
|
-
import java.io.File
|
|
9
|
-
import java.io.FileOutputStream
|
|
10
|
-
import java.util.*
|
|
11
|
-
|
|
12
|
-
internal object AssetsManager {
|
|
13
|
-
|
|
14
|
-
private const val ASSETS_DIRECTORY = "primer-sdk"
|
|
15
|
-
private const val COMPRESS_QUALITY = 100
|
|
16
|
-
|
|
17
|
-
fun drawableToBitmap(drawable: Drawable): Bitmap {
|
|
18
|
-
if (drawable is BitmapDrawable) {
|
|
19
|
-
return drawable.bitmap
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
val bitmap = Bitmap.createBitmap(
|
|
23
|
-
drawable.intrinsicWidth,
|
|
24
|
-
drawable.intrinsicHeight,
|
|
25
|
-
Bitmap.Config.ARGB_8888
|
|
26
|
-
)
|
|
27
|
-
val canvas = Canvas(bitmap)
|
|
28
|
-
drawable.setBounds(0, 0, canvas.width, canvas.height)
|
|
29
|
-
drawable.draw(canvas)
|
|
30
|
-
return bitmap
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
fun saveBitmapToFile(
|
|
34
|
-
file: File,
|
|
35
|
-
bitmap: Bitmap,
|
|
36
|
-
format: Bitmap.CompressFormat = Bitmap.CompressFormat.PNG,
|
|
37
|
-
) {
|
|
38
|
-
|
|
39
|
-
FileOutputStream(file).use {
|
|
40
|
-
bitmap.compress(format, COMPRESS_QUALITY, it)
|
|
41
|
-
it.close()
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
fun getFile(context: ReactApplicationContext, path: String): File {
|
|
46
|
-
val directory = File(context.filesDir, path)
|
|
47
|
-
if (!directory.exists()) directory.mkdirs()
|
|
48
|
-
val file = File(
|
|
49
|
-
context.filesDir,
|
|
50
|
-
ASSETS_DIRECTORY + File.pathSeparator + path.toLowerCase(Locale.ROOT)
|
|
51
|
-
)
|
|
52
|
-
if (!file.exists()) file.createNewFile()
|
|
53
|
-
return file
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
package com.primerioreactnative.huc.events
|
|
2
|
-
|
|
3
|
-
internal enum class PrimerHeadlessUniversalCheckoutEvent(val eventName: String) {
|
|
4
|
-
CLIENT_SESSION_SETUP_SUCCESS("clientSessionDidSetUpSuccessfully"),
|
|
5
|
-
TOKENIZATION_PREPARATION_STARTED("preparationStarted"),
|
|
6
|
-
PAYMENT_METH0D_SHOWED("paymentMethodPresented"),
|
|
7
|
-
TOKENIZATION_STARTED("tokenizationStarted"),
|
|
8
|
-
TOKENIZATION_SUCCESS("tokenizationSucceeded"),
|
|
9
|
-
RESUME("resume"),
|
|
10
|
-
ERROR("error");
|
|
11
|
-
}
|