Scan a package
homescanua-parser-js@0.7.30

ua-parser-js exposure.

Below is the verdict plus every row that produced it. Click show cypher on any tile to inspect the query.

HIGHverdict·ua-parser-js@0.7.30just now
4 services exposed · 3 lockfiles resolved the bad version · 5 typosquats nearby.
fix:  pnpm update ua-parser-js@^0.7.30   ▸  breach window 4h 12m
fix command
$ pnpm update ua-parser-js@^0.7.30
share
https://meridian.sithunyein.com/scan/ua-parser-js%400.7.30
▸ open replay
enter ⏎
try

The six tiles

0ms · hydradb:https://cheap-dawn-noble-located.trycloudflare.com (fixture tiles)
HIGH

4 services exposed

4 rows · 56ms

MATCH (npm:ua-parser-js@0.7.30)<-[:DEPENDS_ON*1..6]-(svc:Service)

serviceteamenvhops
checkout-svcplatformprod1
web-cdn-edgecheckoutstage2
geo-redirectorgrowthprod3
billing-svcbillingprod4
shape · MATCH (n)<-[:DEPENDS_ON*1..3]-(svc) — 3-hop budget
HIGH

first bad version: 3.10.8

3 rows · 35ms

MATCH (advisory)-[:AFFECTS]->(version) — published timeline

versionpublishedrepolive_during_compromise
3.10.72026-07-12github.com/TanStack/virtualfalse
3.10.82026-08-14github.com/TanStack/virtualtrue
3.10.92026-08-15github.com/TanStack/virtualfalse
shape · MATCH (Advisory)-[:AFFECTS]->(Version {id:Int})
WARN

3 lockfiles resolved this version

3 rows · 45ms

MATCH (Version)<-[:RESOLVES]-(Lockfile)<-[:USES_LOCKFILE]-(Service)

lockfileserviceteamcapturedwindow
apps/web/package-lock.jsoncheckout-svcplatform2026-08-11T00:00Z4h 12m
services/checkout/package-lock.jsonweb-cdn-edgecheckout2026-08-12T01:00Z4h 12m
packages/ui-tw/package-lock.jsongeo-redirectorgrowth2026-08-13T02:00Z4h 12m
shape · MATCH (Lockfile)-[:RESOLVES]->(Version {id:Int})
INFO

3 packages share a maintainer

3 rows · 56ms

MATCH (Maintainer)-[:MAINTAINS]->(sibling) — same-CI clusters collapse

packageecosystemmonthly_downloadssame_ci
ua-parsernpm240000true
node-ua-parserpypi223000false
useragentnpm206000false
shape · MATCH (pkg)<-[:MAINTAINED_BY]-(m)-[:MAINTAINED_BY]->(sib)
HIGH

5 typosquat candidates within edit-distance 2

5 rows · 39ms

MATCH (Package)<-[:TYPOSQUAT_OF { distance: 1..2 }]-(candidate)

candidateedit_distancefirst_seeninstalls
ua-parser12026-08-10T00:00Z1280
ua-parserjs22026-08-11T01:00Z1170
uaparser-js12026-08-12T02:00Z1060
ua_parser22026-08-13T03:00Z950
user-agent-parser12026-08-14T04:00Z840
shape · MATCH (p)<-[:TYPOSQUAT_OF]-(t)
OK

blast radius: 4 services · 3 lockfiles · 5 typosquats

1 rows · 53ms

AGG services ⊕ lockfiles ⊕ typosquats — 3 optional MATCH arms in one query

services_countlockfiles_counttyposquats_count
435
shape · count(svc) from Package fan-in
00:00PUBLISHua-parser-js

ua-parser-js@0.7.30 published clean

60:00INSTALL

+dependency.added chalk-extra 0.0.1

120:00PUBLISHua-parser-js

ua-parser-js@0.7.30 rebuilt with payload

180:00ALERT

typosquat install spike 240× chalk-extras

240:00INSTALL

co-maintainer vit-dev-bot 12 ops/min

300:00LOCKFILE

3 lockfiles × 4 services resolved the bad version

360:00GUARD

breach window 4h 12m push guard ⚑