@dynamic-labs/react-native-extension 4.72.0 → 4.75.0

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/index.cjs CHANGED
@@ -34,7 +34,7 @@ function _interopNamespace(e) {
34
34
  return Object.freeze(n);
35
35
  }
36
36
 
37
- var version = "4.72.0";
37
+ var version = "4.75.0";
38
38
 
39
39
  function _extends() {
40
40
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
@@ -90,7 +90,7 @@ const useMessageTransportWebViewBridge = (core, webViewRef) => {
90
90
  const sendMessageToWebView = message => {
91
91
  var _a;
92
92
  if (!webViewRef.current) {
93
- logger.debug('WebView ref not found');
93
+ logger.debug(`WebView ref not found — dropping message type=${message.type} origin=${message.origin}`);
94
94
  return;
95
95
  }
96
96
  /**
@@ -152,6 +152,7 @@ const styles = reactNative.StyleSheet.create({
152
152
 
153
153
  const CLEAR_STATE_PARAM = 'clear-state';
154
154
  const ENVIRONMENT_ID_PARAM = 'environmentId';
155
+ const WEBVIEW_START_TIME_PARAM = 'webviewStartTime';
155
156
 
156
157
  const setClearStateToUrl = webViewUrl => {
157
158
  const newWebViewUrl = new URL(webViewUrl);
@@ -257,6 +258,11 @@ const assignEnvironmentIdToUrl = (url, environmentId) => {
257
258
  return _url;
258
259
  };
259
260
 
261
+ const assignStartTimeToUrl = url => {
262
+ url.searchParams.set(WEBVIEW_START_TIME_PARAM, Date.now().toString());
263
+ return url;
264
+ };
265
+
260
266
  const waasOrigins = ['https://app.dynamic-preprod.xyz', 'https://app.dynamicauth.com'];
261
267
  const turnkeyOrigins = ['https://recovery.turnkey.com', 'https://export.turnkey.com'];
262
268
  const WebView = ({
@@ -271,8 +277,7 @@ const WebView = ({
271
277
  const {
272
278
  visible
273
279
  } = useWebViewVisibility(core);
274
- const [webViewUrl, setWebViewUrl] = react.useState(assignEnvironmentIdToUrl(initialWebViewUrl, core.environmentId));
275
- const webViewKey = react.useMemo(() => webViewUrl.toString(), [webViewUrl]);
280
+ const [webViewUrl, setWebViewUrl] = react.useState(() => assignStartTimeToUrl(assignEnvironmentIdToUrl(initialWebViewUrl, core.environmentId)));
276
281
  const {
277
282
  onMessageHandler
278
283
  } = useMessageTransportWebViewBridge(core, webViewRef);
@@ -286,7 +291,7 @@ const WebView = ({
286
291
  },
287
292
  // eslint-disable-next-line react-hooks/exhaustive-deps -- we only care about the unmount callback
288
293
  []);
289
- const blockAndReloadWebView = react.useCallback(() => {
294
+ const blockAndReloadWebView = react.useCallback(reason => {
290
295
  /**
291
296
  * Should not reload the webview if it is already blocked
292
297
  * and loading a new page
@@ -303,14 +308,14 @@ const WebView = ({
303
308
  * the webview is reloading
304
309
  */
305
310
  core.messageTransport.block();
306
- // Increase the retry
307
311
  setWebViewUrl(webViewUrl => {
308
312
  const newWebViewUrl = increaseRetryToUrl(webViewUrl);
309
- logger.debug('Reloading webview', newWebViewUrl.toString());
313
+ logger.debug(`Reloading webview reason=${reason} url=${newWebViewUrl.toString()}`);
310
314
  return newWebViewUrl;
311
315
  });
312
316
  }, [core]);
313
- react.useEffect(() => core.messageTransport.recoveryManager.onRecoveryRequested(blockAndReloadWebView), [core, blockAndReloadWebView]);
317
+ const blockAndReloadWebViewOsKill = react.useCallback(() => blockAndReloadWebView('os_kill'), [blockAndReloadWebView]);
318
+ react.useEffect(() => core.messageTransport.recoveryManager.onRecoveryRequested(() => blockAndReloadWebView('recovery')), [core, blockAndReloadWebView]);
314
319
  const setWebViewLoadError = react.useCallback(() => {
315
320
  // Error was already thrown, do not throw again
316
321
  if (core.initialization.error instanceof WebViewFailedToLoadError) return;
@@ -355,8 +360,8 @@ const WebView = ({
355
360
  onLoad: onLoad,
356
361
  hideKeyboardAccessoryView: true,
357
362
  webviewDebuggingEnabled: _webviewDebuggingEnabled,
358
- onContentProcessDidTerminate: blockAndReloadWebView,
359
- onRenderProcessGone: blockAndReloadWebView,
363
+ onContentProcessDidTerminate: blockAndReloadWebViewOsKill,
364
+ onRenderProcessGone: blockAndReloadWebViewOsKill,
360
365
  onError: onWebViewLoadError,
361
366
  setSupportMultipleWindows: false,
362
367
  onShouldStartLoadWithRequest: request => {
@@ -377,7 +382,7 @@ const WebView = ({
377
382
  }
378
383
  return false;
379
384
  }
380
- }, webViewKey);
385
+ });
381
386
  };
382
387
  const getUrl = url => {
383
388
  try {
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { assertPackageVersion } from '@dynamic-labs/assert-package-version';
2
2
  import { StyleSheet, Platform } from 'react-native';
3
- import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
3
+ import { useEffect, useRef, useState, useCallback } from 'react';
4
4
  import { WebView as WebView$1 } from 'react-native-webview';
5
5
  import { Logger } from '@dynamic-labs/logger';
6
6
  import { messageTransportDataJsonReviver, parseMessageTransportData, messageTransportDataJsonReplacer, createRequestChannel } from '@dynamic-labs/message-transport';
@@ -12,7 +12,7 @@ import { getItemAsync, deleteItemAsync, setItemAsync } from 'expo-secure-store';
12
12
  import { createPasskey, PasskeyStamper } from '@turnkey/react-native-passkey-stamper';
13
13
  import { requireNativeModule } from 'expo-modules-core';
14
14
 
15
- var version = "4.72.0";
15
+ var version = "4.75.0";
16
16
 
17
17
  function _extends() {
18
18
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
@@ -68,7 +68,7 @@ const useMessageTransportWebViewBridge = (core, webViewRef) => {
68
68
  const sendMessageToWebView = message => {
69
69
  var _a;
70
70
  if (!webViewRef.current) {
71
- logger.debug('WebView ref not found');
71
+ logger.debug(`WebView ref not found — dropping message type=${message.type} origin=${message.origin}`);
72
72
  return;
73
73
  }
74
74
  /**
@@ -130,6 +130,7 @@ const styles = StyleSheet.create({
130
130
 
131
131
  const CLEAR_STATE_PARAM = 'clear-state';
132
132
  const ENVIRONMENT_ID_PARAM = 'environmentId';
133
+ const WEBVIEW_START_TIME_PARAM = 'webviewStartTime';
133
134
 
134
135
  const setClearStateToUrl = webViewUrl => {
135
136
  const newWebViewUrl = new URL(webViewUrl);
@@ -235,6 +236,11 @@ const assignEnvironmentIdToUrl = (url, environmentId) => {
235
236
  return _url;
236
237
  };
237
238
 
239
+ const assignStartTimeToUrl = url => {
240
+ url.searchParams.set(WEBVIEW_START_TIME_PARAM, Date.now().toString());
241
+ return url;
242
+ };
243
+
238
244
  const waasOrigins = ['https://app.dynamic-preprod.xyz', 'https://app.dynamicauth.com'];
239
245
  const turnkeyOrigins = ['https://recovery.turnkey.com', 'https://export.turnkey.com'];
240
246
  const WebView = ({
@@ -249,8 +255,7 @@ const WebView = ({
249
255
  const {
250
256
  visible
251
257
  } = useWebViewVisibility(core);
252
- const [webViewUrl, setWebViewUrl] = useState(assignEnvironmentIdToUrl(initialWebViewUrl, core.environmentId));
253
- const webViewKey = useMemo(() => webViewUrl.toString(), [webViewUrl]);
258
+ const [webViewUrl, setWebViewUrl] = useState(() => assignStartTimeToUrl(assignEnvironmentIdToUrl(initialWebViewUrl, core.environmentId)));
254
259
  const {
255
260
  onMessageHandler
256
261
  } = useMessageTransportWebViewBridge(core, webViewRef);
@@ -264,7 +269,7 @@ const WebView = ({
264
269
  },
265
270
  // eslint-disable-next-line react-hooks/exhaustive-deps -- we only care about the unmount callback
266
271
  []);
267
- const blockAndReloadWebView = useCallback(() => {
272
+ const blockAndReloadWebView = useCallback(reason => {
268
273
  /**
269
274
  * Should not reload the webview if it is already blocked
270
275
  * and loading a new page
@@ -281,14 +286,14 @@ const WebView = ({
281
286
  * the webview is reloading
282
287
  */
283
288
  core.messageTransport.block();
284
- // Increase the retry
285
289
  setWebViewUrl(webViewUrl => {
286
290
  const newWebViewUrl = increaseRetryToUrl(webViewUrl);
287
- logger.debug('Reloading webview', newWebViewUrl.toString());
291
+ logger.debug(`Reloading webview reason=${reason} url=${newWebViewUrl.toString()}`);
288
292
  return newWebViewUrl;
289
293
  });
290
294
  }, [core]);
291
- useEffect(() => core.messageTransport.recoveryManager.onRecoveryRequested(blockAndReloadWebView), [core, blockAndReloadWebView]);
295
+ const blockAndReloadWebViewOsKill = useCallback(() => blockAndReloadWebView('os_kill'), [blockAndReloadWebView]);
296
+ useEffect(() => core.messageTransport.recoveryManager.onRecoveryRequested(() => blockAndReloadWebView('recovery')), [core, blockAndReloadWebView]);
292
297
  const setWebViewLoadError = useCallback(() => {
293
298
  // Error was already thrown, do not throw again
294
299
  if (core.initialization.error instanceof WebViewFailedToLoadError) return;
@@ -333,8 +338,8 @@ const WebView = ({
333
338
  onLoad: onLoad,
334
339
  hideKeyboardAccessoryView: true,
335
340
  webviewDebuggingEnabled: _webviewDebuggingEnabled,
336
- onContentProcessDidTerminate: blockAndReloadWebView,
337
- onRenderProcessGone: blockAndReloadWebView,
341
+ onContentProcessDidTerminate: blockAndReloadWebViewOsKill,
342
+ onRenderProcessGone: blockAndReloadWebViewOsKill,
338
343
  onError: onWebViewLoadError,
339
344
  setSupportMultipleWindows: false,
340
345
  onShouldStartLoadWithRequest: request => {
@@ -355,7 +360,7 @@ const WebView = ({
355
360
  }
356
361
  return false;
357
362
  }
358
- }, webViewKey);
363
+ });
359
364
  };
360
365
  const getUrl = url => {
361
366
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/react-native-extension",
3
- "version": "4.72.0",
3
+ "version": "4.75.0",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./src/index.d.ts",
@@ -18,11 +18,11 @@
18
18
  "@turnkey/react-native-passkey-stamper": "1.2.7",
19
19
  "@react-native-documents/picker": "^11.0.0",
20
20
  "react-native-fs": ">=2.20.0",
21
- "@dynamic-labs/assert-package-version": "4.72.0",
22
- "@dynamic-labs/client": "4.72.0",
23
- "@dynamic-labs/logger": "4.72.0",
24
- "@dynamic-labs/message-transport": "4.72.0",
25
- "@dynamic-labs/webview-messages": "4.72.0"
21
+ "@dynamic-labs/assert-package-version": "4.75.0",
22
+ "@dynamic-labs/client": "4.75.0",
23
+ "@dynamic-labs/logger": "4.75.0",
24
+ "@dynamic-labs/message-transport": "4.75.0",
25
+ "@dynamic-labs/webview-messages": "4.75.0"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": ">=18.0.0 <20.0.0",
@@ -1,2 +1,3 @@
1
1
  export declare const CLEAR_STATE_PARAM = "clear-state";
2
2
  export declare const ENVIRONMENT_ID_PARAM = "environmentId";
3
+ export declare const WEBVIEW_START_TIME_PARAM = "webviewStartTime";
@@ -0,0 +1 @@
1
+ export declare const assignStartTimeToUrl: (url: URL) => URL;
@@ -0,0 +1 @@
1
+ export { assignStartTimeToUrl } from './assignStartTimeToUrl';