diff --git a/schema.json b/schema.json index 4dccf1808..829864074 100644 --- a/schema.json +++ b/schema.json @@ -268,7 +268,17 @@ ] }, "url": { - "$ref": "#/definitions/non-empty-non-blank-string" + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] }, "website": { "$ref": "#/definitions/non-empty-non-blank-string" diff --git a/src/categories.json b/src/categories.json index 9aba087a7..af9ea823c 100644 --- a/src/categories.json +++ b/src/categories.json @@ -684,5 +684,12 @@ ], "name": "Shipping carriers", "priority": 9 + }, + "100": { + "groups": [ + 15 + ], + "name": "Shopify apps", + "priority": 9 } } \ No newline at end of file diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 254dd65e7..14102ad02 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -476,12 +476,23 @@ class Site { if (!this.browser) { await this.initDriver() + if (!this.browser) { throw new Error('Browser closed') } } - const page = await this.browser.newPage() + let page + + try { + page = await this.browser.newPage() + } catch (error) { + this.error(error) + + await this.initDriver() + + page = await this.browser.newPage() + } this.pages.push(page) @@ -632,13 +643,19 @@ class Site { // page.on('console', (message) => this.log(message.text())) // Cookies - const cookies = (await page.cookies()).reduce( - (cookies, { name, value }) => ({ - ...cookies, - [name.toLowerCase()]: [value], - }), - {} - ) + let cookies = [] + + try { + cookies = (await page.cookies()).reduce( + (cookies, { name, value }) => ({ + ...cookies, + [name.toLowerCase()]: [value], + }), + {} + ) + } catch (error) { + this.error(error) + } // HTML let html = await this.promiseTimeout(page.content(), '', 'Timeout (html)') @@ -707,7 +724,7 @@ class Site { page.evaluateHandle( () => // eslint-disable-next-line unicorn/prefer-text-content - document.body.innerText // .replace(/\s+/g, ' ').slice(0, 25000) + document.body && document.body.innerText ), { jsonValue: () => '' }, 'Timeout (text)' diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index ff912fb08..3f41db6ff 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com/", - "version": "6.9.11", + "version": "6.9.12", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/drivers/webextension/_locales/ca/messages.json b/src/drivers/webextension/_locales/ca/messages.json index 5a0a550fb..16a801e5b 100644 --- a/src/drivers/webextension/_locales/ca/messages.json +++ b/src/drivers/webextension/_locales/ca/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/de/messages.json b/src/drivers/webextension/_locales/de/messages.json index 4c034a066..86c67da90 100644 --- a/src/drivers/webextension/_locales/de/messages.json +++ b/src/drivers/webextension/_locales/de/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/el/messages.json b/src/drivers/webextension/_locales/el/messages.json index 549bfd0cc..20519e45b 100644 --- a/src/drivers/webextension/_locales/el/messages.json +++ b/src/drivers/webextension/_locales/el/messages.json @@ -190,5 +190,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/en/messages.json b/src/drivers/webextension/_locales/en/messages.json index eb97996b8..6deff3517 100644 --- a/src/drivers/webextension/_locales/en/messages.json +++ b/src/drivers/webextension/_locales/en/messages.json @@ -194,5 +194,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/es/messages.json b/src/drivers/webextension/_locales/es/messages.json index c7ce8604e..3b2446b93 100644 --- a/src/drivers/webextension/_locales/es/messages.json +++ b/src/drivers/webextension/_locales/es/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/fa/messages.json b/src/drivers/webextension/_locales/fa/messages.json index 948b71a38..bc498ab65 100644 --- a/src/drivers/webextension/_locales/fa/messages.json +++ b/src/drivers/webextension/_locales/fa/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/fr/messages.json b/src/drivers/webextension/_locales/fr/messages.json index 843e8886f..7ebc62e8e 100644 --- a/src/drivers/webextension/_locales/fr/messages.json +++ b/src/drivers/webextension/_locales/fr/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/gl_ES/messages.json b/src/drivers/webextension/_locales/gl_ES/messages.json index 22a3b68b9..3d4abfe72 100644 --- a/src/drivers/webextension/_locales/gl_ES/messages.json +++ b/src/drivers/webextension/_locales/gl_ES/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/gr/messages.json b/src/drivers/webextension/_locales/gr/messages.json index f047ec055..a630bc825 100644 --- a/src/drivers/webextension/_locales/gr/messages.json +++ b/src/drivers/webextension/_locales/gr/messages.json @@ -192,5 +192,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/id/messages.json b/src/drivers/webextension/_locales/id/messages.json index 852e66e0a..45d516c7c 100644 --- a/src/drivers/webextension/_locales/id/messages.json +++ b/src/drivers/webextension/_locales/id/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/it/messages.json b/src/drivers/webextension/_locales/it/messages.json index 122897fa7..c885c13f7 100644 --- a/src/drivers/webextension/_locales/it/messages.json +++ b/src/drivers/webextension/_locales/it/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/ja/messages.json b/src/drivers/webextension/_locales/ja/messages.json index 123633e41..9aa4db3f2 100644 --- a/src/drivers/webextension/_locales/ja/messages.json +++ b/src/drivers/webextension/_locales/ja/messages.json @@ -194,5 +194,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/ko/messages.json b/src/drivers/webextension/_locales/ko/messages.json index 7ebd6686b..9c407ec1a 100644 --- a/src/drivers/webextension/_locales/ko/messages.json +++ b/src/drivers/webextension/_locales/ko/messages.json @@ -194,5 +194,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/nl/messages.json b/src/drivers/webextension/_locales/nl/messages.json index 47f799acf..987001d95 100644 --- a/src/drivers/webextension/_locales/nl/messages.json +++ b/src/drivers/webextension/_locales/nl/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/pl/messages.json b/src/drivers/webextension/_locales/pl/messages.json index 38cf0116c..2c63b4106 100644 --- a/src/drivers/webextension/_locales/pl/messages.json +++ b/src/drivers/webextension/_locales/pl/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/pt/messages.json b/src/drivers/webextension/_locales/pt/messages.json index b21d0afc1..78062485a 100644 --- a/src/drivers/webextension/_locales/pt/messages.json +++ b/src/drivers/webextension/_locales/pt/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/pt_BR/messages.json b/src/drivers/webextension/_locales/pt_BR/messages.json index 3db7910b4..884cc6291 100644 --- a/src/drivers/webextension/_locales/pt_BR/messages.json +++ b/src/drivers/webextension/_locales/pt_BR/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/ro/messages.json b/src/drivers/webextension/_locales/ro/messages.json index c0174593d..10878cfdf 100644 --- a/src/drivers/webextension/_locales/ro/messages.json +++ b/src/drivers/webextension/_locales/ro/messages.json @@ -192,5 +192,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/ru/messages.json b/src/drivers/webextension/_locales/ru/messages.json index ff30dab0d..08ad68aa5 100644 --- a/src/drivers/webextension/_locales/ru/messages.json +++ b/src/drivers/webextension/_locales/ru/messages.json @@ -191,8 +191,9 @@ "categoryName93": { "message": "Резервирование & доставка" }, "categoryName94": { "message": "Реферальный маркетинг" }, "categoryName95": { "message": "Управление цифровыми активами" }, - "categoryName96": { "message": "Content curation" }, - "categoryName97": { "message": "Customer data platform" }, + "categoryName96": { "message": "Курирование контента" }, + "categoryName97": { "message": "Платформа клиентских данных" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Службы доставки" }, + "categoryName100": { "message": "Приложении для Shopify" } } diff --git a/src/drivers/webextension/_locales/sk/messages.json b/src/drivers/webextension/_locales/sk/messages.json index 7747809ae..ba8d64a79 100644 --- a/src/drivers/webextension/_locales/sk/messages.json +++ b/src/drivers/webextension/_locales/sk/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/tr/messages.json b/src/drivers/webextension/_locales/tr/messages.json index f53239f72..c84302a34 100644 --- a/src/drivers/webextension/_locales/tr/messages.json +++ b/src/drivers/webextension/_locales/tr/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/uk/messages.json b/src/drivers/webextension/_locales/uk/messages.json index 4e84f21f4..119d55c96 100644 --- a/src/drivers/webextension/_locales/uk/messages.json +++ b/src/drivers/webextension/_locales/uk/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/uz/messages.json b/src/drivers/webextension/_locales/uz/messages.json index 4db8be9db..b02908d55 100644 --- a/src/drivers/webextension/_locales/uz/messages.json +++ b/src/drivers/webextension/_locales/uz/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/zh_CN/messages.json b/src/drivers/webextension/_locales/zh_CN/messages.json index 38f96bbf2..d66693164 100644 --- a/src/drivers/webextension/_locales/zh_CN/messages.json +++ b/src/drivers/webextension/_locales/zh_CN/messages.json @@ -192,5 +192,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/_locales/zh_TW/messages.json b/src/drivers/webextension/_locales/zh_TW/messages.json index 9e82cebc6..79ae1ce51 100644 --- a/src/drivers/webextension/_locales/zh_TW/messages.json +++ b/src/drivers/webextension/_locales/zh_TW/messages.json @@ -196,5 +196,6 @@ "categoryName96": { "message": "Content curation" }, "categoryName97": { "message": "Customer data platform" }, "categoryName98": { "message": "Cart abandonment" }, - "categoryName99": { "message": "Shipping carriers" } + "categoryName99": { "message": "Shipping carriers" }, + "categoryName100": { "message": "Shopify apps" } } diff --git a/src/drivers/webextension/images/icons/8base-logo.png b/src/drivers/webextension/images/icons/8base-logo.png new file mode 100644 index 000000000..c9bcb2517 Binary files /dev/null and b/src/drivers/webextension/images/icons/8base-logo.png differ diff --git a/src/drivers/webextension/images/icons/ADFOX.svg b/src/drivers/webextension/images/icons/ADFOX.svg new file mode 100644 index 000000000..9f2c0322c --- /dev/null +++ b/src/drivers/webextension/images/icons/ADFOX.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/Adnegah.png b/src/drivers/webextension/images/icons/Adnegah.png new file mode 100644 index 000000000..5369d8f71 Binary files /dev/null and b/src/drivers/webextension/images/icons/Adnegah.png differ diff --git a/src/drivers/webextension/images/icons/Adzerk.png b/src/drivers/webextension/images/icons/Adzerk.png deleted file mode 100644 index f16159bc0..000000000 Binary files a/src/drivers/webextension/images/icons/Adzerk.png and /dev/null differ diff --git a/src/drivers/webextension/images/icons/Affilae.png b/src/drivers/webextension/images/icons/Affilae.png new file mode 100644 index 000000000..2201fd7ab Binary files /dev/null and b/src/drivers/webextension/images/icons/Affilae.png differ diff --git a/src/drivers/webextension/images/icons/Asana.svg b/src/drivers/webextension/images/icons/Asana.svg new file mode 100644 index 000000000..3d3c7c7a0 --- /dev/null +++ b/src/drivers/webextension/images/icons/Asana.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/Astro.svg b/src/drivers/webextension/images/icons/Astro.svg new file mode 100644 index 000000000..9c1ced0bb --- /dev/null +++ b/src/drivers/webextension/images/icons/Astro.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/Boost Commerce.png b/src/drivers/webextension/images/icons/Boost Commerce.png new file mode 100644 index 000000000..1f290ed36 Binary files /dev/null and b/src/drivers/webextension/images/icons/Boost Commerce.png differ diff --git a/src/drivers/webextension/images/icons/Hamechio.svg b/src/drivers/webextension/images/icons/Hamechio.svg new file mode 100644 index 000000000..840d849dc --- /dev/null +++ b/src/drivers/webextension/images/icons/Hamechio.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/drivers/webextension/images/icons/Imber.png b/src/drivers/webextension/images/icons/Imber.png new file mode 100644 index 000000000..66fedd09e Binary files /dev/null and b/src/drivers/webextension/images/icons/Imber.png differ diff --git a/src/drivers/webextension/images/icons/Kevel.svg b/src/drivers/webextension/images/icons/Kevel.svg new file mode 100644 index 000000000..2ca9fef90 --- /dev/null +++ b/src/drivers/webextension/images/icons/Kevel.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/drivers/webextension/images/icons/MDUI.png b/src/drivers/webextension/images/icons/MDUI.png new file mode 100644 index 000000000..42724c7f5 Binary files /dev/null and b/src/drivers/webextension/images/icons/MDUI.png differ diff --git a/src/drivers/webextension/images/icons/Rotic.svg b/src/drivers/webextension/images/icons/Rotic.svg new file mode 100644 index 000000000..1f4562184 --- /dev/null +++ b/src/drivers/webextension/images/icons/Rotic.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Sellsy.svg b/src/drivers/webextension/images/icons/Sellsy.svg new file mode 100644 index 000000000..29bf7baa6 --- /dev/null +++ b/src/drivers/webextension/images/icons/Sellsy.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/VAPTCHA.svg b/src/drivers/webextension/images/icons/VAPTCHA.svg new file mode 100644 index 000000000..0ebe9270b --- /dev/null +++ b/src/drivers/webextension/images/icons/VAPTCHA.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/adnegah.png b/src/drivers/webextension/images/icons/adnegah.png deleted file mode 100644 index 360efa8e7..000000000 Binary files a/src/drivers/webextension/images/icons/adnegah.png and /dev/null differ diff --git a/src/drivers/webextension/js/popup.js b/src/drivers/webextension/js/popup.js index ef096ee69..01d35d3ee 100644 --- a/src/drivers/webextension/js/popup.js +++ b/src/drivers/webextension/js/popup.js @@ -201,6 +201,34 @@ function parseEmail(fullEmail) { return { email, name, title } } +function getTechnologySpend(technologies) { + const totals = technologies.reduce( + (totals, { pricing }) => { + pricing.forEach((price) => totals[price]++) + + return totals + }, + { low: 0, poa: 0, mid: 0, high: 0 } + ) + + totals.mid += Math.floor(totals.low / 3) + totals.high += Math.floor(totals.poa / 2) + totals.high += Math.floor(totals.mid / 3) + totals.xhigh = Math.floor(totals.high / 3) + + const spend = totals.xhigh + ? 'Very high' + : totals.high + ? 'High' + : totals.mid + ? 'Medium' + : totals.low + ? 'Low' + : 'Very low' + + return spend +} + const Popup = { /** * Initialise popup @@ -697,6 +725,14 @@ const Popup = { const { attributes, creditsRemaining, crawl } = data + if (Popup.cache.detections.length) { + attributes.signals = attributes.signals || [] + + attributes.signals.technologySpend = getTechnologySpend( + Popup.cache.detections + ) + } + el.creditsRemaining.textContent = parseInt( creditsRemaining || 0, 10 @@ -766,11 +802,20 @@ const Popup = { a.href = value.to a.textContent = value.text - if (['email', 'verifiedEmail', 'safeEmail'].includes(key)) { + if (key === 'keywords') { + a.style = 'padding-right: .3rem;' + + const space = document.createTextNode(' ') + + td.append(a, space) + } else if ( + ['email', 'verifiedEmail', 'safeEmail'].includes(key) + ) { const { email, name, title } = parseEmail(value.text) a.textContent = email + const div = document.createElement('div') const elName = document.createElement('span') const elTitle = document.createElement('span') const elBreak1 = document.createElement('br') @@ -781,17 +826,19 @@ const Popup = { elTitle.className = 'light-text' - td.appendChild(a) + div.append(a) - if (name) { - td.appendChild(elBreak1) - td.appendChild(elName) + if (name && name !== email) { + div.appendChild(elBreak1) + div.appendChild(elName) if (title) { - td.appendChild(elBreak2) - td.appendChild(elTitle) + div.appendChild(elBreak2) + div.appendChild(elTitle) } } + + td.append(div) } else { div.appendChild(a) td.appendChild(div) diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 7c61aa625..bb840fc02 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Wappalyzer", "homepage_url": "https://www.wappalyzer.com/", "description": "Identify web technologies", - "version": "6.9.11", + "version": "6.9.12", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/src/package.json b/src/package.json index 97fa304c1..54c2b2190 100644 --- a/src/package.json +++ b/src/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com/", - "version": "6.9.11", + "version": "6.9.12", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/technologies/_.json b/src/technologies/_.json index dfadb447e..3ccfb80e6 100644 --- a/src/technologies/_.json +++ b/src/technologies/_.json @@ -116,6 +116,20 @@ "scriptSrc": "4tellcdn\\.azureedge\\.net", "website": "https://4-tell.com" }, + "8base": { + "cats": [ + 3, 62 + ], + "description": "8base is a Backend-as-a-Service. It lets front-end developers focus more on what they love and backend developers expedite their workflow", + "icon": "8base-logo.png", + "pricing": [ + "low", "freemium", "recurring" + ], + "saas": true, + "requires": ["GraphQL"], + "website": "https://8base.com", + "xhr": "api\\.8base\\.com" + }, "@sulu/web": { "cats": [ 59 @@ -126,4 +140,4 @@ }, "website": "https://github.com/sulu/web-js" } -} \ No newline at end of file +} diff --git a/src/technologies/a.json b/src/technologies/a.json index fe979d072..133e24f0c 100644 --- a/src/technologies/a.json +++ b/src/technologies/a.json @@ -610,12 +610,19 @@ }, "pricing": [ "low", - "recurring" + "recurring", + "poa" ], "saas": true, "scriptSrc": [ "plugins/activecampaign-subscription-forms/site_tracking\\.js", - "\\.activehosted\\.com/" + "\\.activehosted\\.com", + "\\.app-us1\\.com", + "\\.ac-page\\.com" + ], + "url": [ + "\\.activehosted\\.com", + "\\.ac-page\\.com" ], "website": "https://www.activecampaign.com" }, @@ -713,12 +720,20 @@ "cats": [ 36 ], - "html": "(?:]+(?:src=\"https?://mh\\d?\\.adriver\\.ru/|flashvars=\"[^\"]*(?:http:%3A//(?:ad|mh\\d?)\\.adriver\\.ru/|adriver_banner))|<(?:(?:iframe|img)[^>]+src|a[^>]+href)=\"https?://ad\\.adriver\\.ru/)", + "description": "AdRiver is a company which provide internet advertising management and audit software.", "icon": "AdRiver.png", + "dom": "link[href*='.adriver.ru'], img[src*='.adriver.ru'], iframe[src*='.adriver.ru']", "js": { - "adriver": "" + "adriver": "", + "AdriverCounter": "", + "AdriverPrebid": "", + "adfoxBiddersMap.adriver": "" }, - "scriptSrc": "(?:adriver\\.core\\.\\d\\.js|https?://(?:content|ad|masterh\\d)\\.adriver\\.ru/)", + "scriptSrc": "\\.adriver\\.ru/", + "saas": true, + "pricing": [ + "payg" + ], "website": "http://adriver.ru" }, "AdRoll": { @@ -973,6 +988,26 @@ "scriptSrc": "\\.adform\\.net/", "website": "https://site.adform.com" }, + "ADFOX": { + "cats": [ + 36 + ], + "description": "ADFOX is an advertising management platform for media publishers.", + "icon": "ADFOX.svg", + "js": { + "Site.adFoxParams": "", + "adfoxAsyncParams": "", + "AdFox_getCodeScript": "", + "adfoxBiddersMap": "", + "adFoxParams": "" + }, + "pricing": [ + "mid", + "recurring" + ], + "saas": true, + "website": "https://adfox.yandex.ru" + }, "Adloox": { "cats": [ 36 @@ -1058,13 +1093,14 @@ "cats": [ 36 ], + "description": "Adnegah is a digital marketing and internet advertising agency.", + "icon": "Adnegah.png", + "dom": "iframe[scr*='adnegah.net']", "headers": { "X-Advertising-By": "adnegah\\.net" }, - "html": "