@metarouter/ajs-starter-kit 1.0.118 → 1.0.120

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.
@@ -0,0 +1 @@
1
+ "65b100021d550653b50477a00ba4f198"
@@ -0,0 +1,26 @@
1
+ {
2
+ "params": [
3
+ {
4
+ "name": "REGION",
5
+ "exampleValue": "my-region"
6
+ },
7
+ {
8
+ "name": "ACCESS_KEY",
9
+ "exampleValue": "my-access-key"
10
+ },
11
+ {
12
+ "name": "SECRET_KEY",
13
+ "exampleValue": "my-secret-key"
14
+ },
15
+ {
16
+ "name": "STREAM_NAME",
17
+ "exampleValue": "my-stream-name"
18
+ }
19
+ ],
20
+ "amazon-data-firehose": {
21
+ "region": "$$REGION$$",
22
+ "accessKey": "$$ACCESS_KEY$$",
23
+ "secretKey": "$$SECRET_KEY$$",
24
+ "streamName": "$$STREAM_NAME$$"
25
+ }
26
+ }
@@ -0,0 +1 @@
1
+ "8cbba1e1586f7401cb91bf12f781249b"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Amazon Data Firehose",
6
+ "description": "Amazon Data Firehose is a fully managed service for real-time data streaming to various destinations like Amazon S3 and Redshift.",
7
+ "logo": "https://cdn.metarouter.io/logo.svg",
8
+ "color": "#FF9900",
9
+ "eventSource": {
10
+ "isAndroidApp": true,
11
+ "isIosApp": true,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-02-05T00:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nAmazon Data Firehose initial release."
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "b369e2c36983957aec3cfe2f3c3bee4b"
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "global": {
4
+ "expressions": [
5
+ {
6
+ "body": "return input",
7
+ "lang": "lua"
8
+ }
9
+ ]
10
+ }
11
+ }
@@ -1 +1 @@
1
- "a83dcfcd90fd83213a85c0c02c1577fb"
1
+ "893b7a87965dc968635eb1107f123fcf"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "isDraft": false,
3
3
  "isDeprecated": false,
4
- "isBeta": true,
4
+ "isBeta": false,
5
5
  "friendlyName": "AWIN",
6
6
  "description": "AWIN is a global affiliate marketing network that connects advertisers and publishers to drive sales and generate leads.",
7
7
  "logo": "https://cdn.metarouter.io/awin.png",
@@ -20,6 +20,10 @@
20
20
  {
21
21
  "date": "2025-01-15T22:00:00.000Z",
22
22
  "note": "Version: 0.2.0\nHandle voucher code\nFormat order reference\nAdd SKU fallback"
23
+ },
24
+ {
25
+ "date": "2025-02-05T00:00:00.000Z",
26
+ "note": "Version: 1.0.0\nStable release"
23
27
  }
24
28
  ]
25
29
  }
@@ -1 +1 @@
1
- "3a2d80dea759e37a02741e2b49facbe3"
1
+ "3c60a1b1ed86b4bfd0378781a92bc7fe"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.0",
2
+ "version": "1.0.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "ADVERTISER_ID",
@@ -1 +1 @@
1
- "9c76a2415b6ffe38b747ebde78268ff1"
1
+ "793ff19fbebbe9b152fc8ab7184582ce"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "isDraft": false,
3
3
  "isDeprecated": false,
4
- "isBeta": true,
4
+ "isBeta": false,
5
5
  "friendlyName": "Blueshift",
6
6
  "description": "From unified data to intelligent decisioning, Blueshift’s SmartHub CDP provides all the tools\nto deliver the omnichannel experience your customers expect.",
7
7
  "logo": "https://cdn.metarouter.io/logo.svg",
@@ -52,6 +52,10 @@
52
52
  {
53
53
  "date": "2025-01-15T00:00:00.000Z",
54
54
  "note": "Version: 0.5.0\nAdded global enrichment for partner field."
55
+ },
56
+ {
57
+ "date": "2025-01-22T00:00:00.000Z",
58
+ "note": "Version: 1.0.0\nStable release"
55
59
  }
56
60
  ]
57
61
  }
@@ -1 +1 @@
1
- "26a8b0365a6a26820e9295fbd49c1043"
1
+ "f8d56376a9de75b065e3b7731d685445"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.0",
2
+ "version": "1.0.0",
3
3
  "global": {
4
4
  "enrichments": [
5
5
  {
@@ -1,6 +1,30 @@
1
1
  {
2
2
  "type": "object",
3
3
  "properties": {
4
+ "amazonDataFirehose": {
5
+ "type": "object",
6
+ "properties": {
7
+ "accessKey": {
8
+ "type": "string"
9
+ },
10
+ "region": {
11
+ "type": "string"
12
+ },
13
+ "secretKey": {
14
+ "type": "string"
15
+ },
16
+ "streamName": {
17
+ "type": "string"
18
+ }
19
+ },
20
+ "required": [
21
+ "region",
22
+ "accessKey",
23
+ "secretKey",
24
+ "streamName"
25
+ ],
26
+ "additionalProperties": false
27
+ },
4
28
  "blob": {
5
29
  "type": "object",
6
30
  "properties": {
@@ -1 +1 @@
1
- "d5ce1223322b433f567cfc2b8afe1b7f"
1
+ "8f875bfc1fe82bc0d1513fe6539f73bf"
@@ -23,6 +23,10 @@
23
23
  {
24
24
  "date": "2024-11-21T21:00:00.000Z",
25
25
  "note": "Version: 0.3.0\nUpdate connection.yaml for SDK forwarder format\nMove user agent and ip to global stanza"
26
+ },
27
+ {
28
+ "date": "2025-01-22T21:00:00.000Z",
29
+ "note": "Version: 0.4.0\nAdd user agent and ip to default and order_completed stanzas\nRemove redundant properties-dataFields mapping from identify events"
26
30
  }
27
31
  ]
28
32
  }
@@ -1 +1 @@
1
- "e8ddd6aafbb197f95310a381386d94e3"
1
+ "ae50453124fca003c7ffe3ece6f2a46a"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.0",
2
+ "version": "0.4.0",
3
3
  "global": {
4
4
  "enrichments": [
5
5
  {
@@ -59,6 +59,14 @@
59
59
  {
60
60
  "inputKey": "properties",
61
61
  "outputKey": "dataFields"
62
+ },
63
+ {
64
+ "inputKey": "context.ip",
65
+ "outputKey": "dataFields.ip"
66
+ },
67
+ {
68
+ "inputKey": "context.userAgent",
69
+ "outputKey": "dataFields.userAgent"
62
70
  }
63
71
  ]
64
72
  },
@@ -72,10 +80,6 @@
72
80
  {
73
81
  "inputKey": "anonymousId",
74
82
  "outputKey": "userId"
75
- },
76
- {
77
- "inputKey": "properties",
78
- "outputKey": "dataFields"
79
83
  }
80
84
  ]
81
85
  },
@@ -124,6 +128,14 @@
124
128
  }
125
129
  }
126
130
  ]
131
+ },
132
+ {
133
+ "inputKey": "context.ip",
134
+ "outputKey": "dataFields.ip"
135
+ },
136
+ {
137
+ "inputKey": "context.userAgent",
138
+ "outputKey": "dataFields.userAgent"
127
139
  }
128
140
  ]
129
141
  },
@@ -1 +1 @@
1
- "45e53b1e59dbd753ef69e26e8ac10ba6"
1
+ "18480ad1702f9f0bc59499f21874d3db"
@@ -28,6 +28,10 @@
28
28
  {
29
29
  "date": "2024-10-23T00:00:00.000Z",
30
30
  "note": "Version: 1.1.0\nAdded header `Accept-Encoding: application/json`"
31
+ },
32
+ {
33
+ "date": "2025-02-05T00:00:00.000Z",
34
+ "note": "Version: 1.2.0\nUpdated mappings to comply with Merkle's requirements\nAdded required fields: ipAddress, userAgent, pageUrl\nAdded optional fields: rawEmail\nUpdated type field of page event to viewpage"
31
35
  }
32
36
  ]
33
37
  }
@@ -1 +1 @@
1
- "0a45d813aaffac8f49e65dc8d1a9c0a4"
1
+ "e8fb409ebe6565693469c6879281f1e3"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0",
2
+ "version": "1.2.0",
3
3
  "global": {
4
4
  "mappings": [
5
5
  {
@@ -7,12 +7,52 @@
7
7
  "outputKey": "anonymousId"
8
8
  },
9
9
  {
10
- "inputKey": "messageId",
11
- "outputKey": "messageId"
10
+ "inputKey": "type",
11
+ "outputKey": "type",
12
+ "transforms": [
13
+ {
14
+ "expression": {
15
+ "lang": "lua",
16
+ "body": "if input.type == \"page\" then\n return \"viewpage\"\nend\nreturn input.type"
17
+ }
18
+ }
19
+ ]
12
20
  },
13
21
  {
14
- "inputKey": "type",
15
- "outputKey": "type"
22
+ "inputKey": "context.userAgent",
23
+ "outputKey": "userAgent"
24
+ },
25
+ {
26
+ "inputKey": "input",
27
+ "outputKey": "pageUrl",
28
+ "transforms": [
29
+ {
30
+ "expression": {
31
+ "lang": "lua",
32
+ "body": "local pageUrl = input.properties.url or input.context.page.url\nif pageUrl then\n return pageUrl\nend\nreturn"
33
+ }
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "inputKey": "context.ip",
39
+ "outputKey": "ipAddress"
40
+ },
41
+ {
42
+ "inputKey": "input",
43
+ "outputKey": "rawEmail",
44
+ "transforms": [
45
+ {
46
+ "expression": {
47
+ "lang": "lua",
48
+ "body": "local email = input.traits.email or input.context.traits.email\nif email then\n return email\nend\nreturn"
49
+ }
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "inputKey": "messageId",
55
+ "outputKey": "messageId"
16
56
  },
17
57
  {
18
58
  "inputKey": "event",
@@ -0,0 +1 @@
1
+ "34d9a2fcc47ca80348b70c8d7bbd0589"
@@ -0,0 +1,12 @@
1
+ {
2
+ "default": {
3
+ "endpoint": "https://g.msn.com/uets2s/0",
4
+ "method": "GET",
5
+ "headers": [
6
+ {
7
+ "key": "User-Agent",
8
+ "fromEventKey": "context.userAgent"
9
+ }
10
+ ]
11
+ }
12
+ }
@@ -0,0 +1 @@
1
+ "70505b8496f26ec95396135072da16f0"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Microsoft Ads",
6
+ "description": "Microsoft Ads is a digital advertising platform that allows businesses to create and manage paid search and display ad campaigns across Microsoft's network, including Bing, MSN, and other partner sites.",
7
+ "logo": "https://cdn.metarouter.io/microsoft-ads.png",
8
+ "color": "#0078D4",
9
+ "eventSource": {
10
+ "isAndroidApp": false,
11
+ "isIosApp": false,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-01-22T22:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nMicrosoft Ads initial release"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "bb2eaa8e02d3efe77d0a35026a287924"
@@ -0,0 +1,449 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "params": [
4
+ {
5
+ "name": "UET_TAG_ID",
6
+ "exampleValue": "my-uet-tag-id"
7
+ }
8
+ ],
9
+ "global": {
10
+ "enrichments": [
11
+ {
12
+ "staticString": "$$UET_TAG_ID$$",
13
+ "outputKey": "ti"
14
+ },
15
+ {
16
+ "staticString": "2.2",
17
+ "outputKey": "ver"
18
+ }
19
+ ],
20
+ "mappings": [
21
+ {
22
+ "inputKey": "context.providers.microsoftAds.mid",
23
+ "outputKey": "mid"
24
+ },
25
+ {
26
+ "inputKey": "context.providers.microsoftAds.msclkid",
27
+ "outputKey": "msclkid"
28
+ },
29
+ {
30
+ "inputKey": "anonymousId",
31
+ "outputKey": "vid"
32
+ },
33
+ {
34
+ "inputKey": "input",
35
+ "outputKey": "uid",
36
+ "transforms": [
37
+ {
38
+ "expression": {
39
+ "lang": "lua",
40
+ "body": "if input.userId and input.userId ~= '' then return TO_MD5_HASH(LOWER(TRIM(input.userId))) end"
41
+ }
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "inputKey": "context.ip",
47
+ "outputKey": "ip"
48
+ },
49
+ {
50
+ "inputKey": "context.userAgent",
51
+ "outputKey": "ua"
52
+ },
53
+ {
54
+ "inputKey": "input",
55
+ "outputKey": "ts",
56
+ "transforms": [
57
+ {
58
+ "expression": {
59
+ "lang": "lua",
60
+ "body": "return SECONDS_SINCE_EPOCH_FROM_RFC3999(input.timestamp or input.originalTimestamp or input.sentAt)"
61
+ }
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "inputKey": "input",
67
+ "outputKey": "pid",
68
+ "transforms": [
69
+ {
70
+ "expression": {
71
+ "lang": "lua",
72
+ "body": "local pid = {}\nid = 1\nlocal email = input.traits.email or input.context.traits.email\nemail = LOWER(TRIM(email))\nif email then\n if (string.find(email, '@') ~= nil) then\n email = SPLIT(email, '@', 2)\n if string.sub(email[1], -6) == '+alias' then email[1] = REPLACE(email[1], '+alias', '') end\n pid[id] = 'em=' .. TO_SHA256_HASH(REPLACE(email[1], '.', '') .. '@' .. email[2])\n else\n pid[id] = 'em=' .. TO_SHA256_HASH(email)\n end\n id = id + 1\nend\nlocal phone = input.traits.phone or input.context.traits.phone\nif phone then\n pid[id] = 'ph=' .. TO_SHA256_HASH(LOWER(TRIM(phone)))\nend\nif (#pid > 0) then return JOIN(pid, '&') end"
73
+ }
74
+ }
75
+ ]
76
+ },
77
+ {
78
+ "inputKey": "input",
79
+ "outputKey": "el",
80
+ "transforms": [
81
+ {
82
+ "expression": {
83
+ "lang": "lua",
84
+ "body": "if input.type == 'track' then return input.event end"
85
+ }
86
+ }
87
+ ]
88
+ }
89
+ ]
90
+ },
91
+ "eventSpecific": {
92
+ "page": {
93
+ "enrichments": [
94
+ {
95
+ "staticString": "pageLoad",
96
+ "outputKey": "evt"
97
+ }
98
+ ],
99
+ "mappings": [
100
+ {
101
+ "inputKey": "context.page.url",
102
+ "outputKey": "p"
103
+ },
104
+ {
105
+ "inputKey": "context.page.referrer",
106
+ "outputKey": "r"
107
+ },
108
+ {
109
+ "inputKey": "context.page.title",
110
+ "outputKey": "tl"
111
+ }
112
+ ]
113
+ },
114
+ "products_searched": {
115
+ "enrichments": [
116
+ {
117
+ "staticString": "custom",
118
+ "outputKey": "evt"
119
+ },
120
+ {
121
+ "staticString": "view_search_results",
122
+ "outputKey": "ea"
123
+ },
124
+ {
125
+ "staticString": "searchresults",
126
+ "outputKey": "pagetype"
127
+ }
128
+ ],
129
+ "mappings": [
130
+ {
131
+ "inputKey": "properties.query",
132
+ "outputKey": "search_term"
133
+ }
134
+ ]
135
+ },
136
+ "product_list_viewed": {
137
+ "enrichments": [
138
+ {
139
+ "staticString": "custom",
140
+ "outputKey": "evt"
141
+ },
142
+ {
143
+ "staticString": "view_item_list",
144
+ "outputKey": "ea"
145
+ },
146
+ {
147
+ "staticString": "category",
148
+ "outputKey": "pageType"
149
+ }
150
+ ],
151
+ "mappings": [
152
+ {
153
+ "inputKey": "properties.list_id",
154
+ "outputKey": "ecomm_category"
155
+ },
156
+ {
157
+ "inputKey": "input",
158
+ "outputKey": "prodid",
159
+ "transforms": [
160
+ {
161
+ "expression": {
162
+ "lang": "lua",
163
+ "body": "return JOIN(PLUCK(input.properties.products, 'product_id') or {}, ',')"
164
+ }
165
+ }
166
+ ]
167
+ },
168
+ {
169
+ "inputKey": "input",
170
+ "outputKey": "items",
171
+ "transforms": [
172
+ {
173
+ "expression": {
174
+ "lang": "lua",
175
+ "body": "local items = MAP(\n input.properties.products,\n function (p)\n return JOIN(\n {\n 'id=' .. (p.product_id or p.sku or ''),\n 'name=' .. (p.name or ''),\n 'price=' .. (p.price or ''),\n 'quantity=' .. (p.quantity or 1)\n },\n '&'\n )\n end\n)\nreturn JOIN(items, ',')"
176
+ }
177
+ }
178
+ ]
179
+ }
180
+ ]
181
+ },
182
+ "product_viewed": {
183
+ "enrichments": [
184
+ {
185
+ "staticString": "custom",
186
+ "outputKey": "evt"
187
+ },
188
+ {
189
+ "staticString": "view_item",
190
+ "outputKey": "ea"
191
+ },
192
+ {
193
+ "staticString": "product",
194
+ "outputKey": "pageType"
195
+ }
196
+ ],
197
+ "mappings": [
198
+ {
199
+ "inputKey": "properties.product_id",
200
+ "outputKey": "prodid"
201
+ },
202
+ {
203
+ "inputKey": "input",
204
+ "outputKey": "items",
205
+ "transforms": [
206
+ {
207
+ "expression": {
208
+ "lang": "lua",
209
+ "body": "return JOIN(\n {\n 'id=' .. (input.properties.product_id or input.properties.sku or ''),\n 'name=' .. (input.properties.name or ''),\n 'price=' .. (input.properties.price or ''),\n 'quantity=' .. (input.properties.quantity or 1)\n },\n '&'\n)"
210
+ }
211
+ }
212
+ ]
213
+ }
214
+ ]
215
+ },
216
+ "product_added": {
217
+ "enrichments": [
218
+ {
219
+ "staticString": "custom",
220
+ "outputKey": "evt"
221
+ },
222
+ {
223
+ "staticString": "add_to_cart",
224
+ "outputKey": "ea"
225
+ },
226
+ {
227
+ "staticString": "product",
228
+ "outputKey": "pageType"
229
+ }
230
+ ],
231
+ "mappings": [
232
+ {
233
+ "inputKey": "properties.product_id",
234
+ "outputKey": "prodid"
235
+ },
236
+ {
237
+ "inputKey": "input",
238
+ "outputKey": "items",
239
+ "transforms": [
240
+ {
241
+ "expression": {
242
+ "lang": "lua",
243
+ "body": "return JOIN(\n {\n 'id=' .. (input.properties.product_id or input.properties.sku or ''),\n 'name=' .. (input.properties.name or ''),\n 'price=' .. (input.properties.price or ''),\n 'quantity=' .. (input.properties.quantity or 1)\n },\n '&'\n)"
244
+ }
245
+ }
246
+ ]
247
+ },
248
+ {
249
+ "inputKey": "input",
250
+ "outputKey": "ecomm_totalvalue",
251
+ "transforms": [
252
+ {
253
+ "expression": {
254
+ "lang": "lua",
255
+ "body": "return input.properties.price * (input.properties.quantity or 1)"
256
+ }
257
+ }
258
+ ]
259
+ },
260
+ {
261
+ "inputKey": "input",
262
+ "outputKey": "gv",
263
+ "transforms": [
264
+ {
265
+ "expression": {
266
+ "lang": "lua",
267
+ "body": "return input.properties.price * (input.properties.quantity or 1)"
268
+ }
269
+ }
270
+ ]
271
+ },
272
+ {
273
+ "inputKey": "properties.currency",
274
+ "outputKey": "gc",
275
+ "transforms": [
276
+ {
277
+ "modifyString": "uppercase"
278
+ }
279
+ ],
280
+ "defaultString": "USD"
281
+ }
282
+ ]
283
+ },
284
+ "cart_viewed": {
285
+ "enrichments": [
286
+ {
287
+ "staticString": "custom",
288
+ "outputKey": "evt"
289
+ },
290
+ {
291
+ "staticString": "cart",
292
+ "outputKey": "pageType"
293
+ }
294
+ ],
295
+ "mappings": [
296
+ {
297
+ "inputKey": "input",
298
+ "outputKey": "prodid",
299
+ "transforms": [
300
+ {
301
+ "expression": {
302
+ "lang": "lua",
303
+ "body": "return JOIN(PLUCK(input.properties.products, 'product_id') or {}, ',' )"
304
+ }
305
+ }
306
+ ]
307
+ },
308
+ {
309
+ "inputKey": "input",
310
+ "outputKey": "items",
311
+ "transforms": [
312
+ {
313
+ "expression": {
314
+ "lang": "lua",
315
+ "body": "local items = MAP(\n input.properties.products,\n function (p)\n return JOIN(\n {\n 'id=' .. (p.product_id or p.sku or ''),\n 'name=' .. (p.name or ''),\n 'price=' .. (p.price or ''),\n 'quantity=' .. (p.quantity or 1)\n },\n '&'\n )\n end\n)\nreturn JOIN(items, ',')"
316
+ }
317
+ }
318
+ ]
319
+ },
320
+ {
321
+ "inputKey": "input",
322
+ "outputKey": "ecomm_totalvalue",
323
+ "transforms": [
324
+ {
325
+ "expression": {
326
+ "lang": "lua",
327
+ "body": "return SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end))"
328
+ }
329
+ }
330
+ ]
331
+ },
332
+ {
333
+ "inputKey": "input",
334
+ "outputKey": "gv",
335
+ "transforms": [
336
+ {
337
+ "expression": {
338
+ "lang": "lua",
339
+ "body": "return SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end))"
340
+ }
341
+ }
342
+ ]
343
+ },
344
+ {
345
+ "inputKey": "properties.currency",
346
+ "outputKey": "gc",
347
+ "transforms": [
348
+ {
349
+ "modifyString": "uppercase"
350
+ }
351
+ ],
352
+ "defaultString": "USD"
353
+ }
354
+ ]
355
+ },
356
+ "order_completed": {
357
+ "enrichments": [
358
+ {
359
+ "staticString": "custom",
360
+ "outputKey": "evt"
361
+ },
362
+ {
363
+ "staticString": "purchase",
364
+ "outputKey": "ea"
365
+ },
366
+ {
367
+ "staticString": "purchase",
368
+ "outputKey": "pageType"
369
+ }
370
+ ],
371
+ "mappings": [
372
+ {
373
+ "inputKey": "properties.order_id",
374
+ "outputKey": "transaction_id"
375
+ },
376
+ {
377
+ "inputKey": "input",
378
+ "outputKey": "prodid",
379
+ "transforms": [
380
+ {
381
+ "expression": {
382
+ "lang": "lua",
383
+ "body": "return JOIN(PLUCK(input.properties.products, 'product_id') or {}, ',')"
384
+ }
385
+ }
386
+ ]
387
+ },
388
+ {
389
+ "inputKey": "input",
390
+ "outputKey": "items",
391
+ "transforms": [
392
+ {
393
+ "expression": {
394
+ "lang": "lua",
395
+ "body": "local items = MAP(\n input.properties.products,\n function (p)\n return JOIN(\n {\n 'id=' .. (p.product_id or p.sku or ''),\n 'name=' .. (p.name or ''),\n 'price=' .. (p.price or ''),\n 'quantity=' .. (p.quantity or 1)\n },\n '&'\n )\n end\n)\nreturn JOIN(items, ',')"
396
+ }
397
+ }
398
+ ]
399
+ },
400
+ {
401
+ "inputKey": "input",
402
+ "outputKey": "ecomm_totalvalue",
403
+ "transforms": [
404
+ {
405
+ "expression": {
406
+ "lang": "lua",
407
+ "body": "return SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end))"
408
+ }
409
+ }
410
+ ]
411
+ },
412
+ {
413
+ "inputKey": "input",
414
+ "outputKey": "gv",
415
+ "transforms": [
416
+ {
417
+ "expression": {
418
+ "lang": "lua",
419
+ "body": "return SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end))"
420
+ }
421
+ }
422
+ ]
423
+ },
424
+ {
425
+ "inputKey": "properties.currency",
426
+ "outputKey": "gc",
427
+ "transforms": [
428
+ {
429
+ "modifyString": "uppercase"
430
+ }
431
+ ],
432
+ "defaultString": "USD"
433
+ }
434
+ ]
435
+ }
436
+ },
437
+ "default": {
438
+ "filters": [
439
+ {
440
+ "byEventNames": {
441
+ "action": "allow",
442
+ "events": [
443
+ ""
444
+ ]
445
+ }
446
+ }
447
+ ]
448
+ }
449
+ }
package/README.md CHANGED
@@ -5,10 +5,16 @@ event methods, you will create a rich, actionable data set from your website, mo
5
5
  server, and other sources. It is particularly useful for tracking the pages or screens your
6
6
  users visit, the actions they take on your property, and whether the user has been identified
7
7
  previously.
8
+ ## 2025-02
9
+ - Amazon Data Firehose (BETA)
10
+ - AWIN
11
+ - Merkle
12
+
8
13
  ## 2025-01
9
- - AWIN (BETA)
10
- - Blueshift (BETA)
14
+ - Blueshift
11
15
  - Google BigQuery
16
+ - Iterable (BETA)
17
+ - Microsoft Ads (BETA)
12
18
  - Moloco Commerce Media (BETA)
13
19
 
14
20
  ## 2024-12
@@ -18,7 +24,6 @@ previously.
18
24
  ## 2024-11
19
25
  - Adobe Analytics - Experience (BETA)
20
26
  - Convert (BETA)
21
- - Iterable (BETA)
22
27
  - Innervate
23
28
  - Snapchat - CAPI
24
29
  - Zeotap (BETA)
@@ -49,7 +54,6 @@ previously.
49
54
  - Kochava (BETA)
50
55
  - Lytics
51
56
  - Magellan AI
52
- - Merkle
53
57
  - MIQ (Xandr) (BETA)
54
58
  - Mixpanel
55
59
  - Movable Ink (BETA)
@@ -103,15 +107,18 @@ previously.
103
107
 
104
108
  | Kit Name | Date | Latest Note |
105
109
  |----------|------|-------------|
106
- | AWIN (BETA) | 2025-01 | Version: 0.2.0 Handle voucher code Format order reference Add SKU fallback |
107
- | Blueshift (BETA) | 2025-01 | Version: 0.5.0 Added global enrichment for partner field. |
110
+ | Amazon Data Firehose (BETA) | 2025-02 | Version: 0.1.0 Beta Version Amazon Data Firehose initial release. |
111
+ | AWIN | 2025-02 | Version: 1.0.0 Stable release |
112
+ | Merkle | 2025-02 | Version: 1.2.0 Updated mappings to comply with Merkle's requirements Added required fields: ipAddress, userAgent, pageUrl Added optional fields: rawEmail Updated type field of page event to viewpage |
113
+ | Blueshift | 2025-01 | Version: 1.0.0 Stable release |
108
114
  | Google BigQuery | 2025-01 | Version: 1.1.0 Adding support for table overrides |
115
+ | Iterable (BETA) | 2025-01 | Version: 0.4.0 Add user agent and ip to default and order_completed stanzas Remove redundant properties-dataFields mapping from identify events |
116
+ | Microsoft Ads (BETA) | 2025-01 | Version: 0.1.0 Beta Version Microsoft Ads initial release |
109
117
  | Moloco Commerce Media (BETA) | 2025-01 | Version: 0.4.0 Updated friendlyName Updated kit name |
110
118
  | Google Analytics 4 (Collect) (BETA) | 2024-12 | Version: 0.4.0 Added user property expression for anonymousId. |
111
119
  | RTB House (BETA) | 2024-12 | Version: 0.2.1 Updated Endpoint URL Added new fields for all events: page URL (`su`) and page referrer (`sr`) Added new events: identify, page, products_searched, product_list_viewed, product_viewed, product_added, product_added_to_wishlist, cart_viewed, checkout_started |
112
120
  | Adobe Analytics - Experience (BETA) | 2024-11 | Version: 0.6.0 Adding checkout event Updating inputKey for siteSection |
113
121
  | Convert (BETA) | 2024-11 | Version: 0.3.0 Added new deduplication parameter for all events, `tid` |
114
- | Iterable (BETA) | 2024-11 | Version: 0.3.0 Update connection.yaml for SDK forwarder format Move user agent and ip to global stanza |
115
122
  | Innervate | 2024-11 | Version: 1.0.0 Updated friendly name Stable release |
116
123
  | Snapchat - CAPI | 2024-11 | Version: 1.3.0 Added the `_scid` cookie value as `user_data.sc_cookie1` |
117
124
  | Zeotap (BETA) | 2024-11 | Version: 0.4.0 Added new mapping for `context_country` |
@@ -140,7 +147,6 @@ previously.
140
147
  | Kochava (BETA) | 2024-10 | Version: 0.3.0 Added header `Accept-Encoding: application/json` |
141
148
  | Lytics | 2024-10 | Version: 1.1.0 Added header `Accept-Encoding: application/json` |
142
149
  | Magellan AI | 2024-10 | Version: 1.1.0 Added header `Accept-Encoding: application/json` |
143
- | Merkle | 2024-10 | Version: 1.1.0 Added header `Accept-Encoding: application/json` |
144
150
  | MIQ (Xandr) (BETA) | 2024-10 | Version: 0.2.0 Added header `Accept-Encoding: application/json` |
145
151
  | Mixpanel | 2024-10 | Version: 1.2.0 Added header `Accept-Encoding: application/json` |
146
152
  | Movable Ink (BETA) | 2024-10 | Version: 0.2.0 Added header `Accept-Encoding: application/json` |
package/index.js CHANGED
@@ -2,6 +2,12 @@ const connectionSchemas = require('./.dist/connection-schemas.json')
2
2
 
3
3
  // SDK Integrations
4
4
 
5
+ exports['amazon-data-firehose'] = {
6
+ connectionTemplate: connectionSchemas.properties.amazonDataFirehose,
7
+ playbook: require('./.dist/amazon-data-firehose/playbook.json'),
8
+ metadata: require('./.dist/amazon-data-firehose/metadata.json')
9
+ }
10
+
5
11
  exports.blob = {
6
12
  connectionTemplate: connectionSchemas.properties.blob,
7
13
  playbook: require('./.dist/blob/playbook.json'),
@@ -285,6 +291,12 @@ exports['media-math'] = {
285
291
  metadata: require('./.dist/media-math/metadata.json')
286
292
  }
287
293
 
294
+ exports['microsoft-ads'] = {
295
+ endpointSchema: require('./.dist/microsoft-ads/connection.json'),
296
+ playbook: require('./.dist/microsoft-ads/playbook.json'),
297
+ metadata: require('./.dist/microsoft-ads/metadata.json')
298
+ }
299
+
288
300
  exports.merkle = {
289
301
  endpointSchema: require('./.dist/merkle/connection.json'),
290
302
  playbook: require('./.dist/merkle/playbook.json'),
@@ -473,6 +485,10 @@ exports['zeotap'] = {
473
485
 
474
486
  exports.etags = {
475
487
  // SDK Integrations
488
+ 'amazon-data-firehose': {
489
+ playbook: require('./.dist/amazon-data-firehose/playbook.etag.json'),
490
+ kit: require('./.dist/amazon-data-firehose/kit.etag.json')
491
+ },
476
492
  blob: {
477
493
  playbook: require('./.dist/blob/playbook.etag.json'),
478
494
  kit: require('./.dist/blob/kit.etag.json')
@@ -703,6 +719,11 @@ exports.etags = {
703
719
  playbook: require('./.dist/merkle/playbook.etag.json'),
704
720
  kit: require('./.dist/merkle/kit.etag.json')
705
721
  },
722
+ 'microsoft-ads': {
723
+ endpointSchema: require('./.dist/microsoft-ads/connection.etag.json'),
724
+ playbook: require('./.dist/microsoft-ads/playbook.etag.json'),
725
+ kit: require('./.dist/microsoft-ads/kit.etag.json')
726
+ },
706
727
  'miq-xandr': {
707
728
  endpointSchema: require('./.dist/miq-xandr/connection.etag.json'),
708
729
  playbook: require('./.dist/miq-xandr/playbook.etag.json'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metarouter/ajs-starter-kit",
3
- "version": "1.0.118",
3
+ "version": "1.0.120",
4
4
  "description": "MetaRouter analytics.js starter kit",
5
5
  "main": "index.js",
6
6
  "scripts": {