//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