[ label, default category, needles[] ]. * * @return array */ public static function all() { $sigs = array( 'ga4' => array( 'Google Analytics', 'analytics', array( 'gtag/js?id=G-', "'G-", '"G-', 'google-analytics.com' ) ), 'gtm' => array( 'Google Tag Manager', 'analytics', array( 'googletagmanager.com/gtm.js', 'googletagmanager.com/ns.html', "'GTM-", '"GTM-' ) ), 'gtag' => array( 'Google tag (gtag.js)', 'analytics', array( 'googletagmanager.com/gtag/js' ) ), 'gads' => array( 'Google Ads', 'marketing', array( 'id=AW-', "'AW-", '"AW-', 'googleadservices.com' ) ), 'dclick' => array( 'Google DoubleClick / AdSense', 'marketing', array( 'doubleclick.net', 'googlesyndication.com' ) ), 'meta' => array( 'Meta (Facebook) Pixel', 'marketing', array( 'connect.facebook.net', 'fbevents.js', 'fbq(', 'facebook.com/tr' ) ), 'tiktok' => array( 'TikTok Pixel', 'marketing', array( 'analytics.tiktok.com', 'ttq.load' ) ), 'linkedin' => array( 'LinkedIn Insight', 'marketing', array( 'snap.licdn.com', '_linkedin_partner_id' ) ), 'bing' => array( 'Microsoft Ads (UET)', 'marketing', array( 'bat.bing.com', 'uetq' ) ), 'pinterest' => array( 'Pinterest Tag', 'marketing', array( 's.pinimg.com/ct', 'pintrk(' ) ), 'snap' => array( 'Snap Pixel', 'marketing', array( 'sc-static.net', 'snaptr(' ) ), 'x' => array( 'X (Twitter) Pixel', 'marketing', array( 'static.ads-twitter.com', 'twq(' ) ), 'reddit' => array( 'Reddit Pixel', 'marketing', array( 'redditstatic.com/ads', 'rdt(' ) ), 'adroll' => array( 'AdRoll', 'marketing', array( 'adroll.com' ) ), 'criteo' => array( 'Criteo', 'marketing', array( 'criteo.com', 'criteo.net' ) ), 'hubspot' => array( 'HubSpot tracking', 'marketing', array( 'js.hs-scripts.com', 'js.hs-analytics.net' ) ), 'convertbox' => array( 'ConvertBox', 'marketing', array( 'convertbox.com' ) ), 'clarity' => array( 'Microsoft Clarity', 'analytics', array( 'clarity.ms' ) ), 'hotjar' => array( 'Hotjar', 'analytics', array( 'hotjar.com' ) ), 'yandex' => array( 'Yandex Metrica', 'analytics', array( 'mc.yandex.ru' ) ), 'userway' => array( 'UserWay accessibility widget', 'necessary', array( 'cdn.userway.org', 'userway.org/widget' ) ), 'recaptcha' => array( 'Google reCAPTCHA', 'necessary', array( 'google.com/recaptcha', 'gstatic.com/recaptcha' ) ), // phpcs:ignore PluginCheck.CodeAnalysis.Offloading.OffloadedContent -- host names used to recognise third-party tags on the site; nothing is loaded from them. 'turnstile' => array( 'Cloudflare Turnstile', 'necessary', array( 'challenges.cloudflare.com' ) ), // phpcs:ignore PluginCheck.CodeAnalysis.Offloading.OffloadedContent -- host names used to recognise third-party tags on the site; nothing is loaded from them. 'stripe' => array( 'Stripe payments', 'necessary', array( 'js.stripe.com' ) ), 'paypal' => array( 'PayPal', 'necessary', array( 'paypal.com/sdk' ) ), 'maps_js' => array( 'Google Maps API (loads on click)', 'necessary', array( 'maps.googleapis.com', 'maps.google.com/maps/api/js' ) ), 'hq_rental' => array( 'HQ Rental Software (booking; adds a session ID to page URLs)', 'necessary', array( 'caagcrm.com', 'hqrentalsoftware.com' ) ), 'resy' => array( 'Resy reservations', 'necessary', array( 'widgets.resy.com', 'resy.com/embed' ) ), 'opentable' => array( 'OpenTable reservations', 'necessary', array( 'opentable.com/widget', 'otwidget', 'opentable.com/restref' ) ), 'tock' => array( 'Tock reservations', 'necessary', array( 'exploretock.com/tock.js', 'exploretock.com/widget' ) ), 'sevenrooms' => array( 'SevenRooms reservations', 'necessary', array( 'sevenrooms.com/widget', 'sevenrooms.com/embed' ) ), 'toast' => array( 'Toast online ordering', 'necessary', array( 'toasttab.com/online', 'order.toasttab.com' ) ), 'vendasta' => array( 'Vendasta chat / reviews', 'necessary', array( 'cdn.apigateway.co' ) ), ); /** * Filter the signature catalogue. * * @param array $sigs id => [ label, category, needles[] ]. */ return apply_filters( 'goconsent_signatures', $sigs ); } /** * Hosts that only serve libraries or fonts. * * @return string[] */ public static function benign_hosts() { return apply_filters( 'goconsent_benign_hosts', array( 'cdnjs.cloudflare.com', 'cdn.jsdelivr.net', 'unpkg.com', 'code.jquery.com', 'ajax.googleapis.com', 'fonts.googleapis.com', 'fonts.gstatic.com', 'kit.fontawesome.com', 'ka-p.fontawesome.com', 'use.fontawesome.com', 's.w.org', 'secure.gravatar.com' ) // phpcs:ignore PluginCheck.CodeAnalysis.Offloading.OffloadedContent -- host names the scanner treats as harmless; nothing is loaded from them. ); } /** * URL words that suggest tracking. * * @return string[] */ public static function tracking_words() { return apply_filters( 'goconsent_tracking_words', array( 'pixel', 'track', 'analytic', 'beacon', 'collect', 'tag.js', 'tags.', '/tag/', 'gtm', 'insight', 'retarget', 'remarket', 'conversion', 'adsby', 'adserver', 'advert', '/ads/', 'ads.', 'audience', 'segment', 'heatmap', 'session-rec', 'fingerprint', 'attribution', 'affiliate', 'metrics', 'telemetry', 'stats.', 'counter' ) ); } /** * URL words that suggest an essential feature. * * @return string[] */ public static function functional_words() { return apply_filters( 'goconsent_functional_words', array( 'crm', 'book', 'reserv', 'rental', 'checkout', 'payment', 'pay.', 'stripe', 'paypal', 'square', 'braintree', 'captcha', 'turnstile', 'map', 'calendar', 'schedul', 'appointment', 'chat', 'intercom', 'zendesk', 'tawk', 'crisp', 'form', 'typeform', 'jotform', 'widget', 'embed', 'player', 'vimeo', 'wistia', 'accessib', 'userway', 'polyfill', 'jquery' ) ); } }