@metarouter/ajs-starter-kit 1.0.131 → 1.0.132

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.
@@ -1 +1 @@
1
- "1584d8d67288741c5b5c29a1c48d5b5d"
1
+ "841fdf2b7b606d7cbbc96a7918a92a6f"
@@ -8,17 +8,5 @@
8
8
  }
9
9
  ],
10
10
  "method": "POST"
11
- },
12
- "eventSpecific": {
13
- "identify": {
14
- "endpoint": "http://control.kochava.com/v1/cpi/identityLink.php",
15
- "headers": [
16
- {
17
- "key": "Accept-Encoding",
18
- "value": "application/json"
19
- }
20
- ],
21
- "method": "POST"
22
- }
23
11
  }
24
12
  }
@@ -1 +1 @@
1
- "7b098ec180d3c2e1f645a15a1ef24431"
1
+ "801d08efe8e643ed91a2b84a1dbf5d15"
@@ -3,27 +3,19 @@
3
3
  "isDeprecated": false,
4
4
  "isBeta": true,
5
5
  "friendlyName": "Kochava",
6
- "description": "Kochava offers mobile app attribution and mobile app analytics for full app performance through the funnel.",
6
+ "description": "Kochava is a mobile attribution and analytics platform that helps marketers measure and optimize their advertising campaigns across devices and channels.",
7
7
  "logo": "https://cdn.metarouter.io/logo.svg",
8
- "color": "#ff0000",
8
+ "color": "#E6002B",
9
9
  "eventSource": {
10
10
  "isAndroidApp": true,
11
11
  "isIosApp": true,
12
- "isWebApp": false
12
+ "isWebApp": true
13
13
  },
14
14
  "inputSchema": "analytics_js",
15
15
  "releaseNotes": [
16
16
  {
17
- "date": "2023-09-07T00:00:00.000Z",
18
- "note": "Kochava initial release."
19
- },
20
- {
21
- "date": "2023-12-13T00:00:00.000Z",
22
- "note": "Marked as unstable version: 0.1.0\n- date: 2024-08-22T00:00:00.000000Z\n note: |-\n Version 0.2.0\n timestamp field is used as the event time"
23
- },
24
- {
25
- "date": "2024-10-23T00:00:00.000Z",
26
- "note": "Version: 0.3.0\nAdded header `Accept-Encoding: application/json`"
17
+ "date": "2025-06-25T00:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nKochava non-identify initial release\nMoved the identify event to its dedicated starter-kit: kochava-identitylink"
27
19
  }
28
20
  ]
29
21
  }
@@ -1 +1 @@
1
- "be21e234afabcf58f151096c20684621"
1
+ "9741bc202bdea857bd53664ccdc04e2c"
@@ -1,16 +1,22 @@
1
1
  {
2
- "version": "0.3.0",
2
+ "version": "0.1.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "KOCHAVA_APP_ID",
6
6
  "exampleValue": "my-kochava-app-id"
7
- },
8
- {
9
- "name": "USER_ID",
10
- "exampleValue": "my-user-id"
11
7
  }
12
8
  ],
13
9
  "global": {
10
+ "filters": [
11
+ {
12
+ "byEventNames": {
13
+ "action": "deny",
14
+ "events": [
15
+ "identify"
16
+ ]
17
+ }
18
+ }
19
+ ],
14
20
  "enrichments": [
15
21
  {
16
22
  "staticString": "$$KOCHAVA_APP_ID$$",
@@ -21,6 +27,56 @@
21
27
  {
22
28
  "inputKey": "anonymousId",
23
29
  "outputKey": "kochava_device_id"
30
+ },
31
+ {
32
+ "inputKey": "context.os.version",
33
+ "outputKey": "data.device_ver",
34
+ "defaultString": ""
35
+ },
36
+ {
37
+ "inputKey": "context.device.adTrackingEnabled",
38
+ "outputKey": "data.app_tracking_transparency.att",
39
+ "defaultBool": false
40
+ },
41
+ {
42
+ "inputKey": "input",
43
+ "outputKey": "data.device_ids",
44
+ "transforms": [
45
+ {
46
+ "expression": {
47
+ "lang": "lua",
48
+ "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId,\n idfv = input.context.device.id\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId,\n android_id = input.context.device.id\n }\nend"
49
+ }
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "inputKey": "context.ip",
55
+ "outputKey": "data.origination_ip"
56
+ },
57
+ {
58
+ "inputKey": "context.userAgent",
59
+ "outputKey": "data.device_ua"
60
+ },
61
+ {
62
+ "inputKey": "context.app.version",
63
+ "outputKey": "data.app_version"
64
+ },
65
+ {
66
+ "inputKey": "input",
67
+ "outputKey": "data.usertime",
68
+ "transforms": [
69
+ {
70
+ "expression": {
71
+ "lang": "lua",
72
+ "body": "local date = input.timestamp or input.originalTimestamp or input.sentAt\nreturn MILLISECONDS_SINCE_EPOCH_FROM_RFC3999(TO_DATE_TIME(date, { inputFormat = \"2006-01-02T15:04:05Z07:00\" }))"
73
+ }
74
+ }
75
+ ]
76
+ },
77
+ {
78
+ "inputKey": "context.page.referrer",
79
+ "outputKey": "data.event_data.referrer"
24
80
  }
25
81
  ]
26
82
  },
@@ -34,135 +90,108 @@
34
90
  ],
35
91
  "mappings": [
36
92
  {
37
- "inputKey": "context.device.adTrackingEnabled",
38
- "outputKey": "data.app_tracking_transparency.att",
39
- "defaultBool": false
40
- },
41
- {
42
- "inputKey": "context.device.advertisingId",
43
- "outputKey": "data.device_ids",
44
- "transforms": [
45
- {
46
- "expression": {
47
- "lang": "lua",
48
- "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId,\n idfv = input.context.device.id\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId,\n android_id = input.context.device.id\n }\nend"
49
- }
50
- }
51
- ]
52
- },
53
- {
54
- "inputKey": "context.ip",
55
- "outputKey": "data.origination_ip"
56
- },
57
- {
58
- "inputKey": "context.userAgent",
59
- "outputKey": "data.device_ua"
60
- },
61
- {
62
- "inputKey": "context.library.version",
63
- "outputKey": "data.app_version"
64
- },
65
- {
66
- "inputKey": "input",
67
- "outputKey": "data.usertime",
68
- "transforms": [
69
- {
70
- "expression": {
71
- "lang": "lua",
72
- "body": "return MILLISECONDS_SINCE_EPOCH(input.timestamp or input.receivedAt)"
73
- }
74
- }
75
- ]
93
+ "inputKey": "context.device.model",
94
+ "outputKey": "data.event_data.device_model"
76
95
  }
77
96
  ]
78
97
  },
79
- "identify": {
98
+ "products_searched": {
80
99
  "enrichments": [
81
100
  {
82
- "staticString": "$$USER_ID$$",
83
- "outputKey": "data.app_userid"
101
+ "staticString": "event",
102
+ "outputKey": "action"
103
+ },
104
+ {
105
+ "staticString": "Search",
106
+ "outputKey": "data.event_name"
84
107
  }
85
108
  ],
86
109
  "mappings": [
87
110
  {
88
- "inputKey": "context.device.advertisingId",
89
- "outputKey": "device_id",
90
- "transforms": [
91
- {
92
- "expression": {
93
- "lang": "lua",
94
- "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId\n }\nend"
95
- }
96
- }
97
- ]
111
+ "inputKey": "properties.query",
112
+ "outputKey": "data.event_data.query"
98
113
  }
99
114
  ]
100
115
  },
101
- "checkout_started": {
116
+ "product_list_viewed": {
102
117
  "enrichments": [
103
118
  {
104
119
  "staticString": "event",
105
120
  "outputKey": "action"
106
- },
107
- {
108
- "staticString": "",
109
- "outputKey": "data.device_ver"
110
- },
111
- {
112
- "staticString": "Checkout Start",
113
- "outputKey": "data.event_name"
114
121
  }
115
122
  ],
116
123
  "mappings": [
117
124
  {
118
- "inputKey": "context.device.adTrackingEnabled",
119
- "outputKey": "data.app_tracking_transparency.att",
120
- "defaultBool": false
125
+ "inputKey": "event",
126
+ "outputKey": "data.event_name"
121
127
  },
122
128
  {
123
- "inputKey": "context.device.advertisingId",
124
- "outputKey": "data.device_ids",
129
+ "inputKey": "input",
130
+ "outputKey": "data.event_data.sum",
125
131
  "transforms": [
126
132
  {
127
133
  "expression": {
128
134
  "lang": "lua",
129
- "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId,\n idfv = input.context.device.id\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId,\n android_id = input.context.device.id\n }\nend"
135
+ "body": "return TOTAL_VALUE(input.properties.products)"
130
136
  }
131
137
  }
132
138
  ]
133
139
  },
134
140
  {
135
- "inputKey": "context.ip",
136
- "outputKey": "data.origination_ip"
137
- },
138
- {
139
- "inputKey": "context.userAgent",
140
- "outputKey": "data.device_ua"
141
+ "inputKey": "properties.currency",
142
+ "outputKey": "data.event_data.currency",
143
+ "transforms": [
144
+ {
145
+ "modifyString": "uppercase"
146
+ }
147
+ ],
148
+ "defaultString": "USD"
141
149
  },
142
150
  {
143
- "inputKey": "context.library.version",
144
- "outputKey": "data.app_version"
151
+ "inputKey": "properties.products",
152
+ "outputKey": "data.event_data.content_ids",
153
+ "transforms": [
154
+ {
155
+ "pluckValues": {
156
+ "extractKey": "product_id"
157
+ }
158
+ }
159
+ ]
145
160
  },
146
161
  {
147
162
  "inputKey": "input",
148
- "outputKey": "data.event_data.name",
163
+ "outputKey": "data.event_data.contents",
149
164
  "transforms": [
150
165
  {
151
166
  "expression": {
152
167
  "lang": "lua",
153
- "body": "return JOIN(PLUCK(input.properties.products, 'name'), ',')"
168
+ "body": "return MAP(\n input.properties.products,\n function (product)\n return {\n content_id = product.product_id or product.sku,\n name = product.name,\n quantity = product.quantity or 1,\n price = product.price\n }\n end\n)"
154
169
  }
155
170
  }
156
171
  ]
172
+ }
173
+ ]
174
+ },
175
+ "product_viewed": {
176
+ "enrichments": [
177
+ {
178
+ "staticString": "event",
179
+ "outputKey": "action"
180
+ }
181
+ ],
182
+ "mappings": [
183
+ {
184
+ "inputKey": "event",
185
+ "outputKey": "data.event_name"
157
186
  },
158
187
  {
159
188
  "inputKey": "input",
160
- "outputKey": "data.event_data.content_id",
189
+ "outputKey": "data.event_data.sum",
161
190
  "transforms": [
162
191
  {
163
192
  "expression": {
164
193
  "lang": "lua",
165
- "body": "return JOIN(PLUCK(input.properties.products, 'product_id'), ',')"
194
+ "body": "return TOTAL_VALUE(input.properties)"
166
195
  }
167
196
  }
168
197
  ]
@@ -174,98 +203,118 @@
174
203
  {
175
204
  "modifyString": "uppercase"
176
205
  }
177
- ]
206
+ ],
207
+ "defaultString": "USD"
178
208
  },
179
209
  {
180
- "inputKey": "properties.quantity",
181
- "outputKey": "data.event_data.quantity"
210
+ "inputKey": "input",
211
+ "outputKey": "data.event_data.content_ids",
212
+ "transforms": [
213
+ {
214
+ "expression": {
215
+ "lang": "lua",
216
+ "body": "return { input.properties.product_id }"
217
+ }
218
+ }
219
+ ]
182
220
  },
183
221
  {
184
222
  "inputKey": "input",
185
- "outputKey": "data.usertime",
223
+ "outputKey": "data.event_data.contents",
186
224
  "transforms": [
187
225
  {
188
226
  "expression": {
189
227
  "lang": "lua",
190
- "body": "return MILLISECONDS_SINCE_EPOCH(input.receivedAt)"
228
+ "body": "return {{\n id = input.properties.product_id,\n name = product.name,\n quantity = input.properties.quantity or 1,\n price = input.properties.price\n}}"
191
229
  }
192
230
  }
193
231
  ]
194
232
  }
195
233
  ]
196
234
  },
197
- "order_completed": {
235
+ "product_added": {
198
236
  "enrichments": [
199
237
  {
200
238
  "staticString": "event",
201
239
  "outputKey": "action"
202
240
  },
203
241
  {
204
- "staticString": "",
205
- "outputKey": "data.device_ver"
206
- },
207
- {
208
- "staticString": "Purchase",
242
+ "staticString": "Add to Cart",
209
243
  "outputKey": "data.event_name"
210
244
  }
211
245
  ],
212
246
  "mappings": [
213
247
  {
214
- "inputKey": "context.device.adTrackingEnabled",
215
- "outputKey": "data.app_tracking_transparency.att",
216
- "defaultBool": false
217
- },
218
- {
219
- "inputKey": "context.device.advertisingId",
220
- "outputKey": "data.device_ids",
248
+ "inputKey": "input",
249
+ "outputKey": "data.event_data.sum",
221
250
  "transforms": [
222
251
  {
223
252
  "expression": {
224
253
  "lang": "lua",
225
- "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId,\n idfv = input.context.device.id\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId,\n android_id = input.context.device.id\n }\nend"
254
+ "body": "return TOTAL_VALUE(input.properties)"
226
255
  }
227
256
  }
228
257
  ]
229
258
  },
230
259
  {
231
- "inputKey": "context.ip",
232
- "outputKey": "data.origination_ip"
233
- },
234
- {
235
- "inputKey": "context.userAgent",
236
- "outputKey": "data.device_ua"
237
- },
238
- {
239
- "inputKey": "context.library.version",
240
- "outputKey": "data.app_version"
260
+ "inputKey": "properties.currency",
261
+ "outputKey": "data.event_data.currency",
262
+ "transforms": [
263
+ {
264
+ "modifyString": "uppercase"
265
+ }
266
+ ],
267
+ "defaultString": "USD"
241
268
  },
242
269
  {
243
270
  "inputKey": "input",
244
- "outputKey": "data.event_data.name",
271
+ "outputKey": "data.event_data.content_ids",
245
272
  "transforms": [
246
273
  {
247
274
  "expression": {
248
275
  "lang": "lua",
249
- "body": "return JOIN(PLUCK(input.properties.products, 'name'), ',')"
276
+ "body": "return { input.properties.product_id }"
250
277
  }
251
278
  }
252
279
  ]
253
280
  },
254
281
  {
255
282
  "inputKey": "input",
256
- "outputKey": "data.event_data.content_id",
283
+ "outputKey": "data.event_data.contents",
257
284
  "transforms": [
258
285
  {
259
286
  "expression": {
260
287
  "lang": "lua",
261
- "body": "return JOIN(PLUCK(input.properties.products, 'product_id'), ',')"
288
+ "body": "return {{\n id = input.properties.product_id,\n name = product.name,\n quantity = input.properties.quantity or 1,\n price = input.properties.price\n}}"
262
289
  }
263
290
  }
264
291
  ]
292
+ }
293
+ ]
294
+ },
295
+ "cart_viewed": {
296
+ "enrichments": [
297
+ {
298
+ "staticString": "event",
299
+ "outputKey": "action"
300
+ }
301
+ ],
302
+ "mappings": [
303
+ {
304
+ "inputKey": "event",
305
+ "outputKey": "data.event_name"
265
306
  },
266
307
  {
267
- "inputKey": "properties.revenue",
268
- "outputKey": "data.event_data.price"
308
+ "inputKey": "input",
309
+ "outputKey": "data.event_data.sum",
310
+ "transforms": [
311
+ {
312
+ "expression": {
313
+ "lang": "lua",
314
+ "body": "return TOTAL_VALUE(input.properties.products)"
315
+ }
316
+ }
317
+ ]
269
318
  },
270
319
  {
271
320
  "inputKey": "properties.currency",
@@ -274,150 +323,150 @@
274
323
  {
275
324
  "modifyString": "uppercase"
276
325
  }
326
+ ],
327
+ "defaultString": "USD"
328
+ },
329
+ {
330
+ "inputKey": "properties.products",
331
+ "outputKey": "data.event_data.content_ids",
332
+ "transforms": [
333
+ {
334
+ "pluckValues": {
335
+ "extractKey": "product_id"
336
+ }
337
+ }
277
338
  ]
278
339
  },
279
340
  {
280
341
  "inputKey": "input",
281
- "outputKey": "data.usertime",
342
+ "outputKey": "data.event_data.contents",
282
343
  "transforms": [
283
344
  {
284
345
  "expression": {
285
346
  "lang": "lua",
286
- "body": "return MILLISECONDS_SINCE_EPOCH(input.receivedAt)"
347
+ "body": "return MAP(\n input.properties.products,\n function (product)\n return {\n content_id = product.product_id or product.sku,\n name = product.name,\n quantity = product.quantity or 1,\n price = product.price\n }\n end\n)"
287
348
  }
288
349
  }
289
350
  ]
290
351
  }
291
352
  ]
292
353
  },
293
- "product_added": {
354
+ "checkout_started": {
294
355
  "enrichments": [
295
356
  {
296
357
  "staticString": "event",
297
358
  "outputKey": "action"
298
359
  },
299
360
  {
300
- "staticString": "",
301
- "outputKey": "data.device_ver"
302
- },
303
- {
304
- "staticString": "Add to Cart",
361
+ "staticString": "Checkout Start",
305
362
  "outputKey": "data.event_name"
306
363
  }
307
364
  ],
308
365
  "mappings": [
309
366
  {
310
- "inputKey": "context.device.adTrackingEnabled",
311
- "outputKey": "data.app_tracking_transparency.att",
312
- "defaultBool": false
313
- },
314
- {
315
- "inputKey": "context.device.advertisingId",
316
- "outputKey": "data.device_ids",
367
+ "inputKey": "input",
368
+ "outputKey": "data.event_data.sum",
317
369
  "transforms": [
318
370
  {
319
371
  "expression": {
320
372
  "lang": "lua",
321
- "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId,\n idfv = input.context.device.id\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId,\n android_id = input.context.device.id\n }\nend"
373
+ "body": "return TOTAL_VALUE(input.properties.products)"
322
374
  }
323
375
  }
324
376
  ]
325
377
  },
326
378
  {
327
- "inputKey": "context.ip",
328
- "outputKey": "data.origination_ip"
329
- },
330
- {
331
- "inputKey": "context.userAgent",
332
- "outputKey": "data.device_ua"
333
- },
334
- {
335
- "inputKey": "context.library.version",
336
- "outputKey": "data.app_version"
337
- },
338
- {
339
- "inputKey": "properties.name",
340
- "outputKey": "data.event_data.name"
341
- },
342
- {
343
- "inputKey": "properties.product_id",
344
- "outputKey": "data.event_data.content_id"
379
+ "inputKey": "properties.currency",
380
+ "outputKey": "data.event_data.currency",
381
+ "transforms": [
382
+ {
383
+ "modifyString": "uppercase"
384
+ }
385
+ ],
386
+ "defaultString": "USD"
345
387
  },
346
388
  {
347
- "inputKey": "properties.quantity",
348
- "outputKey": "data.event_data.quantity"
389
+ "inputKey": "properties.products",
390
+ "outputKey": "data.event_data.content_ids",
391
+ "transforms": [
392
+ {
393
+ "pluckValues": {
394
+ "extractKey": "product_id"
395
+ }
396
+ }
397
+ ]
349
398
  },
350
399
  {
351
400
  "inputKey": "input",
352
- "outputKey": "data.usertime",
401
+ "outputKey": "data.event_data.contents",
353
402
  "transforms": [
354
403
  {
355
404
  "expression": {
356
405
  "lang": "lua",
357
- "body": "return MILLISECONDS_SINCE_EPOCH(input.receivedAt)"
406
+ "body": "return MAP(\n input.properties.products,\n function (product)\n return {\n content_id = product.product_id or product.sku,\n name = product.name,\n quantity = product.quantity or 1,\n price = product.price\n }\n end\n)"
358
407
  }
359
408
  }
360
409
  ]
361
410
  }
362
411
  ]
363
412
  },
364
- "products_searched": {
413
+ "order_completed": {
365
414
  "enrichments": [
366
415
  {
367
416
  "staticString": "event",
368
417
  "outputKey": "action"
369
418
  },
370
419
  {
371
- "staticString": "",
372
- "outputKey": "data.device_ver"
373
- },
374
- {
375
- "staticString": "Search",
420
+ "staticString": "Purchase",
376
421
  "outputKey": "data.event_name"
377
422
  }
378
423
  ],
379
424
  "mappings": [
380
425
  {
381
- "inputKey": "context.device.adTrackingEnabled",
382
- "outputKey": "data.app_tracking_transparency.att",
383
- "defaultBool": false
426
+ "inputKey": "properties.order_id",
427
+ "outputKey": "data.event_data.transaction_id"
384
428
  },
385
429
  {
386
- "inputKey": "context.device.advertisingId",
387
- "outputKey": "data.device_ids",
430
+ "inputKey": "input",
431
+ "outputKey": "data.event_data.sum",
388
432
  "transforms": [
389
433
  {
390
434
  "expression": {
391
435
  "lang": "lua",
392
- "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId,\n idfv = input.context.device.id\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId,\n android_id = input.context.device.id\n }\nend"
436
+ "body": "return TOTAL_VALUE(input.properties.products)"
393
437
  }
394
438
  }
395
439
  ]
396
440
  },
397
441
  {
398
- "inputKey": "context.ip",
399
- "outputKey": "data.origination_ip"
400
- },
401
- {
402
- "inputKey": "context.userAgent",
403
- "outputKey": "data.device_ua"
404
- },
405
- {
406
- "inputKey": "context.library.version",
407
- "outputKey": "data.app_version"
442
+ "inputKey": "properties.currency",
443
+ "outputKey": "data.event_data.currency",
444
+ "transforms": [
445
+ {
446
+ "modifyString": "uppercase"
447
+ }
448
+ ],
449
+ "defaultString": "USD"
408
450
  },
409
451
  {
410
- "inputKey": "properties.query",
411
- "outputKey": "data.event_data.uri"
452
+ "inputKey": "properties.products",
453
+ "outputKey": "data.event_data.content_ids",
454
+ "transforms": [
455
+ {
456
+ "pluckValues": {
457
+ "extractKey": "product_id"
458
+ }
459
+ }
460
+ ]
412
461
  },
413
462
  {
414
463
  "inputKey": "input",
415
- "outputKey": "data.usertime",
464
+ "outputKey": "data.event_data.contents",
416
465
  "transforms": [
417
466
  {
418
467
  "expression": {
419
468
  "lang": "lua",
420
- "body": "return MILLISECONDS_SINCE_EPOCH(input.receivedAt)"
469
+ "body": "return MAP(\n input.properties.products,\n function (product)\n return {\n content_id = product.product_id or product.sku,\n name = product.name,\n quantity = product.quantity or 1,\n price = product.price\n }\n end\n)"
421
470
  }
422
471
  }
423
472
  ]
@@ -430,54 +479,17 @@
430
479
  {
431
480
  "staticString": "event",
432
481
  "outputKey": "action"
433
- },
434
- {
435
- "staticString": "",
436
- "outputKey": "data.device_ver"
437
482
  }
438
483
  ],
439
484
  "mappings": [
440
- {
441
- "inputKey": "context.device.adTrackingEnabled",
442
- "outputKey": "data.app_tracking_transparency.att",
443
- "defaultBool": false
444
- },
445
- {
446
- "inputKey": "event",
447
- "outputKey": "data.event_name"
448
- },
449
- {
450
- "inputKey": "context.device.advertisingId",
451
- "outputKey": "data.device_ids",
452
- "transforms": [
453
- {
454
- "expression": {
455
- "lang": "lua",
456
- "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return {\n idfa = input.context.device.advertisingId,\n idfv = input.context.device.id\n }\nelseif deviceType == 'android' then\n return {\n adid = input.context.device.advertisingId,\n android_id = input.context.device.id\n }\nend"
457
- }
458
- }
459
- ]
460
- },
461
- {
462
- "inputKey": "context.ip",
463
- "outputKey": "data.origination_ip"
464
- },
465
- {
466
- "inputKey": "context.userAgent",
467
- "outputKey": "data.device_ua"
468
- },
469
- {
470
- "inputKey": "context.library.version",
471
- "outputKey": "data.app_version"
472
- },
473
485
  {
474
486
  "inputKey": "input",
475
- "outputKey": "data.usertime",
487
+ "outputKey": "data.event_name",
476
488
  "transforms": [
477
489
  {
478
490
  "expression": {
479
491
  "lang": "lua",
480
- "body": "return MILLISECONDS_SINCE_EPOCH(input.receivedAt)"
492
+ "body": "if input.type and input.type == 'track' then\n return input.event\nend\nreturn input.type"
481
493
  }
482
494
  }
483
495
  ]
@@ -0,0 +1 @@
1
+ "9b4b6d4a47f4a376ab410c29f33d5bd7"
@@ -0,0 +1,12 @@
1
+ {
2
+ "default": {
3
+ "endpoint": "http://control.kochava.com/v1/cpi/identityLink.php",
4
+ "headers": [
5
+ {
6
+ "key": "Accept-Encoding",
7
+ "value": "application/json"
8
+ }
9
+ ],
10
+ "method": "POST"
11
+ }
12
+ }
@@ -0,0 +1 @@
1
+ "0a0a8e28c5265b6e21950435d7a04012"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "Kochava IdentityLink",
6
+ "description": "IdentityLink setup allows Kochava customers to manage their audience by associating an internal customer identifier with a Kochava device ID.",
7
+ "logo": "https://cdn.metarouter.io/kochava-identitylink.png",
8
+ "color": "#E6002B",
9
+ "eventSource": {
10
+ "isAndroidApp": true,
11
+ "isIosApp": true,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2025-06-25T21:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nKochava IdentityLink initial release"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "749be6a8f7c11c15483aa721aea82bf0"
@@ -0,0 +1,80 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "params": [
4
+ {
5
+ "name": "KOCHAVA_APP_ID",
6
+ "exampleValue": "my-kochava-app-id"
7
+ }
8
+ ],
9
+ "default": {
10
+ "filters": [
11
+ {
12
+ "byEventNames": {
13
+ "action": "allow",
14
+ "events": [
15
+ ""
16
+ ]
17
+ }
18
+ }
19
+ ]
20
+ },
21
+ "global": {
22
+ "enrichments": [
23
+ {
24
+ "staticString": "$$KOCHAVA_APP_ID$$",
25
+ "outputKey": "kochava_app_id"
26
+ }
27
+ ],
28
+ "mappings": [
29
+ {
30
+ "inputKey": "anonymousId",
31
+ "outputKey": "kochava_device_id"
32
+ }
33
+ ]
34
+ },
35
+ "eventSpecific": {
36
+ "identify": {
37
+ "filters": [
38
+ {
39
+ "byConditions": {
40
+ "action": "allow",
41
+ "when": {
42
+ "matchesAll": {
43
+ "conditions": [
44
+ {
45
+ "inputPathExists": {
46
+ "inputPath": "userId"
47
+ }
48
+ },
49
+ {
50
+ "inputPathExists": {
51
+ "inputPath": "context.device.advertisingId"
52
+ }
53
+ }
54
+ ]
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ],
60
+ "mappings": [
61
+ {
62
+ "inputKey": "userId",
63
+ "outputKey": "data.app_userid"
64
+ },
65
+ {
66
+ "inputKey": "input",
67
+ "outputKey": "device_id",
68
+ "transforms": [
69
+ {
70
+ "expression": {
71
+ "lang": "lua",
72
+ "body": "local deviceType = input.context.device.type\nif deviceType == 'ios' then\n return { idfa = input.context.device.advertisingId }\nelseif deviceType == 'android' then\n return { adid = input.context.device.advertisingId }\nend"
73
+ }
74
+ }
75
+ ]
76
+ }
77
+ ]
78
+ }
79
+ }
80
+ }
@@ -1 +1 @@
1
- "1761f606655ae5484360bd92902ed7ca"
1
+ "e832618c52a9b7a2507c48d696ffcfe9"
@@ -16,6 +16,10 @@
16
16
  {
17
17
  "date": "2025-05-21T21:00:00.000Z",
18
18
  "note": "Version: 0.1.0\nBeta Version\nPerion initial release"
19
+ },
20
+ {
21
+ "date": "2025-06-11T21:00:00.000Z",
22
+ "note": "Version: 0.2.0\nFixing product_viewed's products field"
19
23
  }
20
24
  ]
21
25
  }
@@ -1 +1 @@
1
- "ec1aa1f8a06cda6ccdcc5953ddc3bfbd"
1
+ "bda96be461602b71752f572fe4210a7b"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.0",
2
+ "version": "0.2.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "ADVERTISER_ID",
@@ -180,7 +180,7 @@
180
180
  {
181
181
  "expression": {
182
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}"
183
+ "body": "local p = input.properties\nreturn {\n{\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 }\n}"
184
184
  }
185
185
  }
186
186
  ]
package/README.md CHANGED
@@ -6,12 +6,14 @@ server, and other sources. It is particularly useful for tracking the pages or s
6
6
  users visit, the actions they take on your property, and whether the user has been identified
7
7
  previously.
8
8
  ## 2025-06
9
+ - Kochava (BETA)
10
+ - Kochava IdentityLink (BETA)
11
+ - Perion (BETA)
9
12
  - The Trade Desk - Conversions (BETA)
10
13
 
11
14
  ## 2025-05
12
15
  - Amazon DSP CAPI (BETA)
13
16
  - Amazon Kinesis (BETA)
14
- - Perion (BETA)
15
17
  - TheTradeDesk Conversion Events
16
18
 
17
19
  ## 2025-04
@@ -71,7 +73,6 @@ previously.
71
73
  - HubSpot (BETA)
72
74
  - Impact Radius
73
75
  - InMarket (BETA)
74
- - Kochava (BETA)
75
76
  - Lytics
76
77
  - Magellan AI
77
78
  - MIQ (Xandr) (BETA)
@@ -122,10 +123,12 @@ previously.
122
123
 
123
124
  | Kit Name | Date | Latest Note |
124
125
  |----------|------|-------------|
126
+ | Kochava (BETA) | 2025-06 | Version: 0.1.0 Beta Version Kochava non-identify initial release Moved the identify event to its dedicated starter-kit: kochava-identitylink |
127
+ | Kochava IdentityLink (BETA) | 2025-06 | Version: 0.1.0 Beta Version Kochava IdentityLink initial release |
128
+ | Perion (BETA) | 2025-06 | Version: 0.2.0 Fixing product_viewed's products field |
125
129
  | The Trade Desk - Conversions (BETA) | 2025-06 | Version: 0.1.0 Beta Version The Trade Desk - Conversions initial release |
126
130
  | Amazon DSP CAPI (BETA) | 2025-05 | Version: 0.1.0 Beta Version Amazon DSP CAPI initial release. |
127
131
  | 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 |
129
132
  | TheTradeDesk Conversion Events | 2025-05 | Version: 1.2.0 Deprecated |
130
133
  | Amazon Data Firehose | 2025-04 | Version: 1.0.0 Stable release |
131
134
  | Meta CAPI | 2025-04 | Version: 1.5.0 Friendly name updated |
@@ -171,7 +174,6 @@ previously.
171
174
  | HubSpot (BETA) | 2024-10 | Version: 0.3.0 Added header `Accept-Encoding: application/json` |
172
175
  | Impact Radius | 2024-10 | Version: 1.2.0 Added header `Accept-Encoding: application/json` |
173
176
  | InMarket (BETA) | 2024-10 | Version: 0.2.0 Added header `Accept-Encoding: application/json` |
174
- | Kochava (BETA) | 2024-10 | Version: 0.3.0 Added header `Accept-Encoding: application/json` |
175
177
  | Lytics | 2024-10 | Version: 1.1.0 Added header `Accept-Encoding: application/json` |
176
178
  | Magellan AI | 2024-10 | Version: 1.1.0 Added header `Accept-Encoding: application/json` |
177
179
  | MIQ (Xandr) (BETA) | 2024-10 | Version: 0.2.0 Added header `Accept-Encoding: application/json` |
package/index.js CHANGED
@@ -291,6 +291,12 @@ exports.kochava = {
291
291
  metadata: require('./.dist/kochava/metadata.json')
292
292
  }
293
293
 
294
+ exports['kochava-identitylink'] = {
295
+ endpointSchema: require('./.dist/kochava-identitylink/connection.json'),
296
+ playbook: require('./.dist/kochava-identitylink/playbook.json'),
297
+ metadata: require('./.dist/kochava-identitylink/metadata.json')
298
+ }
299
+
294
300
  exports.lytics = {
295
301
  endpointSchema: require('./.dist/lytics/connection.json'),
296
302
  playbook: require('./.dist/lytics/playbook.json'),
@@ -753,9 +759,15 @@ exports.etags = {
753
759
  kit: require('./.dist/in-market/kit.etag.json')
754
760
  },
755
761
  kochava: {
762
+ endpointSchema: require('./.dist/kochava/connection.etag.json'),
756
763
  playbook: require('./.dist/kochava/playbook.etag.json'),
757
764
  kit: require('./.dist/kochava/kit.etag.json')
758
765
  },
766
+ 'kochava-identitylink': {
767
+ endpointSchema: require('./.dist/kochava-identitylink/connection.etag.json'),
768
+ playbook: require('./.dist/kochava-identitylink/playbook.etag.json'),
769
+ kit: require('./.dist/kochava-identitylink/kit.etag.json')
770
+ },
759
771
  lytics: {
760
772
  endpointSchema: require('./.dist/lytics/connection.etag.json'),
761
773
  playbook: require('./.dist/lytics/playbook.etag.json'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metarouter/ajs-starter-kit",
3
- "version": "1.0.131",
3
+ "version": "1.0.132",
4
4
  "description": "MetaRouter analytics.js starter kit",
5
5
  "main": "index.js",
6
6
  "scripts": {