Skip to content

Commit 2bed3d7

Browse files
authored
Fix uploadMedia for chunked media upload in V2 according to docs (#585)
* Update uploadMedia to use new dedicated endpoints for chunked media upload in V2 * Minor fixes
1 parent 039ecf6 commit 2bed3d7

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

src/types/v2/media.v2.types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
export type MediaV2MediaCategory = 'tweet_image' | 'tweet_video' | 'tweet_gif' | 'dm_image' | 'dm_video' | 'dm_gif' | 'subtitles';
22

33
export interface MediaV2UploadInitParams {
4+
additional_owners?: string[];
5+
media_category?: MediaV2MediaCategory;
46
media_type: string;
57
total_bytes: number;
6-
media_category?: MediaV2MediaCategory;
78
}
89

910
export interface MediaV2UploadAppendParams {

src/v2/client.v2.write.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,13 @@ export default class TwitterApiv2ReadWrite extends TwitterApiv2ReadOnly {
128128
* https://docs.x.com/x-api/media/media-upload
129129
*
130130
* @param media The media buffer to upload
131-
* @param options Upload options including media type and category
131+
* @param options Upload options including media type and category, and additional owners
132132
* @param chunkSize Size of each chunk in bytes (default: 1MB)
133133
* @returns The media ID of the uploaded media
134134
*/
135135
public async uploadMedia(
136136
media: Buffer,
137-
options: { media_type: `${EUploadMimeType}` | EUploadMimeType; media_category?: MediaV2MediaCategory },
137+
options: { media_type: `${EUploadMimeType}` | EUploadMimeType; media_category?: MediaV2MediaCategory, additional_owners?: string[] },
138138
chunkSize: number = 1024 * 1024
139139
): Promise<string> {
140140
let media_category = options.media_category;
@@ -150,12 +150,13 @@ export default class TwitterApiv2ReadWrite extends TwitterApiv2ReadOnly {
150150
}
151151

152152
const initArguments: MediaV2UploadInitParams = {
153+
additional_owners: options.additional_owners,
153154
media_type: options.media_type,
154155
total_bytes: media.length,
155156
media_category,
156157
};
157158

158-
const initResponse = await this.post<MediaV2UploadResponse>('media/upload/initialize', initArguments, { forceBodyMode: 'form-data' });
159+
const initResponse = await this.post<MediaV2UploadResponse>('media/upload/initialize', initArguments);
159160
const mediaId = initResponse.data.id;
160161

161162
const chunksCount = Math.ceil(media.length / chunkSize);
@@ -167,7 +168,7 @@ export default class TwitterApiv2ReadWrite extends TwitterApiv2ReadOnly {
167168
const chunkedBuffer = Buffer.from(mediaChunk);
168169

169170
const appendArguments: MediaV2UploadAppendParams = {
170-
segment_index: i,
171+
segment_index: i + 1,
171172
media: chunkedBuffer,
172173
};
173174

0 commit comments

Comments
 (0)