From 8c23561a90d6b9819af783ad1081103df775a613 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Tue, 17 Oct 2023 18:13:11 +0530 Subject: [PATCH 01/18] feat: onboard facebook conversions destination (#982) --- .../facebook_conversions/db-config.json | 47 ++ .../facebook_conversions/metadata.json | 25 + .../facebook_conversions/schema.json | 168 +++++++ .../facebook_conversions/ui-config.json | 467 ++++++++++++++++++ .../destinations/facebook_conversions.json | 226 +++++++++ 5 files changed, 933 insertions(+) create mode 100644 src/configurations/destinations/facebook_conversions/db-config.json create mode 100644 src/configurations/destinations/facebook_conversions/metadata.json create mode 100644 src/configurations/destinations/facebook_conversions/schema.json create mode 100644 src/configurations/destinations/facebook_conversions/ui-config.json create mode 100644 test/data/validation/destinations/facebook_conversions.json diff --git a/src/configurations/destinations/facebook_conversions/db-config.json b/src/configurations/destinations/facebook_conversions/db-config.json new file mode 100644 index 000000000..acfc4f763 --- /dev/null +++ b/src/configurations/destinations/facebook_conversions/db-config.json @@ -0,0 +1,47 @@ +{ + "name": "FACEBOOK_CONVERSIONS", + "displayName": "Facebook Conversions", + "config": { + "transformAt": "processor", + "transformAtV1": "processor", + "saveDestinationResponse": true, + "includeKeys": [], + "excludeKeys": [], + "supportedSourceTypes": [ + "android", + "ios", + "web", + "unity", + "amp", + "cloud", + "warehouse", + "reactnative", + "flutter", + "cordova", + "shopify" + ], + "supportedMessageTypes": ["identify", "page", "screen", "track"], + "supportedConnectionModes": {}, + "destConfig": { + "defaultConfig": [ + "blacklistPiiProperties", + "categoryToContent", + "datasetId", + "eventsToEvents", + "whitelistPiiProperties", + "limitedDataUSage", + "actionSource", + "accessToken", + "testDestination", + "testEventCode", + "blacklistedEvents", + "whitelistedEvents", + "eventFilteringOption", + "removeExternalId", + "oneTrustCookieCategories", + "ketchConsentPurposes" + ] + }, + "secretKeys": ["accessToken"] + } +} diff --git a/src/configurations/destinations/facebook_conversions/metadata.json b/src/configurations/destinations/facebook_conversions/metadata.json new file mode 100644 index 000000000..59c4d726b --- /dev/null +++ b/src/configurations/destinations/facebook_conversions/metadata.json @@ -0,0 +1,25 @@ +{ + "metadata": { + "primaryCategory": "", + "secondaryCategory": [], + "docLink": "", + "logoPath": "", + "connectionMode": { + "cloud-mode": true, + "device-mode": ["web", "android"] + }, + "supportedMethods": { + "cloud-mode": ["track", "identify"], + "device-mode": { + "web": ["track", "identify"] + } + }, + "releaseStatus": "beta", + "sourceCode": { + "android": { + "github": "", + "version": "v1.0.0" + } + } + } +} diff --git a/src/configurations/destinations/facebook_conversions/schema.json b/src/configurations/destinations/facebook_conversions/schema.json new file mode 100644 index 000000000..6f70043cf --- /dev/null +++ b/src/configurations/destinations/facebook_conversions/schema.json @@ -0,0 +1,168 @@ +{ + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "required": ["datasetId", "accessToken"], + "type": "object", + "properties": { + "datasetId": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "accessToken": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,500})$" + }, + "categoryToContent": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "to": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "eventsToEvents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "to": { + "type": "string", + "enum": [ + "ViewContent", + "Search", + "AddToCart", + "AddToWishlist", + "InitiateCheckout", + "AddPaymentInfo", + "Purchase", + "PageView", + "Lead", + "CompleteRegistration", + "Contact", + "CustomizeProduct", + "Donate", + "FindLocation", + "Schedule", + "StartTrial", + "SubmitApplication", + "Subscribe", + "" + ] + } + } + } + }, + "actionSource": { + "type": "string", + "enum": [ + "website", + "email", + "app", + "phone_call", + "chat", + "physical_store", + "system_generated", + "other" + ], + "default": "website" + }, + "blacklistPiiProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "blacklistPiiProperties": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "blacklistPiiHash": { "type": "boolean" } + } + } + }, + "whitelistPiiProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "whitelistPiiProperties": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "limitedDataUSage": { "type": "boolean", "default": false }, + "testDestination": { "type": "boolean", "default": false }, + "testEventCode": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "removeExternalId": { "type": "boolean", "default": false }, + "eventFilteringOption": { + "type": "string", + "enum": ["disable", "whitelistedEvents", "blacklistedEvents"], + "default": "disable" + }, + "whitelistedEvents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "eventName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "blacklistedEvents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "eventName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "oneTrustCookieCategories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "oneTrustCookieCategory": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "ketchConsentPurposes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "purpose": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + } + } + } +} diff --git a/src/configurations/destinations/facebook_conversions/ui-config.json b/src/configurations/destinations/facebook_conversions/ui-config.json new file mode 100644 index 000000000..8d670ef05 --- /dev/null +++ b/src/configurations/destinations/facebook_conversions/ui-config.json @@ -0,0 +1,467 @@ +{ + "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": "Dataset ID", + "note": "Your Dataset ID, from the snippet created on the Facebook Dataset creation page.", + "configKey": "datasetId", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Dataset 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,500})$", + "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": [] + } + ] + } + ] + }, + { + "title": "Configuration settings", + "note": "Manage the settings for your \ndestination", + "sections": [ + { + "groups": [ + { + "title": "Event settings", + "note": "Configure a few advanced event settings here", + "icon": "settings", + "fields": [ + { + "type": "singleSelect", + "label": "Action Source", + "note": "Choose the action_source value you want to set before sending to facebook", + "configKey": "actionSource", + "options": [ + { + "label": "website", + "value": "website" + }, + { + "label": "email", + "value": "email" + }, + { + "label": "app", + "value": "app" + }, + { + "label": "phone_call", + "value": "phone_call" + }, + { + "label": "chat", + "value": "chat" + }, + { + "label": "physical_store", + "value": "physical_store" + }, + { + "label": "system_generated", + "value": "system_generated" + }, + { + "label": "other", + "value": "other" + } + ], + "default": "website" + } + ] + } + ] + }, + { + "groups": [ + { + "title": "Destination settings", + "note": "Configure advanced destination-specific settings heree", + "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": [] + }, + "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": [] + } + ] + } + ] + } + } + } +} diff --git a/test/data/validation/destinations/facebook_conversions.json b/test/data/validation/destinations/facebook_conversions.json new file mode 100644 index 000000000..d9a4677e5 --- /dev/null +++ b/test/data/validation/destinations/facebook_conversions.json @@ -0,0 +1,226 @@ +[ + { + "config": { + "datasetId": "471828257250906", + "accessToken": "EABAKGVmm4FjBAKAHtWZB4er7fVTjFdJD33daH3ZB340qWk7Nv9MwZCOE0f27EKZA1LQxkQD8hQy1ZBb3SkIgeLcqZAbVtVXbpumoOtpqkP9fRqM0bZCeozeWkH3Y4TZCUpUeUsgKwGDqZB9QrrZCGwRcF9YZAvPDjZAT0YJjWNWQCKhnMQ2OEnrjtJmJgsWDicELxEAZD", + "limitedDataUSage": false, + "testDestination": false, + "removeExternalId": false, + "testEventCode": "", + "eventFilteringOption": "whitelistedEvents", + "eventsToEvents": [ + { + "from": "named", + "to": "ViewContent" + } + ], + "blacklistPiiProperties": [ + { + "blacklistPiiProperties": "", + "blacklistPiiHash": true + } + ], + "whitelistPiiProperties": [ + { + "whitelistPiiProperties": "passed" + } + ], + "whitelistedEvents": [ + { + "eventName": "login" + } + ], + "blacklistedEvents": [ + { + "eventName": "adblocker_disabled" + } + ], + "categoryToContent": [ + { + "from": "app_signup", + "to": "completed" + } + ] + }, + "result": true + }, + { + "config": { + "accessToken": "EABAKGVmm4FjB7fVTjFdJD33daH3ZB340qWk7Nv9MwZCOE0f27EKZA1LQxkQD8hQy1ZBb3SkIgeLcqZAbVtVXbpumoOtpqkP9fRqM0bZCeozeWkH3Y4TZCUpUeUsgKwGDqZB9QrrZCGwRcF9YZAvPDjZAT0YJjWNWQCKhnMQ2OEnrjtJmJgsWDicELxEAZD", + "removeExternalId": true, + "limitedDataUSage": true, + "testDestination": false, + "testEventCode": "", + "eventFilteringOption": "whitelistedEvents", + "eventsToEvents": [ + { + "from": "name", + "to": "ViewContent" + } + ], + "blacklistPiiProperties": [ + { + "blacklistPiiProperties": "", + "blacklistPiiHash": true + } + ], + "whitelistPiiProperties": [ + { + "whitelistPiiProperties": "passed" + } + ], + "whitelistedEvents": [ + { + "eventName": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "" + } + ], + "categoryToContent": [ + { + "from": "app_signup", + "to": "completed" + } + ] + }, + "result": false, + "err": [" must have required property 'datasetId'"] + }, + { + "config": { + "datasetId": "295131421571462", + "blacklistPiiProperties": [ + { + "blacklistPiiProperties": "", + "blacklistPiiHash": false + } + ], + "eventsToEvents": [ + { + "from": "PageView", + "to": "ViewContent" + } + ], + "useNativeSDK": { + "web": true + } + }, + "result": false, + "err": [" must have required property 'accessToken'"] + }, + { + "config": { + "datasetId": "457112234567291", + "accessToken": "EAAEOkKbzt8cBAJFgWYuG6bE5ycjssu71bCg4F4wzPh682n4YEBOZAmjbcdlru53CIvXt1MJb9SpliIGbauYrjxzyGtzBmyVenyyJkZCHX2KtoMVn7njwFNk3jtEUDYOS49OOE5YSbZBUznGlICSfZAAjBUyQ8cXmu0LtfXpXsA6gqjjqd1vXHLv8ycGY2CIZS", + "limitedDataUSage": false, + "testDestination": false, + "testEventCode": "TEST83176", + "eventFilteringOption": "disable", + "eventsToEvents": [ + { + "from": "app terminated", + "to": "ViewContent" + }, + { + "from": "app installed", + "to": "Search" + } + ], + "useNativeSDK": { + "web": true + } + }, + "result": true + }, + { + "config": { + "datasetId": "457112234567291", + "accessToken": "EAAEOkKbzt8cBAJFgWYuG6bE5ycjssu71bCg4F4wzPh682n4YEBOZAmjbcdlru53CIvXt1MJb9SpliIGbauYrjxzyGtzBmyVenyyJkZCHX2KtoMVn7njwFNk3jtEUDYOS49OOE5YSbZBUznGlICSfZAAjBUyQ8cXmu0LtfXpXsA6gqjjqd1vXHLv8ycGY2CIZS", + "limitedDataUSage": true, + "testDestination": true, + "testEventCode": "TEST1010", + "eventFilteringOption": "disable", + "eventsToEvents": [ + { + "from": "app terminated", + "to": "Search" + } + ], + "useNativeSDK": { + "web": true + } + }, + "result": true + }, + { + "config": { + "datasetId": "457112234567291", + "accessToken": "EAAEOkKbzt8cBAJFgWYuG6bE5ycjssu71bCg4F4wzPh682n4YEBOZAmjbcdlru53CIvXt1MJb9SpliIGbauYrjxzyGtzBmyVenyyJkZCHX2KtoMVn7njwFNk3jtEUDYOS49OOE5YSbZBUznGlICSfZAAjBUyQ8cXmu0LtfXpXsA6gqjjqd1vXHLv8ycGY2CIZS", + "limitedDataUSage": false, + "testDestination": true, + "testEventCode": "EAAEOkKbzt8cBAJFgWYuG6bE5ycjssu71bCg4F4wzPh682n4YEBOZAmjbcdlru53CIvXt1MJb9SpliIGbauYrjxzyGtzBmyVenyyJkZCHX2KtoMVn7njwFNk3jtEUDYOS49OOE5YSbZBUznGlICSfZAAjBUyQ8cXmu0LtfXpXsA6gqjjqd1vXHLv8ycGY2CIZS", + "eventFilteringOption": "disable", + "eventsToEvents": [ + { + "from": "app terminated", + "to": "Search" + } + ], + "useNativeSDK": { + "web": true + } + }, + "result": false, + "err": [ + "testEventCode must match pattern \"(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$\"" + ] + }, + { + "config": { + "datasetId": "471828257250906", + "accessToken": "EABAKGVmm4FjBAKAHtWZB4er7fVTjFdJD33daH3ZB340qWk7Nv9MwZCOE0f27EKZA1LQxkQD8hQy1ZBb3SkIgeLcqZAbVtVXbpumoOtpqkP9fRqM0bZCeozeWkH3Y4TZCUpUeUsgKwGDqZB9QrrZCGwRcF9YZAvPDjZAT0YJjWNWQCKhnMQ2OEnrjtJmJgsWDicELxEAZD", + "limitedDataUSage": false, + "testDestination": false, + "testEventCode": "", + "eventFilteringOption": "allowedEvents", + "eventsToEvents": [ + { + "from": "named", + "to": "Search" + } + ], + "blacklistPiiProperties": [ + { + "blacklistPiiProperties": "", + "blacklistPiiHash": true + } + ], + "whitelistPiiProperties": [ + { + "whitelistPiiProperties": "passed" + } + ], + "whitelistedEvents": [ + { + "eventName": "login" + } + ], + "blacklistedEvents": [ + { + "eventName": "adblocker_disabled" + } + ], + "categoryToContent": [ + { + "from": "app_signup", + "to": "completed" + } + ] + }, + "result": false, + "err": ["eventFilteringOption must be equal to one of the allowed values"] + } +] From cc35f7aa541ecad680c94d7607fb172cc33c8dc4 Mon Sep 17 00:00:00 2001 From: Mihir Bhalala <77438541+mihir-4116@users.noreply.github.com> Date: Wed, 18 Oct 2023 16:11:58 +0530 Subject: [PATCH 02/18] chore: resolve pr conflicts (#993) Co-authored-by: GitHub Actions Co-authored-by: Sandeep Digumarty Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> --- .../destinations/facebook_conversions/ui-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configurations/destinations/facebook_conversions/ui-config.json b/src/configurations/destinations/facebook_conversions/ui-config.json index 8d670ef05..474985065 100644 --- a/src/configurations/destinations/facebook_conversions/ui-config.json +++ b/src/configurations/destinations/facebook_conversions/ui-config.json @@ -67,7 +67,7 @@ { "type": "singleSelect", "label": "Action Source", - "note": "Choose the action_source value you want to set before sending to facebook", + "note": "Choose the fallback action_source value you want to set if action_source is not found in event properties", "configKey": "actionSource", "options": [ { From 1e0acb47a5b707832cbdb8b9f4f0d66fae69d813 Mon Sep 17 00:00:00 2001 From: ashishRudder <74043614+ashishRudder@users.noreply.github.com> Date: Wed, 18 Oct 2023 18:46:55 +0530 Subject: [PATCH 03/18] chore: enable audience for trino rETL (#995) --- src/configurations/sources/trino/db-config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/configurations/sources/trino/db-config.json b/src/configurations/sources/trino/db-config.json index 5c0251b88..de11932b7 100644 --- a/src/configurations/sources/trino/db-config.json +++ b/src/configurations/sources/trino/db-config.json @@ -5,11 +5,11 @@ "options": { "hidden": true, "syncBehaviours": [ - "upsert", - "mirror" + "upsert", + "mirror" ], "isSqlModelSupported": true, - "isAudienceSupported": false + "isAudienceSupported": true }, "type": "warehouse" } \ No newline at end of file From 5d1f258712e822d31806b21ed731b07d99cb8c1b Mon Sep 17 00:00:00 2001 From: Mihir Bhalala <77438541+mihir-4116@users.noreply.github.com> Date: Wed, 18 Oct 2023 18:56:31 +0530 Subject: [PATCH 04/18] chore: introduced throttling for active campaign destination (#988) --- .../destinations/active_campaign/db-config.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/configurations/destinations/active_campaign/db-config.json b/src/configurations/destinations/active_campaign/db-config.json index ae3770d18..12baa76fb 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": [ From 31ef939f05f1ff385b62ea858c334544ece395a3 Mon Sep 17 00:00:00 2001 From: Mihir Bhalala <77438541+mihir-4116@users.noreply.github.com> Date: Wed, 18 Oct 2023 19:02:13 +0530 Subject: [PATCH 05/18] chore: add mihir to release workflow (#996) --- .github/workflows/create-hotfix-branch.yml | 2 +- .github/workflows/draft-new-release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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..f332b75e7 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.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: Checkout uses: actions/checkout@v3.5.0 From de2cc4e1e66c74de54aebe01267ebc3fc9714f28 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Fri, 20 Oct 2023 16:21:06 +0530 Subject: [PATCH 06/18] fix: change value of a config in ui (#1003) --- src/configurations/destinations/mp/ui-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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" } From 1ee3898ff5dcad98b1b8b843c5ee1bb665762565 Mon Sep 17 00:00:00 2001 From: Mihir Bhalala <77438541+mihir-4116@users.noreply.github.com> Date: Wed, 25 Oct 2023 14:11:09 +0530 Subject: [PATCH 07/18] chore: added supportedMessageTypes key for pinterest_tag (#1006) --- src/configurations/destinations/pinterest_tag/db-config.json | 5 +++++ 1 file changed, 5 insertions(+) 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", From f2d149d707f5cdc234009e5f512f073da8f9f99b Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:18:43 +0530 Subject: [PATCH 08/18] feat: matomo: support premise version (#989) --- .../destinations/matomo/db-config.json | 4 + .../destinations/matomo/schema.json | 127 +++++++++++++++--- .../destinations/matomo/ui-config.json | 44 ++++++ test/data/validation/destinations/matomo.json | 77 +++++++++++ 4 files changed, 234 insertions(+), 18 deletions(-) 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/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": [], From 09ef62eb09c6550f3d6a9428b77edca45e0b27d4 Mon Sep 17 00:00:00 2001 From: Ujjwal Abhishek <63387036+ujjwal-ab@users.noreply.github.com> Date: Mon, 30 Oct 2023 11:22:00 +0530 Subject: [PATCH 09/18] feat: onboard ortto destination (#979) --- .../destinations/ortto/db-config.json | 52 +++ .../destinations/ortto/schema.json | 129 +++++++ .../destinations/ortto/ui-config.json | 346 ++++++++++++++++++ test/data/validation/destinations/ortto.json | 79 ++++ 4 files changed, 606 insertions(+) create mode 100644 src/configurations/destinations/ortto/db-config.json create mode 100644 src/configurations/destinations/ortto/schema.json create mode 100644 src/configurations/destinations/ortto/ui-config.json create mode 100644 test/data/validation/destinations/ortto.json 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..3681df7ff --- /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 HubSpot Custom Behavioral 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/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})$\"" + ] + } +] From f6ff024fcac22a88bb8b71b539b40b0bf19a6842 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Mon, 30 Oct 2023 12:41:46 +0530 Subject: [PATCH 10/18] feat(facebook_pixel): move facebook pixel to new UI from-builder (#1004) --- .../facebook_pixel/db-config.json | 5 +- .../destinations/facebook_pixel/schema.json | 8 +- .../facebook_pixel/ui-config.json | 842 +++++++++++------- .../destinations/facebook_pixel.json | 1 + 4 files changed, 510 insertions(+), 346 deletions(-) diff --git a/src/configurations/destinations/facebook_pixel/db-config.json b/src/configurations/destinations/facebook_pixel/db-config.json index 0f29c07a2..8f257686f 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": ["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/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": [ { From 7e8e3d16da2cec375de144a99203358a377a31f5 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Mon, 30 Oct 2023 12:43:32 +0530 Subject: [PATCH 11/18] feat(fb): move fb app events to new UI form-builder (#1007) --- .../destinations/fb/db-config.json | 8 +- .../destinations/fb/ui-config.json | 360 ++++++++++-------- 2 files changed, 215 insertions(+), 153 deletions(-) diff --git a/src/configurations/destinations/fb/db-config.json b/src/configurations/destinations/fb/db-config.json index 970e3beb4..ec681ea23 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": ["device"], + "ios": ["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": [] } - ] + } } From b3a1567f27a78d1088758f91ad8cfa786bd7e049 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Mon, 30 Oct 2023 12:46:26 +0530 Subject: [PATCH 12/18] feat: deprecate GA and Facebook Offline Conversions destinations using options flag (#1016) --- .../destinations/facebook_offline_conversions/db-config.json | 4 ++++ src/configurations/destinations/ga/db-config.json | 4 ++++ 2 files changed, 8 insertions(+) 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/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" } } From a031d7001121da833d1159b5c16587cead5467ae Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:33:19 +0530 Subject: [PATCH 13/18] chore: add yashasvibajpai and sanpj2292 to release workflow actors (#1027) --- .github/workflows/draft-new-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/draft-new-release.yml b/.github/workflows/draft-new-release.yml index f332b75e7..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.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') + 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 From 34dd1eee183e4c7057f758dbff29e2b48426c3f3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 30 Oct 2023 09:07:02 +0000 Subject: [PATCH 14/18] chore(release): 1.57.0 --- CHANGELOG.md | 17 +++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d88ebeade..e812b7d15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,23 @@ 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)) + + +### 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, From a2b74388fb7b349381df1a9b52ef9ba53e0bdcee Mon Sep 17 00:00:00 2001 From: Ujjwal Abhishek <63387036+ujjwal-ab@users.noreply.github.com> Date: Tue, 31 Oct 2023 11:38:27 +0530 Subject: [PATCH 15/18] feat: refactor supportedMessageTypes and supportedConnectionModes (#1026) --- .../active_campaign/db-config.json | 17 +++++++- .../destinations/adj/db-config.json | 39 +++++++++++-------- .../adobe_analytics/db-config.json | 16 +++++++- .../destinations/af/db-config.json | 21 +++++++++- 4 files changed, 73 insertions(+), 20 deletions(-) diff --git a/src/configurations/destinations/active_campaign/db-config.json b/src/configurations/destinations/active_campaign/db-config.json index 12baa76fb..f5743097d 100644 --- a/src/configurations/destinations/active_campaign/db-config.json +++ b/src/configurations/destinations/active_campaign/db-config.json @@ -28,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", From 11171e5c4b5e435ca11a2a4e3e28aef6751b483d Mon Sep 17 00:00:00 2001 From: Ujjwal Abhishek <63387036+ujjwal-ab@users.noreply.github.com> Date: Tue, 31 Oct 2023 11:49:46 +0530 Subject: [PATCH 16/18] fix: replace hubspot with ortto in title (typo) (#1031) --- src/configurations/destinations/ortto/ui-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configurations/destinations/ortto/ui-config.json b/src/configurations/destinations/ortto/ui-config.json index 3681df7ff..57b381b97 100644 --- a/src/configurations/destinations/ortto/ui-config.json +++ b/src/configurations/destinations/ortto/ui-config.json @@ -144,7 +144,7 @@ "fields": [ { "type": "dynamicCustomForm", - "label": "Map RudderStack event name to HubSpot Custom Behavioral event name", + "label": "Map RudderStack event name to Ortto Custom event name", "configKey": "orttoEventsMapping", "rowFields": [ { From e40bb804f4369a81eb6c2a62ebc2ad578ad9abd6 Mon Sep 17 00:00:00 2001 From: Ujjwal Abhishek <63387036+ujjwal-ab@users.noreply.github.com> Date: Tue, 31 Oct 2023 12:04:24 +0530 Subject: [PATCH 17/18] chore: add supportedMessageType PR to changelog (#1033) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e812b7d15..8f5151e5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ All notable changes to this project will be documented in this file. See [standa * 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 From 9f9beb86f43547556b59f73ef303af6e630b79c1 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Tue, 31 Oct 2023 12:24:28 +0530 Subject: [PATCH 18/18] feat: revert device only change and add cloud support back (#1034) --- src/configurations/destinations/facebook_pixel/db-config.json | 2 +- src/configurations/destinations/fb/db-config.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/configurations/destinations/facebook_pixel/db-config.json b/src/configurations/destinations/facebook_pixel/db-config.json index 8f257686f..7be19f1fa 100644 --- a/src/configurations/destinations/facebook_pixel/db-config.json +++ b/src/configurations/destinations/facebook_pixel/db-config.json @@ -37,7 +37,7 @@ ], "supportedMessageTypes": ["identify", "page", "screen", "track"], "supportedConnectionModes": { - "web": ["device"] + "web": ["cloud", "device"] }, "destConfig": { "defaultConfig": [ diff --git a/src/configurations/destinations/fb/db-config.json b/src/configurations/destinations/fb/db-config.json index ec681ea23..f1cb85148 100644 --- a/src/configurations/destinations/fb/db-config.json +++ b/src/configurations/destinations/fb/db-config.json @@ -30,8 +30,8 @@ ], "supportedMessageTypes": ["page", "screen", "track"], "supportedConnectionModes": { - "android": ["device"], - "ios": ["device"] + "android": ["cloud", "device"], + "ios": ["cloud", "device"] }, "destConfig": { "defaultConfig": [