/** * 测试用 fake Port —— 无密码学副作用的薄替身(断言「编排走 Port」而非自研)。 * 仅测试目录引用,不进公共面。 */ /** fake hasher:哈希=可逆前缀(仅测试,证明编排调用了 hash/verify)。 */ export function createFakeHasher() { const calls = { hash: 0, verify: 0 } return { calls, async hash(plain) { calls.hash += 1 return `h$${plain}` }, async verify(plain, hash) { calls.verify += 1 return hash === `h$${plain}` }, } } /** fake tokenSigner:把 claims JSON 编码为 token(含 ttl 派生 exp)。 */ export function createFakeSigner() { return { async sign(claims, { ttlMs }) { const exp = Date.now() + ttlMs return `tok.${Buffer.from(JSON.stringify({ ...claims, exp })).toString('base64url')}` }, async verify(token) { if (typeof token !== 'string' || !token.startsWith('tok.')) { const e = new Error('bad token') e.code = 'ERR_JWT_INVALID' throw e } const claims = JSON.parse(Buffer.from(token.slice(4), 'base64url').toString('utf8')) if (claims.exp && Date.now() > claims.exp) { const e = new Error('expired') e.code = 'ERR_JWT_EXPIRED' throw e } return claims }, } } /** fake oauth:按注入表返回身份,或抛错模拟验签失败。 */ export function createFakeOauth(table = {}, { throwOn } = {}) { return { async exchange({ provider, code }) { if (throwOn && throwOn === code) throw new Error('verify failed') const entry = table[`${provider}:${code}`] if (!entry) throw new Error('unknown code') return entry }, } } /** fake email:记录投递的验证码,供断言。 */ export function createFakeEmail(sink = []) { return { sent: sink, async sendCode(args) { sink.push(args) }, } }