import { AwsClient } from "aws4fetch"; const contentTypes: { [k: string]: string } = { gif: "image/gif", m4v: "video/x-m4v", mkv: "video/x-matroska", mov: "video/mp4", mp4: "video/mp4", webm: "video/webm", wmv: "video/x-ms-wmv", }; export default async function ( env: Env, path: string, size: number, extension: string, ) { const aws = new AwsClient({ accessKeyId: env.R2_ACCESS_KEY, secretAccessKey: env.R2_SECRET_KEY, }); return ( await aws.sign( `https://car-crushers.${env.R2_ZONE}.r2.cloudflarestorage.com/${path}?X-Amz-Expires=1800`, { aws: { allHeaders: true, signQuery: true, }, headers: { "content-length": size.toString(), "content-type": contentTypes[extension], }, method: "PUT", }, ) ).url; }