/** * WmailHub Console API / MCP Key 生成与校验 * * 规则:Key 以 `wmh_` 开头,后接随机字符串,总长度 32 位 * (即 `wmh_` + 28 位随机 [A-Za-z0-9])。 */ /** # 成员变量: Key 前缀 **/ export const KEY_PREFIX = "wmh_"; /** # 成员变量: Key 总长度(含前缀) **/ export const KEY_TOTAL_LENGTH = 32; /** # 成员变量: Key 随机部分字母表 **/ const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; /** # 函数 * 生成随机 token(拒绝采样避免模偏差) * 参数: length - 随机串长度 * 返回值: 随机字符串 */ export function randomToken(length: number): string { let out = ""; while (out.length < length) { const bytes = crypto.getRandomValues(new Uint8Array(length * 2)); for (const b of bytes) { if (b >= 248) continue; // 248 = 62 * 4,超出可整除区间则丢弃重采样 out += ALPHABET[b % ALPHABET.length]; if (out.length === length) break; } } return out; } /** # 函数 * 生成 Console API / MCP Key(wmh_ 前缀,总长 32) * 返回值: 形如 wmh_XXXXXXXXXXXXXXXXXXXXXXXXXXXX 的明文 Key(仅在创建时展示一次) */ export function generateWmailKey(): string { return KEY_PREFIX + randomToken(KEY_TOTAL_LENGTH - KEY_PREFIX.length); } /** # 函数 * 校验 Key 格式是否符合 wmh_ + 28 位随机串、总长 32 的规范 */ export function isValidWmailKey(key: string): boolean { if (typeof key !== "string") return false; if (key.length !== KEY_TOTAL_LENGTH) return false; if (!key.startsWith(KEY_PREFIX)) return false; for (const ch of key.slice(KEY_PREFIX.length)) { if (!ALPHABET.includes(ch)) return false; } return true; }