banking_dcb_sdk_react_native 1.0.6 → 1.0.8
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/BankingDcbSdkReactNative.podspec +28 -0
- package/lib/module/helpers/webview.js +116 -58
- package/lib/module/helpers/webview.js.map +1 -1
- package/lib/typescript/src/helpers/webview.d.ts +8 -0
- package/lib/typescript/src/helpers/webview.d.ts.map +1 -1
- package/package.json +3 -4
- package/src/helpers/webview.tsx +135 -57
- package/PartnerReactNativeSdk.podspec +0 -31
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
# 👇 New pod name, matching your new SDK brand
|
|
7
|
+
s.name = "BankingDcbSdkReactNative"
|
|
8
|
+
s.version = package["version"]
|
|
9
|
+
s.summary = package["description"]
|
|
10
|
+
s.homepage = package["homepage"]
|
|
11
|
+
s.license = package["license"]
|
|
12
|
+
s.authors = package["author"]
|
|
13
|
+
|
|
14
|
+
# If your RN template defines this, keep it.
|
|
15
|
+
# If CocoaPods ever complains, replace with: { :ios => "13.0" } or similar.
|
|
16
|
+
s.platforms = { :ios => min_ios_version_supported }
|
|
17
|
+
|
|
18
|
+
# 👇 Point to the new repo, fix the extra `.git`
|
|
19
|
+
s.source = {
|
|
20
|
+
:git => "https://github.com/spense-fintech/banking-dcb-sdk-react-native.git",
|
|
21
|
+
:tag => s.version.to_s
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
s.source_files = "ios/**/*.{h,m,mm,cpp}"
|
|
25
|
+
s.exclude_files = "ios/generated/**"
|
|
26
|
+
|
|
27
|
+
s.dependency "React-Core"
|
|
28
|
+
end
|
|
@@ -8,68 +8,65 @@ import { check, PERMISSIONS, request, RESULTS } from 'react-native-permissions';
|
|
|
8
8
|
import FileViewer from 'react-native-file-viewer';
|
|
9
9
|
import RNFS from 'react-native-fs';
|
|
10
10
|
import CookieManager from '@react-native-cookies/cookies';
|
|
11
|
-
import
|
|
12
|
-
import IntentLauncher, { IntentConstant } from 'react-native-intent-launcher';
|
|
11
|
+
import SendIntentAndroid from 'react-native-send-intent';
|
|
13
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
13
|
const PKG = {
|
|
15
14
|
gmail: 'com.google.android.gm',
|
|
16
15
|
outlook: 'com.microsoft.office.outlook',
|
|
17
16
|
yahoo: 'com.yahoo.mobile.client.android.mail'
|
|
18
17
|
};
|
|
19
|
-
|
|
20
|
-
// Explicit launcher activities for each app
|
|
21
|
-
const CLASS = {
|
|
22
|
-
gmail: 'com.google.android.gm.ConversationListActivityGmail',
|
|
23
|
-
outlook: 'com.microsoft.office.outlook.MainActivity',
|
|
24
|
-
yahoo: 'com.yahoo.mobile.client.android.mail.activity.MainActivity'
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
// Deep link schemes we'll try as a fallback
|
|
28
18
|
const SCHEME = {
|
|
29
19
|
gmail: 'googlegmail://',
|
|
30
20
|
outlook: 'ms-outlook://',
|
|
31
21
|
yahoo: 'ymail://'
|
|
32
22
|
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Try to open a specific mail app, like Gmail.
|
|
26
|
+
* Returns true if something was opened, false otherwise.
|
|
27
|
+
*
|
|
28
|
+
* Order of attempts:
|
|
29
|
+
* 1. openApp(<package>) via react-native-send-intent
|
|
30
|
+
* 2. Linking.openURL(<custom scheme>) as fallback
|
|
31
|
+
*/
|
|
33
32
|
export async function openMailAppIntent(app) {
|
|
34
33
|
if (Platform.OS !== 'android') {
|
|
34
|
+
// iOS? We don't do anything special here. Just say "not handled".
|
|
35
35
|
return false;
|
|
36
36
|
}
|
|
37
|
-
const
|
|
38
|
-
const className = CLASS[app];
|
|
37
|
+
const pkg = PKG[app];
|
|
39
38
|
const scheme = SCHEME[app];
|
|
40
39
|
|
|
41
|
-
// 1
|
|
40
|
+
// Step 1: Try launching the package directly.
|
|
42
41
|
try {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
} catch (e) {
|
|
52
|
-
console.log('IntentLauncher.startActivity failed for', app, e);
|
|
42
|
+
// openApp(packageName) resolves to boolean: wasOpened
|
|
43
|
+
// according to the lib docs. :contentReference[oaicite:3]{index=3}
|
|
44
|
+
const wasOpened = await SendIntentAndroid.openApp(pkg, {});
|
|
45
|
+
if (wasOpened) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
} catch (err) {
|
|
49
|
+
console.log(`SDK:LOG: [mailIntent] openApp(${pkg}) failed:`, err);
|
|
53
50
|
}
|
|
54
51
|
|
|
55
|
-
// 2
|
|
52
|
+
// Step 2: Fallback to the custom scheme.
|
|
56
53
|
try {
|
|
57
54
|
const canOpen = await Linking.canOpenURL(scheme);
|
|
58
55
|
if (canOpen) {
|
|
59
56
|
await Linking.openURL(scheme);
|
|
60
57
|
return true;
|
|
61
58
|
}
|
|
62
|
-
} catch (
|
|
63
|
-
console.log(
|
|
59
|
+
} catch (err2) {
|
|
60
|
+
console.log(`SDK:LOG: [mailIntent] Linking fallback (${scheme}) failed:`, err2);
|
|
64
61
|
}
|
|
65
62
|
return false;
|
|
66
63
|
}
|
|
67
64
|
const clearAllCookies = async () => {
|
|
68
65
|
try {
|
|
69
66
|
await CookieManager.clearAll(true);
|
|
70
|
-
console.log('clearing cookies');
|
|
67
|
+
console.log('SDK:LOG: clearing cookies');
|
|
71
68
|
} catch (e) {
|
|
72
|
-
console.error('Failed to clear cookies:', e);
|
|
69
|
+
console.error('SDK:LOG: Failed to clear cookies:', e);
|
|
73
70
|
}
|
|
74
71
|
};
|
|
75
72
|
export const WebView = ({
|
|
@@ -82,7 +79,9 @@ export const WebView = ({
|
|
|
82
79
|
}) => {
|
|
83
80
|
const webviewRef = useRef(null);
|
|
84
81
|
const [canGoBack, setCanGoBack] = useState(false);
|
|
85
|
-
const
|
|
82
|
+
const canGoBackRef = useRef(false);
|
|
83
|
+
const hasUserClosedRef = useRef(false);
|
|
84
|
+
|
|
86
85
|
// const [hasRedirected, setHasRedirected] = useState(false);
|
|
87
86
|
const [, setToast] = useState(null);
|
|
88
87
|
const handleExternalUrl = async url => {
|
|
@@ -95,7 +94,7 @@ export const WebView = ({
|
|
|
95
94
|
if (Platform.OS === 'android') {
|
|
96
95
|
ToastAndroid.show('Oops! Something went wrong. Please try again.', ToastAndroid.LONG);
|
|
97
96
|
}
|
|
98
|
-
console.log('Application not found to open link');
|
|
97
|
+
console.log('SDK:LOG: Application not found to open link');
|
|
99
98
|
}
|
|
100
99
|
};
|
|
101
100
|
const showToast_with_code_message = syntheticEvent => {
|
|
@@ -131,7 +130,7 @@ export const WebView = ({
|
|
|
131
130
|
};
|
|
132
131
|
const downloadAndOpenFile = async fileUrl => {
|
|
133
132
|
try {
|
|
134
|
-
console.log('Starting file download...', fileUrl);
|
|
133
|
+
console.log('SDK:LOG: Starting file download...', fileUrl);
|
|
135
134
|
|
|
136
135
|
// Get cookies using CookieManager
|
|
137
136
|
let cookieString = '';
|
|
@@ -139,7 +138,7 @@ export const WebView = ({
|
|
|
139
138
|
const cookies = await CookieManager.get(fileUrl);
|
|
140
139
|
cookieString = Object.keys(cookies).map(key => `${key}=${cookies[key]?.value ?? ''}`).join('; ');
|
|
141
140
|
} catch (e) {
|
|
142
|
-
console.error('Failed to get cookies:', e);
|
|
141
|
+
console.error('SDK:LOG: Failed to get cookies:', e);
|
|
143
142
|
}
|
|
144
143
|
|
|
145
144
|
// Create a clean filename from the URL
|
|
@@ -156,7 +155,7 @@ export const WebView = ({
|
|
|
156
155
|
if (!downloadPath) {
|
|
157
156
|
throw new Error('Could not determine download path');
|
|
158
157
|
}
|
|
159
|
-
console.log('Downloading to:', downloadPath);
|
|
158
|
+
console.log('SDK:LOG: Downloading to:', downloadPath);
|
|
160
159
|
const options = {
|
|
161
160
|
fromUrl: fileUrl,
|
|
162
161
|
toFile: downloadPath,
|
|
@@ -167,12 +166,12 @@ export const WebView = ({
|
|
|
167
166
|
},
|
|
168
167
|
background: true,
|
|
169
168
|
begin: res => {
|
|
170
|
-
console.log('Download started with headers:', res);
|
|
169
|
+
console.log('SDK:LOG: Download started with headers:', res);
|
|
171
170
|
}
|
|
172
171
|
};
|
|
173
172
|
const response = await RNFS.downloadFile(options).promise;
|
|
174
173
|
if (response.statusCode === 200) {
|
|
175
|
-
console.log('File downloaded to:', downloadPath);
|
|
174
|
+
console.log('SDK:LOG: File downloaded to:', downloadPath);
|
|
176
175
|
if (Platform.OS === 'android') {
|
|
177
176
|
ToastAndroid.show('File downloaded successfully', ToastAndroid.SHORT);
|
|
178
177
|
}
|
|
@@ -188,45 +187,45 @@ export const WebView = ({
|
|
|
188
187
|
throw new Error(`Download failed with status ${response.statusCode}`);
|
|
189
188
|
}
|
|
190
189
|
} catch (error) {
|
|
191
|
-
console.error('File download/open error:', error);
|
|
190
|
+
console.error('SDK:LOG: File download/open error:', error);
|
|
192
191
|
}
|
|
193
192
|
};
|
|
194
193
|
const handleOnShouldStartLoadWithRequest = event => {
|
|
195
194
|
const {
|
|
196
195
|
url
|
|
197
196
|
} = event;
|
|
198
|
-
console.log('URL:', url);
|
|
199
|
-
if (url === 'about:blank' || url === 'about:srcdoc') {
|
|
197
|
+
console.log('SDK:LOG: WEBVIEW URL:', url);
|
|
198
|
+
if (!url || url === 'about:blank' || url === 'about:srcdoc') {
|
|
200
199
|
return true;
|
|
201
200
|
}
|
|
202
201
|
if (Platform.OS === 'android' && url) {
|
|
203
202
|
if (url.includes('ms-outlook://')) {
|
|
204
|
-
console.log('Intent to open Outlook detected');
|
|
203
|
+
console.log('SDK:LOG: Intent to open Outlook detected');
|
|
205
204
|
openMailAppIntent('outlook').then(ok => !ok && ToastAndroid.show('Outlook app not found', ToastAndroid.SHORT));
|
|
206
205
|
return false; // cancel WebView navigation
|
|
207
206
|
}
|
|
208
207
|
if (url.includes('googlegmail://')) {
|
|
209
|
-
console.log('Intent to open Gmail detected');
|
|
208
|
+
console.log('SDK:LOG: Intent to open Gmail detected');
|
|
210
209
|
openMailAppIntent('gmail').then(ok => !ok && ToastAndroid.show('Gmail app not found', ToastAndroid.SHORT));
|
|
211
210
|
return false;
|
|
212
211
|
}
|
|
213
212
|
if (url.includes('ymail://')) {
|
|
214
|
-
console.log('Intent to open Yahoo Mail detected');
|
|
213
|
+
console.log('SDK:LOG: Intent to open Yahoo Mail detected');
|
|
215
214
|
openMailAppIntent('yahoo').then(ok => !ok && ToastAndroid.show('Yahoo Mail app not found', ToastAndroid.SHORT));
|
|
216
215
|
return false;
|
|
217
216
|
}
|
|
218
217
|
}
|
|
219
218
|
if (url?.includes('/session-expired?status=') || url?.includes('/redirect?status=')) {
|
|
220
|
-
console.log('overriding url');
|
|
219
|
+
console.log('SDK:LOG: overriding url');
|
|
221
220
|
const status = getQueryParam(url, 'status');
|
|
222
|
-
console.log('Status thrown from webview ', status);
|
|
221
|
+
console.log('SDK:LOG: Status thrown from webview ', status);
|
|
223
222
|
StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
224
223
|
clearAllCookies();
|
|
225
224
|
onCallback?.(WebViewCallback.redirect(status ?? undefined));
|
|
226
225
|
return false;
|
|
227
226
|
}
|
|
228
227
|
if (url?.includes('/api/user/redirect')) {
|
|
229
|
-
console.log('overriding redirect url');
|
|
228
|
+
console.log('SDK:LOG: overriding redirect url');
|
|
230
229
|
StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
231
230
|
clearAllCookies();
|
|
232
231
|
onCallback?.(WebViewCallback.redirect('SESSION_EXPIRED'));
|
|
@@ -236,12 +235,12 @@ export const WebView = ({
|
|
|
236
235
|
// Handle whitelisted URLs
|
|
237
236
|
const isWhitelisted = whitelistedUrls.some(white => url.includes(white)) || hostName && url.includes(hostName);
|
|
238
237
|
if (!isWhitelisted && url && url !== 'about:blank' && url !== 'about:srcdoc') {
|
|
239
|
-
console.log('External URL detected:', url);
|
|
238
|
+
console.log('SDK:LOG: External URL detected:', url);
|
|
240
239
|
handleExternalUrl(url);
|
|
241
240
|
return false;
|
|
242
241
|
}
|
|
243
242
|
if (url.includes('.pdf') || url.includes('/statements/') || url.includes('/download_statements')) {
|
|
244
|
-
console.log('File download URL detected:', url);
|
|
243
|
+
console.log('SDK:LOG: File download URL detected:', url);
|
|
245
244
|
downloadAndOpenFile(url);
|
|
246
245
|
return false;
|
|
247
246
|
}
|
|
@@ -272,17 +271,44 @@ export const WebView = ({
|
|
|
272
271
|
});
|
|
273
272
|
|
|
274
273
|
// Cookie injection script
|
|
275
|
-
|
|
276
274
|
const injectedJavaScript = `
|
|
275
|
+
(function() {
|
|
276
|
+
function safePost(msg) {
|
|
277
|
+
try {
|
|
278
|
+
if (window.ReactNativeWebView) {
|
|
279
|
+
window.ReactNativeWebView.postMessage(JSON.stringify(msg));
|
|
280
|
+
}
|
|
281
|
+
} catch (e) {}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Preserve any existing window.onerror
|
|
285
|
+
var previousOnError = window.onerror || null;
|
|
277
286
|
window.onerror = function(message, source, lineno, colno, error) {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
287
|
+
try {
|
|
288
|
+
if (String(message || '').indexOf('RATE_LIMIT_USER') !== -1 &&
|
|
289
|
+
window.ReactNativeWebView) {
|
|
290
|
+
safePost({ type: 'RATE_LIMIT_ERROR' });
|
|
291
|
+
}
|
|
292
|
+
} catch (e) {}
|
|
293
|
+
if (typeof previousOnError === 'function') {
|
|
294
|
+
try { return previousOnError.apply(this, arguments); } catch (e) {}
|
|
282
295
|
}
|
|
283
296
|
};
|
|
284
|
-
|
|
285
|
-
|
|
297
|
+
|
|
298
|
+
// Patch history.back() to notify the app
|
|
299
|
+
if (window.history && typeof window.history.back === 'function') {
|
|
300
|
+
var originalBack = window.history.back;
|
|
301
|
+
window.history.back = function() {
|
|
302
|
+
safePost({
|
|
303
|
+
type: 'HISTORY_BACK_CALLED',
|
|
304
|
+
href: window.location.href
|
|
305
|
+
});
|
|
306
|
+
return originalBack.apply(this, arguments);
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
})();
|
|
310
|
+
true;
|
|
311
|
+
`;
|
|
286
312
|
const requestPermission = async permission => {
|
|
287
313
|
try {
|
|
288
314
|
const result = await check(permission);
|
|
@@ -292,7 +318,7 @@ export const WebView = ({
|
|
|
292
318
|
}
|
|
293
319
|
return result === RESULTS.GRANTED;
|
|
294
320
|
} catch (error) {
|
|
295
|
-
console.error('Permission request failed:', error);
|
|
321
|
+
console.error('SDK:LOG: Permission request failed:', error);
|
|
296
322
|
return false;
|
|
297
323
|
}
|
|
298
324
|
};
|
|
@@ -300,7 +326,7 @@ export const WebView = ({
|
|
|
300
326
|
const {
|
|
301
327
|
resources
|
|
302
328
|
} = event.nativeEvent;
|
|
303
|
-
console.log('Permission requested:', resources);
|
|
329
|
+
console.log('SDK:LOG: Permission requested:', resources);
|
|
304
330
|
const permissionsToRequest = [];
|
|
305
331
|
if (resources.includes('video')) {
|
|
306
332
|
permissionsToRequest.push(Platform.OS === 'ios' ? PERMISSIONS.IOS.CAMERA : PERMISSIONS.ANDROID.CAMERA);
|
|
@@ -322,11 +348,40 @@ export const WebView = ({
|
|
|
322
348
|
event.nativeEvent.deny();
|
|
323
349
|
}
|
|
324
350
|
} catch (error) {
|
|
325
|
-
console.error('Permission handling failed:', error);
|
|
351
|
+
console.error('SDK:LOG: Permission handling failed:', error);
|
|
326
352
|
// @ts-ignore - deny exists on the event
|
|
327
353
|
event.nativeEvent.deny();
|
|
328
354
|
}
|
|
329
355
|
};
|
|
356
|
+
const handleMessage = event => {
|
|
357
|
+
try {
|
|
358
|
+
const data = JSON.parse(event.nativeEvent.data);
|
|
359
|
+
console.log('SDK:LOG: onMessage data =');
|
|
360
|
+
|
|
361
|
+
// 1) history.back() from a "root" page → treat as USER_CLOSED
|
|
362
|
+
if (data?.type === 'HISTORY_BACK_CALLED') {
|
|
363
|
+
console.log('SDK:LOG: HISTORY_BACK_CALLED at', data.href);
|
|
364
|
+
if (!canGoBackRef.current && !hasUserClosedRef.current) {
|
|
365
|
+
hasUserClosedRef.current = true;
|
|
366
|
+
console.log('SDK:LOG: No WebView history. Treating HISTORY_BACK as USER_CLOSED');
|
|
367
|
+
StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
368
|
+
clearAllCookies();
|
|
369
|
+
onCallback?.(WebViewCallback.redirect('USER_CLOSED'));
|
|
370
|
+
}
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
if (data?.type === 'RATE_LIMIT_ERROR') {
|
|
374
|
+
console.log('SDK:LOG: RATE_LIMIT_ERROR received from web');
|
|
375
|
+
ToastAndroid.show('Too many requests. Please try after 1 minute', ToastAndroid.LONG);
|
|
376
|
+
// StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
377
|
+
// clearAllCookies();
|
|
378
|
+
// onCallback?.(WebViewCallback.redirect('RATE_LIMIT_ERROR'));
|
|
379
|
+
// return;
|
|
380
|
+
}
|
|
381
|
+
} catch (e) {
|
|
382
|
+
console.warn('SDK:LOG: Error parsing WebView message', e);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
330
385
|
const handleWebViewLoadEnd = syntheticEvent => {
|
|
331
386
|
const loadedUrl = syntheticEvent?.nativeEvent?.url || url;
|
|
332
387
|
onPageFinished?.();
|
|
@@ -363,7 +418,9 @@ export const WebView = ({
|
|
|
363
418
|
allowsInlineMediaPlayback: true,
|
|
364
419
|
onShouldStartLoadWithRequest: handleOnShouldStartLoadWithRequest,
|
|
365
420
|
onNavigationStateChange: navState => {
|
|
421
|
+
console.log('SDK:LOG: NAV STATE URL:', navState.url);
|
|
366
422
|
setCanGoBack(navState.canGoBack);
|
|
423
|
+
canGoBackRef.current = navState.canGoBack;
|
|
367
424
|
},
|
|
368
425
|
injectedJavaScript: injectedJavaScript,
|
|
369
426
|
decelerationRate: Platform.OS === 'ios' ? 'normal' : 0.9,
|
|
@@ -371,7 +428,8 @@ export const WebView = ({
|
|
|
371
428
|
sharedCookiesEnabled: true,
|
|
372
429
|
setSupportMultipleWindows: false,
|
|
373
430
|
mixedContentMode: "always",
|
|
374
|
-
allowsLinkPreview: true
|
|
431
|
+
allowsLinkPreview: true,
|
|
432
|
+
onMessage: handleMessage
|
|
375
433
|
})
|
|
376
434
|
});
|
|
377
435
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebView","RNWebView","BackHandler","Platform","Linking","SafeAreaView","ActivityIndicator","View","ToastAndroid","StatusBar","useEffect","useRef","useState","WebViewCallback","check","PERMISSIONS","request","RESULTS","FileViewer","RNFS","CookieManager","AnalyticsLogger","IntentLauncher","IntentConstant","jsx","_jsx","PKG","gmail","outlook","yahoo","CLASS","SCHEME","openMailAppIntent","app","OS","packageName","className","scheme","startActivity","action","category","flags","FLAG_ACTIVITY_NEW_TASK","e","console","log","canOpen","canOpenURL","openURL","e2","clearAllCookies","clearAll","error","url","options","onCallback","hostName","whitelistedUrls","onPageFinished","webviewRef","canGoBack","setCanGoBack","_analyticsLogger","setToast","handleExternalUrl","Promise","resolve","setTimeout","show","LONG","showToast_with_code_message","syntheticEvent","nativeEvent","errorCodesToHandle","includes","code","message","description","visible","redirect","getQueryParam","param","match","RegExp","decodeURIComponent","downloadAndOpenFile","fileUrl","cookieString","cookies","get","Object","keys","map","key","value","join","timestamp","Date","getTime","urlParts","split","lastPart","length","fileExt","pop","fileName","downloadPath","select","ios","DocumentDirectoryPath","android","DownloadDirectoryPath","Error","fromUrl","toFile","headers","background","begin","res","response","downloadFile","promise","statusCode","SHORT","open","showOpenWithDialog","onDismiss","unlink","catch","handleOnShouldStartLoadWithRequest","event","then","ok","status","setBackgroundColor","undefined","isWhitelisted","some","white","handleBackButton","current","goBack","backHandler","addEventListener","remove","Loading","style","flex","justifyContent","alignItems","children","size","injectedJavaScript","requestPermission","permission","result","DENIED","requestResult","GRANTED","handlePermissionRequest","resources","permissionsToRequest","push","IOS","CAMERA","ANDROID","MICROPHONE","RECORD_AUDIO","LOCATION_WHEN_IN_USE","ACCESS_FINE_LOCATION","results","all","granted","every","grant","deny","handleWebViewLoadEnd","loadedUrl","backgroundColor","ref","source","uri","onPermissionRequest","geolocationEnabled","androidPermissions","camera","microphone","geolocation","onError","startInLoadingState","renderLoading","onLoadEnd","originWhitelist","javaScriptEnabled","domStorageEnabled","mediaPlaybackRequiresUserAction","allowsInlineMediaPlayback","onShouldStartLoadWithRequest","onNavigationStateChange","navState","decelerationRate","allowsBackForwardNavigationGestures","sharedCookiesEnabled","setSupportMultipleWindows","mixedContentMode","allowsLinkPreview"],"sourceRoot":"../../../src","sources":["helpers/webview.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["WebView","RNWebView","BackHandler","Platform","Linking","SafeAreaView","ActivityIndicator","View","ToastAndroid","StatusBar","useEffect","useRef","useState","WebViewCallback","check","PERMISSIONS","request","RESULTS","FileViewer","RNFS","CookieManager","SendIntentAndroid","jsx","_jsx","PKG","gmail","outlook","yahoo","SCHEME","openMailAppIntent","app","OS","pkg","scheme","wasOpened","openApp","err","console","log","canOpen","canOpenURL","openURL","err2","clearAllCookies","clearAll","e","error","url","options","onCallback","hostName","whitelistedUrls","onPageFinished","webviewRef","canGoBack","setCanGoBack","canGoBackRef","hasUserClosedRef","setToast","handleExternalUrl","Promise","resolve","setTimeout","show","LONG","showToast_with_code_message","syntheticEvent","nativeEvent","errorCodesToHandle","includes","code","message","description","visible","redirect","getQueryParam","param","match","RegExp","decodeURIComponent","downloadAndOpenFile","fileUrl","cookieString","cookies","get","Object","keys","map","key","value","join","timestamp","Date","getTime","urlParts","split","lastPart","length","fileExt","pop","fileName","downloadPath","select","ios","DocumentDirectoryPath","android","DownloadDirectoryPath","Error","fromUrl","toFile","headers","background","begin","res","response","downloadFile","promise","statusCode","SHORT","open","showOpenWithDialog","onDismiss","unlink","catch","handleOnShouldStartLoadWithRequest","event","then","ok","status","setBackgroundColor","undefined","isWhitelisted","some","white","handleBackButton","current","goBack","backHandler","addEventListener","remove","Loading","style","flex","justifyContent","alignItems","children","size","injectedJavaScript","requestPermission","permission","result","DENIED","requestResult","GRANTED","handlePermissionRequest","resources","permissionsToRequest","push","IOS","CAMERA","ANDROID","MICROPHONE","RECORD_AUDIO","LOCATION_WHEN_IN_USE","ACCESS_FINE_LOCATION","results","all","granted","every","grant","deny","handleMessage","data","JSON","parse","type","href","warn","handleWebViewLoadEnd","loadedUrl","backgroundColor","ref","source","uri","onPermissionRequest","geolocationEnabled","androidPermissions","camera","microphone","geolocation","onError","startInLoadingState","renderLoading","onLoadEnd","originWhitelist","javaScriptEnabled","domStorageEnabled","mediaPlaybackRequiresUserAction","allowsInlineMediaPlayback","onShouldStartLoadWithRequest","onNavigationStateChange","navState","decelerationRate","allowsBackForwardNavigationGestures","sharedCookiesEnabled","setSupportMultipleWindows","mixedContentMode","allowsLinkPreview","onMessage"],"sourceRoot":"../../../src","sources":["helpers/webview.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,6 +17,14 @@ interface WebViewCustomProps {
|
|
|
17
17
|
onPageFinished?: () => void;
|
|
18
18
|
}
|
|
19
19
|
type MailApp = 'gmail' | 'outlook' | 'yahoo';
|
|
20
|
+
/**
|
|
21
|
+
* Try to open a specific mail app, like Gmail.
|
|
22
|
+
* Returns true if something was opened, false otherwise.
|
|
23
|
+
*
|
|
24
|
+
* Order of attempts:
|
|
25
|
+
* 1. openApp(<package>) via react-native-send-intent
|
|
26
|
+
* 2. Linking.openURL(<custom scheme>) as fallback
|
|
27
|
+
*/
|
|
20
28
|
export declare function openMailAppIntent(app: MailApp): Promise<boolean>;
|
|
21
29
|
export declare const WebView: ({ url, options, onCallback, hostName, whitelistedUrls, onPageFinished, }: WebViewCustomProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
30
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webview.d.ts","sourceRoot":"","sources":["../../../../src/helpers/webview.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webview.d.ts","sourceRoot":"","sources":["../../../../src/helpers/webview.tsx"],"names":[],"mappings":"AAgBA,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAcjC,UAAU,oBAAqB,SAAQ,YAAY;IACjD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3C,kBAAkB,CAAC,EAAE;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AACD,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAc7C;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCtE;AAWD,eAAO,MAAM,OAAO,GAAI,0EAOrB,kBAAkB,4CAybpB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "banking_dcb_sdk_react_native",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "React Native package for partner integrating with DCB",
|
|
5
5
|
"source": "./src/index.tsx",
|
|
6
6
|
"main": "./lib/module/index.js",
|
|
@@ -101,10 +101,9 @@
|
|
|
101
101
|
"react-native-quick-crypto": "*",
|
|
102
102
|
"react-native-safe-area-context": "*",
|
|
103
103
|
"react-native-screens": "*",
|
|
104
|
+
"react-native-send-intent": "*",
|
|
104
105
|
"react-native-webview": "*",
|
|
105
|
-
"uuid": "*"
|
|
106
|
-
"react-native-intent-launcher": "*",
|
|
107
|
-
"react-native-send-intent": "*"
|
|
106
|
+
"uuid": "*"
|
|
108
107
|
},
|
|
109
108
|
"workspaces": [
|
|
110
109
|
"example"
|
package/src/helpers/webview.tsx
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
WebView as RNWebView,
|
|
3
|
+
type WebViewMessageEvent,
|
|
4
|
+
} from 'react-native-webview';
|
|
2
5
|
import {
|
|
3
6
|
BackHandler,
|
|
4
7
|
Platform,
|
|
@@ -30,7 +33,7 @@ import FileViewer from 'react-native-file-viewer';
|
|
|
30
33
|
import RNFS from 'react-native-fs';
|
|
31
34
|
import CookieManager from '@react-native-cookies/cookies';
|
|
32
35
|
import { AnalyticsLogger } from './analytics/analytics_logger';
|
|
33
|
-
import
|
|
36
|
+
import SendIntentAndroid from 'react-native-send-intent';
|
|
34
37
|
|
|
35
38
|
interface ExtendedWebViewProps extends WebViewProps {
|
|
36
39
|
onPermissionRequest?: (event: any) => void;
|
|
@@ -48,6 +51,7 @@ interface WebViewCustomProps {
|
|
|
48
51
|
whitelistedUrls?: string[];
|
|
49
52
|
onPageFinished?: () => void;
|
|
50
53
|
}
|
|
54
|
+
|
|
51
55
|
type MailApp = 'gmail' | 'outlook' | 'yahoo';
|
|
52
56
|
|
|
53
57
|
const PKG: Record<MailApp, string> = {
|
|
@@ -56,63 +60,64 @@ const PKG: Record<MailApp, string> = {
|
|
|
56
60
|
yahoo: 'com.yahoo.mobile.client.android.mail',
|
|
57
61
|
};
|
|
58
62
|
|
|
59
|
-
// Explicit launcher activities for each app
|
|
60
|
-
const CLASS: Record<MailApp, string> = {
|
|
61
|
-
gmail: 'com.google.android.gm.ConversationListActivityGmail',
|
|
62
|
-
outlook: 'com.microsoft.office.outlook.MainActivity',
|
|
63
|
-
yahoo: 'com.yahoo.mobile.client.android.mail.activity.MainActivity',
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
// Deep link schemes we'll try as a fallback
|
|
67
63
|
const SCHEME: Record<MailApp, string> = {
|
|
68
64
|
gmail: 'googlegmail://',
|
|
69
65
|
outlook: 'ms-outlook://',
|
|
70
66
|
yahoo: 'ymail://',
|
|
71
67
|
};
|
|
72
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Try to open a specific mail app, like Gmail.
|
|
71
|
+
* Returns true if something was opened, false otherwise.
|
|
72
|
+
*
|
|
73
|
+
* Order of attempts:
|
|
74
|
+
* 1. openApp(<package>) via react-native-send-intent
|
|
75
|
+
* 2. Linking.openURL(<custom scheme>) as fallback
|
|
76
|
+
*/
|
|
73
77
|
export async function openMailAppIntent(app: MailApp): Promise<boolean> {
|
|
74
78
|
if (Platform.OS !== 'android') {
|
|
79
|
+
// iOS? We don't do anything special here. Just say "not handled".
|
|
75
80
|
return false;
|
|
76
81
|
}
|
|
77
82
|
|
|
78
|
-
const
|
|
79
|
-
const className = CLASS[app];
|
|
83
|
+
const pkg = PKG[app];
|
|
80
84
|
const scheme = SCHEME[app];
|
|
81
85
|
|
|
82
|
-
// 1
|
|
86
|
+
// Step 1: Try launching the package directly.
|
|
83
87
|
try {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return true;
|
|
93
|
-
} catch (e) {
|
|
94
|
-
console.log('IntentLauncher.startActivity failed for', app, e);
|
|
88
|
+
// openApp(packageName) resolves to boolean: wasOpened
|
|
89
|
+
// according to the lib docs. :contentReference[oaicite:3]{index=3}
|
|
90
|
+
const wasOpened = await SendIntentAndroid.openApp(pkg, {});
|
|
91
|
+
if (wasOpened) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
} catch (err) {
|
|
95
|
+
console.log(`SDK:LOG: [mailIntent] openApp(${pkg}) failed:`, err);
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
// 2
|
|
98
|
+
// Step 2: Fallback to the custom scheme.
|
|
98
99
|
try {
|
|
99
100
|
const canOpen = await Linking.canOpenURL(scheme);
|
|
100
101
|
if (canOpen) {
|
|
101
102
|
await Linking.openURL(scheme);
|
|
102
103
|
return true;
|
|
103
104
|
}
|
|
104
|
-
} catch (
|
|
105
|
-
console.log(
|
|
105
|
+
} catch (err2) {
|
|
106
|
+
console.log(
|
|
107
|
+
`SDK:LOG: [mailIntent] Linking fallback (${scheme}) failed:`,
|
|
108
|
+
err2
|
|
109
|
+
);
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
return false;
|
|
109
113
|
}
|
|
114
|
+
|
|
110
115
|
const clearAllCookies = async () => {
|
|
111
116
|
try {
|
|
112
117
|
await CookieManager.clearAll(true);
|
|
113
|
-
console.log('clearing cookies');
|
|
118
|
+
console.log('SDK:LOG: clearing cookies');
|
|
114
119
|
} catch (e) {
|
|
115
|
-
console.error('Failed to clear cookies:', e);
|
|
120
|
+
console.error('SDK:LOG: Failed to clear cookies:', e);
|
|
116
121
|
}
|
|
117
122
|
};
|
|
118
123
|
|
|
@@ -126,7 +131,9 @@ export const WebView = ({
|
|
|
126
131
|
}: WebViewCustomProps) => {
|
|
127
132
|
const webviewRef = useRef<RNWebView | null>(null);
|
|
128
133
|
const [canGoBack, setCanGoBack] = useState(false);
|
|
129
|
-
const
|
|
134
|
+
const canGoBackRef = useRef(false);
|
|
135
|
+
const hasUserClosedRef = useRef(false);
|
|
136
|
+
|
|
130
137
|
// const [hasRedirected, setHasRedirected] = useState(false);
|
|
131
138
|
const [, setToast] = useState<{ visible: boolean; message: string } | null>(
|
|
132
139
|
null
|
|
@@ -144,7 +151,7 @@ export const WebView = ({
|
|
|
144
151
|
ToastAndroid.LONG
|
|
145
152
|
);
|
|
146
153
|
}
|
|
147
|
-
console.log('Application not found to open link');
|
|
154
|
+
console.log('SDK:LOG: Application not found to open link');
|
|
148
155
|
}
|
|
149
156
|
};
|
|
150
157
|
const showToast_with_code_message = (syntheticEvent: any) => {
|
|
@@ -185,7 +192,7 @@ export const WebView = ({
|
|
|
185
192
|
|
|
186
193
|
const downloadAndOpenFile = async (fileUrl: string) => {
|
|
187
194
|
try {
|
|
188
|
-
console.log('Starting file download...', fileUrl);
|
|
195
|
+
console.log('SDK:LOG: Starting file download...', fileUrl);
|
|
189
196
|
|
|
190
197
|
// Get cookies using CookieManager
|
|
191
198
|
let cookieString = '';
|
|
@@ -195,7 +202,7 @@ export const WebView = ({
|
|
|
195
202
|
.map((key) => `${key}=${cookies[key]?.value ?? ''}`)
|
|
196
203
|
.join('; ');
|
|
197
204
|
} catch (e) {
|
|
198
|
-
console.error('Failed to get cookies:', e);
|
|
205
|
+
console.error('SDK:LOG: Failed to get cookies:', e);
|
|
199
206
|
}
|
|
200
207
|
|
|
201
208
|
// Create a clean filename from the URL
|
|
@@ -215,7 +222,7 @@ export const WebView = ({
|
|
|
215
222
|
throw new Error('Could not determine download path');
|
|
216
223
|
}
|
|
217
224
|
|
|
218
|
-
console.log('Downloading to:', downloadPath);
|
|
225
|
+
console.log('SDK:LOG: Downloading to:', downloadPath);
|
|
219
226
|
|
|
220
227
|
const options = {
|
|
221
228
|
fromUrl: fileUrl,
|
|
@@ -227,14 +234,14 @@ export const WebView = ({
|
|
|
227
234
|
},
|
|
228
235
|
background: true,
|
|
229
236
|
begin: (res: any) => {
|
|
230
|
-
console.log('Download started with headers:', res);
|
|
237
|
+
console.log('SDK:LOG: Download started with headers:', res);
|
|
231
238
|
},
|
|
232
239
|
};
|
|
233
240
|
|
|
234
241
|
const response = await RNFS.downloadFile(options).promise;
|
|
235
242
|
|
|
236
243
|
if (response.statusCode === 200) {
|
|
237
|
-
console.log('File downloaded to:', downloadPath);
|
|
244
|
+
console.log('SDK:LOG: File downloaded to:', downloadPath);
|
|
238
245
|
|
|
239
246
|
if (Platform.OS === 'android') {
|
|
240
247
|
ToastAndroid.show('File downloaded successfully', ToastAndroid.SHORT);
|
|
@@ -252,20 +259,21 @@ export const WebView = ({
|
|
|
252
259
|
throw new Error(`Download failed with status ${response.statusCode}`);
|
|
253
260
|
}
|
|
254
261
|
} catch (error) {
|
|
255
|
-
console.error('File download/open error:', error);
|
|
262
|
+
console.error('SDK:LOG: File download/open error:', error);
|
|
256
263
|
}
|
|
257
264
|
};
|
|
258
265
|
|
|
259
266
|
const handleOnShouldStartLoadWithRequest = (event: WebViewNavigation) => {
|
|
260
267
|
const { url } = event;
|
|
261
|
-
console.log('URL:', url);
|
|
262
|
-
|
|
268
|
+
console.log('SDK:LOG: WEBVIEW URL:', url);
|
|
269
|
+
|
|
270
|
+
if (!url || url === 'about:blank' || url === 'about:srcdoc') {
|
|
263
271
|
return true;
|
|
264
272
|
}
|
|
265
273
|
|
|
266
274
|
if (Platform.OS === 'android' && url) {
|
|
267
275
|
if (url.includes('ms-outlook://')) {
|
|
268
|
-
console.log('Intent to open Outlook detected');
|
|
276
|
+
console.log('SDK:LOG: Intent to open Outlook detected');
|
|
269
277
|
openMailAppIntent('outlook').then(
|
|
270
278
|
(ok) =>
|
|
271
279
|
!ok &&
|
|
@@ -274,7 +282,7 @@ export const WebView = ({
|
|
|
274
282
|
return false; // cancel WebView navigation
|
|
275
283
|
}
|
|
276
284
|
if (url.includes('googlegmail://')) {
|
|
277
|
-
console.log('Intent to open Gmail detected');
|
|
285
|
+
console.log('SDK:LOG: Intent to open Gmail detected');
|
|
278
286
|
openMailAppIntent('gmail').then(
|
|
279
287
|
(ok) =>
|
|
280
288
|
!ok && ToastAndroid.show('Gmail app not found', ToastAndroid.SHORT)
|
|
@@ -282,7 +290,7 @@ export const WebView = ({
|
|
|
282
290
|
return false;
|
|
283
291
|
}
|
|
284
292
|
if (url.includes('ymail://')) {
|
|
285
|
-
console.log('Intent to open Yahoo Mail detected');
|
|
293
|
+
console.log('SDK:LOG: Intent to open Yahoo Mail detected');
|
|
286
294
|
openMailAppIntent('yahoo').then(
|
|
287
295
|
(ok) =>
|
|
288
296
|
!ok &&
|
|
@@ -296,10 +304,10 @@ export const WebView = ({
|
|
|
296
304
|
url?.includes('/session-expired?status=') ||
|
|
297
305
|
url?.includes('/redirect?status=')
|
|
298
306
|
) {
|
|
299
|
-
console.log('overriding url');
|
|
307
|
+
console.log('SDK:LOG: overriding url');
|
|
300
308
|
const status = getQueryParam(url, 'status');
|
|
301
309
|
|
|
302
|
-
console.log('Status thrown from webview ', status);
|
|
310
|
+
console.log('SDK:LOG: Status thrown from webview ', status);
|
|
303
311
|
|
|
304
312
|
StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
305
313
|
clearAllCookies();
|
|
@@ -307,7 +315,7 @@ export const WebView = ({
|
|
|
307
315
|
return false;
|
|
308
316
|
}
|
|
309
317
|
if (url?.includes('/api/user/redirect')) {
|
|
310
|
-
console.log('overriding redirect url');
|
|
318
|
+
console.log('SDK:LOG: overriding redirect url');
|
|
311
319
|
|
|
312
320
|
StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
313
321
|
clearAllCookies();
|
|
@@ -326,7 +334,7 @@ export const WebView = ({
|
|
|
326
334
|
url !== 'about:blank' &&
|
|
327
335
|
url !== 'about:srcdoc'
|
|
328
336
|
) {
|
|
329
|
-
console.log('External URL detected:', url);
|
|
337
|
+
console.log('SDK:LOG: External URL detected:', url);
|
|
330
338
|
handleExternalUrl(url);
|
|
331
339
|
return false;
|
|
332
340
|
}
|
|
@@ -335,7 +343,7 @@ export const WebView = ({
|
|
|
335
343
|
url.includes('/statements/') ||
|
|
336
344
|
url.includes('/download_statements')
|
|
337
345
|
) {
|
|
338
|
-
console.log('File download URL detected:', url);
|
|
346
|
+
console.log('SDK:LOG: File download URL detected:', url);
|
|
339
347
|
downloadAndOpenFile(url);
|
|
340
348
|
return false;
|
|
341
349
|
}
|
|
@@ -368,17 +376,44 @@ export const WebView = ({
|
|
|
368
376
|
);
|
|
369
377
|
|
|
370
378
|
// Cookie injection script
|
|
371
|
-
|
|
372
379
|
const injectedJavaScript = `
|
|
380
|
+
(function() {
|
|
381
|
+
function safePost(msg) {
|
|
382
|
+
try {
|
|
383
|
+
if (window.ReactNativeWebView) {
|
|
384
|
+
window.ReactNativeWebView.postMessage(JSON.stringify(msg));
|
|
385
|
+
}
|
|
386
|
+
} catch (e) {}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// Preserve any existing window.onerror
|
|
390
|
+
var previousOnError = window.onerror || null;
|
|
373
391
|
window.onerror = function(message, source, lineno, colno, error) {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
392
|
+
try {
|
|
393
|
+
if (String(message || '').indexOf('RATE_LIMIT_USER') !== -1 &&
|
|
394
|
+
window.ReactNativeWebView) {
|
|
395
|
+
safePost({ type: 'RATE_LIMIT_ERROR' });
|
|
396
|
+
}
|
|
397
|
+
} catch (e) {}
|
|
398
|
+
if (typeof previousOnError === 'function') {
|
|
399
|
+
try { return previousOnError.apply(this, arguments); } catch (e) {}
|
|
378
400
|
}
|
|
379
401
|
};
|
|
380
|
-
|
|
381
|
-
|
|
402
|
+
|
|
403
|
+
// Patch history.back() to notify the app
|
|
404
|
+
if (window.history && typeof window.history.back === 'function') {
|
|
405
|
+
var originalBack = window.history.back;
|
|
406
|
+
window.history.back = function() {
|
|
407
|
+
safePost({
|
|
408
|
+
type: 'HISTORY_BACK_CALLED',
|
|
409
|
+
href: window.location.href
|
|
410
|
+
});
|
|
411
|
+
return originalBack.apply(this, arguments);
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
})();
|
|
415
|
+
true;
|
|
416
|
+
`;
|
|
382
417
|
|
|
383
418
|
const requestPermission = async (permission: Permission) => {
|
|
384
419
|
try {
|
|
@@ -391,14 +426,14 @@ export const WebView = ({
|
|
|
391
426
|
|
|
392
427
|
return result === RESULTS.GRANTED;
|
|
393
428
|
} catch (error) {
|
|
394
|
-
console.error('Permission request failed:', error);
|
|
429
|
+
console.error('SDK:LOG: Permission request failed:', error);
|
|
395
430
|
return false;
|
|
396
431
|
}
|
|
397
432
|
};
|
|
398
433
|
|
|
399
434
|
const handlePermissionRequest = async (event: any) => {
|
|
400
435
|
const { resources } = event.nativeEvent;
|
|
401
|
-
console.log('Permission requested:', resources);
|
|
436
|
+
console.log('SDK:LOG: Permission requested:', resources);
|
|
402
437
|
|
|
403
438
|
const permissionsToRequest: Permission[] = [];
|
|
404
439
|
|
|
@@ -438,12 +473,52 @@ export const WebView = ({
|
|
|
438
473
|
event.nativeEvent.deny();
|
|
439
474
|
}
|
|
440
475
|
} catch (error) {
|
|
441
|
-
console.error('Permission handling failed:', error);
|
|
476
|
+
console.error('SDK:LOG: Permission handling failed:', error);
|
|
442
477
|
// @ts-ignore - deny exists on the event
|
|
443
478
|
event.nativeEvent.deny();
|
|
444
479
|
}
|
|
445
480
|
};
|
|
446
481
|
|
|
482
|
+
const handleMessage = (event: WebViewMessageEvent) => {
|
|
483
|
+
try {
|
|
484
|
+
const data = JSON.parse(event.nativeEvent.data);
|
|
485
|
+
console.log('SDK:LOG: onMessage data =');
|
|
486
|
+
|
|
487
|
+
// 1) history.back() from a "root" page → treat as USER_CLOSED
|
|
488
|
+
if (data?.type === 'HISTORY_BACK_CALLED') {
|
|
489
|
+
console.log('SDK:LOG: HISTORY_BACK_CALLED at', data.href);
|
|
490
|
+
|
|
491
|
+
if (!canGoBackRef.current && !hasUserClosedRef.current) {
|
|
492
|
+
hasUserClosedRef.current = true;
|
|
493
|
+
|
|
494
|
+
console.log(
|
|
495
|
+
'SDK:LOG: No WebView history. Treating HISTORY_BACK as USER_CLOSED'
|
|
496
|
+
);
|
|
497
|
+
|
|
498
|
+
StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
499
|
+
clearAllCookies();
|
|
500
|
+
onCallback?.(WebViewCallback.redirect('USER_CLOSED'));
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
if (data?.type === 'RATE_LIMIT_ERROR') {
|
|
507
|
+
console.log('SDK:LOG: RATE_LIMIT_ERROR received from web');
|
|
508
|
+
ToastAndroid.show(
|
|
509
|
+
'Too many requests. Please try after 1 minute',
|
|
510
|
+
ToastAndroid.LONG
|
|
511
|
+
);
|
|
512
|
+
// StatusBar.setBackgroundColor('#7E7E7EFF');
|
|
513
|
+
// clearAllCookies();
|
|
514
|
+
// onCallback?.(WebViewCallback.redirect('RATE_LIMIT_ERROR'));
|
|
515
|
+
// return;
|
|
516
|
+
}
|
|
517
|
+
} catch (e) {
|
|
518
|
+
console.warn('SDK:LOG: Error parsing WebView message', e);
|
|
519
|
+
}
|
|
520
|
+
};
|
|
521
|
+
|
|
447
522
|
const handleWebViewLoadEnd = (syntheticEvent: any) => {
|
|
448
523
|
const loadedUrl = syntheticEvent?.nativeEvent?.url || url;
|
|
449
524
|
|
|
@@ -479,7 +554,9 @@ export const WebView = ({
|
|
|
479
554
|
allowsInlineMediaPlayback={true}
|
|
480
555
|
onShouldStartLoadWithRequest={handleOnShouldStartLoadWithRequest}
|
|
481
556
|
onNavigationStateChange={(navState) => {
|
|
557
|
+
console.log('SDK:LOG: NAV STATE URL:', navState.url);
|
|
482
558
|
setCanGoBack(navState.canGoBack);
|
|
559
|
+
canGoBackRef.current = navState.canGoBack;
|
|
483
560
|
}}
|
|
484
561
|
injectedJavaScript={injectedJavaScript}
|
|
485
562
|
decelerationRate={Platform.OS === 'ios' ? 'normal' : 0.9}
|
|
@@ -488,6 +565,7 @@ export const WebView = ({
|
|
|
488
565
|
setSupportMultipleWindows={false}
|
|
489
566
|
mixedContentMode="always"
|
|
490
567
|
allowsLinkPreview={true}
|
|
568
|
+
onMessage={handleMessage}
|
|
491
569
|
/>
|
|
492
570
|
</SafeAreaView>
|
|
493
571
|
);
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require "json"
|
|
2
|
-
|
|
3
|
-
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
-
|
|
5
|
-
Pod::Spec.new do |s|
|
|
6
|
-
s.name = "PartnerReactNativeSdk"
|
|
7
|
-
s.version = package["version"]
|
|
8
|
-
s.summary = package["description"]
|
|
9
|
-
s.homepage = package["homepage"]
|
|
10
|
-
s.license = package["license"]
|
|
11
|
-
s.authors = package["author"]
|
|
12
|
-
|
|
13
|
-
s.platforms = { :ios => min_ios_version_supported }
|
|
14
|
-
s.source = { :git => "https://github.com/spense-fintech/partner-react-native-library.git.git", :tag => "#{s.version}" }
|
|
15
|
-
|
|
16
|
-
s.source_files = "ios/**/*.{h,m,mm,cpp}"
|
|
17
|
-
# s.private_header_files = "ios/**/*.h"
|
|
18
|
-
s.exclude_files = "ios/generated/**"
|
|
19
|
-
|
|
20
|
-
# Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
|
|
21
|
-
# See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
|
|
22
|
-
if respond_to?(:install_modules_dependencies, true)
|
|
23
|
-
install_modules_dependencies(s)
|
|
24
|
-
else
|
|
25
|
-
s.dependency "React-Core"
|
|
26
|
-
s.dependency "React-Codegen"
|
|
27
|
-
s.dependency "RCTRequired"
|
|
28
|
-
s.dependency "RCTTypeSafety"
|
|
29
|
-
s.dependency "ReactCommon/turbomodule/core"
|
|
30
|
-
end
|
|
31
|
-
end
|