Skip to content

Commit 3c62321

Browse files
committed
s/user/publicKey in Dsn type and class
1 parent d118b85 commit 3c62321

File tree

4 files changed

+36
-24
lines changed

4 files changed

+36
-24
lines changed

packages/core/src/api.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export class API {
6767
const dsn = this._dsnObject;
6868
const header = [`Sentry sentry_version=${SENTRY_API_VERSION}`];
6969
header.push(`sentry_client=${clientName}/${clientVersion}`);
70-
header.push(`sentry_key=${dsn.user}`);
70+
header.push(`sentry_key=${dsn.publicKey}`);
7171
if (dsn.pass) {
7272
header.push(`sentry_secret=${dsn.pass}`);
7373
}
@@ -134,7 +134,7 @@ export class API {
134134
const auth = {
135135
// We send only the minimum set of required information. See
136136
// https://github.com/getsentry/sentry-javascript/issues/2572.
137-
sentry_key: dsn.user,
137+
sentry_key: dsn.publicKey,
138138
sentry_version: SENTRY_API_VERSION,
139139
};
140140
return urlEncode(auth);

packages/types/src/dsn.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ export type DsnProtocol = 'http' | 'https';
55
export interface DsnComponents {
66
/** Protocol used to connect to Sentry. */
77
protocol: DsnProtocol;
8+
/** Public authorization key (deprecated, renamed to publicKey). */
9+
user?: string;
810
/** Public authorization key. */
9-
user: string;
11+
publicKey?: string;
1012
/** Private authorization key (deprecated, optional). */
1113
pass?: string;
1214
/** Hostname of the Sentry instance. */

packages/utils/src/dsn.ts

+17-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';
22

33
import { SentryError } from './error';
4+
import { logger } from './logger';
45

56
/** Regular expression used to parse a Dsn. */
67
const DSN_REGEX = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w.-]+)(?::(\d+))?\/(.+)/;
@@ -12,8 +13,10 @@ const ERROR_MESSAGE = 'Invalid Dsn';
1213
export class Dsn implements DsnComponents {
1314
/** Protocol used to connect to Sentry. */
1415
public protocol!: DsnProtocol;
15-
/** Public authorization key. */
16+
/** Public authorization key (deprecated, renamed to publicKey). */
1617
public user!: string;
18+
/** Public authorization key. */
19+
public publicKey!: string;
1720
/** Private authorization key (deprecated, optional). */
1821
public pass!: string;
1922
/** Hostname of the Sentry instance. */
@@ -46,9 +49,9 @@ export class Dsn implements DsnComponents {
4649
* @param withPassword When set to true, the password will be included.
4750
*/
4851
public toString(withPassword: boolean = false): string {
49-
const { host, path, pass, port, projectId, protocol, user } = this;
52+
const { host, path, pass, port, projectId, protocol, publicKey } = this;
5053
return (
51-
`${protocol}://${user}${withPassword && pass ? `:${pass}` : ''}` +
54+
`${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +
5255
`@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`
5356
);
5457
}
@@ -61,7 +64,7 @@ export class Dsn implements DsnComponents {
6164
throw new SentryError(ERROR_MESSAGE);
6265
}
6366

64-
const [protocol, user, pass = '', host, port = '', lastPath] = match.slice(1);
67+
const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);
6568
let path = '';
6669
let projectId = lastPath;
6770

@@ -78,13 +81,20 @@ export class Dsn implements DsnComponents {
7881
}
7982
}
8083

81-
this._fromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, user });
84+
this._fromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });
8285
}
8386

8487
/** Maps Dsn components into this instance. */
8588
private _fromComponents(components: DsnComponents): void {
89+
if ('user' in components && !('publicKey' in components)) {
90+
logger.warn('Use of `user` in DsnComponents is deprecated. Please use `publicKey` instead.');
91+
components.publicKey = components.user;
92+
}
93+
// TODO this is for backwards compatibility, and can be removed in a future version
94+
this.user = components.publicKey || '';
95+
8696
this.protocol = components.protocol;
87-
this.user = components.user;
97+
this.publicKey = components.publicKey || '';
8898
this.pass = components.pass || '';
8999
this.host = components.host;
90100
this.port = components.port || '';
@@ -94,7 +104,7 @@ export class Dsn implements DsnComponents {
94104

95105
/** Validates this Dsn and throws on error. */
96106
private _validate(): void {
97-
['protocol', 'user', 'host', 'projectId'].forEach(component => {
107+
['protocol', 'publicKey', 'host', 'projectId'].forEach(component => {
98108
if (!this[component as keyof DsnComponents]) {
99109
throw new SentryError(`${ERROR_MESSAGE}: ${component} missing`);
100110
}

packages/utils/test/dsn.test.ts

+14-14
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ describe('Dsn', () => {
1010
port: '1234',
1111
projectId: '123',
1212
protocol: 'https',
13-
user: 'abc',
13+
publicKey: 'abc',
1414
});
1515
expect(dsn.protocol).toBe('https');
16-
expect(dsn.user).toBe('abc');
16+
expect(dsn.publicKey).toBe('abc');
1717
expect(dsn.pass).toBe('xyz');
1818
expect(dsn.host).toBe('sentry.io');
1919
expect(dsn.port).toBe('1234');
@@ -26,10 +26,10 @@ describe('Dsn', () => {
2626
host: 'sentry.io',
2727
projectId: '123',
2828
protocol: 'https',
29-
user: 'abc',
29+
publicKey: 'abc',
3030
});
3131
expect(dsn.protocol).toBe('https');
32-
expect(dsn.user).toBe('abc');
32+
expect(dsn.publicKey).toBe('abc');
3333
expect(dsn.pass).toBe('');
3434
expect(dsn.host).toBe('sentry.io');
3535
expect(dsn.port).toBe('');
@@ -44,7 +44,7 @@ describe('Dsn', () => {
4444
host: '',
4545
projectId: '123',
4646
protocol: 'https',
47-
user: 'abc',
47+
publicKey: 'abc',
4848
}),
4949
).toThrow(SentryError);
5050
expect(
@@ -53,7 +53,7 @@ describe('Dsn', () => {
5353
host: 'sentry.io',
5454
projectId: '',
5555
protocol: 'https',
56-
user: 'abc',
56+
publicKey: 'abc',
5757
}),
5858
).toThrow(SentryError);
5959
expect(
@@ -62,7 +62,7 @@ describe('Dsn', () => {
6262
host: 'sentry.io',
6363
projectId: '123',
6464
protocol: '' as 'http', // Trick the type checker here
65-
user: 'abc',
65+
publicKey: 'abc',
6666
}),
6767
).toThrow(SentryError);
6868
expect(
@@ -71,7 +71,7 @@ describe('Dsn', () => {
7171
host: 'sentry.io',
7272
projectId: '123',
7373
protocol: 'https',
74-
user: '',
74+
publicKey: '',
7575
}),
7676
).toThrow(SentryError);
7777
});
@@ -83,7 +83,7 @@ describe('Dsn', () => {
8383
host: 'sentry.io',
8484
projectId: '123',
8585
protocol: 'httpx' as 'http', // Trick the type checker here
86-
user: 'abc',
86+
publicKey: 'abc',
8787
}),
8888
).toThrow(SentryError);
8989
expect(
@@ -93,7 +93,7 @@ describe('Dsn', () => {
9393
port: 'xxx',
9494
projectId: '123',
9595
protocol: 'https',
96-
user: 'abc',
96+
publicKey: 'abc',
9797
}),
9898
).toThrow(SentryError);
9999
});
@@ -103,7 +103,7 @@ describe('Dsn', () => {
103103
test('parses a valid full Dsn', () => {
104104
const dsn = new Dsn('https://abc:[email protected]:1234/123');
105105
expect(dsn.protocol).toBe('https');
106-
expect(dsn.user).toBe('abc');
106+
expect(dsn.publicKey).toBe('abc');
107107
expect(dsn.pass).toBe('xyz');
108108
expect(dsn.host).toBe('sentry.io');
109109
expect(dsn.port).toBe('1234');
@@ -114,7 +114,7 @@ describe('Dsn', () => {
114114
test('parses a valid partial Dsn', () => {
115115
const dsn = new Dsn('https://[email protected]/123/321');
116116
expect(dsn.protocol).toBe('https');
117-
expect(dsn.user).toBe('abc');
117+
expect(dsn.publicKey).toBe('abc');
118118
expect(dsn.pass).toBe('');
119119
expect(dsn.host).toBe('sentry.io');
120120
expect(dsn.port).toBe('');
@@ -125,7 +125,7 @@ describe('Dsn', () => {
125125
test('with a long path', () => {
126126
const dsn = new Dsn('https://[email protected]/sentry/custom/installation/321');
127127
expect(dsn.protocol).toBe('https');
128-
expect(dsn.user).toBe('abc');
128+
expect(dsn.publicKey).toBe('abc');
129129
expect(dsn.pass).toBe('');
130130
expect(dsn.host).toBe('sentry.io');
131131
expect(dsn.port).toBe('');
@@ -136,7 +136,7 @@ describe('Dsn', () => {
136136
test('with a query string', () => {
137137
const dsn = new Dsn('https://[email protected]/321?sample.rate=0.1&other=value');
138138
expect(dsn.protocol).toBe('https');
139-
expect(dsn.user).toBe('abc');
139+
expect(dsn.publicKey).toBe('abc');
140140
expect(dsn.pass).toBe('');
141141
expect(dsn.host).toBe('sentry.io');
142142
expect(dsn.port).toBe('');

0 commit comments

Comments
 (0)