docs(turbo-credits): correct pricing/fees and add ArNS-purchase-with-credits - #138
docs(turbo-credits): correct pricing/fees and add ArNS-purchase-with-credits#138vilenarios wants to merge 3 commits into
Conversation
…credits Verified the page's claims against the live production system (turbo-bundler-1, ar-io-bundler develop @ ddfee37) rather than editing from assumption: - "No additional fees are applied when credits are spent" was wrong. A flat per-data-item surcharge (USD_PRICE_PER_DATA_ITEM, live default $0.00002/item = $0.02 per 1,000 items) is charged on every signed and x402 upload, on top of the byte-based storage cost. Confirmed in pricing.ts and that it's unset (using the coded default) in prod .env. Corrected the bullet to disclose this rather than deny any fee exists. - Top-up fee table (ARIO no fee / all others 35%) was verified accurate against the live payment_adjustment_catalog (0.65 multiplier = 35%, "ario" is in the code's tokensWithoutFees default list, covering both Solana and Base since there's only one unified "ario" token id) -- left unchanged. - Free tier bullet was accurate but underspecified; added the actual 10 MiB lifetime allowance figure for clarity (per-wallet + per-IP, never resets), matching the live FREE_TIER config. - Added a "Using Credits to Buy ArNS Names" section: this page had zero mention of ArNS despite Turbo Credits already being the payment medium for buying/extending/upgrading ArNS names via buyArNSName / getArNSPriceForName, with a whole dedicated doc section (content/sdks/turbo-sdk/(arns-names-paid-with-turbo-credits)/) that wasn't linked from anywhere on this page. Added a short intro + working code example + link to the full guide, plus a Getting Started card. Test plan: - npx tsc --noEmit: clean - npm run build: succeeds, generates the new content, and confirms /sdks/turbo-sdk/purchase-lifecycle (the parenthesized route group stripped, per this repo's own routing convention) is a real built page - npm run lint: clean - npm run check-links: 0 new errors (5 pre-existing errors elsewhere in the repo, unrelated to this change) 🤖 Generated with Claude Code
…S buys Found while auditing the fee structure across every ArNS purchase path (companion fix: ar-io/ar-io-bundler#285). Provisioning a name (no processId, Turbo spawns + owns the ANT) carries a real, live surcharge (ANT_SPAWN_WINC_SURCHARGE) that neither this page nor the SDK example mentioned. The API already exposes it via antSpawnSurchargeWinc / wincTotalWithAntSpawn on the price response (ArNSPriceResponse's open index signature passes these through) -- just wasn't documented. 🤖 Generated with Claude Code
The ArNS docs described a surface that no longer exists. The bundler replaced the per-operation ArNS routes with a single actions API, and in doing so dropped Turbo-custodial ANTs and bring-your-own-ANT entirely. What was wrong, not merely dated: - "Turbo spawns and owns a fresh ANT for you" inverted the security story. The customer owns the ANT from mint; Turbo never takes custody. - "Supplying your own processId skips this entirely" documented an option that no longer exists — every buy mints an ANT, so every buy carries the spawn surcharge. A client trusting that line under-quotes the purchase. - buyArNSName / transferArNSAnt / setArNSRecord / removeArNSRecord call POST /v1/arns/purchase, /transfer and /manage, all removed. Rewritten onto the actions surface: one endpoint per action, and the server picks one of two shapes (completed / awaiting-signature) rather than the caller choosing. Adds the two-identity distinction (payer vs Solana ANT owner) that the old docs never had to draw, the x-owner-* proof headers, and the fee fields to quote — wincTotalWithAntSpawn on the price route, paymentAmountWithAntSpawn on its fiat estimate, both of which are the totals; the bare fields under-quote. Shown as HTTP requests: the SDK's ArNS helpers exist only on the alpha channel and have no actions wrappers yet. The pricing and free-tier corrections in this branch were verified against production and are unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XTi1Pd388d9Kh11oU98aES
|
Reviewed against the running services and updated this branch rather than just flagging it. Marked as draft — it should not merge until the actions API is live in production. The pricing/fee half: verified, ship as-isChecked against production (
The ArNS half was describing a surface that no longer existsNot stale wording — inverted facts. The bundler replaced the per-operation ArNS routes with a single actions API and dropped Turbo-custodial ANTs and bring-your-own-ANT entirely:
Three things the old text got actively wrong:
The field names the branch introduced were correct — a live quote returns What changed hereRewrote the whole Also now documented, because the old model never had to draw these distinctions:
Two things to decide before this merges
|
Summary
Verified this page's claims against the live production system (turbo-bundler-1,
ar-io-bundler@developddfee37) rather than editing from assumption.USD_PRICE_PER_DATA_ITEM, live default $0.00002/item = $0.02 per 1,000 items) is charged on every signed and x402 upload, on top of the byte-based storage cost. Confirmed inpricing.tsand that the env var is unset in prod (using the coded default). Corrected the bullet to disclose this rather than deny any fee exists.payment_adjustment_catalog(0.65 multiplier = 35% general fee) and the code'stokensWithoutFeesdefault list (["ario"], which covers both Solana and Base since there's only one unified"ario"token id in the system).buyArNSName/getArNSPriceForName), with a whole dedicated doc section (content/sdks/turbo-sdk/(arns-names-paid-with-turbo-credits)/) that wasn't linked from anywhere on this page. Added a short intro + working code example (verified against the existingbuying-a-name.mdx/pricing-a-name.mdxdocs) + link to the full guide, plus a Getting Started card.Test plan
npx tsc --noEmit— cleannpm run build— succeeds, generates the new content, and confirms/sdks/turbo-sdk/purchase-lifecycle(the parenthesized route group stripped, per this repo's own routing convention documented inCLAUDE.md) is a real built page — i.e. the new internal link isn't brokennpm run lint— cleannpm run check-links— 0 new errors (5 pre-existing errors elsewhere in the repo, unrelated to this change)🤖 Generated with Claude Code