interceptRequestIfNeeded method

Future<InfospectBreakpointResult?> interceptRequestIfNeeded({
  1. required String method,
  2. required String endpoint,
  3. required String uri,
  4. required Map<String, dynamic> headers,
  5. required Map<String, dynamic> queryParameters,
  6. required dynamic body,
  7. int? requestId,
})

Pauses for request editing when a matching breakpoint rule exists.

Implementation

Future<InfospectBreakpointResult?> interceptRequestIfNeeded({
  required String method,
  required String endpoint,
  required String uri,
  required Map<String, dynamic> headers,
  required Map<String, dynamic> queryParameters,
  required dynamic body,
  int? requestId,
}) async {
  final match = breakpointManager.findMatch(
    InfospectBreakpointMatchContext(
      method: method,
      endpoint: endpoint,
      queryParameters: queryParameters,
      requestHeaders: headers,
      requestBody: body,
      isResponsePhase: false,
    ),
  );
  if (match == null || !match.breakOnRequest) return null;

  if (requestId != null) {
    markBreakpointTrace(requestId: requestId, requestHit: true);
  }

  final payload = InfospectBreakpointPayload(
    method: method,
    uri: uri,
    endpoint: endpoint,
    headers: InfospectBreakpointManager.stringifyMap(headers),
    queryParameters: InfospectBreakpointManager.stringifyMap(queryParameters),
    body: InfospectBreakpointManager.stringifyBody(body),
  );

  final result = await _breakpointPresenter.present(
    phase: InfospectBreakpointPhase.request,
    payload: payload,
  );

  if (requestId != null && !result.aborted) {
    final edited = result.payload != payload;
    if (edited) {
      markBreakpointTrace(requestId: requestId, requestEdited: true);
    }
  }

  return result;
}