quivio-transaction-processor 1.22.2-beta → 1.22.4-beta

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.
@@ -39,6 +39,8 @@ var types_1 = require("./types");
39
39
  var useUSBDevice_1 = require("../usb/useUSBDevice");
40
40
  var EMVPaymentContext = (0, react_1.createContext)(undefined);
41
41
  exports.EMVPaymentContext = EMVPaymentContext;
42
+ var DsiEMVManagerBridge = react_native_1.NativeModules.DsiEMVManagerBridge;
43
+ var emvEmitter = new react_native_1.NativeEventEmitter(DsiEMVManagerBridge);
42
44
  var EMVPaymentProvider = function (_a) {
43
45
  var children = _a.children;
44
46
  var TRANSACTION_RESPONSE_EVENTS = [
@@ -49,9 +51,6 @@ var EMVPaymentProvider = function (_a) {
49
51
  'onReplaceCardCompleted',
50
52
  'onTransactionCancelled',
51
53
  ];
52
- var DsiEMVManagerBridge = react_native_1.NativeModules.DsiEMVManagerBridge;
53
- var eventEmitterRef = (0, react_1.useRef)(null);
54
- var listenersRef = (0, react_1.useRef)({}); // Now it's an array of listeners for each event
55
54
  // Device Connected State
56
55
  var isDeviceConnected = (0, useUSBDevice_1.useUSBDevice)().isDeviceConnected;
57
56
  // Show Display Message Cache
@@ -66,6 +65,8 @@ var EMVPaymentProvider = function (_a) {
66
65
  var _f = (0, react_1.useState)(false), isConfigurationInProgress = _f[0], setConfigurationInProgress = _f[1];
67
66
  // Logs DataStructure
68
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());
69
70
  // Ref to maintain timeout during configuration
70
71
  // Because after a successfull EMVParamDownload
71
72
  // Device reboots which leads to USB disconnection
@@ -109,50 +110,37 @@ var EMVPaymentProvider = function (_a) {
109
110
  };
110
111
  // Native to Provider EMV event listening
111
112
  (0, react_1.useEffect)(function () {
112
- if (!DsiEMVManagerBridge) {
113
- console.error('Native module DsiEMVManagerBridge not found');
114
- return;
115
- }
116
- var emitter = eventEmitterRef.current ||
117
- new react_native_1.NativeEventEmitter(react_native_1.Platform.OS === 'android' ? DsiEMVManagerBridge : undefined);
118
- eventEmitterRef.current = emitter;
119
- types_1.EVENT_NAMES.forEach(function (event) {
120
- var listener = emitter.addListener(event, function (payload) {
121
- console.log("React Native received event: ".concat(event), payload);
122
- pushLog(event, payload);
123
- if (event === 'onShowDisplayMessage') {
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') {
124
117
  setDisplayMessage(payload);
125
118
  }
126
- if (event === 'onConfigCompleted') {
119
+ if (eventName === 'onConfigCompleted') {
127
120
  setConfigurationInProgress(false);
128
121
  setCancellationRunning(false);
129
122
  setIsConfigured(true);
130
123
  }
131
- if (event === 'onConfigError') {
124
+ if (eventName === 'onConfigError') {
132
125
  setConfigurationInProgress(false);
133
126
  setCancellationRunning(false);
134
127
  setIsConfigured(false);
135
128
  }
136
- if (event === 'onProcessAlreadyRunning') {
129
+ if (eventName === 'onProcessAlreadyRunning') {
137
130
  setCancellationRunning(false);
138
131
  setTransactionCurrentlyRunning(true);
139
132
  }
140
- if (TRANSACTION_RESPONSE_EVENTS.includes(event)) {
133
+ if (TRANSACTION_RESPONSE_EVENTS.includes(eventName)) {
141
134
  setTransactionCurrentlyRunning(false);
142
135
  setCancellationRunning(false);
143
136
  }
144
- // Store the listener in the ref
145
- if (!listenersRef.current[event]) {
146
- listenersRef.current[event] = [];
147
- }
148
- listenersRef.current[event].push(listener);
137
+ var callbacks = subscriptionsRef.current.get(eventName);
138
+ callbacks === null || callbacks === void 0 ? void 0 : callbacks.forEach(function (cb) { return cb(payload); });
149
139
  });
150
140
  });
151
141
  return function () {
152
- Object.values(listenersRef.current).forEach(function (eventListeners) {
153
- eventListeners.forEach(function (listener) { return listener.remove(); });
154
- });
155
- listenersRef.current = {};
142
+ nativeSubs.forEach(function (s) { return s.remove(); });
143
+ subscriptionsRef.current.clear();
156
144
  };
157
145
  }, []);
158
146
  // Exposed method to run EMV configuration
@@ -220,32 +208,21 @@ var EMVPaymentProvider = function (_a) {
220
208
  };
221
209
  // Exposed method to remove all attached listener
222
210
  var removeAllListeners = function () {
211
+ subscriptionsRef.current.clear();
223
212
  DsiEMVManagerBridge.clearTransactionListener();
224
- listenersRef.current = {};
225
213
  };
226
- // Event subscription functions
227
- var subscribeToEvent = (0, react_1.useCallback)(function (eventName, callback) {
228
- if (eventEmitterRef.current) {
229
- var listener = eventEmitterRef.current.addListener(eventName, callback);
230
- // Store listener in the ref object
231
- if (!listenersRef.current[eventName]) {
232
- listenersRef.current[eventName] = [];
233
- }
234
- listenersRef.current[eventName].push(listener);
235
- return listener; // Return listener for potential removal later
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());
236
218
  }
237
- }, []);
238
- var unsubscribeFromEvent = (0, react_1.useCallback)(function (eventName, callback) {
239
- var listeners = listenersRef.current[eventName];
240
- if (listeners) {
241
- var listener_1 = listeners.find(function (listener) { return listener.listener === callback; });
242
- if (listener_1) {
243
- listener_1.remove();
244
- // Remove the listener from the stored list
245
- listenersRef.current[eventName] = listeners.filter(function (l) { return l !== listener_1; });
246
- }
247
- }
248
- }, []);
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
+ };
249
226
  // EVENTS Memoization
250
227
  var EVENTS = (0, react_1.useMemo)(function () {
251
228
  return types_1.EVENT_NAMES.reduce(function (acc, e) {
@@ -1 +1 @@
1
- {"version":3,"file":"EMVPaymentProvider.js","sourceRoot":"","sources":["../../src/emvPaymentProvider/EMVPaymentProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EMVPaymentProvider.js","sourceRoot":"","sources":["../../src/emvPaymentProvider/EMVPaymentProvider.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,4 +4,3 @@ import { USBDeviceProvider } from './usb/USBDeviceContext';
4
4
  import { useUSBDevice } from './usb/useUSBDevice';
5
5
  export type { EMVEventName, CallbackLog, EMVPaymentHook, EMVConfig } from './emvPaymentProvider/types';
6
6
  export { EMVPaymentProvider, useEMVPayment, USBDeviceProvider, useUSBDevice };
7
- export default EMVPaymentProvider;
package/dist/index.js CHANGED
@@ -9,5 +9,4 @@ var USBDeviceContext_1 = require("./usb/USBDeviceContext");
9
9
  Object.defineProperty(exports, "USBDeviceProvider", { enumerable: true, get: function () { return USBDeviceContext_1.USBDeviceProvider; } });
10
10
  var useUSBDevice_1 = require("./usb/useUSBDevice");
11
11
  Object.defineProperty(exports, "useUSBDevice", { enumerable: true, get: function () { return useUSBDevice_1.useUSBDevice; } });
12
- exports.default = EMVPaymentProvider_1.EMVPaymentProvider;
13
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8EAA6E;AASzE,mGATK,uCAAkB,OASL;AARtB,oEAAmE;AAS/D,8FATK,6BAAa,OASL;AAPjB,2DAA2D;AAQvD,kGARK,oCAAiB,OAQL;AAPrB,mDAAkD;AAQ9C,6FARK,2BAAY,OAQL;AAGhB,kBAAe,uCAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8EAA6E;AASzE,mGATK,uCAAkB,OASL;AARtB,oEAAmE;AAS/D,8FATK,6BAAa,OASL;AAPjB,2DAA2D;AAQvD,kGARK,oCAAiB,OAQL;AAPrB,mDAAkD;AAQ9C,6FARK,2BAAY,OAQL"}
@@ -3,7 +3,7 @@
3
3
  xmlns:tools="http://schemas.android.com/tools">
4
4
 
5
5
  <!-- optional: advertise USB host feature but don't force Play Store filtering -->
6
- <uses-feature android:name="android.hardware.usb.host" android:required="false" />
6
+ <uses-feature android:name="android.hardware.usb.host"/>
7
7
 
8
8
  <!-- any permissions your receiver/native code needs -->
9
9
  <uses-permission android:name="android.permission.INTERNET" />
@@ -13,13 +13,16 @@
13
13
  <application>
14
14
  <!-- BroadcastReceiver that listens for USB attach/detach -->
15
15
  <receiver
16
- android:name=".usb.UsbDeviceReceiver"
16
+ android:name="com.rohan.emvcardreaderlib.usb.UsbDeviceReceiver"
17
17
  android:exported="true"
18
18
  android:enabled="true">
19
19
  <intent-filter>
20
20
  <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
21
21
  <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
22
22
  </intent-filter>
23
+ <meta-data
24
+ android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
25
+ android:resource="@xml/device_filter" />
23
26
  </receiver>
24
27
  </application>
25
28
  </manifest>
@@ -40,15 +40,13 @@ enum class ErrorCode(val code: String) {
40
40
  data class SaleTransactionResponse(
41
41
  // CmdResponse section
42
42
  val responseOrigin: String,
43
-
44
- val expiryMonth: String,
45
-
46
- val expiryYear: String,
47
43
  val dsixReturnCode: String,
48
44
  val cmdStatus: String,
49
45
  val textResponse: String,
50
46
 
51
47
  // TranResponse section
48
+ val expiryMonth: String,
49
+ val expiryYear: String,
52
50
  val merchantID: String,
53
51
  val payAPIId: String,
54
52
  val acctNo: String,
@@ -129,9 +129,9 @@ class DsiEMVRequestBuilder(val config: ConfigFactory) {
129
129
  <TranCode>${TransType.EMVZeroAuth.name}</TranCode>
130
130
  <ProcessorToken>TokenRequested</ProcessorToken>
131
131
  <SecureDevice>${secureDevice}</SecureDevice>
132
+ <ReturnClearExpDate>Allow</ReturnClearExpDate>
132
133
  <InvoiceNo>${createUniqueInvoiceNo()}</InvoiceNo>
133
134
  <RefNo>${createUniqueInvoiceNo()}</RefNo>
134
- <ReturnClearExpDate>Allow</ReturnClearExpDate>
135
135
  <Amount>
136
136
  <Purchase>0.00</Purchase>
137
137
  </Amount>
@@ -5,10 +5,13 @@ import android.content.Context
5
5
  import android.content.Intent
6
6
  import android.hardware.usb.UsbDevice
7
7
  import android.hardware.usb.UsbManager
8
+ import android.util.Log
9
+ import com.rohan.emvcardreaderlib.PRINT_TAG
8
10
 
9
11
  class UsbDeviceReceiver : BroadcastReceiver() {
10
12
 
11
13
  override fun onReceive(context: Context, intent: Intent) {
14
+ Log.d(PRINT_TAG, "Receiver triggered: ${intent.action}")
12
15
  val device: UsbDevice? =
13
16
  intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)
14
17
 
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <usb-device vendor-id="2765" product-id="18000" />
4
+ </resources>
@@ -298,7 +298,7 @@ class EMVPaymentManagerModule(private val reactContext: ReactApplicationContext)
298
298
  putString("date", zeroAuthData.date)
299
299
  putString("time", zeroAuthData.time)
300
300
  putString("applicationLabel", zeroAuthData.applicationLabel)
301
-
301
+
302
302
  // EMV specific fields
303
303
  putString("aid", zeroAuthData.aid)
304
304
  putString("tvr", zeroAuthData.tvr)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quivio-transaction-processor",
3
- "version": "1.22.2-beta",
3
+ "version": "1.22.4-beta",
4
4
  "description": "React Native hook for Card payment integration with DataCap",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,12 +1,11 @@
1
1
  import React, {
2
2
  createContext,
3
- useCallback,
4
3
  useEffect,
5
4
  useMemo,
6
5
  useRef,
7
6
  useState,
8
7
  } from 'react';
9
- import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
8
+ import { NativeEventEmitter, NativeModules } from 'react-native';
10
9
  import {
11
10
  EMVPaymentContextType,
12
11
  EMVEventName,
@@ -20,6 +19,9 @@ const EMVPaymentContext = createContext<EMVPaymentContextType | undefined>(
20
19
  undefined,
21
20
  );
22
21
 
22
+ const { DsiEMVManagerBridge } = NativeModules;
23
+ const emvEmitter = new NativeEventEmitter(DsiEMVManagerBridge);
24
+
23
25
  const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
24
26
  children,
25
27
  }) => {
@@ -31,9 +33,6 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
31
33
  'onReplaceCardCompleted',
32
34
  'onTransactionCancelled',
33
35
  ];
34
- const { DsiEMVManagerBridge } = NativeModules;
35
- const eventEmitterRef = useRef<NativeEventEmitter | null>(null);
36
- const listenersRef = useRef<{ [event: string]: any[] }>({}); // Now it's an array of listeners for each event
37
36
 
38
37
  // Device Connected State
39
38
  const { isDeviceConnected } = useUSBDevice();
@@ -58,6 +57,10 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
58
57
  // Logs DataStructure
59
58
  const [logs, setLogs] = useState<CallbackLog[]>([]);
60
59
 
60
+ // Ref to maintain subscription
61
+ const subscriptionsRef = useRef<
62
+ Map<EMVEventName, Set<(payload: any) => void>>
63
+ >(new Map());
61
64
 
62
65
  // Ref to maintain timeout during configuration
63
66
  // Because after a successfull EMVParamDownload
@@ -111,63 +114,44 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
111
114
 
112
115
  // Native to Provider EMV event listening
113
116
  useEffect(() => {
114
- if (!DsiEMVManagerBridge) {
115
- console.error('Native module DsiEMVManagerBridge not found');
116
- return;
117
- }
118
-
119
- const emitter =
120
- eventEmitterRef.current ||
121
- new NativeEventEmitter(
122
- Platform.OS === 'android' ? DsiEMVManagerBridge : undefined,
123
- );
124
- eventEmitterRef.current = emitter;
125
-
126
- EVENT_NAMES.forEach(event => {
127
- const listener = emitter.addListener(event, (payload: any) => {
128
- console.log(`React Native received event: ${event}`, payload);
117
+ const nativeSubs = EVENT_NAMES.map(eventName =>
118
+ emvEmitter.addListener(eventName, payload => {
119
+ pushLog(eventName, payload);
129
120
 
130
- pushLog(event, payload);
131
-
132
- if (event === 'onShowDisplayMessage') {
121
+ if (eventName === 'onShowDisplayMessage') {
133
122
  setDisplayMessage(payload);
134
123
  }
135
124
 
136
- if (event === 'onConfigCompleted') {
125
+ if (eventName === 'onConfigCompleted') {
137
126
  setConfigurationInProgress(false);
138
127
  setCancellationRunning(false);
139
128
  setIsConfigured(true);
140
129
  }
141
130
 
142
- if (event === 'onConfigError') {
131
+ if (eventName === 'onConfigError') {
143
132
  setConfigurationInProgress(false);
144
133
  setCancellationRunning(false);
145
134
  setIsConfigured(false);
146
135
  }
147
136
 
148
- if (event === 'onProcessAlreadyRunning') {
137
+ if (eventName === 'onProcessAlreadyRunning') {
149
138
  setCancellationRunning(false);
150
139
  setTransactionCurrentlyRunning(true);
151
140
  }
152
141
 
153
- if (TRANSACTION_RESPONSE_EVENTS.includes(event)) {
142
+ if (TRANSACTION_RESPONSE_EVENTS.includes(eventName)) {
154
143
  setTransactionCurrentlyRunning(false);
155
144
  setCancellationRunning(false);
156
145
  }
157
146
 
158
- // Store the listener in the ref
159
- if (!listenersRef.current[event]) {
160
- listenersRef.current[event] = [];
161
- }
162
- listenersRef.current[event].push(listener);
163
- });
164
- });
147
+ const callbacks = subscriptionsRef.current.get(eventName);
148
+ callbacks?.forEach(cb => cb(payload));
149
+ }),
150
+ );
165
151
 
166
152
  return () => {
167
- Object.values(listenersRef.current).forEach(eventListeners => {
168
- eventListeners.forEach(listener => listener.remove());
169
- });
170
- listenersRef.current = {};
153
+ nativeSubs.forEach(s => s.remove());
154
+ subscriptionsRef.current.clear();
171
155
  };
172
156
  }, []);
173
157
 
@@ -249,50 +233,28 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
249
233
 
250
234
  // Exposed method to remove all attached listener
251
235
  const removeAllListeners = () => {
236
+ subscriptionsRef.current.clear();
252
237
  DsiEMVManagerBridge.clearTransactionListener();
253
- listenersRef.current = {};
254
238
  };
255
239
 
256
- // Event subscription functions
257
- const subscribeToEvent = useCallback(
258
- (eventName: string, callback: (payload: any) => void) => {
259
- if (eventEmitterRef.current) {
260
- const listener = eventEmitterRef.current.addListener(
261
- eventName,
262
- callback,
263
- );
264
-
265
- // Store listener in the ref object
266
- if (!listenersRef.current[eventName]) {
267
- listenersRef.current[eventName] = [];
268
- }
269
- listenersRef.current[eventName].push(listener);
270
-
271
- return listener; // Return listener for potential removal later
272
- }
273
- },
274
- [],
275
- );
240
+ // Exposed method to subscribe to an event
241
+ const subscribeToEvent = (
242
+ eventName: EMVEventName,
243
+ callback: (payload: any) => void,
244
+ ) => {
245
+ if (!subscriptionsRef.current.has(eventName)) {
246
+ subscriptionsRef.current.set(eventName, new Set());
247
+ }
248
+ subscriptionsRef.current.get(eventName)!.add(callback);
249
+ };
276
250
 
277
- const unsubscribeFromEvent = useCallback(
278
- (eventName: string, callback: (payload: any) => void) => {
279
- const listeners = listenersRef.current[eventName];
280
- if (listeners) {
281
- const listener = listeners.find(
282
- listener => listener.listener === callback,
283
- );
284
- if (listener) {
285
- listener.remove();
286
-
287
- // Remove the listener from the stored list
288
- listenersRef.current[eventName] = listeners.filter(
289
- l => l !== listener,
290
- );
291
- }
292
- }
293
- },
294
- [],
295
- );
251
+ // Exposed method to unsubscribe Event
252
+ const unsubscribeFromEvent = (
253
+ eventName: EMVEventName,
254
+ callback: (payload: any) => void,
255
+ ) => {
256
+ subscriptionsRef.current.get(eventName)?.delete(callback);
257
+ };
296
258
 
297
259
  // EVENTS Memoization
298
260
  const EVENTS = useMemo(
package/src/index.ts CHANGED
@@ -12,5 +12,3 @@ export {
12
12
  USBDeviceProvider,
13
13
  useUSBDevice
14
14
  };
15
-
16
- export default EMVPaymentProvider;