client = $browser; $this->cliRequestLogger = $cliRequestLogger; } public function findLoggedRequest(string $id): ?LoggedRequest { return collect($this->requests)->first(function (LoggedRequest $loggedRequest) use ($id) { return $loggedRequest->id() === $id; }); } public function logRequest(string $rawRequest, Request $request): LoggedRequest { $loggedRequest = new LoggedRequest($rawRequest, $request); array_unshift($this->requests, $loggedRequest); $this->requests = array_slice($this->requests, 0, config('expose.max_logged_requests', 10)); $this->cliRequestLogger->logRequest($loggedRequest); $this->pushLogs(); return $loggedRequest; } public function logResponse(Request $request, string $rawResponse) { $loggedRequest = collect($this->requests)->first(function (LoggedRequest $loggedRequest) use ($request) { return $loggedRequest->getRequest() === $request; }); if ($loggedRequest) { $loggedRequest->setResponse($rawResponse, Response::fromString($rawResponse)); $this->cliRequestLogger->logRequest($loggedRequest); $this->pushLogs(); } } public function getData(): array { return $this->requests; } public function clear() { $this->requests = []; $this->pushLogs(); } public function pushLogs() { // TODO: Make dashboard part configurable $this ->client ->post( 'http://127.0.0.1:4040/api/logs', ['Content-Type' => 'application/json'], json_encode($this->getData(), JSON_INVALID_UTF8_IGNORE) ); } }