Files
snort/src/Feed/VoidUpload.ts

57 lines
1.4 KiB
TypeScript

import * as secp from "@noble/secp256k1";
import { VoidCatHost } from "Const";
/**
* Upload file to void.cat
* https://void.cat/swagger/index.html
*/
export default async function VoidUpload(file: File | Blob, filename: string) {
const buf = await file.arrayBuffer();
const digest = await crypto.subtle.digest("SHA-256", buf);
let req = await fetch(`${VoidCatHost}/upload`, {
mode: "cors",
method: "POST",
body: buf,
headers: {
"Content-Type": "application/octet-stream",
"V-Content-Type": file.type,
"V-Filename": filename,
"V-Full-Digest": secp.utils.bytesToHex(new Uint8Array(digest)),
"V-Description": "Upload from https://snort.social",
"V-Strip-Metadata": "true"
}
});
if (req.ok) {
let rsp: VoidUploadResponse = await req.json();
return rsp;
}
return null;
}
export type VoidUploadResponse = {
ok: boolean,
file?: VoidFile,
errorMessage?: string
}
export type VoidFile = {
id: string,
meta?: VoidFileMeta
}
export type VoidFileMeta = {
version: number,
id: string,
name?: string,
size: number,
uploaded: Date,
description?: string,
mimeType?: string,
digest?: string,
url?: string,
expires?: Date,
storage?: string,
encryptionParams?: string,
}