feat: integrate unfurl and blob services into post creation flow master
Wire unfurl and blob services into the post creation pipeline, enabling automatic enhancement of external embeds with rich metadata and thumbnails. **Post Service Integration:** - Add optional BlobService and UnfurlService dependencies - Update constructor to accept blob/unfurl services (nil-safe) - Add ThumbnailURL field to CreatePostRequest for client-provided URLs - Add PDSURL to CommunityRef for blob URL transformation (internal only) **Server Main Changes:** - Initialize unfurl repository with PostgreSQL - Initialize blob service with default PDS URL - Initialize unfurl service with: - 10s timeout for HTTP fetches - 24h cache TTL - CovesBot/1.0 user agent - Pass blob and unfurl services to post service constructor **Flow:** ``` Client POST → CreateHandler ↓ PostService.Create() [external embed detected] ↓ (if no thumb provided) UnfurlService.UnfurlURL() [fetch oEmbed/OpenGraph] ↓ (cache miss) HTTP fetch → oEmbed provider / HTML parser ↓ (thumbnail URL found) BlobService.UploadBlobFromURL() [download & upload to PDS] ↓ com.atproto.repo.uploadBlob → PDS ↓ (returns BlobRef with CID) Embed enriched with thumb blob → Write to PDS ``` **Interface Documentation:** - Added comments explaining optional blob/unfurl service injection - Unfurl service auto-enriches external embeds when provided - Blob service uploads thumbnails from unfurled URLs This is the core integration that enables the full unfurling feature. The actual unfurl logic in posts/service.go will be implemented separately.