From cee7d9c065f7cd444e86b37ad026db781edeadbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Wed, 18 Mar 2026 16:36:28 +0100 Subject: [PATCH] pl-api: explicitly specify formdata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/nicolium/src/pages/settings/import-data.tsx | 2 +- packages/pl-api/lib/client/admin.ts | 4 ++-- packages/pl-api/lib/client/drive.ts | 2 +- packages/pl-api/lib/client/events.ts | 2 +- packages/pl-api/lib/client/oauth.ts | 4 ++-- packages/pl-api/lib/client/settings.ts | 12 ++++++------ packages/pl-api/lib/client/stories.ts | 2 +- packages/pl-api/lib/request.ts | 4 +++- 8 files changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/nicolium/src/pages/settings/import-data.tsx b/packages/nicolium/src/pages/settings/import-data.tsx index 0e0294fdd..838e73ab4 100644 --- a/packages/nicolium/src/pages/settings/import-data.tsx +++ b/packages/nicolium/src/pages/settings/import-data.tsx @@ -137,7 +137,7 @@ const ImportDataPage = () => { .request('/api/pleroma/archive_import', { method: 'POST', body: form, - contentType: '', + formData: true, }) .then(() => { toast.success(messages.archiveSuccess); diff --git a/packages/pl-api/lib/client/admin.ts b/packages/pl-api/lib/client/admin.ts index f5bf82704..53654e765 100644 --- a/packages/pl-api/lib/client/admin.ts +++ b/packages/pl-api/lib/client/admin.ts @@ -1525,7 +1525,7 @@ const admin = (client: PlApiBaseClient) => { const response = await client.request('/api/v1/admin/custom_emojis', { method: 'POST', body: params, - contentType: '', + formData: true, }); return v.parse(adminCustomEmojiSchema, response.json); @@ -1535,7 +1535,7 @@ const admin = (client: PlApiBaseClient) => { const response = await client.request(`/api/v1/admin/custom_emojis/${emojiId}`, { method: 'PATCH', body: params, - contentType: '', + formData: true, }); return v.parse(adminCustomEmojiSchema, response.json); diff --git a/packages/pl-api/lib/client/drive.ts b/packages/pl-api/lib/client/drive.ts index a410b6f56..5ef824b32 100644 --- a/packages/pl-api/lib/client/drive.ts +++ b/packages/pl-api/lib/client/drive.ts @@ -81,7 +81,7 @@ const drive = (client: PlApiBaseClient) => ({ method: 'POST', body: { file }, params: { folderId }, - contentType: '', + formData: true, }); return v.parse(driveFileSchema, response.json); diff --git a/packages/pl-api/lib/client/events.ts b/packages/pl-api/lib/client/events.ts index ddb832416..f6be65dc0 100644 --- a/packages/pl-api/lib/client/events.ts +++ b/packages/pl-api/lib/client/events.ts @@ -131,7 +131,7 @@ const events = (client: PlApiBaseClient) => ({ */ getEventIcs: async (statusId: string) => { const response = await client.request(`/api/v1/pleroma/events/${statusId}/ics`, { - contentType: '', + formData: true, }); return response.data; diff --git a/packages/pl-api/lib/client/oauth.ts b/packages/pl-api/lib/client/oauth.ts index b17092c82..568ffee02 100644 --- a/packages/pl-api/lib/client/oauth.ts +++ b/packages/pl-api/lib/client/oauth.ts @@ -76,7 +76,7 @@ const oauth = (client: PlApiBaseClient) => ({ const response = await client.request('/oauth/token', { method: 'POST', body: params, - contentType: '', + formData: true, }); return v.parse(tokenSchema, { scope: params.scope || '', ...response.json }); @@ -91,7 +91,7 @@ const oauth = (client: PlApiBaseClient) => ({ const response = await client.request('/oauth/revoke', { method: 'POST', body: params, - contentType: '', + formData: true, }); client.socket?.close(); diff --git a/packages/pl-api/lib/client/settings.ts b/packages/pl-api/lib/client/settings.ts index d4472b3dc..9a6847d2e 100644 --- a/packages/pl-api/lib/client/settings.ts +++ b/packages/pl-api/lib/client/settings.ts @@ -559,7 +559,7 @@ const settings = (client: PlApiBaseClient) => ({ response = await client.request('/api/v1/import', { method: 'POST', body: { data: list, type: 'following', mode }, - contentType: '', + formData: true, }); break; case MITRA: @@ -572,7 +572,7 @@ const settings = (client: PlApiBaseClient) => ({ response = await client.request('/api/pleroma/follow_import', { method: 'POST', body: { list }, - contentType: '', + formData: true, }); } @@ -611,14 +611,14 @@ const settings = (client: PlApiBaseClient) => ({ response = await client.request('/api/v1/import', { method: 'POST', body: { data: list, type: 'blocks', mode }, - contentType: '', + formData: true, }); break; default: response = await client.request('/api/pleroma/blocks_import', { method: 'POST', body: { list }, - contentType: '', + formData: true, }); } @@ -640,14 +640,14 @@ const settings = (client: PlApiBaseClient) => ({ response = await client.request('/api/v1/import', { method: 'POST', body: { data: list, type: 'blocks', mode }, - contentType: '', + formData: true, }); break; default: response = await client.request('/api/pleroma/mutes_import', { method: 'POST', body: { list }, - contentType: '', + formData: true, }); } diff --git a/packages/pl-api/lib/client/stories.ts b/packages/pl-api/lib/client/stories.ts index 88e54dbfe..f39426d35 100644 --- a/packages/pl-api/lib/client/stories.ts +++ b/packages/pl-api/lib/client/stories.ts @@ -110,7 +110,7 @@ const stories = (client: PlApiBaseClient) => ({ const response = await client.request('/api/web/stories/v1/add', { method: 'POST', body: { file }, - contentType: '', + formData: true, }); return v.parse(storyMediaSchema, response.json); diff --git a/packages/pl-api/lib/request.ts b/packages/pl-api/lib/request.ts index 6d4f577cf..cf0935ddf 100644 --- a/packages/pl-api/lib/request.ts +++ b/packages/pl-api/lib/request.ts @@ -78,6 +78,7 @@ interface RequestBody> { onUploadProgress?: (e: ProgressEvent) => void; signal?: AbortSignal; contentType?: string; + formData?: boolean; idempotencyKey?: string; } @@ -96,6 +97,7 @@ function request( onUploadProgress, signal, contentType = 'application/json', + formData, idempotencyKey, }: RequestBody = {}, ) { @@ -108,7 +110,7 @@ function request( else if (this.accessToken) headers.set('Authorization', `Bearer ${this.accessToken}`); else if (this.customAuthorizationToken) headers.set('Authorization', this.customAuthorizationToken); - if (contentType !== '' && body) headers.set('Content-Type', contentType); + if (!formData) headers.set('Content-Type', contentType); if (idempotencyKey) headers.set('Idempotency-Key', idempotencyKey); body = body && contentType === '' ? serialize(body, { indices: true }) : JSON.stringify(body);