Give your agent a wallet you control.
Let your agents pay online using one-time-use cards or with machine payment protocols. You approve every request.
Customers pay from a shielded Zcash wallet. You get paid in USDC.
FinanceTypeScript · JavaScriptGitHub @meetaminxOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.