@crvouga/ mockingbird-service-turnstile (英语)
本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .
WIP Cloudflare Turnstile 服务器侧 Siteverify 仿真器. 它从来没有解决或提出真正的挑战.
安装
bun add @crvouga/mockingbird-service-turnstile
使用量
import { createServer } from "@crvouga/mockingbird-service-turnstile/server"
// Test setup: a local Siteverify, and a token like the one the widget hands the browser.
const server = await createServer()
const { token } = await server.runtime.instance().issue({
hostname: "app.example.test", action: "signup",
}).json()
// Application code: the Siteverify call it makes to Cloudflare, sent to the emulator's URL.
const siteverifyUrl = `${server.url}/turnstile/v0/siteverify`
const result = await fetch(siteverifyUrl, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ secret: "mock_secret", response: token }),
})
console.log(await result.json()) // success, challenge_ts, hostname, action, cdata
await server.close()
运行 mockingbird-turnstile serve --port 12126,然后覆盖消费者的 Siteverify URL
与 http://localhost:12126/turnstile/v0/siteverify。保留真正的 Cloudflare 来源于
生产。 不存在通用消费环境变量.
发送合成 secret: mock_secret; 配置额外的站点 sites。 。 。 .
合同
POST /turnstile/v0/siteverify 接受 JSON 或 URL 编码的窗体字段 secret, (中文(简体) ), response, (中文(简体) ),
选项 remoteip 和 UUID 编辑器 idempotency_key返回 HTTP 200 和
success: true 有元数据。 拒绝为 HTTP 200 与 success: false 财务报告和审定财务报表
error-codes而不是一个运输例外。 失踪/无效的秘密、失踪/无效的标志、,
畸形体和已过期/已使用的代号保留所记录的错误代码.
Tokens在模拟器时钟上以5分钟过期并被消耗一次. 匹配一能性
密钥重试重放原响应; 其他重试返回 timeout-or-duplicate。 。 。 .
错误的秘密不会消耗有效的符号 。 应用程序必须独立检查返回
主机名/ 动作 。 远程IP被接受,不用于实际的机器人检测.
控件
POST /__admin/issue: 发出合成符; 接受siteKey(默认)mock_site, (中文(简体) ),hostname, (中文(简体) ),action, (中文(简体) ),cdata。默认仅用于本地测试.- 构造器
tokens共享/__admin/state/tokens:种子标志过期/使用状态. GET /__admin/attempts:只进行元数据核查,没有秘密/托接机构.- 共享时钟,时间线,重置,状态,断层和请求日记都有. 重置还原
构造站点/托盘; 命名空间被信头隔离或
/__admin/ns/{namespace}。 。 。 . 身体秘密不选择命名空间 .adminPrefix移动控制树.
预设 : internal_error (HTTP 200核查拒绝), rate_limited (标注为429),
server_error (503个), connection_drop通用过失规则增加了确定性延迟.
运输预设是测试控制,而不是声称正常Siteverify状态代码.
没有网友.
测试使用原始获取( 请求的客户端), JSON/ 格式成功, 过期边界/ 重放,
单能、输入错误、命名空间/重置隔离、编辑的日记和服务于HTTP
超时/关闭失败行为 。 物业测试验证 判断和检测差异.
bun scripts/parity.ts 需求 TURNSTILE_TEST_SECRET 设定为云花一 所记录的
公用假键; 生产密钥被拒绝 。 比较JSON中的成功/错误信封
并形成模式,而不是生产令牌或私人元数据.
故意不模拟
浏览器部件/标本, 机器人检测, 真正的挑战/托盘, 多段编码, 生产 签名、IP声誉、主机名政策管理和企业元数据. 地方决定性地保留缺额和冲突/飞行中的关键政策 代理;只有相同的重试行为才包括在公共合同证据中.
API 密码
TurnstileAPI: 用fetch, (中文(简体) ),reset, (中文(简体) ),issue,以及地点/托盘/试收.createRuntime:共享仿真器合同外加象征性的签发/试探.TURNSTILE_NAMESPACE:服务名.TURNSTILE_PRESETS: 命名失败控制.document, (中文(简体) ),operationIds, (中文(简体) ),supportedOperationIds: 生成了 OpenAPI 元数据.createServer, (中文(简体) ),serveTarget, (中文(简体) ),DEFAULT_PORT从./server:节点HTTP/CLI服务, 默认端口 12126.
公共类型包括: Site, (中文(简体) ), Token, (中文(简体) ), TurnstileAPIOptions, (中文(简体) ), OperationId 财务报告和审定财务报表 SupportedOperationId。 。 。 .