@metarouter/ajs-starter-kit 1.0.150 → 1.0.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.dist/amazon-dsp-events/connection.etag.json +1 -0
  2. package/.dist/amazon-dsp-events/connection.json +78 -0
  3. package/.dist/amazon-dsp-events/kit.etag.json +1 -0
  4. package/.dist/amazon-dsp-events/metadata.json +21 -0
  5. package/.dist/amazon-dsp-events/playbook.etag.json +1 -0
  6. package/.dist/amazon-dsp-events/playbook.json +306 -0
  7. package/.dist/connection-schemas.json +29 -1
  8. package/.dist/engage-front/kit.etag.json +1 -1
  9. package/.dist/engage-front/metadata.json +4 -0
  10. package/.dist/engage-front/playbook.etag.json +1 -1
  11. package/.dist/engage-front/playbook.json +2 -2
  12. package/.dist/eulerian/connection.etag.json +1 -0
  13. package/.dist/eulerian/connection.json +30 -0
  14. package/.dist/eulerian/kit.etag.json +1 -0
  15. package/.dist/eulerian/metadata.json +21 -0
  16. package/.dist/eulerian/playbook.etag.json +1 -0
  17. package/.dist/eulerian/playbook.json +156 -0
  18. package/.dist/google-ad-words/kit.etag.json +1 -1
  19. package/.dist/google-ads/kit.etag.json +1 -1
  20. package/.dist/google-ads/metadata.json +4 -0
  21. package/.dist/google-ads/playbook.etag.json +1 -1
  22. package/.dist/google-ads/playbook.json +11 -1
  23. package/.dist/rtb-house/connection.etag.json +1 -1
  24. package/.dist/rtb-house/connection.json +4 -5
  25. package/.dist/rtb-house/kit.etag.json +1 -1
  26. package/.dist/rtb-house/metadata.json +4 -0
  27. package/.dist/rtb-house/playbook.etag.json +1 -1
  28. package/.dist/rtb-house/playbook.json +1 -1
  29. package/.dist/ttd-conversions/kit.etag.json +1 -1
  30. package/.dist/ttd-conversions/metadata.json +4 -0
  31. package/.dist/ttd-conversions/playbook.etag.json +1 -1
  32. package/.dist/ttd-conversions/playbook.json +3 -7
  33. package/.dist/wallaroo/connection.etag.json +1 -0
  34. package/.dist/wallaroo/connection.json +65 -0
  35. package/.dist/wallaroo/kit.etag.json +1 -0
  36. package/.dist/wallaroo/metadata.json +25 -0
  37. package/.dist/wallaroo/playbook.etag.json +1 -0
  38. package/.dist/wallaroo/playbook.json +40 -0
  39. package/README.md +16 -12
  40. package/index.js +33 -0
  41. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ "f339f0ba4c678c5e3d7ec3641740ce4e -"
@@ -0,0 +1,78 @@
1
+ {
2
+ "params": [
3
+ {
4
+ "name": "BASE_URL",
5
+ "exampleValue": "my-base-url",
6
+ "defaultValue": "https://advertising-api.amazon.com"
7
+ },
8
+ {
9
+ "name": "ADVERTISER_ID",
10
+ "exampleValue": "my-advertiser-id"
11
+ },
12
+ {
13
+ "name": "CLIENT_ID",
14
+ "exampleValue": "my-client-id"
15
+ },
16
+ {
17
+ "name": "CLIENT_SECRET",
18
+ "exampleValue": "my-client-secret"
19
+ },
20
+ {
21
+ "name": "PROFILE_ID",
22
+ "exampleValue": "my-profile-id"
23
+ },
24
+ {
25
+ "name": "REFRESH_TOKEN",
26
+ "exampleValue": "my-refresh-token"
27
+ }
28
+ ],
29
+ "default": {
30
+ "endpoint": "$$BASE_URL$$/adsApi/v1/create/events",
31
+ "method": "POST",
32
+ "headers": [
33
+ {
34
+ "key": "Content-Type",
35
+ "value": "application/json"
36
+ },
37
+ {
38
+ "key": "Amazon-Ads-ClientId",
39
+ "value": "$$CLIENT_ID$$"
40
+ },
41
+ {
42
+ "key": "Amazon-Ads-AccountId",
43
+ "value": "$$ADVERTISER_ID$$"
44
+ }
45
+ ],
46
+ "batchSize": 250,
47
+ "oauth2Auth": {
48
+ "request": {
49
+ "body": [
50
+ {
51
+ "key": "grant_type",
52
+ "value": "refresh_token"
53
+ },
54
+ {
55
+ "key": "client_id",
56
+ "value": "$$CLIENT_ID$$"
57
+ },
58
+ {
59
+ "key": "client_secret",
60
+ "value": "$$CLIENT_SECRET$$"
61
+ },
62
+ {
63
+ "key": "refresh_token",
64
+ "value": "$$REFRESH_TOKEN$$"
65
+ }
66
+ ],
67
+ "contentType": "application/x-www-form-urlencoded",
68
+ "method": "POST",
69
+ "url": "https://api.amazon.com/auth/o2/token"
70
+ },
71
+ "responseAccessTokenKey": "access_token"
72
+ },
73
+ "transform": {
74
+ "lang": "lua",
75
+ "body": "request.body = { events = batch }\nreturn request"
76
+ }
77
+ }
78
+ }
@@ -0,0 +1 @@
1
+ "f377639137190ba2c3cf2eeb0ced1d98 -"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Amazon DSP - Events",
6
+ "description": "Amazon DSP (Demand-Side Platform) is a programmatic advertising solution that allows advertisers to purchase video, audio, and display ad placements both on Amazon-owned properties and across a network of third-party sites and apps",
7
+ "logo": "https://cdn.metarouter.io/amazon-dsp-capi.png",
8
+ "color": "#FF9900",
9
+ "eventSource": {
10
+ "isAndroidApp": false,
11
+ "isIosApp": false,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-12-03T21:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nAmazon DSP - Events initial release"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "ecf5179e82538902140b6c5b95a003f4 -"
@@ -0,0 +1,306 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "global": {
4
+ "filters": [
5
+ {
6
+ "byConditions": {
7
+ "action": "allow",
8
+ "when": {
9
+ "matchesAny": {
10
+ "conditions": [
11
+ {
12
+ "inputPathExists": {
13
+ "inputPath": "traits.email"
14
+ }
15
+ },
16
+ {
17
+ "inputPathExists": {
18
+ "inputPath": "userId"
19
+ }
20
+ }
21
+ ]
22
+ }
23
+ }
24
+ }
25
+ }
26
+ ],
27
+ "enrichments": [
28
+ {
29
+ "staticString": "SERVER_TO_SERVER",
30
+ "outputKey": "eventDescription.eventIngestionMethod"
31
+ },
32
+ {
33
+ "staticString": "",
34
+ "outputKey": "consent.tcf"
35
+ },
36
+ {
37
+ "staticString": "",
38
+ "outputKey": "consent.gpp"
39
+ }
40
+ ],
41
+ "mappings": [
42
+ {
43
+ "inputKey": "input",
44
+ "outputKey": "matchKeys",
45
+ "transforms": [
46
+ {
47
+ "expression": {
48
+ "body": "local email = input.traits.email or input.userId\nif email then return {{ values = {TO_SHA256_HASH(LOWER(TRIM(email)))}, type = \"EMAIL\" }} end",
49
+ "lang": "lua"
50
+ }
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "inputKey": "input",
56
+ "outputKey": "countryCode",
57
+ "transforms": [
58
+ {
59
+ "expression": {
60
+ "lang": "lua",
61
+ "body": "if input.traits.address.country ~= nil then\n return SUBSTRING(input.traits.address.country, 0, 2)\nend\nreturn \"US\""
62
+ }
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "inputKey": "context.ip",
68
+ "outputKey": "consent.geo.ipAddress"
69
+ },
70
+ {
71
+ "inputKey": "input",
72
+ "outputKey": "consent.amazonConsent.amznUserData",
73
+ "transforms": [
74
+ {
75
+ "expression": {
76
+ "body": "consent = input.context.consent.optOut.C0004\nif consent then\n return \"DENIED\"\nend\nreturn \"GRANTED\"",
77
+ "lang": "lua"
78
+ }
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "inputKey": "input",
84
+ "outputKey": "consent.amazonConsent.amznAdStorage",
85
+ "transforms": [
86
+ {
87
+ "expression": {
88
+ "body": "consent = input.context.consent.optOut.C0004\nif consent then\n return \"DENIED\"\nend\nreturn \"GRANTED\"",
89
+ "lang": "lua"
90
+ }
91
+ }
92
+ ]
93
+ },
94
+ {
95
+ "inputKey": "input",
96
+ "outputKey": "eventDescription.eventSource",
97
+ "transforms": [
98
+ {
99
+ "expression": {
100
+ "body": "local deviceType = LOWER(input.context.device.type)\nif input.context.device.type == 'ios' then\n return \"IOS\"\nelseif input.context.device.type == 'android' then\n return \"ANDROID\"\nend\nreturn \"WEBSITE\"",
101
+ "lang": "lua"
102
+ }
103
+ }
104
+ ]
105
+ },
106
+ {
107
+ "inputKey": "input",
108
+ "outputKey": "eventTime",
109
+ "transforms": [
110
+ {
111
+ "expression": {
112
+ "lang": "lua",
113
+ "body": "return input.timestamp or input.originalTimestamp or input.sentAt"
114
+ }
115
+ }
116
+ ]
117
+ },
118
+ {
119
+ "inputKey": "messageId",
120
+ "outputKey": "eventId"
121
+ },
122
+ {
123
+ "inputKey": "input",
124
+ "outputKey": "eventDescription.name",
125
+ "transforms": [
126
+ {
127
+ "expression": {
128
+ "lang": "lua",
129
+ "body": "if (input.type == \"track\") then return REPLACE(LOWER(input.event), \" \", \"_\") end\nreturn input.type"
130
+ }
131
+ }
132
+ ]
133
+ }
134
+ ]
135
+ },
136
+ "eventSpecific": {
137
+ "page": {
138
+ "enrichments": [
139
+ {
140
+ "staticString": "PAGE_VIEW",
141
+ "outputKey": "eventDescription.conversionType"
142
+ },
143
+ {
144
+ "staticString": "ADD_DATA_SET_NAME_HERE",
145
+ "outputKey": "eventDescription.dataSetName"
146
+ }
147
+ ]
148
+ },
149
+ "checkout_started": {
150
+ "enrichments": [
151
+ {
152
+ "staticString": "CHECKOUT",
153
+ "outputKey": "eventDescription.conversionType"
154
+ },
155
+ {
156
+ "staticString": "ADD_DATA_SET_NAME_HERE",
157
+ "outputKey": "eventDescription.dataSetName"
158
+ }
159
+ ]
160
+ },
161
+ "order_completed": {
162
+ "enrichments": [
163
+ {
164
+ "staticString": "OFF_AMAZON_PURCHASES",
165
+ "outputKey": "eventDescription.conversionType"
166
+ },
167
+ {
168
+ "staticString": "ADD_DATA_SET_NAME_HERE",
169
+ "outputKey": "eventDescription.dataSetName"
170
+ }
171
+ ],
172
+ "mappings": [
173
+ {
174
+ "inputKey": "input",
175
+ "outputKey": "value",
176
+ "transforms": [
177
+ {
178
+ "expression": {
179
+ "lang": "lua",
180
+ "body": "return TOTAL_VALUE(input.properties.products)"
181
+ }
182
+ }
183
+ ]
184
+ },
185
+ {
186
+ "inputKey": "properties.currency",
187
+ "outputKey": "currencyCode",
188
+ "transforms": [
189
+ {
190
+ "modifyString": "uppercase"
191
+ }
192
+ ],
193
+ "defaultString": "USD"
194
+ },
195
+ {
196
+ "inputKey": "input",
197
+ "outputKey": "unitsSold",
198
+ "transforms": [
199
+ {
200
+ "expression": {
201
+ "lang": "lua",
202
+ "body": "return SUM(MAP(input.properties.products, function (p) return p.quantity or 1 end))"
203
+ }
204
+ }
205
+ ]
206
+ }
207
+ ]
208
+ },
209
+ "product_added": {
210
+ "enrichments": [
211
+ {
212
+ "staticString": "ADD_TO_SHOPPING_CART",
213
+ "outputKey": "eventDescription.conversionType"
214
+ },
215
+ {
216
+ "staticString": "ADD_DATA_SET_NAME_HERE",
217
+ "outputKey": "eventDescription.dataSetName"
218
+ }
219
+ ]
220
+ },
221
+ "product_removed": {
222
+ "enrichments": [
223
+ {
224
+ "staticString": "OTHER",
225
+ "outputKey": "eventDescription.conversionType"
226
+ },
227
+ {
228
+ "staticString": "ADD_DATA_SET_NAME_HERE",
229
+ "outputKey": "eventDescription.dataSetName"
230
+ }
231
+ ]
232
+ },
233
+ "product_clicked": {
234
+ "enrichments": [
235
+ {
236
+ "staticString": "OTHER",
237
+ "outputKey": "eventDescription.conversionType"
238
+ },
239
+ {
240
+ "staticString": "ADD_DATA_SET_NAME_HERE",
241
+ "outputKey": "eventDescription.dataSetName"
242
+ }
243
+ ]
244
+ },
245
+ "product_list_viewed": {
246
+ "enrichments": [
247
+ {
248
+ "staticString": "PAGE_VIEW",
249
+ "outputKey": "eventDescription.conversionType"
250
+ },
251
+ {
252
+ "staticString": "ADD_DATA_SET_NAME_HERE",
253
+ "outputKey": "eventDescription.dataSetName"
254
+ }
255
+ ]
256
+ },
257
+ "product_viewed": {
258
+ "enrichments": [
259
+ {
260
+ "staticString": "PAGE_VIEW",
261
+ "outputKey": "eventDescription.conversionType"
262
+ },
263
+ {
264
+ "staticString": "ADD_DATA_SET_NAME_HERE",
265
+ "outputKey": "eventDescription.dataSetName"
266
+ }
267
+ ]
268
+ },
269
+ "cart_viewed": {
270
+ "enrichments": [
271
+ {
272
+ "staticString": "PAGE_VIEW",
273
+ "outputKey": "eventDescription.conversionType"
274
+ },
275
+ {
276
+ "staticString": "ADD_DATA_SET_NAME_HERE",
277
+ "outputKey": "eventDescription.dataSetName"
278
+ }
279
+ ]
280
+ },
281
+ "products_searched": {
282
+ "enrichments": [
283
+ {
284
+ "staticString": "SEARCH",
285
+ "outputKey": "eventDescription.conversionType"
286
+ },
287
+ {
288
+ "staticString": "ADD_DATA_SET_NAME_HERE",
289
+ "outputKey": "eventDescription.dataSetName"
290
+ }
291
+ ]
292
+ }
293
+ },
294
+ "default": {
295
+ "enrichments": [
296
+ {
297
+ "staticString": "OTHER",
298
+ "outputKey": "eventDescription.conversionType"
299
+ },
300
+ {
301
+ "staticString": "ADD_DATA_SET_NAME_HERE",
302
+ "outputKey": "eventDescription.dataSetName"
303
+ }
304
+ ]
305
+ }
306
+ }
@@ -199,6 +199,35 @@
199
199
  "defaultTableOverride": {
200
200
  "type": "string"
201
201
  },
202
+ "fieldOverrides": {
203
+ "type": "array",
204
+ "items": {
205
+ "type": "object",
206
+ "properties": {
207
+ "field": {
208
+ "type": "string"
209
+ },
210
+ "fieldType": {
211
+ "type": "number",
212
+ "description": "0: BIG_QUERY_FIELD_TYPE_UNSPECIFIED; 1: BIG_QUERY_FIELD_TYPE_STRING; 2: BIG_QUERY_FIELD_TYPE_TIMESTAMP",
213
+ "enum": [
214
+ 0,
215
+ 1,
216
+ 2
217
+ ]
218
+ },
219
+ "table": {
220
+ "type": "string"
221
+ }
222
+ },
223
+ "required": [
224
+ "table",
225
+ "field",
226
+ "fieldType"
227
+ ],
228
+ "additionalProperties": false
229
+ }
230
+ },
202
231
  "projectId": {
203
232
  "type": "string"
204
233
  },
@@ -213,7 +242,6 @@
213
242
  }
214
243
  },
215
244
  "required": [
216
- "credentials",
217
245
  "dataset",
218
246
  "projectId",
219
247
  "region"
@@ -1 +1 @@
1
- "d0ac10b67a42773937813707ebe18c93 -"
1
+ "6756f2a83051f41750c07f490fcdeae8 -"
@@ -20,6 +20,10 @@
20
20
  {
21
21
  "date": "2025-11-19T00:00:00.000Z",
22
22
  "note": "Version: 0.2.0\nUpdate playbook with twn_id and attr_cookie."
23
+ },
24
+ {
25
+ "date": "2025-12-10T00:00:00.000Z",
26
+ "note": "Version: 0.3.0\nUpdate campaign/advertiser ID output key"
23
27
  }
24
28
  ]
25
29
  }
@@ -1 +1 @@
1
- "c9b879f5efb6123561407bb59d6a5d59 -"
1
+ "85a4847f98722d5523d76d34cbf674f1 -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.0",
2
+ "version": "0.3.0",
3
3
  "global": {
4
4
  "filters": [
5
5
  {
@@ -31,7 +31,7 @@
31
31
  "enrichments": [
32
32
  {
33
33
  "staticString": "ADD_YOUR_VALUE_HERE",
34
- "outputKey": "ef_[ADD_CAMPAIGN_OR_ADVERTISER]_id"
34
+ "outputKey": "ef_[CHANGE_TO_campaign_OR_advertiser]_id"
35
35
  }
36
36
  ],
37
37
  "mappings": [
@@ -0,0 +1 @@
1
+ "12159a75e6c6da097f1943cfbf37268f -"
@@ -0,0 +1,30 @@
1
+ {
2
+ "params": [
3
+ {
4
+ "name": "ENDPOINT",
5
+ "exampleValue": "my-endpoint"
6
+ }
7
+ ],
8
+ "default": {
9
+ "endpoint": "$$ENDPOINT$$",
10
+ "headers": [
11
+ {
12
+ "key": "Content-Type",
13
+ "value": "application/json"
14
+ },
15
+ {
16
+ "key": "Accept-Encoding",
17
+ "value": "application/json"
18
+ },
19
+ {
20
+ "key": "User-Agent",
21
+ "fromEventKey": "context.userAgent"
22
+ },
23
+ {
24
+ "key": "X-Forwarded-For",
25
+ "fromEventKey": "context.ip"
26
+ }
27
+ ],
28
+ "method": "POST"
29
+ }
30
+ }
@@ -0,0 +1 @@
1
+ "bd423354af5e0f8700130e1813ffddee -"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Eulerian",
6
+ "description": "Eulerian is a French marketing analytics platform focused on attribution, analytics, and activation across web and apps. It unifies customer journeys in real time to help advertisers evaluate channel performance and optimize media decisions, with a strong emphasis on first-party data quality and control.",
7
+ "logo": "https://drive.google.com/file/d/1hyd2C1I1nM9TNkvY_1O5vUD_nr7Uju2P/view",
8
+ "color": "#2b3066",
9
+ "eventSource": {
10
+ "isAndroidApp": true,
11
+ "isIosApp": true,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-12-10T21:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nEulerian initial release"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "03405c2eef992ae1c5d8b5fb215eceac -"
@@ -0,0 +1,156 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "global": {
4
+ "enrichments": [
5
+ {
6
+ "staticString": "metarouter",
7
+ "outputKey": "ereplay-platform"
8
+ }
9
+ ],
10
+ "mappings": [
11
+ {
12
+ "inputKey": "input",
13
+ "outputKey": "eemail",
14
+ "transforms": [
15
+ {
16
+ "expression": {
17
+ "body": "local email = input.traits.email\nif email then return TO_SHA256_HASH(LOWER(TRIM(email))) end",
18
+ "lang": "lua"
19
+ }
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "inputKey": "anonymousId",
25
+ "outputKey": "euidl"
26
+ },
27
+ {
28
+ "inputKey": "userId",
29
+ "outputKey": "uid"
30
+ },
31
+ {
32
+ "inputKey": "context.ip",
33
+ "outputKey": "ereplay-ip"
34
+ },
35
+ {
36
+ "inputKey": "context.userAgent",
37
+ "outputKey": "ereplay-ua"
38
+ },
39
+ {
40
+ "inputKey": "context.page.url",
41
+ "outputKey": "url"
42
+ },
43
+ {
44
+ "inputKey": "context.page.referrer",
45
+ "outputKey": "rf"
46
+ },
47
+ {
48
+ "inputKey": "input",
49
+ "outputKey": "ereplay-time",
50
+ "transforms": [
51
+ {
52
+ "expression": {
53
+ "lang": "lua",
54
+ "body": "return SECONDS_SINCE_EPOCH_FROM_RFC3999(input.timestamp or input.originalTimestamp or input.sentAt)"
55
+ }
56
+ }
57
+ ]
58
+ }
59
+ ]
60
+ },
61
+ "eventSpecific": {
62
+ "order_completed": {
63
+ "enrichments": [
64
+ {
65
+ "staticInt": "1",
66
+ "outputKey": "order"
67
+ }
68
+ ],
69
+ "mappings": [
70
+ {
71
+ "inputKey": "input",
72
+ "outputKey": "amount",
73
+ "transforms": [
74
+ {
75
+ "expression": {
76
+ "lang": "lua",
77
+ "body": "return TOTAL_VALUE(input.properties.products)"
78
+ }
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "inputKey": "properties.currency",
84
+ "outputKey": "currency",
85
+ "transforms": [
86
+ {
87
+ "modifyString": "uppercase"
88
+ }
89
+ ],
90
+ "defaultString": "USD"
91
+ },
92
+ {
93
+ "inputKey": "properties.order_id",
94
+ "outputKey": "ref"
95
+ },
96
+ {
97
+ "inputKey": "input",
98
+ "outputKey": "products",
99
+ "transforms": [
100
+ {
101
+ "expression": {
102
+ "lang": "lua",
103
+ "body": "local properties = input.properties or {}\nlocal products = properties.products or {}\n\nreturn MAP(\n products,\n function(p)\n local qty = tonumber(p.quantity) or 1\n return {\n ref = p.product_id,\n name = p.name,\n quantity = qty,\n amount = TOTAL_VALUE(p)\n }\n end\n)"
104
+ }
105
+ }
106
+ ]
107
+ }
108
+ ]
109
+ },
110
+ "product_added": {
111
+ "enrichments": [
112
+ {
113
+ "staticInt": "1",
114
+ "outputKey": "scart"
115
+ }
116
+ ],
117
+ "mappings": [
118
+ {
119
+ "inputKey": "properties.currency",
120
+ "outputKey": "currency",
121
+ "transforms": [
122
+ {
123
+ "modifyString": "uppercase"
124
+ }
125
+ ],
126
+ "defaultString": "USD"
127
+ },
128
+ {
129
+ "inputKey": "input",
130
+ "outputKey": "products",
131
+ "transforms": [
132
+ {
133
+ "expression": {
134
+ "lang": "lua",
135
+ "body": "local properties = input.properties or {}\nlocal q = tonumber(properties.quantity) or 1\n\nreturn {\n {\n ref = properties.product_id,\n name = properties.name,\n quantity = q,\n amount = TOTAL_VALUE(properties)\n }\n}"
136
+ }
137
+ }
138
+ ]
139
+ }
140
+ ]
141
+ }
142
+ },
143
+ "default": {
144
+ "filters": [
145
+ {
146
+ "byEventNames": {
147
+ "action": "allow",
148
+ "events": [
149
+ "page",
150
+ ""
151
+ ]
152
+ }
153
+ }
154
+ ]
155
+ }
156
+ }
@@ -1 +1 @@
1
- "642c1a302f5400399036457634ec63d5 -"
1
+ "21af8fee9d97d7a46e1811654dd2de87 -"
@@ -1 +1 @@
1
- "c625bbb5aaa6e15791c55a7ef4affa95 -"
1
+ "245bc68e722adf756625f4d772168004 -"
@@ -48,6 +48,10 @@
48
48
  {
49
49
  "date": "2025-10-15T00:00:00.000Z",
50
50
  "note": "Version: 1.3.1\nAdded friendly names to expressions"
51
+ },
52
+ {
53
+ "date": "2025-12-10T00:00:00.000Z",
54
+ "note": "Version: 1.4.0\nAdded consent field"
51
55
  }
52
56
  ]
53
57
  }
@@ -1 +1 @@
1
- "b002eb5bfd4ab0a8e0807c1c840f6538 -"
1
+ "e76f934adb1c3eb51442b004aef8a089 -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.3.1",
2
+ "version": "1.4.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "CUSTOMER_ID",
@@ -38,6 +38,16 @@
38
38
  }
39
39
  }
40
40
  ],
41
+ "enrichments": [
42
+ {
43
+ "staticString": "GRANTED",
44
+ "outputKey": "consent.ad_user_data"
45
+ },
46
+ {
47
+ "staticString": "GRANTED",
48
+ "outputKey": "consent.ad_personalization"
49
+ }
50
+ ],
41
51
  "mappings": [
42
52
  {
43
53
  "inputKey": "input",
@@ -1 +1 @@
1
- "fb8612861d40c9dd11f7e0f43b70c79a -"
1
+ "b4b95f9e4fb9bb3eae025f28e74ef78c -"
@@ -1,14 +1,13 @@
1
1
  {
2
2
  "params": [
3
3
  {
4
- "name": "DATA_CENTER",
5
- "exampleValue": "my-data-center",
6
- "defaultValue": "us",
7
- "description": "Data center. Available options: ams (use for European and African users), asia (use for Asian and Australian users), us (use for North and South American users)."
4
+ "name": "API_ENDPOINT_URL",
5
+ "exampleValue": "my-api-endpoint-url",
6
+ "defaultValue": "https://us.creativecdn.com/partner/omni-metarouter/postbacks?"
8
7
  }
9
8
  ],
10
9
  "default": {
11
- "endpoint": "https://$$DATA_CENTER$$.creativecdn.com/partner/omni-metarouter/postbacks?",
10
+ "endpoint": "$$API_ENDPOINT_URL$$",
12
11
  "method": "POST",
13
12
  "headers": [
14
13
  {
@@ -1 +1 @@
1
- "8dbffa28cd37fdc7e70a48a008b506db -"
1
+ "3f86cf4e3dc9d3d68537a1a8de75df55 -"
@@ -28,6 +28,10 @@
28
28
  {
29
29
  "date": "2025-07-30T00:00:00.000Z",
30
30
  "note": "Version: 0.3.1\nReplaced context.traits with traits."
31
+ },
32
+ {
33
+ "date": "2025-12-03T00:00:00.000Z",
34
+ "note": "Version: 0.4.0\nUpdated endpoint to be a parameter"
31
35
  }
32
36
  ]
33
37
  }
@@ -1 +1 @@
1
- "369a8e8fcf83b3185f8cd0f6a269d070 -"
1
+ "220c7511b69ced2403f1a476f5163532 -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.3.1",
2
+ "version": "0.4.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "PARTNER_KEY",
@@ -1 +1 @@
1
- "5f09e068fa7823d56080f243b7ed4ba2 -"
1
+ "086d3153c5abe8bfc01be66b906f6d32 -"
@@ -32,6 +32,10 @@
32
32
  {
33
33
  "date": "2025-10-15T00:00:00.000Z",
34
34
  "note": "Version: 1.1.1\nAdded friendly names to expressions"
35
+ },
36
+ {
37
+ "date": "2025-12-10T00:00:00.000Z",
38
+ "note": "Version: 1.2.0\nUpdating identifier mappings"
35
39
  }
36
40
  ]
37
41
  }
@@ -1 +1 @@
1
- "134029dfef4c7968698631b1a5699e05 -"
1
+ "59ce5d40960d396392226ea7ad5b631c -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.1",
2
+ "version": "1.2.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "PIXEL_ID",
@@ -48,10 +48,6 @@
48
48
  "inputKey": "context.providers.theTradeDesk.ttd_id",
49
49
  "outputKey": "tdid"
50
50
  },
51
- {
52
- "inputKey": "context.device.advertisingId",
53
- "outputKey": "daid"
54
- },
55
51
  {
56
52
  "inputKey": "context.ip",
57
53
  "outputKey": "client_ip"
@@ -80,8 +76,8 @@
80
76
  "expressions": [
81
77
  {
82
78
  "lang": "lua",
83
- "name": "Mobile Device and TradeDesk ID(s)",
84
- "body": "local result = {}\n\nif input.context.device.type == 'android' then\n result.idfa = input.context.device.advertisingId\nelseif input.context.device.type == 'ios' then\n result.aaid = input.context.device.advertisingId\nend\n\nif input.context.providers.theTradeDesk.ttd_id then\n result.adid = input.context.providers.theTradeDesk.ttd_id\n result.adid_type = \"TDID\"\nend\n\nreturn result"
79
+ "name": "Mobile Advertising ID",
80
+ "body": "local type = LOWER(input.context.device.type)\nlocal advertisingId = input.context.device.advertisingId\n\nif type == 'android' then\n return { idfa = advertisingId }\nelseif type == 'ios' then\n return { aaid = advertisingId }\nelseif advertisingId then\n return { daid = advertisingId }\nend"
85
81
  }
86
82
  ]
87
83
  },
@@ -0,0 +1 @@
1
+ "1fad08db2120c7989c612c7628848f75 -"
@@ -0,0 +1,65 @@
1
+ {
2
+ "params": [
3
+ {
4
+ "name": "ACCESS_TOKEN",
5
+ "exampleValue": "my-access-token"
6
+ },
7
+ {
8
+ "name": "EXTERNAL_INFERENCE_URL",
9
+ "exampleValue": "my-external-inference-url"
10
+ },
11
+ {
12
+ "name": "WALLAROO_URL",
13
+ "exampleValue": "my-wallaroo-url"
14
+ },
15
+ {
16
+ "name": "CONFIDENTIAL_CLIENT_SECRET",
17
+ "exampleValue": "my-confidential-client-secret"
18
+ },
19
+ {
20
+ "name": "CONFIDENTIAL_CLIENT",
21
+ "exampleValue": "my-confidential-client"
22
+ }
23
+ ],
24
+ "default": {
25
+ "endpoint": "$$EXTERNAL_INFERENCE_URL$$",
26
+ "batchSize": 1,
27
+ "method": "POST",
28
+ "headers": [
29
+ {
30
+ "key": "Content-Type",
31
+ "value": "application/json"
32
+ },
33
+ {
34
+ "key": "Authorization",
35
+ "value": "Bearer $$ACCESS_TOKEN$$"
36
+ }
37
+ ],
38
+ "oauth2Auth": {
39
+ "request": {
40
+ "body": [
41
+ {
42
+ "key": "grant_type",
43
+ "value": "client_credentials"
44
+ },
45
+ {
46
+ "key": "client_id",
47
+ "value": "$$CONFIDENTIAL_CLIENT$$"
48
+ },
49
+ {
50
+ "key": "client_secret",
51
+ "value": "$$CONFIDENTIAL_CLIENT_SECRET$$"
52
+ }
53
+ ],
54
+ "contentType": "application/x-www-form-urlencoded",
55
+ "method": "POST",
56
+ "url": "https://$$WALLAROO_URL$$/auth/realms/master/protocol/openid-connect/token"
57
+ },
58
+ "responseAccessTokenKey": "access_token"
59
+ },
60
+ "transform": {
61
+ "lang": "lua",
62
+ "body": "request.body = batch\nreturn request"
63
+ }
64
+ }
65
+ }
@@ -0,0 +1 @@
1
+ "a4050035f6e3b4132bb58d57d221362c -"
@@ -0,0 +1,25 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Wallaroo",
6
+ "description": "Wallaroo is an MLOps platform that provides tools for deploying, managing, and monitoring ML models in production.",
7
+ "logo": "https://cdn.metarouter.io/wallaroo.png",
8
+ "color": "#4B9CD3",
9
+ "eventSource": {
10
+ "isAndroidApp": false,
11
+ "isIosApp": false,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-12-03T00:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nWallaroo initial release"
19
+ },
20
+ {
21
+ "date": "2025-12-10T00:00:00.000Z",
22
+ "note": "Version: 0.1.1\nAdded expression name"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1 @@
1
+ "ff1d631bd1762109bbc0f973e2abdc76 -"
@@ -0,0 +1,40 @@
1
+ {
2
+ "version": "0.1.1",
3
+ "global": {
4
+ "filters": [
5
+ {
6
+ "byEventNames": {
7
+ "action": "allow",
8
+ "events": [
9
+ "identify",
10
+ "page",
11
+ "products_searched",
12
+ "product_list_viewed",
13
+ "product_clicked",
14
+ "product_viewed",
15
+ "product_added",
16
+ "product_removed",
17
+ "cart_viewed",
18
+ "checkout_started",
19
+ "payment_info_entered",
20
+ "order_completed",
21
+ "promotion_clicked",
22
+ "promotion_viewed",
23
+ "product_added_to_wishlist",
24
+ "order_updated",
25
+ "order_refunded",
26
+ "coupon_entered",
27
+ "order_canceled"
28
+ ]
29
+ }
30
+ }
31
+ ],
32
+ "expressions": [
33
+ {
34
+ "lang": "lua",
35
+ "name": "Site and Click Data",
36
+ "body": "local array = {}\nif input.inputs and input.inputs.inputs and #input.inputs.inputs > 0 then\n for _, row in ipairs(input.inputs.inputs) do\n table.insert(array, { click_data = row.click_data, site_id = row.site_id })\n end\nelse\n table.insert(array, {\n click_data = \"\",\n site_id = \"\"\n })\n end\n\nlocal result = { inputs = TO_STRING({ inputs = array }) }\nreturn result"
37
+ }
38
+ ]
39
+ }
40
+ }
package/README.md CHANGED
@@ -1,12 +1,13 @@
1
1
  # MetaRouter Starter Kits
2
2
 
3
- ### 2025-11
4
- - Adobe Analytics
5
- - Adobe Experience Platform
6
- - Commission Junction
7
- - EngageFront (New)
8
- - Microsoft Ads CAPI
9
- - Teads (New)
3
+ ### 2025-12
4
+ - Amazon DSP - Events (New)
5
+ - EngageFront
6
+ - Eulerian (New)
7
+ - Google Ads - Conversions
8
+ - RTB House
9
+ - The Trade Desk - Conversions
10
+ - Wallaroo (New)
10
11
 
11
12
  | Kit Name | Initial Release Date | Stable Release Date | Latest Release Date | Current Version | Latest Note |
12
13
  |----------|----------------------|---------------------|---------------------|-----------------|-------------|
@@ -17,6 +18,7 @@
17
18
  | Adobe Analytics | 2025-10-08 | N/A | 2025-11-19 | Version: 0.4.0 | Changed reportSuiteID to a parameter Added marketingCloudVisitorID field |
18
19
  | Adobe Experience Platform | 2023-03-21 | 2025-08-20 | 2025-11-19 | Version: 1.1.0 | Added ECID support Updated identityMap mappings |
19
20
  | Adobe ID | 2023-03-07 | N/A | 2024-10-23 | Version: 0.2.0 | Added header `Accept-Encoding: application/json` |
21
+ | Amazon DSP - Events (New) | 2025-12-03 | N/A | 2025-12-03 | Version: 0.1.0 | Beta Version Amazon DSP - Events initial release |
20
22
  | Amazon DSP CAPI | 2025-05-21 | 2025-08-13 | 2025-08-13 | Version: 1.0.0 | Stable Release |
21
23
  | Amazon Data Firehose | 2025-02-05 | 2025-04-02 | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
22
24
  | Amazon Kinesis | 2025-05-21 | N/A | 2025-10-15 | Version: 0.1.1 | Added friendly names to expressions |
@@ -38,10 +40,11 @@
38
40
  | Convert | 2023-09-08 | N/A | 2024-11-20 | Version: 0.3.0 | Added new deduplication parameter for all events, `tid` |
39
41
  | Criteo | 2021-06-24 | 2024-05-15 | 2025-09-03 | Version: 2.1.0 | Removed id node and added alternate_ids array in playbook.yaml |
40
42
  | Customer.io | 2022-11-07 | N/A | 2024-10-23 | Version: 1.1.0 | Added header `Accept-Encoding: application/json` |
41
- | EngageFront (New) | 2025-11-12 | N/A | 2025-11-19 | Version: 0.2.0 | Update playbook with twn_id and attr_cookie. |
43
+ | EngageFront | 2025-11-12 | N/A | 2025-12-10 | Version: 0.3.0 | Update campaign/advertiser ID output key |
44
+ | Eulerian (New) | 2025-12-10 | N/A | 2025-12-10 | Version: 0.1.0 | Beta Version Eulerian initial release |
42
45
  | Firebase | 2024-01-15 | N/A | 2024-10-23 | Version: 0.2.0 | Updated header `Accept-Encoding: application/json` |
43
46
  | Google AJSID Segments | 2024-05-29 | N/A | 2025-10-15 | Version: 0.1.1 | Added friendly names to expressions |
44
- | Google Ads - Conversions | 2023-07-04 | 2024-04-17 | 2025-10-15 | Version: 1.3.1 | Added friendly names to expressions |
47
+ | Google Ads - Conversions | 2023-07-04 | 2024-04-17 | 2025-12-10 | Version: 1.4.0 | Added consent field |
45
48
  | Google Analytics | 2021-06-24 | N/A | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
46
49
  | Google Analytics 4 | 2022-08-11 | N/A | 2025-10-29 | Version: 1.2.0 | Added geolocation data with ip_override and user_location fields |
47
50
  | Google Analytics 4 (Collect) | 2024-04-24 | 2025-08-20 | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
@@ -77,7 +80,7 @@
77
80
  | Pinterest CAPI | 2023-03-07 | N/A | 2024-10-23 | Version: 1.2.0 | Added header `Accept-Encoding: application/json` |
78
81
  | Podscribe | 2025-03-12 | 2025-04-09 | 2025-10-15 | Version: 1.2.1 | Added friendly names to expressions |
79
82
  | Podsights | 2023-03-07 | N/A | 2024-10-23 | Version: 0.2.0 | Added header `Accept-Encoding: application/json` |
80
- | RTB House | 2024-11-20 | N/A | 2025-07-30 | Version: 0.3.1 | Replaced context.traits with traits. |
83
+ | RTB House | 2024-11-20 | N/A | 2025-12-03 | Version: 0.4.0 | Updated endpoint to be a parameter |
81
84
  | Rakuten Conversions | 2025-07-30 | 2025-09-24 | 2025-09-24 | Version: 1.0.0 | Stable Release |
82
85
  | Reddit Ads | 2023-09-12 | N/A | 2025-10-15 | Version: 0.0.2 | Beta migration to Reddit CAPI V3. Removed item_count from product_viewed |
83
86
  | Ringier Axel Springer Poland | 2025-03-05 | 2025-04-09 | 2025-09-24 | Version: 1.3.0 | Reverted changes: Stringified products fields in multiple events |
@@ -88,13 +91,14 @@
88
91
  | Snapchat - CAPI | 2024-06-05 | 2024-07-17 | 2025-07-30 | Version: 1.4.0 | Replaced context.traits with traits. |
89
92
  | Snapchat Ads | 2021-06-24 | N/A | 2025-10-15 | Version: 1.1.1 | Added friendly names to expressions |
90
93
  | Snowflake | 2021-06-24 | N/A | 2025-10-15 | Version: 0.1.2 | Added friendly names to expressions |
91
- | Teads (New) | 2025-11-12 | N/A | 2025-11-12 | Version: 0.1.0 | Beta Version Teads initial release |
92
- | The Trade Desk - Conversions | 2025-06-04 | 2025-07-30 | 2025-10-15 | Version: 1.1.1 | Added friendly names to expressions |
94
+ | Teads | 2025-11-12 | N/A | 2025-11-12 | Version: 0.1.0 | Beta Version Teads initial release |
95
+ | The Trade Desk - Conversions | 2025-06-04 | 2025-07-30 | 2025-12-10 | Version: 1.2.0 | Updating identifier mappings |
93
96
  | TheTradeDesk Conversion Events | 2022-11-29 | N/A | 2025-07-30 | Version: 1.3.0 | Replaced originalTimestamp with timestamp |
94
97
  | TheTradeDesk Firstparty Advertiser Data | 2022-11-29 | N/A | 2025-07-30 | Version: 1.2.0 | Updated Lua timestamp fallback logic to use input.timestamp |
95
98
  | TikTok | 2023-03-07 | 2023-12-13 | 2025-07-30 | Version: 2.4.0 | Replaced context.traits with traits. |
96
99
  | Treasure Data | 2024-02-21 | 2025-08-20 | 2025-08-20 | Version: 1.0.0 | Stable Release |
97
100
  | VideoAmp | 2022-11-17 | N/A | 2024-10-23 | Version: 0.3.0 | Added header `Accept-Encoding: application/json` |
101
+ | Wallaroo (New) | 2025-12-03 | N/A | 2025-12-10 | Version: 0.1.1 | Added expression name |
98
102
  | Webhooks | 2024-05-29 | 2024-08-07 | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
99
103
  | X Ads - Web Conversions | 2024-09-04 | 2024-09-25 | 2025-07-30 | Version: 1.1.0 | Replaced context.traits with traits. |
100
104
  | Xandr | 2021-07-13 | N/A | 2024-10-23 | Version: 1.1.0 | Added header `Accept-Encoding: application/json` |
package/index.js CHANGED
@@ -130,6 +130,12 @@ exports['amazon-dsp-capi'] = {
130
130
  metadata: require('./.dist/amazon-dsp-capi/metadata.json')
131
131
  }
132
132
 
133
+ exports['amazon-dsp-events'] = {
134
+ endpointSchema: require('./.dist/amazon-dsp-events/connection.json'),
135
+ playbook: require('./.dist/amazon-dsp-events/playbook.json'),
136
+ metadata: require('./.dist/amazon-dsp-events/metadata.json')
137
+ }
138
+
133
139
  exports.amnet = {
134
140
  endpointSchema: require('./.dist/amnet/connection.json'),
135
141
  playbook: require('./.dist/amnet/playbook.json'),
@@ -243,6 +249,12 @@ exports['engage-front'] = {
243
249
  metadata: require('./.dist/engage-front/metadata.json')
244
250
  }
245
251
 
252
+ exports['eulerian'] = {
253
+ endpointSchema: require('./.dist/eulerian/connection.json'),
254
+ playbook: require('./.dist/eulerian/playbook.json'),
255
+ metadata: require('./.dist/eulerian/metadata.json')
256
+ }
257
+
246
258
  exports['facebook-pixel'] = {
247
259
  endpointSchema: require('./.dist/facebook-pixel/connection.json'),
248
260
  playbook: require('./.dist/facebook-pixel/playbook.json'),
@@ -549,6 +561,12 @@ exports.videoamp = {
549
561
  metadata: require('./.dist/videoamp/metadata.json')
550
562
  }
551
563
 
564
+ exports.wallaroo = {
565
+ endpointSchema: require('./.dist/wallaroo/connection.json'),
566
+ playbook: require('./.dist/wallaroo/playbook.json'),
567
+ metadata: require('./.dist/wallaroo/metadata.json')
568
+ }
569
+
552
570
  exports['x-ads'] = {
553
571
  endpointSchema: require('./.dist/x-ads/connection.json'),
554
572
  playbook: require('./.dist/x-ads/playbook.json'),
@@ -674,6 +692,11 @@ exports.etags = {
674
692
  playbook: require('./.dist/amazon-dsp-capi/playbook.etag.json'),
675
693
  kit: require('./.dist/amazon-dsp-capi/kit.etag.json')
676
694
  },
695
+ 'amazon-dsp-events': {
696
+ endpointSchema: require('./.dist/amazon-dsp-events/connection.etag.json'),
697
+ playbook: require('./.dist/amazon-dsp-events/playbook.etag.json'),
698
+ kit: require('./.dist/amazon-dsp-events/kit.etag.json')
699
+ },
677
700
  amnet: {
678
701
  endpointSchema: require('./.dist/amnet/connection.etag.json'),
679
702
  playbook: require('./.dist/amnet/playbook.etag.json'),
@@ -770,6 +793,11 @@ exports.etags = {
770
793
  playbook: require('./.dist/engage-front/playbook.etag.json'),
771
794
  metadata: require('./.dist/engage-front/kit.etag.json')
772
795
  },
796
+ 'eulerian': {
797
+ endpointSchema: require('./.dist/eulerian/connection.etag.json'),
798
+ playbook: require('./.dist/eulerian/playbook.etag.json'),
799
+ metadata: require('./.dist/eulerian/kit.etag.json')
800
+ },
773
801
  'facebook-pixel': {
774
802
  endpointSchema: require('./.dist/facebook-pixel/connection.etag.json'),
775
803
  playbook: require('./.dist/facebook-pixel/playbook.etag.json'),
@@ -1024,6 +1052,11 @@ exports.etags = {
1024
1052
  playbook: require('./.dist/videoamp/playbook.etag.json'),
1025
1053
  kit: require('./.dist/videoamp/kit.etag.json')
1026
1054
  },
1055
+ wallaroo: {
1056
+ endpointSchema: require('./.dist/wallaroo/connection.etag.json'),
1057
+ playbook: require('./.dist/wallaroo/playbook.etag.json'),
1058
+ kit: require('./.dist/wallaroo/kit.etag.json')
1059
+ },
1027
1060
  'x-ads': {
1028
1061
  endpointSchema: require('./.dist/x-ads/connection.etag.json'),
1029
1062
  playbook: require('./.dist/x-ads/playbook.etag.json'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metarouter/ajs-starter-kit",
3
- "version": "1.0.150",
3
+ "version": "1.0.152",
4
4
  "description": "MetaRouter analytics.js starter kit",
5
5
  "main": "index.js",
6
6
  "scripts": {