export async function uploadImage(image: Blob): Promise<string> {
const fd = new FormData();
fd.append(
"file",
image,
);
const data = await (await fetch(await getUploadURL(), {
"body": fd,
"method": "POST",
})).json();
if (!data.success) {
if (data.errors?.length) {
throw new Error(data.errors.map(e => e.message).join("\n"));
} else {
throw new Error(JSON.stringify(data));
}
}
return data.result.variants[0];
}
async function getUploadURL(): Promise<string> {
const data = await (await fetch("https://www.val.town/api/trpc/generateImageUploadUrl", {
"headers": {
"content-type": "application/json",
"authorization": "Bearer " + Deno.env.get("valtown"),
},
})).json();
if (data?.result?.data?.success && data?.result?.data?.result?.uploadURL) {
return data.result.data.result.uploadURL;
} else {
if (data?.result?.data?.errors?.length) {
throw new Error(data.result.data.errors.map(e => e.message).join("\n"));
} else {
throw new Error(JSON.stringify(data));
}
}
}