1
+ bindings :
2
+ - name : EventType
3
+ path : ../../../../constants
4
+ - path : ../../bindings/jsontemplate
5
+ exportAll : true
6
+ - name : removeUndefinedAndNullValues
7
+ path : ../../../../v0/util
8
+ - path : ./utils
9
+
10
+ steps :
11
+ - name : validateInput
12
+ template : |
13
+ $.assert(.message.type, "message Type is not present. Aborting message.");
14
+ $.assert(.message.type in {{$.EventType.([.TRACK, .PAGE, .SCREEN, .IDENTIFY, .GROUP])}},
15
+ "message type " + .message.type + " is not supported");
16
+
17
+ - name : prepareContext
18
+ template : |
19
+ $.context.messageType = .message.type.toLowerCase();
20
+ $.context.payload = {
21
+ "type": $.context.messageType
22
+ };
23
+ $.context.finalHeaders = {
24
+ "authorization": "Basic " + .destination.Config.apiKey,
25
+ "content-type": "application/json"
26
+ };
27
+ $.context.endpoint = $.endpointUrl(.destination.Config.apiKey);
28
+
29
+ - name : trackPayload
30
+ condition : $.context.messageType == "track"
31
+ template : |
32
+ $.context.payload.event = .message.event;
33
+ $.context.payload.userId = .message.userId;
34
+ $.context.payload.timestamp = .message.timestamp;
35
+
36
+ - name : pagePayload
37
+ condition : $.context.messageType == "page"
38
+ template : |
39
+ $.context.payload.userId = .message.userId;
40
+ $.context.payload.name = .message.event;
41
+ $.context.payload.timestamp = .message.timestamp;
42
+
43
+ - name : screenPayload
44
+ condition : $.context.messageType == "screen"
45
+ template : |
46
+ $.context.payload.userId = .message.userId;
47
+ $.context.payload.name = .message.event;
48
+ $.context.payload.timestamp = .message.timestamp;
49
+
50
+ - name : identifyPayload
51
+ condition : $.context.messageType == "identify"
52
+ template : |
53
+ $.context.payload.userId = .message.userId;
54
+ $.context.payload.traits = .message.traits ?? .message.context.traits;
55
+ # $.context.payload.traits.email = .message.traits.email;
56
+ # $.context.payload.traits.name = .message.traits.name;
57
+ # $.context.payload.traits.role = .message.traits.role;
58
+ # $.context.payload.traits.createdAt = .message.traits.createdAt;
59
+ # $.context.payload.traits.accountStatus = .message.traits.accountStatus;
60
+
61
+ - name : groupPayload
62
+ condition : $.context.messageType == "group"
63
+ template : |
64
+ $.context.payload.anonymousId = .message.anonymousId;
65
+ $.context.payload.userId = .message.userId;
66
+ $.context.payload.groupId = .message.groupId;
67
+ $.context.payload.name = .message.event;
68
+ $.context.payload.timestamp = .message.timestamp;
69
+ $.context.payload.traits = .message.traits ?? .message.context.traits;
70
+ # $.context.payload.traits.name = .message.traits.name;
71
+ # $.context.payload.traits.createdAt = .message.traits.createdAt;
72
+ # $.context.payload.traits.status = .message.traits.status;
73
+ # $.context.payload.traits.plan = .message.traits.plan;
74
+ # $.context.payload.traits.mrr = .message.traits.mrr;
75
+
76
+ - name : validateTimestamp
77
+ template : |
78
+ $.assert($.context.payload.timestamp, "timestamp is required for all calls")
79
+
80
+ - name : validateTrackPayload
81
+ condition : $.context.messageType == "track"
82
+ template : |
83
+ $.assert($.context.payload.event, "event is required for track call")
84
+ $.assert($.context.payload.userId, "userId is required for track call")
85
+
86
+ - name : validatePagePayload
87
+ condition : $.context.messageType == "page"
88
+ template : |
89
+ $.assert($.context.payload.userId, "userId is required for page call")
90
+
91
+ - name : validateScreenPayload
92
+ condition : $.context.messageType == "screen"
93
+ template : |
94
+ $.assert($.context.payload.userId, "userId is required for screen call")
95
+ $.assert($.context.payload.timestamp, "timestamp is required for screen call")
96
+
97
+ - name : validateIdentifyPayload
98
+ condition : $.context.messageType == "identify"
99
+ template : |
100
+ $.assert($.context.payload.userId, "userId is required for track call")
101
+ $.assert($.context.payload.timestamp, "timestamp is required for screen call")
102
+
103
+ - name : validateGroupyPayload
104
+ condition : $.context.messageType == "group"
105
+ template : |
106
+ $.assert($.context.payload.userId, "userId is required for track call")
107
+ $.assert($.context.payload.timestamp, "timestamp is required for screen call")
108
+
109
+ - name : cleanPayload
110
+ template : |
111
+ $.context.payload = $.removeUndefinedAndNullValues($.context.payload);
112
+
113
+ - name : buildResponseForProcessTransformation
114
+ template : |
115
+ $.context.payload.({
116
+ "body": {
117
+ "JSON": .,
118
+ "JSON_ARRAY": {},
119
+ "XML": {},
120
+ "FORM": {}
121
+ },
122
+ "version": "1",
123
+ "type": "REST",
124
+ "method": "POST",
125
+ "endpoint": $.context.endpoint,
126
+ "headers": $.context.finalHeaders,
127
+ "params": {},
128
+ "files": {}
129
+ })
0 commit comments