umami/src/lib/crypto.ts

30 lines
699 B
TypeScript
Raw Normal View History

import { startOfHour, startOfMonth } from 'date-fns';
2022-08-29 05:20:54 +02:00
import { hash } from 'next-basics';
2023-07-29 02:21:34 +02:00
import { v4, v5, validate } from 'uuid';
2020-07-23 05:45:09 +02:00
export function secret() {
2022-12-28 06:38:23 +01:00
return hash(process.env.APP_SECRET || process.env.DATABASE_URL);
2020-07-23 05:45:09 +02:00
}
2020-07-23 00:46:05 +02:00
2020-08-21 04:38:20 +02:00
export function salt() {
2022-08-29 05:20:54 +02:00
const ROTATING_SALT = hash(startOfMonth(new Date()).toUTCString());
2022-10-31 19:02:37 +01:00
return hash(secret(), ROTATING_SALT);
2020-08-21 04:38:20 +02:00
}
2023-07-29 02:21:34 +02:00
export function sessionSalt() {
const ROTATING_SALT = hash(startOfHour(new Date()).toUTCString());
return hash(secret(), ROTATING_SALT);
}
2023-12-04 07:49:30 +01:00
export function uuid(...args: any) {
2023-07-29 02:21:34 +02:00
if (!args.length) return v4();
2023-10-20 22:54:03 +02:00
return v5(hash(...args, salt()), v5.DNS);
2023-07-29 02:21:34 +02:00
}
2023-12-03 12:07:03 +01:00
export function isUuid(value: string) {
2023-07-29 02:21:34 +02:00
return validate(value);
}