@capacitor-community/stripe-terminal 6.1.0 → 6.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 +303 -34
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.java +267 -49
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminalPlugin.java +30 -0
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalEvent.kt +3 -0
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/helper/TerminalMappers.java +96 -0
- package/dist/docs.json +431 -66
- package/dist/esm/definitions.d.ts +94 -5
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/events.enum.d.ts +4 -1
- package/dist/esm/events.enum.js +3 -0
- package/dist/esm/events.enum.js.map +1 -1
- package/dist/esm/stripe-types/proto.d.ts +501 -0
- package/dist/esm/stripe-types/proto.js +2 -0
- package/dist/esm/stripe-types/proto.js.map +1 -0
- package/dist/esm/stripe.enum.d.ts +51 -0
- package/dist/esm/stripe.enum.js +55 -0
- package/dist/esm/stripe.enum.js.map +1 -1
- package/dist/esm/terminalMappers.d.ts +23 -0
- package/dist/esm/terminalMappers.js +119 -0
- package/dist/esm/terminalMappers.js.map +1 -0
- package/dist/esm/web.d.ts +20 -2
- package/dist/esm/web.js +134 -13
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +308 -13
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +309 -15
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/StripeTerminal.swift +248 -63
- package/ios/Plugin/StripeTerminalPlugin.m +6 -0
- package/ios/Plugin/StripeTerminalPlugin.swift +25 -4
- package/ios/Plugin/TerminalEvents.swift +3 -0
- package/ios/Plugin/TerminalMappers.swift +127 -0
- package/package.json +4 -1
|
@@ -2,20 +2,24 @@ import Foundation
|
|
|
2
2
|
import Capacitor
|
|
3
3
|
import StripeTerminal
|
|
4
4
|
|
|
5
|
-
public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDelegate, BluetoothReaderDelegate, TerminalDelegate {
|
|
5
|
+
public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDelegate, BluetoothReaderDelegate, TerminalDelegate, ReconnectionDelegate {
|
|
6
6
|
|
|
7
7
|
weak var plugin: StripeTerminalPlugin?
|
|
8
8
|
private let apiClient = APIClient()
|
|
9
|
+
|
|
9
10
|
var discoverCancelable: Cancelable?
|
|
11
|
+
var collectCancelable: Cancelable?
|
|
12
|
+
var installUpdateCancelable: Cancelable?
|
|
13
|
+
var cancelReaderConnectionCancellable: Cancelable?
|
|
14
|
+
|
|
10
15
|
var discoverCall: CAPPluginCall?
|
|
11
16
|
var locationId: String?
|
|
12
17
|
var isTest: Bool?
|
|
13
|
-
var collectCancelable: Cancelable?
|
|
14
18
|
var type: DiscoveryMethod?
|
|
15
19
|
var isInitialize: Bool = false
|
|
16
20
|
var paymentIntent: PaymentIntent?
|
|
17
21
|
|
|
18
|
-
var
|
|
22
|
+
var discoveredReadersList: [Reader]?
|
|
19
23
|
|
|
20
24
|
@objc public func initialize(_ call: CAPPluginCall) {
|
|
21
25
|
self.isTest = call.getBool("isTest", true)
|
|
@@ -61,38 +65,21 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
61
65
|
call.reject(error.localizedDescription)
|
|
62
66
|
self.discoverCall = nil
|
|
63
67
|
} else {
|
|
68
|
+
// This call is passed to discoverCall. So not resolve.
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
}
|
|
67
72
|
|
|
68
|
-
func cancelDiscoverReaders(_ call: CAPPluginCall) {
|
|
69
|
-
|
|
70
|
-
if let cancelable = self.discoverCancelable {
|
|
71
|
-
cancelable.cancel { error in
|
|
72
|
-
if let error = error {
|
|
73
|
-
call.reject(error.localizedDescription)
|
|
74
|
-
} else {
|
|
75
|
-
self.collectCancelable = nil
|
|
76
|
-
call.resolve()
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
call.resolve()
|
|
83
|
-
}
|
|
84
|
-
|
|
85
73
|
public func terminal(_ terminal: Terminal, didUpdateDiscoveredReaders readers: [Reader]) {
|
|
86
74
|
var readersJSObject: JSArray = []
|
|
87
75
|
var i = 0
|
|
88
76
|
for reader in readers {
|
|
89
77
|
readersJSObject.append([
|
|
90
|
-
"index": i
|
|
91
|
-
|
|
92
|
-
])
|
|
78
|
+
"index": i
|
|
79
|
+
].merging(self.convertReaderInterface(reader: reader)) { (_, new) in new })
|
|
93
80
|
i += 1
|
|
94
81
|
}
|
|
95
|
-
self.
|
|
82
|
+
self.discoveredReadersList = readers
|
|
96
83
|
|
|
97
84
|
self.plugin?.notifyListeners(TerminalEvents.DiscoveredReaders.rawValue, data: ["readers": readersJSObject])
|
|
98
85
|
self.discoverCall?.resolve([
|
|
@@ -113,9 +100,7 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
113
100
|
|
|
114
101
|
public func getConnectedReader(_ call: CAPPluginCall) {
|
|
115
102
|
if let reader = Terminal.shared.connectedReader {
|
|
116
|
-
call.resolve(["reader":
|
|
117
|
-
"serialNumber": reader.serialNumber
|
|
118
|
-
]])
|
|
103
|
+
call.resolve(["reader": self.convertReaderInterface(reader: reader)])
|
|
119
104
|
} else {
|
|
120
105
|
call.resolve(["reader": nil])
|
|
121
106
|
}
|
|
@@ -140,11 +125,25 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
140
125
|
}
|
|
141
126
|
|
|
142
127
|
private func connectLocalMobileReader(_ call: CAPPluginCall) {
|
|
143
|
-
let
|
|
128
|
+
let autoReconnectOnUnexpectedDisconnect = call.getBool("autoReconnectOnUnexpectedDisconnect", false)
|
|
129
|
+
let merchantDisplayName: String? = call.getString("merchantDisplayName")
|
|
130
|
+
let onBehalfOf: String? = call.getString("onBehalfOf")
|
|
144
131
|
let reader: JSObject = call.getObject("reader")!
|
|
145
|
-
let
|
|
132
|
+
let serialNumber: String = reader["serialNumber"] as! String
|
|
146
133
|
|
|
147
|
-
|
|
134
|
+
let connectionConfig = try! LocalMobileConnectionConfigurationBuilder.init(locationId: self.locationId!)
|
|
135
|
+
.setMerchantDisplayName(merchantDisplayName ?? nil)
|
|
136
|
+
.setOnBehalfOf(onBehalfOf ?? nil)
|
|
137
|
+
.setAutoReconnectOnUnexpectedDisconnect(autoReconnectOnUnexpectedDisconnect)
|
|
138
|
+
.setAutoReconnectionDelegate(autoReconnectOnUnexpectedDisconnect ? self : nil)
|
|
139
|
+
.build()
|
|
140
|
+
|
|
141
|
+
guard let foundReader = self.discoveredReadersList?.first(where: { $0.serialNumber == serialNumber }) else {
|
|
142
|
+
call.reject("reader is not match from descovered readers.")
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
Terminal.shared.connectLocalMobileReader(foundReader, delegate: self, connectionConfig: connectionConfig) { reader, error in
|
|
148
147
|
if let reader = reader {
|
|
149
148
|
self.plugin?.notifyListeners(TerminalEvents.ConnectedReader.rawValue, data: [:])
|
|
150
149
|
call.resolve()
|
|
@@ -155,13 +154,19 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
155
154
|
}
|
|
156
155
|
|
|
157
156
|
private func connectInternetReader(_ call: CAPPluginCall) {
|
|
157
|
+
let reader: JSObject = call.getObject("reader")!
|
|
158
|
+
let serialNumber: String = reader["serialNumber"] as! String
|
|
159
|
+
|
|
160
|
+
guard let foundReader = self.discoveredReadersList?.first(where: { $0.serialNumber == serialNumber }) else {
|
|
161
|
+
call.reject("reader is not match from descovered readers.")
|
|
162
|
+
return
|
|
163
|
+
}
|
|
164
|
+
|
|
158
165
|
let config = try! InternetConnectionConfigurationBuilder()
|
|
159
166
|
.setFailIfInUse(true)
|
|
160
167
|
.build()
|
|
161
|
-
let reader: JSObject = call.getObject("reader")!
|
|
162
|
-
let index: Int = reader["index"] as! Int
|
|
163
168
|
|
|
164
|
-
Terminal.shared.connectInternetReader(
|
|
169
|
+
Terminal.shared.connectInternetReader(foundReader, connectionConfig: config) { reader, error in
|
|
165
170
|
if let reader = reader {
|
|
166
171
|
self.plugin?.notifyListeners(TerminalEvents.ConnectedReader.rawValue, data: [:])
|
|
167
172
|
call.resolve()
|
|
@@ -172,11 +177,24 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
172
177
|
}
|
|
173
178
|
|
|
174
179
|
private func connectBluetoothReader(_ call: CAPPluginCall) {
|
|
175
|
-
let config = try! BluetoothConnectionConfigurationBuilder(locationId: self.locationId!).build()
|
|
176
180
|
let reader: JSObject = call.getObject("reader")!
|
|
177
|
-
let
|
|
181
|
+
let serialNumber: String = reader["serialNumber"] as! String
|
|
182
|
+
|
|
183
|
+
guard let foundReader = self.discoveredReadersList?.first(where: { $0.serialNumber == serialNumber }) else {
|
|
184
|
+
call.reject("reader is not match from descovered readers.")
|
|
185
|
+
return
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
let autoReconnectOnUnexpectedDisconnect = call.getBool("autoReconnectOnUnexpectedDisconnect", false)
|
|
189
|
+
let merchantDisplayName: String? = call.getString("merchantDisplayName")
|
|
190
|
+
let onBehalfOf: String? = call.getString("onBehalfOf")
|
|
178
191
|
|
|
179
|
-
|
|
192
|
+
let config = try! BluetoothConnectionConfigurationBuilder(locationId: self.locationId!)
|
|
193
|
+
.setAutoReconnectOnUnexpectedDisconnect(autoReconnectOnUnexpectedDisconnect)
|
|
194
|
+
.setAutoReconnectionDelegate(autoReconnectOnUnexpectedDisconnect ? self : nil)
|
|
195
|
+
.build()
|
|
196
|
+
|
|
197
|
+
Terminal.shared.connectBluetoothReader(foundReader, delegate: self, connectionConfig: config) { reader, error in
|
|
180
198
|
if let reader = reader {
|
|
181
199
|
self.plugin?.notifyListeners(TerminalEvents.ConnectedReader.rawValue, data: [:])
|
|
182
200
|
call.resolve()
|
|
@@ -190,6 +208,7 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
190
208
|
Terminal.shared.retrievePaymentIntent(clientSecret: call.getString("paymentIntent")!) { retrieveResult, retrieveError in
|
|
191
209
|
if let error = retrieveError {
|
|
192
210
|
print("retrievePaymentIntent failed: \(error)")
|
|
211
|
+
call.reject(error.localizedDescription)
|
|
193
212
|
} else if let paymentIntent = retrieveResult {
|
|
194
213
|
self.collectCancelable = Terminal.shared.collectPaymentMethod(paymentIntent) { collectResult, collectError in
|
|
195
214
|
if let error = collectError {
|
|
@@ -205,23 +224,6 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
205
224
|
}
|
|
206
225
|
}
|
|
207
226
|
|
|
208
|
-
public func cancelCollectPaymentMethod(_ call: CAPPluginCall) {
|
|
209
|
-
if let cancelable = self.collectCancelable {
|
|
210
|
-
cancelable.cancel { error in
|
|
211
|
-
if let error = error {
|
|
212
|
-
call.reject(error.localizedDescription)
|
|
213
|
-
} else {
|
|
214
|
-
self.plugin?.notifyListeners(TerminalEvents.Canceled.rawValue, data: [:])
|
|
215
|
-
self.collectCancelable = nil
|
|
216
|
-
self.paymentIntent = nil
|
|
217
|
-
call.resolve()
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return
|
|
221
|
-
}
|
|
222
|
-
call.resolve()
|
|
223
|
-
}
|
|
224
|
-
|
|
225
227
|
public func confirmPaymentIntent(_ call: CAPPluginCall) {
|
|
226
228
|
if let paymentIntent = self.paymentIntent {
|
|
227
229
|
Terminal.shared.confirmPaymentIntent(paymentIntent) { confirmResult, confirmError in
|
|
@@ -250,6 +252,151 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
250
252
|
call.resolve([:])
|
|
251
253
|
}
|
|
252
254
|
|
|
255
|
+
public func installAvailableUpdate(_ call: CAPPluginCall) {
|
|
256
|
+
Terminal.shared.installAvailableUpdate()
|
|
257
|
+
call.resolve([:])
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
public func setReaderDisplay(_ call: CAPPluginCall) {
|
|
261
|
+
guard let currency = call.getString("currency") else {
|
|
262
|
+
call.reject("You must provide a currency value")
|
|
263
|
+
return
|
|
264
|
+
}
|
|
265
|
+
guard let tax = call.getInt("tax") as? NSNumber else {
|
|
266
|
+
call.reject("You must provide a tax value")
|
|
267
|
+
return
|
|
268
|
+
}
|
|
269
|
+
guard let total = call.getInt("total") as? NSNumber else {
|
|
270
|
+
call.reject("You must provide a total value")
|
|
271
|
+
return
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
let cartBuilder = CartBuilder(currency: currency)
|
|
275
|
+
.setTax(Int(truncating: tax))
|
|
276
|
+
.setTotal(Int(truncating: total))
|
|
277
|
+
|
|
278
|
+
let cartLineItems = TerminalMappers.mapToCartLineItems(call.getArray("lineItems") ?? JSArray())
|
|
279
|
+
|
|
280
|
+
cartBuilder.setLineItems(cartLineItems)
|
|
281
|
+
|
|
282
|
+
let cart: Cart
|
|
283
|
+
do {
|
|
284
|
+
cart = try cartBuilder.build()
|
|
285
|
+
} catch {
|
|
286
|
+
call.reject(error.localizedDescription)
|
|
287
|
+
return
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
Terminal.shared.setReaderDisplay(cart) { error in
|
|
291
|
+
if let error = error as NSError? {
|
|
292
|
+
call.reject(error.localizedDescription)
|
|
293
|
+
} else {
|
|
294
|
+
call.resolve([:])
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
public func clearReaderDisplay(_ call: CAPPluginCall) {
|
|
301
|
+
Terminal.shared.clearReaderDisplay { error in
|
|
302
|
+
if let error = error as NSError? {
|
|
303
|
+
call.reject(error.localizedDescription)
|
|
304
|
+
} else {
|
|
305
|
+
call.resolve([:])
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
public func rebootReader(_ call: CAPPluginCall) {
|
|
311
|
+
Terminal.shared.rebootReader { error in
|
|
312
|
+
if let error = error as NSError? {
|
|
313
|
+
call.reject(error.localizedDescription)
|
|
314
|
+
} else {
|
|
315
|
+
self.paymentIntent = nil
|
|
316
|
+
call.resolve([:])
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Cancelable
|
|
323
|
+
*/
|
|
324
|
+
public func cancelInstallUpdate(_ call: CAPPluginCall) {
|
|
325
|
+
if let cancelable = self.installUpdateCancelable {
|
|
326
|
+
if cancelable.completed {
|
|
327
|
+
call.resolve()
|
|
328
|
+
return
|
|
329
|
+
}
|
|
330
|
+
cancelable.cancel { error in
|
|
331
|
+
if let error = error as NSError? {
|
|
332
|
+
call.reject(error.localizedDescription)
|
|
333
|
+
} else {
|
|
334
|
+
call.resolve([:])
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return
|
|
338
|
+
}
|
|
339
|
+
call.resolve([:])
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
public func cancelCollectPaymentMethod(_ call: CAPPluginCall) {
|
|
343
|
+
if let cancelable = self.collectCancelable {
|
|
344
|
+
if cancelable.completed {
|
|
345
|
+
call.resolve()
|
|
346
|
+
return
|
|
347
|
+
}
|
|
348
|
+
cancelable.cancel { error in
|
|
349
|
+
if let error = error {
|
|
350
|
+
call.reject(error.localizedDescription)
|
|
351
|
+
} else {
|
|
352
|
+
self.plugin?.notifyListeners(TerminalEvents.Canceled.rawValue, data: [:])
|
|
353
|
+
self.paymentIntent = nil
|
|
354
|
+
call.resolve()
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return
|
|
358
|
+
}
|
|
359
|
+
call.resolve()
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
func cancelDiscoverReaders(_ call: CAPPluginCall) {
|
|
363
|
+
if let cancelable = self.discoverCancelable {
|
|
364
|
+
if cancelable.completed {
|
|
365
|
+
call.resolve()
|
|
366
|
+
return
|
|
367
|
+
}
|
|
368
|
+
cancelable.cancel { error in
|
|
369
|
+
if let error = error {
|
|
370
|
+
call.reject(error.localizedDescription)
|
|
371
|
+
} else {
|
|
372
|
+
call.resolve()
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
call.resolve()
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
public func cancelReaderReconnection(_ call: CAPPluginCall) {
|
|
382
|
+
if let cancelable = self.cancelReaderConnectionCancellable {
|
|
383
|
+
if cancelable.completed {
|
|
384
|
+
call.resolve()
|
|
385
|
+
return
|
|
386
|
+
}
|
|
387
|
+
cancelable.cancel { error in
|
|
388
|
+
if let error = error as NSError? {
|
|
389
|
+
call.reject(error.localizedDescription)
|
|
390
|
+
} else {
|
|
391
|
+
call.resolve([:])
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
call.resolve()
|
|
398
|
+
}
|
|
399
|
+
|
|
253
400
|
/*
|
|
254
401
|
* Terminal
|
|
255
402
|
*/
|
|
@@ -270,7 +417,10 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
270
417
|
*/
|
|
271
418
|
|
|
272
419
|
public func localMobileReader(_ reader: Reader, didStartInstallingUpdate update: ReaderSoftwareUpdate, cancelable: Cancelable?) {
|
|
273
|
-
self.
|
|
420
|
+
self.installUpdateCancelable = cancelable
|
|
421
|
+
self.plugin?.notifyListeners(TerminalEvents.StartInstallingUpdate.rawValue, data: [
|
|
422
|
+
"update": self.convertReaderSoftwareUpdate(update: update)
|
|
423
|
+
])
|
|
274
424
|
}
|
|
275
425
|
|
|
276
426
|
public func localMobileReader(_ reader: Reader, didReportReaderSoftwareUpdateProgress progress: Float) {
|
|
@@ -307,11 +457,16 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
307
457
|
*/
|
|
308
458
|
|
|
309
459
|
public func reader(_: Reader, didReportAvailableUpdate update: ReaderSoftwareUpdate) {
|
|
310
|
-
self.plugin?.notifyListeners(TerminalEvents.ReportAvailableUpdate.rawValue, data:
|
|
460
|
+
self.plugin?.notifyListeners(TerminalEvents.ReportAvailableUpdate.rawValue, data: [
|
|
461
|
+
"update": self.convertReaderSoftwareUpdate(update: update)
|
|
462
|
+
])
|
|
311
463
|
}
|
|
312
464
|
|
|
313
465
|
public func reader(_: Reader, didStartInstallingUpdate update: ReaderSoftwareUpdate, cancelable: Cancelable?) {
|
|
314
|
-
self.
|
|
466
|
+
self.installUpdateCancelable = cancelable
|
|
467
|
+
self.plugin?.notifyListeners(TerminalEvents.StartInstallingUpdate.rawValue, data: [
|
|
468
|
+
"update": self.convertReaderSoftwareUpdate(update: update)
|
|
469
|
+
])
|
|
315
470
|
}
|
|
316
471
|
|
|
317
472
|
public func reader(_: Reader, didReportReaderSoftwareUpdateProgress progress: Float) {
|
|
@@ -363,19 +518,49 @@ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDeleg
|
|
|
363
518
|
])
|
|
364
519
|
}
|
|
365
520
|
|
|
366
|
-
|
|
367
|
-
|
|
521
|
+
/*
|
|
522
|
+
* Reconnection
|
|
523
|
+
*/
|
|
524
|
+
public func reader(_ reader: Reader, didStartReconnect cancelable: Cancelable, disconnectReason: DisconnectReason) {
|
|
525
|
+
self.cancelReaderConnectionCancellable = cancelable
|
|
526
|
+
self.plugin?.notifyListeners(TerminalEvents.ReaderReconnectStarted.rawValue, data: ["reader": self.convertReaderInterface(reader: reader), "reason": disconnectReason.rawValue])
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
public func readerDidSucceedReconnect(_ reader: Reader) {
|
|
530
|
+
self.plugin?.notifyListeners(TerminalEvents.ReaderReconnectSucceeded.rawValue, data: ["reader": self.convertReaderInterface(reader: reader)])
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
public func readerDidFailReconnect(_ reader: Reader) {
|
|
534
|
+
self.plugin?.notifyListeners(TerminalEvents.ReaderReconnectFailed.rawValue, data: ["reader": self.convertReaderInterface(reader: reader)])
|
|
368
535
|
}
|
|
369
536
|
|
|
370
|
-
|
|
537
|
+
/*
|
|
538
|
+
* Private
|
|
539
|
+
*/
|
|
540
|
+
private func convertReaderInterface(reader: Reader) -> JSObject {
|
|
371
541
|
return [
|
|
372
|
-
"
|
|
373
|
-
"
|
|
374
|
-
"
|
|
375
|
-
"
|
|
542
|
+
"label": reader.label ?? NSNull(),
|
|
543
|
+
"batteryLevel": (reader.batteryLevel ?? 0).intValue,
|
|
544
|
+
"batteryStatus": TerminalMappers.mapFromBatteryStatus(reader.batteryStatus),
|
|
545
|
+
"simulated": reader.simulated,
|
|
546
|
+
"serialNumber": reader.serialNumber,
|
|
547
|
+
"isCharging": (reader.isCharging ?? 0).intValue,
|
|
548
|
+
"id": reader.stripeId ?? NSNull(),
|
|
549
|
+
"availableUpdate": TerminalMappers.mapFromReaderSoftwareUpdate(reader.availableUpdate),
|
|
550
|
+
"locationId": reader.locationId ?? NSNull(),
|
|
551
|
+
"ipAddress": reader.ipAddress ?? NSNull(),
|
|
552
|
+
"status": TerminalMappers.mapFromReaderNetworkStatus(reader.status),
|
|
553
|
+
"location": TerminalMappers.mapFromLocation(reader.location),
|
|
554
|
+
"locationStatus": TerminalMappers.mapFromLocationStatus(reader.locationStatus),
|
|
555
|
+
"deviceType": TerminalMappers.mapFromDeviceType(reader.deviceType),
|
|
556
|
+
"deviceSoftwareVersion": reader.deviceSoftwareVersion ?? NSNull()
|
|
376
557
|
]
|
|
377
558
|
}
|
|
378
559
|
|
|
560
|
+
private func convertReaderSoftwareUpdate(update: ReaderSoftwareUpdate) -> JSObject {
|
|
561
|
+
return TerminalMappers.mapFromReaderSoftwareUpdate(update)
|
|
562
|
+
}
|
|
563
|
+
|
|
379
564
|
}
|
|
380
565
|
|
|
381
566
|
class APIClient: ConnectionTokenProvider {
|
|
@@ -15,4 +15,10 @@ CAP_PLUGIN(StripeTerminalPlugin, "StripeTerminal",
|
|
|
15
15
|
CAP_PLUGIN_METHOD(cancelCollectPaymentMethod, CAPPluginReturnPromise);
|
|
16
16
|
CAP_PLUGIN_METHOD(confirmPaymentIntent, CAPPluginReturnPromise);
|
|
17
17
|
CAP_PLUGIN_METHOD(setSimulatorConfiguration, CAPPluginReturnPromise);
|
|
18
|
+
CAP_PLUGIN_METHOD(installAvailableUpdate, CAPPluginReturnPromise);
|
|
19
|
+
CAP_PLUGIN_METHOD(cancelInstallUpdate, CAPPluginReturnPromise);
|
|
20
|
+
CAP_PLUGIN_METHOD(setReaderDisplay, CAPPluginReturnPromise);
|
|
21
|
+
CAP_PLUGIN_METHOD(clearReaderDisplay, CAPPluginReturnPromise);
|
|
22
|
+
CAP_PLUGIN_METHOD(rebootReader, CAPPluginReturnPromise);
|
|
23
|
+
CAP_PLUGIN_METHOD(cancelReaderReconnection, CAPPluginReturnPromise);
|
|
18
24
|
)
|
|
@@ -3,10 +3,6 @@ import StripeTerminal
|
|
|
3
3
|
import Capacitor
|
|
4
4
|
import PassKit
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
* Please read the Capacitor iOS Plugin Development Guide
|
|
8
|
-
* here: https://capacitorjs.com/docs/plugins/ios
|
|
9
|
-
*/
|
|
10
6
|
@objc(StripeTerminalPlugin)
|
|
11
7
|
public class StripeTerminalPlugin: CAPPlugin {
|
|
12
8
|
private let implementation = StripeTerminal()
|
|
@@ -64,4 +60,29 @@ public class StripeTerminalPlugin: CAPPlugin {
|
|
|
64
60
|
@objc func confirmPaymentIntent(_ call: CAPPluginCall) {
|
|
65
61
|
self.implementation.confirmPaymentIntent(call)
|
|
66
62
|
}
|
|
63
|
+
|
|
64
|
+
@objc func installAvailableUpdate(_ call: CAPPluginCall) {
|
|
65
|
+
self.implementation.installAvailableUpdate(call)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@objc func cancelInstallUpdate(_ call: CAPPluginCall) {
|
|
69
|
+
self.implementation.cancelInstallUpdate(call)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@objc func setReaderDisplay(_ call: CAPPluginCall) {
|
|
73
|
+
self.implementation.setReaderDisplay(call)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@objc func clearReaderDisplay(_ call: CAPPluginCall) {
|
|
77
|
+
self.implementation.clearReaderDisplay(call)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@objc func rebootReader(_ call: CAPPluginCall) {
|
|
81
|
+
self.implementation.rebootReader(call)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@objc func cancelReaderReconnection(_ call: CAPPluginCall) {
|
|
85
|
+
self.implementation.cancelReaderReconnection(call)
|
|
86
|
+
}
|
|
87
|
+
|
|
67
88
|
}
|
|
@@ -19,4 +19,7 @@ public enum TerminalEvents: String {
|
|
|
19
19
|
case RequestDisplayMessage = "terminalRequestDisplayMessage"
|
|
20
20
|
case RequestReaderInput = "terminalRequestReaderInput"
|
|
21
21
|
case PaymentStatusChange = "terminalPaymentStatusChange"
|
|
22
|
+
case ReaderReconnectStarted = "terminalReaderReconnectStarted"
|
|
23
|
+
case ReaderReconnectSucceeded = "terminalReaderReconnectSucceeded"
|
|
24
|
+
case ReaderReconnectFailed = "terminalReaderReconnectFailed"
|
|
22
25
|
}
|
|
@@ -2,6 +2,133 @@ import StripeTerminal
|
|
|
2
2
|
import Capacitor
|
|
3
3
|
|
|
4
4
|
class TerminalMappers {
|
|
5
|
+
class func mapFromDeviceType(_ type: DeviceType) -> String {
|
|
6
|
+
switch type {
|
|
7
|
+
case DeviceType.appleBuiltIn: return "appleBuiltIn"
|
|
8
|
+
case DeviceType.chipper1X: return "chipper1X"
|
|
9
|
+
case DeviceType.chipper2X: return "chipper2X"
|
|
10
|
+
case DeviceType.etna: return "etna"
|
|
11
|
+
case DeviceType.stripeM2: return "stripeM2"
|
|
12
|
+
case DeviceType.stripeS700: return "stripeS700"
|
|
13
|
+
case DeviceType.stripeS700DevKit: return "stripeS700Devkit"
|
|
14
|
+
case DeviceType.verifoneP400: return "verifoneP400"
|
|
15
|
+
case DeviceType.wiseCube: return "wiseCube"
|
|
16
|
+
case DeviceType.wisePad3: return "wisePad3"
|
|
17
|
+
case DeviceType.wisePosE: return "wisePosE"
|
|
18
|
+
case DeviceType.wisePosEDevKit: return "wisePosEDevkit"
|
|
19
|
+
default: return "unknown"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
class func mapFromAddress(_ address: Address?) -> JSObject {
|
|
24
|
+
if let address = address {
|
|
25
|
+
let result: JSObject = [
|
|
26
|
+
"city": address.city ?? NSNull(),
|
|
27
|
+
"country": address.country ?? NSNull(),
|
|
28
|
+
"postalCode": address.postalCode ?? NSNull(),
|
|
29
|
+
"line1": address.line1 ?? NSNull(),
|
|
30
|
+
"line2": address.line2 ?? NSNull(),
|
|
31
|
+
"state": address.state ?? NSNull()
|
|
32
|
+
]
|
|
33
|
+
return result
|
|
34
|
+
} else {
|
|
35
|
+
return JSObject()
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
class func mapFromLocation(_ location: Location?) -> JSObject {
|
|
40
|
+
guard let unwrappedLocation = location else {
|
|
41
|
+
return [:]
|
|
42
|
+
}
|
|
43
|
+
let result: JSObject = [
|
|
44
|
+
"displayName": unwrappedLocation.displayName ?? NSNull(),
|
|
45
|
+
"id": unwrappedLocation.stripeId,
|
|
46
|
+
"livemode": unwrappedLocation.livemode,
|
|
47
|
+
"address": mapFromAddress(unwrappedLocation.address)
|
|
48
|
+
]
|
|
49
|
+
return result
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
class func mapFromLocationStatus(_ status: LocationStatus) -> String {
|
|
53
|
+
switch status {
|
|
54
|
+
case LocationStatus.notSet: return "NOT_SET"
|
|
55
|
+
case LocationStatus.set: return "SET"
|
|
56
|
+
case LocationStatus.unknown: return "UNKNOWN"
|
|
57
|
+
default: return "UNKNOWN"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
class func mapFromLocationsList(_ locations: [Location]) -> JSArray {
|
|
62
|
+
var list: JSArray = []
|
|
63
|
+
|
|
64
|
+
for location in locations {
|
|
65
|
+
let result = mapFromLocation(location)
|
|
66
|
+
if result.count != 0 {
|
|
67
|
+
list.append(result)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return list
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
class func mapFromReaderNetworkStatus(_ status: ReaderNetworkStatus) -> String {
|
|
75
|
+
switch status {
|
|
76
|
+
case ReaderNetworkStatus.offline: return "OFFLINE"
|
|
77
|
+
case ReaderNetworkStatus.online: return "ONLINE"
|
|
78
|
+
default: return "UNKNOWN"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
class func convertDateToUnixTimestamp(date: Date?) -> String {
|
|
83
|
+
if let date = date {
|
|
84
|
+
let value = date.timeIntervalSince1970 * 1000.0
|
|
85
|
+
return String(format: "%.0f", value)
|
|
86
|
+
}
|
|
87
|
+
return ""
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
class func mapFromReaderSoftwareUpdate(_ update: ReaderSoftwareUpdate?) -> JSObject {
|
|
91
|
+
guard let unwrappedUpdate = update else {
|
|
92
|
+
return JSObject()
|
|
93
|
+
}
|
|
94
|
+
let result: JSObject = [
|
|
95
|
+
"deviceSoftwareVersion": unwrappedUpdate.deviceSoftwareVersion,
|
|
96
|
+
"estimatedUpdateTime": mapFromUpdateTimeEstimate(unwrappedUpdate.estimatedUpdateTime),
|
|
97
|
+
"requiredAt": convertDateToUnixTimestamp(date: unwrappedUpdate.requiredAt)
|
|
98
|
+
]
|
|
99
|
+
return result
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
class func mapToCartLineItem(_ cartLineItem: NSDictionary) -> CartLineItem? {
|
|
103
|
+
guard let displayName = cartLineItem["displayName"] as? String else { return nil }
|
|
104
|
+
guard let quantity = cartLineItem["quantity"] as? NSNumber else { return nil }
|
|
105
|
+
guard let amount = cartLineItem["amount"] as? NSNumber else { return nil }
|
|
106
|
+
|
|
107
|
+
do {
|
|
108
|
+
let lineItem = try CartLineItemBuilder(displayName: displayName)
|
|
109
|
+
.setQuantity(Int(truncating: quantity))
|
|
110
|
+
.setAmount(Int(truncating: amount))
|
|
111
|
+
.build()
|
|
112
|
+
return lineItem
|
|
113
|
+
} catch {
|
|
114
|
+
print("Error wihle building CartLineItem, error:\(error)")
|
|
115
|
+
return nil
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
class func mapToCartLineItems(_ cartLineItems: JSArray) -> [CartLineItem] {
|
|
120
|
+
var items = [CartLineItem]()
|
|
121
|
+
|
|
122
|
+
cartLineItems.forEach {
|
|
123
|
+
if let item = $0 as? NSDictionary {
|
|
124
|
+
if let lineItem = TerminalMappers.mapToCartLineItem(item) {
|
|
125
|
+
items.append(lineItem)
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return items
|
|
130
|
+
}
|
|
131
|
+
|
|
5
132
|
class func mapToSimulateReaderUpdate(_ update: String) -> SimulateReaderUpdate {
|
|
6
133
|
switch update {
|
|
7
134
|
case "UPDATE_AVAILABLE": return SimulateReaderUpdate.available
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor-community/stripe-terminal",
|
|
3
|
-
"version": "6.1
|
|
3
|
+
"version": "6.2.1",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=18.0.0"
|
|
6
6
|
},
|
|
@@ -77,5 +77,8 @@
|
|
|
77
77
|
"android": {
|
|
78
78
|
"src": "android"
|
|
79
79
|
}
|
|
80
|
+
},
|
|
81
|
+
"dependencies": {
|
|
82
|
+
"@stripe/terminal-js": "^0.13.0"
|
|
80
83
|
}
|
|
81
84
|
}
|