Merge branch 'wappalyzer:master' into patch-1

main
Kazi Rahiv 3 years ago committed by GitHub
commit 691a51c71e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,4 +1,4 @@
const os = require('os')
// const os = require('os')
const fs = require('fs')
const dns = require('dns').promises
const path = require('path')
@ -22,10 +22,6 @@ const chromiumArgs = [
`--user-data-dir=${CHROMIUM_DATA_DIR || '/tmp/chromium'}`,
]
if (os.arch() === 'arm64') {
chromiumArgs.push('--single-process')
}
const extensions = /^([^.]+$|\.(asp|aspx|cgi|htm|html|jsp|php)$)/
const categories = JSON.parse(
@ -400,6 +396,8 @@ class Site {
this.cache = {}
this.probed = false
this.destroyed = false
}
log(message, source = 'driver', type = 'log') {
@ -425,7 +423,7 @@ class Site {
emit(event, params) {
if (this.listeners[event]) {
return Promise.all(
return Promise.allSettled(
this.listeners[event].map((listener) => listener(params))
)
}
@ -435,7 +433,7 @@ class Site {
promise,
fallback,
errorMessage = 'Operation took too long to complete',
maxWait = this.options.maxWait
maxWait = Math.min(this.options.maxWait, 1000)
) {
let timeout = null
@ -470,12 +468,16 @@ class Site {
}
async goto(url) {
if (this.destroyed) {
return
}
// Return when the URL is a duplicate or maxUrls has been reached
if (this.analyzedUrls[url.href]) {
return []
}
this.log(`Navigate to ${url}`, 'page')
this.log(`Navigate to ${url}`)
this.analyzedUrls[url.href] = {
status: 0,
@ -493,7 +495,13 @@ class Site {
try {
page = await this.browser.newPage()
if (!page || page.isClosed()) {
throw new Error('Page did not open')
}
} catch (error) {
error.message += ` (${url})`
this.error(error)
await this.initDriver()
@ -509,9 +517,15 @@ class Site {
await page.setRequestInterception(true)
await page.setUserAgent(this.options.userAgent)
page.on('dialog', (dialog) => dialog.dismiss())
page.on('error', (error) => this.error(error))
page.on('error', (error) => {
error.message += ` (${url})`
this.error(error)
})
let responseReceived = false
@ -523,6 +537,8 @@ class Site {
try {
;({ hostname } = new URL(request.url()))
} catch (error) {
request.abort('blockedbyclient')
return
}
@ -563,11 +579,17 @@ class Site {
request.continue({ headers })
}
} catch (error) {
error.message += ` (${url})`
this.error(error)
}
})
page.on('response', async (response) => {
if (this.destroyed || !page || page.__closed || page.isClosed()) {
return
}
try {
if (
response.status() < 300 &&
@ -578,7 +600,15 @@ class Site {
await this.onDetect(response.url(), analyze({ scripts }))
}
} catch (error) {
if (error.constructor.name !== 'ProtocolError') {
error.message += ` (${url})`
this.error(error)
}
}
try {
if (response.url() === url.href) {
this.analyzedUrls[url.href] = {
status: response.status(),
@ -625,26 +655,21 @@ class Site {
await this.emit('response', { page, response, headers, certIssuer })
}
} catch (error) {
error.message += ` (${url})`
this.error(error)
}
})
await page.setUserAgent(this.options.userAgent)
try {
try {
await this.promiseTimeout(page.goto(url.href))
} catch (error) {
if (
error.constructor.name !== 'TimeoutError' &&
error.code !== 'PROMISE_TIMEOUT_ERROR'
) {
throw error
}
}
await page.goto(url.href)
if (page.url() === 'about:blank') {
throw new Error('The website failed to load')
const error = new Error(`The page failed to load (${url})`)
error.code = 'WAPPALYZER_PAGE_EMPTY'
throw error
}
if (!this.options.noScripts) {
@ -665,6 +690,8 @@ class Site {
{}
)
} catch (error) {
error.message += ` (${url})`
this.error(error)
}
@ -906,65 +933,57 @@ class Site {
...this.cache[url.href],
})
await page.close()
this.log(`Page closed (${url})`)
page.__closed = true
return reducedLinks
} catch (error) {
try {
await page.close()
this.log(`Page closed (${url})`)
} catch (error) {
this.log(error)
// Continue
}
let hostname = url
return reducedLinks
} catch (error) {
page.__closed = true
try {
;({ hostname } = new URL(url))
await page.close()
this.log(`Page closed (${url})`)
} catch (error) {
// Continue
}
if (
error.constructor.name === 'TimeoutError' ||
error.code === 'PROMISE_TIMEOUT_ERROR'
) {
const newError = new Error(
`The website took too long to respond: ${
error.message || error
} at ${hostname}`
)
newError.code = 'WAPPALYZER_TIMEOUT_ERROR'
throw newError
}
if (error.message.includes('net::ERR_NAME_NOT_RESOLVED')) {
const newError = new Error(
`Hostname could not be resolved at ${hostname}`
)
const newError = new Error(`Hostname could not be resolved (${url})`)
newError.code = 'WAPPALYZER_DNS_ERROR'
throw newError
}
if (
error.constructor.name === 'TimeoutError' ||
error.code === 'PROMISE_TIMEOUT_ERROR'
) {
error.code = 'WAPPALYZER_TIMEOUT_ERROR'
}
error.message += ` (${url})`
throw error
}
}
async analyze(url = this.originalUrl, index = 1, depth = 1) {
try {
if (this.options.recursive) {
await sleep(this.options.delay * index)
}
if (this.options.recursive) {
await sleep(this.options.delay * index)
}
await Promise.all([
(async () => {
await Promise.allSettled([
(async () => {
try {
const links = ((await this.goto(url)) || []).filter(
({ href }) => !this.analyzedUrls[href]
)
@ -983,23 +1002,25 @@ class Site {
depth + 1
)
}
})(),
(async () => {
if (this.options.probe && !this.probed) {
this.probed = true
await this.probe(url)
} catch (error) {
this.analyzedUrls[url.href] = {
status: this.analyzedUrls[url.href]?.status || 0,
error: error.message || error.toString(),
}
})(),
])
} catch (error) {
this.analyzedUrls[url.href] = {
status: this.analyzedUrls[url.href]?.status || 0,
error: error.message || error.toString(),
}
this.error(error)
}
error.message += ` (${url})`
this.error(error)
}
})(),
(async () => {
if (this.options.probe && !this.probed) {
this.probed = true
await this.probe(url)
}
})(),
])
const patterns = this.options.extended
? this.detections.reduce(
@ -1076,6 +1097,8 @@ class Site {
return this.promiseTimeout(
func(hostname).catch((error) => {
if (error.code !== 'ENODATA') {
error.message += ` (${url})`
this.error(error)
}
@ -1089,7 +1112,7 @@ class Site {
const domain = url.hostname.replace(/^www\./, '')
await Promise.all([
await Promise.allSettled([
// Static files
...Object.keys(files).map(async (file, index) => {
const path = files[file]
@ -1099,7 +1122,7 @@ class Site {
const body = await get(new URL(path, url.href), {
userAgent: this.options.userAgent,
timeout: Math.min(this.options.maxWait, 3000),
timeout: Math.min(this.options.maxWait, 1000),
})
this.log(`Probe ok (${path})`)
@ -1156,7 +1179,7 @@ class Site {
const batched = links.splice(0, this.options.batchSize)
await Promise.all(
await Promise.allSettled(
batched.map((link, index) => this.analyze(link, index, depth))
)
@ -1189,7 +1212,7 @@ class Site {
),
]
await Promise.all(
await Promise.allSettled(
requires.map(async ({ name, categoryId, technologies }) => {
const id = categoryId
? `category:${categoryId}`
@ -1242,9 +1265,11 @@ class Site {
}
async destroy() {
await Promise.all(
await Promise.allSettled(
this.pages.map(async (page) => {
if (page) {
page.__closed = true
try {
await page.close()
} catch (error) {
@ -1254,6 +1279,8 @@ class Site {
})
)
this.destroyed = true
this.log('Site closed')
}
}

@ -13,7 +13,7 @@
"software"
],
"homepage": "https://www.wappalyzer.com/",
"version": "6.10.27",
"version": "6.10.35",
"author": "Wappalyzer",
"license": "MIT",
"repository": {
@ -38,7 +38,7 @@
"wappalyzer": "./cli.js"
},
"dependencies": {
"puppeteer": "^13.5.2"
"puppeteer": "~14.1.0"
},
"engines": {
"node": ">=14"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.3404 0.0816971C4.62736 1.18536 -1.88287 12.9428 2.73874 22.8404C7.94911 33.9989 22.9346 35.2287 29.778 25.0593C30.3351 24.2313 31.1559 22.6932 31.1122 22.5589C31.0965 22.5108 29.6645 21.0215 27.93 19.2493L24.7764 16.0272L27.9837 12.7383L31.1909 9.44948L30.7471 8.61126C27.6305 2.72548 21.6761 -0.571035 15.3404 0.0816971ZM19.0305 2.43095C22.8378 3.09428 26.1747 5.33399 28.1974 8.58394L28.4824 9.04191L25.8492 11.7364L23.2161 14.4308L20.0505 11.1695L16.8849 7.90812L12.9174 11.9681L8.94979 16.028L12.9056 20.0764L16.8615 24.1249L20.0577 20.8551L23.2539 17.5852L25.8708 20.2638L28.4878 22.9425L28.2892 23.2892C23.2814 32.0332 10.2611 31.8097 5.24059 22.8934C-0.379689 12.9117 7.9808 0.505848 19.0305 2.43095ZM19.3163 13.5567L21.6934 15.9902L19.2773 18.4616L16.8612 20.933L14.4655 18.4806L12.0698 16.0282L14.4655 13.5758C15.7831 12.2269 16.8787 11.1233 16.9002 11.1233C16.9216 11.1233 18.0089 12.2183 19.3163 13.5567Z" fill="#3640E8"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1,6 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0H32V32H0V0Z" fill="#061631"/>
<path d="M17.8038 22.4825C16.3391 22.4825 15.0208 22.0268 13.849 21.1154L14.7767 19.6262C15.8184 20.4237 16.8437 20.8225 17.8526 20.8225C18.2757 20.8225 18.6134 20.7207 18.8657 20.5173C18.9847 20.4279 19.081 20.3116 19.1468 20.178C19.2125 20.0444 19.2458 19.8972 19.2441 19.7483C19.2441 19.2927 18.6419 18.8858 17.4375 18.5277C17.405 18.5115 17.3684 18.4952 17.3277 18.4789C17.3007 18.4663 17.2719 18.458 17.2423 18.4545C15.3544 17.9499 14.4105 17.0955 14.4105 15.8912C14.4105 15.0449 14.7319 14.3695 15.3748 13.865C16.0176 13.3604 16.868 13.1082 17.9259 13.1082C18.9674 13.1082 19.9602 13.4174 20.9042 14.0358L20.1962 15.4518C19.4829 14.9693 18.6403 14.714 17.7792 14.7194C16.7539 14.7194 16.2413 15.0449 16.2413 15.6959C16.2413 15.9726 16.343 16.1719 16.5464 16.2939C16.7498 16.416 17.0875 16.534 17.5595 16.6479C18.1723 16.8094 18.7755 17.005 19.3664 17.2338C19.6635 17.3647 19.9493 17.5199 20.2209 17.6976C20.8394 18.1208 21.1486 18.7636 21.1486 19.6262C21.1486 20.4725 20.8353 21.1601 20.2087 21.689C19.5821 22.218 18.7805 22.4824 17.8038 22.4825Z" fill="white"/>
<path d="M12.7037 22.464H10.7995V10.2345L12.7037 9.79395V22.464Z" fill="white"/>
<path d="M22.3873 12.5223C22.0355 12.5221 21.6945 12.4003 21.4222 12.1774C21.1498 11.9546 20.9629 11.6445 20.893 11.2997C20.8232 10.9548 20.8747 10.5964 21.0388 10.2851C21.2029 9.9739 21.4696 9.72897 21.7937 9.59183C22.1661 9.43573 22.5853 9.4337 22.9592 9.58616C23.3332 9.73862 23.6315 10.0331 23.7886 10.4052C23.9458 10.7772 23.949 11.1963 23.7976 11.5707C23.6462 11.9451 23.3526 12.2442 22.981 12.4025C22.7932 12.4819 22.5913 12.5227 22.3873 12.5223V12.5223ZM21.9521 10.3481C21.9351 10.3481 21.9189 10.3549 21.9069 10.3669C21.8949 10.3789 21.8881 10.3951 21.8881 10.4121V11.6037C21.8881 11.6207 21.8949 11.637 21.9069 11.649C21.9189 11.661 21.9351 11.6677 21.9521 11.6677C21.9629 11.6677 21.9735 11.6649 21.9829 11.6597L23.066 11.0639C23.0761 11.0584 23.0844 11.0503 23.0903 11.0404C23.0961 11.0305 23.0992 11.0193 23.0992 11.0078C23.0992 10.9964 23.0961 10.9851 23.0903 10.9753C23.0844 10.9654 23.0761 10.9573 23.066 10.9518L21.9828 10.3561C21.9734 10.3509 21.9629 10.3481 21.9521 10.3481V10.3481Z" fill="#196CFF"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,6 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" fill="#78DC35"/>
<path d="M3.70078 1.60001H10.4912L17.8336 14.9424H11.52L3.70078 1.60001Z" fill="white"/>
<path d="M28.4352 1.60001L20.9152 14.3412L17.8336 8.629L21.6448 1.60001H28.4352Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.52 14.9424L11.6608 15.1816L3.2 29.8765H9.83359L17.8624 14.9959L17.8336 14.9424H11.52ZM17.984 21.6654L22.3472 29.8765H29.3056L21.1232 15.8488L17.984 21.6654Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,26 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.2546 8.97295C20.4226 9.37615 19.6802 9.93295 19.0594 10.6177C18.9826 10.7009 18.9058 10.7841 18.8354 10.8673C16.845 12.9985 15.1874 12.9793 13.197 10.8225C13.1394 10.7521 13.0754 10.6817 13.0114 10.6177C12.3586 9.90095 11.565 9.31855 10.6818 8.91535C9.81777 8.51855 8.87057 8.31375 7.91697 8.32015C6.96977 8.31375 6.02897 8.51855 5.17137 8.91535C4.29457 9.32495 3.50737 9.90095 2.86097 10.6177C2.18897 11.3281 1.65777 12.1665 1.30577 13.0817C0.947367 14.0097 0.761765 15.0017 0.768165 15.9937C0.761765 16.9921 0.947367 17.9905 1.30577 18.9249C1.66417 19.8401 2.19537 20.6849 2.86097 21.4017C3.48177 22.0865 4.23057 22.6433 5.06897 23.0401C5.35057 21.6897 6.50897 20.6785 7.89777 20.6593C7.34097 20.6593 6.78416 20.5377 6.27856 20.3009C5.77296 20.0641 5.31857 19.7313 4.94097 19.3153C4.55057 18.8801 4.24976 18.3809 4.03856 17.8369C3.81456 17.2481 3.69937 16.6273 3.70577 16.0001C3.69937 15.3793 3.81456 14.7713 4.03856 14.1953C4.24976 13.6513 4.55057 13.1521 4.94097 12.7169C5.31857 12.3009 5.77296 11.9617 6.27856 11.7185C7.31536 11.2193 8.52497 11.2193 9.56177 11.7185C10.0674 11.9617 10.5218 12.3009 10.8994 12.7169C10.9634 12.7873 11.0274 12.8705 11.085 12.9473V12.9409C13.9586 16.0065 18.0738 16.0065 20.9474 12.9409V12.9473C21.005 12.8705 21.069 12.7937 21.133 12.7169C21.5106 12.3009 21.965 11.9617 22.4706 11.7185C22.9762 11.4753 23.5266 11.3473 24.0834 11.3473H24.109C25.517 11.3473 26.6882 10.3297 26.9762 8.97935C26.9442 8.96655 26.9058 8.94735 26.8738 8.92815C26.0098 8.53135 25.0626 8.32655 24.109 8.33295C23.1618 8.32655 22.221 8.53135 21.3634 8.92815C21.3378 8.93455 21.2994 8.95375 21.2546 8.97295Z" fill="url(#paint0_linear_3090_75)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.8162 23.0465C11.6546 22.6561 12.4034 22.0929 13.0178 21.4017C13.0818 21.3313 13.1458 21.2609 13.2034 21.1905C15.2258 18.9825 16.8514 18.9825 18.8738 21.1905C18.9378 21.2609 18.9954 21.3313 19.0594 21.4017C19.7058 22.1185 20.493 22.6881 21.3698 23.0913C22.2338 23.4817 23.1682 23.6801 24.1154 23.6737C25.0626 23.6801 26.0034 23.4817 26.8802 23.1041C27.7698 22.7137 28.5634 22.1313 29.2098 21.4017C29.8754 20.6785 30.4002 19.8401 30.7522 18.9185C31.1042 17.9841 31.2834 16.9921 31.277 15.9873C31.2834 14.9953 31.1042 14.0033 30.7522 13.0753C30.4066 12.1601 29.8818 11.3217 29.2098 10.6113C28.5826 9.92014 27.8274 9.36334 26.989 8.96014C26.701 10.3041 25.5426 11.3153 24.1538 11.3281C24.7106 11.3281 25.261 11.4561 25.7666 11.6993C26.2722 11.9425 26.7266 12.2817 27.1042 12.6977C27.4946 13.1329 27.7954 13.6321 28.0066 14.1761C28.2306 14.7521 28.3458 15.3665 28.3394 15.9809C28.3458 16.6081 28.2306 17.2353 28.0066 17.8177C27.7954 18.3617 27.4946 18.8609 27.1042 19.2961C26.7266 19.7121 26.2722 20.0449 25.7666 20.2817C24.7234 20.7617 23.5266 20.7617 22.4834 20.2817C21.9778 20.0449 21.5234 19.7121 21.1458 19.2961C21.0754 19.2129 21.005 19.1297 20.9346 19.0401V19.0465C18.061 15.9809 13.997 15.9809 11.1234 19.0465V19.0401C11.0594 19.1297 10.989 19.2129 10.9122 19.2961C10.5346 19.7121 10.0802 20.0449 9.57456 20.2817C9.07536 20.5121 8.52496 20.6337 7.97456 20.6401V20.6465H7.94896C6.54096 20.6465 5.36336 21.6705 5.07536 23.0337L5.18416 23.0849C6.04816 23.4753 6.98256 23.6737 7.92976 23.6673C8.87696 23.6737 9.81776 23.4753 10.6946 23.0977C10.733 23.0913 10.7714 23.0657 10.8162 23.0465Z" fill="url(#paint1_linear_3090_75)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.2546 8.97295C20.4226 9.37615 19.6802 9.93295 19.0594 10.6177C18.9826 10.7009 18.9058 10.7841 18.8354 10.8673C16.845 12.9985 15.1874 12.9793 13.197 10.8225C13.1394 10.7521 13.0754 10.6817 13.0114 10.6177C12.3586 9.90095 11.565 9.31855 10.6818 8.91535C9.81777 8.51855 8.87057 8.31375 7.91697 8.32015C6.96977 8.31375 6.02897 8.51855 5.17137 8.91535C4.29457 9.32495 3.50737 9.90095 2.86097 10.6177C2.18897 11.3281 1.65777 12.1665 1.30577 13.0817C0.947367 14.0097 0.761765 15.0017 0.768165 15.9937C0.761765 16.9921 0.947367 17.9905 1.30577 18.9249C1.66417 19.8401 2.19537 20.6849 2.86097 21.4017C3.48177 22.0865 4.23057 22.6433 5.06897 23.0401C5.35057 21.6897 6.50897 20.6785 7.89777 20.6593C7.34097 20.6593 6.78416 20.5377 6.27856 20.3009C5.77296 20.0641 5.31857 19.7313 4.94097 19.3153C4.55057 18.8801 4.24976 18.3809 4.03856 17.8369C3.81456 17.2481 3.69937 16.6273 3.70577 16.0001C3.69937 15.3793 3.81456 14.7713 4.03856 14.1953C4.24976 13.6513 4.55057 13.1521 4.94097 12.7169C5.31857 12.3009 5.77296 11.9617 6.27856 11.7185C7.31536 11.2193 8.52497 11.2193 9.56177 11.7185C10.0674 11.9617 10.5218 12.3009 10.8994 12.7169C10.9634 12.7873 11.0274 12.8705 11.085 12.9473V12.9409C13.9586 16.0065 18.0738 16.0065 20.9474 12.9409V12.9473C21.005 12.8705 21.069 12.7937 21.133 12.7169C21.5106 12.3009 21.965 11.9617 22.4706 11.7185C22.9762 11.4753 23.5266 11.3473 24.0834 11.3473H24.109C25.517 11.3473 26.6882 10.3297 26.9762 8.97935C26.9442 8.96655 26.9058 8.94735 26.8738 8.92815C26.0098 8.53135 25.0626 8.32655 24.109 8.33295C23.1618 8.32655 22.221 8.53135 21.3634 8.92815C21.3378 8.93455 21.2994 8.95375 21.2546 8.97295Z" fill="url(#paint2_radial_3090_75)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.8162 23.0465C11.6546 22.6561 12.4034 22.0929 13.0178 21.4017C13.0818 21.3313 13.1458 21.2609 13.2034 21.1905C15.2258 18.9825 16.8514 18.9825 18.8738 21.1905C18.9378 21.2609 18.9954 21.3313 19.0594 21.4017C19.7058 22.1185 20.493 22.6881 21.3698 23.0913C22.2338 23.4817 23.1682 23.6801 24.1154 23.6737C25.0626 23.6801 26.0034 23.4817 26.8802 23.1041C27.7698 22.7137 28.5634 22.1313 29.2098 21.4017C29.8754 20.6785 30.4002 19.8401 30.7522 18.9185C31.1042 17.9841 31.2834 16.9921 31.277 15.9873C31.2834 14.9953 31.1042 14.0033 30.7522 13.0753C30.4066 12.1601 29.8818 11.3217 29.2098 10.6113C28.5826 9.92014 27.8274 9.36334 26.989 8.96014C26.701 10.3041 25.5426 11.3153 24.1538 11.3281C24.7106 11.3281 25.261 11.4561 25.7666 11.6993C26.2722 11.9425 26.7266 12.2817 27.1042 12.6977C27.4946 13.1329 27.7954 13.6321 28.0066 14.1761C28.2306 14.7521 28.3458 15.3665 28.3394 15.9809C28.3458 16.6081 28.2306 17.2353 28.0066 17.8177C27.7954 18.3617 27.4946 18.8609 27.1042 19.2961C26.7266 19.7121 26.2722 20.0449 25.7666 20.2817C24.7234 20.7617 23.5266 20.7617 22.4834 20.2817C21.9778 20.0449 21.5234 19.7121 21.1458 19.2961C21.0754 19.2129 21.005 19.1297 20.9346 19.0401V19.0465C18.061 15.9809 13.997 15.9809 11.1234 19.0465V19.0401C11.0594 19.1297 10.989 19.2129 10.9122 19.2961C10.5346 19.7121 10.0802 20.0449 9.57456 20.2817C9.07536 20.5121 8.52496 20.6337 7.97456 20.6401V20.6465H7.94896C6.54096 20.6465 5.36336 21.6705 5.07536 23.0337L5.18416 23.0849C6.04816 23.4753 6.98256 23.6737 7.92976 23.6673C8.87696 23.6737 9.81776 23.4753 10.6946 23.0977C10.733 23.0913 10.7714 23.0657 10.8162 23.0465Z" fill="url(#paint3_radial_3090_75)"/>
<defs>
<linearGradient id="paint0_linear_3090_75" x1="25.7893" y1="11.7004" x2="8.29811" y2="22.9404" gradientUnits="userSpaceOnUse">
<stop stop-color="#00EAF3"/>
<stop offset="0.334" stop-color="#00EAF3"/>
<stop offset="1" stop-color="#023189"/>
</linearGradient>
<linearGradient id="paint1_linear_3090_75" x1="6.26996" y1="20.2896" x2="23.804" y2="9.04366" gradientUnits="userSpaceOnUse">
<stop stop-color="#00EAF3"/>
<stop offset="0.334" stop-color="#00EAF3"/>
<stop offset="1" stop-color="#023189"/>
</linearGradient>
<radialGradient id="paint2_radial_3090_75" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(5.8177 21.6404) rotate(-140.48) scale(2.67845 5.82111)">
<stop stop-color="#000033"/>
<stop offset="1" stop-color="#000033" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint3_radial_3090_75" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26.2565 10.3172) rotate(-140.493) scale(2.67655 5.81854)">
<stop stop-color="#000033"/>
<stop offset="1" stop-color="#000033" stop-opacity="0"/>
</radialGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

@ -4,7 +4,7 @@
"author": "Wappalyzer",
"homepage_url": "https://www.wappalyzer.com/",
"description": "Identify web technologies",
"version": "6.10.27",
"version": "6.10.35",
"default_locale": "en",
"manifest_version": 2,
"icons": {

@ -13,7 +13,7 @@
"software"
],
"homepage": "https://www.wappalyzer.com/",
"version": "6.10.27",
"version": "6.10.35",
"author": "Wappalyzer",
"license": "MIT",
"repository": {

@ -2292,13 +2292,13 @@
},
"website": "http://www.gocontentbox.org"
},
"ContentSquare": {
"Contentsquare": {
"cats": [
10,
74
],
"description": "ContentSquare is an enterprise-level UX optimisation platform.",
"icon": "ContentSquare.png",
"description": "Contentsquare is an enterprise-level UX optimisation platform.",
"icon": "Contentsquare.svg",
"js": {
"CS_CONF.trackerDomain": ""
},

@ -1195,7 +1195,8 @@
"Goog_AdSense_": "",
"Goog_AdSense_OsdAdapter": "",
"__google_ad_urls": "",
"google_ad_": ""
"google_ad_": "",
"adsbygoogle": ""
},
"saas": true,
"scriptSrc": [
@ -1204,7 +1205,7 @@
"2mdn\\.net",
"ad\\.ca\\.doubleclick\\.net"
],
"website": "https://www.google.fr/adsense/start/"
"website": "https://www.google.com/adsense/start/"
},
"Google Ads": {
"cats": [

@ -1647,5 +1647,22 @@
"implies": "YouTube",
"oss": true,
"website": "https://github.com/paulirish/lite-youtube-embed"
},
"LiveSession": {
"cats": [
10
],
"description": "LiveSession helps increase conversion rates using session replays, and event-based product analytics.",
"icon": "LiveSession.svg",
"scriptSrc": [
"cdn\\.livesession\\.io"
],
"website": "https://livesession.io/",
"saas": true,
"pricing": [
"low",
"freemium",
"recurring"
]
}
}
}

@ -268,6 +268,18 @@
],
"website": "https://magento.com"
},
"MageWorx Search Autocomplete": {
"cats": [
29
],
"description": "MageWorx Search Autocomplete extension offers an AJAX-based popup window that displays and updates relevant search results while a customer forms his or her query.",
"icon": "MageWorx.svg",
"requires": "Magento",
"dom":"link[href*='MageWorx_SearchSuiteAutocomplete']",
"oss": true,
"scriptSrc": "MageWorx_SearchSuiteAutocomplete",
"website": "https://github.com/mageworx/search-suite-autocomplete"
},
"Magisto": {
"cats": [
14
@ -1298,7 +1310,8 @@
"description": "ASP.NET is an open-source, server-side web-application framework designed for web development to produce dynamic web pages.",
"headers": {
"X-AspNet-Version": "(.+)\\;version:\\1",
"X-Powered-By": "^ASP\\.NET"
"X-Powered-By": "^ASP\\.NET",
"set-cookie": "\\.AspNetCore"
},
"html": "<input[^>]+name=\"__VIEWSTATE",
"icon": "Microsoft ASP.NET.svg",

@ -344,6 +344,23 @@
],
"website": "https://saba.host"
},
"SabaVision": {
"cats": [
36
],
"description": "SabaVision, one of the core products of SabaIdea, is Iran's largest online advertising agency.",
"icon": "SabaVision.png",
"meta": {
"sabavision_zone": ""
},
"js": {
"sabaVisionWebsitePage": "",
"sabaVisionWebsiteID": "",
"SabavisionElement": "",
"__SABAVISION_GET_ADD_TIMEOUT": ""
},
"website": "https://www.sabavision.com"
},
"Saber": {
"cats": [
57
@ -3122,6 +3139,25 @@
"scriptSrc": "\\.smartling\\.com/",
"website": "https://www.smartling.com"
},
"Smartlook": {
"cats": [
10
],
"description": "Smartlook is a qualitative analytics solution for websites and mobile apps.",
"icon": "Smartlook.svg",
"js": {
"smartlook": "\\;confidence:50",
"smartlook_key": "\\;confidence:50"
},
"pricing": [
"freemium",
"low",
"recurring"
],
"saas": true,
"scriptSrc": "\\.smartlook\\.com/",
"website": "https://www.smartlook.com"
},
"Smartstore": {
"cats": [
6

@ -407,6 +407,25 @@
"scriptSrc": "cdn\\.tamara\\.co",
"website": "https://tamara.co/"
},
"Tangled Network": {
"cats": [
88
],
"description": "Tangled Network provides a managed services in website devleopment, web and database hosting and domain registration, with a focus on everything managed for small and medium sized businesses.",
"dns": {
"NS": "\\.tanglednetwork\\.com",
"SOA": "\\.tanglednetwork\\.com"
},
"headers": {
"X-Hosting-Provider": "Tangled Network"
},
"icon": "atws.png",
"pricing": [
"low",
"recurring"
],
"website": "https://tanglednetwork.com"
},
"Tapad": {
"cats": [
36
@ -2757,4 +2776,4 @@
"implies": "Node.js",
"website": "https://totaljs.com"
}
}
}

@ -209,6 +209,20 @@
"icon": "Yaws.png",
"website": "http://yaws.hyber.org"
},
"Yektanet": {
"cats": [
36
],
"description": "Yektanet is the biggest and most advanced native advertising network in Iran.",
"icon": "Yektanet.png",
"meta": {
"yektanet_session_last_activity": ""
},
"js": {
"yektanet": ""
},
"website": "https://www.yektanet.com"
},
"Yelp Reservations": {
"cats": [
93