把任意应用指到厂商面
Any app
XBuckle 仿真的是 厂商/协议表面(Stripe、Paddle、S3、GoTrue…),不是某个应用的业务捷径。官方 SDK / 标准 HTTP 把 base URL(或 env)指到本机即可联调;应用特有逻辑(例如把 webhook 写成 profiles.plan)留在应用侧。
Provider 选择器只列本机可打的云厂商 / 事实标准面(Connect → 本地联调 → env 迁移)。长尾小 SaaS 不进目录;需要新厂商时先落地本地面再加选项。
Billing:Stripe 或 Paddle
两个面挂在同一 Billing 服务下,路径不同:
| 面 | Base | 本地密钥 |
|---|---|---|
| Stripe 形 | http://127.0.0.1:3100/billing/v1 | sk_test_xbuckle(XBUCKLE_STRIPE_SECRET_KEY) |
| Paddle Billing API | http://127.0.0.1:3100/paddle | xbuckle-paddle-key(XBUCKLE_PADDLE_API_KEY) |
Stripe env 模板
STRIPE_SECRET_KEY=sk_test_xbuckle
STRIPE_API_BASE=http://127.0.0.1:3100/billing/v1
# 可选:本地 webhook 投递(仅 localhost)
# POST /billing/v1/webhook_endpoint { "url": "http://127.0.0.1:PORT/…" }Paddle env 模板
PADDLE_API_BASE=http://127.0.0.1:3100/paddle
PADDLE_API_KEY=xbuckle-paddle-key
PADDLE_WEBHOOK_SECRET=xbuckle-paddle-secret
# 价格目录种子(可在应用侧对齐)
# pri_xbuckle_builder · pri_xbuckle_proPaddle 子集:customers / subscriptions(含 cancel)/ prices / products / portal-sessions / events。
发出通知时签 Paddle-Signature(ts+h1),仅投递到 localhost。
不模拟 cdn.paddle.com / Paddle.js overlay——浏览器 checkout UI 仍可用厂商 sandbox,或只用服务端 API 建 subscription。
观测:Services → Billing → paddle events / subscriptions;Stripe 分区看 checkouts / webhooks。
其他常见面(换 URL)
| 能力 | 本地入口 |
|---|---|
| Postgres | postgresql://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable |
| Redis | redis://127.0.0.1:6379 |
| Supabase 形 | http://127.0.0.1:3100 + xbuckle-anon-key(/auth/v1 /rest/v1 /functions/v1) |
| S3 | http://127.0.0.1:3100/s3 |
| LLM | http://127.0.0.1:3100/llm/v1(gpt-mock / claude-mock) |
| SMTP 捕获 | 127.0.0.1:1025(不外发) |
完整边界与 Coverage Contract:见 服务能力边界。MCP:services.describe、xbuckle://coverage、compat.check。
Origin 仅作例子(env only)
若用 Origin dogfood:只改应用 env(例如 PADDLE_API_BASE / Supabase URL),不要在 XBuckle 里加 Origin 专用路由。计划更新、写 profiles.plan 等业务仍在 Origin 的 edge function / webhook handler 里完成。
验收以通用 scripts/acceptance/paddle.mjs 与 npm run acceptance 为准,不是某个应用的 happy path。
