Skip to content

Commit c157f86

Browse files
authored
feat(core): Add getSdkMetadata to Client (#6643)
Add a new method to the `Client` interface: `getSdkMetadata`. We can use this method in the Replay package to avoid accessing `client.getOptions()._metadata`, which previously caused broken CDN bundles which we hot-fixed with #6600. This change now properly fixes this issue by simply not accessing this "private" field anymore.
1 parent b03a32b commit c157f86

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

packages/core/src/baseclient.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
Integration,
1313
IntegrationClass,
1414
Outcome,
15+
SdkMetadata,
1516
Session,
1617
SessionAggregates,
1718
Severity,
@@ -219,6 +220,15 @@ export abstract class BaseClient<O extends ClientOptions> implements Client<O> {
219220
return this._options;
220221
}
221222

223+
/**
224+
* @see SdkMetadata in @sentry/types
225+
*
226+
* @return The metadata of the SDK
227+
*/
228+
public getSdkMetadata(): SdkMetadata | undefined {
229+
return this._options._metadata;
230+
}
231+
222232
/**
223233
* @inheritDoc
224234
*/

packages/replay/src/util/getReplayEvent.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export async function getReplayEvent({
2525
preparedEvent.platform = preparedEvent.platform || 'javascript';
2626

2727
// extract the SDK name because `client._prepareEvent` doesn't add it to the event
28-
const metadata = client.getOptions() && client.getOptions()._metadata;
29-
const { name } = (metadata && metadata.sdk) || {};
28+
const metadata = client.getSdkMetadata && client.getSdkMetadata();
29+
const name = (metadata && metadata.sdk && metadata.sdk.name) || 'sentry.javascript.unknown';
3030

3131
preparedEvent.sdk = {
3232
...preparedEvent.sdk,

packages/types/src/client.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { Event, EventHint } from './event';
55
import { Integration, IntegrationClass } from './integration';
66
import { ClientOptions } from './options';
77
import { Scope } from './scope';
8+
import { SdkMetadata } from './sdkmetadata';
89
import { Session, SessionAggregates } from './session';
910
import { Severity, SeverityLevel } from './severity';
1011
import { Transport } from './transport';
@@ -69,6 +70,13 @@ export interface Client<O extends ClientOptions = ClientOptions> {
6970
/** Returns the current options. */
7071
getOptions(): O;
7172

73+
/**
74+
* @inheritdoc
75+
*
76+
* TODO (v8): Make this a required method.
77+
*/
78+
getSdkMetadata?(): SdkMetadata | undefined;
79+
7280
/**
7381
* Returns the transport that is used by the client.
7482
* Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.

rollup/plugins/bundlePlugins.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,6 @@ export function makeTerserPlugin() {
107107
'_driver',
108108
'_initStorage',
109109
'_support',
110-
// TODO: Get rid of these once we use the SDK to send replay events
111-
'_metadata', // replay uses client.getOptions()._metadata
112110
],
113111
},
114112
},

0 commit comments

Comments
 (0)