You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@unomi.apache.org by jk...@apache.org on 2022/11/03 10:00:24 UTC
[unomi-tracker] branch main updated: UNOMI-681: fix fallback for perso in case of control group detected (#11)
This is an automated email from the ASF dual-hosted git repository.
jkevan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/unomi-tracker.git
The following commit(s) were added to refs/heads/main by this push:
new 6ddc3db UNOMI-681: fix fallback for perso in case of control group detected (#11)
6ddc3db is described below
commit 6ddc3db72030264f6290d8db4e5a4191ecf48285
Author: kevan Jahanshahi <jk...@apache.org>
AuthorDate: Thu Nov 3 11:00:20 2022 +0100
UNOMI-681: fix fallback for perso in case of control group detected (#11)
---
dist/apache-unomi-tracker.cjs.js | 31 +-
dist/apache-unomi-tracker.cjs.js.map | 2 +-
dist/apache-unomi-tracker.esm.js | 31 +-
dist/apache-unomi-tracker.esm.js.map | 2 +-
dist/apache-unomi-tracker.umd.js | 3203 +++++++++++++++++-----------------
dist/apache-unomi-tracker.umd.js.map | 2 +-
src/apache-unomi-tracker.js | 37 +-
7 files changed, 1670 insertions(+), 1638 deletions(-)
diff --git a/dist/apache-unomi-tracker.cjs.js b/dist/apache-unomi-tracker.cjs.js
index 2fe114d..606b3b5 100644
--- a/dist/apache-unomi-tracker.cjs.js
+++ b/dist/apache-unomi-tracker.cjs.js
@@ -190,22 +190,29 @@ var newTracker = function newTracker() {
var target = personalization.id;
wem._registerPersonalizationCallback(personalization, function (result) {
+ var selectedFilter = null;
var successfulFilters = [];
- for (var i = 0; i < result.length; i++) {
- successfulFilters.push(variants[result[i]]);
- }
+ var inControlGroup = wem._isInControlGroup(target); // In case of control group Unomi is not resolving any strategy or fallback for us. So we have to do the fallback here.
- var selectedFilter = null;
- if (successfulFilters.length > 0) {
- selectedFilter = successfulFilters[0];
- var minPos = successfulFilters[0].position;
+ if (inControlGroup && personalization.strategyOptions && personalization.strategyOptions.fallback) {
+ selectedFilter = variants[personalization.strategyOptions.fallback];
+ successfulFilters.push(selectedFilter);
+ } else {
+ for (var i = 0; i < result.length; i++) {
+ successfulFilters.push(variants[result[i]]);
+ }
+
+ if (successfulFilters.length > 0) {
+ selectedFilter = successfulFilters[0];
+ var minPos = successfulFilters[0].position;
- if (minPos >= 0) {
- for (var j = 1; j < successfulFilters.length; j++) {
- if (successfulFilters[j].position < minPos) {
- selectedFilter = successfulFilters[j];
+ if (minPos >= 0) {
+ for (var j = 1; j < successfulFilters.length; j++) {
+ if (successfulFilters[j].position < minPos) {
+ selectedFilter = successfulFilters[j];
+ }
}
}
}
@@ -227,7 +234,7 @@ var newTracker = function newTracker() {
} // we now add control group information to event if the user is in the control group.
- if (wem._isInControlGroup(target)) {
+ if (inControlGroup) {
console.info('[WEM] Profile is in control group for target: ' + target + ', adding to personalization event...');
selectedFilter.event.target.properties.inControlGroup = true;
diff --git a/dist/apache-unomi-tracker.cjs.js.map b/dist/apache-unomi-tracker.cjs.js.map
index cacb8c9..e760806 100644
--- a/dist/apache-unomi-tracker.cjs.js.map
+++ b/dist/apache-unomi-tracker.cjs.js.map
@@ -1 +1 @@
-{"version":3,"file":"apache-unomi-tracker.cjs.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compl [...]
\ No newline at end of file
+{"version":3,"file":"apache-unomi-tracker.cjs.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compl [...]
\ No newline at end of file
diff --git a/dist/apache-unomi-tracker.esm.js b/dist/apache-unomi-tracker.esm.js
index 89d8d85..932edc8 100644
--- a/dist/apache-unomi-tracker.esm.js
+++ b/dist/apache-unomi-tracker.esm.js
@@ -182,22 +182,29 @@ var newTracker = function newTracker() {
var target = personalization.id;
wem._registerPersonalizationCallback(personalization, function (result) {
+ var selectedFilter = null;
var successfulFilters = [];
- for (var i = 0; i < result.length; i++) {
- successfulFilters.push(variants[result[i]]);
- }
+ var inControlGroup = wem._isInControlGroup(target); // In case of control group Unomi is not resolving any strategy or fallback for us. So we have to do the fallback here.
- var selectedFilter = null;
- if (successfulFilters.length > 0) {
- selectedFilter = successfulFilters[0];
- var minPos = successfulFilters[0].position;
+ if (inControlGroup && personalization.strategyOptions && personalization.strategyOptions.fallback) {
+ selectedFilter = variants[personalization.strategyOptions.fallback];
+ successfulFilters.push(selectedFilter);
+ } else {
+ for (var i = 0; i < result.length; i++) {
+ successfulFilters.push(variants[result[i]]);
+ }
+
+ if (successfulFilters.length > 0) {
+ selectedFilter = successfulFilters[0];
+ var minPos = successfulFilters[0].position;
- if (minPos >= 0) {
- for (var j = 1; j < successfulFilters.length; j++) {
- if (successfulFilters[j].position < minPos) {
- selectedFilter = successfulFilters[j];
+ if (minPos >= 0) {
+ for (var j = 1; j < successfulFilters.length; j++) {
+ if (successfulFilters[j].position < minPos) {
+ selectedFilter = successfulFilters[j];
+ }
}
}
}
@@ -219,7 +226,7 @@ var newTracker = function newTracker() {
} // we now add control group information to event if the user is in the control group.
- if (wem._isInControlGroup(target)) {
+ if (inControlGroup) {
console.info('[WEM] Profile is in control group for target: ' + target + ', adding to personalization event...');
selectedFilter.event.target.properties.inControlGroup = true;
diff --git a/dist/apache-unomi-tracker.esm.js.map b/dist/apache-unomi-tracker.esm.js.map
index 3cbde92..e1a80e5 100644
--- a/dist/apache-unomi-tracker.esm.js.map
+++ b/dist/apache-unomi-tracker.esm.js.map
@@ -1 +1 @@
-{"version":3,"file":"apache-unomi-tracker.esm.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compl [...]
\ No newline at end of file
+{"version":3,"file":"apache-unomi-tracker.esm.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compl [...]
\ No newline at end of file
diff --git a/dist/apache-unomi-tracker.umd.js b/dist/apache-unomi-tracker.umd.js
index 57edd16..327be82 100644
--- a/dist/apache-unomi-tracker.umd.js
+++ b/dist/apache-unomi-tracker.umd.js
@@ -41,1467 +41,1467 @@
var provider = Provider$3;
- const Provider$2 = provider;
-
- class Crawlers$1 extends Provider$2 {
- constructor() {
- super();
-
- this.data = [
- ' YLT',
- '^Aether',
- '^Amazon Simple Notification Service Agent$',
- '^Amazon-Route53-Health-Check-Service',
- '^b0t$',
- '^bluefish ',
- '^Calypso v\\/',
- '^COMODO DCV',
- '^Corax',
- '^DangDang',
- '^DavClnt',
- '^DHSH',
- '^docker\\/[0-9]',
- '^Expanse',
- '^FDM ',
- '^git\\/',
- '^Goose\\/',
- '^Grabber',
- '^Gradle\\/',
- '^HTTPClient\\/',
- '^HTTPing',
- '^Java\\/',
- '^Jeode\\/',
- '^Jetty\\/',
- '^Mail\\/',
- '^Mget',
- '^Microsoft URL Control',
- '^Mikrotik\\/',
- '^Netlab360',
- '^NG\\/[0-9\\.]',
- '^NING\\/',
- '^npm\\/',
- '^Nuclei',
- '^PHP-AYMAPI\\/',
- '^PHP\\/',
- '^pip\\/',
- '^pnpm\\/',
- '^RMA\\/',
- '^Ruby|Ruby\\/[0-9]',
- '^Swurl ',
- '^TLS tester ',
- '^twine\\/',
- '^ureq',
- '^VSE\\/[0-9]',
- '^WordPress\\.com',
- '^XRL\\/[0-9]',
- '^ZmEu',
- '008\\/',
- '13TABS',
- '192\\.comAgent',
- '2GDPR\\/',
- '2ip\\.ru',
- '404enemy',
- '7Siters',
- '80legs',
- 'a3logics\\.in',
- 'A6-Indexer',
- 'Abonti',
- 'Aboundex',
- 'aboutthedomain',
- 'Accoona-AI-Agent',
- 'acebookexternalhit\\/',
- 'acoon',
- 'acrylicapps\\.com\\/pulp',
- 'Acunetix',
- 'AdAuth\\/',
- 'adbeat',
- 'AddThis',
- 'ADmantX',
- 'AdminLabs',
- 'adressendeutschland',
- 'adreview\\/',
- 'adscanner',
- 'adstxt-worker',
- 'Adstxtaggregator',
- 'adstxt\\.com',
- 'Adyen HttpClient',
- 'AffiliateLabz\\/',
- 'affilimate-puppeteer',
- 'agentslug',
- 'AHC',
- 'aihit',
- 'aiohttp\\/',
- 'Airmail',
- 'akka-http\\/',
- 'akula\\/',
- 'alertra',
- 'alexa site audit',
- 'Alibaba\\.Security\\.Heimdall',
- 'Alligator',
- 'allloadin',
- 'AllSubmitter',
- 'alyze\\.info',
- 'amagit',
- 'Anarchie',
- 'AndroidDownloadManager',
- 'Anemone',
- 'AngleSharp',
- 'annotate_google',
- 'Anthill',
- 'Anturis Agent',
- 'Ant\\.com',
- 'AnyEvent-HTTP\\/',
- 'Apache Ant\\/',
- 'Apache Droid',
- 'Apache OpenOffice',
- 'Apache-HttpAsyncClient',
- 'Apache-HttpClient',
- 'ApacheBench',
- 'Apexoo',
- 'apimon\\.de',
- 'APIs-Google',
- 'AportWorm\\/',
- 'AppBeat\\/',
- 'AppEngine-Google',
- 'AppleSyndication',
- 'Aprc\\/[0-9]',
- 'Arachmo',
- 'arachnode',
- 'Arachnophilia',
- 'aria2',
- 'Arukereso',
- 'asafaweb',
- 'Asana\\/',
- 'Ask Jeeves',
- 'AskQuickly',
- 'ASPSeek',
- 'Asterias',
- 'Astute',
- 'asynchttp',
- 'Attach',
- 'attohttpc',
- 'autocite',
- 'AutomaticWPTester',
- 'Autonomy',
- 'awin\\.com',
- 'AWS Security Scanner',
- 'axios\\/',
- 'a\\.pr-cy\\.ru',
- 'B-l-i-t-z-B-O-T',
- 'Backlink-Ceck',
- 'backlink-check',
- 'BacklinkHttpStatus',
- 'BackStreet',
- 'BackupLand',
- 'BackWeb',
- 'Bad-Neighborhood',
- 'Badass',
- 'baidu\\.com',
- 'Bandit',
- 'basicstate',
- 'BatchFTP',
- 'Battleztar Bazinga',
- 'baypup\\/',
- 'BazQux',
- 'BBBike',
- 'BCKLINKS',
- 'BDFetch',
- 'BegunAdvertising',
- 'Bewica-security-scan',
- 'Bidtellect',
- 'BigBozz',
- 'Bigfoot',
- 'biglotron',
- 'BingLocalSearch',
- 'BingPreview',
- 'binlar',
- 'biNu image cacher',
- 'Bitacle',
- 'Bitrix link preview',
- 'biz_Directory',
- 'BKCTwitterUnshortener\\/',
- 'Black Hole',
- 'Blackboard Safeassign',
- 'BlackWidow',
- 'BlockNote\\.Net',
- 'BlogBridge',
- 'Bloglines',
- 'Bloglovin',
- 'BlogPulseLive',
- 'BlogSearch',
- 'Blogtrottr',
- 'BlowFish',
- 'boitho\\.com-dc',
- 'Boost\\.Beast',
- 'BPImageWalker',
- 'Braintree-Webhooks',
- 'Branch Metrics API',
- 'Branch-Passthrough',
- 'Brandprotect',
- 'BrandVerity',
- 'Brandwatch',
- 'Brodie\\/',
- 'Browsershots',
- 'BUbiNG',
- 'Buck\\/',
- 'Buddy',
- 'BuiltWith',
- 'Bullseye',
- 'BunnySlippers',
- 'Burf Search',
- 'Butterfly\\/',
- 'BuzzSumo',
- 'CAAM\\/[0-9]',
- 'CakePHP',
- 'Calculon',
- 'Canary%20Mail',
- 'CaretNail',
- 'catexplorador',
- 'CC Metadata Scaper',
- 'Cegbfeieh',
- 'censys',
- 'centuryb.o.t9[at]gmail.com',
- 'Cerberian Drtrs',
- 'CERT\\.at-Statistics-Survey',
- 'cf-facebook',
- 'cg-eye',
- 'changedetection',
- 'ChangesMeter',
- 'Charlotte',
- 'CheckHost',
- 'checkprivacy',
- 'CherryPicker',
- 'ChinaClaw',
- 'Chirp\\/',
- 'chkme\\.com',
- 'Chlooe',
- 'Chromaxa',
- 'CirrusExplorer',
- 'CISPA Vulnerability Notification',
- 'CISPA Web Analyser',
- 'Citoid',
- 'CJNetworkQuality',
- 'Clarsentia',
- 'clips\\.ua\\.ac\\.be',
- 'Cloud mapping',
- 'CloudEndure',
- 'CloudFlare-AlwaysOnline',
- 'Cloudflare-Healthchecks',
- 'Cloudinary',
- 'cmcm\\.com',
- 'coccoc',
- 'cognitiveseo',
- 'ColdFusion',
- 'colly -',
- 'CommaFeed',
- 'Commons-HttpClient',
- 'commonscan',
- 'contactbigdatafr',
- 'contentkingapp',
- 'Contextual Code Sites Explorer',
- 'convera',
- 'CookieReports',
- 'copyright sheriff',
- 'CopyRightCheck',
- 'Copyscape',
- 'cortex\\/',
- 'Cosmos4j\\.feedback',
- 'Covario-IDS',
- 'Craw\\/',
- 'Crescent',
- 'Criteo',
- 'Crowsnest',
- 'CSHttp',
- 'CSSCheck',
- 'Cula\\/',
- 'curb',
- 'Curious George',
- 'curl',
- 'cuwhois\\/',
- 'cybo\\.com',
- 'DAP\\/NetHTTP',
- 'DareBoost',
- 'DatabaseDriverMysqli',
- 'DataCha0s',
- 'Datafeedwatch',
- 'Datanyze',
- 'DataparkSearch',
- 'dataprovider',
- 'DataXu',
- 'Daum(oa)?[ \\/][0-9]',
- 'dBpoweramp',
- 'ddline',
- 'deeris',
- 'delve\\.ai',
- 'Demon',
- 'DeuSu',
- 'developers\\.google\\.com\\/\\+\\/web\\/snippet\\/',
- 'Devil',
- 'Digg',
- 'Digincore',
- 'DigitalPebble',
- 'Dirbuster',
- 'Discourse Forum Onebox',
- 'Dispatch\\/',
- 'Disqus\\/',
- 'DittoSpyder',
- 'dlvr',
- 'DMBrowser',
- 'DNSPod-reporting',
- 'docoloc',
- 'Dolphin http client',
- 'DomainAppender',
- 'DomainLabz',
- 'Domains Project\\/',
- 'Donuts Content Explorer',
- 'dotMailer content retrieval',
- 'dotSemantic',
- 'downforeveryoneorjustme',
- 'Download Wonder',
- 'downnotifier',
- 'DowntimeDetector',
- 'Drip',
- 'drupact',
- 'Drupal \\(\\+http:\\/\\/drupal\\.org\\/\\)',
- 'DTS Agent',
- 'dubaiindex',
- 'DuplexWeb-Google',
- 'DynatraceSynthetic',
- 'EARTHCOM',
- 'Easy-Thumb',
- 'EasyDL',
- 'Ebingbong',
- 'ec2linkfinder',
- 'eCairn-Grabber',
- 'eCatch',
- 'ECCP',
- 'eContext\\/',
- 'Ecxi',
- 'EirGrabber',
- 'ElectricMonk',
- 'elefent',
- 'EMail Exractor',
- 'EMail Wolf',
- 'EmailWolf',
- 'Embarcadero',
- 'Embed PHP Library',
- 'Embedly',
- 'endo\\/',
- 'europarchive\\.org',
- 'evc-batch',
- 'EventMachine HttpClient',
- 'Everwall Link Expander',
- 'Evidon',
- 'Evrinid',
- 'ExactSearch',
- 'ExaleadCloudview',
- 'Excel\\/',
- 'exif',
- 'ExoRank',
- 'Exploratodo',
- 'Express WebPictures',
- 'Extreme Picture Finder',
- 'EyeNetIE',
- 'ezooms',
- 'facebookexternalhit',
- 'facebookexternalua',
- 'facebookplatform',
- 'fairshare',
- 'Faraday v',
- 'fasthttp',
- 'Faveeo',
- 'Favicon downloader',
- 'faviconarchive',
- 'faviconkit',
- 'FavOrg',
- 'Feed Wrangler',
- 'Feedable\\/',
- 'Feedbin',
- 'FeedBooster',
- 'FeedBucket',
- 'FeedBunch\\/',
- 'FeedBurner',
- 'feeder',
- 'Feedly',
- 'FeedshowOnline',
- 'Feedshow\\/',
- 'Feedspot',
- 'FeedViewer\\/',
- 'Feedwind\\/',
- 'FeedZcollector',
- 'feeltiptop',
- 'Fetch API',
- 'Fetch\\/[0-9]',
- 'Fever\\/[0-9]',
- 'FHscan',
- 'Fiery%20Feeds',
- 'Filestack',
- 'Fimap',
- 'findlink',
- 'findthatfile',
- 'FlashGet',
- 'FlipboardBrowserProxy',
- 'FlipboardProxy',
- 'FlipboardRSS',
- 'Flock\\/',
- 'Florienzh\\/',
- 'fluffy',
- 'Flunky',
- 'flynxapp',
- 'forensiq',
- 'FoundSeoTool',
- 'free thumbnails',
- 'Freeuploader',
- 'FreshRSS',
- 'Funnelback',
- 'Fuzz Faster U Fool',
- 'G-i-g-a-b-o-t',
- 'g00g1e\\.net',
- 'ganarvisitas',
- 'gdnplus\\.com',
- 'geek-tools',
- 'Genieo',
- 'GentleSource',
- 'GetCode',
- 'Getintent',
- 'GetLinkInfo',
- 'getprismatic',
- 'GetRight',
- 'getroot',
- 'GetURLInfo\\/',
- 'GetWeb',
- 'Geziyor',
- 'Ghost Inspector',
- 'GigablastOpenSource',
- 'GIS-LABS',
- 'github-camo',
- 'GitHub-Hookshot',
- 'github\\.com',
- 'Go http package',
- 'Go [\\d\\.]* package http',
- 'Go!Zilla',
- 'Go-Ahead-Got-It',
- 'Go-http-client',
- 'go-mtasts\\/',
- 'gobyus',
- 'Gofeed',
- 'gofetch',
- 'Goldfire Server',
- 'GomezAgent',
- 'gooblog',
- 'Goodzer\\/',
- 'Google AppsViewer',
- 'Google Desktop',
- 'Google favicon',
- 'Google Keyword Suggestion',
- 'Google Keyword Tool',
- 'Google Page Speed Insights',
- 'Google PP Default',
- 'Google Search Console',
- 'Google Web Preview',
- 'Google-Ads-Creatives-Assistant',
- 'Google-Ads-Overview',
- 'Google-Adwords',
- 'Google-Apps-Script',
- 'Google-Calendar-Importer',
- 'Google-HotelAdsVerifier',
- 'Google-HTTP-Java-Client',
- 'Google-Podcast',
- 'Google-Publisher-Plugin',
- 'Google-Read-Aloud',
- 'Google-SearchByImage',
- 'Google-Site-Verification',
- 'Google-SMTP-STS',
- 'Google-speakr',
- 'Google-Structured-Data-Testing-Tool',
- 'Google-Transparency-Report',
- 'google-xrawler',
- 'Google-Youtube-Links',
- 'GoogleDocs',
- 'GoogleHC\\/',
- 'GoogleProber',
- 'GoogleProducer',
- 'GoogleSites',
- 'Gookey',
- 'GoSpotCheck',
- 'gosquared-thumbnailer',
- 'Gotit',
- 'GoZilla',
- 'grabify',
- 'GrabNet',
- 'Grafula',
- 'Grammarly',
- 'GrapeFX',
- 'GreatNews',
- 'Gregarius',
- 'GRequests',
- 'grokkit',
- 'grouphigh',
- 'grub-client',
- 'gSOAP\\/',
- 'GT::WWW',
- 'GTmetrix',
- 'GuzzleHttp',
- 'gvfs\\/',
- 'HAA(A)?RTLAND http client',
- 'Haansoft',
- 'hackney\\/',
- 'Hadi Agent',
- 'HappyApps-WebCheck',
- 'Hardenize',
- 'Hatena',
- 'Havij',
- 'HaxerMen',
- 'HeadlessChrome',
- 'HEADMasterSEO',
- 'HeartRails_Capture',
- 'help@dataminr\\.com',
- 'heritrix',
- 'Hexometer',
- 'historious',
- 'hkedcity',
- 'hledejLevne\\.cz',
- 'Hloader',
- 'HMView',
- 'Holmes',
- 'HonesoSearchEngine',
- 'HootSuite Image proxy',
- 'Hootsuite-WebFeed',
- 'hosterstats',
- 'HostTracker',
- 'ht:\\/\\/check',
- 'htdig',
- 'HTMLparser',
- 'htmlyse',
- 'HTTP Banner Detection',
- 'http-get',
- 'HTTP-Header-Abfrage',
- 'http-kit',
- 'http-request\\/',
- 'HTTP-Tiny',
- 'HTTP::Lite',
- 'http:\\/\\/www.neomo.de\\/',
- 'HttpComponents',
- 'httphr',
- 'HTTPie',
- 'HTTPMon',
- 'httpRequest',
- 'httpscheck',
- 'httpssites_power',
- 'httpunit',
- 'HttpUrlConnection',
- 'http\\.rb\\/',
- 'HTTP_Compression_Test',
- 'http_get',
- 'http_request2',
- 'http_requester',
- 'httrack',
- 'huaweisymantec',
- 'HubSpot ',
- 'HubSpot-Link-Resolver',
- 'Humanlinks',
- 'i2kconnect\\/',
- 'Iblog',
- 'ichiro',
- 'Id-search',
- 'IdeelaborPlagiaat',
- 'IDG Twitter Links Resolver',
- 'IDwhois\\/',
- 'Iframely',
- 'igdeSpyder',
- 'iGooglePortal',
- 'IlTrovatore',
- 'Image Fetch',
- 'Image Sucker',
- 'ImageEngine\\/',
- 'ImageVisu\\/',
- 'Imagga',
- 'imagineeasy',
- 'imgsizer',
- 'InAGist',
- 'inbound\\.li parser',
- 'InDesign%20CC',
- 'Indy Library',
- 'InetURL',
- 'infegy',
- 'infohelfer',
- 'InfoTekies',
- 'InfoWizards Reciprocal Link',
- 'inpwrd\\.com',
- 'instabid',
- 'Instapaper',
- 'Integrity',
- 'integromedb',
- 'Intelliseek',
- 'InterGET',
- 'Internet Ninja',
- 'InternetSeer',
- 'internetVista monitor',
- 'internetwache',
- 'internet_archive',
- 'intraVnews',
- 'IODC',
- 'IOI',
- 'iplabel',
- 'ips-agent',
- 'IPS\\/[0-9]',
- 'IPWorks HTTP\\/S Component',
- 'iqdb\\/',
- 'Iria',
- 'Irokez',
- 'isitup\\.org',
- 'iskanie',
- 'isUp\\.li',
- 'iThemes Sync\\/',
- 'IZaBEE',
- 'iZSearch',
- 'JAHHO',
- 'janforman',
- 'Jaunt\\/',
- 'Java.*outbrain',
- 'javelin\\.io',
- 'Jbrofuzz',
- 'Jersey\\/',
- 'JetCar',
- 'Jigsaw',
- 'Jobboerse',
- 'JobFeed discovery',
- 'Jobg8 URL Monitor',
- 'jobo',
- 'Jobrapido',
- 'Jobsearch1\\.5',
- 'JoinVision Generic',
- 'JolokiaPwn',
- 'Joomla',
- 'Jorgee',
- 'JS-Kit',
- 'JungleKeyThumbnail',
- 'JustView',
- 'Kaspersky Lab CFR link resolver',
- 'Kelny\\/',
- 'Kerrigan\\/',
- 'KeyCDN',
- 'Keyword Density',
- 'Keywords Research',
- 'khttp\\/',
- 'KickFire',
- 'KimonoLabs\\/',
- 'Kml-Google',
- 'knows\\.is',
- 'KOCMOHABT',
- 'kouio',
- 'kube-probe',
- 'kubectl',
- 'kulturarw3',
- 'KumKie',
- 'Larbin',
- 'Lavf\\/',
- 'leakix\\.net',
- 'LeechFTP',
- 'LeechGet',
- 'letsencrypt',
- 'Lftp',
- 'LibVLC',
- 'LibWeb',
- 'Libwhisker',
- 'libwww',
- 'Licorne',
- 'Liferea\\/',
- 'Lighthouse',
- 'Lightspeedsystems',
- 'Likse',
- 'limber\\.io',
- 'Link Valet',
- 'LinkAlarm\\/',
- 'LinkAnalyser',
- 'linkCheck',
- 'linkdex',
- 'LinkExaminer',
- 'linkfluence',
- 'linkpeek',
- 'LinkPreview',
- 'LinkScan',
- 'LinksManager',
- 'LinkTiger',
- 'LinkWalker',
- 'link_thumbnailer',
- 'Lipperhey',
- 'Litemage_walker',
- 'livedoor ScreenShot',
- 'LoadImpactRload',
- 'localsearch-web',
- 'LongURL API',
- 'longurl-r-package',
- 'looid\\.com',
- 'looksystems\\.net',
- 'ltx71',
- 'lua-resty-http',
- 'Lucee \\(CFML Engine\\)',
- 'Lush Http Client',
- 'lwp-request',
- 'lwp-trivial',
- 'LWP::Simple',
- 'lycos',
- 'LYT\\.SR',
- 'L\\.webis',
- 'mabontland',
- 'MacOutlook\\/',
- 'Mag-Net',
- 'MagpieRSS',
- 'Mail::STS',
- 'MailChimp',
- 'Mail\\.Ru',
- 'Majestic12',
- 'makecontact\\/',
- 'Mandrill',
- 'MapperCmd',
- 'marketinggrader',
- 'MarkMonitor',
- 'MarkWatch',
- 'Mass Downloader',
- 'masscan\\/',
- 'Mata Hari',
- 'mattermost',
- 'Mediametric',
- 'Mediapartners-Google',
- 'mediawords',
- 'MegaIndex\\.ru',
- 'MeltwaterNews',
- 'Melvil Rawi',
- 'MemGator',
- 'Metaspinner',
- 'MetaURI',
- 'MFC_Tear_Sample',
- 'Microsearch',
- 'Microsoft Data Access',
- 'Microsoft Office',
- 'Microsoft Outlook',
- 'Microsoft Windows Network Diagnostics',
- 'Microsoft-WebDAV-MiniRedir',
- 'Microsoft\\.Data\\.Mashup',
- 'MIDown tool',
- 'MIIxpc',
- 'Mindjet',
- 'Miniature\\.io',
- 'Miniflux',
- 'mio_httpc',
- 'Miro-HttpClient',
- 'Mister PiX',
- 'mixdata dot com',
- 'mixed-content-scan',
- 'mixnode',
- 'Mnogosearch',
- 'mogimogi',
- 'Mojeek',
- 'Mojolicious \\(Perl\\)',
- 'monitis',
- 'Monitority\\/',
- 'Monit\\/',
- 'montastic',
- 'MonTools',
- 'Moreover',
- 'Morfeus Fucking Scanner',
- 'Morning Paper',
- 'MovableType',
- 'mowser',
- 'Mrcgiguy',
- 'Mr\\.4x3 Powered',
- 'MS Web Services Client Protocol',
- 'MSFrontPage',
- 'mShots',
- 'MuckRack\\/',
- 'muhstik-scan',
- 'MVAClient',
- 'MxToolbox\\/',
- 'myseosnapshot',
- 'nagios',
- 'Najdi\\.si',
- 'Name Intelligence',
- 'NameFo\\.com',
- 'Nameprotect',
- 'nationalarchives',
- 'Navroad',
- 'NearSite',
- 'Needle',
- 'Nessus',
- 'Net Vampire',
- 'NetAnts',
- 'NETCRAFT',
- 'NetLyzer',
- 'NetMechanic',
- 'NetNewsWire',
- 'Netpursual',
- 'netresearch',
- 'NetShelter ContentScan',
- 'Netsparker',
- 'NetSystemsResearch',
- 'nettle',
- 'NetTrack',
- 'Netvibes',
- 'NetZIP',
- 'Neustar WPM',
- 'NeutrinoAPI',
- 'NewRelicPinger',
- 'NewsBlur .*Finder',
- 'NewsGator',
- 'newsme',
- 'newspaper\\/',
- 'Nexgate Ruby Client',
- 'NG-Search',
- 'nghttp2',
- 'Nibbler',
- 'NICErsPRO',
- 'NihilScio',
- 'Nikto',
- 'nineconnections',
- 'NLNZ_IAHarvester',
- 'Nmap Scripting Engine',
- 'node-fetch',
- 'node-superagent',
- 'node-urllib',
- 'Nodemeter',
- 'NodePing',
- 'node\\.io',
- 'nominet\\.org\\.uk',
- 'nominet\\.uk',
- 'Norton-Safeweb',
- 'Notifixious',
- 'notifyninja',
- 'NotionEmbedder',
- 'nuhk',
- 'nutch',
- 'Nuzzel',
- 'nWormFeedFinder',
- 'nyawc\\/',
- 'Nymesis',
- 'NYU',
- 'Observatory\\/',
- 'Ocelli\\/',
- 'Octopus',
- 'oegp',
- 'Offline Explorer',
- 'Offline Navigator',
- 'OgScrper',
- 'okhttp',
- 'omgili',
- 'OMSC',
- 'Online Domain Tools',
- 'Open Source RSS',
- 'OpenCalaisSemanticProxy',
- 'Openfind',
- 'OpenLinkProfiler',
- 'Openstat\\/',
- 'OpenVAS',
- 'OPPO A33',
- 'Optimizer',
- 'Orbiter',
- 'OrgProbe\\/',
- 'orion-semantics',
- 'Outlook-Express',
- 'Outlook-iOS',
- 'Owler',
- 'Owlin',
- 'ownCloud News',
- 'ow\\.ly',
- 'OxfordCloudService',
- 'page scorer',
- 'Page Valet',
- 'page2rss',
- 'PageFreezer',
- 'PageGrabber',
- 'PagePeeker',
- 'PageScorer',
- 'Pagespeed\\/',
- 'PageThing',
- 'page_verifier',
- 'Panopta',
- 'panscient',
- 'Papa Foto',
- 'parsijoo',
- 'Pavuk',
- 'PayPal IPN',
- 'pcBrowser',
- 'Pcore-HTTP',
- 'PDF24 URL To PDF',
- 'Pearltrees',
- 'PECL::HTTP',
- 'peerindex',
- 'Peew',
- 'PeoplePal',
- 'Perlu -',
- 'PhantomJS Screenshoter',
- 'PhantomJS\\/',
- 'Photon\\/',
- 'php-requests',
- 'phpservermon',
- 'Pi-Monster',
- 'Picscout',
- 'Picsearch',
- 'PictureFinder',
- 'Pimonster',
- 'Pingability',
- 'PingAdmin\\.Ru',
- 'Pingdom',
- 'Pingoscope',
- 'PingSpot',
- 'ping\\.blo\\.gs',
- 'pinterest\\.com',
- 'Pixray',
- 'Pizilla',
- 'Plagger\\/',
- 'Pleroma ',
- 'Ploetz \\+ Zeller',
- 'Plukkie',
- 'plumanalytics',
- 'PocketImageCache',
- 'PocketParser',
- 'Pockey',
- 'PodcastAddict\\/',
- 'POE-Component-Client-HTTP',
- 'Polymail\\/',
- 'Pompos',
- 'Porkbun',
- 'Port Monitor',
- 'postano',
- 'postfix-mta-sts-resolver',
- 'PostmanRuntime',
- 'postplanner\\.com',
- 'PostPost',
- 'postrank',
- 'PowerPoint\\/',
- 'Prebid',
- 'Prerender',
- 'Priceonomics Analysis Engine',
- 'PrintFriendly',
- 'PritTorrent',
- 'Prlog',
- 'probethenet',
- 'Project ?25499',
- 'Project-Resonance',
- 'prospectb2b',
- 'Protopage',
- 'ProWebWalker',
- 'proximic',
- 'PRTG Network Monitor',
- 'pshtt, https scanning',
- 'PTST ',
- 'PTST\\/[0-9]+',
- 'Pump',
- 'Python-httplib2',
- 'python-httpx',
- 'python-requests',
- 'Python-urllib',
- 'Qirina Hurdler',
- 'QQDownload',
- 'QrafterPro',
- 'Qseero',
- 'Qualidator',
- 'QueryN Metasearch',
- 'queuedriver',
- 'quic-go-HTTP\\/',
- 'QuiteRSS',
- 'Quora Link Preview',
- 'Qwantify',
- 'Radian6',
- 'RadioPublicImageResizer',
- 'Railgun\\/',
- 'RankActive',
- 'RankFlex',
- 'RankSonicSiteAuditor',
- 'RapidLoad\\/',
- 'Re-re Studio',
- 'ReactorNetty',
- 'Readability',
- 'RealDownload',
- 'RealPlayer%20Downloader',
- 'RebelMouse',
- 'Recorder',
- 'RecurPost\\/',
- 'redback\\/',
- 'ReederForMac',
- 'Reeder\\/',
- 'ReGet',
- 'RepoMonkey',
- 'request\\.js',
- 'reqwest\\/',
- 'ResponseCodeTest',
- 'RestSharp',
- 'Riddler',
- 'Rival IQ',
- 'Robosourcer',
- 'Robozilla',
- 'ROI Hunter',
- 'RPT-HTTPClient',
- 'RSSMix\\/',
- 'RSSOwl',
- 'RyowlEngine',
- 'safe-agent-scanner',
- 'SalesIntelligent',
- 'Saleslift',
- 'SAP NetWeaver Application Server',
- 'SauceNAO',
- 'SBIder',
- 'sc-downloader',
- 'scalaj-http',
- 'Scamadviser-Frontend',
- 'ScanAlert',
- 'scan\\.lol',
- 'Scoop',
- 'scooter',
- 'ScopeContentAG-HTTP-Client',
- 'ScoutJet',
- 'ScoutURLMonitor',
- 'ScrapeBox Page Scanner',
- 'Scrapy',
- 'Screaming',
- 'ScreenShotService',
- 'Scrubby',
- 'Scrutiny\\/',
- 'Search37',
- 'searchenginepromotionhelp',
- 'Searchestate',
- 'SearchExpress',
- 'SearchSight',
- 'SearchWP',
- 'search\\.thunderstone',
- 'Seeker',
- 'semanticdiscovery',
- 'semanticjuice',
- 'Semiocast HTTP client',
- 'Semrush',
- 'Sendsay\\.Ru',
- 'sentry\\/',
- 'SEO Browser',
- 'Seo Servis',
- 'seo-nastroj\\.cz',
- 'seo4ajax',
- 'Seobility',
- 'SEOCentro',
- 'SeoCheck',
- 'SEOkicks',
- 'SEOlizer',
- 'Seomoz',
- 'SEOprofiler',
- 'seoscanners',
- 'SEOsearch',
- 'seositecheckup',
- 'SEOstats',
- 'servernfo',
- 'sexsearcher',
- 'Seznam',
- 'Shelob',
- 'Shodan',
- 'Shoppimon',
- 'ShopWiki',
- 'ShortLinkTranslate',
- 'shortURL lengthener',
- 'shrinktheweb',
- 'Sideqik',
- 'Siege',
- 'SimplePie',
- 'SimplyFast',
- 'Siphon',
- 'SISTRIX',
- 'Site Sucker',
- 'Site-Shot\\/',
- 'Site24x7',
- 'SiteBar',
- 'Sitebeam',
- 'Sitebulb\\/',
- 'SiteCondor',
- 'SiteExplorer',
- 'SiteGuardian',
- 'Siteimprove',
- 'SiteIndexed',
- 'Sitemap(s)? Generator',
- 'SitemapGenerator',
- 'SiteMonitor',
- 'Siteshooter B0t',
- 'SiteSnagger',
- 'SiteSucker',
- 'SiteTruth',
- 'Sitevigil',
- 'sitexy\\.com',
- 'SkypeUriPreview',
- 'Slack\\/',
- 'sli-systems\\.com',
- 'slider\\.com',
- 'slurp',
- 'SlySearch',
- 'SmartDownload',
- 'SMRF URL Expander',
- 'SMUrlExpander',
- 'Snake',
- 'Snappy',
- 'SnapSearch',
- 'Snarfer\\/',
- 'SniffRSS',
- 'sniptracker',
- 'Snoopy',
- 'SnowHaze Search',
- 'sogou web',
- 'SortSite',
- 'Sottopop',
- 'sovereign\\.ai',
- 'SpaceBison',
- 'SpamExperts',
- 'Spammen',
- 'Spanner',
- 'spaziodati',
- 'SPDYCheck',
- 'Specificfeeds',
- 'speedy',
- 'SPEng',
- 'Spinn3r',
- 'spray-can',
- 'Sprinklr ',
- 'spyonweb',
- 'sqlmap',
- 'Sqlworm',
- 'Sqworm',
- 'SSL Labs',
- 'ssl-tools',
- 'StackRambler',
- 'Statastico\\/',
- 'Statically-',
- 'StatusCake',
- 'Steeler',
- 'Stratagems Kumo',
- 'Stripe\\/',
- 'Stroke\\.cz',
- 'StudioFACA',
- 'StumbleUpon',
- 'suchen',
- 'Sucuri',
- 'summify',
- 'SuperHTTP',
- 'Surphace Scout',
- 'Suzuran',
- 'swcd ',
- 'Symfony BrowserKit',
- 'Symfony2 BrowserKit',
- 'Synapse\\/',
- 'Syndirella\\/',
- 'SynHttpClient-Built',
- 'Sysomos',
- 'sysscan',
- 'Szukacz',
- 'T0PHackTeam',
- 'tAkeOut',
- 'Tarantula\\/',
- 'Taringa UGC',
- 'TarmotGezgin',
- 'tchelebi\\.io',
- 'techiaith\\.cymru',
- 'TelegramBot',
- 'Teleport',
- 'Telesoft',
- 'Telesphoreo',
- 'Telesphorep',
- 'Tenon\\.io',
- 'teoma',
- 'terrainformatica',
- 'Test Certificate Info',
- 'testuri',
- 'Tetrahedron',
- 'TextRazor Downloader',
- 'The Drop Reaper',
- 'The Expert HTML Source Viewer',
- 'The Intraformant',
- 'The Knowledge AI',
- 'theinternetrules',
- 'TheNomad',
- 'Thinklab',
- 'Thumbor',
- 'Thumbshots',
- 'ThumbSniper',
- 'timewe\\.net',
- 'TinEye',
- 'Tiny Tiny RSS',
- 'TLSProbe\\/',
- 'Toata',
- 'topster',
- 'touche\\.com',
- 'Traackr\\.com',
- 'tracemyfile',
- 'Trackuity',
- 'TrapitAgent',
- 'Trendiction',
- 'Trendsmap',
- 'trendspottr',
- 'truwoGPS',
- 'TryJsoup',
- 'TulipChain',
- 'Turingos',
- 'Turnitin',
- 'tweetedtimes',
- 'Tweetminster',
- 'Tweezler\\/',
- 'twibble',
- 'Twice',
- 'Twikle',
- 'Twingly',
- 'Twisted PageGetter',
- 'Typhoeus',
- 'ubermetrics-technologies',
- 'uclassify',
- 'UdmSearch',
- 'ultimate_sitemap_parser',
- 'unchaos',
- 'unirest-java',
- 'UniversalFeedParser',
- 'unshortenit',
- 'Unshorten\\.It',
- 'Untiny',
- 'UnwindFetchor',
- 'updated',
- 'updown\\.io daemon',
- 'Upflow',
- 'Uptimia',
- 'URL Verifier',
- 'Urlcheckr',
- 'URLitor',
- 'urlresolver',
- 'Urlstat',
- 'URLTester',
- 'UrlTrends Ranking Updater',
- 'URLy Warning',
- 'URLy\\.Warning',
- 'URL\\/Emacs',
- 'Vacuum',
- 'Vagabondo',
- 'VB Project',
- 'vBSEO',
- 'VCI',
- 'via ggpht\\.com GoogleImageProxy',
- 'Virusdie',
- 'visionutils',
- 'vkShare',
- 'VoidEYE',
- 'Voil',
- 'voltron',
- 'voyager\\/',
- 'VSAgent\\/',
- 'VSB-TUO\\/',
- 'Vulnbusters Meter',
- 'VYU2',
- 'w3af\\.org',
- 'W3C-checklink',
- 'W3C-mobileOK',
- 'W3C_Unicorn',
- 'WAC-OFU',
- 'WakeletLinkExpander',
- 'WallpapersHD',
- 'Wallpapers\\/[0-9]+',
- 'wangling',
- 'Wappalyzer',
- 'WatchMouse',
- 'WbSrch\\/',
- 'WDT\\.io',
- 'Web Auto',
- 'Web Collage',
- 'Web Enhancer',
- 'Web Fetch',
- 'Web Fuck',
- 'Web Pix',
- 'Web Sauger',
- 'Web spyder',
- 'Web Sucker',
- 'web-capture\\.net',
- 'Web-sniffer',
- 'Webalta',
- 'Webauskunft',
- 'WebAuto',
- 'WebCapture',
- 'WebClient\\/',
- 'webcollage',
- 'WebCookies',
- 'WebCopier',
- 'WebCorp',
- 'WebDataStats',
- 'WebDoc',
- 'WebEnhancer',
- 'WebFetch',
- 'WebFuck',
- 'WebGazer',
- 'WebGo IS',
- 'WebImageCollector',
- 'WebImages',
- 'WebIndex',
- 'webkit2png',
- 'WebLeacher',
- 'webmastercoffee',
- 'webmon ',
- 'WebPix',
- 'WebReaper',
- 'WebSauger',
- 'webscreenie',
- 'Webshag',
- 'Webshot',
- 'Website Quester',
- 'websitepulse agent',
- 'WebsiteQuester',
- 'Websnapr',
- 'WebSniffer',
- 'Webster',
- 'WebStripper',
- 'WebSucker',
- 'webtech\\/',
- 'WebThumbnail',
- 'Webthumb\\/',
- 'WebWhacker',
- 'WebZIP',
- 'WeLikeLinks',
- 'WEPA',
- 'WeSEE',
- 'wf84',
- 'Wfuzz\\/',
- 'wget',
- 'WhatCMS',
- 'WhatsApp',
- 'WhatsMyIP',
- 'WhatWeb',
- 'WhereGoes\\?',
- 'Whibse',
- 'WhoAPI\\/',
- 'WhoRunsCoinHive',
- 'Whynder Magnet',
- 'Windows-RSS-Platform',
- 'WinHttp-Autoproxy-Service',
- 'WinHTTP\\/',
- 'WinPodder',
- 'wkhtmlto',
- 'wmtips',
- 'Woko',
- 'Wolfram HTTPClient',
- 'woorankreview',
- 'WordPress\\/',
- 'WordupinfoSearch',
- 'Word\\/',
- 'worldping-api',
- 'wotbox',
- 'WP Engine Install Performance API',
- 'WP Rocket',
- 'wpif',
- 'wprecon\\.com survey',
- 'WPScan',
- 'wscheck',
- 'Wtrace',
- 'WWW-Collector-E',
- 'WWW-Mechanize',
- 'WWW::Document',
- 'WWW::Mechanize',
- 'WWWOFFLE',
- 'www\\.monitor\\.us',
- 'x09Mozilla',
- 'x22Mozilla',
- 'XaxisSemanticsClassifier',
- 'XenForo\\/',
- 'Xenu Link Sleuth',
- 'XING-contenttabreceiver',
- 'xpymep([0-9]?)\\.exe',
- 'Y!J-[A-Z][A-Z][A-Z]',
- 'Yaanb',
- 'yacy',
- 'Yahoo Link Preview',
- 'YahooCacheSystem',
- 'YahooMailProxy',
- 'YahooYSMcm',
- 'YandeG',
- 'Yandex(?!Search)',
- 'yanga',
- 'yeti',
- 'Yo-yo',
- 'Yoleo Consumer',
- 'yomins\\.com',
- 'yoogliFetchAgent',
- 'YottaaMonitor',
- 'Your-Website-Sucks',
- 'yourls\\.org',
- 'YoYs\\.net',
- 'YP\\.PL',
- 'Zabbix',
- 'Zade',
- 'Zao',
- 'Zauba',
- 'Zemanta Aggregator',
- 'Zend\\\\Http\\\\Client',
- 'Zend_Http_Client',
- 'Zermelo',
- 'Zeus ',
- 'zgrab',
- 'ZnajdzFoto',
- 'ZnHTTP',
- 'Zombie\\.js',
- 'Zoom\\.Mac',
- 'ZoteroTranslationServer',
- 'ZyBorg',
- '[a-z0-9\\-_]*(bot|crawl|archiver|transcoder|spider|uptime|validator|fetcher|cron|checker|reader|extractor|monitoring|analyzer|scraper)',
- ];
- }
- }
-
+ const Provider$2 = provider;
+
+ class Crawlers$1 extends Provider$2 {
+ constructor() {
+ super();
+
+ this.data = [
+ ' YLT',
+ '^Aether',
+ '^Amazon Simple Notification Service Agent$',
+ '^Amazon-Route53-Health-Check-Service',
+ '^b0t$',
+ '^bluefish ',
+ '^Calypso v\\/',
+ '^COMODO DCV',
+ '^Corax',
+ '^DangDang',
+ '^DavClnt',
+ '^DHSH',
+ '^docker\\/[0-9]',
+ '^Expanse',
+ '^FDM ',
+ '^git\\/',
+ '^Goose\\/',
+ '^Grabber',
+ '^Gradle\\/',
+ '^HTTPClient\\/',
+ '^HTTPing',
+ '^Java\\/',
+ '^Jeode\\/',
+ '^Jetty\\/',
+ '^Mail\\/',
+ '^Mget',
+ '^Microsoft URL Control',
+ '^Mikrotik\\/',
+ '^Netlab360',
+ '^NG\\/[0-9\\.]',
+ '^NING\\/',
+ '^npm\\/',
+ '^Nuclei',
+ '^PHP-AYMAPI\\/',
+ '^PHP\\/',
+ '^pip\\/',
+ '^pnpm\\/',
+ '^RMA\\/',
+ '^Ruby|Ruby\\/[0-9]',
+ '^Swurl ',
+ '^TLS tester ',
+ '^twine\\/',
+ '^ureq',
+ '^VSE\\/[0-9]',
+ '^WordPress\\.com',
+ '^XRL\\/[0-9]',
+ '^ZmEu',
+ '008\\/',
+ '13TABS',
+ '192\\.comAgent',
+ '2GDPR\\/',
+ '2ip\\.ru',
+ '404enemy',
+ '7Siters',
+ '80legs',
+ 'a3logics\\.in',
+ 'A6-Indexer',
+ 'Abonti',
+ 'Aboundex',
+ 'aboutthedomain',
+ 'Accoona-AI-Agent',
+ 'acebookexternalhit\\/',
+ 'acoon',
+ 'acrylicapps\\.com\\/pulp',
+ 'Acunetix',
+ 'AdAuth\\/',
+ 'adbeat',
+ 'AddThis',
+ 'ADmantX',
+ 'AdminLabs',
+ 'adressendeutschland',
+ 'adreview\\/',
+ 'adscanner',
+ 'adstxt-worker',
+ 'Adstxtaggregator',
+ 'adstxt\\.com',
+ 'Adyen HttpClient',
+ 'AffiliateLabz\\/',
+ 'affilimate-puppeteer',
+ 'agentslug',
+ 'AHC',
+ 'aihit',
+ 'aiohttp\\/',
+ 'Airmail',
+ 'akka-http\\/',
+ 'akula\\/',
+ 'alertra',
+ 'alexa site audit',
+ 'Alibaba\\.Security\\.Heimdall',
+ 'Alligator',
+ 'allloadin',
+ 'AllSubmitter',
+ 'alyze\\.info',
+ 'amagit',
+ 'Anarchie',
+ 'AndroidDownloadManager',
+ 'Anemone',
+ 'AngleSharp',
+ 'annotate_google',
+ 'Anthill',
+ 'Anturis Agent',
+ 'Ant\\.com',
+ 'AnyEvent-HTTP\\/',
+ 'Apache Ant\\/',
+ 'Apache Droid',
+ 'Apache OpenOffice',
+ 'Apache-HttpAsyncClient',
+ 'Apache-HttpClient',
+ 'ApacheBench',
+ 'Apexoo',
+ 'apimon\\.de',
+ 'APIs-Google',
+ 'AportWorm\\/',
+ 'AppBeat\\/',
+ 'AppEngine-Google',
+ 'AppleSyndication',
+ 'Aprc\\/[0-9]',
+ 'Arachmo',
+ 'arachnode',
+ 'Arachnophilia',
+ 'aria2',
+ 'Arukereso',
+ 'asafaweb',
+ 'Asana\\/',
+ 'Ask Jeeves',
+ 'AskQuickly',
+ 'ASPSeek',
+ 'Asterias',
+ 'Astute',
+ 'asynchttp',
+ 'Attach',
+ 'attohttpc',
+ 'autocite',
+ 'AutomaticWPTester',
+ 'Autonomy',
+ 'awin\\.com',
+ 'AWS Security Scanner',
+ 'axios\\/',
+ 'a\\.pr-cy\\.ru',
+ 'B-l-i-t-z-B-O-T',
+ 'Backlink-Ceck',
+ 'backlink-check',
+ 'BacklinkHttpStatus',
+ 'BackStreet',
+ 'BackupLand',
+ 'BackWeb',
+ 'Bad-Neighborhood',
+ 'Badass',
+ 'baidu\\.com',
+ 'Bandit',
+ 'basicstate',
+ 'BatchFTP',
+ 'Battleztar Bazinga',
+ 'baypup\\/',
+ 'BazQux',
+ 'BBBike',
+ 'BCKLINKS',
+ 'BDFetch',
+ 'BegunAdvertising',
+ 'Bewica-security-scan',
+ 'Bidtellect',
+ 'BigBozz',
+ 'Bigfoot',
+ 'biglotron',
+ 'BingLocalSearch',
+ 'BingPreview',
+ 'binlar',
+ 'biNu image cacher',
+ 'Bitacle',
+ 'Bitrix link preview',
+ 'biz_Directory',
+ 'BKCTwitterUnshortener\\/',
+ 'Black Hole',
+ 'Blackboard Safeassign',
+ 'BlackWidow',
+ 'BlockNote\\.Net',
+ 'BlogBridge',
+ 'Bloglines',
+ 'Bloglovin',
+ 'BlogPulseLive',
+ 'BlogSearch',
+ 'Blogtrottr',
+ 'BlowFish',
+ 'boitho\\.com-dc',
+ 'Boost\\.Beast',
+ 'BPImageWalker',
+ 'Braintree-Webhooks',
+ 'Branch Metrics API',
+ 'Branch-Passthrough',
+ 'Brandprotect',
+ 'BrandVerity',
+ 'Brandwatch',
+ 'Brodie\\/',
+ 'Browsershots',
+ 'BUbiNG',
+ 'Buck\\/',
+ 'Buddy',
+ 'BuiltWith',
+ 'Bullseye',
+ 'BunnySlippers',
+ 'Burf Search',
+ 'Butterfly\\/',
+ 'BuzzSumo',
+ 'CAAM\\/[0-9]',
+ 'CakePHP',
+ 'Calculon',
+ 'Canary%20Mail',
+ 'CaretNail',
+ 'catexplorador',
+ 'CC Metadata Scaper',
+ 'Cegbfeieh',
+ 'censys',
+ 'centuryb.o.t9[at]gmail.com',
+ 'Cerberian Drtrs',
+ 'CERT\\.at-Statistics-Survey',
+ 'cf-facebook',
+ 'cg-eye',
+ 'changedetection',
+ 'ChangesMeter',
+ 'Charlotte',
+ 'CheckHost',
+ 'checkprivacy',
+ 'CherryPicker',
+ 'ChinaClaw',
+ 'Chirp\\/',
+ 'chkme\\.com',
+ 'Chlooe',
+ 'Chromaxa',
+ 'CirrusExplorer',
+ 'CISPA Vulnerability Notification',
+ 'CISPA Web Analyser',
+ 'Citoid',
+ 'CJNetworkQuality',
+ 'Clarsentia',
+ 'clips\\.ua\\.ac\\.be',
+ 'Cloud mapping',
+ 'CloudEndure',
+ 'CloudFlare-AlwaysOnline',
+ 'Cloudflare-Healthchecks',
+ 'Cloudinary',
+ 'cmcm\\.com',
+ 'coccoc',
+ 'cognitiveseo',
+ 'ColdFusion',
+ 'colly -',
+ 'CommaFeed',
+ 'Commons-HttpClient',
+ 'commonscan',
+ 'contactbigdatafr',
+ 'contentkingapp',
+ 'Contextual Code Sites Explorer',
+ 'convera',
+ 'CookieReports',
+ 'copyright sheriff',
+ 'CopyRightCheck',
+ 'Copyscape',
+ 'cortex\\/',
+ 'Cosmos4j\\.feedback',
+ 'Covario-IDS',
+ 'Craw\\/',
+ 'Crescent',
+ 'Criteo',
+ 'Crowsnest',
+ 'CSHttp',
+ 'CSSCheck',
+ 'Cula\\/',
+ 'curb',
+ 'Curious George',
+ 'curl',
+ 'cuwhois\\/',
+ 'cybo\\.com',
+ 'DAP\\/NetHTTP',
+ 'DareBoost',
+ 'DatabaseDriverMysqli',
+ 'DataCha0s',
+ 'Datafeedwatch',
+ 'Datanyze',
+ 'DataparkSearch',
+ 'dataprovider',
+ 'DataXu',
+ 'Daum(oa)?[ \\/][0-9]',
+ 'dBpoweramp',
+ 'ddline',
+ 'deeris',
+ 'delve\\.ai',
+ 'Demon',
+ 'DeuSu',
+ 'developers\\.google\\.com\\/\\+\\/web\\/snippet\\/',
+ 'Devil',
+ 'Digg',
+ 'Digincore',
+ 'DigitalPebble',
+ 'Dirbuster',
+ 'Discourse Forum Onebox',
+ 'Dispatch\\/',
+ 'Disqus\\/',
+ 'DittoSpyder',
+ 'dlvr',
+ 'DMBrowser',
+ 'DNSPod-reporting',
+ 'docoloc',
+ 'Dolphin http client',
+ 'DomainAppender',
+ 'DomainLabz',
+ 'Domains Project\\/',
+ 'Donuts Content Explorer',
+ 'dotMailer content retrieval',
+ 'dotSemantic',
+ 'downforeveryoneorjustme',
+ 'Download Wonder',
+ 'downnotifier',
+ 'DowntimeDetector',
+ 'Drip',
+ 'drupact',
+ 'Drupal \\(\\+http:\\/\\/drupal\\.org\\/\\)',
+ 'DTS Agent',
+ 'dubaiindex',
+ 'DuplexWeb-Google',
+ 'DynatraceSynthetic',
+ 'EARTHCOM',
+ 'Easy-Thumb',
+ 'EasyDL',
+ 'Ebingbong',
+ 'ec2linkfinder',
+ 'eCairn-Grabber',
+ 'eCatch',
+ 'ECCP',
+ 'eContext\\/',
+ 'Ecxi',
+ 'EirGrabber',
+ 'ElectricMonk',
+ 'elefent',
+ 'EMail Exractor',
+ 'EMail Wolf',
+ 'EmailWolf',
+ 'Embarcadero',
+ 'Embed PHP Library',
+ 'Embedly',
+ 'endo\\/',
+ 'europarchive\\.org',
+ 'evc-batch',
+ 'EventMachine HttpClient',
+ 'Everwall Link Expander',
+ 'Evidon',
+ 'Evrinid',
+ 'ExactSearch',
+ 'ExaleadCloudview',
+ 'Excel\\/',
+ 'exif',
+ 'ExoRank',
+ 'Exploratodo',
+ 'Express WebPictures',
+ 'Extreme Picture Finder',
+ 'EyeNetIE',
+ 'ezooms',
+ 'facebookexternalhit',
+ 'facebookexternalua',
+ 'facebookplatform',
+ 'fairshare',
+ 'Faraday v',
+ 'fasthttp',
+ 'Faveeo',
+ 'Favicon downloader',
+ 'faviconarchive',
+ 'faviconkit',
+ 'FavOrg',
+ 'Feed Wrangler',
+ 'Feedable\\/',
+ 'Feedbin',
+ 'FeedBooster',
+ 'FeedBucket',
+ 'FeedBunch\\/',
+ 'FeedBurner',
+ 'feeder',
+ 'Feedly',
+ 'FeedshowOnline',
+ 'Feedshow\\/',
+ 'Feedspot',
+ 'FeedViewer\\/',
+ 'Feedwind\\/',
+ 'FeedZcollector',
+ 'feeltiptop',
+ 'Fetch API',
+ 'Fetch\\/[0-9]',
+ 'Fever\\/[0-9]',
+ 'FHscan',
+ 'Fiery%20Feeds',
+ 'Filestack',
+ 'Fimap',
+ 'findlink',
+ 'findthatfile',
+ 'FlashGet',
+ 'FlipboardBrowserProxy',
+ 'FlipboardProxy',
+ 'FlipboardRSS',
+ 'Flock\\/',
+ 'Florienzh\\/',
+ 'fluffy',
+ 'Flunky',
+ 'flynxapp',
+ 'forensiq',
+ 'FoundSeoTool',
+ 'free thumbnails',
+ 'Freeuploader',
+ 'FreshRSS',
+ 'Funnelback',
+ 'Fuzz Faster U Fool',
+ 'G-i-g-a-b-o-t',
+ 'g00g1e\\.net',
+ 'ganarvisitas',
+ 'gdnplus\\.com',
+ 'geek-tools',
+ 'Genieo',
+ 'GentleSource',
+ 'GetCode',
+ 'Getintent',
+ 'GetLinkInfo',
+ 'getprismatic',
+ 'GetRight',
+ 'getroot',
+ 'GetURLInfo\\/',
+ 'GetWeb',
+ 'Geziyor',
+ 'Ghost Inspector',
+ 'GigablastOpenSource',
+ 'GIS-LABS',
+ 'github-camo',
+ 'GitHub-Hookshot',
+ 'github\\.com',
+ 'Go http package',
+ 'Go [\\d\\.]* package http',
+ 'Go!Zilla',
+ 'Go-Ahead-Got-It',
+ 'Go-http-client',
+ 'go-mtasts\\/',
+ 'gobyus',
+ 'Gofeed',
+ 'gofetch',
+ 'Goldfire Server',
+ 'GomezAgent',
+ 'gooblog',
+ 'Goodzer\\/',
+ 'Google AppsViewer',
+ 'Google Desktop',
+ 'Google favicon',
+ 'Google Keyword Suggestion',
+ 'Google Keyword Tool',
+ 'Google Page Speed Insights',
+ 'Google PP Default',
+ 'Google Search Console',
+ 'Google Web Preview',
+ 'Google-Ads-Creatives-Assistant',
+ 'Google-Ads-Overview',
+ 'Google-Adwords',
+ 'Google-Apps-Script',
+ 'Google-Calendar-Importer',
+ 'Google-HotelAdsVerifier',
+ 'Google-HTTP-Java-Client',
+ 'Google-Podcast',
+ 'Google-Publisher-Plugin',
+ 'Google-Read-Aloud',
+ 'Google-SearchByImage',
+ 'Google-Site-Verification',
+ 'Google-SMTP-STS',
+ 'Google-speakr',
+ 'Google-Structured-Data-Testing-Tool',
+ 'Google-Transparency-Report',
+ 'google-xrawler',
+ 'Google-Youtube-Links',
+ 'GoogleDocs',
+ 'GoogleHC\\/',
+ 'GoogleProber',
+ 'GoogleProducer',
+ 'GoogleSites',
+ 'Gookey',
+ 'GoSpotCheck',
+ 'gosquared-thumbnailer',
+ 'Gotit',
+ 'GoZilla',
+ 'grabify',
+ 'GrabNet',
+ 'Grafula',
+ 'Grammarly',
+ 'GrapeFX',
+ 'GreatNews',
+ 'Gregarius',
+ 'GRequests',
+ 'grokkit',
+ 'grouphigh',
+ 'grub-client',
+ 'gSOAP\\/',
+ 'GT::WWW',
+ 'GTmetrix',
+ 'GuzzleHttp',
+ 'gvfs\\/',
+ 'HAA(A)?RTLAND http client',
+ 'Haansoft',
+ 'hackney\\/',
+ 'Hadi Agent',
+ 'HappyApps-WebCheck',
+ 'Hardenize',
+ 'Hatena',
+ 'Havij',
+ 'HaxerMen',
+ 'HeadlessChrome',
+ 'HEADMasterSEO',
+ 'HeartRails_Capture',
+ 'help@dataminr\\.com',
+ 'heritrix',
+ 'Hexometer',
+ 'historious',
+ 'hkedcity',
+ 'hledejLevne\\.cz',
+ 'Hloader',
+ 'HMView',
+ 'Holmes',
+ 'HonesoSearchEngine',
+ 'HootSuite Image proxy',
+ 'Hootsuite-WebFeed',
+ 'hosterstats',
+ 'HostTracker',
+ 'ht:\\/\\/check',
+ 'htdig',
+ 'HTMLparser',
+ 'htmlyse',
+ 'HTTP Banner Detection',
+ 'http-get',
+ 'HTTP-Header-Abfrage',
+ 'http-kit',
+ 'http-request\\/',
+ 'HTTP-Tiny',
+ 'HTTP::Lite',
+ 'http:\\/\\/www.neomo.de\\/',
+ 'HttpComponents',
+ 'httphr',
+ 'HTTPie',
+ 'HTTPMon',
+ 'httpRequest',
+ 'httpscheck',
+ 'httpssites_power',
+ 'httpunit',
+ 'HttpUrlConnection',
+ 'http\\.rb\\/',
+ 'HTTP_Compression_Test',
+ 'http_get',
+ 'http_request2',
+ 'http_requester',
+ 'httrack',
+ 'huaweisymantec',
+ 'HubSpot ',
+ 'HubSpot-Link-Resolver',
+ 'Humanlinks',
+ 'i2kconnect\\/',
+ 'Iblog',
+ 'ichiro',
+ 'Id-search',
+ 'IdeelaborPlagiaat',
+ 'IDG Twitter Links Resolver',
+ 'IDwhois\\/',
+ 'Iframely',
+ 'igdeSpyder',
+ 'iGooglePortal',
+ 'IlTrovatore',
+ 'Image Fetch',
+ 'Image Sucker',
+ 'ImageEngine\\/',
+ 'ImageVisu\\/',
+ 'Imagga',
+ 'imagineeasy',
+ 'imgsizer',
+ 'InAGist',
+ 'inbound\\.li parser',
+ 'InDesign%20CC',
+ 'Indy Library',
+ 'InetURL',
+ 'infegy',
+ 'infohelfer',
+ 'InfoTekies',
+ 'InfoWizards Reciprocal Link',
+ 'inpwrd\\.com',
+ 'instabid',
+ 'Instapaper',
+ 'Integrity',
+ 'integromedb',
+ 'Intelliseek',
+ 'InterGET',
+ 'Internet Ninja',
+ 'InternetSeer',
+ 'internetVista monitor',
+ 'internetwache',
+ 'internet_archive',
+ 'intraVnews',
+ 'IODC',
+ 'IOI',
+ 'iplabel',
+ 'ips-agent',
+ 'IPS\\/[0-9]',
+ 'IPWorks HTTP\\/S Component',
+ 'iqdb\\/',
+ 'Iria',
+ 'Irokez',
+ 'isitup\\.org',
+ 'iskanie',
+ 'isUp\\.li',
+ 'iThemes Sync\\/',
+ 'IZaBEE',
+ 'iZSearch',
+ 'JAHHO',
+ 'janforman',
+ 'Jaunt\\/',
+ 'Java.*outbrain',
+ 'javelin\\.io',
+ 'Jbrofuzz',
+ 'Jersey\\/',
+ 'JetCar',
+ 'Jigsaw',
+ 'Jobboerse',
+ 'JobFeed discovery',
+ 'Jobg8 URL Monitor',
+ 'jobo',
+ 'Jobrapido',
+ 'Jobsearch1\\.5',
+ 'JoinVision Generic',
+ 'JolokiaPwn',
+ 'Joomla',
+ 'Jorgee',
+ 'JS-Kit',
+ 'JungleKeyThumbnail',
+ 'JustView',
+ 'Kaspersky Lab CFR link resolver',
+ 'Kelny\\/',
+ 'Kerrigan\\/',
+ 'KeyCDN',
+ 'Keyword Density',
+ 'Keywords Research',
+ 'khttp\\/',
+ 'KickFire',
+ 'KimonoLabs\\/',
+ 'Kml-Google',
+ 'knows\\.is',
+ 'KOCMOHABT',
+ 'kouio',
+ 'kube-probe',
+ 'kubectl',
+ 'kulturarw3',
+ 'KumKie',
+ 'Larbin',
+ 'Lavf\\/',
+ 'leakix\\.net',
+ 'LeechFTP',
+ 'LeechGet',
+ 'letsencrypt',
+ 'Lftp',
+ 'LibVLC',
+ 'LibWeb',
+ 'Libwhisker',
+ 'libwww',
+ 'Licorne',
+ 'Liferea\\/',
+ 'Lighthouse',
+ 'Lightspeedsystems',
+ 'Likse',
+ 'limber\\.io',
+ 'Link Valet',
+ 'LinkAlarm\\/',
+ 'LinkAnalyser',
+ 'linkCheck',
+ 'linkdex',
+ 'LinkExaminer',
+ 'linkfluence',
+ 'linkpeek',
+ 'LinkPreview',
+ 'LinkScan',
+ 'LinksManager',
+ 'LinkTiger',
+ 'LinkWalker',
+ 'link_thumbnailer',
+ 'Lipperhey',
+ 'Litemage_walker',
+ 'livedoor ScreenShot',
+ 'LoadImpactRload',
+ 'localsearch-web',
+ 'LongURL API',
+ 'longurl-r-package',
+ 'looid\\.com',
+ 'looksystems\\.net',
+ 'ltx71',
+ 'lua-resty-http',
+ 'Lucee \\(CFML Engine\\)',
+ 'Lush Http Client',
+ 'lwp-request',
+ 'lwp-trivial',
+ 'LWP::Simple',
+ 'lycos',
+ 'LYT\\.SR',
+ 'L\\.webis',
+ 'mabontland',
+ 'MacOutlook\\/',
+ 'Mag-Net',
+ 'MagpieRSS',
+ 'Mail::STS',
+ 'MailChimp',
+ 'Mail\\.Ru',
+ 'Majestic12',
+ 'makecontact\\/',
+ 'Mandrill',
+ 'MapperCmd',
+ 'marketinggrader',
+ 'MarkMonitor',
+ 'MarkWatch',
+ 'Mass Downloader',
+ 'masscan\\/',
+ 'Mata Hari',
+ 'mattermost',
+ 'Mediametric',
+ 'Mediapartners-Google',
+ 'mediawords',
+ 'MegaIndex\\.ru',
+ 'MeltwaterNews',
+ 'Melvil Rawi',
+ 'MemGator',
+ 'Metaspinner',
+ 'MetaURI',
+ 'MFC_Tear_Sample',
+ 'Microsearch',
+ 'Microsoft Data Access',
+ 'Microsoft Office',
+ 'Microsoft Outlook',
+ 'Microsoft Windows Network Diagnostics',
+ 'Microsoft-WebDAV-MiniRedir',
+ 'Microsoft\\.Data\\.Mashup',
+ 'MIDown tool',
+ 'MIIxpc',
+ 'Mindjet',
+ 'Miniature\\.io',
+ 'Miniflux',
+ 'mio_httpc',
+ 'Miro-HttpClient',
+ 'Mister PiX',
+ 'mixdata dot com',
+ 'mixed-content-scan',
+ 'mixnode',
+ 'Mnogosearch',
+ 'mogimogi',
+ 'Mojeek',
+ 'Mojolicious \\(Perl\\)',
+ 'monitis',
+ 'Monitority\\/',
+ 'Monit\\/',
+ 'montastic',
+ 'MonTools',
+ 'Moreover',
+ 'Morfeus Fucking Scanner',
+ 'Morning Paper',
+ 'MovableType',
+ 'mowser',
+ 'Mrcgiguy',
+ 'Mr\\.4x3 Powered',
+ 'MS Web Services Client Protocol',
+ 'MSFrontPage',
+ 'mShots',
+ 'MuckRack\\/',
+ 'muhstik-scan',
+ 'MVAClient',
+ 'MxToolbox\\/',
+ 'myseosnapshot',
+ 'nagios',
+ 'Najdi\\.si',
+ 'Name Intelligence',
+ 'NameFo\\.com',
+ 'Nameprotect',
+ 'nationalarchives',
+ 'Navroad',
+ 'NearSite',
+ 'Needle',
+ 'Nessus',
+ 'Net Vampire',
+ 'NetAnts',
+ 'NETCRAFT',
+ 'NetLyzer',
+ 'NetMechanic',
+ 'NetNewsWire',
+ 'Netpursual',
+ 'netresearch',
+ 'NetShelter ContentScan',
+ 'Netsparker',
+ 'NetSystemsResearch',
+ 'nettle',
+ 'NetTrack',
+ 'Netvibes',
+ 'NetZIP',
+ 'Neustar WPM',
+ 'NeutrinoAPI',
+ 'NewRelicPinger',
+ 'NewsBlur .*Finder',
+ 'NewsGator',
+ 'newsme',
+ 'newspaper\\/',
+ 'Nexgate Ruby Client',
+ 'NG-Search',
+ 'nghttp2',
+ 'Nibbler',
+ 'NICErsPRO',
+ 'NihilScio',
+ 'Nikto',
+ 'nineconnections',
+ 'NLNZ_IAHarvester',
+ 'Nmap Scripting Engine',
+ 'node-fetch',
+ 'node-superagent',
+ 'node-urllib',
+ 'Nodemeter',
+ 'NodePing',
+ 'node\\.io',
+ 'nominet\\.org\\.uk',
+ 'nominet\\.uk',
+ 'Norton-Safeweb',
+ 'Notifixious',
+ 'notifyninja',
+ 'NotionEmbedder',
+ 'nuhk',
+ 'nutch',
+ 'Nuzzel',
+ 'nWormFeedFinder',
+ 'nyawc\\/',
+ 'Nymesis',
+ 'NYU',
+ 'Observatory\\/',
+ 'Ocelli\\/',
+ 'Octopus',
+ 'oegp',
+ 'Offline Explorer',
+ 'Offline Navigator',
+ 'OgScrper',
+ 'okhttp',
+ 'omgili',
+ 'OMSC',
+ 'Online Domain Tools',
+ 'Open Source RSS',
+ 'OpenCalaisSemanticProxy',
+ 'Openfind',
+ 'OpenLinkProfiler',
+ 'Openstat\\/',
+ 'OpenVAS',
+ 'OPPO A33',
+ 'Optimizer',
+ 'Orbiter',
+ 'OrgProbe\\/',
+ 'orion-semantics',
+ 'Outlook-Express',
+ 'Outlook-iOS',
+ 'Owler',
+ 'Owlin',
+ 'ownCloud News',
+ 'ow\\.ly',
+ 'OxfordCloudService',
+ 'page scorer',
+ 'Page Valet',
+ 'page2rss',
+ 'PageFreezer',
+ 'PageGrabber',
+ 'PagePeeker',
+ 'PageScorer',
+ 'Pagespeed\\/',
+ 'PageThing',
+ 'page_verifier',
+ 'Panopta',
+ 'panscient',
+ 'Papa Foto',
+ 'parsijoo',
+ 'Pavuk',
+ 'PayPal IPN',
+ 'pcBrowser',
+ 'Pcore-HTTP',
+ 'PDF24 URL To PDF',
+ 'Pearltrees',
+ 'PECL::HTTP',
+ 'peerindex',
+ 'Peew',
+ 'PeoplePal',
+ 'Perlu -',
+ 'PhantomJS Screenshoter',
+ 'PhantomJS\\/',
+ 'Photon\\/',
+ 'php-requests',
+ 'phpservermon',
+ 'Pi-Monster',
+ 'Picscout',
+ 'Picsearch',
+ 'PictureFinder',
+ 'Pimonster',
+ 'Pingability',
+ 'PingAdmin\\.Ru',
+ 'Pingdom',
+ 'Pingoscope',
+ 'PingSpot',
+ 'ping\\.blo\\.gs',
+ 'pinterest\\.com',
+ 'Pixray',
+ 'Pizilla',
+ 'Plagger\\/',
+ 'Pleroma ',
+ 'Ploetz \\+ Zeller',
+ 'Plukkie',
+ 'plumanalytics',
+ 'PocketImageCache',
+ 'PocketParser',
+ 'Pockey',
+ 'PodcastAddict\\/',
+ 'POE-Component-Client-HTTP',
+ 'Polymail\\/',
+ 'Pompos',
+ 'Porkbun',
+ 'Port Monitor',
+ 'postano',
+ 'postfix-mta-sts-resolver',
+ 'PostmanRuntime',
+ 'postplanner\\.com',
+ 'PostPost',
+ 'postrank',
+ 'PowerPoint\\/',
+ 'Prebid',
+ 'Prerender',
+ 'Priceonomics Analysis Engine',
+ 'PrintFriendly',
+ 'PritTorrent',
+ 'Prlog',
+ 'probethenet',
+ 'Project ?25499',
+ 'Project-Resonance',
+ 'prospectb2b',
+ 'Protopage',
+ 'ProWebWalker',
+ 'proximic',
+ 'PRTG Network Monitor',
+ 'pshtt, https scanning',
+ 'PTST ',
+ 'PTST\\/[0-9]+',
+ 'Pump',
+ 'Python-httplib2',
+ 'python-httpx',
+ 'python-requests',
+ 'Python-urllib',
+ 'Qirina Hurdler',
+ 'QQDownload',
+ 'QrafterPro',
+ 'Qseero',
+ 'Qualidator',
+ 'QueryN Metasearch',
+ 'queuedriver',
+ 'quic-go-HTTP\\/',
+ 'QuiteRSS',
+ 'Quora Link Preview',
+ 'Qwantify',
+ 'Radian6',
+ 'RadioPublicImageResizer',
+ 'Railgun\\/',
+ 'RankActive',
+ 'RankFlex',
+ 'RankSonicSiteAuditor',
+ 'RapidLoad\\/',
+ 'Re-re Studio',
+ 'ReactorNetty',
+ 'Readability',
+ 'RealDownload',
+ 'RealPlayer%20Downloader',
+ 'RebelMouse',
+ 'Recorder',
+ 'RecurPost\\/',
+ 'redback\\/',
+ 'ReederForMac',
+ 'Reeder\\/',
+ 'ReGet',
+ 'RepoMonkey',
+ 'request\\.js',
+ 'reqwest\\/',
+ 'ResponseCodeTest',
+ 'RestSharp',
+ 'Riddler',
+ 'Rival IQ',
+ 'Robosourcer',
+ 'Robozilla',
+ 'ROI Hunter',
+ 'RPT-HTTPClient',
+ 'RSSMix\\/',
+ 'RSSOwl',
+ 'RyowlEngine',
+ 'safe-agent-scanner',
+ 'SalesIntelligent',
+ 'Saleslift',
+ 'SAP NetWeaver Application Server',
+ 'SauceNAO',
+ 'SBIder',
+ 'sc-downloader',
+ 'scalaj-http',
+ 'Scamadviser-Frontend',
+ 'ScanAlert',
+ 'scan\\.lol',
+ 'Scoop',
+ 'scooter',
+ 'ScopeContentAG-HTTP-Client',
+ 'ScoutJet',
+ 'ScoutURLMonitor',
+ 'ScrapeBox Page Scanner',
+ 'Scrapy',
+ 'Screaming',
+ 'ScreenShotService',
+ 'Scrubby',
+ 'Scrutiny\\/',
+ 'Search37',
+ 'searchenginepromotionhelp',
+ 'Searchestate',
+ 'SearchExpress',
+ 'SearchSight',
+ 'SearchWP',
+ 'search\\.thunderstone',
+ 'Seeker',
+ 'semanticdiscovery',
+ 'semanticjuice',
+ 'Semiocast HTTP client',
+ 'Semrush',
+ 'Sendsay\\.Ru',
+ 'sentry\\/',
+ 'SEO Browser',
+ 'Seo Servis',
+ 'seo-nastroj\\.cz',
+ 'seo4ajax',
+ 'Seobility',
+ 'SEOCentro',
+ 'SeoCheck',
+ 'SEOkicks',
+ 'SEOlizer',
+ 'Seomoz',
+ 'SEOprofiler',
+ 'seoscanners',
+ 'SEOsearch',
+ 'seositecheckup',
+ 'SEOstats',
+ 'servernfo',
+ 'sexsearcher',
+ 'Seznam',
+ 'Shelob',
+ 'Shodan',
+ 'Shoppimon',
+ 'ShopWiki',
+ 'ShortLinkTranslate',
+ 'shortURL lengthener',
+ 'shrinktheweb',
+ 'Sideqik',
+ 'Siege',
+ 'SimplePie',
+ 'SimplyFast',
+ 'Siphon',
+ 'SISTRIX',
+ 'Site Sucker',
+ 'Site-Shot\\/',
+ 'Site24x7',
+ 'SiteBar',
+ 'Sitebeam',
+ 'Sitebulb\\/',
+ 'SiteCondor',
+ 'SiteExplorer',
+ 'SiteGuardian',
+ 'Siteimprove',
+ 'SiteIndexed',
+ 'Sitemap(s)? Generator',
+ 'SitemapGenerator',
+ 'SiteMonitor',
+ 'Siteshooter B0t',
+ 'SiteSnagger',
+ 'SiteSucker',
+ 'SiteTruth',
+ 'Sitevigil',
+ 'sitexy\\.com',
+ 'SkypeUriPreview',
+ 'Slack\\/',
+ 'sli-systems\\.com',
+ 'slider\\.com',
+ 'slurp',
+ 'SlySearch',
+ 'SmartDownload',
+ 'SMRF URL Expander',
+ 'SMUrlExpander',
+ 'Snake',
+ 'Snappy',
+ 'SnapSearch',
+ 'Snarfer\\/',
+ 'SniffRSS',
+ 'sniptracker',
+ 'Snoopy',
+ 'SnowHaze Search',
+ 'sogou web',
+ 'SortSite',
+ 'Sottopop',
+ 'sovereign\\.ai',
+ 'SpaceBison',
+ 'SpamExperts',
+ 'Spammen',
+ 'Spanner',
+ 'spaziodati',
+ 'SPDYCheck',
+ 'Specificfeeds',
+ 'speedy',
+ 'SPEng',
+ 'Spinn3r',
+ 'spray-can',
+ 'Sprinklr ',
+ 'spyonweb',
+ 'sqlmap',
+ 'Sqlworm',
+ 'Sqworm',
+ 'SSL Labs',
+ 'ssl-tools',
+ 'StackRambler',
+ 'Statastico\\/',
+ 'Statically-',
+ 'StatusCake',
+ 'Steeler',
+ 'Stratagems Kumo',
+ 'Stripe\\/',
+ 'Stroke\\.cz',
+ 'StudioFACA',
+ 'StumbleUpon',
+ 'suchen',
+ 'Sucuri',
+ 'summify',
+ 'SuperHTTP',
+ 'Surphace Scout',
+ 'Suzuran',
+ 'swcd ',
+ 'Symfony BrowserKit',
+ 'Symfony2 BrowserKit',
+ 'Synapse\\/',
+ 'Syndirella\\/',
+ 'SynHttpClient-Built',
+ 'Sysomos',
+ 'sysscan',
+ 'Szukacz',
+ 'T0PHackTeam',
+ 'tAkeOut',
+ 'Tarantula\\/',
+ 'Taringa UGC',
+ 'TarmotGezgin',
+ 'tchelebi\\.io',
+ 'techiaith\\.cymru',
+ 'TelegramBot',
+ 'Teleport',
+ 'Telesoft',
+ 'Telesphoreo',
+ 'Telesphorep',
+ 'Tenon\\.io',
+ 'teoma',
+ 'terrainformatica',
+ 'Test Certificate Info',
+ 'testuri',
+ 'Tetrahedron',
+ 'TextRazor Downloader',
+ 'The Drop Reaper',
+ 'The Expert HTML Source Viewer',
+ 'The Intraformant',
+ 'The Knowledge AI',
+ 'theinternetrules',
+ 'TheNomad',
+ 'Thinklab',
+ 'Thumbor',
+ 'Thumbshots',
+ 'ThumbSniper',
+ 'timewe\\.net',
+ 'TinEye',
+ 'Tiny Tiny RSS',
+ 'TLSProbe\\/',
+ 'Toata',
+ 'topster',
+ 'touche\\.com',
+ 'Traackr\\.com',
+ 'tracemyfile',
+ 'Trackuity',
+ 'TrapitAgent',
+ 'Trendiction',
+ 'Trendsmap',
+ 'trendspottr',
+ 'truwoGPS',
+ 'TryJsoup',
+ 'TulipChain',
+ 'Turingos',
+ 'Turnitin',
+ 'tweetedtimes',
+ 'Tweetminster',
+ 'Tweezler\\/',
+ 'twibble',
+ 'Twice',
+ 'Twikle',
+ 'Twingly',
+ 'Twisted PageGetter',
+ 'Typhoeus',
+ 'ubermetrics-technologies',
+ 'uclassify',
+ 'UdmSearch',
+ 'ultimate_sitemap_parser',
+ 'unchaos',
+ 'unirest-java',
+ 'UniversalFeedParser',
+ 'unshortenit',
+ 'Unshorten\\.It',
+ 'Untiny',
+ 'UnwindFetchor',
+ 'updated',
+ 'updown\\.io daemon',
+ 'Upflow',
+ 'Uptimia',
+ 'URL Verifier',
+ 'Urlcheckr',
+ 'URLitor',
+ 'urlresolver',
+ 'Urlstat',
+ 'URLTester',
+ 'UrlTrends Ranking Updater',
+ 'URLy Warning',
+ 'URLy\\.Warning',
+ 'URL\\/Emacs',
+ 'Vacuum',
+ 'Vagabondo',
+ 'VB Project',
+ 'vBSEO',
+ 'VCI',
+ 'via ggpht\\.com GoogleImageProxy',
+ 'Virusdie',
+ 'visionutils',
+ 'vkShare',
+ 'VoidEYE',
+ 'Voil',
+ 'voltron',
+ 'voyager\\/',
+ 'VSAgent\\/',
+ 'VSB-TUO\\/',
+ 'Vulnbusters Meter',
+ 'VYU2',
+ 'w3af\\.org',
+ 'W3C-checklink',
+ 'W3C-mobileOK',
+ 'W3C_Unicorn',
+ 'WAC-OFU',
+ 'WakeletLinkExpander',
+ 'WallpapersHD',
+ 'Wallpapers\\/[0-9]+',
+ 'wangling',
+ 'Wappalyzer',
+ 'WatchMouse',
+ 'WbSrch\\/',
+ 'WDT\\.io',
+ 'Web Auto',
+ 'Web Collage',
+ 'Web Enhancer',
+ 'Web Fetch',
+ 'Web Fuck',
+ 'Web Pix',
+ 'Web Sauger',
+ 'Web spyder',
+ 'Web Sucker',
+ 'web-capture\\.net',
+ 'Web-sniffer',
+ 'Webalta',
+ 'Webauskunft',
+ 'WebAuto',
+ 'WebCapture',
+ 'WebClient\\/',
+ 'webcollage',
+ 'WebCookies',
+ 'WebCopier',
+ 'WebCorp',
+ 'WebDataStats',
+ 'WebDoc',
+ 'WebEnhancer',
+ 'WebFetch',
+ 'WebFuck',
+ 'WebGazer',
+ 'WebGo IS',
+ 'WebImageCollector',
+ 'WebImages',
+ 'WebIndex',
+ 'webkit2png',
+ 'WebLeacher',
+ 'webmastercoffee',
+ 'webmon ',
+ 'WebPix',
+ 'WebReaper',
+ 'WebSauger',
+ 'webscreenie',
+ 'Webshag',
+ 'Webshot',
+ 'Website Quester',
+ 'websitepulse agent',
+ 'WebsiteQuester',
+ 'Websnapr',
+ 'WebSniffer',
+ 'Webster',
+ 'WebStripper',
+ 'WebSucker',
+ 'webtech\\/',
+ 'WebThumbnail',
+ 'Webthumb\\/',
+ 'WebWhacker',
+ 'WebZIP',
+ 'WeLikeLinks',
+ 'WEPA',
+ 'WeSEE',
+ 'wf84',
+ 'Wfuzz\\/',
+ 'wget',
+ 'WhatCMS',
+ 'WhatsApp',
+ 'WhatsMyIP',
+ 'WhatWeb',
+ 'WhereGoes\\?',
+ 'Whibse',
+ 'WhoAPI\\/',
+ 'WhoRunsCoinHive',
+ 'Whynder Magnet',
+ 'Windows-RSS-Platform',
+ 'WinHttp-Autoproxy-Service',
+ 'WinHTTP\\/',
+ 'WinPodder',
+ 'wkhtmlto',
+ 'wmtips',
+ 'Woko',
+ 'Wolfram HTTPClient',
+ 'woorankreview',
+ 'WordPress\\/',
+ 'WordupinfoSearch',
+ 'Word\\/',
+ 'worldping-api',
+ 'wotbox',
+ 'WP Engine Install Performance API',
+ 'WP Rocket',
+ 'wpif',
+ 'wprecon\\.com survey',
+ 'WPScan',
+ 'wscheck',
+ 'Wtrace',
+ 'WWW-Collector-E',
+ 'WWW-Mechanize',
+ 'WWW::Document',
+ 'WWW::Mechanize',
+ 'WWWOFFLE',
+ 'www\\.monitor\\.us',
+ 'x09Mozilla',
+ 'x22Mozilla',
+ 'XaxisSemanticsClassifier',
+ 'XenForo\\/',
+ 'Xenu Link Sleuth',
+ 'XING-contenttabreceiver',
+ 'xpymep([0-9]?)\\.exe',
+ 'Y!J-[A-Z][A-Z][A-Z]',
+ 'Yaanb',
+ 'yacy',
+ 'Yahoo Link Preview',
+ 'YahooCacheSystem',
+ 'YahooMailProxy',
+ 'YahooYSMcm',
+ 'YandeG',
+ 'Yandex(?!Search)',
+ 'yanga',
+ 'yeti',
+ 'Yo-yo',
+ 'Yoleo Consumer',
+ 'yomins\\.com',
+ 'yoogliFetchAgent',
+ 'YottaaMonitor',
+ 'Your-Website-Sucks',
+ 'yourls\\.org',
+ 'YoYs\\.net',
+ 'YP\\.PL',
+ 'Zabbix',
+ 'Zade',
+ 'Zao',
+ 'Zauba',
+ 'Zemanta Aggregator',
+ 'Zend\\\\Http\\\\Client',
+ 'Zend_Http_Client',
+ 'Zermelo',
+ 'Zeus ',
+ 'zgrab',
+ 'ZnajdzFoto',
+ 'ZnHTTP',
+ 'Zombie\\.js',
+ 'Zoom\\.Mac',
+ 'ZoteroTranslationServer',
+ 'ZyBorg',
+ '[a-z0-9\\-_]*(bot|crawl|archiver|transcoder|spider|uptime|validator|fetcher|cron|checker|reader|extractor|monitoring|analyzer|scraper)',
+ ];
+ }
+ }
+
var crawlers = Crawlers$1;
- const Provider$1 = provider;
-
- class Exclusions$1 extends Provider$1 {
- constructor() {
- super();
-
- this.data = [
- 'Safari.[\\d\\.]*',
- 'Firefox.[\\d\\.]*',
- ' Chrome.[\\d\\.]*',
- 'Chromium.[\\d\\.]*',
- 'MSIE.[\\d\\.]',
- 'Opera\\/[\\d\\.]*',
- 'Mozilla.[\\d\\.]*',
- 'AppleWebKit.[\\d\\.]*',
- 'Trident.[\\d\\.]*',
- 'Windows NT.[\\d\\.]*',
- 'Android [\\d\\.]*',
- 'Macintosh.',
- 'Ubuntu',
- 'Linux',
- '[ ]Intel',
- 'Mac OS X [\\d_]*',
- '(like )?Gecko(.[\\d\\.]*)?',
- 'KHTML,',
- 'CriOS.[\\d\\.]*',
- 'CPU iPhone OS ([0-9_])* like Mac OS X',
- 'CPU OS ([0-9_])* like Mac OS X',
- 'iPod',
- 'compatible',
- 'x86_..',
- 'i686',
- 'x64',
- 'X11',
- 'rv:[\\d\\.]*',
- 'Version.[\\d\\.]*',
- 'WOW64',
- 'Win64',
- 'Dalvik.[\\d\\.]*',
- ' \\.NET CLR [\\d\\.]*',
- 'Presto.[\\d\\.]*',
- 'Media Center PC',
- 'BlackBerry',
- 'Build',
- 'Opera Mini\\/\\d{1,2}\\.\\d{1,2}\\.[\\d\\.]*\\/\\d{1,2}\\.',
- 'Opera',
- ' \\.NET[\\d\\.]*',
- 'cubot',
- '; M bot',
- '; CRONO',
- '; B bot',
- '; IDbot',
- '; ID bot',
- '; POWER BOT',
- 'OCTOPUS-CORE',
- ];
- }
- }
-
+ const Provider$1 = provider;
+
+ class Exclusions$1 extends Provider$1 {
+ constructor() {
+ super();
+
+ this.data = [
+ 'Safari.[\\d\\.]*',
+ 'Firefox.[\\d\\.]*',
+ ' Chrome.[\\d\\.]*',
+ 'Chromium.[\\d\\.]*',
+ 'MSIE.[\\d\\.]',
+ 'Opera\\/[\\d\\.]*',
+ 'Mozilla.[\\d\\.]*',
+ 'AppleWebKit.[\\d\\.]*',
+ 'Trident.[\\d\\.]*',
+ 'Windows NT.[\\d\\.]*',
+ 'Android [\\d\\.]*',
+ 'Macintosh.',
+ 'Ubuntu',
+ 'Linux',
+ '[ ]Intel',
+ 'Mac OS X [\\d_]*',
+ '(like )?Gecko(.[\\d\\.]*)?',
+ 'KHTML,',
+ 'CriOS.[\\d\\.]*',
+ 'CPU iPhone OS ([0-9_])* like Mac OS X',
+ 'CPU OS ([0-9_])* like Mac OS X',
+ 'iPod',
+ 'compatible',
+ 'x86_..',
+ 'i686',
+ 'x64',
+ 'X11',
+ 'rv:[\\d\\.]*',
+ 'Version.[\\d\\.]*',
+ 'WOW64',
+ 'Win64',
+ 'Dalvik.[\\d\\.]*',
+ ' \\.NET CLR [\\d\\.]*',
+ 'Presto.[\\d\\.]*',
+ 'Media Center PC',
+ 'BlackBerry',
+ 'Build',
+ 'Opera Mini\\/\\d{1,2}\\.\\d{1,2}\\.[\\d\\.]*\\/\\d{1,2}\\.',
+ 'Opera',
+ ' \\.NET[\\d\\.]*',
+ 'cubot',
+ '; M bot',
+ '; CRONO',
+ '; B bot',
+ '; IDbot',
+ '; ID bot',
+ '; POWER BOT',
+ 'OCTOPUS-CORE',
+ ];
+ }
+ }
+
var exclusions = Exclusions$1;
const Provider = provider;
@@ -1527,133 +1527,133 @@
var headers = Headers$1;
- const Crawlers = crawlers;
- const Exclusions = exclusions;
- const Headers = headers;
-
- class Crawler$1 {
- constructor(request, headers, userAgent) {
- /**
- * Init classes
- */
- this._init();
-
- /**
- * This request must be an object
- */
- this.request = typeof request === 'object' ? request : {};
-
- // The regex-list must not be used with g-flag!
- // See: https://stackoverflow.com/questions/1520800/why-does-a-regexp-with-global-flag-give-wrong-results
- this.compiledRegexList = this.compileRegex(this.crawlers.getAll(), 'i');
-
- // The exclusions should be used with g-flag in order to remove each value.
- this.compiledExclusions = this.compileRegex(this.exclusions.getAll(), 'gi');
-
- /**
- * Set http headers
- */
- this.setHttpHeaders(headers);
-
- /**
- * Set userAgent
- */
- this.userAgent = this.setUserAgent(userAgent);
- }
-
- /**
- * Init Classes Instances
- */
- _init() {
- this.crawlers = new Crawlers();
- this.headers = new Headers();
- this.exclusions = new Exclusions();
- }
-
- compileRegex(patterns, flags) {
- return new RegExp(patterns.join('|'), flags);
- }
-
- /**
- * Set HTTP headers.
- */
- setHttpHeaders(headers) {
- // Use the Request headers if httpHeaders is not defined
- if (typeof headers === 'undefined' || Object.keys(headers).length === 0) {
- headers = Object.keys(this.request).length ? this.request.headers : {};
- }
-
- // Save the headers.
- this.httpHeaders = headers;
- }
-
- /**
- * Set user agent
- */
- setUserAgent(userAgent) {
- if (
- typeof userAgent === 'undefined' ||
- userAgent === null ||
- !userAgent.length
- ) {
- for (const header of this.getUaHttpHeaders()) {
- if (Object.keys(this.httpHeaders).indexOf(header.toLowerCase()) >= 0) {
- userAgent += this.httpHeaders[header.toLowerCase()] + ' ';
- }
- }
- }
-
- return userAgent;
- }
-
- /**
- * Get user agent headers
- */
- getUaHttpHeaders() {
- return this.headers.getAll();
- }
-
- /**
- * Check user agent string against the regex.
- */
- isCrawler(userAgent = undefined) {
- if (Buffer.byteLength(userAgent || '', 'utf8') > 4096) {
- return false;
- }
-
- var agent =
- typeof userAgent === 'undefined' || userAgent === null
- ? this.userAgent
- : userAgent;
-
- // test on compiled regx
- agent = agent.replace(this.compiledExclusions, '');
-
- if (agent.trim().length === 0) {
- return false;
- }
-
- var matches = this.compiledRegexList.exec(agent);
-
- if (matches) {
- this.matches = matches;
- }
-
- return matches !== null ? (matches.length ? true : false) : false;
- }
-
- /**
- * Return the matches.
- */
- getMatches() {
- return this.matches !== undefined
- ? this.matches.length
- ? this.matches[0]
- : null
- : {};
- }
- }
-
+ const Crawlers = crawlers;
+ const Exclusions = exclusions;
+ const Headers = headers;
+
+ class Crawler$1 {
+ constructor(request, headers, userAgent) {
+ /**
+ * Init classes
+ */
+ this._init();
+
+ /**
+ * This request must be an object
+ */
+ this.request = typeof request === 'object' ? request : {};
+
+ // The regex-list must not be used with g-flag!
+ // See: https://stackoverflow.com/questions/1520800/why-does-a-regexp-with-global-flag-give-wrong-results
+ this.compiledRegexList = this.compileRegex(this.crawlers.getAll(), 'i');
+
+ // The exclusions should be used with g-flag in order to remove each value.
+ this.compiledExclusions = this.compileRegex(this.exclusions.getAll(), 'gi');
+
+ /**
+ * Set http headers
+ */
+ this.setHttpHeaders(headers);
+
+ /**
+ * Set userAgent
+ */
+ this.userAgent = this.setUserAgent(userAgent);
+ }
+
+ /**
+ * Init Classes Instances
+ */
+ _init() {
+ this.crawlers = new Crawlers();
+ this.headers = new Headers();
+ this.exclusions = new Exclusions();
+ }
+
+ compileRegex(patterns, flags) {
+ return new RegExp(patterns.join('|'), flags);
+ }
+
+ /**
+ * Set HTTP headers.
+ */
+ setHttpHeaders(headers) {
+ // Use the Request headers if httpHeaders is not defined
+ if (typeof headers === 'undefined' || Object.keys(headers).length === 0) {
+ headers = Object.keys(this.request).length ? this.request.headers : {};
+ }
+
+ // Save the headers.
+ this.httpHeaders = headers;
+ }
+
+ /**
+ * Set user agent
+ */
+ setUserAgent(userAgent) {
+ if (
+ typeof userAgent === 'undefined' ||
+ userAgent === null ||
+ !userAgent.length
+ ) {
+ for (const header of this.getUaHttpHeaders()) {
+ if (Object.keys(this.httpHeaders).indexOf(header.toLowerCase()) >= 0) {
+ userAgent += this.httpHeaders[header.toLowerCase()] + ' ';
+ }
+ }
+ }
+
+ return userAgent;
+ }
+
+ /**
+ * Get user agent headers
+ */
+ getUaHttpHeaders() {
+ return this.headers.getAll();
+ }
+
+ /**
+ * Check user agent string against the regex.
+ */
+ isCrawler(userAgent = undefined) {
+ if (Buffer.byteLength(userAgent || '', 'utf8') > 4096) {
+ return false;
+ }
+
+ var agent =
+ typeof userAgent === 'undefined' || userAgent === null
+ ? this.userAgent
+ : userAgent;
+
+ // test on compiled regx
+ agent = agent.replace(this.compiledExclusions, '');
+
+ if (agent.trim().length === 0) {
+ return false;
+ }
+
+ var matches = this.compiledRegexList.exec(agent);
+
+ if (matches) {
+ this.matches = matches;
+ }
+
+ return matches !== null ? (matches.length ? true : false) : false;
+ }
+
+ /**
+ * Return the matches.
+ */
+ getMatches() {
+ return this.matches !== undefined
+ ? this.matches.length
+ ? this.matches[0]
+ : null
+ : {};
+ }
+ }
+
var crawler = Crawler$1;
const Crawler = crawler;
@@ -1837,22 +1837,29 @@
var target = personalization.id;
wem._registerPersonalizationCallback(personalization, function (result) {
+ var selectedFilter = null;
var successfulFilters = [];
- for (var i = 0; i < result.length; i++) {
- successfulFilters.push(variants[result[i]]);
- }
+ var inControlGroup = wem._isInControlGroup(target); // In case of control group Unomi is not resolving any strategy or fallback for us. So we have to do the fallback here.
- var selectedFilter = null;
- if (successfulFilters.length > 0) {
- selectedFilter = successfulFilters[0];
- var minPos = successfulFilters[0].position;
+ if (inControlGroup && personalization.strategyOptions && personalization.strategyOptions.fallback) {
+ selectedFilter = variants[personalization.strategyOptions.fallback];
+ successfulFilters.push(selectedFilter);
+ } else {
+ for (var i = 0; i < result.length; i++) {
+ successfulFilters.push(variants[result[i]]);
+ }
- if (minPos >= 0) {
- for (var j = 1; j < successfulFilters.length; j++) {
- if (successfulFilters[j].position < minPos) {
- selectedFilter = successfulFilters[j];
+ if (successfulFilters.length > 0) {
+ selectedFilter = successfulFilters[0];
+ var minPos = successfulFilters[0].position;
+
+ if (minPos >= 0) {
+ for (var j = 1; j < successfulFilters.length; j++) {
+ if (successfulFilters[j].position < minPos) {
+ selectedFilter = successfulFilters[j];
+ }
}
}
}
@@ -1874,7 +1881,7 @@
} // we now add control group information to event if the user is in the control group.
- if (wem._isInControlGroup(target)) {
+ if (inControlGroup) {
console.info('[WEM] Profile is in control group for target: ' + target + ', adding to personalization event...');
selectedFilter.event.target.properties.inControlGroup = true;
diff --git a/dist/apache-unomi-tracker.umd.js.map b/dist/apache-unomi-tracker.umd.js.map
index ec92fba..cf38c25 100644
--- a/dist/apache-unomi-tracker.umd.js.map
+++ b/dist/apache-unomi-tracker.umd.js.map
@@ -1 +1 @@
-{"version":3,"file":"apache-unomi-tracker.umd.js","sources":["../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/es6-crawler-detect/src/lib/crawler/provider.js","../node_modules/es6-crawler-detect/src/lib/crawler/crawlers.js","../node_modules/es6-crawler-detect/src/lib/crawler/exclusions.js","../node_modules/es6-crawler-detect/src/lib/crawler/headers.js","../node_modules/es6-crawler-detect/src/lib/crawler.js","../node_modules/es6-crawler-detect/src/index.js","../src/a [...]
\ No newline at end of file
+{"version":3,"file":"apache-unomi-tracker.umd.js","sources":["../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/es6-crawler-detect/src/lib/crawler/provider.js","../node_modules/es6-crawler-detect/src/lib/crawler/crawlers.js","../node_modules/es6-crawler-detect/src/lib/crawler/exclusions.js","../node_modules/es6-crawler-detect/src/lib/crawler/headers.js","../node_modules/es6-crawler-detect/src/lib/crawler.js","../node_modules/es6-crawler-detect/src/index.js","../src/a [...]
\ No newline at end of file
diff --git a/src/apache-unomi-tracker.js b/src/apache-unomi-tracker.js
index ca11366..614467d 100644
--- a/src/apache-unomi-tracker.js
+++ b/src/apache-unomi-tracker.js
@@ -169,19 +169,27 @@ export const newTracker = () => {
registerPersonalizationObject: function (personalization, variants, ajax, resultCallback) {
var target = personalization.id;
wem._registerPersonalizationCallback(personalization, function (result) {
+ var selectedFilter = null;
var successfulFilters = [];
- for (var i = 0; i < result.length; i++) {
- successfulFilters.push(variants[result[i]]);
- }
- var selectedFilter = null;
- if (successfulFilters.length > 0) {
- selectedFilter = successfulFilters[0];
- var minPos = successfulFilters[0].position;
- if (minPos >= 0) {
- for (var j = 1; j < successfulFilters.length; j++) {
- if (successfulFilters[j].position < minPos) {
- selectedFilter = successfulFilters[j];
+ var inControlGroup = wem._isInControlGroup(target);
+ // In case of control group Unomi is not resolving any strategy or fallback for us. So we have to do the fallback here.
+ if (inControlGroup && personalization.strategyOptions && personalization.strategyOptions.fallback) {
+ selectedFilter = variants[personalization.strategyOptions.fallback];
+ successfulFilters.push(selectedFilter);
+ } else {
+ for (var i = 0; i < result.length; i++) {
+ successfulFilters.push(variants[result[i]]);
+ }
+
+ if (successfulFilters.length > 0) {
+ selectedFilter = successfulFilters[0];
+ var minPos = successfulFilters[0].position;
+ if (minPos >= 0) {
+ for (var j = 1; j < successfulFilters.length; j++) {
+ if (successfulFilters[j].position < minPos) {
+ selectedFilter = successfulFilters[j];
+ }
}
}
}
@@ -201,7 +209,7 @@ export const newTracker = () => {
}
// we now add control group information to event if the user is in the control group.
- if (wem._isInControlGroup(target)) {
+ if (inControlGroup) {
console.info('[WEM] Profile is in control group for target: ' + target + ', adding to personalization event...');
selectedFilter.event.target.properties.inControlGroup = true;
if (selectedFilter.event.target.properties.variants) {
@@ -728,6 +736,7 @@ export const newTracker = () => {
event.initCustomEvent(name, canBubble, cancelable, detail);
document.dispatchEvent(event);
},
+
/**
* Fill the wem.digitalData.displayedVariants with the javascript event passed as parameter
* @param {object} jsEvent javascript event
@@ -740,6 +749,7 @@ export const newTracker = () => {
}
wem.digitalData.displayedVariants.push(jsEvent);
},
+
/**
* This is an utility function to get current url parameter value
*
@@ -958,6 +968,7 @@ export const newTracker = () => {
}
}
},
+
/**
* Filter events in digitalData.events that would have the property: event.properties.doNotSendToUnomi
* The effect is directly stored in a new version of wem.digitalData.events
@@ -1435,4 +1446,4 @@ export const newTracker = () => {
};
return wem;
-};
+};
\ No newline at end of file