@transfergratis/react-native-sdk 0.1.4 → 0.1.6
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/build/api/axios.d.ts +30 -0
- package/build/api/axios.d.ts.map +1 -0
- package/build/api/axios.js +92 -0
- package/build/api/axios.js.map +1 -0
- package/build/components/EnhancedCameraView.d.ts +1 -41
- package/build/components/EnhancedCameraView.d.ts.map +1 -1
- package/build/components/EnhancedCameraView.js +75 -34
- package/build/components/EnhancedCameraView.js.map +1 -1
- package/build/components/EnhancedCameraView.web.d.ts +1 -41
- package/build/components/EnhancedCameraView.web.d.ts.map +1 -1
- package/build/components/EnhancedCameraView.web.js +28 -4
- package/build/components/EnhancedCameraView.web.js.map +1 -1
- package/build/components/KYCElements/CountrySelectionTemplate.d.ts +2 -2
- package/build/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/CountrySelectionTemplate.js +77 -114
- package/build/components/KYCElements/CountrySelectionTemplate.js.map +1 -1
- package/build/components/KYCElements/FileUploadTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/FileUploadTemplate.js +7 -3
- package/build/components/KYCElements/FileUploadTemplate.js.map +1 -1
- package/build/components/KYCElements/IDCardCapture.d.ts +7 -2
- package/build/components/KYCElements/IDCardCapture.d.ts.map +1 -1
- package/build/components/KYCElements/IDCardCapture.js +253 -104
- package/build/components/KYCElements/IDCardCapture.js.map +1 -1
- package/build/components/KYCElements/InitializationStep.d.ts +5 -0
- package/build/components/KYCElements/InitializationStep.d.ts.map +1 -0
- package/build/components/KYCElements/InitializationStep.js +41 -0
- package/build/components/KYCElements/InitializationStep.js.map +1 -0
- package/build/components/KYCElements/LocationCaptureTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/LocationCaptureTemplate.js +15 -13
- package/build/components/KYCElements/LocationCaptureTemplate.js.map +1 -1
- package/build/components/KYCElements/OrientationVideoCapture.d.ts +2 -2
- package/build/components/KYCElements/OrientationVideoCapture.d.ts.map +1 -1
- package/build/components/KYCElements/OrientationVideoCapture.js.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts +2 -2
- package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts +2 -2
- package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureFinal.js.map +1 -1
- package/build/components/KYCElements/ReviewSubmitTemplate.d.ts +12 -0
- package/build/components/KYCElements/ReviewSubmitTemplate.d.ts.map +1 -0
- package/build/components/KYCElements/ReviewSubmitTemplate.js +171 -0
- package/build/components/KYCElements/ReviewSubmitTemplate.js.map +1 -0
- package/build/components/KYCElements/SelfieCaptureTemplate.d.ts +6 -2
- package/build/components/KYCElements/SelfieCaptureTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/SelfieCaptureTemplate.js +137 -38
- package/build/components/KYCElements/SelfieCaptureTemplate.js.map +1 -1
- package/build/components/KYCElements/VerificationProgressTemplate.d.ts +12 -0
- package/build/components/KYCElements/VerificationProgressTemplate.d.ts.map +1 -0
- package/build/components/KYCElements/VerificationProgressTemplate.js +194 -0
- package/build/components/KYCElements/VerificationProgressTemplate.js.map +1 -0
- package/build/components/OverLay/IdCard.d.ts +1 -1
- package/build/components/OverLay/IdCard.d.ts.map +1 -1
- package/build/components/OverLay/IdCard.js +10 -6
- package/build/components/OverLay/IdCard.js.map +1 -1
- package/build/components/OverLay/SelfieOverlay.d.ts +1 -1
- package/build/components/OverLay/SelfieOverlay.d.ts.map +1 -1
- package/build/components/OverLay/SelfieOverlay.js +5 -4
- package/build/components/OverLay/SelfieOverlay.js.map +1 -1
- package/build/components/OverLay/type.d.ts +71 -1
- package/build/components/OverLay/type.d.ts.map +1 -1
- package/build/components/OverLay/type.js.map +1 -1
- package/build/components/TemplateKYCExample.d.ts +4 -1
- package/build/components/TemplateKYCExample.d.ts.map +1 -1
- package/build/components/TemplateKYCExample.js +74 -199
- package/build/components/TemplateKYCExample.js.map +1 -1
- package/build/components/TemplateKYCFlowRefactored.d.ts +3 -2
- package/build/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
- package/build/components/TemplateKYCFlowRefactored.js +64 -40
- package/build/components/TemplateKYCFlowRefactored.js.map +1 -1
- package/build/components/example/OrientationVideoExample.d.ts.map +1 -1
- package/build/components/example/OrientationVideoExample.js +1 -5
- package/build/components/example/OrientationVideoExample.js.map +1 -1
- package/build/config/countriesData.d.ts +3 -0
- package/build/config/countriesData.d.ts.map +1 -0
- package/build/config/countriesData.js +79 -0
- package/build/config/countriesData.js.map +1 -0
- package/build/config/region_mapping.d.ts +3 -0
- package/build/config/region_mapping.d.ts.map +1 -0
- package/build/config/region_mapping.js +687 -0
- package/build/config/region_mapping.js.map +1 -0
- package/build/hooks/useI18n.d.ts +11 -0
- package/build/hooks/useI18n.d.ts.map +1 -0
- package/build/hooks/useI18n.js +37 -0
- package/build/hooks/useI18n.js.map +1 -0
- package/build/hooks/useOrientationVideo.d.ts +1 -2
- package/build/hooks/useOrientationVideo.d.ts.map +1 -1
- package/build/hooks/useOrientationVideo.js +2 -1
- package/build/hooks/useOrientationVideo.js.map +1 -1
- package/build/hooks/useRealtimeVerifier.d.ts +28 -0
- package/build/hooks/useRealtimeVerifier.d.ts.map +1 -0
- package/build/hooks/useRealtimeVerifier.js +91 -0
- package/build/hooks/useRealtimeVerifier.js.map +1 -0
- package/build/hooks/useTemplateKYCFlow.d.ts +6 -3
- package/build/hooks/useTemplateKYCFlow.d.ts.map +1 -1
- package/build/hooks/useTemplateKYCFlow.js +356 -42
- package/build/hooks/useTemplateKYCFlow.js.map +1 -1
- package/build/i18n/en/index.d.ts +168 -0
- package/build/i18n/en/index.d.ts.map +1 -0
- package/build/i18n/en/index.js +195 -0
- package/build/i18n/en/index.js.map +1 -0
- package/build/i18n/fr/index.d.ts +168 -0
- package/build/i18n/fr/index.d.ts.map +1 -0
- package/build/i18n/fr/index.js +194 -0
- package/build/i18n/fr/index.js.map +1 -0
- package/build/i18n/index.d.ts +10 -0
- package/build/i18n/index.d.ts.map +1 -0
- package/build/i18n/index.js +56 -0
- package/build/i18n/index.js.map +1 -0
- package/build/i18n/types.d.ts +153 -0
- package/build/i18n/types.d.ts.map +1 -0
- package/build/i18n/types.js +3 -0
- package/build/i18n/types.js.map +1 -0
- package/build/i18n/usage-example.d.ts +4 -0
- package/build/i18n/usage-example.d.ts.map +1 -0
- package/build/i18n/usage-example.js +189 -0
- package/build/i18n/usage-example.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -0
- package/build/index.js.map +1 -1
- package/build/modules/api/CardAuthentification.d.ts +22 -0
- package/build/modules/api/CardAuthentification.d.ts.map +1 -0
- package/build/modules/api/CardAuthentification.js +107 -0
- package/build/modules/api/CardAuthentification.js.map +1 -0
- package/build/modules/api/KYCService.d.ts +58 -1
- package/build/modules/api/KYCService.d.ts.map +1 -1
- package/build/modules/api/KYCService.js +304 -27
- package/build/modules/api/KYCService.js.map +1 -1
- package/build/modules/api/SelfieVerification.d.ts +3 -0
- package/build/modules/api/SelfieVerification.d.ts.map +1 -0
- package/build/modules/api/SelfieVerification.js +9 -0
- package/build/modules/api/SelfieVerification.js.map +1 -0
- package/build/modules/api/backendApi.d.ts +2 -0
- package/build/modules/api/backendApi.d.ts.map +1 -0
- package/build/modules/api/backendApi.js +6 -0
- package/build/modules/api/backendApi.js.map +1 -0
- package/build/modules/api/types.d.ts +45 -0
- package/build/modules/api/types.d.ts.map +1 -0
- package/build/modules/api/types.js +2 -0
- package/build/modules/api/types.js.map +1 -0
- package/build/types/KYC.types.d.ts +56 -7
- package/build/types/KYC.types.d.ts.map +1 -1
- package/build/types/KYC.types.js +9 -1
- package/build/types/KYC.types.js.map +1 -1
- package/build/utils/cropByObb.d.ts +11 -0
- package/build/utils/cropByObb.d.ts.map +1 -0
- package/build/utils/cropByObb.js +78 -0
- package/build/utils/cropByObb.js.map +1 -0
- package/build/utils/get-document-type-info.d.ts +13 -0
- package/build/utils/get-document-type-info.d.ts.map +1 -0
- package/build/utils/get-document-type-info.js +59 -0
- package/build/utils/get-document-type-info.js.map +1 -0
- package/build/utils/pathToBase64.d.ts +3 -0
- package/build/utils/pathToBase64.d.ts.map +1 -0
- package/build/utils/pathToBase64.js +47 -0
- package/build/utils/pathToBase64.js.map +1 -0
- package/build/utils/remove-duplicate.d.ts +2 -0
- package/build/utils/remove-duplicate.d.ts.map +1 -0
- package/build/utils/remove-duplicate.js +4 -0
- package/build/utils/remove-duplicate.js.map +1 -0
- package/build/web/WebKYCEntry.d.ts +9 -0
- package/build/web/WebKYCEntry.d.ts.map +1 -0
- package/build/web/WebKYCEntry.js +156 -0
- package/build/web/WebKYCEntry.js.map +1 -0
- package/build/web/index.d.ts +2 -0
- package/build/web/index.d.ts.map +1 -0
- package/build/web/index.js +2 -0
- package/build/web/index.js.map +1 -0
- package/package.json +3 -1
- package/src/api/axios.ts +144 -0
- package/src/components/EnhancedCameraView.tsx +96 -78
- package/src/components/EnhancedCameraView.web.tsx +41 -40
- package/src/components/KYCElements/CountrySelectionTemplate.tsx +111 -136
- package/src/components/KYCElements/FileUploadTemplate.tsx +14 -8
- package/src/components/KYCElements/IDCardCapture.tsx +311 -115
- package/src/components/KYCElements/InitializationStep.tsx +53 -0
- package/src/components/KYCElements/LocationCaptureTemplate.tsx +17 -15
- package/src/components/KYCElements/OrientationVideoCapture.tsx +2 -2
- package/src/components/KYCElements/OrientationVideoCaptureEnhanced.tsx +2 -2
- package/src/components/KYCElements/OrientationVideoCaptureFinal.tsx +2 -2
- package/src/components/KYCElements/ReviewSubmitTemplate.tsx +201 -0
- package/src/components/KYCElements/SelfieCaptureTemplate.tsx +174 -57
- package/src/components/KYCElements/VerificationProgressTemplate.tsx +246 -0
- package/src/components/OverLay/IdCard.tsx +17 -9
- package/src/components/OverLay/SelfieOverlay.tsx +6 -5
- package/src/components/OverLay/type.ts +64 -2
- package/src/components/TemplateKYCExample.tsx +80 -200
- package/src/components/TemplateKYCFlowRefactored.tsx +80 -48
- package/src/components/example/OrientationVideoExample.tsx +3 -7
- package/src/config/countriesData.ts +84 -0
- package/src/config/region_mapping.ts +688 -0
- package/src/hooks/useI18n.ts +53 -0
- package/src/hooks/useOrientationVideo.ts +2 -2
- package/src/hooks/useRealtimeVerifier.ts +128 -0
- package/src/hooks/useTemplateKYCFlow.tsx +407 -57
- package/src/i18n/README.md +288 -0
- package/src/i18n/en/index.ts +206 -0
- package/src/i18n/fr/index.ts +205 -0
- package/src/i18n/index.ts +65 -0
- package/src/i18n/types.ts +172 -0
- package/src/i18n/usage-example.tsx +202 -0
- package/src/index.ts +3 -0
- package/src/modules/api/CardAuthentification.ts +114 -0
- package/src/modules/api/KYCService.ts +350 -30
- package/src/modules/api/SelfieVerification.ts +11 -0
- package/src/modules/api/backendApi.ts +8 -0
- package/src/modules/api/types.ts +51 -0
- package/src/types/KYC.types.ts +82 -14
- package/src/utils/cropByObb.ts +99 -0
- package/src/utils/get-document-type-info.ts +62 -0
- package/src/utils/pathToBase64.ts +47 -0
- package/src/utils/remove-duplicate.ts +3 -0
- package/src/web/WebKYCEntry.tsx +215 -0
- package/src/web/index.ts +1 -0
- package/src/types/nativewind.d.ts +0 -2
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import React, { useEffect, useState, useCallback } from 'react';
|
|
2
|
+
import { View, Text, StyleSheet, SafeAreaView } from 'react-native';
|
|
3
|
+
// import { TemplateKYCFlow } from '../components/TemplateKYCFlowRefactored';
|
|
4
|
+
// import { KYCTemplate } from '../types/KYC.types';
|
|
5
|
+
import { useI18n } from '../hooks/useI18n';
|
|
6
|
+
import { TemplateKYCExample } from '../components/TemplateKYCExample';
|
|
7
|
+
const WebKYCEntry = ({ onComplete, onError, onCancel, }) => {
|
|
8
|
+
const { setLocale } = useI18n();
|
|
9
|
+
const [urlParams, setUrlParams] = useState({});
|
|
10
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
11
|
+
const [error, setError] = useState(null);
|
|
12
|
+
// Parse URL parameters
|
|
13
|
+
const parseUrlParams = useCallback(() => {
|
|
14
|
+
if (typeof window === 'undefined')
|
|
15
|
+
return {};
|
|
16
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
17
|
+
return {
|
|
18
|
+
token: urlParams.get('token') || undefined,
|
|
19
|
+
return_url: urlParams.get('return_url') || undefined,
|
|
20
|
+
lang: urlParams.get('lang') || 'en',
|
|
21
|
+
theme: urlParams.get('theme') || 'light',
|
|
22
|
+
kyc_id: urlParams.get('kyc_id') || undefined,
|
|
23
|
+
};
|
|
24
|
+
}, []);
|
|
25
|
+
// Safe redirect function with validation
|
|
26
|
+
const redirectToReturnUrl = useCallback((params) => {
|
|
27
|
+
const { return_url } = urlParams;
|
|
28
|
+
if (!return_url) {
|
|
29
|
+
console.warn('No return_url provided');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Basic URL validation - ensure it's a valid URL
|
|
33
|
+
try {
|
|
34
|
+
const returnUrl = new URL(return_url);
|
|
35
|
+
// Optional: Add domain allowlist validation here
|
|
36
|
+
// const allowedDomains = ['example.com', 'trusted-site.com'];
|
|
37
|
+
// if (!allowedDomains.some(domain => returnUrl.hostname.endsWith(domain))) {
|
|
38
|
+
// console.error('Return URL not in allowlist');
|
|
39
|
+
// return;
|
|
40
|
+
// }
|
|
41
|
+
// Build redirect URL with parameters
|
|
42
|
+
const redirectUrl = new URL(returnUrl);
|
|
43
|
+
redirectUrl.searchParams.set('status', params.status);
|
|
44
|
+
if (params.kyc_id) {
|
|
45
|
+
redirectUrl.searchParams.set('kyc_id', params.kyc_id);
|
|
46
|
+
}
|
|
47
|
+
if (params.message) {
|
|
48
|
+
redirectUrl.searchParams.set('message', params.message);
|
|
49
|
+
}
|
|
50
|
+
if (params.sig) {
|
|
51
|
+
redirectUrl.searchParams.set('sig', params.sig);
|
|
52
|
+
}
|
|
53
|
+
// Optional: Send postMessage to parent if in iframe
|
|
54
|
+
if (window.parent !== window) {
|
|
55
|
+
window.parent.postMessage({
|
|
56
|
+
type: 'kyc_result',
|
|
57
|
+
status: params.status,
|
|
58
|
+
kyc_id: params.kyc_id,
|
|
59
|
+
message: params.message,
|
|
60
|
+
}, '*');
|
|
61
|
+
}
|
|
62
|
+
// Redirect to return URL
|
|
63
|
+
window.location.href = redirectUrl.toString();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Invalid return URL:', error);
|
|
67
|
+
setError('Invalid return URL provided');
|
|
68
|
+
}
|
|
69
|
+
}, [urlParams]);
|
|
70
|
+
// Handle KYC completion
|
|
71
|
+
const handleComplete = useCallback((data) => {
|
|
72
|
+
console.log('KYC completed:', data);
|
|
73
|
+
redirectToReturnUrl({
|
|
74
|
+
status: 'completed',
|
|
75
|
+
kyc_id: data.session_id || urlParams.kyc_id,
|
|
76
|
+
message: 'KYC process completed successfully',
|
|
77
|
+
});
|
|
78
|
+
onComplete?.(data);
|
|
79
|
+
}, [redirectToReturnUrl, urlParams.kyc_id, onComplete]);
|
|
80
|
+
// Handle KYC error
|
|
81
|
+
const handleError = useCallback((error) => {
|
|
82
|
+
console.error('KYC error:', error);
|
|
83
|
+
redirectToReturnUrl({
|
|
84
|
+
status: 'error',
|
|
85
|
+
kyc_id: urlParams.kyc_id,
|
|
86
|
+
message: error,
|
|
87
|
+
});
|
|
88
|
+
onError?.(error);
|
|
89
|
+
}, [redirectToReturnUrl, urlParams.kyc_id, onError]);
|
|
90
|
+
// Handle KYC cancellation
|
|
91
|
+
const handleCancel = useCallback(() => {
|
|
92
|
+
console.log('KYC cancelled');
|
|
93
|
+
redirectToReturnUrl({
|
|
94
|
+
status: 'cancelled',
|
|
95
|
+
kyc_id: urlParams.kyc_id,
|
|
96
|
+
message: 'KYC process was cancelled',
|
|
97
|
+
});
|
|
98
|
+
onCancel?.();
|
|
99
|
+
}, [redirectToReturnUrl, urlParams.kyc_id, onCancel]);
|
|
100
|
+
// Initialize component
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
try {
|
|
103
|
+
const params = parseUrlParams();
|
|
104
|
+
setUrlParams(params);
|
|
105
|
+
// Set language if provided
|
|
106
|
+
if (params.lang) {
|
|
107
|
+
setLocale(params.lang);
|
|
108
|
+
}
|
|
109
|
+
setIsLoading(false);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error('Error parsing URL parameters:', error);
|
|
113
|
+
setError('Error parsing URL parameters');
|
|
114
|
+
setIsLoading(false);
|
|
115
|
+
}
|
|
116
|
+
}, [parseUrlParams, setLocale]);
|
|
117
|
+
if (isLoading) {
|
|
118
|
+
return (<View style={styles.container}>
|
|
119
|
+
<Text style={styles.loadingText}>Loading KYC process...</Text>
|
|
120
|
+
</View>);
|
|
121
|
+
}
|
|
122
|
+
if (error) {
|
|
123
|
+
return (<View style={styles.container}>
|
|
124
|
+
<Text style={styles.errorText}>Error: {error}</Text>
|
|
125
|
+
</View>);
|
|
126
|
+
}
|
|
127
|
+
if (!urlParams.token) {
|
|
128
|
+
return (<View style={styles.container}>
|
|
129
|
+
<Text style={styles.errorText}>No token provided in URL parameters</Text>
|
|
130
|
+
</View>);
|
|
131
|
+
}
|
|
132
|
+
return (<SafeAreaView style={styles.container}>
|
|
133
|
+
<TemplateKYCExample onComplete={handleComplete} onCancel={handleCancel} onError={handleError} language={urlParams.lang || 'en'} API_KEY={urlParams.token}/>
|
|
134
|
+
</SafeAreaView>);
|
|
135
|
+
};
|
|
136
|
+
const styles = StyleSheet.create({
|
|
137
|
+
container: {
|
|
138
|
+
flex: 1,
|
|
139
|
+
backgroundColor: '#f5f5f5',
|
|
140
|
+
},
|
|
141
|
+
loadingText: {
|
|
142
|
+
fontSize: 18,
|
|
143
|
+
textAlign: 'center',
|
|
144
|
+
marginTop: 50,
|
|
145
|
+
color: '#666',
|
|
146
|
+
},
|
|
147
|
+
errorText: {
|
|
148
|
+
fontSize: 16,
|
|
149
|
+
textAlign: 'center',
|
|
150
|
+
marginTop: 50,
|
|
151
|
+
color: '#dc2626',
|
|
152
|
+
paddingHorizontal: 20,
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
export default WebKYCEntry;
|
|
156
|
+
//# sourceMappingURL=WebKYCEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebKYCEntry.js","sourceRoot":"","sources":["../../src/web/WebKYCEntry.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState, useCallback } from 'react';\nimport { View, Text, StyleSheet, SafeAreaView } from 'react-native';\n// import { TemplateKYCFlow } from '../components/TemplateKYCFlowRefactored';\n// import { KYCTemplate } from '../types/KYC.types';\nimport { useI18n } from '../hooks/useI18n';\nimport { TemplateKYCExample } from '../components/TemplateKYCExample';\n\ninterface WebKYCEntryProps {\n onComplete?: (data: any) => void;\n onError?: (error: string) => void;\n onCancel?: () => void;\n}\n\ninterface URLParams {\n token?: string;\n return_url?: string;\n lang?: string;\n theme?: string;\n kyc_id?: string;\n}\n\nconst WebKYCEntry: React.FC<WebKYCEntryProps> = ({\n onComplete,\n onError,\n onCancel,\n}) => {\n const { setLocale } = useI18n();\n const [urlParams, setUrlParams] = useState<URLParams>({});\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Parse URL parameters\n const parseUrlParams = useCallback((): URLParams => {\n if (typeof window === 'undefined') return {};\n \n const urlParams = new URLSearchParams(window.location.search);\n return {\n token: urlParams.get('token') || undefined,\n return_url: urlParams.get('return_url') || undefined,\n lang: urlParams.get('lang') || 'en',\n theme: urlParams.get('theme') || 'light',\n kyc_id: urlParams.get('kyc_id') || undefined,\n };\n }, []);\n\n // Safe redirect function with validation\n const redirectToReturnUrl = useCallback((params: {\n status: 'completed' | 'cancelled' | 'error';\n kyc_id?: string;\n message?: string;\n sig?: string;\n }) => {\n const { return_url } = urlParams;\n \n if (!return_url) {\n console.warn('No return_url provided');\n return;\n }\n\n // Basic URL validation - ensure it's a valid URL\n try {\n const returnUrl = new URL(return_url);\n \n // Optional: Add domain allowlist validation here\n // const allowedDomains = ['example.com', 'trusted-site.com'];\n // if (!allowedDomains.some(domain => returnUrl.hostname.endsWith(domain))) {\n // console.error('Return URL not in allowlist');\n // return;\n // }\n\n // Build redirect URL with parameters\n const redirectUrl = new URL(returnUrl);\n redirectUrl.searchParams.set('status', params.status);\n \n if (params.kyc_id) {\n redirectUrl.searchParams.set('kyc_id', params.kyc_id);\n }\n \n if (params.message) {\n redirectUrl.searchParams.set('message', params.message);\n }\n \n if (params.sig) {\n redirectUrl.searchParams.set('sig', params.sig);\n }\n\n // Optional: Send postMessage to parent if in iframe\n if (window.parent !== window) {\n window.parent.postMessage({\n type: 'kyc_result',\n status: params.status,\n kyc_id: params.kyc_id,\n message: params.message,\n }, '*');\n }\n\n // Redirect to return URL\n window.location.href = redirectUrl.toString();\n } catch (error) {\n console.error('Invalid return URL:', error);\n setError('Invalid return URL provided');\n }\n }, [urlParams]);\n\n // Handle KYC completion\n const handleComplete = useCallback((data: any) => {\n console.log('KYC completed:', data);\n redirectToReturnUrl({\n status: 'completed',\n kyc_id: data.session_id || urlParams.kyc_id,\n message: 'KYC process completed successfully',\n });\n onComplete?.(data);\n }, [redirectToReturnUrl, urlParams.kyc_id, onComplete]);\n\n // Handle KYC error\n const handleError = useCallback((error: string) => {\n console.error('KYC error:', error);\n redirectToReturnUrl({\n status: 'error',\n kyc_id: urlParams.kyc_id,\n message: error,\n });\n onError?.(error);\n }, [redirectToReturnUrl, urlParams.kyc_id, onError]);\n\n // Handle KYC cancellation\n const handleCancel = useCallback(() => {\n console.log('KYC cancelled');\n redirectToReturnUrl({\n status: 'cancelled',\n kyc_id: urlParams.kyc_id,\n message: 'KYC process was cancelled',\n });\n onCancel?.();\n }, [redirectToReturnUrl, urlParams.kyc_id, onCancel]);\n\n // Initialize component\n useEffect(() => {\n try {\n const params = parseUrlParams();\n setUrlParams(params);\n \n // Set language if provided\n if (params.lang) {\n setLocale(params.lang);\n }\n \n setIsLoading(false);\n } catch (error) {\n console.error('Error parsing URL parameters:', error);\n setError('Error parsing URL parameters');\n setIsLoading(false);\n }\n }, [parseUrlParams, setLocale]);\n\n\n if (isLoading) {\n return (\n <View style={styles.container}>\n <Text style={styles.loadingText}>Loading KYC process...</Text>\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={styles.container}>\n <Text style={styles.errorText}>Error: {error}</Text>\n </View>\n );\n }\n\n if (!urlParams.token) {\n return (\n <View style={styles.container}>\n <Text style={styles.errorText}>No token provided in URL parameters</Text>\n </View>\n );\n }\n\n return (\n <SafeAreaView style={styles.container}>\n <TemplateKYCExample \n onComplete={handleComplete} \n onCancel={handleCancel} \n onError={handleError}\n language={urlParams.lang || 'en'}\n API_KEY={urlParams.token}\n />\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#f5f5f5',\n },\n loadingText: {\n fontSize: 18,\n textAlign: 'center',\n marginTop: 50,\n color: '#666',\n },\n errorText: {\n fontSize: 16,\n textAlign: 'center',\n marginTop: 50,\n color: '#dc2626',\n paddingHorizontal: 20,\n },\n});\n\nexport default WebKYCEntry;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC","sourcesContent":["export { default as WebKYCEntry } from './WebKYCEntry';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@transfergratis/react-native-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "transfergratis react native sdk",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"axios": "^1.11.0",
|
|
49
|
+
"i18n-js": "4.5.1",
|
|
49
50
|
"iconsax-react-nativejs": "^0.0.8",
|
|
50
51
|
"zustand": "^5.0.8"
|
|
51
52
|
},
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
"peerDependencies": {
|
|
60
61
|
"expo": "*",
|
|
61
62
|
"expo-location": "~18.0.0",
|
|
63
|
+
"expo-image-manipulator": "~13.1.7",
|
|
62
64
|
"react": "*",
|
|
63
65
|
"react-native": "*",
|
|
64
66
|
"react-native-svg": "15.11.2",
|
package/src/api/axios.ts
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import axios, {
|
|
2
|
+
AxiosInstance,
|
|
3
|
+
AxiosRequestConfig,
|
|
4
|
+
InternalAxiosRequestConfig,
|
|
5
|
+
AxiosResponse,
|
|
6
|
+
} from 'axios';
|
|
7
|
+
|
|
8
|
+
export type ApiConfiguration = {
|
|
9
|
+
baseURL: string;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
authToken?: string;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type ApiErrorData = {
|
|
16
|
+
message?: string;
|
|
17
|
+
code?: string | number;
|
|
18
|
+
details?: unknown;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export class HttpClient {
|
|
22
|
+
private instance: AxiosInstance;
|
|
23
|
+
private apiKey?: string;
|
|
24
|
+
private authToken?: string;
|
|
25
|
+
|
|
26
|
+
constructor(configuration: ApiConfiguration) {
|
|
27
|
+
this.apiKey = configuration.apiKey;
|
|
28
|
+
this.authToken = configuration.authToken;
|
|
29
|
+
this.instance = axios.create({
|
|
30
|
+
baseURL: configuration.baseURL,
|
|
31
|
+
timeout: configuration.timeoutMs ?? 15000,
|
|
32
|
+
headers: {
|
|
33
|
+
Accept: 'application/json',
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
this.instance.interceptors.request.use(
|
|
39
|
+
(request: InternalAxiosRequestConfig) => {
|
|
40
|
+
const headers = request.headers ?? {};
|
|
41
|
+
if (this.apiKey && !headers['x-api-key']) {
|
|
42
|
+
headers['x-api-key'] = this.apiKey;
|
|
43
|
+
}
|
|
44
|
+
if (this.authToken && !headers.Authorization) {
|
|
45
|
+
headers.Authorization = `Bearer ${this.authToken}`;
|
|
46
|
+
}
|
|
47
|
+
request.headers = headers;
|
|
48
|
+
return request;
|
|
49
|
+
},
|
|
50
|
+
(error) => Promise.reject(error)
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
this.instance.interceptors.response.use(
|
|
54
|
+
(response: AxiosResponse) => response,
|
|
55
|
+
(error) => {
|
|
56
|
+
if (!error.response) {
|
|
57
|
+
return Promise.reject({
|
|
58
|
+
message: 'Network error. Please check your connection.',
|
|
59
|
+
code: 'network_error',
|
|
60
|
+
details: error?.message,
|
|
61
|
+
} as ApiErrorData);
|
|
62
|
+
}
|
|
63
|
+
const { status, data } = error.response as AxiosResponse<ApiErrorData>;
|
|
64
|
+
if (status === 401) {
|
|
65
|
+
return Promise.reject({
|
|
66
|
+
message: data?.message || 'Unauthorized',
|
|
67
|
+
code: 401,
|
|
68
|
+
details: data,
|
|
69
|
+
} as ApiErrorData);
|
|
70
|
+
}
|
|
71
|
+
return Promise.reject({
|
|
72
|
+
message: data?.message || 'Request failed',
|
|
73
|
+
code: status,
|
|
74
|
+
details: data,
|
|
75
|
+
} as ApiErrorData);
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
setAuthToken(token?: string): void {
|
|
81
|
+
this.authToken = token;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
setApiKey(key?: string): void {
|
|
85
|
+
this.apiKey = key;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
setBaseURL(url: string): void {
|
|
89
|
+
this.instance.defaults.baseURL = url;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async get<T = unknown>(url: string, requestConfig?: AxiosRequestConfig): Promise<T> {
|
|
93
|
+
const res = await this.instance.get<T>(url, requestConfig);
|
|
94
|
+
return res.data as T;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async post<T = unknown, B = unknown>(
|
|
98
|
+
url: string,
|
|
99
|
+
body?: B,
|
|
100
|
+
requestConfig?: AxiosRequestConfig
|
|
101
|
+
): Promise<T> {
|
|
102
|
+
const res = await this.instance.post<T>(url, body, requestConfig);
|
|
103
|
+
return res.data as T;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async put<T = unknown, B = unknown>(
|
|
107
|
+
url: string,
|
|
108
|
+
body?: B,
|
|
109
|
+
requestConfig?: AxiosRequestConfig
|
|
110
|
+
): Promise<T> {
|
|
111
|
+
const res = await this.instance.put<T>(url, body, requestConfig);
|
|
112
|
+
return res.data as T;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async patch<T = unknown, B = unknown>(
|
|
116
|
+
url: string,
|
|
117
|
+
body?: B,
|
|
118
|
+
requestConfig?: AxiosRequestConfig
|
|
119
|
+
): Promise<T> {
|
|
120
|
+
const res = await this.instance.patch<T>(url, body, requestConfig);
|
|
121
|
+
return res.data as T;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async delete<T = unknown>(url: string, requestConfig?: AxiosRequestConfig): Promise<T> {
|
|
125
|
+
const res = await this.instance.delete<T>(url, requestConfig);
|
|
126
|
+
return res.data as T;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export default HttpClient;
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
// ml service api
|
|
134
|
+
export const mlService = new HttpClient({
|
|
135
|
+
baseURL: 'https://api.ml.transfergratis.com',
|
|
136
|
+
apiKey: 'your-api-key',
|
|
137
|
+
});
|
|
138
|
+
// backedn service api
|
|
139
|
+
export const backendService = new HttpClient({
|
|
140
|
+
baseURL: 'https://api.backend.transfergratis.com',
|
|
141
|
+
apiKey: 'your-api-key',
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
|