尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證StreamPay — real-time payment streams on Stellar. Live: https://streampay-frontend-alpha.vercel.app
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗StreamPay is a dashboard for paying collaborators, vendors and grant recipients in a continuous flow instead of lump sums: create a stream, watch funds accrue, pause or stop at any time, and let the recipient withdraw what has vested.
Explore streams, a stream detail, activity and the in-app docs. The demo needs no wallet and no backend: the API serves seeded sample data, so every screen is populated.
/api/v1, /api/v2) with OpenAPI spec, JWT wallet auth, rate limiting, CSRF, request fingerprinting, audit log, webhooks and Prometheus metricscontracts/Requires Node.js 20+.
git clone https://github.com/Streampay-Org/StreamPay-Frontend.git
cd StreamPay-Frontend
npm ci
cp .env.example .env.local # then edit, see "Environment variables"
npm run dev # http://localhost:3000
Minimal .env.local for local development:
STELLAR_NETWORK=testnet
JWT_SECRET=dev-secret-key-at-least-32-characters-long
ALLOWED_ORIGINS=http://localhost:3000
The app refuses to boot without the first three. Everything else is optional and has a safe default; the complete
inventory with comments is in .env.example.
| Variable | Required | Description |
|---|---|---|
STELLAR_NETWORK | yes | testnet or mainnet. No implicit default, to avoid accidental mainnet use. |
JWT_SECRET | yes | Session signing secret, at least 32 characters. |
ALLOWED_ORIGINS | yes | Comma-separated CORS allow-list (no * in production). |
DATABASE_URL | no | Postgres connection string. Without it the API uses seeded in-memory data. |
HORIZON_URL / SOROBAN_RPC_URL | no | Stellar endpoints (testnet defaults). |
WEBHOOK_SECRET, METRICS_AUTH_TOKEN, FEE_BUMP_SECRET_KEY, ... | no | Feature specific, see .env.example. |
| Command | What it does |
|---|---|
npm run dev | Start the dev server |
npm run build / npm start | Production build / serve it |
npm test | Unit and component tests (Jest) |
npm run smoke | OpenAPI validation and API smoke tests |
npm run lint | ESLint |
npm run openapi:generate | Regenerate TypeScript types from openapi.json |
app/ Next.js App Router: pages, components and API route handlers (app/api)
app/lib/ Server-side helpers: auth, config validation, errors, audit log, repositories
lib/, src/ Shared clients, middleware (rate limit, timeout, ETag) and metrics
contracts/ Soroban escrow contract (Rust)
docs/ Long-form documentation and runbooks
scripts/ Operational scripts (reconciliation, backfills, OpenAPI tooling)
middleware.ts Edge middleware: CORS, CSRF, body-size caps, request ids, fingerprinting
Request flow: browser, then middleware.ts, then a route handler in app/api/**, which validates input, calls a
repository behind a pluggable store interface (in-memory by default, Postgres when configured) and returns the shared
error envelope. Stellar and Soroban calls go through a client with caching and circuit breaking. See
docs/architecture.md for details.
/docsvercel.json.STELLAR_NETWORK=testnet, JWT_SECRET (32+ random characters) and ALLOWED_ORIGINS (your deployment URL).CLI: vercel link && vercel env add JWT_SECRET production && vercel --prod.
A container image is also available via the included Dockerfile (Next.js standalone output).
The Soroban escrow contract in contracts/ charges fees on withdrawal. The fee
rate is fixed per stream at creation (stream.fee_bps) and is paid to the configured
fee collector. Both withdrawal entrypoints use the same economics:
| Entrypoint | Fee rate charged | Fee recipient | Authorization |
|---|---|---|---|
withdraw | stream.fee_bps | fee collector | recipient or allowlisted withdrawer |
withdraw_with_max_fee_bps / withdraw_guarded | stream.fee_bps | fee collector | recipient or allowlisted withdrawer |
The guarded variant additionally rejects the call with FeeTooHigh when stream.fee_bps > max_fee_bps,
before any state change. The global fee_bps / default_fee_bps admin knobs only see the
default applied to newly created streams; they are never charged at withdrawal time.
See CONTRIBUTING.md. Before opening a PR run npm test, npm run smoke and npm run build.
Some legacy test suites are quarantined in jest.config.js (testPathIgnorePatterns); fixing one and removing it from
that list is a welcome first contribution.
See the repository license file.