omnipay-reactnative-sdk 1.2.3-beta.9 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -102
- package/android/build.gradle +4 -15
- package/android/src/main/java/com/omniretail/omnipay/OmnipayActivityPackage.java +0 -5
- package/lib/commonjs/components/OmnipayProvider.js +91 -18
- package/lib/commonjs/components/OmnipayProvider.js.map +1 -1
- package/lib/module/components/OmnipayProvider.js +92 -19
- package/lib/module/components/OmnipayProvider.js.map +1 -1
- package/lib/module/components/OmnipayView.js.map +1 -1
- package/lib/module/components/views/BvnVerification.js.map +1 -1
- package/lib/module/components/views/PaylaterAgreement.js.map +1 -1
- package/lib/module/components/views/Registration.js.map +1 -1
- package/lib/typescript/components/OmnipayProvider.d.ts +3 -2
- package/lib/typescript/components/OmnipayProvider.d.ts.map +1 -1
- package/lib/typescript/hooks/useOmnipay.d.ts +2 -1
- package/lib/typescript/hooks/useOmnipay.d.ts.map +1 -1
- package/package.json +12 -29
- package/src/components/OmnipayProvider.tsx +133 -21
- package/src/components/OmnipayView.tsx +1 -1
- package/src/components/views/BvnVerification.tsx +1 -1
- package/src/components/views/PaylaterAgreement.tsx +1 -1
- package/src/components/views/Registration.tsx +1 -1
- package/src/hooks/useOmnipay.tsx +1 -1
- package/android/src/main/java/com/omniretail/omnipay/FaceVerificationFrameProcessor.kt +0 -111
- package/ios/FaceVerificationFrameProcessor.swift +0 -138
- package/ios/FaceVerificationFrameProcessorPlugin.m +0 -4
- package/ios/OmnipayReactnativeSdk.m +0 -5
- package/ios/OmnipayReactnativeSdk.swift +0 -10
- package/ios/omnipay-reactnative-sdk-Bridging-Header.h +0 -8
- package/ios/omnipay_reactnative_sdk.h +0 -6
- package/lib/commonjs/components/Button.js +0 -68
- package/lib/commonjs/components/Button.js.map +0 -1
- package/lib/commonjs/components/biometrics/FaceVerification.js +0 -380
- package/lib/commonjs/components/biometrics/FaceVerification.js.map +0 -1
- package/lib/commonjs/components/biometrics/useFaceVerification.js +0 -85
- package/lib/commonjs/components/biometrics/useFaceVerification.js.map +0 -1
- package/lib/commonjs/components/biometrics/useFaceVerificationFlow.js +0 -157
- package/lib/commonjs/components/biometrics/useFaceVerificationFlow.js.map +0 -1
- package/lib/module/components/Button.js +0 -61
- package/lib/module/components/Button.js.map +0 -1
- package/lib/module/components/biometrics/FaceVerification.js +0 -372
- package/lib/module/components/biometrics/FaceVerification.js.map +0 -1
- package/lib/module/components/biometrics/useFaceVerification.js +0 -78
- package/lib/module/components/biometrics/useFaceVerification.js.map +0 -1
- package/lib/module/components/biometrics/useFaceVerificationFlow.js +0 -150
- package/lib/module/components/biometrics/useFaceVerificationFlow.js.map +0 -1
- package/lib/typescript/components/Button.d.ts +0 -17
- package/lib/typescript/components/Button.d.ts.map +0 -1
- package/lib/typescript/components/biometrics/FaceVerification.d.ts +0 -9
- package/lib/typescript/components/biometrics/FaceVerification.d.ts.map +0 -1
- package/lib/typescript/components/biometrics/useFaceVerification.d.ts +0 -38
- package/lib/typescript/components/biometrics/useFaceVerification.d.ts.map +0 -1
- package/lib/typescript/components/biometrics/useFaceVerificationFlow.d.ts +0 -29
- package/lib/typescript/components/biometrics/useFaceVerificationFlow.d.ts.map +0 -1
- package/omnipay_reactnative_sdk.podspec +0 -52
- package/src/components/Button.tsx +0 -86
- package/src/components/biometrics/FaceVerification.tsx +0 -429
- package/src/components/biometrics/useFaceVerification.ts +0 -120
- package/src/components/biometrics/useFaceVerificationFlow.ts +0 -224
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';
|
|
3
|
-
const Button = ({
|
|
4
|
-
title,
|
|
5
|
-
onPress,
|
|
6
|
-
backgroundColor = '#007AFF',
|
|
7
|
-
borderColor,
|
|
8
|
-
textColor = 'white',
|
|
9
|
-
disabled = false,
|
|
10
|
-
loading = false,
|
|
11
|
-
style,
|
|
12
|
-
textStyle,
|
|
13
|
-
activeOpacity = 0.8
|
|
14
|
-
}) => {
|
|
15
|
-
const buttonStyle = {
|
|
16
|
-
...styles.button,
|
|
17
|
-
backgroundColor: disabled ? '#cccccc' : backgroundColor,
|
|
18
|
-
borderColor: disabled ? '#cccccc' : borderColor || backgroundColor,
|
|
19
|
-
...style
|
|
20
|
-
};
|
|
21
|
-
const finalTextStyle = {
|
|
22
|
-
...styles.buttonText,
|
|
23
|
-
color: disabled ? '#666666' : textColor,
|
|
24
|
-
...textStyle
|
|
25
|
-
};
|
|
26
|
-
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
27
|
-
style: buttonStyle,
|
|
28
|
-
onPress: onPress,
|
|
29
|
-
disabled: disabled || loading,
|
|
30
|
-
activeOpacity: activeOpacity,
|
|
31
|
-
accessibilityRole: "button",
|
|
32
|
-
accessibilityLabel: title,
|
|
33
|
-
accessibilityState: {
|
|
34
|
-
disabled: disabled || loading
|
|
35
|
-
}
|
|
36
|
-
}, loading ? /*#__PURE__*/React.createElement(ActivityIndicator, {
|
|
37
|
-
color: textColor,
|
|
38
|
-
size: "small"
|
|
39
|
-
}) : /*#__PURE__*/React.createElement(Text, {
|
|
40
|
-
style: finalTextStyle
|
|
41
|
-
}, title));
|
|
42
|
-
};
|
|
43
|
-
const styles = StyleSheet.create({
|
|
44
|
-
button: {
|
|
45
|
-
borderRadius: 6,
|
|
46
|
-
paddingHorizontal: 12,
|
|
47
|
-
paddingVertical: 14,
|
|
48
|
-
borderWidth: 1,
|
|
49
|
-
alignItems: 'center',
|
|
50
|
-
justifyContent: 'center',
|
|
51
|
-
minHeight: 48
|
|
52
|
-
},
|
|
53
|
-
buttonText: {
|
|
54
|
-
color: 'white',
|
|
55
|
-
fontSize: 16,
|
|
56
|
-
fontWeight: '600',
|
|
57
|
-
paddingHorizontal: 30
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
export default Button;
|
|
61
|
-
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","TouchableOpacity","Text","StyleSheet","ActivityIndicator","Button","title","onPress","backgroundColor","borderColor","textColor","disabled","loading","style","textStyle","activeOpacity","buttonStyle","styles","button","finalTextStyle","buttonText","color","createElement","accessibilityRole","accessibilityLabel","accessibilityState","size","create","borderRadius","paddingHorizontal","paddingVertical","borderWidth","alignItems","justifyContent","minHeight","fontSize","fontWeight"],"sourceRoot":"../../../src","sources":["components/Button.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,gBAAgB,EAChBC,IAAI,EACJC,UAAU,EACVC,iBAAiB,QAGZ,cAAc;AAerB,MAAMC,MAA6B,GAAGA,CAAC;EACrCC,KAAK;EACLC,OAAO;EACPC,eAAe,GAAG,SAAS;EAC3BC,WAAW;EACXC,SAAS,GAAG,OAAO;EACnBC,QAAQ,GAAG,KAAK;EAChBC,OAAO,GAAG,KAAK;EACfC,KAAK;EACLC,SAAS;EACTC,aAAa,GAAG;AAClB,CAAC,KAAK;EACJ,MAAMC,WAAsB,GAAG;IAC7B,GAAGC,MAAM,CAACC,MAAM;IAChBV,eAAe,EAAEG,QAAQ,GAAG,SAAS,GAAGH,eAAe;IACvDC,WAAW,EAAEE,QAAQ,GAAG,SAAS,GAAGF,WAAW,IAAID,eAAe;IAClE,GAAGK;EACL,CAAC;EAED,MAAMM,cAAyB,GAAG;IAChC,GAAGF,MAAM,CAACG,UAAU;IACpBC,KAAK,EAAEV,QAAQ,GAAG,SAAS,GAAGD,SAAS;IACvC,GAAGI;EACL,CAAC;EAED,oBACEd,KAAA,CAAAsB,aAAA,CAACrB,gBAAgB;IACfY,KAAK,EAAEG,WAAY;IACnBT,OAAO,EAAEA,OAAQ;IACjBI,QAAQ,EAAEA,QAAQ,IAAIC,OAAQ;IAC9BG,aAAa,EAAEA,aAAc;IAC7BQ,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAElB,KAAM;IAC1BmB,kBAAkB,EAAE;MAAEd,QAAQ,EAAEA,QAAQ,IAAIC;IAAQ;EAAE,GAErDA,OAAO,gBACNZ,KAAA,CAAAsB,aAAA,CAAClB,iBAAiB;IAACiB,KAAK,EAAEX,SAAU;IAACgB,IAAI,EAAC;EAAO,CAAE,CAAC,gBAEpD1B,KAAA,CAAAsB,aAAA,CAACpB,IAAI;IAACW,KAAK,EAAEM;EAAe,GAAEb,KAAY,CAE5B,CAAC;AAEvB,CAAC;AAED,MAAMW,MAAM,GAAGd,UAAU,CAACwB,MAAM,CAAC;EAC/BT,MAAM,EAAE;IACNU,YAAY,EAAE,CAAC;IACfC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,EAAE;IACnBC,WAAW,EAAE,CAAC;IACdC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,SAAS,EAAE;EACb,CAAC;EACDd,UAAU,EAAE;IACVC,KAAK,EAAE,OAAO;IACdc,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjBP,iBAAiB,EAAE;EACrB;AACF,CAAC,CAAC;AAEF,eAAexB,MAAM","ignoreList":[]}
|
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { View, Modal, Dimensions, Platform, StyleSheet, TouchableOpacity, Image, Text } from 'react-native';
|
|
3
|
-
import { Camera, useCameraDevice, useCameraPermission } from 'react-native-vision-camera';
|
|
4
|
-
import Button from '../Button';
|
|
5
|
-
import { useFaceVerification } from './useFaceVerification';
|
|
6
|
-
import { useFaceVerificationFlow } from './useFaceVerificationFlow';
|
|
7
|
-
const FaceVerification = ({
|
|
8
|
-
onClose,
|
|
9
|
-
onSuccess,
|
|
10
|
-
primaryColor
|
|
11
|
-
}) => {
|
|
12
|
-
const device = useCameraDevice('front');
|
|
13
|
-
const {
|
|
14
|
-
hasPermission,
|
|
15
|
-
requestPermission
|
|
16
|
-
} = useCameraPermission();
|
|
17
|
-
const [isRequestingPermission, setIsRequestingPermission] = useState(false);
|
|
18
|
-
|
|
19
|
-
// Face verification flow
|
|
20
|
-
const {
|
|
21
|
-
state: flowState,
|
|
22
|
-
resetFlow,
|
|
23
|
-
isCompleted,
|
|
24
|
-
isFailed
|
|
25
|
-
} = useFaceVerificationFlow();
|
|
26
|
-
|
|
27
|
-
// Frame processor
|
|
28
|
-
const frameProcessor = useFaceVerification();
|
|
29
|
-
|
|
30
|
-
// Handle completion
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
if (isCompleted) {
|
|
33
|
-
setTimeout(() => {
|
|
34
|
-
onSuccess();
|
|
35
|
-
}, 1000); // Show success message briefly
|
|
36
|
-
}
|
|
37
|
-
}, [isCompleted, onSuccess]);
|
|
38
|
-
const handleRequestPermission = async () => {
|
|
39
|
-
setIsRequestingPermission(true);
|
|
40
|
-
try {
|
|
41
|
-
await requestPermission();
|
|
42
|
-
} catch (error) {
|
|
43
|
-
console.error('Error requesting camera permission:', error);
|
|
44
|
-
} finally {
|
|
45
|
-
setIsRequestingPermission(false);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
const renderPermissionRequest = () => /*#__PURE__*/React.createElement(View, {
|
|
49
|
-
style: styles.permissionContainer
|
|
50
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
51
|
-
style: styles.permissionIconContainer
|
|
52
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
53
|
-
style: styles.permissionIcon
|
|
54
|
-
}, "\uD83D\uDCF7")), /*#__PURE__*/React.createElement(Text, {
|
|
55
|
-
style: styles.permissionTitle
|
|
56
|
-
}, "Camera Permission Required"), /*#__PURE__*/React.createElement(Text, {
|
|
57
|
-
style: styles.permissionDescription
|
|
58
|
-
}, "To verify your identity, we need access to your camera. This allows us to capture your face for secure verification."), /*#__PURE__*/React.createElement(Button, {
|
|
59
|
-
title: "Allow Camera Access",
|
|
60
|
-
onPress: handleRequestPermission,
|
|
61
|
-
backgroundColor: primaryColor,
|
|
62
|
-
loading: isRequestingPermission
|
|
63
|
-
}));
|
|
64
|
-
const renderNoDevice = () => /*#__PURE__*/React.createElement(View, {
|
|
65
|
-
style: styles.errorContainer
|
|
66
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
67
|
-
style: styles.errorTitle
|
|
68
|
-
}, "Camera Not Available"), /*#__PURE__*/React.createElement(Text, {
|
|
69
|
-
style: styles.errorSubtitle
|
|
70
|
-
}, "No front camera detected on this device. Face verification requires a front-facing camera."));
|
|
71
|
-
const renderCamera = () => {
|
|
72
|
-
if (!device) return null;
|
|
73
|
-
return /*#__PURE__*/React.createElement(View, {
|
|
74
|
-
style: styles.cameraContainer
|
|
75
|
-
}, /*#__PURE__*/React.createElement(Camera, {
|
|
76
|
-
device: device,
|
|
77
|
-
style: styles.camera,
|
|
78
|
-
isActive: true,
|
|
79
|
-
frameProcessor: frameProcessor
|
|
80
|
-
}), /*#__PURE__*/React.createElement(View, {
|
|
81
|
-
style: styles.cameraOverlay
|
|
82
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
83
|
-
style: styles.faceFrame
|
|
84
|
-
}), /*#__PURE__*/React.createElement(View, {
|
|
85
|
-
style: styles.progressContainer
|
|
86
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
87
|
-
style: [styles.progressBar, {
|
|
88
|
-
width: `${flowState.progress}%`,
|
|
89
|
-
backgroundColor: primaryColor
|
|
90
|
-
}]
|
|
91
|
-
})), /*#__PURE__*/React.createElement(Text, {
|
|
92
|
-
style: styles.instructionText
|
|
93
|
-
}, flowState.instruction), /*#__PURE__*/React.createElement(Text, {
|
|
94
|
-
style: styles.stepIndicator
|
|
95
|
-
}, "Step ", flowState.completedSteps.length + 1, " of 5"), isCompleted && /*#__PURE__*/React.createElement(View, {
|
|
96
|
-
style: [styles.statusContainer, {
|
|
97
|
-
backgroundColor: primaryColor
|
|
98
|
-
}]
|
|
99
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
100
|
-
style: styles.statusText
|
|
101
|
-
}, "\u2713 Verification Complete!")), isFailed && /*#__PURE__*/React.createElement(View, {
|
|
102
|
-
style: [styles.statusContainer, styles.statusContainerError]
|
|
103
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
104
|
-
style: styles.statusText
|
|
105
|
-
}, "\u2717 Verification Failed"), /*#__PURE__*/React.createElement(Button, {
|
|
106
|
-
title: "Try Again",
|
|
107
|
-
onPress: resetFlow,
|
|
108
|
-
backgroundColor: "white",
|
|
109
|
-
textColor: "#ff4444",
|
|
110
|
-
style: styles.retryButton
|
|
111
|
-
}))));
|
|
112
|
-
};
|
|
113
|
-
console.log(onSuccess, primaryColor);
|
|
114
|
-
return /*#__PURE__*/React.createElement(Modal, {
|
|
115
|
-
visible: true,
|
|
116
|
-
transparent: true,
|
|
117
|
-
onRequestClose: onClose,
|
|
118
|
-
style: styles.modal
|
|
119
|
-
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
120
|
-
style: styles.backdrop,
|
|
121
|
-
activeOpacity: 1,
|
|
122
|
-
onPress: onClose
|
|
123
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
124
|
-
style: [styles.container]
|
|
125
|
-
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
126
|
-
style: styles.close,
|
|
127
|
-
onPress: onClose
|
|
128
|
-
}, /*#__PURE__*/React.createElement(Image, {
|
|
129
|
-
source: require('../../assets/cancel.png'),
|
|
130
|
-
style: styles.closeIcon
|
|
131
|
-
})), /*#__PURE__*/React.createElement(View, {
|
|
132
|
-
style: styles.contentContainer
|
|
133
|
-
}, !hasPermission && renderPermissionRequest(), hasPermission && !device && renderNoDevice(), hasPermission && device && renderCamera()))));
|
|
134
|
-
};
|
|
135
|
-
export default FaceVerification;
|
|
136
|
-
const styles = StyleSheet.create({
|
|
137
|
-
hide: {
|
|
138
|
-
display: 'none'
|
|
139
|
-
},
|
|
140
|
-
full: {
|
|
141
|
-
flex: 1,
|
|
142
|
-
width: '100%',
|
|
143
|
-
height: '100%'
|
|
144
|
-
},
|
|
145
|
-
webview: {
|
|
146
|
-
flex: 1,
|
|
147
|
-
width: '100%',
|
|
148
|
-
height: Dimensions.get('window').height - 40,
|
|
149
|
-
backgroundColor: 'white',
|
|
150
|
-
borderTopRightRadius: 20,
|
|
151
|
-
borderTopLeftRadius: 20,
|
|
152
|
-
paddingTop: 150
|
|
153
|
-
},
|
|
154
|
-
webviewLoader: {
|
|
155
|
-
zIndex: 3,
|
|
156
|
-
backgroundColor: 'white',
|
|
157
|
-
alignItems: 'center',
|
|
158
|
-
justifyContent: 'center',
|
|
159
|
-
flex: 1,
|
|
160
|
-
width: '100%',
|
|
161
|
-
height: '100%',
|
|
162
|
-
position: 'absolute',
|
|
163
|
-
top: 0,
|
|
164
|
-
left: 0,
|
|
165
|
-
borderTopRightRadius: 20,
|
|
166
|
-
borderTopLeftRadius: 20
|
|
167
|
-
},
|
|
168
|
-
backdrop: {
|
|
169
|
-
backgroundColor: 'rgba(0,0,0,0.3)',
|
|
170
|
-
flex: 1,
|
|
171
|
-
justifyContent: 'flex-end',
|
|
172
|
-
position: 'relative',
|
|
173
|
-
height: '100%'
|
|
174
|
-
},
|
|
175
|
-
container: {
|
|
176
|
-
backgroundColor: 'white',
|
|
177
|
-
borderTopRightRadius: 20,
|
|
178
|
-
borderTopLeftRadius: 20,
|
|
179
|
-
maxHeight: Dimensions.get('window').height - 120,
|
|
180
|
-
flex: 1,
|
|
181
|
-
position: 'relative',
|
|
182
|
-
...(Platform.OS === 'android' && {
|
|
183
|
-
overflow: 'hidden'
|
|
184
|
-
})
|
|
185
|
-
},
|
|
186
|
-
modal: {
|
|
187
|
-
flex: 1,
|
|
188
|
-
backgroundColor: 'rgba(0,0,0,0.48)',
|
|
189
|
-
height: '100%',
|
|
190
|
-
width: '100%'
|
|
191
|
-
},
|
|
192
|
-
close: {
|
|
193
|
-
position: 'absolute',
|
|
194
|
-
top: 10,
|
|
195
|
-
right: 10,
|
|
196
|
-
backgroundColor: 'white',
|
|
197
|
-
height: 24,
|
|
198
|
-
width: 24,
|
|
199
|
-
borderRadius: 1000,
|
|
200
|
-
alignItems: 'center',
|
|
201
|
-
justifyContent: 'center',
|
|
202
|
-
zIndex: 2
|
|
203
|
-
},
|
|
204
|
-
closeIcon: {
|
|
205
|
-
height: 12,
|
|
206
|
-
width: 12
|
|
207
|
-
},
|
|
208
|
-
contentContainer: {
|
|
209
|
-
height: '100%',
|
|
210
|
-
position: 'relative',
|
|
211
|
-
borderTopRightRadius: 20,
|
|
212
|
-
borderTopLeftRadius: 20,
|
|
213
|
-
padding: 16
|
|
214
|
-
},
|
|
215
|
-
testContent: {
|
|
216
|
-
paddingTop: 30,
|
|
217
|
-
paddingLeft: 16
|
|
218
|
-
},
|
|
219
|
-
testTwoContent: {
|
|
220
|
-
paddingTop: 10,
|
|
221
|
-
paddingLeft: 16
|
|
222
|
-
},
|
|
223
|
-
errorSubtitle: {
|
|
224
|
-
textAlign: 'center',
|
|
225
|
-
fontSize: 14,
|
|
226
|
-
color: '#5e7079',
|
|
227
|
-
marginBottom: 20,
|
|
228
|
-
paddingHorizontal: 8,
|
|
229
|
-
marginTop: 14
|
|
230
|
-
},
|
|
231
|
-
errorContainer: {
|
|
232
|
-
flex: 1,
|
|
233
|
-
justifyContent: 'center',
|
|
234
|
-
alignItems: 'center',
|
|
235
|
-
width: Dimensions.get('window').width,
|
|
236
|
-
height: Dimensions.get('window').height,
|
|
237
|
-
zIndex: 2,
|
|
238
|
-
backgroundColor: 'white'
|
|
239
|
-
},
|
|
240
|
-
camera: {
|
|
241
|
-
width: '100%',
|
|
242
|
-
height: 400
|
|
243
|
-
},
|
|
244
|
-
// Permission request styles
|
|
245
|
-
permissionContainer: {
|
|
246
|
-
flex: 1,
|
|
247
|
-
justifyContent: 'center',
|
|
248
|
-
alignItems: 'center',
|
|
249
|
-
paddingHorizontal: 24,
|
|
250
|
-
paddingVertical: 40
|
|
251
|
-
},
|
|
252
|
-
permissionIconContainer: {
|
|
253
|
-
width: 80,
|
|
254
|
-
height: 80,
|
|
255
|
-
borderRadius: 40,
|
|
256
|
-
backgroundColor: '#f0f0f0',
|
|
257
|
-
justifyContent: 'center',
|
|
258
|
-
alignItems: 'center',
|
|
259
|
-
marginBottom: 24
|
|
260
|
-
},
|
|
261
|
-
permissionIcon: {
|
|
262
|
-
fontSize: 40
|
|
263
|
-
},
|
|
264
|
-
permissionTitle: {
|
|
265
|
-
fontSize: 20,
|
|
266
|
-
fontWeight: '600',
|
|
267
|
-
color: '#1a1a1a',
|
|
268
|
-
textAlign: 'center',
|
|
269
|
-
marginBottom: 12
|
|
270
|
-
},
|
|
271
|
-
permissionDescription: {
|
|
272
|
-
fontSize: 16,
|
|
273
|
-
color: '#666',
|
|
274
|
-
textAlign: 'center',
|
|
275
|
-
lineHeight: 22,
|
|
276
|
-
marginBottom: 32
|
|
277
|
-
},
|
|
278
|
-
// Error styles
|
|
279
|
-
errorTitle: {
|
|
280
|
-
fontSize: 18,
|
|
281
|
-
fontWeight: '600',
|
|
282
|
-
color: '#1a1a1a',
|
|
283
|
-
textAlign: 'center',
|
|
284
|
-
marginBottom: 8
|
|
285
|
-
},
|
|
286
|
-
// Camera styles
|
|
287
|
-
cameraContainer: {
|
|
288
|
-
flex: 1,
|
|
289
|
-
position: 'relative',
|
|
290
|
-
marginTop: 60
|
|
291
|
-
},
|
|
292
|
-
cameraOverlay: {
|
|
293
|
-
position: 'absolute',
|
|
294
|
-
top: 0,
|
|
295
|
-
left: 0,
|
|
296
|
-
right: 0,
|
|
297
|
-
bottom: 0,
|
|
298
|
-
justifyContent: 'center',
|
|
299
|
-
alignItems: 'center'
|
|
300
|
-
},
|
|
301
|
-
faceFrame: {
|
|
302
|
-
width: 200,
|
|
303
|
-
height: 250,
|
|
304
|
-
borderWidth: 3,
|
|
305
|
-
borderColor: 'white',
|
|
306
|
-
borderRadius: 100,
|
|
307
|
-
borderStyle: 'dashed',
|
|
308
|
-
backgroundColor: 'transparent'
|
|
309
|
-
},
|
|
310
|
-
instructionText: {
|
|
311
|
-
color: 'white',
|
|
312
|
-
fontSize: 16,
|
|
313
|
-
fontWeight: '500',
|
|
314
|
-
textAlign: 'center',
|
|
315
|
-
marginTop: 20,
|
|
316
|
-
backgroundColor: 'rgba(0,0,0,0.7)',
|
|
317
|
-
paddingHorizontal: 16,
|
|
318
|
-
paddingVertical: 8,
|
|
319
|
-
borderRadius: 20
|
|
320
|
-
},
|
|
321
|
-
// Verification flow styles
|
|
322
|
-
progressContainer: {
|
|
323
|
-
position: 'absolute',
|
|
324
|
-
top: 20,
|
|
325
|
-
left: 20,
|
|
326
|
-
right: 20,
|
|
327
|
-
height: 4,
|
|
328
|
-
backgroundColor: 'rgba(255,255,255,0.3)',
|
|
329
|
-
borderRadius: 2,
|
|
330
|
-
overflow: 'hidden'
|
|
331
|
-
},
|
|
332
|
-
progressBar: {
|
|
333
|
-
height: '100%',
|
|
334
|
-
borderRadius: 2
|
|
335
|
-
},
|
|
336
|
-
stepIndicator: {
|
|
337
|
-
color: 'white',
|
|
338
|
-
fontSize: 14,
|
|
339
|
-
fontWeight: '400',
|
|
340
|
-
textAlign: 'center',
|
|
341
|
-
marginTop: 8,
|
|
342
|
-
backgroundColor: 'rgba(0,0,0,0.5)',
|
|
343
|
-
paddingHorizontal: 12,
|
|
344
|
-
paddingVertical: 4,
|
|
345
|
-
borderRadius: 12,
|
|
346
|
-
alignSelf: 'center'
|
|
347
|
-
},
|
|
348
|
-
statusContainer: {
|
|
349
|
-
position: 'absolute',
|
|
350
|
-
bottom: 40,
|
|
351
|
-
left: 20,
|
|
352
|
-
right: 20,
|
|
353
|
-
padding: 20,
|
|
354
|
-
borderRadius: 12,
|
|
355
|
-
alignItems: 'center'
|
|
356
|
-
},
|
|
357
|
-
statusContainerError: {
|
|
358
|
-
backgroundColor: '#ff4444'
|
|
359
|
-
},
|
|
360
|
-
statusText: {
|
|
361
|
-
color: 'white',
|
|
362
|
-
fontSize: 18,
|
|
363
|
-
fontWeight: '600',
|
|
364
|
-
textAlign: 'center',
|
|
365
|
-
marginBottom: 8
|
|
366
|
-
},
|
|
367
|
-
retryButton: {
|
|
368
|
-
marginTop: 12,
|
|
369
|
-
minWidth: 120
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
//# sourceMappingURL=FaceVerification.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useEffect","View","Modal","Dimensions","Platform","StyleSheet","TouchableOpacity","Image","Text","Camera","useCameraDevice","useCameraPermission","Button","useFaceVerification","useFaceVerificationFlow","FaceVerification","onClose","onSuccess","primaryColor","device","hasPermission","requestPermission","isRequestingPermission","setIsRequestingPermission","state","flowState","resetFlow","isCompleted","isFailed","frameProcessor","setTimeout","handleRequestPermission","error","console","renderPermissionRequest","createElement","style","styles","permissionContainer","permissionIconContainer","permissionIcon","permissionTitle","permissionDescription","title","onPress","backgroundColor","loading","renderNoDevice","errorContainer","errorTitle","errorSubtitle","renderCamera","cameraContainer","camera","isActive","cameraOverlay","faceFrame","progressContainer","progressBar","width","progress","instructionText","instruction","stepIndicator","completedSteps","length","statusContainer","statusText","statusContainerError","textColor","retryButton","log","visible","transparent","onRequestClose","modal","backdrop","activeOpacity","container","close","source","require","closeIcon","contentContainer","create","hide","display","full","flex","height","webview","get","borderTopRightRadius","borderTopLeftRadius","paddingTop","webviewLoader","zIndex","alignItems","justifyContent","position","top","left","maxHeight","OS","overflow","right","borderRadius","padding","testContent","paddingLeft","testTwoContent","textAlign","fontSize","color","marginBottom","paddingHorizontal","marginTop","paddingVertical","fontWeight","lineHeight","bottom","borderWidth","borderColor","borderStyle","alignSelf","minWidth"],"sourceRoot":"../../../../src","sources":["components/biometrics/FaceVerification.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { useFrameProcessor, VisionCameraProxy } from 'react-native-vision-camera';
|
|
2
|
-
// Note: For production use, you would typically use shared values or state management
|
|
3
|
-
// to communicate results from the worklet back to the React component.
|
|
4
|
-
// This simplified version just logs results for debugging.
|
|
5
|
-
|
|
6
|
-
// Initialize the plugin
|
|
7
|
-
const plugin = VisionCameraProxy.initFrameProcessorPlugin('detectFaces', {});
|
|
8
|
-
export const useFaceVerification = () => {
|
|
9
|
-
const frameProcessor = useFrameProcessor(frame => {
|
|
10
|
-
'worklet';
|
|
11
|
-
|
|
12
|
-
try {
|
|
13
|
-
if (plugin == null) {
|
|
14
|
-
console.error('Failed to load Frame Processor Plugin "detectFaces"!');
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
const result = plugin.call(frame, {});
|
|
18
|
-
|
|
19
|
-
// For debugging - this works in worklets
|
|
20
|
-
if (result && result.faceDetected) {
|
|
21
|
-
console.log('Face detected:', result);
|
|
22
|
-
}
|
|
23
|
-
return result;
|
|
24
|
-
} catch (error) {
|
|
25
|
-
console.error('Face verification error:', error);
|
|
26
|
-
return {
|
|
27
|
-
faceDetected: false,
|
|
28
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}, []);
|
|
32
|
-
return frameProcessor;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
// Utility functions for interpreting results
|
|
36
|
-
export const FaceVerificationUtils = {
|
|
37
|
-
// Check if head is turned left (yaw > 20 degrees)
|
|
38
|
-
isHeadTurnedLeft: result => {
|
|
39
|
-
var _result$headPose;
|
|
40
|
-
return (_result$headPose = result.headPose) !== null && _result$headPose !== void 0 && _result$headPose.yaw ? result.headPose.yaw > 20 : false;
|
|
41
|
-
},
|
|
42
|
-
// Check if head is turned right (yaw < -20 degrees)
|
|
43
|
-
isHeadTurnedRight: result => {
|
|
44
|
-
var _result$headPose2;
|
|
45
|
-
return (_result$headPose2 = result.headPose) !== null && _result$headPose2 !== void 0 && _result$headPose2.yaw ? result.headPose.yaw < -20 : false;
|
|
46
|
-
},
|
|
47
|
-
// Check if head is tilted up (pitch > 10 degrees)
|
|
48
|
-
isHeadTiltedUp: result => {
|
|
49
|
-
var _result$headPose3;
|
|
50
|
-
return (_result$headPose3 = result.headPose) !== null && _result$headPose3 !== void 0 && _result$headPose3.pitch ? result.headPose.pitch > 10 : false;
|
|
51
|
-
},
|
|
52
|
-
// Check if head is tilted down (pitch < -10 degrees)
|
|
53
|
-
isHeadTiltedDown: result => {
|
|
54
|
-
var _result$headPose4;
|
|
55
|
-
return (_result$headPose4 = result.headPose) !== null && _result$headPose4 !== void 0 && _result$headPose4.pitch ? result.headPose.pitch < -10 : false;
|
|
56
|
-
},
|
|
57
|
-
// Check if face is centered (within ±10 degrees)
|
|
58
|
-
isFaceCentered: result => {
|
|
59
|
-
if (!result.headPose) return false;
|
|
60
|
-
const {
|
|
61
|
-
yaw,
|
|
62
|
-
pitch
|
|
63
|
-
} = result.headPose;
|
|
64
|
-
return Math.abs(yaw) <= 10 && Math.abs(pitch) <= 10;
|
|
65
|
-
},
|
|
66
|
-
// Check if smile is confident (high probability)
|
|
67
|
-
isConfidentSmile: result => {
|
|
68
|
-
return result.smileProbability ? result.smileProbability > 0.8 : result.isSmiling || false;
|
|
69
|
-
},
|
|
70
|
-
// Check if both eyes are confidently closed
|
|
71
|
-
isConfidentBlink: result => {
|
|
72
|
-
if (result.leftEyeOpenProbability !== undefined && result.rightEyeOpenProbability !== undefined) {
|
|
73
|
-
return result.leftEyeOpenProbability < 0.2 && result.rightEyeOpenProbability < 0.2;
|
|
74
|
-
}
|
|
75
|
-
return result.isBlinking || false;
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
//# sourceMappingURL=useFaceVerification.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useFrameProcessor","VisionCameraProxy","plugin","initFrameProcessorPlugin","useFaceVerification","frameProcessor","frame","console","error","result","call","faceDetected","log","Error","message","FaceVerificationUtils","isHeadTurnedLeft","_result$headPose","headPose","yaw","isHeadTurnedRight","_result$headPose2","isHeadTiltedUp","_result$headPose3","pitch","isHeadTiltedDown","_result$headPose4","isFaceCentered","Math","abs","isConfidentSmile","smileProbability","isSmiling","isConfidentBlink","leftEyeOpenProbability","undefined","rightEyeOpenProbability","isBlinking"],"sourceRoot":"../../../../src","sources":["components/biometrics/useFaceVerification.ts"],"mappings":"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","ignoreList":[]}
|