@tapayadot/accept-react-native 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -30
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/tapaya/acceptsdkreactnative/AcceptSdkReactNativeModule.kt +256 -24
- package/build/AcceptSdkReactNative.types.d.ts +112 -15
- package/build/AcceptSdkReactNative.types.d.ts.map +1 -1
- package/build/AcceptSdkReactNative.types.js.map +1 -1
- package/build/AcceptSdkReactNativeModule.d.ts +10 -1
- package/build/AcceptSdkReactNativeModule.d.ts.map +1 -1
- package/build/AcceptSdkReactNativeModule.js.map +1 -1
- package/build/index.d.ts +94 -5
- package/build/index.d.ts.map +1 -1
- package/build/index.js +70 -2
- package/build/index.js.map +1 -1
- package/ios/AcceptSdkReactNativeModule.swift +271 -41
- package/package.json +4 -7
- package/plugin/withCustomRepoModule.js +1 -1
|
@@ -2,12 +2,21 @@ package com.tapaya.acceptsdkreactnative
|
|
|
2
2
|
|
|
3
3
|
import android.util.Base64
|
|
4
4
|
import com.google.gson.Gson
|
|
5
|
-
import com.tapaya.accept.
|
|
5
|
+
import com.tapaya.accept.Accept
|
|
6
|
+
import com.tapaya.accept.AcceptDemoApi
|
|
6
7
|
import com.tapaya.accept.external.IdentityData
|
|
8
|
+
import com.tapaya.core.model.external.AcceptEnvironment
|
|
9
|
+
import com.tapaya.core.model.external.AcceptUiBehavior
|
|
7
10
|
import com.tapaya.core.model.external.BusinessType
|
|
8
11
|
import com.tapaya.core.model.external.Currency
|
|
9
|
-
import com.tapaya.core.model.external.
|
|
12
|
+
import com.tapaya.core.model.external.NfcIndicator
|
|
13
|
+
import com.tapaya.core.model.external.NfcPosition
|
|
14
|
+
import com.tapaya.core.model.external.NfcZone
|
|
15
|
+
import com.tapaya.core.model.external.PaymentMethod
|
|
16
|
+
import com.tapaya.core.model.external.RefundReason
|
|
17
|
+
import com.tapaya.core.model.external.exception.AcceptException
|
|
10
18
|
import com.tapaya.core.model.external.intent.CardChargeIntent
|
|
19
|
+
import com.tapaya.core.model.external.intent.CardRefundIntent
|
|
11
20
|
import com.tapaya.core.model.external.intent.CertisInstantPaymentIntent
|
|
12
21
|
import com.tapaya.core.model.external.intent.SepaInstantPaymentIntent
|
|
13
22
|
import com.tapaya.core.model.external.result.AbstractPaymentResult
|
|
@@ -36,7 +45,7 @@ class CardPaymentIntentReactNative : Record {
|
|
|
36
45
|
var paymentIntentId: String = ""
|
|
37
46
|
|
|
38
47
|
@Field
|
|
39
|
-
var amount:
|
|
48
|
+
var amount: Long = 0L
|
|
40
49
|
|
|
41
50
|
@Field
|
|
42
51
|
var requestedCurrency: String = ""
|
|
@@ -71,7 +80,7 @@ class CardPaymentResultReactNative(
|
|
|
71
80
|
@Field
|
|
72
81
|
var companyCity: String = "",
|
|
73
82
|
@Field
|
|
74
|
-
var companyCountry:
|
|
83
|
+
var companyCountry: String = "",
|
|
75
84
|
@Field
|
|
76
85
|
var terminalId: String = "",
|
|
77
86
|
@Field
|
|
@@ -83,6 +92,8 @@ class CardPaymentResultReactNative(
|
|
|
83
92
|
@Field
|
|
84
93
|
var receiptUrl: String? = null,
|
|
85
94
|
@Field
|
|
95
|
+
var refundToken: String? = null,
|
|
96
|
+
@Field
|
|
86
97
|
var type: String = "",
|
|
87
98
|
) : Record
|
|
88
99
|
|
|
@@ -95,12 +106,13 @@ fun CardPaymentResult.toReactNative(): CardPaymentResultReactNative {
|
|
|
95
106
|
companyAddress1 = companyAddress1 ?: "",
|
|
96
107
|
companyAddress2 = companyAddress2 ?: "",
|
|
97
108
|
companyCity = companyCity ?: "",
|
|
98
|
-
companyCountry = companyCountry
|
|
109
|
+
companyCountry = companyCountry.toCountryAlpha2(),
|
|
99
110
|
terminalId = terminalId ?: "",
|
|
100
111
|
authorizationCode = authorizationCode ?: "",
|
|
101
112
|
brand = brand?.name ?: "",
|
|
102
113
|
reason = reason?.name ?: "",
|
|
103
114
|
receiptUrl = receiptUrl,
|
|
115
|
+
refundToken = refundToken,
|
|
104
116
|
type = "card"
|
|
105
117
|
)
|
|
106
118
|
}
|
|
@@ -110,7 +122,7 @@ class SepaPaymentIntentReactNative : Record {
|
|
|
110
122
|
var paymentIntentId: String = ""
|
|
111
123
|
|
|
112
124
|
@Field
|
|
113
|
-
var amount:
|
|
125
|
+
var amount: Long = 0L
|
|
114
126
|
|
|
115
127
|
@Field
|
|
116
128
|
var requestedCurrency: String = ""
|
|
@@ -160,7 +172,7 @@ class CertisPaymentIntentReactNative : Record {
|
|
|
160
172
|
var paymentIntentId: String = ""
|
|
161
173
|
|
|
162
174
|
@Field
|
|
163
|
-
var amount:
|
|
175
|
+
var amount: Long = 0L
|
|
164
176
|
|
|
165
177
|
@Field
|
|
166
178
|
var requestedCurrency: String = ""
|
|
@@ -205,6 +217,26 @@ fun CertisInstantPaymentResult.toReactNative(): CertisPaymentInstantResultReactN
|
|
|
205
217
|
)
|
|
206
218
|
}
|
|
207
219
|
|
|
220
|
+
class RefundIntentReactNative : Record {
|
|
221
|
+
@Field
|
|
222
|
+
var paymentToken: String = ""
|
|
223
|
+
|
|
224
|
+
@Field
|
|
225
|
+
var refundToken: String? = null
|
|
226
|
+
|
|
227
|
+
@Field
|
|
228
|
+
var reason: String = "customerRequest"
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
class RefundResultReactNative(
|
|
232
|
+
@Field
|
|
233
|
+
var refundToken: String? = null,
|
|
234
|
+
@Field
|
|
235
|
+
var status: String = "",
|
|
236
|
+
@Field
|
|
237
|
+
var refundReason: String = "",
|
|
238
|
+
) : Record
|
|
239
|
+
|
|
208
240
|
|
|
209
241
|
class GradientColorsRecord : Record {
|
|
210
242
|
@Field var start: String = ""
|
|
@@ -246,13 +278,23 @@ class AcceptImageThemeRecord : Record {
|
|
|
246
278
|
}
|
|
247
279
|
|
|
248
280
|
class AcceptThemeConfigurationRecord : Record {
|
|
281
|
+
@Field var themeId: String? = null
|
|
249
282
|
@Field var colors: AcceptColorThemeRecord? = null
|
|
250
283
|
@Field var images: AcceptImageThemeRecord? = null
|
|
251
284
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
285
|
+
@OptIn(AcceptDemoApi::class)
|
|
286
|
+
fun toAcceptThemeConfiguration(): AcceptThemeConfiguration {
|
|
287
|
+
themeId?.let { id ->
|
|
288
|
+
return AcceptThemeConfiguration(
|
|
289
|
+
colors = AcceptThemeSource.ById(id),
|
|
290
|
+
images = AcceptThemeSource.ById(id),
|
|
291
|
+
)
|
|
292
|
+
}
|
|
293
|
+
return AcceptThemeConfiguration(
|
|
294
|
+
colors = colors?.let { AcceptThemeSource.Local(it.toAcceptColorTheme()) } ?: AcceptThemeSource.Default,
|
|
295
|
+
images = images?.let { AcceptThemeSource.Local(it.toAcceptImageTheme()) } ?: AcceptThemeSource.Default,
|
|
296
|
+
)
|
|
297
|
+
}
|
|
256
298
|
}
|
|
257
299
|
|
|
258
300
|
private fun String.toComposeColor(): androidx.compose.ui.graphics.Color = try {
|
|
@@ -261,6 +303,122 @@ private fun String.toComposeColor(): androidx.compose.ui.graphics.Color = try {
|
|
|
261
303
|
throw Exception("ThemeError: invalid color '$this'. Expected #RRGGBB or #AARRGGBB — ${e.message}")
|
|
262
304
|
}
|
|
263
305
|
|
|
306
|
+
private fun Int?.toCountryAlpha2(): String = when (this) {
|
|
307
|
+
8 -> "AL"
|
|
308
|
+
20 -> "AD"
|
|
309
|
+
40 -> "AT"
|
|
310
|
+
51 -> "AM"
|
|
311
|
+
56 -> "BE"
|
|
312
|
+
70 -> "BA"
|
|
313
|
+
100 -> "BG"
|
|
314
|
+
112 -> "BY"
|
|
315
|
+
191 -> "HR"
|
|
316
|
+
196 -> "CY"
|
|
317
|
+
203 -> "CZ"
|
|
318
|
+
208 -> "DK"
|
|
319
|
+
233 -> "EE"
|
|
320
|
+
234 -> "FO"
|
|
321
|
+
246 -> "FI"
|
|
322
|
+
250 -> "FR"
|
|
323
|
+
268 -> "GE"
|
|
324
|
+
276 -> "DE"
|
|
325
|
+
292 -> "GI"
|
|
326
|
+
300 -> "GR"
|
|
327
|
+
304 -> "GL"
|
|
328
|
+
336 -> "VA"
|
|
329
|
+
348 -> "HU"
|
|
330
|
+
352 -> "IS"
|
|
331
|
+
372 -> "IE"
|
|
332
|
+
380 -> "IT"
|
|
333
|
+
398 -> "KZ"
|
|
334
|
+
417 -> "KG"
|
|
335
|
+
428 -> "LV"
|
|
336
|
+
438 -> "LI"
|
|
337
|
+
440 -> "LT"
|
|
338
|
+
442 -> "LU"
|
|
339
|
+
470 -> "MT"
|
|
340
|
+
492 -> "MC"
|
|
341
|
+
498 -> "MD"
|
|
342
|
+
499 -> "ME"
|
|
343
|
+
528 -> "NL"
|
|
344
|
+
578 -> "NO"
|
|
345
|
+
616 -> "PL"
|
|
346
|
+
620 -> "PT"
|
|
347
|
+
642 -> "RO"
|
|
348
|
+
643 -> "RU"
|
|
349
|
+
674 -> "SM"
|
|
350
|
+
688 -> "RS"
|
|
351
|
+
703 -> "SK"
|
|
352
|
+
705 -> "SI"
|
|
353
|
+
724 -> "ES"
|
|
354
|
+
752 -> "SE"
|
|
355
|
+
756 -> "CH"
|
|
356
|
+
792 -> "TR"
|
|
357
|
+
804 -> "UA"
|
|
358
|
+
807 -> "MK"
|
|
359
|
+
826 -> "GB"
|
|
360
|
+
else -> ""
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
private fun String.toPaymentMethod(): PaymentMethod = when (this) {
|
|
364
|
+
"CARD" -> PaymentMethod.CARD
|
|
365
|
+
"SEPA" -> PaymentMethod.SEPA_INST
|
|
366
|
+
"CERTIS" -> PaymentMethod.CERTIS
|
|
367
|
+
"CRYPTO" -> PaymentMethod.CRYPTO
|
|
368
|
+
else -> throw IllegalArgumentException("Unknown payment method: $this")
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
private fun PaymentMethod.toJsString(): String = when (this) {
|
|
372
|
+
PaymentMethod.CARD -> "CARD"
|
|
373
|
+
PaymentMethod.SEPA_INST -> "SEPA"
|
|
374
|
+
PaymentMethod.CERTIS -> "CERTIS"
|
|
375
|
+
PaymentMethod.CRYPTO -> "CRYPTO"
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
private fun String.toRefundReason(): RefundReason = when (this) {
|
|
379
|
+
"customerRequest" -> RefundReason.CUSTOMER_REQUEST
|
|
380
|
+
"duplicate" -> RefundReason.DUPLICATE
|
|
381
|
+
"fraudulent" -> RefundReason.FRAUDULENT
|
|
382
|
+
"expiredCharge" -> RefundReason.EXPIRED_CHARGE
|
|
383
|
+
else -> throw IllegalArgumentException("Unknown refund reason: $this")
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
class NfcPositionRecord : Record {
|
|
387
|
+
@Field var xBias: Float = 0f
|
|
388
|
+
@Field var yBias: Float = 0f
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
class NfcZoneRecord : Record {
|
|
392
|
+
@Field var indicator: String = "DEFAULT"
|
|
393
|
+
@Field var position: NfcPositionRecord? = null
|
|
394
|
+
|
|
395
|
+
fun toNfcZone(): NfcZone {
|
|
396
|
+
val pos = position?.let { NfcPosition.Custom(it.xBias, it.yBias) } ?: NfcPosition.Default
|
|
397
|
+
return NfcZone(indicator = indicator.toNfcIndicator(), position = pos)
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
class AcceptUiBehaviorRecord : Record {
|
|
402
|
+
@Field var resultScreenDurationSeconds: Int = 10
|
|
403
|
+
@Field var showResultScreen: Boolean = true
|
|
404
|
+
@Field var nfcZone: NfcZoneRecord? = null
|
|
405
|
+
|
|
406
|
+
fun toAcceptUiBehavior(): AcceptUiBehavior = AcceptUiBehavior(
|
|
407
|
+
resultScreenDurationSeconds = resultScreenDurationSeconds,
|
|
408
|
+
showResultScreen = showResultScreen,
|
|
409
|
+
nfcZone = nfcZone?.toNfcZone(),
|
|
410
|
+
)
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
private fun String.toNfcIndicator(): NfcIndicator = when (this) {
|
|
414
|
+
"DEFAULT" -> NfcIndicator.DEFAULT
|
|
415
|
+
"ABOVE" -> NfcIndicator.ABOVE
|
|
416
|
+
"BELOW" -> NfcIndicator.BELOW
|
|
417
|
+
"FRONT" -> NfcIndicator.FRONT
|
|
418
|
+
"BEHIND" -> NfcIndicator.BEHIND
|
|
419
|
+
else -> throw IllegalArgumentException("Unknown NFC indicator: $this")
|
|
420
|
+
}
|
|
421
|
+
|
|
264
422
|
class KybPrefillDataRecord : Record {
|
|
265
423
|
@Field var businessType: String? = null
|
|
266
424
|
@Field var countryCode: String? = null
|
|
@@ -314,17 +472,22 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
314
472
|
|
|
315
473
|
AsyncFunction("initialize") Coroutine { demo: Boolean, theme: AcceptThemeConfigurationRecord? ->
|
|
316
474
|
val context = appContext.reactContext ?: throw Exception("Context not available")
|
|
317
|
-
|
|
475
|
+
val environment = if (demo) AcceptEnvironment.SANDBOX else AcceptEnvironment.PRODUCTION
|
|
476
|
+
Accept.initialize(context, environment, theme?.toAcceptThemeConfiguration() ?: AcceptThemeConfiguration.Default)
|
|
318
477
|
}
|
|
319
478
|
|
|
320
479
|
AsyncFunction("setTheme") Coroutine { theme: AcceptThemeConfigurationRecord ->
|
|
321
|
-
|
|
480
|
+
Accept.setThemeConfiguration(theme.toAcceptThemeConfiguration())
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
AsyncFunction("setUiBehavior") { behavior: AcceptUiBehaviorRecord ->
|
|
484
|
+
Accept.setUiBehavior(behavior.toAcceptUiBehavior())
|
|
322
485
|
}
|
|
323
486
|
|
|
324
487
|
AsyncFunction("authenticate") Coroutine { token: String ->
|
|
325
488
|
return@Coroutine suspendCancellableCoroutine<Boolean> { continuation ->
|
|
326
489
|
try {
|
|
327
|
-
|
|
490
|
+
Accept.authenticate(
|
|
328
491
|
token,
|
|
329
492
|
onSuccess = { continuation.resume(true) },
|
|
330
493
|
onError = { error -> (error as? Throwable)?.let { continuation.resumeWithException(it) } }
|
|
@@ -337,7 +500,7 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
337
500
|
|
|
338
501
|
Function("getStatus") { ->
|
|
339
502
|
try {
|
|
340
|
-
return@Function
|
|
503
|
+
return@Function Accept.status.name
|
|
341
504
|
} catch (e: Exception) {
|
|
342
505
|
throw e
|
|
343
506
|
}
|
|
@@ -346,7 +509,7 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
346
509
|
AsyncFunction("getPaymentStatus") Coroutine { paymentIntentId: String ->
|
|
347
510
|
return@Coroutine suspendCancellableCoroutine<String> { continuation ->
|
|
348
511
|
try {
|
|
349
|
-
|
|
512
|
+
Accept.getPaymentStatus(
|
|
350
513
|
paymentIntentId,
|
|
351
514
|
{ result: AbstractPaymentResult ->
|
|
352
515
|
val mapped = when (result) {
|
|
@@ -358,7 +521,7 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
358
521
|
|
|
359
522
|
continuation.resume(Gson().toJson(mapped))
|
|
360
523
|
},
|
|
361
|
-
{ error:
|
|
524
|
+
{ error: AcceptException ->
|
|
362
525
|
(error as? Throwable)?.let { continuation.resumeWithException(it) }
|
|
363
526
|
}
|
|
364
527
|
)
|
|
@@ -386,7 +549,7 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
386
549
|
AsyncFunction("logOut") Coroutine { ->
|
|
387
550
|
return@Coroutine suspendCancellableCoroutine<Boolean> { continuation ->
|
|
388
551
|
try {
|
|
389
|
-
|
|
552
|
+
Accept.logOut {
|
|
390
553
|
continuation.resume(true)
|
|
391
554
|
}
|
|
392
555
|
} catch (e: Exception) {
|
|
@@ -397,20 +560,38 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
397
560
|
|
|
398
561
|
AsyncFunction("isPaymentPending") { ->
|
|
399
562
|
try {
|
|
400
|
-
return@AsyncFunction
|
|
563
|
+
return@AsyncFunction Accept.isPaymentPending()
|
|
401
564
|
} catch (e: Exception) {
|
|
402
565
|
throw e
|
|
403
566
|
}
|
|
404
567
|
}
|
|
405
568
|
|
|
406
569
|
AsyncFunction("presentKyb") Coroutine { prefilling: KybPrefillDataRecord? ->
|
|
407
|
-
|
|
570
|
+
Accept.identity.presentKyb(prefilling?.toIdentityData())
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
AsyncFunction("getOnboardingStatus") Coroutine { ->
|
|
574
|
+
val status = Accept.identity.getOnboardingStatus()
|
|
575
|
+
return@Coroutine mapOf(
|
|
576
|
+
"isOnboarded" to status.isOnboarded,
|
|
577
|
+
"paymentMethods" to status.paymentMethods.map { pm ->
|
|
578
|
+
mapOf(
|
|
579
|
+
"method" to pm.method.toJsString(),
|
|
580
|
+
"status" to pm.status.name,
|
|
581
|
+
)
|
|
582
|
+
},
|
|
583
|
+
)
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
AsyncFunction("getPaymentMethodStatus") Coroutine { method: String ->
|
|
587
|
+
val status = Accept.identity.getPaymentMethodStatus(method.toPaymentMethod())
|
|
588
|
+
return@Coroutine status.name
|
|
408
589
|
}
|
|
409
590
|
|
|
410
591
|
AsyncFunction("startCardPayment") Coroutine { paymentIntent: CardPaymentIntentReactNative ->
|
|
411
592
|
return@Coroutine suspendCancellableCoroutine<CardPaymentResultReactNative> { continuation ->
|
|
412
593
|
try {
|
|
413
|
-
|
|
594
|
+
Accept.cardTerminal.process(
|
|
414
595
|
paymentIntent.toCardInstantPaymentIntent(),
|
|
415
596
|
onResult = {
|
|
416
597
|
continuation.resume(it.toReactNative())
|
|
@@ -431,7 +612,7 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
431
612
|
AsyncFunction("startSepaPayment") Coroutine { paymentIntent: SepaPaymentIntentReactNative ->
|
|
432
613
|
return@Coroutine suspendCancellableCoroutine<SepaPaymentInstantResultReactNative> { continuation ->
|
|
433
614
|
try {
|
|
434
|
-
|
|
615
|
+
Accept.sepaTerminal.process(
|
|
435
616
|
paymentIntent.toSepaInstantPaymentIntent(),
|
|
436
617
|
onResult = {
|
|
437
618
|
continuation.resume(it.toReactNative())
|
|
@@ -452,7 +633,7 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
452
633
|
AsyncFunction("startCertisPayment") Coroutine { paymentIntent: CertisPaymentIntentReactNative ->
|
|
453
634
|
return@Coroutine suspendCancellableCoroutine<CertisPaymentInstantResultReactNative> { continuation ->
|
|
454
635
|
try {
|
|
455
|
-
|
|
636
|
+
Accept.certisTerminal.process(
|
|
456
637
|
paymentIntent.toCertisInstantPaymentIntent(),
|
|
457
638
|
onResult = {
|
|
458
639
|
continuation.resume(it.toReactNative())
|
|
@@ -470,6 +651,57 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
470
651
|
}
|
|
471
652
|
}
|
|
472
653
|
|
|
654
|
+
AsyncFunction("refund") Coroutine { intent: RefundIntentReactNative ->
|
|
655
|
+
return@Coroutine suspendCancellableCoroutine<RefundResultReactNative> { continuation ->
|
|
656
|
+
try {
|
|
657
|
+
val refundIntent = CardRefundIntent(
|
|
658
|
+
sourcePaymentToken = intent.paymentToken,
|
|
659
|
+
refundReason = intent.reason.toRefundReason(),
|
|
660
|
+
refundToken = intent.refundToken,
|
|
661
|
+
)
|
|
662
|
+
Accept.cardTerminal.process(
|
|
663
|
+
refundIntent,
|
|
664
|
+
onResult = { result ->
|
|
665
|
+
continuation.resume(
|
|
666
|
+
RefundResultReactNative(
|
|
667
|
+
refundToken = result.refundToken,
|
|
668
|
+
status = result.status.name.lowercase(),
|
|
669
|
+
refundReason = intent.reason,
|
|
670
|
+
)
|
|
671
|
+
)
|
|
672
|
+
},
|
|
673
|
+
onStatus = { /* refund flow emits no UI status */ },
|
|
674
|
+
onError = { error ->
|
|
675
|
+
continuation.resumeWithException(error as Throwable)
|
|
676
|
+
}
|
|
677
|
+
)
|
|
678
|
+
} catch (e: Exception) {
|
|
679
|
+
continuation.resumeWithException(e)
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
AsyncFunction("cancelActivePayment") { ->
|
|
685
|
+
if (!Accept.isPaymentPending()) {
|
|
686
|
+
throw Exception("NoActivePayment")
|
|
687
|
+
}
|
|
688
|
+
Accept.cardTerminal.reset()
|
|
689
|
+
Accept.sepaTerminal.reset()
|
|
690
|
+
Accept.certisTerminal.reset()
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
AsyncFunction("enableDemoMode") { ->
|
|
694
|
+
Accept.enableDemoMode()
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
AsyncFunction("disableDemoMode") { ->
|
|
698
|
+
Accept.disableDemoMode()
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
AsyncFunction("isDemoMode") { ->
|
|
702
|
+
Accept.isDemoMode()
|
|
703
|
+
}
|
|
704
|
+
|
|
473
705
|
AsyncFunction("pairWithCompanionApp") Coroutine { ->
|
|
474
706
|
// Not available on Android
|
|
475
707
|
}
|
|
@@ -484,7 +716,7 @@ class AcceptSdkReactNativeModule : Module() {
|
|
|
484
716
|
|
|
485
717
|
}
|
|
486
718
|
|
|
487
|
-
private fun
|
|
719
|
+
private fun AcceptException.toReactNative(): Map<String, String> {
|
|
488
720
|
return mapOf(
|
|
489
721
|
"message" to ((this as Throwable).message ?: ""),
|
|
490
722
|
"exception" to ((this as Throwable).cause?.stackTraceToString() ?: "")
|
|
@@ -32,25 +32,60 @@ export type AcceptImageTheme = {
|
|
|
32
32
|
};
|
|
33
33
|
/**
|
|
34
34
|
* UI theme overrides. Omit `colors` and/or `images` to keep SDK defaults for those slots.
|
|
35
|
+
*
|
|
36
|
+
* When `themeId` is set, the SDK loads a built-in preset theme (colors + images) by ID and
|
|
37
|
+
* ignores `colors`/`images`. Unknown IDs fall back to SDK defaults. Demo only.
|
|
35
38
|
*/
|
|
36
39
|
export type AcceptThemeConfiguration = {
|
|
40
|
+
/** Preset theme ID. When set, overrides `colors` and `images`. Demo only. */
|
|
41
|
+
themeId?: string;
|
|
37
42
|
colors?: AcceptColorTheme;
|
|
38
43
|
images?: AcceptImageTheme;
|
|
39
44
|
};
|
|
45
|
+
/** Where the NFC indicator is drawn relative to the tap zone. */
|
|
46
|
+
export type NfcIndicator = 'DEFAULT' | 'ABOVE' | 'BELOW' | 'FRONT' | 'BEHIND';
|
|
47
|
+
/**
|
|
48
|
+
* Position of the NFC tap zone on screen. Omit `position` from {@link NfcZone} to let the
|
|
49
|
+
* underlying terminal pick. Provide `{ xBias, yBias }` (each in `0..1`) for a manual position.
|
|
50
|
+
*/
|
|
51
|
+
export type NfcPosition = {
|
|
52
|
+
/** Horizontal bias (0.0 = left, 1.0 = right). */
|
|
53
|
+
xBias: number;
|
|
54
|
+
/** Vertical bias (0.0 = top, 1.0 = bottom). */
|
|
55
|
+
yBias: number;
|
|
56
|
+
};
|
|
57
|
+
/** Overrides the Tap-to-Pay NFC zone shown over the card payment flow. */
|
|
58
|
+
export type NfcZone = {
|
|
59
|
+
indicator: NfcIndicator;
|
|
60
|
+
/** Omit to let the underlying terminal pick the position. */
|
|
61
|
+
position?: NfcPosition;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Configures SDK-owned UI behavior around a transaction.
|
|
65
|
+
*
|
|
66
|
+
* @property resultScreenDurationSeconds How long the post-transaction result screen stays on
|
|
67
|
+
* screen before auto-closing. Ignored when `showResultScreen` is `false`. Defaults to `10`.
|
|
68
|
+
* @property showResultScreen Whether the SDK shows its own result screen after a transaction
|
|
69
|
+
* completes. Defaults to `true`.
|
|
70
|
+
* @property nfcZone Overrides the Tap-to-Pay NFC indicator and tap zone position.
|
|
71
|
+
*/
|
|
72
|
+
export type AcceptUiBehavior = {
|
|
73
|
+
resultScreenDurationSeconds?: number;
|
|
74
|
+
showResultScreen?: boolean;
|
|
75
|
+
nfcZone?: NfcZone;
|
|
76
|
+
};
|
|
40
77
|
/** Current authentication/initialization state of the SDK. */
|
|
41
78
|
export type SdkStatus = 'IDLE' | 'INITIALIZED' | 'LOGGED_IN';
|
|
42
|
-
/** Supported settlement and requested currencies. */
|
|
43
|
-
export type Currency = 'CZK' | 'EUR' | 'GBP';
|
|
44
79
|
/** Intent for initiating a card (tap-to-pay) payment. */
|
|
45
80
|
export type CardPaymentIntent = {
|
|
46
81
|
/** Unique payment intent identifier obtained from your backend. */
|
|
47
82
|
paymentIntentId: string;
|
|
48
83
|
/** Amount in the smallest currency unit (e.g. hellers for CZK, cents for EUR). */
|
|
49
84
|
amount: number;
|
|
50
|
-
/**
|
|
51
|
-
requestedCurrency:
|
|
52
|
-
/**
|
|
53
|
-
settlementCurrency?:
|
|
85
|
+
/** ISO 4217 alpha-3 currency code the customer is charged in. */
|
|
86
|
+
requestedCurrency: string;
|
|
87
|
+
/** ISO 4217 alpha-3 currency code funds settle in. Defaults to `requestedCurrency` when omitted. */
|
|
88
|
+
settlementCurrency?: string;
|
|
54
89
|
};
|
|
55
90
|
/** Intent for initiating a SEPA Instant bank transfer payment. */
|
|
56
91
|
export type SepaPaymentIntent = {
|
|
@@ -58,10 +93,10 @@ export type SepaPaymentIntent = {
|
|
|
58
93
|
paymentIntentId: string;
|
|
59
94
|
/** Amount in the smallest currency unit. */
|
|
60
95
|
amount: number;
|
|
61
|
-
/**
|
|
62
|
-
requestedCurrency:
|
|
63
|
-
/**
|
|
64
|
-
settlementCurrency?:
|
|
96
|
+
/** ISO 4217 alpha-3 currency code the customer is charged in. */
|
|
97
|
+
requestedCurrency: string;
|
|
98
|
+
/** ISO 4217 alpha-3 currency code funds settle in. Defaults to `requestedCurrency` when omitted. */
|
|
99
|
+
settlementCurrency?: string;
|
|
65
100
|
};
|
|
66
101
|
/** Intent for initiating a Certis Instant bank transfer payment. */
|
|
67
102
|
export type CertisPaymentIntent = {
|
|
@@ -69,10 +104,10 @@ export type CertisPaymentIntent = {
|
|
|
69
104
|
paymentIntentId: string;
|
|
70
105
|
/** Amount in the smallest currency unit. */
|
|
71
106
|
amount: number;
|
|
72
|
-
/**
|
|
73
|
-
requestedCurrency:
|
|
74
|
-
/**
|
|
75
|
-
settlementCurrency?:
|
|
107
|
+
/** ISO 4217 alpha-3 currency code the customer is charged in. */
|
|
108
|
+
requestedCurrency: string;
|
|
109
|
+
/** ISO 4217 alpha-3 currency code funds settle in. Defaults to `requestedCurrency` when omitted. */
|
|
110
|
+
settlementCurrency?: string;
|
|
76
111
|
};
|
|
77
112
|
/** Result of a completed card payment. */
|
|
78
113
|
export type CardPaymentResult = {
|
|
@@ -85,7 +120,8 @@ export type CardPaymentResult = {
|
|
|
85
120
|
companyAddress1?: string;
|
|
86
121
|
companyAddress2?: string;
|
|
87
122
|
companyCity?: string;
|
|
88
|
-
|
|
123
|
+
/** ISO 3166-1 alpha-2 country code (e.g. `CZ`, `SK`, `GB`). */
|
|
124
|
+
companyCountry?: string;
|
|
89
125
|
terminalId?: string;
|
|
90
126
|
authorizationCode?: string;
|
|
91
127
|
/** Card brand (e.g. `VISA`, `MASTERCARD`). */
|
|
@@ -94,6 +130,8 @@ export type CardPaymentResult = {
|
|
|
94
130
|
reason?: string;
|
|
95
131
|
/** URL to the digital receipt for this transaction. */
|
|
96
132
|
receiptUrl?: string;
|
|
133
|
+
/** Server-issued token identifying a refund applied to this payment. Present when this card payment was refunded. */
|
|
134
|
+
refundToken?: string;
|
|
97
135
|
};
|
|
98
136
|
/** Intermediate status updates emitted during a card payment flow. */
|
|
99
137
|
export type CardPaymentStatus = 'pending' | 'approved' | 'declined' | 'refunded' | 'aborted';
|
|
@@ -151,6 +189,65 @@ export type KybPrefillData = {
|
|
|
151
189
|
productDescription?: string;
|
|
152
190
|
supportPhone?: string;
|
|
153
191
|
};
|
|
192
|
+
/** Supported payment methods for onboarding status queries. */
|
|
193
|
+
export type PaymentMethod = 'CARD' | 'SEPA' | 'CERTIS' | 'CRYPTO';
|
|
194
|
+
/** Onboarding state for a single payment method. */
|
|
195
|
+
export type PaymentMethodStatus = 'NOT_STARTED' | 'PENDING' | 'ACTIVE' | 'ATTENTION_NEEDED' | 'ACTION_REQUIRED' | 'BLOCKED';
|
|
196
|
+
/** Per-method onboarding status entry. */
|
|
197
|
+
export type AcceptPaymentMethodStatus = {
|
|
198
|
+
method: PaymentMethod;
|
|
199
|
+
status: PaymentMethodStatus;
|
|
200
|
+
};
|
|
201
|
+
/** Aggregate onboarding status for the authenticated merchant. */
|
|
202
|
+
export type AcceptOnboardingStatus = {
|
|
203
|
+
/** `true` when the merchant has completed onboarding for at least one payment method. */
|
|
204
|
+
isOnboarded: boolean;
|
|
205
|
+
/** Per-method onboarding status entries. */
|
|
206
|
+
paymentMethods: AcceptPaymentMethodStatus[];
|
|
207
|
+
};
|
|
208
|
+
/** Reason a card refund is issued. */
|
|
209
|
+
export type RefundReason = 'customerRequest' | 'duplicate' | 'fraudulent' | 'expiredCharge';
|
|
210
|
+
/** Final state of a refund transaction. */
|
|
211
|
+
export type TransactionStatus = 'pending' | 'success' | 'cancelled' | 'refunded' | 'failed' | 'actionNeeded';
|
|
212
|
+
/** Arguments for {@link payments.refund}. */
|
|
213
|
+
export type RefundIntent = {
|
|
214
|
+
/** Token of the source payment to refund. Accepts the server payment UUID or the original charge's `paymentIntentId`. */
|
|
215
|
+
paymentToken: string;
|
|
216
|
+
/** Optional client-provided idempotency token. Pass the same value across retries to avoid duplicate refunds. */
|
|
217
|
+
refundToken?: string;
|
|
218
|
+
/** Reason for the refund. */
|
|
219
|
+
reason: RefundReason;
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Result of a refund request.
|
|
223
|
+
*
|
|
224
|
+
* On iOS this is fully populated. On Android only `status` and `refundToken` are populated —
|
|
225
|
+
* call {@link getPaymentStatus} on the source payment for richer state.
|
|
226
|
+
*/
|
|
227
|
+
export type RefundResult = {
|
|
228
|
+
/** Server-generated refund token. May be undefined on Android. */
|
|
229
|
+
refundToken?: string;
|
|
230
|
+
/** Status of the refund transaction. */
|
|
231
|
+
status: TransactionStatus;
|
|
232
|
+
/** Payment method of the original transaction. iOS only. */
|
|
233
|
+
paymentMethod?: PaymentMethod;
|
|
234
|
+
/** Refund amount in the smallest unit of the requested currency. iOS only. */
|
|
235
|
+
requestedAmount?: number;
|
|
236
|
+
/** ISO 4217 alpha-3 code of the requested currency. iOS only. */
|
|
237
|
+
requestedCurrency?: string;
|
|
238
|
+
/** Refund amount in the smallest unit of the settlement currency. iOS only. */
|
|
239
|
+
settlementAmount?: number;
|
|
240
|
+
/** ISO 4217 alpha-3 code of the settlement currency. iOS only. */
|
|
241
|
+
settlementCurrency?: string;
|
|
242
|
+
/** Conversion rate from requested currency to settlement currency. iOS only. */
|
|
243
|
+
fxRate?: number;
|
|
244
|
+
/** Reason for the refund. */
|
|
245
|
+
refundReason: RefundReason;
|
|
246
|
+
/** ISO 8601 UTC timestamp when the refund was initiated. iOS only. */
|
|
247
|
+
createdAt?: string;
|
|
248
|
+
/** ISO 8601 UTC timestamp when the refund was processed. iOS only. */
|
|
249
|
+
processedAt?: string;
|
|
250
|
+
};
|
|
154
251
|
export type AcceptSdkReactNativeModuleEvents = {
|
|
155
252
|
onCardPaymentStatusChange: (status: Map<string, string>) => void;
|
|
156
253
|
onSepaPaymentStatusChange: (status: Map<string, string>) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcceptSdkReactNative.types.d.ts","sourceRoot":"","sources":["../src/AcceptSdkReactNative.types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG;IAC3B,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;CACb,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,cAAc,CAAC;IACrC,yBAAyB,CAAC,EAAE,cAAc,CAAC;CAC5C,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"AcceptSdkReactNative.types.d.ts","sourceRoot":"","sources":["../src/AcceptSdkReactNative.types.ts"],"names":[],"mappings":"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"}
|