Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
2c6e710
feat(react-router): Align options with shared build time options type…
s1gr1d Oct 24, 2025
2e78b06
feat: Add a note to save changes before starting (#17987)
JPeer264 Oct 24, 2025
229a498
Merge pull request #18027 from getsentry/master
github-actions[bot] Oct 24, 2025
d29de56
chore(aws-serverless): Fix typo in timeout warning function name (#18…
hanseo0507 Oct 24, 2025
7496387
chore: Add external contributor to CHANGELOG.md (#18032)
HazAT Oct 24, 2025
fe97d67
fix(nuxt): check for H3 error cause before re-capturing (#18035)
logaretm Oct 24, 2025
14888ab
fix(tracemetrics): Bump metrics buffer to 1k (#18039)
k-fish Oct 28, 2025
e35ca9d
feat(core): Send `user-agent` header with envelope requests in server…
Lms24 Oct 28, 2025
0e15b3d
chore(browser): upgrade fake-indexeddb to v6 (#17975)
AbhiPrasad Oct 28, 2025
993303c
fix(replay): Linked errors not resetting session id (#17854)
billyvg Oct 28, 2025
f729509
test(browser): Add test for INP target name after navigation or DOM c…
s1gr1d Oct 29, 2025
455c231
ref(core): Set span status `internal_error` instead of `unknown_error…
Lms24 Oct 29, 2025
98de756
feat(browser): Limit transport buffer size (#18046)
chargome Oct 29, 2025
2d760ba
feat(core): Remove default value of `maxValueLength: 250` (#18043)
s1gr1d Oct 30, 2025
296c1ca
fix(tests): un-override nitro dep version for nuxt-3 test (#18056)
logaretm Oct 31, 2025
4190094
fix(e2e): Add p-map override to fix React Router 7 test builds (#18068)
RulaKhaled Oct 31, 2025
9bdd19f
chore(tests): pass test flags through to the test command (#18062)
logaretm Oct 31, 2025
94190f8
fix(browser-utils): cache element names for INP (#18052)
logaretm Oct 31, 2025
fbadeb8
fix(vue): Make `options` parameter optional on `attachErrorHandler` (…
Lms24 Nov 3, 2025
3deeecd
fix(cloudflare): Ensure types for cloudflare handlers (#18064)
JPeer264 Nov 3, 2025
b57ade1
fix(nuxt): Added top-level fallback exports (#18083)
logaretm Nov 3, 2025
600e27a
fix(browser): Capture unhandled rejection errors for web worker integ…
RulaKhaled Nov 3, 2025
33d5898
fix(nextjs): Update proxy template wrapping (#18086)
chargome Nov 4, 2025
ddaec08
meta(changelog): Update changelog for 10.23.0
chargome Nov 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .cursor/rules/publishing_release.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,18 @@ Use these guidelines when publishing a new Sentry JavaScript SDK release.

The release process is outlined in [publishing-a-release.md](mdc:docs/publishing-a-release.md).

1. Make sure you are on the latest version of the `develop` branch. To confirm this, run `git pull origin develop` to get the latest changes from the repo.
1. Ensure you're on the `develop` branch with the latest changes:
- If you have unsaved changes, stash them with `git stash -u`.
- If you're on a different branch than `develop`, check out the develop branch using `git checkout develop`.
- Pull the latest updates from the remote repository by running `git pull origin develop`.

2. Run `yarn changelog` on the `develop` branch and copy the output. You can use `yarn changelog | pbcopy` to copy the output of `yarn changelog` into your clipboard.
3. Decide on a version for the release based on [semver](mdc:https://semver.org). The version should be decided based on what is in included in the release. For example, if the release includes a new feature, we should increment the minor version. If it includes only bug fixes, we should increment the patch version. You can find the latest version in [CHANGELOG.md](mdc:CHANGELOG.md) at the very top.
4. Create a branch `prepare-release/VERSION`, eg. `prepare-release/8.1.0`, off `develop`.
5. Update [CHANGELOG.md](mdc:CHANGELOG.md) to add an entry for the next release number and a list of changes since the last release from the output of `yarn changelog`. See the `Updating the Changelog` section in [publishing-a-release.md](mdc:docs/publishing-a-release.md) for more details. If you remove changelog entries because they are not applicable, please let the user know.
5. Update [CHANGELOG.md](mdc:CHANGELOG.md) to add an entry for the next release number and a list of changes since the last release from the output of `yarn changelog`. See the `Updating the Changelog` section in [publishing-a-release.md](mdc:docs/publishing-a-release.md) for more details. Do not remove any changelog entries.
6. Commit the changes to [CHANGELOG.md](mdc:CHANGELOG.md) with `meta(changelog): Update changelog for VERSION` where `VERSION` is the version of the release, e.g. `meta(changelog): Update changelog for 8.1.0`
7. Push the `prepare-release/VERSION` branch to origin and remind the user that the release PR needs to be opened from the `master` branch.
8. In case you were working on a different branch, you can checkout back to the branch you were working on and continue your work by unstashing the changes you stashed earlier with the command `git stash pop` (only if you stashed changes).

## Key Commands

Expand Down
10 changes: 5 additions & 5 deletions .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '41 KB',
limit: '41.3 KB',
},
{
name: '@sentry/browser (incl. Tracing, Profiling)',
Expand Down Expand Up @@ -127,7 +127,7 @@ module.exports = [
import: createImport('init', 'ErrorBoundary', 'reactRouterV6BrowserTracingIntegration'),
ignore: ['react/jsx-runtime'],
gzip: true,
limit: '43 KB',
limit: '43.3 KB',
},
// Vue SDK (ESM)
{
Expand All @@ -142,7 +142,7 @@ module.exports = [
path: 'packages/vue/build/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '43 KB',
limit: '43.1 KB',
},
// Svelte SDK (ESM)
{
Expand All @@ -157,7 +157,7 @@ module.exports = [
name: 'CDN Bundle',
path: createCDNPath('bundle.min.js'),
gzip: true,
limit: '27 KB',
limit: '27.5 KB',
},
{
name: 'CDN Bundle (incl. Tracing)',
Expand Down Expand Up @@ -190,7 +190,7 @@ module.exports = [
path: createCDNPath('bundle.tracing.min.js'),
gzip: false,
brotli: false,
limit: '124 KB',
limit: '124.1 KB',
},
{
name: 'CDN Bundle (incl. Tracing, Replay) - uncompressed',
Expand Down
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,39 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 10.23.0

- feat(core): Send `user-agent` header with envelope requests in server SDKs ([#17929](https://github.com/getsentry/sentry-javascript/pull/17929))
- feat(browser): Limit transport buffer size ([#18046](https://github.com/getsentry/sentry-javascript/pull/18046))
- feat(core): Remove default value of `maxValueLength: 250` ([#18043](https://github.com/getsentry/sentry-javascript/pull/18043))
- feat(react-router): Align options with shared build time options type ([#18014](https://github.com/getsentry/sentry-javascript/pull/18014))
- fix(browser-utils): cache element names for INP ([#18052](https://github.com/getsentry/sentry-javascript/pull/18052))
- fix(browser): Capture unhandled rejection errors for web worker integration ([#18054](https://github.com/getsentry/sentry-javascript/pull/18054))
- fix(cloudflare): Ensure types for cloudflare handlers ([#18064](https://github.com/getsentry/sentry-javascript/pull/18064))
- fix(nextjs): Update proxy template wrapping ([#18086](https://github.com/getsentry/sentry-javascript/pull/18086))
- fix(nuxt): Added top-level fallback exports ([#18083](https://github.com/getsentry/sentry-javascript/pull/18083))
- fix(nuxt): check for H3 error cause before re-capturing ([#18035](https://github.com/getsentry/sentry-javascript/pull/18035))
- fix(replay): Linked errors not resetting session id ([#17854](https://github.com/getsentry/sentry-javascript/pull/17854))
- fix(tracemetrics): Bump metrics buffer to 1k ([#18039](https://github.com/getsentry/sentry-javascript/pull/18039))
- fix(vue): Make `options` parameter optional on `attachErrorHandler` ([#18072](https://github.com/getsentry/sentry-javascript/pull/18072))
- ref(core): Set span status `internal_error` instead of `unknown_error` ([#17909](https://github.com/getsentry/sentry-javascript/pull/17909))

<details>
<summary> <strong>Internal Changes</strong> </summary>

- fix(tests): un-override nitro dep version for nuxt-3 test ([#18056](https://github.com/getsentry/sentry-javascript/pull/18056))
- fix(e2e): Add p-map override to fix React Router 7 test builds ([#18068](https://github.com/getsentry/sentry-javascript/pull/18068))
- feat: Add a note to save changes before starting ([#17987](https://github.com/getsentry/sentry-javascript/pull/17987))
- test(browser): Add test for INP target name after navigation or DOM changes ([#18033](https://github.com/getsentry/sentry-javascript/pull/18033))
- chore: Add external contributor to CHANGELOG.md ([#18032](https://github.com/getsentry/sentry-javascript/pull/18032))
- chore(aws-serverless): Fix typo in timeout warning function name ([#18031](https://github.com/getsentry/sentry-javascript/pull/18031))
- chore(browser): upgrade fake-indexeddb to v6 ([#17975](https://github.com/getsentry/sentry-javascript/pull/17975))
- chore(tests): pass test flags through to the test command ([#18062](https://github.com/getsentry/sentry-javascript/pull/18062))

</details>

Work in this release was contributed by @hanseo0507. Thank you for your contribution!

## 10.22.0

### Important Changes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ sentryTest('should capture Supabase authentication errors', async ({ getLocalTes
start_timestamp: expect.any(Number),
timestamp: expect.any(Number),
trace_id: transactionEvent.contexts?.trace?.trace_id,
status: 'unknown_error',
status: 'internal_error',
data: expect.objectContaining({
'sentry.op': 'db',
'sentry.origin': 'auto.db.supabase',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,34 @@
// This worker manually replicates what Sentry.registerWebWorker() does
// (In real code with a bundler, you'd import and call Sentry.registerWebWorker({ self }))

self._sentryDebugIds = {
'Error at http://sentry-test.io/worker.js': 'worker-debug-id-789',
};

// Send debug IDs
self.postMessage({
_sentryMessage: true,
_sentryDebugIds: self._sentryDebugIds,
});

// Set up unhandledrejection handler (same as registerWebWorker)
self.addEventListener('unhandledrejection', event => {
self.postMessage({
_sentryMessage: true,
_sentryWorkerError: {
reason: event.reason,
filename: self.location.href,
},
});
});

self.addEventListener('message', event => {
if (event.data.type === 'throw-error') {
throw new Error('Worker error for testing');
}

if (event.data.type === 'throw-rejection') {
// Create an unhandled rejection
Promise.reject(new Error('Worker unhandled rejection'));
}
});
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,17 @@ const worker = new Worker('/worker.js');

Sentry.addIntegration(Sentry.webWorkerIntegration({ worker }));

const btn = document.getElementById('errWorker');
const btnError = document.getElementById('errWorker');
const btnRejection = document.getElementById('rejectionWorker');

btn.addEventListener('click', () => {
btnError.addEventListener('click', () => {
worker.postMessage({
type: 'throw-error',
});
});

btnRejection.addEventListener('click', () => {
worker.postMessage({
type: 'throw-rejection',
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
</head>
<body>
<button id="errWorker">Throw error in worker</button>
<button id="rejectionWorker">Throw unhandled rejection in worker</button>
</body>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,32 @@ sentryTest('Assigns web worker debug IDs when using webWorkerIntegration', async
expect(image.code_file).toEqual('http://sentry-test.io/worker.js');
});
});

sentryTest('Captures unhandled rejections from web workers', async ({ getLocalTestUrl, page }) => {
const bundle = process.env.PW_BUNDLE;
if (bundle != null && !bundle.includes('esm') && !bundle.includes('cjs')) {
sentryTest.skip();
}

const url = await getLocalTestUrl({ testDir: __dirname });

const errorEventPromise = getFirstSentryEnvelopeRequest<Event>(page, url);

page.route('**/worker.js', route => {
route.fulfill({
path: `${__dirname}/assets/worker.js`,
});
});

const button = page.locator('#rejectionWorker');
await button.click();

const errorEvent = await errorEventPromise;

// Verify the unhandled rejection was captured
expect(errorEvent.exception?.values?.[0]?.value).toContain('Worker unhandled rejection');
expect(errorEvent.exception?.values?.[0]?.mechanism?.type).toBe('auto.browser.web_worker.onunhandledrejection');
expect(errorEvent.exception?.values?.[0]?.mechanism?.handled).toBe(false);
expect(errorEvent.contexts?.worker).toBeDefined();
expect(errorEvent.contexts?.worker?.filename).toContain('worker.js');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;
window.Replay = Sentry.replayIntegration({
flushMinDelay: 200,
flushMaxDelay: 200,
minReplayDuration: 0,
stickySession: true,
});

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
sampleRate: 1,
replaysSessionSampleRate: 0.0,
replaysOnErrorSampleRate: 1.0,

integrations: [window.Replay],
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
document.getElementById('error1').addEventListener('click', () => {
throw new Error('First Error');
});

document.getElementById('error2').addEventListener('click', () => {
throw new Error('Second Error');
});

document.getElementById('click').addEventListener('click', () => {
// Just a click for interaction
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<button id="error1">Throw First Error</button>
<button id="error2">Throw Second Error</button>
<button id="click">Click me</button>
</body>
</html>
Loading
Loading