diff --git a/.github/ISSUE_TEMPLATE/technology-request.md b/.github/ISSUE_TEMPLATE/technology-request.md index 99c10dc7d..e2c4aa1bf 100644 --- a/.github/ISSUE_TEMPLATE/technology-request.md +++ b/.github/ISSUE_TEMPLATE/technology-request.md @@ -7,4 +7,4 @@ assignees: '' --- -You may request a new technology to be added but changes of having it included are greatly improved if you submit a pull request. Please refer to the [contributing guide](https://github.com/AliasIO/wappalyzer/blob/master/CONTRIBUTING.md). +You may request a new technology to be added but chances of having it included are greatly improved if you submit a pull request. Please refer to the [contributing guide](https://github.com/AliasIO/wappalyzer/blob/master/CONTRIBUTING.md). diff --git a/bin/convert.js b/bin/convert.js index 6e2cb0b58..cf22eb9b5 100644 --- a/bin/convert.js +++ b/bin/convert.js @@ -1,6 +1,11 @@ const fs = require('fs') const path = require('path') const { createConverter } = require('convert-svg-to-png') +const terminalOverwrite = require('terminal-overwrite') + +// Fix memoryleak warning +const maxConvertProcesses = 1 +process.setMaxListeners(maxConvertProcesses + 1) const appPaths = () => { const fileDir = path.dirname(require.main.filename).split('/') @@ -57,16 +62,15 @@ function checkFileExists(imagePath) { return fileExists } +/** + * Check if path is a file + * @param {*} filePath + * @returns + */ function checkIfFile(filePath) { return fs.statSync(filePath).isFile() } -function diffFiles(fileOne, fileTwo) { - const f1 = fs.readFileSync(fileOne) - const f2 = fs.readFileSync(fileTwo) - return f1.equals(f2) -} - function dateModified(file) { return fs.statSync(file).mtime } @@ -74,87 +78,89 @@ function dateModified(file) { function dateDiff(file) { const now = new Date().getTime() const then = dateModified(file).getTime() - return Math.round(Math.abs((then - now) / 86400000)) + return Math.round(Math.abs(((then - now) / 1000) * 60 * 60 * 24)) } -const converter = createConverter() - ;(async () => { // Main script const files = fs.readdirSync(appPaths().iconPath) - const totalFiles = files.length + const batchNum = Math.ceil(totalFiles / maxConvertProcesses) + let batchCount = 1 + + const converter = createConverter() do { + const percentComplete = `${ + 100 - Math.round((100 / totalFiles) * files.length) + }%` + terminalOverwrite( + `Processing Batch: ${batchCount} of ${batchNum} (${percentComplete})` + ) + await Promise.all( - files.splice(0, 50).map(async (fileName) => { - const image = { - id: fileName, - path: `${appPaths().iconPath}/${fileName}`, - convertPath: `${appPaths().convertPath}/${fileName}`, - async convertAndCopy() { - for (let attempt = 1; attempt <= 3; attempt++) { - try { - await converter - .convertFile(this.path, { - height: 32, - width: 32, - outputFilePath: this.convertPath, - }) - .catch((error) => { - throw new Error(`${error} (${fileName})`) - }) - } catch (error) { - if (attempt >= 3) { - throw error - } else { - await new Promise((resolve) => - setTimeout(resolve, 500 * attempt) - ) - } - } + files.splice(0, maxConvertProcesses).map(async (fileName) => { + const path = `${appPaths().iconPath}/${fileName}` + const outputFilePath = getConvertFileName(fileName) + const ext = getFileExtension(path) + + if (ext === '.svg') { + // Check if converted file exists. + if (checkFileExists(outputFilePath)) { + // Skip if destination file exists and source file hasn't changed in + // 30 days or destination file was created in the last day + const fileAgeA = dateDiff(path) + const fileAgeB = dateDiff(outputFilePath) + + if (fileAgeA > 30 || fileAgeB < 1) { + return + } + } + + // Convert and copy file. + for (let attempt = 1; attempt <= 3; attempt++) { + try { + await converter + .convertFile(path, { + height: 32, + width: 32, + outputFilePath, + }) + .catch((error) => { + throw new Error(`${error} (${fileName})`) + }) break - } - }, - async processFile() { - // Setup variables. - const ext = getFileExtension(this.path) - - // If SVG, run checks. - if (ext === '.svg') { - // Check if converted file exists. - const convertFilePath = getConvertFileName(this.path) - if (checkFileExists(convertFilePath)) { - // If file has changed in past 7 days. - if (dateDiff(this.path) > 8) { - return null - } - } - // Convert and copy file. - await this.convertAndCopy() - } else { - // If PNG or other, just copy the file as-is. - // eslint-disable-next-line no-lonely-if - if (checkIfFile(this.path)) { - copyFiles(this.path, this.convertPath) + } catch (error) { + if (attempt >= 3) { + throw error + } else { + // eslint-disable-next-line no-console + console.error(`${error.message || error} (attempt ${attempt})`) + + await new Promise((resolve) => + setTimeout(resolve, 500 * attempt) + ) } } - }, + } + } else if (this.ext === '.png') { + // If PNG, just copy the file as-is. + // eslint-disable-next-line no-lonely-if + if (checkIfFile(this.path)) { + copyFiles(this.path, this.convertPath) + } } - - await image.processFile() }) ) - console.log(`${100 - Math.round((100 / totalFiles) * files.length)}%`) + batchCount++ } while (files.length) await converter.destroy() + // eslint-disable-next-line no-console console.log(`Converted ${totalFiles.toLocaleString()} files.`) - - process.exit() })() /** diff --git a/package.json b/package.json index 2ea8cd917..ff4ca5aab 100644 --- a/package.json +++ b/package.json @@ -13,14 +13,15 @@ "eslint-plugin-json": "^2.1.2", "eslint-plugin-nuxt": "^1.0.0", "eslint-plugin-prettier": "^3.1.4", - "prettier": "^2.1.2" + "prettier": "^2.1.2", + "terminal-overwrite": "^2.0.1" }, "scripts": { "link": "node ./bin/link.js", "lint": "eslint src/**/*.{js,json}", "lint:fix": "eslint --fix src/**/*.{js,json}", "validate": "yarn run lint && jsonlint -qV ./schema.json ./src/technologies/ && node ./bin/validate.js", - "convert": "node ./bin/convert.js", + "convert": "node --no-warnings ./bin/convert.js", "prettify": "jsonlint -si --trim-trailing-commas --enforce-double-quotes ./src/categories.json ./src/technologies/*.json", "build": "yarn run link && yarn run validate && yarn run prettify && yarn run convert && node ./bin/build.js", "build:safari": "xcrun safari-web-extension-converter --swift --project-location build --force src/drivers/webextension" diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 73ec3ae18..682aaf7d9 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com/", - "version": "6.10.17", + "version": "6.10.18", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/drivers/webextension/images/icons/Accentuate Custom Fields.png b/src/drivers/webextension/images/icons/Accentuate Custom Fields.png new file mode 100644 index 000000000..d056cb140 Binary files /dev/null and b/src/drivers/webextension/images/icons/Accentuate Custom Fields.png differ diff --git a/src/drivers/webextension/images/icons/Antsomi.svg b/src/drivers/webextension/images/icons/Antsomi.svg new file mode 100644 index 000000000..27cecb71e --- /dev/null +++ b/src/drivers/webextension/images/icons/Antsomi.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/drivers/webextension/images/icons/Back In Stock.png b/src/drivers/webextension/images/icons/Back In Stock.png new file mode 100644 index 000000000..ab57930be Binary files /dev/null and b/src/drivers/webextension/images/icons/Back In Stock.png differ diff --git a/src/drivers/webextension/images/icons/Carro.svg b/src/drivers/webextension/images/icons/Carro.svg new file mode 100644 index 000000000..f11135fcd --- /dev/null +++ b/src/drivers/webextension/images/icons/Carro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/drivers/webextension/images/icons/Celum.svg b/src/drivers/webextension/images/icons/Celum.svg new file mode 100644 index 000000000..7d530da96 --- /dev/null +++ b/src/drivers/webextension/images/icons/Celum.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Chameleon system.png b/src/drivers/webextension/images/icons/Chameleon system.png new file mode 100644 index 000000000..4c6386d22 Binary files /dev/null and b/src/drivers/webextension/images/icons/Chameleon system.png differ diff --git a/src/drivers/webextension/images/icons/Chameleon.png b/src/drivers/webextension/images/icons/Chameleon.png new file mode 100644 index 000000000..2a8dcf4fb Binary files /dev/null and b/src/drivers/webextension/images/icons/Chameleon.png differ diff --git a/src/drivers/webextension/images/icons/ChurnZero.png b/src/drivers/webextension/images/icons/ChurnZero.png new file mode 100644 index 000000000..a8abc9147 Binary files /dev/null and b/src/drivers/webextension/images/icons/ChurnZero.png differ diff --git a/src/drivers/webextension/images/icons/Cloudimage.svg b/src/drivers/webextension/images/icons/Cloudimage.svg new file mode 100644 index 000000000..27a7dd023 --- /dev/null +++ b/src/drivers/webextension/images/icons/Cloudimage.svg @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Conjured.png b/src/drivers/webextension/images/icons/Conjured.png new file mode 100644 index 000000000..9761f0473 Binary files /dev/null and b/src/drivers/webextension/images/icons/Conjured.png differ diff --git a/src/drivers/webextension/images/icons/DPlayer.png b/src/drivers/webextension/images/icons/DPlayer.png new file mode 100644 index 000000000..f7f23d871 Binary files /dev/null and b/src/drivers/webextension/images/icons/DPlayer.png differ diff --git a/src/drivers/webextension/images/icons/DatoCMS.svg b/src/drivers/webextension/images/icons/DatoCMS.svg new file mode 100644 index 000000000..ea29b802e --- /dev/null +++ b/src/drivers/webextension/images/icons/DatoCMS.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Drop A Hint.png b/src/drivers/webextension/images/icons/Drop A Hint.png new file mode 100644 index 000000000..3f84615b6 Binary files /dev/null and b/src/drivers/webextension/images/icons/Drop A Hint.png differ diff --git a/src/drivers/webextension/images/icons/Flowplayer.svg b/src/drivers/webextension/images/icons/Flowplayer.svg new file mode 100644 index 000000000..0dba3d997 --- /dev/null +++ b/src/drivers/webextension/images/icons/Flowplayer.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/GitBook.png b/src/drivers/webextension/images/icons/GitBook.png index 3b7b1894d..bb1f3cbba 100644 Binary files a/src/drivers/webextension/images/icons/GitBook.png and b/src/drivers/webextension/images/icons/GitBook.png differ diff --git a/src/drivers/webextension/images/icons/IPinfo.svg b/src/drivers/webextension/images/icons/IPinfo.svg new file mode 100644 index 000000000..6e4cfc441 --- /dev/null +++ b/src/drivers/webextension/images/icons/IPinfo.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/InMoment.svg b/src/drivers/webextension/images/icons/InMoment.svg new file mode 100644 index 000000000..e0e0c4b1f --- /dev/null +++ b/src/drivers/webextension/images/icons/InMoment.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/Littledata.svg b/src/drivers/webextension/images/icons/Littledata.svg new file mode 100644 index 000000000..468fa6d81 --- /dev/null +++ b/src/drivers/webextension/images/icons/Littledata.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/drivers/webextension/images/icons/MUI.svg b/src/drivers/webextension/images/icons/MUI.svg new file mode 100644 index 000000000..c1969cf78 --- /dev/null +++ b/src/drivers/webextension/images/icons/MUI.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/NagishLi.png b/src/drivers/webextension/images/icons/NagishLi.png new file mode 100644 index 000000000..3147b1ea3 Binary files /dev/null and b/src/drivers/webextension/images/icons/NagishLi.png differ diff --git a/src/drivers/webextension/images/icons/Paloma.svg b/src/drivers/webextension/images/icons/Paloma.svg new file mode 100644 index 000000000..2bbb1ba16 --- /dev/null +++ b/src/drivers/webextension/images/icons/Paloma.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/Qikify.svg b/src/drivers/webextension/images/icons/Qikify.svg new file mode 100644 index 000000000..e96b70284 --- /dev/null +++ b/src/drivers/webextension/images/icons/Qikify.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/React Bricks.svg b/src/drivers/webextension/images/icons/React Bricks.svg new file mode 100644 index 000000000..ffb0b160a --- /dev/null +++ b/src/drivers/webextension/images/icons/React Bricks.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/React.png b/src/drivers/webextension/images/icons/React.png deleted file mode 100644 index da20b6e8a..000000000 Binary files a/src/drivers/webextension/images/icons/React.png and /dev/null differ diff --git a/src/drivers/webextension/images/icons/React.svg b/src/drivers/webextension/images/icons/React.svg new file mode 100644 index 000000000..07c387e96 --- /dev/null +++ b/src/drivers/webextension/images/icons/React.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/Secomapp.png b/src/drivers/webextension/images/icons/Secomapp.png new file mode 100644 index 000000000..20f35a187 Binary files /dev/null and b/src/drivers/webextension/images/icons/Secomapp.png differ diff --git a/src/drivers/webextension/images/icons/Shopapps.png b/src/drivers/webextension/images/icons/Shopapps.png new file mode 100644 index 000000000..b724d37d6 Binary files /dev/null and b/src/drivers/webextension/images/icons/Shopapps.png differ diff --git a/src/drivers/webextension/images/icons/Super Builder.svg b/src/drivers/webextension/images/icons/Super Builder.svg new file mode 100644 index 000000000..fcb15a6a0 --- /dev/null +++ b/src/drivers/webextension/images/icons/Super Builder.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/Tabarnapp.png b/src/drivers/webextension/images/icons/Tabarnapp.png new file mode 100644 index 000000000..e46268d20 Binary files /dev/null and b/src/drivers/webextension/images/icons/Tabarnapp.png differ diff --git a/src/drivers/webextension/images/icons/Thesis.svg b/src/drivers/webextension/images/icons/Thesis.svg new file mode 100644 index 000000000..f70d0d91f --- /dev/null +++ b/src/drivers/webextension/images/icons/Thesis.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/drivers/webextension/images/icons/Threekit.svg b/src/drivers/webextension/images/icons/Threekit.svg new file mode 100644 index 000000000..428831cf9 --- /dev/null +++ b/src/drivers/webextension/images/icons/Threekit.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/drivers/webextension/images/icons/UptimeRobot.svg b/src/drivers/webextension/images/icons/UptimeRobot.svg new file mode 100644 index 000000000..43630f943 --- /dev/null +++ b/src/drivers/webextension/images/icons/UptimeRobot.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/Userflow.svg b/src/drivers/webextension/images/icons/Userflow.svg new file mode 100644 index 000000000..70b080614 --- /dev/null +++ b/src/drivers/webextension/images/icons/Userflow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/Userpilot.svg b/src/drivers/webextension/images/icons/Userpilot.svg new file mode 100644 index 000000000..da313c6c0 --- /dev/null +++ b/src/drivers/webextension/images/icons/Userpilot.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/Virtooal.svg b/src/drivers/webextension/images/icons/Virtooal.svg new file mode 100644 index 000000000..8762844e2 --- /dev/null +++ b/src/drivers/webextension/images/icons/Virtooal.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/Visely.svg b/src/drivers/webextension/images/icons/Visely.svg new file mode 100644 index 000000000..448efccca --- /dev/null +++ b/src/drivers/webextension/images/icons/Visely.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/drivers/webextension/images/icons/Vue.ai.svg b/src/drivers/webextension/images/icons/Vue.ai.svg index 6bd17c905..8d9159dd1 100644 --- a/src/drivers/webextension/images/icons/Vue.ai.svg +++ b/src/drivers/webextension/images/icons/Vue.ai.svg @@ -1 +1,108 @@ -Vue.ai \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Vuetify.svg b/src/drivers/webextension/images/icons/Vuetify.svg index 15bbf3b98..675b8e72d 100644 --- a/src/drivers/webextension/images/icons/Vuetify.svg +++ b/src/drivers/webextension/images/icons/Vuetify.svg @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/src/drivers/webextension/images/icons/Wakav Performance Monitoring.png b/src/drivers/webextension/images/icons/Wakav Performance Monitoring.png new file mode 100644 index 000000000..f63fae49d Binary files /dev/null and b/src/drivers/webextension/images/icons/Wakav Performance Monitoring.png differ diff --git a/src/drivers/webextension/images/icons/Whatfix.png b/src/drivers/webextension/images/icons/Whatfix.png deleted file mode 100644 index 679118239..000000000 Binary files a/src/drivers/webextension/images/icons/Whatfix.png and /dev/null differ diff --git a/src/drivers/webextension/images/icons/Whatfix.svg b/src/drivers/webextension/images/icons/Whatfix.svg new file mode 100644 index 000000000..89e04aedd --- /dev/null +++ b/src/drivers/webextension/images/icons/Whatfix.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/drivers/webextension/images/icons/datocms.svg b/src/drivers/webextension/images/icons/datocms.svg deleted file mode 100644 index efc30b36c..000000000 --- a/src/drivers/webextension/images/icons/datocms.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/demandbase.svg b/src/drivers/webextension/images/icons/demandbase.svg new file mode 100644 index 000000000..1389b30ea --- /dev/null +++ b/src/drivers/webextension/images/icons/demandbase.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/langify.png b/src/drivers/webextension/images/icons/langify.png new file mode 100644 index 000000000..f61603f97 Binary files /dev/null and b/src/drivers/webextension/images/icons/langify.png differ diff --git a/src/drivers/webextension/images/icons/trove.png b/src/drivers/webextension/images/icons/trove.png new file mode 100644 index 000000000..620d1ed49 Binary files /dev/null and b/src/drivers/webextension/images/icons/trove.png differ diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index ff59826e0..81c541f3f 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Wappalyzer", "homepage_url": "https://www.wappalyzer.com/", "description": "Identify web technologies", - "version": "6.10.17", + "version": "6.10.18", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/src/package.json b/src/package.json index 72414c4d8..9d915e690 100644 --- a/src/package.json +++ b/src/package.json @@ -13,7 +13,7 @@ "software" ], "homepage": "https://www.wappalyzer.com/", - "version": "6.10.17", + "version": "6.10.18", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/technologies/a.json b/src/technologies/a.json index 556fea007..2479e75e8 100644 --- a/src/technologies/a.json +++ b/src/technologies/a.json @@ -307,6 +307,23 @@ "saas": true, "website": "https://abicart.com/" }, + "Accentuate Custom Fields": { + "cats": [ + 100 + ], + "description": "Accentuate Custom Fields is the professional and de facto solution to easily extend your Shopify store with your own custom fields such multi-language text fields, images, checkboxes, dates, selection list and custom JSON objects.", + "dom": "a[style*='.accentuate.io/'], a[data-bg*='.accentuate.io/'], div[style*='.accentuate.io/'], img[src*='.accentuate.io/'], img[data-src*='.accentuate.io/']", + "icon": "Accentuate Custom Fields.png", + "pricing": [ + "freemium", + "mid", + "recurring" + ], + "requires": "Shopify", + "saas": true, + "scripts": "\\.accentuate\\.io/", + "website": "https://www.accentuate.io" + }, "AccessTrade": { "cats": [ 71 @@ -2571,6 +2588,19 @@ "saas": true, "website": "https://g6.antv.vision" }, + "Antsomi CDP 365": { + "cats": [ + 97 + ], + "description": "Antsomi CDP 365 is a AI-enabled customer data platform from Southeast Asia.", + "icon": "Antsomi.svg", + "pricing": [ + "poa" + ], + "saas": true, + "scriptSrc": "\\.cdp\\.asia/", + "website": "https://www.antsomi.com" + }, "AnyClip": { "cats": [ 36 @@ -3705,6 +3735,25 @@ "implies": "Azure", "website": "https://azure.microsoft.com/en-us/services/cdn/" }, + "Azure Monitor": { + "cats": [ + 10, + 92 + ], + "description": "Azure Monitor collects monitoring telemetry from a variety of on-premises and Azure sources. Azure Monitor helps you maximise the availability and performance of your applications and services.", + "dom": "link[href*='js.monitor.azure.com']", + "headers": { + "Content-Security-Policy": "js\\.monitor\\.azure\\.com" + }, + "icon": "azure.svg", + "implies": "Azure", + "pricing": [ + "payg" + ], + "saas": true, + "scriptSrc": "js\\.monitor\\.azure\\.com/", + "website": "https://azure.microsoft.com/en-us/services/monitor" + }, "a-blog cms": { "cats": [ 1 diff --git a/src/technologies/b.json b/src/technologies/b.json index 380bac78e..072f5df1e 100644 --- a/src/technologies/b.json +++ b/src/technologies/b.json @@ -80,6 +80,22 @@ }, "website": "https://www.bablic.com/" }, + "Back In Stock": { + "cats": [ + 100 + ], + "description": "Back In Stock lets your customers choose restock alerts for specific variant combinations, including size, colour or style.", + "icon": "Back In Stock.png", + "pricing": [ + "freemium", + "low", + "recurring" + ], + "requires": "Shopify", + "saas": true, + "scriptSrc": "app\\.backinstock\\.org/", + "website": "https://backinstock.org" + }, "Backbone.js": { "cats": [ 12 diff --git a/src/technologies/c.json b/src/technologies/c.json index 630e6db12..55286a908 100644 --- a/src/technologies/c.json +++ b/src/technologies/c.json @@ -113,19 +113,19 @@ 6 ], "description": "CS Cart is a turnkey ecommerce shopping cart software solution.", + "dom": "a[href*='.cs-cart.com'][target='_blank']", "icon": "CS Cart.svg", "implies": "PHP", - "dom": "a[href*='.cs-cart.com'][target='_blank']", "js": { - "fn_compare_strings": "", "fn_buy_together_apply_discount": "", - "fn_calculate_total_shipping": "" + "fn_calculate_total_shipping": "", + "fn_compare_strings": "" }, - "scriptSrc": "var/cache/misc/assets/js/tygh/scripts-(?:[\\d\\w]+)\\.js", "pricing": [ "mid", "onetime" ], + "scriptSrc": "var/cache/misc/assets/js/tygh/scripts-(?:[\\d\\w]+)\\.js", "website": "http://www.cs-cart.com" }, "CSSIgniter Olsen Light": { @@ -391,10 +391,10 @@ "_carbonads": "", "_carbonads_go": "" }, - "saas": true, "pricing": [ "payg" ], + "saas": true, "scriptSrc": "\\.carbonads\\.com/", "website": "http://carbonads.net" }, @@ -436,16 +436,35 @@ "description": "Cargo is a professional site building platform for designers and artists.", "icon": "Cargo.svg", "implies": "PHP", - "meta": { - "cargo_title": "" - }, "js": { "Cargo.Config": "", "__cargo_js_ver__": "" }, + "meta": { + "cargo_title": "" + }, "scriptSrc": "/cargo\\.", "website": "https://cargo.site" }, + "Carro": { + "cats": [ + 100 + ], + "description": "Carro connects participating Shopify stores together to enable cross-store selling or the ability for like-minded partners to directly sell each other products without the need for inventory, managing returns, or minimum order quantities.", + "icon": "Carro.svg", + "pricing": [ + "freemium", + "low", + "recurring" + ], + "requires": "Shopify", + "saas": true, + "scriptSrc": [ + "\\.getcarro\\.com/", + "/carro\\.min\\.js(?:\\?ver=(\\d+(?:\\.\\d+)+))?\\;version:\\1" + ], + "website": "https://getcarro.com" + }, "Cart Functionality": { "cats": [ 6 @@ -577,6 +596,21 @@ ], "website": "https://celeritastransporte.com" }, + "Celum": { + "cats": [ + 95 + ], + "description": "Celum is a software developer that specialises in enterprise digital asset management and marketing content management systems.", + "dom": "img[src*='/celum/'], img[src*='/celum_assets/']", + "icon": "Celum.svg", + "pricing": [ + "freemium", + "low", + "recurring" + ], + "saas": true, + "website": "https://www.celum.com" + }, "Censhare": { "cats": [ 95 @@ -646,16 +680,50 @@ "scriptSrc": "\\.chakra-ui\\.", "website": "https://chakra-ui.com" }, + "Chameleon": { + "cats": [ + 58 + ], + "description": "Chameleon is a sophisticated no-code platform for product success, empowering SaaS teams to build self-service user onboarding, feature adoption, and feedback collection.", + "icon": "Chameleon.png", + "js": { + "chmln.Snippet.urls.fast": "fast\\.trychameleon\\.com", + "chmlnData.organizationAttributes": "" + }, + "pricing": [ + "mid", + "recurring" + ], + "saas": true, + "scriptSrc": "\\.trychameleon\\.com/", + "website": "https://www.trychameleon.com" + }, + "Chameleon system": { + "cats": [ + 1, + 6 + ], + "description": "Chameleon system is an ecommerce and content management system all-in-one, capable of being integrated straight from the manufacturer.", + "icon": "Chameleon system.png", + "meta": { + "generator": "Chameleon CMS/Shop System" + }, + "pricing": [ + "poa" + ], + "saas": true, + "website": "https://www.chameleon-system.de" + }, "Chamilo": { "cats": [ 21 ], "cpe": "cpe:/a:chamilo:chamilo_lms", "description": "Chamilo is an open-source learning management and collaboration system.", + "dom": "link[href*='chamilo.org/']", "headers": { "X-Powered-By": "Chamilo ([\\d.]+)\\;version:\\1" }, - "dom": "link[href*='chamilo.org/']", "icon": "Chamilo.png", "implies": "PHP", "meta": { @@ -870,18 +938,18 @@ "description": "Chevereto is an image hosting software that allows you to create a full-featured image hosting website on your own server.", "icon": "Chevereto.svg", "implies": "PHP", - "meta": { - "generator": "Chevereto\\s(?:[\\d\\.]+)" - }, "js": { "CHEVERETO.version": "([\\d\\.]+)\\;version:\\1" }, - "scriptSrc": "/chevereto\\.js", - "saas": true, + "meta": { + "generator": "Chevereto\\s(?:[\\d\\.]+)" + }, "pricing": [ "low", "onetime" ], + "saas": true, + "scriptSrc": "/chevereto\\.js", "website": "https://chevereto.com" }, "Chili Piper": { @@ -943,21 +1011,21 @@ "cats": [ 1 ], - "description": "Chorus is the only all-in-one publishing, audience, and revenue platform built for modern media companies.", "cookies": { - "chorus_preferences": "", - "_chorus_geoip_continent": "" + "_chorus_geoip_continent": "", + "chorus_preferences": "" }, + "description": "Chorus is the only all-in-one publishing, audience, and revenue platform built for modern media companies.", "icon": "Chorus.svg", "js": { "Chorus.AddScript": "", "ChorusAds.beforeAdsRequested": "", "ChorusCampaigns.recordClickUrl": "" }, - "saas": true, "pricing": [ "poa" ], + "saas": true, "website": "https://getchorus.voxmedia.com" }, "Chronofresh": { @@ -984,6 +1052,22 @@ ], "website": "https://www.chronopost.fr" }, + "ChurnZero": { + "cats": [ + 97 + ], + "description": "ChurnZero is a real-time customer success platform that helps subscription businesses fight customer churn.", + "icon": "ChurnZero.png", + "js": { + "ChurnZero": "", + "ChurnZero.version": "([\\d\\.]+)\\;version:\\1" + }, + "pricing": [ + "poa" + ], + "saas": true, + "website": "https://churnzero.net" + }, "CitrusPay": { "cats": [ 41 @@ -1034,9 +1118,9 @@ 66 ], "description": "Clarity is an open-source design system that brings together UX guidelines, an HTML/CSS framework, and Angular components.", + "dom": "link[href*='clr-ui'], clr-main-container", "icon": "clarity.svg", "implies": "Angular", - "dom": "link[href*='clr-ui'], clr-main-container", "js": { "ClarityIcons": "" }, @@ -1176,18 +1260,18 @@ ], "description": "Clickfunnels is an online sales funnel builder that helps businesses market, sell, and deliver their products online.", "icon": "ClickFunnels.svg", - "meta": { - "cf:app_domain:": "app\\.clickfunnels\\.com" - }, "js": { "CFAppDomain": "app\\.clickfunnels\\.com", "CFSurveyParticipantID": "" }, - "saas": true, + "meta": { + "cf:app_domain:": "app\\.clickfunnels\\.com" + }, "pricing": [ "mid", "recurring" ], + "saas": true, "website": "https://www.clickfunnels.com" }, "ClickHeat": { @@ -1375,6 +1459,25 @@ "icon": "CloudFlare.svg", "website": "https://developers.cloudflare.com/logs/reference/log-fields/zone/nel_reports" }, + "Cloudimage": { + "cats": [ + 31, + 95 + ], + "description": "Cloudimage automates the transformation and optimisation of images on the fly and accelerates their distribution via the Content Delivery Network (CDN).", + "dom": "img[src*='.cloudimg.io/'], link[href*='.cloudimg.io/'], amp-img[src*='.cloudimg.io/']", + "icon": "Cloudimage.svg", + "js": { + "ciResponsive.config.domain": "cloudimg\\.io" + }, + "pricing": [ + "freemium", + "payg", + "recurring" + ], + "saas": true, + "website": "https://www.cloudimage.io" + }, "Cloudinary": { "cats": [ 31, @@ -1567,8 +1670,8 @@ 56 ], "description": "Coinhive Captcha provides captcha service that is simple to integrate, where your users’ devices need to solve a number of hashes, adjustable by you, in order to login or post a comment to your site.", - "icon": "CoinHive.svg", "dom": "div.coinhive-captcha", + "icon": "CoinHive.svg", "scriptSrc": "https?://authedmine\\.com/(?:lib/captcha|captcha)", "website": "https://coinhive.com" }, @@ -1764,12 +1867,12 @@ 76 ], "description": "Combeenation is a powerful cloud-based configurator platform.", - "icon": "Combeenation.png", "dom": "iframe[src*='portal.combeenation.com/']", - "saas": true, + "icon": "Combeenation.png", "pricing": [ "poa" ], + "saas": true, "website": "https://www.combeenation.com" }, "Comm100": { @@ -1922,6 +2025,20 @@ ], "website": "https://conekta.com" }, + "Conjured": { + "cats": [ + 100 + ], + "description": "Conjured provides Shopify brands with Shopify apps and custom development.", + "icon": "Conjured.png", + "pricing": [ + "recurring", + "mid" + ], + "saas": true, + "scriptSrc": "app\\.conjured\\.co/", + "website": "https://conjured.co" + }, "Constant Contact": { "cats": [ 32, @@ -2410,11 +2527,11 @@ "js": { "Comandia": "" }, - "scriptSrc": "\\.mycorreosecommerce\\.com/", - "saas": true, "pricing": [ "poa" ], + "saas": true, + "scriptSrc": "\\.mycorreosecommerce\\.com/", "website": "https://www.correosecommerce.com" }, "Cosmoshop": { @@ -2493,11 +2610,11 @@ "description": "CoverManager is a restaurant table booking widget.", "dom": "iframe[src*='.covermanager.com/']", "icon": "CoverManager.svg", - "saas": true, - "scriptSrc": "\\.covermanager\\.com/", "pricing": [ "poa" ], + "saas": true, + "scriptSrc": "\\.covermanager\\.com/", "website": "https://www.covermanager.com" }, "Covet.pics": { @@ -2836,13 +2953,13 @@ ], "cpe": "cpe:/a:cubecart:cubecart", "description": "CubeCart is a free ecommerce platform that businesses can use to build, manage, and market their online stores.", + "dom": "a[href*='.cubecart.com'][target='_blank']", "icon": "CubeCart.png", "implies": "PHP", - "oss": true, - "dom": "a[href*='.cubecart.com'][target='_blank']", "meta": { "generator": "cubecart" }, + "oss": true, "website": "http://www.cubecart.com" }, "Cubyn": { @@ -3044,19 +3161,19 @@ 10 ], "description": "comScore is an American media measurement and analytics company providing marketing data and analytics to enterprises; media and advertising agencies; and publishers.", + "dom": "iframe[src*='.scorecardresearch.com/beacon'], iframe#comscore, iframe[src*='COMSCORE.beacon]", "icon": "comScore.svg", - "dom":"iframe[src*='.scorecardresearch.com/beacon'], iframe#comscore, iframe[src*='COMSCORE.beacon]", "js": { "COMSCORE": "", "_COMSCORE": "" }, - "scriptSrc": "\\.scorecardresearch\\.com/beacon\\.js|COMSCORE\\.beacon", - "saas": true, "pricing": [ "freemium", "mid", "recurring" ], + "saas": true, + "scriptSrc": "\\.scorecardresearch\\.com/beacon\\.js|COMSCORE\\.beacon", "website": "http://comscore.com" }, "commercelayer": { diff --git a/src/technologies/d.json b/src/technologies/d.json index 9e6653570..3aa497184 100644 --- a/src/technologies/d.json +++ b/src/technologies/d.json @@ -59,7 +59,8 @@ "cats": [ 1 ], - "html": "<(?:link [^>]*href|img [^>]*src)=\"/polopoly_fs/", + "description": "DM Polopoly is a web content management solution focused on enhancing the user experience built by Atex.", + "dom": "img[data-src*='/polopoly_fs/'], link[href*='/polopoly_fs/'], img[src*='/polopoly_fs/']", "icon": "DM Polopoly.png", "implies": "Java", "website": "http://www.atex.com/products/dm-polopoly" @@ -109,6 +110,19 @@ ], "website": "https://www.dpd.com" }, + "DPlayer": { + "cats": [ + 14 + ], + "description": "DPlayer is an HTML 5 video player that supports pop-up.", + "icon": "DPlayer.png", + "js": { + "DPlayer": "", + "DPlayer.version": "([\\d\\.]+)\\;version:\\1" + }, + "oss": true, + "website": "https://dplayer.js.org" + }, "DTScout": { "cats": [ 36 @@ -248,16 +262,18 @@ "cats": [ 27 ], + "description": "Dart is an open-source, general-purpose, object-oriented programming language with C-style syntax developed by Google in 2011.", + "dom": "script[type='application/dart']", "excludes": [ "Angular", "AngularJS" ], - "html": "/(?:]+(?:type=\"application/dart\")/", "icon": "Dart.svg", "js": { "___dart__$dart_dartObject_ZxYxX_0_": "", "___dart_dispatch_record_ZxYxX_0_": "" }, + "oss": true, "scriptSrc": [ "/(?:\\.)?(?:dart)(?:\\.js)?/", "packages/browser/dart\\.js" @@ -353,8 +369,17 @@ "cats": [ 1 ], - "html": "<[^>]+https://www\\.datocms-assets\\.com", - "icon": "datocms.svg", + "description": "DatoCMS is a cloud-based headless Content as a service (CaaS) platform created to work with static websites, mobile apps and server-side applications of any kind.", + "dom": "link[href*='datocms-assets.com'], img[src*='datocms-assets.com'], source[src*='datocms-assets.com'], div[style*='datocms-assets.com']", + "headers": { + "content-security-policy": "\\.datocms-assets\\.com" + }, + "icon": "DatoCMS.svg", + "pricing": [ + "freemium", + "mid", + "recurring" + ], "website": "https://www.datocms.com" }, "Day.js": { @@ -439,6 +464,25 @@ ], "website": "https://mydelivengo.laposte.fr/" }, + "Demandbase": { + "cats": [ + 10, + 76 + ], + "description": "Demandbase is a targeting and personalization platform for business-to-business companies.", + "icon": "demandbase.svg", + "js": { + "Demandbase": "", + "Demandbase.version": "^(.+)$\\;version:\\1" + }, + "pricing": [ + "high", + "poa" + ], + "saas": true, + "scriptSrc": "tag.demandbase.com", + "website": "https://www.demandbase.com" + }, "Detectify": { "cats": [ 16 @@ -642,13 +686,17 @@ ], "cpe": "cpe:/a:disqus:disqus_comment_system", "description": "Disqus is a worldwide blog comment hosting service for web sites and online communities that use a networked platform.", - "html": "]+id=\"disqus_thread\"", + "dom": "div#disqus_thread", "icon": "Disqus.svg", "js": { "DISQUS": "", "disqus_shortname": "", "disqus_url": "" }, + "pricing": [ + "low", + "recurring" + ], "scriptSrc": "disqus_url", "website": "https://disqus.com" }, @@ -877,16 +925,17 @@ "DokuWiki": "" }, "cpe": "cpe:/a:dokuwiki:dokuwiki", - "description": "DokuWiki is a Free open-source wiki software.", - "html": [ - "]+id=\"dokuwiki__>", - "]+href=\"#dokuwiki__" - ], + "description": "DokuWiki is a free open-source wiki software.", "icon": "DokuWiki.png", "implies": "PHP", + "js": { + "DOKU_TPL": "\\;confidence:50", + "doku_edit_text_content": "\\;confidence:50" + }, "meta": { "generator": "^DokuWiki( Release [\\d-]+)?\\;version:\\1" }, + "oss": true, "website": "https://www.dokuwiki.org" }, "DomainFactory": { @@ -1133,6 +1182,25 @@ "saas": true, "website": "https://www.drift.com/" }, + "Drop A Hint": { + "cats": [ + 100 + ], + "description": "Drop A Hint is an Shopify app which help share hints via email, SMS, WhatsApp and messengers.", + "icon": "Drop A Hint.png", + "js": { + "DropAHint.BaseURL": "dropahint\\.love/", + "dropAHintTypeProduct": "" + }, + "pricing": [ + "payg", + "low", + "recurring" + ], + "requires": "Shopify", + "saas": true, + "website": "https://apps.shopify.com/drop-a-hint-v2" + }, "Dropbox": { "cats": [ 95 @@ -1234,14 +1302,17 @@ "cats": [ 1, 11, - 51, - 53 + 51 ], "description": "Duopana is a platform for creating online communities, blogs and managing collaborative content.", - "html": "(?: