From 1407448c4e97cd186a53323026a8f9f950e720aa Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Tue, 4 Apr 2023 15:08:52 +0200 Subject: [PATCH 1/9] feat(browser): Add `captureUserFeedback` --- packages/browser/src/client.ts | 14 ++++ packages/browser/src/exports.ts | 13 +++- packages/browser/src/sdk.ts | 11 +++ packages/browser/src/userfeedback.ts | 41 +++++++++++ .../browser/test/unit/userfeedback.test.ts | 68 +++++++++++++++++++ 5 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 packages/browser/src/userfeedback.ts create mode 100644 packages/browser/test/unit/userfeedback.test.ts diff --git a/packages/browser/src/client.ts b/packages/browser/src/client.ts index 1d0bd091cf19..696bb46580e1 100644 --- a/packages/browser/src/client.ts +++ b/packages/browser/src/client.ts @@ -8,6 +8,7 @@ import type { Options, Severity, SeverityLevel, + UserFeedback, } from '@sentry/types'; import { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils'; @@ -16,6 +17,7 @@ import { WINDOW } from './helpers'; import type { Breadcrumbs } from './integrations'; import { BREADCRUMB_INTEGRATION_ID } from './integrations/breadcrumbs'; import type { BrowserTransportOptions } from './transports/types'; +import { createUserFeedbackEnvelope } from './userfeedback'; /** * Configuration options for the Sentry Browser SDK. @@ -106,6 +108,18 @@ export class BrowserClient extends BaseClient { super.sendEvent(event, hint); } + /** + * Sends user feedback to Sentry. + */ + public captureUserFeedback(feedback: UserFeedback): void { + const envelope = createUserFeedbackEnvelope(feedback, { + metadata: this.getSdkMetadata(), + dsn: this.getDsn(), + tunnel: this.getOptions().tunnel, + }); + void this._sendEnvelope(envelope); + } + /** * @inheritDoc */ diff --git a/packages/browser/src/exports.ts b/packages/browser/src/exports.ts index 321ebd2c6c51..19795d4174eb 100644 --- a/packages/browser/src/exports.ts +++ b/packages/browser/src/exports.ts @@ -59,5 +59,16 @@ export { winjsStackLineParser, } from './stack-parsers'; export { eventFromException, eventFromMessage } from './eventbuilder'; -export { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap } from './sdk'; +export { + defaultIntegrations, + forceLoad, + init, + lastEventId, + onLoad, + showReportDialog, + flush, + close, + wrap, + captureUserFeedback, +} from './sdk'; export { GlobalHandlers, TryCatch, Breadcrumbs, LinkedErrors, HttpContext, Dedupe } from './integrations'; diff --git a/packages/browser/src/sdk.ts b/packages/browser/src/sdk.ts index c7f2ed74194a..d58888260e3e 100644 --- a/packages/browser/src/sdk.ts +++ b/packages/browser/src/sdk.ts @@ -6,6 +6,7 @@ import { initAndBind, Integrations as CoreIntegrations, } from '@sentry/core'; +import type { UserFeedback } from '@sentry/types'; import { addInstrumentationHandler, logger, @@ -289,3 +290,13 @@ function startSessionTracking(): void { } }); } + +/** + * Captures user feedback and sends it to Sentry. + */ +export function captureUserFeedback(feedback: UserFeedback): void { + const client = getCurrentHub().getClient(); + if (client) { + client.captureUserFeedback(feedback); + } +} diff --git a/packages/browser/src/userfeedback.ts b/packages/browser/src/userfeedback.ts new file mode 100644 index 000000000000..c2c8b0a116fc --- /dev/null +++ b/packages/browser/src/userfeedback.ts @@ -0,0 +1,41 @@ +import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types'; +import { createEnvelope, dsnToString } from '@sentry/utils'; + +/** + * Creates an envelope from a user feedback. + */ +export function createUserFeedbackEnvelope( + feedback: UserFeedback, + { + metadata, + tunnel, + dsn, + }: { + metadata: SdkMetadata | undefined; + tunnel: string | undefined; + dsn: DsnComponents | undefined; + }, +): EventEnvelope { + const headers: EventEnvelope[0] = { + event_id: feedback.event_id, + sent_at: new Date().toISOString(), + ...(metadata && + metadata.sdk && { + sdk: { + name: metadata.sdk.name, + version: metadata.sdk.version, + }, + }), + ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }), + }; + const item = createUserFeedbackEnvelopeItem(feedback); + + return createEnvelope(headers, [item]); +} + +function createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem { + const feedbackHeaders: UserFeedbackItem[0] = { + type: 'user_report', + }; + return [feedbackHeaders, feedback]; +} diff --git a/packages/browser/test/unit/userfeedback.test.ts b/packages/browser/test/unit/userfeedback.test.ts new file mode 100644 index 000000000000..cb498cac7893 --- /dev/null +++ b/packages/browser/test/unit/userfeedback.test.ts @@ -0,0 +1,68 @@ +import { createUserFeedbackEnvelope } from '../../src/userfeedback'; + +describe('userFeedback', () => { + test('creates user feedback envelope header', () => { + const envelope = createUserFeedbackEnvelope( + { + comments: 'Test Comments', + email: 'test@email.com', + name: 'Test User', + event_id: 'testEvent123', + }, + { + metadata: { + sdk: { + name: 'testSdkName', + version: 'testSdkVersion', + }, + }, + tunnel: 'testTunnel', + dsn: { + host: 'testHost', + projectId: 'testProjectId', + protocol: 'http', + }, + }, + ); + + expect(envelope[0]).toEqual({ + dsn: 'http://undefined@testHost/undefinedtestProjectId', + event_id: 'testEvent123', + sdk: { + name: 'testSdkName', + version: 'testSdkVersion', + }, + sent_at: expect.any(String), + }); + }); + + test('creates user feedback envelope item', () => { + const envelope = createUserFeedbackEnvelope( + { + comments: 'Test Comments', + email: 'test@email.com', + name: 'Test User', + event_id: 'testEvent123', + }, + { + metadata: undefined, + tunnel: undefined, + dsn: undefined, + }, + ); + + expect(envelope[1]).toEqual([ + [ + { + type: 'user_report', + }, + { + comments: 'Test Comments', + email: 'test@email.com', + name: 'Test User', + event_id: 'testEvent123', + }, + ], + ]); + }); +}); From 314b615478b79371f9e5d7e05b5e1130dd40d911 Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 5 Apr 2023 11:07:14 +0200 Subject: [PATCH 2/9] Add integration test --- .../public-api/captureUserFeedback/init.js | 7 +++++++ .../simple_feedback/subject.js | 6 ++++++ .../simple_feedback/test.ts | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 packages/browser-integration-tests/suites/public-api/captureUserFeedback/init.js create mode 100644 packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/subject.js create mode 100644 packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/test.ts diff --git a/packages/browser-integration-tests/suites/public-api/captureUserFeedback/init.js b/packages/browser-integration-tests/suites/public-api/captureUserFeedback/init.js new file mode 100644 index 000000000000..d8c94f36fdd0 --- /dev/null +++ b/packages/browser-integration-tests/suites/public-api/captureUserFeedback/init.js @@ -0,0 +1,7 @@ +import * as Sentry from '@sentry/browser'; + +window.Sentry = Sentry; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', +}); diff --git a/packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/subject.js b/packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/subject.js new file mode 100644 index 000000000000..035199ab42f1 --- /dev/null +++ b/packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/subject.js @@ -0,0 +1,6 @@ +Sentry.captureUserFeedback({ + eventId: 'test_event_id', + email: 'test_email', + comments: 'test_comments', + name: 'test_name', +}); diff --git a/packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/test.ts b/packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/test.ts new file mode 100644 index 000000000000..158fb60d3d93 --- /dev/null +++ b/packages/browser-integration-tests/suites/public-api/captureUserFeedback/simple_feedback/test.ts @@ -0,0 +1,18 @@ +import { expect } from '@playwright/test'; +import type { UserFeedback } from '@sentry/types'; + +import { sentryTest } from '../../../../utils/fixtures'; +import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers'; + +sentryTest('should capture simple user feedback', async ({ getLocalTestPath, page }) => { + const url = await getLocalTestPath({ testDir: __dirname }); + + const eventData = await getFirstSentryEnvelopeRequest(page, url); + + expect(eventData).toMatchObject({ + eventId: 'test_event_id', + email: 'test_email', + comments: 'test_comments', + name: 'test_name', + }); +}); From e29594492e929bc8ccfaf8d936322d46c65a17ce Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 5 Apr 2023 11:17:28 +0200 Subject: [PATCH 3/9] Make user feedback tree shakable --- packages/browser/src/client.ts | 14 -------------- packages/browser/src/exports.ts | 14 ++------------ packages/browser/src/sdk.ts | 11 ----------- packages/browser/src/userfeedback.ts | 27 ++++++++++++++++++++++++++- 4 files changed, 28 insertions(+), 38 deletions(-) diff --git a/packages/browser/src/client.ts b/packages/browser/src/client.ts index 696bb46580e1..1d0bd091cf19 100644 --- a/packages/browser/src/client.ts +++ b/packages/browser/src/client.ts @@ -8,7 +8,6 @@ import type { Options, Severity, SeverityLevel, - UserFeedback, } from '@sentry/types'; import { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils'; @@ -17,7 +16,6 @@ import { WINDOW } from './helpers'; import type { Breadcrumbs } from './integrations'; import { BREADCRUMB_INTEGRATION_ID } from './integrations/breadcrumbs'; import type { BrowserTransportOptions } from './transports/types'; -import { createUserFeedbackEnvelope } from './userfeedback'; /** * Configuration options for the Sentry Browser SDK. @@ -108,18 +106,6 @@ export class BrowserClient extends BaseClient { super.sendEvent(event, hint); } - /** - * Sends user feedback to Sentry. - */ - public captureUserFeedback(feedback: UserFeedback): void { - const envelope = createUserFeedbackEnvelope(feedback, { - metadata: this.getSdkMetadata(), - dsn: this.getDsn(), - tunnel: this.getOptions().tunnel, - }); - void this._sendEnvelope(envelope); - } - /** * @inheritDoc */ diff --git a/packages/browser/src/exports.ts b/packages/browser/src/exports.ts index 19795d4174eb..5f8226905e5c 100644 --- a/packages/browser/src/exports.ts +++ b/packages/browser/src/exports.ts @@ -59,16 +59,6 @@ export { winjsStackLineParser, } from './stack-parsers'; export { eventFromException, eventFromMessage } from './eventbuilder'; -export { - defaultIntegrations, - forceLoad, - init, - lastEventId, - onLoad, - showReportDialog, - flush, - close, - wrap, - captureUserFeedback, -} from './sdk'; +export { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap } from './sdk'; +export { captureUserFeedback } from './userfeedback'; export { GlobalHandlers, TryCatch, Breadcrumbs, LinkedErrors, HttpContext, Dedupe } from './integrations'; diff --git a/packages/browser/src/sdk.ts b/packages/browser/src/sdk.ts index d58888260e3e..c7f2ed74194a 100644 --- a/packages/browser/src/sdk.ts +++ b/packages/browser/src/sdk.ts @@ -6,7 +6,6 @@ import { initAndBind, Integrations as CoreIntegrations, } from '@sentry/core'; -import type { UserFeedback } from '@sentry/types'; import { addInstrumentationHandler, logger, @@ -290,13 +289,3 @@ function startSessionTracking(): void { } }); } - -/** - * Captures user feedback and sends it to Sentry. - */ -export function captureUserFeedback(feedback: UserFeedback): void { - const client = getCurrentHub().getClient(); - if (client) { - client.captureUserFeedback(feedback); - } -} diff --git a/packages/browser/src/userfeedback.ts b/packages/browser/src/userfeedback.ts index c2c8b0a116fc..c3ccc237ef62 100644 --- a/packages/browser/src/userfeedback.ts +++ b/packages/browser/src/userfeedback.ts @@ -1,5 +1,30 @@ +import { getCurrentHub } from '@sentry/core'; import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types'; -import { createEnvelope, dsnToString } from '@sentry/utils'; +import { createEnvelope, dsnToString, logger } from '@sentry/utils'; + +/** + * Sends user feedback to Sentry. + */ +export function captureUserFeedback(feedback: UserFeedback): void { + const hub = getCurrentHub(); + const client = hub.getClient(); + const transport = client && client.getTransport(); + + if (!transport) { + if (__DEBUG_BUILD__) { + logger.log('[UserFeedback] getTransport did not return a Transport, user feedback will not be sent.'); + } + return; + } + + const envelope = createUserFeedbackEnvelope(feedback, { + metadata: client.getSdkMetadata && client.getSdkMetadata(), + dsn: client.getDsn(), + tunnel: client.getOptions().tunnel, + }); + + void transport.send(envelope); +} /** * Creates an envelope from a user feedback. From 6b8b10cf7f96de97bd2c5b29487d2dfd132f100f Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 5 Apr 2023 11:23:32 +0200 Subject: [PATCH 4/9] Fix possibly undefined client --- packages/browser/src/userfeedback.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/browser/src/userfeedback.ts b/packages/browser/src/userfeedback.ts index c3ccc237ef62..abbdaa86cb3a 100644 --- a/packages/browser/src/userfeedback.ts +++ b/packages/browser/src/userfeedback.ts @@ -10,6 +10,13 @@ export function captureUserFeedback(feedback: UserFeedback): void { const client = hub.getClient(); const transport = client && client.getTransport(); + if (!client) { + if (__DEBUG_BUILD__) { + logger.log('[UserFeedback] getClient did not return a Client, user feedback will not be sent.'); + } + return; + } + if (!transport) { if (__DEBUG_BUILD__) { logger.log('[UserFeedback] getTransport did not return a Transport, user feedback will not be sent.'); From f29a85fb8da64c720f88b1bd1b4d52f450e792fc Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 5 Apr 2023 11:29:07 +0200 Subject: [PATCH 5/9] Refactor debug logs --- packages/browser/src/userfeedback.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/browser/src/userfeedback.ts b/packages/browser/src/userfeedback.ts index abbdaa86cb3a..6f077fd5da8c 100644 --- a/packages/browser/src/userfeedback.ts +++ b/packages/browser/src/userfeedback.ts @@ -11,16 +11,13 @@ export function captureUserFeedback(feedback: UserFeedback): void { const transport = client && client.getTransport(); if (!client) { - if (__DEBUG_BUILD__) { - logger.log('[UserFeedback] getClient did not return a Client, user feedback will not be sent.'); - } + __DEBUG_BUILD__ && logger.log('[UserFeedback] getClient did not return a Client, user feedback will not be sent.'); return; } if (!transport) { - if (__DEBUG_BUILD__) { + __DEBUG_BUILD__ && logger.log('[UserFeedback] getTransport did not return a Transport, user feedback will not be sent.'); - } return; } From 2c5aae55513b5aa4efd544e84db007d40b8687f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kry=C5=A1tof=20Wold=C5=99ich?= <31292499+krystofwoldrich@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:31:55 +0200 Subject: [PATCH 6/9] Apply suggestions from code review Co-authored-by: Luca Forstner --- packages/browser/src/userfeedback.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/browser/src/userfeedback.ts b/packages/browser/src/userfeedback.ts index 6f077fd5da8c..f940c294e68a 100644 --- a/packages/browser/src/userfeedback.ts +++ b/packages/browser/src/userfeedback.ts @@ -11,13 +11,13 @@ export function captureUserFeedback(feedback: UserFeedback): void { const transport = client && client.getTransport(); if (!client) { - __DEBUG_BUILD__ && logger.log('[UserFeedback] getClient did not return a Client, user feedback will not be sent.'); + __DEBUG_BUILD__ && logger.log('No client configured, Sentry user feedback will not be sent.'); return; } if (!transport) { __DEBUG_BUILD__ && - logger.log('[UserFeedback] getTransport did not return a Transport, user feedback will not be sent.'); + logger.log('No transport configured, Sentry user feedback will not be sent.'); return; } From 631d858c3b7444d1288f83e55a09fa366b91e98f Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 5 Apr 2023 13:42:03 +0200 Subject: [PATCH 7/9] Revert "Make user feedback tree shakable" This reverts commit e29594492e929bc8ccfaf8d936322d46c65a17ce. --- packages/browser/src/client.ts | 14 +++++++++++++ packages/browser/src/exports.ts | 14 +++++++++++-- packages/browser/src/sdk.ts | 11 ++++++++++ packages/browser/src/userfeedback.ts | 31 +--------------------------- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/packages/browser/src/client.ts b/packages/browser/src/client.ts index 1d0bd091cf19..696bb46580e1 100644 --- a/packages/browser/src/client.ts +++ b/packages/browser/src/client.ts @@ -8,6 +8,7 @@ import type { Options, Severity, SeverityLevel, + UserFeedback, } from '@sentry/types'; import { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils'; @@ -16,6 +17,7 @@ import { WINDOW } from './helpers'; import type { Breadcrumbs } from './integrations'; import { BREADCRUMB_INTEGRATION_ID } from './integrations/breadcrumbs'; import type { BrowserTransportOptions } from './transports/types'; +import { createUserFeedbackEnvelope } from './userfeedback'; /** * Configuration options for the Sentry Browser SDK. @@ -106,6 +108,18 @@ export class BrowserClient extends BaseClient { super.sendEvent(event, hint); } + /** + * Sends user feedback to Sentry. + */ + public captureUserFeedback(feedback: UserFeedback): void { + const envelope = createUserFeedbackEnvelope(feedback, { + metadata: this.getSdkMetadata(), + dsn: this.getDsn(), + tunnel: this.getOptions().tunnel, + }); + void this._sendEnvelope(envelope); + } + /** * @inheritDoc */ diff --git a/packages/browser/src/exports.ts b/packages/browser/src/exports.ts index 5f8226905e5c..19795d4174eb 100644 --- a/packages/browser/src/exports.ts +++ b/packages/browser/src/exports.ts @@ -59,6 +59,16 @@ export { winjsStackLineParser, } from './stack-parsers'; export { eventFromException, eventFromMessage } from './eventbuilder'; -export { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap } from './sdk'; -export { captureUserFeedback } from './userfeedback'; +export { + defaultIntegrations, + forceLoad, + init, + lastEventId, + onLoad, + showReportDialog, + flush, + close, + wrap, + captureUserFeedback, +} from './sdk'; export { GlobalHandlers, TryCatch, Breadcrumbs, LinkedErrors, HttpContext, Dedupe } from './integrations'; diff --git a/packages/browser/src/sdk.ts b/packages/browser/src/sdk.ts index c7f2ed74194a..d58888260e3e 100644 --- a/packages/browser/src/sdk.ts +++ b/packages/browser/src/sdk.ts @@ -6,6 +6,7 @@ import { initAndBind, Integrations as CoreIntegrations, } from '@sentry/core'; +import type { UserFeedback } from '@sentry/types'; import { addInstrumentationHandler, logger, @@ -289,3 +290,13 @@ function startSessionTracking(): void { } }); } + +/** + * Captures user feedback and sends it to Sentry. + */ +export function captureUserFeedback(feedback: UserFeedback): void { + const client = getCurrentHub().getClient(); + if (client) { + client.captureUserFeedback(feedback); + } +} diff --git a/packages/browser/src/userfeedback.ts b/packages/browser/src/userfeedback.ts index f940c294e68a..c2c8b0a116fc 100644 --- a/packages/browser/src/userfeedback.ts +++ b/packages/browser/src/userfeedback.ts @@ -1,34 +1,5 @@ -import { getCurrentHub } from '@sentry/core'; import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types'; -import { createEnvelope, dsnToString, logger } from '@sentry/utils'; - -/** - * Sends user feedback to Sentry. - */ -export function captureUserFeedback(feedback: UserFeedback): void { - const hub = getCurrentHub(); - const client = hub.getClient(); - const transport = client && client.getTransport(); - - if (!client) { - __DEBUG_BUILD__ && logger.log('No client configured, Sentry user feedback will not be sent.'); - return; - } - - if (!transport) { - __DEBUG_BUILD__ && - logger.log('No transport configured, Sentry user feedback will not be sent.'); - return; - } - - const envelope = createUserFeedbackEnvelope(feedback, { - metadata: client.getSdkMetadata && client.getSdkMetadata(), - dsn: client.getDsn(), - tunnel: client.getOptions().tunnel, - }); - - void transport.send(envelope); -} +import { createEnvelope, dsnToString } from '@sentry/utils'; /** * Creates an envelope from a user feedback. From d30527c059381a36e60bf61ddbde51886dc6cb34 Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 5 Apr 2023 13:44:07 +0200 Subject: [PATCH 8/9] Export user feedback envelope creator --- packages/browser/src/exports.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/browser/src/exports.ts b/packages/browser/src/exports.ts index 19795d4174eb..7b2909913e30 100644 --- a/packages/browser/src/exports.ts +++ b/packages/browser/src/exports.ts @@ -59,6 +59,9 @@ export { winjsStackLineParser, } from './stack-parsers'; export { eventFromException, eventFromMessage } from './eventbuilder'; +export { + createUserFeedbackEnvelope, +} from './userfeedback'; export { defaultIntegrations, forceLoad, From 31c54c8bf7db44abeffa50bd12178f002dc2d7fc Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 5 Apr 2023 13:52:53 +0200 Subject: [PATCH 9/9] Add isEnabled check --- packages/browser/src/client.ts | 5 +++++ packages/browser/src/exports.ts | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/browser/src/client.ts b/packages/browser/src/client.ts index 696bb46580e1..ab877a782efa 100644 --- a/packages/browser/src/client.ts +++ b/packages/browser/src/client.ts @@ -112,6 +112,11 @@ export class BrowserClient extends BaseClient { * Sends user feedback to Sentry. */ public captureUserFeedback(feedback: UserFeedback): void { + if (!this._isEnabled()) { + __DEBUG_BUILD__ && logger.warn('SDK not enabled, will not capture user feedback.'); + return; + } + const envelope = createUserFeedbackEnvelope(feedback, { metadata: this.getSdkMetadata(), dsn: this.getDsn(), diff --git a/packages/browser/src/exports.ts b/packages/browser/src/exports.ts index 7b2909913e30..f48b00c8c8e8 100644 --- a/packages/browser/src/exports.ts +++ b/packages/browser/src/exports.ts @@ -59,9 +59,7 @@ export { winjsStackLineParser, } from './stack-parsers'; export { eventFromException, eventFromMessage } from './eventbuilder'; -export { - createUserFeedbackEnvelope, -} from './userfeedback'; +export { createUserFeedbackEnvelope } from './userfeedback'; export { defaultIntegrations, forceLoad,