Webhook Proxy:基于 Cloudflare Workers 的开源 Webhook 代理方案
一个功能强大的 Webhook 代理服务,支持多平台集成、WebSocket/SSE 实时推送,以及完整的安全认证机制
凉菜
作者
项目简介
Webhook Proxy 是一个基于 Cloudflare Workers 构建的开源 webhook 代理方案,它为开发者提供了一个强大而灵活的平台,用于接收、处理和转发来自各种服务的 webhook 事件。
一个功能强大的 Webhook 代理服务,支持多平台集成、WebSocket/SSE 实时推送,以及完整的安全认证机制
凉菜
作者
Webhook Proxy 是一个基于 Cloudflare Workers 构建的开源 webhook 代理方案,它为开发者提供了一个强大而灵活的平台,用于接收、处理和转发来自各种服务的 webhook 事件。
Webhook Proxy 采用现代化的技术栈和 Monorepo 架构:
核心服务运行在 Cloudflare Workers 上,利用其边缘计算能力提供低延迟的全球化服务:
提供便捷的命令行管理工具:
Webhook Proxy 为每个主流平台提供了专门的适配器,支持平台特定的签名验证机制:
支持两种实时推送模式:
WebSocket 模式:
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 模式:
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)CLI 支持 5 种灵活的登录方式:
# 安装 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 延迟 |
|---|---|---|---|
| GitHub | 120ms | 250ms | 400ms |
| GitLab | 115ms | 240ms | 380ms |
| QQ Bot | 180ms | 350ms | 550ms |
| Telegram | 100ms | 220ms | 350ms |
| Stripe | 140ms | 280ms | 450ms |
| Generic | 80ms | 180ms | 300ms |
得益于 Cloudflare 的全球 CDN 网络,Webhook Proxy 能够在全球范围内提供低延迟的服务。
# 克隆项目
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
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监听 GitHub webhook 事件,触发自定义工作流:
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)
接收 QQ 官方机器人的消息并进行处理:
// 配置 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 =实时监听 Stripe 支付事件:
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)
项目采用 pnpm workspaces 管理的 Monorepo 架构,清晰的代码组织:
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 命令添加新平台支持非常简单:
// 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 许可证,允许自由使用、修改和分发。
项目提供了详细的贡献指南,欢迎开发者参与:
Webhook Proxy 是一个功能完善、性能优异的 webhook 代理解决方案。无论你是需要集成多个第三方服务的 webhook,还是需要实时接收和处理事件,Webhook Proxy 都能提供简单、可靠的解决方案。
项目的亮点包括:
如果你正在寻找一个可靠的 webhook 代理方案,不妨试试 Webhook Proxy!
本文介绍的 Webhook Proxy 项目由 lc-cn 开发维护,是一个活跃的开源项目。如果这个项目对你有帮助,欢迎给项目点个 Star ⭐
Conversation
使用 GitHub 账号登录即可发表评论
登录后即可发表评论