Skip to content

Dev - #362

Merged
jason5ng32 merged 11 commits into
mainfrom
dev
Jul 30, 2026
Merged

Dev#362
jason5ng32 merged 11 commits into
mainfrom
dev

Conversation

@jason5ng32

Copy link
Copy Markdown
Owner

No description provided.

jason5ng32 and others added 11 commits July 28, 2026 22:23
The upstream answers 200 with `location: null` for addresses it cannot
place (anycast ranges, bogons), so destructuring it and reading `.city`
threw and the whole source returned 500. Guard it the way `asn` already
was, and export the normalizer so the degraded shape is covered by tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The engine's queued timers deliver a last measurement after onFinish or
onUnmounted already nulled the reference, so updateProgress threw on
`testEngine.results`. Match the optional-chaining guard its sibling
updateSpeedInRealTime has carried all along.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Seven call sites hand-split trace bodies with the same lines.find +
split("=") pattern; extract utils/parse-trace.js and route them all
through it. The parser trims keys and values, so bodies re-serialized
with CRLF by middleboxes no longer leak a trailing "\r" into the IP.
SpeedTest's invalid-IP throw now carries a self-describing detail
(no-ip-line / empty-value / length + tail charcode) to tell response
tampering apart from format surprises.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… choice

The geolocation fallback used to rewrite the stored preference on every
successful fallback and disable failing sources for the session, so a
transient error changed what the user had picked and struck sources out
of the Preferences picker. Now ipDBs.enabled is derived purely from the
/api/configs flags the moment they arrive (replacing the 4s timer in
Preferences.vue), runtime failures just walk to the next source with a
one-time toast, and the stored preference is only rewritten when it
points at a source that is no longer configured — migrated to the
nearest available one, also announced via toast, in all four locales.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
encodeURIComponent turned IPv6 colons into %3A, which some RIR
delegate servers (e.g. IDNIC behind APNIC's redirect) reject with a
400. Colons are legal in a URL path and the guard layer already
ensures a well-formed IP, so build the query URL with the literal
address.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Shortcuts are for high-frequency actions: remove the Command Line API
(x), About (a) and Preferences (p) bindings, and give the share-report
dialog the freed-up slot as e (export). The defineExpose hooks and
template refs that existed only for the removed bindings go with them;
locale descriptions follow in all four languages.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Jul 30, 2026

Copy link
Copy Markdown

Greptile Summary

This PR improves resilience and user-facing navigation across IP lookups, documentation tools, and keyboard shortcuts.

  • Centralizes Cloudflare trace parsing and handles null IPAPI.is location data.
  • Derives geolocation-source availability from backend configuration and adds runtime fallback behavior.
  • Adds authenticated Copilot controls, localized documentation links, and a Share Report shortcut.
  • Sends literal IPv6 addresses in RDAP paths and expands regression coverage.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete blocking or independently actionable non-blocking defects identified.

The changed fallback, parser, RDAP, assistant, and shortcut paths are consistently wired to their callers and supported by targeted regression tests, with no reachable incorrect behavior established.

Important Files Changed

Filename Overview
frontend/components/IpInfos.vue Adds non-persistent geolocation fallback behavior and user notification while preserving successful result caching.
frontend/store.js Applies backend configuration to IP-source availability and migrates preferences away from unavailable sources.
frontend/data/ip-databases.js Adds source configuration metadata and pure availability/fallback-selection helpers with focused tests.
frontend/composables/use-docs-assistant.js Adds shared assistant open-state management and animation-settling protection for the custom launcher.
frontend/components/widgets/DocsAssistant.vue Replaces the stock GitBook launcher with authenticated custom controls, mobile backdrop handling, and panel-state synchronization.
frontend/utils/parse-trace.js Introduces a shared robust parser for Cloudflare trace responses, including CRLF and embedded-equals handling.
common/rdap.js Preserves IPv6 colons in RDAP request paths to support registries that reject percent-encoded literals.
frontend/composables/use-shortcuts.js Replaces retired component shortcuts with an end-to-end Share Report dialog shortcut.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Application startup] --> B[Load preferences]
    A --> C[Fetch backend configuration]
    C --> D[Derive available IP databases]
    D --> E{Preferred source available?}
    E -->|Yes| F[Fetch IP details]
    E -->|No| G[Select nearest enabled source]
    G --> F
    F --> H{Request succeeds?}
    H -->|Yes| I[Render and cache IP details]
    H -->|No| J[Try next enabled source]
    J --> H
Loading

Reviews (1): Last reviewed commit: "Improvements" | Re-trigger Greptile

@jason5ng32
jason5ng32 merged commit b7cd871 into main Jul 30, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant