浏览

首页🎨Frontend⚙️Backend🚀DevOps📱Mobile🗄️Database🛠️Tools📚Tutorial🌟Life📝Other标签关于链接

快捷入口

RSS开往
写作
加载中...

© 2026 凉菜发牢骚的小角落

Powered by GitHub & Next.js

RSSGitHub

© 2026 凉菜发牢骚的小角落

Powered by GitHub & Next.js

RSSGitHub
webhook
cloudflare
typescript
开源项目

Webhook Proxy:基于 Cloudflare Workers 的开源 Webhook 代理方案

一个功能强大的 Webhook 代理服务,支持多平台集成、WebSocket/SSE 实时推送,以及完整的安全认证机制

凉菜

作者

2025年11月8日
8 min read

项目简介

Webhook Proxy 是一个基于 Cloudflare Workers 构建的开源 webhook 代理方案,它为开发者提供了一个强大而灵活的平台,用于接收、处理和转发来自各种服务的 webhook 事件。

核心亮点

  • 🌐 多平台支持:支持 GitHub、GitLab、QQBot、Telegram、Stripe、Jenkins、Jira、Sentry 等多个主流平台
  • ⚡ 实时推送:提供 WebSocket 和 SSE 两种实时事件推送模式
  • 🔒 安全可靠:集成 OAuth 认证、双因素认证(TOTP)、WebAuthn/Passkey 等多重安全机制
  • 🚀 高性能:基于 Cloudflare Workers 的全球 CDN 边缘计算,响应时间低至 100ms
  • 🛠️ CLI 工具:提供功能完善的命令行工具,支持自动登录和代理管理

技术架构

Webhook Proxy 采用现代化的技术栈和 Monorepo 架构:

核心服务 (@webhook-proxy/core)

核心服务运行在 Cloudflare Workers 上,利用其边缘计算能力提供低延迟的全球化服务:

  • 运行时:Cloudflare Workers
  • Web 框架:Hono(轻量级、高性能)
  • 数据库:Cloudflare D1 (SQLite)
  • 存储:Cloudflare KV
  • 认证:OAuth 2.0, WebAuthn
  • 语言:TypeScript 5.3+

CLI 工具 (webhook-proxy-cli)

提供便捷的命令行管理工具:

  • 运行时:Node.js 18+
  • 框架:Commander.js
  • UI 库:Chalk + Ora + Inquirer
  • 语言:TypeScript 5.3+

主要功能

1. 多平台 Webhook 接入

Webhook Proxy 为每个主流平台提供了专门的适配器,支持平台特定的签名验证机制:

  • GitHub:HMAC-SHA256 签名验证,平均响应时间 120ms
  • GitLab:HMAC-SHA256 签名验证,平均响应时间 115ms
  • QQ Bot:Ed25519 签名验证,支持官方机器人协议
  • Telegram:Token 验证,响应最快(100ms)
  • Stripe:HMAC-SHA256 + 时间戳验证
  • Generic:通用适配器,支持任意平台

2. 实时事件推送

支持两种实时推送模式:

WebSocket 模式:

javascript
const ws = new WebSocket('wss://your-domain.workers.dev/github/key/ws'); ws.onmessage = (event) => { const webhookEvent = JSON.parse(event.data); console.log('收到事件:', webhookEvent); };
const ws = new WebSocket('wss://your-domain.workers.dev/github/key/ws'); ws.onmessage = (event) => { const webhookEvent = JSON.parse(event.data)

SSE 模式:

javascript
const eventSource = new EventSource('https://your-domain.workers.dev/github/key/sse'); eventSource.onmessage = (event) => { const webhookEvent = JSON.parse(event.data); console.log('收到事件:', webhookEvent); };
const eventSource = new EventSource('https://your-domain.workers.dev/github/key/sse'); eventSource.onmessage = (event) => { const webhookEvent = JSON.parse(event.data)

3. 完善的安全机制

多种登录方式

CLI 支持 5 种灵活的登录方式:

  1. GitHub OAuth(推荐)- 无需密码,快速便捷
  2. GitLab OAuth - 适合 GitLab 用户
  3. 用户名/邮箱 + 密码 - 传统方式,无需浏览器
  4. Passkey / 生物识别 - 使用指纹或 Face ID 登录
  5. 手动输入 Token - 备用方案

双因素认证

  • TOTP:支持 Google Authenticator 等 OTP 应用
  • WebAuthn:支持硬件密钥和平台认证器

4. CLI 工具强大易用

bash
# 安装 CLI npm install -g webhook-proxy-cli # 配置 API 地址 webhook-proxy config set-api https://your-api.workers.dev # 登录(支持多种方式) webhook-proxy login # 列出所有代理 webhook-proxy list # 创建新代理 webhook-proxy proxy create # 更新代理 webhook-proxy proxy update <proxy-id> # 删除代理 webhook-proxy proxy delete <proxy-id>
# 安装 CLI npm install -g webhook-proxy-cli # 配置 API 地址 webhook-proxy config set-api https://your-api.workers.dev # 登录(支持多种方式) webhook-proxy login # 列出所有代理 webhook-proxy list # 创建新代理 webhook-proxy proxy create # 更新代理 webhook-proxy proxy update <proxy-id> # 删除代理 webhook-proxy proxy delete <proxy-id>

性能表现

Webhook Proxy 在 Cloudflare Workers 上展现出优异的性能:

平台P50 延迟P95 延迟P99 延迟
GitHub120ms250ms400ms
GitLab115ms240ms380ms
QQ Bot180ms350ms550ms
Telegram100ms220ms350ms
Stripe140ms280ms450ms
Generic80ms180ms300ms

得益于 Cloudflare 的全球 CDN 网络,Webhook Proxy 能够在全球范围内提供低延迟的服务。

快速开始

本地开发

bash
# 克隆项目 git clone https://github.com/lc-cn/webhook-proxy.git cd webhook-proxy # 安装依赖 pnpm install # 配置环境变量 cd packages/core cp .dev.vars.example .dev.vars # 编辑 .dev.vars,填入必要配置 # 启动开发服务器 pnpm dev
# 克隆项目 git clone https://github.com/lc-cn/webhook-proxy.git cd webhook-proxy # 安装依赖 pnpm install # 配置环境变量 cd packages/core cp .dev.vars.example .dev.vars # 编辑 .dev.vars,填入必要配置 # 启动开发服务器 pnpm dev

部署到 Cloudflare

bash
# 登录 Cloudflare npx wrangler login # 创建 D1 数据库 npx wrangler d1 create webhook-proxy-db # 创建 KV 命名空间 npx wrangler kv:namespace create "SESSIONS" npx wrangler kv:namespace create "WEBHOOK_CONNECTIONS" # 设置环境变量 npx wrangler secret put SESSION_SECRET npx wrangler secret put GITHUB_CLIENT_ID npx wrangler secret put GITHUB_CLIENT_SECRET # 运行数据库迁移 npx wrangler d1 migrations apply webhook-proxy-db --remote # 部署 pnpm deploy
# 登录 Cloudflare npx wrangler login # 创建 D1 数据库 npx wrangler d1 create webhook-proxy-db # 创建 KV 命名空间 npx wrangler kv:namespace create "SESSIONS" npx wrangler kv:namespace create "WEBHOOK_CONNECTIONS" # 设置环境变量 npx wrangler secret put SESSION_SECRET npx wrangler secret put GITHUB_CLIENT_ID npx wrangler secret put GITHUB_CLIENT_SECRET # 运行数据库迁移 npx wrangler d1 migrations apply webhook-proxy-db --remote # 部署 pnpm deploy

使用场景

1. GitHub Actions 集成

监听 GitHub webhook 事件,触发自定义工作流:

javascript
const ws = new WebSocket('wss://api.workers.dev/github/your-key/ws'); ws.onmessage = (event) => { const data = JSON.parse(event.data); if (data.event === 'push') { // 处理推送事件 console.log('新的提交:', data.payload.commits); } if (data.event === 'pull_request') { // 处理 PR 事件 console.log('PR 操作:', data.payload.action); } };
const ws = new WebSocket('wss://api.workers.dev/github/your-key/ws'); ws.onmessage = (event) => { const data = JSON.parse(event.data)

2. QQ 机器人消息推送

接收 QQ 官方机器人的消息并进行处理:

javascript
// 配置 QQ Bot webhook const proxyUrl = 'https://api.workers.dev/qqbot/your-key'; // 通过 SSE 接收消息 const eventSource = new EventSource(`${proxyUrl}/sse`); eventSource.onmessage = (event) => { const message = JSON.parse(event.data); console.log('收到 QQ 消息:', message.payload); };
// 配置 QQ Bot webhook const proxyUrl = 'https://api.workers.dev/qqbot/your-key'; // 通过 SSE 接收消息 const eventSource = new EventSource(`${proxyUrl}/sse`); eventSource.onmessage =

3. Stripe 支付通知

实时监听 Stripe 支付事件:

javascript
const ws = new WebSocket('wss://api.workers.dev/stripe/your-key/ws'); ws.onmessage = (event) => { const stripeEvent = JSON.parse(event.data); switch (stripeEvent.payload.type) { case 'payment_intent.succeeded': console.log('支付成功:', stripeEvent.payload.data); break; case 'payment_intent.payment_failed': console.log('支付失败:', stripeEvent.payload.data); break; } };
const ws = new WebSocket('wss://api.workers.dev/stripe/your-key/ws'); ws.onmessage = (event) => { const stripeEvent = JSON.parse(event.data)

开发者友好

Monorepo 架构

项目采用 pnpm workspaces 管理的 Monorepo 架构,清晰的代码组织:

text
webhook-proxy/ ├── packages/ │ ├── core/ # 核心服务 │ │ ├── src/ │ │ │ ├── adapters/ # 平台适配器 │ │ │ ├── api/ # REST API │ │ │ ├── auth/ # 认证模块 │ │ │ ├── db/ # 数据库操作 │ │ │ └── routes/ # 路由 │ │ └── migrations/ # 数据库迁移 │ │ │ └── cli/ # CLI 工具 │ └── src/ │ └── commands/ # CLI 命令
webhook-proxy/ ├── packages/ │ ├── core/ # 核心服务 │ │ ├── src/ │ │ │ ├── adapters/ # 平台适配器 │ │ │ ├── api/ # REST API │ │ │ ├── auth/ # 认证模块 │ │ │ ├── db/ # 数据库操作 │ │ │ └── routes/ # 路由 │ │ └── migrations/ # 数据库迁移 │ │ │ └── cli/ # CLI 工具 │ └── src/ │ └── commands/ # CLI 命令

易于扩展

添加新平台支持非常简单:

typescript
// 1. 创建适配器 import { BaseAdapter } from './base-cf.js'; export class MyPlatformAdapter extends BaseAdapter { async validateSignature(request: Request, secret: string): Promise<boolean> { // 实现签名验证 return true; } async transformEvent(request: Request): Promise<WebhookEvent> { const body = await request.json(); return { id: body.id, event: body.event_type, payload: body, timestamp: Date.now(), }; } } // 2. 注册适配器 export function createAdapter(platform: string, env: Env): BaseAdapter { switch (platform) { case 'myplatform': return new MyPlatformAdapter(env); // ... } }
// 1. 创建适配器 import { BaseAdapter } from './base-cf.js'; export class MyPlatformAdapter extends BaseAdapter { async validateSignature(request: Request, secret: string)

社区与生态

开源许可

项目采用 MIT 许可证,允许自由使用、修改和分发。

贡献指南

项目提供了详细的贡献指南,欢迎开发者参与:

  • 完善的类型定义
  • 严格的代码规范
  • 详细的文档和注释
  • 持续集成和自动化部署

相关链接

  • GitHub 仓库:https://github.com/lc-cn/webhook-proxy
  • npm 包:webhook-proxy-cli
  • 问题反馈:GitHub Issues

总结

Webhook Proxy 是一个功能完善、性能优异的 webhook 代理解决方案。无论你是需要集成多个第三方服务的 webhook,还是需要实时接收和处理事件,Webhook Proxy 都能提供简单、可靠的解决方案。

项目的亮点包括:

  • ✅ 基于 Cloudflare Workers 的无服务器架构
  • ✅ 支持主流平台的开箱即用
  • ✅ 完善的安全认证机制
  • ✅ 实时 WebSocket/SSE 推送
  • ✅ 强大的 CLI 工具
  • ✅ 清晰的代码结构和易于扩展

如果你正在寻找一个可靠的 webhook 代理方案,不妨试试 Webhook Proxy!


本文介绍的 Webhook Proxy 项目由 lc-cn 开发维护,是一个活跃的开源项目。如果这个项目对你有帮助,欢迎给项目点个 Star ⭐

返回博客
webhook
cloudflare
typescript
开源项目

Conversation

继续讨论

评论 (0)
基于 GitHub Issues 的评论系统在 GitHub 查看

登录后参与讨论

使用 GitHub 账号登录即可发表评论

暂无评论

登录后即可发表评论

文章目录

  • 项目简介
  • 核心亮点
  • 技术架构
  • 核心服务 (@webhook-proxy/core)
  • CLI 工具 (webhook-proxy-cli)
  • 主要功能
  • 1. 多平台 Webhook 接入
  • 2. 实时事件推送
  • 3. 完善的安全机制
  • 4. CLI 工具强大易用
  • 性能表现
  • 快速开始
  • 本地开发
  • 部署到 Cloudflare
  • 使用场景
  • 1. GitHub Actions 集成
  • 2. QQ 机器人消息推送
  • 3. Stripe 支付通知
  • 开发者友好
  • Monorepo 架构
  • 易于扩展
  • 社区与生态
  • 开源许可
  • 贡献指南
  • 相关链接
  • 总结
;
console
.
log
(
'收到事件:'
,
webhookEvent
)
;
}
;
;
console
.
log
(
'收到事件:'
,
webhookEvent
)
;
}
;
;
if
(
data
.
event
===
'push'
)
{
// 处理推送事件
console
.
log
(
'新的提交:'
,
data
.
payload
.
commits
)
;
}
if
(
data
.
event
===
'pull_request'
)
{
// 处理 PR 事件
console
.
log
(
'PR 操作:'
,
data
.
payload
.
action
)
;
}
}
;
(
event
)
=>
{
const
message
=
JSON
.
parse
(
event
.
data
)
;
console
.
log
(
'收到 QQ 消息:'
,
message
.
payload
)
;
}
;
;
switch
(
stripeEvent
.
payload
.
type
)
{
case
'payment_intent.succeeded'
:
console
.
log
(
'支付成功:'
,
stripeEvent
.
payload
.
data
)
;
break
;
case
'payment_intent.payment_failed'
:
console
.
log
(
'支付失败:'
,
stripeEvent
.
payload
.
data
)
;
break
;
}
}
;
:
Promise
<
boolean
>
{
// 实现签名验证
return
true
;
}
async
transformEvent
(
request
:
Request
)
:
Promise
<
WebhookEvent
>
{
const
body
=
await
request
.
json
(
)
;
return
{
id
:
body
.
id
,
event
:
body
.
event_type
,
payload
:
body
,
timestamp
:
Date
.
now
(
)
,
}
;
}
}
// 2. 注册适配器
export
function
createAdapter
(
platform
:
string
,
env
:
Env
)
:
BaseAdapter
{
switch
(
platform
)
{
case
'myplatform'
:
return
new
MyPlatformAdapter
(
env
)
;
// ...
}
}