From bfb97ca0c6a37984c6ea6a27d48dc8e706a4843d Mon Sep 17 00:00:00 2001 From: Joshua Horton Date: Thu, 22 May 2025 14:02:16 +0700 Subject: [PATCH 1/3] maint(web): upgrade Sentry to 8.55.0 Fixes: KEYMAN-WEB-RX (It was produced artificially after this PR's changes to validate them.) Cross-reference with https://github.com/getsentry/sentry-javascript/blob/master/docs/migration/v7-to-v8.md in regard to minimum supported versions. @keymanapp-test-bot skip --- .../KMEA/app/src/main/assets/keyboard.html | 1 - .../java/com/keyman/engine/KMManager.java | 4 +- android/KMEA/build.sh | 4 +- docs/minimum-versions.md | 2 +- .../Classes/Resource Management/Storage.swift | 4 - .../Contents/Resources/keyboard.html | 1 - ios/engine/build.sh | 2 - package-lock.json | 228 ++++++++++-------- resources/build/minimum-versions.inc.sh | 2 +- web/src/engine/sentry-manager/package.json | 2 +- web/src/engine/sentry-manager/src/index.ts | 12 +- 11 files changed, 128 insertions(+), 134 deletions(-) diff --git a/android/KMEA/app/src/main/assets/keyboard.html b/android/KMEA/app/src/main/assets/keyboard.html index 8d9d2d67dc..38f5ad617e 100644 --- a/android/KMEA/app/src/main/assets/keyboard.html +++ b/android/KMEA/app/src/main/assets/keyboard.html @@ -9,7 +9,6 @@ Keyman - diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index 76c73120e3..75b0443537 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -362,8 +362,7 @@ public final class KMManager { // Keyman files protected static final String KMFilename_KeyboardHtml = "keyboard.html"; protected static final String KMFilename_JSEngine = "keymanweb-webview.js"; - protected static final String KMFilename_JSSentry = "sentry.min.js"; - protected static final String KMFilename_JSSentryInit = "keyman-sentry.js"; + protected static final String KMFilename_JSSentry = "keyman-sentry.js"; protected static final String KMFilename_AndroidHost = "android-host.js"; protected static final String KMFilename_KmwCss = "kmwosk.css"; protected static final String KMFilename_KmwGlobeHintCss = "globe-hint.css"; @@ -982,7 +981,6 @@ public final class KMManager { copyAsset(context, KMFilename_JSEngine, "", true); copyAsset(context, KMFilename_JSSentry, "", true); - copyAsset(context, KMFilename_JSSentryInit, "", true); copyAsset(context, KMFilename_AndroidHost, "", true); copyAsset(context, KMFilename_KmwCss, "", true); copyAsset(context, KMFilename_KmwGlobeHintCss, "", true); diff --git a/android/KMEA/build.sh b/android/KMEA/build.sh index dcd4c9510a..4d4ea7f8e3 100755 --- a/android/KMEA/build.sh +++ b/android/KMEA/build.sh @@ -29,7 +29,7 @@ builder_describe "Builds Keyman Engine for Android." \ "configure" \ "build" \ "test Runs lint and unit tests." \ - ":engine Builds Engine" + ":engine Builds Engine" # parse before describe_outputs to check debug flags builder_parse "$@" @@ -82,8 +82,6 @@ if builder_start_action build:engine; then cp "$KEYMAN_WEB_ROOT/build/app/resources/osk/kmwosk.css" "$ENGINE_ASSETS/kmwosk.css" cp "$KEYMAN_WEB_ROOT/build/app/resources/osk/globe-hint.css" "$ENGINE_ASSETS/globe-hint.css" cp "$KEYMAN_WEB_ROOT/build/app/resources/osk/keymanweb-osk.ttf" "$ENGINE_ASSETS/keymanweb-osk.ttf" - - cp "$KEYMAN_ROOT/node_modules/@sentry/browser/build/bundle.min.js" "$ENGINE_ASSETS/sentry.min.js" cp "$KEYMAN_ROOT/web/src/engine/sentry-manager/build/lib/index.js" "$ENGINE_ASSETS/keyman-sentry.js" echo "Copying es6-shim polyfill" diff --git a/docs/minimum-versions.md b/docs/minimum-versions.md index b01ca18b51..28af8e676b 100644 --- a/docs/minimum-versions.md +++ b/docs/minimum-versions.md @@ -56,7 +56,7 @@ https://help.keyman.com/developer/engine/android/latest-version/ | KEYMAN_MIN_TARGET_VERSION_UBUNTU | 22.04 | | KEYMAN_MIN_TARGET_VERSION_WEB_CHROME | 95.0 | | KEYMAN_MIN_TARGET_VERSION_WEB_FIREFOX | 79.0 | -| KEYMAN_MIN_TARGET_VERSION_WEB_OPERA | 47.0 | +| KEYMAN_MIN_TARGET_VERSION_WEB_OPERA | 58.0 | | KEYMAN_MIN_TARGET_VERSION_WEB_SAFARI | 13.0 | | KEYMAN_MIN_TARGET_VERSION_WINDOWS | 10 | | KEYMAN_MIN_VERSION_ANDROID_SDK | 21 | diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Resource Management/Storage.swift b/ios/engine/KMEI/KeymanEngine/Classes/Resource Management/Storage.swift index f4d2006b4e..6775edb660 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Resource Management/Storage.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Resource Management/Storage.swift @@ -237,10 +237,6 @@ extension Storage { resourceName: "keymanweb-webview.js", dstDir: baseDir, excludeFromBackup: true) - try Storage.copy(from: bundle, - resourceName: "sentry.min.js", - dstDir: baseDir, - excludeFromBackup: true) try Storage.copy(from: bundle, resourceName: "keyman-sentry.js", dstDir: baseDir, diff --git a/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/keyboard.html b/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/keyboard.html index 7c538ae64a..5f2910839e 100644 --- a/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/keyboard.html +++ b/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/keyboard.html @@ -4,7 +4,6 @@ Keyman - diff --git a/ios/engine/build.sh b/ios/engine/build.sh index 5a8d02b840..fd473a2cdf 100755 --- a/ios/engine/build.sh +++ b/ios/engine/build.sh @@ -107,8 +107,6 @@ function update_bundle ( ) { cp "$KMW_RESOURCES/osk/kmwosk.css" "$BUNDLE_PATH/kmwosk.css" cp "$KMW_RESOURCES/osk/keymanweb-osk.ttf" "$BUNDLE_PATH/keymanweb-osk.ttf" cp "$KMW_PRODUCT/keymanweb-webview.js" "$BUNDLE_PATH/keymanweb-webview.js" - - cp "$KEYMAN_ROOT/node_modules/@sentry/browser/build/bundle.min.js" "$BUNDLE_PATH/sentry.min.js" cp "$KEYMAN_ROOT/web/src/engine/sentry-manager/build/lib/index.js" "$BUNDLE_PATH/keyman-sentry.js" } diff --git a/package-lock.json b/package-lock.json index cf7d1380da..268c33bf87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2908,6 +2908,100 @@ "node": ">=0.6.19" } }, + "node_modules/@sentry-internal/browser-utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz", + "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "8.55.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/browser-utils/node_modules/@sentry/core": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz", + "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/feedback": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz", + "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "8.55.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/feedback/node_modules/@sentry/core": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz", + "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz", + "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry-internal/browser-utils": "8.55.0", + "@sentry/core": "8.55.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz", + "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry-internal/replay": "8.55.0", + "@sentry/core": "8.55.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/core": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz", + "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay/node_modules/@sentry/core": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz", + "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.18" + } + }, "node_modules/@sentry-internal/tracing": { "version": "7.108.0", "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.108.0.tgz", @@ -2952,26 +3046,6 @@ "node": ">=8" } }, - "node_modules/@sentry/browser": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@sentry/cli": { "version": "2.31.0", "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.31.0.tgz", @@ -3116,65 +3190,6 @@ "node": ">=10" } }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@sentry/node": { "version": "7.108.0", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.108.0.tgz", @@ -3220,32 +3235,6 @@ "node": ">=8" } }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "license": "MIT", @@ -14122,6 +14111,33 @@ "tsx": "^4.19.0" } }, + "web/node_modules/@sentry/browser": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz", + "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry-internal/browser-utils": "8.55.0", + "@sentry-internal/feedback": "8.55.0", + "@sentry-internal/replay": "8.55.0", + "@sentry-internal/replay-canvas": "8.55.0", + "@sentry/core": "8.55.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "web/node_modules/@sentry/core": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz", + "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.18" + } + }, "web/src/engine/common/web-utils": { "name": "@keymanapp/web-utils", "license": "MIT", @@ -14229,7 +14245,7 @@ "license": "MIT", "dependencies": { "@keymanapp/keyman-version": "*", - "@sentry/browser": "^5.27.4" + "@sentry/browser": "^8.55.0" }, "devDependencies": { "typescript": "^5.4.5" diff --git a/resources/build/minimum-versions.inc.sh b/resources/build/minimum-versions.inc.sh index eed047e39d..49e546c0fb 100644 --- a/resources/build/minimum-versions.inc.sh +++ b/resources/build/minimum-versions.inc.sh @@ -21,7 +21,7 @@ KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME=53.0 # min version of Chrome for Keyman # earlier versions, YMMV KEYMAN_MIN_TARGET_VERSION_WEB_CHROME=95.0 # Note: 95.0 is final version that runs on Android 5.0 KEYMAN_MIN_TARGET_VERSION_WEB_FIREFOX=79.0 # TBD -KEYMAN_MIN_TARGET_VERSION_WEB_OPERA=47.0 # TBD +KEYMAN_MIN_TARGET_VERSION_WEB_OPERA=58.0 # TBD KEYMAN_MIN_TARGET_VERSION_WEB_SAFARI=13.0 # iOS 13.0, macOS 10.13.6+ # Dependency minimum versions diff --git a/web/src/engine/sentry-manager/package.json b/web/src/engine/sentry-manager/package.json index 54f5f64dce..0abacd012e 100644 --- a/web/src/engine/sentry-manager/package.json +++ b/web/src/engine/sentry-manager/package.json @@ -21,6 +21,6 @@ }, "dependencies": { "@keymanapp/keyman-version": "*", - "@sentry/browser": "^5.27.4" + "@sentry/browser": "^8.55.0" } } diff --git a/web/src/engine/sentry-manager/src/index.ts b/web/src/engine/sentry-manager/src/index.ts index 9d3b000b97..b8129766d1 100644 --- a/web/src/engine/sentry-manager/src/index.ts +++ b/web/src/engine/sentry-manager/src/index.ts @@ -1,15 +1,5 @@ import KEYMAN_VERSION from '@keymanapp/keyman-version'; - -// Unfortunately, we can't bundle Sentry via direct import - something in the process breaks -// esbuild due to needing to transform to ES5. -import { default as SentryType } from '@sentry/browser'; - -// But this will get us sufficient typing to work with as long as we also link (or prepend) -// a pre-bundled Sentry build artifact. -let Sentry: { - init: typeof SentryType.init; - // @ts-ignore -} = window['Sentry']; +import * as Sentry from '@sentry/browser'; /** * Controls whether or not the generated Sentry event is logged to the console (true) From 2f3286b020b6f3fb84dda037c19210d2bbed7676 Mon Sep 17 00:00:00 2001 From: Joshua Horton Date: Fri, 23 May 2025 08:18:33 +0700 Subject: [PATCH 2/3] fix(web): updates android-harness test page setup to use module-bundled Sentry --- web/src/test/manual/embed/android-harness/build.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/web/src/test/manual/embed/android-harness/build.sh b/web/src/test/manual/embed/android-harness/build.sh index 015660cb0b..31c53e73a0 100755 --- a/web/src/test/manual/embed/android-harness/build.sh +++ b/web/src/test/manual/embed/android-harness/build.sh @@ -45,7 +45,6 @@ if builder_start_action build; then # We shouldn't rely on a prior Android build for these files! We can retrieve them separately. cp "$KEYMAN_ROOT/web/src/engine/sentry-manager/build/lib/index.js" "host/keyman-sentry.js" cp "$KEYMAN_ROOT/node_modules/es6-shim/es6-shim.min.js" "host/es6-shim.min.js" - cp "$KEYMAN_ROOT/node_modules/@sentry/browser/build/bundle.min.js" "host/sentry.min.js" # Test keyboards From 245f2324df6defb6232ea85fc7ac1a5bc33805a1 Mon Sep 17 00:00:00 2001 From: Joshua Horton Date: Fri, 23 May 2025 09:00:29 +0700 Subject: [PATCH 3/3] fix(web): update sentry-integration test page setup --- web/src/test/manual/build.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web/src/test/manual/build.sh b/web/src/test/manual/build.sh index b80925aa06..8b564480b8 100755 --- a/web/src/test/manual/build.sh +++ b/web/src/test/manual/build.sh @@ -34,8 +34,6 @@ builder_describe_outputs \ SENTRY_MANAGER_SRC="$KEYMAN_ROOT/web/src/engine/sentry-manager/build/lib/index.js" SENTRY_MANAGER_MAP="$KEYMAN_ROOT/web/src/engine/sentry-manager/build/lib/index.js.map" -SENTRY_SRC="$KEYMAN_ROOT/node_modules/@sentry/browser/build/bundle.min.js" -SENTRY_MAP="$KEYMAN_ROOT/node_modules/@sentry/browser/build/bundle.min.js.map" #### Build action definitions #### @@ -48,8 +46,6 @@ function do_copy() { # The next four lines are needed for the sentry-integration manual test page. cp "$SENTRY_MANAGER_SRC" "$KEYMAN_ROOT/$DEST/sentry-manager.js" cp "$SENTRY_MANAGER_MAP" "$KEYMAN_ROOT/$DEST/sentry-manager.js.map" - cp "$SENTRY_SRC" "$KEYMAN_ROOT/$DEST/sentry-bundle.min.js" - cp "$SENTRY_MAP" "$KEYMAN_ROOT/$DEST/sentry-bundle.min.js.map" mkdir -p "$GESTURE_PROCESSOR_TARGET" cp -a "$GESTURE_PROCESSOR_BUILD" "$GESTURE_PROCESSOR_TARGET"