import bcrypt from "bcryptjs"; import { get_encoding } from "tiktoken"; const encoding = get_encoding("cl100k_base"); export function getTokenLength(input: string): number { return encoding.encode(input).length; } // export async function fetcher( // input: RequestInfo, // init?: RequestInit, // ): Promise { // const response = await fetch(input, { ...init, cache: "no-store" }); // // return response.json(); // } // export const capitalize = (s: string) => { // return s.charAt(0).toUpperCase() + s.slice(1); // }; export const truncate = (str: string, num: number) => { if (!str) return ""; if (str.length <= num) { return str; } return str.slice(0, num) + "..."; }; // export const getBlurDataURL = async (url: string | null) => { // if (!url) { // return "data:image/webp;base64,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; // } // try { // const response = await fetch( // `https://wsrv.nl/?url=${url}&w=50&h=50&blur=5`, // ); // const buffer = await response.arrayBuffer(); // const base64 = Buffer.from(buffer).toString("base64"); // // return `data:image/png;base64,${base64}`; // } catch (error) { // return "data:image/webp;base64,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; // } // }; // export const placeholderBlurhash = // "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAoJJREFUWEfFl4lu4zAMRO3cx/9/au6reMaOdkxTTl0grQFCRoqaT+SQotq2bV9N8rRt28xms87m83l553eZ/9vr9Wpkz+ezkT0ej+6dv1X81AFw7M4FBACPVn2c1Z3zLgDeJwHgeLFYdAARYioAEAKJEG2WAjl3gCwNYymQQ9b7/V4spmIAwO6Wy2VnAMikBWlDURBELf8CuN1uHQSrPwMAHK5WqwFELQ01AIXdAa7XawfAb3p6AOwK5+v1ugAoEq4FRSFLgavfQ49jAGQpAE5wjgGCeRrGdBArwHOPcwFcLpcGU1X0IsBuN5tNgYhaiFFwHTiAwq8I+O5xfj6fOz38K+X/fYAdb7fbAgFAjIJ6Aav3AYlQ6nfnDoDz0+lUxNiLALvf7XaDNGQ6GANQBKR85V27B4D3QQRw7hGIYlQKWGM79hSweyCUe1blXhEAogfABwHAXAcqSYkxCtHLUK3XBajSc4Dj8dilAeiSAgD2+30BAEKV4GKcAuDqB4TdYwBgPQByCgApUBoE4EJUGvxUjF3Q69/zLw3g/HA45ABKgdIQu+JPIyDnisCfAxAFNFM0EFNQ64gfS0EUoQP8ighrZSjn3oziZEQpauyKbfjbZchHUL/3AS/Dd30gAkxuRACgfO+EWQW8qwI1o+wseNuKcQiESjALvwNoMI0TcRzD4lFcPYwIM+JTF5x6HOs8yI7jeB5oKhpMRFH9UwaSCDB2Jmg4rc6E2TT0biIaG0rQhNqyhpHBcayTTSXH6vcDL7/sdqRK8LkwTsU499E8vRcAojHcZ4AxABdilgrp4lsXk8oVqgwh7+6H3phqd8J0Kk4vbx/+sZqCD/vNLya/5dT9fAH8g1WdNGgwbQAAAABJRU5ErkJggg=="; // export const toDateString = (date: Date) => { // return new Date(date).toLocaleDateString("en-US", { // month: "short", // day: "numeric", // year: "numeric", // }); // }; export const random = (min: number, max: number) => { return Math.floor(Math.random() * (max - min + 1) + min); }; // 将明文处理为 hash export function hashPassword(password: string) { const p = password.trim() if (!p) return ""; return bcrypt.hashSync(password.trim(), 10); } // 对比明文和 hash 是否一致 export function comparePassword(password: string, hashPassword: string) { return bcrypt.compareSync(password, hashPassword); }