diff --git a/.github/workflows/create-hotfix-branch.yml b/.github/workflows/create-hotfix-branch.yml index 3d9c36601..8c462091e 100644 --- a/.github/workflows/create-hotfix-branch.yml +++ b/.github/workflows/create-hotfix-branch.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest # Only allow release stakeholders to initiate releases - if: github.ref == 'refs/heads/main' && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'lvrach' || github.actor == 'cisse21' || github.actor == 'nidhilashkari17' || github.actor == 'debanjan97' || github.actor == 'AchuthaSourabhC' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'shrouti1507' || github.actor == 'anantjain45823') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'lvrach' || github.triggering_actor == 'cisse21' || github.triggering_actor == 'nidhilashkari17' || github.triggering_actor == 'debanjan97' || github.triggering_actor == 'AchuthaSourabhC' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507'|| github.triggering_actor == 'anantjain45823') + if: github.ref == 'refs/heads/main' && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'lvrach' || github.actor == 'cisse21' || github.actor == 'nidhilashkari17' || github.actor == 'debanjan97' || github.actor == 'AchuthaSourabhC' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'shrouti1507' || github.actor == 'anantjain45823' || github.actor == 'mihir-4116') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'lvrach' || github.triggering_actor == 'cisse21' || github.triggering_actor == 'nidhilashkari17' || github.triggering_actor == 'debanjan97' || github.triggering_actor == 'AchuthaSourabhC' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507'|| github.triggering_actor == 'anantjain45823' || github.triggering_actor == 'mihir-4116') steps: - name: Create Branch uses: peterjgrainger/action-create-branch@v2.4.0 diff --git a/.github/workflows/draft-new-release.yml b/.github/workflows/draft-new-release.yml index 2942e11d1..074d98e05 100644 --- a/.github/workflows/draft-new-release.yml +++ b/.github/workflows/draft-new-release.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest # Only allow release stakeholders to initiate releases - if: (github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/heads/hotfix/')) && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'lvrach' || github.actor == 'cisse21' || github.actor == 'nidhilashkari17' || github.actor == 'debanjan97' || github.actor == 'AchuthaSourabhC' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'shrouti1507' || github.actor == 'anantjain45823') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'lvrach' || github.triggering_actor == 'cisse21' || github.triggering_actor == 'nidhilashkari17' || github.triggering_actor == 'debanjan97' || github.triggering_actor == 'AchuthaSourabhC' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507' || github.triggering_actor == 'anantjain45823') + if: (github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/heads/hotfix/')) && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'lvrach' || github.actor == 'cisse21' || github.actor == 'nidhilashkari17' || github.actor == 'debanjan97' || github.actor == 'AchuthaSourabhC' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'shrouti1507' || github.actor == 'anantjain45823' || github.actor == 'mihir-4116' || github.actor == 'yashasvibajpai' || github.actor == 'sanpj2292') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'lvrach' || github.triggering_actor == 'cisse21' || github.triggering_actor == 'nidhilashkari17' || github.triggering_actor == 'debanjan97' || github.triggering_actor == 'AchuthaSourabhC' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507' || github.triggering_actor == 'anantjain45823' || github.triggering_actor == 'mihir-4116' || github.actor == 'yashasvibajpai' || github.actor == 'sanpj2292') steps: - name: Checkout uses: actions/checkout@v3.5.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index d88ebeade..8f5151e5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.57.0](https://github.com/rudderlabs/rudder-config-schema/compare/v1.56.2...v1.57.0) (2023-10-30) + + +### Features + +* deprecate GA and Facebook Offline Conversions destinations using options flag ([#1016](https://github.com/rudderlabs/rudder-config-schema/issues/1016)) ([b3a1567](https://github.com/rudderlabs/rudder-config-schema/commit/b3a1567f27a78d1088758f91ad8cfa786bd7e049)) +* **facebook_pixel:** move facebook pixel to new UI from-builder ([#1004](https://github.com/rudderlabs/rudder-config-schema/issues/1004)) ([f6ff024](https://github.com/rudderlabs/rudder-config-schema/commit/f6ff024fcac22a88bb8b71b539b40b0bf19a6842)) +* **fb:** move fb app events to new UI form-builder ([#1007](https://github.com/rudderlabs/rudder-config-schema/issues/1007)) ([7e8e3d1](https://github.com/rudderlabs/rudder-config-schema/commit/7e8e3d16da2cec375de144a99203358a377a31f5)) +* matomo: support premise version ([#989](https://github.com/rudderlabs/rudder-config-schema/issues/989)) ([f2d149d](https://github.com/rudderlabs/rudder-config-schema/commit/f2d149d707f5cdc234009e5f512f073da8f9f99b)) +* onboard facebook conversions destination ([#982](https://github.com/rudderlabs/rudder-config-schema/issues/982)) ([8c23561](https://github.com/rudderlabs/rudder-config-schema/commit/8c23561a90d6b9819af783ad1081103df775a613)) +* onboard ortto destination ([#979](https://github.com/rudderlabs/rudder-config-schema/issues/979)) ([09ef62e](https://github.com/rudderlabs/rudder-config-schema/commit/09ef62eb09c6550f3d6a9428b77edca45e0b27d4)) +* refactor supportedMessageTypes and supportedConnectionModes ([#1026](https://github.com/rudderlabs/rudder-config-schema/issues/1026)) ([a2b7438](https://github.com/rudderlabs/rudder-config-schema/commit/a2b74388fb7b349381df1a9b52ef9ba53e0bdcee)) + + + +### Bug Fixes + +* change value of a config in ui ([#1003](https://github.com/rudderlabs/rudder-config-schema/issues/1003)) ([de2cc4e](https://github.com/rudderlabs/rudder-config-schema/commit/de2cc4e1e66c74de54aebe01267ebc3fc9714f28)) + ### [1.56.2](https://github.com/rudderlabs/rudder-config-schema/compare/v1.56.1...v1.56.2) (2023-10-28) diff --git a/package-lock.json b/package-lock.json index 0f3613141..1934f1215 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-config-schema", - "version": "1.56.2", + "version": "1.57.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-config-schema", - "version": "1.56.2", + "version": "1.57.0", "license": "MIT", "dependencies": { "ajv": "^8.12.0", diff --git a/package.json b/package.json index 0aad012b3..d9a43e2bc 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-config-schema", - "version": "1.56.2", + "version": "1.57.0", "description": "", "main": "src/index.ts", "private": true, diff --git a/src/configurations/destinations/active_campaign/db-config.json b/src/configurations/destinations/active_campaign/db-config.json index ae3770d18..f5743097d 100644 --- a/src/configurations/destinations/active_campaign/db-config.json +++ b/src/configurations/destinations/active_campaign/db-config.json @@ -6,6 +6,13 @@ "transformAtV1": "router", "saveDestinationResponse": true, "isAudienceSupported": true, + "throttlingCost": { + "eventType": { + "track": 2, + "identify": 4, + "screen": 2 + } + }, "includeKeys": ["oneTrustCookieCategories", "connectionMode", "actid"], "excludeKeys": [], "supportedSourceTypes": [ @@ -21,9 +28,22 @@ "cordova", "shopify" ], - "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedMessageTypes": { + "cloud": ["identify", "page", "screen", "track"], + "device": { + "web": ["identify", "page", "screen", "track"] + } + }, "supportedConnectionModes": { - "web": ["cloud", "device", "hybrid"] + "web": ["cloud", "device", "hybrid"], + "android": ["cloud"], + "ios": ["cloud"], + "unity": ["cloud"], + "amp": ["cloud"], + "reactnative": ["cloud"], + "flutter": ["cloud"], + "cordova": ["cloud"], + "shopify": ["cloud"] }, "hybridModeCloudEventsFilter": { "web": { diff --git a/src/configurations/destinations/adj/db-config.json b/src/configurations/destinations/adj/db-config.json index 495ca2f2a..0eaec94c5 100644 --- a/src/configurations/destinations/adj/db-config.json +++ b/src/configurations/destinations/adj/db-config.json @@ -26,9 +26,24 @@ "cordova", "shopify" ], - "supportedMessageTypes": [ - "track" - ], + "supportedMessageTypes": { + "cloud": ["track"], + "device": { + "android": ["track"], + "ios": ["track"], + "flutter": ["track"], + "unity": ["track"] + } + }, + "supportedConnectionModes": { + "android": ["cloud", "device"], + "ios": ["cloud", "device"], + "flutter": ["cloud", "device"], + "unity": ["cloud", "device"], + "reactnative": ["cloud"], + "cordova": ["cloud"], + "shopify": ["cloud"] + }, "destConfig": { "defaultConfig": [ "appToken", @@ -41,19 +56,11 @@ "partnerParamsKeys", "oneTrustCookieCategories" ], - "android": [ - "useNativeSDK" - ], - "ios": [ - "useNativeSDK" - ], - "flutter": [ - "useNativeSDK" - ], - "unity": [ - "useNativeSDK" - ] + "android": ["useNativeSDK"], + "ios": ["useNativeSDK"], + "flutter": ["useNativeSDK"], + "unity": ["useNativeSDK"] }, "secretKeys": [] } -} \ No newline at end of file +} diff --git a/src/configurations/destinations/adobe_analytics/db-config.json b/src/configurations/destinations/adobe_analytics/db-config.json index 9036eb97d..4f34e5bf6 100644 --- a/src/configurations/destinations/adobe_analytics/db-config.json +++ b/src/configurations/destinations/adobe_analytics/db-config.json @@ -54,10 +54,24 @@ "cordova", "shopify" ], + "supportedMessageTypes": { + "cloud": ["track", "page", "screen"], + "device": { + "web": ["page", "track"], + "android": ["identify", "track", "screen"], + "ios": ["identify", "track", "screen"] + } + }, "supportedConnectionModes": { "web": ["cloud", "device"], "android": ["cloud", "device"], - "ios": ["cloud", "device"] + "ios": ["cloud", "device"], + "unity": ["cloud"], + "amp": ["cloud"], + "reactnative": ["cloud"], + "flutter": ["cloud"], + "cordova": ["cloud"], + "shopify": ["cloud"] }, "destConfig": { "defaultConfig": [ diff --git a/src/configurations/destinations/af/db-config.json b/src/configurations/destinations/af/db-config.json index 52e34cdc3..307dc80b0 100644 --- a/src/configurations/destinations/af/db-config.json +++ b/src/configurations/destinations/af/db-config.json @@ -28,7 +28,26 @@ "cordova", "shopify" ], - "supportedMessageTypes": ["track", "screen", "page"], + "supportedMessageTypes": { + "cloud": ["track", "screen", "page"], + "device": { + "android": ["track", "screen", "page"], + "cordova": ["track", "screen", "page"], + "ios": ["track", "screen", "page"], + "flutter": ["track", "screen", "page"], + "reactnative": ["track", "screen", "page"] + } + }, + "supportedConnectionModes": { + "cordova": ["cloud", "device"], + "android": ["cloud", "device"], + "ios": ["cloud", "device"], + "flutter": ["cloud", "device"], + "reactnative": ["cloud", "device"], + "web": ["cloud"], + "amp": ["cloud"], + "unity": ["cloud"] + }, "destConfig": { "defaultConfig": [ "devKey", diff --git a/src/configurations/destinations/facebook_offline_conversions/db-config.json b/src/configurations/destinations/facebook_offline_conversions/db-config.json index 39654f6f8..33c907d23 100644 --- a/src/configurations/destinations/facebook_offline_conversions/db-config.json +++ b/src/configurations/destinations/facebook_offline_conversions/db-config.json @@ -41,5 +41,9 @@ ] }, "secretKeys": ["accessToken"] + }, + "options": { + "deprecated": true, + "deprecationLabel": "Facebook Offline Conversions is deprecated. Please use Facebook Conversions destination instead." } } diff --git a/src/configurations/destinations/facebook_pixel/db-config.json b/src/configurations/destinations/facebook_pixel/db-config.json index 0f29c07a2..7be19f1fa 100644 --- a/src/configurations/destinations/facebook_pixel/db-config.json +++ b/src/configurations/destinations/facebook_pixel/db-config.json @@ -36,6 +36,9 @@ "shopify" ], "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedConnectionModes": { + "web": ["cloud", "device"] + }, "destConfig": { "defaultConfig": [ "blacklistPiiProperties", @@ -58,7 +61,7 @@ "oneTrustCookieCategories", "ketchConsentPurposes" ], - "web": ["useNativeSDK", "legacyConversionPixelId"] + "web": ["useNativeSDK", "legacyConversionPixelId", "connectionMode"] }, "secretKeys": [] } diff --git a/src/configurations/destinations/facebook_pixel/schema.json b/src/configurations/destinations/facebook_pixel/schema.json index f43f7c8d6..2f4de3b4e 100644 --- a/src/configurations/destinations/facebook_pixel/schema.json +++ b/src/configurations/destinations/facebook_pixel/schema.json @@ -1,7 +1,7 @@ { "configSchema": { "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["pixelId"], + "required": ["pixelId", "accessToken"], "type": "object", "properties": { "pixelId": { @@ -125,6 +125,12 @@ }, "removeExternalId": { "type": "boolean", "default": false }, "useNativeSDK": { "type": "object", "properties": { "web": { "type": "boolean" } } }, + "connectionMode": { + "type": "object", + "properties": { + "web": { "type": "string", "enum": ["cloud", "device"] } + } + }, "useUpdatedMapping": { "type": "boolean", "default": false }, "eventFilteringOption": { "type": "string", diff --git a/src/configurations/destinations/facebook_pixel/ui-config.json b/src/configurations/destinations/facebook_pixel/ui-config.json index 1f017cfac..60e5621c5 100644 --- a/src/configurations/destinations/facebook_pixel/ui-config.json +++ b/src/configurations/destinations/facebook_pixel/ui-config.json @@ -1,355 +1,509 @@ { - "uiConfig": [ - { - "title": "1. Connection Settings", - "fields": [ - { - "type": "textInput", - "label": "Pixel ID", - "value": "pixelId", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", - "regexErrorMessage": "Invalid Pixel ID", - "required": true, - "placeholder": "e.g: 1234567898765", - "footerNote": "Your Pixel ID, from the snippet created on the Facebook Pixel creation page." - }, - { - "type": "textInput", - "label": "Business Access Token", - "value": "accessToken", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,208})$", - "regexErrorMessage": "Invalid Business Access Token", - "required": false, - "secret": true, - "placeholder": "e.g: EAALPFdyOVl4BAKEXmVR...", - "footerNote": "Your Business Access token from your Business Account. Required for cloud-mode." - } - ] - }, - { - "title": "2. Event Settings", - "fields": [ - { - "type": "dynamicForm", - "label": "Map Categories to Facebook Content Types", - "required": false, - "placeholderLeft": "e.g. Product Searched", - "placeholderRight": "Product", - "labelLeft": "category", - "labelRight": "Facebook content type", - "keyLeft": "from", - "keyRight": "to", - "value": "categoryToContent" - }, - { - "type": "checkbox", - "label": "Enable Standard Event (PageView) for all Page and Screen Calls", - "value": "standardPageCall", - "default": false - }, - { - "type": "dynamicSelectForm", - "label": "Map your events with Facebook Standard Events", - "labelLeft": "Event Name", - "labelRight": "Standard Event Name", - "value": "eventsToEvents", - "keyLeft": "from", - "keyRight": "to", - "required": false, - "placeholderLeft": "e.g. Product Searched", - "options": [ - { - "name": "ViewContent", - "value": "ViewContent" - }, - { - "name": "Search", - "value": "Search" - }, - { - "name": "AddToCart", - "value": "AddToCart" - }, - { - "name": "AddToWishlist", - "value": "AddToWishlist" - }, - { - "name": "InitiateCheckout", - "value": "InitiateCheckout" - }, - { - "name": "AddPaymentInfo", - "value": "AddPaymentInfo" - }, - { - "name": "Purchase", - "value": "Purchase" - }, - { - "name": "PageView", - "value": "PageView" - }, - { - "name": "Lead", - "value": "Lead" - }, - { - "name": "CompleteRegistration", - "value": "CompleteRegistration" - }, - { - "name": "Contact", - "value": "Contact" - }, - { - "name": "CustomizeProduct", - "value": "CustomizeProduct" - }, - { - "name": "Donate", - "value": "Donate" - }, - { - "name": "FindLocation", - "value": "FindLocation" - }, - { - "name": "Schedule", - "value": "Schedule" - }, - { - "name": "StartTrial", - "value": "StartTrial" - }, - { - "name": "SubmitApplication", - "value": "SubmitApplication" - }, - { - "name": "Subscribe", - "value": "Subscribe" - } - ] - }, - { - "type": "singleSelect", - "label": "Value Field Identifier", - "value": "valueFieldIdentifier", - "required": false, - "options": [ - { - "name": "properties.value", - "value": "properties.value" - }, - { - "name": "properties.price", - "value": "properties.price" - } - ], - "defaultOption": { - "name": "properties.price", - "value": "properties.price" + "uiConfig": { + "baseTemplate": [ + { + "title": "Initial setup", + "note": "Review how this destination is set up", + "sections": [ + { + "groups": [ + { + "title": "Connection settings", + "note": "Update your connection settings here", + "icon": "settings", + "fields": [ + { + "type": "textInput", + "label": "Pixel ID", + "note": "Your Pixel ID, from the snippet created on the Facebook Pixel creation page.", + "configKey": "pixelId", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Pixel ID", + "placeholder": "e.g: 1234567898765" + }, + { + "type": "textInput", + "label": "Business Access Token", + "note": "Your Business Access token from your Business Account. Required for cloud-mode.", + "configKey": "accessToken", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,300})$", + "regexErrorMessage": "Invalid Business Access Token", + "placeholder": "e.g: EAALPFdyOVl4BAKEXmVR...", + "secret": true + } + ] + } + ] + }, + { + "groups": [ + { + "title": "Connection mode", + "note": [ + "Update how you want to route events from your source to destination. ", + { + "text": "Get help deciding", + "link": "https://www.rudderstack.com/docs/destinations/rudderstack-connection-modes/" + } + ], + "icon": "sliders", + "fields": [], + "callout": { + "message": "Cloud mode for this destination will be deprecated soon. Please migrate to Facebook Conversions destination for cloud mode.", + "type": "info" + } + } + ] } - }, - { - "type": "checkbox", - "label": "Enable Advanced Matching", - "value": "advancedMapping" - } - ] - }, - { - "title": "3. PII Properties Settings", - "fields": [ - { - "type": "dynamicCustomForm", - "value": "blacklistPiiProperties", - "customFields": [ - { - "type": "textInput", - "value": "blacklistPiiProperties", - "label": "Denylist PII Properties", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", - "regexErrorMessage": "Invalid Denylist PII Properties", - "placeholder": "e.g. phone", - "required": false - }, - { - "type": "checkbox", - "value": "blacklistPiiHash", - "label": "Blacklist PII Hash Property", - "required": false - } - ] - }, - { - "type": "dynamicCustomForm", - "value": "whitelistPiiProperties", - "customFields": [ - { - "type": "textInput", - "placeholder": "e.g. email", - "value": "whitelistPiiProperties", - "label": "Allowlist PII Properties", - "required": false, - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", - "regexErrorMessage": "Invalid Allowlist PII Properties" - } - ] - } - ] - }, - { - "title": "4. Other Settings", + ] + }, + { + "title": "Configuration settings", + "note": "Manage the settings for your destination", + "sections": [ + { + "groups": [ + { + "title": "Event settings", + "note": "Configure a few advanced event settings here", + "icon": "settings", + "fields": [ + { + "type": "checkbox", + "label": "Enable Standard Event (PageView) for all Page and Screen Calls", + "configKey": "standardPageCall", + "default": false + }, + { + "type": "singleSelect", + "label": "Value Field Identifier", + "note": "RudderStack sets Revenue from below selected field.", + "configKey": "valueFieldIdentifier", + "options": [ + { + "name": "properties.value", + "value": "properties.value" + }, + { + "name": "properties.price", + "value": "properties.price" + } + ], + "default": "properties.price" + }, + { + "type": "checkbox", + "label": "Enable Advanced Matching", + "value": "advancedMapping", + "default": false + }, + { + "type": "checkbox", + "label": "Use Updated Mapping", + "note": "It is recomended to set this to on as we are deprecating support for the old mapping soon.", + "value": "useUpdatedMapping", + "default": false, + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.webDevice", + "value": "true" + } + ] + } + } + ] + } + ] + }, + { + "title": "Destination settings", + "note": "Configure advanced destination-specific settings here", + "icon": "settings", + "groups": [ + { + "title": "Destination and event level setting", + "note": "Configure advanced destination and event-specific settings here", + "fields": [ + { + "type": "checkbox", + "label": "Limited Data Usage", + "configKey": "limitedDataUSage", + "default": false + }, + { + "type": "checkbox", + "label": "Use as Test Destination", + "configKey": "testDestination", + "default": false + }, + { + "type": "textInput", + "label": "Test Event Code", + "note": "Your test event code from your Facebook Datasets dashboard. Required if Test Destination flag is turned ON", + "configKey": "testEventCode", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Please put a valid Test event code", + "placeholder": "e.g: TEST80569" + }, + { + "type": "checkbox", + "label": "Don't send external_id for user", + "note": "Turn this on to send neither userId nor anonymousId as external_id.", + "configKey": "removeExternalId", + "default": false + } + ] + } + ] + }, + { + "title": "Other settings", + "note": "Configure advanced RudderStack features here", + "icon": "otherSettings", + "groups": [ + { + "title": "Client-side event filtering", + "note": "Decide what events are allowed (allowlisting) and blocked (denylisting)", + "fields": [ + { + "type": "singleSelect", + "label": "Choose if you want to turn on events filtering:", + "configKey": "eventFilteringOption", + "note": "You must select either allowlist or denylist to enable events filtering", + "options": [ + { + "label": "Disabled", + "value": "disable" + }, + { + "label": "Filter via allowlist", + "value": "whitelistedEvents" + }, + { + "label": "Filter via denylist", + "value": "blacklistedEvents" + } + ], + "default": "disable" + }, + { + "type": "tagInput", + "label": "Allowlisted events", + "note": "Input separate events by pressing ‘Enter’.\nInput the events you want to allowlist.", + "configKey": "whitelistedEvents", + "tagKey": "eventName", + "placeholder": "e.g: Anonymous page visit", + "default": [ + { + "eventName": "" + } + ], + "preRequisites": { + "fields": [ + { + "configKey": "eventFilteringOption", + "value": "whitelistedEvents" + } + ] + } + }, + { + "type": "tagInput", + "label": "Denylisted events", + "note": "Input separate events by pressing ‘Enter’.\nInput the events you want to denylist. ", + "configKey": "blacklistedEvents", + "tagKey": "eventName", + "placeholder": "e.g: Anonymous page visit", + "default": [ + { + "eventName": "" + } + ], + "preRequisites": { + "fields": [ + { + "configKey": "eventFilteringOption", + "value": "blacklistedEvents" + } + ] + } + } + ] + }, + { + "title": "OneTrust cookie consent settings", + "note": [ + "Enter your OneTrust category names if you have them configured. ", + { + "text": "Learn more ", + "link": "https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/onetrust-consent-manager/" + }, + "about RudderStack’s OneTrust Consent Manager feature." + ], + "fields": [ + { + "type": "tagInput", + "label": "Cookie category name", + "note": "Input your OneTrust category names by pressing ‘Enter’ after each entry", + "configKey": "oneTrustCookieCategories", + "tagKey": "oneTrustCookieCategory", + "placeholder": "e.g: Credit card visit", + "default": [ + { + "oneTrustCookieCategory": "" + } + ] + } + ] + }, + { + "title": "Ketch consent settings", + "note": "Enter your Ketch Consent Purposes if you have them configured.", + "fields": [ + { + "type": "tagInput", + "label": "Ketch consent purpose", + "note": "Input your Ketch consent purpose by pressing ‘Enter’ after each entry", + "configKey": "ketchConsentPurposes", + "tagKey": "purpose", + "placeholder": "e.g: Marketing", + "default": [ + { + "purpose": "" + } + ] + } + ] + } + ] + } + ] + }, + { + "title": "Event mapping", + "note": "Map RudderStack to Facebook events", + "hideEditIcon": true, + "sections": [ + { + "groups": [ + { + "title": "RudderStack to Facebook event mappings", + "fields": [ + { + "type": "redirect", + "redirectGroupKey": "customEventMapping", + "label": "Event and property mappings", + "note": "Map RudderStack events/properties to Facebook custom events/properties" + } + ] + } + ] + } + ] + } + ], + "sdkTemplate": { + "title": "SDK settings", + "note": "not visible in the ui", "fields": [ { - "type": "dynamicForm", + "type": "redirect", + "redirectGroupKey": "legacyConversionMapping", "label": "Legacy Conversion Pixel IDs", - "value": "legacyConversionPixelId", - "required": false, - "keyLeft": "from", - "keyRight": "to", - "placeholderLeft": "e.g. Product Searched", - "placeholderRight": "e.g 12345678987654", - "labelLeft": "Event Name", - "labelRight": "Pixel Id" - }, - { - "type": "checkbox", - "label": "Limited Data Usage", - "value": "limitedDataUSage" - }, - { - "type": "checkbox", - "label": "Use as Test Destination", - "value": "testDestination", - "default": false - }, - { - "type": "textInput", - "label": "Test Event Code", - "value": "testEventCode", - "regex": "^(.{0,100})$", - "required": false, - "placeholder": "e.g: TEST80569", - "footerNote": "Your test event code from your Facebook Pixel dashboard. Required if Test Destination flag is turned ON" - }, - { - "type": "checkbox", - "label": "Don't send external_id for user", - "value": "removeExternalId", - "default": false, - "footerNote": "Turn this on to send neither userId nor anonymousId as external_id." - } - ] - }, - { - "title": "5. Native SDK", - "fields": [ - { - "type": "checkbox", - "label": "Use device-mode to send events", - "value": "useNativeSDK", - "default": false - }, - { - "type": "checkbox", - "label": "Use Updated Mapping", - "value": "useUpdatedMapping", - "default": false, - "footerNote": "It is recomended to set this to on as we are deprecating support for the old mapping soon." + "note": "Map RudderStack events to Facebook Pixel IDs" } ] }, - { - "title": "Client-side Events Filtering", - "sectionNote": "Applicable only for device-mode integrations. If enabled, it works only with either allowlisted or denylisted events", - "fields": [ - { - "type": "singleSelect", - "value": "eventFilteringOption", - "required": false, - "options": [ - { - "name": "Disable", - "value": "disable" - }, - { - "name": "Allowlist", - "value": "whitelistedEvents" - }, - { - "name": "Denylist", - "value": "blacklistedEvents" - } - ], - "defaultOption": { - "name": "Disable", - "value": "disable" + "redirectGroups": { + "customEventMapping": { + "tabs": [ + { + "name": "Category mapping", + "fields": [ + { + "type": "mapping", + "label": "Map your RudderStack Categories to Facebook Content Types", + "note": "Input the RudderStack category to map to Facebook's content type.", + "configKey": "categoryToContent", + "default": [], + "columns": [ + { + "type": "textInput", + "key": "from", + "label": "RudderStack Category", + "placeholder": "e.g: Product Searched" + }, + { + "type": "textInput", + "key": "to", + "label": "Facebook Content Type", + "placeholder": "e.g: Product" + } + ] + } + ] + }, + { + "name": "Custom event", + "fields": [ + { + "type": "mapping", + "label": "Map RudderStack event to Facebook standard event", + "note": "Input the RudderStack event to map to Facebook's standard event.", + "configKey": "eventsToEvents", + "default": [], + "columns": [ + { + "type": "textInput", + "key": "from", + "label": "RudderStack Event", + "placeholder": "e.g: Product Searched" + }, + { + "type": "singleSelect", + "key": "to", + "label": "Facebook custom event", + "options": [ + { + "name": "ViewContent", + "value": "ViewContent" + }, + { + "name": "Search", + "value": "Search" + }, + { + "name": "AddToCart", + "value": "AddToCart" + }, + { + "name": "AddToWishlist", + "value": "AddToWishlist" + }, + { + "name": "InitiateCheckout", + "value": "InitiateCheckout" + }, + { + "name": "AddPaymentInfo", + "value": "AddPaymentInfo" + }, + { + "name": "Purchase", + "value": "Purchase" + }, + { + "name": "PageView", + "value": "PageView" + }, + { + "name": "Lead", + "value": "Lead" + }, + { + "name": "CompleteRegistration", + "value": "CompleteRegistration" + }, + { + "name": "Contact", + "value": "Contact" + }, + { + "name": "CustomizeProduct", + "value": "CustomizeProduct" + }, + { + "name": "Donate", + "value": "Donate" + }, + { + "name": "FindLocation", + "value": "FindLocation" + }, + { + "name": "Schedule", + "value": "Schedule" + }, + { + "name": "StartTrial", + "value": "StartTrial" + }, + { + "name": "SubmitApplication", + "value": "SubmitApplication" + }, + { + "name": "Subscribe", + "value": "Subscribe" + } + ] + } + ] + } + ] + }, + { + "name": "PII properties", + "fields": [ + { + "type": "dynamicCustomForm", + "label": "Input PII properties you want to denylist", + "configKey": "blacklistPiiProperties", + "rowFields": [ + { + "type": "textInput", + "configKey": "blacklistPiiProperties", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", + "regexErrorMessage": "Invalid Denylist PII Properties", + "label": "Denylist PII Properties", + "placeholder": "e.g: phone" + }, + { + "type": "checkbox", + "label": "Hash Denylist PII Property", + "configKey": "blacklistPiiHash", + "default": false + } + ] + }, + { + "type": "tagInput", + "label": "Input PII properties you want to allowlist", + "configKey": "whitelistPiiProperties", + "tagKey": "whitelistPiiProperties", + "placeholder": "e.g: email", + "default": [] + } + ] } - }, - { - "type": "dynamicCustomForm", - "value": "whitelistedEvents", - "label": "Allowlist", - "customFields": [ - { - "type": "textInput", - "value": "eventName", - "required": false, - "placeholder": "e.g: Anonymous Page Visit" - } - ] - }, - { - "type": "dynamicCustomForm", - "value": "blacklistedEvents", - "label": "Denylist", - "customFields": [ - { - "type": "textInput", - "value": "eventName", - "required": false, - "placeholder": "e.g: Credit Card Added" - } - ] - } - ] - }, - { - "title": "Consent Settings", - "fields": [ - { - "type": "dynamicCustomForm", - "value": "oneTrustCookieCategories", - "label": "OneTrust Cookie Categories", - "customFields": [ - { - "type": "textInput", - "placeholder": "Marketing", - "value": "oneTrustCookieCategory", - "label": "Category Name/ID", - "required": false - } - ] - }, - { - "type": "dynamicCustomForm", - "value": "ketchConsentPurposes", - "label": "Ketch Consent Purposes", - "customFields": [ - { - "type": "textInput", - "placeholder": "Marketing", - "value": "purpose", - "label": "Purpose ID", - "regex": "^(.{0,100})$", - "required": false - } - ] - } - ] + ] + }, + "legacyConversionMapping": { + "fields": [ + { + "type": "mapping", + "label": "Map your RudderStack Events to Facebook Pixel IDs", + "note": "Input the RudderStack event to map to Facebook's pixel id.", + "configKey": "legacyConversionPixelId", + "default": [], + "columns": [ + { + "type": "textInput", + "key": "from", + "label": "Event name", + "placeholder": "e.g: Product Searched" + }, + { + "type": "textInput", + "key": "to", + "label": "Pixel ID", + "placeholder": "e.g: 234567654654" + } + ] + } + ] + } } - ] + } } diff --git a/src/configurations/destinations/fb/db-config.json b/src/configurations/destinations/fb/db-config.json index 970e3beb4..f1cb85148 100644 --- a/src/configurations/destinations/fb/db-config.json +++ b/src/configurations/destinations/fb/db-config.json @@ -29,6 +29,10 @@ "shopify" ], "supportedMessageTypes": ["page", "screen", "track"], + "supportedConnectionModes": { + "android": ["cloud", "device"], + "ios": ["cloud", "device"] + }, "destConfig": { "defaultConfig": [ "appID", @@ -40,8 +44,8 @@ "eventFilteringOption", "oneTrustCookieCategories" ], - "android": ["useNativeSDK"], - "ios": ["useNativeSDK"] + "android": ["useNativeSDK", "connectionMode"], + "ios": ["useNativeSDK", "connectionMode"] }, "secretKeys": [] } diff --git a/src/configurations/destinations/fb/ui-config.json b/src/configurations/destinations/fb/ui-config.json index b8ae02004..f4343e026 100644 --- a/src/configurations/destinations/fb/ui-config.json +++ b/src/configurations/destinations/fb/ui-config.json @@ -1,157 +1,215 @@ { - "uiConfig": [ - { - "title": "Connection Settings", - "fields": [ - { - "type": "textInput", - "label": "APP ID", - "value": "appID", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", - "regexErrorMessage": "Invalid APP ID", - "required": true, - "placeholder": "e.g: bSjsdGYsOo9sjw23Shj" - } - ] - }, - { - "title": "Data Processing Options", - "sectionNote": "These settings are applicable only for Mobile Device Mode", - "fields": [ - { - "type": "checkbox", - "label": "Limited Data use", - "value": "limitedDataUse", - "default": false - }, - { - "type": "singleSelect", - "label": "State", - "value": "dpoState", - "options": [ - { - "name": "Use Facebook to detect Automatically", - "value": "0" - }, - { - "name": "California", - "value": "1000" - } - ], - "defaultOption": { - "name": "Use Facebook to detect Automatically", - "value": "0" + "uiConfig": { + "baseTemplate": [ + { + "title": "Initial setup", + "note": "Review how this destination is set up", + "sections": [ + { + "groups": [ + { + "title": "Connection settings", + "note": "Update your connection settings here", + "icon": "settings", + "fields": [ + { + "type": "textInput", + "label": "App ID", + "note": "Your App ID, from the snippet created on the Facebook App creation page.", + "configKey": "appID", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid App ID", + "placeholder": "e.g: bSjsdGYsOo9sjw23Shj" + } + ] + } + ] }, - "required": false, - "footerNote": "Note: State will be sent as a Data Processing Option to Facebook only if you enable Limited Data Use. Valid values are 0, 1000." - }, - { - "type": "singleSelect", - "label": "Country", - "value": "dpoCountry", - "options": [ - { - "name": "Use Facebook to detect Automatically", - "value": "0" - }, - { - "name": "United States of America", - "value": "1" - } - ], - "defaultOption": { - "name": "Use Facebook to detect Automatically", - "value": "0" + { + "groups": [ + { + "title": "Connection mode", + "note": [ + "Update how you want to route events from your source to destination. ", + { + "text": "Get help deciding", + "link": "https://www.rudderstack.com/docs/destinations/rudderstack-connection-modes/" + } + ], + "icon": "sliders", + "fields": [], + "callout": { + "message": "Cloud mode for this destination will be deprecated soon. Please migrate to Facebook Conversions destination for cloud mode.", + "type": "info" + } + } + ] + } + ] + }, + { + "title": "Configuration settings", + "note": "Manage the settings for your destination", + "sections": [ + { + "groups": [ + { + "title": "Destination settings", + "note": "Configure advanced destination-specific settings heree", + "fields": [ + { + "type": "checkbox", + "label": "Limited Data Usage", + "configKey": "limitedDataUse", + "default": false + }, + { + "type": "singleSelect", + "label": "State", + "note": "State will be sent as a Data Processing Option to Facebook only if you enable Limited Data Use. Valid values are 0, 1000.", + "configKey": "dpoState", + "options": [ + { + "name": "Use Facebook to detect Automatically", + "value": "0" + }, + { + "name": "California", + "value": "1000" + } + ], + "default": "0" + }, + { + "type": "singleSelect", + "label": "Country", + "note": "Country will be sent as a Data Processing Option to Facebook only if you enable Limited Data Use. Valid values are 0, 1.", + "configKey": "dpoCountry", + "options": [ + { + "name": "Use Facebook to detect Automatically", + "value": "0" + }, + { + "name": "United States of America", + "value": "1" + } + ], + "default": "0" + } + ] + } + ] }, - "required": false, - "footerNote": "Note: Country will be sent as a Data Processing Option to Facebook only if you enable Limited Data Use. Valid values are 0, 1." - } - ] - }, - { - "title": "Native SDK", - "fields": [ - { - "type": "checkbox", - "label": "Use device-mode to send events", - "value": "useNativeSDK", - "default": false - } - ] - }, - { - "title": "Client-side Events Filtering", - "sectionNote": "Applicable only for device-mode integrations. If enabled, it works only with either allowlisted or denylisted events", - "fields": [ - { - "type": "singleSelect", - "value": "eventFilteringOption", - "required": false, - "options": [ - { - "name": "Disable", - "value": "disable" - }, - { - "name": "Allowlist", - "value": "whitelistedEvents" - }, - { - "name": "Denylist", - "value": "blacklistedEvents" - } - ], - "defaultOption": { - "name": "Disable", - "value": "disable" + { + "title": "Other settings", + "note": "Configure advanced RudderStack features here", + "icon": "otherSettings", + "groups": [ + { + "title": "Client-side event filtering", + "note": "Decide what events are allowed (allowlisting) and blocked (denylisting)", + "fields": [ + { + "type": "singleSelect", + "label": "Choose if you want to turn on events filtering:", + "configKey": "eventFilteringOption", + "note": "You must select either allowlist or denylist to enable events filtering", + "options": [ + { + "label": "Disabled", + "value": "disable" + }, + { + "label": "Filter via allowlist", + "value": "whitelistedEvents" + }, + { + "label": "Filter via denylist", + "value": "blacklistedEvents" + } + ], + "default": "disable" + }, + { + "type": "tagInput", + "label": "Allowlisted events", + "note": "Input separate events by pressing ‘Enter’.\nInput the events you want to allowlist.", + "configKey": "whitelistedEvents", + "tagKey": "eventName", + "placeholder": "e.g: Anonymous page visit", + "default": [ + { + "eventName": "" + } + ], + "preRequisites": { + "fields": [ + { + "configKey": "eventFilteringOption", + "value": "whitelistedEvents" + } + ] + } + }, + { + "type": "tagInput", + "label": "Denylisted events", + "note": "Input separate events by pressing ‘Enter’.\nInput the events you want to denylist. ", + "configKey": "blacklistedEvents", + "tagKey": "eventName", + "placeholder": "e.g: Anonymous page visit", + "default": [ + { + "eventName": "" + } + ], + "preRequisites": { + "fields": [ + { + "configKey": "eventFilteringOption", + "value": "blacklistedEvents" + } + ] + } + } + ] + }, + { + "title": "OneTrust cookie consent settings", + "note": [ + "Enter your OneTrust category names if you have them configured. ", + { + "text": "Learn more ", + "link": "https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/onetrust-consent-manager/" + }, + "about RudderStack’s OneTrust Consent Manager feature." + ], + "fields": [ + { + "type": "tagInput", + "label": "Cookie category name", + "note": "Input your OneTrust category names by pressing ‘Enter’ after each entry", + "configKey": "oneTrustCookieCategories", + "tagKey": "oneTrustCookieCategory", + "placeholder": "e.g: Credit card visit", + "default": [ + { + "oneTrustCookieCategory": "" + } + ] + } + ] + } + ] } - }, - { - "type": "dynamicCustomForm", - "value": "whitelistedEvents", - "label": "Allowlist", - "customFields": [ - { - "type": "textInput", - "value": "eventName", - "required": false, - "placeholder": "e.g: Anonymous Page Visit" - } - ] - }, - { - "type": "dynamicCustomForm", - "value": "blacklistedEvents", - "label": "Denylist", - "customFields": [ - { - "type": "textInput", - "value": "eventName", - "required": false, - "placeholder": "e.g: Credit Card Added" - } - ] - } - ] - }, - { - "title": "Consent Settings", - "fields": [ - { - "type": "dynamicCustomForm", - "value": "oneTrustCookieCategories", - "label": "OneTrust Cookie Categories", - "customFields": [ - { - "type": "textInput", - "placeholder": "Marketing", - "value": "oneTrustCookieCategory", - "label": "Category Name/ID", - "required": false - } - ] - } - ] + ] + } + ], + "sdkTemplate": { + "title": "SDK settings", + "note": "not visible in the ui", + "fields": [] } - ] + } } diff --git a/src/configurations/destinations/ga/db-config.json b/src/configurations/destinations/ga/db-config.json index 55821422e..0628fe3d7 100644 --- a/src/configurations/destinations/ga/db-config.json +++ b/src/configurations/destinations/ga/db-config.json @@ -98,5 +98,9 @@ ] }, "secretKeys": [] + }, + "options": { + "deprecated": true, + "deprecationLabel": "Google sunsetted Google Analytics (UA). Please set up Google Analytics 4 instead" } } diff --git a/src/configurations/destinations/matomo/db-config.json b/src/configurations/destinations/matomo/db-config.json index 9e39cfe3e..4c6267a35 100644 --- a/src/configurations/destinations/matomo/db-config.json +++ b/src/configurations/destinations/matomo/db-config.json @@ -7,6 +7,8 @@ "saveDestinationResponse": true, "includeKeys": [ "serverUrl", + "matomoVersion", + "premiseUrl", "siteId", "eventsMapToGoalId", "eventsToStandard", @@ -31,7 +33,9 @@ "supportedMessageTypes": ["identify", "track", "page"], "destConfig": { "defaultConfig": [ + "matomoVersion", "serverUrl", + "premiseUrl", "siteId", "eventsMapToGoalId", "eventsToStandard", diff --git a/src/configurations/destinations/matomo/schema.json b/src/configurations/destinations/matomo/schema.json index 2a35e713f..dc31e4cf0 100644 --- a/src/configurations/destinations/matomo/schema.json +++ b/src/configurations/destinations/matomo/schema.json @@ -1,18 +1,26 @@ { "configSchema": { "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["serverUrl", "siteId"], + "required": ["matomoVersion", "siteId"], "type": "object", "properties": { - "serverUrl": { + "matomoVersion": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{1,100})$" + "enum": ["premise", "cloud"], + "default": "cloud" }, "siteId": { "type": "string", "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,10})$" }, - "useNativeSDK": { "type": "object", "properties": { "web": { "type": "boolean" } } }, + "useNativeSDK": { + "type": "object", + "properties": { + "web": { + "type": "boolean" + } + } + }, "eventsMapToGoalId": { "type": "array", "items": { @@ -54,16 +62,46 @@ } } }, - "trackAllContentImpressions": { "type": "boolean", "default": false }, - "trackVisibleContentImpressions": { "type": "boolean", "default": false }, - "logAllContentBlocksOnPage": { "type": "boolean", "default": false }, - "enableHeartBeatTimer": { "type": "boolean", "default": false }, - "enableLinkTracking": { "type": "boolean", "default": false }, - "disablePerformanceTracking": { "type": "boolean", "default": false }, - "enableCrossDomainLinking": { "type": "boolean", "default": false }, - "setCrossDomainLinkingTimeout": { "type": "boolean", "default": false }, - "getCrossDomainLinkingUrlParameter": { "type": "boolean", "default": false }, - "disableBrowserFeatureDetection": { "type": "boolean", "default": false }, + "trackAllContentImpressions": { + "type": "boolean", + "default": false + }, + "trackVisibleContentImpressions": { + "type": "boolean", + "default": false + }, + "logAllContentBlocksOnPage": { + "type": "boolean", + "default": false + }, + "enableHeartBeatTimer": { + "type": "boolean", + "default": false + }, + "enableLinkTracking": { + "type": "boolean", + "default": false + }, + "disablePerformanceTracking": { + "type": "boolean", + "default": false + }, + "enableCrossDomainLinking": { + "type": "boolean", + "default": false + }, + "setCrossDomainLinkingTimeout": { + "type": "boolean", + "default": false + }, + "getCrossDomainLinkingUrlParameter": { + "type": "boolean", + "default": false + }, + "disableBrowserFeatureDetection": { + "type": "boolean", + "default": false + }, "oneTrustCookieCategories": { "type": "array", "items": { @@ -80,12 +118,57 @@ "allOf": [ { "if": { - "properties": { "trackVisibleContentImpressions": { "const": true } }, + "properties": { + "matomoVersion": { + "const": "premise" + } + }, + "required": ["matomoVersion"] + }, + "then": { + "properties": { + "premiseUrl": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{1,100})$" + } + }, + "required": ["premiseUrl"] + } + }, + { + "if": { + "properties": { + "matomoVersion": { + "const": "cloud" + } + }, + "required": ["matomoVersion"] + }, + "then": { + "properties": { + "serverUrl": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{1,100})$" + } + }, + "required": ["serverUrl"] + } + }, + { + "if": { + "properties": { + "trackVisibleContentImpressions": { + "const": true + } + }, "required": ["trackVisibleContentImpressions"] }, "then": { "properties": { - "checkOnScroll": { "type": "boolean", "default": true }, + "checkOnScroll": { + "type": "boolean", + "default": true + }, "timeIntervalInMs": { "type": "string", "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^[0-9]+$" @@ -96,7 +179,11 @@ }, { "if": { - "properties": { "enableHeartBeatTimer": { "const": true } }, + "properties": { + "enableHeartBeatTimer": { + "const": true + } + }, "required": ["enableHeartBeatTimer"] }, "then": { @@ -111,7 +198,11 @@ }, { "if": { - "properties": { "setCrossDomainLinkingTimeout": { "const": true } }, + "properties": { + "setCrossDomainLinkingTimeout": { + "const": true + } + }, "required": ["setCrossDomainLinkingTimeout"] }, "then": { diff --git a/src/configurations/destinations/matomo/ui-config.json b/src/configurations/destinations/matomo/ui-config.json index 6ac621bf8..6991664ab 100644 --- a/src/configurations/destinations/matomo/ui-config.json +++ b/src/configurations/destinations/matomo/ui-config.json @@ -3,6 +3,44 @@ { "title": "Connection Settings", "fields": [ + { + "type": "singleSelect", + "label": "Matomo Version", + "value": "matomoVersion", + "options": [ + { + "name": "Premise Version", + "value": "premise" + }, + { + "name": "Cloud Version", + "value": "cloud" + } + ], + "defaultOption": { + "name": "Cloud Version", + "value": "cloud" + }, + "required": true, + "footerNote": "Select Version" + }, + { + "type": "textInput", + "label": "Premise URL", + "value": "premiseUrl", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{1,100})$", + "regexErrorMessage": "URL length should be less than 100 characters", + "required": true, + "preRequisiteField": [ + { + "name": "matomoVersion", + "selectedValue": "premise" + } + ], + "placeholder": "e.g: https://example.com/matomo.js", + "footerNote": "Provide full source url", + "secret": true + }, { "type": "textInput", "label": "Server URL", @@ -10,6 +48,12 @@ "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{1,100})$", "regexErrorMessage": "URL length should be less than 100 characters", "required": true, + "preRequisiteField": [ + { + "name": "matomoVersion", + "selectedValue": "cloud" + } + ], "placeholder": "e.g: https://example.matomo.cloud/", "secret": true }, diff --git a/src/configurations/destinations/mp/ui-config.json b/src/configurations/destinations/mp/ui-config.json index d372e3a8b..dfb52da41 100644 --- a/src/configurations/destinations/mp/ui-config.json +++ b/src/configurations/destinations/mp/ui-config.json @@ -127,7 +127,7 @@ { "type": "checkbox", "label": "Ignore \"Do Not Track\"", - "value": "strictMode", + "value": "ignoreDnt", "default": false, "footerNote": "If enabled, Mixpanel will ignore \"Do Not Track\" setting of browser" } diff --git a/src/configurations/destinations/ortto/db-config.json b/src/configurations/destinations/ortto/db-config.json new file mode 100644 index 000000000..3243e697a --- /dev/null +++ b/src/configurations/destinations/ortto/db-config.json @@ -0,0 +1,52 @@ +{ + "name": "ORTTO", + "displayName": "Ortto", + "config": { + "cdkV2Enabled": true, + "transformAt": "router", + "transformAtV1": "router", + "saveDestinationResponse": true, + "includeKeys": [], + "excludeKeys": [], + "supportedSourceTypes": [ + "android", + "ios", + "web", + "unity", + "amp", + "cloud", + "warehouse", + "reactnative", + "flutter", + "cordova", + "shopify" + ], + "supportedConnectionModes": { + "android": ["cloud"], + "ios": ["cloud"], + "web": ["cloud"], + "unity": ["cloud"], + "amp": ["cloud"], + "reactnative": ["cloud"], + "flutter": ["cloud"], + "cordova": ["cloud"], + "shopify": ["cloud"] + }, + "supportedMessageTypes": { + "cloud": ["identify", "track"] + }, + "destConfig": { + "defaultConfig": [ + "privateApiKey", + "instanceRegion", + "orttoPersonAttributes", + "orttoEventsMapping", + "eventProperties", + "oneTrustCookieCategories" + ] + } + }, + "options": { + "isBeta": true + } +} diff --git a/src/configurations/destinations/ortto/schema.json b/src/configurations/destinations/ortto/schema.json new file mode 100644 index 000000000..809be18f3 --- /dev/null +++ b/src/configurations/destinations/ortto/schema.json @@ -0,0 +1,129 @@ +{ + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "required": ["privateApiKey", "instanceRegion"], + "type": "object", + "properties": { + "privateApiKey": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,300})$" + }, + "instanceRegion": { "type": "string", "enum": ["au", "eu", "other"], "default": "other" }, + "oneTrustCookieCategories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "oneTrustCookieCategory": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "useNativeSDK": { "type": "boolean" }, + "connectionMode": { + "type": "object", + "properties": { + "android": { "type": "string", "enum": ["cloud"] }, + "ios": { "type": "string", "enum": ["cloud"] }, + "web": { "type": "string", "enum": ["cloud"] }, + "unity": { "type": "string", "enum": ["cloud"] }, + "amp": { "type": "string", "enum": ["cloud"] }, + "reactnative": { "type": "string", "enum": ["cloud"] }, + "flutter": { "type": "string", "enum": ["cloud"] }, + "cordova": { "type": "string", "enum": ["cloud"] }, + "shopify": { "type": "string", "enum": ["cloud"] } + } + }, + "orttoEventsMapping": { + "type": "array", + "items": { + "type": "object", + "properties": { + "rsEventName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "orttoEventName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "eventProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "rudderProperty": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "orttoProperty": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "type": { + "type": "string", + "enum": [ + "email", + "text", + "longText", + "number", + "decimalNumber", + "currency", + "date", + "timeAndDate", + "boolean", + "phone", + "singleSelect", + "multiSelect", + "link", + "object" + ], + "default": "other" + } + } + } + } + } + } + }, + "orttoPersonAttributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "rudderTraits": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "orttoAttribute": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "type": { + "type": "string", + "enum": [ + "email", + "text", + "longText", + "number", + "decimalNumber", + "currency", + "date", + "timeAndDate", + "boolean", + "phone", + "singleSelect", + "multiSelect", + "link", + "object" + ], + "default": "other" + } + } + } + } + } + } +} diff --git a/src/configurations/destinations/ortto/ui-config.json b/src/configurations/destinations/ortto/ui-config.json new file mode 100644 index 000000000..57b381b97 --- /dev/null +++ b/src/configurations/destinations/ortto/ui-config.json @@ -0,0 +1,346 @@ +{ + "uiConfig": { + "baseTemplate": [ + { + "title": "Initial setup", + "note": "Review how this destination is set up", + "sections": [ + { + "groups": [ + { + "title": "Connection settings", + "note": "Update your connection settings here", + "icon": "settings", + "fields": [ + { + "type": "textInput", + "label": "Private Api Key", + "note": "Your Private API Key.", + "configKey": "privateApiKey", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,300})$", + "regexErrorMessage": "Invalid Api Key", + "placeholder": "e.g: PRV-dummy--dsfsdfsdfsd72fs3UQ6hxfybiDAwg" + }, + { + "type": "singleSelect", + "label": "Instance Region", + "note": "Select your instance region", + "configKey": "instanceRegion", + "regex": "^(.{1,100})$", + "regexErrorMessage": "Invalid instance region", + "options": [ + { + "label": "Australia", + "value": "au" + }, + { + "label": "Europe", + "value": "eu" + }, + { + "label": "Other", + "value": "other" + } + ], + "default": "other" + } + ] + } + ] + }, + { + "groups": [ + { + "title": "Connection mode", + "note": [ + "Update how you want to route events from your source to destination. ", + { + "text": "Get help deciding", + "link": "https://www.rudderstack.com/docs/destinations/rudderstack-connection-modes/" + } + ], + "icon": "sliders", + "fields": [] + } + ] + } + ] + }, + { + "title": "Configuration settings", + "note": "Manage the settings for your destination", + "sections": [ + { + "title": "Destination settings", + "note": "Configure advanced RudderStack features here", + "icon": "otherSettings", + "groups": [ + { + "title": "OneTrust cookie consent settings", + "note": [ + "Enter your OneTrust category names if you have them configured. ", + { + "text": "Learn more ", + "link": "https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/onetrust-consent-manager/" + }, + "about RudderStack’s OneTrust Consent Manager feature." + ], + "fields": [ + { + "type": "tagInput", + "label": "Cookie category name", + "note": "Input your OneTrust category names by pressing ‘Enter’ after each entry", + "configKey": "oneTrustCookieCategories", + "tagKey": "oneTrustCookieCategory", + "placeholder": "e.g: Credit card visit", + "default": [ + { + "oneTrustCookieCategory": "" + } + ] + } + ] + } + ] + } + ] + }, + { + "title": "Event and property mapping", + "note": "Map RudderStack to Ortto events/properties", + "hideEditIcon": true, + "sections": [ + { + "groups": [ + { + "title": "RudderStack to Ortto event/property mappings", + "fields": [ + { + "type": "redirect", + "redirectGroupKey": "eventAndPropertyMapping", + "label": "Event and property mappings", + "note": "Map RudderStack events/properties to Ortto custom events/properties" + }, + { + "type": "redirect", + "redirectGroupKey": "traitsMapping", + "label": "Custom user traits mappings", + "note": "Map RudderStack traits to your Ortto Person attributes" + } + ] + } + ] + } + ] + } + ], + "sdkTemplate": { + "title": "SDK settings", + "note": "not visible in the ui", + "fields": [] + }, + "redirectGroups": { + "eventAndPropertyMapping": { + "fields": [ + { + "type": "dynamicCustomForm", + "label": "Map RudderStack event name to Ortto Custom event name", + "configKey": "orttoEventsMapping", + "rowFields": [ + { + "type": "mappingRow", + "columns": [ + { + "type": "textInput", + "configKey": "rsEventName", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Event name is required", + "label": "RudderStack Event Name", + "placeholder": "e.g Products Searched" + }, + { + "type": "textInput", + "configKey": "orttoEventName", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Event name is required", + "label": "Ortto Event Name", + "placeholder": "e.g Search" + } + ] + }, + { + "type": "mapping", + "label": "Map your Event Property", + "configKey": "eventProperties", + "default": [], + "columns": [ + { + "type": "textInput", + "key": "rudderProperty", + "label": "RudderStack Property Name", + "placeholder": "e.g firstName" + }, + { + "type": "textInput", + "key": "orttoProperty", + "label": "Ortto Property Name", + "placeholder": "e.g first_name" + }, + { + "type": "singleSelect", + "key": "type", + "label": "Ortto Property type", + "options": [ + { + "label": "Email", + "value": "email" + }, + + { + "label": "Text", + "value": "text" + }, + { + "label": "Long Text", + "value": "longText" + }, + { + "label": "Number", + "value": "number" + }, + { + "label": "Decimal Number", + "value": "decimalNumber" + }, + { + "label": "Curreny", + "value": "currency" + }, + { + "label": "Date", + "value": "date" + }, + { + "label": "Time and date", + "value": "timeAndDate" + }, + { + "label": "Boolean", + "value": "boolean" + }, + { + "label": "Phone Number", + "value": "phone" + }, + { + "label": "Single Select", + "value": "singleSelect" + }, + { + "label": "Multi Select", + "value": "multiSelect" + }, + { + "label": "Link", + "value": "link" + }, + { + "label": "Object", + "value": "object" + } + ], + "default": ["text"] + } + ] + } + ] + } + ] + }, + "traitsMapping": { + "fields": [ + { + "type": "mapping", + "label": "Map your Event Property", + "configKey": "orttoPersonAttributes", + "default": [], + "columns": [ + { + "type": "textInput", + "key": "rudderTraits", + "label": "RudderStack traits Name", + "placeholder": "e.g firstName" + }, + { + "type": "textInput", + "key": "orttoAttribute", + "label": "Ortto attribute Name", + "placeholder": "e.g first_name" + }, + { + "type": "singleSelect", + "key": "type", + "label": "Ortto attribute type", + "options": [ + { + "label": "Text", + "value": "text" + }, + { + "label": "Long Text", + "value": "longText" + }, + { + "label": "Number", + "value": "number" + }, + { + "label": "Decimal Number", + "value": "decimalNumber" + }, + { + "label": "Curreny", + "value": "currency" + }, + { + "label": "Date", + "value": "date" + }, + { + "label": "Time and date", + "value": "timeAndDate" + }, + { + "label": "Boolean", + "value": "boolean" + }, + { + "label": "Phone Number", + "value": "phone" + }, + { + "label": "Single Select", + "value": "str" + }, + { + "label": "Multi Select", + "value": "multiSelect" + }, + { + "label": "Link", + "value": "link" + }, + { + "label": "Object", + "value": "object" + } + ], + "default": ["text"] + } + ] + } + ] + } + } + } +} diff --git a/src/configurations/destinations/pinterest_tag/db-config.json b/src/configurations/destinations/pinterest_tag/db-config.json index 9da53fc5c..1a85866fd 100644 --- a/src/configurations/destinations/pinterest_tag/db-config.json +++ b/src/configurations/destinations/pinterest_tag/db-config.json @@ -32,6 +32,11 @@ "cordova", "shopify" ], + "supportedMessageTypes": [ + "track", + "page", + "screen" + ], "destConfig": { "defaultConfig": [ "tagId", diff --git a/test/data/validation/destinations/facebook_pixel.json b/test/data/validation/destinations/facebook_pixel.json index eb456c86a..979070406 100644 --- a/test/data/validation/destinations/facebook_pixel.json +++ b/test/data/validation/destinations/facebook_pixel.json @@ -98,6 +98,7 @@ { "config": { "pixelId": "295131421571462", + "accessToken": "cfghfrhterg", "advancedMapping": false, "blacklistPiiProperties": [ { diff --git a/test/data/validation/destinations/matomo.json b/test/data/validation/destinations/matomo.json index 714f9c8f0..f92a521d1 100644 --- a/test/data/validation/destinations/matomo.json +++ b/test/data/validation/destinations/matomo.json @@ -2,6 +2,7 @@ { "config": { "siteId": "1", + "matomoVersion": "premise", "serverUrl": "com.yara.fw.stage", "eventsMapToGoalId": [ { @@ -30,12 +31,84 @@ "getCrossDomainLinkingUrlParameter": true, "disableBrowserFeatureDetection": true }, + "result": false, + "err": [" must have required property 'premiseUrl'", " must match \"then\" schema"] + }, + { + "config": { + "siteId": "1", + "matomoVersion": "premise", + "serverUrl": "com.yara.fw.stage", + "premiseUrl": "com.yara.fw.stage", + "eventsMapToGoalId": [ + { + "from": "Set GoalId", + "to": "123" + } + ], + "eventsToStandard": [ + { + "from": "Track Ping", + "to": "ping" + } + ], + "trackAllContentImpressions": true, + "trackVisibleContentImpressions": true, + "checkOnScroll": true, + "timeIntervalInMs": "15", + "logAllContentBlocksOnPage": true, + "enableHeartBeatTimer": true, + "activeTimeInseconds": "25", + "enableLinkTracking": true, + "disablePerformanceTracking": true, + "enableCrossDomainLinking": true, + "setCrossDomainLinkingTimeout": true, + "timeout": "10", + "getCrossDomainLinkingUrlParameter": true, + "disableBrowserFeatureDetection": true + }, + "result": true + }, + { + "config": { + "siteId": "1", + "matomoVersion": "cloud", + "serverUrl": "com.yara.fw.stage", + "premiseUrl": "com.yara.fw.stage", + "eventsMapToGoalId": [ + { + "from": "Set GoalId", + "to": "123" + } + ], + "eventsToStandard": [ + { + "from": "Track Ping", + "to": "ping" + } + ], + "trackAllContentImpressions": true, + "trackVisibleContentImpressions": true, + "checkOnScroll": true, + "timeIntervalInMs": "15", + "logAllContentBlocksOnPage": true, + "enableHeartBeatTimer": true, + "activeTimeInseconds": "25", + "enableLinkTracking": true, + "disablePerformanceTracking": true, + "enableCrossDomainLinking": true, + "setCrossDomainLinkingTimeout": true, + "timeout": "10", + "getCrossDomainLinkingUrlParameter": true, + "disableBrowserFeatureDetection": true + }, "result": true }, { "config": { "siteId": "1", "serverUrl": "com.yara.fw.stage", + "matomoVersion": "cloud", "eventsMapToGoalId": [ { "from": "Set GoalId", @@ -73,6 +146,7 @@ "config": { "siteId": "3", "serverUrl": "com.yara.fw.stage", + "matomoVersion": "cloud", "eventsMapToGoalId": [ { "from": "Set GoalId", @@ -113,6 +187,7 @@ { "config": { "siteId": "3", + "matomoVersion": "cloud", "serverUrl": "com.yara.fw.stage", "eventsMapToGoalId": [ { @@ -155,6 +230,7 @@ "config": { "serverUrl": "com.yara.fw.stage", "eventsMapToGoalId": [], + "matomoVersion": "cloud", "eventsToStandard": [], "trackAllContentImpressions": false, "trackVisibleContentImpressions": false, @@ -173,6 +249,7 @@ { "config": { "siteId": "34b", + "matomoVersion": "cloud", "serverUrl": "com.yara.fw.stage", "eventsMapToGoalId": [], "eventsToStandard": [], diff --git a/test/data/validation/destinations/ortto.json b/test/data/validation/destinations/ortto.json new file mode 100644 index 000000000..98867aa22 --- /dev/null +++ b/test/data/validation/destinations/ortto.json @@ -0,0 +1,79 @@ +[ + { + "config": { + "privateApiKey": "fsdfssdfsdf", + "instanceRegion": "other", + "orttoEventsMapping": [ + { + "rsEventName": "Purchase", + "orttoEventName": "ortto_event_1", + "eventProperties": [ + { "rudderProperty": "Revenue", "orttoProperty": "value", "type": "email" }, + { "rudderProperty": "cost", "orttoProperty": "price", "type": "text" } + ] + }, + { + "rsEventName": "Order Complete", + "orttoEventName": "ortto_event_2", + "eventProperties": [ + { "rudderProperty": "Revenue", "orttoProperty": "value", "type": "email" }, + { "rudderProperty": "cost", "orttoProperty": "price", "type": "text" } + ] + } + ], + "orttoPersonAttributes": [ + { + "rudderTraits": "trait1", + "orttoAttribute": "attri1", + "type": "text" + }, + { + "rudderTraits": "trait2", + "orttoAttribute": "attri2", + "type": "email" + } + ] + }, + "result": true + }, + { + "config": { + "privateApiKey": "", + "instanceRegion": "other", + "orttoEventsMapping": [ + { + "rsEventName": "Purchase", + "orttoEventName": "ortto_event_1", + "eventProperties": [ + { "rudderProperty": "Revenue", "orttoProperty": "value", "type": "email" }, + { "rudderProperty": "cost", "orttoProperty": "price", "type": "text" } + ] + }, + { + "rsEventName": "Order Complete", + "orttoEventName": "ortto_event_2", + "eventProperties": [ + { "rudderProperty": "Revenue", "orttoProperty": "value", "type": "email" }, + { "rudderProperty": "cost", "orttoProperty": "price", "type": "text" } + ] + } + ], + "orttoPersonAttributes": [ + { + "rudderTraits": "trait1", + "orttoAttribute": "attri1", + "type": "text" + }, + { + "rudderTraits": "trait2", + "orttoAttribute": "attri2", + "type": "email" + } + ] + }, + "result": false, + "err": [ + "privateApiKey must match pattern \"(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,300})$\"" + ] + } +]