Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
61b1dff
Merge pull request #17397 from getsentry/master
github-actions[bot] Aug 12, 2025
2ec09c9
docs(nuxt): Remove beta notice (#17400)
s1gr1d Aug 13, 2025
05af8d0
fix(node): Fix preloading of instrumentation (#17403)
mydea Aug 13, 2025
115c3e6
test(nuxt): Don't rely on flushing for lowQualityTransactionFilter (#…
s1gr1d Aug 13, 2025
f25664b
test(solidstart): Don't rely on flushing for lowQualityTransactionFil…
s1gr1d Aug 13, 2025
5ee2597
test(nextjs): Fix canary tests (#17416)
chargome Aug 14, 2025
90c10a9
feat(astro): Align options with shared build time options type (#17396)
s1gr1d Aug 25, 2025
3bf4a30
feat(node): Add an instrumentation interface for Hono (#17366)
Karibash Aug 25, 2025
090e7cc
test(e2e/firebase): Fix firebase e2e test failing due to outdated rul…
Lms24 Aug 25, 2025
7698f61
fix(browser): Use `DedicatedWorkerGlobalScope` global object type in …
Lms24 Aug 25, 2025
f3d387a
chore: Add external contributor to CHANGELOG.md (#17449)
HazAT Aug 25, 2025
f8390ae
feat(aws): Add support for automatic wrapping in ESM (#17407)
msonnb Aug 25, 2025
382af9b
fix(core): Instrument invoke_agent root span, and support Vercel `ai`…
RulaKhaled Aug 25, 2025
444bd82
feat(node): Add Anthropic AI integration (#17348)
RulaKhaled Aug 25, 2025
2eb681e
fix(core): Only consider ingest endpoint requests when checking `isSe…
Lms24 Aug 26, 2025
123be24
chore(deps): bump astro from 4.16.18 to 4.16.19 in /dev-packages/e2e-…
dependabot[bot] Aug 26, 2025
6a332d3
meta(changelog): Update changelog for 10.6.0
Lms24 Aug 26, 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
1 change: 1 addition & 0 deletions .cursor/BUGBOT.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ Do not flag the issues below if they appear in tests.
- If there's no direct span that's wrapping the captured exception, apply a proper `type` value, following the same naming
convention as the `SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN` value.
- When calling `startSpan`, check if error cases are handled. If flag that it might make sense to try/catch and call `captureException`.
- When calling `generateInstrumentationOnce`, the passed in name MUST match the name of the integration that uses it. If there are more than one instrumentations, they need to follow the pattern `${INSTRUMENTATION_NAME}.some-suffix`.
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ module.exports = [
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '148 KB',
limit: '149 KB',
},
{
name: '@sentry/node - without tracing',
Expand Down
39 changes: 39 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,45 @@

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

## 10.6.0

### Important Changes

- **feat(node): Add Anthropic AI integration ([#17348](https://github.com/getsentry/sentry-javascript/pull/17348))**

This release adds support for automatically tracing Anthropic AI SDK requests, providing better observability for AI-powered applications.

- **fix(core): Instrument invoke_agent root span, and support Vercel `ai` v5 ([#17395](https://github.com/getsentry/sentry-javascript/pull/17395))**

This release makes the Sentry `vercelAiIntegration` compatible with version 5 of Vercel `ai`.

- **docs(nuxt): Remove beta notice ([#17400](https://github.com/getsentry/sentry-javascript/pull/17400))**

The Sentry Nuxt SDK is now considered stable and no longer in beta!

### Other Changes

- feat(astro): Align options with shared build time options type ([#17396](https://github.com/getsentry/sentry-javascript/pull/17396))
- feat(aws): Add support for automatic wrapping in ESM ([#17407](https://github.com/getsentry/sentry-javascript/pull/17407))
- feat(node): Add an instrumentation interface for Hono ([#17366](https://github.com/getsentry/sentry-javascript/pull/17366))
- fix(browser): Use `DedicatedWorkerGlobalScope` global object type in `registerWebWorker` ([#17447](https://github.com/getsentry/sentry-javascript/pull/17447))
- fix(core): Only consider ingest endpoint requests when checking `isSentryRequestUrl` ([#17393](https://github.com/getsentry/sentry-javascript/pull/17393))
- fix(node): Fix preloading of instrumentation ([#17403](https://github.com/getsentry/sentry-javascript/pull/17403))

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

- chore: Add external contributor to CHANGELOG.md ([#17449](https://github.com/getsentry/sentry-javascript/pull/17449))
- chore(deps): bump astro from 4.16.18 to 4.16.19 in /dev-packages/e2e-tests/test-applications/astro-4 ([#17434](https://github.com/getsentry/sentry-javascript/pull/17434))
- test(e2e/firebase): Fix firebase e2e test failing due to outdated rules file ([#17448](https://github.com/getsentry/sentry-javascript/pull/17448))
- test(nextjs): Fix canary tests ([#17416](https://github.com/getsentry/sentry-javascript/pull/17416))
- test(nuxt): Don't rely on flushing for lowQualityTransactionFilter ([#17406](https://github.com/getsentry/sentry-javascript/pull/17406))
- test(solidstart): Don't rely on flushing for lowQualityTransactionFilter ([#17408](https://github.com/getsentry/sentry-javascript/pull/17408))

</details>

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

## 10.5.0

- feat(core): better cause data extraction ([#17375](https://github.com/getsentry/sentry-javascript/pull/17375))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@sentry/astro": "* || latest",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@spotlightjs/astro": "2.1.6",
"astro": "4.16.18",
"astro": "4.16.19",
"typescript": "^5.5.4"
},
"devDependencies": {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export const handler = async () => {
throw new Error('test esm');
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as Sentry from '@sentry/aws-serverless';

import * as http from 'node:http';

export const handler = Sentry.wrapHandler(async () => {
export const handler = async () => {
await Sentry.startSpan({ name: 'manual-span', op: 'test' }, async () => {
await new Promise(resolve => {
http.get('http://example.com', res => {
Expand All @@ -16,4 +16,4 @@ export const handler = Sentry.wrapHandler(async () => {
});
});
});
});
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const http = require('http');
const Sentry = require('@sentry/aws-serverless');

exports.handler = Sentry.wrapHandler(async () => {
exports.handler = async () => {
await new Promise(resolve => {
const req = http.request(
{
Expand All @@ -21,4 +21,4 @@ exports.handler = Sentry.wrapHandler(async () => {
});

Sentry.startSpan({ name: 'manual-span', op: 'manual' }, () => {});
});
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as http from 'node:http';
import * as Sentry from '@sentry/aws-serverless';

export const handler = Sentry.wrapHandler(async () => {
export const handler = async () => {
await new Promise(resolve => {
const req = http.request(
{
Expand All @@ -21,4 +21,4 @@ export const handler = Sentry.wrapHandler(async () => {
});

Sentry.startSpan({ name: 'manual-span', op: 'manual' }, () => {});
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,35 @@ test.describe('Lambda layer', () => {
type: 'Error',
value: 'test',
mechanism: {
type: 'auto.function.aws-serverless.handler',
type: 'auto.function.aws-serverless.otel',
handled: false,
},
}),
);
});

test('capturing errors works in ESM', async ({ lambdaClient }) => {
const errorEventPromise = waitForError('aws-serverless-lambda-sam', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'test esm';
});

await lambdaClient.send(
new InvokeCommand({
FunctionName: 'LayerErrorEsm',
Payload: JSON.stringify({}),
}),
);

const errorEvent = await errorEventPromise;

// shows the SDK sent an error event
expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]).toEqual(
expect.objectContaining({
type: 'Error',
value: 'test esm',
mechanism: {
type: 'auto.function.aws-serverless.otel',
handled: false,
},
}),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import * as Sentry from '@sentry/browser';

// type cast necessary because TS thinks this file is part of the main
// thread where self is of type `Window` instead of `Worker`
Sentry.registerWebWorker({ self: self as unknown as Worker });
Sentry.registerWebWorker({ self });

// Let the main thread know the worker is ready
self.postMessage({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import * as Sentry from '@sentry/browser';

// type cast necessary because TS thinks this file is part of the main
// thread where self is of type `Window` instead of `Worker`
Sentry.registerWebWorker({ self: self as unknown as Worker });
Sentry.registerWebWorker({ self });

// Let the main thread know the worker is ready
self.postMessage({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import * as Sentry from '@sentry/browser';

// type cast necessary because TS thinks this file is part of the main
// thread where self is of type `Window` instead of `Worker`
Sentry.registerWebWorker({ self: self as unknown as Worker });
Sentry.registerWebWorker({ self });

// Let the main thread know the worker is ready
self.postMessage({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
"target": "ES2022",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"lib": ["ES2022", "DOM", "DOM.Iterable", "WebWorker"],
"skipLibCheck": false,
"skipDefaultLibCheck": true,

/* Bundler mode */
"moduleResolution": "bundler",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"compilerOptions": {
"allowImportingTsExtensions": true,
"target": "es2018",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"compilerOptions": {
"target": "es2018",
"allowImportingTsExtensions": true,
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"compilerOptions": {
"allowImportingTsExtensions": true,
"target": "es2018",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"compilerOptions": {
"allowImportingTsExtensions": true,
"target": "es2018",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"compilerOptions": {
"allowImportingTsExtensions": true,
"target": "es2018",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,8 @@ rules_version='2'
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
// This rule allows anyone with your database reference to view, edit,
// and delete all data in your database. It is useful for getting
// started, but it is configured to expire after 30 days because it
// leaves your app open to attackers. At that time, all client
// requests to your database will be denied.
//
// Make sure to write security rules for your app before that time, or
// else all client requests to your database will be denied until you
// update your rules.
allow read, write: if request.time < timestamp.date(2025, 8, 17);
// general access within this test app's emulator is fine
allow read, write: if true;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import * as Sentry from '@sentry/node';
import { nodeContextIntegration } from '@sentry/node-core';
import { loggingTransport } from '@sentry-internal/node-integration-tests';

Sentry.init({
dsn: 'https://[email protected]/1337',
release: '1.0',
tracesSampleRate: 1.0,
sendDefaultPii: false,
transport: loggingTransport,
integrations: [
Sentry.anthropicAIIntegration({
recordInputs: true,
recordOutputs: true,
}),
nodeContextIntegration(),
],
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import * as Sentry from '@sentry/node';
import { nodeContextIntegration } from '@sentry/node-core';
import { loggingTransport } from '@sentry-internal/node-integration-tests';

Sentry.init({
dsn: 'https://[email protected]/1337',
release: '1.0',
tracesSampleRate: 1.0,
sendDefaultPii: true,
transport: loggingTransport,
integrations: [
Sentry.anthropicAIIntegration(),
nodeContextIntegration(),
],
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import * as Sentry from '@sentry/node';
import { nodeContextIntegration } from '@sentry/node-core';
import { loggingTransport } from '@sentry-internal/node-integration-tests';

Sentry.init({
dsn: 'https://[email protected]/1337',
release: '1.0',
tracesSampleRate: 1.0,
sendDefaultPii: false,
transport: loggingTransport,
// Force include the integration
integrations: [
Sentry.anthropicAIIntegration(),
nodeContextIntegration(),
],
});
Loading
Loading