Skip to content

Commit 8bb7426

Browse files
committed
feat: identify and track for loops
1 parent 57fc4fe commit 8bb7426

File tree

2 files changed

+425
-0
lines changed

2 files changed

+425
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
bindings:
2+
- name: EventType
3+
path: ../../../../constants
4+
- path: ../../bindings/jsontemplate
5+
exportAll: true
6+
- name: removeUndefinedAndNullValues
7+
path: ../../../../v0/util
8+
9+
steps:
10+
- name: messageType
11+
template: |
12+
.message.type.toLowerCase();
13+
14+
- name: validateInput
15+
template: |
16+
$.assert(.message.type, "message Type is not present. Aborting message.");
17+
$.assert(.message.type in {{$.EventType.([.TRACK, .IDENTIFY])}},
18+
"message type " + .message.type + " is not supported");
19+
20+
- name: validateIdentifyEmail
21+
condition: $.outputs.messageType === {{$.EventType.IDENTIFY}}
22+
template: |
23+
console.log(.message.context.traits);
24+
$.assert(.message.context.traits.email, "email is required. Aborting");
25+
26+
- name: validateTrackIdentifier
27+
condition: $.outputs.messageType === {{$.EventType.TRACK}}
28+
template: |
29+
const userId = .message.({{{{$.getGenericPaths("userIdOnly")}}}});
30+
$.assert(.message.context.traits?.email || userId,
31+
"Either email or userId is required. Aborting");
32+
33+
- name: validateEventName
34+
condition: $.outputs.messageType === {{$.EventType.TRACK}}
35+
template: |
36+
$.assert(.message.event, "event is required for track call")
37+
38+
- name: prepareContext
39+
template: |
40+
$.context.messageType = .message.type.toLowerCase();
41+
$.context.payload = {};
42+
$.context.finalHeaders = {
43+
"authorization": "Bearer " + .destination.Config.apiKey,
44+
"content-type": "application/json"
45+
};
46+
47+
- name: identifyPayload
48+
condition: $.outputs.messageType === {{$.EventType.IDENTIFY}}
49+
template: |
50+
$.context.endpoint = "https://app.loops.so/api/v1/contacts/update";
51+
const payload = {}
52+
Object.assign(payload, .message.context.traits);
53+
payload.userId = .message.userId;
54+
$.context.payload = payload;
55+
56+
- name: trackPayload
57+
condition: $.outputs.messageType === {{$.EventType.TRACK}}
58+
template: |
59+
$.context.endpoint = "https://app.loops.so/api/v1/events/send";
60+
const payload = {}
61+
Object.assign(payload, .message.context.traits);
62+
payload.userId = .message.userId;
63+
payload.eventName = .message.event;
64+
payload.eventProperties = .message.properties;
65+
$.context.payload = payload;

0 commit comments

Comments
 (0)