Files
twtxt-lib/dist-node/hashTwt.js
Eric Woodward 1c06197be0 resolve issue with missing vite-plugin-node-polyfills
add LibreJS licenses to all demo JS
split browser build from node build
add copyright info to license files
update to use yarn v4.13.0
update to v0.9.2
2026-03-07 20:47:14 -05:00

40 lines
1.1 KiB
JavaScript

import { blake2b } from "@exodus/blakejs";
import { base32Encode } from "./utils.js";
const dateRegex = /^(\d{4})-(\d{2})-(\d{2})([tT ])(\d{2}):(\d{2}):(\d{2})\.?(\d{3})?(?:(?:([+-]\d{2}):?(\d{2}))|Z)?$/;
const formatRFC3339 = (date) => {
const pad = (num = 0) => `${+num < 10 ? 0 : ""}${+num}`;
const padYear = (num = 0) => `${+num < 1e3 ? 0 : ""}${+num < 100 ? 0 : ""}${+num < 10 ? 0 : ""}${+num}`;
let m = dateRegex.exec(date);
if (m && m?.[9] === void 0) {
m[9] = "+00";
}
if (m && m?.[10] === void 0) {
m[10] = "00";
}
const offset = `${m?.[9]}:${m?.[10]}`.replace(/[+-]?00:00$/, "Z");
return [
padYear(m?.[1]),
"-",
pad(m?.[2]),
"-",
pad(m?.[3]),
m?.[4],
pad(m?.[5]),
":",
pad(m?.[6]),
":",
pad(m?.[7]),
//ignore milliseconds (m[8])
offset
].join("");
};
function hashTwt(twt) {
const created = formatRFC3339(twt.created);
const payload = [twt.url, created, twt.content].join("\n");
return base32Encode(blake2b(payload, void 0, 32)).toLowerCase().slice(-7);
}
export {
hashTwt as default
};
//# sourceMappingURL=hashTwt.js.map