← Public packages
@kentcdodds/google
Google helpers for Gmail, Calendar, Drive, People, YouTube (including upload), and Analytics.
src/youtube-upload-video.ts
38 lines · 1.7 KB · TypeScriptimport {
uploadVideo,
type YouTubeUploadVideoParams,
type YouTubeUploadVideoResult,
} from './youtube.ts'
export type { YouTubeUploadVideoParams, YouTubeUploadVideoResult } from './youtube.ts'
export { uploadVideo }
/**
* Upload a video to YouTube via the resumable upload protocol. Maps videoUrl/title aliases; rejects unknown keys.
*
* Use this alias when you only need upload, not the full `./youtube` helper namespace.
* Fetches media from `videoUrl` in Range chunks (works with Cloudflare R2 object API URLs).
*
* @param params.account - Google account alias (`youtube-brand` or `youtube-plus`).
* @param params.videoUrl - Fetchable video URL (for example a Cloudflare R2 object API URL).
* @param params.title - Video title.
* @param params.privacyStatus - Optional privacy (`public`, `unlisted`, `private`). Defaults to private.
* @param params.dryRun - Probe the video URL and return without uploading.
* @returns Uploaded video id, title, privacy, and byte count.
* @example
* import uploadVideo from 'kody:@kentcdodds/google/youtube-upload-video'
* const result = await uploadVideo({
* account: 'youtube-plus',
* videoUrl: 'https://api.cloudflare.com/client/v4/accounts/…/r2/buckets/kcd-promo-videos/objects/ep/promo/bluesky.mp4',
* videoFetchHeaders: { Authorization: 'Bearer {{secret:cloudflareApiToken}}' },
* title: 'Promo title',
* privacyStatus: 'private',
* dryRun: true,
* })
* // => { id: 'dry-run', title: 'Promo title', privacyStatus: 'private', bytes: 123456, dryRun: true }
*/
export default async function youtubeUploadVideo(
params: YouTubeUploadVideoParams,
): Promise<YouTubeUploadVideoResult> {
return await uploadVideo(params)
}