Repository navigation
fix: comprehensive hardening across engine lifecycle, storage, replay security, and surfaces - #21
Merged
Merged
Conversation
…eam error recovery, and search/realtime bounds
…earch races, Unicode folding, and public API surface
…nd search async state
…tream identity - Preserve original request URL, method, headers, and body without partial redirect mutation - Mutate responseBody.stream in place on existing ResponseBody instance to preserve extra and onClose callbacks - Add redirect and stream identity unit and characterization regressions
…on uri input - Deduplicate discovered apps across all DTD/DDS endpoints and throw MultipleAppsException on ambiguous targets - Safely string-convert and validate loopback address in connect_app tool handler - Add comprehensive discovery and input validation tests
…onnectable sessions on transient errors - Deduplicate repeated attaches on identical Socket instances via Expando - Record connect_error as incoming frame to preserve session continuity during auto-reconnect - Add tracker lifecycle and attachment deduplication tests
- Prevent caller header map mutations from mutating captured records - Use Map.of snapshot on request begin and response amend
…orage, replay security, and surfaces - Engine & Lifecycle: separate manual pause intent from release permission check; accept authentic responses replacing synthetic timeouts; preserve manual pause across reconfigurations - Storage & Search: live rotation closure provider wiring across engine/scope/search; retain valid backing file path across runtime persistence toggles; recover intact BodyStore file handles on reset failure and prevent invalidation on uninitialized stores; return empty list for missing search since_id cursor - Replay & Security: block automatic redirects to capture 3xx directly; cap replay body streams at 10MB with 15s timeout and forceClose; normalize IPv4-mapped IPv6 and byte-mask ULA (fc00::/7) and Link-Local (fe80::/10); confirm replay with truncated bodies - Surfaces & Realtime: retain staged export artifacts for async mobile shares and purge stale temp files; honest Postman multipart raw UTF-8 export with diagnostic fallback; deduplicate in-flight JsonViewer async flattener jobs; guard search debounce from rebuild wiping; manage realtime row duration ticker lifecycle; resend authentic binary Uint8List frames - Add extensive unit, widget, and regression suites achieving 100% pass across 895 tests and 160/160 pana health score
…nd parallel app discovery
… stress test thresholds
…b from REST filter
The nested ListView.separated had no explicit padding, so Flutter applied MediaQuery.padding.bottom inside the bordered card, leaving ~34px of dead space under the last domain row. Opt out with EdgeInsets.zero and cover it with a widget test asserting the card is only borders taller than its row.
Wrap the Overview tab body in SelectionArea so URL, method, status, sizes, error and timestamp can be selected and copied, including across rows. Search highlighting keeps working because the rows stay Text/Text.rich instead of per-widget SelectableText. Covered by widget tests for the selection area and for the long-press copy toolbar.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Comprehensive hardening across core engine lifecycle, hybrid RAM/disk storage, replay SSRF/resource security, MCP server, and UI surfaces:
Core Engine & Lifecycle (C1, C3, C4):
_enabled) from release permission check (isEnabled = _enabled && shouldEnableCapture(...)), gating background workers and storage init in release mode.Adapters & Transport (A2, A3, Socket.IO, HTTP, Chopper):
ResponseBody.streamin place on existing object to preserveextrametadata andonClosecleanup callbacks.InterceptlySocketIo.attachcalls perSocketviaExpandoand recordconnect_errorframes rather than closing sessions on transient reconnects.Map.of()in HTTP client and Chopper interceptor.Replay & Security (S2, S3, S4, F1):
request.followRedirects = false;) to capture 3xx responses directly and prevent redirect SSRF bypasses.::ffff:w.x.y.z), byte-mask ULA (fc00::/7), and byte-mask Link-Local (fe80::/10) private addresses.Storage & Search (C2, C5, C6, F6, F7, F10):
fileRotationCountProvider) through engine, scope, and UI master search to prune expired entries.persistToDisktoggles.append().since_idcursor is missing from candidates.bytes.length < length) as unavailable payloads inRealtimeStore.Surfaces, Realtime & Sharing (S1, S5, S6, S7, F2, F4, F5, F8, F9):
purgeStaleExportsfor temporary files older than 1 hour.MultipleAppsExceptionin MCPAppDiscoverywhen multiple apps run without an explicit--uri.mode: rawwith text language option; emit diagnostic warning for binary/missing bodies.JsonViewerasync flatten isolate jobs and reset loading spinner on errors._RealtimeRowStateon pending-to-closed transitions.Uint8Listbytes when resending binary frames.uriarguments in MCPconnect_app.Type of Change
fix: A bug fixtest: Adding or correcting testsAffected Packages
interceptly(Core package & UI overlay)interceptly_diointerceptly_httpinterceptly_chopperinterceptly_socket_iointerceptly_mcpQuality Checklist
type(scope): subject.melos run checklocally and it passed with zero errors/warnings.melos run test:core).melos run pana).