@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.
|
|
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(
|
|
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(
|
|
313
|
+
logger.debug(`Reloading webview reason=${reason} url=${newWebViewUrl.toString()}`);
|
|
310
314
|
return newWebViewUrl;
|
|
311
315
|
});
|
|
312
316
|
}, [core]);
|
|
313
|
-
react.
|
|
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:
|
|
359
|
-
onRenderProcessGone:
|
|
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
|
-
}
|
|
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
|
|
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.
|
|
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(
|
|
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(
|
|
291
|
+
logger.debug(`Reloading webview reason=${reason} url=${newWebViewUrl.toString()}`);
|
|
288
292
|
return newWebViewUrl;
|
|
289
293
|
});
|
|
290
294
|
}, [core]);
|
|
291
|
-
|
|
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:
|
|
337
|
-
onRenderProcessGone:
|
|
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
|
-
}
|
|
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.
|
|
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.
|
|
22
|
-
"@dynamic-labs/client": "4.
|
|
23
|
-
"@dynamic-labs/logger": "4.
|
|
24
|
-
"@dynamic-labs/message-transport": "4.
|
|
25
|
-
"@dynamic-labs/webview-messages": "4.
|
|
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",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const assignStartTimeToUrl: (url: URL) => URL;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { assignStartTimeToUrl } from './assignStartTimeToUrl';
|