Skip to content

Commit 2db99dd

Browse files
gtamanahaalexs-mparticle
authored andcommitted
refactor(errorCodes, reportingLogger): Replace ErrorCodes type definition with valueof utility and update ReportingLogger to use baseUrl; adjust tests accordingly
1 parent a88b8df commit 2db99dd

File tree

4 files changed

+23
-32
lines changed

4 files changed

+23
-32
lines changed

src/logging/errorCodes.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
export type ErrorCodes = (typeof ErrorCodes)[keyof typeof ErrorCodes];
1+
import { valueof } from '../utils';
2+
3+
export type ErrorCodes = valueof<typeof ErrorCodes>;
24

35
export const ErrorCodes = {
46
UNHANDLED_EXCEPTION: 'UNHANDLED_EXCEPTION',

src/logging/logMessage.ts

Whitespace-only changes.

src/logging/reportingLogger.ts

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { IAPIClient } from "../apiClient";
2-
import { IMParticleWebSDKInstance } from "../mp-instance";
1+
32
import { ErrorCodes } from "./errorCodes";
43
import { LogRequest, LogRequestSeverity } from "./logRequest";
54
import { FetchUploader, XHRUploader } from "../uploaders";
@@ -14,15 +13,14 @@ export class ReportingLogger implements IReportingLogger {
1413
private readonly reporter: string = 'mp-wsdk';
1514
private readonly integration: string = 'mp-wsdk';
1615
private readonly rateLimiter: IRateLimiter;
17-
private readonly mpInstance: IMParticleWebSDKInstance;
18-
16+
private readonly DEFAULT_ACCOUNT_ID: string = 'no-account-id-set';
17+
1918
constructor(
20-
mpInstance: IMParticleWebSDKInstance,
19+
private baseUrl: string,
2120
private readonly sdkVersion: string,
2221
private readonly accountId: string,
2322
rateLimiter?: IRateLimiter,
2423
) {
25-
this.mpInstance = mpInstance;
2624
this.isEnabled = this.isReportingEnabled();
2725
this.rateLimiter = rateLimiter ?? new RateLimiter();
2826
}
@@ -107,12 +105,7 @@ export class ReportingLogger implements IReportingLogger {
107105
}
108106

109107
private sendLogToServer(logRequest: LogRequest) {
110-
const baseUrl = this.mpInstance._Helpers.createServiceUrl(
111-
this.mpInstance._Store.SDKConfig.v2SecureServiceUrl,
112-
this.mpInstance._Store.devToken
113-
);
114-
115-
const uploadUrl = `${baseUrl}/v1/log`;
108+
const uploadUrl = `${this.baseUrl}/v1/log`;
116109
const uploader = window.fetch
117110
? new FetchUploader(uploadUrl)
118111
: new XHRUploader(uploadUrl);
@@ -122,7 +115,7 @@ export class ReportingLogger implements IReportingLogger {
122115
headers: {
123116
Accept: 'text/plain;charset=UTF-8',
124117
'Content-Type': 'text/plain;charset=UTF-8',
125-
'rokt-account-id': this.accountId
118+
'rokt-account-id': this.accountId || this.DEFAULT_ACCOUNT_ID
126119
},
127120
body: JSON.stringify(logRequest),
128121
});

test/jest/reportingLogger.spec.ts

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,15 @@ import { LogRequestSeverity } from '../../src/logging/logRequest';
33
import { ErrorCodes } from '../../src/logging/errorCodes';
44

55
describe('ReportingLogger', () => {
6-
let mpInstance: any;
76
let logger: ReportingLogger;
7+
const baseUrl = 'https://test-url.com';
88
const sdkVersion = '1.2.3';
99
let mockFetch: jest.Mock;
1010
const accountId = '1234567890';
1111
beforeEach(() => {
1212
mockFetch = jest.fn().mockResolvedValue({ ok: true });
1313
global.fetch = mockFetch;
1414

15-
mpInstance = {
16-
_Helpers: {
17-
createServiceUrl: jest.fn().mockReturnValue('https://test-url.com')
18-
},
19-
_Store: {
20-
SDKConfig: {
21-
v2SecureServiceUrl: 'https://secure-service.com'
22-
},
23-
devToken: 'test-token'
24-
}
25-
};
26-
2715
delete (globalThis as any).location;
2816
(globalThis as any).location = {
2917
href: 'https://e.com',
@@ -36,7 +24,7 @@ describe('ReportingLogger', () => {
3624
ROKT_DOMAIN: 'set',
3725
fetch: mockFetch
3826
});
39-
logger = new ReportingLogger(mpInstance, sdkVersion, accountId);
27+
logger = new ReportingLogger(baseUrl, sdkVersion, accountId);
4028
});
4129

4230
afterEach(() => {
@@ -72,23 +60,23 @@ describe('ReportingLogger', () => {
7260

7361
it('does not log if ROKT_DOMAIN missing', () => {
7462
delete (globalThis as any).ROKT_DOMAIN;
75-
logger = new ReportingLogger(mpInstance, sdkVersion, accountId);
63+
logger = new ReportingLogger(baseUrl, sdkVersion, accountId);
7664
logger.error('x');
7765
expect(mockFetch).not.toHaveBeenCalled();
7866
});
7967

8068
it('does not log if feature flag and debug mode off', () => {
8169
window.mParticle.config.isWebSdkLoggingEnabled = false;
8270
window.location.search = '';
83-
logger = new ReportingLogger(mpInstance, sdkVersion, accountId);
71+
logger = new ReportingLogger(baseUrl, sdkVersion, accountId);
8472
logger.error('x');
8573
expect(mockFetch).not.toHaveBeenCalled();
8674
});
8775

8876
it('logs if debug mode on even if feature flag off', () => {
8977
window.mParticle.config.isWebSdkLoggingEnabled = false;
9078
window.location.search = '?mp_enable_logging=true';
91-
logger = new ReportingLogger(mpInstance, sdkVersion, accountId);
79+
logger = new ReportingLogger(baseUrl, sdkVersion, accountId);
9280
logger.error('x');
9381
expect(mockFetch).toHaveBeenCalled();
9482
});
@@ -100,11 +88,19 @@ describe('ReportingLogger', () => {
10088
return ++count > 3;
10189
}),
10290
};
103-
logger = new ReportingLogger(mpInstance, sdkVersion, accountId, mockRateLimiter);
91+
logger = new ReportingLogger(baseUrl, sdkVersion, accountId, mockRateLimiter);
10492

10593
for (let i = 0; i < 5; i++) logger.error('err');
10694
expect(mockFetch).toHaveBeenCalledTimes(3);
10795
});
96+
97+
it('uses default account id when accountId is empty', () => {
98+
logger = new ReportingLogger(baseUrl, sdkVersion, undefined);
99+
logger.error('msg');
100+
expect(mockFetch).toHaveBeenCalled();
101+
const fetchCall = mockFetch.mock.calls[0];
102+
expect(fetchCall[1].headers['rokt-account-id']).toBe('no-account-id-set');
103+
});
108104
});
109105

110106
describe('RateLimiter', () => {

0 commit comments

Comments
 (0)