@capacitor-community/stripe-terminal 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +304 -35
- 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
package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.java
CHANGED
|
@@ -14,6 +14,7 @@ import androidx.core.util.Supplier;
|
|
|
14
14
|
import com.getcapacitor.JSArray;
|
|
15
15
|
import com.getcapacitor.JSObject;
|
|
16
16
|
import com.getcapacitor.PluginCall;
|
|
17
|
+
import com.getcapacitor.community.stripe.terminal.helper.TerminalMappers;
|
|
17
18
|
import com.getcapacitor.community.stripe.terminal.models.Executor;
|
|
18
19
|
import com.google.android.gms.common.util.BiConsumer;
|
|
19
20
|
import com.stripe.stripeterminal.Terminal;
|
|
@@ -28,14 +29,19 @@ import com.stripe.stripeterminal.external.callable.ReaderReconnectionListener;
|
|
|
28
29
|
import com.stripe.stripeterminal.external.callable.TerminalListener;
|
|
29
30
|
import com.stripe.stripeterminal.external.models.BatteryStatus;
|
|
30
31
|
import com.stripe.stripeterminal.external.models.CardPresentDetails;
|
|
32
|
+
import com.stripe.stripeterminal.external.models.Cart;
|
|
33
|
+
import com.stripe.stripeterminal.external.models.CartLineItem;
|
|
31
34
|
import com.stripe.stripeterminal.external.models.CollectConfiguration;
|
|
32
35
|
import com.stripe.stripeterminal.external.models.ConnectionConfiguration.BluetoothConnectionConfiguration;
|
|
33
36
|
import com.stripe.stripeterminal.external.models.ConnectionConfiguration.InternetConnectionConfiguration;
|
|
34
37
|
import com.stripe.stripeterminal.external.models.ConnectionConfiguration.LocalMobileConnectionConfiguration;
|
|
35
38
|
import com.stripe.stripeterminal.external.models.ConnectionConfiguration.UsbConnectionConfiguration;
|
|
36
39
|
import com.stripe.stripeterminal.external.models.ConnectionStatus;
|
|
40
|
+
import com.stripe.stripeterminal.external.models.DeviceType;
|
|
37
41
|
import com.stripe.stripeterminal.external.models.DisconnectReason;
|
|
38
42
|
import com.stripe.stripeterminal.external.models.DiscoveryConfiguration;
|
|
43
|
+
import com.stripe.stripeterminal.external.models.Location;
|
|
44
|
+
import com.stripe.stripeterminal.external.models.LocationStatus;
|
|
39
45
|
import com.stripe.stripeterminal.external.models.PaymentIntent;
|
|
40
46
|
import com.stripe.stripeterminal.external.models.PaymentMethod;
|
|
41
47
|
import com.stripe.stripeterminal.external.models.PaymentStatus;
|
|
@@ -54,13 +60,17 @@ import java.util.ArrayList;
|
|
|
54
60
|
import java.util.List;
|
|
55
61
|
import java.util.Objects;
|
|
56
62
|
import org.jetbrains.annotations.NotNull;
|
|
63
|
+
import org.json.JSONException;
|
|
64
|
+
import org.json.JSONObject;
|
|
57
65
|
|
|
58
66
|
public class StripeTerminal extends Executor {
|
|
59
67
|
|
|
60
68
|
private TokenProvider tokenProvider;
|
|
61
69
|
private Cancelable discoveryCancelable;
|
|
62
70
|
private Cancelable collectCancelable;
|
|
63
|
-
private
|
|
71
|
+
private Cancelable installUpdateCancelable;
|
|
72
|
+
private Cancelable cancelReaderConnectionCancellable;
|
|
73
|
+
private List<Reader> discoveredReadersList;
|
|
64
74
|
private String locationId;
|
|
65
75
|
private PluginCall collectCall;
|
|
66
76
|
private PluginCall confirmPaymentIntentCall;
|
|
@@ -69,6 +79,8 @@ public class StripeTerminal extends Executor {
|
|
|
69
79
|
private TerminalConnectTypes terminalConnectType;
|
|
70
80
|
private PaymentIntent paymentIntentInstance;
|
|
71
81
|
|
|
82
|
+
private final TerminalMappers terminalMappers = new TerminalMappers();
|
|
83
|
+
|
|
72
84
|
public StripeTerminal(
|
|
73
85
|
Supplier<Context> contextSupplier,
|
|
74
86
|
Supplier<Activity> activitySupplier,
|
|
@@ -77,7 +89,7 @@ public class StripeTerminal extends Executor {
|
|
|
77
89
|
) {
|
|
78
90
|
super(contextSupplier, activitySupplier, notifyListenersFunction, pluginLogTag, "StripeTerminalExecutor");
|
|
79
91
|
this.contextSupplier = contextSupplier;
|
|
80
|
-
this.
|
|
92
|
+
this.discoveredReadersList = new ArrayList<>();
|
|
81
93
|
}
|
|
82
94
|
|
|
83
95
|
public void initialize(final PluginCall call) throws TerminalException {
|
|
@@ -189,11 +201,11 @@ public class StripeTerminal extends Executor {
|
|
|
189
201
|
final DiscoveryListener discoveryListener = readers -> {
|
|
190
202
|
// 検索したReaderの一覧をListenerで渡す
|
|
191
203
|
Log.d(logTag, String.valueOf(readers.get(0).getSerialNumber()));
|
|
192
|
-
this.
|
|
204
|
+
this.discoveredReadersList = readers;
|
|
193
205
|
JSArray readersJSObject = new JSArray();
|
|
194
206
|
|
|
195
207
|
int i = 0;
|
|
196
|
-
for (Reader reader : this.
|
|
208
|
+
for (Reader reader : this.discoveredReadersList) {
|
|
197
209
|
readersJSObject.put(convertReaderInterface(reader).put("index", String.valueOf(i)));
|
|
198
210
|
}
|
|
199
211
|
this.notifyListeners(TerminalEnumEvent.DiscoveredReaders.getWebEventName(), new JSObject().put("readers", readersJSObject));
|
|
@@ -268,81 +280,125 @@ public class StripeTerminal extends Executor {
|
|
|
268
280
|
|
|
269
281
|
private void connectLocalMobileReader(final PluginCall call) {
|
|
270
282
|
JSObject reader = call.getObject("reader");
|
|
283
|
+
String serialNumber = reader.getString("serialNumber");
|
|
284
|
+
|
|
285
|
+
Reader foundReader =
|
|
286
|
+
this.discoveredReadersList.stream().filter(device -> serialNumber.equals(device.getSerialNumber())).findFirst().orElse(null);
|
|
271
287
|
|
|
272
|
-
if (
|
|
288
|
+
if (serialNumber == null || foundReader == null) {
|
|
273
289
|
call.reject("The reader value is not set correctly.");
|
|
274
290
|
return;
|
|
275
291
|
}
|
|
276
292
|
|
|
293
|
+
Boolean autoReconnectOnUnexpectedDisconnect = call.getBoolean("autoReconnectOnUnexpectedDisconnect", false);
|
|
294
|
+
|
|
277
295
|
LocalMobileConnectionConfiguration config = new LocalMobileConnectionConfiguration(
|
|
278
296
|
this.locationId,
|
|
279
|
-
|
|
280
|
-
this.
|
|
297
|
+
autoReconnectOnUnexpectedDisconnect,
|
|
298
|
+
this.readerReconnectionListener
|
|
281
299
|
);
|
|
282
|
-
Terminal.getInstance().connectLocalMobileReader(
|
|
300
|
+
Terminal.getInstance().connectLocalMobileReader(foundReader, config, this.readerCallback(call));
|
|
283
301
|
}
|
|
284
302
|
|
|
285
|
-
ReaderReconnectionListener
|
|
303
|
+
ReaderReconnectionListener readerReconnectionListener = new ReaderReconnectionListener() {
|
|
286
304
|
@Override
|
|
287
|
-
public void onReaderReconnectStarted(@NonNull Reader reader, @NonNull Cancelable
|
|
288
|
-
|
|
289
|
-
|
|
305
|
+
public void onReaderReconnectStarted(@NonNull Reader reader, @NonNull Cancelable cancelable, @NonNull DisconnectReason reason) {
|
|
306
|
+
cancelReaderConnectionCancellable = cancelable;
|
|
307
|
+
notifyListeners(
|
|
308
|
+
TerminalEnumEvent.ReaderReconnectStarted.getWebEventName(),
|
|
309
|
+
new JSObject().put("reason", reason.toString()).put("reader", convertReaderInterface(reader))
|
|
310
|
+
);
|
|
290
311
|
}
|
|
291
312
|
|
|
292
313
|
@Override
|
|
293
314
|
public void onReaderReconnectSucceeded(@NonNull Reader reader) {
|
|
294
|
-
|
|
295
|
-
|
|
315
|
+
notifyListeners(
|
|
316
|
+
TerminalEnumEvent.ReaderReconnectSucceeded.getWebEventName(),
|
|
317
|
+
new JSObject().put("reader", convertReaderInterface(reader))
|
|
318
|
+
);
|
|
296
319
|
}
|
|
297
320
|
|
|
298
321
|
@Override
|
|
299
322
|
public void onReaderReconnectFailed(@NonNull Reader reader) {
|
|
300
|
-
|
|
301
|
-
|
|
323
|
+
notifyListeners(
|
|
324
|
+
TerminalEnumEvent.ReaderReconnectFailed.getWebEventName(),
|
|
325
|
+
new JSObject().put("reader", convertReaderInterface(reader))
|
|
326
|
+
);
|
|
302
327
|
}
|
|
303
328
|
};
|
|
304
329
|
|
|
305
330
|
private void connectInternetReader(final PluginCall call) {
|
|
306
331
|
JSObject reader = call.getObject("reader");
|
|
332
|
+
String serialNumber = reader.getString("serialNumber");
|
|
333
|
+
|
|
334
|
+
Reader foundReader =
|
|
335
|
+
this.discoveredReadersList.stream().filter(device -> serialNumber.equals(device.getSerialNumber())).findFirst().orElse(null);
|
|
336
|
+
|
|
337
|
+
if (serialNumber == null || foundReader == null) {
|
|
338
|
+
call.reject("The reader value is not set correctly.");
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
|
|
307
342
|
InternetConnectionConfiguration config = new InternetConnectionConfiguration();
|
|
308
|
-
Terminal.getInstance().connectInternetReader(
|
|
343
|
+
Terminal.getInstance().connectInternetReader(foundReader, config, this.readerCallback(call));
|
|
309
344
|
}
|
|
310
345
|
|
|
311
346
|
private void connectUsbReader(final PluginCall call) {
|
|
312
347
|
JSObject reader = call.getObject("reader");
|
|
348
|
+
String serialNumber = reader.getString("serialNumber");
|
|
349
|
+
|
|
350
|
+
Reader foundReader =
|
|
351
|
+
this.discoveredReadersList.stream().filter(device -> serialNumber.equals(device.getSerialNumber())).findFirst().orElse(null);
|
|
352
|
+
|
|
353
|
+
if (serialNumber == null || foundReader == null) {
|
|
354
|
+
call.reject("The reader value is not set correctly.");
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
|
|
313
358
|
UsbConnectionConfiguration config = new UsbConnectionConfiguration(this.locationId);
|
|
314
|
-
Terminal
|
|
315
|
-
.getInstance()
|
|
316
|
-
.connectUsbReader(this.readers.get(reader.getInteger("index")), config, this.readerListener(), this.readerCallback(call));
|
|
359
|
+
Terminal.getInstance().connectUsbReader(foundReader, config, this.readerListener(), this.readerCallback(call));
|
|
317
360
|
}
|
|
318
361
|
|
|
319
362
|
private void connectBluetoothReader(final PluginCall call) {
|
|
320
363
|
JSObject reader = call.getObject("reader");
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
.
|
|
364
|
+
String serialNumber = reader.getString("serialNumber");
|
|
365
|
+
|
|
366
|
+
Reader foundReader =
|
|
367
|
+
this.discoveredReadersList.stream().filter(device -> serialNumber.equals(device.getSerialNumber())).findFirst().orElse(null);
|
|
368
|
+
|
|
369
|
+
if (serialNumber == null || foundReader == null) {
|
|
370
|
+
call.reject("The reader value is not set correctly.");
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
Boolean autoReconnectOnUnexpectedDisconnect = call.getBoolean("autoReconnectOnUnexpectedDisconnect", false);
|
|
374
|
+
|
|
375
|
+
BluetoothConnectionConfiguration config = new BluetoothConnectionConfiguration(
|
|
376
|
+
this.locationId,
|
|
377
|
+
autoReconnectOnUnexpectedDisconnect,
|
|
378
|
+
this.readerReconnectionListener
|
|
379
|
+
);
|
|
380
|
+
Terminal.getInstance().connectBluetoothReader(foundReader, config, this.readerListener(), this.readerCallback(call));
|
|
325
381
|
}
|
|
326
382
|
|
|
327
383
|
public void cancelDiscoverReaders(final PluginCall call) {
|
|
328
|
-
if (discoveryCancelable
|
|
329
|
-
discoveryCancelable.cancel(
|
|
330
|
-
new Callback() {
|
|
331
|
-
@Override
|
|
332
|
-
public void onSuccess() {
|
|
333
|
-
notifyListeners(TerminalEnumEvent.CancelDiscoveredReaders.getWebEventName(), emptyObject);
|
|
334
|
-
call.resolve();
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
@Override
|
|
338
|
-
public void onFailure(@NonNull TerminalException ex) {
|
|
339
|
-
call.reject(ex.getLocalizedMessage(), ex);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
);
|
|
343
|
-
} else {
|
|
384
|
+
if (discoveryCancelable == null || discoveryCancelable.isCompleted()) {
|
|
344
385
|
call.resolve();
|
|
386
|
+
return;
|
|
345
387
|
}
|
|
388
|
+
discoveryCancelable.cancel(
|
|
389
|
+
new Callback() {
|
|
390
|
+
@Override
|
|
391
|
+
public void onSuccess() {
|
|
392
|
+
notifyListeners(TerminalEnumEvent.CancelDiscoveredReaders.getWebEventName(), emptyObject);
|
|
393
|
+
call.resolve();
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
@Override
|
|
397
|
+
public void onFailure(@NonNull TerminalException ex) {
|
|
398
|
+
call.reject(ex.getLocalizedMessage(), ex);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
);
|
|
346
402
|
}
|
|
347
403
|
|
|
348
404
|
public void collectPaymentMethod(final PluginCall call) {
|
|
@@ -364,7 +420,6 @@ public class StripeTerminal extends Executor {
|
|
|
364
420
|
new Callback() {
|
|
365
421
|
@Override
|
|
366
422
|
public void onSuccess() {
|
|
367
|
-
collectCancelable = null;
|
|
368
423
|
notifyListeners(TerminalEnumEvent.Canceled.getWebEventName(), emptyObject);
|
|
369
424
|
call.resolve();
|
|
370
425
|
}
|
|
@@ -394,7 +449,6 @@ public class StripeTerminal extends Executor {
|
|
|
394
449
|
private final PaymentIntentCallback collectPaymentMethodCallback = new PaymentIntentCallback() {
|
|
395
450
|
@Override
|
|
396
451
|
public void onSuccess(PaymentIntent paymentIntent) {
|
|
397
|
-
collectCancelable = null;
|
|
398
452
|
paymentIntentInstance = paymentIntent;
|
|
399
453
|
notifyListeners(TerminalEnumEvent.CollectedPaymentIntent.getWebEventName(), emptyObject);
|
|
400
454
|
|
|
@@ -424,7 +478,6 @@ public class StripeTerminal extends Executor {
|
|
|
424
478
|
|
|
425
479
|
@Override
|
|
426
480
|
public void onFailure(@NonNull TerminalException ex) {
|
|
427
|
-
collectCancelable = null;
|
|
428
481
|
notifyListeners(TerminalEnumEvent.Failed.getWebEventName(), emptyObject);
|
|
429
482
|
collectCall.reject(ex.getLocalizedMessage(), ex);
|
|
430
483
|
}
|
|
@@ -440,6 +493,149 @@ public class StripeTerminal extends Executor {
|
|
|
440
493
|
Terminal.getInstance().confirmPaymentIntent(this.paymentIntentInstance, confirmPaymentMethodCallback);
|
|
441
494
|
}
|
|
442
495
|
|
|
496
|
+
public void installAvailableUpdate(final PluginCall call) {
|
|
497
|
+
Terminal.getInstance().installAvailableUpdate();
|
|
498
|
+
call.resolve(emptyObject);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
public void cancelInstallUpdate(final PluginCall call) {
|
|
502
|
+
if (this.installUpdateCancelable == null || this.installUpdateCancelable.isCompleted()) {
|
|
503
|
+
call.resolve();
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
this.installUpdateCancelable.cancel(
|
|
508
|
+
new Callback() {
|
|
509
|
+
@Override
|
|
510
|
+
public void onSuccess() {
|
|
511
|
+
call.resolve();
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
@Override
|
|
515
|
+
public void onFailure(@NonNull TerminalException e) {
|
|
516
|
+
call.reject(e.getLocalizedMessage());
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
public void setReaderDisplay(final PluginCall call) {
|
|
523
|
+
String currency = call.getString("currency", null);
|
|
524
|
+
if (currency == null) {
|
|
525
|
+
call.reject("You must provide a currency value");
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
int tax = call.getInt("tax", 0);
|
|
530
|
+
int total = call.getInt("total", 0);
|
|
531
|
+
if (total == 0) {
|
|
532
|
+
call.reject("You must provide a total value");
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
JSArray lineItems = call.getArray("lineItems");
|
|
537
|
+
List<JSONObject> lineItemsList;
|
|
538
|
+
try {
|
|
539
|
+
lineItemsList = lineItems.toList();
|
|
540
|
+
} catch (JSONException e) {
|
|
541
|
+
call.reject(e.getLocalizedMessage());
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
List<CartLineItem> cartLineItems = new ArrayList<>();
|
|
546
|
+
for (JSONObject item : lineItemsList) {
|
|
547
|
+
try {
|
|
548
|
+
JSObject itemObj = JSObject.fromJSONObject(item);
|
|
549
|
+
cartLineItems.add(
|
|
550
|
+
new CartLineItem(
|
|
551
|
+
Objects.requireNonNull(itemObj.getString("displayName")),
|
|
552
|
+
Objects.requireNonNull(itemObj.getInteger("quantity")),
|
|
553
|
+
Objects.requireNonNull(itemObj.getInteger("amount"))
|
|
554
|
+
)
|
|
555
|
+
);
|
|
556
|
+
} catch (JSONException e) {
|
|
557
|
+
call.reject(e.getLocalizedMessage());
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
Cart cart = new Cart.Builder(currency, tax, total, cartLineItems).build();
|
|
563
|
+
|
|
564
|
+
Terminal
|
|
565
|
+
.getInstance()
|
|
566
|
+
.setReaderDisplay(
|
|
567
|
+
cart,
|
|
568
|
+
new Callback() {
|
|
569
|
+
@Override
|
|
570
|
+
public void onSuccess() {
|
|
571
|
+
call.resolve();
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
@Override
|
|
575
|
+
public void onFailure(@NonNull TerminalException e) {
|
|
576
|
+
call.reject(e.getErrorMessage());
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
public void clearReaderDisplay(final PluginCall call) {
|
|
583
|
+
Terminal
|
|
584
|
+
.getInstance()
|
|
585
|
+
.clearReaderDisplay(
|
|
586
|
+
new Callback() {
|
|
587
|
+
@Override
|
|
588
|
+
public void onSuccess() {
|
|
589
|
+
call.resolve();
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
@Override
|
|
593
|
+
public void onFailure(@NonNull TerminalException e) {
|
|
594
|
+
call.reject(e.getErrorMessage());
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
);
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
public void rebootReader(final PluginCall call) {
|
|
601
|
+
Terminal
|
|
602
|
+
.getInstance()
|
|
603
|
+
.rebootReader(
|
|
604
|
+
new Callback() {
|
|
605
|
+
@Override
|
|
606
|
+
public void onSuccess() {
|
|
607
|
+
paymentIntentInstance = null;
|
|
608
|
+
call.resolve(emptyObject);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
@Override
|
|
612
|
+
public void onFailure(@NonNull TerminalException e) {
|
|
613
|
+
call.reject(e.getLocalizedMessage());
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
public void cancelReaderReconnection(final PluginCall call) {
|
|
620
|
+
if (cancelReaderConnectionCancellable == null || cancelReaderConnectionCancellable.isCompleted()) {
|
|
621
|
+
call.resolve();
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
624
|
+
cancelReaderConnectionCancellable.cancel(
|
|
625
|
+
new Callback() {
|
|
626
|
+
@Override
|
|
627
|
+
public void onSuccess() {
|
|
628
|
+
call.resolve();
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
@Override
|
|
632
|
+
public void onFailure(@NonNull TerminalException ex) {
|
|
633
|
+
call.reject(ex.getLocalizedMessage(), ex);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
);
|
|
637
|
+
}
|
|
638
|
+
|
|
443
639
|
private final PaymentIntentCallback confirmPaymentMethodCallback = new PaymentIntentCallback() {
|
|
444
640
|
@Override
|
|
445
641
|
public void onSuccess(PaymentIntent paymentIntent) {
|
|
@@ -476,6 +672,7 @@ public class StripeTerminal extends Executor {
|
|
|
476
672
|
@Override
|
|
477
673
|
public void onStartInstallingUpdate(@NotNull ReaderSoftwareUpdate update, @NotNull Cancelable cancelable) {
|
|
478
674
|
// Show UI communicating that a required update has started installing
|
|
675
|
+
installUpdateCancelable = cancelable;
|
|
479
676
|
notifyListeners(
|
|
480
677
|
TerminalEnumEvent.StartInstallingUpdate.getWebEventName(),
|
|
481
678
|
new JSObject().put("update", convertReaderSoftwareUpdate(update))
|
|
@@ -558,14 +755,35 @@ public class StripeTerminal extends Executor {
|
|
|
558
755
|
}
|
|
559
756
|
|
|
560
757
|
private JSObject convertReaderInterface(Reader reader) {
|
|
561
|
-
return new JSObject()
|
|
758
|
+
return new JSObject()
|
|
759
|
+
.put("label", reader.getLabel())
|
|
760
|
+
.put("serialNumber", reader.getSerialNumber())
|
|
761
|
+
.put("id", reader.getId())
|
|
762
|
+
.put("locationId", reader.getLocation() != null ? reader.getLocation().getId() : null)
|
|
763
|
+
.put("deviceSoftwareVersion", reader.getDeviceSwVersion$external_publish())
|
|
764
|
+
.put("simulated", reader.isSimulated())
|
|
765
|
+
.put("serialNumber", reader.getSerialNumber())
|
|
766
|
+
.put("ipAddress", reader.getIpAddress())
|
|
767
|
+
.put("baseUrl", reader.getBaseUrl())
|
|
768
|
+
.put("bootloaderVersion", reader.getBootloaderVersion())
|
|
769
|
+
.put("configVersion", reader.getConfigVersion())
|
|
770
|
+
.put("emvKeyProfileId", reader.getEmvKeyProfileId())
|
|
771
|
+
.put("firmwareVersion", reader.getFirmwareVersion())
|
|
772
|
+
.put("hardwareVersion", reader.getHardwareVersion())
|
|
773
|
+
.put("macKeyProfileId", reader.getMacKeyProfileId())
|
|
774
|
+
.put("pinKeyProfileId", reader.getPinKeyProfileId())
|
|
775
|
+
.put("trackKeyProfileId", reader.getTrackKeyProfileId())
|
|
776
|
+
.put("settingsVersion", reader.getSettingsVersion())
|
|
777
|
+
.put("pinKeysetId", reader.getPinKeysetId())
|
|
778
|
+
.put("deviceType", terminalMappers.mapFromDeviceType(reader.getDeviceType()))
|
|
779
|
+
.put("status", terminalMappers.mapFromNetworkStatus(reader.getNetworkStatus()))
|
|
780
|
+
.put("locationStatus", terminalMappers.mapFromLocationStatus(reader.getLocationStatus()))
|
|
781
|
+
.put("batteryLevel", reader.getBatteryLevel() != null ? reader.getBatteryLevel().doubleValue() : null)
|
|
782
|
+
.put("availableUpdate", terminalMappers.mapFromReaderSoftwareUpdate(reader.getAvailableUpdate()))
|
|
783
|
+
.put("location", terminalMappers.mapFromLocation(reader.getLocation()));
|
|
562
784
|
}
|
|
563
785
|
|
|
564
786
|
private JSObject convertReaderSoftwareUpdate(ReaderSoftwareUpdate update) {
|
|
565
|
-
return
|
|
566
|
-
.put("version", update.getVersion())
|
|
567
|
-
.put("settingsVersion", update.getSettingsVersion())
|
|
568
|
-
.put("requiredAt", update.getRequiredAt().getTime())
|
|
569
|
-
.put("timeEstimate", update.getTimeEstimate().toString());
|
|
787
|
+
return terminalMappers.mapFromReaderSoftwareUpdate(update);
|
|
570
788
|
}
|
|
571
789
|
}
|
package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminalPlugin.java
CHANGED
|
@@ -160,4 +160,34 @@ public class StripeTerminalPlugin extends Plugin {
|
|
|
160
160
|
public void confirmPaymentIntent(PluginCall call) {
|
|
161
161
|
this.implementation.confirmPaymentIntent(call);
|
|
162
162
|
}
|
|
163
|
+
|
|
164
|
+
@PluginMethod
|
|
165
|
+
public void installAvailableUpdate(PluginCall call) {
|
|
166
|
+
this.implementation.installAvailableUpdate(call);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@PluginMethod
|
|
170
|
+
public void cancelInstallUpdate(PluginCall call) {
|
|
171
|
+
this.implementation.cancelInstallUpdate(call);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@PluginMethod
|
|
175
|
+
public void setReaderDisplay(PluginCall call) {
|
|
176
|
+
this.implementation.setReaderDisplay(call);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
@PluginMethod
|
|
180
|
+
public void clearReaderDisplay(PluginCall call) {
|
|
181
|
+
this.implementation.clearReaderDisplay(call);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@PluginMethod
|
|
185
|
+
public void rebootReader(PluginCall call) {
|
|
186
|
+
this.implementation.rebootReader(call);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
@PluginMethod
|
|
190
|
+
public void cancelReaderReconnection(PluginCall call) {
|
|
191
|
+
this.implementation.cancelReaderReconnection(call);
|
|
192
|
+
}
|
|
163
193
|
}
|
|
@@ -22,4 +22,7 @@ enum class TerminalEnumEvent(val webEventName: String) {
|
|
|
22
22
|
RequestDisplayMessage("terminalRequestDisplayMessage"),
|
|
23
23
|
RequestReaderInput("terminalRequestReaderInput"),
|
|
24
24
|
PaymentStatusChange("terminalPaymentStatusChange"),
|
|
25
|
+
ReaderReconnectStarted("terminalReaderReconnectStarted"),
|
|
26
|
+
ReaderReconnectSucceeded("terminalReaderReconnectSucceeded"),
|
|
27
|
+
ReaderReconnectFailed("terminalReaderReconnectFailed"),
|
|
25
28
|
}
|
package/android/src/main/java/com/getcapacitor/community/stripe/terminal/helper/TerminalMappers.java
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
package com.getcapacitor.community.stripe.terminal.helper;
|
|
2
|
+
|
|
3
|
+
import com.getcapacitor.JSObject;
|
|
4
|
+
import com.stripe.stripeterminal.external.models.DeviceType;
|
|
5
|
+
import com.stripe.stripeterminal.external.models.Location;
|
|
6
|
+
import com.stripe.stripeterminal.external.models.LocationStatus;
|
|
7
|
+
import com.stripe.stripeterminal.external.models.Reader;
|
|
8
|
+
import com.stripe.stripeterminal.external.models.ReaderSoftwareUpdate;
|
|
9
|
+
|
|
10
|
+
public class TerminalMappers {
|
|
11
|
+
|
|
12
|
+
public JSObject mapFromLocation(Location location) {
|
|
13
|
+
if (location == null) {
|
|
14
|
+
return new JSObject();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
JSObject address = new JSObject();
|
|
18
|
+
|
|
19
|
+
if (location.getAddress() != null) {
|
|
20
|
+
address
|
|
21
|
+
.put("country", location.getAddress().getCountry())
|
|
22
|
+
.put("city", location.getAddress().getCity())
|
|
23
|
+
.put("postalCode", location.getAddress().getPostalCode())
|
|
24
|
+
.put("line1", location.getAddress().getLine1())
|
|
25
|
+
.put("line2", location.getAddress().getLine2())
|
|
26
|
+
.put("state", location.getAddress().getState());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return new JSObject()
|
|
30
|
+
.put("id", location.getId())
|
|
31
|
+
.put("displayName", location.getDisplayName())
|
|
32
|
+
.put("address", address)
|
|
33
|
+
.put("livemode", location.getLivemode());
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public JSObject mapFromReaderSoftwareUpdate(ReaderSoftwareUpdate update) {
|
|
37
|
+
if (update == null) {
|
|
38
|
+
return new JSObject();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return new JSObject()
|
|
42
|
+
.put("deviceSoftwareVersion", update.getVersion())
|
|
43
|
+
.put("estimatedUpdateTime", update.getTimeEstimate().toString())
|
|
44
|
+
.put("requiredAt", update.getRequiredAt().getTime());
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public String mapFromLocationStatus(LocationStatus status) {
|
|
48
|
+
if (status == null) {
|
|
49
|
+
return "UNKNOWN";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return switch (status) {
|
|
53
|
+
case NOT_SET -> "NOT_SET";
|
|
54
|
+
case SET -> "SET";
|
|
55
|
+
case UNKNOWN -> "UNKNOWN";
|
|
56
|
+
default -> "UNKNOWN";
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public String mapFromNetworkStatus(Reader.NetworkStatus status) {
|
|
61
|
+
if (status == null) {
|
|
62
|
+
return "unknown";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return switch (status) {
|
|
66
|
+
case OFFLINE -> "OFFLINE";
|
|
67
|
+
case ONLINE -> "ONLINE";
|
|
68
|
+
default -> "UNKNOWN";
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public String mapFromDeviceType(DeviceType type) {
|
|
73
|
+
return switch (type) {
|
|
74
|
+
case CHIPPER_1X -> "chipper1X";
|
|
75
|
+
case CHIPPER_2X -> "chipper2X";
|
|
76
|
+
case COTS_DEVICE -> "cotsDevice";
|
|
77
|
+
case ETNA -> "etna";
|
|
78
|
+
case STRIPE_M2 -> "stripeM2";
|
|
79
|
+
case STRIPE_S700 -> "stripeS700";
|
|
80
|
+
case STRIPE_S700_DEVKIT -> "stripeS700Devkit";
|
|
81
|
+
// React Native has this model. deprecated?
|
|
82
|
+
// case STRIPE_S710:
|
|
83
|
+
// return "stripeS710";
|
|
84
|
+
// case STRIPE_S710_DEVKIT:
|
|
85
|
+
// return "stripeS710Devkit";
|
|
86
|
+
case UNKNOWN -> "unknown";
|
|
87
|
+
case VERIFONE_P400 -> "verifoneP400";
|
|
88
|
+
case WISECUBE -> "wiseCube";
|
|
89
|
+
case WISEPAD_3 -> "wisePad3";
|
|
90
|
+
case WISEPAD_3S -> "wisePad3s";
|
|
91
|
+
case WISEPOS_E -> "wisePosE";
|
|
92
|
+
case WISEPOS_E_DEVKIT -> "wisePosEDevkit";
|
|
93
|
+
default -> throw new IllegalArgumentException("Unknown DeviceType: " + type);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|