Files
hermes-mcp/.planning/phases/01-linkedin-video-upload/01-01-SUMMARY.md
garfieldheron c2eabd8e66 feat: LinkedIn video upload support (linkedin_upload_video tool + REST route)
Implements full 4-step LinkedIn Videos API flow: download from public URL,
initialize upload, 4MB chunk PUT with ETag collection, finalize, poll until
AVAILABLE, then publish via POST /rest/posts reading post ID from x-restli-id.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 12:26:42 -04:00

1.3 KiB

Phase 01 Plan 01: LinkedIn Video Upload Client Summary

Added linkedinRestRequest, uploadVideo, and createVideoPost to src/clients/linkedin.ts.

Accomplishments

  • linkedinRestRequest helper: mirrors linkedinRequest but targets https://api.linkedin.com/rest with LinkedIn-Version: 202501 header
  • uploadVideo(videoUrl, ownerUrn, accessToken): 5-step flow — download (ArrayBuffer, 120s timeout), initialize upload, chunk PUT at 4MB each with ETag collection, finalize, poll every 3s up to 90s until AVAILABLE
  • createVideoPost(args, customer): resolves token + profile, calls uploadVideo, posts via POST /rest/posts (not /v2/ugcPosts), reads post ID from x-restli-id header, wraps in audit log

Files Created/Modified

  • src/clients/linkedin.ts — added ~120 lines after existing createPost

Decisions Made

  • Used inline fetch for POST /rest/posts to read x-restli-id header before body is consumed
  • void CHUNK_SIZE line keeps the constant referenced to avoid unused-var lint; actual slice ranges come from uploadInstructions[].firstByte/lastByte
  • ETags stripped of surrounding quotes before passing to finalizeUpload

Issues Encountered

  • redis and mysql2 packages were not installed (node_modules was missing). Ran npm install — build became clean

Next Step

Ready for 01-02-PLAN.md