From f9cd03a673b2a0f14cd683413453e4d5cdaa784d Mon Sep 17 00:00:00 2001 From: Aanshi Lahoti Date: Wed, 22 Jan 2025 10:43:38 +0530 Subject: [PATCH 01/12] chore: add standard events to reddit --- .../destinations/reddit/ui-config.json | 4 ++++ test/data/validation/destinations/reddit.json | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/configurations/destinations/reddit/ui-config.json b/src/configurations/destinations/reddit/ui-config.json index 5679e4a8b3..2b68587573 100644 --- a/src/configurations/destinations/reddit/ui-config.json +++ b/src/configurations/destinations/reddit/ui-config.json @@ -132,6 +132,10 @@ { "name": "Purchase", "value": "Purchase" + }, + { + "name": "SignUp", + "value": "SignUp" } ] } diff --git a/test/data/validation/destinations/reddit.json b/test/data/validation/destinations/reddit.json index 7476d1418c..0cad467c36 100644 --- a/test/data/validation/destinations/reddit.json +++ b/test/data/validation/destinations/reddit.json @@ -288,5 +288,18 @@ "ketchConsentPurposes.web must be array", "ketchConsentPurposes.unity.0 must be object" ] + }, + { + "config": { + "accountId": "d2bnpxxxxxzq1p89hXXXXx2hf5q1k3v", + "hashData": true, + "eventsMapping": [ + { + "from": "Sign up", + "to": "SignUp" + } + ] + }, + "result": true } ] From b6dacc35d313c5470e556e181db92f0454b3409f Mon Sep 17 00:00:00 2001 From: Aanshi Lahoti Date: Wed, 22 Jan 2025 10:58:15 +0530 Subject: [PATCH 02/12] chore: lead event added --- .../destinations/reddit/ui-config.json | 4 ++++ test/data/validation/destinations/reddit.json | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/configurations/destinations/reddit/ui-config.json b/src/configurations/destinations/reddit/ui-config.json index 2b68587573..a7e0d7c4b3 100644 --- a/src/configurations/destinations/reddit/ui-config.json +++ b/src/configurations/destinations/reddit/ui-config.json @@ -136,6 +136,10 @@ { "name": "SignUp", "value": "SignUp" + }, + { + "name": "Lead", + "value": "Lead" } ] } diff --git a/test/data/validation/destinations/reddit.json b/test/data/validation/destinations/reddit.json index 0cad467c36..466db740d1 100644 --- a/test/data/validation/destinations/reddit.json +++ b/test/data/validation/destinations/reddit.json @@ -301,5 +301,18 @@ ] }, "result": true + }, + { + "config": { + "accountId": "d2bnpxxxxxzq1p89hXXXXx2hf5q1k3v", + "hashData": true, + "eventsMapping": [ + { + "from": "test", + "to": "Lead" + } + ] + }, + "result": true } ] From 5bdfbb2652dedb1f026736399fa0df2a626b8583 Mon Sep 17 00:00:00 2001 From: Aanshi Lahoti Date: Wed, 22 Jan 2025 12:24:50 +0530 Subject: [PATCH 03/12] chore: pageVisit event added --- .../destinations/reddit/ui-config.json | 4 ++++ test/data/validation/destinations/reddit.json | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/configurations/destinations/reddit/ui-config.json b/src/configurations/destinations/reddit/ui-config.json index a7e0d7c4b3..2273670aca 100644 --- a/src/configurations/destinations/reddit/ui-config.json +++ b/src/configurations/destinations/reddit/ui-config.json @@ -140,6 +140,10 @@ { "name": "Lead", "value": "Lead" + }, + { + "name": "PageVisit", + "value": "PageVisit" } ] } diff --git a/test/data/validation/destinations/reddit.json b/test/data/validation/destinations/reddit.json index 466db740d1..8fde926bf7 100644 --- a/test/data/validation/destinations/reddit.json +++ b/test/data/validation/destinations/reddit.json @@ -314,5 +314,18 @@ ] }, "result": true + }, + { + "config": { + "accountId": "d2bnpxxxxxzq1p89hXXXXx2hf5q1k3v", + "hashData": true, + "eventsMapping": [ + { + "from": "test", + "to": "PageVisit" + } + ] + }, + "result": true } ] From fed05faaf99472c31c413b17502ca498ae9b6acf Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Thu, 23 Jan 2025 13:21:07 +0530 Subject: [PATCH 04/12] fix: clean up adobe analytics dynamic config support (#1857) Co-authored-by: Sai Sankeerth --- scripts/schemaGenerator.py | 43 +++++- .../adobe_analytics/db-config.json | 1 + .../destinations/adobe_analytics/schema.json | 127 +++++++++--------- .../adobe_analytics/ui-config.json | 8 +- .../destinations/db-config-schema.json | 9 ++ .../update_schema_dest/schema.json | 12 +- .../update_schema_dest_legacy_ui/schema.json | 12 +- .../destinations/adobe_analytics.json | 4 +- 8 files changed, 136 insertions(+), 80 deletions(-) diff --git a/scripts/schemaGenerator.py b/scripts/schemaGenerator.py index bf9b57b2ec..22d892baf9 100644 --- a/scripts/schemaGenerator.py +++ b/scripts/schemaGenerator.py @@ -55,6 +55,33 @@ def get_options_list_for_enum(field): return options_list +def generate_uiconfig_pattern(field, dbConfig=None) -> str: + """ + Generates the pattern for schema based on the type of field. + + Cases: + If dynamicConfigSupported is present in dbConfig: + - Regex is present in ui-config for the field + - Use the regex mentioned in ui-config. + - Regex is not present in ui-config for the field + - Use the regex ^(.{0,100})$. + If dynamicConfigSupported is not present in dbConfig: + - Regex is present in ui-config for the field + - Use the regex mentioned in ui-config & includes dynamic config regex & env regex(if not already present). + - Regex is not present in ui-config for the field + - Use the regex ^(.{0,100})$ & includes dynamic config regex & env regex(if not already present). + """ + # TODO: remove this once all the destinations have been updated with dynamicConfigSupported field + if "dynamicConfigSupported" not in dbConfig: + return generalize_regex_pattern(field) # old way + + # regex from ui-config + if "regex" in field: + return field["regex"] + else: + return "^(.{0,100})$" + + def generalize_regex_pattern(field): """Generates the pattern for schema based on the type of field. - For type : singleSelect and dynamicSelectForm, the pattern is generated by iterating over options. @@ -269,12 +296,12 @@ def generate_schema_for_textinput(field, dbConfig, schema_field_name): } if "regex" in field: textInputSchemaObj["properties"][sourceType]["pattern"] = ( - generalize_regex_pattern(field) + generate_uiconfig_pattern(field, dbConfig) ) else: textInputSchemaObj = {"type": FieldTypeEnum.STRING.value} if "regex" in field: - textInputSchemaObj["pattern"] = generalize_regex_pattern(field) + textInputSchemaObj["pattern"] = generate_uiconfig_pattern(field, dbConfig) return textInputSchemaObj @@ -292,7 +319,7 @@ def generate_schema_for_textarea_input(field, dbConfig, schema_field_name): """ textareaInputObj = {"type": FieldTypeEnum.STRING.value} if "regex" in field: - textareaInputObj["pattern"] = generalize_regex_pattern(field) + textareaInputObj["pattern"] = generate_uiconfig_pattern(field, dbConfig) return textareaInputObj @@ -394,7 +421,9 @@ def generate_schema_for_dynamic_custom_form(field, dbConfig, schema_field_name): and customField["type"] != "singleSelect" and customField["type"] != "dynamicSelectForm" ): - customFieldSchemaObj["pattern"] = generalize_regex_pattern(customField) + customFieldSchemaObj["pattern"] = generate_uiconfig_pattern( + customField, dbConfig + ) # If the custom field is source dependent, we remove the source keys as it's not required inside custom fields, rather they need to be moved to top. if isCustomFieldDependentOnSource: @@ -510,13 +539,13 @@ def generate_key(forFieldWithTo): } if field["type"] == "dynamicSelectForm": if forFieldWithTo != (field.get("reverse", False) == False): - obj["pattern"] = generalize_regex_pattern(field) + obj["pattern"] = generate_uiconfig_pattern(field, dbConfig) else: if "defaultOption" in field: obj["default"] = field["defaultOption"]["value"] obj["enum"] = get_options_list_for_enum(field) else: - obj["pattern"] = generalize_regex_pattern(field) + obj["pattern"] = generate_uiconfig_pattern(field, dbConfig) return obj dynamicFormSchemaObject = {} @@ -602,7 +631,7 @@ def generate_schema_for_tag_input(field, dbConfig, schema_field_name): tagItemProps = { str(field["tagKey"]): { "type": FieldTypeEnum.STRING.value, - "pattern": generalize_regex_pattern(field), + "pattern": generate_uiconfig_pattern(field, dbConfig), } } tagItem["properties"] = tagItemProps diff --git a/src/configurations/destinations/adobe_analytics/db-config.json b/src/configurations/destinations/adobe_analytics/db-config.json index 2717c48cb7..3d63bb5312 100644 --- a/src/configurations/destinations/adobe_analytics/db-config.json +++ b/src/configurations/destinations/adobe_analytics/db-config.json @@ -4,6 +4,7 @@ "config": { "transformAtV1": "processor", "saveDestinationResponse": true, + "dynamicConfigSupported": ["trackingServerUrl", "reportSuiteIds", "trackingServerSecureUrl"], "includeKeys": [ "trackingServerUrl", "reportSuiteIds", diff --git a/src/configurations/destinations/adobe_analytics/schema.json b/src/configurations/destinations/adobe_analytics/schema.json index ef02af6a58..e3fc14f0cc 100644 --- a/src/configurations/destinations/adobe_analytics/schema.json +++ b/src/configurations/destinations/adobe_analytics/schema.json @@ -22,15 +22,15 @@ }, "heartbeatTrackingServerUrl": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$" + "pattern": "(?!.*\\.ngrok\\.io)^(.{0,100})$" }, "proxyNormalUrl": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$" + "pattern": "(?!.*\\.ngrok\\.io)^(.{0,100})$" }, "proxyHeartbeatUrl": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$" + "pattern": "(?!.*\\.ngrok\\.io)^(.{0,100})$" }, "eventsToTypes": { "type": "array", @@ -39,7 +39,7 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", @@ -71,7 +71,7 @@ }, "marketingCloudOrgId": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "dropVisitorId": { "type": "boolean", @@ -101,11 +101,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -121,18 +121,18 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } }, "contextDataPrefix": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "mobileEventMapping": { "type": "array", @@ -141,11 +141,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -157,11 +157,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -173,11 +173,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -189,11 +189,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "delimiter": { "type": "string", @@ -209,11 +209,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "delimiter": { "type": "string", @@ -229,11 +229,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -245,7 +245,7 @@ "properties": { "eventMerchProperties": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -257,11 +257,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -273,7 +273,7 @@ "properties": { "productMerchProperties": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -285,11 +285,11 @@ "properties": { "from": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" }, "to": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -374,7 +374,7 @@ "properties": { "eventName": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -386,7 +386,7 @@ "properties": { "eventName": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -401,7 +401,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -413,7 +413,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -425,7 +425,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -437,7 +437,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -449,7 +449,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -461,7 +461,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -473,7 +473,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -485,7 +485,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -497,7 +497,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -509,7 +509,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -521,7 +521,7 @@ "properties": { "oneTrustCookieCategory": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -548,7 +548,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -594,7 +594,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -640,7 +640,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -686,7 +686,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -732,7 +732,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -778,7 +778,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -824,7 +824,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -870,7 +870,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -916,7 +916,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -962,7 +962,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1008,7 +1008,7 @@ "properties": { "consent": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1039,6 +1039,7 @@ } } }, + "ketchConsentPurposes": { "type": "object", "properties": { @@ -1049,7 +1050,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1061,7 +1062,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1073,7 +1074,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1085,7 +1086,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1097,7 +1098,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1109,7 +1110,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1121,7 +1122,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1133,7 +1134,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1145,7 +1146,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1157,7 +1158,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } @@ -1169,7 +1170,7 @@ "properties": { "purpose": { "type": "string", - "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + "pattern": "^(.{0,100})$" } } } diff --git a/src/configurations/destinations/adobe_analytics/ui-config.json b/src/configurations/destinations/adobe_analytics/ui-config.json index 23c05aa563..3946455a06 100644 --- a/src/configurations/destinations/adobe_analytics/ui-config.json +++ b/src/configurations/destinations/adobe_analytics/ui-config.json @@ -61,7 +61,7 @@ "label": "Marketing Cloud Organization Id", "note": "Enter the Marketing Cloud Organization ID to use visitorAPI.js. It can be located on the Marketing Cloud administration page.", "configKey": "marketingCloudOrgId", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$", + "regex": "^(.{0,100})$", "placeholder": "e.g: marketing_cloud_org_id" }, { @@ -186,7 +186,7 @@ "type": "textInput", "label": "Heartbeat Tracking Server URL", "configKey": "heartbeatTrackingServerUrl", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$", + "regex": "(?!.*\\.ngrok\\.io)^(.{0,100})$", "regexErrorMessage": "Please put a valid url", "note": "This is the URL of your Adobe Heartbeat server. Please reach out to Adobe for this URL." }, @@ -194,7 +194,7 @@ "type": "textInput", "label": "Adobe Analytics Javascript SDK Proxy URL", "configKey": "proxyNormalUrl", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$", + "regex": "(?!.*\\.ngrok\\.io)^(.{0,100})$", "regexErrorMessage": "Please put a valid url", "note": "Enter your proxy url for hosting adobe analytics JS SDK. By default it is https://cdn.rudderlabs.com/adobe-analytics-js/adobe-analytics-js.js" }, @@ -202,7 +202,7 @@ "type": "textInput", "label": "Adobe Analytics Hearbeat SDK Proxy URL", "configKey": "proxyHeartbeatUrl", - "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(.{0,100})$", + "regex": "(?!.*\\.ngrok\\.io)^(.{0,100})$", "regexErrorMessage": "Please put a valid url", "note": "Enter your proxy url for hosting adobe analytics Heartbeat SDK. By default it is https://cdn.rudderlabs.com/adobe-analytics-js/adobe-analytics-js-heartbeat.js" } diff --git a/src/schemas/destinations/db-config-schema.json b/src/schemas/destinations/db-config-schema.json index 35a0306f2a..02dfb33c8c 100644 --- a/src/schemas/destinations/db-config-schema.json +++ b/src/schemas/destinations/db-config-schema.json @@ -48,6 +48,15 @@ "enum": ["processor", "router", "none"], "default": "processor" }, + "dynamicConfigSupported": { + "type": "array", + "title": "Dynamic Config Supported", + "description": "The list of dynamic config supported fields by the destination.", + "items": { + "type": "string" + }, + "uniqueItems": true + }, "features": { "type": "array", "title": "list of destination features", diff --git a/test/component_tests/configurations/destinations/update_schema_dest/schema.json b/test/component_tests/configurations/destinations/update_schema_dest/schema.json index aea615f1b6..8928907962 100644 --- a/test/component_tests/configurations/destinations/update_schema_dest/schema.json +++ b/test/component_tests/configurations/destinations/update_schema_dest/schema.json @@ -1,7 +1,7 @@ { "configSchema": { "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["secretTextInputField"], + "required": ["secretTextInputField", "singleSelectField"], "type": "object", "properties": { "secretTextInputField": { @@ -26,7 +26,8 @@ "type": "object", "properties": { "android": { - "type": "string" + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^([0-9]{0,100})$" } } }, @@ -35,6 +36,9 @@ "properties": { "android": { "type": "boolean" + }, + "web": { + "type": "boolean" } } }, @@ -86,6 +90,10 @@ "enum": ["cloud"] } } + }, + "checkboxField": { + "type": "boolean", + "default": true } } } diff --git a/test/component_tests/configurations/destinations/update_schema_dest_legacy_ui/schema.json b/test/component_tests/configurations/destinations/update_schema_dest_legacy_ui/schema.json index 9790d9ff65..13e84c732e 100644 --- a/test/component_tests/configurations/destinations/update_schema_dest_legacy_ui/schema.json +++ b/test/component_tests/configurations/destinations/update_schema_dest_legacy_ui/schema.json @@ -1,7 +1,7 @@ { "configSchema": { "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["secretTextInputField"], + "required": ["secretTextInputField", "textareaInputField"], "type": "object", "properties": { "secretTextInputField": { @@ -21,7 +21,8 @@ "type": "object", "properties": { "android": { - "type": "string" + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^([0-9]{0,100})$" } } }, @@ -30,6 +31,9 @@ "properties": { "web": { "type": "boolean" + }, + "android": { + "type": "boolean" } } }, @@ -100,6 +104,10 @@ }, "timePickerField": { "type": "string" + }, + "checkboxField": { + "type": "boolean", + "default": true } } } diff --git a/test/data/validation/destinations/adobe_analytics.json b/test/data/validation/destinations/adobe_analytics.json index 17c1ff1707..7cf872439a 100644 --- a/test/data/validation/destinations/adobe_analytics.json +++ b/test/data/validation/destinations/adobe_analytics.json @@ -1237,11 +1237,11 @@ }, "result": false, "err": [ - "oneTrustCookieCategories.android.0.oneTrustCookieCategory must match pattern \"(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$\"", + "oneTrustCookieCategories.android.0.oneTrustCookieCategory must match pattern \"^(.{0,100})$\"", "oneTrustCookieCategories.ios.0.oneTrustCookieCategory must be string", "oneTrustCookieCategories.web must be array", "oneTrustCookieCategories.unity.0 must be object", - "ketchConsentPurposes.android.0.purpose must match pattern \"(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$\"", + "ketchConsentPurposes.android.0.purpose must match pattern \"^(.{0,100})$\"", "ketchConsentPurposes.ios.0.purpose must be string", "ketchConsentPurposes.web must be array", "ketchConsentPurposes.unity.0 must be object" From f570d038bbc0bb9dd66e4b204e5ba53080315981 Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Fri, 24 Jan 2025 12:30:50 +0530 Subject: [PATCH 05/12] chore: add custom domain url labels for gtm and ga4 (#1867) --- src/configurations/destinations/ga4/ui-config.json | 4 ++-- src/configurations/destinations/gtm/ui-config.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/configurations/destinations/ga4/ui-config.json b/src/configurations/destinations/ga4/ui-config.json index d5b0ac7306..8c6125625b 100644 --- a/src/configurations/destinations/ga4/ui-config.json +++ b/src/configurations/destinations/ga4/ui-config.json @@ -123,11 +123,11 @@ ], "condition": "or" }, - "label": "SDK Base URL", + "label": "Custom Domain URL", "configKey": "sdkBaseUrl", "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]*|^$", "regexErrorMessage": "Please input a valid URL.", - "note": "Enter your GA4 SDK base URL, https://{SDK Base URL}/gtag/js. By default, it is https://www.googletagmanager.com.", + "note": "Enter your GA4 Custom Domain URL, https://{Custom Domain URL}/gtag/js. By default, it is https://www.googletagmanager.com.", "placeholder": "e.g: https://www.example.com", "default": "https://www.googletagmanager.com", "secret": false diff --git a/src/configurations/destinations/gtm/ui-config.json b/src/configurations/destinations/gtm/ui-config.json index 0fe1d3b44e..71e65d7087 100644 --- a/src/configurations/destinations/gtm/ui-config.json +++ b/src/configurations/destinations/gtm/ui-config.json @@ -14,7 +14,7 @@ }, { "type": "textInput", - "label": "Server Container URL", + "label": "Custom Domain URL", "value": "serverUrl", "regex": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|(?!.*\\.ngrok\\.io)^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]*|^$", "regexErrorMessage": "Invalid URL", From 10ebbd9e66c07f88c6798182e1f91242d11a2408 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Mon, 27 Jan 2025 10:49:17 +0530 Subject: [PATCH 06/12] feat(http): add support for form format (#1876) --- src/configurations/destinations/http/schema.json | 2 +- src/configurations/destinations/http/ui-config.json | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/configurations/destinations/http/schema.json b/src/configurations/destinations/http/schema.json index 761c1b0d45..25cf23547e 100644 --- a/src/configurations/destinations/http/schema.json +++ b/src/configurations/destinations/http/schema.json @@ -20,7 +20,7 @@ }, "format": { "type": "string", - "enum": ["JSON", "XML"], + "enum": ["JSON", "XML", "FORM"], "default": "JSON" }, "isBatchingEnabled": { diff --git a/src/configurations/destinations/http/ui-config.json b/src/configurations/destinations/http/ui-config.json index 46e0e6069a..de70b1c1dc 100644 --- a/src/configurations/destinations/http/ui-config.json +++ b/src/configurations/destinations/http/ui-config.json @@ -169,6 +169,10 @@ { "label": "XML", "value": "XML" + }, + { + "label": "FORM", + "value": "FORM" } ], "default": "JSON" From f4247aad338d12e186080d3065b70035d90db700 Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Wed, 29 Jan 2025 13:04:19 +0530 Subject: [PATCH 07/12] chore: update note for shopify to specify old app (#1877) --- src/configurations/sources/shopify/ui-config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/configurations/sources/shopify/ui-config.json b/src/configurations/sources/shopify/ui-config.json index 3b847d4c94..e49ec7844e 100644 --- a/src/configurations/sources/shopify/ui-config.json +++ b/src/configurations/sources/shopify/ui-config.json @@ -5,10 +5,10 @@ "fields": [ { "type": "checkbox", - "label": "Disable client side identifier", + "label": "Disable client side identifier in the Legacy Shopify Tracker App", "value": "disableClientSideIdentifier", "default": false, - "footerNote": "Disables client side identifier in shopify tracker" + "footerNote": "Only applicable for RudderStack, the legacy Shopify Tracker App" } ] } From 364d8db74de5f2261e5fecb42ab00205f31b7701 Mon Sep 17 00:00:00 2001 From: Akash Chetty Date: Thu, 30 Jan 2025 17:05:18 +0530 Subject: [PATCH 08/12] chore: skip users default true for warehouse destinations (#1885) --- src/configurations/destinations/azure_datalake/schema.json | 2 +- src/configurations/destinations/azure_datalake/ui-config.json | 4 ++-- src/configurations/destinations/azure_synapse/schema.json | 2 +- src/configurations/destinations/azure_synapse/ui-config.json | 4 ++-- src/configurations/destinations/bq/schema.json | 2 +- src/configurations/destinations/bq/ui-config.json | 4 ++-- src/configurations/destinations/clickhouse/schema.json | 2 +- src/configurations/destinations/clickhouse/ui-config.json | 4 ++-- src/configurations/destinations/deltalake/schema.json | 2 +- src/configurations/destinations/deltalake/ui-config.json | 4 ++-- src/configurations/destinations/gcs_datalake/schema.json | 2 +- src/configurations/destinations/gcs_datalake/ui-config.json | 4 ++-- src/configurations/destinations/mssql/schema.json | 2 +- src/configurations/destinations/mssql/ui-config.json | 4 ++-- src/configurations/destinations/postgres/schema.json | 2 +- src/configurations/destinations/postgres/ui-config.json | 4 ++-- src/configurations/destinations/rs/schema.json | 2 +- src/configurations/destinations/rs/ui-config.json | 4 ++-- src/configurations/destinations/s3_datalake/schema.json | 2 +- src/configurations/destinations/s3_datalake/ui-config.json | 4 ++-- src/configurations/destinations/snowflake/schema.json | 2 +- src/configurations/destinations/snowflake/ui-config.json | 4 ++-- 22 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/configurations/destinations/azure_datalake/schema.json b/src/configurations/destinations/azure_datalake/schema.json index 2b0ff54f36..4732c52b21 100644 --- a/src/configurations/destinations/azure_datalake/schema.json +++ b/src/configurations/destinations/azure_datalake/schema.json @@ -30,7 +30,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "syncFrequency": { "type": "string", diff --git a/src/configurations/destinations/azure_datalake/ui-config.json b/src/configurations/destinations/azure_datalake/ui-config.json index fb7fddf7f8..bb2597610b 100644 --- a/src/configurations/destinations/azure_datalake/ui-config.json +++ b/src/configurations/destinations/azure_datalake/ui-config.json @@ -150,8 +150,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/azure_synapse/schema.json b/src/configurations/destinations/azure_synapse/schema.json index 7efa362639..b21c14af8e 100644 --- a/src/configurations/destinations/azure_synapse/schema.json +++ b/src/configurations/destinations/azure_synapse/schema.json @@ -75,7 +75,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "bucketProvider": { "type": "string", diff --git a/src/configurations/destinations/azure_synapse/ui-config.json b/src/configurations/destinations/azure_synapse/ui-config.json index f1bdc43ee9..5049562b07 100644 --- a/src/configurations/destinations/azure_synapse/ui-config.json +++ b/src/configurations/destinations/azure_synapse/ui-config.json @@ -568,8 +568,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/bq/schema.json b/src/configurations/destinations/bq/schema.json index 2959d18508..cd9194b9b2 100644 --- a/src/configurations/destinations/bq/schema.json +++ b/src/configurations/destinations/bq/schema.json @@ -52,7 +52,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "excludeWindow": { "type": "object", diff --git a/src/configurations/destinations/bq/ui-config.json b/src/configurations/destinations/bq/ui-config.json index a8d6fb1257..3de6e57825 100644 --- a/src/configurations/destinations/bq/ui-config.json +++ b/src/configurations/destinations/bq/ui-config.json @@ -210,8 +210,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/clickhouse/schema.json b/src/configurations/destinations/clickhouse/schema.json index 4b0c6352d2..4e2387805c 100644 --- a/src/configurations/destinations/clickhouse/schema.json +++ b/src/configurations/destinations/clickhouse/schema.json @@ -42,7 +42,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "skipVerify": { "type": "boolean" diff --git a/src/configurations/destinations/clickhouse/ui-config.json b/src/configurations/destinations/clickhouse/ui-config.json index 7ae38b7648..ee651fe7d4 100644 --- a/src/configurations/destinations/clickhouse/ui-config.json +++ b/src/configurations/destinations/clickhouse/ui-config.json @@ -576,8 +576,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/deltalake/schema.json b/src/configurations/destinations/deltalake/schema.json index ecb176764c..5207822974 100644 --- a/src/configurations/destinations/deltalake/schema.json +++ b/src/configurations/destinations/deltalake/schema.json @@ -34,7 +34,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "syncFrequency": { "type": "string", diff --git a/src/configurations/destinations/deltalake/ui-config.json b/src/configurations/destinations/deltalake/ui-config.json index 45d425fb46..4e27ce6be6 100644 --- a/src/configurations/destinations/deltalake/ui-config.json +++ b/src/configurations/destinations/deltalake/ui-config.json @@ -543,8 +543,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/gcs_datalake/schema.json b/src/configurations/destinations/gcs_datalake/schema.json index 3c2f12f49a..799676d85e 100644 --- a/src/configurations/destinations/gcs_datalake/schema.json +++ b/src/configurations/destinations/gcs_datalake/schema.json @@ -22,7 +22,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "tableSuffix": { "type": "string", diff --git a/src/configurations/destinations/gcs_datalake/ui-config.json b/src/configurations/destinations/gcs_datalake/ui-config.json index b3265cc0cd..888fa06558 100644 --- a/src/configurations/destinations/gcs_datalake/ui-config.json +++ b/src/configurations/destinations/gcs_datalake/ui-config.json @@ -157,8 +157,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/mssql/schema.json b/src/configurations/destinations/mssql/schema.json index b2774e61ca..a4faba6e75 100644 --- a/src/configurations/destinations/mssql/schema.json +++ b/src/configurations/destinations/mssql/schema.json @@ -26,7 +26,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "port": { "type": "string", diff --git a/src/configurations/destinations/mssql/ui-config.json b/src/configurations/destinations/mssql/ui-config.json index 9a87c057cc..68b00bf853 100644 --- a/src/configurations/destinations/mssql/ui-config.json +++ b/src/configurations/destinations/mssql/ui-config.json @@ -568,8 +568,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/postgres/schema.json b/src/configurations/destinations/postgres/schema.json index 01b758cde4..0bbbcef358 100644 --- a/src/configurations/destinations/postgres/schema.json +++ b/src/configurations/destinations/postgres/schema.json @@ -39,7 +39,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "namespace": { "type": "string", diff --git a/src/configurations/destinations/postgres/ui-config.json b/src/configurations/destinations/postgres/ui-config.json index 3dab5df2b2..23897038e9 100644 --- a/src/configurations/destinations/postgres/ui-config.json +++ b/src/configurations/destinations/postgres/ui-config.json @@ -660,8 +660,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/rs/schema.json b/src/configurations/destinations/rs/schema.json index bace1857ee..c1d758e910 100644 --- a/src/configurations/destinations/rs/schema.json +++ b/src/configurations/destinations/rs/schema.json @@ -22,7 +22,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "useSSH": { "type": "boolean", diff --git a/src/configurations/destinations/rs/ui-config.json b/src/configurations/destinations/rs/ui-config.json index 63d4c79030..d6d9265755 100644 --- a/src/configurations/destinations/rs/ui-config.json +++ b/src/configurations/destinations/rs/ui-config.json @@ -443,8 +443,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/s3_datalake/schema.json b/src/configurations/destinations/s3_datalake/schema.json index dafe0a8d94..c1a85ecb94 100644 --- a/src/configurations/destinations/s3_datalake/schema.json +++ b/src/configurations/destinations/s3_datalake/schema.json @@ -30,7 +30,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "enableSSE": { "type": "boolean", diff --git a/src/configurations/destinations/s3_datalake/ui-config.json b/src/configurations/destinations/s3_datalake/ui-config.json index abaf61d4f7..33bcb4b842 100644 --- a/src/configurations/destinations/s3_datalake/ui-config.json +++ b/src/configurations/destinations/s3_datalake/ui-config.json @@ -176,8 +176,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", diff --git a/src/configurations/destinations/snowflake/schema.json b/src/configurations/destinations/snowflake/schema.json index ea56e731d2..c87a3ed6cf 100644 --- a/src/configurations/destinations/snowflake/schema.json +++ b/src/configurations/destinations/snowflake/schema.json @@ -42,7 +42,7 @@ }, "skipUsersTable": { "type": "boolean", - "default": false + "default": true }, "excludeWindow": { "type": "object", diff --git a/src/configurations/destinations/snowflake/ui-config.json b/src/configurations/destinations/snowflake/ui-config.json index 0c5737f3a3..b55f3e4196 100644 --- a/src/configurations/destinations/snowflake/ui-config.json +++ b/src/configurations/destinations/snowflake/ui-config.json @@ -591,8 +591,8 @@ "type": "checkbox", "label": "Skip User Table", "value": "skipUsersTable", - "footerNote": "Enable this feature to send event data exclusively to the Identify table, and skip user table. Eliminates the need for merge operation on the user table", - "default": false + "footerNote": "Disable the creation of a Users table. The table stores all unique users, but note that due to merge operations, it can significantly increase warehouse operation time.", + "default": true }, { "type": "checkbox", From a9c3a6d1faf05af21766f8296ffda3930575d479 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Fri, 31 Jan 2025 21:02:51 +0530 Subject: [PATCH 09/12] feat(http): add new field xmlRootKey and updated regex for some fields (#1884) --- .../destinations/http/schema.json | 18 +++++++++++++++ .../destinations/http/ui-config.json | 23 ++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/configurations/destinations/http/schema.json b/src/configurations/destinations/http/schema.json index 25cf23547e..784c28664c 100644 --- a/src/configurations/destinations/http/schema.json +++ b/src/configurations/destinations/http/schema.json @@ -1065,6 +1065,24 @@ }, "required": ["maxBatchSize"] } + }, + { + "if": { + "properties": { + "format": { + "const": "XML" + } + }, + "required": ["format"] + }, + "then": { + "properties": { + "xmlRootKey": { + "type": "string", + "pattern": "^(.{0,100})$" + } + } + } } ] } diff --git a/src/configurations/destinations/http/ui-config.json b/src/configurations/destinations/http/ui-config.json index de70b1c1dc..4d3516790d 100644 --- a/src/configurations/destinations/http/ui-config.json +++ b/src/configurations/destinations/http/ui-config.json @@ -457,6 +457,23 @@ { "name": "Request Body", "fields": [ + { + "type": "textInput", + "label": "XML Root Key", + "note": "Enter the root key to be used as a common prefix for all field mappings being defined below", + "configKey": "xmlRootKey", + "regex": "^(.{0,100})$", + "regexErrorMessage": "Invalid XML root key", + "placeholder": "e.g. root", + "preRequisites": { + "fields": [ + { + "configKey": "format", + "value": "XML" + } + ] + } + }, { "type": "mapping", "label": "Map your RudderStack properties to HTTP properties", @@ -480,7 +497,7 @@ "type": "textInput", "configKey": "from", "label": "Value", - "regex": "^\\$(?:\\.|(\\.(\\w+|\\*)|\\[\\d+\\]|\\[('\\w+'|\"\\w+\")\\]|\\[\\*\\]|\\.\\w+\\(\\))*)$|^(?!\\$)[A-Za-z0-9!#$%&'*+.^_`|~-]{1,100}$", + "regex": "^\\$(?:\\.|(?:\\.\\.(\\w+|\\*)|\\.(\\w+|\\*)|\\[\\d+\\]|\\[('\\w+'|\"\\w+\")\\]|\\[\\*\\]|\\.\\w+\\(\\))*)$|^(?!\\$)[A-Za-z0-9!#$%&'*+.^_`|~-]{1,100}$", "regexErrorMessage": "Please enter a valid JSON path or a constant", "placeholder": "e.g: $.properties.key1" } @@ -530,7 +547,7 @@ "type": "textInput", "configKey": "from", "label": "Value", - "regex": "^\\$(?:\\.|(\\.(\\w+|\\*)|\\[\\d+\\]|\\[('\\w+'|\"\\w+\")\\]|\\[\\*\\]|\\.\\w+\\(\\))*)$|^(?!\\$)[A-Za-z0-9!#$%&'*+.^_`|~-]{1,100}$", + "regex": "^\\$(?:\\.|(?:\\.\\.(\\w+|\\*)|\\.(\\w+|\\*)|\\[\\d+\\]|\\[('\\w+'|\"\\w+\")\\]|\\[\\*\\]|\\.\\w+\\(\\))*)$|^(?!\\$)[A-Za-z0-9!#$%&'*+.^_`|~-]{1,100}$", "regexErrorMessage": "Please enter a valid JSON path or a constant", "placeholder": "e.g: $.userId or userId" } @@ -560,7 +577,7 @@ "type": "textInput", "configKey": "from", "label": "Value", - "regex": "^\\$(?:\\.|(\\.(\\w+|\\*)|\\[\\d+\\]|\\[('\\w+'|\"\\w+\")\\]|\\[\\*\\]|\\.\\w+\\(\\))*)$|^(?!\\$)[A-Za-z0-9!#$%&'*+.^_`|~\\- /\\\\]{1,100}$", + "regex": "^\\$(?:\\.|(?:\\.\\.(\\w+|\\*)|\\.(\\w+|\\*)|\\[\\d+\\]|\\[('\\w+'|\"\\w+\")\\]|\\[\\*\\]|\\.\\w+\\(\\))*)$|^(?!\\$)[A-Za-z0-9!#$%&'*+.^_`|~\\- /\\\\]{1,100}$", "regexErrorMessage": "Please enter a valid JSON path or a constant", "placeholder": "e.g. application/json" } From fe53d8c103b4d4e8899e7fd614511f843743487b Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:24:49 +0530 Subject: [PATCH 10/12] feat: onboarding customerio segment (#1853) Co-authored-by: Manish Kumar <144022547+manish339k@users.noreply.github.com> Co-authored-by: Manish Kumar --- .../customerio_audience/db-config.json | 34 ++++ .../customerio_audience/schema.json | 115 ++++++++++++++ .../customerio_audience/ui-config.json | 145 ++++++++++++++++++ .../destinations/customerio_audience.json | 28 ++++ 4 files changed, 322 insertions(+) create mode 100644 src/configurations/destinations/customerio_audience/db-config.json create mode 100644 src/configurations/destinations/customerio_audience/schema.json create mode 100644 src/configurations/destinations/customerio_audience/ui-config.json create mode 100644 test/data/validation/destinations/customerio_audience.json diff --git a/src/configurations/destinations/customerio_audience/db-config.json b/src/configurations/destinations/customerio_audience/db-config.json new file mode 100644 index 0000000000..f1625318ef --- /dev/null +++ b/src/configurations/destinations/customerio_audience/db-config.json @@ -0,0 +1,34 @@ +{ + "name": "CUSTOMERIO_AUDIENCE", + "displayName": "Customer.io Audience", + "config": { + "supportsBlankAudienceCreation": true, + "disableJsonMapper": true, + "supportsVisualMapper": true, + "syncBehaviours": ["mirror"], + "transformAtV1": "router", + "saveDestinationResponse": true, + "excludeKeys": [], + "supportedSourceTypes": ["warehouse"], + "supportedMessageTypes": { + "cloud": ["record"] + }, + "isAudienceSupported": true, + "supportedConnectionModes": { + "warehouse": ["cloud"] + }, + "destConfig": { + "defaultConfig": ["siteId", "appApiKey", "apiKey"], + "warehouse": [ + "connectionMode", + "consentManagement", + "oneTrustCookieCategories", + "ketchConsentPurposes" + ] + }, + "secretKeys": ["appApiKey", "apiKey"] + }, + "options": { + "isBeta": true + } +} diff --git a/src/configurations/destinations/customerio_audience/schema.json b/src/configurations/destinations/customerio_audience/schema.json new file mode 100644 index 0000000000..df128fbe54 --- /dev/null +++ b/src/configurations/destinations/customerio_audience/schema.json @@ -0,0 +1,115 @@ +{ + "configSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "required": ["siteId", "apiKey", "appApiKey"], + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "appApiKey": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "siteId": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{1,100})$" + }, + "oneTrustCookieCategories": { + "type": "object", + "properties": { + "warehouse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "oneTrustCookieCategory": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + } + } + }, + "consentManagement": { + "type": "object", + "properties": { + "warehouse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": ["custom", "ketch", "oneTrust"], + "default": "oneTrust" + }, + "consents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "consent": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + } + }, + "allOf": [ + { + "if": { + "properties": { + "provider": { + "const": "custom" + } + }, + "required": ["provider"] + }, + "then": { + "properties": { + "resolutionStrategy": { + "type": "string", + "enum": ["and", "or"] + } + }, + "required": ["resolutionStrategy"] + } + } + ] + } + } + } + }, + "connectionMode": { + "type": "object", + "properties": { + "warehouse": { + "type": "string", + "enum": ["cloud"] + } + } + }, + "ketchConsentPurposes": { + "type": "object", + "properties": { + "warehouse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "purpose": { + "type": "string", + "pattern": "(^\\{\\{.*\\|\\|(.*)\\}\\}$)|(^env[.].+)|^(.{0,100})$" + } + } + } + } + } + } + } + } +} diff --git a/src/configurations/destinations/customerio_audience/ui-config.json b/src/configurations/destinations/customerio_audience/ui-config.json new file mode 100644 index 0000000000..ed6c8c978f --- /dev/null +++ b/src/configurations/destinations/customerio_audience/ui-config.json @@ -0,0 +1,145 @@ +{ + "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": "Site ID", + "note": "Settings > Account Settings > API Credentials > Track APP Keys > Site ID", + "configKey": "siteId", + "regex": "(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid Site Id", + "placeholder": "e.g: 88f02580XXXXXXXcf18" + }, + { + "type": "textInput", + "label": "API Key", + "note": "Settings > Account Settings > API Credentials > Track APP Keys > API KEY of the corresponding Site ID", + "configKey": "apiKey", + "regex": "(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid API Key", + "placeholder": "e.g: 2309XXX5483", + "secret": true + }, + { + "type": "textInput", + "label": "APP API Key", + "note": "Settings > Account Settings > API Credentials > APP API Keys > API KEY", + "configKey": "appApiKey", + "regex": "(^env[.].+)|^(.{1,100})$", + "regexErrorMessage": "Invalid App API Key", + "placeholder": "e.g: 2309XXX5483", + "secret": true + } + ] + } + ] + }, + { + "groups": [ + { + "title": "Connection mode", + "note": [ + "Update how you want to route events from your source to destination. ", + { + "text": "Get help deciding", + "link": "https://www.rudderstack.com/docs/destinations/rudderstack-connection-modes/" + } + ], + "icon": "sliders", + "fields": [] + } + ] + } + ] + } + ], + "sdkTemplate": { + "title": "SDK settings", + "note": "not visible in the ui", + "fields": [] + }, + "consentSettingsTemplate": { + "title": "Consent settings", + "note": "not visible in the ui", + "fields": [ + { + "type": "dynamicCustomForm", + "configKey": "consentManagement", + "default": [], + "rowFields": [ + { + "type": "singleSelect", + "label": "Consent management provider", + "configKey": "provider", + "options": [ + { + "label": "Custom", + "value": "custom" + }, + { + "label": "Ketch", + "value": "ketch" + }, + { + "label": "OneTrust", + "value": "oneTrust" + } + ], + "default": "oneTrust", + "required": true + }, + { + "type": "singleSelect", + "label": "the required consent logic", + "configKey": "resolutionStrategy", + "options": [ + { + "label": "AND", + "value": "and" + }, + { + "label": "OR", + "value": "or" + } + ], + "required": true, + "variant": "badge", + "preRequisites": { + "fields": [ + { + "configKey": "provider", + "value": "custom" + } + ] + } + }, + { + "type": "tagInput", + "label": "Enter consent category IDs", + "note": "Input your consent category IDs by pressing 'Enter' after each entry. We recommend using IDs instead of names as IDs are unique and less likely to change over time, making them a more reliable choice.", + "configKey": "consents", + "tagKey": "consent", + "placeholder": "e.g: Marketing", + "default": [ + { + "consent": "" + } + ] + } + ] + } + ] + } + } +} diff --git a/test/data/validation/destinations/customerio_audience.json b/test/data/validation/destinations/customerio_audience.json new file mode 100644 index 0000000000..6061de4559 --- /dev/null +++ b/test/data/validation/destinations/customerio_audience.json @@ -0,0 +1,28 @@ +[ + { + "config": { + "siteId": "test-site-id", + "apiKey": "test-api-key", + "appApiKey": "test-app-api-key" + }, + "result": true + }, + { + "config": {}, + "result": false, + "err": [ + " must have required property 'siteId'", + " must have required property 'apiKey'", + " must have required property 'appApiKey'" + ] + }, + { + "config": { + "siteId": "test-site-id", + "apiKey": 123, + "appApiKey": [] + }, + "result": false, + "err": ["apiKey must be string", "appApiKey must be string"] + } +] From 58455cd9280731c10d15044b668c701ec86c8308 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 3 Feb 2025 10:48:36 +0000 Subject: [PATCH 11/12] chore(release): 1.103.0 --- CHANGELOG.md | 14 ++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e02c2e9c3e..544db4cf98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ 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.103.0](https://github.com/rudderlabs/rudder-config-schema/compare/v1.102.0...v1.103.0) (2025-02-03) + + +### Features + +* **http:** add new field xmlRootKey and updated regex for some fields ([#1884](https://github.com/rudderlabs/rudder-config-schema/issues/1884)) ([a9c3a6d](https://github.com/rudderlabs/rudder-config-schema/commit/a9c3a6d1faf05af21766f8296ffda3930575d479)) +* **http:** add support for form format ([#1876](https://github.com/rudderlabs/rudder-config-schema/issues/1876)) ([10ebbd9](https://github.com/rudderlabs/rudder-config-schema/commit/10ebbd9e66c07f88c6798182e1f91242d11a2408)) +* onboarding customerio segment ([#1853](https://github.com/rudderlabs/rudder-config-schema/issues/1853)) ([fe53d8c](https://github.com/rudderlabs/rudder-config-schema/commit/fe53d8c103b4d4e8899e7fd614511f843743487b)) + + +### Bug Fixes + +* clean up adobe analytics dynamic config support ([#1857](https://github.com/rudderlabs/rudder-config-schema/issues/1857)) ([fed05fa](https://github.com/rudderlabs/rudder-config-schema/commit/fed05faaf99472c31c413b17502ca498ae9b6acf)) + ## [1.102.0](https://github.com/rudderlabs/rudder-config-schema/compare/v1.101.1...v1.102.0) (2025-01-20) diff --git a/package-lock.json b/package-lock.json index 118bf7f783..9e1380d131 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-config-schema", - "version": "1.102.0", + "version": "1.103.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-config-schema", - "version": "1.102.0", + "version": "1.103.0", "license": "MIT", "dependencies": { "ajv": "^8.12.0", diff --git a/package.json b/package.json index 5562164814..d18fe7e388 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-config-schema", - "version": "1.102.0", + "version": "1.103.0", "description": "", "main": "src/index.ts", "private": true, From 5e82097c653d4f1a422c2cbc070d1e2ac8ea3d66 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Mon, 3 Feb 2025 17:18:39 +0530 Subject: [PATCH 12/12] fix(http): add missing key definition in db-config (#1887) --- src/configurations/destinations/http/db-config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/configurations/destinations/http/db-config.json b/src/configurations/destinations/http/db-config.json index aeed360636..8d630249c7 100644 --- a/src/configurations/destinations/http/db-config.json +++ b/src/configurations/destinations/http/db-config.json @@ -40,6 +40,7 @@ "bearerToken", "apiKeyName", "apiKeyValue", + "xmlRootKey", "method", "format", "propertiesMapping",