* } */ final class TokensResource implements TokensResourceInterface { use RebindsAuthState; use RebindsRequestHeaderCollection; private RequestExecutor $requestExecutor; private ApiUriFactory $apiUriFactory; private AuthState $authState; private RequestHeaderCollection $requestHeaderCollection; public function __construct( RequestExecutor $requestExecutor, ApiUriFactory $apiUriFactory, AuthState $authState, RequestHeaderCollection $requestHeaderCollection ) { $this->requestExecutor = $requestExecutor; $this->apiUriFactory = $apiUriFactory; $this->authState = $authState; $this->requestHeaderCollection = $requestHeaderCollection; } /** * @throws ApiErrorExceptionInterface * @throws MissingAuthenticationException * @throws UnexpectedResponseException * @throws ClientExceptionInterface * @throws JsonException */ public function list(string $licenseKey): TokenList { $result = $this->requestExecutor->executeJson( 'GET', $this->apiUriFactory->make('/tokens'), ['license_key' => $licenseKey], null, $this->authState->requiredToken(), $this->requestHeaderCollection->all() ); /** @var TokenListPayload $result */ return TokenList::from($result); } /** * @throws ApiErrorExceptionInterface * @throws MissingAuthenticationException * @throws UnexpectedResponseException * @throws ClientExceptionInterface * @throws JsonException */ public function create(CreateRequest $request): TokenItem { /** @var CreateTokenPayload $body */ $body = $request->toArray(); $result = $this->requestExecutor->executeJson( 'POST', $this->apiUriFactory->make('/tokens/create'), [], $body, $this->authState->requiredToken(), $this->requestHeaderCollection->all() ); /** @var CreateResponsePayload $result */ return TokenItem::from($result); } /** * @throws ApiErrorExceptionInterface * @throws MissingAuthenticationException * @throws UnexpectedResponseException * @throws ClientExceptionInterface * @throws JsonException */ public function revoke(RevokeRequest $request): TokenItem { /** @var RevokeTokenPayload $body */ $body = $request->toArray(); $result = $this->requestExecutor->executeJson( 'PUT', $this->apiUriFactory->make('/tokens/revoke'), [], $body, $this->authState->requiredToken(), $this->requestHeaderCollection->all() ); /** @var RevokeResponsePayload $result */ return TokenItem::from($result); } /** * @throws ApiErrorExceptionInterface * @throws UnexpectedResponseException * @throws ClientExceptionInterface * @throws JsonException */ public function auth(string $licenseKey, string $token, string $domain): Auth { $result = $this->requestExecutor->executeJson( 'GET', $this->apiUriFactory->make('/tokens/auth'), [ 'license_key' => $licenseKey, 'token' => $token, 'domain' => $domain, ], null, $this->authState->optionalToken(), $this->requestHeaderCollection->all() ); /** @var AuthResponsePayload $result */ return Auth::from($result); } protected function rebindWithAuthState(AuthState $authState): self { return new self($this->requestExecutor, $this->apiUriFactory, $authState, $this->requestHeaderCollection); } protected function rebindWithRequestHeaderCollection(RequestHeaderCollection $requestHeaderCollection): self { return new self($this->requestExecutor, $this->apiUriFactory, $this->authState, $requestHeaderCollection); } }