@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.
Files changed (33) hide show
  1. package/README.md +304 -35
  2. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.java +267 -49
  3. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminalPlugin.java +30 -0
  4. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalEvent.kt +3 -0
  5. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/helper/TerminalMappers.java +96 -0
  6. package/dist/docs.json +431 -66
  7. package/dist/esm/definitions.d.ts +94 -5
  8. package/dist/esm/definitions.js.map +1 -1
  9. package/dist/esm/events.enum.d.ts +4 -1
  10. package/dist/esm/events.enum.js +3 -0
  11. package/dist/esm/events.enum.js.map +1 -1
  12. package/dist/esm/stripe-types/proto.d.ts +501 -0
  13. package/dist/esm/stripe-types/proto.js +2 -0
  14. package/dist/esm/stripe-types/proto.js.map +1 -0
  15. package/dist/esm/stripe.enum.d.ts +51 -0
  16. package/dist/esm/stripe.enum.js +55 -0
  17. package/dist/esm/stripe.enum.js.map +1 -1
  18. package/dist/esm/terminalMappers.d.ts +23 -0
  19. package/dist/esm/terminalMappers.js +119 -0
  20. package/dist/esm/terminalMappers.js.map +1 -0
  21. package/dist/esm/web.d.ts +20 -2
  22. package/dist/esm/web.js +134 -13
  23. package/dist/esm/web.js.map +1 -1
  24. package/dist/plugin.cjs.js +308 -13
  25. package/dist/plugin.cjs.js.map +1 -1
  26. package/dist/plugin.js +309 -15
  27. package/dist/plugin.js.map +1 -1
  28. package/ios/Plugin/StripeTerminal.swift +248 -63
  29. package/ios/Plugin/StripeTerminalPlugin.m +6 -0
  30. package/ios/Plugin/StripeTerminalPlugin.swift +25 -4
  31. package/ios/Plugin/TerminalEvents.swift +3 -0
  32. package/ios/Plugin/TerminalMappers.swift +127 -0
  33. package/package.json +4 -1
@@ -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 List<Reader> readers;
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.readers = new ArrayList<>();
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.readers = readers;
204
+ this.discoveredReadersList = readers;
193
205
  JSArray readersJSObject = new JSArray();
194
206
 
195
207
  int i = 0;
196
- for (Reader reader : this.readers) {
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 (reader.getInteger("index") == null) {
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
- true,
280
- this.localMobileReaderReconnectionListener
297
+ autoReconnectOnUnexpectedDisconnect,
298
+ this.readerReconnectionListener
281
299
  );
282
- Terminal.getInstance().connectLocalMobileReader(this.readers.get(reader.getInteger("index")), config, this.readerCallback(call));
300
+ Terminal.getInstance().connectLocalMobileReader(foundReader, config, this.readerCallback(call));
283
301
  }
284
302
 
285
- ReaderReconnectionListener localMobileReaderReconnectionListener = new ReaderReconnectionListener() {
303
+ ReaderReconnectionListener readerReconnectionListener = new ReaderReconnectionListener() {
286
304
  @Override
287
- public void onReaderReconnectStarted(@NonNull Reader reader, @NonNull Cancelable cancelReconnect) {
288
- // 1. Notified at the start of a reconnection attempt
289
- // Use cancelable to stop reconnection at any time
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
- // 2. Notified when reader reconnection succeeds
295
- // App is now connected
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
- // 3. Notified when reader reconnection fails
301
- // App is now disconnected
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(this.readers.get(reader.getInteger("index")), config, this.readerCallback(call));
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
- BluetoothConnectionConfiguration config = new BluetoothConnectionConfiguration(this.locationId);
322
- Terminal
323
- .getInstance()
324
- .connectBluetoothReader(this.readers.get(reader.getInteger("index")), config, this.readerListener(), this.readerCallback(call));
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 != null) {
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().put("serialNumber", reader.getSerialNumber());
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 new JSObject()
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
  }
@@ -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
  }
@@ -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
+ }