Skip to content
6 changes: 3 additions & 3 deletions src/batchUploader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -259,15 +259,15 @@ export class BatchUploader {
return;
}

const { verbose } = this.mpInstance.Logger;
const { Logger } = this.mpInstance;

this.eventsQueuedForProcessing.push(event);
if (this.offlineStorageEnabled && this.eventVault) {
this.eventVault.store(this.eventsQueuedForProcessing);
}

verbose(`Queuing event: ${JSON.stringify(event)}`);
verbose(`Queued event count: ${this.eventsQueuedForProcessing.length}`);
Logger.verbose(`Queuing event: ${JSON.stringify(event)}`);
Logger.verbose(`Queued event count: ${this.eventsQueuedForProcessing.length}`);

if (this.shouldTriggerImmediateUpload(event.EventDataType)) {
this.prepareAndUpload(false, false);
Expand Down
23 changes: 11 additions & 12 deletions src/identityApiClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ export default function IdentityAPIClient(
aliasRequest: IAliasRequest,
aliasCallback: IAliasCallback
) {
const { verbose, error } = mpInstance.Logger;
const { Logger } = mpInstance;
const { invokeAliasCallback } = mpInstance._Helpers;
const { aliasUrl } = mpInstance._Store.SDKConfig;
const { devToken: apiKey } = mpInstance._Store;

verbose(Messages.InformationMessages.SendAliasHttp);
Logger.verbose(Messages.InformationMessages.SendAliasHttp);

// https://go.mparticle.com/work/SQDSDKS-6750
const uploadUrl = `https://${aliasUrl}${apiKey}/Alias`;
Expand Down Expand Up @@ -136,7 +136,7 @@ export default function IdentityAPIClient(
try {
aliasResponseBody = await response.json();
} catch (e) {
verbose('The request has no response body');
Logger.verbose('The request has no response body');
}
} else {
// https://go.mparticle.com/work/SQDSDKS-6568
Expand Down Expand Up @@ -171,11 +171,11 @@ export default function IdentityAPIClient(

}

verbose(message);
Logger.verbose(message);
invokeAliasCallback(aliasCallback, response.status, errorMessage);
} catch (e) {
const errorMessage = (e as Error).message || e.toString();
error('Error sending alias request to mParticle servers. ' + errorMessage);
Logger.error('Error sending alias request to mParticle servers. ' + errorMessage);
invokeAliasCallback(
aliasCallback,
HTTPCodes.noHttpCoverage,
Expand All @@ -193,15 +193,14 @@ export default function IdentityAPIClient(
mpid: MPID,
knownIdentities: UserIdentities
) {
const { verbose, error } = mpInstance.Logger;
const { invokeCallback } = mpInstance._Helpers;

verbose(Messages.InformationMessages.SendIdentityBegin);
const { Logger } = mpInstance;
Logger.verbose(Messages.InformationMessages.SendIdentityBegin);
if (!identityApiRequest) {
error(Messages.ErrorMessages.APIRequestEmpty);
Logger.error(Messages.ErrorMessages.APIRequestEmpty);
return;
}
verbose(Messages.InformationMessages.SendIdentityHttp);
Logger.verbose(Messages.InformationMessages.SendIdentityHttp);

if (mpInstance._Store.identityCallInFlight) {
invokeCallback(
Expand Down Expand Up @@ -289,7 +288,7 @@ export default function IdentityAPIClient(

mpInstance._Store.identityCallInFlight = false;

verbose(message);
Logger.verbose(message);
parseIdentityResponse(
identityResponse,
previousMPID,
Expand All @@ -304,7 +303,7 @@ export default function IdentityAPIClient(

const errorMessage = (err as Error).message || err.toString();

error('Error sending identity request to servers' + ' - ' + errorMessage);
Logger.error('Error sending identity request to servers' + ' - ' + errorMessage);
invokeCallback(
callback,
HTTPCodes.noHttpCoverage,
Expand Down
61 changes: 0 additions & 61 deletions src/logger.js

This file was deleted.

66 changes: 66 additions & 0 deletions src/logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { LogLevelType, SDKInitConfig, SDKLoggerApi } from './sdkRuntimeModels';

export type ILoggerConfig = Pick<SDKInitConfig, 'logLevel' | 'logger'>;
export type IConsoleLogger = Partial<Pick<SDKLoggerApi, 'error' | 'warning' | 'verbose'>>;

export class Logger {
private logLevel: LogLevelType;
private logger: IConsoleLogger;

constructor(config: ILoggerConfig) {
this.logLevel = config.logLevel ?? LogLevelType.Warning;
this.logger = config.logger ?? new ConsoleLogger();
}

public verbose(msg: string): void {
if(this.logLevel === LogLevelType.None)
return;

if (this.logger.verbose && this.logLevel === LogLevelType.Verbose) {
this.logger.verbose(msg);
}
}

public warning(msg: string): void {
if(this.logLevel === LogLevelType.None)
return;

if (this.logger.warning &&
(this.logLevel === LogLevelType.Verbose || this.logLevel === LogLevelType.Warning)) {
this.logger.warning(msg);
}
}

public error(msg: string): void {
if(this.logLevel === LogLevelType.None)
return;

if (this.logger.error) {
this.logger.error(msg);
}
}

public setLogLevel(newLogLevel: LogLevelType): void {
this.logLevel = newLogLevel;
}
}

export class ConsoleLogger implements IConsoleLogger {
public verbose(msg: string): void {
if (console && console.info) {
console.info(msg);
}
}

public error(msg: string): void {
if (console && console.error) {
console.error(msg);
}
}

public warning(msg: string): void {
if (console && console.warn) {
console.warn(msg);
}
}
}
3 changes: 2 additions & 1 deletion src/mp-instance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import CookieSyncManager, { ICookieSyncManager } from './cookieSyncManager';
import SessionManager, { ISessionManager } from './sessionManager';
import Ecommerce from './ecommerce';
import Store, { IStore } from './store';
import Logger from './logger';
import { Logger } from './logger';
import Persistence from './persistence';
import Events from './events';
import Forwarders from './forwarders';
Expand Down Expand Up @@ -227,6 +227,7 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
if (instance._Store) {
delete instance._Store;
}
instance.Logger = new Logger(config);
instance._Store = new Store(config, instance);
instance._Store.isLocalStorageAvailable = instance._Persistence.determineLocalStorageAvailability(
window.localStorage
Expand Down
10 changes: 9 additions & 1 deletion src/sdkRuntimeModels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import { SDKECommerceAPI } from './ecommerce.interfaces';
import { IErrorLogMessage, IMParticleWebSDKInstance, IntegrationDelays } from './mp-instance';
import Constants from './constants';
import RoktManager, { IRoktLauncherOptions } from './roktManager';
import { IConsoleLogger } from './logger';

// TODO: Resolve this with version in @mparticle/web-sdk
export type SDKEventCustomFlags = Dictionary<any>;
Expand Down Expand Up @@ -259,7 +260,13 @@ export interface IMParticleInstanceManager extends MParticleWebSDK {
export type BooleanStringLowerCase = 'false' | 'true';
export type BooleanStringTitleCase = 'False' | 'True';

export type LogLevelType = 'none' | 'verbose' | 'warning' | 'error';
export type LogLevelType = (typeof LogLevelType)[keyof typeof LogLevelType];
export const LogLevelType = {
None: 'none',
Verbose: 'verbose',
Warning: 'warning',
Error: 'error',
} as const;

// TODO: This should eventually be moved into wherever init logic lives
// TODO: Replace/Merge this with MPConfiguration in @types/mparticle__web-sdk
Expand Down Expand Up @@ -309,6 +316,7 @@ export interface SDKInitConfig
launcherOptions?: IRoktLauncherOptions;

rq?: Function[] | any[];
logger?: IConsoleLogger;
}

export interface DataPlanConfig {
Expand Down
Loading
Loading