quivio-transaction-processor 1.22.0-beta → 1.22.2-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,8 +39,6 @@ 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);
44
42
  var EMVPaymentProvider = function (_a) {
45
43
  var children = _a.children;
46
44
  var TRANSACTION_RESPONSE_EVENTS = [
@@ -49,12 +47,15 @@ var EMVPaymentProvider = function (_a) {
49
47
  'onSaleTransactionCompleted',
50
48
  'onRecurringSaleCompleted',
51
49
  'onReplaceCardCompleted',
52
- 'onTransactionCancelled'
50
+ 'onTransactionCancelled',
53
51
  ];
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
54
55
  // Device Connected State
55
56
  var isDeviceConnected = (0, useUSBDevice_1.useUSBDevice)().isDeviceConnected;
56
57
  // Show Display Message Cache
57
- var _b = (0, react_1.useState)(""), displayMessage = _b[0], setDisplayMessage = _b[1];
58
+ var _b = (0, react_1.useState)(''), displayMessage = _b[0], setDisplayMessage = _b[1];
58
59
  // Device Configiured State
59
60
  var _c = (0, react_1.useState)(false), isConfigured = _c[0], setIsConfigured = _c[1];
60
61
  // Transaction In Progress Flag
@@ -65,8 +66,6 @@ var EMVPaymentProvider = function (_a) {
65
66
  var _f = (0, react_1.useState)(false), isConfigurationInProgress = _f[0], setConfigurationInProgress = _f[1];
66
67
  // Logs DataStructure
67
68
  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
69
  // Ref to maintain timeout during configuration
71
70
  // Because after a successfull EMVParamDownload
72
71
  // Device reboots which leads to USB disconnection
@@ -110,37 +109,50 @@ var EMVPaymentProvider = function (_a) {
110
109
  };
111
110
  // Native to Provider EMV event listening
112
111
  (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') {
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') {
117
124
  setDisplayMessage(payload);
118
125
  }
119
- if (eventName === 'onConfigCompleted') {
126
+ if (event === 'onConfigCompleted') {
120
127
  setConfigurationInProgress(false);
121
128
  setCancellationRunning(false);
122
129
  setIsConfigured(true);
123
130
  }
124
- if (eventName === 'onConfigError') {
131
+ if (event === 'onConfigError') {
125
132
  setConfigurationInProgress(false);
126
133
  setCancellationRunning(false);
127
134
  setIsConfigured(false);
128
135
  }
129
- if (eventName === 'onProcessAlreadyRunning') {
136
+ if (event === 'onProcessAlreadyRunning') {
130
137
  setCancellationRunning(false);
131
138
  setTransactionCurrentlyRunning(true);
132
139
  }
133
- if (TRANSACTION_RESPONSE_EVENTS.includes(eventName)) {
140
+ if (TRANSACTION_RESPONSE_EVENTS.includes(event)) {
134
141
  setTransactionCurrentlyRunning(false);
135
142
  setCancellationRunning(false);
136
143
  }
137
- var callbacks = subscriptionsRef.current.get(eventName);
138
- callbacks === null || callbacks === void 0 ? void 0 : callbacks.forEach(function (cb) { return cb(payload); });
144
+ // Store the listener in the ref
145
+ if (!listenersRef.current[event]) {
146
+ listenersRef.current[event] = [];
147
+ }
148
+ listenersRef.current[event].push(listener);
139
149
  });
140
150
  });
141
151
  return function () {
142
- nativeSubs.forEach(function (s) { return s.remove(); });
143
- subscriptionsRef.current.clear();
152
+ Object.values(listenersRef.current).forEach(function (eventListeners) {
153
+ eventListeners.forEach(function (listener) { return listener.remove(); });
154
+ });
155
+ listenersRef.current = {};
144
156
  };
145
157
  }, []);
146
158
  // Exposed method to run EMV configuration
@@ -208,21 +220,32 @@ var EMVPaymentProvider = function (_a) {
208
220
  };
209
221
  // Exposed method to remove all attached listener
210
222
  var removeAllListeners = function () {
211
- subscriptionsRef.current.clear();
212
223
  DsiEMVManagerBridge.clearTransactionListener();
224
+ listenersRef.current = {};
213
225
  };
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());
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
218
236
  }
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
- };
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
+ }, []);
226
249
  // EVENTS Memoization
227
250
  var EVENTS = (0, react_1.useMemo)(function () {
228
251
  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,3 +4,4 @@ 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,4 +9,5 @@ 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;
12
13
  //# 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"}
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,4 +1,25 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
- <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ xmlns:tools="http://schemas.android.com/tools">
3
4
 
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" />
7
+
8
+ <!-- any permissions your receiver/native code needs -->
9
+ <uses-permission android:name="android.permission.INTERNET" />
10
+ <uses-permission android:name="com.pax.permission.RECV_BOOT_COMPLETED" />
11
+ <uses-permission android:name="com.pax.permission.PAX_START_ACTIVITIES_FROM_BACKGROUND" />
12
+
13
+ <application>
14
+ <!-- BroadcastReceiver that listens for USB attach/detach -->
15
+ <receiver
16
+ android:name=".usb.UsbDeviceReceiver"
17
+ android:exported="true"
18
+ android:enabled="true">
19
+ <intent-filter>
20
+ <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
21
+ <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
22
+ </intent-filter>
23
+ </receiver>
24
+ </application>
4
25
  </manifest>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quivio-transaction-processor",
3
- "version": "1.22.0-beta",
3
+ "version": "1.22.2-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,11 +1,12 @@
1
1
  import React, {
2
2
  createContext,
3
+ useCallback,
3
4
  useEffect,
4
5
  useMemo,
5
6
  useRef,
6
7
  useState,
7
8
  } from 'react';
8
- import { NativeEventEmitter, NativeModules } from 'react-native';
9
+ import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
9
10
  import {
10
11
  EMVPaymentContextType,
11
12
  EMVEventName,
@@ -19,9 +20,6 @@ const EMVPaymentContext = createContext<EMVPaymentContextType | undefined>(
19
20
  undefined,
20
21
  );
21
22
 
22
- const { DsiEMVManagerBridge } = NativeModules;
23
- const emvEmitter = new NativeEventEmitter(DsiEMVManagerBridge);
24
-
25
23
  const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
26
24
  children,
27
25
  }) => {
@@ -31,14 +29,17 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
31
29
  'onSaleTransactionCompleted',
32
30
  'onRecurringSaleCompleted',
33
31
  'onReplaceCardCompleted',
34
- 'onTransactionCancelled'
32
+ 'onTransactionCancelled',
35
33
  ];
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
36
37
 
37
38
  // Device Connected State
38
39
  const { isDeviceConnected } = useUSBDevice();
39
40
 
40
41
  // Show Display Message Cache
41
- const [ displayMessage, setDisplayMessage ] = useState("")
42
+ const [displayMessage, setDisplayMessage] = useState('');
42
43
 
43
44
  // Device Configiured State
44
45
  const [isConfigured, setIsConfigured] = useState(false);
@@ -57,10 +58,6 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
57
58
  // Logs DataStructure
58
59
  const [logs, setLogs] = useState<CallbackLog[]>([]);
59
60
 
60
- // Ref to maintain subscription
61
- const subscriptionsRef = useRef<
62
- Map<EMVEventName, Set<(payload: any) => void>>
63
- >(new Map());
64
61
 
65
62
  // Ref to maintain timeout during configuration
66
63
  // Because after a successfull EMVParamDownload
@@ -114,44 +111,63 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
114
111
 
115
112
  // Native to Provider EMV event listening
116
113
  useEffect(() => {
117
- const nativeSubs = EVENT_NAMES.map(eventName =>
118
- emvEmitter.addListener(eventName, payload => {
119
- pushLog(eventName, payload);
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);
120
129
 
121
- if(eventName === 'onShowDisplayMessage'){
122
- setDisplayMessage(payload)
130
+ pushLog(event, payload);
131
+
132
+ if (event === 'onShowDisplayMessage') {
133
+ setDisplayMessage(payload);
123
134
  }
124
135
 
125
- if (eventName === 'onConfigCompleted') {
136
+ if (event === 'onConfigCompleted') {
126
137
  setConfigurationInProgress(false);
127
138
  setCancellationRunning(false);
128
139
  setIsConfigured(true);
129
140
  }
130
141
 
131
- if (eventName === 'onConfigError') {
142
+ if (event === 'onConfigError') {
132
143
  setConfigurationInProgress(false);
133
144
  setCancellationRunning(false);
134
145
  setIsConfigured(false);
135
146
  }
136
147
 
137
- if (eventName === 'onProcessAlreadyRunning') {
148
+ if (event === 'onProcessAlreadyRunning') {
138
149
  setCancellationRunning(false);
139
150
  setTransactionCurrentlyRunning(true);
140
151
  }
141
152
 
142
- if (TRANSACTION_RESPONSE_EVENTS.includes(eventName)) {
153
+ if (TRANSACTION_RESPONSE_EVENTS.includes(event)) {
143
154
  setTransactionCurrentlyRunning(false);
144
155
  setCancellationRunning(false);
145
156
  }
146
157
 
147
- const callbacks = subscriptionsRef.current.get(eventName);
148
- callbacks?.forEach(cb => cb(payload));
149
- }),
150
- );
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
+ });
151
165
 
152
166
  return () => {
153
- nativeSubs.forEach(s => s.remove());
154
- subscriptionsRef.current.clear();
167
+ Object.values(listenersRef.current).forEach(eventListeners => {
168
+ eventListeners.forEach(listener => listener.remove());
169
+ });
170
+ listenersRef.current = {};
155
171
  };
156
172
  }, []);
157
173
 
@@ -233,28 +249,50 @@ const EMVPaymentProvider: React.FC<{ children: React.ReactNode }> = ({
233
249
 
234
250
  // Exposed method to remove all attached listener
235
251
  const removeAllListeners = () => {
236
- subscriptionsRef.current.clear();
237
252
  DsiEMVManagerBridge.clearTransactionListener();
253
+ listenersRef.current = {};
238
254
  };
239
255
 
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
- };
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);
250
270
 
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
- };
271
+ return listener; // Return listener for potential removal later
272
+ }
273
+ },
274
+ [],
275
+ );
276
+
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
+ );
258
296
 
259
297
  // EVENTS Memoization
260
298
  const EVENTS = useMemo(
package/src/index.ts CHANGED
@@ -12,3 +12,5 @@ export {
12
12
  USBDeviceProvider,
13
13
  useUSBDevice
14
14
  };
15
+
16
+ export default EMVPaymentProvider;