stripe-connect-hono-sveltekit-demo Svelte Themes

Stripe Connect Hono Sveltekit Demo

Stripe Connect destination charge demo with Hono + SvelteKit + Better Auth on Cloudflare Workers

stripe-connect-hono-sveltekit-demo

Stripe Connect の destination charge を、Hono + SvelteKit + Better Auth + D1(Drizzle) で実装したデモです。

Stack

  • Web: SvelteKit (Cloudflare Workers)
  • API: Hono (Cloudflare Workers)
  • Auth: Better Auth (email/password)
  • Payments: Stripe Connect + Stripe Checkout (hosted)
  • DB: Cloudflare D1 + Drizzle ORM
  • Runtime: Workers 2本構成 + Service Binding

Monorepo Layout

apps/
  web/          # SvelteKit Worker
  api/          # Hono Worker
packages/
  db/           # Drizzle schema / query helpers / migrations

API Surface

Web Worker routes

  • POST /api/connect/account
  • POST /api/connect/account-link
  • POST /api/checkout/session
  • GET /api/me
  • GET|POST /api/auth/*

API Worker routes

  • POST /internal/connect/account
  • POST /internal/connect/account-link
  • POST /internal/checkout/session
  • POST /webhooks/stripe
  • GET /healthz

Environment variables

Web Worker

  • BETTER_AUTH_SECRET
  • BETTER_AUTH_URL
  • PUBLIC_BETTER_AUTH_URL
  • INTERNAL_API_TOKEN
  • PRIVATE_API_BASE_URL (Vite開発時フォールバック)
  • PUBLIC_STRIPE_PUBLISHABLE_KEY

API Worker

  • STRIPE_SECRET_KEY
  • STRIPE_WEBHOOK_SECRET
  • INTERNAL_API_TOKEN

Local development

  1. Install
pnpm install
  1. Create and apply local migration
pnpm d1:migrate:local
  1. Seed demo data (optional)
pnpm seed
  1. Prepare env files
cp apps/api/.dev.vars.example apps/api/.dev.vars
cp apps/web/.dev.vars.example apps/web/.dev.vars
cp apps/web/.env.example apps/web/.env
  1. Start development
pnpm dev
  • API Worker: http://127.0.0.1:8787
  • Web Worker: http://127.0.0.1:8788

Viteモードが必要な場合:

pnpm dev:vite
  1. Forward Stripe webhook
stripe listen --forward-to http://127.0.0.1:8787/webhooks/stripe

Test

pnpm check
pnpm --filter @demo/api test
pnpm --filter @demo/web test:e2e

test:e2e は Playwright 実行環境に依存します。

Deploy (manual wrangler)

  1. D1 を作成して database_idapps/api/wrangler.jsoncapps/web/wrangler.jsonc に設定
  2. API secrets を設定
cd apps/api
wrangler secret put STRIPE_SECRET_KEY
wrangler secret put STRIPE_WEBHOOK_SECRET
wrangler secret put INTERNAL_API_TOKEN
  1. Web secrets/vars を設定
cd ../web
wrangler secret put BETTER_AUTH_SECRET
wrangler secret put INTERNAL_API_TOKEN
wrangler secret put BETTER_AUTH_URL
  1. Remote migration apply
pnpm d1:migrate:remote
  1. Deploy
pnpm deploy

Security notes

  • Browser から API Worker の internal route は直接叩かない
  • internal route は x-internal-token で保護
  • Stripe webhook は署名検証 + event重複排除を実施

License

MIT

Top categories

Loading Svelte Themes