quivio-transaction-processor 1.7.2 → 1.17.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 (72) hide show
  1. package/dist/emvPaymentProvider/EMVPaymentProvider.d.ts +8 -0
  2. package/dist/emvPaymentProvider/EMVPaymentProvider.js +266 -0
  3. package/dist/emvPaymentProvider/EMVPaymentProvider.js.map +1 -0
  4. package/dist/emvPaymentProvider/types.d.ts +37 -0
  5. package/dist/{types.js → emvPaymentProvider/types.js} +6 -6
  6. package/dist/emvPaymentProvider/types.js.map +1 -0
  7. package/dist/emvPaymentProvider/useEMVPayment.d.ts +2 -0
  8. package/dist/emvPaymentProvider/useEMVPayment.js +15 -0
  9. package/dist/emvPaymentProvider/useEMVPayment.js.map +1 -0
  10. package/dist/example/EMVPaymentScreen.d.ts +1 -4
  11. package/dist/example/EMVPaymentScreen.js +171 -38
  12. package/dist/example/EMVPaymentScreen.js.map +1 -1
  13. package/dist/example/EMVSettingsScreen.d.ts +8 -0
  14. package/dist/example/EMVSettingsScreen.js +130 -0
  15. package/dist/example/EMVSettingsScreen.js.map +1 -0
  16. package/dist/example/ExternalSystemsScreen.d.ts +8 -0
  17. package/dist/example/ExternalSystemsScreen.js +248 -0
  18. package/dist/example/ExternalSystemsScreen.js.map +1 -0
  19. package/dist/example/MainScreen.d.ts +6 -0
  20. package/dist/example/MainScreen.js +71 -0
  21. package/dist/example/MainScreen.js.map +1 -0
  22. package/dist/usb/USBDeviceContext.d.ts +10 -0
  23. package/dist/usb/USBDeviceContext.js +55 -0
  24. package/dist/usb/USBDeviceContext.js.map +1 -0
  25. package/dist/usb/useUSBDeviceListener.d.ts +11 -0
  26. package/dist/usb/useUSBDeviceListener.js +24 -0
  27. package/dist/usb/useUSBDeviceListener.js.map +1 -0
  28. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/CommonTag.kt +1 -1
  29. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/ConfigFactory.kt +0 -1
  30. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/POSTransactionExecutor.kt +21 -12
  31. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/PosState.kt +10 -11
  32. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/PosTransResponse.kt +8 -5
  33. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/XMLResponseExtractor.kt +3 -2
  34. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/builder/DsiEMVRequestBuilder.kt +6 -11
  35. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/{EMVTransactionCommunicator.kt → communicator/transactionCommunicators.kt} +11 -5
  36. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/manager/{DsiEMVManager.kt → EMVPaymentManager.kt} +111 -104
  37. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/usb/USBDeviceEventCallback.kt +8 -0
  38. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/usb/USBDeviceListenerManager.kt +31 -0
  39. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/usb/UsbDeviceReceiver.kt +25 -0
  40. package/libs/emvNative/src/main/java/com/quivio_transaction_processor/{DsiEMVManagerModule.kt → EMVPaymentManagerModule.kt} +86 -81
  41. package/libs/emvNative/src/main/java/com/quivio_transaction_processor/EMVPaymentPackage.kt +1 -1
  42. package/libs/emvNative/src/main/java/com/quivio_transaction_processor/UsbDeviceEventBridge.kt +44 -0
  43. package/libs/emvNative/src/main/java/com/quivio_transaction_processor/UsbDeviceListenerModule.kt +39 -0
  44. package/libs/emvNative/src/main/java/com/quivio_transaction_processor/UsbDeviceListenerPackage.kt +14 -0
  45. package/package.json +1 -1
  46. package/src/emvPaymentProvider/EMVPaymentProvider.tsx +310 -0
  47. package/src/emvPaymentProvider/Untitled-1.txt +19 -0
  48. package/src/{types.ts → emvPaymentProvider/types.ts} +21 -20
  49. package/src/emvPaymentProvider/useEMVPayment.ts +16 -0
  50. package/src/example/EMVPaymentScreen.tsx +228 -81
  51. package/src/example/EMVSettingsScreen.tsx +162 -0
  52. package/src/example/ExternalSystemsScreen.tsx +404 -0
  53. package/src/example/MainScreen.tsx +54 -0
  54. package/src/usb/USBDeviceContext.tsx +43 -0
  55. package/src/usb/useUSBDeviceListener.ts +44 -0
  56. package/dist/PaymentProvider.d.ts +0 -10
  57. package/dist/PaymentProvider.js +0 -365
  58. package/dist/PaymentProvider.js.map +0 -1
  59. package/dist/index.d.ts +0 -6
  60. package/dist/index.js +0 -14
  61. package/dist/index.js.map +0 -1
  62. package/dist/types.d.ts +0 -37
  63. package/dist/types.js.map +0 -1
  64. package/dist/useEMVPayment.d.ts +0 -2
  65. package/dist/useEMVPayment.js +0 -15
  66. package/dist/useEMVPayment.js.map +0 -1
  67. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/BridgeCommunicator.kt +0 -12
  68. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/PosXMLExtractor.kt +0 -216
  69. package/libs/emvNative/src/main/java/com/quivio_transaction_processor/POSConfigFactory.kt +0 -46
  70. package/src/PaymentProvider.tsx +0 -431
  71. package/src/index.ts +0 -14
  72. package/src/useEMVPayment.tsx +0 -12
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { EMVPaymentContextType } from './types';
3
+ declare const EMVPaymentContext: React.Context<EMVPaymentContextType | undefined>;
4
+ declare const EMVPaymentProvider: React.FC<{
5
+ children: React.ReactNode;
6
+ }>;
7
+ export { EMVPaymentProvider };
8
+ export { EMVPaymentContext };
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
26
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
27
+ if (ar || !(i in from)) {
28
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
29
+ ar[i] = from[i];
30
+ }
31
+ }
32
+ return to.concat(ar || Array.prototype.slice.call(from));
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.EMVPaymentContext = exports.EMVPaymentProvider = void 0;
36
+ var react_1 = __importStar(require("react"));
37
+ var react_native_1 = require("react-native");
38
+ var types_1 = require("./types");
39
+ var USBDeviceContext_1 = require("../usb/USBDeviceContext");
40
+ var EMVPaymentContext = (0, react_1.createContext)(undefined);
41
+ exports.EMVPaymentContext = EMVPaymentContext;
42
+ var DsiEMVManagerBridge = react_native_1.NativeModules.DsiEMVManagerBridge;
43
+ var emvEmitter = new react_native_1.NativeEventEmitter(DsiEMVManagerBridge);
44
+ var EMVPaymentProvider = function (_a) {
45
+ var children = _a.children;
46
+ var TRANSACTION_RESPONSE_EVENTS = [
47
+ 'onError',
48
+ 'onCardReadSuccessfully',
49
+ 'onSaleTransactionCompleted',
50
+ 'onRecurringSaleCompleted',
51
+ 'onReplaceCardCompleted',
52
+ 'onTransactionCancelled'
53
+ ];
54
+ // Device Connected State
55
+ var isDeviceConnected = (0, USBDeviceContext_1.useUSBDevice)().isDeviceConnected;
56
+ // Show Display Message Cache
57
+ var _b = (0, react_1.useState)(""), displayMessage = _b[0], setDisplayMessage = _b[1];
58
+ // Device Configiured State
59
+ var _c = (0, react_1.useState)(false), isConfigured = _c[0], setIsConfigured = _c[1];
60
+ // Transaction In Progress Flag
61
+ var _d = (0, react_1.useState)(false), isTransactionCurrentlyRunning = _d[0], setTransactionCurrentlyRunning = _d[1];
62
+ // Cancellation in Progress Flag
63
+ var _e = (0, react_1.useState)(false), isCancellationRunning = _e[0], setCancellationRunning = _e[1];
64
+ // Configuration In Progress State
65
+ var _f = (0, react_1.useState)(false), isConfigurationInProgress = _f[0], setConfigurationInProgress = _f[1];
66
+ // Logs DataStructure
67
+ var _g = (0, react_1.useState)([]), logs = _g[0], setLogs = _g[1];
68
+ // Ref to maintain subscription
69
+ var subscriptionsRef = (0, react_1.useRef)(new Map());
70
+ // Ref to maintain timeout during configuration
71
+ // Because after a successfull EMVParamDownload
72
+ // Device reboots which leads to USB disconnection
73
+ // and connection
74
+ var unconfigureTimeoutRef = (0, react_1.useRef)(null);
75
+ // Ref to maintain device connection/disconnection
76
+ var isDeviceConnectedRef = (0, react_1.useRef)(isDeviceConnected);
77
+ (0, react_1.useEffect)(function () {
78
+ // Always sync ref first
79
+ isDeviceConnectedRef.current = isDeviceConnected;
80
+ // Handle disconnect logic
81
+ if (!isDeviceConnected) {
82
+ unconfigureDevice(false);
83
+ setConfigurationInProgress(false);
84
+ setTransactionCurrentlyRunning(false);
85
+ setCancellationRunning(false);
86
+ }
87
+ }, [isDeviceConnected]);
88
+ // Logging helper
89
+ var pushLog = function (type, payload) {
90
+ setLogs(function (prev) { return __spreadArray(__spreadArray([], prev, true), [{ type: type, payload: payload, timestamp: Date.now() }], false); });
91
+ };
92
+ // Exposed Method to unconfigure Device
93
+ var unconfigureDevice = function (immediate) {
94
+ if (immediate === void 0) { immediate = false; }
95
+ // Cancel any pending delayed unconfigure
96
+ if (unconfigureTimeoutRef.current) {
97
+ clearTimeout(unconfigureTimeoutRef.current);
98
+ unconfigureTimeoutRef.current = null;
99
+ }
100
+ if (immediate) {
101
+ setIsConfigured(false);
102
+ return;
103
+ }
104
+ // Delayed unconfigure (handles IDTECH reboot)
105
+ unconfigureTimeoutRef.current = setTimeout(function () {
106
+ if (!isDeviceConnectedRef.current) {
107
+ setIsConfigured(false);
108
+ }
109
+ }, 2000);
110
+ };
111
+ // Native to Provider EMV event listening
112
+ (0, react_1.useEffect)(function () {
113
+ var nativeSubs = types_1.EVENT_NAMES.map(function (eventName) {
114
+ return emvEmitter.addListener(eventName, function (payload) {
115
+ pushLog(eventName, payload);
116
+ if (eventName === 'onShowDisplayMessage') {
117
+ setDisplayMessage(payload);
118
+ }
119
+ if (eventName === 'onConfigCompleted') {
120
+ setConfigurationInProgress(false);
121
+ setCancellationRunning(false);
122
+ setIsConfigured(true);
123
+ }
124
+ if (eventName === 'onConfigError') {
125
+ setConfigurationInProgress(false);
126
+ setCancellationRunning(false);
127
+ setIsConfigured(false);
128
+ }
129
+ if (eventName === 'onProcessAlreadyRunning') {
130
+ setCancellationRunning(false);
131
+ setTransactionCurrentlyRunning(true);
132
+ }
133
+ if (TRANSACTION_RESPONSE_EVENTS.includes(eventName)) {
134
+ setTransactionCurrentlyRunning(false);
135
+ setCancellationRunning(false);
136
+ }
137
+ var callbacks = subscriptionsRef.current.get(eventName);
138
+ callbacks === null || callbacks === void 0 ? void 0 : callbacks.forEach(function (cb) { return cb(payload); });
139
+ });
140
+ });
141
+ return function () {
142
+ nativeSubs.forEach(function (s) { return s.remove(); });
143
+ subscriptionsRef.current.clear();
144
+ };
145
+ }, []);
146
+ // Exposed method to run EMV configuration
147
+ var runConfiguration = function (config) {
148
+ var title = 'CONFIGURATION DENIED';
149
+ var message = !isDeviceConnected
150
+ ? 'IDTECH device is not connected via USB'
151
+ : config.merchantID == ''
152
+ ? 'Merchant ID not found'
153
+ : config.operatorID == ''
154
+ ? 'Operator ID not Found'
155
+ : config.secureDeviceName == '' || config.posPackageID == ''
156
+ ? 'Some configuration parameters are missing'
157
+ : '';
158
+ if (message != '') {
159
+ pushLog(title, message);
160
+ return;
161
+ }
162
+ setConfigurationInProgress(true);
163
+ console.log('Initialising::: ConfugurationProgress:', isConfigurationInProgress, 'isDeviceConnected: ', isDeviceConnected);
164
+ DsiEMVManagerBridge.clearTransactionListener();
165
+ DsiEMVManagerBridge.initialize(config);
166
+ DsiEMVManagerBridge.configureDevice();
167
+ };
168
+ // Exposed method to run EMV CC Sale
169
+ var creditCardSale = function (amount) {
170
+ if (!isDeviceConnected || !isConfigured)
171
+ return;
172
+ setTransactionCurrentlyRunning(true);
173
+ DsiEMVManagerBridge.runSaleTransaction(amount);
174
+ };
175
+ // Exposed method to run In House/ Prepaid Card Read
176
+ var prepaidCardRead = function () {
177
+ if (!isDeviceConnected || !isConfigured)
178
+ return;
179
+ setTransactionCurrentlyRunning(true);
180
+ DsiEMVManagerBridge.collectCardDetails();
181
+ };
182
+ // Exposed method to run EMV CC Sale for Sale
183
+ var creditCardRecurringSale = function (amount) {
184
+ if (!isDeviceConnected || !isConfigured)
185
+ return;
186
+ setTransactionCurrentlyRunning(true);
187
+ DsiEMVManagerBridge.runRecurringTransaction(amount);
188
+ };
189
+ // Exposed method to run EMV CC Zero Auth
190
+ var zeroAuthTransaction = function () {
191
+ if (!isDeviceConnected || !isConfigured)
192
+ return;
193
+ setTransactionCurrentlyRunning(true);
194
+ DsiEMVManagerBridge.replaceCardInRecurring();
195
+ };
196
+ // Exposed method to fetch device details
197
+ var getDeviceDetails = function () {
198
+ if (!isDeviceConnected)
199
+ return;
200
+ DsiEMVManagerBridge.getDeviceDetails();
201
+ };
202
+ // Exposed method to cancel transaction
203
+ var cancelOperation = function () {
204
+ setTransactionCurrentlyRunning(false);
205
+ setConfigurationInProgress(false);
206
+ setCancellationRunning(true);
207
+ DsiEMVManagerBridge.cancelTransaction();
208
+ };
209
+ // Exposed method to remove all attached listener
210
+ var removeAllListeners = function () {
211
+ subscriptionsRef.current.clear();
212
+ DsiEMVManagerBridge.clearTransactionListener();
213
+ };
214
+ // Exposed method to subscribe to an event
215
+ var subscribeToEvent = function (eventName, callback) {
216
+ if (!subscriptionsRef.current.has(eventName)) {
217
+ subscriptionsRef.current.set(eventName, new Set());
218
+ }
219
+ subscriptionsRef.current.get(eventName).add(callback);
220
+ };
221
+ // Exposed method to unsubscribe Event
222
+ var unsubscribeFromEvent = function (eventName, callback) {
223
+ var _a;
224
+ (_a = subscriptionsRef.current.get(eventName)) === null || _a === void 0 ? void 0 : _a.delete(callback);
225
+ };
226
+ // EVENTS Memoization
227
+ var EVENTS = (0, react_1.useMemo)(function () {
228
+ return types_1.EVENT_NAMES.reduce(function (acc, e) {
229
+ acc[e] = e;
230
+ return acc;
231
+ }, {});
232
+ }, []);
233
+ // Cleanup on unmount
234
+ (0, react_1.useEffect)(function () {
235
+ return function () {
236
+ if (unconfigureTimeoutRef.current) {
237
+ clearTimeout(unconfigureTimeoutRef.current);
238
+ }
239
+ };
240
+ }, []);
241
+ // Context value builder
242
+ var value = {
243
+ logs: logs,
244
+ isDeviceConnected: isDeviceConnected,
245
+ isConfigured: isConfigured,
246
+ isTransactionCurrentlyRunning: isTransactionCurrentlyRunning,
247
+ isConfigurationInProgress: isConfigurationInProgress,
248
+ isCancellationRunning: isCancellationRunning,
249
+ displayMessage: displayMessage,
250
+ unconfigureDevice: unconfigureDevice,
251
+ creditCardSale: creditCardSale,
252
+ prepaidCardRead: prepaidCardRead,
253
+ creditCardRecurringSale: creditCardRecurringSale,
254
+ zeroAuthTransaction: zeroAuthTransaction,
255
+ getDeviceDetails: getDeviceDetails,
256
+ runConfiguration: runConfiguration,
257
+ removeAllListeners: removeAllListeners,
258
+ cancelOperation: cancelOperation,
259
+ EVENTS: EVENTS,
260
+ subscribeToEvent: subscribeToEvent,
261
+ unsubscribeFromEvent: unsubscribeFromEvent,
262
+ };
263
+ return (react_1.default.createElement(EMVPaymentContext.Provider, { value: value }, children));
264
+ };
265
+ exports.EMVPaymentProvider = EMVPaymentProvider;
266
+ //# sourceMappingURL=EMVPaymentProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EMVPaymentProvider.js","sourceRoot":"","sources":["../../src/emvPaymentProvider/EMVPaymentProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare const EVENT_NAMES: readonly ["onError", "onConfigError", "onConfigCompleted", "onCardReadSuccessfully", "onSaleTransactionCompleted", "onRecurringSaleCompleted", "onReplaceCardCompleted", "onDeviceDetailsRetrieved", "onShowDisplayMessage", "onProcessAlreadyRunning", "onTransactionCancelled"];
2
+ export type EMVEventName = typeof EVENT_NAMES[number];
3
+ export interface CallbackLog {
4
+ type: string;
5
+ payload: any;
6
+ timestamp: number;
7
+ }
8
+ export interface EMVPaymentHook {
9
+ logs: CallbackLog[];
10
+ isDeviceConnected: boolean;
11
+ isConfigured: boolean;
12
+ isTransactionCurrentlyRunning: boolean;
13
+ isConfigurationInProgress: boolean;
14
+ isCancellationRunning: boolean;
15
+ displayMessage: string;
16
+ unconfigureDevice: (immediate: boolean) => void;
17
+ creditCardSale: (amount: string) => void;
18
+ prepaidCardRead: () => void;
19
+ creditCardRecurringSale: (amount: string) => void;
20
+ zeroAuthTransaction: () => void;
21
+ getDeviceDetails: () => void;
22
+ runConfiguration: (config: EMVConfig) => void;
23
+ removeAllListeners: () => void;
24
+ cancelOperation: () => void;
25
+ EVENTS: Record<EMVEventName, EMVEventName>;
26
+ subscribeToEvent: (eventName: EMVEventName, callback: (payload: any) => void) => void;
27
+ unsubscribeFromEvent: (eventName: EMVEventName, callback: (payload: any) => void) => void;
28
+ }
29
+ export interface EMVPaymentContextType extends EMVPaymentHook {
30
+ }
31
+ export interface EMVConfig {
32
+ merchantID: string;
33
+ isSandBox: boolean;
34
+ secureDeviceName: string;
35
+ operatorID: string;
36
+ posPackageID: string;
37
+ }
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EVENT_NAMES = void 0;
4
4
  exports.EVENT_NAMES = [
5
5
  'onError',
6
+ 'onConfigError',
7
+ 'onConfigCompleted',
6
8
  'onCardReadSuccessfully',
7
9
  'onSaleTransactionCompleted',
8
10
  'onRecurringSaleCompleted',
9
11
  'onReplaceCardCompleted',
10
- 'onClientVersionCompleted',
11
- 'onShowMessage',
12
- 'onConfigError',
13
- 'onConfigPingFailed',
14
- 'onConfigPingSuccess',
15
- 'onConfigCompleted',
12
+ 'onDeviceDetailsRetrieved',
13
+ 'onShowDisplayMessage',
14
+ 'onProcessAlreadyRunning',
15
+ 'onTransactionCancelled'
16
16
  ];
17
17
  //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/emvPaymentProvider/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACvB,SAAS;IACT,eAAe;IACf,mBAAmB;IACnB,wBAAwB;IACxB,4BAA4B;IAC5B,0BAA0B;IAC1B,wBAAwB;IACxB,0BAA0B;IAC1B,sBAAsB;IACtB,yBAAyB;IACzB,wBAAwB;CAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { EMVPaymentContextType } from './types';
2
+ export declare function useEMVPayment(): EMVPaymentContextType;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEMVPayment = void 0;
4
+ // useEMVPayment.ts
5
+ var react_1 = require("react");
6
+ var EMVPaymentProvider_1 = require("./EMVPaymentProvider");
7
+ function useEMVPayment() {
8
+ var ctx = (0, react_1.useContext)(EMVPaymentProvider_1.EMVPaymentContext);
9
+ if (!ctx) {
10
+ throw new Error('useEMVPayment must be used inside EMVPaymentProvider');
11
+ }
12
+ return ctx;
13
+ }
14
+ exports.useEMVPayment = useEMVPayment;
15
+ //# sourceMappingURL=useEMVPayment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEMVPayment.js","sourceRoot":"","sources":["../../src/emvPaymentProvider/useEMVPayment.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,+BAAmC;AAEnC,2DAAyD;AAEzD,SAAgB,aAAa;IAC3B,IAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,sCAAiB,CAAC,CAAC;IAE1C,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CACb,sDAAsD,CACvD,CAAC;KACH;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAVD,sCAUC"}
@@ -1,6 +1,3 @@
1
1
  import React from 'react';
2
- import { EMVConfig } from '../types';
3
- declare const EMVPaymentScreenExample: React.FC<{
4
- config: EMVConfig;
5
- }>;
2
+ declare const EMVPaymentScreenExample: () => React.JSX.Element;
6
3
  export default EMVPaymentScreenExample;
@@ -1,53 +1,162 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
- var react_1 = __importDefault(require("react"));
29
+ var react_1 = __importStar(require("react"));
7
30
  var react_native_1 = require("react-native");
8
- var useEMVPayment_1 = require("../useEMVPayment");
9
- var PaymentProvider_1 = require("../PaymentProvider");
31
+ var EMVSettingsScreen_1 = __importDefault(require("./EMVSettingsScreen"));
32
+ var ExternalSystemsScreen_1 = __importDefault(require("./ExternalSystemsScreen"));
33
+ var USBDeviceContext_1 = require("../usb/USBDeviceContext");
34
+ var EMVPaymentProvider_1 = require("../emvPaymentProvider/EMVPaymentProvider");
35
+ var useEMVPayment_1 = require("../emvPaymentProvider/useEMVPayment");
10
36
  var TickIcon = function () { return (react_1.default.createElement(react_native_1.Text, { style: { color: 'green', fontSize: 18, marginRight: 6 } }, "\u2714\uFE0F")); };
37
+ var SettingsIcon = function (_a) {
38
+ var onPress = _a.onPress;
39
+ return (react_1.default.createElement(react_native_1.TouchableOpacity, { onPress: onPress },
40
+ react_1.default.createElement(react_native_1.Text, { style: { color: 'grey', fontSize: 26, padding: 6 } }, "\uD83D\uDEE0\uFE0F")));
41
+ };
42
+ var ExternalSystemIcon = function (_a) {
43
+ var onPress = _a.onPress;
44
+ return (react_1.default.createElement(react_native_1.TouchableOpacity, { onPress: onPress },
45
+ react_1.default.createElement(react_native_1.Text, { style: { color: 'grey', fontSize: 26, padding: 6 } }, "\u2699\uFE0F")));
46
+ };
11
47
  var CrossIcon = function () { return (react_1.default.createElement(react_native_1.Text, { style: { color: 'red', fontSize: 18, marginRight: 6 } }, "\u274C")); };
12
- var EMVPaymentScreenExample = function (_a) {
13
- var config = _a.config;
14
- return (react_1.default.createElement(PaymentProvider_1.PaymentProvider, { config: config },
15
- react_1.default.createElement(ExampleContent, null)));
48
+ var EMVPaymentScreenExample = function () {
49
+ var _a = (0, react_1.useState)(null), config = _a[0], setConfig = _a[1];
50
+ var _b = (0, react_1.useState)(false), showSettingsScreen = _b[0], setShowSettingsScreen = _b[1];
51
+ var _c = (0, react_1.useState)(false), showExternalSystemScreen = _c[0], setShowExternalSystemScreen = _c[1];
52
+ var toggleSettingsScreen = function () {
53
+ setShowSettingsScreen(function (prev) { return !prev; });
54
+ };
55
+ var toggleExternalSystemScreen = function () {
56
+ setShowExternalSystemScreen(function (prev) { return !prev; });
57
+ };
58
+ var handleApplySetting = function (emvConfig) {
59
+ setConfig(emvConfig);
60
+ toggleSettingsScreen();
61
+ };
62
+ var renderScreen = function () {
63
+ if (showExternalSystemScreen)
64
+ return (react_1.default.createElement(ExternalSystemsScreen_1.default, { config: config, onBackPress: toggleExternalSystemScreen }));
65
+ if (showSettingsScreen)
66
+ return (react_1.default.createElement(EMVSettingsScreen_1.default, { data: config, onConfigUpdate: handleApplySetting }));
67
+ return (react_1.default.createElement(ExampleContent, { onPressSettings: toggleSettingsScreen, onPressExternalSystem: toggleExternalSystemScreen }));
68
+ };
69
+ return (react_1.default.createElement(USBDeviceContext_1.USBDeviceProvider, null,
70
+ react_1.default.createElement(EMVPaymentProvider_1.EMVPaymentProvider, null, renderScreen())));
16
71
  };
17
- var ExampleContent = function () {
18
- var _a = (0, useEMVPayment_1.useEMVPayment)(), logs = _a.logs, isDeviceConnected = _a.isDeviceConnected, loading = _a.loading, handleCardPayment = _a.handleCardPayment, handleInHousePayment = _a.handleInHousePayment, runRecurringTransaction = _a.runRecurringTransaction, replaceCardInRecurring = _a.replaceCardInRecurring, setupConfig = _a.setupConfig, clearAllTransactions = _a.clearAllTransactions, cancelOperation = _a.cancelOperation, getClientVersion = _a.getClientVersion;
72
+ var ExampleContent = function (_a) {
73
+ var onPressExternalSystem = _a.onPressExternalSystem, onPressSettings = _a.onPressSettings;
74
+ var _b = (0, react_1.useState)(false), infoVisible = _b[0], setInfoVisible = _b[1];
75
+ var _c = (0, useEMVPayment_1.useEMVPayment)(), logs = _c.logs, isConfigured = _c.isConfigured, creditCardSale = _c.creditCardSale, prepaidCardRead = _c.prepaidCardRead, creditCardRecurringSale = _c.creditCardRecurringSale, zeroAuthTransaction = _c.zeroAuthTransaction, cancelOperation = _c.cancelOperation, getDeviceDetails = _c.getDeviceDetails, isTransactionCurrentlyRunning = _c.isTransactionCurrentlyRunning, displayMessage = _c.displayMessage;
76
+ var showAlertIfNotConfigured = function () {
77
+ if (isConfigured)
78
+ return false;
79
+ else
80
+ setInfoVisible(true);
81
+ };
19
82
  return (react_1.default.createElement(react_native_1.View, { style: styles.container },
20
83
  react_1.default.createElement(react_native_1.View, { style: styles.statusRow },
21
- isDeviceConnected ? react_1.default.createElement(TickIcon, null) : react_1.default.createElement(CrossIcon, null),
22
- react_1.default.createElement(react_native_1.Text, { style: [styles.statusLabel, { color: isDeviceConnected ? 'green' : 'red' }] }, isDeviceConnected ? 'Connected' : 'Not Connected')),
23
- react_1.default.createElement(react_native_1.Text, { style: styles.title }, "EMV Payment Demo"),
24
- react_1.default.createElement(react_native_1.View, { style: styles.buttonRow },
25
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, !isDeviceConnected ? styles.ctaButtonEnabled : styles.ctaButtonDisabled], onPress: setupConfig, disabled: isDeviceConnected || loading },
26
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, isDeviceConnected ? 'Configuration Ready' : 'Setup Configuration')),
27
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: function () { return handleCardPayment('10.00'); }, disabled: loading || !isDeviceConnected },
28
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Pay via Credit Card")),
29
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: handleInHousePayment, disabled: loading || !isDeviceConnected },
30
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Pay via In-house"))),
84
+ isConfigured ? react_1.default.createElement(TickIcon, null) : react_1.default.createElement(CrossIcon, null),
85
+ react_1.default.createElement(react_native_1.Text, { style: [
86
+ styles.statusLabel,
87
+ { color: isConfigured ? 'green' : 'red' },
88
+ ] }, isConfigured ? 'Connected' : 'Not Connected')),
89
+ react_1.default.createElement(react_native_1.View, { style: styles.titleRow },
90
+ react_1.default.createElement(ExternalSystemIcon, { onPress: function () { return onPressExternalSystem(); } }),
91
+ react_1.default.createElement(react_native_1.Text, { style: styles.title }, "EMV Payment Demo"),
92
+ react_1.default.createElement(SettingsIcon, { onPress: function () { return onPressSettings(); } })),
31
93
  react_1.default.createElement(react_native_1.View, { style: styles.buttonRow },
32
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: function () { return runRecurringTransaction('1.50'); }, disabled: loading || !isDeviceConnected },
33
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Setup Recurring")),
34
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, loading ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: clearAllTransactions, disabled: loading },
35
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Clear All"))),
94
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [
95
+ styles.ctaButton,
96
+ isTransactionCurrentlyRunning
97
+ ? styles.ctaButtonDisabled
98
+ : styles.ctaButtonEnabled,
99
+ ], onPress: function () {
100
+ if (!showAlertIfNotConfigured())
101
+ creditCardSale('10.00');
102
+ }, disabled: isTransactionCurrentlyRunning },
103
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "CC Sale")),
104
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [
105
+ styles.ctaButton,
106
+ isTransactionCurrentlyRunning
107
+ ? styles.ctaButtonDisabled
108
+ : styles.ctaButtonEnabled,
109
+ ], onPress: function () {
110
+ if (!showAlertIfNotConfigured())
111
+ creditCardRecurringSale('1.50');
112
+ }, disabled: isTransactionCurrentlyRunning },
113
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "CC Sale (Recurring)")),
114
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [
115
+ styles.ctaButton,
116
+ isTransactionCurrentlyRunning
117
+ ? styles.ctaButtonDisabled
118
+ : styles.ctaButtonEnabled,
119
+ ], onPress: function () {
120
+ if (!showAlertIfNotConfigured())
121
+ prepaidCardRead();
122
+ }, disabled: isTransactionCurrentlyRunning },
123
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Read Prepaid Card"))),
36
124
  react_1.default.createElement(react_native_1.View, { style: styles.buttonRow },
37
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: replaceCardInRecurring, disabled: loading || !isDeviceConnected },
38
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Replace Card in Recurring")),
39
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: getClientVersion, disabled: loading || !isDeviceConnected },
40
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Get Client Version")),
41
- react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: function () { }, disabled: loading || !isDeviceConnected },
42
- react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Refund"))),
43
- react_1.default.createElement(react_native_1.Modal, { visible: loading, transparent: true, animationType: "fade", onRequestClose: cancelOperation },
125
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [
126
+ styles.ctaButton,
127
+ isTransactionCurrentlyRunning
128
+ ? styles.ctaButtonDisabled
129
+ : styles.ctaButtonEnabled,
130
+ ], onPress: function () {
131
+ if (!showAlertIfNotConfigured())
132
+ zeroAuthTransaction();
133
+ }, disabled: isTransactionCurrentlyRunning },
134
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "CC $0 Auth")),
135
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [
136
+ styles.ctaButton,
137
+ isTransactionCurrentlyRunning
138
+ ? styles.ctaButtonDisabled
139
+ : styles.ctaButtonEnabled,
140
+ ], onPress: function () {
141
+ getDeviceDetails();
142
+ }, disabled: isTransactionCurrentlyRunning },
143
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Get Client Version"))),
144
+ react_1.default.createElement(react_native_1.Modal, { visible: isTransactionCurrentlyRunning, transparent: true, animationType: "fade", onRequestClose: cancelOperation },
44
145
  react_1.default.createElement(react_native_1.View, { style: styles.modalOverlay },
45
146
  react_1.default.createElement(react_native_1.View, { style: styles.modalContent },
46
147
  react_1.default.createElement(react_native_1.ActivityIndicator, { size: "large", color: "#007AFF" }),
47
- react_1.default.createElement(react_native_1.Text, { style: styles.modalText }, "Processing..."),
148
+ react_1.default.createElement(react_native_1.Text, { style: styles.modalText },
149
+ "Processing...\\n",
150
+ displayMessage),
48
151
  react_1.default.createElement(react_native_1.TouchableOpacity, { style: styles.cancelButton, onPress: cancelOperation },
49
152
  react_1.default.createElement(react_native_1.Text, { style: styles.cancelButtonText }, "Cancel"))))),
50
- react_1.default.createElement(react_native_1.Text, { style: styles.logTitle }, "Event Log"),
153
+ react_1.default.createElement(react_native_1.Text, { style: styles.logTitle }, "Alert"),
154
+ react_1.default.createElement(react_native_1.Modal, { visible: infoVisible, transparent: true, animationType: "fade", onRequestClose: function () { return setInfoVisible(false); } },
155
+ react_1.default.createElement(react_native_1.Pressable, { style: styles.modalBackground, onPress: function () { return setInfoVisible(false); } },
156
+ react_1.default.createElement(react_native_1.Pressable, { style: styles.modalContainer },
157
+ react_1.default.createElement(react_native_1.Text, { style: styles.modalText }, "Go to Settings and Configure IDTECH Device First"),
158
+ react_1.default.createElement(react_native_1.Pressable, { style: styles.closeButton, onPress: function () { return setInfoVisible(false); } },
159
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Close"))))),
51
160
  react_1.default.createElement(react_native_1.ScrollView, { style: styles.logArea, contentContainerStyle: styles.logContent }, logs.length === 0 ? (react_1.default.createElement(react_native_1.Text, { style: styles.logEmpty }, "No events yet.")) : (logs.map(function (log, idx) { return (react_1.default.createElement(react_native_1.View, { key: log.timestamp + idx, style: styles.logItem },
52
161
  react_1.default.createElement(react_native_1.Text, { style: styles.logType }, log.type),
53
162
  react_1.default.createElement(react_native_1.Text, { style: styles.logPayload }, typeof log.payload === 'object'
@@ -61,6 +170,12 @@ var styles = react_native_1.StyleSheet.create({
61
170
  padding: 16,
62
171
  backgroundColor: '#FAFAFA',
63
172
  },
173
+ titleRow: {
174
+ flexDirection: 'row',
175
+ alignItems: 'center',
176
+ justifyContent: 'space-between',
177
+ marginVertical: 10,
178
+ },
64
179
  statusRow: {
65
180
  flexDirection: 'row',
66
181
  alignItems: 'center',
@@ -93,12 +208,23 @@ var styles = react_native_1.StyleSheet.create({
93
208
  shadowRadius: 4,
94
209
  elevation: 5,
95
210
  },
211
+ modalBackground: {
212
+ flex: 1,
213
+ backgroundColor: 'rgba(0,0,0,0.5)',
214
+ justifyContent: 'center',
215
+ alignItems: 'center',
216
+ },
217
+ modalContainer: {
218
+ backgroundColor: '#FFFFFF',
219
+ padding: 20,
220
+ borderRadius: 8,
221
+ width: '80%',
222
+ alignItems: 'center',
223
+ },
96
224
  modalText: {
97
- fontSize: 16,
98
- fontWeight: '600',
99
- color: '#333',
100
- marginTop: 16,
101
- marginBottom: 20,
225
+ fontSize: 15,
226
+ color: '#111827',
227
+ textAlign: 'center',
102
228
  },
103
229
  cancelButton: {
104
230
  backgroundColor: '#FF3B30',
@@ -116,8 +242,8 @@ var styles = react_native_1.StyleSheet.create({
116
242
  title: {
117
243
  fontSize: 22,
118
244
  fontWeight: 'bold',
119
- marginBottom: 18,
120
245
  textAlign: 'center',
246
+ alignSelf: 'center',
121
247
  },
122
248
  buttonRow: {
123
249
  flexDirection: 'row',
@@ -187,6 +313,13 @@ var styles = react_native_1.StyleSheet.create({
187
313
  marginTop: 2,
188
314
  textAlign: 'right',
189
315
  },
316
+ closeButton: {
317
+ marginTop: 12,
318
+ backgroundColor: '#2563EB',
319
+ paddingVertical: 8,
320
+ paddingHorizontal: 14,
321
+ borderRadius: 6,
322
+ }
190
323
  });
191
324
  exports.default = EMVPaymentScreenExample;
192
325
  //# sourceMappingURL=EMVPaymentScreen.js.map