尚未检测到更新。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.