wrapped->setOptions(['return_assoc' => true]); attempt(fn () => $this->setAccessToken()); } } private function setAccessToken(): void { $token = $this->cache->get('spotify.access_token'); if (!$token) { $this->session->requestCredentialsToken(); $token = $this->session->getAccessToken(); // Spotify's tokens expire after 1 hour, so we'll cache them with some buffer to an extra call. $this->cache->put('spotify.access_token', $token, 59 * 60); } $this->wrapped->setAccessToken($token); } public function __call(string $name, array $arguments): mixed { throw_unless(SpotifyService::enabled(), SpotifyIntegrationDisabledException::create()); return $this->wrapped->$name(...$arguments); } }