From cf6e666a96725de737e8fea27f59efb82e3cf0f3 Mon Sep 17 00:00:00 2001 From: Rahul Gandhi Date: Mon, 22 Dec 2025 18:03:53 +0530 Subject: [PATCH 1/4] Added UWP getresponse addon turnstile captcha support --- ...ass-ayecode-connect-turnstile-settings.php | 10 +++++ includes/class-ayecode-connect-turnstile.php | 37 +++++++++++++++++++ readme.txt | 3 ++ 3 files changed, 50 insertions(+) diff --git a/includes/class-ayecode-connect-turnstile-settings.php b/includes/class-ayecode-connect-turnstile-settings.php index 67cb4d8..83021ce 100644 --- a/includes/class-ayecode-connect-turnstile-settings.php +++ b/includes/class-ayecode-connect-turnstile-settings.php @@ -408,6 +408,16 @@ public function settings_page() { ]; } + if ( defined( 'UWP_GETRESPONSE_VERSION' ) ) { + $turnstile_protections['uwp_getresponse_subscribe'] = [ + 'title' => __( 'UsersWP - Getresponse Subscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + $turnstile_protections['uwp_getresponse_unsubscribe'] = [ + 'title' => __( 'UsersWP - Getresponse Unsubscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + } // UWP Frontend Post Addon if ( defined( 'UWP_FRONTEND_POST_VERSION' ) ) { diff --git a/includes/class-ayecode-connect-turnstile.php b/includes/class-ayecode-connect-turnstile.php index 5b6edd2..5cdb224 100644 --- a/includes/class-ayecode-connect-turnstile.php +++ b/includes/class-ayecode-connect-turnstile.php @@ -47,6 +47,8 @@ public function __construct() { 'uwp_active_campaign_unsubscribe' => 1, 'uwp_brevo_subscribe' => 1, 'uwp_brevo_unsubscribe' => 1, + 'uwp_getresponse_subscribe' => 1, + 'uwp_getresponse_unsubscribe' => 1, ) ); @@ -175,6 +177,11 @@ private function init_hooks() { add_action( 'uwp_brevo_form_validate', array( $this, 'verify_uwp_brevo_subscribe' ), 20,1 ); } + if ( ! empty( $this->options['protections']['uwp_getresponse_subscribe'] ) || ! empty( $this->options['protections']['uwp_getresponse_unsubscribe'] ) ) { + add_action( 'uwp_getresponse_subscribe_fields', array( $this, 'add_turnstile_uwp_getresponse_forms' ), 10, 1 ); + add_action( 'uwp_getresponse_form_validate', array( $this, 'verify_uwp_getresponse_subscribe' ), 20,1 ); + } + // UWP Frontend Post Addon if ( ! empty( $this->options['protections']['uwp_frontend'] ) ) { add_action( 'uwp_frontend_post_after_form_fields', array( @@ -479,6 +486,36 @@ public function add_turnstile_uwp_brevo_forms( $args ) { } } + public function add_turnstile_uwp_getresponse_forms( $args ) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if ( $args['type'] == 'subscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_getresponse_subscribe'])) { + $this->add_turnstile_widget(); + } + + if ($args['type'] == 'unsubscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_getresponse_unsubscribe']) ) { + $this->add_turnstile_widget(); + } + } + + public function verify_uwp_getresponse_subscribe($data) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if(is_array($data)) { + if($data['action'] == 'uwp_getresponse_subscribe' && $ayecode_turnstile_options['protections']['uwp_getresponse_subscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_getresponse_subscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + if($data['action'] == 'uwp_getresponse_unsubscribe' && $ayecode_turnstile_options['protections']['uwp_getresponse_unsubscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_getresponse_unsubscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + } + return $data; + } + /** * Add some CSS for the login form sizing. * diff --git a/readme.txt b/readme.txt index c1a1f51..30264a6 100755 --- a/readme.txt +++ b/readme.txt @@ -81,6 +81,9 @@ If your host runs "mod security" on your hosting and has some specific additiona == Changelog == += 1.4.15 - 2025-12-TBD = +* Turnstile captcha support for UWP Getresponse addon forms - ADDED + = 1.4.14 - 2025-12-04 = * Remove unused plugin array elements from API calls to prevent issues with servers with low max_input_vars - FIXED From 3490c4c4832537a428936740055c8c7e88cfb5d4 Mon Sep 17 00:00:00 2001 From: Rahul Gandhi Date: Tue, 6 Jan 2026 17:34:05 +0530 Subject: [PATCH 2/4] added support for UWP Aweber addon --- ...ass-ayecode-connect-turnstile-settings.php | 11 ++++++ includes/class-ayecode-connect-turnstile.php | 37 +++++++++++++++++++ readme.txt | 3 +- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/includes/class-ayecode-connect-turnstile-settings.php b/includes/class-ayecode-connect-turnstile-settings.php index 83021ce..cb56138 100644 --- a/includes/class-ayecode-connect-turnstile-settings.php +++ b/includes/class-ayecode-connect-turnstile-settings.php @@ -419,6 +419,17 @@ public function settings_page() { ]; } + if ( defined( 'UWP_AWEBER_VERSION' ) ) { + $turnstile_protections['uwp_aweber_subscribe'] = [ + 'title' => __( 'UsersWP - Aweber Subscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + $turnstile_protections['uwp_aweber_unsubscribe'] = [ + 'title' => __( 'UsersWP - Aweber Unsubscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + } + // UWP Frontend Post Addon if ( defined( 'UWP_FRONTEND_POST_VERSION' ) ) { $turnstile_protections['uwp_frontend'] = [ diff --git a/includes/class-ayecode-connect-turnstile.php b/includes/class-ayecode-connect-turnstile.php index 5cdb224..1789a5a 100644 --- a/includes/class-ayecode-connect-turnstile.php +++ b/includes/class-ayecode-connect-turnstile.php @@ -49,6 +49,8 @@ public function __construct() { 'uwp_brevo_unsubscribe' => 1, 'uwp_getresponse_subscribe' => 1, 'uwp_getresponse_unsubscribe' => 1, + 'uwp_aweber_subscribe' => 1, + 'uwp_aweber_unsubscribe' => 1, ) ); @@ -182,6 +184,11 @@ private function init_hooks() { add_action( 'uwp_getresponse_form_validate', array( $this, 'verify_uwp_getresponse_subscribe' ), 20,1 ); } + if ( ! empty( $this->options['protections']['uwp_aweber_subscribe'] ) || ! empty( $this->options['protections']['uwp_aweber_unsubscribe'] ) ) { + add_action( 'uwp_aweber_subscribe_fields', array( $this, 'add_turnstile_uwp_aweber_forms' ), 10, 1 ); + add_action( 'uwp_aweber_form_validate', array( $this, 'verify_uwp_aweber_subscribe' ), 20,1 ); + } + // UWP Frontend Post Addon if ( ! empty( $this->options['protections']['uwp_frontend'] ) ) { add_action( 'uwp_frontend_post_after_form_fields', array( @@ -516,6 +523,36 @@ public function verify_uwp_getresponse_subscribe($data) { return $data; } + public function add_turnstile_uwp_aweber_forms( $args ) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if ( $args['type'] == 'subscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_aweber_subscribe'])) { + $this->add_turnstile_widget(); + } + + if ($args['type'] == 'unsubscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_aweber_unsubscribe']) ) { + $this->add_turnstile_widget(); + } + } + + public function verify_uwp_aweber_subscribe($data) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if(is_array($data)) { + if($data['action'] == 'uwp_aweber_subscribe' && $ayecode_turnstile_options['protections']['uwp_aweber_subscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_aweber_subscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + if($data['action'] == 'uwp_aweber_unsubscribe' && $ayecode_turnstile_options['protections']['uwp_aweber_unsubscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_aweber_unsubscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + } + return $data; + } + /** * Add some CSS for the login form sizing. * diff --git a/readme.txt b/readme.txt index 30264a6..a010400 100755 --- a/readme.txt +++ b/readme.txt @@ -81,8 +81,9 @@ If your host runs "mod security" on your hosting and has some specific additiona == Changelog == -= 1.4.15 - 2025-12-TBD = += 1.4.15 - 2026-1-TBD = * Turnstile captcha support for UWP Getresponse addon forms - ADDED +* Turnstile captcha support for UWP Aweber addon forms - ADDED = 1.4.14 - 2025-12-04 = * Remove unused plugin array elements from API calls to prevent issues with servers with low max_input_vars - FIXED From bb1ed2982dbb62352c319e811ea80e48ef58a4d9 Mon Sep 17 00:00:00 2001 From: Rahul Gandhi Date: Mon, 12 Jan 2026 17:45:43 +0530 Subject: [PATCH 3/4] UWP Constant Contact integration for turnstile captcha. --- ...ass-ayecode-connect-turnstile-settings.php | 11 ++++++ includes/class-ayecode-connect-turnstile.php | 37 +++++++++++++++++++ readme.txt | 1 + 3 files changed, 49 insertions(+) diff --git a/includes/class-ayecode-connect-turnstile-settings.php b/includes/class-ayecode-connect-turnstile-settings.php index cb56138..4584dde 100644 --- a/includes/class-ayecode-connect-turnstile-settings.php +++ b/includes/class-ayecode-connect-turnstile-settings.php @@ -430,6 +430,17 @@ public function settings_page() { ]; } + if ( defined( 'UWP_CC_VERSION' ) ) { + $turnstile_protections['uwp_cc_subscribe'] = [ + 'title' => __( 'UsersWP - Constant Contact Subscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + $turnstile_protections['uwp_cc_unsubscribe'] = [ + 'title' => __( 'UsersWP - UWP_CC_VERSION Unsubscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + } + // UWP Frontend Post Addon if ( defined( 'UWP_FRONTEND_POST_VERSION' ) ) { $turnstile_protections['uwp_frontend'] = [ diff --git a/includes/class-ayecode-connect-turnstile.php b/includes/class-ayecode-connect-turnstile.php index 1789a5a..62609da 100644 --- a/includes/class-ayecode-connect-turnstile.php +++ b/includes/class-ayecode-connect-turnstile.php @@ -51,6 +51,8 @@ public function __construct() { 'uwp_getresponse_unsubscribe' => 1, 'uwp_aweber_subscribe' => 1, 'uwp_aweber_unsubscribe' => 1, + 'uwp_cc_subscribe' => 1, + 'uwp_cc_unsubscribe' => 1, ) ); @@ -189,6 +191,11 @@ private function init_hooks() { add_action( 'uwp_aweber_form_validate', array( $this, 'verify_uwp_aweber_subscribe' ), 20,1 ); } + if ( ! empty( $this->options['protections']['uwp_cc_subscribe'] ) || ! empty( $this->options['protections']['uwp_cc_unsubscribe'] ) ) { + add_action( 'uwp_cc_subscribe_fields', array( $this, 'add_turnstile_uwp_cc_forms' ), 10, 1 ); + add_action( 'uwp_cc_form_validate', array( $this, 'verify_uwp_cc_subscribe' ), 20,1 ); + } + // UWP Frontend Post Addon if ( ! empty( $this->options['protections']['uwp_frontend'] ) ) { add_action( 'uwp_frontend_post_after_form_fields', array( @@ -553,6 +560,36 @@ public function verify_uwp_aweber_subscribe($data) { return $data; } + public function add_turnstile_uwp_cc_forms( $args ) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if ( $args['type'] == 'subscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_cc_subscribe'])) { + $this->add_turnstile_widget(); + } + + if ($args['type'] == 'unsubscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_cc_unsubscribe']) ) { + $this->add_turnstile_widget(); + } + } + + public function verify_uwp_cc_subscribe($data) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if(is_array($data)) { + if($data['action'] == 'uwp_cc_subscribe' && $ayecode_turnstile_options['protections']['uwp_cc_subscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_cc_subscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + if($data['action'] == 'uwp_cc_unsubscribe' && $ayecode_turnstile_options['protections']['uwp_cc_unsubscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_cc_unsubscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + } + return $data; + } + /** * Add some CSS for the login form sizing. * diff --git a/readme.txt b/readme.txt index a010400..46e3666 100755 --- a/readme.txt +++ b/readme.txt @@ -84,6 +84,7 @@ If your host runs "mod security" on your hosting and has some specific additiona = 1.4.15 - 2026-1-TBD = * Turnstile captcha support for UWP Getresponse addon forms - ADDED * Turnstile captcha support for UWP Aweber addon forms - ADDED +* Turnstile captcha support for UWP Constant Contact addon forms - ADDED = 1.4.14 - 2025-12-04 = * Remove unused plugin array elements from API calls to prevent issues with servers with low max_input_vars - FIXED From 68dfc45a3b4336b6264c49b55d5c153b715a49a5 Mon Sep 17 00:00:00 2001 From: Rahul Gandhi Date: Mon, 9 Feb 2026 17:38:47 +0530 Subject: [PATCH 4/4] added UWP newsletter addon turnstile captcha integration --- ...ass-ayecode-connect-turnstile-settings.php | 46 +++++++++++-------- includes/class-ayecode-connect-turnstile.php | 37 +++++++++++++++ readme.txt | 3 +- 3 files changed, 66 insertions(+), 20 deletions(-) diff --git a/includes/class-ayecode-connect-turnstile-settings.php b/includes/class-ayecode-connect-turnstile-settings.php index 4584dde..18a3af4 100644 --- a/includes/class-ayecode-connect-turnstile-settings.php +++ b/includes/class-ayecode-connect-turnstile-settings.php @@ -355,88 +355,99 @@ public function settings_page() { if ( defined( 'UWP_MAILERLITE_VERSION' ) ) { $turnstile_protections['uwp_mailerlite_subscribe'] = [ - 'title' => __( 'UsersWP - MailerLite Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - MailerLite Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_mailerlite_unsubscribe'] = [ - 'title' => __( 'UsersWP - MailerLite Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - MailerLite Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } if ( defined( 'UWP_MC_VERSION' ) ) { $turnstile_protections['uwp_mc_subscribe'] = [ - 'title' => __( 'UsersWP - MailChimp Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - MailChimp Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_mc_unsubscribe'] = [ - 'title' => __( 'UsersWP - MailChimp Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - MailChimp Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } if ( defined( 'UWP_MAILPOET_VERSION' ) ) { $turnstile_protections['uwp_mailpoet_subscribe'] = [ - 'title' => __( 'UsersWP - Mailpoet Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Mailpoet Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_mailpoet_unsubscribe'] = [ - 'title' => __( 'UsersWP - Mailpoet Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Mailpoet Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } if ( defined( 'UWP_ACTIVECAMPAIGN_VERSION' ) ) { $turnstile_protections['uwp_active_campaign_subscribe'] = [ - 'title' => __( 'UsersWP - ActiveCampaign Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - ActiveCampaign Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_active_campaign_unsubscribe'] = [ - 'title' => __( 'UsersWP - ActiveCampaign Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - ActiveCampaign Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } if ( defined( 'UWP_BREVO_VERSION' ) ) { $turnstile_protections['uwp_brevo_subscribe'] = [ - 'title' => __( 'UsersWP - Brevo Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Brevo Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_brevo_unsubscribe'] = [ - 'title' => __( 'UsersWP - Brevo Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Brevo Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } if ( defined( 'UWP_GETRESPONSE_VERSION' ) ) { $turnstile_protections['uwp_getresponse_subscribe'] = [ - 'title' => __( 'UsersWP - Getresponse Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - GetResponse Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_getresponse_unsubscribe'] = [ - 'title' => __( 'UsersWP - Getresponse Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - GetResponse Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } if ( defined( 'UWP_AWEBER_VERSION' ) ) { $turnstile_protections['uwp_aweber_subscribe'] = [ - 'title' => __( 'UsersWP - Aweber Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Aweber Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_aweber_unsubscribe'] = [ - 'title' => __( 'UsersWP - Aweber Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Aweber Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } if ( defined( 'UWP_CC_VERSION' ) ) { $turnstile_protections['uwp_cc_subscribe'] = [ - 'title' => __( 'UsersWP - Constant Contact Subscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Constant Contact Subscribe Form', 'ayecode-connect' ), 'default' => true ]; $turnstile_protections['uwp_cc_unsubscribe'] = [ - 'title' => __( 'UsersWP - UWP_CC_VERSION Unsubscribe Form', 'ayecode-connect' ), + 'title' => __( 'UsersWP - Constant Contact Unsubscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + } + + if ( defined( 'UWP_NEWSLETTER_VERSION' ) ) { + $turnstile_protections['uwp_newsletter_subscribe'] = [ + 'title' => __( 'UsersWP - Newsletter Subscribe Form', 'ayecode-connect' ), + 'default' => true + ]; + $turnstile_protections['uwp_newsletter_unsubscribe'] = [ + 'title' => __( 'UsersWP - Newsletter Unsubscribe Form', 'ayecode-connect' ), 'default' => true ]; } @@ -466,9 +477,6 @@ public function settings_page() { ]; } - - - $turnstile_protections = apply_filters( 'ayecode_turnstile_protections', $turnstile_protections ); if ( ! empty( $turnstile_protections ) ) { diff --git a/includes/class-ayecode-connect-turnstile.php b/includes/class-ayecode-connect-turnstile.php index 62609da..1421c30 100644 --- a/includes/class-ayecode-connect-turnstile.php +++ b/includes/class-ayecode-connect-turnstile.php @@ -53,6 +53,8 @@ public function __construct() { 'uwp_aweber_unsubscribe' => 1, 'uwp_cc_subscribe' => 1, 'uwp_cc_unsubscribe' => 1, + 'uwp_newsletter_subscribe' => 1, + 'uwp_newsletter_unsubscribe' => 1, ) ); @@ -196,6 +198,11 @@ private function init_hooks() { add_action( 'uwp_cc_form_validate', array( $this, 'verify_uwp_cc_subscribe' ), 20,1 ); } + if ( ! empty( $this->options['protections']['uwp_newsletter_subscribe'] ) || ! empty( $this->options['protections']['uwp_newsletter_unsubscribe'] ) ) { + add_action( 'uwp_newsletter_subscribe_fields', array( $this, 'add_turnstile_uwp_newsletter_forms' ), 10, 1 ); + add_action( 'uwp_newsletter_form_validate', array( $this, 'verify_uwp_newsletter_subscribe' ), 20,1 ); + } + // UWP Frontend Post Addon if ( ! empty( $this->options['protections']['uwp_frontend'] ) ) { add_action( 'uwp_frontend_post_after_form_fields', array( @@ -590,6 +597,36 @@ public function verify_uwp_cc_subscribe($data) { return $data; } + public function add_turnstile_uwp_newsletter_forms( $args ) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if ( $args['type'] == 'subscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_newsletter_subscribe'])) { + $this->add_turnstile_widget(); + } + + if ($args['type'] == 'unsubscribe' && ! empty($ayecode_turnstile_options['protections']['uwp_newsletter_unsubscribe']) ) { + $this->add_turnstile_widget(); + } + } + + public function verify_uwp_newsletter_subscribe($data) { + $ayecode_turnstile_options = get_option( 'ayecode_turnstile_options'); + if(is_array($data)) { + if($data['action'] == 'uwp_newsletter_subscribe' && $ayecode_turnstile_options['protections']['uwp_newsletter_subscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_newsletter_subscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + if($data['action'] == 'uwp_newsletter_unsubscribe' && $ayecode_turnstile_options['protections']['uwp_newsletter_unsubscribe'] == true) { + $verify = $this->verify_turnstile( 'uwp_newsletter_unsubscribe' ); + if ( is_wp_error( $verify ) ) { + return $verify; + } + } + } + return $data; + } + /** * Add some CSS for the login form sizing. * diff --git a/readme.txt b/readme.txt index 43f43bc..21394e0 100755 --- a/readme.txt +++ b/readme.txt @@ -81,10 +81,11 @@ If your host runs "mod security" on your hosting and has some specific additiona == Changelog == -= 1.4.16 - 2026-2-TBD = += 1.4.16 - 2026-TBD = * Turnstile captcha support for UWP Getresponse addon forms - ADDED * Turnstile captcha support for UWP Aweber addon forms - ADDED * Turnstile captcha support for UWP Constant Contact addon forms - ADDED +* Turnstile captcha support for UWP Newsletter addon forms - ADDED = 1.4.15 - 2026-01-22 = * Merge AUI 0.2.43, SD 1.2.31 & AyeCode Connect Helper 1.0.5 - CHANGED