@metarouter/ajs-starter-kit 1.0.129 → 1.0.131

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 (32) hide show
  1. package/.dist/amazon-dsp-capi/connection.etag.json +1 -0
  2. package/.dist/amazon-dsp-capi/connection.json +44 -0
  3. package/.dist/amazon-dsp-capi/kit.etag.json +1 -0
  4. package/.dist/amazon-dsp-capi/metadata.json +21 -0
  5. package/.dist/amazon-dsp-capi/playbook.etag.json +1 -0
  6. package/.dist/amazon-dsp-capi/playbook.json +302 -0
  7. package/.dist/amazon-kinesis/connection.etag.json +1 -0
  8. package/.dist/amazon-kinesis/connection.json +26 -0
  9. package/.dist/amazon-kinesis/kit.etag.json +1 -0
  10. package/.dist/amazon-kinesis/metadata.json +21 -0
  11. package/.dist/amazon-kinesis/playbook.etag.json +1 -0
  12. package/.dist/amazon-kinesis/playbook.json +11 -0
  13. package/.dist/build-your-own/kit.etag.json +1 -1
  14. package/.dist/connection-schemas.json +24 -0
  15. package/.dist/google-bigquery-streaming/kit.etag.json +1 -1
  16. package/.dist/google-bigquery-streaming/metadata.json +1 -1
  17. package/.dist/perion/connection.etag.json +1 -0
  18. package/.dist/perion/connection.json +28 -0
  19. package/.dist/perion/kit.etag.json +1 -0
  20. package/.dist/perion/metadata.json +21 -0
  21. package/.dist/perion/playbook.etag.json +1 -0
  22. package/.dist/perion/playbook.json +197 -0
  23. package/.dist/podscribe/kit.etag.json +1 -1
  24. package/.dist/ttd-conversions/connection.etag.json +1 -0
  25. package/.dist/ttd-conversions/connection.json +21 -0
  26. package/.dist/ttd-conversions/kit.etag.json +1 -0
  27. package/.dist/ttd-conversions/metadata.json +21 -0
  28. package/.dist/ttd-conversions/playbook.etag.json +1 -0
  29. package/.dist/ttd-conversions/playbook.json +322 -0
  30. package/README.md +10 -0
  31. package/index.js +43 -0
  32. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ "33bb05a09a1e790fae0bdcf96e64e402"
@@ -0,0 +1,44 @@
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": "PROFILE_ID",
18
+ "exampleValue": "my-profile-id"
19
+ }
20
+ ],
21
+ "default": {
22
+ "endpoint": "$$BASE_URL$$/accounts/$$ADVERTISER_ID$$/dsp/conversionDefinitions/eventData",
23
+ "method": "POST",
24
+ "headers": [
25
+ {
26
+ "key": "Amazon-Advertising-API-ClientId",
27
+ "value": "$$CLIENT_ID$$"
28
+ },
29
+ {
30
+ "key": "Amazon-Advertising-API-Scope",
31
+ "value": "$$PROFILE_ID$$"
32
+ },
33
+ {
34
+ "key": "Amazon-Ads-AccountId",
35
+ "value": "$$ADVERTISER_ID$$"
36
+ }
37
+ ],
38
+ "batchSize": 50,
39
+ "transform": {
40
+ "lang": "lua",
41
+ "body": "request.body = { eventData = batch, source = \"SERVER_TO_SERVER\" }\nreturn request"
42
+ }
43
+ }
44
+ }
@@ -0,0 +1 @@
1
+ "6dffe77de4d0cc00bf44d2ce99491d5f"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Amazon DSP CAPI",
6
+ "description": "Amazon DSP 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": true,
11
+ "isIosApp": true,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-05-21T00:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nAmazon DSP CAPI initial release."
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "cf2b6b7cd79e9c32d53532032e35fb28"
@@ -0,0 +1,302 @@
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": "context.traits.email"
19
+ }
20
+ }
21
+ ]
22
+ }
23
+ }
24
+ }
25
+ }
26
+ ],
27
+ "enrichments": [
28
+ {
29
+ "staticString": "US",
30
+ "outputKey": "countryCode"
31
+ },
32
+ {
33
+ "staticString": "",
34
+ "outputKey": "dataProcessingOptions"
35
+ }
36
+ ],
37
+ "mappings": [
38
+ {
39
+ "inputKey": "input",
40
+ "outputKey": "name",
41
+ "transforms": [
42
+ {
43
+ "expression": {
44
+ "lang": "lua",
45
+ "body": "if (input.type == \"track\") then return REPLACE(LOWER(input.event), \" \", \"_\") end\nreturn input.type"
46
+ }
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ "inputKey": "input",
52
+ "outputKey": "matchKeys",
53
+ "transforms": [
54
+ {
55
+ "expression": {
56
+ "body": "local email = input.traits.email or input.context.traits.email\nif email then return {{ values = {TO_SHA256_HASH(LOWER(TRIM(email)))}, type = \"EMAIL\" }} end",
57
+ "lang": "lua"
58
+ }
59
+ }
60
+ ]
61
+ },
62
+ {
63
+ "inputKey": "messageId",
64
+ "outputKey": "clientDedupeId"
65
+ },
66
+ {
67
+ "inputKey": "input",
68
+ "outputKey": "timestamp",
69
+ "transforms": [
70
+ {
71
+ "expression": {
72
+ "body": "return input.timestamp or input.originalTimestamp or input.sentAt",
73
+ "lang": "lua"
74
+ }
75
+ }
76
+ ]
77
+ }
78
+ ]
79
+ },
80
+ "eventSpecific": {
81
+ "page": {
82
+ "enrichments": [
83
+ {
84
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
85
+ "outputKey": "conversionDefinitionId"
86
+ }
87
+ ]
88
+ },
89
+ "products_searched": {
90
+ "enrichments": [
91
+ {
92
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
93
+ "outputKey": "conversionDefinitionId"
94
+ }
95
+ ]
96
+ },
97
+ "product_list_viewed": {
98
+ "enrichments": [
99
+ {
100
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
101
+ "outputKey": "conversionDefinitionId"
102
+ }
103
+ ]
104
+ },
105
+ "product_clicked": {
106
+ "enrichments": [
107
+ {
108
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
109
+ "outputKey": "conversionDefinitionId"
110
+ }
111
+ ],
112
+ "mappings": [
113
+ {
114
+ "inputKey": "properties.price",
115
+ "outputKey": "value"
116
+ },
117
+ {
118
+ "inputKey": "properties.currency",
119
+ "outputKey": "currencyCode",
120
+ "transforms": [
121
+ {
122
+ "modifyString": "uppercase"
123
+ }
124
+ ],
125
+ "defaultString": "USD"
126
+ }
127
+ ]
128
+ },
129
+ "product_viewed": {
130
+ "enrichments": [
131
+ {
132
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
133
+ "outputKey": "conversionDefinitionId"
134
+ }
135
+ ],
136
+ "mappings": [
137
+ {
138
+ "inputKey": "properties.price",
139
+ "outputKey": "value"
140
+ },
141
+ {
142
+ "inputKey": "properties.currency",
143
+ "outputKey": "currencyCode",
144
+ "transforms": [
145
+ {
146
+ "modifyString": "uppercase"
147
+ }
148
+ ],
149
+ "defaultString": "USD"
150
+ }
151
+ ]
152
+ },
153
+ "product_added": {
154
+ "enrichments": [
155
+ {
156
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
157
+ "outputKey": "conversionDefinitionId"
158
+ }
159
+ ],
160
+ "mappings": [
161
+ {
162
+ "inputKey": "input",
163
+ "outputKey": "value",
164
+ "transforms": [
165
+ {
166
+ "expression": {
167
+ "lang": "lua",
168
+ "body": "return tonumber(string.format(\"%.2f\", input.properties.price * (input.properties.quantity or 1)))"
169
+ }
170
+ }
171
+ ]
172
+ },
173
+ {
174
+ "inputKey": "properties.currency",
175
+ "outputKey": "currencyCode",
176
+ "transforms": [
177
+ {
178
+ "modifyString": "uppercase"
179
+ }
180
+ ],
181
+ "defaultString": "USD"
182
+ }
183
+ ]
184
+ },
185
+ "product_removed": {
186
+ "enrichments": [
187
+ {
188
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
189
+ "outputKey": "conversionDefinitionId"
190
+ }
191
+ ],
192
+ "mappings": [
193
+ {
194
+ "inputKey": "input",
195
+ "outputKey": "value",
196
+ "transforms": [
197
+ {
198
+ "expression": {
199
+ "lang": "lua",
200
+ "body": "return tonumber(string.format(\"%.2f\", input.properties.price * (input.properties.quantity or 1)))"
201
+ }
202
+ }
203
+ ]
204
+ },
205
+ {
206
+ "inputKey": "properties.currency",
207
+ "outputKey": "currencyCode",
208
+ "transforms": [
209
+ {
210
+ "modifyString": "uppercase"
211
+ }
212
+ ],
213
+ "defaultString": "USD"
214
+ }
215
+ ]
216
+ },
217
+ "cart_viewed": {
218
+ "enrichments": [
219
+ {
220
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
221
+ "outputKey": "conversionDefinitionId"
222
+ }
223
+ ],
224
+ "mappings": [
225
+ {
226
+ "inputKey": "input",
227
+ "outputKey": "value",
228
+ "transforms": [
229
+ {
230
+ "expression": {
231
+ "lang": "lua",
232
+ "body": "return tonumber(string.format(\"%.2f\", SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end))))"
233
+ }
234
+ }
235
+ ]
236
+ },
237
+ {
238
+ "inputKey": "properties.currency",
239
+ "outputKey": "currencyCode",
240
+ "transforms": [
241
+ {
242
+ "modifyString": "uppercase"
243
+ }
244
+ ],
245
+ "defaultString": "USD"
246
+ }
247
+ ]
248
+ },
249
+ "order_completed": {
250
+ "enrichments": [
251
+ {
252
+ "staticString": "ADD_CONVERSION_DEFINITION_ID_HERE",
253
+ "outputKey": "conversionDefinitionId"
254
+ }
255
+ ],
256
+ "mappings": [
257
+ {
258
+ "inputKey": "input",
259
+ "outputKey": "value",
260
+ "transforms": [
261
+ {
262
+ "expression": {
263
+ "lang": "lua",
264
+ "body": "return tonumber(string.format(\"%.2f\", SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end))))"
265
+ }
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ "inputKey": "properties.currency",
271
+ "outputKey": "currencyCode",
272
+ "transforms": [
273
+ {
274
+ "modifyString": "uppercase"
275
+ }
276
+ ],
277
+ "defaultString": "USD"
278
+ },
279
+ {
280
+ "inputKey": "input",
281
+ "outputKey": "unitsSold",
282
+ "transforms": [
283
+ {
284
+ "expression": {
285
+ "lang": "lua",
286
+ "body": "return SUM(MAP(input.properties.products, function (p) return p.quantity or 1 end))"
287
+ }
288
+ }
289
+ ]
290
+ }
291
+ ]
292
+ }
293
+ },
294
+ "default": {
295
+ "enrichments": [
296
+ {
297
+ "staticString": "ADD_CATCH_ALL_CONVERSION_DEFINITION_ID_HERE",
298
+ "outputKey": "conversionDefinitionId"
299
+ }
300
+ ]
301
+ }
302
+ }
@@ -0,0 +1 @@
1
+ "105f65e48a756a72c4a073083ac8b64c"
@@ -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-kinesis": {
21
+ "region": "$$REGION$$",
22
+ "accessKey": "$$ACCESS_KEY$$",
23
+ "secretKey": "$$SECRET_KEY$$",
24
+ "streamName": "$$STREAM_NAME$$"
25
+ }
26
+ }
@@ -0,0 +1 @@
1
+ "d91edb5331081bd362fe3434d3283344"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Amazon Kinesis",
6
+ "description": "Amazon Kinesis enables you to process and analyze data as it arrives and respond instantly\ninstead of having to wait until all your data is collected before the processing can begin.",
7
+ "logo": "https://cdn.metarouter.io/logo.svg",
8
+ "color": "#f58532",
9
+ "eventSource": {
10
+ "isAndroidApp": true,
11
+ "isIosApp": true,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-05-21T00:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nAmazon Kinesis 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
- "9d01feb99d1a7d410d1b73df1b8d9962"
1
+ "108898d34641aa9470ad9db37a00668d"
@@ -25,6 +25,30 @@
25
25
  ],
26
26
  "additionalProperties": false
27
27
  },
28
+ "amazonKinesis": {
29
+ "type": "object",
30
+ "properties": {
31
+ "accessKey": {
32
+ "type": "string"
33
+ },
34
+ "region": {
35
+ "type": "string"
36
+ },
37
+ "secretKey": {
38
+ "type": "string"
39
+ },
40
+ "streamName": {
41
+ "type": "string"
42
+ }
43
+ },
44
+ "required": [
45
+ "region",
46
+ "accessKey",
47
+ "secretKey",
48
+ "streamName"
49
+ ],
50
+ "additionalProperties": false
51
+ },
28
52
  "blob": {
29
53
  "type": "object",
30
54
  "properties": {
@@ -1 +1 @@
1
- "7819ac44a9d64153d0fd61a2c915b561"
1
+ "578fea3d5d4f007c35921c81147ca109"
@@ -31,7 +31,7 @@
31
31
  },
32
32
  {
33
33
  "date": "2024-08-21T00:00:00.000Z",
34
- "note": "Version: 1.0.0\nAdding option to set datase creation mode to BIG_QUERY_OPTIONS_DISABLE_DATASET_CREATION\nThis will allow users to create save events without having the bigquery.datasets.create permission in their IAM role"
34
+ "note": "Version: 1.0.0\nAdding option to set dataset creation mode to BIG_QUERY_OPTIONS_DISABLE_DATASET_CREATION\nThis will allow users to create save events without having the bigquery.datasets.create permission in their IAM role"
35
35
  },
36
36
  {
37
37
  "date": "2025-01-16T00:00:00.000Z",
@@ -0,0 +1 @@
1
+ "c752be088c743ff1fb49d99ff5376984"
@@ -0,0 +1,28 @@
1
+ {
2
+ "default": {
3
+ "endpoint": "https://evt.undertone.com/tp",
4
+ "method": "POST",
5
+ "headers": [
6
+ {
7
+ "key": "Accept-Encoding",
8
+ "value": "application/json"
9
+ },
10
+ {
11
+ "key": "Content-Type",
12
+ "value": "application/json"
13
+ },
14
+ {
15
+ "key": "User-Agent",
16
+ "fromEventKey": "context.userAgent"
17
+ },
18
+ {
19
+ "key": "Referer",
20
+ "fromEventKey": "context.page.referrer"
21
+ },
22
+ {
23
+ "key": "X-Forwarded-For",
24
+ "fromEventKey": "context.ip"
25
+ }
26
+ ]
27
+ }
28
+ }
@@ -0,0 +1 @@
1
+ "1761f606655ae5484360bd92902ed7ca"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Perion",
6
+ "description": "Perion’s technology emphasizes AI-driven optimization, cross-channel integration, and measurable performance to help brands and publishers achieve scalable results.",
7
+ "logo": "https://cdn.metarouter.io/perion.png",
8
+ "color": "#00101A",
9
+ "eventSource": {
10
+ "isAndroidApp": false,
11
+ "isIosApp": false,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-05-21T21:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nPerion initial release"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "ec1aa1f8a06cda6ccdcc5953ddc3bfbd"
@@ -0,0 +1,197 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "params": [
4
+ {
5
+ "name": "ADVERTISER_ID",
6
+ "exampleValue": "my_advertiser_id"
7
+ }
8
+ ],
9
+ "global": {
10
+ "enrichments": [
11
+ {
12
+ "staticInt": 65,
13
+ "outputKey": "partner_id"
14
+ },
15
+ {
16
+ "staticString": "$$ADVERTISER_ID$$",
17
+ "outputKey": "advertiser_id"
18
+ }
19
+ ],
20
+ "mappings": [
21
+ {
22
+ "inputKey": "context.providers.perion.utid",
23
+ "outputKey": "user.id"
24
+ },
25
+ {
26
+ "inputKey": "context.providers.perion.sessionID",
27
+ "outputKey": "session_id"
28
+ },
29
+ {
30
+ "inputKey": "context.page.title",
31
+ "outputKey": "category"
32
+ },
33
+ {
34
+ "inputKey": "context.page.path",
35
+ "outputKey": "sub_category"
36
+ },
37
+ {
38
+ "inputKey": "context.ip",
39
+ "outputKey": "user.client_ip"
40
+ },
41
+ {
42
+ "inputKey": "context.userAgent",
43
+ "outputKey": "user.ua"
44
+ },
45
+ {
46
+ "inputKey": "context.page.referrer",
47
+ "outputKey": "referral_url"
48
+ },
49
+ {
50
+ "inputKey": "input",
51
+ "outputKey": "referral_source",
52
+ "transforms": [
53
+ {
54
+ "expression": {
55
+ "lang": "lua",
56
+ "body": "function get_referral_source(url)\n if url == nil or url == \"\" then\n return \"direct\"\n end\n\n local platforms = {\n \"twitter\",\n \"facebook\",\n \"instagram\",\n \"linkedin\",\n \"tiktok\"\n }\n\n for _, name in ipairs(platforms) do\n if string.find(url:lower(), name, 1, true) then\n return name\n end\n end\n\n return\nend\nlocal referral_source = get_referral_source(input.context.page.referrer)\nif referral_source then\n return referral_source\nelse\nend"
57
+ }
58
+ }
59
+ ]
60
+ }
61
+ ]
62
+ },
63
+ "default": {
64
+ "filters": [
65
+ {
66
+ "byEventNames": {
67
+ "action": "allow",
68
+ "events": [
69
+ ""
70
+ ]
71
+ }
72
+ }
73
+ ]
74
+ },
75
+ "eventSpecific": {
76
+ "order_completed": {
77
+ "mappings": [
78
+ {
79
+ "inputKey": "properties.currency",
80
+ "outputKey": "currency",
81
+ "transforms": [
82
+ {
83
+ "modifyString": "uppercase"
84
+ }
85
+ ]
86
+ },
87
+ {
88
+ "inputKey": "properties.order_id",
89
+ "outputKey": "transaction_id"
90
+ },
91
+ {
92
+ "inputKey": "properties.total",
93
+ "outputKey": "transaction_total"
94
+ },
95
+ {
96
+ "inputKey": "properties.coupon",
97
+ "outputKey": "coupon_code_used"
98
+ },
99
+ {
100
+ "inputKey": "properties.shipping",
101
+ "outputKey": "shipping_cost"
102
+ },
103
+ {
104
+ "inputKey": "input",
105
+ "outputKey": "products",
106
+ "transforms": [
107
+ {
108
+ "expression": {
109
+ "lang": "lua",
110
+ "body": "return MAP(input.properties.products, function(p)\n return {\n upc_id = p.product_id,\n sku_id = p.sku,\n product_name = p.name,\n product_category = p.category,\n quantity = p.quantity or 1,\n price = p.price,\n }\nend)"
111
+ }
112
+ }
113
+ ]
114
+ }
115
+ ],
116
+ "expressions": [
117
+ {
118
+ "lang": "lua",
119
+ "body": "return { tracker_ids = { ADD_SALE_TRACKER_IDS_HERE } }"
120
+ }
121
+ ]
122
+ },
123
+ "cart_viewed": {
124
+ "mappings": [
125
+ {
126
+ "inputKey": "properties.currency",
127
+ "outputKey": "currency",
128
+ "transforms": [
129
+ {
130
+ "modifyString": "uppercase"
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "inputKey": "properties.cart_id",
136
+ "outputKey": "transaction_id"
137
+ },
138
+ {
139
+ "inputKey": "input",
140
+ "outputKey": "transaction_total",
141
+ "transforms": [
142
+ {
143
+ "expression": {
144
+ "lang": "lua",
145
+ "body": "return TO_TRUNCATED_FLOAT(SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end)), 2)"
146
+ }
147
+ }
148
+ ]
149
+ },
150
+ {
151
+ "inputKey": "properties.shipping",
152
+ "outputKey": "shipping_cost"
153
+ },
154
+ {
155
+ "inputKey": "input",
156
+ "outputKey": "products",
157
+ "transforms": [
158
+ {
159
+ "expression": {
160
+ "lang": "lua",
161
+ "body": "return MAP(input.properties.products, function(p)\n return {\n upc_id = p.product_id,\n sku_id = p.sku,\n product_name = p.name,\n product_category = p.category,\n quantity = p.quantity or 1,\n price = p.price,\n }\nend)"
162
+ }
163
+ }
164
+ ]
165
+ }
166
+ ],
167
+ "expressions": [
168
+ {
169
+ "lang": "lua",
170
+ "body": "return { tracker_ids = { ADD_CART_TRACKER_IDS_HERE } }"
171
+ }
172
+ ]
173
+ },
174
+ "product_viewed": {
175
+ "mappings": [
176
+ {
177
+ "inputKey": "input",
178
+ "outputKey": "products",
179
+ "transforms": [
180
+ {
181
+ "expression": {
182
+ "lang": "lua",
183
+ "body": "local p = input.properties\nreturn {\n upc_id = p.product_id,\n sku_id = p.sku,\n product_name = p.name,\n product_category = p.category,\n quantity = p.quantity or 1,\n price = p.price,\n}"
184
+ }
185
+ }
186
+ ]
187
+ }
188
+ ],
189
+ "expressions": [
190
+ {
191
+ "lang": "lua",
192
+ "body": "return { tracker_ids = { ADD_SITE_VISIT_TRACKER_IDS_HERE } }"
193
+ }
194
+ ]
195
+ }
196
+ }
197
+ }
@@ -1 +1 @@
1
- "d90b144d640a0aa3de3d45e5c8bbd015"
1
+ "535415e5fdfd12b74463a24690207c69"
@@ -0,0 +1 @@
1
+ "c4ac4a3e61c6627205813494ee2e53c3"
@@ -0,0 +1,21 @@
1
+ {
2
+ "default": {
3
+ "endpoint": "https://insight.adsrvr.org/track/realtimeconversion",
4
+ "method": "POST",
5
+ "headers": [
6
+ {
7
+ "key": "Accept-Encoding",
8
+ "value": "application/json"
9
+ },
10
+ {
11
+ "key": "Content-Type",
12
+ "value": "application/json"
13
+ }
14
+ ],
15
+ "batchSize": 1,
16
+ "transform": {
17
+ "lang": "lua",
18
+ "body": "request.body = { data = batch }\nreturn request"
19
+ }
20
+ }
21
+ }
@@ -0,0 +1 @@
1
+ "3bc9b55f90e53425fd9ea6877858768d"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "The Trade Desk - Conversions",
6
+ "description": "The Trade Desk is a demand-side platform (DSP) that enables advertisers to purchase and manage digital advertising campaigns across various channels, including display, video, audio, native, and connected TV.",
7
+ "logo": "https://cdn.metarouter.io/ttd-conversions.png",
8
+ "color": "#00B1E1",
9
+ "eventSource": {
10
+ "isAndroidApp": true,
11
+ "isIosApp": true,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-06-04T21:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nThe Trade Desk - Conversions initial release"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "37dfc341f9dd88b38ea2a20235f77132"
@@ -0,0 +1,322 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "params": [
4
+ {
5
+ "name": "PIXEL_ID",
6
+ "exampleValue": "my-pixel-id"
7
+ },
8
+ {
9
+ "name": "MERCHANT_ID",
10
+ "exampleValue": "my-merchant-id",
11
+ "isOptional": true
12
+ },
13
+ {
14
+ "name": "ADVERTISER_ID",
15
+ "exampleValue": "my-advertiser-id",
16
+ "isOptional": true
17
+ }
18
+ ],
19
+ "global": {
20
+ "enrichments": [
21
+ {
22
+ "staticString": "$$MERCHANT_ID$$",
23
+ "outputKey": "merchant_id"
24
+ },
25
+ {
26
+ "staticString": "$$ADVERTISER_ID$$",
27
+ "outputKey": "adv"
28
+ },
29
+ {
30
+ "staticString": "$$PIXEL_ID$$",
31
+ "outputKey": "pixel_id"
32
+ }
33
+ ],
34
+ "mappings": [
35
+ {
36
+ "inputKey": "input",
37
+ "outputKey": "data_processing_option",
38
+ "transforms": [
39
+ {
40
+ "expression": {
41
+ "lang": "lua",
42
+ "body": "return { policies = { \"\" }, region = \"\" }"
43
+ }
44
+ }
45
+ ]
46
+ },
47
+ {
48
+ "inputKey": "context.providers.unifiedId2.uid2_id",
49
+ "outputKey": "uid2"
50
+ },
51
+ {
52
+ "inputKey": "context.providers.theTradeDesk.ttd_id",
53
+ "outputKey": "tdid"
54
+ },
55
+ {
56
+ "inputKey": "context.device.advertisingId",
57
+ "outputKey": "daid"
58
+ },
59
+ {
60
+ "inputKey": "context.ip",
61
+ "outputKey": "client_ip"
62
+ },
63
+ {
64
+ "inputKey": "context.page.url",
65
+ "outputKey": "referrer_url"
66
+ },
67
+ {
68
+ "inputKey": "input",
69
+ "outputKey": "city",
70
+ "transforms": [
71
+ {
72
+ "expression": {
73
+ "lang": "lua",
74
+ "body": "local city = input.traits.address.city or input.context.traits.address.city\nif (city) then return city end"
75
+ }
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "inputKey": "input",
81
+ "outputKey": "region",
82
+ "transforms": [
83
+ {
84
+ "expression": {
85
+ "lang": "lua",
86
+ "body": "local state = input.traits.address.state or input.context.traits.address.state\nif (state) then return state end"
87
+ }
88
+ }
89
+ ]
90
+ },
91
+ {
92
+ "inputKey": "input",
93
+ "outputKey": "zip",
94
+ "transforms": [
95
+ {
96
+ "expression": {
97
+ "lang": "lua",
98
+ "body": "local postalCode = input.traits.address.postalCode or input.context.traits.address.postalCode\nif (postalCode) then return postalCode end"
99
+ }
100
+ }
101
+ ]
102
+ },
103
+ {
104
+ "inputKey": "input",
105
+ "outputKey": "country",
106
+ "transforms": [
107
+ {
108
+ "expression": {
109
+ "lang": "lua",
110
+ "body": "local country = input.traits.address.country or input.context.traits.address.country\nif (country) then return country end"
111
+ }
112
+ }
113
+ ]
114
+ }
115
+ ],
116
+ "expressions": [
117
+ {
118
+ "lang": "lua",
119
+ "body": "local result = {}\n\n-- advertisindId\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\n-- adid\nif input.context.providers.unifiedId2.uid2_id then\n result.adid = input.context.providers.unifiedId2.uid2_id\n result.adid_type = \"UID2\"\nelseif 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"
120
+ }
121
+ ]
122
+ },
123
+ "default": {
124
+ "filters": [
125
+ {
126
+ "byEventNames": {
127
+ "action": "allow",
128
+ "events": [
129
+ ""
130
+ ]
131
+ }
132
+ }
133
+ ]
134
+ },
135
+ "eventSpecific": {
136
+ "screen": {
137
+ "enrichments": [
138
+ {
139
+ "staticString": "sitevisit",
140
+ "outputKey": "event_name"
141
+ }
142
+ ]
143
+ },
144
+ "page": {
145
+ "enrichments": [
146
+ {
147
+ "staticString": "sitevisit",
148
+ "outputKey": "event_name"
149
+ }
150
+ ]
151
+ },
152
+ "products_searched": {
153
+ "enrichments": [
154
+ {
155
+ "staticString": "searchcategory",
156
+ "outputKey": "event_name"
157
+ }
158
+ ]
159
+ },
160
+ "product_viewed": {
161
+ "enrichments": [
162
+ {
163
+ "staticString": "viewitem",
164
+ "outputKey": "event_name"
165
+ }
166
+ ],
167
+ "mappings": [
168
+ {
169
+ "inputKey": "input",
170
+ "outputKey": "items",
171
+ "transforms": [
172
+ {
173
+ "expression": {
174
+ "lang": "lua",
175
+ "body": "local p = input.properties\nreturn {\n{\n item_code = p.product_id or p.sku,\n name = p.name,\n qty = p.quantity or 1,\n price = p.price,\n cat = p.category,\n}\n}"
176
+ }
177
+ }
178
+ ]
179
+ }
180
+ ]
181
+ },
182
+ "product_added": {
183
+ "enrichments": [
184
+ {
185
+ "staticString": "addtocart",
186
+ "outputKey": "event_name"
187
+ }
188
+ ],
189
+ "mappings": [
190
+ {
191
+ "inputKey": "input",
192
+ "outputKey": "items",
193
+ "transforms": [
194
+ {
195
+ "expression": {
196
+ "lang": "lua",
197
+ "body": "local p = input.properties\nreturn {\n{\n item_code = p.product_id or p.sku,\n name = p.name,\n qty = p.quantity or 1,\n price = p.price,\n cat = p.category,\n}\n}"
198
+ }
199
+ }
200
+ ]
201
+ }
202
+ ]
203
+ },
204
+ "cart_viewed": {
205
+ "enrichments": [
206
+ {
207
+ "staticString": "viewcart",
208
+ "outputKey": "event_name"
209
+ }
210
+ ],
211
+ "mappings": [
212
+ {
213
+ "inputKey": "input",
214
+ "outputKey": "items",
215
+ "transforms": [
216
+ {
217
+ "expression": {
218
+ "lang": "lua",
219
+ "body": "return MAP(input.properties.products, function(p)\n return {\n item_code = p.product_id or p.sku,\n name = p.name,\n qty = p.quantity or 1,\n price = p.price,\n cat = p.category,\n }\nend)"
220
+ }
221
+ }
222
+ ]
223
+ }
224
+ ]
225
+ },
226
+ "checkout_started": {
227
+ "enrichments": [
228
+ {
229
+ "staticString": "startcheckout",
230
+ "outputKey": "event_name"
231
+ }
232
+ ],
233
+ "mappings": [
234
+ {
235
+ "inputKey": "properties.order_id",
236
+ "outputKey": "order_id"
237
+ },
238
+ {
239
+ "inputKey": "input",
240
+ "outputKey": "items",
241
+ "transforms": [
242
+ {
243
+ "expression": {
244
+ "lang": "lua",
245
+ "body": "return MAP(input.properties.products, function(p)\n return {\n item_code = p.product_id or p.sku,\n name = p.name,\n qty = p.quantity or 1,\n price = p.price,\n cat = p.category,\n }\nend)"
246
+ }
247
+ }
248
+ ]
249
+ }
250
+ ]
251
+ },
252
+ "order_completed": {
253
+ "enrichments": [
254
+ {
255
+ "staticString": "purchase",
256
+ "outputKey": "event_name"
257
+ }
258
+ ],
259
+ "mappings": [
260
+ {
261
+ "inputKey": "properties.order_id",
262
+ "outputKey": "order_id"
263
+ },
264
+ {
265
+ "inputKey": "properties.currency",
266
+ "outputKey": "currency",
267
+ "transforms": [
268
+ {
269
+ "modifyString": "uppercase"
270
+ }
271
+ ]
272
+ },
273
+ {
274
+ "inputKey": "input",
275
+ "outputKey": "value",
276
+ "transforms": [
277
+ {
278
+ "expression": {
279
+ "lang": "lua",
280
+ "body": "local value = input.properties.revenue or input.properties.total\nreturn TO_TRUNCATED_FLOAT(value, 2)"
281
+ }
282
+ }
283
+ ]
284
+ },
285
+ {
286
+ "inputKey": "input",
287
+ "outputKey": "items",
288
+ "transforms": [
289
+ {
290
+ "expression": {
291
+ "lang": "lua",
292
+ "body": "return MAP(input.properties.products, function(p)\n return {\n item_code = p.product_id or p.sku,\n name = p.name,\n qty = p.quantity or 1,\n price = p.price,\n cat = p.category,\n }\nend)"
293
+ }
294
+ }
295
+ ]
296
+ }
297
+ ]
298
+ },
299
+ "product_added_to_wishlist": {
300
+ "enrichments": [
301
+ {
302
+ "staticString": "wishlistitem",
303
+ "outputKey": "event_name"
304
+ }
305
+ ],
306
+ "mappings": [
307
+ {
308
+ "inputKey": "input",
309
+ "outputKey": "items",
310
+ "transforms": [
311
+ {
312
+ "expression": {
313
+ "lang": "lua",
314
+ "body": "local p = input.properties\nreturn {\n{\n item_code = p.product_id or p.sku,\n name = p.name,\n qty = p.quantity or 1,\n price = p.price,\n cat = p.category,\n}\n}"
315
+ }
316
+ }
317
+ ]
318
+ }
319
+ ]
320
+ }
321
+ }
322
+ }
package/README.md CHANGED
@@ -5,7 +5,13 @@ 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-06
9
+ - The Trade Desk - Conversions (BETA)
10
+
8
11
  ## 2025-05
12
+ - Amazon DSP CAPI (BETA)
13
+ - Amazon Kinesis (BETA)
14
+ - Perion (BETA)
9
15
  - TheTradeDesk Conversion Events
10
16
 
11
17
  ## 2025-04
@@ -116,6 +122,10 @@ previously.
116
122
 
117
123
  | Kit Name | Date | Latest Note |
118
124
  |----------|------|-------------|
125
+ | The Trade Desk - Conversions (BETA) | 2025-06 | Version: 0.1.0 Beta Version The Trade Desk - Conversions initial release |
126
+ | Amazon DSP CAPI (BETA) | 2025-05 | Version: 0.1.0 Beta Version Amazon DSP CAPI initial release. |
127
+ | Amazon Kinesis (BETA) | 2025-05 | Version: 0.1.0 Beta Version Amazon Kinesis initial release. |
128
+ | Perion (BETA) | 2025-05 | Version: 0.1.0 Beta Version Perion initial release |
119
129
  | TheTradeDesk Conversion Events | 2025-05 | Version: 1.2.0 Deprecated |
120
130
  | Amazon Data Firehose | 2025-04 | Version: 1.0.0 Stable release |
121
131
  | Meta CAPI | 2025-04 | Version: 1.5.0 Friendly name updated |
package/index.js CHANGED
@@ -8,6 +8,12 @@ exports['amazon-data-firehose'] = {
8
8
  metadata: require('./.dist/amazon-data-firehose/metadata.json')
9
9
  }
10
10
 
11
+ exports['amazon-kinesis'] = {
12
+ connectionTemplate: connectionSchemas.properties.amazonKinesis,
13
+ playbook: require('./.dist/amazon-kinesis/playbook.json'),
14
+ metadata: require('./.dist/amazon-kinesis/metadata.json')
15
+ }
16
+
11
17
  exports.blob = {
12
18
  connectionTemplate: connectionSchemas.properties.blob,
13
19
  playbook: require('./.dist/blob/playbook.json'),
@@ -100,6 +106,12 @@ exports.adroll = {
100
106
  metadata: require('./.dist/adroll/metadata.json')
101
107
  }
102
108
 
109
+ exports['amazon-dsp-capi'] = {
110
+ endpointSchema: require('./.dist/amazon-dsp-capi/connection.json'),
111
+ playbook: require('./.dist/amazon-dsp-capi/playbook.json'),
112
+ metadata: require('./.dist/amazon-dsp-capi/metadata.json')
113
+ }
114
+
103
115
  exports.amnet = {
104
116
  endpointSchema: require('./.dist/amnet/connection.json'),
105
117
  playbook: require('./.dist/amnet/playbook.json'),
@@ -351,6 +363,12 @@ exports['nextdoor-capi'] = {
351
363
  metadata: require('./.dist/nextdoor-capi/metadata.json')
352
364
  }
353
365
 
366
+ exports['perion'] = {
367
+ endpointSchema: require('./.dist/perion/connection.json'),
368
+ playbook: require('./.dist/perion/playbook.json'),
369
+ metadata: require('./.dist/perion/metadata.json')
370
+ }
371
+
354
372
  exports.pinterest = {
355
373
  endpointSchema: require('./.dist/pinterest/connection.json'),
356
374
  playbook: require('./.dist/pinterest/playbook.json'),
@@ -453,6 +471,12 @@ exports['treasure-data'] = {
453
471
  metadata: require('./.dist/treasure-data/metadata.json')
454
472
  }
455
473
 
474
+ exports['ttd-conversions'] = {
475
+ endpointSchema: require('./.dist/ttd-conversions/connection.json'),
476
+ playbook: require('./.dist/ttd-conversions/playbook.json'),
477
+ metadata: require('./.dist/ttd-conversions/metadata.json')
478
+ }
479
+
456
480
  exports['twitter-conversions'] = {
457
481
  endpointSchema: require('./.dist/twitter-conversions/connection.json'),
458
482
  playbook: require('./.dist/twitter-conversions/playbook.json'),
@@ -507,6 +531,10 @@ exports.etags = {
507
531
  playbook: require('./.dist/amazon-data-firehose/playbook.etag.json'),
508
532
  kit: require('./.dist/amazon-data-firehose/kit.etag.json')
509
533
  },
534
+ 'amazon-kinesis': {
535
+ playbook: require('./.dist/amazon-kinesis/playbook.etag.json'),
536
+ kit: require('./.dist/amazon-kinesis/kit.etag.json')
537
+ },
510
538
  blob: {
511
539
  playbook: require('./.dist/blob/playbook.etag.json'),
512
540
  kit: require('./.dist/blob/kit.etag.json')
@@ -574,6 +602,11 @@ exports.etags = {
574
602
  playbook: require('./.dist/adroll/playbook.etag.json'),
575
603
  kit: require('./.dist/adroll/kit.etag.json')
576
604
  },
605
+ 'amazon-dsp-capi': {
606
+ endpointSchema: require('./.dist/amazon-dsp-capi/connection.etag.json'),
607
+ playbook: require('./.dist/amazon-dsp-capi/playbook.etag.json'),
608
+ kit: require('./.dist/amazon-dsp-capi/kit.etag.json')
609
+ },
577
610
  amnet: {
578
611
  endpointSchema: require('./.dist/amnet/connection.etag.json'),
579
612
  playbook: require('./.dist/amnet/playbook.etag.json'),
@@ -783,6 +816,11 @@ exports.etags = {
783
816
  playbook: require('./.dist/nextdoor-capi/playbook.etag.json'),
784
817
  kit: require('./.dist/nextdoor-capi/kit.etag.json')
785
818
  },
819
+ 'perion': {
820
+ endpointSchema: require('./.dist/perion/connection.etag.json'),
821
+ playbook: require('./.dist/perion/playbook.etag.json'),
822
+ kit: require('./.dist/perion/kit.etag.json')
823
+ },
786
824
  pinterest: {
787
825
  endpointSchema: require('./.dist/pinterest/connection.etag.json'),
788
826
  playbook: require('./.dist/pinterest/playbook.etag.json'),
@@ -868,6 +906,11 @@ exports.etags = {
868
906
  playbook: require('./.dist/treasure-data/playbook.etag.json'),
869
907
  kit: require('./.dist/treasure-data/kit.etag.json')
870
908
  },
909
+ 'ttd-conversions': {
910
+ endpointSchema: require('./.dist/ttd-conversions/connection.etag.json'),
911
+ playbook: require('./.dist/ttd-conversions/playbook.etag.json'),
912
+ kit: require('./.dist/ttd-conversions/kit.etag.json')
913
+ },
871
914
  'twitter-conversions': {
872
915
  endpointSchema: require('./.dist/twitter-conversions/connection.etag.json'),
873
916
  playbook: require('./.dist/twitter-conversions/playbook.etag.json'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metarouter/ajs-starter-kit",
3
- "version": "1.0.129",
3
+ "version": "1.0.131",
4
4
  "description": "MetaRouter analytics.js starter kit",
5
5
  "main": "index.js",
6
6
  "scripts": {