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.
@@ -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 { AnalyticsLogger } from "./analytics/analytics_logger.js";
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 packageName = PKG[app];
38
- const className = CLASS[app];
37
+ const pkg = PKG[app];
39
38
  const scheme = SCHEME[app];
40
39
 
41
- // 1. Try EXACT MAIN+LAUNCHER intent with package + className
40
+ // Step 1: Try launching the package directly.
42
41
  try {
43
- await IntentLauncher.startActivity({
44
- action: 'android.intent.action.MAIN',
45
- category: 'android.intent.category.LAUNCHER',
46
- packageName,
47
- className,
48
- flags: [IntentConstant.FLAG_ACTIVITY_NEW_TASK]
49
- });
50
- return true;
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. Fallback: try the scheme (ms-outlook://, googlegmail://, ymail://)
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 (e2) {
63
- console.log('Linking fallback failed for', app, e2);
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 _analyticsLogger = new AnalyticsLogger();
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
- if (message.includes('RATE_LIMIT_USER')) {
279
- window.ReactNativeWebView.postMessage(JSON.stringify({
280
- type: 'RATE_LIMIT_ERROR'
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
- true;
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":"AAaA,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;AACD,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAsB7C,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCtE;AAUD,eAAO,MAAM,OAAO,GAAI,0EAOrB,kBAAkB,4CAgXpB,CAAC"}
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.6",
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"
@@ -1,4 +1,7 @@
1
- import { WebView as RNWebView } from 'react-native-webview';
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 IntentLauncher, { IntentConstant } from 'react-native-intent-launcher';
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 packageName = PKG[app];
79
- const className = CLASS[app];
83
+ const pkg = PKG[app];
80
84
  const scheme = SCHEME[app];
81
85
 
82
- // 1. Try EXACT MAIN+LAUNCHER intent with package + className
86
+ // Step 1: Try launching the package directly.
83
87
  try {
84
- await IntentLauncher.startActivity({
85
- action: 'android.intent.action.MAIN',
86
- category: 'android.intent.category.LAUNCHER',
87
- packageName,
88
- className,
89
- flags: [IntentConstant.FLAG_ACTIVITY_NEW_TASK],
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. Fallback: try the scheme (ms-outlook://, googlegmail://, ymail://)
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 (e2) {
105
- console.log('Linking fallback failed for', app, e2);
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 _analyticsLogger = new AnalyticsLogger();
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
- if (url === 'about:blank' || url === 'about:srcdoc') {
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
- if (message.includes('RATE_LIMIT_USER')) {
375
- window.ReactNativeWebView.postMessage(JSON.stringify({
376
- type: 'RATE_LIMIT_ERROR'
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
- true;
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