Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
299 commits
Select commit Hold shift + click to select a range
d93629b
Fix jquery definition misidentifying popupoverlay
geoff-rmtech Oct 13, 2025
c953ae5
Merge pull request #215 from geoff-rmtech/fix-jquery-definition-misid…
enthec-opensource Oct 13, 2025
9201e8f
Fix regex performance
Zalaxx Oct 28, 2025
afb21dc
Merge pull request #216 from Zalaxx/main
enthec-opensource Oct 28, 2025
f71b226
Merge pull request #212 from BharatPrakas/main
enthec-opensource Nov 18, 2025
24f9aa8
Additions from HTTPArchive
kingthorin Nov 18, 2025
a1bafd4
Fix Google Font API website URL
nafiul09 Nov 20, 2025
0016640
Merge pull request #217 from kingthorin/http-arch-additions
enthec-opensource Nov 24, 2025
e3cdd2e
Merge pull request #219 from nafiul09/fix/google-font-api-website-url
enthec-opensource Nov 24, 2025
185bfa2
random fixes & cleanup
enthec-opensource Nov 24, 2025
5503dc4
Merge pull request #220 from enthec/fixes
enthec-opensource Nov 24, 2025
97fe28c
Merge remote-tracking branch 'origin/main' into sync
enthec-opensource Nov 24, 2025
7316fe9
tech resync
enthec-opensource Nov 24, 2025
5d6c85a
fixes
enthec-opensource Nov 24, 2025
7b569be
replaced icons
enthec-opensource Nov 24, 2025
ffbe655
Merge pull request #221 from enthec/sync
enthec-opensource Nov 26, 2025
de3fe03
Update next.js vendor
geoff-rmtech Dec 8, 2025
cd3eec4
Merge pull request #222 from geoff-rmtech/update-next-js-vendor
enthec-opensource Dec 8, 2025
cfd5a3c
Correct confidence and version tags (zenbasket and pubtech)
kingthorin Dec 17, 2025
4361051
Merge pull request #224 from kingthorin/conf-vers-fix
enthec-opensource Dec 17, 2025
4e9537e
schema: Set dialect, lint and validate data files
kingthorin Dec 29, 2025
efefd1e
Merge pull request #226 from kingthorin/schema-dialect
enthec-opensource Dec 30, 2025
be9c66d
more validators
enthec-opensource Dec 30, 2025
b84c993
Merge pull request #227 from enthec/validations
enthec-opensource Dec 30, 2025
88235a0
Update USPS reference in u.json
melvinsh Jan 23, 2026
af4e965
Add header element for websocket tech
kingthorin Jan 24, 2026
3015c89
add and update techs
kingthorin Jan 27, 2026
206fad7
Merge pull request #228 from melvinsh/main
enthec-opensource Jan 27, 2026
7f2fab0
Merge pull request #229 from kingthorin/ws-header
enthec-opensource Jan 27, 2026
1674248
Merge pull request #230 from kingthorin/new-entries
enthec-opensource Jan 27, 2026
b5c90b0
Fix Supabase.svg/supabase.svg collision
kingthorin Jan 27, 2026
0548ff7
Combine entries
kingthorin Jan 27, 2026
5ef6c4d
Merge pull request #231 from kingthorin/fix-name-collision
enthec-opensource Jan 27, 2026
8b48f2d
sort tech files - add sorting and duplication checks
kingthorin Jan 27, 2026
4712278
chore: add Dependabot config for GitHub Actions
kingthorin Feb 9, 2026
8f55a7a
Update workflows
kingthorin Feb 9, 2026
fa9b08e
Merge pull request #234 from kingthorin/update-workflows-dependencies
enthec-opensource Feb 17, 2026
d1e5357
Merge pull request #232 from kingthorin/sorting
enthec-opensource Feb 17, 2026
71c2088
chore(deps): bump actions/checkout from 4 to 6
dependabot[bot] Feb 17, 2026
73cd9d7
Merge pull request #235 from enthec/dependabot/github_actions/actions…
enthec-opensource Feb 17, 2026
44c1f61
tech resync
enthec-opensource Feb 17, 2026
6a4e4c0
Merge branch 'main' into sync
enthec-opensource Feb 17, 2026
9fb95c3
Merge pull request #236 from enthec/sync
enthec-opensource Feb 19, 2026
f013713
feat: add detection patterns for Shopware versions 6.5 to 6.8
roman-1983 Feb 20, 2026
2b4e98c
feat: add detection patterns for Shopware versions 6.5 to 6.8
roman-1983 Feb 20, 2026
e6a005a
chore(deps): bump actions/setup-python from 5 to 6
dependabot[bot] Feb 24, 2026
df1b69d
Merge pull request #237 from roman-1983/main
enthec-opensource Feb 24, 2026
9c8fab8
Merge pull request #238 from enthec/dependabot/github_actions/actions…
enthec-opensource Feb 24, 2026
ed18eae
Improve PrestaShop detection
louisbels Mar 2, 2026
1816b64
Fix scriptSrc to use array format
louisbels Mar 2, 2026
4ddc28d
feat(Cosmoshop): improve detection patterns
roman-1983 Mar 5, 2026
db6fba6
fix(Cosmoshop): use array type for url field
roman-1983 Mar 5, 2026
e6067f1
Merge pull request #239 from louisbels/improve-prestashop-detection
enthec-opensource Mar 5, 2026
a8ac0ec
Merge pull request #240 from roman-1983/main
enthec-opensource Mar 5, 2026
67dde50
Add DressOn and Wx3 technology detection
lwdudu Mar 17, 2026
4a54986
Fix Wx3 html field to be array type
lwdudu Mar 17, 2026
cd2a64f
Merge pull request #241 from lwdudu/add-dresson-and-wx3
enthec-opensource Mar 17, 2026
c39fd32
Add Norse Env CMS detection
Mar 18, 2026
0606bb0
fix: narrow jQuery scriptSrc pattern to avoid fancybox paths
orlove Mar 26, 2026
e258fa2
add sourcey detection
auscaster Mar 30, 2026
e987ce7
Merge pull request #245 from auscaster/add-sourcey
enthec-opensource Mar 30, 2026
075efa9
Merge pull request #243 from orlove/fix/jquery-regex-fancybox-false-p…
enthec-opensource Mar 30, 2026
f570e08
Merge pull request #242 from brunoisozaki14/feat/add-norse-env
enthec-opensource Mar 30, 2026
52d1a4b
Add files via upload
morhansa Apr 15, 2026
a2c1093
Delete src/technologies/r.json
morhansa Apr 15, 2026
be181eb
Add files via upload
morhansa Apr 15, 2026
e66ec18
Delete src/drivers/webextension/images/icons/Rofofk.svg
morhansa Apr 16, 2026
c1f6285
Add files via upload
morhansa Apr 16, 2026
c2855b4
Merge pull request #250 from morhansa/main
enthec-opensource Apr 17, 2026
2e1cd86
Add definitions for turnstile wordpress plugin
geoff-rmtech Apr 29, 2026
b6d0a03
Add Adwos CMS fingerprint
May 15, 2026
056cef5
Add MVD Studio platform
May 17, 2026
3ebdc41
Add Angular Notitia toast notification library to technologies list
klajdm May 28, 2026
e0d0c8a
Added detection for WebAdministrator CMS
snicket2100 May 29, 2026
796eaac
Add VertaFlow (Analytics, Booking, Chat, Forms) technologies
Designed-By-Anthony Jun 2, 2026
bd5e7af
add Workplace by Meta and LogMeIn DNS detection
Jun 5, 2026
b1c1eb0
add n8n detection
Jun 5, 2026
75d6267
add script body fingerprints for n8n
Jun 5, 2026
de1b1c2
narrow n8n script fingerprints to verified client-side strings
Jun 5, 2026
fbc7cf5
Add SkyCMS (by Netkoncept) detection
snicket2100 Jun 5, 2026
36153bb
Merge pull request #260 from cristianovisk/feat/add-n8n-detection
enthec-opensource Jun 9, 2026
c7c22ed
Merge pull request #259 from cristianovisk/feat/workplace-logmein-dns…
enthec-opensource Jun 9, 2026
d72b46b
Merge pull request #258 from snicket2100/skycms-added
enthec-opensource Jun 9, 2026
2fdfb20
Merge pull request #257 from Designed-By-Anthony/add-vertaflow-techno…
enthec-opensource Jun 9, 2026
d9b2724
Merge pull request #256 from snicket2100/webadministrator-cms-added
enthec-opensource Jun 9, 2026
9cc2fd5
Merge pull request #255 from klajdm/feat/ngx-notitia
enthec-opensource Jun 9, 2026
5c0d64e
Merge pull request #254 from martinsantamaria19/add-mvd-studio
enthec-opensource Jun 9, 2026
81c02d6
Merge pull request #252 from geoff-rmtech/feature/add-definition-for-…
enthec-opensource Jun 9, 2026
5418d2a
Merge pull request #253 from makar-savchuk/feat/adwos-cms
enthec-opensource Jun 9, 2026
3c8b3c1
feat: add KRT CDN technology detection and logo icon.
rajtilak-2020 Jun 12, 2026
380d149
add Anthropic detection via domain verification TXT record
Jun 22, 2026
ff72bca
add "Artificial Intelligence" category and assign Anthropic to it
Jun 22, 2026
2612370
add Cursor detection via domain verification TXT record
Jun 22, 2026
93e7527
add DNS TXT detection and AI category to Lovable
Jun 22, 2026
27c0b0c
add Windsurf and Zapier detection via domain verification TXT records
Jun 22, 2026
d4e4203
Merge pull request #261 from rajtilak-2020/main
enthec-opensource Jun 23, 2026
6520775
Add KaliCart Bridge information to k.json
giuseppesocci-bot Jun 23, 2026
e438481
fix Cursor, Windsurf and Zapier icons to match official logos
Jun 23, 2026
0d5f00c
use official Windsurf and Zapier brand logos
Jun 23, 2026
0200282
Merge pull request #263 from cristianovisk/feat/add-anthropic-detection
enthec-opensource Jun 23, 2026
3ec6114
Add KaliCart Bridge information to k.json
giuseppesocci-bot Jun 23, 2026
f98b70b
chore(deps): bump actions/checkout from 6 to 7
dependabot[bot] Jun 23, 2026
38c617f
Merge pull request #265 from enthec/dependabot/github_actions/actions…
enthec-opensource Jun 23, 2026
be8d61a
Merge pull request #264 from giuseppesocci-bot/main
enthec-opensource Jun 23, 2026
0bca220
add DNS TXT detection to Notion
Jun 24, 2026
04faf24
Merge pull request #266 from cristianovisk/feat/add-notion-txt-detection
enthec-opensource Jun 24, 2026
cb77239
Add VertaFlow technology
Designed-By-Anthony Jun 30, 2026
4eb2020
Merge pull request #267 from Designed-By-Anthony/codex/add-vertaflow-…
enthec-opensource Jul 1, 2026
5d2df34
Add Cartline (ecommerce platform)
Jul 9, 2026
60e273c
Merge pull request #268 from syedzac/add-cartline
enthec-opensource Jul 9, 2026
c5e4d5d
fix: prevent substring false positive in dc.js scriptSrc
sybioo Jul 11, 2026
770ee00
fix: prevent substring false positive in Bootstrap scriptSrc
sybioo Jul 11, 2026
345fb11
Merge pull request #269 from sybioo/main
enthec-opensource Jul 15, 2026
14e3036
chore(deps): bump actions/setup-python from 6 to 7
dependabot[bot] Jul 21, 2026
c45b9b6
Add Commercy
Jul 24, 2026
8cae6a0
Remove incorrect scriptSrc from Clickbank (points to Rewardful's domain)
sybioo Jul 26, 2026
530dfd8
Merge pull request #272 from sybioo/main
enthec-opensource Jul 27, 2026
5250f1f
Merge pull request #271 from KonixDev/add-commercy
enthec-opensource Jul 27, 2026
fb661c5
Add SmartFront (ecommerce frontend) detection
rtsehynka Jul 31, 2026
b4cd16a
Add SmartFront icon
rtsehynka Jul 31, 2026
ddd1f5a
Add Verificado
titin90 Aug 3, 2026
1b0efdc
Merge pull request #275 from titin90/add-verificado
enthec-opensource Aug 4, 2026
d6849de
Merge pull request #274 from rtsehynka/patch-1
enthec-opensource Aug 4, 2026
c68abc6
Merge pull request #270 from enthec/dependabot/github_actions/actions…
enthec-opensource Aug 4, 2026
79fcb28
Add LogaTech (LogaCore) fingerprint
zalar2202 Aug 6, 2026
a4d69f7
Simplify to 'LogaTech' and use the real brand icon
zalar2202 Aug 9, 2026
929b803
Add dns.TXT fingerprints to Canva, Microsoft 365 and TeamViewer
cristianovisk Aug 11, 2026
7773ce9
Add five SaaS technologies detectable by dns.TXT verification records
cristianovisk Aug 11, 2026
3afb8eb
Merge pull request #278 from cristianovisk/feat/dns-txt-new-saas-entries
enthec-opensource Aug 11, 2026
0192180
Merge pull request #277 from cristianovisk/feat/dns-txt-existing-techs
enthec-opensource Aug 11, 2026
d2719d7
Merge pull request #276 from zalar2202/add-logatech-fingerprint
enthec-opensource Aug 11, 2026
9d5ab8f
Add dns.TXT fingerprints to Cloudflare, Dynatrace and Salesforce
cristianovisk Aug 11, 2026
e66a703
Add Adobe, IBM and Yahoo entries detectable by dns.TXT
cristianovisk Aug 11, 2026
a1a63e6
Add six SaaS technologies detectable by dns.TXT verification records
cristianovisk Aug 11, 2026
e34edaa
Add five more SaaS technologies detectable by dns.TXT verification re…
cristianovisk Aug 11, 2026
050be6f
Add Zoom's second verification token shape
cristianovisk Aug 11, 2026
e0bc3fb
Add the Amazon SES verification token to Amazon SES
cristianovisk Aug 11, 2026
23dbc70
Add dns.TXT fingerprints to seven existing technologies
cristianovisk Aug 11, 2026
98f821e
Add Meta and Postman entries detectable by dns.TXT
cristianovisk Aug 11, 2026
f64f22f
Add eight SaaS technologies detectable by dns.TXT verification records
cristianovisk Aug 11, 2026
f3be587
Add Parallels and HPE GreenLake entries detectable by dns.TXT
cristianovisk Aug 11, 2026
9af3d72
Merge pull request #284 from cristianovisk/feat/dns-txt-five-vendor-e…
enthec-opensource Aug 11, 2026
084e121
Merge pull request #285 from cristianovisk/feat/dns-txt-round3-existing
enthec-opensource Aug 11, 2026
d146612
Merge pull request #286 from cristianovisk/feat/dns-txt-round3-meta-p…
enthec-opensource Aug 11, 2026
3826d0b
Merge pull request #287 from cristianovisk/feat/dns-txt-round3-eight-…
enthec-opensource Aug 11, 2026
8674001
Merge pull request #288 from cristianovisk/feat/dns-txt-round3-parall…
enthec-opensource Aug 11, 2026
0e93454
Merge pull request #282 from cristianovisk/feat/dns-txt-six-saas-entries
enthec-opensource Aug 11, 2026
c06b759
Merge pull request #281 from cristianovisk/feat/dns-txt-vendor-umbrel…
enthec-opensource Aug 11, 2026
2e73acc
Merge pull request #280 from cristianovisk/feat/dns-txt-more-existing…
enthec-opensource Aug 11, 2026
5194ef0
Add Podbean technology
AntonioFavero Aug 12, 2026
bc5f874
Improve AccessiWay detection
AntonioFavero Aug 12, 2026
df75495
Merge pull request #290 from AntonioFavero/add-podbean
enthec-opensource Aug 12, 2026
5e7c47b
Merge pull request #291 from AntonioFavero/improve-accessiway
enthec-opensource Aug 12, 2026
76e297d
Add Zeeg technology
AntonioFavero Aug 12, 2026
01c6d84
Add Metricool technology
AntonioFavero Aug 12, 2026
8915e67
Add SuiteDash technology
AntonioFavero Aug 12, 2026
16accaf
Add Proserve technology
AntonioFavero Aug 12, 2026
6fa4202
Add Printify technology
AntonioFavero Aug 12, 2026
029f519
Add Google Cloud DNS technology
AntonioFavero Aug 12, 2026
c0d0bb2
Add FreeWheel technology
AntonioFavero Aug 12, 2026
7311561
Add Cloudflare DNS technology
AntonioFavero Aug 12, 2026
eaa9f94
Add Amazon Route 53 technology
AntonioFavero Aug 12, 2026
118da7a
Add Adventive technology
AntonioFavero Aug 12, 2026
0e018eb
Add Omago technology
omago-ai Aug 15, 2026
fe6a4f6
Merge pull request #301 from AntonioFavero/add-adventive
enthec-opensource Aug 17, 2026
8329518
Merge pull request #300 from AntonioFavero/add-amazon-route-53
enthec-opensource Aug 17, 2026
51ac74b
Merge pull request #299 from AntonioFavero/add-cloudflare-dns
enthec-opensource Aug 17, 2026
f370229
Merge pull request #298 from AntonioFavero/add-freewheel
enthec-opensource Aug 17, 2026
7a222b5
Merge pull request #297 from AntonioFavero/add-google-cloud-dns
enthec-opensource Aug 17, 2026
a399d55
Merge pull request #296 from AntonioFavero/add-printify
enthec-opensource Aug 17, 2026
eee1501
Merge pull request #295 from AntonioFavero/add-proserve
enthec-opensource Aug 17, 2026
6891f12
Merge pull request #294 from AntonioFavero/add-suitedash
enthec-opensource Aug 17, 2026
d3f1c5a
Merge pull request #293 from AntonioFavero/add-metricool
enthec-opensource Aug 17, 2026
28cf735
Merge pull request #292 from AntonioFavero/add-zeeg
enthec-opensource Aug 17, 2026
1b9eee8
Merge pull request #302 from omago-ai/add-omago
enthec-opensource Aug 17, 2026
10a7a1a
Add |related| Natív Hirdetés Kft technology
AntonioFavero Aug 17, 2026
3d18189
Add 10to8 technology
AntonioFavero Aug 17, 2026
9f48156
Add 3Q technology
AntonioFavero Aug 17, 2026
8298839
Add 4w MarketPlace for Publishers technology
AntonioFavero Aug 17, 2026
a9307ec
Add ACTV8 technology
AntonioFavero Aug 17, 2026
37b37eb
Add Addingwell SST technology
AntonioFavero Aug 17, 2026
9fb7afe
Add Adnuntius technology
AntonioFavero Aug 17, 2026
41db083
Add Altervista Platform technology
AntonioFavero Aug 17, 2026
c020c96
Add Advisible technology
AntonioFavero Aug 17, 2026
7112216
Add AIDEM Technologies technology
AntonioFavero Aug 17, 2026
041b73f
Add |related| Natív Hirdetés Kft icon
AntonioFavero Aug 17, 2026
f28ea74
Add 4w MarketPlace for Publishers icon
AntonioFavero Aug 17, 2026
a826709
Add ACTV8 icon
AntonioFavero Aug 17, 2026
c356de9
Add 10to8 icon
AntonioFavero Aug 17, 2026
adf6f28
Add Altervista Platform icon
AntonioFavero Aug 17, 2026
51f6cfa
Merge pull request #312 from AntonioFavero/add-aidem-technologies
enthec-opensource Aug 25, 2026
4f5af9a
Merge pull request #311 from AntonioFavero/add-advisible
enthec-opensource Aug 25, 2026
5043f79
Merge pull request #310 from AntonioFavero/add-altervista-platform
enthec-opensource Aug 25, 2026
4c88993
Merge pull request #309 from AntonioFavero/add-adnuntius
enthec-opensource Aug 25, 2026
ebbaa97
Merge pull request #308 from AntonioFavero/add-addingwell-sst
enthec-opensource Aug 25, 2026
fec2d9e
Merge pull request #307 from AntonioFavero/add-actv8
enthec-opensource Aug 25, 2026
d2f0460
Merge pull request #306 from AntonioFavero/add-4w-marketplace-for-pub…
enthec-opensource Aug 25, 2026
c74da03
Merge pull request #305 from AntonioFavero/add-3q
enthec-opensource Aug 25, 2026
80070cd
Merge pull request #304 from AntonioFavero/add-10to8
enthec-opensource Aug 25, 2026
b0e1186
Merge pull request #303 from AntonioFavero/add-related-nativ-hirdetes…
enthec-opensource Aug 25, 2026
1ec70f0
Improve WooCommerce Subscriptions detection
AntonioFavero Aug 25, 2026
8ca71af
Improve Giosg detection
AntonioFavero Aug 25, 2026
863f2aa
Add DanDomain hosting technology
AntonioFavero Aug 26, 2026
fd537f9
Add DanDomain email technology
AntonioFavero Aug 26, 2026
db1b255
Add EmailOctopus technology
AntonioFavero Aug 26, 2026
8921ada
Add Google Looker Studio technology
AntonioFavero Aug 26, 2026
262e00e
Add Happierleads technology
AntonioFavero Aug 26, 2026
2e19e16
Add Job Boardly technology
AntonioFavero Aug 26, 2026
b2b7b82
Add Webempresa technology
AntonioFavero Aug 26, 2026
ff0ddc9
Add Wysistat technology
AntonioFavero Aug 26, 2026
d5ce309
Add cituro technology
AntonioFavero Aug 26, 2026
1ced276
Add Clearpay technology
AntonioFavero Aug 26, 2026
1c99ed4
Add Recova technology
AntonioFavero Aug 26, 2026
cbd5cd6
Add Hypernode technology
AntonioFavero Aug 26, 2026
367f521
Add Podscribe technology
AntonioFavero Aug 26, 2026
7070c75
Add WebinarGeek technology
AntonioFavero Aug 26, 2026
2939bad
Add Natro technology
AntonioFavero Aug 26, 2026
a08368b
Add Quantyoo technology
AntonioFavero Aug 26, 2026
d8dfaa2
Improve authorize.net detection
AntonioFavero Aug 26, 2026
7343166
Improve SimplyBook.me detection
AntonioFavero Aug 26, 2026
4175cb4
Improve Supabase detection
AntonioFavero Aug 26, 2026
86d1ecf
Add Scrapive technology
yusufesatt Aug 26, 2026
cd992ac
Add files via upload
yusufesatt Aug 26, 2026
1c23afa
Remove deprecated html pattern from Scrapive
yusufesatt Aug 30, 2026
4926050
Update Yandex Metrica script source pattern
edim24 Sep 2, 2026
c69bf22
Merge pull request #325 from AntonioFavero/add-wysistat
enthec-opensource Sep 3, 2026
93b68fc
Merge pull request #326 from AntonioFavero/add-cituro
enthec-opensource Sep 3, 2026
86d4f60
Merge pull request #327 from AntonioFavero/add-clearpay
enthec-opensource Sep 3, 2026
37141fa
Merge pull request #328 from AntonioFavero/add-recova
enthec-opensource Sep 3, 2026
42ca5d1
Merge pull request #329 from AntonioFavero/add-hypernode
enthec-opensource Sep 3, 2026
ddf4c9c
Merge pull request #330 from AntonioFavero/add-podscribe
enthec-opensource Sep 3, 2026
70949fd
Merge pull request #331 from AntonioFavero/add-webinargeek
enthec-opensource Sep 3, 2026
ea2266b
Merge pull request #332 from AntonioFavero/add-natro
enthec-opensource Sep 3, 2026
037d4c6
Merge pull request #333 from AntonioFavero/add-quantyoo
enthec-opensource Sep 3, 2026
620460f
Merge pull request #334 from AntonioFavero/improve-authorize-net
enthec-opensource Sep 3, 2026
a62aefa
Merge pull request #335 from AntonioFavero/improve-simplybook-me
enthec-opensource Sep 3, 2026
d209248
Merge pull request #336 from AntonioFavero/improve-supabase
enthec-opensource Sep 3, 2026
67f07f5
Merge pull request #338 from edim24/main
enthec-opensource Sep 3, 2026
c5b7e98
Merge pull request #337 from yusufesatt/add-scrapive
enthec-opensource Sep 3, 2026
f761d99
Merge pull request #314 from AntonioFavero/improve-woocommerce-subscr…
enthec-opensource Sep 3, 2026
6b8c853
Merge pull request #315 from AntonioFavero/improve-giosg
enthec-opensource Sep 3, 2026
d4c3846
Merge pull request #317 from AntonioFavero/add-dandomain-hosting
enthec-opensource Sep 3, 2026
cc32a2c
Merge pull request #320 from AntonioFavero/add-google-looker-studio
enthec-opensource Sep 3, 2026
847f10b
Merge pull request #319 from AntonioFavero/add-emailoctopus
enthec-opensource Sep 3, 2026
1cdf674
Merge pull request #321 from AntonioFavero/add-happierleads
enthec-opensource Sep 3, 2026
89ff2e0
Merge pull request #322 from AntonioFavero/add-job-boardly
enthec-opensource Sep 3, 2026
0e8e2d2
Merge pull request #324 from AntonioFavero/add-webempresa
enthec-opensource Sep 3, 2026
186ae56
Merge branch 'main' into add-dandomain-email
enthec-opensource Sep 3, 2026
bcd90bd
Update d.json
enthec-opensource Sep 3, 2026
2b5eed3
Merge pull request #318 from AntonioFavero/add-dandomain-email
enthec-opensource Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
* text=auto eol=lf

*.json text
*.md text
*.py text
*.svg text
*.txt text
*.yml text
*.yaml text

*.png binary
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: "chore"
include: "scope"
16 changes: 16 additions & 0 deletions .github/workflows/scripts/icon_path_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,19 @@
import pathlib
import string
from typing import Final
from xml.etree import ElementTree


class InvalidStructureException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class InvalidSVGException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class IconValidator:
def __init__(self):
self._SOURCE_DIR: Final[str] = "src"
Expand All @@ -23,6 +29,16 @@ def validate(self) -> None:
for file in self._FULL_IMAGES_DIR.iterdir():
if file.name not in json_icons:
raise InvalidStructureException(f"{file.name} must be used, {file} isn't used!")
if file.name.lower().endswith(".svg"):
self._validate_svg(file)

def _validate_svg(self, file: pathlib.Path) -> None:
try:
with file.open("r", encoding="utf8") as f:
content: str = f.read()
ElementTree.fromstring(content)
except ElementTree.ParseError as e:
raise InvalidSVGException(f"Invalid SVG '{file.name}': {e}")

def get_json_icons(self) -> set[str]:
letters: list[str] = list(string.ascii_lowercase)
Expand Down
64 changes: 64 additions & 0 deletions .github/workflows/scripts/order_validator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import json
import pathlib
from typing import Final, Any


class DuplicateKeyException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class OrderingException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class InvalidStructureException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class OrderValidator:
def __init__(self):
self._SOURCE_DIR: Final[str] = "src"
self._TECH_DIR: Final[str] = "technologies"
self._FULL_TECH_DIR: Final[pathlib.Path] = pathlib.Path(self._SOURCE_DIR).joinpath(self._TECH_DIR)

def validate(self) -> None:
if not self._FULL_TECH_DIR.is_dir():
raise InvalidStructureException(f"{self._FULL_TECH_DIR} is not a valid directory")
for tech_file in sorted(self._FULL_TECH_DIR.iterdir()):
if not tech_file.name.endswith(".json"):
continue
self._check_ordering(tech_file)

def _check_ordering(self, tech_file: pathlib.Path) -> None:
with tech_file.open("r", encoding="utf8") as f:
data: dict = json.load(f, object_pairs_hook=self._duplicate_key_validator)
if not isinstance(data, dict):
raise InvalidStructureException(f"{tech_file.name} root must be an object")
keys: list[str] = list(data.keys())
sorted_keys: list[str] = sorted(keys, key=lambda x: x.lower())
if keys != sorted_keys:
mismatches: list[str] = [
f"Found '{actual}' expected '{expected}'"
for actual, expected in zip(keys, sorted_keys)
if actual != expected
]
raise OrderingException(
f"{tech_file.name} entries are not ordered alphabetically by keys:\n " +
"\n ".join(mismatches)
)

@classmethod
def _duplicate_key_validator(cls, pairs: list[tuple[str, Any]]) -> dict[str, Any]:
result: dict[str, Any] = {}
for key, value in pairs:
if key in result:
raise DuplicateKeyException(f"Duplicate key found: '{key}'")
result[key] = value
return result


if __name__ == '__main__':
OrderValidator().validate()
38 changes: 38 additions & 0 deletions .github/workflows/scripts/schema_validator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import json
import pathlib
from typing import Final

from jsonschema import validate, ValidationError


class SchemaValidationException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class SchemaValidator:
def __init__(self):
self._SOURCE_DIR: Final[str] = "src"
self._TECH_DIR: Final[str] = "technologies"
self._FULL_TECH_DIR: Final[pathlib.Path] = pathlib.Path(self._SOURCE_DIR).joinpath(self._TECH_DIR)
self._SCHEMA_FILE: Final[pathlib.Path] = pathlib.Path("schema.json")

def validate(self) -> None:
if not self._SCHEMA_FILE.is_file():
raise FileNotFoundError(f"Schema file '{self._SCHEMA_FILE}' not found!")
with self._SCHEMA_FILE.open("r", encoding="utf8") as f:
schema: dict = json.load(f)
for tech_file in sorted(self._FULL_TECH_DIR.iterdir()):
if not tech_file.name.endswith(".json"):
continue
with tech_file.open("r", encoding="utf8") as f:
technologies: dict = json.load(f)
try:
validate(instance=technologies, schema=schema)
except ValidationError as e:
path: str = " -> ".join(str(p) for p in e.absolute_path) if e.absolute_path else "root"
raise SchemaValidationException(f"{tech_file.name}: {e.message} (at {path})")


if __name__ == '__main__':
SchemaValidator().validate()
90 changes: 84 additions & 6 deletions .github/workflows/scripts/technology_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,16 @@ def __init__(self, msg: str):
super().__init__(msg)


class TechNotFoundException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class InvalidURLException(Exception):
def __init__(self, msg: str):
super().__init__(msg)


class AbstractValidator:
def __init__(self, required: bool = False):
self._required = required
Expand Down Expand Up @@ -185,6 +195,27 @@ def get_type(self) -> list[Type]:
return [str]


class URLValidator(StringValidator):
def __init__(self, required: bool = False):
super().__init__(required)
self._url_pattern: Final[re.Pattern] = re.compile(
r"^https?://"
r"(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+"
r"[A-Za-z0-9-]{2,}"
r"(?::\d+)?"
r"(?:/[^\s]*)?"
r"$"
)

def _validate(self, tech_name: str, data: Any) -> bool:
if not super()._validate(tech_name, data):
return False
if not self._url_pattern.match(data):
self._set_custom_error(InvalidURLException(f"Tech '{tech_name}' has invalid URL: '{data}'"))
return False
return True


class BoolValidator(AbstractValidator):
def get_type(self) -> list[Type]:
return [bool]
Expand All @@ -200,6 +231,26 @@ def get_type(self) -> list[Type]:
return [dict]


class DNSValidator(DictValidator):
def _validate(self, tech_name: str, data: Any) -> bool:
if not super()._validate(tech_name, data):
return False
for k, v in data.items():
if not isinstance(k, str):
self._set_custom_error(InvalidKeyException(f"key in DNS for tech '{tech_name}' has an invalid type. 'str' is required, got type '{type(k).__name__}' -> '{k}'"))
return False
if not isinstance(v, list):
self._set_custom_error(InvalidKeyException(f"value in DNS for tech '{tech_name}' has an invalid type. 'list' is required, got type '{type(v).__name__}' -> '{v}'"))
return False
for record in v:
if not isinstance(record, str):
self._set_custom_error(InvalidTypeForFieldException(f"Invalid type for dns in tech '{tech_name}', selector '{v}' '{record}' key must be string!"))
return False
if not self._validate_regex(tech_name, record):
return False
return True


class CategoryValidator(ArrayValidator):
def __init__(self, categories: list[int], required: bool = False):
super().__init__(required)
Expand Down Expand Up @@ -297,6 +348,22 @@ def _validate(self, tech_name: str, data: Any) -> bool:
return True


class ReferenceValidator(ArrayValidator):
def __init__(self, all_techs: set[str]):
super().__init__()
self._all_techs: Final[set[str]] = all_techs

def _validate(self, tech_name: str, data: Any) -> bool:
if not super()._validate(tech_name, data):
return False
for ref in data:
clean_ref: str = ref.split(r"\;")[0]
if clean_ref not in self._all_techs:
self._set_custom_error(TechNotFoundException(f"Tech '{tech_name}' references '{clean_ref}' but it doesn't exist!"))
return False
return True


class TechnologiesValidator:
def __init__(self, file_name: str):
self._SOURCE_DIR: Final[str] = "src"
Expand All @@ -308,22 +375,23 @@ def __init__(self, file_name: str):
self._IMAGES_DIR: Final[str] = "images"
self._ICONS_DIR: Final[str] = "icons"
self._ICONS: Final[list[str]] = [icon.name for icon in pathlib.Path(self._SOURCE_DIR).joinpath(self._IMAGES_DIR).joinpath(self._ICONS_DIR).iterdir()]
self._ALL_TECHS: Final[set[str]] = self._get_all_tech_names()
self._validators: dict[str, AbstractValidator] = { # TODO confidence and version validator
"cats": CategoryValidator(self._CATEGORIES, True),
"website": StringValidator(True),
"website": URLValidator(True),
"description": StringValidator(),
"icon": IconValidator(self._ICONS),
"cpe": CPEValidator(),
"saas": BoolValidator(),
"oss": BoolValidator(),
"pricing": PricingValidator(),
"implies": ArrayValidator(), # TODO cat validation
"requires": ArrayValidator(), # TODO ^
"excludes": ArrayValidator(), # TODO ^
"implies": ReferenceValidator(self._ALL_TECHS),
"requires": ReferenceValidator(self._ALL_TECHS),
"excludes": ReferenceValidator(self._ALL_TECHS),
"requiresCategory": CategoryValidator(self._CATEGORIES),
"cookies": DictValidator(contains_regex=True),
"dom": DomValidator(),
"dns": DictValidator(contains_regex=True),
"dns": DNSValidator(contains_regex=True),
"js": DictValidator(contains_regex=True),
"headers": DictValidator(contains_regex=True),
"text": ArrayValidator(contains_regex=True),
Expand Down Expand Up @@ -365,6 +433,16 @@ def _duplicate_key_validator(cls, pairs: list[tuple[str, Any]]) -> dict[str, Any
result[key] = value
return result

def _get_all_tech_names(self) -> set[str]:
all_techs: set[str] = set()
for letter in list(string.ascii_lowercase) + ["_"]:
tech_file: pathlib.Path = self._FULL_TECH_DIR.joinpath(f"{letter}.json")
if tech_file.exists():
with tech_file.open("r", encoding="utf8") as f:
technologies: dict = json.load(f)
all_techs.update(technologies.keys())
return all_techs


class TechnologyProcessor:
def __init__(self, tech_name: str, tech_data: dict, validators: dict[str, AbstractValidator]):
Expand All @@ -389,4 +467,4 @@ def process(self) -> None:
if __name__ == '__main__':
# for letter in string.ascii_lowercase + "_":
# TechnologiesValidator(os.getenv("TECH_FILE_NAME", f"{letter}.json")).validate()
TechnologiesValidator(os.getenv("TECH_FILE_NAME", f"a.json")).validate()
TechnologiesValidator(os.getenv("TECH_FILE_NAME")).validate()
6 changes: 3 additions & 3 deletions .github/workflows/tech_matrix_prep.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ on:
value: ${{ jobs.tech_prep.outputs.technologies }}
jobs:
tech_prep:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: get current technology matrix
id: getTechMatrix
run: python3 .github/workflows/scripts/tech_list_matrix_generator.py

outputs:
technologies: ${{ steps.getTechMatrix.outputs.technologies }}
technologies: ${{ steps.getTechMatrix.outputs.technologies }}
Loading