Edits history of script submission #15218 for ' Upload files for a company (codat)'

  • bun
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    type Codat = {
    	encodedKey: string
    }
    type Base64 = string
    /**
     * Upload files for a company
     * The *Upload files* endpoint uploads multiple files provided by the SMB to Codat. This may include personal identity documents, pitch decks, contracts, or files with accounting and banking data.
    
    Uploaded files must meet the following requirements:
    
    - Up to 20 files can be uploaded at a time.
    - PDF, XLS, XLSX, XLSB, CSV, DOC, DOCX, PPT, PPTX, JPEG, JPG, and PNG files can be uploaded.
    - Each file can be up to 10MB in size.
     */
    export async function main(
    	auth: Codat,
    	companyId: string,
    	connectionId: string,
    	body: {
    		file: {
    			base64: Base64
    			type:
    				| 'image/png'
    				| 'image/jpeg'
    				| 'image/gif'
    				| 'application/pdf'
    				| 'appication/json'
    				| 'text/csv'
    				| 'text/plain'
    				| 'audio/mpeg'
    				| 'audio/wav'
    				| 'video/mp4'
    			name: string
    		}
    	}
    ) {
    	const url = new URL(
    		`https://api.codat.io/companies/${companyId}/connections/${connectionId}/files`
    	)
    
    	const formData = new FormData()
    	for (const [k, v] of Object.entries(body)) {
    		if (v !== undefined) {
    			if (['file'].includes(k)) {
    				const { base64, type, name } = v as {
    					base64: Base64
    					type: string
    					name: string
    				}
    				formData.append(
    					k,
    					new Blob([Uint8Array.from(atob(base64), (m) => m.codePointAt(0)!)], {
    						type
    					}),
    					name
    				)
    			} else {
    				formData.append(k, String(v))
    			}
    		}
    	}
    
    	const response = await fetch(url, {
    		method: 'POST',
    		headers: {
    			Authorization: `Basic ${auth.encodedKey}`
    		},
    		body: formData
    	})
    	if (!response.ok) {
    		const text = await response.text()
    		throw new Error(`${response.status} ${text}`)
    	}
    	return await response.text()
    }
    

    Submitted by hugo697 235 days ago