/
transform.js
69 lines (61 loc) · 1.79 KB
/
transform.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
const { InstrumentationError, isDefined } = require('@rudderstack/integrations-lib');
const {
getHashFromArray,
getFieldValueFromMessage,
simpleProcessRouterDest,
defaultRequestConfig,
} = require('../../util');
const { EventType } = require('../../../constants');
function responseBuilderSimple(message, destination) {
const payload = {};
/**
* "columnFieldsMapping": [
{
"from": "marketoColumnName",
"to": "traitsName"
},
{
"from": "firstName",
"to": "name"
}
]
*/
const fieldHashmap = getHashFromArray(
destination.Config.columnFieldsMapping,
'to',
'from',
false,
);
const traits = getFieldValueFromMessage(message, 'traits');
// columnNames with trait's values from rudder payload
Object.keys(fieldHashmap).forEach((key) => {
const val = traits[fieldHashmap[key]];
if (isDefined(val)) {
payload[key] = val;
}
});
const response = defaultRequestConfig();
response.body.JSON = payload;
response.endpoint = '/fileUpload';
return response;
}
const processEvent = (message, destination) => {
if (!message.type) {
throw new InstrumentationError('Event type is required');
}
const messageType = message.type.toLowerCase();
let response;
// Only identify type of events are processed
if (messageType === EventType.IDENTIFY) {
response = responseBuilderSimple(message, destination);
} else {
throw new InstrumentationError(`Event type ${messageType} is not supported`);
}
return response;
};
const process = (event) => processEvent(event.message, event.destination);
const processRouterDest = async (inputs, reqMetadata) => {
const respList = await simpleProcessRouterDest(inputs, process, reqMetadata);
return respList;
};
module.exports = { process, processRouterDest };