public function requestChallenges(string $dns): Promise {
        return call(function () use ($dns) {
            /** @var Response $response */
            $response = yield $this->acmeClient->post(AcmeResource::NEW_AUTHORIZATION, [
                'identifier' => [
                    'type' => 'dns',
                    'value' => $dns,
                ],
            ]);

            if ($response->getStatus() === 201) {
                if (!$response->hasHeader('location')) {
                    throw new AcmeException("Protocol violation: Response didn't carry any location header.");
                }

                return [$response->getHeader('location'), json_decode(yield $response->getBody())];
            }

            throw $this->generateException($response, yield $response->getBody());
        });
    }