addMinutes(self::CACHE_MINUTES), fn (): ?array => $this->build($url)?->toArray(), ); return $data === null ? null : LinkCardMetadata::fromArray($data); } private function build(string $url): ?LinkCardMetadata { $response = $this->http->tryGet($url); if ($response === null) { return null; } $meta = $this->extractor->extract($response->body(), $url); $title = data_get($meta, 'title'); $description = data_get($meta, 'description'); if ($title === null && $description === null) { return null; } return new LinkCardMetadata( uri: $url, title: $title ?? '', description: $description ?? '', imageUrl: data_get($meta, 'image'), ); } }