banking_dcb_sdk_react_native 1.0.7 → 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,66 +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
- const YAHOO_CLASS = 'com.yahoo.mobile.client.android.mail.activity.MainActivity';
20
18
  const SCHEME = {
21
19
  gmail: 'googlegmail://',
22
20
  outlook: 'ms-outlook://',
23
21
  yahoo: 'ymail://'
24
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
+ */
25
32
  export async function openMailAppIntent(app) {
26
- console.log('new changes deployed');
27
- if (Platform.OS !== 'android') return false;
33
+ if (Platform.OS !== 'android') {
34
+ // iOS? We don't do anything special here. Just say "not handled".
35
+ return false;
36
+ }
37
+ const pkg = PKG[app];
38
+ const scheme = SCHEME[app];
39
+
40
+ // Step 1: Try launching the package directly.
28
41
  try {
29
- if (app === 'yahoo') {
30
- // Yahoo needed explicit component in Flutter, keep that
31
- await IntentLauncher.startActivity({
32
- action: 'android.intent.action.MAIN',
33
- category: 'android.intent.category.LAUNCHER',
34
- packageName: PKG.yahoo,
35
- className: YAHOO_CLASS,
36
- flags: [IntentConstant.FLAG_ACTIVITY_NEW_TASK]
37
- });
38
- } else {
39
- // Gmail & Outlook: let Android resolve launcher Activity
40
- await IntentLauncher.startActivity({
41
- action: 'android.intent.action.MAIN',
42
- category: 'android.intent.category.LAUNCHER',
43
- packageName: PKG[app],
44
- flags: [IntentConstant.FLAG_ACTIVITY_NEW_TASK]
45
- });
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;
46
47
  }
47
- return true;
48
- } catch (e) {
49
- console.log('IntentLauncher.startActivity failed for', app, e);
48
+ } catch (err) {
49
+ console.log(`SDK:LOG: [mailIntent] openApp(${pkg}) failed:`, err);
50
50
  }
51
51
 
52
- // Fallback to scheme like in previous step
52
+ // Step 2: Fallback to the custom scheme.
53
53
  try {
54
- const scheme = SCHEME[app];
55
54
  const canOpen = await Linking.canOpenURL(scheme);
56
55
  if (canOpen) {
57
56
  await Linking.openURL(scheme);
58
57
  return true;
59
58
  }
60
- } catch (e2) {
61
- console.log('Linking fallback failed for', app, e2);
59
+ } catch (err2) {
60
+ console.log(`SDK:LOG: [mailIntent] Linking fallback (${scheme}) failed:`, err2);
62
61
  }
63
62
  return false;
64
63
  }
65
64
  const clearAllCookies = async () => {
66
65
  try {
67
66
  await CookieManager.clearAll(true);
68
- console.log('clearing cookies');
67
+ console.log('SDK:LOG: clearing cookies');
69
68
  } catch (e) {
70
- console.error('Failed to clear cookies:', e);
69
+ console.error('SDK:LOG: Failed to clear cookies:', e);
71
70
  }
72
71
  };
73
72
  export const WebView = ({
@@ -80,7 +79,9 @@ export const WebView = ({
80
79
  }) => {
81
80
  const webviewRef = useRef(null);
82
81
  const [canGoBack, setCanGoBack] = useState(false);
83
- const _analyticsLogger = new AnalyticsLogger();
82
+ const canGoBackRef = useRef(false);
83
+ const hasUserClosedRef = useRef(false);
84
+
84
85
  // const [hasRedirected, setHasRedirected] = useState(false);
85
86
  const [, setToast] = useState(null);
86
87
  const handleExternalUrl = async url => {
@@ -93,7 +94,7 @@ export const WebView = ({
93
94
  if (Platform.OS === 'android') {
94
95
  ToastAndroid.show('Oops! Something went wrong. Please try again.', ToastAndroid.LONG);
95
96
  }
96
- console.log('Application not found to open link');
97
+ console.log('SDK:LOG: Application not found to open link');
97
98
  }
98
99
  };
99
100
  const showToast_with_code_message = syntheticEvent => {
@@ -129,7 +130,7 @@ export const WebView = ({
129
130
  };
130
131
  const downloadAndOpenFile = async fileUrl => {
131
132
  try {
132
- console.log('Starting file download...', fileUrl);
133
+ console.log('SDK:LOG: Starting file download...', fileUrl);
133
134
 
134
135
  // Get cookies using CookieManager
135
136
  let cookieString = '';
@@ -137,7 +138,7 @@ export const WebView = ({
137
138
  const cookies = await CookieManager.get(fileUrl);
138
139
  cookieString = Object.keys(cookies).map(key => `${key}=${cookies[key]?.value ?? ''}`).join('; ');
139
140
  } catch (e) {
140
- console.error('Failed to get cookies:', e);
141
+ console.error('SDK:LOG: Failed to get cookies:', e);
141
142
  }
142
143
 
143
144
  // Create a clean filename from the URL
@@ -154,7 +155,7 @@ export const WebView = ({
154
155
  if (!downloadPath) {
155
156
  throw new Error('Could not determine download path');
156
157
  }
157
- console.log('Downloading to:', downloadPath);
158
+ console.log('SDK:LOG: Downloading to:', downloadPath);
158
159
  const options = {
159
160
  fromUrl: fileUrl,
160
161
  toFile: downloadPath,
@@ -165,12 +166,12 @@ export const WebView = ({
165
166
  },
166
167
  background: true,
167
168
  begin: res => {
168
- console.log('Download started with headers:', res);
169
+ console.log('SDK:LOG: Download started with headers:', res);
169
170
  }
170
171
  };
171
172
  const response = await RNFS.downloadFile(options).promise;
172
173
  if (response.statusCode === 200) {
173
- console.log('File downloaded to:', downloadPath);
174
+ console.log('SDK:LOG: File downloaded to:', downloadPath);
174
175
  if (Platform.OS === 'android') {
175
176
  ToastAndroid.show('File downloaded successfully', ToastAndroid.SHORT);
176
177
  }
@@ -186,45 +187,45 @@ export const WebView = ({
186
187
  throw new Error(`Download failed with status ${response.statusCode}`);
187
188
  }
188
189
  } catch (error) {
189
- console.error('File download/open error:', error);
190
+ console.error('SDK:LOG: File download/open error:', error);
190
191
  }
191
192
  };
192
193
  const handleOnShouldStartLoadWithRequest = event => {
193
194
  const {
194
195
  url
195
196
  } = event;
196
- console.log('URL:', url);
197
- if (url === 'about:blank' || url === 'about:srcdoc') {
197
+ console.log('SDK:LOG: WEBVIEW URL:', url);
198
+ if (!url || url === 'about:blank' || url === 'about:srcdoc') {
198
199
  return true;
199
200
  }
200
201
  if (Platform.OS === 'android' && url) {
201
202
  if (url.includes('ms-outlook://')) {
202
- console.log('Intent to open Outlook detected');
203
+ console.log('SDK:LOG: Intent to open Outlook detected');
203
204
  openMailAppIntent('outlook').then(ok => !ok && ToastAndroid.show('Outlook app not found', ToastAndroid.SHORT));
204
205
  return false; // cancel WebView navigation
205
206
  }
206
207
  if (url.includes('googlegmail://')) {
207
- console.log('Intent to open Gmail detected');
208
+ console.log('SDK:LOG: Intent to open Gmail detected');
208
209
  openMailAppIntent('gmail').then(ok => !ok && ToastAndroid.show('Gmail app not found', ToastAndroid.SHORT));
209
210
  return false;
210
211
  }
211
212
  if (url.includes('ymail://')) {
212
- console.log('Intent to open Yahoo Mail detected');
213
+ console.log('SDK:LOG: Intent to open Yahoo Mail detected');
213
214
  openMailAppIntent('yahoo').then(ok => !ok && ToastAndroid.show('Yahoo Mail app not found', ToastAndroid.SHORT));
214
215
  return false;
215
216
  }
216
217
  }
217
218
  if (url?.includes('/session-expired?status=') || url?.includes('/redirect?status=')) {
218
- console.log('overriding url');
219
+ console.log('SDK:LOG: overriding url');
219
220
  const status = getQueryParam(url, 'status');
220
- console.log('Status thrown from webview ', status);
221
+ console.log('SDK:LOG: Status thrown from webview ', status);
221
222
  StatusBar.setBackgroundColor('#7E7E7EFF');
222
223
  clearAllCookies();
223
224
  onCallback?.(WebViewCallback.redirect(status ?? undefined));
224
225
  return false;
225
226
  }
226
227
  if (url?.includes('/api/user/redirect')) {
227
- console.log('overriding redirect url');
228
+ console.log('SDK:LOG: overriding redirect url');
228
229
  StatusBar.setBackgroundColor('#7E7E7EFF');
229
230
  clearAllCookies();
230
231
  onCallback?.(WebViewCallback.redirect('SESSION_EXPIRED'));
@@ -234,12 +235,12 @@ export const WebView = ({
234
235
  // Handle whitelisted URLs
235
236
  const isWhitelisted = whitelistedUrls.some(white => url.includes(white)) || hostName && url.includes(hostName);
236
237
  if (!isWhitelisted && url && url !== 'about:blank' && url !== 'about:srcdoc') {
237
- console.log('External URL detected:', url);
238
+ console.log('SDK:LOG: External URL detected:', url);
238
239
  handleExternalUrl(url);
239
240
  return false;
240
241
  }
241
242
  if (url.includes('.pdf') || url.includes('/statements/') || url.includes('/download_statements')) {
242
- console.log('File download URL detected:', url);
243
+ console.log('SDK:LOG: File download URL detected:', url);
243
244
  downloadAndOpenFile(url);
244
245
  return false;
245
246
  }
@@ -270,17 +271,44 @@ export const WebView = ({
270
271
  });
271
272
 
272
273
  // Cookie injection script
273
-
274
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;
275
286
  window.onerror = function(message, source, lineno, colno, error) {
276
- if (message.includes('RATE_LIMIT_USER')) {
277
- window.ReactNativeWebView.postMessage(JSON.stringify({
278
- type: 'RATE_LIMIT_ERROR'
279
- }));
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) {}
280
295
  }
281
296
  };
282
- true;
283
- `;
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
+ `;
284
312
  const requestPermission = async permission => {
285
313
  try {
286
314
  const result = await check(permission);
@@ -290,7 +318,7 @@ export const WebView = ({
290
318
  }
291
319
  return result === RESULTS.GRANTED;
292
320
  } catch (error) {
293
- console.error('Permission request failed:', error);
321
+ console.error('SDK:LOG: Permission request failed:', error);
294
322
  return false;
295
323
  }
296
324
  };
@@ -298,7 +326,7 @@ export const WebView = ({
298
326
  const {
299
327
  resources
300
328
  } = event.nativeEvent;
301
- console.log('Permission requested:', resources);
329
+ console.log('SDK:LOG: Permission requested:', resources);
302
330
  const permissionsToRequest = [];
303
331
  if (resources.includes('video')) {
304
332
  permissionsToRequest.push(Platform.OS === 'ios' ? PERMISSIONS.IOS.CAMERA : PERMISSIONS.ANDROID.CAMERA);
@@ -320,11 +348,40 @@ export const WebView = ({
320
348
  event.nativeEvent.deny();
321
349
  }
322
350
  } catch (error) {
323
- console.error('Permission handling failed:', error);
351
+ console.error('SDK:LOG: Permission handling failed:', error);
324
352
  // @ts-ignore - deny exists on the event
325
353
  event.nativeEvent.deny();
326
354
  }
327
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
+ };
328
385
  const handleWebViewLoadEnd = syntheticEvent => {
329
386
  const loadedUrl = syntheticEvent?.nativeEvent?.url || url;
330
387
  onPageFinished?.();
@@ -361,7 +418,9 @@ export const WebView = ({
361
418
  allowsInlineMediaPlayback: true,
362
419
  onShouldStartLoadWithRequest: handleOnShouldStartLoadWithRequest,
363
420
  onNavigationStateChange: navState => {
421
+ console.log('SDK:LOG: NAV STATE URL:', navState.url);
364
422
  setCanGoBack(navState.canGoBack);
423
+ canGoBackRef.current = navState.canGoBack;
365
424
  },
366
425
  injectedJavaScript: injectedJavaScript,
367
426
  decelerationRate: Platform.OS === 'ios' ? 'normal' : 0.9,
@@ -369,7 +428,8 @@ export const WebView = ({
369
428
  sharedCookiesEnabled: true,
370
429
  setSupportMultipleWindows: false,
371
430
  mixedContentMode: "always",
372
- allowsLinkPreview: true
431
+ allowsLinkPreview: true,
432
+ onMessage: handleMessage
373
433
  })
374
434
  });
375
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","YAHOO_CLASS","SCHEME","openMailAppIntent","app","console","log","OS","startActivity","action","category","packageName","className","flags","FLAG_ACTIVITY_NEW_TASK","e","scheme","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;AAED,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAiB7C,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAyCtE;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.7",
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;
@@ -51,69 +54,70 @@ interface WebViewCustomProps {
51
54
 
52
55
  type MailApp = 'gmail' | 'outlook' | 'yahoo';
53
56
 
54
- const PKG = {
57
+ const PKG: Record<MailApp, string> = {
55
58
  gmail: 'com.google.android.gm',
56
59
  outlook: 'com.microsoft.office.outlook',
57
60
  yahoo: 'com.yahoo.mobile.client.android.mail',
58
- } as const;
59
-
60
- const YAHOO_CLASS =
61
- 'com.yahoo.mobile.client.android.mail.activity.MainActivity';
61
+ };
62
62
 
63
- const SCHEME = {
63
+ const SCHEME: Record<MailApp, string> = {
64
64
  gmail: 'googlegmail://',
65
65
  outlook: 'ms-outlook://',
66
66
  yahoo: 'ymail://',
67
- } as const;
67
+ };
68
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
+ */
69
77
  export async function openMailAppIntent(app: MailApp): Promise<boolean> {
70
- console.log('new changes deployed');
71
- if (Platform.OS !== 'android') return false;
78
+ if (Platform.OS !== 'android') {
79
+ // iOS? We don't do anything special here. Just say "not handled".
80
+ return false;
81
+ }
82
+
83
+ const pkg = PKG[app];
84
+ const scheme = SCHEME[app];
72
85
 
86
+ // Step 1: Try launching the package directly.
73
87
  try {
74
- if (app === 'yahoo') {
75
- // Yahoo needed explicit component in Flutter, keep that
76
- await IntentLauncher.startActivity({
77
- action: 'android.intent.action.MAIN',
78
- category: 'android.intent.category.LAUNCHER',
79
- packageName: PKG.yahoo,
80
- className: YAHOO_CLASS,
81
- flags: [IntentConstant.FLAG_ACTIVITY_NEW_TASK],
82
- });
83
- } else {
84
- // Gmail & Outlook: let Android resolve launcher Activity
85
- await IntentLauncher.startActivity({
86
- action: 'android.intent.action.MAIN',
87
- category: 'android.intent.category.LAUNCHER',
88
- packageName: PKG[app],
89
- flags: [IntentConstant.FLAG_ACTIVITY_NEW_TASK],
90
- });
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;
91
93
  }
92
- return true;
93
- } catch (e) {
94
- console.log('IntentLauncher.startActivity failed for', app, e);
94
+ } catch (err) {
95
+ console.log(`SDK:LOG: [mailIntent] openApp(${pkg}) failed:`, err);
95
96
  }
96
97
 
97
- // Fallback to scheme like in previous step
98
+ // Step 2: Fallback to the custom scheme.
98
99
  try {
99
- const scheme = SCHEME[app];
100
100
  const canOpen = await Linking.canOpenURL(scheme);
101
101
  if (canOpen) {
102
102
  await Linking.openURL(scheme);
103
103
  return true;
104
104
  }
105
- } catch (e2) {
106
- 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
+ );
107
110
  }
108
111
 
109
112
  return false;
110
113
  }
114
+
111
115
  const clearAllCookies = async () => {
112
116
  try {
113
117
  await CookieManager.clearAll(true);
114
- console.log('clearing cookies');
118
+ console.log('SDK:LOG: clearing cookies');
115
119
  } catch (e) {
116
- console.error('Failed to clear cookies:', e);
120
+ console.error('SDK:LOG: Failed to clear cookies:', e);
117
121
  }
118
122
  };
119
123
 
@@ -127,7 +131,9 @@ export const WebView = ({
127
131
  }: WebViewCustomProps) => {
128
132
  const webviewRef = useRef<RNWebView | null>(null);
129
133
  const [canGoBack, setCanGoBack] = useState(false);
130
- const _analyticsLogger = new AnalyticsLogger();
134
+ const canGoBackRef = useRef(false);
135
+ const hasUserClosedRef = useRef(false);
136
+
131
137
  // const [hasRedirected, setHasRedirected] = useState(false);
132
138
  const [, setToast] = useState<{ visible: boolean; message: string } | null>(
133
139
  null
@@ -145,7 +151,7 @@ export const WebView = ({
145
151
  ToastAndroid.LONG
146
152
  );
147
153
  }
148
- console.log('Application not found to open link');
154
+ console.log('SDK:LOG: Application not found to open link');
149
155
  }
150
156
  };
151
157
  const showToast_with_code_message = (syntheticEvent: any) => {
@@ -186,7 +192,7 @@ export const WebView = ({
186
192
 
187
193
  const downloadAndOpenFile = async (fileUrl: string) => {
188
194
  try {
189
- console.log('Starting file download...', fileUrl);
195
+ console.log('SDK:LOG: Starting file download...', fileUrl);
190
196
 
191
197
  // Get cookies using CookieManager
192
198
  let cookieString = '';
@@ -196,7 +202,7 @@ export const WebView = ({
196
202
  .map((key) => `${key}=${cookies[key]?.value ?? ''}`)
197
203
  .join('; ');
198
204
  } catch (e) {
199
- console.error('Failed to get cookies:', e);
205
+ console.error('SDK:LOG: Failed to get cookies:', e);
200
206
  }
201
207
 
202
208
  // Create a clean filename from the URL
@@ -216,7 +222,7 @@ export const WebView = ({
216
222
  throw new Error('Could not determine download path');
217
223
  }
218
224
 
219
- console.log('Downloading to:', downloadPath);
225
+ console.log('SDK:LOG: Downloading to:', downloadPath);
220
226
 
221
227
  const options = {
222
228
  fromUrl: fileUrl,
@@ -228,14 +234,14 @@ export const WebView = ({
228
234
  },
229
235
  background: true,
230
236
  begin: (res: any) => {
231
- console.log('Download started with headers:', res);
237
+ console.log('SDK:LOG: Download started with headers:', res);
232
238
  },
233
239
  };
234
240
 
235
241
  const response = await RNFS.downloadFile(options).promise;
236
242
 
237
243
  if (response.statusCode === 200) {
238
- console.log('File downloaded to:', downloadPath);
244
+ console.log('SDK:LOG: File downloaded to:', downloadPath);
239
245
 
240
246
  if (Platform.OS === 'android') {
241
247
  ToastAndroid.show('File downloaded successfully', ToastAndroid.SHORT);
@@ -253,20 +259,21 @@ export const WebView = ({
253
259
  throw new Error(`Download failed with status ${response.statusCode}`);
254
260
  }
255
261
  } catch (error) {
256
- console.error('File download/open error:', error);
262
+ console.error('SDK:LOG: File download/open error:', error);
257
263
  }
258
264
  };
259
265
 
260
266
  const handleOnShouldStartLoadWithRequest = (event: WebViewNavigation) => {
261
267
  const { url } = event;
262
- console.log('URL:', url);
263
- 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') {
264
271
  return true;
265
272
  }
266
273
 
267
274
  if (Platform.OS === 'android' && url) {
268
275
  if (url.includes('ms-outlook://')) {
269
- console.log('Intent to open Outlook detected');
276
+ console.log('SDK:LOG: Intent to open Outlook detected');
270
277
  openMailAppIntent('outlook').then(
271
278
  (ok) =>
272
279
  !ok &&
@@ -275,7 +282,7 @@ export const WebView = ({
275
282
  return false; // cancel WebView navigation
276
283
  }
277
284
  if (url.includes('googlegmail://')) {
278
- console.log('Intent to open Gmail detected');
285
+ console.log('SDK:LOG: Intent to open Gmail detected');
279
286
  openMailAppIntent('gmail').then(
280
287
  (ok) =>
281
288
  !ok && ToastAndroid.show('Gmail app not found', ToastAndroid.SHORT)
@@ -283,7 +290,7 @@ export const WebView = ({
283
290
  return false;
284
291
  }
285
292
  if (url.includes('ymail://')) {
286
- console.log('Intent to open Yahoo Mail detected');
293
+ console.log('SDK:LOG: Intent to open Yahoo Mail detected');
287
294
  openMailAppIntent('yahoo').then(
288
295
  (ok) =>
289
296
  !ok &&
@@ -297,10 +304,10 @@ export const WebView = ({
297
304
  url?.includes('/session-expired?status=') ||
298
305
  url?.includes('/redirect?status=')
299
306
  ) {
300
- console.log('overriding url');
307
+ console.log('SDK:LOG: overriding url');
301
308
  const status = getQueryParam(url, 'status');
302
309
 
303
- console.log('Status thrown from webview ', status);
310
+ console.log('SDK:LOG: Status thrown from webview ', status);
304
311
 
305
312
  StatusBar.setBackgroundColor('#7E7E7EFF');
306
313
  clearAllCookies();
@@ -308,7 +315,7 @@ export const WebView = ({
308
315
  return false;
309
316
  }
310
317
  if (url?.includes('/api/user/redirect')) {
311
- console.log('overriding redirect url');
318
+ console.log('SDK:LOG: overriding redirect url');
312
319
 
313
320
  StatusBar.setBackgroundColor('#7E7E7EFF');
314
321
  clearAllCookies();
@@ -327,7 +334,7 @@ export const WebView = ({
327
334
  url !== 'about:blank' &&
328
335
  url !== 'about:srcdoc'
329
336
  ) {
330
- console.log('External URL detected:', url);
337
+ console.log('SDK:LOG: External URL detected:', url);
331
338
  handleExternalUrl(url);
332
339
  return false;
333
340
  }
@@ -336,7 +343,7 @@ export const WebView = ({
336
343
  url.includes('/statements/') ||
337
344
  url.includes('/download_statements')
338
345
  ) {
339
- console.log('File download URL detected:', url);
346
+ console.log('SDK:LOG: File download URL detected:', url);
340
347
  downloadAndOpenFile(url);
341
348
  return false;
342
349
  }
@@ -369,17 +376,44 @@ export const WebView = ({
369
376
  );
370
377
 
371
378
  // Cookie injection script
372
-
373
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;
374
391
  window.onerror = function(message, source, lineno, colno, error) {
375
- if (message.includes('RATE_LIMIT_USER')) {
376
- window.ReactNativeWebView.postMessage(JSON.stringify({
377
- type: 'RATE_LIMIT_ERROR'
378
- }));
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) {}
379
400
  }
380
401
  };
381
- true;
382
- `;
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
+ `;
383
417
 
384
418
  const requestPermission = async (permission: Permission) => {
385
419
  try {
@@ -392,14 +426,14 @@ export const WebView = ({
392
426
 
393
427
  return result === RESULTS.GRANTED;
394
428
  } catch (error) {
395
- console.error('Permission request failed:', error);
429
+ console.error('SDK:LOG: Permission request failed:', error);
396
430
  return false;
397
431
  }
398
432
  };
399
433
 
400
434
  const handlePermissionRequest = async (event: any) => {
401
435
  const { resources } = event.nativeEvent;
402
- console.log('Permission requested:', resources);
436
+ console.log('SDK:LOG: Permission requested:', resources);
403
437
 
404
438
  const permissionsToRequest: Permission[] = [];
405
439
 
@@ -439,12 +473,52 @@ export const WebView = ({
439
473
  event.nativeEvent.deny();
440
474
  }
441
475
  } catch (error) {
442
- console.error('Permission handling failed:', error);
476
+ console.error('SDK:LOG: Permission handling failed:', error);
443
477
  // @ts-ignore - deny exists on the event
444
478
  event.nativeEvent.deny();
445
479
  }
446
480
  };
447
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
+
448
522
  const handleWebViewLoadEnd = (syntheticEvent: any) => {
449
523
  const loadedUrl = syntheticEvent?.nativeEvent?.url || url;
450
524
 
@@ -480,7 +554,9 @@ export const WebView = ({
480
554
  allowsInlineMediaPlayback={true}
481
555
  onShouldStartLoadWithRequest={handleOnShouldStartLoadWithRequest}
482
556
  onNavigationStateChange={(navState) => {
557
+ console.log('SDK:LOG: NAV STATE URL:', navState.url);
483
558
  setCanGoBack(navState.canGoBack);
559
+ canGoBackRef.current = navState.canGoBack;
484
560
  }}
485
561
  injectedJavaScript={injectedJavaScript}
486
562
  decelerationRate={Platform.OS === 'ios' ? 'normal' : 0.9}
@@ -489,6 +565,7 @@ export const WebView = ({
489
565
  setSupportMultipleWindows={false}
490
566
  mixedContentMode="always"
491
567
  allowsLinkPreview={true}
568
+ onMessage={handleMessage}
492
569
  />
493
570
  </SafeAreaView>
494
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