@aptos-scp/scp-component-rn-device-services 0.0.1 → 0.0.4-hm
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/android/build.gradle +47 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradlew +164 -0
- package/android/gradlew.bat +90 -0
- package/android/src/main/AndroidManifest.xml +10 -0
- package/android/src/main/java/com/aptos/scp/paymentterminal/RNMapper.java +212 -0
- package/android/src/main/java/com/aptos/scp/paymentterminal/VendorPaymentTerminal.java +46 -0
- package/android/src/main/java/com/aptos/scp/paymentterminal/VendorPaymentTerminalPackage.java +33 -0
- package/android/src/main/java/com/aptos/scp/paymentterminal/adyen/AdyenPaymentTerminal.java +122 -0
- package/android/src/main/java/com/aptos/scp/paymentterminal/aurus/AurusPaymentTerminal.java +54 -0
- package/ios/AurusEnterpriseSDK.framework/AurusEnterpriseSDK +0 -0
- package/ios/AurusEnterpriseSDK.framework/Headers/AurusEnterpriseSDK.h +97 -95
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/Info.plist +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/VersionInfo.plist +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.2.mom +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.3.mom +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.4.mom +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.4.omo +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.10.mom +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.8.6.mom +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit v1.9.mom +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/AdyenToolkit.bundle/adyentoolkit.momd/adyentoolkit.mom +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAccountData.h +26 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAdditionalDataRequest.h +38 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAmount.h +16 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYAppData.h +26 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYBalance.h +13 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYCashTransactionRequest.h +35 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYConstants.h +688 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYCurrency.h +33 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDevice.h +308 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDeviceData.h +52 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDeviceManagerDelegate.h +66 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDeviceRegistry.h +125 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYDynamicCurrencyConversionData.h +22 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYErrors.h +153 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCard.h +41 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardBalanceRequest.h +50 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardBalanceResponse.h +38 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardLoadRequest.h +78 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardLoadRequestDelegate.h +25 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardLoadResponse.h +31 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardMask.h +31 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYGiftCardRequest.h +13 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYLocationManager.h +14 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYLoginDelegate.h +80 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYPrintReceiptRequest.h +57 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYReceipt.h +33 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYReceiptLine.h +92 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYReferralRequest.h +16 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYRefundData.h +54 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYServerSynchronization.h +18 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYSignatureRequest.h +117 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYSpecialTransactionRequest.h +63 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYToneGenerator.h +45 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionData.h +416 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionDetails.h +45 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionProcessorDelegate.h +279 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYTransactionRequest.h +108 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/ADYUIKit.h +30 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/Adyen.h +591 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/AdyenToolkit-umbrella.h +59 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/AdyenToolkit.h +79 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/NSData+ADY.h +31 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/NSString+ADY.h +19 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Headers/adylog.h +176 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Info.plist +0 -0
- package/ios/Frameworks/Adyen/AdyenToolkit.framework/Modules/module.modulemap +6 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenConstants.h +40 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenConstants.m +28 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenDelegate.h +23 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenDelegate.m +15 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenDeviceManagerDelegate.h +19 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenDeviceManagerDelegate.m +31 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenLoginDelegate.h +19 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenLoginDelegate.m +26 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenTransactionProcessorDelegate.h +26 -0
- package/ios/SCPRNDeviceServices/Adyen/AdyenTransactionProcessorDelegate.m +148 -0
- package/ios/SCPRNDeviceServices/AdyenPaymentTerminal.h +19 -0
- package/ios/SCPRNDeviceServices/AdyenPaymentTerminal.m +457 -22
- package/ios/SCPRNDeviceServices/AurusPaymentTerminal.m +96 -11
- package/ios/SCPRNDeviceServices/VendorPaymentTerminal.m +1 -1
- package/ios/SCPRNDeviceServices.xcodeproj/project.pbxproj +56 -0
- package/lib/AdyenDevice/AdyenDevice.d.ts +56 -0
- package/lib/AdyenDevice/AdyenDevice.js +349 -0
- package/lib/AdyenDevice/AdyenDevice.js.map +1 -0
- package/lib/AdyenDevice/constants.d.ts +12 -0
- package/lib/AdyenDevice/constants.js +228 -0
- package/lib/AdyenDevice/constants.js.map +1 -0
- package/lib/AdyenDevice/index.d.ts +1 -0
- package/lib/AdyenDevice/index.js +7 -0
- package/lib/AdyenDevice/index.js.map +1 -0
- package/lib/AdyenDevice/interfaces.d.ts +175 -0
- package/lib/AdyenDevice/interfaces.js +3 -0
- package/lib/AdyenDevice/interfaces.js.map +1 -0
- package/lib/AurusDevice/AurusDevice.d.ts +102 -0
- package/lib/AurusDevice/AurusDevice.js +730 -0
- package/lib/AurusDevice/AurusDevice.js.map +1 -0
- package/lib/AurusDevice/constants.d.ts +85 -33
- package/lib/AurusDevice/constants.js +115 -37
- package/lib/AurusDevice/constants.js.map +1 -1
- package/lib/AurusDevice/index.d.ts +1 -1
- package/lib/AurusDevice/index.js +1 -1
- package/lib/AurusDevice/index.js.map +1 -1
- package/lib/AurusDevice/sdk-interface/AESDKRegistration.d.ts +10 -9
- package/lib/AurusDevice/sdk-interface/AESDKRegistration.js +0 -6
- package/lib/AurusDevice/sdk-interface/AESDKRegistration.js.map +1 -1
- package/lib/AurusDevice/sdk-interface/AurusPaymentSupport.d.ts +5 -5
- package/lib/AurusDevice/sdk-interface/AurusPaymentSupport.js +143 -107
- package/lib/AurusDevice/sdk-interface/AurusPaymentSupport.js.map +1 -1
- package/lib/AurusDevice/sdk-interface/Barcode.d.ts +16 -0
- package/lib/AurusDevice/sdk-interface/Barcode.js +3 -0
- package/lib/AurusDevice/sdk-interface/Barcode.js.map +1 -0
- package/lib/AurusDevice/sdk-interface/ByPassScreen.d.ts +25 -0
- package/lib/AurusDevice/sdk-interface/ByPassScreen.js +9 -0
- package/lib/AurusDevice/sdk-interface/ByPassScreen.js.map +1 -0
- package/lib/AurusDevice/sdk-interface/CancelTransaction.d.ts +11 -10
- package/lib/AurusDevice/sdk-interface/CancelTransaction.js +0 -6
- package/lib/AurusDevice/sdk-interface/CancelTransaction.js.map +1 -1
- package/lib/AurusDevice/sdk-interface/GetCardBinRequest.d.ts +14 -12
- package/lib/AurusDevice/sdk-interface/PLCCApplication.d.ts +12 -11
- package/lib/AurusDevice/sdk-interface/PLCCApplication.js +0 -6
- package/lib/AurusDevice/sdk-interface/PLCCApplication.js.map +1 -1
- package/lib/AurusDevice/sdk-interface/TransactionRequest.d.ts +44 -48
- package/lib/AurusDevice/sdk-interface/TransactionRequest.js +0 -6
- package/lib/AurusDevice/sdk-interface/TransactionRequest.js.map +1 -1
- package/lib/AurusDevice/sdk-interface/Upgrade.d.ts +23 -0
- package/lib/AurusDevice/sdk-interface/Upgrade.js +9 -0
- package/lib/AurusDevice/sdk-interface/Upgrade.js.map +1 -0
- package/lib/AurusDevice/sdk-interface/XmlElementString.d.ts +3 -0
- package/lib/AurusDevice/sdk-interface/XmlElementString.js +3 -0
- package/lib/AurusDevice/sdk-interface/XmlElementString.js.map +1 -0
- package/lib/AurusDevice/sdk-interface/index.d.ts +3 -0
- package/lib/PaymentDeviceFactory.d.ts +5 -5
- package/lib/PaymentDeviceFactory.js +16 -22
- package/lib/PaymentDeviceFactory.js.map +1 -1
- package/lib/PaymentDeviceService.d.ts +13 -12
- package/lib/PaymentDeviceService.js +114 -71
- package/lib/PaymentDeviceService.js.map +1 -1
- package/lib/ScannerDeviceFactory.d.ts +11 -0
- package/lib/ScannerDeviceFactory.js +27 -0
- package/lib/ScannerDeviceFactory.js.map +1 -0
- package/lib/ScannerDeviceService.d.ts +13 -0
- package/lib/ScannerDeviceService.js +110 -0
- package/lib/ScannerDeviceService.js.map +1 -0
- package/lib/configs/inversify/inversify.config.d.ts +3 -0
- package/lib/configs/inversify/inversify.config.js +15 -0
- package/lib/configs/inversify/inversify.config.js.map +1 -0
- package/lib/constants/constants.d.ts +62 -38
- package/lib/constants/constants.js +64 -42
- package/lib/constants/constants.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/interfaces/IDeviceStatus.d.ts +1 -0
- package/lib/interfaces/index.d.ts +1 -0
- package/lib/interfaces/payment/IPayment.d.ts +17 -18
- package/lib/interfaces/payment/messages/requests.d.ts +2 -3
- package/lib/interfaces/payment/messages/responses.d.ts +13 -6
- package/lib/interfaces/scanner/IScanner.d.ts +23 -0
- package/lib/interfaces/scanner/IScanner.js +3 -0
- package/lib/interfaces/scanner/IScanner.js.map +1 -0
- package/lib/interfaces/scanner/index.d.ts +1 -0
- package/lib/interfaces/scanner/index.js +3 -0
- package/lib/interfaces/scanner/index.js.map +1 -0
- package/package.json +12 -9
- package/types/react-native-xml2js/index.d.ts +5 -0
- package/lib/AurusDevice/AurusPaymentDevice.d.ts +0 -77
- package/lib/AurusDevice/AurusPaymentDevice.js +0 -473
- package/lib/AurusDevice/AurusPaymentDevice.js.map +0 -1
- package/types/money-works/index.d.ts +0 -49
|
@@ -0,0 +1,730 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
const scp_component_logging_1 = require("@aptos-scp/scp-component-logging");
|
|
21
|
+
const inversify_1 = require("inversify");
|
|
22
|
+
const react_native_1 = require("react-native");
|
|
23
|
+
const _1 = require("../");
|
|
24
|
+
const constants_1 = require("./constants");
|
|
25
|
+
const sdk_interface_1 = require("./sdk-interface");
|
|
26
|
+
const xml_js = require("xml-js");
|
|
27
|
+
const logger = scp_component_logging_1.LogManager.getLogger("com.aptos.deviceservices.AurusDevice");
|
|
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;
|
|
32
|
+
let AurusDevice = class AurusDevice {
|
|
33
|
+
/**
|
|
34
|
+
* To avoid pushing native component awareness onto the rest of the app, the native objects
|
|
35
|
+
* are created in the constructor, which only accepts JavaScript parameters.
|
|
36
|
+
*/
|
|
37
|
+
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 = [];
|
|
46
|
+
const entryMessage = logger.traceEntry("constructor");
|
|
47
|
+
this._devicePaymentTerminal = react_native_1.NativeModules.AurusPaymentTerminal;
|
|
48
|
+
this._nativeEventEmitter = new react_native_1.NativeEventEmitter(react_native_1.NativeModules.AurusPaymentTerminal);
|
|
49
|
+
logger.traceExit(entryMessage);
|
|
50
|
+
}
|
|
51
|
+
configurePaymentDevice(emitter, config) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const entryMessage = logger.traceEntry("configurePaymentDevice", emitter, config);
|
|
54
|
+
this._paymentEmitter = emitter;
|
|
55
|
+
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})`;
|
|
72
|
+
logger.traceExit(entryMessage);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
configureScannerDevice(emitter, config) {
|
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
const entryMessage = logger.traceEntry("configureScannerDevice", emitter, config);
|
|
78
|
+
this._scannerEmitter = emitter;
|
|
79
|
+
this._scannerConfig = config;
|
|
80
|
+
this._scannerEnabled = config.initiallyEnabled;
|
|
81
|
+
logger.traceExit(entryMessage);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
startPaymentDevice() {
|
|
85
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
const entryMessage = logger.traceEntry("startPaymentDevice");
|
|
87
|
+
this.initializeNative();
|
|
88
|
+
logger.traceExit(entryMessage);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
startScannerDevice() {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
const entryMessage = logger.traceEntry("startScannerDevice");
|
|
94
|
+
this.initializeNative();
|
|
95
|
+
logger.traceExit(entryMessage);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
captureSale(authRequest) {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
const entryMessage = logger.traceEntry("captureSale", authRequest);
|
|
101
|
+
yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.Sale }));
|
|
102
|
+
logger.traceExit(entryMessage);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
captureRefund(authRequest) {
|
|
106
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
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 }));
|
|
116
|
+
logger.traceExit(entryMessage);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
enableScannerDevice() {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
+
const entryMessage = logger.traceEntry("enableScannerDevice");
|
|
122
|
+
this._scannerEnabled = true;
|
|
123
|
+
this.sendUpgradeRequest(constants_1.UpgradeType.ENABLE_SCANNER);
|
|
124
|
+
logger.traceExit(entryMessage);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
disableScannerDevice() {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
const entryMessage = logger.traceEntry("disableScannerDevice");
|
|
130
|
+
this._scannerEnabled = false;
|
|
131
|
+
this.sendUpgradeRequest(constants_1.UpgradeType.DISABLE_SCANNER);
|
|
132
|
+
logger.traceExit(entryMessage);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
giftcardActivate(authRequest) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
const entryMessage = logger.traceEntry("giftcardActivate", authRequest);
|
|
138
|
+
yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardActivate }));
|
|
139
|
+
logger.traceExit(entryMessage);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
giftcardBalance(authRequest) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
const entryMessage = logger.traceEntry("giftcardBalance", authRequest);
|
|
145
|
+
yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardBalanceInquiry }));
|
|
146
|
+
logger.traceExit(entryMessage);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
giftcardIssue(authRequest) {
|
|
150
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
151
|
+
const entryMessage = logger.traceEntry("giftcardIssue", authRequest);
|
|
152
|
+
yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardIssue }));
|
|
153
|
+
logger.traceExit(entryMessage);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
giftcardRedeem(authRequest) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
const entryMessage = logger.traceEntry("giftcardRedeem", authRequest);
|
|
159
|
+
yield this.authorize(Object.assign({}, authRequest, { requestType: _1.PaymentRequestType.GiftCardRedeem }));
|
|
160
|
+
logger.traceExit(entryMessage);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
giftcardVoid(authRequest) {
|
|
164
|
+
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 }));
|
|
167
|
+
logger.traceExit(entryMessage);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
stopPaymentDevice() {
|
|
171
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
172
|
+
const entryMessage = logger.traceEntry("stopPaymentDevice");
|
|
173
|
+
logger.traceExit(entryMessage);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
stopScannerDevice() {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
const entryMessage = logger.traceEntry("stopScannerDevice");
|
|
179
|
+
logger.traceExit(entryMessage);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
tearDownPaymentDevice() {
|
|
183
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
+
const entryMessage = logger.traceEntry("tearDownPaymentDevice");
|
|
185
|
+
yield this.tearDownNative();
|
|
186
|
+
logger.traceExit(entryMessage);
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
tearDownScannerDevice() {
|
|
190
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
191
|
+
const entryMessage = logger.traceEntry("tearDownScannerDevice");
|
|
192
|
+
yield this.tearDownNative();
|
|
193
|
+
logger.traceExit(entryMessage);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
processTimeout() {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
const entryMessage = logger.traceEntry("processTimeout");
|
|
199
|
+
this.emitAuthorizationResponse(_1.ResponseCodes.Timeout, "TIMEOUT WAITING FOR RESPONSE");
|
|
200
|
+
//Send cancel to aurus
|
|
201
|
+
this.sendCancelTranRequest();
|
|
202
|
+
logger.traceExit(entryMessage);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
authorize(authRequest) {
|
|
206
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
+
const entryMessage = logger.traceEntry("authorize", authRequest);
|
|
208
|
+
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);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
this.sendCardTransRequest();
|
|
219
|
+
}
|
|
220
|
+
logger.traceExit(entryMessage);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
initializeNative() {
|
|
224
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
225
|
+
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;
|
|
238
|
+
this._devicePaymentTerminal.initialize();
|
|
239
|
+
}
|
|
240
|
+
logger.traceExit(entryMessage);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
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
|
+
/**
|
|
256
|
+
* This method handles events published by the native components. This is an adapter between the native and JavaScript
|
|
257
|
+
* components for asynchronous events from the native layer.
|
|
258
|
+
*/
|
|
259
|
+
onAESDKResponse(...args) {
|
|
260
|
+
const entryMessage = logger.traceEntry("onAESDKResponse", args);
|
|
261
|
+
if (args.length >= 1 && args[0]) {
|
|
262
|
+
// Note: This could check that it received the correct type of argument using a guard function, if multiple types
|
|
263
|
+
// of events can be sent or just for safety.
|
|
264
|
+
let withResponse = args[0];
|
|
265
|
+
logger.debug(`In onAESDKResponse, withResponse: ${JSON.stringify(withResponse)}`);
|
|
266
|
+
// update in-progress and check queue
|
|
267
|
+
this.receiveResponse();
|
|
268
|
+
// Parse xml and determine next steps. Call back into native if needed.
|
|
269
|
+
this.handleAESDKResponse(withResponse);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
throw logger.throwing(new Error("Empty event received. withResponse data is missing"), entryMessage);
|
|
273
|
+
}
|
|
274
|
+
logger.traceExit(entryMessage);
|
|
275
|
+
}
|
|
276
|
+
sendCancelTranRequest() {
|
|
277
|
+
const entryMessage = logger.traceEntry("sendCancelTranRequest");
|
|
278
|
+
sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.CancelTransaction;
|
|
279
|
+
let xmlreq = sdk_interface_1.AurusSupport.createCancelTranRequest();
|
|
280
|
+
this.sendRequest(xmlreq);
|
|
281
|
+
logger.traceExit(entryMessage);
|
|
282
|
+
}
|
|
283
|
+
sendCancelLastTranRequest() {
|
|
284
|
+
const entryMessage = logger.traceEntry("sendCancelLastTranRequest");
|
|
285
|
+
sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.CancelTransaction;
|
|
286
|
+
let xmlreq = sdk_interface_1.AurusSupport.createCancelLastTranRequest();
|
|
287
|
+
this.sendRequest(xmlreq);
|
|
288
|
+
logger.traceExit(entryMessage);
|
|
289
|
+
}
|
|
290
|
+
sendTransRequest(getCardBinResp) {
|
|
291
|
+
const entryMessage = logger.traceEntry("sendTransRequest", getCardBinResp);
|
|
292
|
+
sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.Transaction;
|
|
293
|
+
let xmlreq = sdk_interface_1.AurusSupport.createCardTranRequest(getCardBinResp);
|
|
294
|
+
this.sendRequest(xmlreq);
|
|
295
|
+
logger.traceExit(entryMessage);
|
|
296
|
+
}
|
|
297
|
+
sendCardTransRequest() {
|
|
298
|
+
const entryMessage = logger.traceEntry("sendCardTransRequest");
|
|
299
|
+
sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.Transaction;
|
|
300
|
+
let xmlreq = sdk_interface_1.AurusSupport.createCardTranRequest();
|
|
301
|
+
this.sendRequest(xmlreq);
|
|
302
|
+
logger.traceExit(entryMessage);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Sends a GetCardBinRequest to request card data from teh device
|
|
306
|
+
* @param authRequest
|
|
307
|
+
*/
|
|
308
|
+
sendGetCardBin(authRequest) {
|
|
309
|
+
const entryMessage = logger.traceEntry("sendGetCardBin", authRequest);
|
|
310
|
+
sdk_interface_1.AurusSupport.requestType = constants_1.RequestTypes.GetCardBin;
|
|
311
|
+
let xmlreq = sdk_interface_1.AurusSupport.createGetCardBinRequest();
|
|
312
|
+
this.sendRequest(xmlreq);
|
|
313
|
+
logger.traceExit(entryMessage);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Sends an AESDKRegistrationRequest to register the device
|
|
317
|
+
*/
|
|
318
|
+
sendAESDKRegistration() {
|
|
319
|
+
const entryMessage = logger.traceEntry("sendAESDKRegistration");
|
|
320
|
+
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);
|
|
322
|
+
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);
|
|
340
|
+
logger.traceExit(entryMessage);
|
|
341
|
+
}
|
|
342
|
+
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);
|
|
364
|
+
}
|
|
365
|
+
convertXmlToJs(xml) {
|
|
366
|
+
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);
|
|
374
|
+
}
|
|
375
|
+
processTrans(response) {
|
|
376
|
+
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);
|
|
401
|
+
}
|
|
402
|
+
processGetCardBin(response) {
|
|
403
|
+
const entryMessage = logger.traceEntry("processGetCardBin", response);
|
|
404
|
+
if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.GetCardBin) {
|
|
405
|
+
if (response.ResponseCode.value === constants_1.ResponseCodes.Approved) {
|
|
406
|
+
this.sendTransRequest(response);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
this.emitAuthorizationResponse(this.mapAurusResponseCode(response.ResponseCode.value), response.ResponseText.value);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
//handle additional request types with getcardbinresponses
|
|
414
|
+
this.emitAuthorizationResponse(_1.ResponseCodes.Error, response.ResponseText.value);
|
|
415
|
+
}
|
|
416
|
+
logger.traceExit(entryMessage);
|
|
417
|
+
}
|
|
418
|
+
processCancelTrans(response) {
|
|
419
|
+
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}`);
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
sdk_interface_1.AurusSupport.requestType = "";
|
|
425
|
+
logger.debug(`processCancelTrans failed, attempting CancelLastTrans: ${sdk_interface_1.AurusSupport.authRequest.transactionNumber}`);
|
|
426
|
+
this.sendCancelLastTranRequest();
|
|
427
|
+
}
|
|
428
|
+
logger.traceExit(entryMessage);
|
|
429
|
+
}
|
|
430
|
+
processAESDKRegistration(response) {
|
|
431
|
+
const entryMessage = logger.traceEntry("processAESDKRegistration", response);
|
|
432
|
+
if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.GetCardBin) {
|
|
433
|
+
if (response.ResponseCode.value === constants_1.ResponseCodes.DeviceNotRegistered) {
|
|
434
|
+
this.sendAESDKRegistration();
|
|
435
|
+
}
|
|
436
|
+
this.emitAuthorizationResponse(_1.ResponseCodes.Error, response.ResponseText.value);
|
|
437
|
+
}
|
|
438
|
+
if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.Registration) {
|
|
439
|
+
this._registrationInProgress = false;
|
|
440
|
+
this.emitPaymentStatus(true, _1.StatusCode.InitializationComplete);
|
|
441
|
+
//enable/disable scanner
|
|
442
|
+
this._scannerEnabled ? this.enableScannerDevice() : this.disableScannerDevice();
|
|
443
|
+
}
|
|
444
|
+
logger.traceExit(entryMessage);
|
|
445
|
+
}
|
|
446
|
+
processAESDK(response) {
|
|
447
|
+
const entryMessage = logger.traceEntry("processAESDK", response);
|
|
448
|
+
if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.GetCardBin) {
|
|
449
|
+
this.emitAuthorizationResponse(_1.ResponseCodes.Error, response.ResponseText.value);
|
|
450
|
+
}
|
|
451
|
+
// this scenario could happen if the registration request fails
|
|
452
|
+
if (sdk_interface_1.AurusSupport.requestType === constants_1.RequestTypes.Registration) {
|
|
453
|
+
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
|
+
}
|
|
460
|
+
logger.traceExit(entryMessage);
|
|
461
|
+
}
|
|
462
|
+
mapAurusResponseCode(responseCode) {
|
|
463
|
+
const entryMessage = logger.traceEntry("mapAurusResponseCode", responseCode);
|
|
464
|
+
let retVal = _1.ResponseCodes.Error;
|
|
465
|
+
switch (responseCode) {
|
|
466
|
+
case constants_1.ResponseCodes.Approved:
|
|
467
|
+
retVal = _1.ResponseCodes.Approved;
|
|
468
|
+
break;
|
|
469
|
+
case constants_1.ResponseCodes.Timeout:
|
|
470
|
+
retVal = _1.ResponseCodes.Timeout;
|
|
471
|
+
break;
|
|
472
|
+
default:
|
|
473
|
+
retVal = _1.ResponseCodes.Decline;
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
return logger.traceExit(entryMessage, retVal);
|
|
477
|
+
}
|
|
478
|
+
mapAurusCardType(aurusCardType) {
|
|
479
|
+
const entryMessage = logger.traceEntry("mapAurusCardType", aurusCardType);
|
|
480
|
+
let retVal = constants_1.cardTypeMap[aurusCardType];
|
|
481
|
+
if (!retVal) {
|
|
482
|
+
logger.debug(`mapAurusCardType: Unknown cardType: ${aurusCardType}`);
|
|
483
|
+
retVal = _1.CardType.Unknown;
|
|
484
|
+
}
|
|
485
|
+
return logger.traceExit(entryMessage, retVal);
|
|
486
|
+
}
|
|
487
|
+
mapAurusTenderType(aurusCardType) {
|
|
488
|
+
const entryMessage = logger.traceEntry("mapAurusTenderType", aurusCardType);
|
|
489
|
+
let retVal = constants_1.tenderTypeMap[aurusCardType];
|
|
490
|
+
if (!retVal) {
|
|
491
|
+
logger.debug(`mapAurusTenderType: Unknown cardType: ${aurusCardType}`);
|
|
492
|
+
retVal = _1.TenderType.Unknown;
|
|
493
|
+
}
|
|
494
|
+
return logger.traceExit(entryMessage, retVal);
|
|
495
|
+
}
|
|
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
|
+
parseEMVData(data) {
|
|
554
|
+
const entryMessage = logger.traceEntry("parseEMVData", data);
|
|
555
|
+
let emvData = {};
|
|
556
|
+
try {
|
|
557
|
+
//we have data in emvData field - parse into response.emvData format "key1~value1[FS]key2~value2"
|
|
558
|
+
//split on [FS] for KVPs
|
|
559
|
+
let kvpEmv = data.split("[FS]");
|
|
560
|
+
let kvp;
|
|
561
|
+
for (kvp of kvpEmv) {
|
|
562
|
+
let field = kvp.split("~");
|
|
563
|
+
emvData[constants_1.emvDataMap[field[0].toString().toUpperCase()]] = field[1];
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
catch (e) {
|
|
567
|
+
logger.error(e);
|
|
568
|
+
}
|
|
569
|
+
return logger.traceExit(entryMessage, emvData);
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* This method handles events published by the native components. This is an adapter between the native and JavaScript
|
|
573
|
+
* components for asynchronous events from the native layer.
|
|
574
|
+
*/
|
|
575
|
+
onNotificationReceived(...args) {
|
|
576
|
+
const entryMessage = logger.traceEntry("onNotificationReceived", args);
|
|
577
|
+
if (args.length >= 1 && args[0]) {
|
|
578
|
+
const userInfo = args[0];
|
|
579
|
+
logger.debug(`In onNotificationReceived, userInfo: ${JSON.stringify(userInfo)}`);
|
|
580
|
+
this.handleNotificationEvent(userInfo);
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
throw logger.throwing(new Error("Empty event received. userInfo data is missing"), entryMessage);
|
|
584
|
+
}
|
|
585
|
+
logger.traceExit(entryMessage);
|
|
586
|
+
}
|
|
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);
|
|
608
|
+
if (!xmlResponse) {
|
|
609
|
+
logger.warn(`In handleBarcodeInformationEvent, unable to convert to JSON: ${xmlBarcodeInfo}`);
|
|
610
|
+
}
|
|
611
|
+
else if (constants_1.AesdkResponseTypes.Barcode in xmlResponse) {
|
|
612
|
+
this.processBarcodeData(xmlResponse[constants_1.AesdkResponseTypes.Barcode]);
|
|
613
|
+
}
|
|
614
|
+
else {
|
|
615
|
+
logger.warn(`In handleBarcodeInformationEvent, unexpected root element received, ignoring xml: ${xmlBarcodeInfo}`);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
logger.traceExit(entryMessage);
|
|
619
|
+
}
|
|
620
|
+
processBarcodeData(barcode) {
|
|
621
|
+
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
|
+
}
|
|
723
|
+
}
|
|
724
|
+
};
|
|
725
|
+
AurusDevice = __decorate([
|
|
726
|
+
inversify_1.injectable(),
|
|
727
|
+
__metadata("design:paramtypes", [])
|
|
728
|
+
], AurusDevice);
|
|
729
|
+
exports.AurusDevice = AurusDevice;
|
|
730
|
+
//# sourceMappingURL=AurusDevice.js.map
|