dispatchFetchExchange function

Future<FetchResponseView> dispatchFetchExchange(
  1. Engine engine,
  2. FetchRequestView request, {
  3. required RoutedNodeRuntimeInfo runtime,
  4. Uri? baseUri,
})

Dispatches a Fetch-style request through Routed's buffered portable path.

Implementation

Future<FetchResponseView> dispatchFetchExchange(
  Engine engine,
  FetchRequestView request, {
  required RoutedNodeRuntimeInfo runtime,
  Uri? baseUri,
}) async {
  publishRoutedNodeLifecycle(
    engine,
    RoutedNodeLifecycleEvent(
      phase: RoutedNodeLifecyclePhase.requestStarted,
      info: runtime,
    ),
  );

  try {
    final response = await engine.handlePortable(
      portableRequestFromFetch(request, baseUri: baseUri),
    );
    publishRoutedNodeLifecycle(
      engine,
      RoutedNodeLifecycleEvent(
        phase: RoutedNodeLifecyclePhase.requestFinished,
        info: runtime,
      ),
    );
    return FetchResponseView(
      statusCode: response.statusCode,
      headers: response.headers.asMap,
      body: response.body,
    );
  } catch (error, stackTrace) {
    publishRoutedNodeLifecycle(
      engine,
      RoutedNodeLifecycleEvent(
        phase: RoutedNodeLifecyclePhase.requestFailed,
        info: runtime,
        error: error,
        stackTrace: stackTrace,
      ),
    );
    rethrow;
  }
}