diff --git a/src/drivers/webextension/images/icons/6sense.svg b/src/drivers/webextension/images/icons/6sense.svg new file mode 100644 index 000000000..d84b87cc3 --- /dev/null +++ b/src/drivers/webextension/images/icons/6sense.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/CallTrackingMetrics.svg b/src/drivers/webextension/images/icons/CallTrackingMetrics.svg new file mode 100644 index 000000000..8c2cdd311 --- /dev/null +++ b/src/drivers/webextension/images/icons/CallTrackingMetrics.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/drivers/webextension/images/icons/Hatena.svg b/src/drivers/webextension/images/icons/Hatena.svg new file mode 100644 index 000000000..64e640f9a --- /dev/null +++ b/src/drivers/webextension/images/icons/Hatena.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Hyva Themes.svg b/src/drivers/webextension/images/icons/Hyva Themes.svg new file mode 100644 index 000000000..4bfcfe3df --- /dev/null +++ b/src/drivers/webextension/images/icons/Hyva Themes.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Hyva.svg b/src/drivers/webextension/images/icons/Hyva.svg deleted file mode 100644 index 6b35be07e..000000000 --- a/src/drivers/webextension/images/icons/Hyva.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/src/drivers/webextension/images/icons/Naive UI.svg b/src/drivers/webextension/images/icons/Naive UI.svg new file mode 100644 index 000000000..890cbe51f --- /dev/null +++ b/src/drivers/webextension/images/icons/Naive UI.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Shoefitr.io.svg b/src/drivers/webextension/images/icons/Shoefitr.io.svg new file mode 100644 index 000000000..5d63a8804 --- /dev/null +++ b/src/drivers/webextension/images/icons/Shoefitr.io.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/Ubiliz.svg b/src/drivers/webextension/images/icons/Ubiliz.svg new file mode 100644 index 000000000..daf74411f --- /dev/null +++ b/src/drivers/webextension/images/icons/Ubiliz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/drivers/webextension/images/icons/Ubuntu.png b/src/drivers/webextension/images/icons/Ubuntu.png deleted file mode 100644 index d47da3c61..000000000 Binary files a/src/drivers/webextension/images/icons/Ubuntu.png and /dev/null differ diff --git a/src/drivers/webextension/images/icons/Ubuntu.svg b/src/drivers/webextension/images/icons/Ubuntu.svg new file mode 100644 index 000000000..b4ede814f --- /dev/null +++ b/src/drivers/webextension/images/icons/Ubuntu.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Upfluence.svg b/src/drivers/webextension/images/icons/Upfluence.svg new file mode 100644 index 000000000..cf9b2f47a --- /dev/null +++ b/src/drivers/webextension/images/icons/Upfluence.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index 200c80f83..db2aecaab 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -12,7 +12,9 @@ const { } = Wappalyzer const { agent, promisify, getOption, setOption, open, globEscape } = Utils -const expiry = 1000 * 60 * 60 * 24 +const expiry = 1000 * 60 * 60 * 12 + +const maxHostnames = 100 const hostnameIgnoreList = /\b((local|dev(elop(ment)?)?|sandbox|stag(e|ing)?|preprod|production|preview|test(ing)?|[^a-z]demo(shop)?|cache)[.-]|dev\d|localhost|((wappalyzer|google|bing|baidu|microsoft|duckduckgo|facebook|adobe|twitter|reddit|yahoo|wikipedia|amazon|amazonaws|youtube|stackoverflow|github|stackexchange|w3schools|twitch)\.)|(live|office|herokuapp|shopifypreview)\.com|\.local|\.test|\.netlify\.app|web\.archive\.org|zoom\.us|^([0-9.]+|[\d.]+)$|^([a-f0-9:]+:+)+[a-f0-9]+$)/ @@ -593,18 +595,24 @@ const Driver = { cache.language = cache.language || language // Expire cache - Driver.cache.hostnames = Object.keys(Driver.cache.hostnames).reduce( - (hostnames, hostname) => { + Driver.cache.hostnames = Object.keys(Driver.cache.hostnames) + .sort((a, b) => + Driver.cache.hostnames[a].dateTime > Driver.cache.hostnames[b].dateTime + ? -1 + : 1 + ) + .reduce((hostnames, hostname) => { const cache = Driver.cache.hostnames[hostname] - if (cache.dateTime > Date.now() - expiry) { + if ( + cache.dateTime > Date.now() - expiry && + Object.keys(hostnames).length < maxHostnames + ) { hostnames[hostname] = cache } return hostnames - }, - {} - ) + }, {}) await setOption( 'hostnames', @@ -905,7 +913,7 @@ const Driver = { const url = `http${https ? 's' : ''}://${hostname}` - if (!hostnameIgnoreList.test(hostname) && hits >= 3) { + if (!hostnameIgnoreList.test(hostname) && hits) { urls[url] = urls[url] || { technologies: resolve(detections).reduce( (technologies, { name, confidence, version }) => { @@ -939,7 +947,9 @@ const Driver = { urls, }) - await setOption('hostnames', (Driver.cache.hostnames = {})) + Object.keys(Driver.cache.hostnames).forEach((hostname) => { + Driver.cache.hostnames[hostname].hits = 0 + }) Driver.lastPing = Date.now() } diff --git a/src/drivers/webextension/js/popup.js b/src/drivers/webextension/js/popup.js index ac582ef33..ba8b753da 100644 --- a/src/drivers/webextension/js/popup.js +++ b/src/drivers/webextension/js/popup.js @@ -565,6 +565,7 @@ const Popup = { el.empty.classList.add('empty--hidden') el.detections.classList.remove('detections--hidden') + el.issue.classList.remove('issue--hidden') el.plusDownload.classList.remove('plus-download--hidden') while (el.detections.firstChild) { diff --git a/src/technologies/_.json b/src/technologies/_.json index 5c6b6f191..fa0abe0f8 100644 --- a/src/technologies/_.json +++ b/src/technologies/_.json @@ -101,6 +101,7 @@ "scriptSrc": "4tellcdn\\.azureedge\\.net", "website": "https://4-tell.com" }, + "51.LA": { "cats": [ 10 @@ -118,6 +119,25 @@ ], "website": "https://www.51.la" }, + "6sense": { + "cats": [ + 32, + 76 + ], + "description": "6sense is a B2B predictive intelligence platform for marketing and sales.", + "icon": "6sense.svg", + "headers": { + "Content-Security-Policy": "\\.6sc\\.co/" + }, + "scriptSrc": "\\.6sc\\.co/", + "saas": true, + "pricing": [ + "poa", + "high", + "recurring" + ], + "website": "https://6sense.com" + }, "8base": { "cats": [ 3, diff --git a/src/technologies/c.json b/src/technologies/c.json index 98657a8ac..934c58bdf 100644 --- a/src/technologies/c.json +++ b/src/technologies/c.json @@ -360,6 +360,23 @@ "saas": true, "website": "https://www.callrail.com" }, + "CallTrackingMetrics": { + "cats": [ + 10 + ], + "description": "CallTrackingMetrics is a call tracking and marketing attribution solution for contact centers and agencies.", + "icon": "CallTrackingMetrics.svg", + "js": { + "__ctm_tracked_numbers": "", + "__ctm.numbers": "" + }, + "pricing": [ + "mid", + "recurring" + ], + "saas": true, + "website": "https://www.calltrackingmetrics.com" + }, "Callbell": { "cats": [ 52 @@ -1595,11 +1612,13 @@ 32, 51 ], - "description": "Clickfunnels is an online sales funnel builder that helps businesses market, sell, and deliver their products online.", + "description": "ClickFunnels is an online sales funnel builder that helps businesses market, sell, and deliver their products online.", "icon": "ClickFunnels.svg", "js": { "CFAppDomain": "app\\.clickfunnels\\.com", - "CFSurveyParticipantID": "" + "CFSurveyParticipantID": "", + "cfAddPolyfill": "", + "ClickFunnels": "" }, "meta": { "cf:app_domain:": "app\\.clickfunnels\\.com" diff --git a/src/technologies/g.json b/src/technologies/g.json index 06cf70d19..5a1e9b14d 100644 --- a/src/technologies/g.json +++ b/src/technologies/g.json @@ -1872,6 +1872,18 @@ }, "website": "https://grandnode.com" }, + "Granim.js": { + "cats": [ + 59 + ], + "description": "Granim.js is a lightweight javascript library to create fluid and interactive gradients animations.", + "icon": "default.svg", + "js": { + "Granim": "" + }, + "oss": true, + "website": "https://sarcadass.github.io/granim.js" + }, "GrapesJS": { "cats": [ 51, diff --git a/src/technologies/h.json b/src/technologies/h.json index 3ac043f0c..020a8beb7 100644 --- a/src/technologies/h.json +++ b/src/technologies/h.json @@ -353,6 +353,21 @@ "icon": "Haskell.png", "website": "http://wiki.haskell.org/Haskell" }, + "Hatena Blog": { + "cats": [ + 1, + 11 + ], + "description": "Hatena Blog is one of the traditional blog platforms in Japan.", + "icon": "Hatena.svg", + "scriptSrc": "cdn\\.blog\\.st-hatena\\.com/", + "pricing": [ + "freemium", + "low", + "recurring" + ], + "website": "https://hatenablog.com" + }, "HeadJS": { "cats": [ 59 @@ -1563,19 +1578,23 @@ "scriptSrc": "merchant\\.cdn\\.hoolah\\.co/", "website": "https://www.hoolah.co" }, - "hyva": { + "Hyva Themes": { "cats": [ 19 ], - "description": "Hyvä themes is a frontend for Magento 2.", + "description": "Hyva Themes is an optimised theme for Magento 2 which eliminated the third-party libraries and having only two dependencies Alpine.js and Tailwind CSS.", "headers": { "X-Built-With": "^Hyva Themes$" }, - "icon": "Hyva.svg", - "implies": "Magento\\;version:2", + "icon": "Hyva Themes.svg", + "implies": [ + "Magento\\;version:2", + "Tailwind CSS", + "Alpine.js" + ], "pricing": [ "onetime" ], - "website": "https://hyva.io/" + "website": "https://hyva.io" } } \ No newline at end of file diff --git a/src/technologies/n.json b/src/technologies/n.json index 91ecad20e..8caa14715 100644 --- a/src/technologies/n.json +++ b/src/technologies/n.json @@ -130,6 +130,26 @@ ], "website": "https://www.nagish.li" }, + "Naive UI": { + "cats": [ + 66 + ], + "description": "Naive UI is a Vue.js UI library written in TypeScript, offering more than 80 treeshakable components.", + "icon": "Naive UI.svg", + "implies": [ + "Vue.js", + "TypeScript" + ], + "dom": { + "style[cssr-id^='n-']": { + "attributes": { + "cssr-id": "^n-[a-z-]+$\\;confidence:99" + } + } + }, + "oss": true, + "website": "https://www.naiveui.com" + }, "Najva": { "cats": [ 32 diff --git a/src/technologies/s.json b/src/technologies/s.json index 5f6ce7385..15802fa23 100644 --- a/src/technologies/s.json +++ b/src/technologies/s.json @@ -2009,6 +2009,21 @@ "saas": true, "website": "https://www.shippypro.com" }, + "Shoefitr.io": { + "cats": [ + 76 + ], + "description": "Shoefitr.io is data-based shoe size advice service where we measure the length, width, ball, and instep.", + "icon": "Shoefitr.io.svg", + "dom":"a[href*='api.shoefitr.io/']", + "saas": true, + "pricing": [ + "payg", + "high", + "recurring" + ], + "website": "https://www.shoefitr.io" + }, "Shogun": { "cats": [ 51 diff --git a/src/technologies/u.json b/src/technologies/u.json index dfc809782..2ded1a2e5 100644 --- a/src/technologies/u.json +++ b/src/technologies/u.json @@ -123,6 +123,24 @@ "scriptSrc": "uc_cart/uc_cart_block\\.js", "website": "http://www.ubercart.org" }, + "Ubiliz": { + "cats": [ + 5, + 6 + ], + "description": "Ubiliz is a gift voucher ecommerce solution.", + "icon": "Ubiliz.svg", + "js": { + "ubilizSettings": "" + }, + "saas": true, + "pricing": [ + "freemium", + "mid", + "recurring" + ], + "website": "https://www.ubiliz.com" + }, "Ubuntu": { "cats": [ 28 @@ -133,7 +151,7 @@ "Server": "Ubuntu", "X-Powered-By": "Ubuntu" }, - "icon": "Ubuntu.png", + "icon": "Ubuntu.svg", "website": "http://www.ubuntu.com/server" }, "Ueeshop": { @@ -423,6 +441,19 @@ "scriptSrc": "www\\.upsellit\\.com/", "website": "https://us.upsellit.com" }, + "Upfluence": { + "cats": [ + 71 + ], + "description": "Upfluence is the all-in-one affiliate and influencer marketing platform for ecommerce and direct-to-consumer brands.", + "icon": "Upfluence.svg", + "pricing": [ + "poa" + ], + "saas": true, + "scriptSrc": "\\.upfluence\\.co/", + "website": "https://www.upfluence.com" + }, "Uploadcare": { "cats": [ 31 diff --git a/src/technologies/v.json b/src/technologies/v.json index 8b77e9f6c..b2c0cbc97 100644 --- a/src/technologies/v.json +++ b/src/technologies/v.json @@ -293,6 +293,20 @@ "icon": "vercel.svg", "website": "https://vercel.com" }, + "Vercel Analytics": { + "cats": [ + 10 + ], + "js": { + "va": "" + }, + "scriptSrc": "/va/script\\.js", + "requires": [ + "Vercel" + ], + "icon": "vercel.svg", + "website": "https://vercel.com/analytics" + }, "Verifone 2Checkout": { "cats": [ 41 @@ -1068,4 +1082,4 @@ }, "website": "http://vibecommerce.com.br" } -} \ No newline at end of file +}