The best IP Toolbox. Check your IP address & geolocation, test IP for WebRTC and DNS IP leaks, run an IP quality check, browser fingerprint check, website availability check, network speed test, global latency test, MTR test, Whois search, and more.
This report summarizes scanner evidence for jason5ng32/MyIP, a JavaScript project with 12,274 GitHub stars. SynthScan examined 99,970 lines of code across 620 source files, recording 124 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.8 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 102 finding(s).
Are imports declared and package/API names verified? 6 finding(s).
Are wrappers, guards, and repeated structures necessary? 19 finding(s).
Which changes need focused human review? 124 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 124 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sentry-instrument.js | 1 | // Sentry bootstrap for the Express backend. Loaded via `node --import` (see | COMMENT |
| LOW | frontend-server.js | 41 | // - dist/assets/** Vite-hashed JS/CSS/images — content-addressed → 1y immutable | COMMENT |
| LOW | frontend-server.js | 81 | // path with no matching file. Serve index.html for navigation requests and let | COMMENT |
| LOW | backend-server.js | 261 | // only drifts as new measurements land, so 1 day of edge cache keeps us polite | COMMENT |
| LOW | backend-server.js | 301 | // Shared reports stay no-store: an edge cache could serve a report past its | COMMENT |
| LOW | frontend/sentry-init.js | 61 | // whole UI is the visitor's own network info (IPs, ASN, DNS), and | COMMENT |
| LOW | frontend/sentry-init.js | 81 | // sessions stay on: browserSessionIntegration is a default.) | COMMENT |
| LOW | frontend/sentry-init.js | 141 | ], | COMMENT |
| LOW | frontend/composables/use-info-mask.js | 1 | // Info mask logic: 2-state switch (no mask / mask IP). | COMMENT |
| LOW | frontend/composables/use-globalping-measurement.js | 1 | // Shared Globalping measurement orchestration. | COMMENT |
| LOW | frontend/composables/use-globalping-measurement.js | 41 | // Shared cap for user-composed Globalping runs (one probe per country). | COMMENT |
| LOW | frontend/composables/use-shortcuts.js | 1 | // Keyboard shortcut registration | COMMENT |
| LOW | frontend/composables/use-fit-text.js | 1 | // Fit-to-width class picker: picks the largest tier whose rendered | COMMENT |
| LOW | frontend/composables/use-status-tone.js | 1 | // Unified "state → visual" mapping: 5 tone levels share the same color scheme | COMMENT |
| LOW | frontend/composables/use-achievement-engine.js | 1 | // Achievement engine — subscribes to app events (utils/app-events.js), | COMMENT |
| LOW | frontend/composables/use-persona-collector.js | 1 | // Persona collector — keeps the latest snapshot of every homepage test the | COMMENT |
| LOW | frontend/composables/use-screenshot.js | 1 | // Generic DOM screenshot composable. Wraps html-to-image with retina output, | COMMENT |
| LOW | frontend/composables/use-maxmind.js | 1 | // Shared client-side MaxMind lookup for components that need to enrich a | COMMENT |
| LOW | frontend/composables/use-refresh-orchestrator.js | 1 | // Refresh / initial load sequence orchestration | COMMENT |
| LOW | frontend/composables/use-document-meta.js | 1 | // Per-route document head (title / description / canonical / Open Graph). | COMMENT |
| LOW | frontend/composables/use-docs-assistant.js | 1 | // Lazy loader + controller for the GitBook Docs Assistant embed. | COMMENT |
| LOW | frontend/composables/use-docs-assistant.js | 21 | // Two tools are registered. `get_my_test_results`: the assistant can read the | COMMENT |
| LOW | frontend/composables/use-overlay-shortcuts.js | 1 | // Suspends the global keyboard shortcuts while an overlay is open. | COMMENT |
| LOW | frontend/utils/banners.js | 1 | // Pure helpers for the per-section info-banner slot (components/widgets/ | COMMENT |
| LOW | frontend/utils/banners.js | 21 | // // { prefix: 'From', amount: '$2.99', | COMMENT |
| LOW | frontend/utils/shortcut.js | 1 | // Global keyboard-shortcut dispatcher. | COMMENT |
| LOW | frontend/utils/locale-datasets.js | 1 | // Loader for the optional per-locale datasets (privacy copy, the security | COMMENT |
| LOW | frontend/utils/fetch-with-timeout.js | 1 | // Thin re-export — implementation lives in common/fetch-with-timeout.js | COMMENT |
| LOW | frontend/utils/pwa.js | 1 | // PWA display-mode detection. | COMMENT |
| LOW | frontend/utils/app-commands.js | 1 | // App-wide command bus — the imperative sibling of app-events.js. Events say | COMMENT |
| LOW | frontend/utils/features/ip-calc.js | 1 | // Pure layer of the IP Calculator: classifies whatever was pasted (IPv4 / | COMMENT |
| LOW | frontend/utils/features/pulse-celebration.js | 1 | // Celebration particle engine for the Pulse ("Earth Online") Sheet. | COMMENT |
| LOW | frontend/utils/features/service-status-tone.js | 1 | // Pure mapping helpers from Statuspage/incident.io status vocab to the four | COMMENT |
| LOW | frontend/utils/features/dns-record-types.js | 1 | // Thin re-export — implementation lives in common/dns-record-types.js so the | COMMENT |
| LOW | frontend/utils/features/pulse-beacon.js | 1 | // Visit beacon + endpoint config for the "Earth Online" feature. | COMMENT |
| LOW | frontend/utils/features/world-map-chart.js | 1 | // Reusable choropleth world map on chartjs-chart-geo — shared by Earth | COMMENT |
| LOW | frontend/utils/getips/index.js | 1 | // Chain runner + public entry points for the homepage IP-card sources. | COMMENT |
| LOW | frontend/utils/persona/probe-fonts.js | 1 | // Font probing — which writing systems does this machine have fonts for? | COMMENT |
| LOW | frontend/utils/ip/ip-math.js | 1 | // Thin re-export — implementation lives in common/ip-math.js so the | COMMENT |
| LOW | frontend/utils/ip/parse-trace.js | 1 | // Shared parser for Cloudflare /cdn-cgi/trace responses (key=value lines). | COMMENT |
| LOW | frontend/utils/ip/bgp-prefix.js | 1 | // Thin re-export — implementation lives in common/bgp-prefix.js so the | COMMENT |
| LOW | frontend/utils/ip/valid-ip.js | 1 | // Single source of truth is common/valid-ip.js (shared with the backend). | COMMENT |
| LOW | frontend/utils/ip/asn-connectivity.js | 1 | // Client for `/api/asn-connectivity` (CAIDA topology + neighbour lists), | COMMENT |
| LOW | frontend/utils/ip/asn-history.js | 1 | // Client for `/api/asn-history` (RIPEstat routing history per BGP prefix), | COMMENT |
| LOW | frontend/components/PrivacyPolicy.vue | 61 | // section only renders on deployments actually built with a DSN. | COMMENT |
| LOW | frontend/components/ui/drawer/Drawer.vue | 21 | // Keep vaul away from body styles. Its Safari-only position:fixed scroll | COMMENT |
| LOW | frontend/components/widgets/CopyButton.vue | 1 | <script setup> | COMMENT |
| LOW | frontend/data/tools.js | 1 | // Single source of truth for the Advanced Tools: their /tools/:slug pages | COMMENT |
| LOW | frontend/data/pulse-statuses.js | 21 | { id: 'night', emoji: '🌙' }, | COMMENT |
| LOW | frontend/data/default-preferences.js | 1 | // Default user preferences | COMMENT |
| LOW | frontend/data/adblock-probes.js | 1 | // Static probe list for the Ad & Tracker Blocking Test (AdblockTest.vue). | COMMENT |
| LOW | frontend/data/connectivity-import-lists.js | 1 | // Curated importable target lists for the Connectivity section: country sets | COMMENT |
| LOW | frontend/data/persona-tables.js | 1 | // The two reference tables the tool needs before any request is made: which | COMMENT |
| LOW | frontend/data/achievement-rules.js | 1 | // Achievement trigger rules — THE single place that maps domain events to | COMMENT |
| LOW | tests/locale-packs.test.js | 1 | // The hard gate for translations: what a locale pack may and may not do. | COMMENT |
| LOW | tests/setup.js | 1 | // Preloaded by `pnpm test` (node --import) before any spec. Keeps the shared | COMMENT |
| LOW | server/asn-profile.js | 1 | // Composition behind /api/asn-profile: every data source of the ASN Profile | COMMENT |
| LOW | server/rdap.js | 1 | // RDAP lookups for the WHOIS tool. | COMMENT |
| LOW | server/logger.js | 1 | // server/logger.js — shared pino logger for all backend code. | COMMENT |
| LOW | server/cf-radar.js | 1 | // Cloudflare Radar data layer behind the single /api/cfradar route. Each | COMMENT |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/utils/features/connectivity-lists.js | 96 | // ── List CRUD ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/utils/features/connectivity-lists.js | 135 | // ── Members ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/utils/features/connectivity-lists.js | 154 | // ── Curated-list import ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/ConnectivityTest.vue | 202 | // ── Lists ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/ConnectivityTest.vue | 234 | // ── Test entries ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/ConnectivityTest.vue | 517 | // ── Add / import / manage dialog + per-card removal ─────────────────────── | COMMENT |
| MEDIUM | frontend/components/ConnectivityTest.vue | 566 | // ── Main control ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/advanced-tools/IpBlocklist.vue | 248 | // ── Input ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/advanced-tools/IpBlocklist.vue | 266 | // ── Result ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/advanced-tools/IpBlocklist.vue | 275 | // ── Shareable `?q=` (use-route-active.js) ──────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/advanced-tools/IpBlocklist.vue | 343 | // ── Run ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/advanced-tools/ServiceStatus.vue | 271 | // ── i18n label lookups (graceful fallback to the raw key) ─────────────────── | COMMENT |
| MEDIUM | frontend/components/advanced-tools/ServiceStatus.vue | 299 | // ── Data loading ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/widgets/ConnectivityAddDialog.vue | 279 | // ── Curated-list import ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/widgets/ConnectivityAddDialog.vue | 308 | // ── Custom add ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/components/widgets/ConnectivityAddDialog.vue | 376 | // ── List management ──────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/speedtest-session.test.js | 123 | results.raw.latency.results.timings.push({}); | CODE |
| CRITICAL | tests/speedtest-session.test.js | 128 | results.raw.latency.results.timings.push({}); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/AGENTS.md | 39 | ### Achievements are event-driven | COMMENT |
| MEDIUM | tests/i18n-scaffold.test.js | 1 | // Tests for the pure half of scripts/i18n-scaffold.js — what `pnpm i18n-new` | COMMENT |
| MEDIUM | scripts/i18n-scaffold.js | 1 | // scripts/i18n-scaffold.js — creates and maintains the empty-value skeletons | COMMENT |
| MEDIUM | scripts/i18n-scaffold.js | 4 | // pnpm i18n-new <code> scaffold frontend/locales/<code>.json (every key of | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/components/ui/combobox/ComboboxInput.vue | 28 | :placeholder="placeholder" | CODE |
| LOW | frontend/components/ui/select/SelectValue.vue | 10 | <SelectValue v-slot="{ selectedLabel, modelValue }" :placeholder="placeholder"> | CODE |
| LOW | frontend/components/widgets/CountryPicker.vue | 23 | <ComboboxInput v-model="searchTerm" :placeholder="placeholder" /> | CODE |
| LOW | frontend/components/widgets/DocsSearch.vue | 24 | <span :key="placeholder" class="block w-full truncate text-sm text-muted-foreground"> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/utils/unregister-service-worker.js | 7 | export function unregisterLegacyServiceWorker() { | CODE |
| LOW | frontend/data/achievements.js | 40 | export function createInitialAchievementsState() { | CODE |
| LOW | server/service-status-store.js | 119 | export function startServiceStatusPolling() { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/locales/security-checklist/en.json | 131 | "details": "Having different passwords for each account is a good first step, but if you also use a uniq | CODE |