diff --git a/.size-limit.js b/.size-limit.js index ffa69d850947..1ff20d60a62e 100644 --- a/.size-limit.js +++ b/.size-limit.js @@ -8,14 +8,14 @@ module.exports = [ path: 'packages/browser/build/npm/esm/index.js', import: createImport('init'), gzip: true, - limit: '24 KB', + limit: '25 KB', }, { name: '@sentry/browser - with treeshaking flags', path: 'packages/browser/build/npm/esm/index.js', import: createImport('init'), gzip: true, - limit: '24.1 KB', + limit: '24.5 KB', modifyWebpackConfig: function (config) { const webpack = require('webpack'); const TerserPlugin = require('terser-webpack-plugin'); @@ -40,14 +40,14 @@ module.exports = [ path: 'packages/browser/build/npm/esm/index.js', import: createImport('init', 'browserTracingIntegration'), gzip: true, - limit: '37.5 KB', + limit: '38 KB', }, { name: '@sentry/browser (incl. Tracing, Replay)', path: 'packages/browser/build/npm/esm/index.js', import: createImport('init', 'browserTracingIntegration', 'replayIntegration'), gzip: true, - limit: '75.2 KB', + limit: '77 KB', }, { name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags', @@ -79,7 +79,7 @@ module.exports = [ path: 'packages/browser/build/npm/esm/index.js', import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'), gzip: true, - limit: '80 KB', + limit: '82 KB', }, { name: '@sentry/browser (incl. Tracing, Replay, Feedback)', @@ -100,14 +100,14 @@ module.exports = [ path: 'packages/browser/build/npm/esm/index.js', import: createImport('init', 'sendFeedback'), gzip: true, - limit: '29 KB', + limit: '30 KB', }, { name: '@sentry/browser (incl. FeedbackAsync)', path: 'packages/browser/build/npm/esm/index.js', import: createImport('init', 'feedbackAsyncIntegration'), gzip: true, - limit: '34 KB', + limit: '34.5 KB', }, // React SDK (ESM) { @@ -210,7 +210,7 @@ module.exports = [ import: createImport('init'), ignore: ['next/router', 'next/constants'], gzip: true, - limit: '41 KB', + limit: '43 KB', }, // SvelteKit SDK (ESM) { @@ -219,7 +219,7 @@ module.exports = [ import: createImport('init'), ignore: ['$app/stores'], gzip: true, - limit: '38 KB', + limit: '39 KB', }, // Node SDK (ESM) { diff --git a/CHANGELOG.md b/CHANGELOG.md index cef0ee776afe..345ba11bffb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,66 @@ - "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott +## 9.6.0-alpha.0 + +This is an alpha release that includes experimental functionality for the new logs API in Sentry. All experimental features are subject to breaking changes. + +- feat(logs): Add experimental user-callable logging methods (#15442) + +Logging is gated by an experimental option, `_experiments.enableLogs`. + +```js +Sentry.init({ + _experiments: { + // Enable logs to be sent to Sentry. + enableLogs: true, + }, +}); +``` + +These API are exposed in the `Sentry._experiment_log` namespace. In the future the `_experiment_log` namespace will be removed and logging functions will be moved into a more stable namespace. + +There are functions for each of the logging severity levels `fatal`, `error`, `warn`, `info`, `debug`, `trace`. There is also a `log` function that is an alias to `info`. + +```js +Sentry._experiment_log.info('Adding item to cart', { item: 'sneakers' }); + +Sentry._experiment_log.warn('User performed invalid operation', { userId: '23423874', operation: 'open-file' }); +``` + +If you want to do structured logging, you'll need to use the `fmt` helper exposed in the `Sentry._experiment_log` namespace. + +```js +const { fmt } = Sentry._experiment_log; + +Sentry._experiment_log.info(fmt`user ${username} just bought ${item}!`); +``` + +SDKs that support the Alpha Logging APIs: + +- `@sentry/astro` +- `@sentry/aws-serverless` +- `@sentry/browser` +- `@sentry/bun` +- `@sentry/cloudflare` +- `@sentry/core` +- `@sentry/deno` +- `@sentry/ember` +- `@sentry/gatsby` +- `@sentry/google-cloud-serverless` +- `@sentry/nestjs` +- `@sentry/nextjs` +- `@sentry/node` +- `@sentry/nuxt` +- `@sentry/react` +- `@sentry/remix` +- `@sentry/solid` +- `@sentry/solidstart` +- `@sentry/svelte` +- `@sentry/sveltekit` +- `@sentry/vercel-edge` +- `@sentry/vue` + ## 9.5.0 ### Important Changes diff --git a/dev-packages/browser-integration-tests/package.json b/dev-packages/browser-integration-tests/package.json index 3a1f3a9ae3c6..903c58db0bc5 100644 --- a/dev-packages/browser-integration-tests/package.json +++ b/dev-packages/browser-integration-tests/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/browser-integration-tests", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "main": "index.js", "license": "MIT", "engines": { @@ -42,7 +42,7 @@ "@babel/preset-typescript": "^7.16.7", "@playwright/test": "~1.50.0", "@sentry-internal/rrweb": "2.34.0", - "@sentry/browser": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", "axios": "1.7.7", "babel-loader": "^8.2.2", "fflate": "0.8.2", diff --git a/dev-packages/bundle-analyzer-scenarios/package.json b/dev-packages/bundle-analyzer-scenarios/package.json index 7498a0fe2112..3497c8da6651 100644 --- a/dev-packages/bundle-analyzer-scenarios/package.json +++ b/dev-packages/bundle-analyzer-scenarios/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/bundle-analyzer-scenarios", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Scenarios to test bundle analysis with", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/dev-packages/bundle-analyzer-scenarios", diff --git a/dev-packages/clear-cache-gh-action/package.json b/dev-packages/clear-cache-gh-action/package.json index a9036113d1f3..64387337c907 100644 --- a/dev-packages/clear-cache-gh-action/package.json +++ b/dev-packages/clear-cache-gh-action/package.json @@ -1,7 +1,7 @@ { "name": "@sentry-internal/clear-cache-gh-action", "description": "An internal Github Action to clear GitHub caches.", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "license": "MIT", "engines": { "node": ">=18" diff --git a/dev-packages/e2e-tests/package.json b/dev-packages/e2e-tests/package.json index 112ef4c6c1f1..8cd82ffa103a 100644 --- a/dev-packages/e2e-tests/package.json +++ b/dev-packages/e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/e2e-tests", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "license": "MIT", "private": true, "scripts": { diff --git a/dev-packages/external-contributor-gh-action/package.json b/dev-packages/external-contributor-gh-action/package.json index c64abe384a58..5f054f513f74 100644 --- a/dev-packages/external-contributor-gh-action/package.json +++ b/dev-packages/external-contributor-gh-action/package.json @@ -1,7 +1,7 @@ { "name": "@sentry-internal/external-contributor-gh-action", "description": "An internal Github Action to add external contributors to the CHANGELOG.md file.", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "license": "MIT", "engines": { "node": ">=18" diff --git a/dev-packages/node-integration-tests/package.json b/dev-packages/node-integration-tests/package.json index 26f880284b99..a3ae73d4a919 100644 --- a/dev-packages/node-integration-tests/package.json +++ b/dev-packages/node-integration-tests/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/node-integration-tests", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "license": "MIT", "engines": { "node": ">=18" @@ -30,9 +30,9 @@ "@nestjs/common": "10.4.6", "@nestjs/core": "10.4.6", "@nestjs/platform-express": "10.4.6", - "@sentry/aws-serverless": "9.5.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", + "@sentry/aws-serverless": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", "@types/mongodb": "^3.6.20", "@types/mysql": "^2.15.21", "@types/pg": "^8.6.5", diff --git a/dev-packages/rollup-utils/package.json b/dev-packages/rollup-utils/package.json index 3d01391db42d..ce1dd3835589 100644 --- a/dev-packages/rollup-utils/package.json +++ b/dev-packages/rollup-utils/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/rollup-utils", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Rollup utilities used at Sentry for the Sentry JavaScript SDK", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/rollup-utils", diff --git a/dev-packages/size-limit-gh-action/package.json b/dev-packages/size-limit-gh-action/package.json index b8eaba55a5ec..1b7c8150ac72 100644 --- a/dev-packages/size-limit-gh-action/package.json +++ b/dev-packages/size-limit-gh-action/package.json @@ -1,7 +1,7 @@ { "name": "@sentry-internal/size-limit-gh-action", "description": "An internal Github Action to compare the current size of a PR against the one on develop.", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "license": "MIT", "engines": { "node": ">=18" diff --git a/dev-packages/test-utils/package.json b/dev-packages/test-utils/package.json index ff5e22ff5af5..7510a2b08e7a 100644 --- a/dev-packages/test-utils/package.json +++ b/dev-packages/test-utils/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "9.5.0", + "version": "9.6.0-alpha.0", "name": "@sentry-internal/test-utils", "author": "Sentry", "license": "MIT", @@ -45,7 +45,7 @@ }, "devDependencies": { "@playwright/test": "~1.50.0", - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "volta": { "extends": "../../package.json" diff --git a/lerna.json b/lerna.json index f5f7f961982b..fdd40e1fe25e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "npmClient": "yarn" } diff --git a/packages/angular/package.json b/packages/angular/package.json index 33747194915c..8596b1745087 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/angular", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Angular", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/angular", @@ -21,8 +21,8 @@ "rxjs": "^6.5.5 || ^7.x" }, "dependencies": { - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/astro/package.json b/packages/astro/package.json index 26736f0f9323..fb8b13c761c1 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/astro", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Astro", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/astro", @@ -56,9 +56,9 @@ "astro": ">=3.x || >=4.0.0-beta || >=5.x" }, "dependencies": { - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", "@sentry/vite-plugin": "^2.22.6" }, "devDependencies": { diff --git a/packages/astro/src/index.server.ts b/packages/astro/src/index.server.ts index 6f9647d0134e..6364849d2b16 100644 --- a/packages/astro/src/index.server.ts +++ b/packages/astro/src/index.server.ts @@ -127,6 +127,7 @@ export { withScope, zodErrorsIntegration, profiler, + _experiment_log, } from '@sentry/node'; export { init } from './server/sdk'; diff --git a/packages/aws-serverless/package.json b/packages/aws-serverless/package.json index 7a3dac444959..21a5c5ebc256 100644 --- a/packages/aws-serverless/package.json +++ b/packages/aws-serverless/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/aws-serverless", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for AWS Lambda and AWS Serverless Environments", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/serverless", @@ -68,8 +68,8 @@ "@opentelemetry/instrumentation": "^0.57.2", "@opentelemetry/instrumentation-aws-lambda": "0.50.3", "@opentelemetry/instrumentation-aws-sdk": "0.49.1", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", "@types/aws-lambda": "^8.10.62" }, "devDependencies": { diff --git a/packages/aws-serverless/src/index.ts b/packages/aws-serverless/src/index.ts index 51848530712b..f3a1d2a3e476 100644 --- a/packages/aws-serverless/src/index.ts +++ b/packages/aws-serverless/src/index.ts @@ -113,6 +113,7 @@ export { profiler, amqplibIntegration, vercelAIIntegration, + _experiment_log, } from '@sentry/node'; export { diff --git a/packages/browser-utils/package.json b/packages/browser-utils/package.json index 03cd8a70301c..203ab8b0748a 100644 --- a/packages/browser-utils/package.json +++ b/packages/browser-utils/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/browser-utils", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Browser Utilities for all Sentry JavaScript SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/browser-utils", @@ -39,7 +39,7 @@ "access": "public" }, "dependencies": { - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "scripts": { "build": "run-p build:transpile build:types", diff --git a/packages/browser/package.json b/packages/browser/package.json index 4a36079cf709..23665d361800 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/browser", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for browsers", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/browser", @@ -39,14 +39,14 @@ "access": "public" }, "dependencies": { - "@sentry-internal/browser-utils": "9.5.0", - "@sentry-internal/feedback": "9.5.0", - "@sentry-internal/replay": "9.5.0", - "@sentry-internal/replay-canvas": "9.5.0", - "@sentry/core": "9.5.0" + "@sentry-internal/browser-utils": "9.6.0-alpha.0", + "@sentry-internal/feedback": "9.6.0-alpha.0", + "@sentry-internal/replay": "9.6.0-alpha.0", + "@sentry-internal/replay-canvas": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0" }, "devDependencies": { - "@sentry-internal/integration-shims": "9.5.0", + "@sentry-internal/integration-shims": "9.6.0-alpha.0", "fake-indexeddb": "^4.0.1" }, "scripts": { diff --git a/packages/browser/src/index.ts b/packages/browser/src/index.ts index d034330b6283..07f772da5db9 100644 --- a/packages/browser/src/index.ts +++ b/packages/browser/src/index.ts @@ -10,6 +10,7 @@ export { extraErrorDataIntegration, rewriteFramesIntegration, captureFeedback, + _experiment_log, } from '@sentry/core'; export { replayIntegration, getReplay } from '@sentry-internal/replay'; diff --git a/packages/bun/package.json b/packages/bun/package.json index 2ca7b2a940f6..3287824ab3e4 100644 --- a/packages/bun/package.json +++ b/packages/bun/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/bun", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for bun", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/bun", @@ -39,9 +39,9 @@ "access": "public" }, "dependencies": { - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0" + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0" }, "devDependencies": { "bun-types": "latest" diff --git a/packages/bun/src/index.ts b/packages/bun/src/index.ts index 52b3d9fa4c42..9714cfecfd6c 100644 --- a/packages/bun/src/index.ts +++ b/packages/bun/src/index.ts @@ -132,6 +132,7 @@ export { profiler, amqplibIntegration, vercelAIIntegration, + _experiment_log, } from '@sentry/node'; export { diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json index d42995d0d1b1..bb3786102711 100644 --- a/packages/cloudflare/package.json +++ b/packages/cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/cloudflare", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Cloudflare Workers and Pages", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/cloudflare", @@ -49,7 +49,7 @@ "access": "public" }, "dependencies": { - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "peerDependencies": { "@cloudflare/workers-types": "^4.x" diff --git a/packages/cloudflare/src/index.ts b/packages/cloudflare/src/index.ts index 05fd40fb4c96..2cfbca9bebc8 100644 --- a/packages/cloudflare/src/index.ts +++ b/packages/cloudflare/src/index.ts @@ -85,6 +85,7 @@ export { spanToTraceHeader, spanToBaggageHeader, updateSpanName, + _experiment_log, } from '@sentry/core'; export { withSentry } from './handler'; diff --git a/packages/core/package.json b/packages/core/package.json index 29af6c567a18..45b6140ccc6e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/core", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Base implementation for all Sentry JavaScript SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/core", diff --git a/packages/core/src/exports.ts b/packages/core/src/exports.ts index 4854ee86efb8..b748375c7165 100644 --- a/packages/core/src/exports.ts +++ b/packages/core/src/exports.ts @@ -1,5 +1,6 @@ import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes'; import { DEBUG_BUILD } from './debug-build'; +import { captureLog, sendLog } from './log'; import type { CaptureContext } from './scope'; import { closeSession, makeSession, updateSession } from './session'; import type { @@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger'; import { uuid4 } from './utils-hoist/misc'; import { timestampInSeconds } from './utils-hoist/time'; import { GLOBAL_OBJ } from './utils-hoist/worldwide'; +import { parameterizeStringTemplate } from './utils/parameterize'; import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent'; import { parseEventHintOrCaptureContext } from './utils/prepareEvent'; @@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void { // only send the update _sendSessionUpdate(); } + +/** + * A namespace for experimental logging functions. + * + * @experimental Will be removed in future versions. Use with caution. + */ +export const _experiment_log = { + /** + * A utility to record a log with level 'TRACE' and send it to sentry. + * + * Logs represent a message and some parameters which provide context for a trace or error. + * + * @example + * ```js + * const { trace, fmt } = Sentry._experiment_log; + * trace(fmt`user ${username} just bought ${item}!`); + * ``` + */ + trace: sendLog('trace'), + /** + * A utility to record a log with level 'DEBUG' and send it to sentry. + * + * Logs represent a message and some parameters which provide context for a trace or error. + * + * @example + * ```js + * const { debug, fmt } = Sentry._experiment_log; + * debug(fmt`user ${username} just bought ${item}!`); + * ``` + */ + debug: sendLog('debug'), + /** + * A utility to record a log with level 'INFO' and send it to sentry. + * + * Logs represent a message and some parameters which provide context for a trace or error. + * + * @example + * ```js + * const { info, fmt } = Sentry._experiment_log; + * info(fmt`user ${username} just bought ${item}!`); + * ``` + */ + info: sendLog('info'), + /** + * A utility to record a log with level 'INFO' and send it to sentry. + * + * Logs represent a message and some parameters which provide context for a trace or error. + * + * @example + * ```js + * const { log, fmt } = Sentry._experiment_log; + * log(fmt`user ${username} just bought ${item}!`); + * ``` + */ + log: sendLog('info', 10), + /** + * A utility to record a log with level 'ERROR' and send it to sentry. + * + * Logs represent a message and some parameters which provide context for a trace or error. + * + * @example + * ```js + * const { error, fmt } = Sentry._experiment_log; + * error(fmt`user ${username} just bought ${item}!`); + * ``` + */ + error: sendLog('error'), + /** + * A utility to record a log with level 'WARN' and send it to sentry. + * + * Logs represent a message and some parameters which provide context for a trace or error. + * + * @example + * ```js + * const { warn, fmt } = Sentry._experiment_log; + * warn(fmt`user ${username} just bought ${item}!`); + * ``` + */ + warn: sendLog('warn'), + /** + * A utility to record a log with level 'FATAL' and send it to sentry. + * + * Logs represent a message and some parameters which provide context for a trace or error. + * + * @example + * ```js + * const { fatal, fmt } = Sentry._experiment_log; + * fatal(fmt`user ${username} just bought ${item}!`); + * ``` + */ + fatal: sendLog('fatal'), + + /** + * Tagged template function which returns parameterized representation of the message + * + * @example + * ```js + * Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params` + * ``` + */ + fmt: parameterizeStringTemplate, + + /** + * A flexible utility to record a log with a custom level and send it to sentry. + * + * You can optionally pass in custom attributes and a custom severity number to be attached to the log. + * + * @example + * ```js + * Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } }) + * ``` + */ + emit: captureLog, +}; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 35bfc35bc603..859f98837b8b 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -29,6 +29,7 @@ export { endSession, captureSession, addEventProcessor, + _experiment_log, } from './exports'; export { getCurrentScope, diff --git a/packages/core/src/log.ts b/packages/core/src/log.ts new file mode 100644 index 000000000000..dd346cc19114 --- /dev/null +++ b/packages/core/src/log.ts @@ -0,0 +1,213 @@ +import type { Client } from './client'; +import { getClient, getCurrentScope } from './currentScopes'; +import { DEBUG_BUILD } from './debug-build'; +import type { Scope } from './scope'; +import { getDynamicSamplingContextFromScope } from './tracing'; +import type { ParameterizedString } from './types-hoist'; +import type { DynamicSamplingContext, LogEnvelope, LogItem } from './types-hoist/envelope'; +import type { Log, LogAttribute, LogSeverityLevel } from './types-hoist/log'; +import { createEnvelope, dropUndefinedKeys, dsnToString, isParameterizedString, logger } from './utils-hoist'; +import { getActiveSpan } from './utils/spanUtils'; + +const LOG_BUFFER_MAX_LENGTH = 25; + +let GLOBAL_LOG_BUFFER: Log[] = []; + +let isFlushingLogs = false; + +const SEVERITY_TEXT_TO_SEVERITY_NUMBER: Partial> = { + trace: 1, + debug: 5, + info: 9, + log: 10, + warn: 13, + error: 17, + fatal: 21, +}; + +/** + * Creates envelope item for a single log + */ +export function createLogEnvelopeItem(log: Log): LogItem { + const headers: LogItem[0] = { + type: 'otel_log', + }; + + return [headers, log]; +} + +/** + * Records a log and sends it to sentry. + * + * Logs represent a message (and optionally some structured data) which provide context for a trace or error. + * Ex: sentry.addLog({level: 'warning', message: `user ${user} just bought ${item}`, attributes: {user, item}} + * + * @params log - the log object which will be sent + */ +function createLogEnvelope(logs: Log[], client: Client, scope: Scope): LogEnvelope { + const dsc = getDynamicSamplingContextFromScope(client, scope); + + const dsn = client.getDsn(); + + const headers: LogEnvelope[0] = { + trace: dropUndefinedKeys(dsc) as DynamicSamplingContext, + ...(dsn ? { dsn: dsnToString(dsn) } : {}), + }; + + return createEnvelope(headers, logs.map(createLogEnvelopeItem)); +} + +function valueToAttribute(key: string, value: unknown): LogAttribute { + switch (typeof value) { + case 'number': + return { + key, + value: { doubleValue: value }, + }; + case 'boolean': + return { + key, + value: { boolValue: value }, + }; + case 'string': + return { + key, + value: { stringValue: value }, + }; + default: + return { + key, + value: { stringValue: JSON.stringify(value) ?? '' }, + }; + } +} + +function addToLogBuffer(client: Client, log: Log, scope: Scope): void { + function sendLogs(flushedLogs: Log[]): void { + const envelope = createLogEnvelope(flushedLogs, client, scope); + // eslint-disable-next-line @typescript-eslint/no-floating-promises + void client.sendEnvelope(envelope); + } + + function sendAndClearLogs(): void { + if (GLOBAL_LOG_BUFFER.length > 0) { + sendLogs(GLOBAL_LOG_BUFFER); + GLOBAL_LOG_BUFFER = []; + } + } + + if (GLOBAL_LOG_BUFFER.length >= LOG_BUFFER_MAX_LENGTH) { + sendAndClearLogs(); + } else { + GLOBAL_LOG_BUFFER.push(log); + } + + // this is the first time logs have been enabled, let's kick off an interval to flush them + // we should only do this once. + if (!isFlushingLogs) { + client.on('flush', () => { + sendAndClearLogs(); + }); + + const flushTimer = setInterval(() => { + sendAndClearLogs(); + }, 5000); + + // We need to unref the timer in node.js, otherwise the node process never exit. + if (typeof flushTimer !== 'number' && flushTimer.unref) { + flushTimer.unref(); + } + } + isFlushingLogs = true; +} + +/** + * A utility function to be able to create methods like Sentry.info(...). + */ +export function sendLog( + level: LogSeverityLevel, + severityNumber?: number, +): (message: ParameterizedString | string, customAttributes?: Record) => void { + return (message: ParameterizedString | string, attributes: Record = {}): void => + captureLog({ level, message, attributes, severityNumber }); +} + +/** + * Sends a log to Sentry. + */ +export function captureLog({ + level, + message, + attributes, + severityNumber, +}: { + level: LogSeverityLevel; + message: ParameterizedString | string; + attributes?: Record; + severityNumber?: number; +}): void { + const client = getClient(); + + if (!client) { + DEBUG_BUILD && logger.warn('No client available, log will not be captured.'); + return; + } + + if (!client.getOptions()._experiments?.enableLogs) { + DEBUG_BUILD && logger.warn('logging option not enabled, log will not be captured.'); + return; + } + + const { release, environment } = client.getOptions(); + + const logAttributes = { + ...attributes, + }; + + if (isParameterizedString(message)) { + const { __sentry_template_string__ = '', __sentry_template_values__ = [] } = message; + if (__sentry_template_string__) { + logAttributes['sentry.message.template'] = __sentry_template_string__; + __sentry_template_values__.forEach((value, index) => { + logAttributes[`sentry.message.parameters.${index}`] = value; + }); + } + } + + const span = getActiveSpan(); + if (span) { + logAttributes['sentry.trace.parent_span_id'] = span.spanContext().spanId; + } + + if (release) { + logAttributes['sentry.release'] = release; + } + + if (environment) { + logAttributes['sentry.environment'] = environment; + } + + const scope = getCurrentScope(); + + const finalAttributes = Object.entries(logAttributes).map(([key, value]) => + valueToAttribute(key, value), + ); + + const log: Log = { + severityText: level, + body: { + stringValue: message, + }, + attributes: finalAttributes, + timeUnixNano: `${new Date().getTime().toString()}000000`, + traceId: scope.getPropagationContext().traceId, + severityNumber, + }; + + const maybeSeverityNumber = SEVERITY_TEXT_TO_SEVERITY_NUMBER[level]; + if (maybeSeverityNumber !== undefined && log.severityNumber === undefined) { + log.severityNumber = maybeSeverityNumber; + } + + addToLogBuffer(client, log, scope); +} diff --git a/packages/core/src/types-hoist/options.ts b/packages/core/src/types-hoist/options.ts index 8e52b32eacf7..d0474b959fa9 100644 --- a/packages/core/src/types-hoist/options.ts +++ b/packages/core/src/types-hoist/options.ts @@ -182,7 +182,12 @@ export interface ClientOptions = string & { __sentry_template_string__?: string; - __sentry_template_values__?: string[]; + __sentry_template_values__?: Values; }; diff --git a/packages/core/src/utils/parameterize.ts b/packages/core/src/utils/parameterize.ts index 392f4b70b444..5a9cb29d6aeb 100644 --- a/packages/core/src/utils/parameterize.ts +++ b/packages/core/src/utils/parameterize.ts @@ -15,3 +15,22 @@ export function parameterize(strings: TemplateStringsArray, ...values: string[]) formatted.__sentry_template_values__ = values; return formatted; } + +/** + * Tagged template function which returns parameterized representation of the message + * For example: parameterize`This is a log statement with ${x} and ${y} params`, would return: + * "__sentry_template_string__": 'This is a log statement with %s and %s params', + * "__sentry_template_values__": ['first', 'second'] + * @param strings An array of string values splitted between expressions + * @param values Expressions extracted from template string + * @returns String with template information in __sentry_template_string__ and __sentry_template_values__ properties + */ +export function parameterizeStringTemplate( + strings: TemplateStringsArray, + ...values: unknown[] +): ParameterizedString { + const formatted = new String(String.raw(strings, ...values)) as ParameterizedString; + formatted.__sentry_template_string__ = strings.join('\x00').replace(/%/g, '%%').replace(/\0/g, '%s'); + formatted.__sentry_template_values__ = values; + return formatted; +} diff --git a/packages/deno/package.json b/packages/deno/package.json index c4b5a8b1a608..ced6b947fdea 100644 --- a/packages/deno/package.json +++ b/packages/deno/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/deno", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Deno", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/deno", @@ -24,7 +24,7 @@ "/build" ], "dependencies": { - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "scripts": { "deno-types": "node ./scripts/download-deno-types.mjs", diff --git a/packages/deno/src/index.ts b/packages/deno/src/index.ts index a906197b40c2..c2fad35f5e2b 100644 --- a/packages/deno/src/index.ts +++ b/packages/deno/src/index.ts @@ -83,6 +83,7 @@ export { spanToTraceHeader, spanToBaggageHeader, updateSpanName, + _experiment_log, } from '@sentry/core'; export { DenoClient } from './client'; diff --git a/packages/ember/package.json b/packages/ember/package.json index 2162ef1dc9d1..5cc4980fcdf3 100644 --- a/packages/ember/package.json +++ b/packages/ember/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/ember", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Ember.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/ember", @@ -32,8 +32,8 @@ "dependencies": { "@babel/core": "^7.24.4", "@embroider/macros": "^1.16.0", - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", "ember-auto-import": "^2.7.2", "ember-cli-babel": "^8.2.0", "ember-cli-htmlbars": "^6.1.1", diff --git a/packages/eslint-config-sdk/package.json b/packages/eslint-config-sdk/package.json index eb5a7f979dac..774ff170625e 100644 --- a/packages/eslint-config-sdk/package.json +++ b/packages/eslint-config-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/eslint-config-sdk", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK eslint config", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/eslint-config-sdk", @@ -22,8 +22,8 @@ "access": "public" }, "dependencies": { - "@sentry-internal/eslint-plugin-sdk": "9.5.0", - "@sentry-internal/typescript": "9.5.0", + "@sentry-internal/eslint-plugin-sdk": "9.6.0-alpha.0", + "@sentry-internal/typescript": "9.6.0-alpha.0", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": "^5.48.0", "eslint-config-prettier": "^6.11.0", diff --git a/packages/eslint-config-sdk/src/base.js b/packages/eslint-config-sdk/src/base.js index 8c11f26dd925..0b513b7316ba 100644 --- a/packages/eslint-config-sdk/src/base.js +++ b/packages/eslint-config-sdk/src/base.js @@ -84,7 +84,7 @@ module.exports = { // Make sure all expressions are used. Turned off in tests // Must disable base rule to prevent false positives 'no-unused-expressions': 'off', - '@typescript-eslint/no-unused-expressions': ['error', { allowShortCircuit: true }], + '@typescript-eslint/no-unused-expressions': ['error', { allowShortCircuit: true, allowTaggedTemplates: true }], // Make sure Promises are handled appropriately '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: false }], diff --git a/packages/eslint-plugin-sdk/package.json b/packages/eslint-plugin-sdk/package.json index 58ca37e7bd5c..ac0c7de3db0e 100644 --- a/packages/eslint-plugin-sdk/package.json +++ b/packages/eslint-plugin-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/eslint-plugin-sdk", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK eslint plugin", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/eslint-plugin-sdk", diff --git a/packages/feedback/package.json b/packages/feedback/package.json index 3994d3f716a4..c449acad40db 100644 --- a/packages/feedback/package.json +++ b/packages/feedback/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/feedback", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Sentry SDK integration for user feedback", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/feedback", @@ -39,7 +39,7 @@ "access": "public" }, "dependencies": { - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "devDependencies": { "preact": "^10.19.4" diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index c9566d7cd035..23cbff63a99d 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/gatsby", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Gatsby.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/gatsby", @@ -45,8 +45,8 @@ "access": "public" }, "dependencies": { - "@sentry/core": "9.5.0", - "@sentry/react": "9.5.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/react": "9.6.0-alpha.0", "@sentry/webpack-plugin": "3.2.1" }, "peerDependencies": { diff --git a/packages/google-cloud-serverless/package.json b/packages/google-cloud-serverless/package.json index 467c6f1fb408..94e15ea4530a 100644 --- a/packages/google-cloud-serverless/package.json +++ b/packages/google-cloud-serverless/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/google-cloud-serverless", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Google Cloud Functions", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/google-cloud-serverless", @@ -48,8 +48,8 @@ "access": "public" }, "dependencies": { - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", "@types/express": "^4.17.14" }, "devDependencies": { diff --git a/packages/google-cloud-serverless/src/index.ts b/packages/google-cloud-serverless/src/index.ts index 9505ef6dd248..b0c8cb572744 100644 --- a/packages/google-cloud-serverless/src/index.ts +++ b/packages/google-cloud-serverless/src/index.ts @@ -113,6 +113,7 @@ export { amqplibIntegration, childProcessIntegration, vercelAIIntegration, + _experiment_log, } from '@sentry/node'; export { diff --git a/packages/integration-shims/package.json b/packages/integration-shims/package.json index c656f9070879..f37027e7d1b5 100644 --- a/packages/integration-shims/package.json +++ b/packages/integration-shims/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/integration-shims", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Shims for integrations in Sentry SDK.", "main": "build/cjs/index.js", "module": "build/esm/index.js", @@ -55,7 +55,7 @@ "url": "https://github.com/getsentry/sentry-javascript/issues" }, "dependencies": { - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "engines": { "node": ">=18" diff --git a/packages/nestjs/package.json b/packages/nestjs/package.json index 2b1322131090..7e07abc22cba 100644 --- a/packages/nestjs/package.json +++ b/packages/nestjs/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/nestjs", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for NestJS", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nestjs", @@ -49,8 +49,8 @@ "@opentelemetry/instrumentation": "0.57.2", "@opentelemetry/instrumentation-nestjs-core": "0.44.1", "@opentelemetry/semantic-conventions": "^1.30.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0" + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0" }, "devDependencies": { "@nestjs/common": "^10.0.0", diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 625d2a921fb0..0109d93db3e1 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/nextjs", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Next.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nextjs", @@ -79,12 +79,12 @@ "@opentelemetry/api": "^1.9.0", "@opentelemetry/semantic-conventions": "^1.30.0", "@rollup/plugin-commonjs": "28.0.1", - "@sentry-internal/browser-utils": "9.5.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0", - "@sentry/react": "9.5.0", - "@sentry/vercel-edge": "9.5.0", + "@sentry-internal/browser-utils": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0", + "@sentry/react": "9.6.0-alpha.0", + "@sentry/vercel-edge": "9.6.0-alpha.0", "@sentry/webpack-plugin": "3.2.1", "chalk": "3.0.0", "resolve": "1.22.8", diff --git a/packages/node/package.json b/packages/node/package.json index e4d7ec33f36b..2b7ba48dd168 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/node", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Sentry Node SDK using OpenTelemetry for performance instrumentation", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/node", @@ -96,8 +96,8 @@ "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.30.0", "@prisma/instrumentation": "6.4.1", - "@sentry/core": "9.5.0", - "@sentry/opentelemetry": "9.5.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0", "import-in-the-middle": "^1.13.0" }, "devDependencies": { diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index bdc8d6405217..99de94d7c3b2 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -130,6 +130,7 @@ export { updateSpanName, zodErrorsIntegration, profiler, + _experiment_log, } from '@sentry/core'; export type { diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index dd3a68e41e05..7aaab46578f8 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/nuxt", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Nuxt (EXPERIMENTAL)", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nuxt", @@ -43,13 +43,13 @@ }, "dependencies": { "@nuxt/kit": "^3.13.2", - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0", "@sentry/rollup-plugin": "3.1.2", "@sentry/vite-plugin": "2.22.6", - "@sentry/vue": "9.5.0" + "@sentry/vue": "9.6.0-alpha.0" }, "devDependencies": { "@nuxt/module-builder": "^0.8.4", diff --git a/packages/opentelemetry/package.json b/packages/opentelemetry/package.json index 5b375cd962ad..007bb998f4d4 100644 --- a/packages/opentelemetry/package.json +++ b/packages/opentelemetry/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/opentelemetry", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry utilities for OpenTelemetry", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/opentelemetry", @@ -39,7 +39,7 @@ "access": "public" }, "dependencies": { - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index fc9f8f7a83fa..8579fc47fd2f 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/profiling-node", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Node.js Profiling", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/profiling-node", @@ -63,8 +63,8 @@ }, "dependencies": { "@sentry-internal/node-cpu-profiler": "^2.0.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0" + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0" }, "devDependencies": { "@types/node": "^18.19.1" diff --git a/packages/react-router/package.json b/packages/react-router/package.json index ae8cbb0dde70..eccb5c4e01ac 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/react-router", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for React Router (Framework)", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/react-router", @@ -34,10 +34,10 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", "@sentry/cli": "^2.42.2", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", "@sentry/vite-plugin": "^3.2.0", "glob": "11.0.1" }, diff --git a/packages/react/package.json b/packages/react/package.json index 638419545df9..495fc07e8123 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/react", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for React.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/react", @@ -39,8 +39,8 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", "hoist-non-react-statics": "^3.3.2" }, "peerDependencies": { diff --git a/packages/remix/package.json b/packages/remix/package.json index d5f3e5456ada..5320d1ececc0 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/remix", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Remix", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/remix", @@ -61,10 +61,10 @@ "@opentelemetry/api": "^1.9.0", "@remix-run/router": "1.x", "@sentry/cli": "^2.42.2", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0", - "@sentry/react": "9.5.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0", + "@sentry/react": "9.6.0-alpha.0", "glob": "^10.3.4", "opentelemetry-instrumentation-remix": "0.8.0", "yargs": "^17.6.0" diff --git a/packages/remix/src/server/index.ts b/packages/remix/src/server/index.ts index 4160a871d165..af0cfe09be9a 100644 --- a/packages/remix/src/server/index.ts +++ b/packages/remix/src/server/index.ts @@ -112,6 +112,7 @@ export { withMonitor, withScope, zodErrorsIntegration, + _experiment_log, } from '@sentry/node'; // Keeping the `*` exports for backwards compatibility and types diff --git a/packages/replay-canvas/package.json b/packages/replay-canvas/package.json index b3f626c3fa0b..49b41e06b920 100644 --- a/packages/replay-canvas/package.json +++ b/packages/replay-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/replay-canvas", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Replay canvas integration", "main": "build/npm/cjs/index.js", "module": "build/npm/esm/index.js", @@ -68,8 +68,8 @@ "@sentry-internal/rrweb": "2.34.0" }, "dependencies": { - "@sentry-internal/replay": "9.5.0", - "@sentry/core": "9.5.0" + "@sentry-internal/replay": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0" }, "engines": { "node": ">=18" diff --git a/packages/replay-internal/package.json b/packages/replay-internal/package.json index 171be7406d89..49eb7b96d5b5 100644 --- a/packages/replay-internal/package.json +++ b/packages/replay-internal/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/replay", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "User replays for Sentry", "main": "build/npm/cjs/index.js", "module": "build/npm/esm/index.js", @@ -70,7 +70,7 @@ "homepage": "https://docs.sentry.io/platforms/javascript/session-replay/", "devDependencies": { "@babel/core": "^7.17.5", - "@sentry-internal/replay-worker": "9.5.0", + "@sentry-internal/replay-worker": "9.6.0-alpha.0", "@sentry-internal/rrweb": "2.34.0", "@sentry-internal/rrweb-snapshot": "2.34.0", "fflate": "0.8.2", @@ -78,8 +78,8 @@ "jsdom-worker": "^0.2.1" }, "dependencies": { - "@sentry-internal/browser-utils": "9.5.0", - "@sentry/core": "9.5.0" + "@sentry-internal/browser-utils": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0" }, "engines": { "node": ">=18" diff --git a/packages/replay-worker/package.json b/packages/replay-worker/package.json index ee59c88f1a74..02ae95d6b78b 100644 --- a/packages/replay-worker/package.json +++ b/packages/replay-worker/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/replay-worker", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Worker for @sentry-internal/replay", "main": "build/esm/index.js", "module": "build/esm/index.js", diff --git a/packages/solid/package.json b/packages/solid/package.json index 225c68f3f6ed..900ea8c29c3a 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/solid", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Solid", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/solid", @@ -44,8 +44,8 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0" + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0" }, "peerDependencies": { "@solidjs/router": "^0.13.4", diff --git a/packages/solidstart/package.json b/packages/solidstart/package.json index 1853baacab8c..677e59ecfbc9 100644 --- a/packages/solidstart/package.json +++ b/packages/solidstart/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/solidstart", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Solid Start", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/solidstart", @@ -66,10 +66,10 @@ } }, "dependencies": { - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0", - "@sentry/solid": "9.5.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0", + "@sentry/solid": "9.6.0-alpha.0", "@sentry/vite-plugin": "2.22.6" }, "devDependencies": { diff --git a/packages/solidstart/src/server/index.ts b/packages/solidstart/src/server/index.ts index 948c3c746d0c..877bd4f312c2 100644 --- a/packages/solidstart/src/server/index.ts +++ b/packages/solidstart/src/server/index.ts @@ -115,6 +115,7 @@ export { withMonitor, withScope, zodErrorsIntegration, + _experiment_log, } from '@sentry/node'; // We can still leave this for the carrier init and type exports diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 86ffd49f55b2..9058f82cc536 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/svelte", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Svelte", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/svelte", @@ -39,8 +39,8 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0", + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", "magic-string": "^0.30.0" }, "peerDependencies": { diff --git a/packages/sveltekit/package.json b/packages/sveltekit/package.json index e447ec887e48..639e30be2f51 100644 --- a/packages/sveltekit/package.json +++ b/packages/sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/sveltekit", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for SvelteKit", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/sveltekit", @@ -44,11 +44,11 @@ } }, "dependencies": { - "@sentry/cloudflare": "9.5.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0", - "@sentry/svelte": "9.5.0", + "@sentry/cloudflare": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0", + "@sentry/svelte": "9.6.0-alpha.0", "@sentry/vite-plugin": "3.2.0", "magic-string": "0.30.7", "magicast": "0.2.8", diff --git a/packages/sveltekit/src/server/index.ts b/packages/sveltekit/src/server/index.ts index f8844c1e264d..75fe460bc841 100644 --- a/packages/sveltekit/src/server/index.ts +++ b/packages/sveltekit/src/server/index.ts @@ -117,6 +117,7 @@ export { withMonitor, withScope, zodErrorsIntegration, + _experiment_log, } from '@sentry/node'; // We can still leave this for the carrier init and type exports diff --git a/packages/tanstackstart/package.json b/packages/tanstackstart/package.json index 992a07d9c6eb..e443814c2bf3 100644 --- a/packages/tanstackstart/package.json +++ b/packages/tanstackstart/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/tanstackstart", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for TanStack Start", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/tanstackstart", @@ -52,11 +52,11 @@ "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/semantic-conventions": "^1.30.0", - "@sentry-internal/browser-utils": "9.5.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0", - "@sentry/react": "9.5.0" + "@sentry-internal/browser-utils": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0", + "@sentry/node": "9.6.0-alpha.0", + "@sentry/opentelemetry": "9.6.0-alpha.0", + "@sentry/react": "9.6.0-alpha.0" }, "scripts": { "build": "run-p build:transpile build:types", diff --git a/packages/types/package.json b/packages/types/package.json index ca7e70b1bba9..1b47a7726083 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/types", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Types for all Sentry JavaScript SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/types", @@ -56,7 +56,7 @@ "yalc:publish": "yalc publish --push --sig" }, "dependencies": { - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/typescript/package.json b/packages/typescript/package.json index 914fe8aac047..830904ae4d74 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/typescript", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Typescript configuration used at Sentry", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/typescript", diff --git a/packages/vercel-edge/package.json b/packages/vercel-edge/package.json index 6ec29c0752c9..ad346a2daab2 100644 --- a/packages/vercel-edge/package.json +++ b/packages/vercel-edge/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/vercel-edge", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for the Vercel Edge Runtime", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/vercel-edge", @@ -40,7 +40,7 @@ }, "dependencies": { "@opentelemetry/api": "^1.9.0", - "@sentry/core": "9.5.0" + "@sentry/core": "9.6.0-alpha.0" }, "devDependencies": { "@edge-runtime/types": "3.0.1", @@ -48,7 +48,7 @@ "@opentelemetry/resources": "^1.30.1", "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.28.0", - "@sentry/opentelemetry": "9.5.0" + "@sentry/opentelemetry": "9.6.0-alpha.0" }, "scripts": { "build": "run-p build:transpile build:types", diff --git a/packages/vercel-edge/src/index.ts b/packages/vercel-edge/src/index.ts index eb6429c441fa..fef448433c29 100644 --- a/packages/vercel-edge/src/index.ts +++ b/packages/vercel-edge/src/index.ts @@ -84,6 +84,7 @@ export { spanToJSON, spanToTraceHeader, spanToBaggageHeader, + _experiment_log, } from '@sentry/core'; export { VercelEdgeClient } from './client'; diff --git a/packages/vue/package.json b/packages/vue/package.json index 30d0fdc62303..bad3ea8651ab 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/vue", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Official Sentry SDK for Vue.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/vue", @@ -39,8 +39,8 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0" + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0" }, "peerDependencies": { "pinia": "2.x || 3.x", diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 8345fd456d24..f2b6aa4978fa 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/wasm", - "version": "9.5.0", + "version": "9.6.0-alpha.0", "description": "Support for WASM.", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/wasm", @@ -39,8 +39,8 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "9.5.0", - "@sentry/core": "9.5.0" + "@sentry/browser": "9.6.0-alpha.0", + "@sentry/core": "9.6.0-alpha.0" }, "scripts": { "build": "run-p build:transpile build:bundle build:types",