diff options
Diffstat (limited to 'src/lib/api')
-rw-r--r-- | src/lib/api/index.ts | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index fa2e4ba6c..f6537e3d1 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,4 +1,5 @@ import { + AppBskyEmbedDefs, AppBskyEmbedExternal, AppBskyEmbedImages, AppBskyEmbedRecord, @@ -45,7 +46,12 @@ interface PostOpts { uri: string cid: string } - video?: BlobRef + video?: { + blobRef: BlobRef + altText: string + captions: {lang: string; file: File}[] + aspectRatio?: AppBskyEmbedDefs.AspectRatio + } extLink?: ExternalEmbedDraft images?: ImageModel[] labels?: string[] @@ -128,19 +134,35 @@ export async function post(agent: BskyAgent, opts: PostOpts) { // add video embed if present if (opts.video) { + const captions = await Promise.all( + opts.video.captions + .filter(caption => caption.lang !== '') + .map(async caption => { + const {data} = await agent.uploadBlob(caption.file, { + encoding: 'text/vtt', + }) + return {lang: caption.lang, file: data.blob} + }), + ) if (opts.quote) { embed = { $type: 'app.bsky.embed.recordWithMedia', record: embed, media: { $type: 'app.bsky.embed.video', - video: opts.video, + video: opts.video.blobRef, + alt: opts.video.altText || undefined, + captions: captions.length === 0 ? undefined : captions, + aspectRatio: opts.video.aspectRatio, } as AppBskyEmbedVideo.Main, } as AppBskyEmbedRecordWithMedia.Main } else { embed = { $type: 'app.bsky.embed.video', - video: opts.video, + video: opts.video.blobRef, + alt: opts.video.altText || undefined, + captions: captions.length === 0 ? undefined : captions, + aspectRatio: opts.video.aspectRatio, } as AppBskyEmbedVideo.Main } } |