use sha2::{Digest, Sha256};
pub fn generate_token() -> String {
use rand::Rng;
let mut rng = rand::rng();
let bytes: Vec<u8> = (0..32).map(|_| rng.random::<u8>()).collect();
hex::encode(bytes)
}
pub fn hash_token(token: &str) -> String {
let mut hasher = Sha256::new();
hasher.update(token.as_bytes());
hex::encode(hasher.finalize())
}
pub fn generate_webhook_secret() -> String {
use base64::{engine::general_purpose::STANDARD_NO_PAD, Engine as _};
use rand::Rng;
let mut rng = rand::rng();
let bytes: Vec<u8> = (0..32).map(|_| rng.random::<u8>()).collect();
STANDARD_NO_PAD.encode(bytes)
}