mirror of
https://github.com/stablyai/orca.git
synced 2026-11-13 09:27:29 +00:00
* build(mobile): upgrade to Expo SDK 58 and React Native 0.88 Expo 58 drops Zod from @expo/cli, which clears the last Zod 3 advisory (GHSA-mrhx-c7xc-m3w5) in mobile along with its local patch and override. - Expo 55 -> 58, React Native 0.83 -> 0.88, React 19.3, gesture-handler 3, webview 14, reanimated 4.7, worklets 0.13 (SDK 58 bundled versions, pinned below today's batch to respect minimumReleaseAge). - Port the react-native and react-native-webview patches unchanged; drop expo-constants, expo-notifications, @expo/cli, expo-router, zod and query-string patches plus the zod/query-string/xcode>uuid overrides, which upstream fixed or no longer need. - iOS minimum rises to 16.4 (Expo 58 / RN 0.88 requirement). - Migrate to RN 0.88 strict types: instance ref types, NamedStyles, AppState.currentState, list header/footer nulls. - Replace removed runtime APIs: InteractionManager -> idle callback with a macrotask fallback; StyleSheet.absoluteFillObject -> absoluteFill; FileHandle.readBytes -> readBytesSync (it became async). - Resolve react-native/asset-registry for shared assets in Metro and alias the old registry path for react-native-svg in the desktop mobile-web bundle. - Reduce the iOS scene plugin to the reconnect override; Expo 58's template now ships the scene delegate itself. * fix(mobile): bridge react-native-svg web imports and libsodium runtime for RN 0.88 - Share react-native-svg web shims between the mobile-web build and its render checks: map the old asset-registry path to react-native-web's registry and stub the Android-only touch-sound TurboModule. - Patch react-native-libsodium 1.7.0 to read the JSI runtime from the bridge proxy; RN 0.88 removed RCTCxxBridge.runtime. * fix(mobile): use Expo 58's legacy promise resolver for audio permissions * fix(mobile): skip null handles in the RPC recording timer shims for RN 0.88 types * style(mobile): format MobilePRSidebar after rebase * fix(mobile): name RN 0.88 text input refs for declarations; allow queued back in stack render check - Type text input refs with an exported interface so declaration emit can name hook results (RN 0.88 aliases TextInputInstance to an unexported class). - Expo Router 58 drains back() after a commit; check the interrupted push's exit from the frame it starts, bounded to three frames of lag. * chore(mobile): justify the text input handle interface for React Doctor * chore(mobile): use a nameable intersection alias for text input refs * fix(mobile): use sync expo-file-system writes, copies and moves on Expo 58 Expo 58 made File.write/copy/move and FileHandle.writeBytes return promises. Our callers never awaited them, so failures escaped their try/catch and the store's tmp-then-move and PDF writes could race their close or rename. * build(mobile): raise the page bundle budget to 10 MiB for Expo 58 Expo 58 adds about 310 KB to the page: expo-router (+258 KB, now carrying React Navigation, net about +110 KB) and Reanimated 4.7 (+152 KB). Main had 85 KB of headroom left. 10 MiB still stays within the 10 MiB per-asset contract. * fix(mobile): drop the window-metrics seed RN 0.88 removed from Android RN 0.88 no longer holds window metrics: DeviceInfoModule reads the activity's WindowMetrics on demand and setWindowDisplayMetrics is gone, so MainActivity no longer compiled. Layout scale still comes from the screen metrics we reseed. --------- Co-authored-by: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com>
57 lines
3.1 KiB
Diff
57 lines
3.1 KiB
Diff
diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java
|
|
index 80c68034b193a47bedb56ca527352de9548e8ac6..977c068a74c88c0322fca2a4bbffab8bc1ba719d 100644
|
|
--- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java
|
|
+++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java
|
|
@@ -253,6 +253,12 @@ public class RNCWebView extends WebView implements LifecycleEventListener {
|
|
this.bridgeListener = new WebViewCompat.WebMessageListener() {
|
|
@Override
|
|
public void onPostMessage(@NonNull WebView view, @NonNull WebMessageCompat message, @NonNull Uri sourceOrigin, boolean isMainFrame, @NonNull JavaScriptReplyProxy replyProxy) {
|
|
+ // Orca: only the page's own document may message the app. A subframe (for example agent
|
|
+ // HTML in a sandboxed iframe) reaches this listener too, and getData() throws for a
|
|
+ // non-string message.
|
|
+ if (!isMainFrame || message.getType() != WebMessageCompat.TYPE_STRING) {
|
|
+ return;
|
|
+ }
|
|
RNCWebView.this.onMessage(message.getData(), sourceOrigin.toString());
|
|
}
|
|
};
|
|
diff --git a/apple/RNCWebViewImpl.m b/apple/RNCWebViewImpl.m
|
|
index 38904266dc37b006274104f4680778ffbfece369..28bd1df80722396ef33fa48bf539dc4abbb1ead9 100644
|
|
--- a/apple/RNCWebViewImpl.m
|
|
+++ b/apple/RNCWebViewImpl.m
|
|
@@ -790,12 +790,21 @@ RCTAutoInsetsProtocol>
|
|
didReceiveScriptMessage:(WKScriptMessage *)message
|
|
{
|
|
if ([message.name isEqualToString:HistoryShimName]) {
|
|
+ // Orca: the history shim is the page's own script; a subframe or non-string body is not it.
|
|
+ if (!message.frameInfo.isMainFrame || ![message.body isKindOfClass:[NSString class]]) {
|
|
+ return;
|
|
+ }
|
|
if (_onLoadingFinish) {
|
|
NSMutableDictionary<NSString *, id> *event = [self baseEvent];
|
|
[event addEntriesFromDictionary: @{@"navigationType": message.body}];
|
|
_onLoadingFinish(event);
|
|
}
|
|
} else if ([message.name isEqualToString:MessageHandlerName]) {
|
|
+ // Orca: only the page's own document may message the app. A subframe (for example agent HTML in
|
|
+ // a sandboxed iframe) reaches this handler too, and a non-string body is not a message.
|
|
+ if (!message.frameInfo.isMainFrame || ![message.body isKindOfClass:[NSString class]]) {
|
|
+ return;
|
|
+ }
|
|
if (_onMessage) {
|
|
NSMutableDictionary<NSString *, id> *event = [self baseEvent];
|
|
[event addEntriesFromDictionary: @{@"data": message.body}];
|
|
diff --git a/index.d.ts b/index.d.ts
|
|
index 10b9c145b920a6a2ba1fb09bd72150328fafe211..626a67a3d6aca587ee9e74a52b799a2c50b4c52b 100644
|
|
--- a/index.d.ts
|
|
+++ b/index.d.ts
|
|
@@ -5,7 +5,7 @@ export { FileDownload, WebViewMessageEvent, WebViewNavigation } from './lib/WebV
|
|
|
|
export type WebViewProps = IOSWebViewProps & AndroidWebViewProps & WindowsWebViewProps;
|
|
|
|
-declare class WebView<P = undefined> extends Component<WebViewProps & P> {
|
|
+declare class WebView<P = {}> extends Component<WebViewProps & P> {
|
|
/**
|
|
* Go back one page in the webview's history.
|
|
*/
|