From ad314d2a28e576f0ae95cbdd08c95fed72c2fd34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Og=C3=B3rek?= Date: Tue, 9 Oct 2018 15:24:17 +0200 Subject: [PATCH 1/7] fix: Update requestHandler to correctly pass scope --- CHANGELOG.md | 1 + packages/hub/src/scope.ts | 46 ++++++++++++++++++++++++++++++++++- packages/node/src/handlers.ts | 7 +++++- packages/utils/package.json | 2 +- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8b55e915749..6df18b760a6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - [node] feat: Make node transactions a pluggable integration with tests - [node] feat: Transactions handling for RequestHandler in Express/Hapi - [node] fix: Dont wrap native modules more than once to prevent leaks +- [node] fix: Update requestHandler to correctly pass scope - [utils] ref: implemented includes, assign and isNaN polyfills ## 4.0.6 diff --git a/packages/hub/src/scope.ts b/packages/hub/src/scope.ts index 0bd7716b43f2..d7fdc1d1d15b 100644 --- a/packages/hub/src/scope.ts +++ b/packages/hub/src/scope.ts @@ -1,5 +1,5 @@ import { Breadcrumb, SentryEvent, SentryEventHint, Severity, User } from '@sentry/types'; -import { assign } from '@sentry/utils/object'; +import { assign, clone } from '@sentry/utils/object'; /** * Holds additional event information. {@link Scope.applyToEvent} will be @@ -185,6 +185,50 @@ export class Scope { this.notifyScopeListeners(); } + /** Inherit user data from provided scope, but make sure to not use references */ + public inheritUserData(from: Scope): void { + const breadcrumbs = from.getBreadcrumbs(); + if (breadcrumbs) { + // Don't clone breadcrumbs as they might be quite large in size, wwhich can harm + // the performance. Shallow clone in this case shouuuld be enough. + const clonedBreadcrumbs = [...breadcrumbs]; + clonedBreadcrumbs.forEach(breadcrumb => { + this.addBreadcrumb(breadcrumb); + }); + } + + const user = from.getUser(); + if (user) { + this.setUser(clone(user)); + } + + const tags = from.getTags(); + if (tags) { + const clonedTags = clone(tags); + Object.keys(clonedTags).forEach(key => { + this.setTag(key, clonedTags[key]); + }); + } + + const extra = from.getExtra(); + if (extra) { + const clonedExtra = clone(extra); + Object.keys(clonedExtra).forEach(key => { + this.setExtra(key, clonedExtra[key]); + }); + } + + const fingerprint = from.getFingerprint(); + if (fingerprint) { + this.setFingerprint(clone(fingerprint)); + } + + const level = from.getLevel(); + if (level) { + this.setLevel(level); + } + } + /** * Sets the breadcrumbs in the scope * @param breadcrumbs Breadcrumb diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index 453e93e257af..a99ce5fca185 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -215,9 +215,14 @@ export function requestHandler(options?: { next: () => void, ): void { const local = domain.create(); + const currentHub = getCurrentHub(); + const currentScope = currentHub.getScope(); const hub = getHubFromCarrier(req); - hub.bindClient(getCurrentHub().getClient()); + hub.bindClient(currentHub.getClient()); hub.configureScope((scope: Scope) => { + if (currentScope) { + scope.inheritUserData(currentScope); + } scope.addEventProcessor(async (event: SentryEvent) => parseRequest(event, req, options)); }); local.on('error', next); diff --git a/packages/utils/package.json b/packages/utils/package.json index 58625868fbc4..18ba3a40eb32 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -27,7 +27,7 @@ }, "scripts": { "build": "run-s clean; tsc -p tsconfig.build.json", - "build:watch": "run-s clean; tsc -p tsconfig.build.json -w --preserveWatchOutput", + "build:watch": "tsc -p tsconfig.build.json -w --preserveWatchOutput", "clean": "rimraf dist coverage *.js *.js.map *.d.ts", "lint": "run-s lint:prettier lint:tslint", "lint:prettier": "prettier-check '{src,test}/**/*.ts'", From eb7e3c6acda2fd4c534c1ecfaf1effd7fc2a7784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Og=C3=B3rek?= Date: Tue, 9 Oct 2018 16:32:51 +0200 Subject: [PATCH 2/7] test: scope's inheritUserData tests --- packages/hub/src/scope.ts | 6 +-- packages/hub/test/lib/scope.test.ts | 62 +++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/packages/hub/src/scope.ts b/packages/hub/src/scope.ts index d7fdc1d1d15b..885dfd7d7a49 100644 --- a/packages/hub/src/scope.ts +++ b/packages/hub/src/scope.ts @@ -189,9 +189,9 @@ export class Scope { public inheritUserData(from: Scope): void { const breadcrumbs = from.getBreadcrumbs(); if (breadcrumbs) { - // Don't clone breadcrumbs as they might be quite large in size, wwhich can harm - // the performance. Shallow clone in this case shouuuld be enough. - const clonedBreadcrumbs = [...breadcrumbs]; + // Don't clone breadcrumbs as they might be quite large in size, which can harm performance. + // Shallow clone in this case shouuuuuld be enough. + const clonedBreadcrumbs = [...breadcrumbs.map(breadcrumb => ({ ...breadcrumb }))]; clonedBreadcrumbs.forEach(breadcrumb => { this.addBreadcrumb(breadcrumb); }); diff --git a/packages/hub/test/lib/scope.test.ts b/packages/hub/test/lib/scope.test.ts index 9115ca52770a..f0632fecf709 100644 --- a/packages/hub/test/lib/scope.test.ts +++ b/packages/hub/test/lib/scope.test.ts @@ -233,4 +233,66 @@ describe('Scope', () => { const final = await localScope.applyToEvent(event, { syntheticException: new Error('what') }); expect(final).toEqual(event); }); + + test('inheritUserData', () => { + const donor = new Scope(); + const receiver = new Scope(); + + donor.addBreadcrumb({ + data: { + some: 'data', + }, + message: 'test2', + }); + donor.setExtra('b', 3); + donor.setExtra('deep', { + some: 'data', + }); + donor.setFingerprint(['efgh']); + donor.setTag('b', 'c'); + donor.setUser({ + extra: { + some: 'data', + }, + id: '3', + }); + donor.setLevel(Severity.Warning); + + receiver.inheritUserData(donor as any); + + // Should not copy eventProcessors and scopeListeners + expect(receiver.eventProcessors).not.toBe(donor.eventProcessors); + expect(receiver.scopeListeners).not.toBe(donor.scopeListeners); + + // Should copy breadcrumbs, but shallow copy only + expect(receiver.getBreadcrumbs()).not.toBe(donor.getBreadcrumbs()); + expect(receiver.getBreadcrumbs()[0]).not.toBe(donor.getBreadcrumbs()[0]); + expect(receiver.getBreadcrumbs()[0].data).toBe(donor.getBreadcrumbs()[0].data); + expect(receiver.getBreadcrumbs()[0].message).toBe(donor.getBreadcrumbs()[0].message); + + // Should deep copy extra, user, tags, fingerprint and level + + // nested object + expect(receiver.getExtra()).toEqual(donor.getExtra()); + expect(receiver.getExtra()).not.toBe(donor.getExtra()); + expect(receiver.getExtra().deep).toEqual(donor.getExtra().deep); + expect(receiver.getExtra().deep).not.toBe(donor.getExtra().deep); + + // nested object + expect(receiver.getUser()).toEqual(donor.getUser()); + expect(receiver.getUser()).not.toBe(donor.getUser()); + expect(receiver.getUser().extra).toEqual(donor.getUser().extra); + expect(receiver.getUser().extra).not.toBe(donor.getUser().extra); + + // non-nested object + expect(receiver.getTags()).toEqual(donor.getTags()); + expect(receiver.getTags()).not.toBe(donor.getTags()); + + // non-nested array + expect(receiver.getFingerprint()).toEqual(donor.getFingerprint()); + expect(receiver.getFingerprint()).not.toBe(donor.getFingerprint()); + + // string + expect(receiver.getLevel()).toEqual(donor.getLevel()); + }); }); From e7553f3716f5ceb0a8db1fb6dd6c0f033b169de3 Mon Sep 17 00:00:00 2001 From: HazA Date: Wed, 10 Oct 2018 10:02:31 +0200 Subject: [PATCH 3/7] fix: Remove builtins, Add shim for domain, Fix getCurrentHub --- packages/browser/package.json | 2 +- packages/browser/rollup.config.js | 9 +- .../integrations/pluggable/rewriteframes.ts | 12 + packages/core/src/integrations/index.ts | 2 +- ...{rewriteframes.ts => corerewriteframes.ts} | 28 +- packages/hub/src/hub.ts | 37 ++- packages/hub/src/index.ts | 2 +- packages/hub/src/scope.ts | 3 + packages/node/src/handlers.ts | 26 +- packages/node/src/hub.ts | 38 --- packages/node/src/index.ts | 2 +- packages/node/src/integrations/console.ts | 2 +- packages/node/src/integrations/http.ts | 2 +- .../node/src/integrations/linkederrors.ts | 2 +- .../src/integrations/onunhandledrejection.ts | 2 +- .../src/integrations/pluggable/modules.ts | 3 +- .../integrations/pluggable/rewriteframes.ts | 19 ++ .../src/integrations/pluggable/transaction.ts | 3 +- yarn.lock | 314 ++++++++++++++++-- 19 files changed, 391 insertions(+), 117 deletions(-) create mode 100644 packages/browser/src/integrations/pluggable/rewriteframes.ts rename packages/core/src/integrations/pluggable/{rewriteframes.ts => corerewriteframes.ts} (67%) delete mode 100644 packages/node/src/hub.ts create mode 100644 packages/node/src/integrations/pluggable/rewriteframes.ts diff --git a/packages/browser/package.json b/packages/browser/package.json index a7bb60ad60c0..353fc0dc2d7f 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -40,9 +40,9 @@ "rollup": "^0.58.2", "rollup-plugin-commonjs": "^9.1.3", "rollup-plugin-license": "^0.6.0", - "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-resolve": "^3.3.0", "rollup-plugin-npm": "^2.0.0", + "rollup-plugin-shim": "^1.0.0", "rollup-plugin-typescript2": "^0.13.0", "rollup-plugin-uglify": "^3.0.0", "sinon": "^5.0.3", diff --git a/packages/browser/rollup.config.js b/packages/browser/rollup.config.js index e4f163aba20e..3ca75e269da0 100644 --- a/packages/browser/rollup.config.js +++ b/packages/browser/rollup.config.js @@ -1,9 +1,9 @@ -import builtins from 'rollup-plugin-node-builtins'; import commonjs from 'rollup-plugin-commonjs'; import uglify from 'rollup-plugin-uglify'; import resolve from 'rollup-plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; import license from 'rollup-plugin-license'; +import shim from 'rollup-plugin-shim'; const commitHash = require('child_process') .execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }) @@ -18,7 +18,9 @@ const bundleConfig = { }, context: 'window', plugins: [ - builtins(), + shim({ + domain: `export var active = false;`, + }), typescript({ tsconfig: 'tsconfig.build.json', tsconfigOverride: { compilerOptions: { declaration: false } }, @@ -47,6 +49,9 @@ export default [ }, external: ['@sentry/core', '@sentry/hub', '@sentry/minimal'], plugins: [ + shim({ + domain: `export var active = false;`, + }), typescript({ tsconfig: 'tsconfig.build.json', }), diff --git a/packages/browser/src/integrations/pluggable/rewriteframes.ts b/packages/browser/src/integrations/pluggable/rewriteframes.ts new file mode 100644 index 000000000000..45f8c9adab46 --- /dev/null +++ b/packages/browser/src/integrations/pluggable/rewriteframes.ts @@ -0,0 +1,12 @@ +import { Integrations } from '@sentry/core'; +import { StackFrame } from '@sentry/types'; + +type StackFrameIteratee = (frame: StackFrame) => Promise; + +/** Rewrite event frames paths */ +export class RewriteFrames extends Integrations.CoreRewriteFrames { + /** + * @inheritDoc + */ + protected iteratee: StackFrameIteratee = async (frame: StackFrame) => frame; +} diff --git a/packages/core/src/integrations/index.ts b/packages/core/src/integrations/index.ts index 52a16507d399..ab143fabd7e4 100644 --- a/packages/core/src/integrations/index.ts +++ b/packages/core/src/integrations/index.ts @@ -4,4 +4,4 @@ export { SDKInformation } from './sdkinformation'; export { InboundFilters } from './inboundfilters'; export { Debug } from './pluggable/debug'; -export { RewriteFrames } from './pluggable/rewriteframes'; +export { CoreRewriteFrames } from './pluggable/corerewriteframes'; diff --git a/packages/core/src/integrations/pluggable/rewriteframes.ts b/packages/core/src/integrations/pluggable/corerewriteframes.ts similarity index 67% rename from packages/core/src/integrations/pluggable/rewriteframes.ts rename to packages/core/src/integrations/pluggable/corerewriteframes.ts index 2dcac05bd076..60b7dc35a2e1 100644 --- a/packages/core/src/integrations/pluggable/rewriteframes.ts +++ b/packages/core/src/integrations/pluggable/corerewriteframes.ts @@ -1,11 +1,10 @@ import { getCurrentHub, Scope } from '@sentry/hub'; import { Integration, SentryEvent, StackFrame } from '@sentry/types'; -import { basename, relative } from 'path'; type StackFrameIteratee = (frame: StackFrame) => Promise; /** Rewrite event frames paths */ -export class RewriteFrames implements Integration { +export abstract class CoreRewriteFrames implements Integration { /** * @inheritDoc */ @@ -14,35 +13,28 @@ export class RewriteFrames implements Integration { /** * @inheritDoc */ - private readonly root?: string; + protected root?: string; /** * @inheritDoc */ - private readonly iteratee: StackFrameIteratee = async (frame: StackFrame) => { - if (frame.filename && frame.filename.startsWith('/')) { - const base = this.root ? relative(this.root, frame.filename) : basename(frame.filename); - frame.filename = `app:///${base}`; - } - return frame; - }; + protected abstract iteratee: StackFrameIteratee; /** * @inheritDoc */ - public constructor(options: { root?: string; iteratee?: StackFrameIteratee } = {}) { - if (options.root) { - this.root = options.root; - } - if (options.iteratee) { - this.iteratee = options.iteratee; - } - } + public constructor(protected readonly options: { root?: string; iteratee?: StackFrameIteratee } = {}) {} /** * @inheritDoc */ public install(): void { + if (this.options.root) { + this.root = this.options.root; + } + if (this.options.iteratee) { + this.iteratee = this.options.iteratee; + } getCurrentHub().configureScope((scope: Scope) => { scope.addEventProcessor(async event => this.process(event)); }); diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index b0cfade4c0e5..11f1a1f088d3 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -301,7 +301,34 @@ export function getCurrentHub(): Hub { registry.hub = new Hub(); } - return registry.hub; + let domain: { + active?: { + __SENTRY__?: Carrier; + }; + }; + + try { + // tslint:disable-next-line:no-var-requires + domain = require('domain'); + } catch { + domain = {}; + } + + if (!domain.active) { + return registry.hub; + } + + let carrier = domain.active.__SENTRY__; + if (!carrier) { + domain.active.__SENTRY__ = carrier = {}; + } + + if (!carrier.hub) { + const top = registry.hub.getStackTop(); + carrier.hub = top ? new Hub(top.client, Scope.clone(top.scope)) : new Hub(); + } + + return carrier.hub; } /** @@ -318,3 +345,11 @@ export function getHubFromCarrier(carrier: any): Hub { return carrier.__SENTRY__.hub; } } + +export function setHubToCarrier(carrier: any, hub: Hub): Hub { + if (carrier && !carrier.__SENTRY__) { + carrier.__SENTRY__ = {}; + } + carrier.__SENTRY__.hub = hub; + return hub; +} diff --git a/packages/hub/src/index.ts b/packages/hub/src/index.ts index 08bf34f1d7a2..c7c85afdaba2 100644 --- a/packages/hub/src/index.ts +++ b/packages/hub/src/index.ts @@ -1,3 +1,3 @@ export { Carrier, Layer } from './interfaces'; export { Scope } from './scope'; -export { getCurrentHub, getHubFromCarrier, Hub } from './hub'; +export { getCurrentHub, getHubFromCarrier, Hub, setHubToCarrier } from './hub'; diff --git a/packages/hub/src/scope.ts b/packages/hub/src/scope.ts index 885dfd7d7a49..2893f310dc7a 100644 --- a/packages/hub/src/scope.ts +++ b/packages/hub/src/scope.ts @@ -139,6 +139,9 @@ export class Scope { scopeListeners: [], }); if (scope) { + newScope.extra = assign(scope.extra); + newScope.tags = assign(scope.tags) as any; + newScope.breadcrumbs = [...scope.breadcrumbs]; newScope.eventProcessors = [...scope.eventProcessors]; } return newScope; diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index a99ce5fca185..dd62a6cc3f16 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -1,5 +1,5 @@ import { logger } from '@sentry/core'; -import { getHubFromCarrier, Scope } from '@sentry/hub'; +import { getCurrentHub, getHubFromCarrier, Scope, setHubToCarrier } from '@sentry/hub'; import { SentryEvent, Severity } from '@sentry/types'; import { forget } from '@sentry/utils/async'; import { serialize } from '@sentry/utils/object'; @@ -9,7 +9,6 @@ import * as http from 'http'; import * as os from 'os'; import * as url from 'url'; import { NodeClient } from './client'; -import { getCurrentHub } from './hub'; const DEFAULT_SHUTDOWN_TIMEOUT = 2000; @@ -208,25 +207,21 @@ export function requestHandler(options?: { transaction?: boolean | TransactionTypes; user?: boolean; version?: boolean; -}): (req: http.IncomingMessage, res: http.ServerResponse, next: () => void) => void { +}): (req: http.IncomingMessage, res: http.ServerResponse, next: (error?: any) => void) => void { return function sentryRequestMiddleware( req: http.IncomingMessage, _res: http.ServerResponse, - next: () => void, + next: (error?: any) => void, ): void { const local = domain.create(); - const currentHub = getCurrentHub(); - const currentScope = currentHub.getScope(); - const hub = getHubFromCarrier(req); - hub.bindClient(currentHub.getClient()); - hub.configureScope((scope: Scope) => { - if (currentScope) { - scope.inheritUserData(currentScope); - } - scope.addEventProcessor(async (event: SentryEvent) => parseRequest(event, req, options)); - }); local.on('error', next); - local.run(next); + local.run(() => { + const hub = setHubToCarrier(req, getCurrentHub()); + hub.configureScope((scope: Scope) => { + scope.addEventProcessor(async (event: SentryEvent) => parseRequest(event, req, options)); + }); + return next(); + }); }; } @@ -243,7 +238,6 @@ interface MiddlewareError extends Error { /** JSDoc */ function getStatusCodeFromResponse(error: MiddlewareError): number { const statusCode = error.status || error.statusCode || error.status_code || (error.output && error.output.statusCode); - return statusCode ? parseInt(statusCode as string, 10) : 500; } diff --git a/packages/node/src/hub.ts b/packages/node/src/hub.ts deleted file mode 100644 index 3d32558491b4..000000000000 --- a/packages/node/src/hub.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Carrier, getCurrentHub as getCurrentHubBase, Hub } from '@sentry/hub'; -import * as domain from 'domain'; - -declare module 'domain' { - export let active: Domain; - /** - * Extension for domain interface - */ - export interface Domain { - __SENTRY__?: Carrier; - } -} - -/** - * Returns the latest global hub instance. - * - * If a hub is already registered in the global carrier but this module - * contains a more recent version, it replaces the registered version. - * Otherwise, the currently registered hub will be returned. - */ -export function getCurrentHub(): Hub { - const globalHub = getCurrentHubBase(); - if (!domain.active) { - return globalHub; - } - - let carrier = domain.active.__SENTRY__; - if (!carrier) { - domain.active.__SENTRY__ = carrier = {}; - } - - if (!carrier.hub) { - const top = globalHub.getStackTop(); - carrier.hub = top ? new Hub(top.client, top.scope) : new Hub(); - } - - return carrier.hub; -} diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index ea3ed22a3c39..f8d7780032f5 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -19,13 +19,13 @@ export { captureEvent, captureMessage, configureScope, + getCurrentHub, getHubFromCarrier, Hub, Scope, withScope, } from '@sentry/core'; -export { getCurrentHub } from './hub'; export { NodeBackend, NodeOptions } from './backend'; export { NodeClient } from './client'; export { defaultIntegrations, init } from './sdk'; diff --git a/packages/node/src/integrations/console.ts b/packages/node/src/integrations/console.ts index 129eea3999fe..3b7773f70d51 100644 --- a/packages/node/src/integrations/console.ts +++ b/packages/node/src/integrations/console.ts @@ -1,7 +1,7 @@ +import { getCurrentHub } from '@sentry/hub'; import { Integration, Severity } from '@sentry/types'; import { fill } from '@sentry/utils/object'; import * as util from 'util'; -import { getCurrentHub } from '../hub'; /** * Wrapper function for internal _load calls within `require` diff --git a/packages/node/src/integrations/http.ts b/packages/node/src/integrations/http.ts index 40c8b7ce9a12..62eee762b16e 100644 --- a/packages/node/src/integrations/http.ts +++ b/packages/node/src/integrations/http.ts @@ -1,8 +1,8 @@ +import { getCurrentHub } from '@sentry/hub'; import { Integration } from '@sentry/types'; import { fill } from '@sentry/utils/object'; import * as http from 'http'; import * as util from 'util'; -import { getCurrentHub } from '../hub'; let lastResponse: http.ServerResponse | undefined; diff --git a/packages/node/src/integrations/linkederrors.ts b/packages/node/src/integrations/linkederrors.ts index 8f1f9de2bb8e..06084d8f95fd 100644 --- a/packages/node/src/integrations/linkederrors.ts +++ b/packages/node/src/integrations/linkederrors.ts @@ -1,5 +1,5 @@ +import { getCurrentHub } from '@sentry/hub'; import { Integration, SentryEvent, SentryEventHint, SentryException } from '@sentry/types'; -import { getCurrentHub } from '../hub'; import { getExceptionFromError } from '../parsers'; const DEFAULT_KEY = 'cause'; diff --git a/packages/node/src/integrations/onunhandledrejection.ts b/packages/node/src/integrations/onunhandledrejection.ts index 3bb6e0ac1073..bb7162ea05a7 100644 --- a/packages/node/src/integrations/onunhandledrejection.ts +++ b/packages/node/src/integrations/onunhandledrejection.ts @@ -1,5 +1,5 @@ +import { getCurrentHub } from '@sentry/hub'; import { Integration } from '@sentry/types'; -import { getCurrentHub } from '../hub'; /** Global Promise Rejection handler */ export class OnUnhandledRejection implements Integration { diff --git a/packages/node/src/integrations/pluggable/modules.ts b/packages/node/src/integrations/pluggable/modules.ts index d45c6ac9bbee..806310c36f3f 100644 --- a/packages/node/src/integrations/pluggable/modules.ts +++ b/packages/node/src/integrations/pluggable/modules.ts @@ -1,8 +1,7 @@ -import { Scope } from '@sentry/hub'; +import { getCurrentHub, Scope } from '@sentry/hub'; import { Integration } from '@sentry/types'; import * as lsmod from 'lsmod'; import { NodeOptions } from '../../backend'; -import { getCurrentHub } from '../../hub'; let moduleCache: { [key: string]: string }; diff --git a/packages/node/src/integrations/pluggable/rewriteframes.ts b/packages/node/src/integrations/pluggable/rewriteframes.ts new file mode 100644 index 000000000000..d3fa43336ad0 --- /dev/null +++ b/packages/node/src/integrations/pluggable/rewriteframes.ts @@ -0,0 +1,19 @@ +import { Integrations } from '@sentry/core'; +import { StackFrame } from '@sentry/types'; +import { basename, relative } from 'path'; + +type StackFrameIteratee = (frame: StackFrame) => Promise; + +/** Rewrite event frames paths */ +export class RewriteFrames extends Integrations.CoreRewriteFrames { + /** + * @inheritDoc + */ + protected iteratee: StackFrameIteratee = async (frame: StackFrame) => { + if (frame.filename && frame.filename.startsWith('/')) { + const base = this.root ? relative(this.root, frame.filename) : basename(frame.filename); + frame.filename = `app:///${base}`; + } + return frame; + }; +} diff --git a/packages/node/src/integrations/pluggable/transaction.ts b/packages/node/src/integrations/pluggable/transaction.ts index 3922277fd97b..0a262cc93992 100644 --- a/packages/node/src/integrations/pluggable/transaction.ts +++ b/packages/node/src/integrations/pluggable/transaction.ts @@ -1,7 +1,6 @@ -import { Scope } from '@sentry/hub'; +import { getCurrentHub, Scope } from '@sentry/hub'; import { Integration, SentryEvent, StackFrame } from '@sentry/types'; import { NodeOptions } from '../../backend'; -import { getCurrentHub } from '../../hub'; /** Add node transaction to the event */ export class Transaction implements Integration { diff --git a/yarn.lock b/yarn.lock index 72cb713871e8..7642a9612a1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -760,6 +760,10 @@ addressparser@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" +adm-zip@~0.4.3: + version "0.4.11" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.11.tgz#2aa54c84c4b01a9d0fb89bb11982a51f13e3d62a" + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -892,6 +896,30 @@ aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" +archiver-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174" + dependencies: + glob "^7.0.0" + graceful-fs "^4.1.0" + lazystream "^1.0.0" + lodash "^4.8.0" + normalize-path "^2.0.0" + readable-stream "^2.0.0" + +archiver@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.1.1.tgz#ff662b4a78201494a3ee544d3a33fe7496509ebc" + dependencies: + archiver-utils "^1.3.0" + async "^2.0.0" + buffer-crc32 "^0.2.1" + glob "^7.0.0" + lodash "^4.8.0" + readable-stream "^2.0.0" + tar-stream "^1.5.0" + zip-stream "^1.2.0" + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1081,7 +1109,13 @@ async@1.x, async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.1, async@^2.1.4, async@^2.3.0, async@^2.4.0, async@^2.5.0, async@~2.6.0: +async@2.0.1: + version "2.0.1" + resolved "http://registry.npmjs.org/async/-/async-2.0.1.tgz#b709cc0280a9c36f09f4536be823c838a9049e25" + dependencies: + lodash "^4.8.0" + +async@^2.0.0, async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.3.0, async@^2.4.0, async@^2.5.0, async@~2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: @@ -1671,6 +1705,13 @@ bitsyntax@~0.0.4: dependencies: buffer-more-ints "0.0.2" +bl@^1.0.0: + version "1.2.2" + resolved "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + bl@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" @@ -1724,6 +1765,18 @@ boom@2.x.x: dependencies: hoek "2.x.x" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + boxen@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" @@ -1798,9 +1851,9 @@ browser-resolve@^1.11.0, browser-resolve@^1.11.2: dependencies: resolve "1.1.7" -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -1871,10 +1924,29 @@ btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@^0.2.1: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + buffer-from@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" @@ -1894,6 +1966,13 @@ buffer@^5.0.6: base64-js "^1.0.2" ieee754 "^1.1.4" +buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + buildmail@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" @@ -2270,7 +2349,11 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.15.1, commander@^2.12.1, commander@^2.9.0: +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commander@^2.12.1, commander@^2.9.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -2317,6 +2400,15 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" +compress-commons@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.2.tgz#524a9f10903f3a813389b0225d27c48bb751890f" + dependencies: + buffer-crc32 "^0.2.1" + crc32-stream "^2.0.0" + normalize-path "^2.0.0" + readable-stream "^2.0.0" + compressible@^2.0.12: version "2.0.14" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" @@ -2534,6 +2626,19 @@ cpx@^1.5.0: shell-quote "^1.6.1" subarg "^1.0.0" +crc32-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4" + dependencies: + crc "^3.4.4" + readable-stream "^2.0.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + dependencies: + buffer "^5.1.0" + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -2603,6 +2708,12 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + crypto-browserify@^3.11.1: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2911,7 +3022,11 @@ di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" -diff@3.5.0, diff@^3.2.0, diff@^3.5.0: +diff@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" + +diff@^3.2.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3589,6 +3704,10 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" @@ -3941,13 +4060,13 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" +growl@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" growly@^1.3.0: version "1.3.0" @@ -4118,6 +4237,15 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -4145,6 +4273,10 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -5276,6 +5408,15 @@ karma-rollup-preprocessor@^6.0.0: dependencies: chokidar "^2.0.0" +karma-sauce-launcher@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-1.2.0.tgz#6f2558ddef3cf56879fa27540c8ae9f8bfd16bca" + dependencies: + q "^1.5.0" + sauce-connect-launcher "^1.2.2" + saucelabs "^1.4.0" + wd "^1.4.0" + karma-sinon@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/karma-sinon/-/karma-sinon-1.0.5.tgz#4e3443f2830fdecff624d3747163f1217daa2a9a" @@ -5405,6 +5546,12 @@ lazy-req@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + dependencies: + readable-stream "^2.0.5" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -5585,13 +5732,17 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "~3.0.0" +lodash@4.17.10, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.0: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + lodash@4.17.5: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.0: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +lodash@^4.16.6, lodash@^4.8.0: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" log-driver@1.2.7: version "1.2.7" @@ -5993,7 +6144,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -6059,21 +6210,20 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" -mocha@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" +mocha@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" dependencies: - browser-stdout "1.3.1" - commander "2.15.1" + browser-stdout "1.3.0" + commander "2.11.0" debug "3.1.0" - diff "3.5.0" + diff "3.3.1" escape-string-regexp "1.0.5" glob "7.1.2" - growl "1.10.5" + growl "1.10.3" he "1.1.1" - minimatch "3.0.4" mkdirp "0.5.1" - supports-color "5.4.0" + supports-color "4.4.0" mock-require@^2.0.2: version "2.0.2" @@ -7110,7 +7260,11 @@ punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" -q@^1.5.1: +q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + +q@^1.5.0, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -7256,7 +7410,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6: +"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -7493,6 +7647,33 @@ request@2.75.x: tough-cookie "~2.3.0" tunnel-agent "~0.4.1" +request@2.85.0: + version "2.85.0" + resolved "http://registry.npmjs.org/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + "request@>=2.9.0 <2.82.0": version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -7678,6 +7859,10 @@ rollup-plugin-npm@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-npm/-/rollup-plugin-npm-2.0.0.tgz#8a28ffdb5160bc8e1e371de39ed71faf009d655c" +rollup-plugin-shim@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-shim/-/rollup-plugin-shim-1.0.0.tgz#b00f5cb44cdae81358c5342fe82fa71a1602b56b" + rollup-plugin-typescript2@^0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.13.0.tgz#5fc838657d05af82e04554832cadf06cdb32f657" @@ -7762,6 +7947,22 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" +sauce-connect-launcher@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.2.4.tgz#8d38f85242a9fbede1b2303b559f7e20c5609a1c" + dependencies: + adm-zip "~0.4.3" + async "^2.1.2" + https-proxy-agent "^2.2.1" + lodash "^4.16.6" + rimraf "^2.5.4" + +saucelabs@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + dependencies: + https-proxy-agent "^2.2.1" + sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -7981,6 +8182,12 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + socket.io-adapter@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" @@ -8323,7 +8530,7 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" @@ -8386,11 +8593,11 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" -supports-color@5.4.0, supports-color@^5.3.0, supports-color@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" +supports-color@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: - has-flag "^3.0.0" + has-flag "^2.0.0" supports-color@^2.0.0: version "2.0.0" @@ -8408,6 +8615,12 @@ supports-color@^5.0.0: dependencies: has-flag "^3.0.0" +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" @@ -8419,6 +8632,18 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +tar-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -8560,6 +8785,10 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -8969,6 +9198,10 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +vargs@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -9028,6 +9261,18 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +wd@^1.4.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/wd/-/wd-1.10.3.tgz#395ac7eb58a98e556369f8f8e5f845d91fb152a3" + dependencies: + archiver "2.1.1" + async "2.0.1" + lodash "4.17.10" + mkdirp "^0.5.1" + q "1.4.1" + request "2.85.0" + vargs "0.1.0" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -9289,3 +9534,12 @@ yargs@~3.10.0: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + +zip-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04" + dependencies: + archiver-utils "^1.3.0" + compress-commons "^1.2.0" + lodash "^4.8.0" + readable-stream "^2.0.0" From 26204dc98921def854de72e10053ee4e2a50641e Mon Sep 17 00:00:00 2001 From: HazA Date: Wed, 10 Oct 2018 10:51:05 +0200 Subject: [PATCH 4/7] ref: Remove inheritUserData --- packages/hub/src/scope.ts | 46 +-------------------- packages/hub/test/lib/scope.test.ts | 62 ----------------------------- 2 files changed, 1 insertion(+), 107 deletions(-) diff --git a/packages/hub/src/scope.ts b/packages/hub/src/scope.ts index 2893f310dc7a..b7f31bf41d47 100644 --- a/packages/hub/src/scope.ts +++ b/packages/hub/src/scope.ts @@ -1,5 +1,5 @@ import { Breadcrumb, SentryEvent, SentryEventHint, Severity, User } from '@sentry/types'; -import { assign, clone } from '@sentry/utils/object'; +import { assign } from '@sentry/utils/object'; /** * Holds additional event information. {@link Scope.applyToEvent} will be @@ -188,50 +188,6 @@ export class Scope { this.notifyScopeListeners(); } - /** Inherit user data from provided scope, but make sure to not use references */ - public inheritUserData(from: Scope): void { - const breadcrumbs = from.getBreadcrumbs(); - if (breadcrumbs) { - // Don't clone breadcrumbs as they might be quite large in size, which can harm performance. - // Shallow clone in this case shouuuuuld be enough. - const clonedBreadcrumbs = [...breadcrumbs.map(breadcrumb => ({ ...breadcrumb }))]; - clonedBreadcrumbs.forEach(breadcrumb => { - this.addBreadcrumb(breadcrumb); - }); - } - - const user = from.getUser(); - if (user) { - this.setUser(clone(user)); - } - - const tags = from.getTags(); - if (tags) { - const clonedTags = clone(tags); - Object.keys(clonedTags).forEach(key => { - this.setTag(key, clonedTags[key]); - }); - } - - const extra = from.getExtra(); - if (extra) { - const clonedExtra = clone(extra); - Object.keys(clonedExtra).forEach(key => { - this.setExtra(key, clonedExtra[key]); - }); - } - - const fingerprint = from.getFingerprint(); - if (fingerprint) { - this.setFingerprint(clone(fingerprint)); - } - - const level = from.getLevel(); - if (level) { - this.setLevel(level); - } - } - /** * Sets the breadcrumbs in the scope * @param breadcrumbs Breadcrumb diff --git a/packages/hub/test/lib/scope.test.ts b/packages/hub/test/lib/scope.test.ts index f0632fecf709..9115ca52770a 100644 --- a/packages/hub/test/lib/scope.test.ts +++ b/packages/hub/test/lib/scope.test.ts @@ -233,66 +233,4 @@ describe('Scope', () => { const final = await localScope.applyToEvent(event, { syntheticException: new Error('what') }); expect(final).toEqual(event); }); - - test('inheritUserData', () => { - const donor = new Scope(); - const receiver = new Scope(); - - donor.addBreadcrumb({ - data: { - some: 'data', - }, - message: 'test2', - }); - donor.setExtra('b', 3); - donor.setExtra('deep', { - some: 'data', - }); - donor.setFingerprint(['efgh']); - donor.setTag('b', 'c'); - donor.setUser({ - extra: { - some: 'data', - }, - id: '3', - }); - donor.setLevel(Severity.Warning); - - receiver.inheritUserData(donor as any); - - // Should not copy eventProcessors and scopeListeners - expect(receiver.eventProcessors).not.toBe(donor.eventProcessors); - expect(receiver.scopeListeners).not.toBe(donor.scopeListeners); - - // Should copy breadcrumbs, but shallow copy only - expect(receiver.getBreadcrumbs()).not.toBe(donor.getBreadcrumbs()); - expect(receiver.getBreadcrumbs()[0]).not.toBe(donor.getBreadcrumbs()[0]); - expect(receiver.getBreadcrumbs()[0].data).toBe(donor.getBreadcrumbs()[0].data); - expect(receiver.getBreadcrumbs()[0].message).toBe(donor.getBreadcrumbs()[0].message); - - // Should deep copy extra, user, tags, fingerprint and level - - // nested object - expect(receiver.getExtra()).toEqual(donor.getExtra()); - expect(receiver.getExtra()).not.toBe(donor.getExtra()); - expect(receiver.getExtra().deep).toEqual(donor.getExtra().deep); - expect(receiver.getExtra().deep).not.toBe(donor.getExtra().deep); - - // nested object - expect(receiver.getUser()).toEqual(donor.getUser()); - expect(receiver.getUser()).not.toBe(donor.getUser()); - expect(receiver.getUser().extra).toEqual(donor.getUser().extra); - expect(receiver.getUser().extra).not.toBe(donor.getUser().extra); - - // non-nested object - expect(receiver.getTags()).toEqual(donor.getTags()); - expect(receiver.getTags()).not.toBe(donor.getTags()); - - // non-nested array - expect(receiver.getFingerprint()).toEqual(donor.getFingerprint()); - expect(receiver.getFingerprint()).not.toBe(donor.getFingerprint()); - - // string - expect(receiver.getLevel()).toEqual(donor.getLevel()); - }); }); From 08eed5316576316dcb8b171f473decebce311888 Mon Sep 17 00:00:00 2001 From: HazA Date: Wed, 10 Oct 2018 11:27:04 +0200 Subject: [PATCH 5/7] fix: tests --- .../pluggable/corerewriteframes.ts | 12 ++-- packages/hub/src/hub.ts | 6 +- packages/node/src/handlers.ts | 8 +-- packages/node/test/domain.test.ts | 60 ++++--------------- .../test/integrations/rewriteframes.test.ts | 0 5 files changed, 26 insertions(+), 60 deletions(-) rename packages/{core => node}/test/integrations/rewriteframes.test.ts (100%) diff --git a/packages/core/src/integrations/pluggable/corerewriteframes.ts b/packages/core/src/integrations/pluggable/corerewriteframes.ts index 60b7dc35a2e1..ef464f47b9c5 100644 --- a/packages/core/src/integrations/pluggable/corerewriteframes.ts +++ b/packages/core/src/integrations/pluggable/corerewriteframes.ts @@ -29,12 +29,6 @@ export abstract class CoreRewriteFrames implements Integration { * @inheritDoc */ public install(): void { - if (this.options.root) { - this.root = this.options.root; - } - if (this.options.iteratee) { - this.iteratee = this.options.iteratee; - } getCurrentHub().configureScope((scope: Scope) => { scope.addEventProcessor(async event => this.process(event)); }); @@ -42,6 +36,12 @@ export abstract class CoreRewriteFrames implements Integration { /** JSDoc */ public async process(event: SentryEvent): Promise { + if (this.options.root) { + this.root = this.options.root; + } + if (this.options.iteratee) { + this.iteratee = this.options.iteratee; + } const frames = this.getFramesFromEvent(event); if (frames) { for (const i in frames) { diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index 11f1a1f088d3..5897b9b8192c 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -317,7 +317,6 @@ export function getCurrentHub(): Hub { if (!domain.active) { return registry.hub; } - let carrier = domain.active.__SENTRY__; if (!carrier) { domain.active.__SENTRY__ = carrier = {}; @@ -346,6 +345,11 @@ export function getHubFromCarrier(carrier: any): Hub { } } +/** + * This will set a {@link Hub} to the passed object on __SENTRY__.hub. + * @param carrier object + * @param Hub hub + */ export function setHubToCarrier(carrier: any, hub: Hub): Hub { if (carrier && !carrier.__SENTRY__) { carrier.__SENTRY__ = {}; diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index dd62a6cc3f16..1132ddfa6324 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -217,10 +217,10 @@ export function requestHandler(options?: { local.on('error', next); local.run(() => { const hub = setHubToCarrier(req, getCurrentHub()); - hub.configureScope((scope: Scope) => { - scope.addEventProcessor(async (event: SentryEvent) => parseRequest(event, req, options)); - }); - return next(); + hub.configureScope(scope => + scope.addEventProcessor(async (event: SentryEvent) => parseRequest(event, req, options)), + ); + next(); }); }; } diff --git a/packages/node/test/domain.test.ts b/packages/node/test/domain.test.ts index 005e2d2398ba..80ce410df2f2 100644 --- a/packages/node/test/domain.test.ts +++ b/packages/node/test/domain.test.ts @@ -1,39 +1,7 @@ -import { Layer } from '@sentry/hub'; +import { getCurrentHub, Hub } from '@sentry/hub'; import * as domain from 'domain'; -const mockgetCurrentHub = jest.fn(); - -class MockHub { - public constructor(public stack: Layer[] = []) { - MockHub.instance = this; - } - public static instance: MockHub; - - public getStack(): Layer[] { - return this.stack; - } - - public getStackTop(): Layer { - return this.stack[this.stack.length - 1]; - } -} - -const mockHub = MockHub; -jest.mock('@sentry/hub', () => ({ - Hub: mockHub, - getCurrentHub: mockgetCurrentHub, -})); - -import { getCurrentHub } from '../src'; - describe('domains', () => { - let globalHub: MockHub; - - beforeEach(() => { - globalHub = new MockHub(); - mockgetCurrentHub.mockReturnValue(globalHub); - }); - afterEach(() => { if (domain.active) { domain.active.exit(); @@ -44,26 +12,20 @@ describe('domains', () => { test('without domain', () => { expect(domain.active).toBeFalsy(); const hub = getCurrentHub(); - expect(hub).toBe(globalHub); + expect(hub).toEqual(new Hub()); }); - test('domain hub inheritance', () => { - globalHub.stack = []; - const d = domain.create(); - d.run(() => { - const hub = getCurrentHub(); - expect(globalHub).not.toBe(hub); - expect(globalHub.getStack()).toEqual(hub.getStack()); + test('domain hub scope inheritance', () => { + const globalHub = getCurrentHub(); + globalHub.configureScope(scope => { + scope.setExtra('a', 'b'); + scope.setTag('a', 'b'); + scope.addBreadcrumb({ message: 'a' }); }); - }); - - test('domain hub isolation', () => { const d = domain.create(); d.run(() => { const hub = getCurrentHub(); - hub.getStack().push({ client: 'whatever' }); - expect(hub.getStack()).toEqual([{ client: 'whatever' }]); - expect(globalHub.getStack()).toEqual([]); + expect(globalHub).toEqual(hub); }); }); @@ -84,7 +46,7 @@ describe('domains', () => { .push({ client: 'process' }); setTimeout(() => { - expect(getCurrentHub().getStack()).toEqual([{ client: 'process' }]); + expect(getCurrentHub().getStack()[1]).toEqual({ client: 'process' }); }, 50); }); @@ -94,7 +56,7 @@ describe('domains', () => { .push({ client: 'local' }); setTimeout(() => { - expect(getCurrentHub().getStack()).toEqual([{ client: 'local' }]); + expect(getCurrentHub().getStack()[1]).toEqual({ client: 'local' }); done(); }, 100); }); diff --git a/packages/core/test/integrations/rewriteframes.test.ts b/packages/node/test/integrations/rewriteframes.test.ts similarity index 100% rename from packages/core/test/integrations/rewriteframes.test.ts rename to packages/node/test/integrations/rewriteframes.test.ts From 2c7167429bb96457f58a06077268325de105fed9 Mon Sep 17 00:00:00 2001 From: HazA Date: Wed, 10 Oct 2018 12:10:50 +0200 Subject: [PATCH 6/7] fix: Remove shim, Readding builtins --- packages/browser/package.json | 2 +- packages/browser/rollup.config.js | 9 +- .../integrations/pluggable/rewriteframes.ts | 12 - packages/core/src/integrations/index.ts | 2 +- ...{corerewriteframes.ts => rewriteframes.ts} | 28 ++- .../lib}/integrations/rewriteframes.test.ts | 2 +- packages/hub/src/hub.ts | 25 +- packages/node/src/integrations/index.ts | 1 + .../integrations/pluggable/rewriteframes.ts | 19 -- yarn.lock | 235 +++++++++++++++++- 10 files changed, 262 insertions(+), 73 deletions(-) delete mode 100644 packages/browser/src/integrations/pluggable/rewriteframes.ts rename packages/core/src/integrations/pluggable/{corerewriteframes.ts => rewriteframes.ts} (67%) rename packages/{node/test => core/test/lib}/integrations/rewriteframes.test.ts (97%) delete mode 100644 packages/node/src/integrations/pluggable/rewriteframes.ts diff --git a/packages/browser/package.json b/packages/browser/package.json index 353fc0dc2d7f..a7bb60ad60c0 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -40,9 +40,9 @@ "rollup": "^0.58.2", "rollup-plugin-commonjs": "^9.1.3", "rollup-plugin-license": "^0.6.0", + "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-resolve": "^3.3.0", "rollup-plugin-npm": "^2.0.0", - "rollup-plugin-shim": "^1.0.0", "rollup-plugin-typescript2": "^0.13.0", "rollup-plugin-uglify": "^3.0.0", "sinon": "^5.0.3", diff --git a/packages/browser/rollup.config.js b/packages/browser/rollup.config.js index 3ca75e269da0..6ab687788c31 100644 --- a/packages/browser/rollup.config.js +++ b/packages/browser/rollup.config.js @@ -3,7 +3,7 @@ import uglify from 'rollup-plugin-uglify'; import resolve from 'rollup-plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; import license from 'rollup-plugin-license'; -import shim from 'rollup-plugin-shim'; +import builtins from 'rollup-plugin-node-builtins'; const commitHash = require('child_process') .execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }) @@ -18,9 +18,7 @@ const bundleConfig = { }, context: 'window', plugins: [ - shim({ - domain: `export var active = false;`, - }), + builtins(), typescript({ tsconfig: 'tsconfig.build.json', tsconfigOverride: { compilerOptions: { declaration: false } }, @@ -49,9 +47,6 @@ export default [ }, external: ['@sentry/core', '@sentry/hub', '@sentry/minimal'], plugins: [ - shim({ - domain: `export var active = false;`, - }), typescript({ tsconfig: 'tsconfig.build.json', }), diff --git a/packages/browser/src/integrations/pluggable/rewriteframes.ts b/packages/browser/src/integrations/pluggable/rewriteframes.ts deleted file mode 100644 index 45f8c9adab46..000000000000 --- a/packages/browser/src/integrations/pluggable/rewriteframes.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Integrations } from '@sentry/core'; -import { StackFrame } from '@sentry/types'; - -type StackFrameIteratee = (frame: StackFrame) => Promise; - -/** Rewrite event frames paths */ -export class RewriteFrames extends Integrations.CoreRewriteFrames { - /** - * @inheritDoc - */ - protected iteratee: StackFrameIteratee = async (frame: StackFrame) => frame; -} diff --git a/packages/core/src/integrations/index.ts b/packages/core/src/integrations/index.ts index ab143fabd7e4..52a16507d399 100644 --- a/packages/core/src/integrations/index.ts +++ b/packages/core/src/integrations/index.ts @@ -4,4 +4,4 @@ export { SDKInformation } from './sdkinformation'; export { InboundFilters } from './inboundfilters'; export { Debug } from './pluggable/debug'; -export { CoreRewriteFrames } from './pluggable/corerewriteframes'; +export { RewriteFrames } from './pluggable/rewriteframes'; diff --git a/packages/core/src/integrations/pluggable/corerewriteframes.ts b/packages/core/src/integrations/pluggable/rewriteframes.ts similarity index 67% rename from packages/core/src/integrations/pluggable/corerewriteframes.ts rename to packages/core/src/integrations/pluggable/rewriteframes.ts index ef464f47b9c5..2dcac05bd076 100644 --- a/packages/core/src/integrations/pluggable/corerewriteframes.ts +++ b/packages/core/src/integrations/pluggable/rewriteframes.ts @@ -1,10 +1,11 @@ import { getCurrentHub, Scope } from '@sentry/hub'; import { Integration, SentryEvent, StackFrame } from '@sentry/types'; +import { basename, relative } from 'path'; type StackFrameIteratee = (frame: StackFrame) => Promise; /** Rewrite event frames paths */ -export abstract class CoreRewriteFrames implements Integration { +export class RewriteFrames implements Integration { /** * @inheritDoc */ @@ -13,17 +14,30 @@ export abstract class CoreRewriteFrames implements Integration { /** * @inheritDoc */ - protected root?: string; + private readonly root?: string; /** * @inheritDoc */ - protected abstract iteratee: StackFrameIteratee; + private readonly iteratee: StackFrameIteratee = async (frame: StackFrame) => { + if (frame.filename && frame.filename.startsWith('/')) { + const base = this.root ? relative(this.root, frame.filename) : basename(frame.filename); + frame.filename = `app:///${base}`; + } + return frame; + }; /** * @inheritDoc */ - public constructor(protected readonly options: { root?: string; iteratee?: StackFrameIteratee } = {}) {} + public constructor(options: { root?: string; iteratee?: StackFrameIteratee } = {}) { + if (options.root) { + this.root = options.root; + } + if (options.iteratee) { + this.iteratee = options.iteratee; + } + } /** * @inheritDoc @@ -36,12 +50,6 @@ export abstract class CoreRewriteFrames implements Integration { /** JSDoc */ public async process(event: SentryEvent): Promise { - if (this.options.root) { - this.root = this.options.root; - } - if (this.options.iteratee) { - this.iteratee = this.options.iteratee; - } const frames = this.getFramesFromEvent(event); if (frames) { for (const i in frames) { diff --git a/packages/node/test/integrations/rewriteframes.test.ts b/packages/core/test/lib/integrations/rewriteframes.test.ts similarity index 97% rename from packages/node/test/integrations/rewriteframes.test.ts rename to packages/core/test/lib/integrations/rewriteframes.test.ts index d772a07f3a85..8b928f52b3af 100644 --- a/packages/node/test/integrations/rewriteframes.test.ts +++ b/packages/core/test/lib/integrations/rewriteframes.test.ts @@ -1,5 +1,5 @@ import { SentryEvent, StackFrame } from '@sentry/types'; -import { RewriteFrames } from '../../src/integrations/pluggable/rewriteframes'; +import { RewriteFrames } from '../../../src/integrations/pluggable/rewriteframes'; let rewriteFrames: RewriteFrames; let messageEvent: SentryEvent; diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index 5897b9b8192c..046f262b35a6 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -287,6 +287,10 @@ export function makeMain(hub?: Hub): Hub | undefined { return oldHub; } +interface SentryDomain extends NodeJS.Domain { + __SENTRY__?: Carrier; +} + /** * Returns the default hub instance. * @@ -301,25 +305,20 @@ export function getCurrentHub(): Hub { registry.hub = new Hub(); } - let domain: { - active?: { - __SENTRY__?: Carrier; - }; - }; - + let domain = null; try { - // tslint:disable-next-line:no-var-requires - domain = require('domain'); - } catch { - domain = {}; + domain = process.domain as SentryDomain; + } catch (_Oo) { + // We do not have process } - if (!domain.active) { + if (!domain) { return registry.hub; } - let carrier = domain.active.__SENTRY__; + + let carrier = domain.__SENTRY__; if (!carrier) { - domain.active.__SENTRY__ = carrier = {}; + domain.__SENTRY__ = carrier = {}; } if (!carrier.hub) { diff --git a/packages/node/src/integrations/index.ts b/packages/node/src/integrations/index.ts index 7f3cc0dde180..d2b3e4f05323 100644 --- a/packages/node/src/integrations/index.ts +++ b/packages/node/src/integrations/index.ts @@ -5,3 +5,4 @@ export { OnUnhandledRejection } from './onunhandledrejection'; export { LinkedErrors } from './linkederrors'; export { Modules } from './pluggable/modules'; +export { Transaction } from './pluggable/transaction'; diff --git a/packages/node/src/integrations/pluggable/rewriteframes.ts b/packages/node/src/integrations/pluggable/rewriteframes.ts deleted file mode 100644 index d3fa43336ad0..000000000000 --- a/packages/node/src/integrations/pluggable/rewriteframes.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Integrations } from '@sentry/core'; -import { StackFrame } from '@sentry/types'; -import { basename, relative } from 'path'; - -type StackFrameIteratee = (frame: StackFrame) => Promise; - -/** Rewrite event frames paths */ -export class RewriteFrames extends Integrations.CoreRewriteFrames { - /** - * @inheritDoc - */ - protected iteratee: StackFrameIteratee = async (frame: StackFrame) => { - if (frame.filename && frame.filename.startsWith('/')) { - const base = this.root ? relative(this.root, frame.filename) : basename(frame.filename); - frame.filename = `app:///${base}`; - } - return frame; - }; -} diff --git a/yarn.lock b/yarn.lock index 7642a9612a1d..d2b3cf3aa6fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -731,6 +731,12 @@ abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" +abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: + version "0.12.4" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" + dependencies: + xtend "~3.0.0" + accepts@~1.3.4, accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" @@ -1712,6 +1718,12 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +bl@~0.8.1: + version "0.8.2" + resolved "http://registry.npmjs.org/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" + dependencies: + readable-stream "~1.0.26" + bl@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" @@ -1882,6 +1894,14 @@ browserify-des@^1.0.0: des.js "^1.0.0" inherits "^2.0.1" +browserify-fs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" + dependencies: + level-filesystem "^1.0.1" + level-js "^2.1.3" + levelup "^0.18.2" + browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" @@ -1943,6 +1963,10 @@ buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" +buffer-es6@^4.9.2: + version "4.9.3" + resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -2273,6 +2297,10 @@ clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" +clone@~0.1.9: + version "0.1.19" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" + cmd-shim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" @@ -2437,7 +2465,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@^1.4.4, concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -2714,7 +2742,7 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" -crypto-browserify@^3.11.1: +crypto-browserify@^3.11.0, crypto-browserify@^3.11.1: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" dependencies: @@ -2929,6 +2957,12 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +deferred-leveldown@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" + dependencies: + abstract-leveldown "~0.12.1" + define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -3192,6 +3226,12 @@ err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" +errno@^0.1.1, errno@~0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -3645,7 +3685,7 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" -foreach@^2.0.5: +foreach@^2.0.5, foreach@~2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" @@ -3790,6 +3830,12 @@ function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +fwd-stream@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" + dependencies: + readable-stream "~1.0.26-4" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -4396,6 +4442,10 @@ iconv-lite@^0.4.24, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" +idb-wrapper@^1.5.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" + ieee754@^1.1.4: version "1.1.12" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" @@ -4439,7 +4489,7 @@ indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" -indexof@0.0.1: +indexof@0.0.1, indexof@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -4723,6 +4773,10 @@ is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-object@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" + is-odd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" @@ -4811,6 +4865,10 @@ is@^3.0.1, is@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/is/-/is-3.2.1.tgz#d0ac2ad55eb7b0bec926a5266f6c662aaa83dca5" +is@~0.2.6: + version "0.2.7" + resolved "http://registry.npmjs.org/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -4827,6 +4885,10 @@ isbinaryfile@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" +isbuffer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -5590,6 +5652,82 @@ lerna@3.4.0: import-local "^1.0.0" npmlog "^4.1.2" +level-blobs@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" + dependencies: + level-peek "1.0.6" + once "^1.3.0" + readable-stream "^1.0.26-4" + +level-filesystem@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" + dependencies: + concat-stream "^1.4.4" + errno "^0.1.1" + fwd-stream "^1.0.4" + level-blobs "^0.1.7" + level-peek "^1.0.6" + level-sublevel "^5.2.0" + octal "^1.0.0" + once "^1.3.0" + xtend "^2.2.0" + +level-fix-range@2.0: + version "2.0.0" + resolved "http://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" + dependencies: + clone "~0.1.9" + +level-fix-range@~1.0.2: + version "1.0.2" + resolved "http://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" + +"level-hooks@>=4.4.0 <5": + version "4.5.0" + resolved "http://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" + dependencies: + string-range "~1.2" + +level-js@^2.1.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" + dependencies: + abstract-leveldown "~0.12.0" + idb-wrapper "^1.5.0" + isbuffer "~0.0.0" + ltgt "^2.1.2" + typedarray-to-buffer "~1.0.0" + xtend "~2.1.2" + +level-peek@1.0.6, level-peek@^1.0.6: + version "1.0.6" + resolved "http://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" + dependencies: + level-fix-range "~1.0.2" + +level-sublevel@^5.2.0: + version "5.2.3" + resolved "http://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" + dependencies: + level-fix-range "2.0" + level-hooks ">=4.4.0 <5" + string-range "~1.2.1" + xtend "~2.0.4" + +levelup@^0.18.2: + version "0.18.6" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" + dependencies: + bl "~0.8.1" + deferred-leveldown "~0.2.0" + errno "~0.1.1" + prr "~0.0.0" + readable-stream "~1.0.26" + semver "~2.3.1" + xtend "~3.0.0" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -5829,6 +5967,10 @@ lsmod@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b" +ltgt@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + macos-release@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb" @@ -6609,6 +6751,18 @@ object-keys@^1.0.8: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" +object-keys@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" + dependencies: + foreach "~2.0.1" + indexof "~0.0.1" + is "~0.2.6" + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -6635,6 +6789,10 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +octal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -7136,6 +7294,10 @@ private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" +process-es6@^0.11.2: + version "0.11.6" + resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -7202,6 +7364,14 @@ proxy-from-env@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + ps-tree@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" @@ -7422,7 +7592,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.1.x, "readable-stream@1.x >=1.1.9", readable-stream@^1.1.7: +readable-stream@1.1.x, "readable-stream@1.x >=1.1.9", readable-stream@^1.0.26-4, readable-stream@^1.1.7: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: @@ -7431,6 +7601,15 @@ readable-stream@1.1.x, "readable-stream@1.x >=1.1.9", readable-stream@^1.1.7: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@~1.0.26, readable-stream@~1.0.26-4: + version "1.0.34" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@~2.0.0, readable-stream@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" @@ -7847,6 +8026,15 @@ rollup-plugin-license@^0.6.0: mkdirp "0.5.1" moment "2.21.0" +rollup-plugin-node-builtins@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" + dependencies: + browserify-fs "^1.0.0" + buffer-es6 "^4.9.2" + crypto-browserify "^3.11.0" + process-es6 "^0.11.2" + rollup-plugin-node-resolve@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz#c26d110a36812cbefa7ce117cadcd3439aa1c713" @@ -7859,10 +8047,6 @@ rollup-plugin-npm@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-npm/-/rollup-plugin-npm-2.0.0.tgz#8a28ffdb5160bc8e1e371de39ed71faf009d655c" -rollup-plugin-shim@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-shim/-/rollup-plugin-shim-1.0.0.tgz#b00f5cb44cdae81358c5342fe82fa71a1602b56b" - rollup-plugin-typescript2@^0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.13.0.tgz#5fc838657d05af82e04554832cadf06cdb32f657" @@ -7981,6 +8165,10 @@ semver@^5.0.1, semver@^5.0.3, semver@^5.1.0: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" +semver@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -8491,6 +8679,10 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" +string-range@~1.2, string-range@~1.2.1: + version "1.2.2" + resolved "http://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" + string-similarity@1.1.0: version "1.1.0" resolved "http://registry.npmjs.org/string-similarity/-/string-similarity-1.1.0.tgz#3c66498858a465ec7c40c7d81739bbd995904914" @@ -8942,6 +9134,10 @@ type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" +typedarray-to-buffer@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -9433,10 +9629,31 @@ xregexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" +xtend@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" + xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +xtend@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" + dependencies: + is-object "~0.1.2" + object-keys "~0.2.0" + +xtend@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + dependencies: + object-keys "~0.4.0" + +xtend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" From 81605aedf214b350ded35c28dee665641590d44d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Og=C3=B3rek?= Date: Wed, 10 Oct 2018 12:34:09 +0200 Subject: [PATCH 7/7] fix: Minor changes to node handlers --- CHANGELOG.md | 7 +++++-- packages/hub/src/hub.ts | 14 +------------- packages/hub/src/index.ts | 2 +- packages/node/src/handlers.ts | 13 +++++++------ 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6df18b760a6f..4cc8b9b3da87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,11 +24,14 @@ - [core] ref: Remove Repo interface and repos attribute from Event - [core] ref: Rewrite RequestBuffer using Array instead of Set for IE10/11 - [hub] fix: Scope level overwrites level on the event +- [hub] fix: Correctly store and retrieve Hub from domain when one is active +- [hub] fix: Copy over user data when cloning scope - [node] feat: Allow requestHandler to be configured -- [node] feat: Make node transactions a pluggable integration with tests +- [node] feat: Make node transactions a pluggable integration with tests - [node] feat: Transactions handling for RequestHandler in Express/Hapi - [node] fix: Dont wrap native modules more than once to prevent leaks -- [node] fix: Update requestHandler to correctly pass scope +- [node] fix: Use getCurrentHub to retrieve correct hub in requestHandler + - [utils] ref: implemented includes, assign and isNaN polyfills ## 4.0.6 diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index 046f262b35a6..4d88ed352554 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -287,6 +287,7 @@ export function makeMain(hub?: Hub): Hub | undefined { return oldHub; } +/** Domain interface with attached Hub */ interface SentryDomain extends NodeJS.Domain { __SENTRY__?: Carrier; } @@ -343,16 +344,3 @@ export function getHubFromCarrier(carrier: any): Hub { return carrier.__SENTRY__.hub; } } - -/** - * This will set a {@link Hub} to the passed object on __SENTRY__.hub. - * @param carrier object - * @param Hub hub - */ -export function setHubToCarrier(carrier: any, hub: Hub): Hub { - if (carrier && !carrier.__SENTRY__) { - carrier.__SENTRY__ = {}; - } - carrier.__SENTRY__.hub = hub; - return hub; -} diff --git a/packages/hub/src/index.ts b/packages/hub/src/index.ts index c7c85afdaba2..08bf34f1d7a2 100644 --- a/packages/hub/src/index.ts +++ b/packages/hub/src/index.ts @@ -1,3 +1,3 @@ export { Carrier, Layer } from './interfaces'; export { Scope } from './scope'; -export { getCurrentHub, getHubFromCarrier, Hub, setHubToCarrier } from './hub'; +export { getCurrentHub, getHubFromCarrier, Hub } from './hub'; diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index 1132ddfa6324..ae46d5327d01 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -1,5 +1,5 @@ import { logger } from '@sentry/core'; -import { getCurrentHub, getHubFromCarrier, Scope, setHubToCarrier } from '@sentry/hub'; +import { getCurrentHub, Scope } from '@sentry/hub'; import { SentryEvent, Severity } from '@sentry/types'; import { forget } from '@sentry/utils/async'; import { serialize } from '@sentry/utils/object'; @@ -210,14 +210,15 @@ export function requestHandler(options?: { }): (req: http.IncomingMessage, res: http.ServerResponse, next: (error?: any) => void) => void { return function sentryRequestMiddleware( req: http.IncomingMessage, - _res: http.ServerResponse, + res: http.ServerResponse, next: (error?: any) => void, ): void { const local = domain.create(); + local.add(req); + local.add(res); local.on('error', next); local.run(() => { - const hub = setHubToCarrier(req, getCurrentHub()); - hub.configureScope(scope => + getCurrentHub().configureScope(scope => scope.addEventProcessor(async (event: SentryEvent) => parseRequest(event, req, options)), ); next(); @@ -250,7 +251,7 @@ export function errorHandler(): ( ) => void { return function sentryErrorMiddleware( error: MiddlewareError, - req: http.IncomingMessage, + _req: http.IncomingMessage, _res: http.ServerResponse, next: (error: MiddlewareError) => void, ): void { @@ -259,7 +260,7 @@ export function errorHandler(): ( next(error); return; } - getHubFromCarrier(req).captureException(error, { originalException: error }); + getCurrentHub().captureException(error, { originalException: error }); next(error); }; }