",
+ "icon": "Smartstore.png",
+ "implies": "Microsoft ASP.NET",
+ "meta": {
+ "generator": "^Smartstore (.+)$\\;version:\\1"
+ },
+ "website": "https://www.smartstore.com"
+ },
"Smartstore biz": {
"cats": [
6
@@ -11064,40 +11079,23 @@
"icon": "Smartstore.biz.png",
"script": "smjslib\\.js",
"website": "http://smartstore.com"
- }
- ,
- "Smartstore.NET": {
- "cats": [
- 1,
- 6
- ],
- "cookies": {
- "SMARTSTORE.VISITOR": ""
- },
- "html": "",
- "icon": "smartstore.png",
- "implies": "Microsoft ASP.NET",
- "meta": {
- "generator": "^SmartStore.NET (.+)$\\;version:\\1"
- },
- "website": "https://www.smartstore.com"
- },
- "Smartstore": {
- "cats": [
- 1,
- 6
- ],
- "cookies": {
+ },
+ "Smartstore.NET": {
+ "cats": [
+ 1,
+ 6
+ ],
+ "cookies": {
"SMARTSTORE.VISITOR": ""
- },
- "html": "",
- "icon": "Smartstore.png",
- "implies": "Microsoft ASP.NET",
- "meta": {
- "generator": "^Smartstore (.+)$\\;version:\\1"
- },
- "website": "https://www.smartstore.com"
- },
+ },
+ "html": "",
+ "icon": "smartstore.png",
+ "implies": "Microsoft ASP.NET",
+ "meta": {
+ "generator": "^SmartStore.NET (.+)$\\;version:\\1"
+ },
+ "website": "https://www.smartstore.com"
+ },
"Snap": {
"cats": [
18,
@@ -11122,9 +11120,9 @@
"website": "http://snapsvg.io"
},
"Snipcart": {
- "cats": [6],
- "website": "https://snipcart.com/",
- "icon": "Snipcart.png",
+ "cats": [
+ 6
+ ],
"cookies": {
"snipcart-cart": ""
},
@@ -11132,7 +11130,9 @@
"
]*href=\".*snipcart\\.css\"",
"
]*id=\".*snipcart.*\""
],
- "script": "https://cdn\\.snipcart\\.com/themes/v([\\w.]+)/default/snipcart\\.js\\;version:\\1"
+ "icon": "Snipcart.png",
+ "script": "https://cdn\\.snipcart\\.com/themes/v([\\w.]+)/default/snipcart\\.js\\;version:\\1",
+ "website": "https://snipcart.com/"
},
"Snoobi": {
"cats": [
@@ -14336,6 +14336,17 @@
"script": "https://hcaptcha.com/([\\d]+?)/api.js\\;version:\\1",
"website": "https://www.hcaptcha.com/"
},
+ "hantana": {
+ "cats": [
+ 10
+ ],
+ "icon": "hantana.png",
+ "js": {
+ "Hantana": ""
+ },
+ "script": "//hantana\\.org/widget",
+ "website": "https://hantana.org/"
+ },
"iEXExchanger": {
"cats": [
1
@@ -15337,17 +15348,6 @@
"generator": "xt:Commerce"
},
"website": "https://www.xt-commerce.com"
- },
- "hantana": {
- "cats": [
- 10
- ],
- "icon": "hantana.png",
- "js": {
- "Hantana": ""
- },
- "script": "//hantana\\.org/widget",
- "website": "https://hantana.org/"
}
},
"categories": {
@@ -15620,4 +15620,4 @@
"priority": 6
}
}
-}
+}
\ No newline at end of file
diff --git a/src/drivers/npm/cli.js b/src/drivers/npm/cli.js
index 2e737ca7e..1cab50af9 100755
--- a/src/drivers/npm/cli.js
+++ b/src/drivers/npm/cli.js
@@ -19,7 +19,7 @@ const aliases = {
m: 'maxUrls',
P: 'pretty',
r: 'recursive',
- w: 'maxWait'
+ w: 'maxWait',
}
while (true) {
@@ -76,7 +76,7 @@ Options:
process.exit(1)
}
-;(async function() {
+;(async function () {
const wappalyzer = await new Wappalyzer(options)
try {
diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json
index b97ad04fb..3053927c5 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.2.6",
+ "version": "6.3.0",
"author": "Wappalyzer",
"license": "MIT",
"repository": {
@@ -37,4 +37,4 @@
"dependencies": {
"puppeteer": "^5.2.1"
}
-}
+}
\ No newline at end of file
diff --git a/src/drivers/webextension/js/content.js b/src/drivers/webextension/js/content.js
index 853ae36ae..2606e15c9 100644
--- a/src/drivers/webextension/js/content.js
+++ b/src/drivers/webextension/js/content.js
@@ -70,7 +70,7 @@ const Content = {
Content.driver('onContentLoad', [
location.href,
{ html, scripts, meta },
- language
+ language,
])
Content.onGetTechnologies(await Content.driver('getTechnologies'))
@@ -85,7 +85,7 @@ const Content = {
{
source: 'content.js',
func,
- args: args ? (Array.isArray(args) ? args : [args]) : []
+ args: args ? (Array.isArray(args) ? args : [args]) : [],
},
(response) => {
chrome.runtime.lastError
@@ -115,7 +115,7 @@ const Content = {
chrome.runtime.sendMessage({
source: 'content.js',
func: 'analyzeJs',
- args: [location.href.split('#')[0], data.wappalyzer.js]
+ args: [location.href.split('#')[0], data.wappalyzer.js],
})
script.remove()
@@ -127,15 +127,15 @@ const Content = {
wappalyzer: {
technologies: technologies
.filter(({ js }) => Object.keys(js).length)
- .map(({ name, js }) => ({ name, chains: Object.keys(js) }))
- }
+ .map(({ name, js }) => ({ name, chains: Object.keys(js) })),
+ },
})
}
script.setAttribute('src', chrome.extension.getURL('js/inject.js'))
document.body.appendChild(script)
- }
+ },
}
if (/complete|interactive|loaded/.test(document.readyState)) {
diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js
index 7a338358b..2fd1f4435 100644
--- a/src/drivers/webextension/js/driver.js
+++ b/src/drivers/webextension/js/driver.js
@@ -7,7 +7,7 @@ const {
setCategories,
analyze,
analyzeManyToMany,
- resolve
+ resolve,
} = Wappalyzer
const { agent, promisify, getOption, setOption, open } = Utils
@@ -34,25 +34,25 @@ const Driver = {
({
technology: name,
pattern: { regex, confidence },
- version
+ version,
}) => ({
technology: Wappalyzer.technologies.find(
({ name: _name }) => name === _name
),
pattern: {
regex: new RegExp(regex, 'i'),
- confidence
+ confidence,
},
- version
+ version,
})
- )
- }
+ ),
+ },
}),
{}
),
tabs: {},
robots: await getOption('robots', {}),
- ads: await getOption('ads', [])
+ ads: await getOption('ads', []),
}
chrome.browserAction.setBadgeBackgroundColor({ color: '#6B39BD' }, () => {})
@@ -126,7 +126,7 @@ const Driver = {
try {
return fetch(url, {
method: 'POST',
- body: JSON.stringify(body)
+ body: JSON.stringify(body),
})
} catch (error) {
throw new Error(error.message || error.toString())
@@ -194,7 +194,7 @@ const Driver = {
try {
const [tab] = await promisify(chrome.tabs, 'query', {
- url: [request.url]
+ url: [request.url],
})
if (tab) {
@@ -233,12 +233,12 @@ const Driver = {
items.cookies = (
await promisify(chrome.cookies, 'getAll', {
- domain: `.${hostname}`
+ domain: `.${hostname}`,
})
).reduce(
(cookies, { name, value }) => ({
...cookies,
- [name]: [value]
+ [name]: [value],
}),
{}
)
@@ -288,9 +288,9 @@ const Driver = {
...(Driver.cache.hostnames[hostname] || {
url: `${protocol}//${hostname}`,
detections: [],
- hits: incrementHits ? 0 : 1
+ hits: incrementHits ? 0 : 1,
}),
- dateTime: Date.now()
+ dateTime: Date.now(),
})
// Remove duplicates
@@ -336,17 +336,17 @@ const Driver = {
({
technology: { name: technology },
pattern: { regex, confidence },
- version
+ version,
}) => ({
technology,
pattern: {
regex: regex.source,
- confidence
+ confidence,
},
- version
+ version,
})
- )
- }
+ ),
+ },
}),
{}
)
@@ -402,7 +402,9 @@ const Driver = {
{
tabId,
text:
- badge && technologies.length ? technologies.length.toString() : ''
+ badge && technologies.length
+ ? technologies.length.toString()
+ : '',
},
() => {}
)
@@ -416,7 +418,7 @@ const Driver = {
? `converted/${icon.replace(/\.svg$/, '.png')}`
: icon
}`
- )
+ ),
},
() => {}
)
@@ -430,7 +432,7 @@ const Driver = {
async getDetections() {
const [{ id, url }] = await promisify(chrome.tabs, 'query', {
active: true,
- currentWindow: true
+ currentWindow: true,
})
if (await Driver.isDisabledDomain(url)) {
@@ -462,12 +464,13 @@ const Driver = {
try {
Driver.cache.robots[hostname] = await Promise.race([
+ // eslint-disable-next-line no-async-promise-executor
new Promise(async (resolve) => {
const response = await fetch(
`http${secure ? 's' : ''}://${hostname}/robots.txt`,
{
redirect: 'follow',
- mode: 'no-cors'
+ mode: 'no-cors',
}
)
@@ -497,7 +500,7 @@ const Driver = {
}, [])
)
}),
- new Promise((resolve) => setTimeout(() => resolve(''), 5000))
+ new Promise((resolve) => setTimeout(() => resolve(''), 5000)),
])
Driver.cache.robots = Object.keys(Driver.cache.robots)
@@ -505,7 +508,7 @@ const Driver = {
.reduce(
(cache, hostname) => ({
...cache,
- [hostname]: Driver.cache.robots[hostname]
+ [hostname]: Driver.cache.robots[hostname],
}),
{}
)
@@ -578,7 +581,7 @@ const Driver = {
if (confidence === 100) {
technologies[name] = {
version,
- hits
+ hits,
}
}
@@ -587,8 +590,8 @@ const Driver = {
{}
),
meta: {
- language
- }
+ language,
+ },
}
}
@@ -613,7 +616,7 @@ const Driver = {
await setOption('ads', (Driver.cache.ads = []))
}
}
- }
+ },
}
Driver.init()
diff --git a/src/drivers/webextension/js/inject.js b/src/drivers/webextension/js/inject.js
index f658f7eb5..f47088d7e 100644
--- a/src/drivers/webextension/js/inject.js
+++ b/src/drivers/webextension/js/inject.js
@@ -1,6 +1,6 @@
/* eslint-env browser */
-;(function() {
+;(function () {
try {
const onMessage = ({ data }) => {
if (!data.wappalyzer) {
@@ -21,7 +21,7 @@
(value, method) =>
value &&
value instanceof Object &&
- value.hasOwnProperty(method)
+ Object.prototype.hasOwnProperty.call(value, method)
? value[method]
: undefined,
window
@@ -34,14 +34,14 @@
value:
typeof value === 'string' || typeof value === 'number'
? value
- : !!value
+ : !!value,
})
}
})
return technologies
- }, [])
- }
+ }, []),
+ },
})
}
diff --git a/src/drivers/webextension/js/options.js b/src/drivers/webextension/js/options.js
index dc2db78b2..dd3aefe49 100644
--- a/src/drivers/webextension/js/options.js
+++ b/src/drivers/webextension/js/options.js
@@ -21,12 +21,13 @@ const Options = {
['dynamicIcon', false],
['badge', true],
['tracking', true],
- ['themeMode', false]
+ ['themeMode', false],
].map(async ([option, defaultValue]) => {
const el = document
.querySelector(
- `[data-i18n="option${option.charAt(0).toUpperCase() +
- option.slice(1)}"]`
+ `[data-i18n="option${
+ option.charAt(0).toUpperCase() + option.slice(1)
+ }"]`
)
.parentNode.querySelector('input')
@@ -50,7 +51,7 @@ const Options = {
{
source: 'content.js',
func,
- args: args ? (Array.isArray(args) ? args : [args]) : []
+ args: args ? (Array.isArray(args) ? args : [args]) : [],
},
(response) => {
chrome.runtime.lastError
@@ -59,7 +60,7 @@ const Options = {
}
)
})
- }
+ },
}
if (/complete|interactive|loaded/.test(document.readyState)) {
diff --git a/src/drivers/webextension/js/popup.js b/src/drivers/webextension/js/popup.js
index 4eac92913..39b8704ae 100644
--- a/src/drivers/webextension/js/popup.js
+++ b/src/drivers/webextension/js/popup.js
@@ -9,7 +9,7 @@ const {
getOption,
setOption,
promisify,
- sendMessage
+ sendMessage,
} = Utils
function setDisabledDomain(enabled) {
@@ -83,7 +83,7 @@ const Popup = {
// Alert
const tabs = await promisify(chrome.tabs, 'query', {
active: true,
- currentWindow: true
+ currentWindow: true,
})
if (tabs && tabs.length) {
@@ -168,7 +168,7 @@ const Popup = {
technology.categories.forEach((category) => {
categories[category.id] = categories[category.id] || {
...category,
- technologies: []
+ technologies: [],
}
categories[category.id].technologies.push(technology)
@@ -296,7 +296,7 @@ const Popup = {
)
i18n()
- }
+ },
}
if (/complete|interactive|loaded/.test(document.readyState)) {
diff --git a/src/drivers/webextension/js/utils.js b/src/drivers/webextension/js/utils.js
index f48e74403..bdc935326 100644
--- a/src/drivers/webextension/js/utils.js
+++ b/src/drivers/webextension/js/utils.js
@@ -60,7 +60,7 @@ const Utils = {
async setOption(name, value) {
try {
await Utils.promisify(chrome.storage.local, 'set', {
- [name]: value
+ [name]: value,
})
} catch (error) {
// eslint-disable-next-line no-console
@@ -83,7 +83,7 @@ const Utils = {
{
source,
func,
- args: args ? (Array.isArray(args) ? args : [args]) : []
+ args: args ? (Array.isArray(args) ? args : [args]) : [],
},
(response) => {
chrome.runtime.lastError
@@ -92,5 +92,5 @@ const Utils = {
}
)
})
- }
+ },
}
diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json
index b0f17eea3..39a334829 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.2.4",
+ "version": "6.3.0",
"default_locale": "en",
"manifest_version": 2,
"icons": {
diff --git a/src/package.json b/src/package.json
index e9aba8300..e143929b7 100644
--- a/src/package.json
+++ b/src/package.json
@@ -13,7 +13,7 @@
"software"
],
"homepage": "https://www.wappalyzer.com",
- "version": "6.2.6",
+ "version": "6.3.0",
"author": "Wappalyzer",
"license": "MIT",
"repository": {
@@ -27,4 +27,4 @@
"files": [
"wappalyzer.js"
]
-}
+}
\ No newline at end of file
diff --git a/src/wappalyzer.js b/src/wappalyzer.js
index 07f87ee9e..35a4f5aea 100644
--- a/src/wappalyzer.js
+++ b/src/wappalyzer.js
@@ -69,7 +69,7 @@ const Wappalyzer = {
({
technology: { name, slug, categories, icon, website, cpe },
confidence,
- version
+ version,
}) => ({
name,
slug,
@@ -78,7 +78,7 @@ const Wappalyzer = {
version,
icon,
website,
- cpe
+ cpe,
})
)
},
@@ -166,7 +166,7 @@ const Wappalyzer = {
resolved.push({
technology: implied,
confidence: Math.min(confidence, _confidence),
- version: ''
+ version: '',
})
done = false
@@ -197,7 +197,7 @@ const Wappalyzer = {
om(technology, 'scripts', scripts),
mm(technology, 'cookies', cookies),
mm(technology, 'meta', meta),
- mm(technology, 'headers', headers)
+ mm(technology, 'headers', headers),
])
)
).filter((technology) => technology)
@@ -230,7 +230,7 @@ const Wappalyzer = {
excludes,
icon,
website,
- cpe
+ cpe,
} = data[name]
technologies.push({
@@ -247,14 +247,14 @@ const Wappalyzer = {
js: transform(js, true),
implies: transform(implies).map(({ value, confidence }) => ({
name: value,
- confidence
+ confidence,
})),
excludes: transform(excludes).map(({ value }) => ({
- name: value
+ name: value,
})),
icon: icon || 'default.svg',
website: website || null,
- cpe: cpe || null
+ cpe: cpe || null,
})
return technologies
@@ -273,7 +273,7 @@ const Wappalyzer = {
categories.push({
id: parseInt(id, 10),
slug: Wappalyzer.slugify(category.name),
- ...category
+ ...category,
})
return categories
@@ -324,7 +324,7 @@ const Wappalyzer = {
value,
regex,
confidence: parseInt(confidence || 100, 10),
- version: version || ''
+ version: version || '',
}
})
@@ -346,7 +346,7 @@ const Wappalyzer = {
technologies.push({
technology,
pattern,
- version: Wappalyzer.resolveVersion(pattern, value)
+ version: Wappalyzer.resolveVersion(pattern, value),
})
}
@@ -369,7 +369,7 @@ const Wappalyzer = {
technologies.push({
technology,
pattern,
- version: Wappalyzer.resolveVersion(pattern, value)
+ version: Wappalyzer.resolveVersion(pattern, value),
})
}
})
@@ -395,7 +395,7 @@ const Wappalyzer = {
technologies.push({
technology,
pattern,
- version: Wappalyzer.resolveVersion(pattern, value)
+ version: Wappalyzer.resolveVersion(pattern, value),
})
}
})
@@ -403,7 +403,7 @@ const Wappalyzer = {
return technologies
}, [])
- }
+ },
}
if (typeof module !== 'undefined') {