quivio-transaction-processor 1.0.1

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 (58) hide show
  1. package/README.md +292 -0
  2. package/dist/example/EMVPaymentScreen.d.ts +3 -0
  3. package/dist/example/EMVPaymentScreen.js +197 -0
  4. package/dist/example/EMVPaymentScreen.js.map +1 -0
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.js +12 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/types.d.ts +32 -0
  9. package/dist/types.js +14 -0
  10. package/dist/types.js.map +1 -0
  11. package/dist/useEMVPayment.d.ts +2 -0
  12. package/dist/useEMVPayment.js +296 -0
  13. package/dist/useEMVPayment.js.map +1 -0
  14. package/libs/emvCardReaderLib/build.gradle.kts +40 -0
  15. package/libs/emvCardReaderLib/consumer-rules.pro +0 -0
  16. package/libs/emvCardReaderLib/proguard-rules.pro +21 -0
  17. package/libs/emvCardReaderLib/src/androidTest/java/com/rohan/emvcardreaderlib/ExampleInstrumentedTest.kt +24 -0
  18. package/libs/emvCardReaderLib/src/main/AndroidManifest.xml +4 -0
  19. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/BridgeCommunicator.kt +12 -0
  20. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/CommonTag.kt +3 -0
  21. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/ConfigFactory.kt +9 -0
  22. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/EMVTransactionCommunicator.kt +22 -0
  23. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/POSTransactionExecutor.kt +78 -0
  24. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/PosState.kt +10 -0
  25. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/PosTransResponse.kt +61 -0
  26. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/PosXMLExtractor.kt +138 -0
  27. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/builder/DsiEMVInstanceBuilder.kt +23 -0
  28. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/builder/DsiEMVRequestBuilder.kt +132 -0
  29. package/libs/emvCardReaderLib/src/main/java/com/rohan/emvcardreaderlib/manager/DsiEMVManager.kt +167 -0
  30. package/libs/emvCardReaderLib/src/test/java/com/rohan/emvcardreaderlib/ExampleUnitTest.kt +17 -0
  31. package/libs/emvNative/build.gradle.kts +36 -0
  32. package/libs/emvNative/src/main/AndroidManifest.xml +4 -0
  33. package/libs/emvNative/src/main/java/com/rn_bridge_demo/DsiEMVManagerModule.kt +161 -0
  34. package/libs/emvNative/src/main/java/com/rn_bridge_demo/EMVPaymentModule.kt +93 -0
  35. package/libs/emvNative/src/main/java/com/rn_bridge_demo/EMVPaymentPackage.kt +21 -0
  36. package/libs/emvNative/src/main/java/com/rn_bridge_demo/MainActivity.kt +22 -0
  37. package/libs/emvNative/src/main/java/com/rn_bridge_demo/MainApplication.kt +37 -0
  38. package/libs/emvNative/src/main/java/com/rn_bridge_demo/PAXFactory.kt +39 -0
  39. package/libs/emvNative/src/main/java/com/rn_bridge_demo/POSConfigFactory.kt +37 -0
  40. package/libs/emvlib/build.gradle.kts +25 -0
  41. package/libs/emvlib/src/main/AndroidManifest.xml +4 -0
  42. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/DsiEMVInstanceBuilder.kt +23 -0
  43. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/DsiEMVManager.kt +174 -0
  44. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/DsiEMVRequestBuilder.kt +154 -0
  45. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/EMVBridge.kt +89 -0
  46. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/EMVBridgeCallback.kt +11 -0
  47. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/POSTransactionExecutor.kt +77 -0
  48. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/PosState.kt +8 -0
  49. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/PosTransResponse.kt +28 -0
  50. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/PosTransactionListener.kt +18 -0
  51. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/PosXMLExtractor.kt +87 -0
  52. package/libs/emvlib/src/main/java/com/quivioedge/emvlib/pos/models/PosConfig.kt +10 -0
  53. package/libs/settings.gradle +13 -0
  54. package/package.json +45 -0
  55. package/src/example/EMVPaymentScreen.tsx +314 -0
  56. package/src/index.ts +9 -0
  57. package/src/types.ts +45 -0
  58. package/src/useEMVPayment.tsx +306 -0
package/README.md ADDED
@@ -0,0 +1,292 @@
1
+ # quivio-transaction-processor
2
+
3
+ A React Native hook for EMV payment integration with DataCap. This package provides a simple and efficient way to integrate EMV card reader functionality into your React Native Android applications.
4
+
5
+ ## Features
6
+
7
+ - 🔌 **Easy Integration**: Simple hook-based API for React Native
8
+ - 💳 **EMV Card Support**: Full EMV card reading and processing
9
+ - 🤖 **Android Only**: Native Android implementation with EMV libraries
10
+ - 🔄 **Real-time Events**: Subscribe to payment events and status updates
11
+ - 📊 **Transaction Logging**: Built-in logging for debugging and monitoring
12
+ - âš¡ **TypeScript Support**: Full TypeScript definitions included
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install quivio-transaction-processor
18
+ # or
19
+ yarn add quivio-transaction-processor
20
+ ```
21
+
22
+ ### Android Setup
23
+
24
+ The package includes native Android libraries that need to be properly configured. Follow these steps:
25
+
26
+ #### 1. Update settings.gradle
27
+
28
+ Add the following lines to your `android/settings.gradle`:
29
+
30
+ ```gradle
31
+ include ':emvlib'
32
+ project(':emvlib').projectDir = file('../node_modules/quivio-transaction-processor/libs/emvlib')
33
+ include ':emvCardReaderLib'
34
+ project(':emvCardReaderLib').projectDir = file('../node_modules/quivio-transaction-processor/libs/emvCardReaderLib')
35
+ include ':emvNative'
36
+ project(':emvNative').projectDir = file('../node_modules/quivio-transaction-processor/libs/emvNative')
37
+ ```
38
+
39
+ #### 2. Update app/build.gradle
40
+
41
+ Add the following dependencies to your `android/app/build.gradle`:
42
+
43
+ ```gradle
44
+ dependencies {
45
+ // ... other dependencies
46
+ implementation project(":emvlib")
47
+ implementation project(":emvCardReaderLib")
48
+ implementation project(":emvNative")
49
+ }
50
+ ```
51
+
52
+ #### 3. Update MainApplication.kt
53
+
54
+ Add the import and package registration to your `android/app/src/main/java/com/your-app/MainApplication.kt`:
55
+
56
+ ```kotlin
57
+ import com.quivio_transaction_processor.EMVPaymentPackage
58
+
59
+ class MainApplication : Application(), ReactApplication {
60
+ private val mReactNativeHost = object : ReactNativeHost(this) {
61
+ override fun getPackages(): List<ReactPackage> {
62
+ return PackageList(this).packages.apply {
63
+ // Add the EMV payment package
64
+ add(EMVPaymentPackage())
65
+ }
66
+ }
67
+ // ... rest of your MainApplication code
68
+ }
69
+ }
70
+ ```
71
+
72
+ #### 4. Permissions
73
+
74
+ Make sure you have the necessary permissions in your `android/app/src/main/AndroidManifest.xml`:
75
+
76
+ ```xml
77
+ <uses-permission android:name="android.permission.BLUETOOTH" />
78
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
79
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
80
+ ```
81
+
82
+ ## Usage
83
+
84
+ ### Basic Example
85
+
86
+ ```tsx
87
+ import React from 'react';
88
+ import { View, Text, Button } from 'react-native';
89
+ import { useEMVPayment } from 'quivio-transaction-processor';
90
+
91
+ const PaymentScreen = () => {
92
+ const {
93
+ isDeviceConnected,
94
+ loading,
95
+ handleCardPayment,
96
+ setupConfig,
97
+ logs
98
+ } = useEMVPayment();
99
+
100
+ return (
101
+ <View>
102
+ <Text>Device Status: {isDeviceConnected ? 'Connected' : 'Not Connected'}</Text>
103
+
104
+ <Button
105
+ title="Setup Configuration"
106
+ onPress={setupConfig}
107
+ disabled={loading}
108
+ />
109
+
110
+ <Button
111
+ title="Process Payment ($10.00)"
112
+ onPress={() => handleCardPayment('10.00')}
113
+ disabled={loading || !isDeviceConnected}
114
+ />
115
+
116
+ {loading && <Text>Processing...</Text>}
117
+ </View>
118
+ );
119
+ };
120
+ ```
121
+
122
+ ### Advanced Example with Event Handling
123
+
124
+ ```tsx
125
+ import React, { useEffect } from 'react';
126
+ import { View, Text, Button } from 'react-native';
127
+ import { useEMVPayment } from 'quivio-transaction-processor';
128
+
129
+ const AdvancedPaymentScreen = () => {
130
+ const {
131
+ isDeviceConnected,
132
+ loading,
133
+ handleCardPayment,
134
+ handleInHousePayment,
135
+ setupConfig,
136
+ pingConfig,
137
+ subscribeToEvent,
138
+ unsubscribeFromEvent,
139
+ EVENTS,
140
+ logs
141
+ } = useEMVPayment();
142
+
143
+ useEffect(() => {
144
+ // Subscribe to payment events
145
+ const handleSaleCompleted = (payload) => {
146
+ console.log('Sale completed:', payload);
147
+ };
148
+
149
+ const handleCardRead = (payload) => {
150
+ console.log('Card read successfully:', payload);
151
+ };
152
+
153
+ const handleError = (payload) => {
154
+ console.error('Payment error:', payload);
155
+ };
156
+
157
+ // Subscribe to events
158
+ subscribeToEvent(EVENTS.onSaleTransactionCompleted, handleSaleCompleted);
159
+ subscribeToEvent(EVENTS.onCardReadSuccessfully, handleCardRead);
160
+ subscribeToEvent(EVENTS.onError, handleError);
161
+
162
+ // Cleanup on unmount
163
+ return () => {
164
+ unsubscribeFromEvent(EVENTS.onSaleTransactionCompleted, handleSaleCompleted);
165
+ unsubscribeFromEvent(EVENTS.onCardReadSuccessfully, handleCardRead);
166
+ unsubscribeFromEvent(EVENTS.onError, handleError);
167
+ };
168
+ }, []);
169
+
170
+ return (
171
+ <View>
172
+ <Text>Device Status: {isDeviceConnected ? 'Connected' : 'Not Connected'}</Text>
173
+
174
+ <Button title="Setup Config" onPress={setupConfig} />
175
+ <Button title="Ping Config" onPress={pingConfig} />
176
+ <Button title="EMV Sale" onPress={() => handleCardPayment('25.00')} />
177
+ <Button title="In-House Payment" onPress={handleInHousePayment} />
178
+
179
+ {loading && <Text>Processing...</Text>}
180
+ </View>
181
+ );
182
+ };
183
+ ```
184
+
185
+ ## API Reference
186
+
187
+ ### useEMVPayment Hook
188
+
189
+ The main hook that provides all EMV payment functionality.
190
+
191
+ #### Returns
192
+
193
+ | Property | Type | Description |
194
+ |----------|------|-------------|
195
+ | `logs` | `CallbackLog[]` | Array of transaction logs |
196
+ | `isDeviceConnected` | `boolean` | Device connection status |
197
+ | `loading` | `boolean` | Loading state for operations |
198
+ | `handleCardPayment` | `(amount: string) => void` | Process EMV card payment |
199
+ | `handleInHousePayment` | `() => void` | Process in-house payment |
200
+ | `setupConfig` | `() => void` | Setup device configuration |
201
+ | `pingConfig` | `() => void` | Ping device configuration |
202
+ | `clearTransactionListener` | `() => void` | Clear transaction listeners |
203
+ | `subscribeToEvent` | `(eventName, callback) => void` | Subscribe to events |
204
+ | `unsubscribeFromEvent` | `(eventName, callback) => void` | Unsubscribe from events |
205
+ | `EVENTS` | `Record<EMVEventName, EMVEventName>` | Available event names |
206
+
207
+ ### Event Types
208
+
209
+ The following events are available for subscription:
210
+
211
+ - `onError` - Payment or device errors
212
+ - `onCardReadSuccessfully` - Card successfully read
213
+ - `onSaleTransactionCompleted` - Sale transaction completed
214
+ - `onShowMessage` - Display messages from device
215
+ - `onConfigError` - Configuration errors
216
+ - `onConfigPingFailed` - Configuration ping failed
217
+ - `onConfigPingSuccess` - Configuration ping successful
218
+ - `onConfigCompleted` - Configuration setup completed
219
+
220
+ ### Types
221
+
222
+ ```typescript
223
+ interface CallbackLog {
224
+ type: string;
225
+ payload: any;
226
+ timestamp: number;
227
+ }
228
+
229
+ type EMVEventName =
230
+ | 'onError'
231
+ | 'onCardReadSuccessfully'
232
+ | 'onSaleTransactionCompleted'
233
+ | 'onShowMessage'
234
+ | 'onConfigError'
235
+ | 'onConfigPingFailed'
236
+ | 'onConfigPingSuccess'
237
+ | 'onConfigCompleted';
238
+ ```
239
+
240
+ ## Device Requirements
241
+
242
+ - Android device with compatible EMV card reader
243
+ - Bluetooth connectivity (for wireless devices)
244
+ - Android 5.0 (API level 21) or higher
245
+ - Proper device drivers and SDK installed
246
+
247
+ ## Troubleshooting
248
+
249
+ ### Common Issues
250
+
251
+ 1. **Device not connecting**
252
+ - Ensure the device is powered on and in pairing mode
253
+ - Check Bluetooth permissions
254
+ - Verify device compatibility
255
+
256
+ 2. **Payment processing fails**
257
+ - Check device connection status
258
+ - Verify card is properly inserted/swiped
259
+ - Ensure proper amount format (e.g., "10.00")
260
+
261
+ 3. **Events not firing**
262
+ - Make sure you're subscribed to the correct events
263
+ - Check that the device is properly configured
264
+
265
+ ### Debug Mode
266
+
267
+ The hook provides detailed logging through the `logs` array. You can display these logs to debug issues:
268
+
269
+ ```tsx
270
+ {logs.map((log, index) => (
271
+ <Text key={index}>
272
+ {log.type}: {JSON.stringify(log.payload)}
273
+ </Text>
274
+ ))}
275
+ ```
276
+
277
+ ## Contributing
278
+
279
+ 1. Fork the repository
280
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
281
+ 3. Commit your changes (`git commit -m 'Add some amazing feature'`)
282
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
283
+ 5. Open a Pull Request
284
+
285
+ ## License
286
+
287
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
288
+
289
+ ## Support
290
+
291
+ For support and questions, please open an issue on the GitHub repository or contact the maintainers.
292
+
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const EMVPaymentScreenExample: React.FC;
3
+ export default EMVPaymentScreenExample;
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ var react_native_1 = require("react-native");
8
+ var useEMVPayment_1 = require("../useEMVPayment");
9
+ var TickIcon = function () { return (react_1.default.createElement(react_native_1.Text, { style: { color: 'green', fontSize: 18, marginRight: 6 } }, "\u2714\uFE0F")); };
10
+ var CrossIcon = function () { return (react_1.default.createElement(react_native_1.Text, { style: { color: 'red', fontSize: 18, marginRight: 6 } }, "\u274C")); };
11
+ var EMVPaymentScreenExample = function () {
12
+ // EMV Configuration - Replace with your actual values
13
+ var emvConfig = {
14
+ merchantID: "YOUR_MERCHANT_ID",
15
+ onlineMerchantID: "YOUR_ONLINE_MERCHANT_ID",
16
+ isSandBox: true,
17
+ secureDeviceName: "YOUR_DEVICE_NAME",
18
+ operatorID: "YOUR_OPERATOR_ID" // Employee ID
19
+ };
20
+ var _a = (0, useEMVPayment_1.useEMVPayment)(emvConfig), logs = _a.logs, isDeviceConnected = _a.isDeviceConnected, loading = _a.loading, isInitialized = _a.isInitialized, handleCardPayment = _a.handleCardPayment, handleInHousePayment = _a.handleInHousePayment, runRecurringTransaction = _a.runRecurringTransaction, setupConfig = _a.setupConfig, clearAllTransactions = _a.clearAllTransactions, cancelOperation = _a.cancelOperation;
21
+ return (react_1.default.createElement(react_native_1.View, { style: styles.container },
22
+ react_1.default.createElement(react_native_1.View, { style: styles.statusRow },
23
+ isInitialized ? react_1.default.createElement(TickIcon, null) : react_1.default.createElement(CrossIcon, null),
24
+ react_1.default.createElement(react_native_1.Text, { style: [styles.statusLabel, { color: isInitialized ? 'green' : 'red' }] }, isInitialized ? 'Initialized' : 'Not Initialized')),
25
+ react_1.default.createElement(react_native_1.View, { style: styles.statusRow },
26
+ isDeviceConnected ? react_1.default.createElement(TickIcon, null) : react_1.default.createElement(CrossIcon, null),
27
+ react_1.default.createElement(react_native_1.Text, { style: [styles.statusLabel, { color: isDeviceConnected ? 'green' : 'red' }] }, isDeviceConnected ? 'Connected' : 'Not Connected')),
28
+ react_1.default.createElement(react_native_1.Text, { style: styles.title }, "EMV Payment Demo"),
29
+ react_1.default.createElement(react_native_1.View, { style: styles.buttonRow },
30
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, !isDeviceConnected ? styles.ctaButtonEnabled : styles.ctaButtonDisabled], onPress: setupConfig, disabled: isDeviceConnected || loading },
31
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, isDeviceConnected ? 'Configuration Ready' : 'Setup Configuration')),
32
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: function () { return handleCardPayment('1.50'); }, disabled: loading || !isDeviceConnected },
33
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Pay via Credit Card")),
34
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: handleInHousePayment, disabled: loading || !isDeviceConnected },
35
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Pay via In-house"))),
36
+ 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: function () { return runRecurringTransaction('2.00'); }, disabled: loading || !isDeviceConnected },
38
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Recurring Transaction")),
39
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, loading ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: clearAllTransactions, disabled: loading },
40
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Clear All"))),
41
+ react_1.default.createElement(react_native_1.View, { style: styles.buttonRow },
42
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: function () { }, disabled: loading || !isDeviceConnected },
43
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Pre Auth")),
44
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: function () { }, disabled: loading || !isDeviceConnected },
45
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "$0 Auth")),
46
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: [styles.ctaButton, (loading || !isDeviceConnected) ? styles.ctaButtonDisabled : styles.ctaButtonEnabled], onPress: function () { }, disabled: loading || !isDeviceConnected },
47
+ react_1.default.createElement(react_native_1.Text, { style: styles.ctaButtonText }, "Refund"))),
48
+ react_1.default.createElement(react_native_1.Modal, { visible: loading, transparent: true, animationType: "fade", onRequestClose: cancelOperation },
49
+ react_1.default.createElement(react_native_1.View, { style: styles.modalOverlay },
50
+ react_1.default.createElement(react_native_1.View, { style: styles.modalContent },
51
+ react_1.default.createElement(react_native_1.ActivityIndicator, { size: "large", color: "#007AFF" }),
52
+ react_1.default.createElement(react_native_1.Text, { style: styles.modalText }, "Processing..."),
53
+ react_1.default.createElement(react_native_1.TouchableOpacity, { style: styles.cancelButton, onPress: cancelOperation },
54
+ react_1.default.createElement(react_native_1.Text, { style: styles.cancelButtonText }, "Cancel"))))),
55
+ react_1.default.createElement(react_native_1.Text, { style: styles.logTitle }, "Event Log"),
56
+ 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 },
57
+ react_1.default.createElement(react_native_1.Text, { style: styles.logType }, log.type),
58
+ react_1.default.createElement(react_native_1.Text, { style: styles.logPayload }, typeof log.payload === 'object'
59
+ ? JSON.stringify(log.payload, null, 2)
60
+ : String(log.payload)),
61
+ react_1.default.createElement(react_native_1.Text, { style: styles.logTime }, new Date(log.timestamp).toLocaleTimeString()))); })))));
62
+ };
63
+ var styles = react_native_1.StyleSheet.create({
64
+ container: {
65
+ flex: 1,
66
+ padding: 16,
67
+ backgroundColor: '#FAFAFA',
68
+ },
69
+ statusRow: {
70
+ flexDirection: 'row',
71
+ alignItems: 'center',
72
+ marginBottom: 10,
73
+ marginTop: 10,
74
+ alignSelf: 'center',
75
+ },
76
+ statusLabel: {
77
+ fontSize: 18,
78
+ fontWeight: 'bold',
79
+ },
80
+ modalOverlay: {
81
+ flex: 1,
82
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
83
+ justifyContent: 'center',
84
+ alignItems: 'center',
85
+ },
86
+ modalContent: {
87
+ backgroundColor: 'white',
88
+ borderRadius: 12,
89
+ padding: 24,
90
+ alignItems: 'center',
91
+ minWidth: 200,
92
+ shadowColor: '#000',
93
+ shadowOffset: {
94
+ width: 0,
95
+ height: 2,
96
+ },
97
+ shadowOpacity: 0.25,
98
+ shadowRadius: 4,
99
+ elevation: 5,
100
+ },
101
+ modalText: {
102
+ fontSize: 16,
103
+ fontWeight: '600',
104
+ color: '#333',
105
+ marginTop: 16,
106
+ marginBottom: 20,
107
+ },
108
+ cancelButton: {
109
+ backgroundColor: '#FF3B30',
110
+ paddingVertical: 10,
111
+ paddingHorizontal: 20,
112
+ borderRadius: 8,
113
+ minWidth: 100,
114
+ alignItems: 'center',
115
+ },
116
+ cancelButtonText: {
117
+ color: 'white',
118
+ fontWeight: 'bold',
119
+ fontSize: 14,
120
+ },
121
+ title: {
122
+ fontSize: 22,
123
+ fontWeight: 'bold',
124
+ marginBottom: 18,
125
+ textAlign: 'center',
126
+ },
127
+ buttonRow: {
128
+ flexDirection: 'row',
129
+ justifyContent: 'space-between',
130
+ marginBottom: 18,
131
+ alignItems: 'center',
132
+ },
133
+ ctaButton: {
134
+ paddingVertical: 10,
135
+ paddingHorizontal: 16,
136
+ borderRadius: 8,
137
+ marginRight: 8,
138
+ minWidth: 120,
139
+ alignItems: 'center',
140
+ },
141
+ ctaButtonEnabled: {
142
+ backgroundColor: '#007AFF',
143
+ },
144
+ ctaButtonDisabled: {
145
+ backgroundColor: '#CCC',
146
+ },
147
+ ctaButtonText: {
148
+ color: '#FFF',
149
+ fontWeight: 'bold',
150
+ fontSize: 14,
151
+ },
152
+ logTitle: {
153
+ fontSize: 16,
154
+ fontWeight: '600',
155
+ marginBottom: 8,
156
+ marginTop: 8,
157
+ },
158
+ logArea: {
159
+ flex: 1,
160
+ backgroundColor: '#FFF',
161
+ borderRadius: 8,
162
+ borderWidth: 1,
163
+ borderColor: '#EEE',
164
+ padding: 8,
165
+ },
166
+ logContent: {
167
+ paddingBottom: 16,
168
+ },
169
+ logEmpty: {
170
+ color: '#AAA',
171
+ textAlign: 'center',
172
+ marginTop: 24,
173
+ },
174
+ logItem: {
175
+ marginBottom: 12,
176
+ paddingBottom: 8,
177
+ borderBottomWidth: 1,
178
+ borderBottomColor: '#F0F0F0',
179
+ },
180
+ logType: {
181
+ fontWeight: 'bold',
182
+ color: '#333',
183
+ },
184
+ logPayload: {
185
+ color: '#444',
186
+ marginTop: 2,
187
+ fontSize: 13,
188
+ },
189
+ logTime: {
190
+ color: '#888',
191
+ fontSize: 11,
192
+ marginTop: 2,
193
+ textAlign: 'right',
194
+ },
195
+ });
196
+ exports.default = EMVPaymentScreenExample;
197
+ //# sourceMappingURL=EMVPaymentScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EMVPaymentScreen.js","sourceRoot":"","sources":["../../src/example/EMVPaymentScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { useEMVPayment } from './useEMVPayment';
2
+ import EMVPaymentScreenExample from './example/EMVPaymentScreen';
3
+ export type { EMVEventName, CallbackLog, EMVPaymentHook } from './types';
4
+ export { EMVPaymentScreenExample, useEMVPayment };
5
+ export default useEMVPayment;
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useEMVPayment = exports.EMVPaymentScreenExample = void 0;
7
+ var useEMVPayment_1 = require("./useEMVPayment");
8
+ Object.defineProperty(exports, "useEMVPayment", { enumerable: true, get: function () { return useEMVPayment_1.useEMVPayment; } });
9
+ var EMVPaymentScreen_1 = __importDefault(require("./example/EMVPaymentScreen"));
10
+ exports.EMVPaymentScreenExample = EMVPaymentScreen_1.default;
11
+ exports.default = useEMVPayment_1.useEMVPayment;
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,iDAAgD;AAKd,8FALzB,6BAAa,OAKyB;AAJ/C,gFAAiE;AAIxD,kCAJF,0BAAuB,CAIE;AAEhC,kBAAe,6BAAa,CAAC"}
@@ -0,0 +1,32 @@
1
+ export declare const EVENT_NAMES: readonly ["onError", "onCardReadSuccessfully", "onSaleTransactionCompleted", "onShowMessage", "onConfigError", "onConfigPingFailed", "onConfigPingSuccess", "onConfigCompleted"];
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
+ loading: boolean;
12
+ isInitialized: boolean;
13
+ handleCardPayment: (amount: string) => void;
14
+ handleInHousePayment: () => void;
15
+ runRecurringTransaction: (amount: string) => void;
16
+ setupConfig: () => void;
17
+ pingConfig: () => void;
18
+ clearTransactionListener: () => void;
19
+ clearAllTransactions: () => void;
20
+ cancelOperation: () => void;
21
+ initializeEMV: () => void;
22
+ subscribeToEvent: (eventName: EMVEventName, callback: (payload: any) => void) => void;
23
+ unsubscribeFromEvent: (eventName: EMVEventName, callback: (payload: any) => void) => void;
24
+ EVENTS: Record<EMVEventName, EMVEventName>;
25
+ }
26
+ export interface EMVConfig {
27
+ merchantID: string;
28
+ onlineMerchantID: string;
29
+ isSandBox: boolean;
30
+ secureDeviceName: string;
31
+ operatorID: string;
32
+ }
package/dist/types.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVENT_NAMES = void 0;
4
+ exports.EVENT_NAMES = [
5
+ 'onError',
6
+ 'onCardReadSuccessfully',
7
+ 'onSaleTransactionCompleted',
8
+ 'onShowMessage',
9
+ 'onConfigError',
10
+ 'onConfigPingFailed',
11
+ 'onConfigPingSuccess',
12
+ 'onConfigCompleted',
13
+ ];
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACvB,SAAS;IACT,wBAAwB;IACxB,4BAA4B;IAC5B,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;CACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { EMVPaymentHook, EMVConfig } from './types';
2
+ export declare const useEMVPayment: (config: EMVConfig) => EMVPaymentHook;