Skip to content

Commit 808f959

Browse files
authored
Merge pull request #89 from scheduleonce/technocrats/ONCEHUB-94733
feature: ONCEHUB-94733: Block PAGE calls for mixpanel destination
2 parents 25c66c5 + f2702a1 commit 808f959

File tree

2 files changed

+88
-63
lines changed

2 files changed

+88
-63
lines changed

src/services/destination/preTransformation.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,18 @@ export class DestinationPreTransformationService {
1313
(event: ProcessorTransformationRequest | RouterTransformationRequestData) => {
1414
// look for traits under every object in file v0\util\data\GenericFieldMapping.json like
1515
// "traits": ["traits", "context.traits"]
16-
const destination = event?.destination?.DestinationDefinition?.Name;
16+
const destination = event?.destination?.DestinationDefinition?.Name;
1717
let parsedEvent = oncehubTransformer(destination, event);
18-
parsedEvent.request = { query: reqParams };
18+
if (parsedEvent) {
19+
parsedEvent.request = { query: reqParams };
20+
}
1921
return parsedEvent;
2022
},
2123
);
22-
return eventsProcessed;
24+
// Filter out any undefined or null events after processing
25+
// This is important to ensure that we only return valid events to the next step in the pipeline
26+
const filteredEvents = eventsProcessed.filter((event: any) => !!event);
27+
28+
return filteredEvents;
2329
}
2430
}
Lines changed: 79 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,93 @@
11
const { EventType } = require('../constants');
22

33
const getPIIDestinationList = () => {
4-
return (process.env.WHITELIST_PII_DESTINATION || "customerio")
5-
.trim()
6-
.split(",");
7-
};
8-
9-
const doesEventContainsTraits = event => {
10-
return event && event.message && event.message.traits;
11-
};
12-
13-
const doesEventContainContextTraits = event => {
14-
return event && event.message && event.message.context && event.message.context.traits;
15-
};
4+
return (process.env.WHITELIST_PII_DESTINATION || 'customerio').trim().split(',');
5+
};
6+
7+
const doesEventContainsTraits = (event) => {
8+
return event && event.message && event.message.traits;
9+
};
10+
11+
const doesEventContainContextTraits = (event) => {
12+
return event && event.message && event.message.context && event.message.context.traits;
13+
};
14+
15+
const getPageEventBlockedDestinationsList = () => {
16+
return (process.env.BLOCKED_PAGE_DESTINATIONS || 'mp').trim().split(',');
17+
};
1618

1719
const handleFirstLoginGA4Property = (destination, event, traits) => {
1820
// delete firstLoginGA4 property from traits when destination is not GA4
1921
if (destination !== 'ga4') {
2022
delete traits.firstLoginGA4;
2123
return;
22-
}
24+
}
2325

2426
// add firstLoginGA4 property in traits when Identify call is for GA4 destination
2527
if (event.message.type === EventType.IDENTIFY) {
2628
traits.firstLoginGA4 = true;
2729
traits.value = 0;
28-
}
30+
}
31+
};
2932

30-
};
31-
32-
const changeDateFormatForCustomerio = (contextTraitsPresent, eventTraitsPresent,checkDestinationList, event) => {
33-
if (checkDestinationList) {
34-
if (contextTraitsPresent) {
35-
// eslint-disable-next-line no-param-reassign
36-
event.message.context.traits.accountCreatedDate = Math.floor(
37-
Date.parse(event.message.context.traits.accountCreatedDate) / 1000,
38-
);
39-
}
40-
if (eventTraitsPresent) {
41-
// eslint-disable-next-line no-param-reassign
42-
event.message.traits.accountCreatedDate = Math.floor(
43-
Date.parse(event.message.traits.accountCreatedDate) / 1000,
44-
);
45-
}
46-
}
47-
};
48-
49-
const oncehubTransformer = (destination, event) => {
50-
destination= destination.toString().toLowerCase();
51-
const contextTraitsPresent = doesEventContainContextTraits(event);
52-
const eventTraitsPresent = doesEventContainsTraits(event);
53-
const checkDestinationList=getPIIDestinationList().includes(destination);
54-
changeDateFormatForCustomerio(contextTraitsPresent, eventTraitsPresent,checkDestinationList,event);
55-
56-
if (!checkDestinationList && eventTraitsPresent) {
57-
// eslint-disable-next-line no-param-reassign
58-
delete event.message.traits.email;
33+
const changeDateFormatForCustomerio = (
34+
contextTraitsPresent,
35+
eventTraitsPresent,
36+
checkDestinationList,
37+
event,
38+
) => {
39+
if (checkDestinationList) {
40+
if (contextTraitsPresent) {
5941
// eslint-disable-next-line no-param-reassign
60-
delete event.message.traits.firstName;
42+
event.message.context.traits.accountCreatedDate = Math.floor(
43+
Date.parse(event.message.context.traits.accountCreatedDate) / 1000,
44+
);
45+
}
46+
if (eventTraitsPresent) {
6147
// eslint-disable-next-line no-param-reassign
62-
delete event.message.traits.lastName;
48+
event.message.traits.accountCreatedDate = Math.floor(
49+
Date.parse(event.message.traits.accountCreatedDate) / 1000,
50+
);
51+
}
52+
}
53+
};
54+
55+
const oncehubTransformer = (destination, event) => {
56+
destination = destination.toString().toLowerCase();
57+
const contextTraitsPresent = doesEventContainContextTraits(event);
58+
const eventTraitsPresent = doesEventContainsTraits(event);
59+
const checkDestinationList = getPIIDestinationList().includes(destination);
60+
const checkPageEventBlockedDestination =
61+
getPageEventBlockedDestinationsList().includes(destination);
62+
if (event.message.type === EventType.PAGE && checkPageEventBlockedDestination) {
63+
// eslint-disable-next-line no-param-reassign
64+
return null;
65+
}
66+
67+
changeDateFormatForCustomerio(
68+
contextTraitsPresent,
69+
eventTraitsPresent,
70+
checkDestinationList,
71+
event,
72+
);
73+
74+
if (!checkDestinationList && eventTraitsPresent) {
75+
// eslint-disable-next-line no-param-reassign
76+
delete event.message.traits.email;
77+
// eslint-disable-next-line no-param-reassign
78+
delete event.message.traits.firstName;
79+
// eslint-disable-next-line no-param-reassign
80+
delete event.message.traits.lastName;
6381

6482
if (contextTraitsPresent) {
65-
// eslint-disable-next-line no-param-reassign
66-
delete event.message.context.traits.email;
67-
// eslint-disable-next-line no-param-reassign
68-
delete event.message.context.traits.firstName;
69-
// eslint-disable-next-line no-param-reassign
70-
delete event.message.context.traits.lastName;
71-
}
83+
// eslint-disable-next-line no-param-reassign
84+
delete event.message.context.traits.email;
85+
// eslint-disable-next-line no-param-reassign
86+
delete event.message.context.traits.firstName;
87+
// eslint-disable-next-line no-param-reassign
88+
delete event.message.context.traits.lastName;
7289
}
90+
}
7391

7492
// Adding check for firstLoginGA4 property
7593
if (eventTraitsPresent) {
@@ -80,11 +98,12 @@ const handleFirstLoginGA4Property = (destination, event, traits) => {
8098
handleFirstLoginGA4Property(destination, event, event.message.context.traits);
8199
}
82100

83-
// eslint-disable-next-line no-console
84-
// if(doesEventContainsTraits(event)) console.log("event log=>destination : ", JSON.stringify(destination), " , ==> event traits : ", JSON.stringify(event.message.traits), " , ==> event here : ",JSON.stringify(event));
85-
return event;
86-
};
87-
88-
module.exports = {
89-
oncehubTransformer
90-
};
101+
// eslint-disable-next-line no-console
102+
// if(doesEventContainsTraits(event)) console.log("event log=>destination : ", JSON.stringify(destination), " , ==> event traits : ", JSON.stringify(event.message.traits), " , ==> event here : ",JSON.stringify(event));
103+
104+
return event;
105+
};
106+
107+
module.exports = {
108+
oncehubTransformer,
109+
};

0 commit comments

Comments
 (0)