* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class Document implements ResolverInterface { private const API_URL = 'https://api.typehub.cloud/document/%s/%s/export'; /** @var ClientInterface */ private $httpClient; public function __construct(ClientInterface $httpClient) { $this->httpClient = $httpClient; } public function resolve(Uri $uri, ?string $basePath = null): \stdClass { $document = ltrim($uri->getPath(), '/'); $user = $uri->getHost(); $version = $uri->getParameter('version'); $url = $this->export($user, $document, $version); $request = new PostRequest($url, ['Accept' => 'application/json', 'User-Agent' => Http::USER_AGENT]); $response = $this->httpClient->request($request); if ($response->getStatusCode() !== 200) { throw new ParserException('Could not export provided document: ' . $user . '/' . $document . ' received ' . $response->getStatusCode()); } return Parser::decode((string) $response->getBody()); } private function export(string $user, string $document, ?string $version): Url { $request = new PostRequest($this->getApiUrl($user, $document, $version), ['Accept' => 'application/json', 'User-Agent' => Http::USER_AGENT]); $response = $this->httpClient->request($request); if ($response->getStatusCode() !== 200) { throw new ParserException('Could not export provided document: ' . $user . '/' . $document . ' received ' . $response->getStatusCode()); } $data = Parser::decode((string) $response->getBody(), true); $exportLink = $data['href'] ?? null; if (empty($exportLink)) { throw new ParserException('Could not find a fitting export url'); } return new Url($exportLink); } private function getApiUrl(string $user, string $document, ?string $version): Url { $url = new Url(sprintf(self::API_URL, $user, $document)); $parameters = ['format' => 'typeschema']; if (!empty($version)) { $parameters['version'] = $version; } return $url->withParameters($parameters); } } __halt_compiler();----SIGNATURE:----ZYpyTp4ccVGdCpl7QfC8KHEJDLKH5oRD5TFZi/WMX0A4KBMz5Am0QlCSJVul4yGxp3vRX+KoC34mht3z+KpP/c6r/Isd8nF8e9gEb9jiXpTO2xDXFnXg0IB6TWtn/F/dwilAxcYPql3nYLAlITDrOUBznEwsc29ikAD91wkBPAmnSmffqT9VHKmDrG1bO97XFNnOcV+RMUPmpH82y9BERd5Bx3NMf2MGjYnWMjfDeWF2oSirvTxUDfWlkLimx+BPTG4uPPoYdHjTY+QezmyTS5E7F+5sngNxQyWXvFkPdUl9+pQtoTrtuG01qd0ZpummowLIsMSVFFgdsJOKl6WCvs6HsC6Rq0o5o6odcQZnRuA1XcIKy1PndZSWrR850PQFUx1pwnlNWT1dFpMd032ixGlveKr8C5kAvrTodOjQDeq8BOAdvZc+4/iQwkCDv9SVDbUJ7yTwtLfkTWnaeO4vPU2T6H+gsph24uZus/XiMif/dEWtEm+ItwowZumH3Ly85cVMmozb818AfcfRcnoVpFjmXeaUgUB+rZnhpEzbTMGjkrjfFO8CKJ1O+gxq+J3p9QAvWvf5QDEbEEKfPVyP0ZDNWGjS/PF+BZpM2P3NBA7/VR0NEQJNKUEgSxvKaaezd2oE1hwFW32zNdFOmdgSEc8ZabbH+davijfhnWRGIoc=----ATTACHMENT:----NTY1MTQ4NjkwNDk3ODU5OCA3NDUxNjc1MzIyNjA2NTY0IDU3MTI2ODY5MDAyNDU5MQ==