diff --git a/CHANGELOG.md b/CHANGELOG.md index 24325447e..991e2d9e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.51.0](https://github.com/rudderlabs/rudder-config-schema/compare/v1.50.0...v1.51.0) (2023-09-20) + + +### Features + +* **appcues:** added proxyUrl support ([f870b4a](https://github.com/rudderlabs/rudder-config-schema/commit/f870b4aed86ba2dcc77fc58f95f8401e273eff92)) +* **INT-339:** enable mirror mode for marketo static list ([#843](https://github.com/rudderlabs/rudder-config-schema/issues/843)) ([88841c2](https://github.com/rudderlabs/rudder-config-schema/commit/88841c2d4b9081f263ceace003499f7ee873cfe6)) +* **INT-523:** update customerIo UI config to convert datacenter field t dropdown ([#880](https://github.com/rudderlabs/rudder-config-schema/issues/880)) ([c696c2c](https://github.com/rudderlabs/rudder-config-schema/commit/c696c2c1da6ae8450562565837cf11f60b9055ea)) +* **iterable:** move to new ui ([54ac1fe](https://github.com/rudderlabs/rudder-config-schema/commit/54ac1fef3a868c491bcee9deff4b735e6d14edaa)) +* onboard cloud mode support for fullstory on new UI ([#875](https://github.com/rudderlabs/rudder-config-schema/issues/875)) ([33c3d5f](https://github.com/rudderlabs/rudder-config-schema/commit/33c3d5f235cb3b26ed0b4acc5257bb1bd3f55559)) +* onboard launchdarkly audience ([#877](https://github.com/rudderlabs/rudder-config-schema/issues/877)) ([a9deca0](https://github.com/rudderlabs/rudder-config-schema/commit/a9deca09e4df5a3517555e124cddb5ed5febd633)) + + +### Bug Fixes + +* fb ads account validation (ETL-114) ([#892](https://github.com/rudderlabs/rudder-config-schema/issues/892)) ([3366668](https://github.com/rudderlabs/rudder-config-schema/commit/33666685d667eec4ec72f5043c60e2249940cca0)) +* **INT-568:** slack send event to event specific channel using webhooks ([#895](https://github.com/rudderlabs/rudder-config-schema/issues/895)) ([70a17f6](https://github.com/rudderlabs/rudder-config-schema/commit/70a17f663887377f4e4625091585396ec1521820)) +* **iterable:** schema issues ([e902815](https://github.com/rudderlabs/rudder-config-schema/commit/e902815a7d665445b35394ff8be9f99e10efa1a0)) + ## [1.50.0](https://github.com/rudderlabs/rudder-config-schema/compare/v1.49.2...v1.50.0) (2023-09-19) diff --git a/package-lock.json b/package-lock.json index 359f90329..504323931 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-config-schema", - "version": "1.50.0", + "version": "1.51.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-config-schema", - "version": "1.50.0", + "version": "1.51.0", "license": "MIT", "dependencies": { "ajv": "^8.12.0", diff --git a/package.json b/package.json index bf5cd6942..2bc011818 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-config-schema", - "version": "1.50.0", + "version": "1.51.0", "description": "", "main": "src/index.ts", "private": true, diff --git a/src/configurations/destinations/appcues/db-config.json b/src/configurations/destinations/appcues/db-config.json index bafa4f632..56868175d 100644 --- a/src/configurations/destinations/appcues/db-config.json +++ b/src/configurations/destinations/appcues/db-config.json @@ -48,4 +48,4 @@ }, "secretKeys": [] } -} \ No newline at end of file +} diff --git a/src/configurations/destinations/customerio/db-config.json b/src/configurations/destinations/customerio/db-config.json index b1ae5e6bf..47207c3c5 100644 --- a/src/configurations/destinations/customerio/db-config.json +++ b/src/configurations/destinations/customerio/db-config.json @@ -10,7 +10,7 @@ "includeKeys": [ "apiKey", "siteID", - "datacenterEU", + "datacenter", "blacklistedEvents", "whitelistedEvents", "oneTrustCookieCategories", @@ -36,7 +36,7 @@ "defaultConfig": [ "apiKey", "siteID", - "datacenterEU", + "datacenter", "deviceTokenEventName", "blacklistedEvents", "whitelistedEvents", diff --git a/src/configurations/destinations/customerio/schema.json b/src/configurations/destinations/customerio/schema.json index c0a5a2883..b158475ff 100644 --- a/src/configurations/destinations/customerio/schema.json +++ b/src/configurations/destinations/customerio/schema.json @@ -1,10 +1,7 @@ { "configSchema": { "$schema": "http://json-schema.org/draft-07/schema#", - "required": [ - "siteID", - "apiKey" - ], + "required": ["siteID", "apiKey"], "type": "object", "properties": { "siteID": { @@ -19,9 +16,10 @@ "type": "string", "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" }, - "datacenterEU": { - "type": "boolean", - "default": false + "datacenter": { + "type": "string", + "enum": ["US", "EU"], + "default": "US" }, "sendPageNameInSDK": { "type": "object", @@ -41,11 +39,7 @@ }, "eventFilteringOption": { "type": "string", - "enum": [ - "disable", - "whitelistedEvents", - "blacklistedEvents" - ], + "enum": ["disable", "whitelistedEvents", "blacklistedEvents"], "default": "disable" }, "whitelistedEvents": { @@ -86,4 +80,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/configurations/destinations/customerio/ui-config.json b/src/configurations/destinations/customerio/ui-config.json index 58ecda6b1..82c99cb8b 100644 --- a/src/configurations/destinations/customerio/ui-config.json +++ b/src/configurations/destinations/customerio/ui-config.json @@ -28,21 +28,35 @@ "regex": "^(.{0,100})$", "regexErrorMessage": "Invalid Event Name", "placeholder": "e.g: device_token_registered", - "footerNote": "This event should be fired just after setting device token to enable sending device tokens to CustomerIO immediately." + "footerNote": "This event should be fired just after setting device token to enable sending device tokens to Customer.io immediately." }, { - "type": "checkbox", - "label": "Account based in the EU data center?", - "value": "datacenterEU", - "default": false, - "footerNote": "Turn it ON if you want to send data to EU servers" + "type": "singleSelect", + "label": "Data Center", + "value": "datacenter", + "mode": "single", + "options": [ + { + "name": "US", + "value": "US" + }, + { + "name": "EU", + "value": "EU" + } + ], + "defaultOption": { + "name": "US", + "value": "US" + }, + "footerNote": "Select your Customer.io Data Center" }, { "type": "checkbox", "label": "Send Page Name in SDK mode", "value": "sendPageNameInSDK", "default": true, - "footerNote": "Turn it OFF if you don't want to send the page name when connected in device mode. If OFF page name will automatically be captured by CustomerIo." + "footerNote": "Turn it OFF if you don't want to send the page name when connected in device mode. If OFF page name will automatically be captured by Customer.io." } ] }, @@ -132,4 +146,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/configurations/destinations/fullstory/db-config.json b/src/configurations/destinations/fullstory/db-config.json index 023701b04..610d9abac 100644 --- a/src/configurations/destinations/fullstory/db-config.json +++ b/src/configurations/destinations/fullstory/db-config.json @@ -2,6 +2,7 @@ "name": "FULLSTORY", "displayName": "Fullstory", "config": { + "cdkV2Enabled": true, "transformAt": "processor", "transformAtV1": "processor", "saveDestinationResponse": true, @@ -15,31 +16,39 @@ "eventFilteringOption" ], "excludeKeys": [], + "supportedMessageTypes": ["track", "identify", "page", "screen"], "supportedSourceTypes": [ "web", "android", - "ios" + "ios", + "unity", + "amp", + "cloud", + "warehouse", + "reactnative", + "flutter", + "cordova", + "shopify" ], + "supportedConnectionModes": { + "android": ["cloud", "device"], + "ios": ["cloud", "device"], + "web": ["cloud", "device"] + }, "destConfig": { "defaultConfig": [ + "apiKey", "fs_org", - "fs_host", - "fs_debug_mode", "blacklistedEvents", "whitelistedEvents", - "eventFilteringOption", - "oneTrustCookieCategories" - ], - "web": [ - "useNativeSDK" - ], - "android": [ - "useNativeSDK" + "oneTrustCookieCategories", + "eventFilteringOption" ], - "ios": [ - "useNativeSDK" - ] + "web": ["useNativeSDK", "connectionMode", "fs_debug_mode", "fs_host"], + "android": ["useNativeSDK", "connectionMode"], + "ios": ["useNativeSDK", "connectionMode"] }, - "secretKeys": [] - } -} \ No newline at end of file + "secretKeys": ["apiKey"] + }, + "options": { "isBeta": true } +} diff --git a/src/configurations/destinations/fullstory/schema.json b/src/configurations/destinations/fullstory/schema.json index fddffa4cc..47de3751d 100644 --- a/src/configurations/destinations/fullstory/schema.json +++ b/src/configurations/destinations/fullstory/schema.json @@ -1,3 +1,148 @@ { - "configSchema": null + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "required": [], + "type": "object", + "properties": { + "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})$" + } + } + } + }, + "fs_host": { + "type": "object", + "properties": { + "web": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$" + } + } + }, + "fs_debug_mode": { "type": "object", "properties": { "web": { "type": "boolean" } } }, + "useNativeSDK": { + "type": "object", + "properties": { + "web": { "type": "boolean" }, + "android": { "type": "boolean" }, + "ios": { "type": "boolean" } + } + }, + "connectionMode": { + "type": "object", + "properties": { + "web": { "type": "string", "enum": ["cloud", "device"] }, + "android": { "type": "string", "enum": ["cloud", "device"] }, + "ios": { "type": "string", "enum": ["cloud", "device"] } + } + } + }, + "allOf": [ + { + "if": { + "anyOf": [ + { + "properties": { + "connectionMode": { + "type": "object", + "properties": { + "web": { "type": "string", "enum": ["cloud"] } + }, + "required": ["web"] + } + } + }, + { + "properties": { + "connectionMode": { + "type": "object", + "properties": { + "android": { "type": "string", "enum": ["cloud"] } + }, + "required": ["android"] + } + } + }, + { + "properties": { + "connectionMode": { + "type": "object", + "properties": { + "ios": { "type": "string", "enum": ["cloud"] } + }, + "required": ["ios"] + } + } + } + ] + }, + "then": { + "properties": { + "apiKey": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,200})$" + } + }, + "required": ["apiKey"] + } + }, + { + "if": { + "properties": { + "connectionMode": { + "type": "object", + "properties": { + "web": { "type": "string", "enum": ["device"] } + }, + "required": ["web"] + } + } + }, + "then": { + "properties": { + "fs_org": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + }, + "required": ["fs_org"] + } + } + ] + } } diff --git a/src/configurations/destinations/fullstory/ui-config.json b/src/configurations/destinations/fullstory/ui-config.json index 10cd1de58..f3e99f77f 100644 --- a/src/configurations/destinations/fullstory/ui-config.json +++ b/src/configurations/destinations/fullstory/ui-config.json @@ -1,118 +1,231 @@ { - "uiConfig": [ - { - "title": "Connection Settings", + "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": "API Key", + "note": "The API key must have Admin or Architect level permissions to view or delete data. Required for cloud mode.", + "configKey": "apiKey", + "regex": "^(.{0,200})$", + "regexErrorMessage": "Invalid Api Key", + "placeholder": "e.g: na1.XQdLJo0...", + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + } + }, + { + "type": "textInput", + "label": "FS ORG", + "note": "Required for web device mode,", + "configKey": "fs_org", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid FS ORG", + "placeholder": "e.g: dd412940", + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.webDevice", + "value": 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 destination", + "sections": [ + { + "title": "Destination 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)", + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.webDevice", + "value": true + }, + { + "configKey": "connectionModes.mobileDevice", + "value": true + } + ], + "condition": "or" + }, + "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": "" + } + ] + } + ] + } + ] + } + ] + } + ], + "sdkTemplate": { + "title": "SDK settings", + "note": "not visible in the ui", "fields": [ { "type": "textInput", - "label": "FS ORG", - "value": "fs_org", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid FS ORG", - "required": true, - "placeholder": "e.g: dd412940" - }, - { - "type": "textInput", - "label": "FullStory Host", - "footerNote":"Use this field if you have a custom FullStory host. By default it is fullstory.com", - "value": "fs_host", - "regex": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$", + "note": "FullStory Host", + "footerNote": "Use this field if you have a custom FullStory host. By default it is fullstory.com", + "configKey": "fs_host", + "regex": "^$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$", "regexErrorMessage": "Invalid FS HOST", - "placeholder": "e.g: fullstory.com" + "placeholder": "e.g: fullstory.com", + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.webDevice", + "value": true + } + ] + } }, { "type": "checkbox", - "label": "FS debug mode", - "value": "fs_debug_mode", - "default": true - } - ] - }, - { - "title": "Native SDK", - "fields": [ - { - "type": "defaultCheckbox", - "label": "Use device-mode to send events", - "value": "useNativeSDK", - "default": true - } - ] - }, - { - "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" + "note": "FS debug mode", + "configKey": "fs_debug_mode", + "default": true, + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.webDevice", + "value": true + } + ] } - }, - { - "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 - } - ] } ] } - ] -} \ No newline at end of file + } +} diff --git a/src/configurations/destinations/iterable/db-config.json b/src/configurations/destinations/iterable/db-config.json index e5695149d..4ececab61 100644 --- a/src/configurations/destinations/iterable/db-config.json +++ b/src/configurations/destinations/iterable/db-config.json @@ -29,9 +29,7 @@ "iconPath", "isRequiredToDismissMessage", "closeButtonPosition", - "oneTrustCookieCategories", - "preferUserId", - "mergeNestedObjects" + "oneTrustCookieCategories" ], "excludeKeys": [], "supportedSourceTypes": [ @@ -47,17 +45,31 @@ "cordova", "shopify" ], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias"], + "supportedMessageTypes": [ + "identify", + "page", + "screen", + "track", + "alias" + ], + "supportedConnectionModes": { + "web": [ + "cloud", + "device" + ] + }, "destConfig": { "defaultConfig": [ "apiKey", - "mapToSingleEvent", + "packageName", + "preferUserId", "trackAllPages", - "trackCategorisedPages", "trackNamedPages", + "mapToSingleEvent", + "mergeNestedObjects", + "trackCategorisedPages", "oneTrustCookieCategories", - "preferUserId", - "mergeNestedObjects" + "registerDeviceOrBrowserApiKey" ], "web": [ "useNativeSDK", @@ -69,7 +81,6 @@ "displayInterval", "onOpenScreenReaderMessage", "onOpenNodeToTakeFocus", - "packageName", "rightOffset", "topOffset", "bottomOffset", @@ -80,9 +91,10 @@ "closeButtonColorSideOffset", "iconPath", "isRequiredToDismissMessage", - "closeButtonPosition" + "closeButtonPosition", + "connectionMode" ] }, "secretKeys": [] } -} +} \ No newline at end of file diff --git a/src/configurations/destinations/iterable/schema.json b/src/configurations/destinations/iterable/schema.json index 639492251..57fce027f 100644 --- a/src/configurations/destinations/iterable/schema.json +++ b/src/configurations/destinations/iterable/schema.json @@ -1,14 +1,27 @@ { "configSchema": { "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["apiKey"], + "required": [ + "apiKey" + ], "type": "object", "properties": { "apiKey": { "type": "string", "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" }, - "useNativeSDK": { "type": "object", "properties": { "web": { "type": "boolean" } } }, + "registerDeviceOrBrowserApiKey": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "useNativeSDK": { + "type": "object", + "properties": { + "web": { + "type": "boolean" + } + } + }, "getInAppEventMapping": { "type": "object", "properties": { @@ -46,52 +59,179 @@ "initialisationIdentifier": { "type": "object", "properties": { - "web": { "type": "string", "enum": ["email", "userId"], "default": "email" } + "web": { + "type": "string", + "enum": [ + "email", + "userId" + ], + "default": "email" + } + } + }, + "sendTrackForInapp": { + "type": "object", + "properties": { + "web": { + "type": "boolean" + } + } + }, + "animationDuration": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } + }, + "bottomOffset": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } + }, + "rightOffset": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } + }, + "topOffset": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } + }, + "displayInterval": { + "type": "object", + "properties": { + "web": { + "type": "string" + } } }, - "sendTrackForInapp": { "type": "object", "properties": { "web": { "type": "boolean" } } }, - "packageName": { "type": "object", "properties": { "web": { "type": "string" } } }, - "animationDuration": { "type": "object", "properties": { "web": { "type": "string" } } }, - "bottomOffset": { "type": "object", "properties": { "web": { "type": "string" } } }, - "rightOffset": { "type": "object", "properties": { "web": { "type": "string" } } }, - "topOffset": { "type": "object", "properties": { "web": { "type": "string" } } }, - "displayInterval": { "type": "object", "properties": { "web": { "type": "string" } } }, "handleLinks": { "type": "object", "properties": { "web": { "type": "string", - "enum": ["open-all-new-tab", "open-all-same-tab", "external-new-tab", ""] + "enum": [ + "open-all-new-tab", + "open-all-same-tab", + "external-new-tab" + ], + "default": "open-all-new-tab" } } }, "onOpenScreenReaderMessage": { "type": "object", - "properties": { "web": { "type": "string" } } + "properties": { + "web": { + "type": "string" + } + } + }, + "onOpenNodeToTakeFocus": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } + }, + "closeButtonColor": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } + }, + "closeButtonSize": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } + }, + "closeButtonPosition": { + "type": "object", + "properties": { + "web": { + "type": "string", + "enum": [ + "top-right", + "top-left" + ], + "default": "top-right" + } + } }, - "onOpenNodeToTakeFocus": { "type": "object", "properties": { "web": { "type": "string" } } }, - "closeButtonColor": { "type": "object", "properties": { "web": { "type": "string" } } }, - "closeButtonSize": { "type": "object", "properties": { "web": { "type": "string" } } }, - "closeButtonPosition": { "type": "object", "properties": { "web": { "type": "string" } } }, "closeButtonColorTopOffset": { "type": "object", - "properties": { "web": { "type": "string" } } + "properties": { + "web": { + "type": "string" + } + } }, "closeButtonColorSideOffset": { "type": "object", - "properties": { "web": { "type": "string" } } + "properties": { + "web": { + "type": "string" + } + } + }, + "iconPath": { + "type": "object", + "properties": { + "web": { + "type": "string" + } + } }, - "iconPath": { "type": "object", "properties": { "web": { "type": "string" } } }, "isRequiredToDismissMessage": { "type": "object", - "properties": { "web": { "type": "boolean" } } + "properties": { + "web": { + "type": "boolean" + } + } + }, + "mapToSingleEvent": { + "type": "boolean", + "default": true + }, + "trackAllPages": { + "type": "boolean", + "default": false + }, + "trackCategorisedPages": { + "type": "boolean", + "default": true + }, + "trackNamedPages": { + "type": "boolean", + "default": true + }, + "preferUserId": { + "type": "boolean", + "default": true + }, + "mergeNestedObjects": { + "type": "boolean", + "default": true }, - "mapToSingleEvent": { "type": "boolean", "default": true }, - "trackAllPages": { "type": "boolean", "default": false }, - "trackCategorisedPages": { "type": "boolean", "default": true }, - "trackNamedPages": { "type": "boolean", "default": true }, - "preferUserId": { "type": "boolean", "default": true }, - "mergeNestedObjects": { "type": "boolean", "default": true }, "oneTrustCookieCategories": { "type": "array", "items": { @@ -103,7 +243,49 @@ } } } + }, + "connectionMode": { + "type": "object", + "properties": { + "web": { + "type": "string", + "enum": [ + "cloud", + "device" + ] + } + } + } + }, + "anyOf": [ + { + "if": { + "properties": { + "connectionMode": { + "type": "object", + "properties": { + "web": { + "const": "device" + } + } + } + }, + "required": [ + "connectionMode" + ] + }, + "then": { + "properties": { + "packageName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + } + }, + "required": [ + "packageName" + ] + } } - } + ] } -} +} \ No newline at end of file diff --git a/src/configurations/destinations/iterable/ui-config.json b/src/configurations/destinations/iterable/ui-config.json index 7e536c8f8..73a2e8ce1 100644 --- a/src/configurations/destinations/iterable/ui-config.json +++ b/src/configurations/destinations/iterable/ui-config.json @@ -1,291 +1,494 @@ { - "uiConfig": [ - { - "title": "Connection Settings:", - "fields": [ - { - "type": "textInput", - "label": "Iterable Api Key", - "value": "apiKey", - "required": true, - "placeholder": "e.g: 42f187310705012194bd0bd694905664ae", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", - "regexErrorMessage": "Invalid Iterable Api Key" - } - ] - }, - { - "title": "Native SDK", + "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": "Iterable Api Key", + "configKey": "apiKey", + "regex": "^(.{1,100})$", + "regexErrorMessage": "Invalid Iterable Api Key", + "placeholder": "e.g: 42f187310705012194bd0bd694905664ae" + }, + { + "type": "textInput", + "label": "Package Name", + "configKey": "packageName", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid package name", + "note": "Iterable package name. Applicable to device mode only", + "placeholder": "e.g: my-website", + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.webDevice", + "value": 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 destination", + "sections": [ + { + "title": "Destination settings", + "note": "Configure advanced destination-specific settings here", + "icon": "settings", + "groups": [ + { + "title": "Page and Screen settings", + "note": "Set how you want to send your page and screen calls to Iterable", + "icon": "file", + "fields": [ + { + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + }, + "type": "checkbox", + "label": "Map All Pages to Single Event Name", + "configKey": "mapToSingleEvent", + "default": true + }, + { + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + }, + "type": "checkbox", + "label": "Track All Pages", + "configKey": "trackAllPages", + "default": false + }, + { + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + }, + "type": "checkbox", + "label": "Track Categorised Pages", + "configKey": "trackCategorisedPages", + "default": true + }, + { + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + }, + "type": "checkbox", + "label": "Track Named Pages", + "configKey": "trackNamedPages", + "default": true + } + ] + }, + { + "title": "Identify and Track settings", + "icon": "magnifyingGlass", + "note": "Configure your Identify and Track calls properties settings here", + "fields": [ + { + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + }, + "type": "textInput", + "label": "Iterable Mobile/Web Api Key", + "configKey": "registerDeviceOrBrowserApiKey", + "placeholder": "e.g: 42f187310705012194bd0bd694905664ae", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid Iterable Mobile/Web Api Key", + "note": "Iterable mobile/web key is required when you are sending token information in an identify call. RudderStack will use this key for registerDevice or registerBrowser api call" + }, + { + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + }, + "type": "checkbox", + "label": "Create new user if userID exists", + "configKey": "preferUserId", + "default": true, + "note": [ + "For more information about preferUserId refer ", + { + "text": "this", + "link": "https://api.iterable.com/api/docs#users_updateUser" + }, + " link" + ] + }, + { + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.cloud", + "value": true + } + ] + }, + "type": "checkbox", + "label": "Merge top-level objects", + "configKey": "mergeNestedObjects", + "default": true, + "note": [ + "For more information about mergeNestedObjects refer ", + { + "text": "this", + "link": "https://api.iterable.com/api/docs#users_updateUser" + }, + " link" + ] + } + ] + } + ] + }, + { + "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)", + "preRequisites": { + "fields": [ + { + "configKey": "connectionModes.webDevice", + "value": true + }, + { + "configKey": "connectionModes.mobileDevice", + "value": true + } + ], + "condition": "or" + }, + "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": "" + } + ] + } + ] + } + ] + } + ] + } + ], + "sdkTemplate": { + "title": "Web SDK settings", + "note": "not visible in the ui", "fields": [ { - "type": "checkbox", - "label": "Use device-mode to send events", - "value": "useNativeSDK", - "default": true - }, - { - "type": "dynamicCustomForm", - "value": "getInAppEventMapping", + "type": "tagInput", "label": "Mapping to trigger the getInApp messages", - "customFields": [ + "configKey": "getInAppEventMapping", + "tagKey": "eventName", + "default": [ { - "type": "textInput", - "value": "eventName", - "required": false, - "placeholder": "e.g: Trigger inApp" + "eventName": "" } ], - "footerNote": "Set the event names for which you want to trigger the web in-app push events" + "note": "Set the event names for which you want to trigger the web in-app push events" }, { - "type": "dynamicCustomForm", - "value": "purchaseEventMapping", + "type": "tagInput", "label": "Mapping to trigger the purchase events", - "customFields": [ + "configKey": "purchaseEventMapping", + "tagKey": "eventName", + "default": [ { - "type": "textInput", - "value": "eventName", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", - "required": false, - "placeholder": "e.g: Trigger purchase" + "eventName": "" } ], - "footerNote": "Set the event names for which you want to trigger the purchase events" + "note": "Set the event names for which you want to trigger the purchase events" }, { "type": "singleSelect", "label": "Identifier to identify a user over a session", - "value": "initialisationIdentifier", + "configKey": "initialisationIdentifier", "options": [ { - "name": "Email", + "label": "Email", "value": "email" }, { - "name": "UserID", + "label": "UserID", "value": "userId" } ], - "defaultOption": { - "name": "Email", - "value": "email" - } + "default": "email" }, { "type": "checkbox", "label": "Trigger a track event for web in-app push", - "value": "sendTrackForInapp", + "configKey": "sendTrackForInapp", "default": false, - "footerNote": "Enable this if you want to track web in-app push notifications." - }, - { - "type": "textInput", - "label": "Package Name", - "value": "packageName", - "required": true, - "placeholder": "e.g: my-website" + "note": "Enable this if you want to track web in-app push notifications" }, { "type": "textInput", "label": "Time (in ms) for messages to animate in and out", - "value": "animationDuration", - "required": false, + "configKey": "animationDuration", "placeholder": "e.g: 400" }, { "type": "textInput", - "label": "Space (px or %) between screen bottom & messages.", - "value": "bottomOffset", - "required": false, + "label": "Space (px or %) between screen bottom & messages", + "configKey": "bottomOffset", "placeholder": "e.g: 20%", - "footerNote": "Set the spacing between the screen bottom and push notification pop-up. This is not applicable for center, top, or full-screen messages" + "note": "Set the spacing between the screen bottom and push notification pop-up. This is not applicable for center, top, or full-screen messages" }, { "type": "textInput", - "label": "Space (px or %) between screen right & messages.", - "value": "rightOffset", - "required": false, + "label": "Space (px or %) between screen right & messages", + "configKey": "rightOffset", "placeholder": "e.g: 20%", - "footerNote": "Set the spacing between the screen right and push notification pop-up. This is not applicable for center, top, or full-screen messages." + "note": "Set the spacing between the screen right and push notification pop-up. This is not applicable for center, top, or full-screen messages" }, { "type": "textInput", - "label": "Space (px or %) between screen top & messages.", - "value": "topOffset", - "required": false, + "label": "Space (px or %) between screen top & messages", + "configKey": "topOffset", "placeholder": "e.g: 20%", - "footerNote": "Set the spacing between the screen top and push notification pop-up. This is not applicable for center, top, or full-screen messages." + "note": "Set the spacing between the screen top and push notification pop-up. This is not applicable for center, top, or full-screen messages" }, { "type": "textInput", "label": "Wait time for next message", - "value": "displayInterval", - "required": false, + "configKey": "displayInterval", "placeholder": "e.g: 25000", - "footerNote": "Time (in ms) to wait before showing next in-app message after closing the currently opened one." + "note": "Time (in ms) to wait before showing next in-app message after closing the currently opened one" }, { "type": "singleSelect", - "label": "Control how to open links.", - "value": "handleLinks", - "required": false, + "label": "Control how to open links", + "configKey": "handleLinks", + "note": "Set how do you want the links present in the push notification to open", "options": [ { - "name": "Open all in new tabs", + "label": "Open all in new tabs", "value": "open-all-new-tab" }, { - "name": "Open all in same tabs", + "label": "Open all in same tabs", "value": "open-all-same-tab" }, { - "name": "Open in external new tab", + "label": "Open in external new tab", "value": "external-new-tab" } ], - "footerNote": "Set how do you want the links present in the push notification to open." + "default": "open-all-new-tab" }, { "type": "textInput", "label": "Screen Reader Text", - "value": "onOpenScreenReaderMessage", - "required": false, + "configKey": "onOpenScreenReaderMessage", "placeholder": "e.g: Reader message here", - "footerNote": "Text that screen reader should use to announce when opening in-app messages." + "note": "Text that screen reader should use to announce when opening in-app messages" }, { "type": "textInput", "label": "Focus Element", - "value": "onOpenNodeToTakeFocus", - "required": false, + "configKey": "onOpenNodeToTakeFocus", "placeholder": "e.g: input", - "footerNote": "Specify the DOM element to take keyboard focus when the in-app message opens." + "note": "Specify the DOM element to take keyboard focus when the in-app message opens" }, { "type": "textInput", "label": "Color of Close button", - "value": "closeButtonColor", - "required": false, + "configKey": "closeButtonColor", "placeholder": "e.g: cyan" }, { - "type": "textInput", - "label": "Size of Close button", - "value": "closeButtonSize", - "required": false, - "placeholder": "e.g: 24" - }, - { - "type": "textInput", - "label": "Position", - "value": "closeButtonPosition", - "required": false, - "footerNote": "Cross button's position relative to the in-app message.", + "type": "singleSelect", + "label": "Position of Close button", + "configKey": "closeButtonPosition", + "note": "Cross button's position relative to the in-app message", "options": [ { - "name": "Top Right", - "value": "otop-right" + "label": "Top Right", + "value": "top-right" }, { - "name": "Top Left", + "label": "Top Left", "value": "top-left" } - ] + ], + "default": "top-right" }, { "type": "textInput", "label": "Space between button & container top", - "value": "closeButtonColorTopOffset", - "required": false, + "configKey": "closeButtonColorTopOffset", "placeholder": "e.g: 4%", - "footerNote": "Set the spacing between the cross button and the pop-up notification's top border" + "note": "Set the spacing between the cross button and the pop-up notification's top border" }, { "type": "textInput", "label": "Space between button & container side", - "value": "closeButtonColorSideOffset", - "required": false, + "configKey": "closeButtonColorSideOffset", "placeholder": "e.g: 4%", - "footerNote": "Set the spacing between the cross button and the pop-up notification's side borders" + "note": "Set the spacing between the cross button and the pop-up notification's side borders" }, { "type": "textInput", "label": "Custom pathname", - "value": "iconPath", - "required": false, + "configKey": "iconPath", "placeholder": "e.g: path/to/icon", - "footerNote": "image or SVG to show instead of the default X" + "note": "image or SVG to show instead of the default X" }, { "type": "checkbox", "label": "Prevent user dismissing in-app message by clicking outside message", - "value": "isRequiredToDismissMessage", - "default": false - } - ] - }, - { - "title": "Other Settings", - "fields": [ - { - "type": "checkbox", - "label": "Map All Pages to Single Event Name", - "value": "mapToSingleEvent", - "default": true - }, - { - "type": "checkbox", - "label": "Track All Pages", - "value": "trackAllPages", - "default": false - }, - { - "type": "checkbox", - "label": "Track Categorised Pages", - "value": "trackCategorisedPages", - "default": true - }, - { - "type": "checkbox", - "label": "Track Named Pages", - "value": "trackNamedPages", - "default": true - }, - { - "type": "checkbox", - "label": "Create new user if userID exists", - "value": "preferUserId", - "footerNote": "For more information refer preferUserId in this link https://api.iterable.com/api/docs#users_updateUser", - "default": true - }, - { - "type": "checkbox", - "label": "Merge top-level objects", - "value": "mergeNestedObjects", - "footerNote": "For more information refer mergeNestedObjects in this link https://api.iterable.com/api/docs#users_updateUser", - "default": true - } - ] - }, - { - "title": "Consent Settings", - "fields": [ - { - "type": "dynamicCustomForm", - "value": "oneTrustCookieCategories", - "label": "OneTrust Cookie Categories", - "customFields": [ - { - "type": "textInput", - "placeholder": "Marketing", - "value": "oneTrustCookieCategory", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", - "label": "Category Name/ID", - "required": false - } - ] + "configKey": "isRequiredToDismissMessage" } ] } - ] + } } diff --git a/src/configurations/destinations/launchdarkly_audience/db-config.json b/src/configurations/destinations/launchdarkly_audience/db-config.json new file mode 100644 index 000000000..0f30c2b8d --- /dev/null +++ b/src/configurations/destinations/launchdarkly_audience/db-config.json @@ -0,0 +1,33 @@ +{ + "name": "LAUNCHDARKLY_AUDIENCE", + "displayName": "LaunchDarkly Audience", + "config": { + "cdkV2Enabled": true, + "transformAt": "processor", + "transformAtV1": "processor", + "saveDestinationResponse": true, + "disableJsonMapper": true, + "isAudienceSupported": true, + "supportsVisualMapper": true, + "includeKeys": [], + "excludeKeys": [], + "supportedSourceTypes": ["cloud", "warehouse"], + "supportedMessageTypes": ["audiencelist"], + "syncBehaviours": ["mirror"], + "supportedConnectionModes": [], + "destConfig": { + "defaultConfig": [ + "accessToken", + "clientSideId", + "audienceId", + "audienceName", + "audienceType", + "oneTrustCookieCategories" + ] + }, + "secretKeys": ["accessToken"] + }, + "options": { + "isBeta": true + } +} diff --git a/src/configurations/destinations/launchdarkly_audience/metadata.json b/src/configurations/destinations/launchdarkly_audience/metadata.json new file mode 100644 index 000000000..034f78253 --- /dev/null +++ b/src/configurations/destinations/launchdarkly_audience/metadata.json @@ -0,0 +1,18 @@ +{ + "metadata": { + "primaryCategory": "", + "secondaryCategory": [], + "docLink": "https://www.rudderstack.com/docs/destinations/streaming-destinations/launchdarkly-audience/", + "logoPath": "", + "connectionMode": { + "cloud-mode": true, + "device-mode": "" + }, + "supportedMethods": { + "cloud-mode": ["audiencelist"], + "device-mode": {} + }, + "releaseStatus": "beta", + "sourceCode": {} + } +} diff --git a/src/configurations/destinations/launchdarkly_audience/schema.json b/src/configurations/destinations/launchdarkly_audience/schema.json new file mode 100644 index 000000000..e2bdc2910 --- /dev/null +++ b/src/configurations/destinations/launchdarkly_audience/schema.json @@ -0,0 +1,65 @@ +{ + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": ["accessToken", "clientSideId", "audienceId", "audienceName"], + "properties": { + "accessToken": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "clientSideId": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "audienceId": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "audienceName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "audienceType": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "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})$" + } + } + } + } + } + } +} diff --git a/src/configurations/destinations/launchdarkly_audience/ui-config.json b/src/configurations/destinations/launchdarkly_audience/ui-config.json new file mode 100644 index 000000000..d2316e7aa --- /dev/null +++ b/src/configurations/destinations/launchdarkly_audience/ui-config.json @@ -0,0 +1,155 @@ +{ + "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": "Access Token", + "note": [ + "Enter the Access token with the write access associated with your LaunchDarkly account. To learn how to create an access token, read ", + { + "text": "Creating API access tokens", + "link": "https://docs.launchdarkly.com/home/account-security/api-access-tokens#creating-api-access-tokens" + } + ], + "configKey": "accessToken", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Access Token", + "placeholder": "e.g: api-4b50335d-133a-47b3-b918-654c7199e2de", + "secret": true + }, + { + "type": "textInput", + "label": "Client Side ID", + "note": "Enter the Client Side Id associated with your LaunchDarkly project and environment. You can get this from Account Settings → Projects Tab → Click project name → Click the environment's client-side ID to copy it to your clipboard.", + "configKey": "clientSideId", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Client Side Id", + "placeholder": "e.g: 6123931929849919" + }, + { + "type": "textInput", + "label": "Audience ID", + "note": "Enter the Audience ID that you want to sync. This will be mapped to LaunchDarkly's Cohort ID. A Segment (or Audience or Cohort) will be created/updated in LaunchDarkly with this ID.", + "configKey": "audienceId", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Audience Id", + "placeholder": "e.g: example-audience-id" + }, + { + "type": "textInput", + "label": "Audience Name", + "note": "Enter the Audience name that you want to sync. This will be mapped to LaunchDarkly's Cohort Name.", + "configKey": "audienceName", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Audience Name", + "placeholder": "e.g: Logged in users" + } + ] + } + ] + }, + { + "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 destination-specific settings here", + "icon": "settings", + "groups": [ + { + "title": "LaunchDarkly IT", + "note": "Configure a few advanced LaunchDarkly settings here", + "fields": [ + { + "type": "textInput", + "label": "Audience Type", + "note": [ + "Enter the Audience Type. This will be mapped to LaunchDarkly's ", + { + "text": "Context Kind .", + "link": "https://docs.launchdarkly.com/home/contexts/context-kinds" + }, + "By default, a Segment (or Audience or Cohort) will be created with 'user' as the context kind." + ], + "configKey": "audienceType", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", + "regexErrorMessage": "Invalid Audience Type", + "placeholder": "e.g: user" + } + ] + } + ] + }, + { + "title": "Other 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": "" + } + ] + } + ] + } + ] + } + ] + } + ], + "sdkTemplate": { + "title": "SDK settings", + "note": "not visible in the ui", + "fields": [] + } + } +} diff --git a/src/configurations/destinations/marketo_static_list/db-config.json b/src/configurations/destinations/marketo_static_list/db-config.json index cf94d3922..942a7b3e7 100644 --- a/src/configurations/destinations/marketo_static_list/db-config.json +++ b/src/configurations/destinations/marketo_static_list/db-config.json @@ -13,8 +13,19 @@ "oneTrustCookieCategories" ], "excludeKeys": [], - "supportedSourceTypes": ["cloud", "warehouse", "shopify"], - "supportedMessageTypes": ["audiencelist"], + "supportedSourceTypes": [ + "cloud", + "warehouse", + "shopify" + ], + "supportedMessageTypes": [ + "audiencelist" + ], + "syncBehaviours": [ + "mirror" + ], + "disableJsonMapper": true, + "supportsVisualMapper": true, "destConfig": { "defaultConfig": [ "clientId", @@ -24,6 +35,13 @@ "oneTrustCookieCategories" ] }, - "secretKeys": ["clientId", "clientSecret", "accountId"] + "secretKeys": [ + "clientId", + "clientSecret", + "accountId" + ] + }, + "options": { + "isBeta": true } -} +} \ No newline at end of file diff --git a/src/configurations/destinations/slack/db-config.json b/src/configurations/destinations/slack/db-config.json index 317b7585f..6ccebae6e 100644 --- a/src/configurations/destinations/slack/db-config.json +++ b/src/configurations/destinations/slack/db-config.json @@ -5,7 +5,9 @@ "transformAt": "processor", "transformAtV1": "processor", "saveDestinationResponse": true, - "includeKeys": ["oneTrustCookieCategories"], + "includeKeys": [ + "oneTrustCookieCategories" + ], "excludeKeys": [], "supportedSourceTypes": [ "android", @@ -20,17 +22,22 @@ "cordova", "shopify" ], - "supportedMessageTypes": ["identify", "track"], + "supportedMessageTypes": [ + "identify", + "track" + ], "destConfig": { "defaultConfig": [ "eventChannelSettings", + "incomingWebhooksType", "identifyTemplate", "eventTemplateSettings", "webhookUrl", "whitelistedTraitsSettings", + "blacklistedEvents", "oneTrustCookieCategories" ] }, "secretKeys": [] } -} +} \ No newline at end of file diff --git a/src/configurations/destinations/slack/schema.json b/src/configurations/destinations/slack/schema.json index 2da9b1f05..a6a85847e 100644 --- a/src/configurations/destinations/slack/schema.json +++ b/src/configurations/destinations/slack/schema.json @@ -1,75 +1,107 @@ { - "configSchema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["webhookUrl"], - "type": "object", - "properties": { - "eventChannelSettings": { - "type": "array", - "items": { - "type": "object", - "properties": { - "eventName": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "required": [ + "webhookUrl" + ], + "type": "object", + "properties": { + "incomingWebhooksType": { + "type": "string", + "enum": [ + "legacy", + "modern" + ], + "default": "legacy" }, - "eventChannel": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "eventChannelSettings": { + "type": "array", + "items": { + "type": "object", + "properties": { + "eventName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "eventChannelWebhook": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$" + }, + "eventChannel": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "eventRegex": { + "type": "boolean", + "default": false + } + } + } }, - "eventRegex": { "type": "boolean", "default": false } - } - } - }, - "identifyTemplate": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,1000})$" - }, - "eventTemplateSettings": { - "type": "array", - "items": { - "type": "object", - "properties": { - "eventName": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "identifyTemplate": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,1000})$" }, - "eventTemplate": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,1000})$" + "eventTemplateSettings": { + "type": "array", + "items": { + "type": "object", + "properties": { + "eventName": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + }, + "eventTemplate": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,1000})$" + }, + "eventRegex": { + "type": "boolean", + "default": false + } + } + } }, - "eventRegex": { "type": "boolean", "default": false } - } - } - }, - "webhookUrl": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$" - }, - "whitelistedTraitsSettings": { - "type": "array", - "items": { - "type": "object", - "properties": { - "trait": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" - } - } - } - }, - "oneTrustCookieCategories": { - "type": "array", - "items": { - "type": "object", - "properties": { - "oneTrustCookieCategory": { - "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "webhookUrl": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$" + }, + "whitelistedTraitsSettings": { + "type": "array", + "items": { + "type": "object", + "properties": { + "trait": { + "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})$" + } + } + } } - } } - } } - } -} +} \ No newline at end of file diff --git a/src/configurations/destinations/slack/ui-config.json b/src/configurations/destinations/slack/ui-config.json index 6c4f8fc4c..5ff00c926 100644 --- a/src/configurations/destinations/slack/ui-config.json +++ b/src/configurations/destinations/slack/ui-config.json @@ -3,6 +3,27 @@ { "title": "Event Channels", "fields": [ + { + "type": "singleSelect", + "label": "Type of incoming webhooks", + "value": "incomingWebhooksType", + "mode": "single", + "options": [ + { + "name": "Legacy (Will be deprecated soon)", + "value": "legacy" + }, + { + "name": "Modern (through app)", + "value": "modern" + } + ], + "defaultOption": { + "name": "Legacy", + "value": "legacy" + }, + "footerNote": "If legacy is choosed then channel mapping will be done based on channel name else it will be done based on channel webhook" + }, { "type": "dynamicCustomForm", "value": "eventChannelSettings", @@ -18,12 +39,23 @@ }, { "type": "textInput", - "label": "Event Channel", + "label": "Event Channel Webhook", + "value": "eventChannelWebhook", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$", + "regexErrorMessage": "Invalid Event Channel Webhook", + "required": false, + "placeholder": "e.g: https://hooks.slack.com/services/placeholder_1/placeholder_2/placeholder_3", + "footerNote": "Required for Modern API" + }, + { + "type": "textInput", + "label": "Event Channel Name", "value": "eventChannel", "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", - "regexErrorMessage": "Invalid Event Channel", + "regexErrorMessage": "Invalid Event Channel Name", "required": false, - "placeholder": "e.g: ABCDEFG" + "placeholder": "e.g: ABCDEFG", + "footerNote": "Required for legacy API" }, { "type": "checkbox", @@ -94,7 +126,7 @@ "regex": "(?!.*\\.ngrok\\.io)^(.{0,100})$", "regexErrorMessage": "Invalid Webhook Url", "required": true, - "placeholder": "e.g: ABCDEFG" + "placeholder": "e.g: https://hooks.slack.com/services/placeholder1/placeholder2/placeholder3" } ] }, @@ -112,7 +144,25 @@ "regex": "^(.{0,100})$", "regexErrorMessage": "Invalid Trait", "required": false, - "placeholder": "e.g: ABCDEFG" + "placeholder": "e.g: lastName" + } + ] + } + ] + }, + { + "title": "Blacklisted Events", + "fields": [ + { + "type": "dynamicCustomForm", + "value": "blacklistedEvents", + "customFields": [ + { + "type": "textInput", + "label": "Event Name", + "value": "eventName", + "required": false, + "placeholder": "e.g: Credit Card Added" } ] } @@ -138,4 +188,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/src/configurations/sources/singer_intercom/db-config.json b/src/configurations/sources/singer_intercom/db-config.json index 424609aa3..3b517f3eb 100644 --- a/src/configurations/sources/singer_intercom/db-config.json +++ b/src/configurations/sources/singer_intercom/db-config.json @@ -3,7 +3,7 @@ "category": "singer-protocol", "displayName": "Intercom", "options": { - "image": "rudderstack/source-intercom:v7.0.1" + "image": "rudderstack/source-intercom:v8.1.12" }, "type": "cloudSource" } diff --git a/test/data/validation/destinations/customerio.json b/test/data/validation/destinations/customerio.json index 3e95eafc4..57c027e88 100644 --- a/test/data/validation/destinations/customerio.json +++ b/test/data/validation/destinations/customerio.json @@ -4,7 +4,7 @@ "siteID": "95bd1331112976i0ff9b", "apiKey": "95bd1331112976i0ff9b", "deviceTokenEventName": "device_token_registered", - "datacenterEU": false, + "datacenter": "US", "eventFilteringOption": "disable", "whitelistedEvents": [ { @@ -34,7 +34,7 @@ "config": { "apiKey": "95bd1331112976i0ff9b", "deviceTokenEventName": "device_token_registered", - "datacenterEU": false, + "datacenter": "US", "eventFilteringOption": "whitelistedEvents", "whitelistedEvents": [ { @@ -59,16 +59,14 @@ ] }, "result": false, - "err": [ - " must have required property 'siteID'" - ] + "err": [" must have required property 'siteID'"] }, { "config": { "siteID": "95bd1331112976i0ff9b", "apiKey": "95bd1330072974f0ff9b", "deviceTokenEventName": "device_location_registered", - "datacenterEU": true, + "datacenter": "EU", "whitelistedEvents": [ { "eventName": "practice" @@ -98,14 +96,11 @@ "siteID": "15bd1331112976i0ff9b", "apiKey": "15bd1331112976i0ff9b", "deviceTokenEventName": "device_id_removed", - "datacenterEU": false, + "datacenter": "US", "eventFilteringOption": "disable", "whitelistedEvents": [ { - "eventName": [ - "e1", - "v1" - ] + "eventName": ["e1", "v1"] } ], "blacklistedEvents": [ @@ -126,16 +121,14 @@ ] }, "result": false, - "err": [ - "whitelistedEvents.0.eventName must be string" - ] + "err": ["whitelistedEvents.0.eventName must be string"] }, { "config": { "siteID": "95bd1331112976i0ff9b", "apiKey": "95bd1331112976i0ff9b", "deviceTokenEventName": "device_token_registered", - "datacenterEU": "Germany", + "datacenter": "EU", "eventFilteringOption": "disable", "useNativeSDK": { "web": false @@ -149,17 +142,14 @@ } ] }, - "result": false, - "err": [ - "datacenterEU must be boolean" - ] + "result": true }, { "config": { "siteID": "95bd1331112976i0ff9b", "apiKey": "95bd1331112976i0ff9b", "deviceTokenEventName": "qwsafpmznjhbfjhchdgeiuudhwgvdfkzxuiookaghhrytedhgfgjslalapooiqnbvemixuhevvsjklodjdokhuijghqwnvzxccdwsalkijediwhfwibkjnkji", - "datacenterEU": true, + "datacenter": "EU", "eventFilteringOption": "disable", "useNativeSDK": { "web": false @@ -178,4 +168,4 @@ "deviceTokenEventName must match pattern \"(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$\"" ] } -] \ No newline at end of file +] diff --git a/test/data/validation/destinations/fullstory.json b/test/data/validation/destinations/fullstory.json new file mode 100644 index 000000000..0de7d990b --- /dev/null +++ b/test/data/validation/destinations/fullstory.json @@ -0,0 +1,68 @@ +[ + { + "config": { + "blacklistedEvents": [ + { + "eventName": "Signup failed" + } + ], + "whitelistedEvents": [ + { + "eventName": "" + } + ], + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "" + } + ], + "eventFilteringOption": "blacklistedEvents", + "http-connectionMode": "cloud", + "useNativeSDK": { + "web": true, + "android": false + }, + "connectionMode": { + "web": "device", + "android": "cloud" + }, + "fs_debug_mode": { + "web": true + }, + "fs_org": "dummyorg", + "fs_host": { + "web": "dummyhost.com" + }, + "apiKey": "na1.dummy" + }, + "result": true + }, + { + "config": { + "blacklistedEvents": [{ "eventName": "" }], + "whitelistedEvents": [{ "eventName": "" }], + "oneTrustCookieCategories": [{ "oneTrustCookieCategory": "" }], + "eventFilteringOption": "disable", + "useNativeSDK": { "web": true }, + "connectionMode": { "web": "device" }, + "fs_debug_mode": { "web": false }, + "fs_org": "dummyorg2", + "fs_host": { "web": "dummyhost.com" } + }, + "result": true + }, + { + "config": { + "blacklistedEvents": [{ "eventName": "" }], + "whitelistedEvents": [{ "eventName": "" }], + "oneTrustCookieCategories": [{ "oneTrustCookieCategory": "" }], + "eventFilteringOption": "disable", + "useNativeSDK": { "web": true }, + "connectionMode": { "web": "device" }, + "fs_debug_mode": { "web": true }, + "fs_org": "dummyorg", + "fs_host": { "web": "" } + }, + "result": true + } +] diff --git a/test/data/validation/destinations/iterable.json b/test/data/validation/destinations/iterable.json index 4271639dc..09030fc40 100644 --- a/test/data/validation/destinations/iterable.json +++ b/test/data/validation/destinations/iterable.json @@ -6,31 +6,180 @@ "trackAllPages": false, "trackCategorisedPages": true, "trackNamedPages": true, - "useNativeSDK": { "web": true }, - "initialisationIdentifier": { "web": "email" }, + "useNativeSDK": { + "web": false + }, + "connectionMode": { + "web": "cloud" + }, + "initialisationIdentifier": { + "web": "email" + }, "getInAppEventMapping": { - "web": [{ "eventName": "sale notification" }, { "eventName": "festival discount" }] - }, - "purchaseEventMapping": { "web": [{ "eventName": "Checkout Done" }] }, - "sendTrackForInapp": { "web": true }, - "animationDuration": { "web": "200" }, - "displayInterval": { "web": "2500" }, - "onOpenScreenReaderMessage": { "web": "" }, - "onOpenNodeToTakeFocus": { "web": "" }, - "packageName": { "web": "my-package-test" }, - "rightOffset": { "web": "15" }, - "topOffset": { "web": "11" }, - "bottomOffset": { "web": "24%" }, - "handleLinks": { "web": "open-all-new-tab" }, - "closeButtonColor": { "web": "blue" }, - "closeButtonSize": { "web": "" }, - "closeButtonColorTopOffset": { "web": "3%" }, - "closeButtonColorSideOffset": { "web": "2%" }, - "iconPath": { "web": "" }, - "isRequiredToDismissMessage": { "web": true }, - "closeButtonPosition": { "web": "" }, - "oneTrustCookieCategories": [{ "oneTrustCookieCategory": "" }] + "web": [ + { + "eventName": "sale notification" + }, + { + "eventName": "festival discount" + } + ] + }, + "purchaseEventMapping": { + "web": [ + { + "eventName": "Checkout Done" + } + ] + }, + "sendTrackForInapp": { + "web": true + }, + "animationDuration": { + "web": "200" + }, + "displayInterval": { + "web": "2500" + }, + "onOpenScreenReaderMessage": { + "web": "" + }, + "onOpenNodeToTakeFocus": { + "web": "" + }, + "rightOffset": { + "web": "15" + }, + "topOffset": { + "web": "11" + }, + "bottomOffset": { + "web": "24%" + }, + "handleLinks": { + "web": "open-all-new-tab" + }, + "closeButtonColor": { + "web": "blue" + }, + "closeButtonSize": { + "web": "" + }, + "closeButtonColorTopOffset": { + "web": "3%" + }, + "closeButtonColorSideOffset": { + "web": "2%" + }, + "iconPath": { + "web": "" + }, + "isRequiredToDismissMessage": { + "web": true + }, + "closeButtonPosition": { + "web": "top-right" + }, + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "" + } + ] }, "result": true + }, + { + "config": { + "apiKey": "73983282843839749873", + "mapToSingleEvent": true, + "trackAllPages": false, + "trackCategorisedPages": true, + "trackNamedPages": true, + "useNativeSDK": { + "web": true + }, + "connectionMode": { + "web": "device" + }, + "initialisationIdentifier": { + "web": "email" + }, + "getInAppEventMapping": { + "web": [ + { + "eventName": "sale notification" + }, + { + "eventName": "festival discount" + } + ] + }, + "purchaseEventMapping": { + "web": [ + { + "eventName": "Checkout Done" + } + ] + }, + "sendTrackForInapp": { + "web": true + }, + "animationDuration": { + "web": "200" + }, + "displayInterval": { + "web": "2500" + }, + "onOpenScreenReaderMessage": { + "web": "" + }, + "onOpenNodeToTakeFocus": { + "web": "" + }, + "rightOffset": { + "web": "15" + }, + "topOffset": { + "web": "11" + }, + "bottomOffset": { + "web": "24%" + }, + "handleLinks": { + "web": "open-all-new-tab" + }, + "closeButtonColor": { + "web": "blue" + }, + "closeButtonSize": { + "web": "" + }, + "closeButtonColorTopOffset": { + "web": "3%" + }, + "closeButtonColorSideOffset": { + "web": "2%" + }, + "iconPath": { + "web": "" + }, + "isRequiredToDismissMessage": { + "web": true + }, + "closeButtonPosition": { + "web": "top-right" + }, + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "" + } + ] + }, + "result": false, + "err": [ + " must have required property 'packageName'", + " must match \"then\" schema", + " must match a schema in anyOf" + ] } -] +] \ No newline at end of file diff --git a/test/data/validation/destinations/slack.json b/test/data/validation/destinations/slack.json index 990a6e76a..cc0691289 100644 --- a/test/data/validation/destinations/slack.json +++ b/test/data/validation/destinations/slack.json @@ -3,9 +3,29 @@ "config": { "identifyTemplate": "", "webhookUrl": "", - "eventChannelSettings": [{ "eventName": "", "eventChannel": "", "eventRegex": false }], - "eventTemplateSettings": [{ "eventName": "", "eventTemplate": "", "eventRegex": false }], - "whitelistedTraitsSettings": [{ "trait": "" }] + "eventChannelSettings": [ + { + "eventName": "", + "eventChannel": "", + "eventChannelWebhook": "", + "eventRegex": false + } + ], + "eventTemplateSettings": [ + { + "eventName": "", + "eventTemplate": "", + "eventRegex": false + } + ], + "whitelistedTraitsSettings": [ + { + "trait": "" + } + ], + "blacklistedEvents": [ + {} + ] }, "result": true }, @@ -14,7 +34,12 @@ "identifyTemplate": "", "webhookUrl": "https://hooks.slack.com/services/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", "eventChannelSettings": [ - { "eventName": "XYZ", "eventChannel": "@srikanth", "eventRegex": false } + { + "eventName": "XYZ", + "eventChannel": "@srikanth", + "eventChannelWebhook": "https://hooks.slack.com/services/e1/e2/e3", + "eventRegex": false + } ], "eventTemplateSettings": [ { @@ -23,17 +48,37 @@ "eventRegex": false } ], - "whitelistedTraitsSettings": [{ "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "" + } + ], + "blacklistedEvents": [ + { + "eventName": "abc" + } + ] + }, + "result": true + }, + { + "config": { + "identifyTemplate": "", + "webhookUrl": "" }, "result": true }, - { "config": { "identifyTemplate": "", "webhookUrl": "" }, "result": true }, { "config": { "identifyTemplate": "", "webhookUrl": "https://hooks.slack.com/services/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", "eventChannelSettings": [ - { "eventName": "XYZ", "eventChannel": "@srikanth", "eventRegex": false } + { + "eventName": "XYZ", + "eventChannel": "@srikanth", + "eventChannelWebhook": "https://hooks.slack.com/services/e1/e2/e3", + "eventRegex": false + } ], "eventTemplateSettings": [ { @@ -42,7 +87,11 @@ "eventRegex": "false" } ], - "whitelistedTraitsSettings": [{ "trait": "" }] + "whitelistedTraitsSettings": [ + { + "trait": "" + } + ] }, "result": false, "err": [ @@ -50,4 +99,4 @@ "eventTemplateSettings.0.eventRegex must be boolean" ] } -] +] \ No newline at end of file