@aptos-scp/scp-component-rn-device-services 0.0.4-hm → 0.1.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 (147) hide show
  1. package/android/src/main/java/com/aptos/scp/paymentterminal/adyen/AdyenPaymentTerminal.java +0 -69
  2. package/ios/AurusEnterpriseSDK.framework/AurusEnterpriseSDK +0 -0
  3. package/ios/AurusEnterpriseSDK.framework/Headers/AurusEnterpriseSDK.h +95 -97
  4. package/ios/SCPRNDeviceServices/AdyenPaymentTerminal.h +0 -19
  5. package/ios/SCPRNDeviceServices/AdyenPaymentTerminal.m +22 -457
  6. package/ios/SCPRNDeviceServices/AurusPaymentTerminal.m +29 -83
  7. package/ios/SCPRNDeviceServices/VendorPaymentTerminal.m +1 -1
  8. package/ios/SCPRNDeviceServices.xcodeproj/project.pbxproj +0 -56
  9. package/lib/AurusDevice/AurusDevice.d.ts +26 -34
  10. package/lib/AurusDevice/AurusDevice.js +252 -380
  11. package/lib/AurusDevice/AurusDevice.js.map +1 -1
  12. package/lib/AurusDevice/constants.d.ts +33 -84
  13. package/lib/AurusDevice/constants.js +37 -114
  14. package/lib/AurusDevice/constants.js.map +1 -1
  15. package/lib/AurusDevice/sdk-interface/AESDKRegistration.d.ts +9 -10
  16. package/lib/AurusDevice/sdk-interface/AESDKRegistration.js +6 -0
  17. package/lib/AurusDevice/sdk-interface/AESDKRegistration.js.map +1 -1
  18. package/lib/AurusDevice/sdk-interface/AurusPaymentSupport.d.ts +5 -5
  19. package/lib/AurusDevice/sdk-interface/AurusPaymentSupport.js +70 -88
  20. package/lib/AurusDevice/sdk-interface/AurusPaymentSupport.js.map +1 -1
  21. package/lib/AurusDevice/sdk-interface/Barcode.d.ts +4 -5
  22. package/lib/AurusDevice/sdk-interface/Barcode.js +6 -0
  23. package/lib/AurusDevice/sdk-interface/Barcode.js.map +1 -1
  24. package/lib/AurusDevice/sdk-interface/CancelTransaction.d.ts +10 -11
  25. package/lib/AurusDevice/sdk-interface/CancelTransaction.js +6 -0
  26. package/lib/AurusDevice/sdk-interface/CancelTransaction.js.map +1 -1
  27. package/lib/AurusDevice/sdk-interface/GetCardBinRequest.d.ts +12 -14
  28. package/lib/AurusDevice/sdk-interface/PLCCApplication.d.ts +11 -12
  29. package/lib/AurusDevice/sdk-interface/PLCCApplication.js +6 -0
  30. package/lib/AurusDevice/sdk-interface/PLCCApplication.js.map +1 -1
  31. package/lib/AurusDevice/sdk-interface/TransactionRequest.d.ts +48 -44
  32. package/lib/AurusDevice/sdk-interface/TransactionRequest.js +6 -0
  33. package/lib/AurusDevice/sdk-interface/TransactionRequest.js.map +1 -1
  34. package/lib/AurusDevice/sdk-interface/index.d.ts +0 -2
  35. package/lib/PaymentDeviceFactory.d.ts +5 -5
  36. package/lib/PaymentDeviceFactory.js +4 -4
  37. package/lib/PaymentDeviceFactory.js.map +1 -1
  38. package/lib/PaymentDeviceService.d.ts +3 -4
  39. package/lib/PaymentDeviceService.js +33 -47
  40. package/lib/PaymentDeviceService.js.map +1 -1
  41. package/lib/ScannerDeviceFactory.d.ts +5 -5
  42. package/lib/ScannerDeviceFactory.js +5 -5
  43. package/lib/ScannerDeviceFactory.js.map +1 -1
  44. package/lib/ScannerDeviceService.d.ts +2 -2
  45. package/lib/ScannerDeviceService.js +6 -6
  46. package/lib/ScannerDeviceService.js.map +1 -1
  47. package/lib/configs/inversify/inversify.config.js +7 -4
  48. package/lib/configs/inversify/inversify.config.js.map +1 -1
  49. package/lib/constants/constants.d.ts +38 -61
  50. package/lib/constants/constants.js +41 -62
  51. package/lib/constants/constants.js.map +1 -1
  52. package/lib/interfaces/IDeviceStatus.d.ts +0 -1
  53. package/lib/interfaces/payment/IPayment.d.ts +9 -4
  54. package/lib/interfaces/payment/messages/requests.d.ts +3 -2
  55. package/lib/interfaces/payment/messages/responses.d.ts +6 -13
  56. package/lib/interfaces/scanner/IScanner.d.ts +8 -2
  57. package/package.json +9 -11
  58. package/types/es-symbol/index.d.ts +4 -0
  59. package/types/money-works/index.d.ts +49 -0
  60. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit +0 -0
  61. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/Info.plist +0 -0
  62. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/VersionInfo.plist +0 -0
  63. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.2.mom +0 -0
  64. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.3.mom +0 -0
  65. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.4.mom +0 -0
  66. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.4.omo +0 -0
  67. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.mom +0 -0
  68. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.8.6.mom +0 -0
  69. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.9.mom +0 -0
  70. package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit.mom +0 -0
  71. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAccountData.h +0 -26
  72. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAdditionalDataRequest.h +0 -38
  73. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAmount.h +0 -16
  74. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAppData.h +0 -26
  75. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYBalance.h +0 -13
  76. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYCashTransactionRequest.h +0 -35
  77. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYConstants.h +0 -688
  78. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYCurrency.h +0 -33
  79. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDevice.h +0 -308
  80. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDeviceData.h +0 -52
  81. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDeviceManagerDelegate.h +0 -66
  82. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDeviceRegistry.h +0 -125
  83. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDynamicCurrencyConversionData.h +0 -22
  84. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYErrors.h +0 -153
  85. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCard.h +0 -41
  86. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardBalanceRequest.h +0 -50
  87. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardBalanceResponse.h +0 -38
  88. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardLoadRequest.h +0 -78
  89. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardLoadRequestDelegate.h +0 -25
  90. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardLoadResponse.h +0 -31
  91. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardMask.h +0 -31
  92. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardRequest.h +0 -13
  93. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYLocationManager.h +0 -14
  94. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYLoginDelegate.h +0 -80
  95. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYPrintReceiptRequest.h +0 -57
  96. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYReceipt.h +0 -33
  97. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYReceiptLine.h +0 -92
  98. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYReferralRequest.h +0 -16
  99. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYRefundData.h +0 -54
  100. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYServerSynchronization.h +0 -18
  101. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYSignatureRequest.h +0 -117
  102. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYSpecialTransactionRequest.h +0 -63
  103. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYToneGenerator.h +0 -45
  104. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionData.h +0 -416
  105. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionDetails.h +0 -45
  106. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionProcessorDelegate.h +0 -279
  107. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionRequest.h +0 -108
  108. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYUIKit.h +0 -30
  109. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/Adyen.h +0 -591
  110. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/AdyenToolkit-umbrella.h +0 -59
  111. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/AdyenToolkit.h +0 -79
  112. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/NSData+ADY.h +0 -31
  113. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/NSString+ADY.h +0 -19
  114. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/adylog.h +0 -176
  115. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Info.plist +0 -0
  116. package/ios/Frameworks/Adyen/AdyenToolkit.framework/Modules/module.modulemap +0 -6
  117. package/ios/SCPRNDeviceServices/Adyen/AdyenConstants.h +0 -40
  118. package/ios/SCPRNDeviceServices/Adyen/AdyenConstants.m +0 -28
  119. package/ios/SCPRNDeviceServices/Adyen/AdyenDelegate.h +0 -23
  120. package/ios/SCPRNDeviceServices/Adyen/AdyenDelegate.m +0 -15
  121. package/ios/SCPRNDeviceServices/Adyen/AdyenDeviceManagerDelegate.h +0 -19
  122. package/ios/SCPRNDeviceServices/Adyen/AdyenDeviceManagerDelegate.m +0 -31
  123. package/ios/SCPRNDeviceServices/Adyen/AdyenLoginDelegate.h +0 -19
  124. package/ios/SCPRNDeviceServices/Adyen/AdyenLoginDelegate.m +0 -26
  125. package/ios/SCPRNDeviceServices/Adyen/AdyenTransactionProcessorDelegate.h +0 -26
  126. package/ios/SCPRNDeviceServices/Adyen/AdyenTransactionProcessorDelegate.m +0 -148
  127. package/lib/AdyenDevice/AdyenDevice.d.ts +0 -56
  128. package/lib/AdyenDevice/AdyenDevice.js +0 -349
  129. package/lib/AdyenDevice/AdyenDevice.js.map +0 -1
  130. package/lib/AdyenDevice/constants.d.ts +0 -12
  131. package/lib/AdyenDevice/constants.js +0 -228
  132. package/lib/AdyenDevice/constants.js.map +0 -1
  133. package/lib/AdyenDevice/index.d.ts +0 -1
  134. package/lib/AdyenDevice/index.js +0 -7
  135. package/lib/AdyenDevice/index.js.map +0 -1
  136. package/lib/AdyenDevice/interfaces.d.ts +0 -175
  137. package/lib/AdyenDevice/interfaces.js +0 -3
  138. package/lib/AdyenDevice/interfaces.js.map +0 -1
  139. package/lib/AurusDevice/sdk-interface/ByPassScreen.d.ts +0 -25
  140. package/lib/AurusDevice/sdk-interface/ByPassScreen.js +0 -9
  141. package/lib/AurusDevice/sdk-interface/ByPassScreen.js.map +0 -1
  142. package/lib/AurusDevice/sdk-interface/Upgrade.d.ts +0 -23
  143. package/lib/AurusDevice/sdk-interface/Upgrade.js +0 -9
  144. package/lib/AurusDevice/sdk-interface/Upgrade.js.map +0 -1
  145. package/lib/AurusDevice/sdk-interface/XmlElementString.d.ts +0 -3
  146. package/lib/AurusDevice/sdk-interface/XmlElementString.js +0 -3
  147. package/lib/AurusDevice/sdk-interface/XmlElementString.js.map +0 -1
@@ -23,26 +23,18 @@ const react_native_1 = require("react-native");
23
23
  const _1 = require("../");
24
24
  const constants_1 = require("./constants");
25
25
  const sdk_interface_1 = require("./sdk-interface");
26
- const xml_js = require("xml-js");
26
+ const xml2js = require("react-native-xml2js");
27
27
  const logger = scp_component_logging_1.LogManager.getLogger("com.aptos.deviceservices.AurusDevice");
28
28
  const native_onAESDKResponse = react_native_1.NativeModules.AurusPaymentTerminal.native_onAESDKResponse;
29
- const native_onNotificationReceived = react_native_1.NativeModules.AurusPaymentTerminal.native_onNotificationReceived;
30
- const native_onAESDKLogResponse = react_native_1.NativeModules.AurusPaymentTerminal.native_onAESDKLogResponse;
31
- const NotificationEvent = react_native_1.NativeModules.AurusPaymentTerminal.NotificationEvent;
29
+ const native_onBarcodeDataReceived = react_native_1.NativeModules.AurusPaymentTerminal.native_onBarcodeDataReceived;
32
30
  let AurusDevice = class AurusDevice {
33
31
  /**
34
32
  * To avoid pushing native component awareness onto the rest of the app, the native objects
35
33
  * are created in the constructor, which only accepts JavaScript parameters.
36
34
  */
37
35
  constructor() {
38
- this._initializeCalled = false;
39
- this._listenersAdded = false;
40
- this._registrationInProgress = false; // EMV Config now happens during registration
41
- this._waitingForDeviceConnected = false;
42
- this._scannerEnabled = false;
43
- this._paymentEnvironment = "Aurus"; // string representation of payment environment for trans object
44
- this._requestInProgress = false;
45
- this._requestQueue = [];
36
+ this._initialized = false;
37
+ this._scannerEnabled = true; //todo: once enable/disable is implemented in client, defaulting to false.
46
38
  const entryMessage = logger.traceEntry("constructor");
47
39
  this._devicePaymentTerminal = react_native_1.NativeModules.AurusPaymentTerminal;
48
40
  this._nativeEventEmitter = new react_native_1.NativeEventEmitter(react_native_1.NativeModules.AurusPaymentTerminal);
@@ -53,22 +45,8 @@ let AurusDevice = class AurusDevice {
53
45
  const entryMessage = logger.traceEntry("configurePaymentDevice", emitter, config);
54
46
  this._paymentEmitter = emitter;
55
47
  this._paymentConfig = config;
56
- let payEnvDesc = "Unknown Aurus Environment";
57
- let storeType = "";
58
- let corpId = "";
59
- let hostUrl = "";
60
- if (config && config.vendorConfiguration) {
61
- storeType = config.vendorConfiguration.storeType;
62
- corpId = config.vendorConfiguration.corpId;
63
- hostUrl = config.vendorConfiguration.hostUrl;
64
- if (storeType === "PROD") {
65
- payEnvDesc = "Aurus Production";
66
- }
67
- else if (storeType === "UAT") {
68
- payEnvDesc = "Aurus UAT Sandbox";
69
- }
70
- }
71
- this._paymentEnvironment = `${payEnvDesc} (StoreType: ${storeType}, CorpID: ${corpId}, HostUrl: ${hostUrl})`;
48
+ sdk_interface_1.AurusSupport.authRequest = Object.assign({}, this._paymentConfig);
49
+ sdk_interface_1.AurusSupport.productionEnv = this._paymentConfig.productionEnv;
72
50
  logger.traceExit(entryMessage);
73
51
  });
74
52
  }
@@ -77,13 +55,16 @@ let AurusDevice = class AurusDevice {
77
55
  const entryMessage = logger.traceEntry("configureScannerDevice", emitter, config);
78
56
  this._scannerEmitter = emitter;
79
57
  this._scannerConfig = config;
80
- this._scannerEnabled = config.initiallyEnabled;
81
58
  logger.traceExit(entryMessage);
82
59
  });
83
60
  }
84
61
  startPaymentDevice() {
85
62
  return __awaiter(this, void 0, void 0, function* () {
86
63
  const entryMessage = logger.traceEntry("startPaymentDevice");
64
+ let context = {};
65
+ this._paymentSubscriptions = [
66
+ this._nativeEventEmitter.addListener(native_onAESDKResponse, this.onAESDKResponse.bind(this), context)
67
+ ];
87
68
  this.initializeNative();
88
69
  logger.traceExit(entryMessage);
89
70
  });
@@ -91,6 +72,10 @@ let AurusDevice = class AurusDevice {
91
72
  startScannerDevice() {
92
73
  return __awaiter(this, void 0, void 0, function* () {
93
74
  const entryMessage = logger.traceEntry("startScannerDevice");
75
+ let context = {};
76
+ this._scannerSubscriptions = [
77
+ this._nativeEventEmitter.addListener(native_onBarcodeDataReceived, this.onBarcodeDataReceived.bind(this), context)
78
+ ];
94
79
  this.initializeNative();
95
80
  logger.traceExit(entryMessage);
96
81
  });
@@ -98,21 +83,14 @@ let AurusDevice = class AurusDevice {
98
83
  captureSale(authRequest) {
99
84
  return __awaiter(this, void 0, void 0, function* () {
100
85
  const entryMessage = logger.traceEntry("captureSale", authRequest);
101
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Sale }));
86
+ this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Sale }));
102
87
  logger.traceExit(entryMessage);
103
88
  });
104
89
  }
105
90
  captureRefund(authRequest) {
106
91
  return __awaiter(this, void 0, void 0, function* () {
107
92
  const entryMessage = logger.traceEntry("captureRefund", authRequest);
108
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Refund }));
109
- logger.traceExit(entryMessage);
110
- });
111
- }
112
- captureVoid(authRequest) {
113
- return __awaiter(this, void 0, void 0, function* () {
114
- const entryMessage = logger.traceEntry("captureVoid", authRequest);
115
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Void }));
93
+ this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Refund }));
116
94
  logger.traceExit(entryMessage);
117
95
  });
118
96
  }
@@ -120,7 +98,6 @@ let AurusDevice = class AurusDevice {
120
98
  return __awaiter(this, void 0, void 0, function* () {
121
99
  const entryMessage = logger.traceEntry("enableScannerDevice");
122
100
  this._scannerEnabled = true;
123
- this.sendUpgradeRequest(constants_1.UpgradeType.ENABLE_SCANNER);
124
101
  logger.traceExit(entryMessage);
125
102
  });
126
103
  }
@@ -128,75 +105,84 @@ let AurusDevice = class AurusDevice {
128
105
  return __awaiter(this, void 0, void 0, function* () {
129
106
  const entryMessage = logger.traceEntry("disableScannerDevice");
130
107
  this._scannerEnabled = false;
131
- this.sendUpgradeRequest(constants_1.UpgradeType.DISABLE_SCANNER);
132
108
  logger.traceExit(entryMessage);
133
109
  });
134
110
  }
135
111
  giftcardActivate(authRequest) {
136
112
  return __awaiter(this, void 0, void 0, function* () {
137
113
  const entryMessage = logger.traceEntry("giftcardActivate", authRequest);
138
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardActivate }));
114
+ this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardActivate }));
139
115
  logger.traceExit(entryMessage);
140
116
  });
141
117
  }
142
118
  giftcardBalance(authRequest) {
143
119
  return __awaiter(this, void 0, void 0, function* () {
144
120
  const entryMessage = logger.traceEntry("giftcardBalance", authRequest);
145
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardBalanceInquiry }));
121
+ this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardBalanceInquiry }));
146
122
  logger.traceExit(entryMessage);
147
123
  });
148
124
  }
149
125
  giftcardIssue(authRequest) {
150
126
  return __awaiter(this, void 0, void 0, function* () {
151
127
  const entryMessage = logger.traceEntry("giftcardIssue", authRequest);
152
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardIssue }));
128
+ this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardIssue }));
153
129
  logger.traceExit(entryMessage);
154
130
  });
155
131
  }
156
132
  giftcardRedeem(authRequest) {
157
133
  return __awaiter(this, void 0, void 0, function* () {
158
134
  const entryMessage = logger.traceEntry("giftcardRedeem", authRequest);
159
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardRedeem }));
135
+ this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardRedeem }));
160
136
  logger.traceExit(entryMessage);
161
137
  });
162
138
  }
163
- giftcardVoid(authRequest) {
139
+ void(authRequest) {
164
140
  return __awaiter(this, void 0, void 0, function* () {
165
- const entryMessage = logger.traceEntry("giftcardVoid", authRequest);
166
- yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Void }));
141
+ const entryMessage = logger.traceEntry("void", authRequest);
142
+ this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Void }));
167
143
  logger.traceExit(entryMessage);
168
144
  });
169
145
  }
170
146
  stopPaymentDevice() {
171
147
  return __awaiter(this, void 0, void 0, function* () {
172
148
  const entryMessage = logger.traceEntry("stopPaymentDevice");
149
+ if (this._paymentSubscriptions) {
150
+ while (this._paymentSubscriptions.length > 0) {
151
+ this._paymentSubscriptions.pop().remove();
152
+ }
153
+ }
173
154
  logger.traceExit(entryMessage);
174
155
  });
175
156
  }
176
157
  stopScannerDevice() {
177
158
  return __awaiter(this, void 0, void 0, function* () {
178
159
  const entryMessage = logger.traceEntry("stopScannerDevice");
160
+ if (this._scannerSubscriptions) {
161
+ while (this._scannerSubscriptions.length > 0) {
162
+ this._scannerSubscriptions.pop().remove();
163
+ }
164
+ }
179
165
  logger.traceExit(entryMessage);
180
166
  });
181
167
  }
182
168
  tearDownPaymentDevice() {
183
169
  return __awaiter(this, void 0, void 0, function* () {
184
170
  const entryMessage = logger.traceEntry("tearDownPaymentDevice");
185
- yield this.tearDownNative();
186
171
  logger.traceExit(entryMessage);
187
172
  });
188
173
  }
189
174
  tearDownScannerDevice() {
190
175
  return __awaiter(this, void 0, void 0, function* () {
191
176
  const entryMessage = logger.traceEntry("tearDownScannerDevice");
192
- yield this.tearDownNative();
193
177
  logger.traceExit(entryMessage);
194
178
  });
195
179
  }
196
180
  processTimeout() {
197
181
  return __awaiter(this, void 0, void 0, function* () {
198
182
  const entryMessage = logger.traceEntry("processTimeout");
199
- this.emitAuthorizationResponse(_1.ResponseCodes.Timeout, "TIMEOUT WAITING FOR RESPONSE");
183
+ sdk_interface_1.AurusSupport.authResponse.responseCode = _1.ResponseCodes.Timeout;
184
+ sdk_interface_1.AurusSupport.authResponse.status = "TIMEOUT WAITING FOR RESPONSE";
185
+ this._paymentEmitter.emit(_1.EventResponseTypes.Authorization, sdk_interface_1.AurusSupport.authResponse);
200
186
  //Send cancel to aurus
201
187
  this.sendCancelTranRequest();
202
188
  logger.traceExit(entryMessage);
@@ -206,16 +192,25 @@ let AurusDevice = class AurusDevice {
206
192
  return __awaiter(this, void 0, void 0, function* () {
207
193
  const entryMessage = logger.traceEntry("authorize", authRequest);
208
194
  sdk_interface_1.AurusSupport.authRequest = authRequest;
209
- sdk_interface_1.AurusSupport.authResponse = Object.assign({ paymentEnvironment: this._paymentEnvironment }, authRequest);
210
- if (this._registrationInProgress) {
211
- logger.debug("Payment is unavailalbe while device registration is in progress. Emitting error response.");
212
- this.emitAuthorizationResponse(_1.ResponseCodes.Error, "Payment Unavailable. Device Registration in Progress");
213
- }
214
- else if (sdk_interface_1.AurusSupport.requireGetCard(authRequest)) {
215
- this.sendGetCardBin(authRequest);
195
+ sdk_interface_1.AurusSupport.authResponse = Object.assign({}, authRequest);
196
+ if (!this._initInProgress && !this._registrationInProgress) {
197
+ if (sdk_interface_1.AurusSupport.requireGetCard(authRequest)) {
198
+ this.sendGetCardBin(authRequest);
199
+ }
200
+ else {
201
+ this.sendCardTransRequest();
202
+ }
216
203
  }
217
204
  else {
218
- this.sendCardTransRequest();
205
+ sdk_interface_1.AurusSupport.authResponse.responseCode = _1.ResponseCodes.Error;
206
+ if (this._initInProgress) {
207
+ sdk_interface_1.AurusSupport.authResponse.status = "EMV INIT IN PROGRESS";
208
+ }
209
+ else if (this._registrationInProgress) {
210
+ sdk_interface_1.AurusSupport.authResponse.status = "DEVICE REGISTRATION IN PROGRESS";
211
+ }
212
+ logger.debug(() => `Payment not initialized. Sending response: ${JSON.stringify(sdk_interface_1.AurusSupport.authResponse)}`);
213
+ this._paymentEmitter.emit(_1.EventResponseTypes.Authorization, sdk_interface_1.AurusSupport.authResponse);
219
214
  }
220
215
  logger.traceExit(entryMessage);
221
216
  });
@@ -223,35 +218,13 @@ let AurusDevice = class AurusDevice {
223
218
  initializeNative() {
224
219
  return __awaiter(this, void 0, void 0, function* () {
225
220
  const entryMessage = logger.traceEntry("initializeNative");
226
- if (!this._listenersAdded) {
227
- this._listenersAdded = true;
228
- let context = {};
229
- this._nativeSubscriptions = [
230
- this._nativeEventEmitter.addListener(native_onAESDKResponse, this.onAESDKResponse.bind(this), context),
231
- this._nativeEventEmitter.addListener(native_onNotificationReceived, this.onNotificationReceived.bind(this), context),
232
- this._nativeEventEmitter.addListener(native_onAESDKLogResponse, this.onAESDKLogResponse.bind(this), context)
233
- ];
234
- }
235
- if (!this._initializeCalled) {
236
- this._initializeCalled = true;
237
- this._waitingForDeviceConnected = true;
221
+ if (!this._initialized) {
238
222
  this._devicePaymentTerminal.initialize();
223
+ this._initialized = true;
239
224
  }
240
225
  logger.traceExit(entryMessage);
241
226
  });
242
227
  }
243
- tearDownNative() {
244
- return __awaiter(this, void 0, void 0, function* () {
245
- const entryMessage = logger.traceEntry("tearDownNative");
246
- if (this._nativeSubscriptions) {
247
- while (this._nativeSubscriptions.length > 0) {
248
- this._nativeSubscriptions.pop().remove();
249
- }
250
- }
251
- this._listenersAdded = false;
252
- logger.traceExit(entryMessage);
253
- });
254
- }
255
228
  /**
256
229
  * This method handles events published by the native components. This is an adapter between the native and JavaScript
257
230
  * components for asynchronous events from the native layer.
@@ -262,11 +235,21 @@ let AurusDevice = class AurusDevice {
262
235
  // Note: This could check that it received the correct type of argument using a guard function, if multiple types
263
236
  // of events can be sent or just for safety.
264
237
  let withResponse = args[0];
265
- logger.debug(`In onAESDKResponse, withResponse: ${JSON.stringify(withResponse)}`);
266
- // update in-progress and check queue
267
- this.receiveResponse();
238
+ logger.debug(() => `In onAESDKResponse, withResponse: ${JSON.stringify(withResponse)}`);
268
239
  // Parse xml and determine next steps. Call back into native if needed.
269
- this.handleAESDKResponse(withResponse);
240
+ this.handleAESDKResponse(withResponse).then((returnServer) => {
241
+ if (returnServer & constants_1.ResponseType.PaymentStatus) {
242
+ // If returnServer has PaymentStatus, send IPaymentStatus to POS.
243
+ logger.debug(() => `In onAESDKResponse, publishing paymentStatus: ${JSON.stringify(sdk_interface_1.AurusSupport.paymentStatus)}`);
244
+ this._paymentEmitter.emit(_1.EventResponseTypes.PaymentDeviceStatus, sdk_interface_1.AurusSupport.paymentStatus);
245
+ sdk_interface_1.AurusSupport.paymentStatus = { deviceAvailable: false };
246
+ }
247
+ if (returnServer & constants_1.ResponseType.AuthResponse) {
248
+ // If returnServer has AuthResponse, send IAuthorizationResponse to POS.
249
+ logger.debug(() => `In onAESDKResponse, publishing authResponse: ${JSON.stringify(sdk_interface_1.AurusSupport.authResponse)}`);
250
+ this._paymentEmitter.emit(_1.EventResponseTypes.Authorization, sdk_interface_1.AurusSupport.authResponse);
251
+ }
252
+ });
270
253
  }
271
254
  else {
272
255
  throw logger.throwing(new Error("Empty event received. withResponse data is missing"), entryMessage);
@@ -277,28 +260,28 @@ let AurusDevice = class AurusDevice {
277
260
  const entryMessage = logger.traceEntry("sendCancelTranRequest");
278
261
  sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.CancelTransaction;
279
262
  let xmlreq = sdk_interface_1.AurusSupport.createCancelTranRequest();
280
- this.sendRequest(xmlreq);
263
+ this._devicePaymentTerminal.OnAESDKProcessRequest(xmlreq);
281
264
  logger.traceExit(entryMessage);
282
265
  }
283
266
  sendCancelLastTranRequest() {
284
267
  const entryMessage = logger.traceEntry("sendCancelLastTranRequest");
285
268
  sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.CancelTransaction;
286
269
  let xmlreq = sdk_interface_1.AurusSupport.createCancelLastTranRequest();
287
- this.sendRequest(xmlreq);
270
+ this._devicePaymentTerminal.OnAESDKProcessRequest(xmlreq);
288
271
  logger.traceExit(entryMessage);
289
272
  }
290
273
  sendTransRequest(getCardBinResp) {
291
274
  const entryMessage = logger.traceEntry("sendTransRequest", getCardBinResp);
292
275
  sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.Transaction;
293
276
  let xmlreq = sdk_interface_1.AurusSupport.createCardTranRequest(getCardBinResp);
294
- this.sendRequest(xmlreq);
277
+ this._devicePaymentTerminal.OnAESDKProcessRequest(xmlreq);
295
278
  logger.traceExit(entryMessage);
296
279
  }
297
280
  sendCardTransRequest() {
298
281
  const entryMessage = logger.traceEntry("sendCardTransRequest");
299
282
  sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.Transaction;
300
283
  let xmlreq = sdk_interface_1.AurusSupport.createCardTranRequest();
301
- this.sendRequest(xmlreq);
284
+ this._devicePaymentTerminal.OnAESDKProcessRequest(xmlreq);
302
285
  logger.traceExit(entryMessage);
303
286
  }
304
287
  /**
@@ -309,164 +292,171 @@ let AurusDevice = class AurusDevice {
309
292
  const entryMessage = logger.traceEntry("sendGetCardBin", authRequest);
310
293
  sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.GetCardBin;
311
294
  let xmlreq = sdk_interface_1.AurusSupport.createGetCardBinRequest();
312
- this.sendRequest(xmlreq);
295
+ this._devicePaymentTerminal.OnAESDKProcessRequest(xmlreq);
313
296
  logger.traceExit(entryMessage);
314
297
  }
315
298
  /**
316
299
  * Sends an AESDKRegistrationRequest to register the device
300
+ * @param authRequest
317
301
  */
318
- sendAESDKRegistration() {
319
- const entryMessage = logger.traceEntry("sendAESDKRegistration");
302
+ sendAESDKRegistration(authRequest) {
303
+ const entryMessage = logger.traceEntry("sendAESDKRegistration", authRequest);
320
304
  sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.Registration;
321
- let xmlreq = sdk_interface_1.AurusSupport.createAESDKRegistrationRequest(this._paymentConfig.storeNumber, this._paymentConfig.terminalNumber, this._paymentConfig.vendorConfiguration.storeType, this._paymentConfig.vendorConfiguration.corpId, this._paymentConfig.vendorConfiguration.hostUrl);
305
+ let xmlreq = sdk_interface_1.AurusSupport.createAESDKRegistrationRequest();
322
306
  this._registrationInProgress = true;
323
- this.sendRequest(xmlreq);
324
- logger.traceExit(entryMessage);
325
- }
326
- sendUpgradeRequest(upgradeType) {
327
- const entryMessage = logger.traceEntry("sendUpgradeRequest");
328
- if (upgradeType !== constants_1.UpgradeType.ENABLE_SCANNER && upgradeType !== constants_1.UpgradeType.DISABLE_SCANNER) {
329
- // Enable/Disable scanner is fire and forget and may interrupt other calls. Don't update the request type.
330
- sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.Upgrade;
331
- }
332
- let xmlreq = sdk_interface_1.AurusSupport.createUpgradeRequest(this._paymentConfig.storeNumber, this._paymentConfig.terminalNumber, upgradeType);
333
- this.sendRequest(xmlreq);
334
- logger.traceExit(entryMessage);
335
- }
336
- sendByPassScreen(reason) {
337
- const entryMessage = logger.traceEntry("sendByPassScreen");
338
- let xmlreq = sdk_interface_1.AurusSupport.createByPassScreenRequest(this._paymentConfig.storeNumber, this._paymentConfig.terminalNumber, reason);
339
- this.sendRequest(xmlreq);
307
+ this._devicePaymentTerminal.OnAESDKProcessRequest(xmlreq);
340
308
  logger.traceExit(entryMessage);
341
309
  }
342
310
  handleAESDKResponse(xml) {
343
- const entryMessage = logger.traceEntry("handleAESDKResponse", xml);
344
- let xmlResponse = this.convertXmlToJs(xml);
345
- if (!xmlResponse) {
346
- logger.warn(`In handleAESDKResponse, unable to convert to JSON: ${xml}`);
347
- }
348
- else if (constants_1.AesdkResponseTypes.Registration in xmlResponse) {
349
- this.processAESDKRegistration(xmlResponse[constants_1.AesdkResponseTypes.Registration]);
350
- }
351
- else if (constants_1.AesdkResponseTypes.GetCardBin in xmlResponse) {
352
- this.processGetCardBin(xmlResponse[constants_1.AesdkResponseTypes.GetCardBin]);
353
- }
354
- else if (constants_1.AesdkResponseTypes.Transaction in xmlResponse) {
355
- this.processTrans(xmlResponse[constants_1.AesdkResponseTypes.Transaction]);
356
- }
357
- else if (constants_1.AesdkResponseTypes.AESDK in xmlResponse) {
358
- this.processAESDK(xmlResponse[constants_1.AesdkResponseTypes.AESDK]);
359
- }
360
- else if (constants_1.AesdkResponseTypes.CancelTransaction in xmlResponse) {
361
- this.processCancelTrans(xmlResponse[constants_1.AesdkResponseTypes.CancelTransaction]);
362
- }
363
- logger.traceExit(entryMessage);
311
+ return __awaiter(this, void 0, void 0, function* () {
312
+ const entryMessage = logger.traceEntry("handleAESDKResponse", xml);
313
+ let returnServer = constants_1.ResponseType.None;
314
+ let xmlResponse = yield this.convertXmlToJs(xml);
315
+ if (!xmlResponse) {
316
+ returnServer = this.processResponse(xml);
317
+ }
318
+ else if (constants_1.AesdkResponseTypes.Registration in xmlResponse) {
319
+ returnServer = this.processAESDKRegistration(xmlResponse[constants_1.AesdkResponseTypes.Registration]);
320
+ }
321
+ else if (constants_1.AesdkResponseTypes.GetCardBin in xmlResponse) {
322
+ returnServer = this.processGetCardBin(xmlResponse[constants_1.AesdkResponseTypes.GetCardBin]);
323
+ }
324
+ else if (constants_1.AesdkResponseTypes.Transaction in xmlResponse) {
325
+ returnServer = this.processTrans(xmlResponse[constants_1.AesdkResponseTypes.Transaction]);
326
+ }
327
+ else if (constants_1.AesdkResponseTypes.AESDK in xmlResponse) {
328
+ returnServer = this.processAESDK(xmlResponse[constants_1.AesdkResponseTypes.AESDK]);
329
+ }
330
+ else if (constants_1.AesdkResponseTypes.CancelTransaction in xmlResponse) {
331
+ returnServer = this.processCancelTrans(xmlResponse[constants_1.AesdkResponseTypes.CancelTransaction]);
332
+ }
333
+ return logger.traceExit(entryMessage, returnServer);
334
+ });
364
335
  }
365
336
  convertXmlToJs(xml) {
366
337
  const entryMessage = logger.traceEntry("convertXmlToJs", xml);
367
- let jsObject = undefined;
368
- try {
369
- jsObject = xml_js.xml2js(xml, { compact: true, textKey: "value", trim: true });
370
- }
371
- catch (error) {
372
- }
373
- return logger.traceExit(entryMessage, jsObject);
338
+ return logger.traceExit(entryMessage, new Promise(resolve => {
339
+ let parser = new xml2js.Parser();
340
+ parser.parseString(xml, (err, results) => {
341
+ resolve(results);
342
+ });
343
+ }));
344
+ }
345
+ processResponse(response) {
346
+ const entryMessage = logger.traceEntry("processResponse", response);
347
+ let responseType = constants_1.ResponseType.None;
348
+ if (response === constants_1.InitializationResponses.DeviceNotRegistered ||
349
+ response === constants_1.InitializationResponses.DeviceAlreadyConfigured ||
350
+ response === constants_1.InitializationResponses.DeviceConfigurationComplete) {
351
+ logger.debug("Sending registration request: " + response);
352
+ this.sendAESDKRegistration(sdk_interface_1.AurusSupport.authRequest);
353
+ }
354
+ if (response === constants_1.InitializationResponses.EmvStarted) {
355
+ this._initInProgress = true;
356
+ }
357
+ else if (response === constants_1.InitializationResponses.DeviceConfigurationComplete) {
358
+ this._initInProgress = false;
359
+ }
360
+ // The response string is a status mesage from Aurus.
361
+ sdk_interface_1.AurusSupport.authResponse.status = response;
362
+ return logger.traceExit(entryMessage, responseType);
374
363
  }
375
364
  processTrans(response) {
376
365
  const entryMessage = logger.traceEntry("processTrans", response);
377
- let tranDetails = response.TransDetailsData.TransDetailData;
378
- const responseCode = this.mapAurusResponseCode(tranDetails.ResponseCode.value);
379
- if (responseCode === _1.ResponseCodes.Approved) {
380
- sdk_interface_1.AurusSupport.authResponse.approvedAmount = sdk_interface_1.AurusSupport.stringToMoney(tranDetails.TransactionAmount.value);
381
- sdk_interface_1.AurusSupport.authResponse.cardNumber = tranDetails.CardNumber.value;
382
- sdk_interface_1.AurusSupport.authResponse.cardType = this.mapAurusCardType(tranDetails.CardType.value);
383
- sdk_interface_1.AurusSupport.authResponse.tenderType = this.mapAurusTenderType(tranDetails.CardType.value);
384
- sdk_interface_1.AurusSupport.authResponse.referenceNumber = response.AurusPayTicketNum.value;
385
- sdk_interface_1.AurusSupport.authResponse.balance = sdk_interface_1.AurusSupport.stringToMoney(tranDetails.BalanceAmount.value);
386
- sdk_interface_1.AurusSupport.authResponse.approvalCode = tranDetails.ApprovalCode.value;
387
- sdk_interface_1.AurusSupport.authResponse.EMVData = this.parseEMVData(tranDetails.EMVData.value);
388
- sdk_interface_1.AurusSupport.authResponse.EMVData.receiptData = tranDetails.EMVData && tranDetails.EMVData.value &&
389
- tranDetails.EMVData.value.replace(/~/g, ": ").split("[FS]");
390
- // FIXME: AdditionalReceiptInfo should be parsed based on the format of the aurus response.
391
- // Resolve when we receive next sdk with correct format
392
- sdk_interface_1.AurusSupport.authResponse.receiptData =
393
- tranDetails.AdditionalReceiptInfo && [tranDetails.AdditionalReceiptInfo.value];
394
- sdk_interface_1.AurusSupport.authResponse.entryMethod = this.mapAurusEntryMethod(tranDetails.CardEntryMode.value);
395
- sdk_interface_1.AurusSupport.authResponse.signatureRequired =
396
- this.mapAurusSignatureRequired(tranDetails.SignatureReceiptFlag.value);
397
- sdk_interface_1.AurusSupport.authResponse.pinCaptured = this.mapAurusPinCaptured(tranDetails.SignatureReceiptFlag.value);
398
- }
399
- this.emitAuthorizationResponse(responseCode, tranDetails.TransactionResponseText.value);
400
- logger.traceExit(entryMessage);
366
+ let responseType = constants_1.ResponseType.AuthResponse;
367
+ let tranDetails = response.TransDetailsData[0].TransDetailData[0];
368
+ sdk_interface_1.AurusSupport.authResponse.responseCode = this.mapAurusResponseCode(tranDetails.ResponseCode.toString());
369
+ sdk_interface_1.AurusSupport.authResponse.status = tranDetails.TransactionResponseText.toString();
370
+ if (sdk_interface_1.AurusSupport.authResponse.responseCode === _1.ResponseCodes.Approved) {
371
+ sdk_interface_1.AurusSupport.authResponse.approvedAmount = sdk_interface_1.AurusSupport.stringToMoney(tranDetails.TransactionAmount.toString());
372
+ sdk_interface_1.AurusSupport.authResponse.cardNumber = tranDetails.CardNumber.toString();
373
+ sdk_interface_1.AurusSupport.authResponse.cardType = this.mapAurusCardType(tranDetails.CardType);
374
+ sdk_interface_1.AurusSupport.authResponse.tenderType = this.mapAurusTenderType(tranDetails.CardType);
375
+ sdk_interface_1.AurusSupport.authResponse.referenceNumber = response.AurusPayTicketNum.toString();
376
+ sdk_interface_1.AurusSupport.authResponse.balance = tranDetails.BalanceAmount;
377
+ sdk_interface_1.AurusSupport.authResponse.EMVData = this.parseEMVData(tranDetails.EMVData.toString());
378
+ }
379
+ return logger.traceExit(entryMessage, responseType);
401
380
  }
402
381
  processGetCardBin(response) {
403
382
  const entryMessage = logger.traceEntry("processGetCardBin", response);
383
+ let responseType = constants_1.ResponseType.None;
404
384
  if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.GetCardBin) {
405
- if (response.ResponseCode.value === constants_1.ResponseCodes.Approved) {
385
+ if (response.ResponseCode.toString() === constants_1.ResponseValues.Approved) {
406
386
  this.sendTransRequest(response);
407
387
  }
408
388
  else {
409
- this.emitAuthorizationResponse(this.mapAurusResponseCode(response.ResponseCode.value), response.ResponseText.value);
389
+ responseType |= constants_1.ResponseType.AuthResponse;
390
+ sdk_interface_1.AurusSupport.authResponse.responseCode = this.mapAurusResponseCode(response.ResponseCode.toString());
391
+ sdk_interface_1.AurusSupport.authResponse.status = response.ResponseText;
410
392
  }
411
393
  }
412
394
  else {
413
395
  //handle additional request types with getcardbinresponses
414
- this.emitAuthorizationResponse(_1.ResponseCodes.Error, response.ResponseText.value);
396
+ responseType |= constants_1.ResponseType.AuthResponse;
397
+ sdk_interface_1.AurusSupport.authResponse.responseCode = _1.ResponseCodes.Error;
398
+ sdk_interface_1.AurusSupport.authResponse.status = response.ResponseText;
415
399
  }
416
- logger.traceExit(entryMessage);
400
+ return logger.traceExit(entryMessage, responseType);
417
401
  }
418
402
  processCancelTrans(response) {
419
403
  const entryMessage = logger.traceEntry("processCancelTrans", response);
420
- if (response.ResponseCode.value === constants_1.ResponseCodes.Approved) {
421
- logger.debug(`processCancelTrans success: ${sdk_interface_1.AurusSupport.authResponse.posReference}`);
404
+ let responseType = constants_1.ResponseType.None;
405
+ if (response.ResponseCode.toString() === constants_1.ResponseValues.Approved) {
406
+ logger.debug(() => `processCancelTrans success: ${sdk_interface_1.AurusSupport.authResponse.posReference}`);
422
407
  }
423
408
  else {
424
409
  sdk_interface_1.AurusSupport.requestType = "";
425
- logger.debug(`processCancelTrans failed, attempting CancelLastTrans: ${sdk_interface_1.AurusSupport.authRequest.transactionNumber}`);
410
+ logger.debug(() => `processCancelTrans failed, attempting CancelLastTrans: ${sdk_interface_1.AurusSupport.authRequest.transactionNumber}`);
426
411
  this.sendCancelLastTranRequest();
427
412
  }
428
- logger.traceExit(entryMessage);
413
+ return logger.traceExit(entryMessage, responseType);
429
414
  }
430
415
  processAESDKRegistration(response) {
431
416
  const entryMessage = logger.traceEntry("processAESDKRegistration", response);
417
+ let responseType = constants_1.ResponseType.None;
432
418
  if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.GetCardBin) {
433
- if (response.ResponseCode.value === constants_1.ResponseCodes.DeviceNotRegistered) {
434
- this.sendAESDKRegistration();
419
+ responseType |= constants_1.ResponseType.AuthResponse;
420
+ sdk_interface_1.AurusSupport.authResponse.responseCode = _1.ResponseCodes.Error;
421
+ sdk_interface_1.AurusSupport.authResponse.status = response.ResponseText;
422
+ if (response.ResponseText.toString() === constants_1.InitializationResponses.DeviceNotRegistered) {
423
+ this.sendAESDKRegistration(sdk_interface_1.AurusSupport.authRequest);
435
424
  }
436
- this.emitAuthorizationResponse(_1.ResponseCodes.Error, response.ResponseText.value);
437
425
  }
438
426
  if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.Registration) {
427
+ responseType |= constants_1.ResponseType.PaymentStatus;
428
+ sdk_interface_1.AurusSupport.paymentStatus.deviceAvailable = true;
429
+ sdk_interface_1.AurusSupport.paymentStatus.status = response.ResponseText;
430
+ sdk_interface_1.AurusSupport.paymentStatus.statusCode = _1.StatusCode.InitializationComplete;
439
431
  this._registrationInProgress = false;
440
- this.emitPaymentStatus(true, _1.StatusCode.InitializationComplete);
441
- //enable/disable scanner
442
- this._scannerEnabled ? this.enableScannerDevice() : this.disableScannerDevice();
443
432
  }
444
- logger.traceExit(entryMessage);
433
+ return logger.traceExit(entryMessage, responseType);
445
434
  }
446
435
  processAESDK(response) {
447
436
  const entryMessage = logger.traceEntry("processAESDK", response);
437
+ let responseType = constants_1.ResponseType.None;
448
438
  if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.GetCardBin) {
449
- this.emitAuthorizationResponse(_1.ResponseCodes.Error, response.ResponseText.value);
439
+ responseType |= constants_1.ResponseType.AuthResponse;
440
+ sdk_interface_1.AurusSupport.authResponse.responseCode = _1.ResponseCodes.Error;
441
+ sdk_interface_1.AurusSupport.authResponse.status = response.ResponseText;
450
442
  }
451
- // this scenario could happen if the registration request fails
452
443
  if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.Registration) {
444
+ responseType |= constants_1.ResponseType.PaymentStatus;
445
+ sdk_interface_1.AurusSupport.paymentStatus.deviceAvailable = true;
446
+ sdk_interface_1.AurusSupport.paymentStatus.status = response.ResponseText;
447
+ sdk_interface_1.AurusSupport.paymentStatus.statusCode = _1.StatusCode.InitializationComplete;
453
448
  this._registrationInProgress = false;
454
- // enable payment button or it will be permanately disabled without the user knowing why
455
- // registration can be re-attempted when clicked and/or an error given to the user
456
- this.emitPaymentStatus(true, _1.StatusCode.InitializationComplete);
457
- //enable/disable scanner
458
- this._scannerEnabled ? this.enableScannerDevice() : this.disableScannerDevice();
459
449
  }
460
- logger.traceExit(entryMessage);
450
+ return logger.traceExit(entryMessage, responseType);
461
451
  }
462
452
  mapAurusResponseCode(responseCode) {
463
453
  const entryMessage = logger.traceEntry("mapAurusResponseCode", responseCode);
464
454
  let retVal = _1.ResponseCodes.Error;
465
455
  switch (responseCode) {
466
- case constants_1.ResponseCodes.Approved:
456
+ case constants_1.ResponseValues.Approved:
467
457
  retVal = _1.ResponseCodes.Approved;
468
458
  break;
469
- case constants_1.ResponseCodes.Timeout:
459
+ case constants_1.ResponseValues.Timeout:
470
460
  retVal = _1.ResponseCodes.Timeout;
471
461
  break;
472
462
  default:
@@ -493,63 +483,6 @@ let AurusDevice = class AurusDevice {
493
483
  }
494
484
  return logger.traceExit(entryMessage, retVal);
495
485
  }
496
- mapAurusEntryMethod(entryMethod) {
497
- const entryMessage = logger.traceEntry("mapAurusEntryMethod", entryMethod);
498
- let retVal = _1.EntryMethod.Unknown;
499
- switch (entryMethod) {
500
- case constants_1.EntryMode.INSERT:
501
- retVal = _1.EntryMethod.Insert;
502
- break;
503
- case constants_1.EntryMode.SWIPE:
504
- retVal = _1.EntryMethod.Swipe;
505
- break;
506
- case constants_1.EntryMode.MOBILE:
507
- retVal = _1.EntryMethod.Mobile;
508
- break;
509
- case constants_1.EntryMode.TAP:
510
- retVal = _1.EntryMethod.Tap;
511
- break;
512
- case constants_1.EntryMode.KEYED:
513
- retVal = _1.EntryMethod.Keyed;
514
- break;
515
- case constants_1.EntryMode.FALLBACK:
516
- retVal = _1.EntryMethod.Fallback;
517
- break;
518
- default:
519
- retVal = _1.EntryMethod.Unknown;
520
- break;
521
- }
522
- return logger.traceExit(entryMessage, retVal);
523
- }
524
- mapAurusSignatureRequired(signatureReceiptFlag) {
525
- const entryMessage = logger.traceEntry("mapAurusSignatureRequired", signatureReceiptFlag);
526
- let retVal = false;
527
- switch (signatureReceiptFlag) {
528
- case constants_1.SignatureReceiptFlag.PinCapSignatureNeeded:
529
- case constants_1.SignatureReceiptFlag.SignatureNeeded:
530
- retVal = true;
531
- break;
532
- default:
533
- retVal = false;
534
- break;
535
- }
536
- return logger.traceExit(entryMessage, retVal);
537
- }
538
- mapAurusPinCaptured(signatureReceiptFlag) {
539
- const entryMessage = logger.traceEntry("mapAurusPinCaptured", signatureReceiptFlag);
540
- let retVal = false;
541
- switch (signatureReceiptFlag) {
542
- case constants_1.SignatureReceiptFlag.PinCapSignatureNeeded:
543
- case constants_1.SignatureReceiptFlag.PinCaptured:
544
- case constants_1.SignatureReceiptFlag.PinSigCaptured:
545
- retVal = true;
546
- break;
547
- default:
548
- retVal = false;
549
- break;
550
- }
551
- return logger.traceExit(entryMessage, retVal);
552
- }
553
486
  parseEMVData(data) {
554
487
  const entryMessage = logger.traceEntry("parseEMVData", data);
555
488
  let emvData = {};
@@ -559,167 +492,106 @@ let AurusDevice = class AurusDevice {
559
492
  let kvpEmv = data.split("[FS]");
560
493
  let kvp;
561
494
  for (kvp of kvpEmv) {
562
- let field = kvp.split("~");
563
- emvData[constants_1.emvDataMap[field[0].toString().toUpperCase()]] = field[1];
495
+ //split the pair on "~"
496
+ emvData = this.parseEMVField(kvp.split("~"), emvData);
564
497
  }
565
498
  }
566
499
  catch (e) {
567
500
  logger.error(e);
568
501
  }
502
+ ;
503
+ return logger.traceExit(entryMessage, emvData);
504
+ }
505
+ parseEMVField(field, emvData) {
506
+ const entryMessage = logger.traceEntry("parseEMVField", field, emvData);
507
+ try {
508
+ switch (field[0].toString().toUpperCase()) {
509
+ case "AID":
510
+ emvData.AID = field[1];
511
+ break;
512
+ case "CEM":
513
+ emvData.CEM = field[1];
514
+ break;
515
+ case "CVM":
516
+ emvData.CVM = field[1];
517
+ break;
518
+ case "TVR":
519
+ emvData.TVR = field[1];
520
+ break;
521
+ case "TSI":
522
+ emvData.TSI = field[1];
523
+ break;
524
+ case "IAD":
525
+ emvData.IAD = field[1];
526
+ break;
527
+ case "APP PREF NAME":
528
+ emvData.appPreferredName = field[1];
529
+ break;
530
+ case "APP LABEL":
531
+ emvData.appLabel = field[1];
532
+ break;
533
+ default:
534
+ break;
535
+ }
536
+ }
537
+ catch (e) {
538
+ logger.error(e);
539
+ }
540
+ ;
569
541
  return logger.traceExit(entryMessage, emvData);
570
542
  }
571
543
  /**
572
544
  * This method handles events published by the native components. This is an adapter between the native and JavaScript
573
545
  * components for asynchronous events from the native layer.
546
+ *
547
+ * @param args
548
+ * @return {any}
574
549
  */
575
- onNotificationReceived(...args) {
576
- const entryMessage = logger.traceEntry("onNotificationReceived", args);
550
+ onBarcodeDataReceived(...args) {
551
+ const entryMessage = logger.traceEntry("onBarcodeDataReceived", args);
577
552
  if (args.length >= 1 && args[0]) {
578
- const userInfo = args[0];
579
- logger.debug(`In onNotificationReceived, userInfo: ${JSON.stringify(userInfo)}`);
580
- this.handleNotificationEvent(userInfo);
553
+ let notificationObject = args[0];
554
+ logger.debug(() => `In onBarcodeDataReceived, notificationObject: ${JSON.stringify(notificationObject)}`);
555
+ if (!this._scannerEnabled) {
556
+ logger.debug(() => "Scanning is not enabled, not processing the scan.");
557
+ // todo: make a sound to indicate the scan failed due to not being enabled.
558
+ }
559
+ else {
560
+ this.handleBarcodeDataReceived(notificationObject).then((scanData) => {
561
+ if (scanData) {
562
+ this._scannerEmitter.emit(_1.EventResponseTypes.Scan, scanData);
563
+ }
564
+ });
565
+ }
581
566
  }
582
567
  else {
583
- throw logger.throwing(new Error("Empty event received. userInfo data is missing"), entryMessage);
568
+ throw logger.throwing(new Error("Empty event received. notificationObject data is missing"), entryMessage);
584
569
  }
585
570
  logger.traceExit(entryMessage);
586
571
  }
587
- handleNotificationEvent(userInfo) {
588
- if (userInfo && userInfo.CODE !== undefined) {
589
- (({
590
- [NotificationEvent.BarcodeInformation]: () => { this.handleBarcodeInformationEvent(userInfo.AE_BARCODE_INFO); },
591
- [NotificationEvent.DeviceNotConnected]: () => { this.handleDeviceNotConnectedEvent(); },
592
- [NotificationEvent.DeviceConnected]: () => { this.handleDeviceConnectedEvent(); },
593
- [NotificationEvent.DeviceConfigurationStarted]: () => { this.handleDeviceConfigurationStartedEvent(); },
594
- [NotificationEvent.DeviceConfigurationCompleted]: () => { this.handleDeviceConfigurationCompletedEvent(); },
595
- [NotificationEvent.DeviceConfigurationFailed]: () => { this.handleDeviceConfigurationFailedEvent(); },
596
- [NotificationEvent.DeviceAlreadyConfigured]: () => { this.handleDeviceAlreadyConfiguredEvent(); }
597
- })[userInfo.CODE] || (() => { this.handleDefaultEvent(userInfo.CODE); }))();
598
- }
599
- }
600
- handleBarcodeInformationEvent(xmlBarcodeInfo) {
601
- const entryMessage = logger.traceEntry("handleBarcodeInformationEvent", xmlBarcodeInfo);
602
- if (!this._scannerEnabled) {
603
- logger.debug("Scanning is not enabled, not processing the scan.");
604
- // todo: make a sound to indicate the scan failed due to not being enabled.
605
- }
606
- else {
607
- let xmlResponse = this.convertXmlToJs(xmlBarcodeInfo);
572
+ handleBarcodeDataReceived(xml) {
573
+ return __awaiter(this, void 0, void 0, function* () {
574
+ const entryMessage = logger.traceEntry("handleBarcodeDataReceived", xml);
575
+ let scanDataNotification;
576
+ let xmlResponse = yield this.convertXmlToJs(xml);
608
577
  if (!xmlResponse) {
609
- logger.warn(`In handleBarcodeInformationEvent, unable to convert to JSON: ${xmlBarcodeInfo}`);
578
+ logger.warn(() => `In handleBarcodeDataReceived, unable to convert to JSON: ${xml}`);
610
579
  }
611
580
  else if (constants_1.AesdkResponseTypes.Barcode in xmlResponse) {
612
- this.processBarcodeData(xmlResponse[constants_1.AesdkResponseTypes.Barcode]);
581
+ scanDataNotification = this.processBarcodeData(xmlResponse[constants_1.AesdkResponseTypes.Barcode]);
613
582
  }
614
583
  else {
615
- logger.warn(`In handleBarcodeInformationEvent, unexpected root element received, ignoring xml: ${xmlBarcodeInfo}`);
584
+ logger.warn(() => `In handleBarcodeDataReceived, unexpected root element received, ignoring xml: ${xml}`);
616
585
  }
617
- }
618
- logger.traceExit(entryMessage);
586
+ return logger.traceExit(entryMessage, scanDataNotification);
587
+ });
619
588
  }
620
589
  processBarcodeData(barcode) {
621
590
  const entryMessage = logger.traceEntry("processBarcodeData", barcode);
622
- const scanDataNotification = {
623
- data: barcode.Barcode.value,
624
- encoding: sdk_interface_1.AurusSupport.getBarcodeType(barcode.BarcodeType.value)
625
- };
626
- logger.debug(`In processBarcodeData, publishing scanDataNotification: ${JSON.stringify(scanDataNotification)}`);
627
- this._scannerEmitter.emit(_1.EventResponseTypes.Scan, scanDataNotification);
628
- logger.traceExit(entryMessage);
629
- }
630
- handleDeviceNotConnectedEvent() {
631
- const entryMessage = logger.traceEntry("handleDeviceNotConnectedEvent");
632
- this.emitPaymentStatus(false, _1.StatusCode.DeviceDisconnected);
633
- // FIXME: This is added as a workaround and will need to be removed in the future.
634
- // If the device disconnects during a payment, we will never get a response and the app will hang.
635
- if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.GetCardBin || sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.Transaction) {
636
- this.emitAuthorizationResponse(_1.ResponseCodes.Error, "Device disconnected. Please try again."); // send to POS
637
- }
638
- logger.traceExit(entryMessage);
639
- }
640
- handleDeviceConnectedEvent() {
641
- const entryMessage = logger.traceEntry("handleDeviceConnectedEvent");
642
- if (this._waitingForDeviceConnected) {
643
- this._waitingForDeviceConnected = false;
644
- this.sendAESDKRegistration();
645
- }
646
- else {
647
- // FIXME: This is added as a workaround and will need to be removed in the future.
648
- // If the device disconnects during a payment, Aurus will always return AESDK is busy.
649
- this.receiveResponse(); // pretend we received response
650
- this.sendByPassScreen("Device disconnected"); // send request to clear any errors
651
- if (this._registrationInProgress) {
652
- this.sendAESDKRegistration();
653
- }
654
- else {
655
- this.emitPaymentStatus(true, _1.StatusCode.DeviceReconnected);
656
- //enable/disable scanner
657
- this._scannerEnabled ? this.enableScannerDevice() : this.disableScannerDevice();
658
- }
659
- }
660
- logger.traceExit(entryMessage);
661
- }
662
- handleDeviceConfigurationStartedEvent() {
663
- const entryMessage = logger.traceEntry("handleDeviceConfigurationStartedEvent");
664
- logger.traceExit(entryMessage);
665
- }
666
- handleDeviceConfigurationCompletedEvent() {
667
- const entryMessage = logger.traceEntry("handleDeviceConfigurationCompletedEvent");
668
- logger.traceExit(entryMessage);
669
- }
670
- handleDeviceConfigurationFailedEvent() {
671
- const entryMessage = logger.traceEntry("handleDeviceConfigurationFailedEvent");
672
- logger.traceExit(entryMessage);
673
- }
674
- handleDeviceAlreadyConfiguredEvent() {
675
- const entryMessage = logger.traceEntry("handleDeviceAlreadyConfiguredEvent");
676
- logger.traceExit(entryMessage);
677
- }
678
- handleDefaultEvent(userInfoCode) {
679
- // Should we log this? If we do, we should convert the userInfoCode into readable text.
680
- }
681
- emitPaymentStatus(deviceAvailable, statusCode) {
682
- const entryMessage = logger.traceEntry("emitPaymentStatus");
683
- sdk_interface_1.AurusSupport.paymentStatus.deviceAvailable = deviceAvailable;
684
- sdk_interface_1.AurusSupport.paymentStatus.statusCode = statusCode;
685
- sdk_interface_1.AurusSupport.paymentStatus.paymentEnvironment = this._paymentEnvironment;
686
- logger.debug(`In emitPaymentStatus, publishing paymentStatus: ${JSON.stringify(sdk_interface_1.AurusSupport.paymentStatus)}`);
687
- this._paymentEmitter.emit(_1.EventResponseTypes.PaymentDeviceStatus, sdk_interface_1.AurusSupport.paymentStatus);
688
- sdk_interface_1.AurusSupport.paymentStatus = { deviceAvailable: false };
689
- logger.traceExit(entryMessage);
690
- }
691
- emitAuthorizationResponse(responseCode, status) {
692
- const entryMessage = logger.traceEntry("emitAuthorizationResponse");
693
- sdk_interface_1.AurusSupport.authResponse.responseCode = responseCode;
694
- sdk_interface_1.AurusSupport.authResponse.status = status;
695
- logger.debug(`In emitAuthorizationResponse, publishing authResponse: ${JSON.stringify(sdk_interface_1.AurusSupport.authResponse)}`);
696
- this._paymentEmitter.emit(_1.EventResponseTypes.Authorization, sdk_interface_1.AurusSupport.authResponse);
697
- sdk_interface_1.AurusSupport.requestType = "";
698
- logger.traceExit(entryMessage);
699
- }
700
- onAESDKLogResponse(...args) {
701
- if (args.length >= 1 && args[0]) {
702
- logger.debug(`onAESDKLogResponse: ${args[0]}`);
703
- }
704
- }
705
- sendRequest(xmlRequest) {
706
- logger.debug(`sendRequest: _requestInProgress = ${this._requestInProgress}`);
707
- if (this._requestInProgress) {
708
- // Note: This is being used to maintain order for rapid requests.
709
- // It safeguards against enable/disable scanner from POS at the same time as other requests.
710
- // If additional use cases are added, this should be revisted as well to maintain additional data.
711
- this._requestQueue.push(xmlRequest);
712
- }
713
- else {
714
- this._requestInProgress = true;
715
- this._devicePaymentTerminal.OnAESDKProcessRequest(xmlRequest);
716
- }
717
- }
718
- receiveResponse() {
719
- this._requestInProgress = false;
720
- if (this._requestQueue.length > 0) {
721
- this.sendRequest(this._requestQueue.shift());
722
- }
591
+ return logger.traceExit(entryMessage, {
592
+ data: barcode.Barcode,
593
+ encoding: barcode.BarcodeType
594
+ });
723
595
  }
724
596
  };
725
597
  AurusDevice = __decorate([