Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 46 additions & 39 deletions content/apis/turbo/payment-service/arns.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,6 @@ _openapi:

- **increase-undername-limit**: Increase the number of permitted
undernames
- content: >
Initiates an ArNS name purchase transaction using the user's Winston
credit balance.


This deducts credits from the user's account and submits the
transaction to the AR.IO network.


**Requirements:**

- User must have sufficient balance to cover the mARIO cost

- Name must be available (checked by AR.IO network)

- All required parameters must be provided based on the intent
- content: >
Retrieves the status of an ArNS purchase transaction by its nonce
(unique ID).
Expand Down Expand Up @@ -73,46 +57,69 @@ _openapi:

- **payment-intent**: Embedded payment flow (integrate in your UI)
- content: >
Self-custody exit: a credit-authenticated owner moves a
Turbo-custodied
Receipt history for a wallet — NOT an ownership oracle. A name that
was

transferred away keeps its receipt and still appears here, so read

present control from the chain using the returned `antId`.


Open-by-address (no signature), mirroring `/account/balance`.
- content: >
Creates and (where Turbo holds the authority) immediately performs an

ArNS action. Debits credits once, at creation, for the four

ARIO-spending actions only.


**Authorization:** payer signature always (x-signature / x-public-key
/

ANT to a Solana pubkey they designate. Turbo (the on-chain owner)
signs
x-nonce). `set-record` and `remove-record` additionally require the
ANT

the transfer.
owner's action-bound proof in the `x-owner-*` headers, verified
against

the ANT's CURRENT ON-CHAIN owner.

**Authorization:** action-bound, single-use signature over

`("arns", "transfer", antId, target)` + nonce. Requires x-signature,
The returned `transaction` carries a Solana blockhash that dies in

x-public-key and x-nonce headers.
~60-90 seconds. Sign those exact bytes — never rebuild the message, or

Turbo's fee-payer signature stops covering it.
- content: >
Turbo (the on-chain owner) writes a resolution record on the
One submit path for every action. Takes the base64 transaction
returned

credit-authenticated user's behalf. `undername` defaults to "@" (the
base
by the create call, now carrying the ANT owner's signature.

name record).

**No payer auth.** The authorization is the owner's signature inside
the

**Authorization:** action-bound, single-use signature over
transaction, which the chain enforces against those exact
instructions;

`("arns", "set-record", antId, undername, transactionId, ttlSeconds)`
+
the nonce is a random UUID capability. Requiring a second off-chain

signature would break flows where the signer is not the payer.

nonce. Requires x-signature, x-public-key and x-nonce headers.
- content: |
Turbo (the on-chain owner) removes a resolution record on the
credit-authenticated user's behalf.

**Authorization:** action-bound, single-use signature over
`("arns", "remove-record", antId, undername)` + nonce. Requires
x-signature, x-public-key and x-nonce headers.
**Idempotent.** A replay of a completed action returns its envelope
with

`alreadyCompleted: true` and performs no second purchase.
- content: |
Open by nonce (a random UUID handed only to the caller who created the
action). Deliberately does NOT echo the transaction bytes.
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Arweave Name System (ArNS) registration and management

<APIPage document={"https://payment.ardrive.io/openapi.json"} operations={[{"path":"/arns/price/{intent}/{name}","method":"get"},{"path":"/arns/purchase/{intent}/{name}","method":"post"},{"path":"/arns/purchase/{nonce}","method":"get"},{"path":"/arns/quote/{method}/{address}/{currency}/{intent}/{name}","method":"get"},{"path":"/arns/transfer/{antId}","method":"post"},{"path":"/arns/manage/{antId}/set-record","method":"post"},{"path":"/arns/manage/{antId}/remove-record","method":"post"}]} webhooks={[]} hasHead={true} />
<APIPage document={"https://payment.ardrive.io/openapi.json"} operations={[{"path":"/arns/price/{intent}/{name}","method":"get"},{"path":"/arns/purchase/{nonce}","method":"get"},{"path":"/arns/quote/{method}/{address}/{currency}/{intent}/{name}","method":"get"},{"path":"/arns/my-names/{address}","method":"get"},{"path":"/arns/actions/{action}","method":"post"},{"path":"/arns/actions/{nonce}/sign","method":"post"},{"path":"/arns/actions/{nonce}","method":"get"}]} webhooks={[]} hasHead={true} />
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ ardrive \<command\> --help
[ArDrive Community Discord][ardrive-discord]

[ardrive]: https://ardrive.io
[arweave]: /learn/what-is-arweave
[arweave]: https://ardrive.io/what-is-arweave/
[ardrive-github]: https://github.com/ardriveapp/
[arfs]: https://ardrive.atlassian.net/l/c/m6P1vJDo
[ardrive-web-app]: https://app.ardrive.io
Expand All @@ -120,4 +120,4 @@ ardrive \<command\> --help
[viewblock]: https://viewblock.io/arweave/
[tx_anchors]: https://docs.arweave.org/developers/server/http-api#field-definitions
[gql-guide]: https://gql-guide.vercel.app/#owners
[ardrive-turbo]: /build/upload
[ardrive-turbo]: https://ardrive.io/turbo/
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,9 @@ Deploy a single file:

```bash
ario-deploy deploy --wallet ./wallet.json --deploy-file ./path/to/file.txt
```
```

`--deploy-file` overrides `--deploy-folder`, and the file is uploaded as one
transaction with **no manifest** — an ArNS name pointed at it resolves straight
to that file, served with its own content type. Useful for a PDF, a dataset, or
a single page. Manifest-only options such as `--fallback-file` do not apply.
1 change: 1 addition & 0 deletions content/sdks/(clis)/ario-deploy/(commands)/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"pages": [
"interactive-mode-easiest",
"direct-commands",
"single-page-apps",
"upload-deploy-without-arns",
"advanced-usage"
],
Expand Down
36 changes: 36 additions & 0 deletions content/sdks/(clis)/ario-deploy/(commands)/single-page-apps.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: "Single-page apps"
description: "CLI for deploying apps to the permaweb (Arweave) and updating ArNS"
---

An Arweave path manifest maps each path to a transaction, and a gateway returns
404 for any path the manifest does not list. That is correct for static files
but wrong for a single-page app, whose routes are not files — `/settings` is
invented by the router and exists nowhere on disk. Without a fallback the root
loads and every deep link 404s.

Manifests have a `fallback` for exactly this, and `ario-deploy` sets it
automatically when the build emits a `404.html`:

```bash
ario-deploy deploy --deploy-folder ./dist
```

Most SPA builds do not emit one. Either copy your entry point before deploying:

```bash
cp dist/index.html dist/404.html
```

…or name the fallback directly:

```bash
ario-deploy deploy --deploy-folder ./dist --fallback-file index.html
```

The file must exist in the deploy folder; a path that is not there fails before
anything is uploaded, so a typo costs nothing.

> Deep links can appear broken for up to a minute after a redeploy while
> gateways serve cached 404s from the previous manifest. Confirm with a
> cache-busting query string (`/settings?x=1`) before assuming the deploy failed.
2 changes: 1 addition & 1 deletion content/sdks/(clis)/ario-deploy/bundler-service.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: "Bundler service"
description: "CLI for deploying apps to the permaweb (Arweave) and updating ArNS"
---

Uploads go through a bundler service that accepts signed data items and posts them to Arweave. By default, ario-deploy uses the [Turbo](/build/upload) API and ArDrive’s production bundler (`https://upload.ardrive.io`). **`--uploader`** sets the **base URL** of the bundler service to use (scheme + host; typically no path).
Uploads go through a bundler service that accepts signed data items and posts them to Arweave. By default, ario-deploy uses the [Turbo](https://docs.ardrive.io/docs/turbo/) API and ArDrive’s production bundler (`https://upload.ardrive.io`). **`--uploader`** sets the **base URL** of the bundler service to use (scheme + host; typically no path).

| When to use | Example value |
| ------------------------- | ------------------------------------------------------- |
Expand Down
3 changes: 2 additions & 1 deletion content/sdks/(clis)/ario-deploy/command-options.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ description: "CLI for deploying apps to the permaweb (Arweave) and updating ArNS
- `--cluster, -p`: Solana cluster for ArNS updates. Choices: `mainnet`, `devnet`. Default: `mainnet`
- `--rpc-url`: Optional Solana RPC URL override for ArNS updates
- `--deploy-folder, -d`: Folder to deploy. Default: `./dist`
- `--deploy-file, -f`: Deploy a single file instead of a folder
- `--deploy-file, -f`: Deploy a single file instead of a folder (no manifest is created)
- `--fallback-file`: Path, relative to the deploy folder, served for routes the manifest does not list. Defaults to `404.html` when the build emits one. See [Single-page apps](#single-page-apps).
- `--undername, -u`: ANT undername to update. Default: `@`
- `--ttl-seconds, -t`: TTL in seconds for the ANT record (60-86400). Default: `60`

Expand Down
2 changes: 1 addition & 1 deletion content/sdks/(clis)/ario-deploy/features.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: "CLI for deploying apps to the permaweb (Arweave) and updating ArNS
- **Optional ArNS Updates:** Updates ArNS records via ANT with new transaction IDs
- **Automated Workflow:** Integrates with GitHub Actions for continuous deployment
- **Git Hash Tagging:** In CI (GitHub Actions), tags uploaded data items with the deploying commit SHA
- **404 Fallback Detection:** Automatically detects and sets 404.html as fallback
- **404 Fallback Detection:** Automatically sets `404.html` as the manifest fallback when present, so deep links into a single-page app resolve instead of 404ing. Override with `--fallback-file \<path\>` — an SPA that only builds `index.html` can point at that instead.
- **Network Support:** ArNS updates run against the Solana ARIO programs on `mainnet` or `devnet`, with an optional custom RPC URL
- **Flexible Deployment:** Supports deploying a folder or a single file
- **Modern CLI:** Built with oclif for a robust command-line experience
Expand Down
5 changes: 4 additions & 1 deletion content/sdks/(clis)/ario-deploy/troubleshooting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ description: "CLI for deploying apps to the permaweb (Arweave) and updating ArNS
- **Error: "ArNS name does not exist":** Verify the ArNS name is correct and exists in the specified network
- **Upload timeouts:** Files have a timeout for upload. Large files may fail and require optimization
- **Insufficient Turbo Credits:** Use `--on-demand` with `--max-token-amount` to automatically fund uploads when balance is low
- **On-demand payment fails:** Ensure your wallet has sufficient tokens (ARIO or Base-ETH) and the token type matches your signer (`ario` with Arweave, `base-eth` with Ethereum)
- **On-demand payment fails:** Ensure your wallet has sufficient tokens (ARIO or Base-ETH) and the token type matches your signer (`ario` with Arweave, `base-eth` with Ethereum)
- **Deep links 404 but the homepage loads:** The manifest has no `fallback`. Emit a `404.html` or pass `--fallback-file index.html` — see [Single-page apps](#single-page-apps)
- **Deep links still 404 right after a redeploy:** Gateways cache the previous manifest's 404s for around a minute. Retry with a cache-busting query string before assuming the deploy failed
- **Error: "Fallback file not found in folder":** `--fallback-file` takes a path relative to the deploy folder, e.g. `index.html`, not `./dist/index.html`
51 changes: 47 additions & 4 deletions content/sdks/(clis)/llm.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1388,7 +1388,7 @@ Claude will build your project, detect the output folder, and run the deploy wit
4. **Runs the deployment** with appropriate flags
5. **Reports results** — transaction ID, Arweave URL, ArNS URL

See [`examples/claude-skill/`](./examples/claude-skill/) for the full skill file and customization options.
See [`examples/claude-skill/`](https://github.com/ar-io/ar-io-deploy/tree/main/examples/claude-skill) for the full skill file and customization options.

---

Expand Down Expand Up @@ -1459,6 +1459,11 @@ Deploy a single file:
ario-deploy deploy --wallet ./wallet.json --deploy-file ./path/to/file.txt
```

`--deploy-file` overrides `--deploy-folder`, and the file is uploaded as one
transaction with **no manifest** — an ArNS name pointed at it resolves straight
to that file, served with its own content type. Useful for a PDF, a dataset, or
a single page. Manifest-only options such as `--fallback-file` do not apply.

# Interactive Mode (Easiest) (/ario-deploy/(commands)/interactive-mode-easiest)

Run the deploy command without arguments to be guided through all deployment options:
Expand All @@ -1481,6 +1486,40 @@ Pass `--arns-name` (or `--use-arns`) to skip the ArNS confirmation, or use the
or no TTY) `deploy` does not prompt — supply everything via flags or
`DEPLOY_KEY`.

# Single-page apps (/ario-deploy/(commands)/single-page-apps)

An Arweave path manifest maps each path to a transaction, and a gateway returns
404 for any path the manifest does not list. That is correct for static files
but wrong for a single-page app, whose routes are not files — `/settings` is
invented by the router and exists nowhere on disk. Without a fallback the root
loads and every deep link 404s.

Manifests have a `fallback` for exactly this, and `ario-deploy` sets it
automatically when the build emits a `404.html`:

```bash
ario-deploy deploy --deploy-folder ./dist
```

Most SPA builds do not emit one. Either copy your entry point before deploying:

```bash
cp dist/index.html dist/404.html
```

…or name the fallback directly:

```bash
ario-deploy deploy --deploy-folder ./dist --fallback-file index.html
```

The file must exist in the deploy folder; a path that is not there fails before
anything is uploaded, so a typo costs nothing.

> Deep links can appear broken for up to a minute after a redeploy while
> gateways serve cached 404s from the previous manifest. Confirm with a
> cache-busting query string (`/settings?x=1`) before assuming the deploy failed.

# Upload/deploy without ArNS (/ario-deploy/(commands)/upload-deploy-without-arns)

`deploy` uploads without updating ArNS by default. You can also use the `upload` command explicitly for the same Turbo upload, dedupe cache, and payment options as deploy, minus ArNS flags:
Expand Down Expand Up @@ -1771,7 +1810,8 @@ jobs:
- `--cluster, -p`: Solana cluster for ArNS updates. Choices: `mainnet`, `devnet`. Default: `mainnet`
- `--rpc-url`: Optional Solana RPC URL override for ArNS updates
- `--deploy-folder, -d`: Folder to deploy. Default: `./dist`
- `--deploy-file, -f`: Deploy a single file instead of a folder
- `--deploy-file, -f`: Deploy a single file instead of a folder (no manifest is created)
- `--fallback-file`: Path, relative to the deploy folder, served for routes the manifest does not list. Defaults to `404.html` when the build emits one. See [Single-page apps](#single-page-apps).
- `--undername, -u`: ANT undername to update. Default: `@`
- `--ttl-seconds, -t`: TTL in seconds for the ANT record (60-86400). Default: `60`

Expand Down Expand Up @@ -1846,7 +1886,7 @@ The cache file is stored at `.ario-deploy/transaction-cache.json` in your projec
- **Optional ArNS Updates:** Updates ArNS records via ANT with new transaction IDs
- **Automated Workflow:** Integrates with GitHub Actions for continuous deployment
- **Git Hash Tagging:** In CI (GitHub Actions), tags uploaded data items with the deploying commit SHA
- **404 Fallback Detection:** Automatically detects and sets 404.html as fallback
- **404 Fallback Detection:** Automatically sets `404.html` as the manifest fallback when present, so deep links into a single-page app resolve instead of 404ing. Override with `--fallback-file \` — an SPA that only builds `index.html` can point at that instead.
- **Network Support:** ArNS updates run against the Solana ARIO programs on `mainnet` or `devnet`, with an optional custom RPC URL
- **Flexible Deployment:** Supports deploying a folder or a single file
- **Modern CLI:** Built with oclif for a robust command-line experience
Expand Down Expand Up @@ -1931,4 +1971,7 @@ DEPLOY_KEY=$(base64 -i wallet.json) ARNS_KEY=\ pnpm deploy:on-demand
- **Error: "ArNS name does not exist":** Verify the ArNS name is correct and exists in the specified network
- **Upload timeouts:** Files have a timeout for upload. Large files may fail and require optimization
- **Insufficient Turbo Credits:** Use `--on-demand` with `--max-token-amount` to automatically fund uploads when balance is low
- **On-demand payment fails:** Ensure your wallet has sufficient tokens (ARIO or Base-ETH) and the token type matches your signer (`ario` with Arweave, `base-eth` with Ethereum)
- **On-demand payment fails:** Ensure your wallet has sufficient tokens (ARIO or Base-ETH) and the token type matches your signer (`ario` with Arweave, `base-eth` with Ethereum)
- **Deep links 404 but the homepage loads:** The manifest has no `fallback`. Emit a `404.html` or pass `--fallback-file index.html` — see [Single-page apps](#single-page-apps)
- **Deep links still 404 right after a redeploy:** Gateways cache the previous manifest's 404s for around a minute. Retry with a cache-busting query string before assuming the deploy failed
- **Error: "Fallback file not found in folder":** `--fallback-file` takes a path relative to the deploy folder, e.g. `index.html`, not `./dist/index.html`
3 changes: 2 additions & 1 deletion content/sdks/ar-io-sdk/(advanced)/advanced-networks.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ description: "TypeScript/JavaScript SDK for interacting with the ar.io ecosystem
| Localnet | Surfpool — `https://github.com/solana-foundation/surfpool` | Localnet harness in `solana-ar-io` monorepo |

The migration tooling (snapshot exporter, batch importer, claim app)
lives in the `solana-ar-io` monorepo until cutover.
lives in the [`solana-ar-io`](https://github.com/ar-io/solana-ar-io)
monorepo until cutover.
4 changes: 2 additions & 2 deletions content/sdks/ar-io-sdk/llm.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2974,12 +2974,12 @@ The ar.io SDK provides comprehensive tools for interacting with ar.io and the Ar
}
title="Pagination & Utilities"
description="Handle large datasets and token conversions efficiently"
href="/sdks/ar-io-sdk/overview"
href="/sdks/ar-io-sdk/pagination"
/>
}
title="Token Operations"
description="ARIO token conversions and management utilities"
href="/sdks/ar-io-sdk/converting-ario-to-mario"
href="/sdks/ar-io-sdk/token-conversion"
/>

# Logging (/logging)
Expand Down
9 changes: 0 additions & 9 deletions content/sdks/turbo-sdk/(apis)/turboauthenticatedclient.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -400,15 +400,6 @@ const turbo = TurboFactory.authenticated({ signer, token: 'ario' });
const { winc, status, id, ...fundResult } = await turbo.topUpWithTokens({
tokenAmount: ARIOToTokenAmount(100), // 100 $ARIO
});


// ARIO on Base Network
const { winc, status, id, ...fundResult } = await TurboFactory.authenticated({
signer,
token: 'base-ario',
}).topUpWithTokens({
tokenAmount: ARIOToTokenAmount(100), // 100 $ARIO
});
```

##### USDC Crypto Top Up
Expand Down
Loading