forceRefresh; if (! $bypass && is_array($entry) && time() < $entry['fetched_at'] + $freshSeconds) { return $entry['value']; } if (! $bypass && ! is_array($entry) && ($failure = Cache::get($cacheKey.':failed'))) { throw new RuntimeException((string) $failure); } try { $value = $fetch(); } catch (Throwable $exception) { if (is_array($entry)) { report($exception); return $entry['value']; } Cache::put($cacheKey.':failed', $exception->getMessage(), self::FAILURE_COOLDOWN_SECONDS); throw $exception; } Cache::put($cacheKey, ['value' => $value, 'fetched_at' => time()], self::RETAIN_SECONDS); Cache::forget($cacheKey.':failed'); return $value; } public function forget(string $key): void { Cache::forget('integration:'.$key); Cache::forget('integration:'.$key.':failed'); } }