Merge pull request #11 from AliasIO/master

Sync no.11
main
Daniel Zdziebko 7 years ago committed by GitHub
commit c5087eb1b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -3,6 +3,9 @@ sudo: required
services:
- docker
before_install: npm install -g npm@latest
install: npm ci
after_success:
- sha256sum build/* > build/SHA256SUMS
- cat build/SHA256SUMS

@ -16,7 +16,7 @@ var
for (app in json.apps) {
(function(app) {
var
iconPath = json.apps[app].icon || 'default.svg';
iconPath = json.apps[app].icon || 'default.svg',
path = basePath + iconPath,
ext = iconPath.substr(iconPath.length - 4);

@ -0,0 +1,16 @@
<!--
If you need technical help please read https://www.wappalyzer.com/docs before opening an issue.
It also explains well how to add a new application detection.
-->
**Do you want to request a *feature*, a *new application detection* or report a *bug*?**
**Is your issue about WebExtension driver (Chrome & Firefox), the website, the NPM driver or the bookmarklet ?**
**What is the current behavior ?**
**If the current behavior is a bug, please provide the steps to reproduce and if possible a demo of the problem.**
**What is the expected behavior ?**
**Which versions of Wappalyzer, and which browser / OS are affected by this issue ? Did this work in previous versions ?**

284
package-lock.json generated

@ -0,0 +1,284 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"chai": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
"integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
"dev": true,
"requires": {
"assertion-error": "1.1.0",
"check-error": "1.0.2",
"deep-eql": "3.0.1",
"get-func-name": "2.0.0",
"pathval": "1.1.0",
"type-detect": "4.0.8"
}
},
"check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true
},
"commander": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"file-type": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-7.4.0.tgz",
"integrity": "sha1-KnyU9ioAMBULt9m2xwz6HT51nIY="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"growl": {
"version": "1.10.3",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",
"integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==",
"dev": true
},
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
},
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
"html-comment-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
"integrity": "sha1-ZouTd26q5V696POtRkswekljYl4="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
"is-svg": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
"integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
"requires": {
"html-comment-regex": "1.1.1"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "1.1.11"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"mocha": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.0.tgz",
"integrity": "sha512-d6RWgYPILd+AoWVOxiD0UwUqRicnE1inTxMr40CXOgqYve1MvnKntoLAtLIcxjEeVjEoYYTe5QAq3mUc6/ySjQ==",
"dev": true,
"requires": {
"browser-stdout": "1.3.1",
"commander": "2.11.0",
"debug": "3.1.0",
"diff": "3.5.0",
"escape-string-regexp": "1.0.5",
"glob": "7.1.2",
"growl": "1.10.3",
"he": "1.1.1",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"supports-color": "4.4.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"pathval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
"dev": true
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
},
"read-chunk": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz",
"integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=",
"requires": {
"pify": "3.0.0",
"safe-buffer": "5.1.1"
}
},
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
"dev": true,
"requires": {
"has-flag": "2.0.0"
}
},
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

@ -3,6 +3,12 @@
"file-type": "7.4.*",
"is-svg": "2.1.*",
"read-chunk": "2.1.*"
},
"devDependencies": {
"chai": "^4.1.2",
"mocha": "^5.0.1"
},
"scripts": {
"test": "mocha -R spec ./test"
}
}

@ -0,0 +1,11 @@
--- src/drivers/npm/node_modules/zombie/lib/document.js 2018-04-20 14:36:04.097829977 +1000
+++ src/drivers/npm/node_modules/zombie/lib/document.js 2018-04-20 14:34:25.699317000 +1000
@@ -281,7 +281,7 @@
// The current window, postMessage and window.close need this
browser._windowInScope = window;
var result = undefined;
- if (typeof code === 'string' || code instanceof String) result = VM.runInContext(code, window, { filename: filename });else if (code) result = code.call(window);
+ if (typeof code === 'string' || code instanceof String) result = VM.runInContext(code, window, { filename: filename, timeout: 1000 });else if (code) result = code.call(window);
browser.emit('evaluated', code, result, filename);
return result;
} catch (error) {

1
run

@ -11,6 +11,7 @@ fi
cmd="docker run --rm -v "$(pwd):/opt/wappalyzer" -it wappalyzer/dev"
$cmd sh -c "yarn install; cd src/drivers/webextension; yarn install"
$cmd sh -c "cat patches/*.patch | patch -p0"
$cmd ./bin/run links
$cmd ./bin/run $@

File diff suppressed because it is too large Load Diff

@ -22,20 +22,20 @@
function getPageContent() {
wappalyzer.log('func: getPageContent', 'driver');
var env = [];
for ( let i in window ) {
env.push(i);
}
var scripts = Array.prototype.slice
.apply(document.scripts)
.filter(s => s.src)
.map(s => s.src);
var html = new XMLSerializer().serializeToString(document).split('\n');
html = html
.slice(0, 1000).concat(html.slice(html.length - 1000))
.map(line => line.substring(0, 1000))
.join('\n');
wappalyzer.analyze(url, {
html: document.documentElement.innerHTML,
env: env,
html: html,
scripts: scripts
});
}

@ -35,6 +35,8 @@ node index.js [url] [options]
--max-wait=ms Wait no more than ms milliseconds for page resources to load.
--recursive=0|1 Follow links on pages (crawler).
--user-agent=str Set the user agent string.
--html-max-cols=num Limit the number of HTML characters per line processed.
--html-max-rows=num Limit the number of HTML lines processed.
```
@ -49,6 +51,8 @@ const options = {
maxWait: 5000,
recursive: true,
userAgent: 'Wappalyzer',
htmlMaxCols: 2000,
htmlMaxRows: 2000,
};
const wappalyzer = new Wappalyzer('https://www.wappalyzer.com', options);

@ -21,6 +21,8 @@ class Driver {
maxWait: 5000,
recursive: false,
userAgent: 'Mozilla/5.0 (compatible; Wappalyzer)',
htmlMaxCols: 2000,
htmlMaxRows: 2000,
}, options || {});
this.options.debug = Boolean(this.options.debug);
@ -28,6 +30,8 @@ class Driver {
this.options.maxDepth = parseInt(this.options.maxDepth, 10);
this.options.maxUrls = parseInt(this.options.maxUrls, 10);
this.options.maxWait = parseInt(this.options.maxWait, 10);
this.options.htmlMaxCols = parseInt(this.options.htmlMaxCols, 10);
this.options.htmlMaxRows = parseInt(this.options.htmlMaxRows, 10);
this.options.recursive = Boolean(this.options.recursive);
this.origPageUrl = url.parse(pageUrl);
@ -44,6 +48,8 @@ class Driver {
this.wappalyzer.driver.log = (message, source, type) => this.log(message, source, type);
this.wappalyzer.driver.displayApps = (detected, meta, context) => this.displayApps(detected, meta, context);
process.on('uncaughtException', e => this.wappalyzer.log('Uncaught exception: ' + e.message, 'driver', 'error'));
}
analyze() {
@ -108,6 +114,7 @@ class Driver {
visit(pageUrl, timerScope, resolve) {
const browser = new Browser({
silent: true,
strictSSL: false,
userAgent: this.options.userAgent,
waitDuration: this.options.maxWait,
});
@ -125,22 +132,31 @@ class Driver {
const html = this.getHtml(browser);
const scripts = this.getScripts(browser);
const js = this.getJs(browser);
const cookies = this.getCookies(browser);
this.wappalyzer.analyze(pageUrl, {
headers,
html,
scripts,
js
});
js,
cookies,
})
.then(() => {
const links = Array.prototype.reduce.call(
browser.document.getElementsByTagName('a'), (results, link) => {
if ( link.protocol.match(/https?:/) || link.hostname === this.origPageUrl.hostname || extensions.test(link.pathname) ) {
link.hash = '';
const links = Array.from(browser.document.getElementsByTagName('a'))
.filter(link => link.protocol === 'http:' || link.protocol === 'https:')
.filter(link => link.hostname === this.origPageUrl.hostname)
.filter(link => extensions.test(link.pathname))
.map(link => { link.hash = ''; return url.parse(link.href) });
results.push(url.parse(link.href));
}
return results;
}, []
);
return resolve(links);
});
});
}
responseOk(browser, pageUrl) {
@ -204,11 +220,11 @@ class Driver {
let html = '';
try {
html = browser.html();
if ( html.length > 50000 ) {
html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
}
html = browser.html()
.split('\n')
.slice(0, this.options.htmlMaxRows / 2).concat(html.slice(html.length - this.options.htmlMaxRows / 2))
.map(line => line.substring(0, this.options.htmlMaxCols))
.join('\n');
} catch ( error ) {
this.wappalyzer.log(error.message, 'browser', 'error');
}
@ -258,7 +274,22 @@ class Driver {
return js;
}
crawl(pageUrl, index, depth = 1) {
getCookies(browser) {
const cookies = [];
if ( browser.cookies ) {
browser.cookies.forEach(cookie => cookies.push({
name: cookie.key,
value: cookie.value,
domain: cookie.domain,
path: cookie.path,
}));
}
return cookies;
}
crawl(pageUrl, index = 1, depth = 1) {
pageUrl.canonical = pageUrl.protocol + '//' + pageUrl.host + pageUrl.pathname;
return new Promise(resolve => {

@ -1,6 +1,6 @@
{
"name": "wappalyzer",
"version": "5.3.1",
"version": "5.4.13",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -28,7 +28,7 @@
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"requires": {
"co": "4.6.0",
"fast-deep-equal": "1.0.0",
"fast-deep-equal": "1.1.0",
"fast-json-stable-stringify": "2.0.0",
"json-schema-traverse": "0.3.1"
}
@ -54,9 +54,9 @@
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
"integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
},
"babel-runtime": {
"version": "5.8.29",
@ -85,7 +85,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"requires": {
"hoek": "4.2.0"
"hoek": "4.2.1"
}
},
"caseless": {
@ -99,9 +99,9 @@
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
},
"combined-stream": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": {
"delayed-stream": "1.0.0"
}
@ -129,7 +129,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"requires": {
"hoek": "4.2.0"
"hoek": "4.2.1"
}
}
}
@ -161,6 +161,13 @@
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
},
"dependencies": {
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"deep-is": {
@ -183,15 +190,15 @@
}
},
"escodegen": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
"integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
"integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
"requires": {
"esprima": "3.1.3",
"estraverse": "4.2.0",
"esutils": "2.0.2",
"optionator": "0.8.2",
"source-map": "0.5.7"
"source-map": "0.6.1"
}
},
"esprima": {
@ -228,9 +235,9 @@
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
"integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
},
"fast-json-stable-stringify": {
"version": "2.0.0",
@ -248,13 +255,13 @@
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
"integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"requires": {
"asynckit": "0.4.0",
"combined-stream": "1.0.5",
"mime-types": "2.1.17"
"combined-stream": "1.0.6",
"mime-types": "2.1.18"
}
},
"getpass": {
@ -286,14 +293,14 @@
"requires": {
"boom": "4.3.1",
"cryptiles": "3.1.2",
"hoek": "4.2.0",
"hoek": "4.2.1",
"sntp": "2.1.0"
}
},
"hoek": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
"integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ=="
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
},
"http-signature": {
"version": "1.2.0",
@ -302,13 +309,16 @@
"requires": {
"assert-plus": "1.0.0",
"jsprim": "1.4.1",
"sshpk": "1.13.1"
"sshpk": "1.14.1"
}
},
"iconv-lite": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
"version": "0.4.21",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz",
"integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
"requires": {
"safer-buffer": "2.1.2"
}
},
"is-typedarray": {
"version": "1.0.0",
@ -336,13 +346,13 @@
"acorn-globals": "1.0.9",
"cssom": "0.3.2",
"cssstyle": "0.2.37",
"escodegen": "1.9.0",
"nwmatcher": "1.4.3",
"escodegen": "1.9.1",
"nwmatcher": "1.4.4",
"parse5": "1.5.1",
"request": "2.83.0",
"request": "2.85.0",
"sax": "1.2.4",
"symbol-tree": "3.2.2",
"tough-cookie": "2.3.3",
"tough-cookie": "2.3.4",
"webidl-conversions": "2.0.1",
"whatwg-url-compat": "0.6.5",
"xml-name-validator": "2.0.1"
@ -394,27 +404,27 @@
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
"integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
},
"mime-types": {
"version": "2.1.17",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
"version": "2.1.18",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"requires": {
"mime-db": "1.30.0"
"mime-db": "1.33.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
"integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8="
},
"nwmatcher": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz",
"integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw=="
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz",
"integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ=="
},
"oauth-sign": {
"version": "0.8.2",
@ -478,32 +488,32 @@
"integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw="
},
"request": {
"version": "2.83.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
"integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
"version": "2.85.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
"integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
"requires": {
"aws-sign2": "0.7.0",
"aws4": "1.6.0",
"aws4": "1.7.0",
"caseless": "0.12.0",
"combined-stream": "1.0.5",
"combined-stream": "1.0.6",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.3.1",
"form-data": "2.3.2",
"har-validator": "5.0.3",
"hawk": "6.0.2",
"http-signature": "1.2.0",
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
"mime-types": "2.1.17",
"mime-types": "2.1.18",
"oauth-sign": "0.8.2",
"performance-now": "2.1.0",
"qs": "6.5.1",
"safe-buffer": "5.1.1",
"stringstream": "0.0.5",
"tough-cookie": "2.3.3",
"tough-cookie": "2.3.4",
"tunnel-agent": "0.6.0",
"uuid": "3.1.0"
"uuid": "3.2.1"
}
},
"requires-port": {
@ -516,6 +526,11 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@ -526,19 +541,19 @@
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"requires": {
"hoek": "4.2.0"
"hoek": "4.2.1"
}
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"optional": true
},
"sshpk": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
"integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
"integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
"requires": {
"asn1": "0.2.3",
"assert-plus": "1.0.0",
@ -561,9 +576,9 @@
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
},
"tough-cookie": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
"integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"requires": {
"punycode": "1.4.1"
}
@ -595,6 +610,11 @@
"prelude-ls": "1.1.2"
}
},
"ultron": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
"integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
},
"url-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz",
@ -605,9 +625,9 @@
}
},
"uuid": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
},
"verror": {
"version": "1.10.0",
@ -637,49 +657,37 @@
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
},
"ws": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
"integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
"requires": {
"options": "0.0.6",
"ultron": "1.0.2"
}
},
"xml-name-validator": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
"integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU="
},
"zombie": {
"version": "5.0.7",
"resolved": "https://registry.npmjs.org/zombie/-/zombie-5.0.7.tgz",
"integrity": "sha512-zrYFTD5iWxI3EJohmZ8F2sNafo44F/132wLj5WHLSHmytds60s+JiXLomflQ8sbNuWCZJAuszvf6+eUiVsUqPQ==",
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/zombie/-/zombie-5.0.8.tgz",
"integrity": "sha512-b634oIFJ2SFHnWEdntljrBeEroF1piyTiPmZPqsZwwy2KC5MLazq97eHPw1Qz77VPujQTEnbhOUvMssjpak2WQ==",
"requires": {
"babel-runtime": "5.8.29",
"bluebird": "3.5.1",
"debug": "2.6.9",
"eventsource": "0.1.6",
"iconv-lite": "0.4.19",
"iconv-lite": "0.4.21",
"jsdom": "7.2.2",
"lodash": "3.10.1",
"mime": "1.6.0",
"ms": "0.7.3",
"request": "2.83.0",
"tough-cookie": "2.3.3",
"request": "2.85.0",
"tough-cookie": "2.3.4",
"ws": "1.1.5"
},
"dependencies": {
"ms": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
"integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8="
},
"ultron": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
"integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
},
"ws": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
"integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
"requires": {
"options": "0.0.6",
"ultron": "1.0.2"
}
}
}
}
}

@ -2,7 +2,7 @@
"name": "wappalyzer",
"description": "Uncovers the technologies used on websites",
"homepage": "https://github.com/AliasIO/Wappalyzer",
"version": "5.4.5",
"version": "5.4.15",
"author": "Elbert Alias",
"license": "GPL-3.0",
"repository": {
@ -17,7 +17,7 @@
"wappalyzer.js"
],
"dependencies": {
"request": "^2.83.0",
"zombie": "^5.0.7"
"request": "^2.85.0",
"zombie": "^5.0.8"
}
}

@ -10,7 +10,7 @@
"optionTracking": { "message": "Anonyme Statistiken an wappalyzer.com übermitteln" },
"nothingToDo": { "message": "Nichts zu tun." },
"noAppsDetected": { "message": "Keine Applikation entdeckt." },
"categoryPin": { "message": "Always show icon" },
"categoryPin": { "message": "Immer Icon anzeigen" },
"categoryName1": { "message": "CMS" },
"categoryName2": { "message": "Nachrichten Board" },
"categoryName3": { "message": "Datenbankverwaltung" },
@ -65,5 +65,7 @@
"categoryName52": { "message": "Live-Chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Buchhaltung" }
"categoryName55": { "message": "Buchhaltung" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Statischer Seitengenerator" }
}

@ -60,5 +60,8 @@
"categoryName51": { "message": "Σύστημα Κατασκευής Σελίδων Υποδοχής" },
"categoryName52": { "message": "Live Chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -65,5 +65,7 @@
"categoryName52": { "message": "Live Chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" }
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -64,5 +64,8 @@
"categoryName51": { "message": "Landing Page Builder" },
"categoryName52": { "message": "Live Chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -10,7 +10,7 @@
"optionsSaved": { "message": "Sauvegardé" },
"twitter": { "message": "Suivre Wappalyzer sur Twitter" },
"website": { "message": "Aller sur wappalyzer.com" },
"categoryPin": { "message": "Always show icon" },
"categoryPin": { "message": " Toujours afficher l'icône" },
"categoryName1": { "message": "CMS" },
"categoryName2": { "message": "Forum" },
"categoryName3": { "message": "Gestionnaire de base de données" },
@ -30,17 +30,17 @@
"categoryName17": { "message": "Script de police" },
"categoryName18": { "message": "Framework web" },
"categoryName19": { "message": "Divers" },
"categoryName20": { "message": "Editeur" },
"categoryName20": { "message": "Éditeur" },
"categoryName21": { "message": "LMS" },
"categoryName22": { "message": "Serveur web" },
"categoryName23": { "message": "Outil de cache" },
"categoryName24": { "message": "Editeur WYSIWYG" },
"categoryName24": { "message": "Éditeur WYSIWYG" },
"categoryName25": { "message": "Graphismes JavaScript" },
"categoryName26": { "message": "Framework pour mobiles" },
"categoryName27": { "message": "Langage de programmation" },
"categoryName28": { "message": "Système d'exploitation" },
"categoryName29": { "message": "Moteur de recherche" },
"categoryName30": { "message": "Web Mail" },
"categoryName30": { "message": "Webmail" },
"categoryName31": { "message": "CDN" },
"categoryName32": { "message": "Logiciel de marketing" },
"categoryName33": { "message": "Extension de serveur web" },
@ -52,17 +52,20 @@
"categoryName39": { "message": "Webcam" },
"categoryName40": { "message": "Imprimante" },
"categoryName41": { "message": "Service de paiement" },
"categoryName42": { "message": "Tag Manager" },
"categoryName42": { "message": "Gestionnaire de balises" },
"categoryName43": { "message": "Paywall" },
"categoryName44": { "message": "Système CI" },
"categoryName45": { "message": "Système SCADA" },
"categoryName46": { "message": "Accès à distance" },
"categoryName47": { "message": "Outil de développement" },
"categoryName48": { "message": "Stockage réseau" },
"categoryName49": { "message": "Lecteur RSS" },
"categoryName49": { "message": "Lecteur de flux RSS" },
"categoryName51": { "message": "Créateur de Landing Page" },
"categoryName50": { "message": "Système de gestion de documents" },
"categoryName51": { "message": "Landing Page Builder" },
"categoryName52": { "message": "Chat en direct" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Comptabilité" },
"categoryName56": { "message": "Crypto-mineur" },
"categoryName57": { "message": "Générateur de site statique" }
}

@ -60,5 +60,8 @@
"categoryName51": { "message": "Σύστημα Κατασκευής Σελίδων Υποδοχής" },
"categoryName52": { "message": "Live Chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -64,5 +64,8 @@
"categoryName51": { "message": "Pembuat Laman Landas" },
"categoryName52": { "message": "Chat Langsung" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -64,6 +64,9 @@
"categoryName51": { "message": "Landing Page Builder" },
"categoryName52": { "message": "Live Chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -65,5 +65,7 @@
"categoryName52": { "message": "Czat na żywo" },
"categoryName53": { "message": "Zarządzanie relacjami z klientami" },
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Księgowość" }
"categoryName55": { "message": "Księgowość" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -27,7 +27,7 @@
"categoryName14": { "message": "Leitor de videos" },
"categoryName15": { "message": "Sistemas de comentários" },
"categoryName16": { "message": "Captcha" },
"categoryName17": { "message": "Script de policia" },
"categoryName17": { "message": "Script de fonte" },
"categoryName18": { "message": "Framework WEB" },
"categoryName19": { "message": "Diversos" },
"categoryName20": { "message": "Editor" },
@ -64,5 +64,8 @@
"categoryName51": { "message": "Landing Page Builder" },
"categoryName52": { "message": "Chat em direto" },
"categoryName53": { "message": "Sistemas de relação com o cliente(CRM)" },
"categoryName54": { "message": "Otimização para motores de pesquisa(SEO)" }
"categoryName54": { "message": "Otimização para motores de pesquisa(SEO)" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -61,5 +61,7 @@
"categoryName52": { "message": "Chat Live" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Contabilitate" }
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -64,5 +64,8 @@
"twitter" : { "message" : "Следите за новостями в Твиттере" },
"website" : { "message" : "Перейти на Wappalyzer.com" },
"categoryPin": { "message": "Always show icon" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Бухгалтерский учёт" },
"categoryName56": { "message": "Криптомайнер" },
"categoryName57": { "message": "Генератор статических сайтов" }
}

@ -64,5 +64,8 @@
"categoryName51": { "message": "Nástroj na tvorbu vstupnej stránky" },
"categoryName52": { "message": "Živý chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -65,5 +65,7 @@
"categoryName52": { "message": "Canlı Sohbet" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Muhasebe" }
"categoryName55": { "message": "Muhasebe" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -64,5 +64,8 @@
"categoryName51": { "message": "Генератор лендінгів" },
"categoryName52": { "message": "Чат реального часу" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -64,5 +64,8 @@
"categoryName51": { "message": "Sahifa generatorlari" },
"categoryName52": { "message": "Live Chat" },
"categoryName53": { "message": "CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -65,5 +65,7 @@
"categoryName52": { "message": "在线聊天" },
"categoryName53": { "message": "客户关系管理CRM" },
"categoryName54": { "message": "搜索引擎优化SEO" },
"categoryName55": { "message": "财务" }
"categoryName55": { "message": "财务" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -64,5 +64,8 @@
"categoryName51": { "message": "著陸頁產生器" },
"categoryName52": { "message": "線上聊天" },
"categoryName53": { "message": "客戶關係管理系統CRM" },
"categoryName54": { "message": "SEO" }
"categoryName54": { "message": "SEO" },
"categoryName55": { "message": "Accounting" },
"categoryName56": { "message": "Cryptominer" },
"categoryName57": { "message": "Static Site Generator" }
}

@ -148,7 +148,7 @@ body {
.empty {
display: flex;
height: 16rem;
height: 14.5rem;
align-items: center;
justify-content: center;
}

@ -3,45 +3,44 @@
if ( typeof browser !== 'undefined' && typeof document.body !== 'undefined' ) {
try {
var html = new XMLSerializer().serializeToString(document);
sendMessage('init', {});
if ( html.length > 500000 ) {
html = html.substring(0, 250000) + html.substring(html.length - 250000, html.length);
}
// HTML
var html = new XMLSerializer().serializeToString(document).split('\n');
html = html
.slice(0, 1000).concat(html.slice(html.length - 1000))
.map(line => line.substring(0, 1000))
.join('\n');
// Scripts
const scripts = Array.prototype.slice
.apply(document.scripts)
.filter(script => script.src)
.map(script => script.src);
.map(script => script.src)
.filter(script => script.indexOf('data:text/javascript;') !== 0);
browser.runtime.sendMessage({
id: 'analyze',
subject: { html, scripts },
source: 'content.js'
});
sendMessage('analyze', { html, scripts });
// JavaScript variables
const script = document.createElement('script');
script.onload = () => {
addEventListener('message', event => {
const onMessage = event => {
if ( event.data.id !== 'js' ) {
return;
}
browser.runtime.sendMessage({
id: 'analyze',
subject: {
js: event.data.js
},
source: 'content.js'
});
}, true);
removeEventListener('message', onMessage);
( chrome || browser ).runtime.sendMessage({
id: 'init_js',
subject: {},
source: 'content.js'
}, response => {
sendMessage('analyze', { js: event.data.js });
script.remove();
};
addEventListener('message', onMessage);
sendMessage('get_js_patterns', {}, response => {
if ( response ) {
postMessage({
id: 'patterns',
@ -51,19 +50,22 @@ if ( typeof browser !== 'undefined' && typeof document.body !== 'undefined' ) {
});
};
script.setAttribute('id', 'wappalyzer');
script.setAttribute('src', browser.extension.getURL('js/inject.js'));
document.body.appendChild(script);
} catch (e) {
log(e);
sendMessage('log', e);
}
}
function log(message) {
browser.runtime.sendMessage({
id: 'log',
message,
function sendMessage(id, subject, callback) {
( chrome || browser ).runtime.sendMessage({
id,
subject,
source: 'content.js'
});
}, callback || ( () => {} ));
}
// https://stackoverflow.com/a/44774834
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/executeScript#Return_value
undefined;

@ -8,9 +8,9 @@
const wappalyzer = new Wappalyzer();
var tabCache = {};
var headersCache = {};
var categoryOrder = [];
var options = {};
var robotsTxtQueue = {};
browser.tabs.onRemoved.addListener(tabId => {
tabCache[tabId] = null;
@ -19,7 +19,7 @@ browser.tabs.onRemoved.addListener(tabId => {
/**
* Get a value from localStorage
*/
function getOption(name, defaultValue) {
function getOption(name, defaultValue = null) {
return new Promise((resolve, reject) => {
const callback = item => {
options[name] = item.hasOwnProperty(name) ? item[name] : defaultValue;
@ -117,75 +117,68 @@ getOption('version')
getOption('dynamicIcon', true);
getOption('pinnedCategory');
// Run content script
var callback = tabs => {
// Run content script on all tabs
browser.tabs.query({ url: [ 'http://*/*', 'https://*/*' ] })
.then(tabs => {
tabs.forEach(tab => {
if ( tab.url.match(/^https?:\/\//) ) {
browser.tabs.executeScript(tab.id, {
file: 'js/content.js'
file: '../js/content.js'
});
}
})
};
browser.tabs.query({})
.then(callback)
})
.catch(error => wappalyzer.log(error, 'driver', 'error'));
// Capture response headers
browser.webRequest.onCompleted.addListener(request => {
var responseHeaders = {};
const headers = {};
if ( request.responseHeaders ) {
var url = wappalyzer.parseUrl(request.url);
const url = wappalyzer.parseUrl(request.url);
request.responseHeaders.forEach(function(header) {
if ( !responseHeaders[header.name.toLowerCase()] ) {
responseHeaders[header.name.toLowerCase()] = []
}
responseHeaders[header.name.toLowerCase()].push(header.value || '' + header.binaryValue);
});
browser.tabs.query({ url: [ url.href ] })
.then(tabs => {
const tab = tabs[0] || null;
if ( headersCache.length > 50 ) {
headersCache = {};
}
if ( tab ) {
request.responseHeaders.forEach(header => {
const name = header.name.toLowerCase();
if ( /text\/html/.test(responseHeaders['content-type'][0]) ) {
if ( headersCache[url.canonical] === undefined ) {
headersCache[url.canonical] = {};
}
headers[name] = headers[name] || [];
Object.keys(responseHeaders).forEach(header => {
headersCache[url.canonical][header] = responseHeaders[header].slice();
headers[name].push(( header.value || header.binaryValue || '' ).toString());
});
if ( headers['content-type'] && /\/x?html/.test(headers['content-type'][0]) ) {
wappalyzer.analyze(url, { headers }, { tab });
}
}
})
.catch(error => wappalyzer.log(error, 'driver', 'error'));
}
}, { urls: [ 'http://*/*', 'https://*/*' ], types: [ 'main_frame' ] }, [ 'responseHeaders' ]);
// Listen for messages
( chrome || browser ).runtime.onMessage.addListener((message, sender, sendResponse) => {
if ( typeof message.id != 'undefined' ) {
if ( message.id !== 'log' ) {
wappalyzer.log('Message received' + ( message.source ? ' from ' + message.source : '' ) + ': ' + message.id, 'driver');
wappalyzer.log('Message' + ( message.source ? ' from ' + message.source : '' ) + ': ' + message.id, 'driver');
}
var url = wappalyzer.parseUrl(sender.tab ? sender.tab.url : '');
var response;
switch ( message.id ) {
case 'log':
wappalyzer.log(message.message, message.source);
wappalyzer.log(message.subject, message.source);
break;
case 'analyze':
var url = wappalyzer.parseUrl(sender.tab.url);
case 'init':
browser.cookies.getAll({ domain: '.' + url.hostname })
.then(cookies => wappalyzer.analyze(url, { cookies }, { tab: sender.tab }));
if ( headersCache[url.canonical] !== undefined ) {
message.subject.headers = headersCache[url.canonical];
}
wappalyzer.analyze(url, message.subject, {
tab: sender.tab
});
break;
case 'analyze':
wappalyzer.analyze(url, message.subject, { tab: sender.tab });
break;
case 'ad_log':
@ -205,7 +198,7 @@ browser.webRequest.onCompleted.addListener(request => {
setOption(message.key, message.value);
break;
case 'init_js':
case 'get_js_patterns':
response = {
patterns: wappalyzer.jsPatterns
};
@ -216,6 +209,8 @@ browser.webRequest.onCompleted.addListener(request => {
sendResponse(response);
}
return true;
});
wappalyzer.driver.document = document;
@ -233,11 +228,16 @@ wappalyzer.driver.log = (message, source, type) => {
wappalyzer.driver.displayApps = (detected, meta, context) => {
var tab = context.tab;
tabCache[tab.id] = tabCache[tab.id] || { detected: [] };
if ( tab === undefined ) {
return;
}
tabCache[tab.id] = tabCache[tab.id] || {
detected: []
};
tabCache[tab.id].detected = detected;
if ( Object.keys(detected).length ) {
var appName, found = false;
// Find the main application to display
@ -278,14 +278,17 @@ wappalyzer.driver.displayApps = (detected, meta, context) => {
} else {
browser.pageAction.show(tab.id);
}
}
};
/**
* Fetch and cache robots.txt for host
*/
wappalyzer.driver.getRobotsTxt = (host, secure = false) => {
return new Promise((resolve, reject) => {
if ( robotsTxtQueue.hasOwnProperty(host) ) {
return robotsTxtQueue[host];
}
robotsTxtQueue[host] = new Promise((resolve, reject) => {
getOption('tracking', true)
.then(tracking => {
if ( !tracking ) {
@ -297,21 +300,16 @@ wappalyzer.driver.getRobotsTxt = (host, secure = false) => {
robotsTxtCache = robotsTxtCache || {};
if ( host in robotsTxtCache ) {
resolve(robotsTxtCache[host]);
} else {
const url = 'http' + ( secure ? 's' : '' ) + '://' + host + '/robots.txt';
return resolve(robotsTxtCache[host]);
}
const timeout = setTimeout(() => resolve([]), 3000);
fetch('http' + ( secure ? 's' : '' ) + '://' + host + '/robots.txt')
fetch('http' + ( secure ? 's' : '' ) + '://' + host + '/robots.txt', { redirect: 'follow' })
.then(response => {
if ( !response.ok ) {
if ( response.status === 404 ) {
return '';
} else {
throw 'GET ' + response.url + ' was not ok';
}
}
clearTimeout(timeout);
return response.text();
return response.ok ? response.text() : '';
})
.then(robotsTxt => {
robotsTxtCache[host] = wappalyzer.parseRobotsTxt(robotsTxt);
@ -320,11 +318,13 @@ wappalyzer.driver.getRobotsTxt = (host, secure = false) => {
resolve(robotsTxtCache[host]);
})
.catch(reject);
}
});
.catch(err => resolve([]));
});
});
})
.finally(() => delete robotsTxtQueue[host]);
return robotsTxtQueue[host];
};
/**

@ -890,7 +890,7 @@ var exports = {};
var _pageTags;
var INIT_MS_BW_SEARCHES = 2000;
var PAGE_TAG_RE = new RegExp('gpt|oascentral');
var POST_MSG_ID = '1511804838-25881-9878-26947-14879';
var POST_MSG_ID = '1519242200-10756-12873-1462-13403';
var AD_SERVER_RE = new RegExp('^(google_ads_iframe|oas_frame|atwAdFrame)');
function getPageTags(doc) {

@ -1,10 +1,14 @@
(function() {
(() => {
try {
addEventListener('message', (event => {
addEventListener('message', onMessage);
function onMessage(event) {
if ( event.data.id !== 'patterns' ) {
return;
}
removeEventListener('message', onMessage);
const patterns = event.data.patterns || {};
const js = {};
@ -20,7 +24,7 @@
for ( let index in patterns[appName][chain] ) {
const value = detectJs(chain);
if ( value ) {
if ( value && patterns[appName][chain].hasOwnProperty(index) ) {
js[appName][chain][index] = value;
}
}
@ -30,13 +34,9 @@
}
postMessage({ id: 'js', js }, '*');
}), false);
} catch(e) {
// Fail quietly
}
function detectJs(chain) {
try {
const properties = chain.split('.');
var value = properties.length ? window : null;
@ -44,7 +44,7 @@
for ( let i = 0; i < properties.length; i ++ ) {
var property = properties[i];
if ( value.hasOwnProperty(property) ) {
if ( value && value.hasOwnProperty(property) ) {
value = value[property];
} else {
value = null;
@ -54,8 +54,8 @@
}
return typeof value === 'string' || typeof value === 'number' ? value : !!value;
}
} catch(e) {
// Fail quietly
}
}
}());
})();

@ -4,7 +4,7 @@
"author": "Elbert Alias",
"homepage_url": "https://www.wappalyzer.com",
"description": "Identify web technologies",
"version": "5.4.5",
"version": "5.4.15",
"default_locale": "en",
"manifest_version": 2,
"icons": {
@ -62,6 +62,7 @@
"open_in_tab": false
},
"permissions": [
"cookies",
"storage",
"tabs",
"webRequest",
@ -71,5 +72,3 @@
],
"content_security_policy": "script-src 'self'; object-src 'self'"
}

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240">
<path fill="#00A5E9" d="M120 28.8l-89.4 32 13.7 118 75.7 42 75.7-42 13.7-118"/>
<path fill="#018BD1" d="M120 28.8V221l75.7-42 13.7-118"/>
<path fill="#FFF" d="M120 50L64 175.3h21l11.2-28h47.4l11.2 28h20.8L120 50zm16.3 80h-32.6L120 90.7l16.3 39.3z"/>
</svg>

After

Width:  |  Height:  |  Size: 326 B

@ -1,74 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
width="335.88126"
height="355.80875"
xml:space="preserve"
sodipodi:docname="AngularJS-Shield.svg"
inkscape:export-filename="/usr/local/google/home/stephenfluin/AngularJS-Shield.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1393"
inkscape:window-height="697"
id="namedview4"
showgrid="false"
inkscape:zoom="0.25757162"
inkscape:cx="171.15375"
inkscape:cy="177.21499"
inkscape:window-x="2290"
inkscape:window-y="312"
inkscape:window-maximized="0"
inkscape:current-layer="g10"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="ink_ext_XXXXXX"
transform="matrix(1.25,0,0,-1.25,-188.84625,636.71875)"><g
id="g12"
transform="scale(0.1,0.1)"><path
d="M 2850,5093.75 1510.77,4622.45 1722.39,2867.82 2851.42,2247.28 3986.27,2876.23 4197.82,4630.79 2850,5093.75 z"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path14"
inkscape:connector-curvature="0" /><path
d="m 4064.25,4529.39 -1217.38,415.13 0,-2548.98 1020.22,564.62 197.16,1569.23 z"
style="fill:#af2b2d;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path16"
inkscape:connector-curvature="0" /><path
d="m 1661.05,4521.89 181.34,-1569.22 1004.47,-557.13 0,2549.03 -1185.81,-422.68 z"
style="fill:#df2e31;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path18"
inkscape:connector-curvature="0" /><path
d="m 3129.05,3676.7 -279.96,584.64 -246.46,-584.64 526.42,0 z m 106.74,-245.83 -742.11,0 -166.02,-415.26 -308.82,-5.71 828.04,1842.06 856.9,-1842.06 -286.23,0 -181.76,420.97 z"
style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path20"
inkscape:connector-curvature="0" /><path
d="m 2846.87,4851.96 2.21,-590.62 279.67,-585.09 -281.25,0 -0.63,-245 388.9,-0.38 181.77,-421.04 295.49,-5.48 -866.16,1847.61 z"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22"
inkscape:connector-curvature="0" /></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="355.809" height="355.809" viewBox="0 0 355.809 355.809"><path d="M177.367 0L9.964 58.913 36.416 278.24l141.129 77.568 141.856-78.619 26.444-219.32L177.367 0z" fill="#b3b3b3"/><path d="M329.149 70.545L176.976 18.654v318.622L304.504 266.7l24.645-196.154z" fill="#af2b2d"/><path d="M28.749 71.482l22.667 196.153 125.559 69.641V18.647L28.749 71.482z" fill="#df2e31"/><path d="M212.249 177.131l-34.995-73.08-30.808 73.08h65.803zm13.342 30.729h-92.764l-20.752 51.907-38.603.714L176.977 30.224 284.09 260.48h-35.779l-22.72-52.621z" fill="#f2f2f2"/><path d="M176.976 30.224l.276 73.827 34.96 73.136h-35.157l-.079 30.625 48.613.048 22.721 52.63 36.936.685-108.27-230.951z" fill="#b3b3b3"/></svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 733 B

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 1423.3867 867.05603"
height="867.05603"
width="1423.3867"
xml:space="preserve"
id="svg2"
version="1.1"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
id="clipPath18"
clipPathUnits="userSpaceOnUse"><path
id="path16"
d="M 0,650.292 H 1067.54 V 0 H 0 Z" /></clipPath></defs><g
transform="matrix(1.3333333,0,0,-1.3333333,0,867.056)"
id="g10"><g
id="g12"><g
clip-path="url(#clipPath18)"
id="g14"><g
transform="translate(321.5199,376.8768)"
id="g20"><path
id="path22"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -19.417,43.75 -56.917,76.25 -111.875,95.208 3.293,105.443 119.212,164.151 230.523,104.237 5.182,8.536 10.12,17.324 15.673,25.704 24.62,37.152 70.92,55.856 111.8,45.381 46.247,-11.851 84.023,-49.071 84.584,-94.011 l 0.013,-425.419 c -22.768,0 -53.205,-0.038 -78.47,0.007 -135.065,0.24 -270.144,-0.609 -405.191,1.127 -97.922,1.259 -170.073,77.053 -168.553,173.063 1.09,68.862 45.743,129.853 112.195,153.245 66.395,23.372 145.569,-0.596 189.707,-53.182" /></g><g
transform="translate(679.7488,549.7274)"
id="g24"><path
id="path26"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 107.306,0 214.612,-0.1 321.918,0.111 15.531,0.031 29.755,-2.911 42.227,-12.489 21.864,-16.791 28.329,-45.437 20.376,-67.146 -9.026,-24.64 -29.931,-40.704 -56.956,-40.852 -56.475,-0.309 -112.953,-0.107 -169.43,-0.11 C 105.424,-120.489 52.712,-120.487 0,-120.487 Z" /></g><g
transform="translate(679.7488,399.1187)"
id="g28"><path
id="path30"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 107.306,0 214.612,-0.1 321.918,0.111 15.531,0.031 29.755,-2.911 42.227,-12.489 21.864,-16.791 28.329,-45.437 20.376,-67.146 -9.026,-24.64 -29.931,-40.704 -56.956,-40.852 -56.475,-0.31 -112.953,-0.107 -169.43,-0.11 C 105.424,-120.489 52.712,-120.487 0,-120.487 Z" /></g><g
transform="translate(679.7488,248.5099)"
id="g32"><path
id="path34"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 107.306,0 214.612,-0.1 321.918,0.111 15.531,0.031 29.755,-2.911 42.227,-12.489 21.864,-16.791 28.329,-45.436 20.376,-67.146 -9.026,-24.64 -29.931,-40.704 -56.956,-40.852 -56.475,-0.309 -112.953,-0.107 -169.43,-0.11 C 105.424,-120.489 52.712,-120.487 0,-120.487 Z" /></g><g
transform="translate(379.3446,14.7246)"
id="g36"><path
id="path38"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 1.562,-0.828 4.112,-1.239 7.653,-1.239 h 18.43 c 7.496,0 11.245,2.685 11.245,8.059 v 13.175 c 0,5.166 -3.177,8.061 -9.527,8.681 H 6.091 C -0.366,27.951 -3.592,25.057 -3.592,19.995 V 6.82 C -3.592,3.512 -2.396,1.24 0,0 m -17.077,7.131 v 9.765 c 0,7.335 1.606,13.225 4.82,17.669 3.625,5.062 8.963,7.595 16.011,7.595 h 33.574 v 5.503 c 0,1.468 -0.518,2.751 -1.555,3.851 -1.036,1.099 -2.228,1.651 -3.574,1.651 H -17.077 V 66.65 h 48.205 c 10.642,0 17.101,-5.013 19.375,-15.035 0.206,-1.654 0.31,-2.893 0.31,-3.719 V 6.045 c 0,-3.72 -0.983,-7.183 -2.945,-10.385 -4.34,-6.924 -9.973,-10.385 -16.895,-10.385 H 3.848 c -4.03,0 -7.958,1.395 -11.78,4.185 -3.824,2.79 -6.459,6.097 -7.905,9.921 -0.828,2.271 -1.24,4.855 -1.24,7.75" /></g><g
transform="translate(440.096,20.6152)"
id="g40"><path
id="path42"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 40.3 c 0,6.716 2.51,11.882 7.537,15.5 4.655,3.305 11.028,4.96 19.117,4.96 H 63.601 V 47.274 H 26.51 c -7.014,0 -10.518,-2.901 -10.518,-8.704 V 3.129 c 0,-2.8 1.014,-5.21 3.045,-7.23 2.027,-2.019 4.704,-3.029 8.027,-3.029 H 63.785 V -20.615 H 27.021 c -5.393,0 -10.05,0.929 -13.97,2.79 C 4.348,-13.693 0,-7.75 0,0" /></g><g
transform="translate(527.9857,42.0049)"
id="g44"><path
id="path46"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-2.274 1.085,-4.548 3.255,-6.82 l 33.79,-35.185 H 55.743 L 15.243,0.165 54.067,39.37 H 34.875 L 3.255,7.44 C 1.085,5.271 0,2.79 0,0 m -14.26,66.495 h 13.64 v -108.5 h -13.64 z" /></g><g
transform="translate(593.7211)"
id="g48"><path
id="path50"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 V 108.5 H 13.485 V 81.375 H 27.59 V 67.89 H 13.485 V 0 Z" /></g><g
transform="translate(654.8765,13.4854)"
id="g52"><path
id="path54"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h 22.022 c 6.351,0 9.526,3.47 9.526,10.414 V 44.61 c 0,6.53 -3.175,9.794 -9.526,9.794 L 0,54.404 c -6.559,0 -9.837,-3.264 -9.837,-9.794 V 10.881 C -9.837,3.625 -6.559,0 0,0 m -23.322,6.51 v 42.314 c 0,11.16 6.045,17.462 18.135,18.91 0.412,0 1.032,0.051 1.86,0.156 h 26.66 c 0.722,0 1.807,-0.105 3.255,-0.31 12.296,-1.759 18.444,-8.01 18.444,-18.756 V 6.51 c 0,-7.441 -3.719,-13.28 -11.159,-17.515 -2.894,-1.654 -6.408,-2.48 -10.54,-2.48 h -25.42 c -10.335,0 -17.103,4.906 -20.306,14.724 -1.137,3.307 -1.448,5.063 -0.929,5.271" /></g><g
transform="translate(709.9087)"
id="g56"><path
id="path58"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 59.83 c 0,1.342 0.102,2.892 0.31,4.65 0.62,5.372 2.143,9.273 4.573,11.703 2.427,2.426 6.328,4.053 11.702,4.882 1.342,0.206 2.531,0.31 3.565,0.31 h 7.595 V 67.89 h -6.738 c -5.016,0 -7.522,-2.746 -7.522,-8.235 L 13.485,0 Z" /></g><g
transform="translate(747.6742,0.4951)"
id="g60"><path
id="path62"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 13.485 h 47.101 c 4.456,0.724 6.684,3.619 6.684,8.68 v 4.34 H 19.74 C 14.146,26.505 9.457,28.416 5.675,32.24 1.892,36.062 0,40.765 0,46.345 V 80.88 H 13.485 V 50.064 c 0,-6.717 3.228,-10.074 9.685,-10.074 h 21.242 c 6.249,0 9.373,2.892 9.373,8.68 V 80.88 H 67.27 V 22.939 C 67.27,15.914 65.512,10.385 62,6.354 58.176,2.119 52.802,0 45.88,0 Z" /></g><g
transform="translate(307.8782,13.4588)"
id="g64"><path
id="path66"
style="fill:#0054a6;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h 23.853 c 0.728,0 1.196,0.051 1.404,0.155 3.22,0.723 5.195,3.256 5.925,7.602 0,0.102 0.05,0.258 0.154,0.467 V 45.3 c 0,6.001 -3.014,9 -9.042,9 H -1.559 c -4.885,0 -7.327,-2.896 -7.327,-8.687 V 9.775 c 0,-2.69 0.832,-4.992 2.495,-6.905 C -4.728,0.955 -2.599,0 0,0 M -22.345,9.437 V 94.831 H -8.886 V 67.759 H 22.61 c 12.514,0 19.754,-5.569 21.719,-16.707 0.309,-1.755 0.466,-2.993 0.466,-3.714 V 7.735 c 0,-9.181 -4.075,-15.574 -12.221,-19.183 -2.992,-1.341 -5.673,-2.011 -8.045,-2.011 H -2.079 c -5.777,0 -10.623,2.422 -14.542,7.271 -3.817,4.537 -5.724,9.746 -5.724,15.625" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 706 B

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 678 B

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 114 112" style="enable-background:new 0 0 114 112;" xml:space="preserve">
<style type="text/css">
.st0{fill:#00C4B3;}
.st1{fill:#22D3C5;}
.st2{fill:#0075C9;}
.st3{fill:#00A8E1;}
</style>
<path class="st0" d="M30.1,30.6L23,23.5v51.2l0.1,2.4c0,1.1,0.2,2.4,0.6,3.7l56.2,19.8l14-6.2l0,0L30.1,30.6z"/>
<path class="st1" d="M23.7,80.8L23.7,80.8L23.7,80.8L23.7,80.8z M93.9,94.4l-14,6.2L23.8,80.8c1.1,4.1,3.4,8.7,6,11.3l18.3,18.2
l40.8,0.1L93.9,94.4L93.9,94.4z"/>
<path class="st2" d="M23.2,23.5l-21.8,33c-1.8,1.9-0.9,5.9,2,8.9L16,78.1l7.9,2.8c-0.3-1.3-0.6-2.6-0.6-3.7l-0.1-2.4L23.2,23.5
L23.2,23.5z"/>
<path class="st2" d="M80.3,24.1c-1.3-0.3-2.6-0.5-3.7-0.6l-2.5-0.1H23l70.9,70.9l0,0l6.2-14L80.3,24.1z"/>
<path class="st3" d="M80.2,24.1C80.3,24.1,80.3,24.1,80.2,24.1L80.2,24.1C80.3,24.1,80.3,24.1,80.2,24.1z M91.6,30.1
c-2.6-2.6-7.1-5-11.3-6l19.8,56.2l-6.2,14l0,0l15.2-4.9V47.7L91.6,30.1z"/>
<path class="st0" d="M77.5,16.3L64.8,3.7c-2.9-2.9-6.9-3.8-8.9-2l-33,21.8H74l2.5,0.1c1.1,0,2.4,0.2,3.7,0.6L77.5,16.3z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 755 826" enable-background="new 0 0 755 826" xml:space="preserve">
<path fill="#00598E" d="M539.2,167.8c-39.8-24.8-77.2-34.5-114.8-59.2c-23.2-15.8-55.5-53.2-82.5-85.5c-5.2,51.8-21,72.8-39,87.8
c-38.2,30-62.2,39-95.2,57C179.9,182.1,29.2,272.1,29.2,465.6s162.8,336,343.5,336s337.5-131.2,337.5-330S563.2,182.8,539.2,167.8z"
/>
<path fill="#FFFFFF" d="M478.2,633.5c12,0,24.8,0.8,33.8,6.8s14.2,19.5,17.2,27s0,12-6,15c-5.2,3-6,1.5-11.2-8.2s-9.8-19.5-36-19.5
s-34.5,9-47.2,19.5s-17.2,14.2-21.8,8.2s-3-12,5.2-19.5s21.8-19.5,34.5-24.8S466.2,633.5,478.2,633.5L478.2,633.5z"/>
<path fill="#FFFFFF" d="M353.8,719c15,12,37.5,21.8,85.5,21.8S521,727.2,536,716c6.8-5.2,9.8-0.8,10.5,2.2s2.2,7.5-3,12.8
c-3.8,3.8-38.2,27.8-78.8,31.5s-95.2,6-128.2-24c-5.2-5.2-3.8-12.8,0-15.8s6.8-5.2,11.2-5.2S351.5,717.5,353.8,719L353.8,719z"/>
<path fill="#0073BA" d="M170,662c57-0.8,67.5-10.5,117.8-33c271.5-121.5,321.8-232.5,331.5-258s24-66.8,9-112.5
c-2.9-8.8-5-15.9-6.5-21.6c-36.1-40.3-71.9-62.4-82.7-69.1c-39-24.8-77.3-34.5-114.8-59.2c-23.2-15-55.5-53.2-82.5-85.5
c-5.2,51.8-20.2,73.5-39,87.8c-38.2,30-62.2,39-95.2,57C179.8,182.8,29,272,29,465.5c0,61.8,16.6,118.4,45.1,166.8l7.4-0.3
C97.2,646.2,122,662.8,170,662z"/>
<path fill="#004975" d="M539,167.8c-39-24.8-77.2-34.5-114.8-59.2c-23.2-15-55.5-53.2-82.5-85.5c-5.2,51.8-20.2,73.5-39,87.8
c-38.2,30-62.2,39-95.2,57C179.8,182.8,29,272,29,465.5c0,61.8,16.6,118.4,45.1,166.8c60.7,103.2,175.4,169.2,298.4,169.2
c180.8,0,337.5-131.2,337.5-330c0-109.1-44.3-185.5-88.3-234.6C585.6,196.5,549.8,174.5,539,167.8z M630.2,255.5
c49.2,61.6,74.2,134.2,74.2,216c0,47.4-9,92.2-26.8,133.2c-16.9,38.8-41.2,73.2-72.3,102.3c-61.5,57.4-144.1,89-232.7,89
c-43.8,0-86.8-8.4-127.8-24.9c-40.3-16.2-76.5-39.4-107.8-69C70.9,639.7,34.6,555.7,34.6,465.5c0-80.3,26.1-151.7,77.5-212.2
c39.3-46.2,81.7-71.8,98-80.6c8-4.3,15.4-8.2,22.6-11.9c22.6-11.6,44-22.6,73.4-45.6c15.7-11.9,32.4-30.8,39.5-78.7
c24.8,29.5,53.5,62.6,75.5,76.8c19.5,12.9,39.5,21.9,58.8,30.6c18.3,8.2,37.2,16.8,55.9,28.7c0,0,0.7,0.4,0.7,0.4
C591.4,207.1,620.6,243.6,630.2,255.5z"/>
<path fill="#93C5E4" d="M345.5,38c10.5,30.8,9,46.5,9,53.2s-3.8,24.8-15.8,33.8c-5.2,3.8-6.8,6.8-6.8,7.5c0,3,6.8,5.2,6.8,12
c0,8.2-3.8,24.8-43.5,64.5s-96.8,75-141,96.8S89,326,83,315.5s2.2-33.8,30-64.5s115.5-75,115.5-75L338,99.5l6-29.2"/>
<path fill="#FFFFFF" d="M345.5,37.2c-6.8,49.5-21.8,64.5-42,80.2c-33.8,25.5-66.8,41.2-74.2,45c-19.5,9.8-90,48.8-126.8,105
c-11.2,17.2,0,24,2.2,25.5s27.8,4.5,82.5-28.5S266,212,296.8,179.8c16.5-17.2,18.8-27,18.8-31.5c0-5.2-3.8-7.5-9.8-9
c-3-0.8-3.8-2.2,0-4.5S325.2,125,329,122s21.8-15,22.5-34.5S350.8,54.5,345.5,37.2L345.5,37.2z"/>
<path fill="#FFFFFF" d="M176.8,582.5c0.8-58.5,55.5-113.2,124.5-114c87.8-0.8,148.5,87,192.8,86.2c37.5-0.8,109.5-74.2,144.8-74.2
c37.5,0,48,39,48,62.2s-7.5,65.2-25.5,91.5s-29.2,36-50.2,34.5c-27-2.2-81-86.2-115.5-87.8c-43.5-1.5-138,90.8-212.2,90.8
c-45,0-58.5-6.8-73.5-16.5C187.2,639.5,176,615.5,176.8,582.5L176.8,582.5z"/>
<path fill="none" d="M628.2,258.5c15,45.8,0.8,87-9,112.5s-60,136.5-331.5,258c-50.2,22.5-60.8,32.2-117.8,33
c-48,0.8-72.8-15.8-88.5-30l-7.4,0.3c60.7,103.2,175.4,169.2,298.4,169.2c180.8,0,337.5-131.2,337.5-330
c0-109.1-44.3-185.5-88.3-234.6C623.2,242.6,625.4,249.7,628.2,258.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><path fill="#3DA8CC" d="M28.012 27.998H.004v8h28.008v-8zm3.988-20H.004v8h32.01l-.014-8zm20.02 0H40.016L51.309 30.31 40.016 47.998H.004L0 56.002h48.879L64 30.311 52.02 7.998z"/></svg>

Before

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

@ -1 +0,0 @@
<svg viewBox="0 0 70 70" xmlns="http://www.w3.org/2000/svg"><title>penguin 2</title><path d="M52.65 61.364h2.767a2.81 2.81 0 0 1 2.803 2.803 2.81 2.81 0 0 1-2.803 2.803h-.024c0 .04.024.073.024.113 0 1.613-1.3 2.917-2.917 2.917-7.578 0-13.04-.543-16.234-1.61-.476-.157-.89-.33-1.266-.51-.373.18-.79.353-1.266.51C30.534 69.457 25.072 70 17.5 70a2.916 2.916 0 0 1-2.917-2.917c0-.04.02-.073.024-.113h-.024a2.806 2.806 0 0 1-2.803-2.803 2.806 2.806 0 0 1 2.803-2.803h2.768c-3.97-3.42-6.582-8.25-8-14.166-.88.545-5.54 3.138-9.34.393-.214-2.78 5.526-7.04 8.34-14.52 0 .01.003.017.003.026.74-2.856 2.518-7.62 2.69-9.025C11.04 7.488 24.206 0 35 0c10.795 0 23.96 7.487 23.96 24.068.175 1.406 1.95 6.172 2.692 9.03.006-.008.006-.017.006-.03 2.815 7.48 8.552 11.735 8.336 14.523-3.806 2.75-8.46.15-9.342-.39-1.41 5.918-4.028 10.748-8.003 14.167z" fill="#303048"/><path d="M51.19 29.517S56.365 10.1 41.75 10.1c-3.116 0-5.528 3.46-6.744 3.46-1.216 0-3.11-3.46-6.746-3.46-14.62 0-9.445 19.417-9.445 19.417s-2.698 3.433-2.698 10.59c0 14.893 10.38 18.926 18.89 18.926 8.507 0 18.887-4.033 18.887-18.926 0-7.157-2.704-10.59-2.704-10.59z" fill="#FFF"/><path d="M32.083 23.333a2.918 2.918 0 0 0-5.833 0 2.918 2.918 0 0 0 5.833 0zm11.667 0c0 1.61-1.3 2.917-2.917 2.917a2.916 2.916 0 0 1 0-5.833 2.914 2.914 0 0 1 2.917 2.916z" fill="#303048"/><path d="M29.588 28.853c1.692 4.42 5.717 5.452 5.717 5.452s4.025-1.032 5.718-5.452c-3.282-.95-5.718-2.724-5.718-2.724s-2.433 1.77-5.717 2.72z" fill="#F15A40"/></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="94" width="94" version="1.1" y="0px" x="0px" viewBox="0 0 93.999999 94"><defs><clipPath id="clipPath5011" clipPathUnits="userSpaceOnUse"><path d="m39.867-0.011719a47.764 47.764 0 0 0 -47.764 47.764 47.764 47.764 0 0 0 47.764 47.764 47.764 47.764 0 0 0 47.764 -47.764 47.764 47.764 0 0 0 -47.764 -47.764zm0 34.812a12.952 12.952 0 0 1 12.951 12.952 12.952 12.952 0 0 1 -12.951 12.953 12.952 12.952 0 0 1 -12.951 -12.953 12.952 12.952 0 0 1 12.951 -12.951z" fill="#000000"/></clipPath></defs><g transform="translate(7.203 -0.823)" clip-path="url(#clipPath5011)"><path fill="#76c349" d="m72.623 54.124a33.37 33.37 0 0 1 -18.887 23.98l-13.869-30.351z"/><path d="m57.718 81.944a38.57 38.57 0 0 1 -45.9 -7.716 38.57 38.57 0 0 1 -5.055 -46.269 38.57 38.57 0 0 1 43.15 -17.445l-10.046 37.239z" fill="#0078d3"/><path d="m39.867 5.8728a41.88 41.88 0 0 1 33.442 16.669 41.88 41.88 0 0 1 6.8202 36.738l-40.262-11.527z" fill="#d6e142"/><path fill="#12bdef" d="m39.867 1.0923a46.66 46.66 0 0 1 44.897 33.952l-44.897 12.709z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 513 B

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="70px" height="70px" viewBox="0 0 70 70" style="enable-background:new 0 0 70 70;" xml:space="preserve">
<g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="1.7738" y1="31.2729" x2="40.1662" y2="31.2729">
<stop offset="0" style="stop-color:#905CFB"/>
<stop offset="6.772543e-002" style="stop-color:#776CF9"/>
<stop offset="0.1729" style="stop-color:#5681F7"/>
<stop offset="0.2865" style="stop-color:#3B92F5"/>
<stop offset="0.4097" style="stop-color:#269FF4"/>
<stop offset="0.5474" style="stop-color:#17A9F3"/>
<stop offset="0.7111" style="stop-color:#0FAEF2"/>
<stop offset="0.9677" style="stop-color:#0CB0F2"/>
</linearGradient>
<path style="fill:url(#SVGID_1_);" d="M39.7,47.9l-6.1-34c-0.4-2.4-1.2-4.8-2.7-7.1c-2-3.2-5.2-5.4-8.8-6.3
C7.9-2.9-2.6,11.3,3.6,23.9c0,0,0,0,0,0l14.8,31.7c0.4,1,1,2,1.7,2.9c1.2,1.6,2.8,2.8,4.7,3.4C34.4,64.9,42.1,56.4,39.7,47.9z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="5.3113" y1="9.6691" x2="69.2278" y2="43.8664">
<stop offset="0" style="stop-color:#905CFB"/>
<stop offset="6.772543e-002" style="stop-color:#776CF9"/>
<stop offset="0.1729" style="stop-color:#5681F7"/>
<stop offset="0.2865" style="stop-color:#3B92F5"/>
<stop offset="0.4097" style="stop-color:#269FF4"/>
<stop offset="0.5474" style="stop-color:#17A9F3"/>
<stop offset="0.7111" style="stop-color:#0FAEF2"/>
<stop offset="0.9677" style="stop-color:#0CB0F2"/>
</linearGradient>
<path style="fill:url(#SVGID_2_);" d="M67.4,26.5c-1.4-2.2-3.4-3.9-5.7-4.9L25.5,1.7l0,0c-1-0.5-2.1-1-3.3-1.3
C6.7-3.2-4.4,13.8,5.5,27c1.5,2,3.6,3.6,6,4.5L48,47.9c0.8,0.5,1.6,0.8,2.5,1.1C64.5,53.4,75.1,38.6,67.4,26.5z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-19.2836" y1="70.8198" x2="55.9833" y2="33.1863">
<stop offset="0" style="stop-color:#3BEA62"/>
<stop offset="0.117" style="stop-color:#31DE80"/>
<stop offset="0.3025" style="stop-color:#24CEA8"/>
<stop offset="0.4844" style="stop-color:#1AC1C9"/>
<stop offset="0.6592" style="stop-color:#12B7DF"/>
<stop offset="0.8238" style="stop-color:#0EB2ED"/>
<stop offset="0.9677" style="stop-color:#0CB0F2"/>
</linearGradient>
<path style="fill:url(#SVGID_3_);" d="M67.4,26.5c-1.8-2.8-4.6-4.8-7.9-5.6c-3.5-0.8-6.8-0.5-9.6,0.7L11.4,36.1
c0,0-0.2,0.1-0.6,0.4C0.9,40.4-4,53.3,4,64c1.8,2.4,4.3,4.2,7.1,5c5.3,1.6,10.1,1,14-1.1c0,0,0.1,0,0.1,0l37.6-20.1
c0,0,0,0,0.1-0.1C69.5,43.9,72.6,34.6,67.4,26.5z"/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="38.9439" y1="5.8503" x2="5.4232" y2="77.5093">
<stop offset="0" style="stop-color:#3BEA62"/>
<stop offset="9.397750e-002" style="stop-color:#2FDB87"/>
<stop offset="0.196" style="stop-color:#24CEA8"/>
<stop offset="0.3063" style="stop-color:#1BC3C3"/>
<stop offset="0.4259" style="stop-color:#14BAD8"/>
<stop offset="0.5596" style="stop-color:#10B5E7"/>
<stop offset="0.7185" style="stop-color:#0DB1EF"/>
<stop offset="0.9677" style="stop-color:#0CB0F2"/>
</linearGradient>
<path style="fill:url(#SVGID_4_);" d="M50.3,12.8c1.2-2.7,1.1-6-0.9-9c-1.1-1.8-2.9-3-4.9-3.5c-4.5-1.1-8.3,1-10.1,4.2L3.5,42
c0,0,0,0,0,0.1C-0.9,47.9-1.6,56.5,4,64c1.8,2.4,4.3,4.2,7.1,5c10.5,3.3,19.3-2.5,22.1-10.8L50.3,12.8z"/>
</g>
<g>
<rect x="13.4" y="13.4" style="fill:#000000;" width="43.2" height="43.2"/>
<rect x="17.5" y="48.5" style="fill:#FFFFFF;" width="16.2" height="2.7"/>
<polygon style="fill:#FFFFFF;" points="22.9,22.7 17.5,22.7 17.5,19.1 32.3,19.1 32.3,22.7 26.8,22.7 26.8,37 22.9,37 "/>
<path style="fill:#FFFFFF;" d="M32.5,28.1L32.5,28.1c0-5.1,3.8-9.3,9.3-9.3c3.4,0,5.4,1.1,7.1,2.8l-2.5,2.9c-1.4-1.3-2.8-2-4.6-2
c-3,0-5.2,2.5-5.2,5.6V28c0,3.1,2.1,5.6,5.2,5.6c2,0,3.3-0.8,4.7-2.1l2.5,2.5c-1.8,2-3.9,3.2-7.3,3.2
C36.4,37.3,32.5,33.2,32.5,28.1"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="235.45" height="225.24" viewBox="0 0 235.45 225.24001"><defs><clipPath><path d="M0 250h250V0H0z"/></clipPath><clipPath id="a"><path d="M0 250h250V0H0z"/></clipPath></defs><g><g><g clip-path="url(#a)" transform="matrix(1.25 0 0 -1.25 -38.922 268.364)"><g><path fill="#00b4f0" d="M135.2 150.52c.05.5.1.94.1 1.47 0 5.22 1.24 10.6 13.98 10.6h42.6c19.23 0 27.62 9.08 27.62 27.25v15.46c0 5.2-4.1 9.4-9.3 9.4-5.17 0-9.32-4.2-9.32-9.4l-.03-5.36c0-5.85-3.74-9.96-12.5-9.96h-41.8c-19 0-20.46-14.1-21.08-21.58h-.42c-.63 7.47-2.1 21.58-21.1 21.58H62.18c-8.78 0-12.8 4.26-12.8 10.1v5.23c0 5.2-3.9 9.4-9.1 9.4-5.17 0-9.14-4.2-9.14-9.4v-15.45c0-18.17 8.27-27.26 27.5-27.26h42.6c12.74 0 14-5.38 14-10.6 0-.54.03-1.02.1-1.5.3-5.24 4.62-9.37 9.92-9.37s9.63 4.16 9.93 9.4"/></g><g><path fill="#00b4f0" d="M124.78 34.5c4.5 0 8.36 2.68 10.1 6.52.1.15.18.3.27.46l38.8 71.76c1.1 1.9 1.65 4.02 1.65 6.17 0 6.87-5.58 12.46-12.44 12.46-5.52 0-9.26-2.7-11.8-8.5L124.8 73.83l-26.55 49.5c-2.56 5.84-6.3 8.54-11.83 8.54-6.86 0-12.44-5.6-12.44-12.45 0-2.14.57-4.27 1.64-6.15l38.8-71.76c.07-.12.13-.22.18-.32 1.72-3.93 5.63-6.68 10.2-6.68"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 833 B

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 600 600" xml:space="preserve">
<g>
<path fill="#F26722" d="M595,299.9C595,137,462.9,5,300,5C137.1,5,5,137.1,5,300c0,162.9,132.1,295,295,295h0.1
c162.9,0,294.9-132.1,295-294.9V299.9z M112.8,419.8H80.3v-211h32.6V419.8z M469.5,239h-54.7v180.8h-32.6V239h-53.2l-0.3,180.8
h-32.3L172,271.1v148.7h-32.9V209.1H172l124.6,153.7V208.8h32.6v0h140.4V239z M487.2,419.8v-211h32.6v211H487.2z"/>
<rect x="80.3" y="208.8" fill="#FFFFFF" width="32.6" height="211"/>
<polygon fill="#FFFFFF" points="329.1,239 382.3,239 382.3,419.8 414.9,419.8 414.9,239 469.5,239 469.5,208.8 329.1,208.8 "/>
<rect x="487.2" y="208.8" fill="#FFFFFF" width="32.6" height="211"/>
<polygon fill="#FFFFFF" points="329.1,208.8 296.6,208.8 296.6,362.8 172,209.1 139.1,209.1 139.1,419.8 172,419.8 172,271.1
296.6,419.8 328.8,419.8 329.1,239 329.1,208.8 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200px" height="200px" viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.1 (44463) - http://www.bohemiancoding.com/sketch -->
<title>docusaurus</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="docusaurus">
<rect id="Rectangle" fill="#FFFFFF" x="99" y="52" width="84" height="34"></rect>
<g id="Group-2" transform="translate(3.000000, 17.000000)">
<path d="M20,146 C12.602,146 6.157,141.973 2.697,136 C0.992,138.944 0,142.353 0,146 C0,157.046 8.954,166 20,166 L40,166 L40,146 L20,146 Z" id="Fill-1" fill="#3ECC5F"></path>
<path d="M109.9805,40.376 L180.0005,36 L180.0005,26 C180.0005,14.954 171.0455,6 160.0005,6 L70.0005,6 L67.5005,1.67 C66.3885,-0.255 63.6115,-0.255 62.5005,1.67 L60.0005,6 L57.5005,1.67 C56.3885,-0.255 53.6115,-0.255 52.5005,1.67 L50.0005,6 L47.5005,1.67 C46.3885,-0.255 43.6115,-0.255 42.5005,1.67 L40.0005,6 C39.9785,6 39.9575,6.003 39.9355,6.003 L35.7935,1.862 C34.2225,0.291 31.5405,1.009 30.9645,3.156 L29.5965,8.26 L24.4035,6.868 C22.2565,6.293 20.2925,8.257 20.8685,10.404 L22.2595,15.597 L17.1565,16.964 C15.0095,17.54 14.2905,20.223 15.8615,21.794 L20.0025,25.936 C20.0025,25.957 20.0005,25.978 20.0005,26 L15.6695,28.5 C13.7455,29.611 13.7455,32.389 15.6695,33.5 L20.0005,36 L15.6695,38.5 C13.7455,39.611 13.7455,42.389 15.6695,43.5 L20.0005,46 L15.6695,48.5 C13.7455,49.611 13.7455,52.389 15.6695,53.5 L20.0005,56 L15.6695,58.5 C13.7455,59.611 13.7455,62.389 15.6695,63.5 L20.0005,66 L15.6695,68.5 C13.7455,69.611 13.7455,72.389 15.6695,73.5 L20.0005,76 L15.6695,78.5 C13.7455,79.611 13.7455,82.389 15.6695,83.5 L20.0005,86 L15.6695,88.5 C13.7455,89.611 13.7455,92.389 15.6695,93.5 L20.0005,96 L15.6695,98.5 C13.7455,99.611 13.7455,102.389 15.6695,103.5 L20.0005,106 L15.6695,108.5 C13.7455,109.611 13.7455,112.389 15.6695,113.5 L20.0005,116 L15.6695,118.5 C13.7455,119.611 13.7455,122.389 15.6695,123.5 L20.0005,126 L15.6695,128.5 C13.7455,129.611 13.7455,132.389 15.6695,133.5 L20.0005,136 L15.6695,138.5 C13.7455,139.611 13.7455,142.389 15.6695,143.5 L20.0005,146 C20.0005,157.046 28.9545,166 40.0005,166 L160.0005,166 C171.0455,166 180.0005,157.046 180.0005,146 L180.0005,66 L109.9805,61.624 C104.3705,61.273 100.0005,56.621 100.0005,51 C100.0005,45.379 104.3705,40.727 109.9805,40.376" id="Fill-3" fill="#3ECC5F"></path>
<polygon id="Fill-5" fill="#3ECC5F" points="140 166 170 166 170 126 140 126"></polygon>
<path d="M190,141 C189.781,141 189.572,141.037 189.361,141.064 C189.323,140.914 189.287,140.763 189.245,140.613 C191.051,139.859 192.32,138.079 192.32,136 C192.32,133.238 190.082,131 187.32,131 C186.182,131 185.145,131.396 184.304,132.036 C184.193,131.923 184.082,131.811 183.969,131.7 C184.596,130.864 184.98,129.838 184.98,128.713 C184.98,125.951 182.742,123.713 179.98,123.713 C177.915,123.713 176.143,124.966 175.381,126.754 C175.233,126.712 175.084,126.677 174.936,126.639 C174.963,126.428 175,126.219 175,126 C175,123.238 172.762,121 170,121 C167.238,121 165,123.238 165,126 C165,126.219 165.037,126.428 165.064,126.639 C164.916,126.677 164.767,126.712 164.619,126.754 C163.857,124.966 162.085,123.713 160.02,123.713 C157.258,123.713 155.02,125.951 155.02,128.713 C155.02,129.838 155.404,130.864 156.031,131.7 C152.314,135.332 150,140.393 150,146 C150,157.046 158.954,166 170,166 C179.339,166 187.16,159.59 189.361,150.936 C189.572,150.963 189.781,151 190,151 C192.762,151 195,148.762 195,146 C195,143.238 192.762,141 190,141" id="Fill-7" fill="#44D860"></path>
<polygon id="Fill-8" fill="#3ECC5F" points="150 106 180 106 180 86 150 86"></polygon>
<path d="M190,98.5 C191.381,98.5 192.5,97.381 192.5,96 C192.5,94.619 191.381,93.5 190,93.5 C189.891,93.5 189.786,93.519 189.681,93.532 C189.661,93.457 189.644,93.382 189.623,93.307 C190.525,92.93 191.16,92.039 191.16,91 C191.16,89.619 190.041,88.5 188.66,88.5 C188.091,88.5 187.572,88.697 187.152,89.018 C187.097,88.961 187.041,88.905 186.984,88.85 C187.298,88.433 187.49,87.919 187.49,87.356 C187.49,85.976 186.371,84.856 184.99,84.856 C183.957,84.856 183.071,85.483 182.69,86.377 C181.833,86.138 180.934,86 180,86 C174.478,86 170,90.478 170,96 C170,101.522 174.478,106 180,106 C180.934,106 181.833,105.862 182.69,105.623 C183.071,106.517 183.957,107.144 184.99,107.144 C186.371,107.144 187.49,106.024 187.49,104.644 C187.49,104.081 187.298,103.567 186.984,103.15 C187.041,103.095 187.097,103.039 187.152,102.982 C187.572,103.303 188.091,103.5 188.66,103.5 C190.041,103.5 191.16,102.381 191.16,101 C191.16,99.961 190.525,99.07 189.623,98.693 C189.644,98.619 189.661,98.543 189.681,98.468 C189.786,98.481 189.891,98.5 190,98.5" id="Fill-9" fill="#44D860"></path>
<path d="M60,38.5 C58.619,38.5 57.5,37.381 57.5,36 C57.5,31.864 54.136,28.5 50,28.5 C45.864,28.5 42.5,31.864 42.5,36 C42.5,37.381 41.381,38.5 40,38.5 C38.619,38.5 37.5,37.381 37.5,36 C37.5,29.107 43.107,23.5 50,23.5 C56.893,23.5 62.5,29.107 62.5,36 C62.5,37.381 61.381,38.5 60,38.5" id="Fill-10" fill="#000000"></path>
<path d="M100,166 L160,166 C171.046,166 180,157.046 180,146 L180,76 L120,76 C108.954,76 100,84.954 100,96 L100,166 Z" id="Fill-11" fill="#FFFF50"></path>
<path d="M165.0195,107 L114.9805,107 C114.4275,107 113.9805,106.553 113.9805,106 C113.9805,105.447 114.4275,105 114.9805,105 L165.0195,105 C165.5725,105 166.0195,105.447 166.0195,106 C166.0195,106.553 165.5725,107 165.0195,107" id="Fill-12" fill="#000000"></path>
<path d="M165.0195,127 L114.9805,127 C114.4275,127 113.9805,126.553 113.9805,126 C113.9805,125.447 114.4275,125 114.9805,125 L165.0195,125 C165.5725,125 166.0195,125.447 166.0195,126 C166.0195,126.553 165.5725,127 165.0195,127" id="Fill-13" fill="#000000"></path>
<path d="M165.0195,147 L114.9805,147 C114.4275,147 113.9805,146.553 113.9805,146 C113.9805,145.447 114.4275,145 114.9805,145 L165.0195,145 C165.5725,145 166.0195,145.447 166.0195,146 C166.0195,146.553 165.5725,147 165.0195,147" id="Fill-14" fill="#000000"></path>
<path d="M165.0195,97.1855 L114.9805,97.1855 C114.4275,97.1855 113.9805,96.7375 113.9805,96.1855 C113.9805,95.6325 114.4275,95.1855 114.9805,95.1855 L165.0195,95.1855 C165.5725,95.1855 166.0195,95.6325 166.0195,96.1855 C166.0195,96.7375 165.5725,97.1855 165.0195,97.1855" id="Fill-15" fill="#000000"></path>
<path d="M165.0195,117 L114.9805,117 C114.4275,117 113.9805,116.553 113.9805,116 C113.9805,115.447 114.4275,115 114.9805,115 L165.0195,115 C165.5725,115 166.0195,115.447 166.0195,116 C166.0195,116.553 165.5725,117 165.0195,117" id="Fill-16" fill="#000000"></path>
<path d="M165.0195,137 L114.9805,137 C114.4275,137 113.9805,136.553 113.9805,136 C113.9805,135.447 114.4275,135 114.9805,135 L165.0195,135 C165.5725,135 166.0195,135.447 166.0195,136 C166.0195,136.553 165.5725,137 165.0195,137" id="Fill-17" fill="#000000"></path>
<path d="M180,44.6113 C179.988,44.6113 179.978,44.6053 179.966,44.6063 C176.876,44.7113 175.414,47.8023 174.124,50.5293 C172.778,53.3783 171.737,55.2323 170.031,55.1763 C168.142,55.1083 167.062,52.9743 165.918,50.7153 C164.604,48.1223 163.104,45.1803 159.955,45.2903 C156.909,45.3943 155.442,48.0843 154.148,50.4573 C152.771,52.9853 151.834,54.5223 150.027,54.4513 C148.1,54.3813 147.076,52.6463 145.891,50.6383 C144.57,48.4023 143.043,45.8883 139.955,45.9743 C136.961,46.0773 135.49,48.3593 134.192,50.3743 C132.819,52.5043 131.857,53.8023 130.027,53.7253 C128.054,53.6543 127.035,52.2153 125.856,50.5483 C124.532,48.6753 123.04,46.5553 119.961,46.6583 C117.033,46.7583 115.562,48.6273 114.265,50.2763 C113.033,51.8403 112.071,53.0783 110.036,53.0003 C109.484,52.9783 109.021,53.4113 109.001,53.9643 C108.98,54.5153 109.412,54.9793 109.964,55.0003 C112.981,55.1013 114.509,53.1993 115.836,51.5133 C117.013,50.0173 118.029,48.7263 120.029,48.6583 C121.955,48.5763 122.858,49.7733 124.224,51.7033 C125.521,53.5373 126.993,55.6173 129.955,55.7243 C133.058,55.8283 134.551,53.5093 135.873,51.4573 C137.055,49.6233 138.075,48.0403 140.023,47.9733 C141.816,47.9063 142.792,49.3233 144.168,51.6543 C145.465,53.8513 146.934,56.3403 149.955,56.4503 C153.08,56.5583 154.589,53.8293 155.904,51.4153 C157.043,49.3273 158.118,47.3543 160.023,47.2893 C161.816,47.2473 162.751,48.8843 164.134,51.6193 C165.426,54.1723 166.891,57.0643 169.959,57.1753 C170.016,57.1773 170.072,57.1783 170.128,57.1783 C173.192,57.1783 174.646,54.1033 175.933,51.3843 C177.072,48.9743 178.15,46.7033 180,46.6113 L180,44.6113 Z" id="Fill-24" fill="#000000"></path>
<polygon id="Fill-18" fill="#3ECC5F" points="80 166 120 166 120 126 80 126"></polygon>
<path d="M140,141 C139.781,141 139.572,141.037 139.361,141.064 C139.323,140.914 139.287,140.763 139.245,140.613 C141.051,139.859 142.32,138.079 142.32,136 C142.32,133.238 140.082,131 137.32,131 C136.182,131 135.145,131.396 134.304,132.036 C134.193,131.923 134.082,131.811 133.969,131.7 C134.596,130.864 134.98,129.838 134.98,128.713 C134.98,125.951 132.742,123.713 129.98,123.713 C127.915,123.713 126.143,124.966 125.381,126.754 C125.233,126.712 125.084,126.677 124.936,126.639 C124.963,126.428 125,126.219 125,126 C125,123.238 122.762,121 120,121 C117.238,121 115,123.238 115,126 C115,126.219 115.037,126.428 115.064,126.639 C114.916,126.677 114.767,126.712 114.619,126.754 C113.857,124.966 112.085,123.713 110.02,123.713 C107.258,123.713 105.02,125.951 105.02,128.713 C105.02,129.838 105.404,130.864 106.031,131.7 C102.314,135.332 100,140.393 100,146 C100,157.046 108.954,166 120,166 C129.339,166 137.16,159.59 139.361,150.936 C139.572,150.963 139.781,151 140,151 C142.762,151 145,148.762 145,146 C145,143.238 142.762,141 140,141" id="Fill-19" fill="#44D860"></path>
<polygon id="Fill-20" fill="#3ECC5F" points="80 106 120 106 120 86 80 86"></polygon>
<path d="M130,98.5 C131.381,98.5 132.5,97.381 132.5,96 C132.5,94.619 131.381,93.5 130,93.5 C129.891,93.5 129.786,93.519 129.681,93.532 C129.661,93.457 129.644,93.382 129.623,93.307 C130.525,92.93 131.16,92.039 131.16,91 C131.16,89.619 130.041,88.5 128.66,88.5 C128.091,88.5 127.572,88.697 127.152,89.018 C127.097,88.961 127.041,88.905 126.984,88.85 C127.298,88.433 127.49,87.919 127.49,87.356 C127.49,85.976 126.371,84.856 124.99,84.856 C123.957,84.856 123.071,85.483 122.69,86.377 C121.833,86.138 120.934,86 120,86 C114.478,86 110,90.478 110,96 C110,101.522 114.478,106 120,106 C120.934,106 121.833,105.862 122.69,105.623 C123.071,106.517 123.957,107.144 124.99,107.144 C126.371,107.144 127.49,106.024 127.49,104.644 C127.49,104.081 127.298,103.567 126.984,103.15 C127.041,103.095 127.097,103.039 127.152,102.982 C127.572,103.303 128.091,103.5 128.66,103.5 C130.041,103.5 131.16,102.381 131.16,101 C131.16,99.961 130.525,99.07 129.623,98.693 C129.644,98.619 129.661,98.543 129.681,98.468 C129.786,98.481 129.891,98.5 130,98.5" id="Fill-21" fill="#44D860"></path>
<path d="M140,24.75 C139.84,24.75 139.67,24.73 139.51,24.7 C139.35,24.67 139.189,24.62 139.04,24.56 C138.89,24.5 138.75,24.42 138.609,24.33 C138.479,24.24 138.35,24.13 138.229,24.02 C138.12,23.9 138.01,23.78 137.92,23.64 C137.83,23.5 137.75,23.36 137.689,23.21 C137.63,23.06 137.58,22.9 137.55,22.74 C137.52,22.58 137.5,22.41 137.5,22.25 C137.5,22.09 137.52,21.92 137.55,21.76 C137.58,21.6 137.63,21.45 137.689,21.29 C137.75,21.14 137.83,21 137.92,20.86 C138.01,20.73 138.12,20.6 138.229,20.48 C138.35,20.37 138.479,20.26 138.609,20.17 C138.75,20.08 138.89,20 139.04,19.94 C139.189,19.88 139.35,19.83 139.51,19.8 C139.83,19.73 140.16,19.73 140.49,19.8 C140.649,19.83 140.81,19.88 140.96,19.94 C141.109,20 141.25,20.08 141.39,20.17 C141.52,20.26 141.649,20.37 141.77,20.48 C141.88,20.6 141.99,20.73 142.08,20.86 C142.17,21 142.25,21.14 142.31,21.29 C142.37,21.45 142.42,21.6 142.45,21.76 C142.479,21.92 142.5,22.09 142.5,22.25 C142.5,22.91 142.229,23.56 141.77,24.02 C141.649,24.13 141.52,24.24 141.39,24.33 C141.25,24.42 141.109,24.5 140.96,24.56 C140.81,24.62 140.649,24.67 140.49,24.7 C140.33,24.73 140.16,24.75 140,24.75" id="Fill-22" fill="#000000"></path>
<path d="M160,23.5 C159.34,23.5 158.7,23.23 158.229,22.77 C158.12,22.65 158.01,22.52 157.92,22.39 C157.83,22.25 157.75,22.11 157.689,21.96 C157.63,21.81 157.58,21.65 157.55,21.49 C157.52,21.33 157.5,21.16 157.5,21 C157.5,20.34 157.77,19.7 158.229,19.23 C158.35,19.12 158.479,19.01 158.609,18.92 C158.75,18.83 158.89,18.75 159.04,18.69 C159.189,18.63 159.35,18.58 159.51,18.55 C159.83,18.48 160.17,18.48 160.49,18.55 C160.649,18.58 160.81,18.63 160.96,18.69 C161.109,18.75 161.25,18.83 161.39,18.92 C161.52,19.01 161.649,19.12 161.77,19.23 C162.229,19.7 162.5,20.34 162.5,21 C162.5,21.16 162.479,21.33 162.45,21.49 C162.42,21.65 162.37,21.81 162.31,21.96 C162.24,22.11 162.17,22.25 162.08,22.39 C161.99,22.52 161.88,22.65 161.77,22.77 C161.649,22.88 161.52,22.99 161.39,23.08 C161.25,23.17 161.109,23.25 160.96,23.31 C160.81,23.37 160.649,23.42 160.49,23.45 C160.33,23.48 160.16,23.5 160,23.5" id="Fill-23" fill="#000000"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46667 135.46667"
version="1.1"
id="svg8"
sodipodi:docname="logo.svg"
inkscape:version="0.92.1 r15371"
inkscape:export-filename=""
inkscape:export-xdpi="48.000004"
inkscape:export-ydpi="48.000004">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="0.70710678"
inkscape:cx="418.13805"
inkscape:cy="177.57445"
inkscape:document-units="mm"
inkscape:current-layer="layer2"
showgrid="false"
units="px"
width="256px"
showguides="false"
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="false"
inkscape:measure-start="283.373,243.952"
inkscape:measure-end="290.267,236.527">
<sodipodi:guide
position="0,0"
orientation="0,512"
id="guide3699"
inkscape:locked="false" />
<sodipodi:guide
position="135.46667,0"
orientation="-512,0"
id="guide3701"
inkscape:locked="false" />
<sodipodi:guide
position="135.46667,135.46667"
orientation="0,-512"
id="guide3703"
inkscape:locked="false" />
<sodipodi:guide
position="0,135.46667"
orientation="512,0"
id="guide3705"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53334)"
style="display:inline">
<path
style="fill:#609926;fill-opacity:1;stroke:#428f29;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 27.709937,195.15095 c -9.546573,-0.0272 -22.3392732,6.79805 -21.6317552,23.90397 1.105534,26.72889 25.4565952,29.20839 35.1916502,29.42301 1.068023,5.01357 12.521798,22.30563 21.001818,23.21667 h 37.15277 c 22.27763,-1.66785 38.9607,-75.75671 26.59321,-76.03825 -46.781583,2.47691 -49.995146,2.13838 -88.599758,0 -2.495053,-0.0266 -5.972321,-0.49474 -9.707935,-0.5054 z m 2.491319,9.45886 c 1.351378,13.69267 3.555849,21.70359 8.018216,33.94345 -11.382872,-1.50473 -21.069822,-5.22443 -22.851515,-19.10984 -0.950962,-7.4112 2.390428,-15.16769 14.833299,-14.83361 z"
id="path3722"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sscccccsccsc" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2"
style="display:inline">
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.24757317;stroke-opacity:1"
id="rect4599"
width="34.762054"
height="34.762054"
x="87.508659"
y="18.291576"
transform="rotate(25.914715)"
ry="5.4825778" />
<path
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26644793px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 79.804947,57.359056 3.241146,1.609954 V 35.255731 h -3.262698 z"
id="path4525"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Layer 3"
style="display:inline">
<g
style="display:inline"
id="g4539">
<circle
transform="rotate(-19.796137)"
r="3.4745038"
cy="90.077766"
cx="49.064713"
id="path4606"
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1" />
<circle
transform="rotate(-19.796137)"
r="3.4745038"
cy="102.1049"
cx="36.810425"
id="path4606-3"
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1" />
<circle
transform="rotate(-19.796137)"
r="3.4745038"
cy="111.43928"
cx="46.484283"
id="path4606-1"
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1" />
<rect
transform="rotate(26.024158)"
y="18.061695"
x="97.333458"
height="27.261492"
width="2.6726954"
id="rect4629-8"
style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.27444693;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4514"
d="m 76.558096,68.116343 c 12.97589,6.395378 13.012989,4.101862 4.890858,20.907244"
style="fill:none;stroke:#609926;stroke-width:2.68000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 110 112"><defs><style>.cls-1{fill:#3d3d3f;}.cls-2{fill:#ee7509;fill-rule:evenodd;}</style></defs><title>logo</title>
<g id="Calque_2" data-name="Calque 2"><g id="Calque_1-2" data-name="Calque 1">
<!-- 454.9 112.24 -->
<path class="cls-1" d="M45.05,10.86H45a7.34,7.34,0,0,0-7.69,7.6,7.59,7.59,0,0,0,7.77,7.87h0c5.09,0,7.75-4,7.75-7.93A7.35,7.35,0,0,0,45.05,10.86Zm0,15.22h0Z"/>
<path class="cls-2" d="M55.18,0C41.06-.22,11.49,4.56,0,40c.39.3,1.61,1,1.94,1.26C17,7.74,43.63,5.89,53.61,6.67c64.8,5.09,59.91,100.14-7.47,97.92l.16,0C1.65,104-.52,38,31.42,34.23c1.21-.13,3.08-.3,3.55,1.75.09.39-11.16,38.78-10.82,41.41.21,3.74,2.45,8.7,10.49,7.19.72-1.77,13.94-50.72,13.91-50.75a12.7,12.7,0,0,0-9.73-5C11.1,27.15,3.14,54.72,3.88,67.51c.05,12.56,8.74,40.86,44.76,44.67,44.55,1.79,61.75-33,61.55-57.87C110,28.37,86.77.51,55.18,0Z"/><path class="cls-2" d="M52.08,33.76C50.61,37.56,36.79,89,36,92.75a13.91,13.91,0,0,0-.47,3.79,7.74,7.74,0,0,0,2.12,4.91,8,8,0,0,0,6.69,1.95,8.86,8.86,0,0,0,2-.39c.5-2.25,4.5-18.09,5.93-22.28a14.68,14.68,0,0,0,8.09,2.39c25.45-.74,42-50.9,20-52.48-11.78-.94-17,10.23-19,11.18-.63-.74,3.41-9.66,3.55-11.37A40.87,40.87,0,0,0,52.08,33.76ZM72,38.34C83.88,37,68.74,84.4,55.71,78.72c-4.23-1.09-2-7.63,2.29-21.71C61.6,45.3,65.92,38.81,72,38.34Z"/>
</g></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,32 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="300px" height="439.589px" viewBox="100 100 400 400" xml:space="preserve">
<g>
<g id="Marked_Letters">
<path fill="#010101" d="M185.044,358.869h-9.961l-1.143-25.986l-14.092,25.986h-6.24l-6.709-26.807l-8.818,26.807h-10.225 l13.389-40.605h10.928l6.416,25.781l13.916-25.781h10.635L185.044,358.869z"/>
<path fill="#010101" d="M226.617,358.869h-10.811l-1.084-8.994H202.33l-4.102,8.994h-10.605l20.566-40.605h10.986L226.617,358.869 z M214.019,344.162l-1.934-15.527l-7.061,15.527H214.019z"/>
<path fill="#010101" d="M267.712,358.869h-11.338l-4.043-8.467c-1.191-2.559-2.227-4.478-3.105-5.757s-1.651-2.07-2.314-2.373 c-0.664-0.303-1.553-0.454-2.666-0.454h-1.553l-2.578,17.051h-10.283l5.889-40.605h15.85c5.761,0,9.672,1.27,11.733,3.809 c2.061,2.539,3.091,5.283,3.091,8.232c0,3.105-0.854,5.522-2.563,7.251c-1.709,1.729-4.097,2.798-7.163,3.208 c1.562,0.898,2.769,1.953,3.618,3.164s1.86,3.096,3.032,5.654L267.712,358.869z M255.525,330.012c0-1.562-0.571-2.925-1.714-4.087 s-3.453-1.743-6.929-1.743h-1.611l-1.699,11.719h4.102c2.89,0,4.922-0.61,6.094-1.831S255.525,331.496,255.525,330.012z"/>
<path fill="#010101" d="M313.705,318.264l-17.578,18.223l14.912,22.383h-11.807l-14.59-21.65l-3.282,21.65h-10.342l6.064-40.605 h10.401l-2.578,17.256l16.611-17.256H313.705z"/>
<path fill="#010101" d="M346.426,318.264L345.4,325.5h-16.436l-1.26,8.818h14.268l-1.025,7.266h-14.385l-1.377,10.02h19.98 l-1.025,7.266h-30.439l5.889-40.605H346.426z"/>
<path fill="#010101" d="M389.953,338.156c0,4.512-0.86,8.301-2.578,11.367c-1.719,3.066-4.273,5.391-7.662,6.973 s-7.583,2.373-12.582,2.373H348.41l5.83-40.605h14.941c3.534,0,6.625,0.527,9.271,1.582s4.82,2.51,6.52,4.365 s2.953,3.97,3.764,6.343S389.953,335.461,389.953,338.156z M379.377,338.303c0-2.031-0.387-4.004-1.158-5.918 s-2.192-3.54-4.262-4.878c-2.07-1.338-4.941-2.007-8.613-2.007h-1.67l-3.779,26.104h5.449c2.597,0,4.828-0.391,6.693-1.172 s3.33-1.821,4.395-3.12s1.821-2.71,2.271-4.233C379.152,341.555,379.377,339.963,379.377,338.303z"/>
</g>
<g>
<path fill="#010101" d="M406.922,307.149l-3.703,26.35c-0.609,4.324-2.72,6.486-6.33,6.486c-0.773,0-1.553-0.07-2.338-0.211 l-0.756-3.023c0.879,0.188,1.67,0.281,2.373,0.281c1.219,0,2.118-0.302,2.698-0.905s0.964-1.55,1.151-2.839l3.674-26.139H406.922z "/>
<path fill="#010101" d="M423.027,307.8l-0.475,3.357c-1.312-0.867-2.748-1.301-4.307-1.301c-1.312,0-2.361,0.34-3.146,1.02 s-1.178,1.576-1.178,2.689c0,0.551,0.188,1.131,0.562,1.74s1.471,1.644,3.287,3.103s3.015,2.739,3.595,3.841 s0.87,2.203,0.87,3.305c0,1.758-0.662,3.275-1.986,4.553s-3.088,1.916-5.291,1.916c-1.957,0-3.938-0.586-5.941-1.758l0.51-3.604 c2.238,1.559,4.16,2.338,5.766,2.338c0.867,0,1.69-0.284,2.47-0.852c0.779-0.568,1.169-1.339,1.169-2.312 c0-0.62-0.197-1.265-0.59-1.933c-0.394-0.667-1.502-1.745-3.324-3.232c-1.824-1.486-3.014-2.778-3.568-3.874 c-0.555-1.097-0.832-2.185-0.832-3.263c0-1.899,0.785-3.491,2.355-4.775c1.57-1.283,3.422-1.926,5.555-1.926 C420.016,306.833,421.516,307.155,423.027,307.8z"/>
</g>
<g>
<g>
<path fill="#010101" d="M357,200v-92c0-8.284-6.716-15-15-15H172c-8.284,0-15,6.716-15,15v92H357z"/>
<path fill="#010101" d="M157,205v73c0,8.284,6.716,15,15,15h170c8.284,0,15-6.716,15-15v-73H157z"/>
</g>
<g>
<path fill="#FFFFFF" d="M208.737,180.15v-33.125l16.987,21.234l16.987-21.234v33.125h16.987v-57.756h-16.987l-16.987,21.234 l-16.987-21.234H191.75v57.756H208.737z"/>
<path fill="#FFFFFF" d="M322.55,151.272h-16.987v-28.878h-16.986v28.878h-16.987L297.069,181L322.55,151.272z"/>
</g>
<g>
<path fill="#FFFFFF" d="M217,241.154c0,2.124-1.722,3.846-3.845,3.846h-5.31c-2.124,0-3.845-1.722-3.845-3.846v-0.309 c0-2.124,1.722-3.846,3.845-3.846h5.31c2.124,0,3.845,1.722,3.845,3.846V241.154z"/>
<path fill="#FFFFFF" d="M207.859,256.5c0,1.933-1.1,3.5-2.457,3.5h-12.046c-1.357,0-2.457-1.567-2.457-3.5l0,0 c0-1.933,1.1-3.5,2.457-3.5h12.046C206.759,253,207.859,254.567,207.859,256.5L207.859,256.5z"/>
<path fill="#FFFFFF" d="M328.044,238.021c-1.058-3.094-2.692-5.85-4.907-8.269c-2.215-2.418-5.049-4.314-8.498-5.689 c-3.45-1.375-7.479-2.063-12.086-2.063h-19.477l-7.6,52.932h24.403c6.518,0,11.984-1.032,16.402-3.094 c4.416-2.062,7.746-5.092,9.986-9.09c2.24-3.996,3.361-8.936,3.361-14.817C329.629,244.418,329.1,241.115,328.044,238.021z M314.964,254.347c-0.586,1.986-1.573,3.826-2.96,5.519c-1.389,1.694-3.297,3.049-5.729,4.067s-5.34,1.528-8.727,1.528h-7.103 l4.927-34.027h2.176c4.787,0,8.529,0.872,11.229,2.616c2.698,1.744,4.55,3.863,5.557,6.358c1.005,2.494,1.508,5.066,1.508,7.713 C315.842,250.286,315.549,252.361,314.964,254.347z"/>
<path fill="#FFFFFF" d="M246.148,241.043l1.373-9.61h21.424l1.336-9.434h-10.601h-24.38h-1.256c-2.125,0-3.846,1.877-3.846,4 s1.721,4,3.846,4h0.096h3.793c1.928,0,3.491,1.563,3.491,3.491c0,1.928-1.563,3.491-3.491,3.491h-4.806L233.126,237h-8.983 c-1.299,0-2.353,1.786-2.353,3.988c0,2.203,1.053,3.989,2.353,3.989h7.826L231.966,245h3.189c2.124,0,3.845,1.722,3.845,3.846 v0.309c0,2.124-1.722,3.846-3.845,3.846h-4.349h-0.96H216.2c-1.933,0-3.5,1.567-3.5,3.5s1.567,3.5,3.5,3.5h8.645h4.945h0.364 c2.124,0,3.845,1.722,3.845,3.846v0.309c0,2.124-1.722,3.846-3.845,3.846h-1.524h-3.785h-1.8c-2.125,0-3.846,1.377-3.846,3.5 s1.721,3.5,3.846,3.5h25.636c0.273,0,0.538-0.024,0.795-0.068h17.828l1.336-9.471h-26.045l1.795-13.062h18.751l1.336-9.471 h-18.598l0.029-0.205C246.055,242.213,246.144,241.647,246.148,241.043z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="20.9386" y1="1.0265" x2="11.7312" y2="31.1426">
<stop offset="0" style="stop-color:#D61395"/>
<stop offset="0.2656" style="stop-color:#BB1089"/>
<stop offset="0.8337" style="stop-color:#760769"/>
<stop offset="0.9987" style="stop-color:#61045F"/>
</linearGradient>
<circle display="none" fill="url(#SVGID_1_)" cx="16.335" cy="16.085" r="15.742"/>
<rect fill="#FFFFFF" width="32" height="32"/>
<g>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="21.3895" y1="2.3882" x2="8.5565" y2="28.6998">
<stop offset="0" style="stop-color:#D61395"/>
<stop offset="0.2656" style="stop-color:#BB1089"/>
<stop offset="0.8337" style="stop-color:#760769"/>
<stop offset="0.9987" style="stop-color:#61045F"/>
</linearGradient>
<path fill="url(#SVGID_2_)" d="M15.21,16.909c-0.414-0.414-0.414-1.085,0-1.499c0.414-0.414,1.085-0.414,1.499,0
c3.125,3.125,8.026,3.415,11.481,0.871c0.174-0.833,0.268-1.695,0.268-2.579c0-1.103-0.143-2.173-0.41-3.192
c-0.316,0.713-1.029,1.212-1.859,1.212c-1.123,0-2.033-0.91-2.033-2.033s0.91-2.033,2.033-2.033c0.289,0,0.563,0.061,0.812,0.169
c-2.111-3.988-6.3-6.706-11.126-6.706c-6.95,0-12.583,5.634-12.583,12.583c0,6.311,4.646,11.536,10.704,12.443l-1.168,2.624
c-0.647,2.232,0.714,3.06,2.542,1.546l8.895-7.176L24.2,23.133c1.217-1.075,2.221-2.383,2.95-3.852
C23.179,20.921,18.432,20.131,15.21,16.909z M18.318,7.654c1.123,0,2.033,0.91,2.033,2.033s-0.91,2.033-2.033,2.033
c-1.123,0-2.033-0.91-2.033-2.033S17.195,7.654,18.318,7.654z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -19,7 +19,6 @@ class Wappalyzer {
this.categories = {};
this.driver = {};
this.jsPatterns = {};
this.detected = {};
this.hostnameCache = {};
this.adCache = [];
@ -38,21 +37,33 @@ class Wappalyzer {
this.driver.log(message, source || '', type || 'debug');
}
asyncForEach(iterable, iterator) {
return Promise.all(( iterable || [] ).map(item => new Promise(resolve => setTimeout(() => resolve(iterator(item)), 1))));
}
analyze(url, data, context) {
var apps = {};
const startTime = new Date();
if ( typeof data.html !== 'string' ) {
data.html = '';
}
const promises = [];
var apps = {};
if ( this.detected[url.canonical] === undefined ) {
this.detected[url.canonical] = {};
}
// Additional information
var language = null;
if ( data.html ) {
if ( typeof data.html !== 'string' ) {
data.html = '';
}
const matches = data.html.match(/<html[^>]*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"/i);
const language = matches && matches.length ? matches[1] : null;
language = matches && matches.length ? matches[1] : null;
}
Object.keys(this.apps).forEach(appName => {
apps[appName] = this.detected[url.canonical] && this.detected[url.canonical][appName] ? this.detected[url.canonical][appName] : new Application(appName, this.apps[appName]);
@ -62,33 +73,32 @@ class Wappalyzer {
this.analyzeUrl(app, url);
if ( data.html ) {
this.analyzeHtml(app, data.html);
this.analyzeMeta(app, data.html);
promises.push(this.analyzeHtml(app, data.html));
promises.push(this.analyzeMeta(app, data.html));
}
if ( data.scripts ) {
this.analyzeScripts(app, data.scripts);
promises.push(this.analyzeScripts(app, data.scripts));
}
if ( data.headers ) {
this.analyzeHeaders(app, data.headers);
}
if ( data.env ) {
this.analyzeEnv(app, data.env);
if ( data.cookies ) {
promises.push(this.analyzeCookies(app, data.cookies));
}
if ( data.robotsTxt ) {
this.analyzeRobotsTxt(app, data.robotsTxt);
if ( data.headers ) {
promises.push(this.analyzeHeaders(app, data.headers));
}
})
});
if ( data.js ) {
Object.keys(data.js).forEach(appName => {
this.analyzeJs(apps[appName], data.js[appName]);
promises.push(this.analyzeJs(apps[appName], data.js[appName]));
});
}
return new Promise(resolve => {
Promise.all(promises)
.then(() => {
Object.keys(apps).forEach(appName => {
var app = apps[appName];
@ -103,11 +113,17 @@ class Wappalyzer {
this.cacheDetectedApps(apps, url.canonical);
this.trackDetectedApps(apps, url, language);
this.log('Processing ' + Object.keys(data).join(', ') + ' took ' + (( new Date() - startTime ) / 1000).toFixed(2) + 's (' + url.hostname + ')', 'core');
if ( Object.keys(apps).length ) {
this.log(Object.keys(apps).length + ' apps detected: ' + Object.keys(apps).join(', ') + ' on ' + url.canonical, 'core');
this.log('Identified ' + Object.keys(apps).join(', ') + ' (' + url.hostname + ')', 'core');
}
this.driver.displayApps(this.detected[url.canonical], { language }, context);
resolve();
});
});
}
/**
@ -132,10 +148,10 @@ class Wappalyzer {
.then(robotsTxt => {
if ( robotsTxt.some(disallowedPath => parsed.pathname.indexOf(disallowedPath) === 0) ) {
return reject();
} else {
return resolve();
}
});
return resolve();
}, () => resolve());
});
};
@ -393,14 +409,16 @@ class Wappalyzer {
analyzeUrl(app, url) {
var patterns = this.parsePatterns(app.props.url);
if ( patterns.length ) {
patterns.forEach(pattern => {
if ( !patterns.length ) {
return Promise.resolve();
}
return this.asyncForEach(patterns, pattern => {
if ( pattern.regex.test(url.canonical) ) {
this.addDetected(app, pattern, 'url', url.canonical);
}
});
}
}
/**
* Analyze HTML
@ -408,14 +426,16 @@ class Wappalyzer {
analyzeHtml(app, html) {
var patterns = this.parsePatterns(app.props.html);
if ( patterns.length ) {
patterns.forEach(pattern => {
if ( !patterns.length ) {
return Promise.resolve();
}
return this.asyncForEach(patterns, pattern => {
if ( pattern.regex.test(html) ) {
this.addDetected(app, pattern, 'html', html);
}
});
}
}
/**
* Analyze script tag
@ -423,8 +443,11 @@ class Wappalyzer {
analyzeScripts(app, scripts) {
var patterns = this.parsePatterns(app.props.script);
if ( patterns.length ) {
patterns.forEach(pattern => {
if ( !patterns.length ) {
return Promise.resolve();
}
return this.asyncForEach(patterns, pattern => {
var match;
scripts.forEach(uri => {
@ -434,44 +457,45 @@ class Wappalyzer {
});
});
}
}
/**
* Analyze meta tag
*/
analyzeMeta(app, html) {
var regex = /<meta[^>]+>/ig;
var patterns = this.parsePatterns(app.props.meta);
var content = '';
const regex = /<meta[^>]+>/ig;
const patterns = this.parsePatterns(app.props.meta);
const promises = [];
var matches = [];
while ( patterns && ( matches = regex.exec(html) ) ) {
for ( var meta in patterns ) {
const r = new RegExp('(?:name|property)=["\']' + meta + '["\']', 'i');
if ( new RegExp('(?:name|property)=["\']' + meta + '["\']', 'i').test(matches[0]) ) {
content = matches[0].match(/content=("|')([^"']+)("|')/i);
if ( r.test(matches[0]) ) {
let content = matches[0].match(/content=("|')([^"']+)("|')/i);
patterns[meta].forEach(pattern => {
promises.push(this.asyncForEach(patterns[meta], pattern => {
if ( content && content.length === 4 && pattern.regex.test(content[2]) ) {
this.addDetected(app, pattern, 'meta', content[2], meta);
}
});
}));
}
}
}
return promises ? Promise.all(promises) : Promise.resolve();
}
/**
* analyze response headers
* Analyze response headers
*/
analyzeHeaders(app, headers) {
var patterns = this.parsePatterns(app.props.headers);
const patterns = this.parsePatterns(app.props.headers);
const promises = [];
if ( headers ) {
Object.keys(patterns).forEach(headerName => {
patterns[headerName].forEach(pattern => {
promises.push(this.asyncForEach(patterns[headerName], pattern => {
headerName = headerName.toLowerCase();
if ( headerName in headers ) {
@ -481,57 +505,52 @@ class Wappalyzer {
}
});
}
}));
});
});
}
return promises ? Promise.all(promises) : Promise.resolve();
}
/**
* Analyze environment variables
* Analyze cookies
*/
analyzeEnv(app, envs) {
var patterns = this.parsePatterns(app.props.env);
analyzeCookies(app, cookies) {
const patterns = this.parsePatterns(app.props.cookies);
const promises = [];
Object.keys(patterns).forEach(cookieName => {
cookieName = cookieName.toLowerCase();
if ( patterns.length ) {
patterns.forEach(pattern => {
Object.keys(envs).forEach(env => {
if ( pattern.regex.test(envs[env]) ) {
this.addDetected(app, pattern, 'env', envs[env]);
promises.push(this.asyncForEach(patterns[cookieName], pattern => {
const cookie = cookies.find(cookie => cookie.name.toLowerCase() === cookieName);
if ( cookie && pattern.regex.test(cookie.value) ) {
this.addDetected(app, pattern, 'cookies', cookie.value, cookieName);
}
})
}));
});
}
return promises ? Promise.all(promises) : Promise.resolve();
}
/**
* Analyze JavaScript variables
*/
analyzeJs(app, results) {
const promises = [];
Object.keys(results).forEach(string => {
Object.keys(results[string]).forEach(index => {
promises.push(this.asyncForEach(Object.keys(results[string]), index => {
const pattern = this.jsPatterns[app.name][string][index];
const value = results[string][index];
if ( pattern.regex.test(value) ) {
if ( pattern && pattern.regex.test(value) ) {
this.addDetected(app, pattern, 'js', value);
}
}));
});
});
}
/**
* Analyze robots.txt
*/
analyzeRobotsTxt(app, robotsTxt) {
var patterns = this.parsePatterns(app.props.robotsTxt);
if ( patterns.length ) {
patterns.forEach(pattern => {
if ( pattern.regex.test(robotsTxt) ) {
this.addDetected(app, pattern, 'robotsTxt', robotsTxt);
}
});
}
return promises ? Promise.all(promises) : Promise.resolve();
}
/**
@ -559,7 +578,7 @@ class Wappalyzer {
}
// Replace back references
version = version.replace(new RegExp('\\\\' + i, 'g'), match || '');
version = version.trim().replace(new RegExp('\\\\' + i, 'g'), match || '');
});
if ( version && versions.indexOf(version) === -1 ) {

@ -0,0 +1,144 @@
/* eslint-env mocha */
'use strict';
const assert = require('chai').assert;
const Wappalyzer = require('../src/wappalyzer');
describe('should analyze website elements properly', function () {
it('should analyze html', async () => {
const html = `
<!DOCTYPE HTML>
<html>
<head>
<title>Page title | Html detection </title>
<meta charset="utf-8" />
</head>
<body>
<h1>Technologies Test Page | Html detection</h1>
<!-- Google Tag Manager -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KAAOEOE"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager -->
</body>
</html>
`;
const wappalyzer = new Wappalyzer();
wappalyzer.apps = {
"Google Tag Manager": {
"html": [
"googletagmanager\\.com/ns\\.html[^>]+></iframe>",
"<!-- (?:End )?Google Tag Manager -->"
]
}
};
var applications = null;
wappalyzer.driver = {
log () {},
displayApps (detectedMap) {
applications = detectedMap;
}
};
await wappalyzer.analyze({ canonical: 'example.com' }, { html });
assert.equal(applications['Google Tag Manager'].name, 'Google Tag Manager');
});
it('should analyze scripts', async () => {
const scripts = [
'http://www.google-analytics.com/analytics.js',
'http://example.com/assets/js/jquery.min.js'
];
const wappalyzer = new Wappalyzer();
wappalyzer.apps = {
"Google Analytics": {
"cats": [
10
],
"script": "google-analytics\\.com\\/(?:ga|urchin|(analytics))\\.js\\;version:\\1?UA:"
},
"jQuery": {
"script": [
"jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1",
"/([\\d.]+)/jquery(?:\\.min)?\\.js\\;version:\\1",
"jquery.*\\.js(?:\\?ver(?:sion)?=([\\d.]+))?\\;version:\\1"
]
}
};
var applications = null;
wappalyzer.driver = {
log () {},
displayApps (detectedMap) {
applications = detectedMap;
}
};
await wappalyzer.analyze({ canonical: 'example.com' }, { scripts });
assert.equal(applications['Google Analytics'].name, 'Google Analytics');
assert.equal(applications['jQuery'].name, 'jQuery');
});
it('should analyze headers', async () => {
const headers = {
'date': [ 'Thu, 01 Feb 2018 11:34:18 GMT' ],
'connection': [ 'keep-alive' ],
'x-powered-by': [ 'Express'],
'etag': [ 'W/125-1jQLmiya7mfec43xR3Eb3pjdu64s' ],
'content-length': [ '293' ],
'content-type': [ 'text/html; charset=utf-8' ]
};
const wappalyzer = new Wappalyzer();
wappalyzer.apps = {
"Express": {
"headers": {
"X-Powered-By": "^Express$"
}
}
};
var applications = null;
wappalyzer.driver = {
log () {},
displayApps (detectedMap) {
applications = detectedMap;
}
};
await wappalyzer.analyze({ canonical: 'example.com' }, { headers });
assert.equal(applications['Express'].name, 'Express');
});
it('should analyze js globals', async () => {
const js = {
'Moment.js': { 'moment': { '0': true } },
'Google Font API': { 'WebFonts': { '0': true } }
};
const wappalyzer = new Wappalyzer();
wappalyzer.apps = {
"Moment.js": {
"js": {
"moment": "",
"moment.version": "(.*)\\;version:\\1"
}
},
"Google Font API": {
"js": {
"WebFonts": ""
}
}
};
var applications = null;
wappalyzer.driver = {
log () {},
displayApps (detectedMap) {
applications = detectedMap;
}
};
wappalyzer.parseJsPatterns();
await wappalyzer.analyze({ canonical: 'example.com' }, { js });
assert.equal(applications['Google Font API'].name, 'Google Font API');
assert.equal(applications['Moment.js'].name, 'Moment.js');
});
});

@ -2,20 +2,173 @@
# yarn lockfile v1
assertion-error@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
browser-stdout@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
chai@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c"
dependencies:
assertion-error "^1.0.1"
check-error "^1.0.1"
deep-eql "^3.0.0"
get-func-name "^2.0.0"
pathval "^1.0.0"
type-detect "^4.0.0"
check-error@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
commander@2.11.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
debug@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
ms "2.0.0"
deep-eql@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
dependencies:
type-detect "^4.0.0"
diff@3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
escape-string-regexp@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
file-type@7.4.*:
version "7.4.0"
resolved "https://registry.yarnpkg.com/file-type/-/file-type-7.4.0.tgz#2a7c94f62a0030150bb7d9b6c70cfa1d3e759c86"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
get-func-name@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
glob@7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
growl@1.10.3:
version "1.10.3"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
has-flag@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
he@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
html-comment-regex@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
is-svg@2.1.*:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
dependencies:
html-comment-regex "^1.1.0"
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
brace-expansion "^1.1.7"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
mkdirp@0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
mocha@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.1.tgz#759b62c836b0732382a62b6b1fb245ec1bc943ac"
dependencies:
browser-stdout "1.3.0"
commander "2.11.0"
debug "3.1.0"
diff "3.3.1"
escape-string-regexp "1.0.5"
glob "7.1.2"
growl "1.10.3"
he "1.1.1"
mkdirp "0.5.1"
supports-color "4.4.0"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
pathval@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
@ -30,3 +183,17 @@ read-chunk@2.1.*:
safe-buffer@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
supports-color@4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
dependencies:
has-flag "^2.0.0"
type-detect@^4.0.0:
version "4.0.8"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"