Prettify, fix parsing + in regex

main
Elbert Alias 2 years ago
parent 9246aa1f79
commit 80a0929282

@ -172,7 +172,6 @@ const Driver = {
* @param {String} body * @param {String} body
*/ */
post(url, body) { post(url, body) {
try {
return fetch(url, { return fetch(url, {
method: 'POST', method: 'POST',
body: JSON.stringify(body), body: JSON.stringify(body),
@ -180,9 +179,6 @@ const Driver = {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}) })
} catch (error) {
throw new Error(error.message || error.toString())
}
}, },
/** /**
@ -267,6 +263,16 @@ const Driver = {
} }
if (typeof attribute !== 'undefined') { if (typeof attribute !== 'undefined') {
if (technology.name === 'RSS') {
console.log(
selector,
value,
analyzeManyToMany(technology, `dom.attributes.${attribute}`, {
[selector]: [value],
})
)
}
return analyzeManyToMany( return analyzeManyToMany(
technology, technology,
`dom.attributes.${attribute}`, `dom.attributes.${attribute}`,
@ -942,10 +948,15 @@ const Driver = {
const count = Object.keys(urls).length const count = Object.keys(urls).length
if (count && (count >= 25 || Driver.lastPing < Date.now() - expiry)) { if (count && (count >= 25 || Driver.lastPing < Date.now() - expiry)) {
try {
await Driver.post('https://api.wappalyzer.com/v2/ping/', { await Driver.post('https://api.wappalyzer.com/v2/ping/', {
version: chrome.runtime.getManifest().version, version: chrome.runtime.getManifest().version,
urls, urls,
}) })
} catch (error) {
// eslint-disable-next-line no-console
console.error(error)
}
Object.keys(Driver.cache.hostnames).forEach((hostname) => { Object.keys(Driver.cache.hostnames).forEach((hostname) => {
Driver.cache.hostnames[hostname].hits = 0 Driver.cache.hostnames[hostname].hits = 0
@ -955,7 +966,15 @@ const Driver = {
} }
if (Driver.cache.ads.length > 25) { if (Driver.cache.ads.length > 25) {
await Driver.post('https://ad.wappalyzer.com/log/wp/', Driver.cache.ads) try {
await Driver.post(
'https://ad.wappalyzer.com/log/wp/',
Driver.cache.ads
)
} catch (error) {
// eslint-disable-next-line no-console
console.error(error)
}
Driver.cache.ads = [] Driver.cache.ads = []
} }

@ -101,7 +101,6 @@
"scriptSrc": "4tellcdn\\.azureedge\\.net", "scriptSrc": "4tellcdn\\.azureedge\\.net",
"website": "https://4-tell.com" "website": "https://4-tell.com"
}, },
"51.LA": { "51.LA": {
"cats": [ "cats": [
10 10
@ -111,12 +110,12 @@
"js": { "js": {
"LA.config.ck": "" "LA.config.ck": ""
}, },
"saas": true,
"pricing": [ "pricing": [
"freemium", "freemium",
"recurring", "recurring",
"payg" "payg"
], ],
"saas": true,
"website": "https://www.51.la" "website": "https://www.51.la"
}, },
"6sense": { "6sense": {
@ -125,17 +124,17 @@
76 76
], ],
"description": "6sense is a B2B predictive intelligence platform for marketing and sales.", "description": "6sense is a B2B predictive intelligence platform for marketing and sales.",
"icon": "6sense.svg",
"headers": { "headers": {
"Content-Security-Policy": "\\.6sc\\.co/" "Content-Security-Policy": "\\.6sc\\.co/"
}, },
"scriptSrc": "\\.6sc\\.co/", "icon": "6sense.svg",
"saas": true,
"pricing": [ "pricing": [
"poa", "poa",
"high", "high",
"recurring" "recurring"
], ],
"saas": true,
"scriptSrc": "\\.6sc\\.co/",
"website": "https://6sense.com" "website": "https://6sense.com"
}, },
"8base": { "8base": {

@ -487,36 +487,6 @@
"scriptSrc": "\\.getbento\\.com/", "scriptSrc": "\\.getbento\\.com/",
"website": "https://getbento.com" "website": "https://getbento.com"
}, },
"BetterDocs": {
"cats": [
4
],
"description": "BetterDocs is an advanced documentation and knowledge base plugin for WordPress and Shopify.",
"icon": "BetterDocs.png",
"js": {
"betterdocs.FEEDBACK": "",
"betterdocspublic.post_id": "",
"betterdocs_pro.FEEDBACK": ""
},
"pricing": [
"onetime"
],
"website": "https://betterdocs.co"
},
"BetterDocs plugin": {
"cats": [
87
],
"description": "BetterDocs plugin is an advanced documentation and knowledge base plugin for WordPress.",
"icon": "BetterDocs.png",
"implies": "BetterDocs",
"requires": "WordPress",
"scriptSrc": "/wp-content/plugins/betterdocs(?:-pro)?/.+\\.js(?:\\?ver=(\\d+(?:\\.\\d+)+))?\\;version:\\1",
"pricing": [
"onetime"
],
"website": "https://betterdocs.co/docs/wordpress"
},
"Better Price": { "Better Price": {
"cats": [ "cats": [
100 100
@ -550,6 +520,36 @@
"scriptSrc": "//betteruptime\\.com/", "scriptSrc": "//betteruptime\\.com/",
"website": "https://betterstack.com/better-uptime" "website": "https://betterstack.com/better-uptime"
}, },
"BetterDocs": {
"cats": [
4
],
"description": "BetterDocs is an advanced documentation and knowledge base plugin for WordPress and Shopify.",
"icon": "BetterDocs.png",
"js": {
"betterdocs.FEEDBACK": "",
"betterdocs_pro.FEEDBACK": "",
"betterdocspublic.post_id": ""
},
"pricing": [
"onetime"
],
"website": "https://betterdocs.co"
},
"BetterDocs plugin": {
"cats": [
87
],
"description": "BetterDocs plugin is an advanced documentation and knowledge base plugin for WordPress.",
"icon": "BetterDocs.png",
"implies": "BetterDocs",
"pricing": [
"onetime"
],
"requires": "WordPress",
"scriptSrc": "/wp-content/plugins/betterdocs(?:-pro)?/.+\\.js(?:\\?ver=(\\d+(?:\\.\\d+)+))?\\;version:\\1",
"website": "https://betterdocs.co/docs/wordpress"
},
"Betty Blocks": { "Betty Blocks": {
"cats": [ "cats": [
47, 47,

@ -367,8 +367,8 @@
"description": "CallTrackingMetrics is a call tracking and marketing attribution solution for contact centers and agencies.", "description": "CallTrackingMetrics is a call tracking and marketing attribution solution for contact centers and agencies.",
"icon": "CallTrackingMetrics.svg", "icon": "CallTrackingMetrics.svg",
"js": { "js": {
"__ctm_tracked_numbers": "", "__ctm.numbers": "",
"__ctm.numbers": "" "__ctm_tracked_numbers": ""
}, },
"pricing": [ "pricing": [
"mid", "mid",
@ -1617,8 +1617,8 @@
"js": { "js": {
"CFAppDomain": "app\\.clickfunnels\\.com", "CFAppDomain": "app\\.clickfunnels\\.com",
"CFSurveyParticipantID": "", "CFSurveyParticipantID": "",
"cfAddPolyfill": "", "ClickFunnels": "",
"ClickFunnels": "" "cfAddPolyfill": ""
}, },
"meta": { "meta": {
"cf:app_domain:": "app\\.clickfunnels\\.com" "cf:app_domain:": "app\\.clickfunnels\\.com"

@ -360,12 +360,12 @@
], ],
"description": "Hatena Blog is one of the traditional blog platforms in Japan.", "description": "Hatena Blog is one of the traditional blog platforms in Japan.",
"icon": "Hatena.svg", "icon": "Hatena.svg",
"scriptSrc": "cdn\\.blog\\.st-hatena\\.com/",
"pricing": [ "pricing": [
"freemium", "freemium",
"low", "low",
"recurring" "recurring"
], ],
"scriptSrc": "cdn\\.blog\\.st-hatena\\.com/",
"website": "https://hatenablog.com" "website": "https://hatenablog.com"
}, },
"HeadJS": { "HeadJS": {
@ -1244,10 +1244,10 @@
"HubSpot", "HubSpot",
"HubSpot Analytics" "HubSpot Analytics"
], ],
"requires": "WordPress",
"js": { "js": {
"leadin_wordpress.leadinPluginVersion": "^([\\d.]+)$\\;version:\\1" "leadin_wordpress.leadinPluginVersion": "^([\\d.]+)$\\;version:\\1"
}, },
"requires": "WordPress",
"website": "https://wordpress.org/plugins/leadin/" "website": "https://wordpress.org/plugins/leadin/"
}, },
"Huberway": { "Huberway": {
@ -1532,6 +1532,25 @@
"oss": true, "oss": true,
"website": "https://www.hypestylecss.xyz" "website": "https://www.hypestylecss.xyz"
}, },
"Hyva Themes": {
"cats": [
19
],
"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 Themes.svg",
"implies": [
"Magento\\;version:2",
"Tailwind CSS",
"Alpine.js"
],
"pricing": [
"onetime"
],
"website": "https://hyva.io"
},
"h5ai": { "h5ai": {
"cats": [ "cats": [
19 19
@ -1593,24 +1612,5 @@
"saas": true, "saas": true,
"scriptSrc": "merchant\\.cdn\\.hoolah\\.co/", "scriptSrc": "merchant\\.cdn\\.hoolah\\.co/",
"website": "https://www.hoolah.co" "website": "https://www.hoolah.co"
},
"Hyva Themes": {
"cats": [
19
],
"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 Themes.svg",
"implies": [
"Magento\\;version:2",
"Tailwind CSS",
"Alpine.js"
],
"pricing": [
"onetime"
],
"website": "https://hyva.io"
} }
} }

@ -2736,6 +2736,23 @@
"icon": "MySQL.svg", "icon": "MySQL.svg",
"website": "http://mysql.com" "website": "http://mysql.com"
}, },
"MySiteNow": {
"cats": [
51
],
"description": "MySiteNow provides cloud-based web development services, allowing users to create HTML5 websites and mobile sites.",
"icon": "MySiteNow.png",
"meta": {
"app-platform": "^MySiteNow$"
},
"pricing": [
"low",
"recurring",
"poa"
],
"saas": true,
"website": "https://mysitenow.gr"
},
"MyWebsite": { "MyWebsite": {
"cats": [ "cats": [
51 51
@ -2832,23 +2849,6 @@
"saas": true, "saas": true,
"website": "https://www.mysitefy.com" "website": "https://www.mysitefy.com"
}, },
"MySiteNow": {
"cats": [
51
],
"description": "MySiteNow provides cloud-based web development services, allowing users to create HTML5 websites and mobile sites.",
"icon": "MySiteNow.png",
"meta": {
"app-platform": "^MySiteNow$"
},
"saas": true,
"pricing": [
"low",
"recurring",
"poa"
],
"website": "https://mysitenow.gr"
},
"MysteryThemes News Portal": { "MysteryThemes News Portal": {
"cats": [ "cats": [
80 80

@ -135,11 +135,6 @@
66 66
], ],
"description": "Naive UI is a Vue.js UI library written in TypeScript, offering more than 80 treeshakable components.", "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": { "dom": {
"style[cssr-id^='n-']": { "style[cssr-id^='n-']": {
"attributes": { "attributes": {
@ -147,6 +142,11 @@
} }
} }
}, },
"icon": "Naive UI.svg",
"implies": [
"Vue.js",
"TypeScript"
],
"oss": true, "oss": true,
"website": "https://www.naiveui.com" "website": "https://www.naiveui.com"
}, },

@ -2421,42 +2421,42 @@
"cats": [ "cats": [
66 66
], ],
"css": "\\.p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?{",
"description": "PrimeNG is a rich set of open-source UI Components for Angular.", "description": "PrimeNG is a rich set of open-source UI Components for Angular.",
"icon": "PrimeNG.svg", "icon": "PrimeNG.svg",
"requires": "Angular",
"css": "\\.p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?{",
"oss": true, "oss": true,
"pricing": [ "pricing": [
"onetime" "onetime"
], ],
"requires": "Angular",
"website": "https://www.primefaces.org" "website": "https://www.primefaces.org"
}, },
"PrimeReact": { "PrimeReact": {
"cats": [ "cats": [
66 66
], ],
"css": ".p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?{",
"description": "PrimeReact is a rich set of open-source UI Components for React.", "description": "PrimeReact is a rich set of open-source UI Components for React.",
"icon": "PrimeReact.svg", "icon": "PrimeReact.svg",
"requires": "React",
"css": ".p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?{",
"oss": true, "oss": true,
"pricing": [ "pricing": [
"onetime" "onetime"
], ],
"requires": "React",
"website": "https://www.primefaces.org" "website": "https://www.primefaces.org"
}, },
"PrimeVue": { "PrimeVue": {
"cats": [ "cats": [
66 66
], ],
"css": ".p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?{",
"description": "PrimeVue is a rich set of open-source UI Components for Vue.js.", "description": "PrimeVue is a rich set of open-source UI Components for Vue.js.",
"icon": "PrimeVue.svg", "icon": "PrimeVue.svg",
"requires": "Vue.js",
"css": ".p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?{",
"oss": true, "oss": true,
"pricing": [ "pricing": [
"onetime" "onetime"
], ],
"requires": "Vue.js",
"website": "https://www.primefaces.org" "website": "https://www.primefaces.org"
}, },
"Primis": { "Primis": {
@ -3072,12 +3072,12 @@
19 19
], ],
"icon": "Parcel.png", "icon": "Parcel.png",
"js": {
"parcelRequire": ""
},
"implies": [ "implies": [
"SWC" "SWC"
], ],
"js": {
"parcelRequire": ""
},
"website": "https://parceljs.org/" "website": "https://parceljs.org/"
}, },
"particles.js": { "particles.js": {

@ -81,6 +81,21 @@
], ],
"website": "https://www.reg.ru" "website": "https://www.reg.ru"
}, },
"RSS": {
"cats": [
19
],
"description": "RSS is a family of web feed formats used to publish frequently updated works—such as blog entries, news headlines, audio, and video—in a standardized format.",
"dom": {
"link[type*='application']": {
"attributes": {
"type": "application/(?:rss|atom)\\+xml"
}
}
},
"icon": "RSS.svg",
"website": "https://www.rssboard.org/rss-specification"
},
"RTB House": { "RTB House": {
"cats": [ "cats": [
77 77
@ -1895,21 +1910,6 @@
], ],
"website": "https://www.royalmail.com" "website": "https://www.royalmail.com"
}, },
"RSS": {
"cats": [
19
],
"description": "RSS is a family of web feed formats used to publish frequently updated works—such as blog entries, news headlines, audio, and video—in a standardized format.",
"dom": {
"link[type*='application']": {
"attributes": {
"type": "application/(?:rss|atom)\\+xml"
}
}
},
"icon": "RSS.svg",
"website": "https://www.rssboard.org/rss-specification"
},
"Rubicon Project": { "Rubicon Project": {
"cats": [ "cats": [
36 36

@ -307,6 +307,16 @@
"scriptSrc": "/wp-content/plugins/svg-support/", "scriptSrc": "/wp-content/plugins/svg-support/",
"website": "https://github.com/wp-plugins/svg-support" "website": "https://github.com/wp-plugins/svg-support"
}, },
"SWC": {
"cats": [
19
],
"description": "SWC is an extensible Rust-based platform for the next generation of fast developer tools.",
"icon": "swc.svg",
"implies": "Rust",
"oss": true,
"website": "https://swc.rs"
},
"SWFObject": { "SWFObject": {
"cats": [ "cats": [
19 19
@ -2014,14 +2024,14 @@
76 76
], ],
"description": "Shoefitr.io is data-based shoe size advice service where we measure the length, width, ball, and instep.", "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/']", "dom": "a[href*='api.shoefitr.io/']",
"saas": true, "icon": "Shoefitr.io.svg",
"pricing": [ "pricing": [
"payg", "payg",
"high", "high",
"recurring" "recurring"
], ],
"saas": true,
"website": "https://www.shoefitr.io" "website": "https://www.shoefitr.io"
}, },
"Shogun": { "Shogun": {
@ -5849,13 +5859,7 @@
12 12
], ],
"description": "Svelte is a free and open-source front end compiler created by Rich Harris and maintained by the Svelte core team members.", "description": "Svelte is a free and open-source front end compiler created by Rich Harris and maintained by the Svelte core team members.",
"dom": { "dom": "[class*='svelte-']",
"*": {
"attributes": {
"class": "svelte-\\w+"
}
}
},
"icon": "Svelte.svg", "icon": "Svelte.svg",
"oss": true, "oss": true,
"website": "https://svelte.dev" "website": "https://svelte.dev"
@ -5912,16 +5916,6 @@
"scriptSrc": "api\\.swagifyapp\\.com/", "scriptSrc": "api\\.swagifyapp\\.com/",
"website": "https://swagifyapp.com" "website": "https://swagifyapp.com"
}, },
"SWC": {
"cats": [
19
],
"description": "SWC is an extensible Rust-based platform for the next generation of fast developer tools.",
"icon": "swc.svg",
"implies": "Rust",
"oss": true,
"website": "https://swc.rs"
},
"SweetAlert": { "SweetAlert": {
"cats": [ "cats": [
59 59

@ -133,12 +133,12 @@
"js": { "js": {
"ubilizSettings": "" "ubilizSettings": ""
}, },
"saas": true,
"pricing": [ "pricing": [
"freemium", "freemium",
"mid", "mid",
"recurring" "recurring"
], ],
"saas": true,
"website": "https://www.ubiliz.com" "website": "https://www.ubiliz.com"
}, },
"Ubuntu": { "Ubuntu": {

@ -297,14 +297,14 @@
"cats": [ "cats": [
10 10
], ],
"icon": "vercel.svg",
"js": { "js": {
"va": "" "va": ""
}, },
"scriptSrc": "/va/script\\.js",
"requires": [ "requires": [
"Vercel" "Vercel"
], ],
"icon": "vercel.svg", "scriptSrc": "/va/script\\.js",
"website": "https://vercel.com/analytics" "website": "https://vercel.com/analytics"
}, },
"Verifone 2Checkout": { "Verifone 2Checkout": {

@ -540,8 +540,10 @@ const Wappalyzer = {
// Escape slashes // Escape slashes
.replace(/\//g, '\\/') .replace(/\//g, '\\/')
// Optimise quantifiers for long strings // Optimise quantifiers for long strings
.replace(/\\\+/g, '__escapedPlus__')
.replace(/\+/g, '{1,250}') .replace(/\+/g, '{1,250}')
.replace(/\*/g, '{0,250}') .replace(/\*/g, '{0,250}')
.replace(/__escapedPlus__/g, '\\+')
: '', : '',
'i' 'i'
) )

Loading…
Cancel
Save