export function isValidPort(port: number) { if (typeof port !== "number" || isNaN(port)) { return false; } if (port <= 0) { return false; } const minPort = 1; const maxPort = 65535; return port >= minPort && port <= maxPort;}
export function isValidBucketName(bucket: string) { if (typeof bucket !== "string") { return false; }
if (bucket.length < 3 || bucket.length > 63) { return false; } if (bucket.indexOf("..") > -1) { return false; } if (bucket.match(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)) { return false; } if (bucket.match(/^[a-z0-9][a-z0-9.-]+[a-z0-9]$/)) { return true; } return false;}
export function isValidObjectName(objectName: string) { if (!isValidPrefix(objectName)) return false; if (objectName.length === 0) return false; return true;}
export function isValidPrefix(prefix: string) { if (typeof prefix !== "string") return false; if (prefix.length > 1024) return false; return true;}
export function bin2hex(binary: Uint8Array) { return Array.from(binary).map((b) => b.toString(16).padStart(2, "0")).join( "", );}
export function sanitizeETag(etag = "") { const replaceChars: Record<string, string> = { '"': "", """: "", """: "", """: "", """: "", }; return etag.replace( /^("|"|")|("|"|")$/g, (m) => replaceChars[m], );}
export function getVersionId(headers: Headers): string | null { return headers.get("x-amz-version-id") ?? null;}
export function makeDateLong(date?: Date) { date = date || new Date();
const dateStr = date.toISOString();
return dateStr.substr(0, 4) + dateStr.substr(5, 2) + dateStr.substr(8, 5) + dateStr.substr(14, 2) + dateStr.substr(17, 2) + "Z";}
export function makeDateShort(date?: Date) { date = date || new Date();
const dateStr = date.toISOString();
return dateStr.substr(0, 4) + dateStr.substr(5, 2) + dateStr.substr(8, 2);}
export function getScope(region: string, date: Date) { return `${makeDateShort(date)}/${region}/s3/aws4_request`;}
export async function sha256digestHex(data: Uint8Array | string) { if (!(data instanceof Uint8Array)) { data = new TextEncoder().encode(data); } return bin2hex(new Uint8Array(await crypto.subtle.digest("SHA-256", data)));}