Skip to content

Commit c44f7e2

Browse files
committed
feat: report deprecated method usage
1 parent 98825ec commit c44f7e2

7 files changed

Lines changed: 140 additions & 57 deletions

File tree

src/consent.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import KitFilterHelper from './kitFilterHelper';
99
import Constants from './constants';
1010
import { IMParticleUser } from './identity-user-interfaces';
1111
import { IMParticleWebSDKInstance } from './mp-instance';
12+
import { logDeprecatedApiUsage } from './reporting/deprecatedApiLogger';
1213

1314
const { CCPAPurpose } = Constants;
1415

@@ -505,9 +506,10 @@ export default function Consent(this: IConsent, mpInstance: IMParticleWebSDKInst
505506

506507
// TODO: Can we remove this? It is deprecated.
507508
function removeCCPAState(this: ConsentState) {
508-
mpInstance.Logger.warning(
509-
'removeCCPAState is deprecated and will be removed in a future release; use removeCCPAConsentState instead'
510-
);
509+
logDeprecatedApiUsage(mpInstance, {
510+
methodName: 'removeCCPAState',
511+
warningMessage: 'removeCCPAState is deprecated and will be removed in a future release; use removeCCPAConsentState instead',
512+
});
511513
// @ts-ignore
512514
return removeCCPAConsentState();
513515
}

src/identity.js

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
} from './utils';
2121
import { hasMPIDAndUserLoginChanged, hasMPIDChanged } from './user-utils';
2222
import { processReadyQueue } from './pre-init-utils';
23+
import { logDeprecatedApiUsage } from './reporting/deprecatedApiLogger';
2324

2425
export default function Identity(mpInstance) {
2526
const { getFeatureFlag, extend } = mpInstance._Helpers;
@@ -1252,9 +1253,11 @@ export default function Identity(mpInstance) {
12521253
* @return a cart object
12531254
*/
12541255
getCart: function() {
1255-
mpInstance.Logger.warning(
1256-
'Deprecated function Identity.getCurrentUser().getCart() will be removed in future releases'
1257-
);
1256+
logDeprecatedApiUsage(mpInstance, {
1257+
methodName: 'Identity.getCurrentUser().getCart()',
1258+
warningMessage:
1259+
'Deprecated function Identity.getCurrentUser().getCart() will be removed in future releases',
1260+
});
12581261
return self.mParticleUserCart();
12591262
},
12601263

@@ -1334,44 +1337,47 @@ export default function Identity(mpInstance) {
13341337
* @deprecated
13351338
*/
13361339
add: function() {
1337-
mpInstance.Logger.warning(
1338-
generateDeprecationMessage(
1340+
logDeprecatedApiUsage(mpInstance, {
1341+
methodName: 'Identity.getCurrentUser().getCart().add()',
1342+
warningMessage: generateDeprecationMessage(
13391343
'Identity.getCurrentUser().getCart().add()',
13401344
true,
13411345
'eCommerce.logProductAction()',
13421346
'https://docs.mparticle.com/developers/sdk/web/commerce-tracking'
1343-
)
1344-
);
1347+
),
1348+
});
13451349
},
13461350
/**
13471351
* Removes a cart product from the current user cart
13481352
* @method remove
13491353
* @deprecated
13501354
*/
13511355
remove: function() {
1352-
mpInstance.Logger.warning(
1353-
generateDeprecationMessage(
1356+
logDeprecatedApiUsage(mpInstance, {
1357+
methodName: 'Identity.getCurrentUser().getCart().remove()',
1358+
warningMessage: generateDeprecationMessage(
13541359
'Identity.getCurrentUser().getCart().remove()',
13551360
true,
13561361
'eCommerce.logProductAction()',
13571362
'https://docs.mparticle.com/developers/sdk/web/commerce-tracking'
1358-
)
1359-
);
1363+
),
1364+
});
13601365
},
13611366
/**
13621367
* Clears the user's cart
13631368
* @method clear
13641369
* @deprecated
13651370
*/
13661371
clear: function() {
1367-
mpInstance.Logger.warning(
1368-
generateDeprecationMessage(
1372+
logDeprecatedApiUsage(mpInstance, {
1373+
methodName: 'Identity.getCurrentUser().getCart().clear()',
1374+
warningMessage: generateDeprecationMessage(
13691375
'Identity.getCurrentUser().getCart().clear()',
13701376
true,
13711377
'',
13721378
'https://docs.mparticle.com/developers/sdk/web/commerce-tracking'
1373-
)
1374-
);
1379+
),
1380+
});
13751381
},
13761382
/**
13771383
* Returns all cart products
@@ -1380,14 +1386,16 @@ export default function Identity(mpInstance) {
13801386
* @deprecated
13811387
*/
13821388
getCartProducts: function() {
1383-
mpInstance.Logger.warning(
1384-
generateDeprecationMessage(
1389+
logDeprecatedApiUsage(mpInstance, {
1390+
methodName:
1391+
'Identity.getCurrentUser().getCart().getCartProducts()',
1392+
warningMessage: generateDeprecationMessage(
13851393
'Identity.getCurrentUser().getCart().getCartProducts()',
13861394
true,
13871395
'eCommerce.logProductAction()',
13881396
'https://docs.mparticle.com/developers/sdk/web/commerce-tracking'
1389-
)
1390-
);
1397+
),
1398+
});
13911399
return [];
13921400
},
13931401
};
@@ -1536,12 +1544,7 @@ export default function Identity(mpInstance) {
15361544
newUser = mpInstance.Identity.getCurrentUser();
15371545

15381546
// https://go.mparticle.com/work/SQDSDKS-6359
1539-
tryOnUserAlias(
1540-
prevUser,
1541-
newUser,
1542-
identityApiData,
1543-
mpInstance.Logger
1544-
);
1547+
tryOnUserAlias(prevUser, newUser, identityApiData, mpInstance);
15451548

15461549
const persistence = mpInstance._Persistence.getPersistence();
15471550

@@ -1775,17 +1778,20 @@ export default function Identity(mpInstance) {
17751778
}
17761779

17771780
// https://go.mparticle.com/work/SQDSDKS-6359
1778-
function tryOnUserAlias(previousUser, newUser, identityApiData, logger) {
1781+
function tryOnUserAlias(previousUser, newUser, identityApiData, mpInstance) {
17791782
if (
17801783
identityApiData &&
17811784
identityApiData.onUserAlias &&
17821785
isFunction(identityApiData.onUserAlias)
17831786
) {
17841787
try {
1785-
logger.warning(generateDeprecationMessage('onUserAlias'));
1788+
logDeprecatedApiUsage(mpInstance, {
1789+
methodName: 'onUserAlias',
1790+
warningMessage: generateDeprecationMessage('onUserAlias'),
1791+
});
17861792
identityApiData.onUserAlias(previousUser, newUser);
17871793
} catch (e) {
1788-
logger.error(
1794+
mpInstance.Logger.error(
17891795
'There was an error with your onUserAlias function - ' + e
17901796
);
17911797
}

src/mp-instance.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import CookieConsentManager, { ICookieConsentManager } from './cookieConsentMana
5555
import { ErrorReportingDispatcher } from './reporting/errorReportingDispatcher';
5656
import { LoggingDispatcher } from './reporting/loggingDispatcher';
5757
import { IErrorReportingService, ILoggingService } from './reporting/types';
58+
import { logDeprecatedApiUsage } from './reporting/deprecatedApiLogger';
5859

5960
export interface IErrorLogMessage {
6061
message?: string;
@@ -772,14 +773,15 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
772773
* @deprecated
773774
*/
774775
add: function(product, logEventBoolean) {
775-
self.Logger.warning(
776-
generateDeprecationMessage(
776+
logDeprecatedApiUsage(self, {
777+
methodName: 'eCommerce.Cart.add()',
778+
warningMessage: generateDeprecationMessage(
777779
'eCommerce.Cart.add()',
778780
true,
779781
'eCommerce.logProductAction()',
780782
'https://docs.mparticle.com/developers/sdk/web/commerce-tracking'
781-
)
782-
);
783+
),
784+
});
783785
},
784786
/**
785787
* Removes a product from the cart
@@ -789,29 +791,31 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
789791
* @deprecated
790792
*/
791793
remove: function(product, logEventBoolean) {
792-
self.Logger.warning(
793-
generateDeprecationMessage(
794+
logDeprecatedApiUsage(self, {
795+
methodName: 'eCommerce.Cart.remove()',
796+
warningMessage: generateDeprecationMessage(
794797
'eCommerce.Cart.remove()',
795798
true,
796799
'eCommerce.logProductAction()',
797800
'https://docs.mparticle.com/developers/sdk/web/commerce-tracking'
798-
)
799-
);
801+
),
802+
});
800803
},
801804
/**
802805
* Clears the cart
803806
* @method clear
804807
* @deprecated
805808
*/
806809
clear: function() {
807-
self.Logger.warning(
808-
generateDeprecationMessage(
810+
logDeprecatedApiUsage(self, {
811+
methodName: 'eCommerce.Cart.clear()',
812+
warningMessage: generateDeprecationMessage(
809813
'eCommerce.Cart.clear()',
810814
true,
811815
'',
812816
'https://docs.mparticle.com/developers/sdk/web/commerce-tracking'
813-
)
814-
);
817+
),
818+
});
815819
},
816820
},
817821
/**
@@ -940,9 +944,10 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
940944
* @deprecated
941945
*/
942946
logCheckout: function(step, option, attrs, customFlags) {
943-
self.Logger.warning(
944-
'mParticle.logCheckout is deprecated, please use mParticle.logProductAction instead'
945-
);
947+
logDeprecatedApiUsage(self, {
948+
methodName: 'mParticle.logCheckout',
949+
warningMessage: 'mParticle.logCheckout is deprecated, please use mParticle.logProductAction instead',
950+
});
946951

947952
if (!self._Store.isInitialized) {
948953
self.ready(function() {
@@ -1020,9 +1025,10 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
10201025
attrs,
10211026
customFlags
10221027
) {
1023-
self.Logger.warning(
1024-
'mParticle.logPurchase is deprecated, please use mParticle.logProductAction instead'
1025-
);
1028+
logDeprecatedApiUsage(self, {
1029+
methodName: 'mParticle.logPurchase',
1030+
warningMessage: 'mParticle.logPurchase is deprecated, please use mParticle.logProductAction instead',
1031+
});
10261032
if (!self._Store.isInitialized) {
10271033
self.ready(function() {
10281034
self.eCommerce.logPurchase(
@@ -1132,9 +1138,10 @@ export default function mParticleInstance(this: IMParticleWebSDKInstance, instan
11321138
attrs,
11331139
customFlags
11341140
) {
1135-
self.Logger.warning(
1136-
'mParticle.logRefund is deprecated, please use mParticle.logProductAction instead'
1137-
);
1141+
logDeprecatedApiUsage(self, {
1142+
methodName: 'mParticle.logRefund',
1143+
warningMessage: 'mParticle.logRefund is deprecated, please use mParticle.logProductAction instead',
1144+
});
11381145
if (!self._Store.isInitialized) {
11391146
self.ready(function() {
11401147
self.eCommerce.logRefund(
@@ -1741,4 +1748,3 @@ function queueIfNotInitialized(func, self) {
17411748
});
17421749
return true;
17431750
}
1744-
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { ErrorCodes, ILoggingService } from './types';
2+
3+
interface DeprecatedApiLoggerInstance {
4+
Logger?: {
5+
warning(message: string): void;
6+
};
7+
_LoggingDispatcher?: ILoggingService;
8+
}
9+
10+
interface DeprecatedApiUsage {
11+
methodName: string;
12+
warningMessage: string;
13+
}
14+
15+
export function logDeprecatedApiUsage(
16+
mpInstance: DeprecatedApiLoggerInstance,
17+
usage: DeprecatedApiUsage
18+
): void {
19+
mpInstance.Logger?.warning(usage.warningMessage);
20+
mpInstance._LoggingDispatcher?.log({
21+
message: usage.methodName,
22+
code: ErrorCodes.MP_DEPRECATED_METHOD_USAGE,
23+
});
24+
}

src/reporting/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export const ErrorCodes = {
66
IDENTITY_REQUEST: 'IDENTITY_REQUEST',
77
IDENTITY_MISMATCH: 'IDENTITY_MISMATCH',
88
ROKT_KIT_ATTACHED: 'ROKT_KIT_ATTACHED',
9+
MP_DEPRECATED_METHOD_USAGE: 'MP_DEPRECATED_METHOD_USAGE',
910
} as const;
1011

1112
export type ErrorCodes = valueof<typeof ErrorCodes>;

src/sessionManager.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { generateDeprecationMessage } from './utils';
66
import { IMParticleUser } from './identity-user-interfaces';
77
import { IMParticleWebSDKInstance } from './mp-instance';
88
import { hasIdentityRequestChanged, hasExplicitIdentifier } from './identity-utils';
9+
import { logDeprecatedApiUsage } from './reporting/deprecatedApiLogger';
910

1011
const { Messages } = Constants;
1112

@@ -67,13 +68,14 @@ export default function SessionManager(
6768
};
6869

6970
this.getSession = function (): string {
70-
mpInstance.Logger.warning(
71-
generateDeprecationMessage(
71+
logDeprecatedApiUsage(mpInstance, {
72+
methodName: 'SessionManager.getSession()',
73+
warningMessage: generateDeprecationMessage(
7274
'SessionManager.getSession()',
7375
false,
7476
'SessionManager.getSessionId()'
75-
)
76-
);
77+
),
78+
});
7779
return this.getSessionId();
7880
};
7981

test/jest/reportingLogger.spec.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ErrorReportingDispatcher } from '../../src/reporting/errorReportingDispatcher';
22
import { LoggingDispatcher } from '../../src/reporting/loggingDispatcher';
33
import { IErrorReportingService, ILoggingService, ISDKError, ISDKLogEntry, WSDKErrorSeverity, ErrorCodes } from '../../src/reporting/types';
4+
import { logDeprecatedApiUsage } from '../../src/reporting/deprecatedApiLogger';
45

56
describe('ErrorReportingDispatcher', () => {
67
let dispatcher: ErrorReportingDispatcher;
@@ -128,3 +129,44 @@ describe('LoggingDispatcher', () => {
128129
expect(service2.log).toHaveBeenCalledWith(entry);
129130
});
130131
});
132+
133+
describe('logDeprecatedApiUsage', () => {
134+
it('keeps the console warning and emits structured usage details', () => {
135+
const warning = jest.fn();
136+
const log = jest.fn();
137+
138+
logDeprecatedApiUsage(
139+
{
140+
Logger: { warning },
141+
_LoggingDispatcher: { log },
142+
},
143+
{
144+
methodName: 'mParticle.logCheckout',
145+
warningMessage: 'mParticle.logCheckout is deprecated, please use mParticle.logProductAction instead',
146+
}
147+
);
148+
149+
expect(warning).toHaveBeenCalledWith(
150+
'mParticle.logCheckout is deprecated, please use mParticle.logProductAction instead'
151+
);
152+
expect(log).toHaveBeenCalledWith({
153+
message: 'mParticle.logCheckout',
154+
code: ErrorCodes.MP_DEPRECATED_METHOD_USAGE,
155+
});
156+
});
157+
158+
it('does not require a registered logging dispatcher', () => {
159+
const warning = jest.fn();
160+
161+
expect(() => logDeprecatedApiUsage(
162+
{ Logger: { warning } },
163+
{
164+
methodName: 'onUserAlias',
165+
warningMessage: 'onUserAlias is a deprecated method and will be removed in future releases.',
166+
}
167+
)).not.toThrow();
168+
expect(warning).toHaveBeenCalledWith(
169+
'onUserAlias is a deprecated method and will be removed in future releases.'
170+
);
171+
});
172+
});

0 commit comments

Comments
 (0)