openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
31 lines (30 loc) • 1.17 kB
JavaScript
import { createReadStream } from "node:fs";
import { createHash } from "node:crypto";
//#region src/infra/crypto-digest.ts
function sha256Hex(input) {
return createHash("sha256").update(input).digest("hex");
}
function sha256Base64(input) {
return createHash("sha256").update(input).digest("base64");
}
function sha256Base64Url(input) {
return createHash("sha256").update(input).digest("base64url");
}
function sha256Base64UrlPrefix(input, length) {
return sha256Base64Url(input).slice(0, length);
}
function sha256HexPrefixCore(input, length) {
return sha256Hex(input).slice(0, length);
}
/** Streams a file, optionally stopping at an inclusive byte offset. */
async function sha256File(filePath, end) {
const digest = createHash("sha256");
try {
for await (const chunk of createReadStream(filePath, { end })) digest.update(chunk);
} catch (err) {
throw new Error(`Failed to hash file ${filePath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
}
return digest.digest("hex");
}
//#endregion
export { sha256Hex as a, sha256File as i, sha256Base64Url as n, sha256HexPrefixCore as o, sha256Base64UrlPrefix as r, sha256Base64 as t };