@dynamic-labs/react-native-extension 4.56.0 → 4.57.1
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
|
@@ -33,7 +33,7 @@ function _interopNamespace(e) {
|
|
|
33
33
|
return Object.freeze(n);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
var version = "4.
|
|
36
|
+
var version = "4.57.1";
|
|
37
37
|
|
|
38
38
|
function _extends() {
|
|
39
39
|
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
@@ -45,6 +45,12 @@ function _extends() {
|
|
|
45
45
|
}, _extends.apply(null, arguments);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
class WebViewFailedToLoadError extends Error {
|
|
49
|
+
constructor() {
|
|
50
|
+
super('Could not load Dynamic WebView');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
48
54
|
const logger = new logger$1.Logger('react-native-extension');
|
|
49
55
|
|
|
50
56
|
const useMessageTransportWebViewBridge = (core, webViewRef) => {
|
|
@@ -160,9 +166,12 @@ const useWebViewRecoveryTimeout = ({
|
|
|
160
166
|
webViewUrl,
|
|
161
167
|
disableRecovery,
|
|
162
168
|
recoveryTimeout,
|
|
163
|
-
setWebViewUrl
|
|
169
|
+
setWebViewUrl,
|
|
170
|
+
onFailedToLoadAfterClearState: _onFailedToLoadAfterClearState = () => {}
|
|
164
171
|
}) => {
|
|
165
172
|
const timeoutRef = react.useRef(null);
|
|
173
|
+
const onFailedToLoadAfterClearStateRef = react.useRef(_onFailedToLoadAfterClearState);
|
|
174
|
+
onFailedToLoadAfterClearStateRef.current = _onFailedToLoadAfterClearState;
|
|
166
175
|
/**
|
|
167
176
|
* Clear timeout on unmount
|
|
168
177
|
*/
|
|
@@ -179,6 +188,7 @@ const useWebViewRecoveryTimeout = ({
|
|
|
179
188
|
}
|
|
180
189
|
if (hasClearStateInUrl(webViewUrl)) {
|
|
181
190
|
logger.debug('timeout recovery: disabled because webview already cleared its state', webViewUrl.toString());
|
|
191
|
+
onFailedToLoadAfterClearStateRef.current();
|
|
182
192
|
return;
|
|
183
193
|
}
|
|
184
194
|
logger.debug('timeout recovery: registering timeout', webViewUrl.toString());
|
|
@@ -300,6 +310,11 @@ const WebView = ({
|
|
|
300
310
|
});
|
|
301
311
|
}, [core]);
|
|
302
312
|
react.useEffect(() => core.messageTransport.recoveryManager.onRecoveryRequested(blockAndReloadWebView), [core, blockAndReloadWebView]);
|
|
313
|
+
const setWebViewLoadError = react.useCallback(() => {
|
|
314
|
+
// Error was already thrown, do not throw again
|
|
315
|
+
if (core.initialization.error instanceof WebViewFailedToLoadError) return;
|
|
316
|
+
core.initialization.error = new WebViewFailedToLoadError();
|
|
317
|
+
}, [core]);
|
|
303
318
|
/**
|
|
304
319
|
* Reload the webview with a clean state when a timeout is reached
|
|
305
320
|
* and the webview did not get to the loaded state yet
|
|
@@ -307,13 +322,21 @@ const WebView = ({
|
|
|
307
322
|
const startRecoveryTimeout = useWebViewRecoveryTimeout({
|
|
308
323
|
core,
|
|
309
324
|
disableRecovery: _disableRecovery,
|
|
325
|
+
onFailedToLoadAfterClearState: setWebViewLoadError,
|
|
310
326
|
recoveryTimeout: _recoveryTimeout,
|
|
311
327
|
setWebViewUrl,
|
|
312
328
|
webViewUrl
|
|
313
329
|
});
|
|
314
|
-
const
|
|
315
|
-
|
|
316
|
-
|
|
330
|
+
const webViewLoadErrorCountRef = react.useRef(0);
|
|
331
|
+
const onWebViewLoadError = react.useCallback(() => {
|
|
332
|
+
webViewLoadErrorCountRef.current = webViewLoadErrorCountRef.current + 1;
|
|
333
|
+
/**
|
|
334
|
+
* This is the first attempt to load the webview, do not throw an error
|
|
335
|
+
* because the recovery system will attempt to reload the webview
|
|
336
|
+
*/
|
|
337
|
+
if (webViewLoadErrorCountRef.current === 1) return;
|
|
338
|
+
setWebViewLoadError();
|
|
339
|
+
}, [setWebViewLoadError]);
|
|
317
340
|
const {
|
|
318
341
|
onLoad,
|
|
319
342
|
onLoadStart
|
|
@@ -333,7 +356,7 @@ const WebView = ({
|
|
|
333
356
|
webviewDebuggingEnabled: _webviewDebuggingEnabled,
|
|
334
357
|
onContentProcessDidTerminate: blockAndReloadWebView,
|
|
335
358
|
onRenderProcessGone: blockAndReloadWebView,
|
|
336
|
-
onError:
|
|
359
|
+
onError: onWebViewLoadError,
|
|
337
360
|
setSupportMultipleWindows: false,
|
|
338
361
|
onShouldStartLoadWithRequest: request => {
|
|
339
362
|
const requestUrl = getUrl(request.url);
|
|
@@ -660,3 +683,4 @@ const ReactNativeExtension = ({
|
|
|
660
683
|
assertPackageVersion.assertPackageVersion('@dynamic-labs/react-native-extension', version);
|
|
661
684
|
|
|
662
685
|
exports.ReactNativeExtension = ReactNativeExtension;
|
|
686
|
+
exports.WebViewFailedToLoadError = WebViewFailedToLoadError;
|
package/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import { openAuthSessionAsync } from 'expo-web-browser';
|
|
|
11
11
|
import { getItemAsync, deleteItemAsync, setItemAsync } from 'expo-secure-store';
|
|
12
12
|
import { createPasskey, PasskeyStamper } from '@turnkey/react-native-passkey-stamper';
|
|
13
13
|
|
|
14
|
-
var version = "4.
|
|
14
|
+
var version = "4.57.1";
|
|
15
15
|
|
|
16
16
|
function _extends() {
|
|
17
17
|
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
@@ -23,6 +23,12 @@ function _extends() {
|
|
|
23
23
|
}, _extends.apply(null, arguments);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
class WebViewFailedToLoadError extends Error {
|
|
27
|
+
constructor() {
|
|
28
|
+
super('Could not load Dynamic WebView');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
const logger = new Logger('react-native-extension');
|
|
27
33
|
|
|
28
34
|
const useMessageTransportWebViewBridge = (core, webViewRef) => {
|
|
@@ -138,9 +144,12 @@ const useWebViewRecoveryTimeout = ({
|
|
|
138
144
|
webViewUrl,
|
|
139
145
|
disableRecovery,
|
|
140
146
|
recoveryTimeout,
|
|
141
|
-
setWebViewUrl
|
|
147
|
+
setWebViewUrl,
|
|
148
|
+
onFailedToLoadAfterClearState: _onFailedToLoadAfterClearState = () => {}
|
|
142
149
|
}) => {
|
|
143
150
|
const timeoutRef = useRef(null);
|
|
151
|
+
const onFailedToLoadAfterClearStateRef = useRef(_onFailedToLoadAfterClearState);
|
|
152
|
+
onFailedToLoadAfterClearStateRef.current = _onFailedToLoadAfterClearState;
|
|
144
153
|
/**
|
|
145
154
|
* Clear timeout on unmount
|
|
146
155
|
*/
|
|
@@ -157,6 +166,7 @@ const useWebViewRecoveryTimeout = ({
|
|
|
157
166
|
}
|
|
158
167
|
if (hasClearStateInUrl(webViewUrl)) {
|
|
159
168
|
logger.debug('timeout recovery: disabled because webview already cleared its state', webViewUrl.toString());
|
|
169
|
+
onFailedToLoadAfterClearStateRef.current();
|
|
160
170
|
return;
|
|
161
171
|
}
|
|
162
172
|
logger.debug('timeout recovery: registering timeout', webViewUrl.toString());
|
|
@@ -278,6 +288,11 @@ const WebView = ({
|
|
|
278
288
|
});
|
|
279
289
|
}, [core]);
|
|
280
290
|
useEffect(() => core.messageTransport.recoveryManager.onRecoveryRequested(blockAndReloadWebView), [core, blockAndReloadWebView]);
|
|
291
|
+
const setWebViewLoadError = useCallback(() => {
|
|
292
|
+
// Error was already thrown, do not throw again
|
|
293
|
+
if (core.initialization.error instanceof WebViewFailedToLoadError) return;
|
|
294
|
+
core.initialization.error = new WebViewFailedToLoadError();
|
|
295
|
+
}, [core]);
|
|
281
296
|
/**
|
|
282
297
|
* Reload the webview with a clean state when a timeout is reached
|
|
283
298
|
* and the webview did not get to the loaded state yet
|
|
@@ -285,13 +300,21 @@ const WebView = ({
|
|
|
285
300
|
const startRecoveryTimeout = useWebViewRecoveryTimeout({
|
|
286
301
|
core,
|
|
287
302
|
disableRecovery: _disableRecovery,
|
|
303
|
+
onFailedToLoadAfterClearState: setWebViewLoadError,
|
|
288
304
|
recoveryTimeout: _recoveryTimeout,
|
|
289
305
|
setWebViewUrl,
|
|
290
306
|
webViewUrl
|
|
291
307
|
});
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
308
|
+
const webViewLoadErrorCountRef = useRef(0);
|
|
309
|
+
const onWebViewLoadError = useCallback(() => {
|
|
310
|
+
webViewLoadErrorCountRef.current = webViewLoadErrorCountRef.current + 1;
|
|
311
|
+
/**
|
|
312
|
+
* This is the first attempt to load the webview, do not throw an error
|
|
313
|
+
* because the recovery system will attempt to reload the webview
|
|
314
|
+
*/
|
|
315
|
+
if (webViewLoadErrorCountRef.current === 1) return;
|
|
316
|
+
setWebViewLoadError();
|
|
317
|
+
}, [setWebViewLoadError]);
|
|
295
318
|
const {
|
|
296
319
|
onLoad,
|
|
297
320
|
onLoadStart
|
|
@@ -311,7 +334,7 @@ const WebView = ({
|
|
|
311
334
|
webviewDebuggingEnabled: _webviewDebuggingEnabled,
|
|
312
335
|
onContentProcessDidTerminate: blockAndReloadWebView,
|
|
313
336
|
onRenderProcessGone: blockAndReloadWebView,
|
|
314
|
-
onError:
|
|
337
|
+
onError: onWebViewLoadError,
|
|
315
338
|
setSupportMultipleWindows: false,
|
|
316
339
|
onShouldStartLoadWithRequest: request => {
|
|
317
340
|
const requestUrl = getUrl(request.url);
|
|
@@ -637,4 +660,4 @@ const ReactNativeExtension = ({
|
|
|
637
660
|
|
|
638
661
|
assertPackageVersion('@dynamic-labs/react-native-extension', version);
|
|
639
662
|
|
|
640
|
-
export { ReactNativeExtension };
|
|
663
|
+
export { ReactNativeExtension, WebViewFailedToLoadError };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/react-native-extension",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.57.1",
|
|
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.1.3",
|
|
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.57.1",
|
|
22
|
+
"@dynamic-labs/client": "4.57.1",
|
|
23
|
+
"@dynamic-labs/logger": "4.57.1",
|
|
24
|
+
"@dynamic-labs/message-transport": "4.57.1",
|
|
25
|
+
"@dynamic-labs/webview-messages": "4.57.1"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"react": ">=18.0.0 <20.0.0",
|
|
@@ -6,6 +6,7 @@ type UseWebViewRecoveryTimeoutProps = {
|
|
|
6
6
|
disableRecovery: boolean;
|
|
7
7
|
recoveryTimeout: number;
|
|
8
8
|
setWebViewUrl: Dispatch<SetStateAction<URL>>;
|
|
9
|
+
onFailedToLoadAfterClearState?: () => void;
|
|
9
10
|
};
|
|
10
|
-
export declare const useWebViewRecoveryTimeout: ({ core, webViewUrl, disableRecovery, recoveryTimeout, setWebViewUrl, }: UseWebViewRecoveryTimeoutProps) => () => void;
|
|
11
|
+
export declare const useWebViewRecoveryTimeout: ({ core, webViewUrl, disableRecovery, recoveryTimeout, setWebViewUrl, onFailedToLoadAfterClearState, }: UseWebViewRecoveryTimeoutProps) => () => void;
|
|
11
12
|
export {};
|
package/src/index.d.ts
CHANGED