@metarouter/ajs-starter-kit 1.0.173 → 1.0.174

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 (48) hide show
  1. package/.dist/amazon-data-firehose/kit.etag.json +1 -1
  2. package/.dist/amazon-kinesis/kit.etag.json +1 -1
  3. package/.dist/bing-ads/kit.etag.json +1 -1
  4. package/.dist/blueshift/kit.etag.json +1 -1
  5. package/.dist/convert/kit.etag.json +1 -1
  6. package/.dist/google-ads/kit.etag.json +1 -1
  7. package/.dist/google-ads/metadata.json +4 -0
  8. package/.dist/google-ads/playbook.etag.json +1 -1
  9. package/.dist/google-ads/playbook.json +8 -3
  10. package/.dist/google-analytics-4/kit.etag.json +1 -1
  11. package/.dist/google-analytics-4/metadata.json +4 -0
  12. package/.dist/google-analytics-4/playbook.etag.json +1 -1
  13. package/.dist/google-analytics-4/playbook.json +22 -6
  14. package/.dist/google-analytics-4-collect/kit.etag.json +1 -1
  15. package/.dist/google-analytics-4-collect/metadata.json +4 -0
  16. package/.dist/google-analytics-4-collect/playbook.etag.json +1 -1
  17. package/.dist/google-analytics-4-collect/playbook.json +24 -8
  18. package/.dist/google-cm360/kit.etag.json +1 -1
  19. package/.dist/google-cm360/metadata.json +4 -0
  20. package/.dist/google-cm360/playbook.etag.json +1 -1
  21. package/.dist/google-cm360/playbook.json +2 -2
  22. package/.dist/heap/connection.etag.json +1 -1
  23. package/.dist/heap/connection.json +9 -2
  24. package/.dist/heap/kit.etag.json +1 -1
  25. package/.dist/heap/metadata.json +4 -0
  26. package/.dist/heap/playbook.etag.json +1 -1
  27. package/.dist/heap/playbook.json +4 -14
  28. package/.dist/microsoft-ads/kit.etag.json +1 -1
  29. package/.dist/mixpanel/kit.etag.json +1 -1
  30. package/.dist/openai-capi/connection.etag.json +1 -0
  31. package/.dist/openai-capi/connection.json +35 -0
  32. package/.dist/openai-capi/kit.etag.json +1 -0
  33. package/.dist/openai-capi/metadata.json +21 -0
  34. package/.dist/openai-capi/playbook.etag.json +1 -0
  35. package/.dist/openai-capi/playbook.json +276 -0
  36. package/.dist/pinterest-capi/kit.etag.json +1 -1
  37. package/.dist/podscribe/kit.etag.json +1 -1
  38. package/.dist/podscribe/metadata.json +4 -0
  39. package/.dist/podscribe/playbook.etag.json +1 -1
  40. package/.dist/podscribe/playbook.json +15 -3
  41. package/.dist/rev-jet/kit.etag.json +1 -1
  42. package/.dist/ringier-axel-springer-poland/kit.etag.json +1 -1
  43. package/.dist/snowflake/kit.etag.json +1 -1
  44. package/.dist/yahoo-enhanced-attribution/kit.etag.json +1 -1
  45. package/.dist/zeotap/kit.etag.json +1 -1
  46. package/README.md +14 -7
  47. package/index.js +11 -0
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- "0ef6096cf1b5d876beb6e4eb43d22785 -"
1
+ "0ae16bc1faf91a12c1328f51b3fc7b2d -"
@@ -1 +1 @@
1
- "7f405880b38b7932914e5bd6e751e194 -"
1
+ "ea009d5cdc52b78b1661584fa1902535 -"
@@ -1 +1 @@
1
- "a089690679fd421b1980593bcd763d52 -"
1
+ "11d41db1ba27a3fd5e92b5a1f0b961cb -"
@@ -1 +1 @@
1
- "60af6d421ed89984520e68508c4f8a6d -"
1
+ "0efc961f2f110c938ea2e211001dd0e4 -"
@@ -1 +1 @@
1
- "7eab047139a81892bbf225b885e46f6f -"
1
+ "163dad2277f51adecfd9c5ded9c41df5 -"
@@ -1 +1 @@
1
- "d76e4f41c6880491f5286a11f8c173cd -"
1
+ "f2a93dffe10df38017cb25501a78eadc -"
@@ -64,6 +64,10 @@
64
64
  {
65
65
  "date": "2026-05-27T00:00:00.000Z",
66
66
  "note": "Version: 1.6.0\nUpgraded to Google Ads API v24\nRemoved userIpAddress field"
67
+ },
68
+ {
69
+ "date": "2026-06-10T00:00:00.000Z",
70
+ "note": "Version: 1.7.0\nAdded support for reading gclid and wbraid from the googleAds child sync provider with fallback to the googleGtag provider"
67
71
  }
68
72
  ]
69
73
  }
@@ -1 +1 @@
1
- "0581115cedfecbcf8314c5faaface503 -"
1
+ "b5eaccd1dcea3be7c28f19ed501953c9 -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.6.0",
2
+ "version": "1.7.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "CUSTOMER_ID",
@@ -31,6 +31,11 @@
31
31
  "inputPath": "context.providers.googleGtag.data.gclid"
32
32
  }
33
33
  },
34
+ {
35
+ "inputPathExists": {
36
+ "inputPath": "context.providers.googleAds.gclid"
37
+ }
38
+ },
34
39
  {
35
40
  "inputPathExists": {
36
41
  "inputPath": "traits.email"
@@ -65,7 +70,7 @@
65
70
  {
66
71
  "expression": {
67
72
  "lang": "lua",
68
- "body": "if input.context.providers.googleGtag.data.wbraid then\n return SPLIT(input.context.providers.googleGtag.data.wbraid,\".\",3)[3]\nend"
73
+ "body": "if input.context.providers.googleAds.wbraid then\n return input.context.providers.googleAds.wbraid\nend\nif input.context.providers.googleGtag.data.wbraid then\n return SPLIT(input.context.providers.googleGtag.data.wbraid,\".\",3)[3]\nend"
69
74
  }
70
75
  }
71
76
  ]
@@ -89,7 +94,7 @@
89
94
  {
90
95
  "expression": {
91
96
  "lang": "lua",
92
- "body": "return SPLIT(input.context.providers.googleGtag.data.gclid, \".\",3)[3]"
97
+ "body": "if input.context.providers.googleAds.gclid then\n return input.context.providers.googleAds.gclid\nend\nif input.context.providers.googleGtag.data.gclid then\n return SPLIT(input.context.providers.googleGtag.data.gclid,\".\",3)[3]\nend"
93
98
  }
94
99
  }
95
100
  ]
@@ -1 +1 @@
1
- "40f9cb75f21b2513d7e389c6f2f8135a -"
1
+ "4e1c2011a7cb8f369bba9890f5f81144 -"
@@ -40,6 +40,10 @@
40
40
  {
41
41
  "date": "2025-12-17T00:00:00.000Z",
42
42
  "note": "Version: 1.3.0\nAdded consent, device and user_agent mappings\nRemoved gclid and dclid fields\nAdded additional standard events and updated endpoint to a parameter"
43
+ },
44
+ {
45
+ "date": "2026-06-10T00:00:00.000Z",
46
+ "note": "Version: 1.4.0\nAdded support for reading clientID, sessionID and sessionCount from the googleAnalytics4 child sync provider with fallback to the googleGtag provider"
43
47
  }
44
48
  ]
45
49
  }
@@ -1 +1 @@
1
- "381e09e4652cb3dba853f3aa236c8cdc -"
1
+ "4a326697060ce60735b669132a57587c -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.3.0",
2
+ "version": "1.4.0",
3
3
  "global": {
4
4
  "enrichments": [
5
5
  {
@@ -46,7 +46,7 @@
46
46
  "transforms": [
47
47
  {
48
48
  "expression": {
49
- "body": "local value = input.context.providers.googleGtag.data.ga\nif value == nil then\n return input.anonymousId\nelse\n local arr = {}\n local ga = SPLIT(value, \".\", 4)\n arr[1] = ga[3]\n arr[2] = ga[4]\n return JOIN(arr, \".\")\nend",
49
+ "body": "if input.context.providers.googleAnalytics4.clientID then\n return input.context.providers.googleAnalytics4.clientID\nend\nlocal value = input.context.providers.googleGtag.data.ga\nif value == nil then\n return input.anonymousId\nelse\n local arr = {}\n local ga = SPLIT(value, \".\", 4)\n arr[1] = ga[3]\n arr[2] = ga[4]\n return JOIN(arr, \".\")\nend",
50
50
  "lang": "lua"
51
51
  }
52
52
  }
@@ -65,12 +65,28 @@
65
65
  ]
66
66
  },
67
67
  {
68
- "inputKey": "context.providers.googleGtag.data.sessionID",
69
- "outputKey": "event.params.session_id"
68
+ "inputKey": "input",
69
+ "outputKey": "event.params.session_id",
70
+ "transforms": [
71
+ {
72
+ "expression": {
73
+ "body": "local sessionID = input.context.providers.googleAnalytics4.sessionID or input.context.providers.googleGtag.data.sessionID\nif sessionID then\n return sessionID\nend",
74
+ "lang": "lua"
75
+ }
76
+ }
77
+ ]
70
78
  },
71
79
  {
72
- "inputKey": "context.providers.googleGtag.data.sessionCount",
73
- "outputKey": "event.params.session_number"
80
+ "inputKey": "input",
81
+ "outputKey": "event.params.session_number",
82
+ "transforms": [
83
+ {
84
+ "expression": {
85
+ "body": "local sessionCount = input.context.providers.googleAnalytics4.sessionCount or input.context.providers.googleGtag.data.sessionCount\nif sessionCount then\n return sessionCount\nend",
86
+ "lang": "lua"
87
+ }
88
+ }
89
+ ]
74
90
  },
75
91
  {
76
92
  "inputKey": "context.ip",
@@ -1 +1 @@
1
- "0a9370414fd96ea1c46f24f11caf3a25 -"
1
+ "c987fe1938cafb2f321086eea02488e1 -"
@@ -36,6 +36,10 @@
36
36
  {
37
37
  "date": "2025-10-15T00:00:00.000Z",
38
38
  "note": "Version: 1.0.1\nAdded friendly names to expressions"
39
+ },
40
+ {
41
+ "date": "2026-06-10T00:00:00.000Z",
42
+ "note": "Version: 1.1.0\nAdded support for reading gclid, dclid, clientID, sessionID and sessionCount from the googleAnalytics4 child sync provider with fallback to the googleGtag provider"
39
43
  }
40
44
  ]
41
45
  }
@@ -1 +1 @@
1
- "4ef315aa0477c7adb62b0a427fee6656 -"
1
+ "970a1c934b45b73103c04af665e221a5 -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.1",
2
+ "version": "1.1.0",
3
3
  "global": {
4
4
  "mappings": [
5
5
  {
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "expression": {
11
11
  "lang": "lua",
12
- "body": "if input.context.providers.googleGtag.data.gclid then return SPLIT(input.context.providers.googleGtag.data.gclid, \".\", 3)[3] end"
12
+ "body": "if input.context.providers.googleAnalytics4.gclid then\n return input.context.providers.googleAnalytics4.gclid\nend\nif input.context.providers.googleGtag.data.gclid then\n return SPLIT(input.context.providers.googleGtag.data.gclid, \".\", 3)[3]\nend"
13
13
  }
14
14
  }
15
15
  ]
@@ -21,7 +21,7 @@
21
21
  {
22
22
  "expression": {
23
23
  "lang": "lua",
24
- "body": "if input.context.providers.googleGtag.data.dclid then return SPLIT(input.context.providers.googleGtag.data.dclid, \".\", 3)[3] end"
24
+ "body": "if input.context.providers.googleAnalytics4.dclid then\n return input.context.providers.googleAnalytics4.dclid\nend\nif input.context.providers.googleGtag.data.dclid then\n return SPLIT(input.context.providers.googleGtag.data.dclid, \".\", 3)[3]\nend"
25
25
  }
26
26
  }
27
27
  ]
@@ -32,7 +32,7 @@
32
32
  "transforms": [
33
33
  {
34
34
  "expression": {
35
- "body": "local ga = SPLIT(input.context.providers.googleGtag.data.ga, \".\", 4) if ga and ga[4] then return ga[3] .. \".\" .. ga[4] end return input.anonymousId",
35
+ "body": "if input.context.providers.googleAnalytics4.clientID then return input.context.providers.googleAnalytics4.clientID\nend local ga = SPLIT(input.context.providers.googleGtag.data.ga, \".\", 4) if ga and ga[4] then return ga[3] .. \".\" .. ga[4] end return input.anonymousId",
36
36
  "lang": "lua"
37
37
  }
38
38
  }
@@ -83,12 +83,28 @@
83
83
  "outputKey": "ck"
84
84
  },
85
85
  {
86
- "inputKey": "context.providers.googleGtag.data.sessionID",
87
- "outputKey": "sid"
86
+ "inputKey": "input",
87
+ "outputKey": "sid",
88
+ "transforms": [
89
+ {
90
+ "expression": {
91
+ "body": "local sessionID = input.context.providers.googleAnalytics4.sessionID or input.context.providers.googleGtag.data.sessionID\nif sessionID then\n return sessionID\nend",
92
+ "lang": "lua"
93
+ }
94
+ }
95
+ ]
88
96
  },
89
97
  {
90
- "inputKey": "context.providers.googleGtag.data.sessionCount",
91
- "outputKey": "sct"
98
+ "inputKey": "input",
99
+ "outputKey": "sct",
100
+ "transforms": [
101
+ {
102
+ "expression": {
103
+ "body": "local sessionCount = input.context.providers.googleAnalytics4.sessionCount or input.context.providers.googleGtag.data.sessionCount\nif sessionCount then\n return sessionCount\nend",
104
+ "lang": "lua"
105
+ }
106
+ }
107
+ ]
92
108
  },
93
109
  {
94
110
  "inputKey": "properties.engagement_time_milliseconds",
@@ -1 +1 @@
1
- "14226f1d1324e33cba661d56b33e3f3d -"
1
+ "1ddcaa3c869bd0df1611bf9b0fc49f42 -"
@@ -64,6 +64,10 @@
64
64
  {
65
65
  "date": "2026-04-01T00:00:00.000Z",
66
66
  "note": "Version: 1.4.0\nAdded identifier fan-out logic"
67
+ },
68
+ {
69
+ "date": "2026-06-10T00:00:00.000Z",
70
+ "note": "Version: 1.5.0\nAdded support for reading gclid and dclid from the CM360 child sync provider with fallback to the googleGtag provider"
67
71
  }
68
72
  ]
69
73
  }
@@ -1 +1 @@
1
- "bcb6dbfcc8922e2a94b21fd2efac8358 -"
1
+ "be2c0c6b9d749c05abd57edf40c954b8 -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.4.0",
2
+ "version": "1.5.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "CONFIG_ID",
@@ -80,7 +80,7 @@
80
80
  {
81
81
  "lang": "lua",
82
82
  "name": "Click, Mobile Device and Match ID(s)",
83
- "body": "if not TO_BOOL(\"$$IDENTIFIER_FAN_OUT$$\") then\n local gclid = SPLIT(input.context.providers.googleGtag.data.gclid, \".\", 3)[3];\n local dclid = SPLIT(input.context.providers.googleGtag.data.dclid, \".\", 3)[3];\n local mobileDeviceId = input.context.device.advertisingId;\n local matchId = input.anonymousId;\n return (gclid and { gclid = gclid }) or (dclid and { dclid = dclid}) or (mobileDeviceId and { mobileDeviceId = mobileDeviceId}) or (matchId and { matchId = matchId })\n end\nreturn {\n gclid = SPLIT(input.context.providers.googleGtag.data.gclid, \".\", 3)[3],\n dclid = SPLIT(input.context.providers.googleGtag.data.dclid, \".\", 3)[3],\n mobileDeviceId = input.context.device.advertisingId,\n matchId = input.anonymousId\n}"
83
+ "body": "local gclid, dclid\n\nif input.context.providers.CM360.gclid then\n gclid = input.context.providers.CM360.gclid\nend\nif input.context.providers.googleGtag.data.gclid then\n gclid = SPLIT(input.context.providers.googleGtag.data.gclid, \".\", 3)[3]\nend\n\nif input.context.providers.CM360.dclid then\n dclid = input.context.providers.CM360.dclid\nend\nif input.context.providers.googleGtag.data.dclid then\n dclid = SPLIT(input.context.providers.googleGtag.data.dclid, \".\", 3)[3]\nend\n\nif not TO_BOOL(\"$$IDENTIFIER_FAN_OUT$$\") then\n local mobileDeviceId = input.context.device.advertisingId;\n local matchId = input.anonymousId;\n return (gclid and { gclid = gclid }) or (dclid and { dclid = dclid}) or (mobileDeviceId and { mobileDeviceId = mobileDeviceId}) or (matchId and { matchId = matchId })\n end\nreturn {\n gclid = gclid,\n dclid = dclid,\n mobileDeviceId = input.context.device.advertisingId,\n matchId = input.anonymousId\n}"
84
84
  }
85
85
  ]
86
86
  },
@@ -1 +1 @@
1
- "c4a339286819da9d5ba222e85502b4a5 -"
1
+ "3188a02d783080880bfca36c99fcf153 -"
@@ -1,6 +1,13 @@
1
1
  {
2
+ "params": [
3
+ {
4
+ "name": "DATACENTER_ENDPOINT",
5
+ "exampleValue": "my-datacenter-endpoint",
6
+ "defaultValue": "https://heapanalytics.com"
7
+ }
8
+ ],
2
9
  "default": {
3
- "endpoint": "https://heapanalytics.com/api/track",
10
+ "endpoint": "$$DATACENTER_ENDPOINT$$/api/track",
4
11
  "method": "POST",
5
12
  "headers": [
6
13
  {
@@ -19,7 +26,7 @@
19
26
  },
20
27
  "eventSpecific": {
21
28
  "identify": {
22
- "endpoint": "https://heapanalytics.com/api/v1/identify",
29
+ "endpoint": "$$DATACENTER_ENDPOINT$$/api/v1/identify",
23
30
  "method": "POST",
24
31
  "headers": [
25
32
  {
@@ -1 +1 @@
1
- "4c27b3d61a0543466bfb9b2be790635c -"
1
+ "ba28e61419cbc4c0fd02439e738fd260 -"
@@ -20,6 +20,10 @@
20
20
  {
21
21
  "date": "2024-10-23T00:00:00.000Z",
22
22
  "note": "Version: 0.2.0\nUpdated header `Accept-Encoding: application/json`"
23
+ },
24
+ {
25
+ "date": "2026-06-10T00:00:00.000Z",
26
+ "note": "Version: 0.3.0\nEU endpoint support\nRemoved unused parameter"
23
27
  }
24
28
  ]
25
29
  }
@@ -1 +1 @@
1
- "50078348af89099d663721fbaa250afc -"
1
+ "474c9713772a55d3616e96a11639170d -"
@@ -1,25 +1,15 @@
1
1
  {
2
- "version": "0.2.0",
2
+ "version": "0.3.0",
3
3
  "params": [
4
4
  {
5
- "name": "MY_APP_ID",
6
- "defaultValue": "my-app-id",
7
- "exampleValue": "123456789",
8
- "description": "The environment ID corresponding to one of your environments.",
9
- "isOptional": false
10
- },
11
- {
12
- "name": "MY_USER_ID",
13
- "defaultValue": "my-user-id",
14
- "description": "The user_id from the Heap SDK. The user_id must be the string representation of a number between zero and 2^53 - 1.",
15
- "isOptional": true,
16
- "exampleValue": "1111111111111111"
5
+ "name": "APP_ID",
6
+ "exampleValue": "my-app-id"
17
7
  }
18
8
  ],
19
9
  "global": {
20
10
  "enrichments": [
21
11
  {
22
- "staticString": "$$MY_APP_ID$$",
12
+ "staticString": "$$APP_ID$$",
23
13
  "outputKey": "app_id"
24
14
  }
25
15
  ]
@@ -1 +1 @@
1
- "72ef466d5a1957a39e2e35067aeeb9f8 -"
1
+ "d4068fe406f2b4ce822b1d0b429ee6cb -"
@@ -1 +1 @@
1
- "0d357f0f7c58942d5c59a17f50125514 -"
1
+ "e9a335b3bca12b848d07918b89c8ec8e -"
@@ -0,0 +1 @@
1
+ "87a21401b752660c6a93d18e1283037a -"
@@ -0,0 +1,35 @@
1
+ {
2
+ "params": [
3
+ {
4
+ "name": "API_KEY",
5
+ "exampleValue": "my-api-key"
6
+ },
7
+ {
8
+ "name": "PIXEL_ID",
9
+ "exampleValue": "my-pixel-id"
10
+ }
11
+ ],
12
+ "default": {
13
+ "endpoint": "https://bzr.openai.com/v1/events?pid=$$PIXEL_ID$$",
14
+ "method": "POST",
15
+ "headers": [
16
+ {
17
+ "key": "Accept-Encoding",
18
+ "value": "application/json"
19
+ },
20
+ {
21
+ "key": "Content-Type",
22
+ "value": "application/json"
23
+ },
24
+ {
25
+ "key": "Authorization",
26
+ "value": "Bearer $$API_KEY$$"
27
+ }
28
+ ],
29
+ "batchSize": 10,
30
+ "transform": {
31
+ "lang": "lua",
32
+ "body": "request.body = { events = batch }\nreturn request\n"
33
+ }
34
+ }
35
+ }
@@ -0,0 +1 @@
1
+ "61bd5f7ae133b5826a5b346a18d84056 -"
@@ -0,0 +1,21 @@
1
+ {
2
+ "isDraft": false,
3
+ "isDeprecated": false,
4
+ "isBeta": true,
5
+ "friendlyName": "OpenAI CAPI",
6
+ "description": "The OpenAI Ads Conversions API is a server-to-server event ingestion API used to send conversion and behavioral events directly to OpenAI Ads for attribution and campaign measurement.",
7
+ "logo": "https://cdn.metarouter.io/openai-capi.png",
8
+ "color": "#10A37F",
9
+ "eventSource": {
10
+ "isAndroidApp": false,
11
+ "isIosApp": false,
12
+ "isWebApp": true
13
+ },
14
+ "inputSchema": "analytics_js",
15
+ "releaseNotes": [
16
+ {
17
+ "date": "2026-06-10T21:00:00.000Z",
18
+ "note": "Version: 0.1.0\nBeta Version\nOpenAI CAPI initial release"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1 @@
1
+ "5cefda20c4e9151d3624dd90d35ae970 -"
@@ -0,0 +1,276 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "global": {
4
+ "enrichments": [
5
+ {
6
+ "staticString": "web",
7
+ "outputKey": "action_source"
8
+ }
9
+ ],
10
+ "mappings": [
11
+ {
12
+ "inputKey": "context.providers.openAI.oppref",
13
+ "outputKey": "oppref"
14
+ },
15
+ {
16
+ "inputKey": "messageId",
17
+ "outputKey": "id"
18
+ },
19
+ {
20
+ "inputKey": "timestamp",
21
+ "outputKey": "timestamp_ms",
22
+ "transforms": [
23
+ {
24
+ "toTimestamp": "inMillis"
25
+ }
26
+ ]
27
+ },
28
+ {
29
+ "inputKey": "context.page.url",
30
+ "outputKey": "source_url"
31
+ },
32
+ {
33
+ "inputKey": "input",
34
+ "outputKey": "user.email_sha256",
35
+ "transforms": [
36
+ {
37
+ "expression": {
38
+ "lang": "lua",
39
+ "body": "local email = input.traits.email\nif (email) then return TO_SHA256_HASH(LOWER(TRIM(email))) end"
40
+ }
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "inputKey": "anonymousId",
46
+ "outputKey": "user.external_id_sha256",
47
+ "transforms": [
48
+ {
49
+ "toHash": "sha256"
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "inputKey": "input",
55
+ "outputKey": "user.country",
56
+ "transforms": [
57
+ {
58
+ "expression": {
59
+ "lang": "lua",
60
+ "body": "local country = input.traits.address.country\nif (country) then return TO_ISO_COUNTRY(country) end"
61
+ }
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "inputKey": "traits.address.city",
67
+ "outputKey": "user.city"
68
+ },
69
+ {
70
+ "inputKey": "traits.address.postalCode",
71
+ "outputKey": "user.zip_code"
72
+ },
73
+ {
74
+ "inputKey": "context.ip",
75
+ "outputKey": "user.ip_address"
76
+ },
77
+ {
78
+ "inputKey": "context.userAgent",
79
+ "outputKey": "user.user_agent"
80
+ }
81
+ ]
82
+ },
83
+ "default": {
84
+ "filters": [
85
+ {
86
+ "byEventNames": {
87
+ "action": "allow",
88
+ "events": [
89
+ ""
90
+ ]
91
+ }
92
+ }
93
+ ]
94
+ },
95
+ "eventSpecific": {
96
+ "page": {
97
+ "enrichments": [
98
+ {
99
+ "staticString": "page_viewed",
100
+ "outputKey": "type"
101
+ },
102
+ {
103
+ "staticString": "contents",
104
+ "outputKey": "data.type"
105
+ }
106
+ ],
107
+ "mappings": [
108
+ {
109
+ "inputKey": "input",
110
+ "outputKey": "data.contents",
111
+ "transforms": [
112
+ {
113
+ "expression": {
114
+ "lang": "lua",
115
+ "body": "return {{\n content_type = \"page\",\n name = input.properties.title\n}}"
116
+ }
117
+ }
118
+ ]
119
+ }
120
+ ]
121
+ },
122
+ "product_viewed": {
123
+ "enrichments": [
124
+ {
125
+ "staticString": "contents_viewed",
126
+ "outputKey": "type"
127
+ },
128
+ {
129
+ "staticString": "contents",
130
+ "outputKey": "data.type"
131
+ }
132
+ ],
133
+ "mappings": [
134
+ {
135
+ "inputKey": "properties.currency",
136
+ "outputKey": "data.currency",
137
+ "transforms": [
138
+ {
139
+ "modifyString": "uppercase"
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "inputKey": "input",
145
+ "outputKey": "data.contents",
146
+ "transforms": [
147
+ {
148
+ "expression": {
149
+ "lang": "lua",
150
+ "body": "return {{\n content_type = \"product\",\n id = input.properties.product_id,\n name = input.properties.name,\n amount = TO_ROUNDED_INT(input.properties.price * 100),\n quantity = input.properties.quantity or 1\n}}"
151
+ }
152
+ }
153
+ ]
154
+ }
155
+ ]
156
+ },
157
+ "product_added": {
158
+ "enrichments": [
159
+ {
160
+ "staticString": "items_added",
161
+ "outputKey": "type"
162
+ },
163
+ {
164
+ "staticString": "contents",
165
+ "outputKey": "data.type"
166
+ }
167
+ ],
168
+ "mappings": [
169
+ {
170
+ "inputKey": "properties.currency",
171
+ "outputKey": "data.currency",
172
+ "defaultString": "USD",
173
+ "transforms": [
174
+ {
175
+ "modifyString": "uppercase"
176
+ }
177
+ ]
178
+ },
179
+ {
180
+ "inputKey": "input",
181
+ "outputKey": "data.contents",
182
+ "transforms": [
183
+ {
184
+ "expression": {
185
+ "lang": "lua",
186
+ "body": "return {{\n content_type = \"product\",\n id = input.properties.product_id,\n name = input.properties.name,\n amount = TO_ROUNDED_INT(input.properties.price * 100),\n quantity = input.properties.quantity or 1\n}}"
187
+ }
188
+ }
189
+ ]
190
+ }
191
+ ]
192
+ },
193
+ "checkout_started": {
194
+ "enrichments": [
195
+ {
196
+ "staticString": "checkout_started",
197
+ "outputKey": "type"
198
+ },
199
+ {
200
+ "staticString": "contents",
201
+ "outputKey": "data.type"
202
+ }
203
+ ],
204
+ "mappings": [
205
+ {
206
+ "inputKey": "properties.currency",
207
+ "outputKey": "data.currency",
208
+ "transforms": [
209
+ {
210
+ "modifyString": "uppercase"
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "inputKey": "input",
216
+ "outputKey": "data.contents",
217
+ "transforms": [
218
+ {
219
+ "expression": {
220
+ "lang": "lua",
221
+ "body": "return MAP(input.properties.products, function(p)\n return {\n content_type = \"product\",\n id = p.product_id,\n name = p.name,\n amount = TO_ROUNDED_INT(p.price * 100),\n quantity = p.quantity or 1\n }\nend)"
222
+ }
223
+ }
224
+ ]
225
+ }
226
+ ]
227
+ },
228
+ "order_completed": {
229
+ "enrichments": [
230
+ {
231
+ "staticString": "order_created",
232
+ "outputKey": "type"
233
+ },
234
+ {
235
+ "staticString": "contents",
236
+ "outputKey": "data.type"
237
+ }
238
+ ],
239
+ "mappings": [
240
+ {
241
+ "inputKey": "properties.currency",
242
+ "outputKey": "data.currency",
243
+ "transforms": [
244
+ {
245
+ "modifyString": "uppercase"
246
+ }
247
+ ]
248
+ },
249
+ {
250
+ "inputKey": "input",
251
+ "outputKey": "data.amount",
252
+ "transforms": [
253
+ {
254
+ "expression": {
255
+ "lang": "lua",
256
+ "body": "return TO_ROUNDED_INT(TOTAL_VALUE(input.properties.products) * 100)"
257
+ }
258
+ }
259
+ ]
260
+ },
261
+ {
262
+ "inputKey": "input",
263
+ "outputKey": "data.contents",
264
+ "transforms": [
265
+ {
266
+ "expression": {
267
+ "lang": "lua",
268
+ "body": "return MAP(input.properties.products, function(p)\n return {\n content_type = \"product\",\n id = p.product_id,\n name = p.name,\n amount = TO_ROUNDED_INT(p.price * 100),\n quantity = p.quantity or 1\n }\nend)"
269
+ }
270
+ }
271
+ ]
272
+ }
273
+ ]
274
+ }
275
+ }
276
+ }
@@ -1 +1 @@
1
- "57928adb5ce2b813d08bd83000c8847a -"
1
+ "a6cfb24756ac9ddfca5e7b6a795a7c05 -"
@@ -1 +1 @@
1
- "710c05bd4c8072ac678639ef3be95831 -"
1
+ "6c84ecd30512b6cabc83323d617258da -"
@@ -36,6 +36,10 @@
36
36
  {
37
37
  "date": "2026-06-03T00:00:00.000Z",
38
38
  "note": "Version: 1.2.2\nUpdate source enrichment"
39
+ },
40
+ {
41
+ "date": "2026-06-10T00:00:00.000Z",
42
+ "note": "Version: 1.3.0\nAdd ipv4 and ipv6 field mappings with context.ip fallback"
39
43
  }
40
44
  ]
41
45
  }
@@ -1 +1 @@
1
- "f3e8235d280cb953fbf37e87098117ee -"
1
+ "ce0a09cf73457206f87bdb2f6f6bdcf5 -"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.2",
2
+ "version": "1.3.0",
3
3
  "params": [
4
4
  {
5
5
  "name": "ADVERTISER_ID",
@@ -39,8 +39,20 @@
39
39
  "outputKey": "user_agent"
40
40
  },
41
41
  {
42
- "inputKey": "context.ip",
43
- "outputKey": "ip"
42
+ "inputKey": "context.ipv4",
43
+ "outputKey": "ipv4"
44
+ },
45
+ {
46
+ "inputKey": "input",
47
+ "outputKey": "ip",
48
+ "transforms": [
49
+ {
50
+ "expression": {
51
+ "lang": "lua",
52
+ "body": "return input.context.ipv6 or input.context.ip or input.context.ipv4"
53
+ }
54
+ }
55
+ ]
44
56
  },
45
57
  {
46
58
  "inputKey": "input",
@@ -1 +1 @@
1
- "cfa09e082cad7055ae5098f50b864db6 -"
1
+ "ddb770a867e75edd94e56d9b6128e1dd -"
@@ -1 +1 @@
1
- "f6b37b0579a38e564e9c9e2da7ec3882 -"
1
+ "fcea7e22a7651731706520ce3768bf00 -"
@@ -1 +1 @@
1
- "958d36eb7ad09e014ddc467c94df37bf -"
1
+ "068f26ec5bbc0655949f9e271650a0ac -"
@@ -1 +1 @@
1
- "e168c4e940609b95f841eb8eab8bf93b -"
1
+ "1949df74588abd86e5f1344f35217e34 -"
@@ -1 +1 @@
1
- "5016a83ad45faac1f78937d77fa047e2 -"
1
+ "0625177655bc238d2777bfefc858d1af -"
package/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # MetaRouter Starter Kits
2
2
 
3
3
  ### 2026-06
4
+ - CM360 - Floodlights
5
+ - Google Ads - Conversions
6
+ - Google Analytics 4
7
+ - Google Analytics 4 (Collect)
8
+ - Heap
9
+ - OpenAI CAPI (New)
4
10
  - Podscribe
5
11
  - Teads CAPI (New)
6
12
  - Wirtualna Polska
@@ -31,7 +37,7 @@
31
37
  | Blueshift | 2021-06-24 | 2025-01-22 | 2025-10-15 | Version: 1.1.1 | Added friendly names to expressions |
32
38
  | Braze | 2021-06-24 | N/A | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
33
39
  | Button | 2025-02-19 | 2025-03-12 | 2025-07-30 | Version: 1.1.0 | Replaced context.traits with traits. |
34
- | CM360 - Floodlights | 2021-06-24 | 2025-08-20 | 2026-04-01 | Version: 1.4.0 | Added identifier fan-out logic |
40
+ | CM360 - Floodlights | 2021-06-24 | 2025-08-20 | 2026-06-10 | Version: 1.5.0 | Added support for reading gclid and dclid from the CM360 child sync provider with fallback to the googleGtag provider |
35
41
  | Clinch | 2024-04-24 | 2024-06-12 | 2025-10-15 | Version: 1.3.1 | Added friendly names to expressions |
36
42
  | Commission Junction | 2024-01-17 | 2024-04-24 | 2025-11-19 | Version: 1.5.1 | Added friendly name to trackingSource expression |
37
43
  | Convert | 2023-09-08 | N/A | 2024-11-20 | Version: 0.3.0 | Added new deduplication parameter for all events, `tid` |
@@ -41,14 +47,14 @@
41
47
  | Eulerian | 2025-12-10 | 2026-03-04 | 2026-03-04 | Version: 1.0.0 | Stable Release |
42
48
  | Firebase | 2024-01-15 | N/A | 2024-10-23 | Version: 0.2.0 | Updated header `Accept-Encoding: application/json` |
43
49
  | 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 | 2026-05-27 | Version: 1.6.0 | Upgraded to Google Ads API v24 Removed userIpAddress field |
50
+ | Google Ads - Conversions | 2023-07-04 | 2024-04-17 | 2026-06-10 | Version: 1.7.0 | Added support for reading gclid and wbraid from the googleAds child sync provider with fallback to the googleGtag provider |
45
51
  | Google Analytics | 2021-06-24 | N/A | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
46
- | Google Analytics 4 | 2022-08-11 | N/A | 2025-12-17 | Version: 1.3.0 | Added consent, device and user_agent mappings Removed gclid and dclid fields Added additional standard events and updated endpoint to a parameter |
47
- | Google Analytics 4 (Collect) | 2024-04-24 | 2025-08-20 | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
52
+ | Google Analytics 4 | 2022-08-11 | N/A | 2026-06-10 | Version: 1.4.0 | Added support for reading clientID, sessionID and sessionCount from the googleAnalytics4 child sync provider with fallback to the googleGtag provider |
53
+ | Google Analytics 4 (Collect) | 2024-04-24 | 2025-08-20 | 2026-06-10 | Version: 1.1.0 | Added support for reading gclid, dclid, clientID, sessionID and sessionCount from the googleAnalytics4 child sync provider with fallback to the googleGtag provider |
48
54
  | Google BigQuery | 2021-06-24 | 2023-12-13 | 2025-01-16 | Version: 1.1.0 | Adding support for table overrides |
49
55
  | Google Cloud Storage | 2021-06-24 | 2026-03-18 | 2026-03-18 | Version: 1.0.0 | Stable Release |
50
56
  | Google Pub/Sub | 2021-06-24 | 2023-12-13 | 2025-10-15 | Version: 1.1.1 | Added friendly names to expressions |
51
- | Heap | 2024-03-26 | N/A | 2024-10-23 | Version: 0.2.0 | Updated header `Accept-Encoding: application/json` |
57
+ | Heap | 2024-03-26 | N/A | 2026-06-10 | Version: 0.3.0 | EU endpoint support Removed unused parameter |
52
58
  | Hightouch | 2026-01-14 | 2026-04-08 | 2026-04-08 | Version: 1.0.0 | Stable Release |
53
59
  | HubSpot | 2023-02-20 | N/A | 2025-07-30 | Version: 0.4.0 | Replaced context.traits with traits. |
54
60
  | Impact Radius | 2021-06-24 | N/A | 2025-10-15 | Version: 1.2.1 | Added friendly names to expressions |
@@ -74,18 +80,19 @@
74
80
  | Movable Ink - Customer Data | 2024-02-07 | 2024-04-24 | 2025-07-16 | Version: 1.3.0 | TABLE_SLICE custom function usage. |
75
81
  | Nextdoor | 2023-03-07 | 2024-08-07 | 2026-04-15 | Version: 1.1.0 | Deprecating in favor of the released Nextdoor CAPI Kit |
76
82
  | Nextdoor - CAPI | 2024-06-05 | 2024-07-17 | 2025-10-08 | Version: 1.4.0 | Extended Nextdoor CAPI events. |
83
+ | OpenAI CAPI (New) | 2026-06-10 | N/A | 2026-06-10 | Version: 0.1.0 | Beta Version OpenAI CAPI initial release |
77
84
  | Optimizely | 2026-01-28 | 2026-02-18 | 2026-02-18 | Version: 1.0.0 | Stable Release |
78
85
  | Perion | 2025-05-21 | 2025-07-16 | 2025-10-15 | Version: 1.0.1 | Added friendly names to expressions |
79
86
  | Pinterest Ads | 2021-06-24 | N/A | 2025-10-15 | Version: 1.1.1 | Added friendly names to expressions |
80
87
  | Pinterest CAPI | 2023-03-07 | N/A | 2026-04-08 | Version: 1.3.0 | Removed LDP (Limited Data Processing) default |
81
88
  | Pipeline Router | 2026-01-14 | N/A | 2026-01-14 | Version: 0.1.0 | Beta Version Pipeline Router initial release |
82
- | Podscribe | 2025-03-12 | 2025-04-09 | 2026-06-03 | Version: 1.2.2 | Update source enrichment |
89
+ | Podscribe | 2025-03-12 | 2025-04-09 | 2026-06-10 | Version: 1.3.0 | Add ipv4 and ipv6 field mappings with context.ip fallback |
83
90
  | Podsights | 2023-03-07 | N/A | 2024-10-23 | Version: 0.2.0 | Added header `Accept-Encoding: application/json` |
84
91
  | RTB House | 2024-11-20 | N/A | 2025-12-03 | Version: 0.4.0 | Updated endpoint to be a parameter |
85
92
  | Rakuten Conversions | 2025-07-30 | 2025-09-24 | 2025-09-24 | Version: 1.0.0 | Stable Release |
86
93
  | Reddit Ads | 2023-09-12 | 2026-01-07 | 2026-01-07 | Version: 2.0.0 | Stable Release of Reddit CAPI V3 |
87
- | Ringier Axel Springer Poland | 2025-03-05 | 2025-04-09 | 2026-01-21 | Version: 1.4.0 | Deprecating in favor of the released RASP SDK Kit |
88
94
  | Ringier Axel Springer Poland | 2025-06-25 | 2026-01-21 | 2026-05-20 | Version: 1.1.0 | Added ord to the playbook |
95
+ | Ringier Axel Springer Poland | 2025-03-05 | 2025-04-09 | 2026-01-21 | Version: 1.4.0 | Deprecating in favor of the released RASP SDK Kit |
89
96
  | Roku | 2023-04-27 | N/A | 2025-07-30 | Version: 1.2.0 | Replaced context.traits with traits. |
90
97
  | Roomvo | 2021-08-10 | N/A | 2026-03-25 | Version: 0.2.2 | Converted some fields to camelCase for schema validation |
91
98
  | Salesforce CDP | 2022-05-31 | N/A | 2025-07-30 | Version: 1.2.0 | Replaced originalTimestamp with timestamp |
package/index.js CHANGED
@@ -447,6 +447,12 @@ exports['nextdoor-capi'] = {
447
447
  metadata: require('./.dist/nextdoor-capi/metadata.json')
448
448
  }
449
449
 
450
+ exports['openai-capi'] = {
451
+ endpointSchema: require('./.dist/openai-capi/connection.json'),
452
+ playbook: require('./.dist/openai-capi/playbook.json'),
453
+ metadata: require('./.dist/openai-capi/metadata.json')
454
+ }
455
+
450
456
  exports.optimizely = {
451
457
  endpointSchema: require('./.dist/optimizely/connection.json'),
452
458
  playbook: require('./.dist/optimizely/playbook.json'),
@@ -1009,6 +1015,11 @@ exports.etags = {
1009
1015
  playbook: require('./.dist/nextdoor-capi/playbook.etag.json'),
1010
1016
  kit: require('./.dist/nextdoor-capi/kit.etag.json')
1011
1017
  },
1018
+ 'openai-capi': {
1019
+ endpointSchema: require('./.dist/openai-capi/connection.etag.json'),
1020
+ playbook: require('./.dist/openai-capi/playbook.etag.json'),
1021
+ kit: require('./.dist/openai-capi/kit.etag.json')
1022
+ },
1012
1023
  optimizely: {
1013
1024
  endpointSchema: require('./.dist/optimizely/connection.etag.json'),
1014
1025
  playbook: require('./.dist/optimizely/playbook.etag.json'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metarouter/ajs-starter-kit",
3
- "version": "1.0.173",
3
+ "version": "1.0.174",
4
4
  "description": "MetaRouter analytics.js starter kit",
5
5
  "main": "index.js",
6
6
  "scripts": {