尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Private cross-chain checkout. Customers pay from a shielded Zcash wallet; merchants receive USDC (or USDT) on Base, Arbitrum, Ethereum or Solana. Lona never holds funds: each payment is converted by NEAR Intents (1Click API) and sent straight to the merchant's wallet.
Read DESIGN.md before changing any UI.
Lona-Signature, HMAC-SHA256) with retries for about a day/api/v1/invoices, /api/v1/payment_links)Idempotency-Key on every POST, per-key rate limits with headers, list filters and cursor pagingnpm install
npm run dev # http://localhost:3000
npm test # payment lifecycle, webhooks, signatures, network guard, tokens, receipts, idempotency, rate limits,
# ZEC/USD conversion and rounding, quote guard, duplicate sign-ups
npm run test:e2e # browser checks for signup, login, checkout amounts and the homepage demo
npm run test:full # every merchant feature, the REST API and signed webhooks (start the server with
# ALLOW_PRIVATE_WEBHOOKS=1 CRON_SECRET=e2e-cron SANDBOX_ZEC_USD=1300; set SERVER_LOG to its log)
# (needs a running build at BASE_URL and Playwright with Chromium)
No database setup is needed locally: an embedded Postgres (PGlite) is created in .data/ and migrated on boot.
Try it: create an account, set a payout wallet under Settlement (any valid-looking address works in test mode), create an invoice, open checkout, click "Pay with Zcash", then "Pay in full".
DATABASE_URL..env.example, at minimum APP_URL, CRON_SECRET, ONECLICK_JWT, LONA_FEE_RECIPIENT, NEXT_PUBLIC_LEGAL_NAME, NEXT_PUBLIC_CONTACT_EMAIL.vercel.json runs migrations before each build and calls /api/cron/tick every minute (per-minute crons need a paid Vercel plan; on Hobby, run the tick from an external scheduler with the CRON_SECRET bearer header).POST /api/v1/invoices creates an invoice in USD. No price yet./pay/:id and clicks Pay. Lona asks 1Click for an EXACT_OUTPUT quote: the merchant receives exactly the invoice amount, and the customer's ZEC amount includes network costs and Lona's fee (appFees). The price is held for 20 minutes./v0/status (on page views and every minute from the scheduler) and moves the invoice through awaiting_payment, payment_received, converting and paid_out, emitting a webhook at each meaningful change. Status changes use compare-and-set, so each event fires once.Code map: src/lib/invoices.ts (state machine), src/lib/providers/ (1Click adapter and sandbox, behind one interface so a second route such as Maya Protocol can be added), src/lib/webhooks.ts, src/app/api/.
/v0/tokens at runtime, with known IDs as a fallback. Check the Solana USDC mapping against the live token list.RESEND_API_KEY and a verified sending domain in MAIL_FROM. Without it, confirmation, reset and receipt emails are only logged.APP_URL set to itsrc/app/icon.svg)NEXT_PUBLIC_CONTACT_EMAIL set to a real inboxRESEND_API_KEY and MAIL_FROM set, sending domain verifiedSANDBOX_ZEC_USD only to pin a fixed test price.LONA_FEE_BPS (default 50, so 0.5%). It is added to live quotes only when LONA_FEE_RECIPIENT is set./api/cron/tick syncs payments in flight, expires old invoices, retries webhooks and prunes rate-limit
state. It needs Authorization: Bearer $CRON_SECRET.
.github/workflows/scheduled-tick.yml runs it every 30 minutes, which fits a private repo's free
Actions minutes. Add CRON_SECRET as a repository secret.Wrong passwords are counted per email and per IP in 15-minute windows (stored hashed). Defaults:
5 per email, 30 per IP for sign-in; 3 reset emails per address and 10 reset requests per IP; 10 new
accounts per IP. A correct password clears the email's count. Override with AUTH_LOGIN_EMAIL_LIMIT,
AUTH_LOGIN_IP_LIMIT, AUTH_FORGOT_EMAIL_LIMIT, AUTH_FORGOT_IP_LIMIT, AUTH_SIGNUP_IP_LIMIT.