interceptResponseIfNeeded method

Future<InfospectBreakpointResult?> interceptResponseIfNeeded({
  1. required String method,
  2. required String endpoint,
  3. required String uri,
  4. required Map<String, dynamic> headers,
  5. required dynamic body,
  6. int? statusCode,
  7. int? requestId,
  8. Map<String, dynamic> requestHeaders = const <String, dynamic>{},
  9. Map<String, dynamic> queryParameters = const <String, dynamic>{},
  10. dynamic requestBody,
})

Pauses for response editing when a matching breakpoint rule exists.

Implementation

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

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

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

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

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

  return result;
}