diff --git a/.github/workflows/deploy-to-prod.yml b/.github/workflows/deploy-to-prod.yml index 2a293ca57..611c03ea1 100644 --- a/.github/workflows/deploy-to-prod.yml +++ b/.github/workflows/deploy-to-prod.yml @@ -51,5 +51,5 @@ jobs: secrets: API_USERNAME: ${{ secrets.PROD_USERNAME }} API_PASSWORD: ${{ secrets.PROD_PASSWORD }} - SLACK_BOT_TOKEN: $$ {{ secrets.SLACK_BOT_TOKEN }} + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} SLACK_RELEASE_CHANNEL_ID: ${{ secrets.SLACK_RELEASE_CHANNEL_ID }} diff --git a/.github/workflows/deploy-to-staging.yml b/.github/workflows/deploy-to-staging.yml index 930732548..b6e901b43 100644 --- a/.github/workflows/deploy-to-staging.yml +++ b/.github/workflows/deploy-to-staging.yml @@ -20,5 +20,5 @@ jobs: secrets: API_USERNAME: ${{ secrets.DEV_USERNAME }} API_PASSWORD: ${{ secrets.DEV_PASSWORD }} - SLACK_BOT_TOKEN: $$ {{ secrets.SLACK_BOT_TOKEN }} + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} SLACK_RELEASE_CHANNEL_ID: ${{ secrets.SLACK_RELEASE_CHANNEL_ID }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 76adadf2f..79c26c819 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ 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.68.0](https://github.com/rudderlabs/rudder-config-schema/compare/v1.67.1...v1.68.0) (2024-03-18) + + +### Features + +* custom environment slug ([#1275](https://github.com/rudderlabs/rudder-config-schema/issues/1275)) ([a856eef](https://github.com/rudderlabs/rudder-config-schema/commit/a856eef62d79dbf61fad3b9d84eb31d33f62b5ea)) +* onboard destination movable ink ([#1252](https://github.com/rudderlabs/rudder-config-schema/issues/1252)) ([c4bdb5e](https://github.com/rudderlabs/rudder-config-schema/commit/c4bdb5ee623765c7c18802628366ff02f2196782)) +* onboard new destination koala ([#1258](https://github.com/rudderlabs/rudder-config-schema/issues/1258)) ([37b7150](https://github.com/rudderlabs/rudder-config-schema/commit/37b7150736fe803b3c837f01a57a80ad53cbfede)) +* reviewed destinations for secret keys and updated configs accordingly ([#1268](https://github.com/rudderlabs/rudder-config-schema/issues/1268)) ([7289e5c](https://github.com/rudderlabs/rudder-config-schema/commit/7289e5c07e849f40ecc0700db733b48c9afc9364)) + + +### Bug Fixes + +* secret keys for destinations ([#1224](https://github.com/rudderlabs/rudder-config-schema/issues/1224)) ([6d1be08](https://github.com/rudderlabs/rudder-config-schema/commit/6d1be08238de2fa00e16d4bf4717ebd611e12341)) +* slack notifications ([#1260](https://github.com/rudderlabs/rudder-config-schema/issues/1260)) ([9800571](https://github.com/rudderlabs/rudder-config-schema/commit/9800571dcd81eab128dc7a3345a6dcb6645ed079)) + ### [1.67.1](https://github.com/rudderlabs/rudder-config-schema/compare/v1.67.0...v1.67.1) (2024-03-08) diff --git a/CODEOWNERS b/CODEOWNERS index 2278ba5a5..f48f24c9b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,3 +1,3 @@ -* @ItsSudip @shrouti1507 @sandeepdsvs @krishna2020 @nidhilashkari17 @lvrach @bardisg -/src/configurations/ @lvrach @cisse21 @nidhilashkari17 @debanjan97 @ssbeefeater @AchuthaSourabhC @ruchiramoitra @ashishRudder @ItsSudip @shrouti1507 @sandeepdsvs @krishna2020 @desusai7 @1abhishekpandey @bardisg -/test/ @lvrach @cisse21 @nidhilashkari17 @debanjan97 @ssbeefeater @AchuthaSourabhC @ruchiramoitra @ashishRudder @ItsSudip @shrouti1507 @sandeepdsvs @krishna2020 @desusai7 @1abhishekpandey @bardisg +* @ItsSudip @shrouti1507 @sandeepdsvs @krishna2020 @RanjeetMishra @lvrach @bardisg +/src/configurations/ @lvrach @cisse21 @debanjan97 @am6010 @ssbeefeater @AchuthaSourabhC @ruchiramoitra @ashishRudder @ItsSudip @shrouti1507 @sandeepdsvs @krishna2020 @desusai7 @1abhishekpandey @bardisg +/test/ @lvrach @cisse21 @debanjan97 @am6010 @ssbeefeater @AchuthaSourabhC @ruchiramoitra @ashishRudder @ItsSudip @shrouti1507 @sandeepdsvs @krishna2020 @desusai7 @1abhishekpandey @bardisg diff --git a/package-lock.json b/package-lock.json index 8c47a3990..56886014b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-config-schema", - "version": "1.67.1", + "version": "1.68.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-config-schema", - "version": "1.67.1", + "version": "1.68.0", "license": "MIT", "dependencies": { "ajv": "^8.12.0", diff --git a/package.json b/package.json index 8d77e4cf7..4fa426451 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-config-schema", - "version": "1.67.1", + "version": "1.68.0", "description": "", "main": "src/index.ts", "private": true, diff --git a/src/configurations/destinations/adj/db-config.json b/src/configurations/destinations/adj/db-config.json index 6104286c5..70fe31711 100644 --- a/src/configurations/destinations/adj/db-config.json +++ b/src/configurations/destinations/adj/db-config.json @@ -60,6 +60,6 @@ "flutter": ["useNativeSDK"], "unity": ["useNativeSDK"] }, - "secretKeys": [] + "secretKeys": ["appToken"] } } diff --git a/src/configurations/destinations/af/db-config.json b/src/configurations/destinations/af/db-config.json index cb558637a..0cf2a966c 100644 --- a/src/configurations/destinations/af/db-config.json +++ b/src/configurations/destinations/af/db-config.json @@ -68,6 +68,6 @@ "flutter": ["useNativeSDK"], "cordova": ["useNativeSDK"] }, - "secretKeys": [] + "secretKeys": ["apiToken"] } } diff --git a/src/configurations/destinations/airship/db-config.json b/src/configurations/destinations/airship/db-config.json index 61c3fa60d..87e215525 100644 --- a/src/configurations/destinations/airship/db-config.json +++ b/src/configurations/destinations/airship/db-config.json @@ -36,6 +36,6 @@ "destConfig": { "defaultConfig": ["apiKey", "appKey", "dataCenter", "oneTrustCookieCategories"] }, - "secretKeys": ["apiKey"] + "secretKeys": ["apiKey", "appKey"] } } diff --git a/src/configurations/destinations/autopilot/db-config.json b/src/configurations/destinations/autopilot/db-config.json index dc46df67a..d6ac795a6 100644 --- a/src/configurations/destinations/autopilot/db-config.json +++ b/src/configurations/destinations/autopilot/db-config.json @@ -50,6 +50,6 @@ "cloud": ["connectionMode"], "warehouse": ["connectionMode"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/azure_synapse/db-config.json b/src/configurations/destinations/azure_synapse/db-config.json index afbe3da1c..a59d0e50b 100644 --- a/src/configurations/destinations/azure_synapse/db-config.json +++ b/src/configurations/destinations/azure_synapse/db-config.json @@ -33,6 +33,7 @@ "bucketName", "iamRoleARN", "roleBasedAuth", + "preferAppend", "accessKeyID", "accessKey", "accountName", diff --git a/src/configurations/destinations/azure_synapse/schema.json b/src/configurations/destinations/azure_synapse/schema.json index 69f765abc..72de52255 100644 --- a/src/configurations/destinations/azure_synapse/schema.json +++ b/src/configurations/destinations/azure_synapse/schema.json @@ -44,7 +44,7 @@ "syncFrequency": { "type": "string", "pattern": "^(30|60|180|360|720|1440)$", - "default": "30" + "default": "180" }, "syncStartAt": { "type": "string" @@ -65,6 +65,10 @@ "type": "boolean", "default": false }, + "preferAppend": { + "type": "boolean", + "default": true + }, "bucketProvider": { "type": "string", "pattern": "^(S3|GCS|AZURE_BLOB|MINIO)$" diff --git a/src/configurations/destinations/azure_synapse/ui-config.json b/src/configurations/destinations/azure_synapse/ui-config.json index 8d1cb94c5..15d3516d8 100644 --- a/src/configurations/destinations/azure_synapse/ui-config.json +++ b/src/configurations/destinations/azure_synapse/ui-config.json @@ -113,8 +113,8 @@ } ], "defaultOption": { - "name": "Every 30 minutes", - "value": "30" + "name": "Every 3 hours", + "value": "180" }, "required": false }, @@ -543,6 +543,18 @@ } ] }, + { + "title": "Advanced Settings", + "fields": [ + { + "type": "checkbox", + "label": "Warehouse De-dupe", + "value": "preferAppend", + "footerNote": "Disable this toggle to move from Append to Merge operation. Switching from Append to Merge ensures 100% non-duplicate data, but would increase warehouse operations time significantly", + "default": true + } + ] + }, { "title": "Consent Settings", "fields": [ diff --git a/src/configurations/destinations/bq/schema.json b/src/configurations/destinations/bq/schema.json index 9722fbb7d..3057fb7fe 100644 --- a/src/configurations/destinations/bq/schema.json +++ b/src/configurations/destinations/bq/schema.json @@ -31,7 +31,7 @@ "syncFrequency": { "type": "string", "pattern": "^(30|60|180|360|720|1440)$", - "default": "30" + "default": "180" }, "syncStartAt": { "type": "string" diff --git a/src/configurations/destinations/bq/ui-config.json b/src/configurations/destinations/bq/ui-config.json index 414239bcb..e1933dd00 100644 --- a/src/configurations/destinations/bq/ui-config.json +++ b/src/configurations/destinations/bq/ui-config.json @@ -97,8 +97,8 @@ } ], "defaultOption": { - "name": "Every 30 minutes", - "value": "30" + "name": "Every 3 hours", + "value": "180" }, "required": false }, @@ -131,7 +131,12 @@ }, "required": false, "footerNote": "Note: Please specify time in UTC" - }, + } + ] + }, + { + "title": "Advanced Settings", + "fields": [ { "type": "textInput", "label": "JSON columns (Optional)", diff --git a/src/configurations/destinations/braze/db-config.json b/src/configurations/destinations/braze/db-config.json index 4fd489056..f9e01489b 100644 --- a/src/configurations/destinations/braze/db-config.json +++ b/src/configurations/destinations/braze/db-config.json @@ -89,6 +89,6 @@ "allowUserSuppliedJavascript" ] }, - "secretKeys": ["restApiKey"] + "secretKeys": ["restApiKey", "appKey"] } } diff --git a/src/configurations/destinations/clevertap/db-config.json b/src/configurations/destinations/clevertap/db-config.json index 5f9e9dd20..b72924bee 100644 --- a/src/configurations/destinations/clevertap/db-config.json +++ b/src/configurations/destinations/clevertap/db-config.json @@ -66,6 +66,6 @@ "ios": ["useNativeSDK"], "reactnative": ["useNativeSDK"] }, - "secretKeys": ["passcode"] + "secretKeys": ["passcode", "accountToken"] } } diff --git a/src/configurations/destinations/clickhouse/db-config.json b/src/configurations/destinations/clickhouse/db-config.json index 6ae329647..b278be980 100644 --- a/src/configurations/destinations/clickhouse/db-config.json +++ b/src/configurations/destinations/clickhouse/db-config.json @@ -40,6 +40,7 @@ "sasToken", "accountName", "credentials", + "preferAppend", "secretAccessKey", "useSSL", "endPoint", diff --git a/src/configurations/destinations/clickhouse/schema.json b/src/configurations/destinations/clickhouse/schema.json index 24afaac57..b51ec584f 100644 --- a/src/configurations/destinations/clickhouse/schema.json +++ b/src/configurations/destinations/clickhouse/schema.json @@ -32,6 +32,10 @@ "type": "boolean", "default": false }, + "preferAppend": { + "type": "boolean", + "default": true + }, "skipVerify": { "type": "boolean" }, @@ -42,7 +46,7 @@ "syncFrequency": { "type": "string", "pattern": "^(30|60|180|360|720|1440)$", - "default": "30" + "default": "180" }, "syncStartAt": { "type": "string" diff --git a/src/configurations/destinations/clickhouse/ui-config.json b/src/configurations/destinations/clickhouse/ui-config.json index da04588de..1c902f3a2 100644 --- a/src/configurations/destinations/clickhouse/ui-config.json +++ b/src/configurations/destinations/clickhouse/ui-config.json @@ -121,8 +121,8 @@ } ], "defaultOption": { - "name": "Every 30 minutes", - "value": "30" + "name": "Every 3 hours", + "value": "180" }, "required": false }, @@ -552,6 +552,18 @@ } ] }, + { + "title": "Advanced Settings", + "fields": [ + { + "type": "checkbox", + "label": "Warehouse De-dupe", + "value": "preferAppend", + "footerNote": "Disable this toggle to move from Append to Merge operation. Switching from Append to Merge ensures 100% non-duplicate data, but would increase warehouse operations time significantly", + "default": true + } + ] + }, { "title": "Consent Settings", "fields": [ diff --git a/src/configurations/destinations/confluent_cloud/db-config.json b/src/configurations/destinations/confluent_cloud/db-config.json index 7d53c8040..18c3cc399 100644 --- a/src/configurations/destinations/confluent_cloud/db-config.json +++ b/src/configurations/destinations/confluent_cloud/db-config.json @@ -39,6 +39,6 @@ "oneTrustCookieCategories" ] }, - "secretKeys": ["apiSecret"] + "secretKeys": ["apiSecret", "apiKey"] } } diff --git a/src/configurations/destinations/courier/db-config.json b/src/configurations/destinations/courier/db-config.json index 3f6b00630..7deb28bab 100644 --- a/src/configurations/destinations/courier/db-config.json +++ b/src/configurations/destinations/courier/db-config.json @@ -36,7 +36,7 @@ "destConfig": { "defaultConfig": ["apiKey", "oneTrustCookieCategories"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] }, "options": { "isBeta": false diff --git a/src/configurations/destinations/custify/db-config.json b/src/configurations/destinations/custify/db-config.json index 85eee2705..c48da5a4e 100644 --- a/src/configurations/destinations/custify/db-config.json +++ b/src/configurations/destinations/custify/db-config.json @@ -48,6 +48,7 @@ "shopify": ["connectionMode"], "cloud": ["connectionMode"], "warehouse": ["connectionMode"] - } + }, + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/customerio/db-config.json b/src/configurations/destinations/customerio/db-config.json index b1c18266a..4942f6275 100644 --- a/src/configurations/destinations/customerio/db-config.json +++ b/src/configurations/destinations/customerio/db-config.json @@ -72,6 +72,6 @@ "cordova": ["consentManagement"], "shopify": ["consentManagement"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/customerio/ui-config.json b/src/configurations/destinations/customerio/ui-config.json index d1b515603..445c6edb3 100644 --- a/src/configurations/destinations/customerio/ui-config.json +++ b/src/configurations/destinations/customerio/ui-config.json @@ -18,6 +18,7 @@ "configKey": "apiKey", "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", "regexErrorMessage": "Invalid Api Key", + "secret": true, "placeholder": "e.g: ABCDEFG", "note": "Enter your Customer.io API Key" }, diff --git a/src/configurations/destinations/deltalake/db-config.json b/src/configurations/destinations/deltalake/db-config.json index a67fcb49a..0e38114ac 100644 --- a/src/configurations/destinations/deltalake/db-config.json +++ b/src/configurations/destinations/deltalake/db-config.json @@ -33,6 +33,7 @@ "containerName", "prefix", "useSTSTokens", + "preferAppend", "iamRoleARN", "roleBasedAuth", "accessKeyID", diff --git a/src/configurations/destinations/deltalake/schema.json b/src/configurations/destinations/deltalake/schema.json index 4d04b7cd3..b1585c59b 100644 --- a/src/configurations/destinations/deltalake/schema.json +++ b/src/configurations/destinations/deltalake/schema.json @@ -64,6 +64,10 @@ "type": "boolean", "default": false }, + "preferAppend": { + "type": "boolean", + "default": true + }, "oneTrustCookieCategories": { "type": "array", "items": { diff --git a/src/configurations/destinations/deltalake/ui-config.json b/src/configurations/destinations/deltalake/ui-config.json index d451d0a69..f050d9ddf 100644 --- a/src/configurations/destinations/deltalake/ui-config.json +++ b/src/configurations/destinations/deltalake/ui-config.json @@ -518,6 +518,18 @@ } ] }, + { + "title": "Advanced Settings", + "fields": [ + { + "type": "checkbox", + "label": "Warehouse De-dupe", + "value": "preferAppend", + "footerNote": "Disable this toggle to move from Append to Merge operation. Switching from Append to Merge ensures 100% non-duplicate data, but would increase warehouse operations time significantly", + "default": true + } + ] + }, { "title": "Consent Settings", "fields": [ diff --git a/src/configurations/destinations/dynamic_yield/db-config.json b/src/configurations/destinations/dynamic_yield/db-config.json index 17ff16291..0d7f2a782 100644 --- a/src/configurations/destinations/dynamic_yield/db-config.json +++ b/src/configurations/destinations/dynamic_yield/db-config.json @@ -50,7 +50,7 @@ "cloud": ["connectionMode"], "warehouse": ["connectionMode"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] }, "options": { "hidden": false diff --git a/src/configurations/destinations/dynamic_yield/ui-config.json b/src/configurations/destinations/dynamic_yield/ui-config.json index 4a20ac56f..627da21f0 100644 --- a/src/configurations/destinations/dynamic_yield/ui-config.json +++ b/src/configurations/destinations/dynamic_yield/ui-config.json @@ -20,7 +20,7 @@ "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", "regexErrorMessage": "Invalid API Key", "placeholder": "e.g: QuIUHRjXXXG2L7eZDZiPQU", - "secret": false + "secret": true } ] } diff --git a/src/configurations/destinations/facebook_pixel/db-config.json b/src/configurations/destinations/facebook_pixel/db-config.json index b299fcd8e..5556f617f 100644 --- a/src/configurations/destinations/facebook_pixel/db-config.json +++ b/src/configurations/destinations/facebook_pixel/db-config.json @@ -85,6 +85,6 @@ "cordova": ["consentManagement"], "shopify": ["consentManagement"] }, - "secretKeys": [] + "secretKeys": ["accessToken"] } } diff --git a/src/configurations/destinations/freshmarketer/db-config.json b/src/configurations/destinations/freshmarketer/db-config.json index 1d3b48ce2..65560e8ed 100644 --- a/src/configurations/destinations/freshmarketer/db-config.json +++ b/src/configurations/destinations/freshmarketer/db-config.json @@ -40,6 +40,7 @@ "rudderEventsToFreshmarketerEvents", "oneTrustCookieCategories" ] - } + }, + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/freshsales/db-config.json b/src/configurations/destinations/freshsales/db-config.json index a23a997e9..7499f6d74 100644 --- a/src/configurations/destinations/freshsales/db-config.json +++ b/src/configurations/destinations/freshsales/db-config.json @@ -40,6 +40,7 @@ "rudderEventsToFreshsalesEvents", "oneTrustCookieCategories" ] - } + }, + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/fullstory/ui-config.json b/src/configurations/destinations/fullstory/ui-config.json index 74ed02e8d..fe2553181 100644 --- a/src/configurations/destinations/fullstory/ui-config.json +++ b/src/configurations/destinations/fullstory/ui-config.json @@ -20,6 +20,7 @@ "regex": "^(.{0,200})$", "regexErrorMessage": "Invalid Api Key", "placeholder": "e.g: na1.XQdLJo0...", + "secret": true, "preRequisites": { "fields": [ { diff --git a/src/configurations/destinations/gcs_datalake/db-config.json b/src/configurations/destinations/gcs_datalake/db-config.json index 83f36d284..114310c36 100644 --- a/src/configurations/destinations/gcs_datalake/db-config.json +++ b/src/configurations/destinations/gcs_datalake/db-config.json @@ -44,6 +44,6 @@ "oneTrustCookieCategories" ] }, - "secretKeys": [] + "secretKeys": ["credentials"] } } diff --git a/src/configurations/destinations/hs/db-config.json b/src/configurations/destinations/hs/db-config.json index bd9d07caa..60042b5fd 100644 --- a/src/configurations/destinations/hs/db-config.json +++ b/src/configurations/destinations/hs/db-config.json @@ -77,6 +77,6 @@ "cordova": ["consentManagement"], "shopify": ["consentManagement"] }, - "secretKeys": [] + "secretKeys": ["apiKey", "accessToken"] } } diff --git a/src/configurations/destinations/hs/ui-config.json b/src/configurations/destinations/hs/ui-config.json index 635ea2fed..72e88f7ae 100644 --- a/src/configurations/destinations/hs/ui-config.json +++ b/src/configurations/destinations/hs/ui-config.json @@ -36,6 +36,7 @@ "regexErrorMessage": "Invalid API Key", "placeholder": "e.g: 05aXa518-XXXX-XXXX-XXXX-de0f68X902f7", "note": "Your API Key (Settings -> Integrations -> API Key)", + "secret": true, "preRequisites": { "fields": [ { @@ -53,6 +54,7 @@ "regexErrorMessage": "Invalid Access Token", "placeholder": "e.g: pat-eu1-kjg875ya-XXXX-XXXX-XXXX-628XXht847r9", "note": "Your private app access token", + "secret": true, "preRequisites": { "fields": [ { diff --git a/src/configurations/destinations/indicative/db-config.json b/src/configurations/destinations/indicative/db-config.json index 2a6f7bfea..5e13a9153 100644 --- a/src/configurations/destinations/indicative/db-config.json +++ b/src/configurations/destinations/indicative/db-config.json @@ -36,6 +36,6 @@ "destConfig": { "defaultConfig": ["apiKey", "oneTrustCookieCategories"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/intercom/db-config.json b/src/configurations/destinations/intercom/db-config.json index 1bc42b2a7..94d52c58f 100644 --- a/src/configurations/destinations/intercom/db-config.json +++ b/src/configurations/destinations/intercom/db-config.json @@ -66,6 +66,6 @@ "ios": ["useNativeSDK", "connectionMode", "mobileApiKeyIOS"], "web": ["useNativeSDK", "connectionMode"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/intercom/ui-config.json b/src/configurations/destinations/intercom/ui-config.json index 37b51d543..2237511e4 100644 --- a/src/configurations/destinations/intercom/ui-config.json +++ b/src/configurations/destinations/intercom/ui-config.json @@ -19,6 +19,7 @@ "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", "regexErrorMessage": "Invalid Access Token", "placeholder": "e.g: FGHrOjU4ZDc0MjEyXzhjYmNfNDZmYl85ODUxX2RjZDk0Mzk1M2VlMDoxOjA=", + "secret": true, "preRequisites": { "fields": [ { diff --git a/src/configurations/destinations/iterable/db-config.json b/src/configurations/destinations/iterable/db-config.json index 7ace136fd..13c4f7b48 100644 --- a/src/configurations/destinations/iterable/db-config.json +++ b/src/configurations/destinations/iterable/db-config.json @@ -98,6 +98,6 @@ "connectionMode" ] }, - "secretKeys": [] + "secretKeys": ["apiKey", "registerDeviceOrBrowserApiKey"] } } diff --git a/src/configurations/destinations/iterable/ui-config.json b/src/configurations/destinations/iterable/ui-config.json index 4e1dff1ee..d818a9464 100644 --- a/src/configurations/destinations/iterable/ui-config.json +++ b/src/configurations/destinations/iterable/ui-config.json @@ -18,7 +18,8 @@ "configKey": "apiKey", "regex": "^(.{1,100})$", "regexErrorMessage": "Invalid Iterable Api Key", - "placeholder": "e.g: 42f1873107050XXXX4bd0bd694905664ae" + "placeholder": "e.g: 42f1873107050XXXX4bd0bd694905664ae", + "secret": true }, { "type": "textInput", @@ -151,7 +152,8 @@ "placeholder": "e.g: 42f18731070501XXXX4bd0bd694905664ae", "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" + "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", + "secret": true }, { "preRequisites": { diff --git a/src/configurations/destinations/kissmetrics/db-config.json b/src/configurations/destinations/kissmetrics/db-config.json index 1aa74c3f5..f9d7bf0fb 100644 --- a/src/configurations/destinations/kissmetrics/db-config.json +++ b/src/configurations/destinations/kissmetrics/db-config.json @@ -54,6 +54,6 @@ ], "web": ["useNativeSDK"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/koala/db-config.json b/src/configurations/destinations/koala/db-config.json new file mode 100644 index 000000000..736969895 --- /dev/null +++ b/src/configurations/destinations/koala/db-config.json @@ -0,0 +1,44 @@ +{ + "name": "KOALA", + "displayName": "Koala", + "config": { + "cdkV2Enabled": true, + "transformAtV1": "router", + "saveDestinationResponse": true, + "supportedSourceTypes": [ + "android", + "ios", + "web", + "unity", + "amp", + "cloud", + "warehouse", + "reactnative", + "flutter", + "cordova", + "shopify" + ], + "supportedMessageTypes": { + "cloud": ["identify", "track"] + }, + "supportedConnectionModes": { + "android": ["cloud"], + "ios": ["cloud"], + "web": ["cloud"], + "unity": ["cloud"], + "amp": ["cloud"], + "cloud": ["cloud"], + "warehouse": ["cloud"], + "reactnative": ["cloud"], + "flutter": ["cloud"], + "cordova": ["cloud"], + "shopify": ["cloud"] + }, + "destConfig": { + "defaultConfig": ["publicKey", "oneTrustCookieCategories"] + } + }, + "options": { + "isBeta": true + } +} diff --git a/src/configurations/destinations/koala/schema.json b/src/configurations/destinations/koala/schema.json new file mode 100644 index 000000000..cb79d2d80 --- /dev/null +++ b/src/configurations/destinations/koala/schema.json @@ -0,0 +1,74 @@ +{ + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "required": ["publicKey"], + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "oneTrustCookieCategories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "oneTrustCookieCategory": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "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"] + }, + "cloud": { + "type": "string", + "enum": ["cloud"] + }, + "warehouse": { + "type": "string", + "enum": ["cloud"] + }, + "reactnative": { + "type": "string", + "enum": ["cloud"] + }, + "flutter": { + "type": "string", + "enum": ["cloud"] + }, + "cordova": { + "type": "string", + "enum": ["cloud"] + }, + "shopify": { + "type": "string", + "enum": ["cloud"] + } + } + } + } + } +} diff --git a/src/configurations/destinations/koala/ui-config.json b/src/configurations/destinations/koala/ui-config.json new file mode 100644 index 000000000..c8cd1ba23 --- /dev/null +++ b/src/configurations/destinations/koala/ui-config.json @@ -0,0 +1,92 @@ +{ + "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": "Public Key", + "note": "Public key from koala's workspace", + "configKey": "publicKey", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Public Key", + "placeholder": "e.g. pk_xxxxxx" + } + ] + } + ] + }, + { + "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": "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/kochava/db-config.json b/src/configurations/destinations/kochava/db-config.json index 0bfc67262..002eb9b65 100644 --- a/src/configurations/destinations/kochava/db-config.json +++ b/src/configurations/destinations/kochava/db-config.json @@ -52,6 +52,6 @@ "flutter": ["useNativeSDK", "appTrackingTransparency", "skAdNetwork"], "ios": ["useNativeSDK", "appTrackingTransparency", "skAdNetwork"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/lytics/db-config.json b/src/configurations/destinations/lytics/db-config.json index 1f3235292..af21d390b 100644 --- a/src/configurations/destinations/lytics/db-config.json +++ b/src/configurations/destinations/lytics/db-config.json @@ -57,6 +57,6 @@ ], "web": ["useNativeSDK", "accountId", "blockload", "loadid"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/mailchimp/db-config.json b/src/configurations/destinations/mailchimp/db-config.json index 4eefa4331..1245ca497 100644 --- a/src/configurations/destinations/mailchimp/db-config.json +++ b/src/configurations/destinations/mailchimp/db-config.json @@ -44,6 +44,6 @@ "oneTrustCookieCategories" ] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/marketo/ui-config.json b/src/configurations/destinations/marketo/ui-config.json index 66fc746c5..8dd8fac75 100644 --- a/src/configurations/destinations/marketo/ui-config.json +++ b/src/configurations/destinations/marketo/ui-config.json @@ -18,7 +18,7 @@ "configKey": "accountId", "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", "regexErrorMessage": "Invalid Munchkin Account Id", - "note": "Your Marketo Accound ID from Admin settings section", + "note": "Your Marketo Account ID from Admin settings section", "placeholder": "e.g: 5X5-AXP-4X6" }, { diff --git a/src/configurations/destinations/marketo_bulk_upload/ui-config.json b/src/configurations/destinations/marketo_bulk_upload/ui-config.json index 9dff48ff1..e99e2e92e 100644 --- a/src/configurations/destinations/marketo_bulk_upload/ui-config.json +++ b/src/configurations/destinations/marketo_bulk_upload/ui-config.json @@ -10,7 +10,7 @@ "regex": "^(.{0,100})$", "regexErrorMessage": "Invalid Munchkin Account Id", "required": true, - "footerNote": "Your Marketo Accound ID from Admin settings section", + "footerNote": "Your Marketo Account ID from Admin settings section", "placeholder": "e.g: 5X5-AXP-4X6" }, { diff --git a/src/configurations/destinations/marketo_static_list/ui-config.json b/src/configurations/destinations/marketo_static_list/ui-config.json index d683bd733..c0ab0ba1d 100644 --- a/src/configurations/destinations/marketo_static_list/ui-config.json +++ b/src/configurations/destinations/marketo_static_list/ui-config.json @@ -11,7 +11,7 @@ "regexErrorMessage": "Invalid Munchkin Account Id", "secret": true, "required": true, - "footerNote": "Your Marketo Accound ID from Admin settings section", + "footerNote": "Your Marketo Account ID from Admin settings section", "placeholder": "e.g: 5X5-AXP-4X6" }, { diff --git a/src/configurations/destinations/mautic/db-config.json b/src/configurations/destinations/mautic/db-config.json index e7b6c08df..875bd24f7 100644 --- a/src/configurations/destinations/mautic/db-config.json +++ b/src/configurations/destinations/mautic/db-config.json @@ -51,6 +51,7 @@ "domainMethod", "oneTrustCookieCategories" ] - } + }, + "secretKeys": ["password"] } } diff --git a/src/configurations/destinations/movable_ink/db-config.json b/src/configurations/destinations/movable_ink/db-config.json new file mode 100644 index 000000000..daabcae2c --- /dev/null +++ b/src/configurations/destinations/movable_ink/db-config.json @@ -0,0 +1,45 @@ +{ + "name": "MOVABLE_INK", + "displayName": "Movable Ink", + "config": { + "cdkV2Enabled": true, + "transformAtV1": "router", + "saveDestinationResponse": true, + "supportedSourceTypes": [ + "android", + "ios", + "web", + "unity", + "amp", + "cloud", + "warehouse", + "reactnative", + "flutter", + "cordova", + "shopify" + ], + "supportedMessageTypes": { + "cloud": ["identify", "track"] + }, + "supportedConnectionModes": { + "android": ["cloud"], + "ios": ["cloud"], + "web": ["cloud"], + "unity": ["cloud"], + "amp": ["cloud"], + "cloud": ["cloud"], + "warehouse": ["cloud"], + "reactnative": ["cloud"], + "flutter": ["cloud"], + "cordova": ["cloud"], + "shopify": ["cloud"] + }, + "destConfig": { + "defaultConfig": ["endpoint", "accessKey", "accessSecret", "oneTrustCookieCategories"] + }, + "secretKeys": ["accessKey", "accessSecret"] + }, + "options": { + "isBeta": true + } +} diff --git a/src/configurations/destinations/movable_ink/schema.json b/src/configurations/destinations/movable_ink/schema.json new file mode 100644 index 000000000..0b1410f2f --- /dev/null +++ b/src/configurations/destinations/movable_ink/schema.json @@ -0,0 +1,82 @@ +{ + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "required": ["endpoint", "accessKey", "accessSecret"], + "type": "object", + "properties": { + "endpoint": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$|^$" + }, + "accessKey": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "accessSecret": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "oneTrustCookieCategories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "oneTrustCookieCategory": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + }, + "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"] + }, + "cloud": { + "type": "string", + "enum": ["cloud"] + }, + "warehouse": { + "type": "string", + "enum": ["cloud"] + }, + "reactnative": { + "type": "string", + "enum": ["cloud"] + }, + "flutter": { + "type": "string", + "enum": ["cloud"] + }, + "cordova": { + "type": "string", + "enum": ["cloud"] + }, + "shopify": { + "type": "string", + "enum": ["cloud"] + } + } + } + } + } +} diff --git a/src/configurations/destinations/movable_ink/ui-config.json b/src/configurations/destinations/movable_ink/ui-config.json new file mode 100644 index 000000000..de9512f0b --- /dev/null +++ b/src/configurations/destinations/movable_ink/ui-config.json @@ -0,0 +1,112 @@ +{ + "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": "Endpoint", + "note": "The Movable Ink Endpoint to which data will be sent", + "configKey": "endpoint", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$|^$", + "regexErrorMessage": "Invalid Endpoint", + "placeholder": "e.g: https://collector.movableink-dmz.com/behavioral/12***" + }, + { + "type": "textInput", + "label": "Access Key", + "note": "Your Movable Ink Access Key", + "configKey": "accessKey", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Access Key", + "secret": true, + "placeholder": "e.g: MIAK***UQI**" + }, + { + "type": "textInput", + "label": "Access Secret", + "note": "Your Movable Ink Access Secret", + "configKey": "accessSecret", + "secret": true, + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Access Secret", + "placeholder": "e.g: Dh97o***pA2**" + } + ] + } + ] + }, + { + "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": "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/mp/db-config.json b/src/configurations/destinations/mp/db-config.json index 20fd6ff0e..6cd5b7f19 100644 --- a/src/configurations/destinations/mp/db-config.json +++ b/src/configurations/destinations/mp/db-config.json @@ -122,6 +122,6 @@ "shopify": ["consentManagement"], "warehouse": ["consentManagement"] }, - "secretKeys": ["token", "gdprApiToken"] + "secretKeys": ["token", "gdprApiToken", "apiSecret"] } } diff --git a/src/configurations/destinations/mssql/db-config.json b/src/configurations/destinations/mssql/db-config.json index f626f00d6..262caf161 100644 --- a/src/configurations/destinations/mssql/db-config.json +++ b/src/configurations/destinations/mssql/db-config.json @@ -50,6 +50,7 @@ "accountKey", "useSASTokens", "sasToken", + "preferAppend", "credentials", "secretAccessKey", "useSSL", diff --git a/src/configurations/destinations/mssql/schema.json b/src/configurations/destinations/mssql/schema.json index 448e97a31..446e52ec1 100644 --- a/src/configurations/destinations/mssql/schema.json +++ b/src/configurations/destinations/mssql/schema.json @@ -36,7 +36,7 @@ "syncFrequency": { "type": "string", "enum": ["30", "60", "180", "360", "720", "1440"], - "default": "30" + "default": "180" }, "syncStartAt": { "type": "string" @@ -57,6 +57,10 @@ "type": "boolean", "default": false }, + "preferAppend": { + "type": "boolean", + "default": true + }, "oneTrustCookieCategories": { "type": "array", "items": { diff --git a/src/configurations/destinations/mssql/ui-config.json b/src/configurations/destinations/mssql/ui-config.json index 6e265980a..747fbc669 100644 --- a/src/configurations/destinations/mssql/ui-config.json +++ b/src/configurations/destinations/mssql/ui-config.json @@ -113,8 +113,8 @@ } ], "defaultOption": { - "name": "Every 30 minutes", - "value": "30" + "name": "Every 3 hours", + "value": "180" }, "required": false }, @@ -543,6 +543,18 @@ } ] }, + { + "title": "Advanced Settings", + "fields": [ + { + "type": "checkbox", + "label": "Warehouse De-dupe", + "value": "preferAppend", + "footerNote": "Disable this toggle to move from Append to Merge operation. Switching from Append to Merge ensures 100% non-duplicate data, but would increase warehouse operations time significantly", + "default": true + } + ] + }, { "title": "Consent Settings", "fields": [ diff --git a/src/configurations/destinations/ninetailed/schema.json b/src/configurations/destinations/ninetailed/schema.json index 39b02447a..37ac0b57c 100644 --- a/src/configurations/destinations/ninetailed/schema.json +++ b/src/configurations/destinations/ninetailed/schema.json @@ -5,9 +5,7 @@ "type": "object", "properties": { "environment": { - "type": "string", - "enum": ["main", "dev"], - "default": "main" + "type": "string" }, "eventFilteringOption": { "type": "string", diff --git a/src/configurations/destinations/ninetailed/ui-config.json b/src/configurations/destinations/ninetailed/ui-config.json index 471edebd3..5753d807b 100644 --- a/src/configurations/destinations/ninetailed/ui-config.json +++ b/src/configurations/destinations/ninetailed/ui-config.json @@ -68,19 +68,10 @@ "title": "Optional configuration settings", "fields": [ { - "type": "singleSelect", + "type": "textInput", "label": "Environment slug", "configKey": "environment", - "options": [ - { - "label": "Main", - "value": "main" - }, - { - "label": "dev", - "value": "dev" - } - ], + "placeholder": "main", "default": "main" } ] diff --git a/src/configurations/destinations/one_signal/db-config.json b/src/configurations/destinations/one_signal/db-config.json index 69565f1b2..ee24f831f 100644 --- a/src/configurations/destinations/one_signal/db-config.json +++ b/src/configurations/destinations/one_signal/db-config.json @@ -56,6 +56,6 @@ "cloud": ["connectionMode"], "warehouse": ["connectionMode"] }, - "secretKeys": [] + "secretKeys": ["appId"] } } diff --git a/src/configurations/destinations/pendo/db-config.json b/src/configurations/destinations/pendo/db-config.json index 7c2669e3c..8f48dd48e 100644 --- a/src/configurations/destinations/pendo/db-config.json +++ b/src/configurations/destinations/pendo/db-config.json @@ -31,6 +31,6 @@ ], "web": ["useNativeSDK"] }, - "secretKeys": [] + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/postgres/db-config.json b/src/configurations/destinations/postgres/db-config.json index 9bd4e9f09..8941ccb2e 100644 --- a/src/configurations/destinations/postgres/db-config.json +++ b/src/configurations/destinations/postgres/db-config.json @@ -45,6 +45,7 @@ "sshHost", "sshPort", "sshUser", + "preferAppend", "sshPublicKey", "sslMode", "bucketProvider", @@ -81,7 +82,6 @@ "sasToken", "secretAccessKey", "credentials" - ], - "immutableKeys": ["namespace"] + ] } } diff --git a/src/configurations/destinations/postgres/schema.json b/src/configurations/destinations/postgres/schema.json index e8a85c5fa..ad0318abf 100644 --- a/src/configurations/destinations/postgres/schema.json +++ b/src/configurations/destinations/postgres/schema.json @@ -44,7 +44,7 @@ "syncFrequency": { "type": "string", "pattern": "^(30|60|180|360|720|1440)$", - "default": "30" + "default": "180" }, "syncStartAt": { "type": "string" @@ -69,6 +69,10 @@ "type": "boolean", "default": false }, + "preferAppend": { + "type": "boolean", + "default": true + }, "bucketProvider": { "type": "string", "pattern": "^(S3|GCS|AZURE_BLOB|MINIO)$" diff --git a/src/configurations/destinations/postgres/ui-config.json b/src/configurations/destinations/postgres/ui-config.json index 3441b31da..96228f0ab 100644 --- a/src/configurations/destinations/postgres/ui-config.json +++ b/src/configurations/destinations/postgres/ui-config.json @@ -1,802 +1,626 @@ { - "uiConfig": { - "baseTemplate": [ - { - "title": "Initial Setup", - "note": "Review how this destination is set up", - "sections": [ - { - "title": "Connection settings", - "note": "Configure connection settings here", - "icon": "otherSettings", - "groups": [ - { - "title": "Connection Credentials", - "note": "Update your connection credentials here", - "fields": [ - { - "type": "textInput", - "label": "Host", - "configKey": "host", - "regex": "(?!.*.ngrok.io)^(.{0,100})$", - "regexErrorMessage": "Invalid Host", - "placeholder": "e.g: psql.mydomain.com", - "secret": false - }, - { - "type": "textInput", - "label": "Database", - "configKey": "database", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid Database", - "placeholder": "e.g: rudderdb", - "secret": false - }, - { - "type": "textInput", - "label": "User", - "configKey": "user", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid User", - "placeholder": "e.g: rudder", - "secret": false - }, - { - "type": "textInput", - "label": "Password", - "configKey": "password", - "regex": ".*", - "placeholder": "e.g: rudder-password", - "secret": true - }, - { - "type": "textInput", - "label": "Port", - "configKey": "port", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid Port", - "placeholder": "5432", - "secret": false - } - ] - }, - { - "title": "Security Settings", - "note": "Security requirements for your warehouse", - "fields": [ - { - "type": "singleSelect", - "label": "SSL Mode", - "configKey": "sslMode", - "note": "Select the SSL Mode required", - "options": [ - { - "label": "disable", - "value": "disable" - }, - { - "label": "require", - "value": "require" - }, - { - "label": "verify ca", - "value": "verify-ca" - } - ], - "default": "disable" - }, - { - "type": "textInput", - "label": "Client Key Pem File", - "configKey": "clientKey", - "regex": "-----BEGIN RSA PRIVATE KEY-----.*-----END RSA PRIVATE KEY-----", - "regexErrorMessage": "Invalid Client Key Pem File", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "sslMode", - "value": "verify-ca" - } - ] - } - }, - { - "type": "textInput", - "label": "Client Cert Pem File", - "configKey": "clientCert", - "regex": "-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----", - "regexErrorMessage": "Invalid Client Cert Pem File", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "sslMode", - "value": "verify-ca" - } - ] - } - }, - { - "type": "textInput", - "label": "Server CA Pem File", - "configKey": "serverCA", - "regex": "-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----", - "regexErrorMessage": "Invalid Server CA Pem File", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "sslMode", - "value": "verify-ca" - } - ] - } - }, - { - "type": "checkbox", - "label": "SSH Connection", - "configKey": "useSSH", - "note": "Activate to initiate SSH tunnel connection", - "default": false, - "preRequisites": { - "featureFlags": [ - { - "configKey": "WAREHOUSE_SSH_TUNNELLING", - "value": true - } - ] - } - }, - { - "type": "textInput", - "label": "SSH Host", - "configKey": "sshHost", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid SSH Host", - "placeholder": "e.g: www.abc.com", - "preRequisites": { - "featureFlags": [ - { - "configKey": "WAREHOUSE_SSH_TUNNELLING", - "value": true - } - ], - "fields": [ - { - "configKey": "useSSH", - "value": true - } - ] - } - }, - { - "type": "textInput", - "label": "SSH Port", - "configKey": "sshPort", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid SSH Port", - "placeholder": "e.g: 22", - "preRequisites": { - "featureFlags": [ - { - "configKey": "WAREHOUSE_SSH_TUNNELLING", - "value": true - } - ], - "fields": [ - { - "configKey": "useSSH", - "value": true - } - ] - } - }, - { - "type": "textInput", - "label": "SSH User", - "configKey": "sshUser", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid SSH User", - "placeholder": "e.g: user1", - "preRequisites": { - "featureFlags": [ - { - "configKey": "WAREHOUSE_SSH_TUNNELLING", - "value": true - } - ], - "fields": [ - { - "configKey": "useSSH", - "value": true - } - ] - } - } - ] - }, - { - "title": "Object Storage Configuration", - "note": "Update where do you want the data staged to be stored", - "fields": [ - { - "type": "checkbox", - "label": "Toggle on to use RudderStack manage storage object for staging data", - "configKey": "useRudderStorage", - "note": "All the Data is Staged in Rudderstack Managed Object Storage", - "default": false - }, - { - "type": "singleSelect", - "label": "Choose your Storage Provider", - "configKey": "bucketProvider", - "options": [ - { - "label": "S3", - "value": "S3" - }, - { - "label": "GCS", - "value": "GCS" - }, - { - "label": "AZURE_BLOB", - "value": "AZURE_BLOB" - }, - { - "label": "MINIO", - "value": "MINIO" - } - ], - "default": "MINIO", - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - } - ] - } - }, - { - "type": "textInput", - "label": "Staging GCS Object Storage Bucket Name", - "note": "GCS Bucket to store data before loading into Postgres", - "configKey": "bucketName", - "regex": "^((?!goog)(?!.*google.*)(?!^(\\d+(\\.|$)){4}$)(?!.*\\.\\..*)[a-z0-9][a-z0-9-._]{1,61}[a-z0-9])$", - "regexErrorMessage": "Invalid Staging GCS Object Storage Bucket Name", - "placeholder": "e.g: gcs-event-logs", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "GCS" - } - ] - } - }, - { - "type": "textInput", - "label": "S3 Bucket to store data before loading into Postgres", - "note": "Please make sure the bucket exists in your S3", - "configKey": "bucketName", - "regex": "^((?!^xn--)(?!.*\\.\\..*)(?!^(\\d+(\\.|$)){4}$)[a-z0-9][a-z0-9-.]{1,61}[a-z0-9])$", - "regexErrorMessage": "Invalid Staging S3 Storage Bucket Name", - "placeholder": "e.g: s3-event-logs", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "S3" - } - ] - } - }, - { - "type": "textInput", - "label": "Staging Azure Blob Storage Container Name", - "note": "Container to store data before loading into Postgres", - "configKey": "containerName", - "regex": "^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$", - "regexErrorMessage": "Invalid Staging Azure Blob Object Storage Bucket Name", - "placeholder": "e.g: azure-blob-event-logs", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "AZURE_BLOB" - } - ] - } - }, - { - "type": "textInput", - "label": "Staging MINIO Storage Bucket Name", - "note": "MINIO Bucket to store data before loading into Postgres", - "configKey": "bucketName", - "regex": "^((?!^(\\d+(\\.|$)){4}$)[a-z0-9][a-z0-9-.]{1,61}[a-z0-9])$", - "regexErrorMessage": "Invalid Staging MINIO Storage Bucket Name", - "placeholder": "e.g: minio-event-logs", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "MINIO" - } - ] - } - }, - { - "type": "checkbox", - "label": "Role Based Authentication", - "configKey": "roleBasedAuth", - "default": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "S3" - } - ] - } - }, - { - "type": "textInput", - "label": "IAM Role ARN", - "configKey": "iamRoleARN", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid Role ARN", - "placeholder": "e.g: arn:aws:iam::123456789012:role/S3Access", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "S3" - }, - { - "configKey": "roleBasedAuth", - "value": true - } - ] - } - }, - { - "type": "textInput", - "label": "AWS Access Key ID", - "configKey": "accessKeyID", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid AWS Access Key ID", - "placeholder": "e.g: access-key-id", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "S3" - }, - { - "configKey": "roleBasedAuth", - "value": false - } - ] - } - }, - { - "type": "textInput", - "label": "AWS Secret Access Key", - "configKey": "accessKey", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid AWS Secret Access Key", - "placeholder": "e.g: access-secret-key-id", - "secret": true, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "S3" - }, - { - "configKey": "roleBasedAuth", - "value": false - } - ] - } - }, - { - "type": "checkbox", - "label": "Use shared access signature (SAS) Tokens", - "note": "Use this to Grant limited access to Azure Storage resources using shared access signatures (SAS)", - "configKey": "useSASTokens", - "default": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "AZURE_BLOB" - } - ] - } - }, - { - "type": "textInput", - "label": "Azure Blob Storage Account Name", - "configKey": "accountName", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid Azure Blob Storage Account Name", - "placeholder": "e.g: account-name", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "AZURE_BLOB" - } - ] - } - }, - { - "type": "textInput", - "label": "Azure Blob Storage Account Key", - "configKey": "accountKey", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid Azure Blob Storage Account Key", - "placeholder": "e.g: account-key", - "secret": true, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "AZURE_BLOB" - }, - { - "configKey": "useSASTokens", - "value": false - } - ] - } - }, - { - "type": "textInput", - "label": "Azure Blob Storage SAS Token", - "configKey": "sasToken", - "regex": "^(.+)$", - "regexErrorMessage": "Invalid Azure Blob Storage SAS Token", - "placeholder": "e.g: sas-token", - "secret": true, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "AZURE_BLOB" - }, - { - "configKey": "useSASTokens", - "value": true - } - ] - } - }, - { - "type": "textInput", - "label": "Credentials", - "note": "GCP Service Account credentials JSON for RudderStack to use in loading data into your Google Cloud Storage", - "configKey": "credentials", - "regex": ".*", - "regexErrorMessage": "Invalid Credentials", - "placeholder": "", - "secret": true, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "GCS" - } - ] - } - }, - { - "type": "textInput", - "label": "MinIO Endpoint", - "configKey": "endPoint", - "regex": "(?!.*\\.ngrok\\.io)^(.{0,100})$", - "regexErrorMessage": "Invalid MinIO Endpoint", - "placeholder": "e.g: play.min.io:9000", - "secret": false, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "MINIO" - } - ] - } - }, - { - "type": "textInput", - "label": "MINIO Access Key ID", - "configKey": "accessKeyID", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid MinIO Access Key ID", - "placeholder": "e.g: access-key-id", - "secret": true, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "MINIO" - } - ] - } - }, - { - "type": "textInput", - "label": "MINIO Secret Access Key", - "configKey": "secretAccessKey", - "regex": "^(.{0,100})$", - "regexErrorMessage": "Invalid MinIO Secret Access Key", - "placeholder": "e.g: secret-access-key", - "secret": true, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "MINIO" - } - ] - } - }, - { - "type": "checkbox", - "label": "Use SSL for connection", - "configKey": "useSSL", - "default": true, - "preRequisites": { - "fields": [ - { - "configKey": "useRudderStorage", - "value": false - }, - { - "configKey": "bucketProvider", - "value": "MINIO" - } - ] - } - } - ] - } - ] + "uiConfig": [ + { + "title": "Connection Credentials", + "fields": [ + { + "type": "textInput", + "label": "Host", + "value": "host", + "regex": "(?!.*\\.ngrok\\.io)^(.{0,100})$", + "regexErrorMessage": "Invalid Host", + "placeholder": "e.g: psql.mydomain.com", + "required": true + }, + { + "type": "textInput", + "label": "Database", + "value": "database", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid Database", + "placeholder": "e.g: rudderdb", + "required": true + }, + { + "type": "textInput", + "label": "User", + "value": "user", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid User", + "placeholder": "e.g: rudder", + "required": true + }, + { + "type": "textInput", + "label": "Password", + "value": "password", + "placeholder": "e.g: rudder-password", + "regex": ".*", + "required": true + }, + { + "type": "textInput", + "label": "Port", + "value": "port", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid Port", + "placeholder": "5432", + "required": true + }, + { + "type": "textInput", + "label": "Namespace", + "labelNote": "Schema name for the warehouse where the tables are created", + "value": "namespace", + "regex": "^((?!pg_|PG_|pG_|Pg_).{0,64})$", + "regexErrorMessage": "Invalid Namespace", + "required": false, + "placeholder": "e.g: rudder-schema", + "footerNote": "Default will be the source name" + }, + { + "type": "singleSelect", + "label": "SSL Mode", + "value": "sslMode", + "options": [ + { + "name": "disable", + "value": "disable" + }, + { + "name": "require", + "value": "require" + }, + { + "name": "verify ca", + "value": "verify-ca" + } + ], + "defaultOption": { + "name": "disable", + "value": "disable" }, - { - "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": [] - } - ] + "required": true + }, + { + "type": "textInput", + "required": true, + "regex": "-----BEGIN RSA PRIVATE KEY-----.*-----END RSA PRIVATE KEY-----", + "preRequisiteField": { + "name": "sslMode", + "selectedValue": "verify-ca" }, - { - "groups": [ - { - "icon": "settings", - "note": "", - "title": "Namespace settings", - "callout": { - "message": "Schema name for the warehouse where the tables are created", - "type": "info" - }, - "fields": [ - { - "type": "textInput", - "label": "Namespace", - "note": "Schema name for the warehouse where the tables are created,Default will be the source name", - "configKey": "namespace", - "regex": "^((?!pg_|PG_|pG_|Pg_).{0,64})$", - "regexErrorMessage": "Invalid Namespace", - "placeholder": "e.g: rudder-schema", - "secret": false - } - ] - } - ] + "label": "Client Key Pem File", + "value": "clientKey" + }, + { + "type": "textInput", + "required": true, + "regex": "-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----", + "preRequisiteField": { + "name": "sslMode", + "selectedValue": "verify-ca" + }, + "label": "Client Cert Pem File", + "value": "clientCert" + }, + { + "type": "textInput", + "required": true, + "regex": "-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----", + "preRequisiteField": { + "name": "sslMode", + "selectedValue": "verify-ca" + }, + "label": "Server CA Pem File", + "value": "serverCA" + }, + { + "type": "singleSelect", + "label": "Sync Frequency", + "value": "syncFrequency", + "options": [ + { + "name": "Every 30 minutes", + "value": "30" + }, + { + "name": "Every 1 hour", + "value": "60" + }, + { + "name": "Every 3 hours", + "value": "180" + }, + { + "name": "Every 6 hours", + "value": "360" + }, + { + "name": "Every 12 hours", + "value": "720" + }, + { + "name": "Every 24 hours", + "value": "1440" + } + ], + "defaultOption": { + "name": "Every 3 hours", + "value": "180" + }, + "required": false + }, + { + "type": "timePicker", + "label": "Sync Starting At (Optional)", + "value": "syncStartAt", + "options": { + "omitSeconds": true, + "minuteStep": 15 + }, + "required": false, + "footerNote": "Note: Please specify time in UTC" + }, + { + "type": "timeRangePicker", + "label": "Exclude window (Optional)", + "value": "excludeWindow", + "startTime": { + "label": "start time", + "value": "excludeWindowStartTime" + }, + "endTime": { + "label": "end time", + "value": "excludeWindowEndTime" + }, + "options": { + "omitSeconds": true, + "minuteStep": 1 + }, + "required": false, + "footerNote": "Note: Please specify time in UTC" + } + ] + }, + { + "title": "Object Storage Configuration", + "fields": [ + { + "type": "checkbox", + "label": "Use RudderStack managed object storage", + "value": "useRudderStorage", + "default": false, + "footerNote": "Note: Only available for RudderStack managed data planes" + }, + { + "type": "singleSelect", + "label": "Choose your Storage Provider", + "value": "bucketProvider", + "options": [ + { + "name": "S3", + "value": "S3" + }, + { + "name": "GCS", + "value": "GCS" + }, + { + "name": "AZURE_BLOB", + "value": "AZURE_BLOB" + }, + { + "name": "MINIO", + "value": "MINIO" + } + ], + "defaultOption": { + "name": "MINIO", + "value": "MINIO" + }, + "required": true, + "preRequisiteField": { + "name": "useRudderStorage", + "selectedValue": false + } + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "S3" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Staging S3 Storage Bucket Name", + "labelNote": "S3 Bucket to store data before loading into Postgres", + "value": "bucketName", + "regex": "^((?!^xn--)(?!.*\\.\\..*)(?!^(\\d+(\\.|$)){4}$)[a-z0-9][a-z0-9-.]{1,61}[a-z0-9])$", + "regexErrorMessage": "Invalid Staging S3 Storage Bucket Name", + "placeholder": "e.g: s3-event-logs", + "required": true, + "footerNote": "Please make sure the bucket exists in your S3" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "GCS" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Staging GCS Object Storage Bucket Name", + "labelNote": "GCS Bucket to store data before loading into Postgres", + "value": "bucketName", + "regex": "^((?!goog)(?!.*google.*)(?!^(\\d+(\\.|$)){4}$)(?!.*\\.\\..*)[a-z0-9][a-z0-9-._]{1,61}[a-z0-9])$", + "regexErrorMessage": "Invalid Staging GCS Object Storage Bucket Name", + "placeholder": "e.g: gcs-event-logs", + "required": true, + "footerNote": "Please make sure the bucket exists in your GCS" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "AZURE_BLOB" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Staging Azure Blob Storage Container Name", + "labelNote": "Container to store data before loading into Postgres", + "value": "containerName", + "regex": "^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$", + "regexErrorMessage": "Invalid Staging Azure Blob Storage Container Name", + "required": true, + "placeholder": "e.g: azure-event-logs", + "footerNote": "Please make sure the container exists in your Azure Blob Storage" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "MINIO" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Staging MINIO Storage Bucket Name", + "labelNote": "MINIO Bucket to store data before loading into Postgres", + "value": "bucketName", + "regex": "^((?!^(\\d+(\\.|$)){4}$)[a-z0-9][a-z0-9-.]{1,61}[a-z0-9])$", + "regexErrorMessage": "Invalid Staging MINIO Storage Bucket Name", + "required": true, + "placeholder": "e.g: minio-event-logs", + "footerNote": "Please make sure the bucket exists in your MINIO" + }, + { + "type": "checkbox", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "S3" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Role Based Authentication", + "value": "roleBasedAuth", + "default": true + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "S3" + }, + { + "name": "useRudderStorage", + "selectedValue": false + }, + { + "name": "roleBasedAuth", + "selectedValue": true + } + ], + "label": "IAM Role ARN", + "value": "iamRoleARN", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid Role ARN", + "required": true, + "placeholder": "e.g: arn:aws:iam::12345X789012:role/S3Access", + "footerURL": { + "link": "https://www.rudderstack.com/docs/destinations/aws-iam-role-for-rudderstack/", + "text": "Instructions for creating IAM Role" } - ] - }, - { - "title": "Configuration settings", - "note": "Manage the settings for your destination", - "sections": [ - { - "title": "Other settings", - "note": "Configure advanced RudderStack features here", - "icon": "otherSettings", - "groups": [ - { - "title": "Advanced Settings", - "fields": [ - { - "type": "singleSelect", - "label": "Sync Frequency", - "configKey": "syncFrequency", - "placeholder": "e.g: Credit card visit", - "options": [ - { - "label": "Every 30 minutes", - "value": "30" - }, - { - "label": "Every 1 hour", - "value": "60" - }, - { - "label": "Every 3 hours", - "value": "180" - }, - { - "label": "Every 6 hours", - "value": "360" - }, - { - "label": "Every 12 hours", - "value": "720" - }, - { - "label": "Every 24 hours", - "value": "1440" - } - ], - "default": "180" - }, - { - "type": "textInput", - "label": "JSON columns (Optional)", - "note": "Specify required JSON properties in dot notation separated by commas", - "configKey": "jsonPaths", - "regex": "^(.*)$", - "regexErrorMessage": "Invalid Columns", - "placeholder": "e.g: testMap.nestedMap, testArray", - "secret": false - }, - { - "type": "timePicker", - "label": "Sync Starting At (Optional)", - "note": "Please specify time in UTC", - "configKey": "syncStartAt", - "options": { - "omitSeconds": true, - "minuteStep": 15 - } - }, - { - "type": "timeRangePicker", - "label": "Exclude window (Optional)", - "note": "Please specify time in UTC", - "configKey": "excludeWindow", - "startTimeLabel": "Start time", - "startTimeKey": "excludeWindowStartTime", - "endTimeLabel": "End time", - "endTimeKey": "excludeWindowEndTime", - "default": { "excludeWindowStartTime": "", "excludeWindowEndTime": "" }, - "options": { - "omitSeconds": true, - "minuteStep": 1 - } - } - ] - }, - { - "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": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "S3" + }, + { + "name": "useRudderStorage", + "selectedValue": false + }, + { + "name": "roleBasedAuth", + "selectedValue": false + } + ], + "label": "AWS Access Key ID", + "value": "accessKeyID", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid AWS Access Key ID", + "required": true, + "placeholder": "e.g: access-key-id" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "S3" + }, + { + "name": "useRudderStorage", + "selectedValue": false + }, + { + "name": "roleBasedAuth", + "selectedValue": false + } + ], + "label": "AWS Secret Access Key", + "value": "accessKey", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid AWS Secret Access Key", + "required": true, + "placeholder": "e.g: secret-access-key" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "AZURE_BLOB" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Azure Blob Storage Account Name", + "value": "accountName", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid Azure Blob Storage Account Name", + "required": true, + "placeholder": "e.g: account-name" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "AZURE_BLOB" + }, + { + "name": "useRudderStorage", + "selectedValue": false + }, + { + "name": "useSASTokens", + "selectedValue": false + } + ], + "label": "Azure Blob Storage Account Key", + "value": "accountKey", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid Azure Blob Storage Account Key", + "required": true, + "secret": true, + "placeholder": "e.g: account-key" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "AZURE_BLOB" + }, + { + "name": "useRudderStorage", + "selectedValue": false + }, + { + "name": "useSASTokens", + "selectedValue": true + } + ], + "label": "Azure Blob Storage SAS Token", + "value": "sasToken", + "regex": "^(.+)$", + "regexErrorMessage": "Invalid Azure Blob Storage SAS Token", + "required": true, + "placeholder": "e.g: sas-token", + "secret": true + }, + { + "type": "checkbox", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "AZURE_BLOB" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Use shared access signature (SAS) Tokens", + "value": "useSASTokens", + "default": false, + "footerNote": "Use this to Grant limited access to Azure Storage resources using shared access signatures (SAS)" + }, + { + "type": "textareaInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "GCS" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Credentials", + "labelNote": "GCP Service Account credentials JSON for RudderStack to use in loading data into your Google Cloud Storage", + "value": "credentials", + "regex": ".*", + "required": true, + "footerNote": "Create a service account in your GCP Project for RudderStack with roles of 'storage.objectCreator'" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "MINIO" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "MinIO Endpoint", + "value": "endPoint", + "regex": "(?!.*\\.ngrok\\.io)^(.{0,100})$", + "regexErrorMessage": "Invalid MinIO Endpoint", + "required": true, + "placeholder": "e.g: play.min.io:9000" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "MINIO" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "MINIO Access Key ID", + "value": "accessKeyID", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid MinIO Access Key ID", + "required": true, + "placeholder": "e.g: access-key-id" + }, + { + "type": "textInput", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "MINIO" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "MINIO Secret Access Key", + "value": "secretAccessKey", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid MinIO Secret Access Key", + "required": true, + "placeholder": "e.g: secret-access-key" + }, + { + "type": "checkbox", + "preRequisiteField": [ + { + "name": "bucketProvider", + "selectedValue": "MINIO" + }, + { + "name": "useRudderStorage", + "selectedValue": false + } + ], + "label": "Use SSL for connection", + "value": "useSSL", + "default": true + } + ] + }, + { + "title": "Advanced Settings", + "fields": [ + { + "type": "checkbox", + "label": "Warehouse De-dupe", + "value": "preferAppend", + "footerNote": "Disable this toggle to move from Append to Merge operation. Switching from Append to Merge ensures 100% non-duplicate data, but would increase warehouse operations time significantly", + "default": true + }, + { + "type": "textInput", + "label": "Json columns (Optional)", + "labelNote": "Specify required json properties in dot notation separated by commas", + "value": "jsonPaths", + "regex": "^(.*)$", + "placeholder": "e.g: testMap.nestedMap, testArray", + "required": false, + "footerURL": { + "link": "https://www.rudderstack.com/docs/data-warehouse-integrations/postgresql/#configuring-postgresql-destination-in-rudderstack", + "text": "Instructions for setting up the json columns" } - ] - } - ], - "sdkTemplate": { - "title": "SDK settings", - "note": "not visible in the ui", - "fields": [] + } + ] + }, + { + "title": "Consent Settings", + "fields": [ + { + "type": "dynamicCustomForm", + "value": "oneTrustCookieCategories", + "label": "OneTrust Consent Categories", + "footerNote": "The support for category names is deprecated. We recommend using the category IDs instead of the names as IDs are unique and less likely to change over time, making them a more reliable choice.", + "customFields": [ + { + "type": "textInput", + "placeholder": "C0001", + "value": "oneTrustCookieCategory", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", + "label": "Category ID", + "required": false + } + ] + } + ] } - } + ] } diff --git a/src/configurations/destinations/posthog/db-config.json b/src/configurations/destinations/posthog/db-config.json index 9f0be7eb5..7945ef39b 100644 --- a/src/configurations/destinations/posthog/db-config.json +++ b/src/configurations/destinations/posthog/db-config.json @@ -70,6 +70,6 @@ "enableLocalStoragePersistence" ] }, - "secretKeys": [] + "secretKeys": ["teamApiKey"] } } diff --git a/src/configurations/destinations/rakuten/ui-config.json b/src/configurations/destinations/rakuten/ui-config.json index 7c61c7ed5..f29a8be81 100644 --- a/src/configurations/destinations/rakuten/ui-config.json +++ b/src/configurations/destinations/rakuten/ui-config.json @@ -19,7 +19,8 @@ "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", "regexErrorMessage": "Invalid Marketing ID", "placeholder": "e.g: *3**4", - "note": "Enter your static numeric merchant ID (to identify you in the Rakuten Marketing system) provided to you by Rakuten Marketing" + "note": "Enter your static numeric merchant ID (to identify you in the Rakuten Marketing system) provided to you by Rakuten Marketing", + "secret": true } ] } diff --git a/src/configurations/destinations/refiner/db-config.json b/src/configurations/destinations/refiner/db-config.json index 6a35704ed..e5fa0b053 100644 --- a/src/configurations/destinations/refiner/db-config.json +++ b/src/configurations/destinations/refiner/db-config.json @@ -57,6 +57,7 @@ "oneTrustCookieCategories" ], "web": ["useNativeSDK"] - } + }, + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/revenue_cat/db-config.json b/src/configurations/destinations/revenue_cat/db-config.json index 087037cac..cc1823ff6 100644 --- a/src/configurations/destinations/revenue_cat/db-config.json +++ b/src/configurations/destinations/revenue_cat/db-config.json @@ -48,6 +48,7 @@ "shopify": ["connectionMode"], "cloud": ["connectionMode"], "warehouse": ["connectionMode"] - } + }, + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/rs/db-config.json b/src/configurations/destinations/rs/db-config.json index fc2d5e2c5..a5b82ddd1 100644 --- a/src/configurations/destinations/rs/db-config.json +++ b/src/configurations/destinations/rs/db-config.json @@ -53,6 +53,7 @@ "syncFrequency", "syncStartAt", "enableSSE", + "preferAppend", "excludeWindow", "jsonPaths", "useRudderStorage", diff --git a/src/configurations/destinations/rs/schema.json b/src/configurations/destinations/rs/schema.json index a222b652e..f109c757c 100644 --- a/src/configurations/destinations/rs/schema.json +++ b/src/configurations/destinations/rs/schema.json @@ -39,7 +39,7 @@ "syncFrequency": { "type": "string", "enum": ["30", "60", "180", "360", "720", "1440"], - "default": "30" + "default": "180" }, "syncStartAt": { "type": "string" @@ -64,6 +64,10 @@ "type": "boolean", "default": false }, + "preferAppend": { + "type": "boolean", + "default": true + }, "oneTrustCookieCategories": { "type": "array", "items": { diff --git a/src/configurations/destinations/rs/ui-config.json b/src/configurations/destinations/rs/ui-config.json index 4c0c86823..bf32ccf8c 100644 --- a/src/configurations/destinations/rs/ui-config.json +++ b/src/configurations/destinations/rs/ui-config.json @@ -90,8 +90,8 @@ } ], "defaultOption": { - "name": "Every 30 minutes", - "value": "30" + "name": "Every 3 hours", + "value": "180" }, "required": true }, @@ -124,19 +124,6 @@ }, "required": false, "footerNote": "Note: Please specify time in UTC" - }, - { - "type": "textInput", - "label": "JSON columns (Optional)", - "labelNote": "Specify required JSON properties in dot notation separated by commas", - "value": "jsonPaths", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.*)$", - "placeholder": "e.g: testMap.nestedMap, testArray", - "required": false, - "footerURL": { - "link": "https://www.rudderstack.com/docs/destinations/warehouse-destinations/redshift/#configuring-redshift-destination-in-rudderstack", - "text": "Instructions for setting up the JSON columns" - } } ] }, @@ -266,6 +253,31 @@ } ] }, + { + "title": "Advanced Settings", + "fields": [ + { + "type": "checkbox", + "label": "Warehouse De-dupe", + "value": "preferAppend", + "footerNote": "Disable this toggle to move from Append to Merge operation. Switching from Append to Merge ensures 100% non-duplicate data, but would increase warehouse operations time significantly", + "default": true + }, + { + "type": "textInput", + "label": "JSON columns (Optional)", + "labelNote": "Specify required JSON properties in dot notation separated by commas", + "value": "jsonPaths", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.*)$", + "placeholder": "e.g: testMap.nestedMap, testArray", + "required": false, + "footerURL": { + "link": "https://www.rudderstack.com/docs/destinations/warehouse-destinations/redshift/#configuring-redshift-destination-in-rudderstack", + "text": "Instructions for setting up the JSON columns" + } + } + ] + }, { "title": "Consent Settings", "fields": [ diff --git a/src/configurations/destinations/singular/db-config.json b/src/configurations/destinations/singular/db-config.json index fdeb462fe..42a142995 100644 --- a/src/configurations/destinations/singular/db-config.json +++ b/src/configurations/destinations/singular/db-config.json @@ -59,6 +59,7 @@ "ios": ["useNativeSDK"], "reactnative": ["useNativeSDK"], "cordova": ["useNativeSDK"] - } + }, + "secretKeys": ["apiKey", "apiSecret"] } } diff --git a/src/configurations/destinations/snowflake/db-config.json b/src/configurations/destinations/snowflake/db-config.json index c146040df..c8a59748a 100644 --- a/src/configurations/destinations/snowflake/db-config.json +++ b/src/configurations/destinations/snowflake/db-config.json @@ -52,6 +52,7 @@ "sasToken", "credentials", "namespace", + "preferAppend", "prefix", "syncFrequency", "syncStartAt", diff --git a/src/configurations/destinations/snowflake/schema.json b/src/configurations/destinations/snowflake/schema.json index 3fdf266d9..b94fde266 100644 --- a/src/configurations/destinations/snowflake/schema.json +++ b/src/configurations/destinations/snowflake/schema.json @@ -43,7 +43,7 @@ "syncFrequency": { "type": "string", "enum": ["30", "60", "180", "360", "720", "1440"], - "default": "30" + "default": "180" }, "syncStartAt": { "type": "string" @@ -68,6 +68,10 @@ "type": "boolean", "default": false }, + "preferAppend": { + "type": "boolean", + "default": true + }, "oneTrustCookieCategories": { "type": "array", "items": { diff --git a/src/configurations/destinations/snowflake/ui-config.json b/src/configurations/destinations/snowflake/ui-config.json index 15992e650..91f95c265 100644 --- a/src/configurations/destinations/snowflake/ui-config.json +++ b/src/configurations/destinations/snowflake/ui-config.json @@ -99,8 +99,8 @@ } ], "defaultOption": { - "name": "Every 30 minutes", - "value": "30" + "name": "Every 3 hours", + "value": "180" }, "required": true }, @@ -133,19 +133,6 @@ }, "required": false, "footerNote": "Note: Please specify time in UTC" - }, - { - "type": "textInput", - "label": "JSON columns (Optional)", - "labelNote": "Specify required JSON properties in dot notation separated by commas", - "value": "jsonPaths", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.*)$", - "placeholder": "e.g: testMap.nestedMap, testArray", - "required": false, - "footerURL": { - "link": "https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake/#configuring-snowflake-destination-in-rudderstack", - "text": "Instructions for setting up the JSON columns" - } } ] }, @@ -544,6 +531,31 @@ } ] }, + { + "title": "Advanced Settings", + "fields": [ + { + "type": "checkbox", + "label": "Warehouse De-dupe", + "value": "preferAppend", + "footerNote": "Disable this toggle to move from Append to Merge operation. Switching from Append to Merge ensures 100% non-duplicate data, but would increase warehouse operations time significantly", + "default": true + }, + { + "type": "textInput", + "label": "JSON columns (Optional)", + "labelNote": "Specify required JSON properties in dot notation separated by commas", + "value": "jsonPaths", + "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.*)$", + "placeholder": "e.g: testMap.nestedMap, testArray", + "required": false, + "footerURL": { + "link": "https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake/#configuring-snowflake-destination-in-rudderstack", + "text": "Instructions for setting up the JSON columns" + } + } + ] + }, { "title": "Consent Settings", "fields": [ diff --git a/src/configurations/destinations/sprig/db-config.json b/src/configurations/destinations/sprig/db-config.json index 0bfebab3b..d018dff96 100644 --- a/src/configurations/destinations/sprig/db-config.json +++ b/src/configurations/destinations/sprig/db-config.json @@ -45,6 +45,7 @@ "oneTrustCookieCategories" ], "web": ["useNativeSDK", "connectionMode"] - } + }, + "secretKeys": ["apiKey"] } } diff --git a/src/configurations/destinations/sprig/ui-config.json b/src/configurations/destinations/sprig/ui-config.json index 9706455a7..54061d120 100644 --- a/src/configurations/destinations/sprig/ui-config.json +++ b/src/configurations/destinations/sprig/ui-config.json @@ -20,6 +20,7 @@ "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$", "regexErrorMessage": "Invalid Public API Key", "placeholder": "e.g: cc8de3fb-XXXX-XXXX-XXXX-5588XX7a980c", + "secret": true, "preRequisites": { "fields": [ { diff --git a/src/configurations/destinations/twitter_ads/db-config.json b/src/configurations/destinations/twitter_ads/db-config.json index 8cb716dda..b1af87eb9 100644 --- a/src/configurations/destinations/twitter_ads/db-config.json +++ b/src/configurations/destinations/twitter_ads/db-config.json @@ -1,6 +1,6 @@ { "name": "TWITTER_ADS", - "displayName": "Twitter Ads", + "displayName": "X Ads (formerly Twitter Ads)", "config": { "auth": { "type": "OAuth", diff --git a/src/configurations/destinations/vero/db-config.json b/src/configurations/destinations/vero/db-config.json index b9d5f1c0d..7cb2f024b 100644 --- a/src/configurations/destinations/vero/db-config.json +++ b/src/configurations/destinations/vero/db-config.json @@ -63,6 +63,7 @@ "shopify": ["connectionMode"], "cloud": ["connectionMode"], "warehouse": ["connectionMode"] - } + }, + "secretKeys": ["authToken"] } } diff --git a/src/configurations/destinations/webengage/db-config.json b/src/configurations/destinations/webengage/db-config.json index ca75b2cb0..19122cea6 100644 --- a/src/configurations/destinations/webengage/db-config.json +++ b/src/configurations/destinations/webengage/db-config.json @@ -35,6 +35,7 @@ }, "destConfig": { "defaultConfig": ["licenseCode", "apiKey", "dataCenter", "oneTrustCookieCategories"] - } + }, + "secretKeys": ["licenseCode", "apiKey"] } } diff --git a/src/configurations/destinations/wootric/db-config.json b/src/configurations/destinations/wootric/db-config.json index 54421e983..75443e241 100644 --- a/src/configurations/destinations/wootric/db-config.json +++ b/src/configurations/destinations/wootric/db-config.json @@ -1,6 +1,6 @@ { "name": "WOOTRIC", - "displayName": "Wootric", + "displayName": "InMoment(formerly Wootric)", "config": { "transformAtV1": "router", "saveDestinationResponse": true, diff --git a/test/data/validation/destinations/koala.json b/test/data/validation/destinations/koala.json new file mode 100644 index 000000000..fecf3f0b0 --- /dev/null +++ b/test/data/validation/destinations/koala.json @@ -0,0 +1,24 @@ +[ + { + "config": { + "publicKey": "test-accessKey", + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "Marketing" + } + ] + }, + "result": true + }, + { + "config": { + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "Marketing" + } + ] + }, + "result": false, + "err": [" must have required property 'publicKey'"] + } +] diff --git a/test/data/validation/destinations/movable_ink.json b/test/data/validation/destinations/movable_ink.json new file mode 100644 index 000000000..2c416514c --- /dev/null +++ b/test/data/validation/destinations/movable_ink.json @@ -0,0 +1,44 @@ +[ + { + "config": { + "endpoint": "https://collector.movableink-dmz.com/behavioral/12***", + "accessKey": "test-accessKey", + "accessSecret": "test-accessSecret", + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "Marketing" + } + ] + }, + "result": true + }, + { + "config": { + "endpoint": "abc", + "accessKey": "test-accessKey", + "accessSecret": "test-accessSecret", + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "Marketing" + } + ] + }, + "result": false, + "err": [ + "endpoint must match pattern \"(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$|^$\"" + ] + }, + { + "config": { + "endpoint": "https://collector.movableink-dmz.com/behavioral/12***", + "accessSecret": "test-accessSecret", + "oneTrustCookieCategories": [ + { + "oneTrustCookieCategory": "Marketing" + } + ] + }, + "result": false, + "err": [" must have required property 'accessKey'"] + } +] diff --git a/test/data/validation/destinations/ninetailed.json b/test/data/validation/destinations/ninetailed.json index 2e054657f..5e8c3391e 100644 --- a/test/data/validation/destinations/ninetailed.json +++ b/test/data/validation/destinations/ninetailed.json @@ -95,29 +95,6 @@ }, "result": true }, - { - "config": { - "organisationId": "testorgid", - "environment": "unsupported_env", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "connectionMode": { - "web": "cloud", - "flutter": "cloud" - } - }, - "result": false, - "err": ["environment must be equal to one of the allowed values"] - }, { "config": { "eventFilteringOption": "disable",