appState = $appState; $errorProcessor->registerShutdownFunction(); $this->logger = $logger; } /** * Format a GraphQL error from an exception by converting it to array to conform to GraphQL spec. * * This method only exposes exception message when exception implements ClientAware interface * (or when debug flags are passed). * * @param \Throwable $exception * @param string $internalErrorMessage * @return array * @throws \Throwable */ public function create(\Throwable $exception, $internalErrorMessage = null) : array { if (!$this->shouldShowDetail()) { $reportId = uniqid("graph-ql-"); $message = "Report ID: {$reportId}; Message: {$exception->getMessage()}"; $code = $exception->getCode(); $loggedException = new \Exception($message, $code, $exception); $this->logger->critical($loggedException); } return \GraphQL\Error\FormattedError::createFromException( $exception, $this->shouldShowDetail() ? \GraphQL\Error\Debug::INCLUDE_DEBUG_MESSAGE | \GraphQL\Error\Debug::INCLUDE_TRACE : false, $internalErrorMessage ); } /** * Return true if detailed error message should be displayed to client, false otherwise. * * @return bool */ public function shouldShowDetail() : bool { return $this->appState->getMode() === State::MODE_DEVELOPER; } }