import type { IDataObject, IExecuteSingleFunctions, IHttpRequestOptions } from 'n8n-workflow'; import { NodeOperationError } from 'n8n-workflow'; import FormData from 'form-data'; export async function getUploadFormData( this: IExecuteSingleFunctions, ): Promise<{ fileName: string; formData: FormData }> { const mediaPropertyName = ((this.getNodeParameter('mediaPropertyName') as string) || '').trim(); if (!mediaPropertyName) throw new NodeOperationError(this.getNode(), 'Parameter "mediaPropertyName" is not defined'); const binaryData = this.helpers.assertBinaryData(mediaPropertyName); const mediaFileName = (this.getNodeParameter('additionalFields') as IDataObject).mediaFileName as | string | undefined; const fileName = mediaFileName || binaryData.fileName; if (!fileName) throw new NodeOperationError(this.getNode(), 'No file name given for media upload.'); const buffer = await this.helpers.getBinaryDataBuffer(mediaPropertyName); const formData = new FormData(); formData.append('file', buffer, { contentType: binaryData.mimeType, filename: fileName }); formData.append('messaging_product', 'whatsapp'); return { fileName, formData }; } export async function setupUpload( this: IExecuteSingleFunctions, requestOptions: IHttpRequestOptions, ) { const uploadData = await getUploadFormData.call(this); requestOptions.body = uploadData.formData; return requestOptions; }