Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ updates:
prefix: feat
prefix-development: feat
include: scope
exclude-paths:
- 'dev-packages/e2e-tests/test-applications/'
35 changes: 32 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,35 @@

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

## 10.17.0

### Important Changes

- **feat(nuxt): Implement server middleware instrumentation ([#17796](https://github.com/getsentry/sentry-javascript/pull/17796))**

This release introduces instrumentation for Nuxt middleware, ensuring that all middleware handlers are automatically wrapped with tracing and error reporting functionality.

- **fix(aws-serverless): Take `http_proxy` into account when choosing
`useLayerExtension` default ([#17817](https://github.com/getsentry/sentry-javascript/pull/17817))**

The default setting for `useLayerExtension` now considers the `http_proxy` environment variable.
When `http_proxy` is set, `useLayerExtension` will be off by default.
If you use a `http_proxy` but would still like to make use of the Sentry Lambda extension, exempt `localhost` in a `no_proxy` environment variable.

### Other Changes

- feat(node): Split up http integration into composable parts ([#17524](https://github.com/getsentry/sentry-javascript/pull/17524))
- fix(core): Remove check and always respect ai.telemetry.functionId for Vercel AI gen spans ([#17811](https://github.com/getsentry/sentry-javascript/pull/17811))
- doc(core): Fix outdated JSDoc in `beforeSendSpan` ([#17815](https://github.com/getsentry/sentry-javascript/pull/17815))

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

- ci: Do not run dependabot on e2e test applications ([#17813](https://github.com/getsentry/sentry-javascript/pull/17813))
- docs: Reword changelog for google gen ai integration ([#17805](https://github.com/getsentry/sentry-javascript/pull/17805))

</details>

## 10.16.0

- feat(logs): Add internal `replay_is_buffering` flag ([#17752](https://github.com/getsentry/sentry-javascript/pull/17752))
Expand Down Expand Up @@ -81,7 +110,7 @@ Work in this release was contributed by @Karibash. Thank you for your contributi

- **feat(cloudflare,vercel-edge): Add support for Google Gen AI instrumentation ([#17723](https://github.com/getsentry/sentry-javascript/pull/17723))**

The SDK now supports manually instrumenting Google's Generative AI operations in Cloudflare Workers and Vercel Edge Runtime environments, providing insights into your AI operations. You can use `const wrappedClient = Sentry.instrumentGoogleGenAIClient(genAiClient)` to get an instrumented client.
The SDK now supports manually instrumenting Google's Gen AI operations in Cloudflare Workers and Vercel Edge Runtime environments, providing insights into your AI operations. You can use `const wrappedClient = Sentry.instrumentGoogleGenAIClient(genAiClient)` to get an instrumented client.

### Other Changes

Expand Down Expand Up @@ -119,9 +148,9 @@ Work in this release was contributed by @Karibash. Thank you for your contributi

Note that if `Sentry.reportPageLoaded()` is not called within 30 seconds of the initial pageload (or whatever value the `finalTimeout` option is set to), the pageload span will be ended automatically.

- **feat(core,node): Add instrumentation for `GoogleGenerativeAI` ([#17625](https://github.com/getsentry/sentry-javascript/pull/17625))**
- **feat(core,node): Add instrumentation for `GoogleGenAI` ([#17625](https://github.com/getsentry/sentry-javascript/pull/17625))**

The SDK now automatically instruments the `@google/generative-ai` package to provide insights into your AI operations.
The SDK now automatically instruments the `@google/genai` package to provide insights into your AI operations.

- **feat(nextjs): Promote `useRunAfterProductionCompileHook` to non-experimental build option ([#17721](https://github.com/getsentry/sentry-javascript/pull/17721))**

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { defineEventHandler, getHeader } from '#imports';

export default defineEventHandler(async event => {
// Simple API endpoint that will trigger all server middleware
return {
message: 'Server middleware test endpoint',
path: event.path,
method: event.method,
headers: {
'x-first-middleware': getHeader(event, 'x-first-middleware'),
'x-second-middleware': getHeader(event, 'x-second-middleware'),
'x-auth-middleware': getHeader(event, 'x-auth-middleware'),
},
};
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { defineEventHandler, setHeader } from '#imports';

export default defineEventHandler(async event => {
// Set a header to indicate this middleware ran
setHeader(event, 'x-first-middleware', 'executed');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { eventHandler, setHeader } from '#imports';

// tests out the eventHandler alias
export default eventHandler(async event => {
// Set a header to indicate this middleware ran
setHeader(event, 'x-second-middleware', 'executed');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { defineEventHandler, setHeader, getQuery } from '#imports';

export default defineEventHandler(async event => {
// Check if we should throw an error
const query = getQuery(event);
if (query.throwError === 'true') {
throw new Error('Auth middleware error');
}

// Set a header to indicate this middleware ran
setHeader(event, 'x-auth-middleware', 'executed');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { defineEventHandler, setHeader, getQuery } from '#imports';

export default defineEventHandler({
onRequest: async event => {
// Set a header to indicate the onRequest hook ran
setHeader(event, 'x-hooks-onrequest', 'executed');

// Check if we should throw an error in onRequest
const query = getQuery(event);
if (query.throwOnRequestError === 'true') {
throw new Error('OnRequest hook error');
}
},

handler: async event => {
// Set a header to indicate the main handler ran
setHeader(event, 'x-hooks-handler', 'executed');

// Check if we should throw an error in handler
const query = getQuery(event);
if (query.throwHandlerError === 'true') {
throw new Error('Handler error');
}
},

onBeforeResponse: async (event, response) => {
// Set a header to indicate the onBeforeResponse hook ran
setHeader(event, 'x-hooks-onbeforeresponse', 'executed');

// Check if we should throw an error in onBeforeResponse
const query = getQuery(event);
if (query.throwOnBeforeResponseError === 'true') {
throw new Error('OnBeforeResponse hook error');
}
},
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { defineEventHandler, setHeader, getQuery } from '#imports';

export default defineEventHandler({
// Array of onRequest handlers
onRequest: [
async event => {
setHeader(event, 'x-array-onrequest-0', 'executed');

const query = getQuery(event);
if (query.throwOnRequest0Error === 'true') {
throw new Error('OnRequest[0] hook error');
}
},
async event => {
setHeader(event, 'x-array-onrequest-1', 'executed');

const query = getQuery(event);
if (query.throwOnRequest1Error === 'true') {
throw new Error('OnRequest[1] hook error');
}
},
],

handler: async event => {
setHeader(event, 'x-array-handler', 'executed');
},

// Array of onBeforeResponse handlers
onBeforeResponse: [
async (event, response) => {
setHeader(event, 'x-array-onbeforeresponse-0', 'executed');

const query = getQuery(event);
if (query.throwOnBeforeResponse0Error === 'true') {
throw new Error('OnBeforeResponse[0] hook error');
}
},
async (event, response) => {
setHeader(event, 'x-array-onbeforeresponse-1', 'executed');

const query = getQuery(event);
if (query.throwOnBeforeResponse1Error === 'true') {
throw new Error('OnBeforeResponse[1] hook error');
}
},
],
});
Loading
Loading