diff --git a/packages/identity/CapacitorCommunityStripeIdentity.podspec b/packages/identity/CapacitorCommunityStripeIdentity.podspec
index 8944b942..54ea2756 100644
--- a/packages/identity/CapacitorCommunityStripeIdentity.podspec
+++ b/packages/identity/CapacitorCommunityStripeIdentity.podspec
@@ -13,6 +13,6 @@ Pod::Spec.new do |s|
s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
s.ios.deployment_target = '14.0'
s.dependency 'Capacitor'
- s.dependency 'StripeIdentity', '~> 24.1.0'
+ s.dependency 'StripeIdentity', '~> 24.4.1'
s.swift_version = '5.1'
end
diff --git a/packages/identity/android/build.gradle b/packages/identity/android/build.gradle
index fe80d0ad..6df78dc1 100644
--- a/packages/identity/android/build.gradle
+++ b/packages/identity/android/build.gradle
@@ -5,7 +5,7 @@ ext {
androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.6.1'
playServicesWalletVersion = project.hasProperty('playServicesWalletVersion') ? rootProject.ext.playServicesWalletVersion : '19.2.+'
- identityVersion = project.hasProperty('identityVersion') ? rootProject.ext.identityVersion : '21.2.+'
+ identityVersion = project.hasProperty('identityVersion') ? rootProject.ext.identityVersion : '21.4.+'
}
buildscript {
diff --git a/packages/identity/package-lock.json b/packages/identity/package-lock.json
index eb76eed9..61b19121 100644
--- a/packages/identity/package-lock.json
+++ b/packages/identity/package-lock.json
@@ -28,7 +28,7 @@
"typescript": "~4.1.5"
},
"engines": {
- "node": ">=18.0.0"
+ "node": ">=20.0.0"
},
"peerDependencies": {
"@capacitor/core": ">=7.0.0"
diff --git a/packages/payment/CapacitorCommunityStripe.podspec b/packages/payment/CapacitorCommunityStripe.podspec
index b35946c6..52063891 100644
--- a/packages/payment/CapacitorCommunityStripe.podspec
+++ b/packages/payment/CapacitorCommunityStripe.podspec
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
s.ios.deployment_target = '14.0'
s.dependency 'Capacitor'
- s.dependency 'StripePaymentSheet', '~> 24.1.0'
- s.dependency 'StripeApplePay', '~> 24.1.0'
+ s.dependency 'StripePaymentSheet', '~> 24.4.1'
+ s.dependency 'StripeApplePay', '~> 24.4.1'
s.swift_version = '5.1'
end
diff --git a/packages/payment/android/build.gradle b/packages/payment/android/build.gradle
index 5e96bcdd..0a2e6562 100644
--- a/packages/payment/android/build.gradle
+++ b/packages/payment/android/build.gradle
@@ -5,7 +5,7 @@ ext {
androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.6.1'
playServicesWalletVersion = project.hasProperty('playServicesWalletVersion') ? rootProject.ext.playServicesWalletVersion : '19.2.+'
- stripeAndroidVersion = project.hasProperty('stripeAndroidVersion') ? rootProject.ext.stripeAndroidVersion : '21.2.+'
+ stripeAndroidVersion = project.hasProperty('stripeAndroidVersion') ? rootProject.ext.stripeAndroidVersion : '21.4.+'
gsonVersion = project.hasProperty('gsonVersion') ? rootProject.ext.gsonVersion : '2.10.+'
}
diff --git a/packages/payment/package-lock.json b/packages/payment/package-lock.json
index 5a85ca83..80c1b211 100644
--- a/packages/payment/package-lock.json
+++ b/packages/payment/package-lock.json
@@ -27,7 +27,7 @@
"typescript": "~4.1.5"
},
"engines": {
- "node": ">=18.0.0"
+ "node": ">=20.0.0"
},
"peerDependencies": {
"@capacitor/core": ">=7.0.0",
diff --git a/packages/terminal/README.md b/packages/terminal/README.md
index dd503bcf..7f1d5c0c 100644
--- a/packages/terminal/README.md
+++ b/packages/terminal/README.md
@@ -65,6 +65,10 @@ And update minSdkVersion to 26 And compileSdkVersion to 34 in your `android/app/
+ minSdkVersion = 30
```
+If you are developing apps for Stripe Android devices (e.g. Stripe Reader S700), follow the Stripe's documentation for the client-side setup.
+- [Stripe - Android configure your app](https://docs.stripe.com/terminal/features/apps-on-devices/build?terminal-sdk-platform=android&lang-android=java#setup-app)
+
+
## Usage
### Simple collect payment
@@ -1030,6 +1034,7 @@ addListener(eventName: TerminalEventsEnum.ReaderReconnectFailed, listenerFunc: (
| **`Bluetooth`** | 'bluetooth'
|
| **`Usb`** | 'usb'
|
| **`TapToPay`** | 'tap-to-pay'
|
+| **`HandOff`** | 'hand-off'
|
#### SimulateReaderUpdate
diff --git a/packages/terminal/android/build.gradle b/packages/terminal/android/build.gradle
index 4819a585..65b57d19 100644
--- a/packages/terminal/android/build.gradle
+++ b/packages/terminal/android/build.gradle
@@ -8,6 +8,7 @@ ext {
volleyVersion = project.hasProperty('volleyVersion') ? rootProject.ext.volleyVersion : '1.2.1'
stripeterminalTapToPayVersion = project.hasProperty('stripeterminalTapToPayVersion') ? rootProject.ext.stripeterminalTapToPayVersion : '4.1.0'
stripeterminalCoreVersion = project.hasProperty('stripeterminalCoreVersion') ? rootProject.ext.stripeterminalCoreVersion : '4.1.0'
+ stripeterminalHandoffClientVersion = project.hasProperty('stripeterminalHandoffClientVersion') ? rootProject.ext.stripeterminalHandoffClientVersion : '4.1.0'
}
buildscript {
@@ -71,6 +72,7 @@ dependencies {
implementation "com.stripe:stripeterminal-core:$stripeterminalCoreVersion"
implementation "com.stripe:stripeterminal-taptopay:$stripeterminalTapToPayVersion"
+ implementation "com.stripe:stripeterminal-handoffclient:$stripeterminalHandoffClientVersion"
implementation "com.android.volley:volley:$volleyVersion"
implementation "com.google.android.gms:play-services-wallet:$playServicesWalletVersion"
}
diff --git a/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.kt b/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.kt
index d06fcfdc..0dbee971 100644
--- a/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.kt
+++ b/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.kt
@@ -29,6 +29,7 @@ import com.stripe.stripeterminal.external.callable.PaymentIntentCallback
import com.stripe.stripeterminal.external.callable.ReaderCallback
import com.stripe.stripeterminal.external.callable.TapToPayReaderListener
import com.stripe.stripeterminal.external.callable.TerminalListener
+import com.stripe.stripeterminal.external.callable.HandoffReaderListener
import com.stripe.stripeterminal.external.models.BatteryStatus
import com.stripe.stripeterminal.external.models.CardPresentDetails
import com.stripe.stripeterminal.external.models.Cart
@@ -194,6 +195,9 @@ class StripeTerminal(
) {
config = DiscoveryConfiguration.BluetoothDiscoveryConfiguration(0, this.isTest!!)
this.terminalConnectType = TerminalConnectTypes.Bluetooth
+ } else if (call.getString("type") == TerminalConnectTypes.HandOff.webEventName) {
+ config = DiscoveryConfiguration.HandoffDiscoveryConfiguration()
+ this.terminalConnectType = TerminalConnectTypes.HandOff
} else {
call.unimplemented(call.getString("type") + " is not support now")
return
@@ -240,6 +244,8 @@ class StripeTerminal(
this.connectUsbReader(call)
} else if (this.terminalConnectType == TerminalConnectTypes.Bluetooth) {
this.connectBluetoothReader(call)
+ } else if (this.terminalConnectType == TerminalConnectTypes.HandOff) {
+ this.connectHandOffReader(call)
} else {
call.reject("type is not defined.")
}
@@ -440,6 +446,39 @@ class StripeTerminal(
Terminal.getInstance().connectReader(foundReader, config, this.readerCallback(call))
}
+ private fun connectHandOffReader(call: PluginCall) {
+ val reader = call.getObject("reader")
+ val serialNumber = reader.getString("serialNumber")
+ val foundReader = this.discoveredReadersList.firstOrNull()
+
+ if (serialNumber == null || foundReader == null) {
+ call.reject("The reader value is not set correctly.")
+ return
+ }
+
+ val config: ConnectionConfiguration.HandoffConnectionConfiguration = ConnectionConfiguration.HandoffConnectionConfiguration(
+ this.handoffReaderListener
+ )
+
+ Terminal.getInstance().connectReader(foundReader, config, this.readerCallback(call))
+ }
+
+ var handoffReaderListener: HandoffReaderListener = object : HandoffReaderListener {
+ override fun onDisconnect(reason: DisconnectReason) {
+ notifyListeners(
+ TerminalEnumEvent.DisconnectedReader.webEventName,
+ JSObject().put("reason", reason.toString())
+ )
+ }
+
+ override fun onReportReaderEvent(event: ReaderEvent) {
+ notifyListeners(
+ TerminalEnumEvent.ReaderEvent.webEventName,
+ JSObject().put("event", event.toString())
+ )
+ }
+ }
+
fun cancelDiscoverReaders(call: PluginCall) {
if (discoveryCancelable == null || discoveryCancelable!!.isCompleted) {
call.resolve()
diff --git a/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalConnectTypes.kt b/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalConnectTypes.kt
index fbf712b2..51429312 100644
--- a/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalConnectTypes.kt
+++ b/packages/terminal/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalConnectTypes.kt
@@ -6,4 +6,5 @@ enum class TerminalConnectTypes(val webEventName: String) {
Bluetooth("bluetooth"),
Usb("usb"),
TapToPay("tap-to-pay"),
+ HandOff("hand-off"),
}
diff --git a/packages/terminal/package-lock.json b/packages/terminal/package-lock.json
index c2522b7b..a852b2a9 100644
--- a/packages/terminal/package-lock.json
+++ b/packages/terminal/package-lock.json
@@ -28,7 +28,7 @@
"typescript": "~4.1.5"
},
"engines": {
- "node": ">=18.0.0"
+ "node": ">=20.0.0"
},
"peerDependencies": {
"@capacitor/core": ">=7.0.0"
diff --git a/packages/terminal/src/stripe.enum.ts b/packages/terminal/src/stripe.enum.ts
index bf5c601f..909e525d 100644
--- a/packages/terminal/src/stripe.enum.ts
+++ b/packages/terminal/src/stripe.enum.ts
@@ -4,6 +4,7 @@ export enum TerminalConnectTypes {
Bluetooth = 'bluetooth',
Usb = 'usb',
TapToPay = 'tap-to-pay',
+ HandOff = 'hand-off',
}
/**