Skip to content

7.48.0

Compare
Choose a tag to compare
@getsentry-bot getsentry-bot released this 14 Apr 09:51

Important Changes

  • feat(node): Add AsyncLocalStorage implementation of AsyncContextStrategy (#7800)
    • feat(core): Extend AsyncContextStrategy to allow reuse of existing context (#7778)
    • feat(core): Make runWithAsyncContext public API (#7817)
    • feat(core): Add async context abstraction (#7753)
    • feat(node): Adds domain implementation of AsyncContextStrategy (#7767)
    • feat(node): Auto-select best AsyncContextStrategy for Node.js version (#7804)
    • feat(node): Migrate to domains used through AsyncContextStrategy (#7779)

This release switches the SDK to use AsyncLocalStorage as the async context isolation mechanism in the SDK for Node 14+. For Node 10 - 13, we continue to use the Node domain standard library, since AsyncLocalStorage is not supported there. Preliminary testing showed a 30% improvement in latency and rps when making the switch from domains to AsyncLocalStorage on Node 16.

If you want to manually add async context isolation to your application, you can use the new runWithAsyncContext API.

import * as Sentry from '@sentry/node';

const requestHandler = (ctx, next) => {
  return new Promise((resolve) => {
    Sentry.runWithAsyncContext(async () => {
      const hub = Sentry.getCurrentHub();

      hub.configureScope(scope =>
        scope.addEventProcessor(event =>
          Sentry.addRequestDataToEvent(event, ctx.request, {
            include: {
              user: false,
            },
          })
        )
      );

      await next();
      resolve();
    });
  });
};

If you're manually using domains to isolate Sentry data, we strongly recommend switching to this API!

In addition to exporting runWithAsyncContext publicly, the SDK also uses it internally where we previously used domains.

  • feat(sveltekit): Remove withSentryViteConfig (#7789)
    • feat(sveltekit): Remove SDK initialization via dedicated files (#7791)

This release removes our withSentryViteConfig wrapper we previously instructed you to add to your vite.config.js file. It is replaced Vite plugins which you simply add to your Vite config, just like the sveltekit() Vite plugins. We believe this is a more transparent and Vite/SvelteKit-native way of applying build time modifications. Here's how to use the plugins:

// vite.config.js
import { sveltekit } from '@sveltejs/kit/vite';
import { sentrySvelteKit } from '@sentry/sveltekit';

export default {
  plugins: [sentrySvelteKit(), sveltekit()],
  // ... rest of your Vite config
};

Take a look at the README for updated instructions!

Furthermore, with this transition, we removed the possibility to intialize the SDK in dedicated sentry.(client|server).config.js files. Please use SvelteKit's hooks files to initialize the SDK.

Please note that these are breaking changes! We're sorry for the inconvenience but the SvelteKit SDK is still in alpha stage and we want to establish a clean and SvelteKit-friendly API before making the SDK stable. You have been warned ;)

  • feat(sveltekit): Add Sentry Vite Plugin to upload source maps (#7811)

This release adds automatic upload of source maps to the SvelteKit SDK. No need to configure anything other than adding our Vite plugins to your SDK. The example above shows you how to do this.

Please make sure to follow the README to specify your Sentry auth token, as well as org and project slugs.

- feat(replay): Capture request & response headers (#7816)

Replay now captures the content-length, content-type, and accept headers from requests and responses automatically.

Additional Features and Fixes

  • feat(browser): Export request instrumentation options (#7818)
  • feat(core): Add async context abstraction (#7753)
  • feat(core): Add DSC to all outgoing envelopes (#7820)
  • feat(core): Cache processed stacks for debug IDs (#7825)
  • feat(node): Add checkin envelope types (#7777)
  • feat(replay): Add getReplayId() method (#7822)
  • fix(browser): Adjust BrowserTransportOptions to support offline transport options (#7775)
  • fix(browser): DOMException SecurityError stacktrace parsing bug (#7821)
  • fix(core): Log warning when tracing extensions are missing (#7601)
  • fix(core): Only call applyDebugMetadata for error events (#7824)
  • fix(integrations): Ensure httpclient integration works with Request (#7786)
  • fix(node): reuseExisting does not need to call bind on domain (#7780)
  • fix(node): Fix domain scope inheritance (#7799)
  • fix(node): Make trpcMiddleware factory synchronous (#7802)
  • fix(serverless): Account when transaction undefined (#7829)
  • fix(utils): Make xhr instrumentation independent of parallel running SDK versions (#7836)

Bundle size πŸ“¦

Path Size
@sentry/browser - ES5 CDN Bundle (gzipped + minified) 21.04 KB
@sentry/browser - ES5 CDN Bundle (minified) 65.66 KB
@sentry/browser - ES6 CDN Bundle (gzipped + minified) 19.59 KB
@sentry/browser - ES6 CDN Bundle (minified) 58.12 KB
@sentry/browser - Webpack (gzipped + minified) 21.19 KB
@sentry/browser - Webpack (minified) 69.07 KB
@sentry/react - Webpack (gzipped + minified) 21.21 KB
@sentry/nextjs Client - Webpack (gzipped + minified) 49.06 KB
@sentry/browser + @sentry/tracing - ES5 CDN Bundle (gzipped + minified) 28.61 KB
@sentry/browser + @sentry/tracing - ES6 CDN Bundle (gzipped + minified) 26.85 KB
@sentry/replay ES6 CDN Bundle (gzipped + minified) 45.35 KB
@sentry/replay - Webpack (gzipped + minified) 39.28 KB
@sentry/browser + @sentry/tracing + @sentry/replay - ES6 CDN Bundle (gzipped + minified) 64.28 KB
@sentry/browser + @sentry/replay - ES6 CDN Bundle (gzipped + minified) 57.26 KB