header('Idempotency-Key'); if (! is_string($key) || trim($key) === '') { return response()->json( ['error' => 'idempotency_key_required'], 400, ); } $cacheKey = 'idempotency:60s:'.$key; $cached = Cache::get($cacheKey); if (is_array($cached)) { $response = response($cached['body'], $cached['status']); foreach ($cached['headers'] ?? [] as $name => $value) { $response->headers->set($name, $value); } $response->headers->set('Idempotency-Replayed', 'true'); return $response; } /** @var Response $response */ $response = $next($request); if ($response->isSuccessful()) { Cache::put($cacheKey, [ 'status' => $response->getStatusCode(), 'body' => $response->getContent(), 'headers' => [ 'Content-Type' => $response->headers->get('Content-Type'), ], ], 60); } return $response; } }