|
|
@ -298,19 +298,20 @@ const Wappalyzer = {
|
|
|
|
const mm = Wappalyzer.analyzeManyToMany
|
|
|
|
const mm = Wappalyzer.analyzeManyToMany
|
|
|
|
|
|
|
|
|
|
|
|
const relations = {
|
|
|
|
const relations = {
|
|
|
|
url: oo,
|
|
|
|
|
|
|
|
xhr: oo,
|
|
|
|
|
|
|
|
html: oo,
|
|
|
|
|
|
|
|
text: oo,
|
|
|
|
|
|
|
|
scripts: oo,
|
|
|
|
|
|
|
|
css: oo,
|
|
|
|
|
|
|
|
robots: oo,
|
|
|
|
|
|
|
|
certIssuer: oo,
|
|
|
|
certIssuer: oo,
|
|
|
|
scriptSrc: om,
|
|
|
|
|
|
|
|
cookies: mm,
|
|
|
|
cookies: mm,
|
|
|
|
meta: mm,
|
|
|
|
css: oo,
|
|
|
|
headers: mm,
|
|
|
|
|
|
|
|
dns: mm,
|
|
|
|
dns: mm,
|
|
|
|
|
|
|
|
headers: mm,
|
|
|
|
|
|
|
|
html: oo,
|
|
|
|
|
|
|
|
meta: mm,
|
|
|
|
|
|
|
|
probe: mm,
|
|
|
|
|
|
|
|
robots: oo,
|
|
|
|
|
|
|
|
scriptSrc: om,
|
|
|
|
|
|
|
|
scripts: oo,
|
|
|
|
|
|
|
|
text: oo,
|
|
|
|
|
|
|
|
url: oo,
|
|
|
|
|
|
|
|
xhr: oo,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
@ -344,82 +345,77 @@ const Wappalyzer = {
|
|
|
|
Wappalyzer.technologies = Object.keys(data).reduce((technologies, name) => {
|
|
|
|
Wappalyzer.technologies = Object.keys(data).reduce((technologies, name) => {
|
|
|
|
const {
|
|
|
|
const {
|
|
|
|
cats,
|
|
|
|
cats,
|
|
|
|
|
|
|
|
certIssuer,
|
|
|
|
|
|
|
|
cookies,
|
|
|
|
|
|
|
|
cpe,
|
|
|
|
|
|
|
|
css,
|
|
|
|
description,
|
|
|
|
description,
|
|
|
|
url,
|
|
|
|
dns,
|
|
|
|
xhr,
|
|
|
|
|
|
|
|
dom,
|
|
|
|
dom,
|
|
|
|
html,
|
|
|
|
excludes,
|
|
|
|
text,
|
|
|
|
|
|
|
|
scripts,
|
|
|
|
|
|
|
|
css,
|
|
|
|
|
|
|
|
robots,
|
|
|
|
|
|
|
|
meta,
|
|
|
|
|
|
|
|
headers,
|
|
|
|
headers,
|
|
|
|
dns,
|
|
|
|
html,
|
|
|
|
certIssuer,
|
|
|
|
icon,
|
|
|
|
cookies,
|
|
|
|
|
|
|
|
scriptSrc,
|
|
|
|
|
|
|
|
js,
|
|
|
|
|
|
|
|
implies,
|
|
|
|
implies,
|
|
|
|
excludes,
|
|
|
|
js,
|
|
|
|
|
|
|
|
meta,
|
|
|
|
|
|
|
|
pricing,
|
|
|
|
|
|
|
|
probe,
|
|
|
|
requires,
|
|
|
|
requires,
|
|
|
|
requiresCategory,
|
|
|
|
requiresCategory,
|
|
|
|
icon,
|
|
|
|
robots,
|
|
|
|
|
|
|
|
scriptSrc,
|
|
|
|
|
|
|
|
scripts,
|
|
|
|
|
|
|
|
text,
|
|
|
|
|
|
|
|
url,
|
|
|
|
website,
|
|
|
|
website,
|
|
|
|
pricing,
|
|
|
|
xhr,
|
|
|
|
cpe,
|
|
|
|
|
|
|
|
} = data[name]
|
|
|
|
} = data[name]
|
|
|
|
|
|
|
|
|
|
|
|
technologies.push({
|
|
|
|
technologies.push({
|
|
|
|
name,
|
|
|
|
|
|
|
|
description: description || null,
|
|
|
|
|
|
|
|
categories: cats || [],
|
|
|
|
categories: cats || [],
|
|
|
|
slug: Wappalyzer.slugify(name),
|
|
|
|
certIssuer: transform(certIssuer),
|
|
|
|
url: transform(url),
|
|
|
|
|
|
|
|
xhr: transform(xhr),
|
|
|
|
|
|
|
|
headers: transform(headers),
|
|
|
|
|
|
|
|
dns: transform(dns),
|
|
|
|
|
|
|
|
cookies: transform(cookies),
|
|
|
|
cookies: transform(cookies),
|
|
|
|
|
|
|
|
cpe: cpe || null,
|
|
|
|
|
|
|
|
css: transform(css),
|
|
|
|
|
|
|
|
description: description || null,
|
|
|
|
|
|
|
|
dns: transform(dns),
|
|
|
|
dom: transform(
|
|
|
|
dom: transform(
|
|
|
|
typeof dom === 'string' || Array.isArray(dom)
|
|
|
|
typeof dom === 'string' || Array.isArray(dom)
|
|
|
|
? toArray(dom).reduce(
|
|
|
|
? toArray(dom).reduce(
|
|
|
|
(dom, selector) => ({
|
|
|
|
(dom, selector) => ({ ...dom, [selector]: { exists: '' } }),
|
|
|
|
...dom,
|
|
|
|
|
|
|
|
[selector]: { exists: '' },
|
|
|
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
{}
|
|
|
|
{}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
: dom,
|
|
|
|
: dom,
|
|
|
|
true,
|
|
|
|
true,
|
|
|
|
false
|
|
|
|
false
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
excludes: transform(excludes).map(({ value }) => ({ name: value })),
|
|
|
|
|
|
|
|
headers: transform(headers),
|
|
|
|
html: transform(html),
|
|
|
|
html: transform(html),
|
|
|
|
text: transform(text),
|
|
|
|
icon: icon || 'default.svg',
|
|
|
|
scripts: transform(scripts),
|
|
|
|
|
|
|
|
css: transform(css),
|
|
|
|
|
|
|
|
certIssuer: transform(certIssuer),
|
|
|
|
|
|
|
|
robots: transform(robots),
|
|
|
|
|
|
|
|
meta: transform(meta),
|
|
|
|
|
|
|
|
scriptSrc: transform(scriptSrc),
|
|
|
|
|
|
|
|
js: transform(js, true),
|
|
|
|
|
|
|
|
implies: transform(implies).map(({ value, confidence, version }) => ({
|
|
|
|
implies: transform(implies).map(({ value, confidence, version }) => ({
|
|
|
|
name: value,
|
|
|
|
name: value,
|
|
|
|
confidence,
|
|
|
|
confidence,
|
|
|
|
version,
|
|
|
|
version,
|
|
|
|
})),
|
|
|
|
})),
|
|
|
|
excludes: transform(excludes).map(({ value }) => ({
|
|
|
|
js: transform(js, true),
|
|
|
|
name: value,
|
|
|
|
meta: transform(meta),
|
|
|
|
})),
|
|
|
|
name,
|
|
|
|
requires: transform(requires).map(({ value }) => ({
|
|
|
|
pricing: pricing || [],
|
|
|
|
name: value,
|
|
|
|
probe: transform(probe, true),
|
|
|
|
})),
|
|
|
|
requires: transform(requires).map(({ value }) => ({ name: value })),
|
|
|
|
requiresCategory: transform(requiresCategory).map(({ value }) => ({
|
|
|
|
requiresCategory: transform(requiresCategory).map(({ value }) => ({
|
|
|
|
id: value,
|
|
|
|
id: value,
|
|
|
|
})),
|
|
|
|
})),
|
|
|
|
icon: icon || 'default.svg',
|
|
|
|
robots: transform(robots),
|
|
|
|
|
|
|
|
scriptSrc: transform(scriptSrc),
|
|
|
|
|
|
|
|
scripts: transform(scripts),
|
|
|
|
|
|
|
|
slug: Wappalyzer.slugify(name),
|
|
|
|
|
|
|
|
text: transform(text),
|
|
|
|
|
|
|
|
url: transform(url),
|
|
|
|
website: website || null,
|
|
|
|
website: website || null,
|
|
|
|
pricing: pricing || [],
|
|
|
|
xhr: transform(xhr),
|
|
|
|
cpe: cpe || null,
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
return technologies
|
|
|
|
return technologies
|
|
|
|