|null */ public function get(int $sessionId, string $fingerprint): ?array { $cached = $this->store->getTransient($this->key($sessionId)); if (!is_array($cached) || !is_string($cached['fingerprint'] ?? null) || !hash_equals($fingerprint, $cached['fingerprint']) || !is_array($cached['data'] ?? null)) { return null; } return $cached['data']; } /** * Save a preview until its context changes or the short TTL expires. * * @param array $data */ public function put(int $sessionId, string $fingerprint, array $data): void { $this->store->setTransient($this->key($sessionId), ['fingerprint' => $fingerprint, 'data' => $data], self::TTL_SECONDS); } protected function key(int $sessionId): string { return 'session-context-' . max(0, $sessionId); } }