8171414f8a
Multipart is now the only upload transport, so drop the legacy `app.bsky.video.uploadVideo` request and everything that existed to choose between the two: - `MultipartFallbackError` is gone. A `startUpload` failure (a service without multipart support, or with the kill switch active) now propagates as the `MultipartUploadError` the API layer already built, and `abortThenRethrowOrResolve` rethrows the failure that forced the abort instead of a fallback signal - which keeps the real error class for retry classification and telemetry. - `getUploadErrorMessage` matches on `MultipartUploadError` where it matched on `ServerError`, so video-service messages (upload disabled, daily limits, oversized file) still map to their user-facing copy. `ServerError` had no other thrower and is removed. - With the legacy branch gone, `upload.ts` and `upload.web.ts` were identical, so the platform split collapses into one `upload.ts`. The web chunk reader already fetches the uri when `bytes` is missing, so nothing depended on the legacy path's buffer fetch. - The `did` parameter only seeded the legacy endpoint URL; it is dropped from `uploadVideo` and `processVideo`. - Transport reporting only existed to distinguish multipart from legacy, so `VideoUploadTransport`, `telemetry.uploadTransport`, the `video.upload.transport` span attribute, and the `transport` field on the uploadCompleted/uploadFailed events are removed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mn8DoxP5wQk6NbPmapWs9A