@rozoai/checkout 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,7 +9,8 @@ Base. This skill pays them from whatever you hold instead, and it does three
9
9
  things the official path cannot:
10
10
 
11
11
  - **Pay from the chain you are already on.** USDT or USDC on Solana, BNB Chain,
12
- Ethereum or Polygon, USDC on Base or Stellar, or BTC over Lightning. Coinbase's
12
+ Ethereum, Polygon or Arbitrum, USDC on Base or Stellar, BTC over Lightning, or
13
+ a native coin: ETH on Ethereum, Base or Arbitrum, BNB, SOL or POL. Coinbase's
13
14
  own direct pay takes USDC on Base.
14
15
  - **No Coinbase account.** Pay the deposit address from any wallet or straight
15
16
  from an exchange withdrawal. No sign-up, no API key, no browser.
@@ -61,12 +62,34 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
61
62
  | Ethereum | `usdt-ethereum` `usdc-ethereum` | `1` | 6 decimals |
62
63
  | BNB Chain | `usdt-bnb` `usdc-bnb` | `56` | 18 decimals |
63
64
  | Polygon | `usdt-polygon` `usdc-polygon` | `137` | 6 decimals |
65
+ | Arbitrum | `usdt-arbitrum` `usdc-arbitrum` | `42161` | 6 decimals |
64
66
  | Base | `usdc-base` | `8453` | 6 decimals |
65
- | Solana | `usdt-solana` `usdc-solana` | `900` | SPL; native SOL not supported |
67
+ | Solana | `usdt-solana` `usdc-solana` | `900` | SPL |
66
68
  | Stellar | `usdc-stellar` | `1500` | `MEMO_TEXT` memo required — shown in the deposit block |
67
69
  | Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11; amounts in satoshis. Any wallet that can pay an invoice works, including Cashu/ecash wallets — the mint melts your ecash into the Lightning payment. |
68
70
 
69
- Native gas coins (SOL, BNB, ETH, MATIC) and on-chain BTC are not accepted.
71
+ **Native coins**, each on its own chain:
72
+
73
+ | Coin | `--with` | Chain id | Notes |
74
+ |---|---|---|---|
75
+ | ETH on Ethereum | `eth-ethereum` | `1` | 18 decimals (wei); $1 minimum |
76
+ | ETH on Base | `eth-base` | `8453` | 18 decimals (wei) |
77
+ | ETH on Arbitrum | `eth-arbitrum` | `42161` | 18 decimals (wei) |
78
+ | BNB | `bnb-bnb` or `bnb` | `56` | 18 decimals |
79
+ | SOL | `sol-solana` or `sol` | `900` | 9 decimals (lamports) |
80
+ | POL | `pol-polygon` or `pol` | `137` | 18 decimals |
81
+
82
+ A native coin is offered only when the invoice's quote lists it (`quote` shows
83
+ which), and only for invoices up to $2,000. The order is **exact-out**, like
84
+ Lightning: send exactly the coin amount in the deposit block. Its price is
85
+ locked only until the time shown (about an hour); after that, do not send it,
86
+ let the order expire and start a new one. The coin amount includes an FX spread
87
+ on top of the service fee, and your wallet needs a little more of the same coin
88
+ for the network fee. If you pay from an exchange, the amount that arrives must
89
+ be the full amount: check that the withdrawal fee is not taken out of it.
90
+ `--send` pays native coins too, as a plain transfer of the exact amount.
91
+
92
+ On-chain BTC and Tron are not supported.
70
93
 
71
94
  ## Which wallet do I need?
72
95
 
@@ -88,8 +111,8 @@ already hold and pay from wherever it already lives.
88
111
  route settles against ROZO's own Lightning node rather than a third-party
89
112
  swap, so no special handling is needed on our side.
90
113
  - **Only `--send` needs a private key**, read from `ROZO_CHECKOUT_EVM_KEY` or
91
- `ROZO_CHECKOUT_SOL_KEY`, and it covers EVM chains and Solana only. Everything
92
- else is keyless.
114
+ `ROZO_CHECKOUT_SOL_KEY`, and it covers EVM chains and Solana only (their
115
+ native coins included). Everything else is keyless.
93
116
 
94
117
  ## Use it from your agent
95
118
 
@@ -168,7 +191,8 @@ ROZO_CHECKOUT_EVM_KEYSTORE=/replace/me/keystores/my-hot-wallet
168
191
  # are prompted instead, and nothing is stored.
169
192
  ROZO_CHECKOUT_KEYSTORE_PASSPHRASE=REPLACE_ME_not_a_real_passphrase
170
193
 
171
- # Optional RPC overrides, one per chain id. 8453 = Base, 900 = Solana.
194
+ # Optional RPC overrides, one per chain id. 8453 = Base, 42161 = Arbitrum,
195
+ # 900 = Solana.
172
196
  ROZO_CHECKOUT_RPC_8453=https://mainnet.base.org
173
197
  ROZO_CHECKOUT_RPC_900=https://api.mainnet-beta.solana.com
174
198
  ```
@@ -437,10 +461,12 @@ done < links.txt
437
461
  Lightning: `deposit.lnInvoice` (the BOLT11) for `deposit.amount` sats. Other
438
462
  coins: `deposit.receiverAddress` and `deposit.amount`, plus
439
463
  `deposit.receiverMemo` on Stellar. `--send` cannot pay Lightning or Stellar.
464
+ A native coin order has `deposit.native: true` and `deposit.exactOut: true`.
440
465
  - The deadline to watch is `order.expiry.effectiveDeadlineIso`, not
441
466
  `deposit.expiresAt`: it is the earlier of our order expiry and the Coinbase
442
- link expiry. Stop paying at least `order.expiry.marginMinutes` before it,
443
- since settlement needs that much time.
467
+ link expiry, and for a native coin also its price lock
468
+ (`deposit.quoteExpiresAt`). Stop paying at least `order.expiry.marginMinutes`
469
+ before it, since settlement needs that much time.
444
470
  - If time has passed since you created the order, do not pay saved deposit
445
471
  details blindly. Re-run the same `pay` command (same `--with`): while the
446
472
  order is still payable it re-checks the link and the deadline and hands back
@@ -485,7 +511,9 @@ layers. Delivery is always `unknown`: Rozo cannot see your OpenRouter credits.
485
511
 
486
512
  With `--send`, the wallet must also hold the chain's fee coin (ETH, BNB, POL or
487
513
  SOL). If it does not, the CLI stops with `INSUFFICIENT_GAS` before signing and
488
- tells you how much is missing; the order is left untouched.
514
+ tells you how much is missing; the order is left untouched. Paying with a native
515
+ coin spends that same coin, so the wallet needs the order amount plus the fee.
516
+ A native order is never sent after its price lock (`QUOTE_EXPIRED`).
489
517
 
490
518
  **Retrying without paying twice.** Running `pay` again on the same link does
491
519
  not create a second order while its order is open: you get the same order
@@ -3,8 +3,8 @@
3
3
  [English](QUICKSTART.md) | [简体中文](QUICKSTART.zh.md) | [日本語](QUICKSTART.ja.md) | **Español**
4
4
 
5
5
  Pagar un enlace de pago de Coinbase (Coinbase Payment Link) de OpenRouter con
6
- USDT/USDC en Solana, BNB Chain, Ethereum, Polygon, Base o Stellar, o con BTC por
7
- Lightning. Cinco minutos. Para saber cómo funciona y por qué, ver
6
+ USDT/USDC en Solana, BNB Chain, Ethereum, Polygon, Arbitrum, Base o Stellar, con BTC por
7
+ Lightning, o con una moneda nativa (ETH en Ethereum, Base o Arbitrum, BNB, SOL, POL). Cinco minutos. Para saber cómo funciona y por qué, ver
8
8
  [README.md](../README.md).
9
9
 
10
10
  ## El comando de una sola línea
@@ -26,9 +26,17 @@ npx @rozoai/checkout pay https://payments.coinbase.com/payment-links/pl_01YOURLI
26
26
  ```
27
27
 
28
28
  Monedas para `--with`: `usdt-solana`, `usdc-solana`, `usdt-bnb`, `usdc-bnb`, `usdt-ethereum`,
29
- `usdc-ethereum`, `usdt-polygon`, `usdc-polygon`, `usdc-base`, `usdc-stellar`,
30
- `btc-lightning`. Los scripts y los agentes deben pasar siempre `--with`: el
31
- selector solo aparece en una terminal y no hay moneda por defecto.
29
+ `usdc-ethereum`, `usdt-polygon`, `usdc-polygon`, `usdt-arbitrum`, `usdc-arbitrum`,
30
+ `usdc-base`, `usdc-stellar`, `btc-lightning`, y las monedas nativas `eth-ethereum`,
31
+ `eth-base`, `eth-arbitrum`, `bnb-bnb`, `sol-solana`, `pol-polygon`. Los scripts y
32
+ los agentes deben pasar siempre `--with`: el selector solo aparece en una
33
+ terminal y no hay moneda por defecto.
34
+
35
+ Una moneda nativa solo se ofrece cuando la cotización de la factura la incluye,
36
+ para facturas de hasta $2,000 (ETH nativo en Ethereum: mínimo $1). Es exact-out:
37
+ envía exactamente la cantidad indicada antes de que termine el precio fijado
38
+ (alrededor de una hora), y guarda un poco de la misma moneda para el gas. El BTC
39
+ on-chain y Tron no están soportados.
32
40
 
33
41
  Por defecto solo imprime una dirección para pagar desde cualquier billetera: sin
34
42
  clave privada y sin configuración. Añadir `--send` únicamente si se quiere que la
@@ -55,7 +63,7 @@ LINK="https://payments.coinbase.com/payment-links/pl_01YOURLINKID"
55
63
  ```
56
64
 
57
65
  Ids de cadena: `1` Ethereum · `56` BNB Chain · `137` Polygon · `8453` Base ·
58
- `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning.
66
+ `42161` Arbitrum · `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning.
59
67
 
60
68
  ## ¿Qué wallet necesito?
61
69
 
@@ -3,7 +3,7 @@
3
3
  [English](QUICKSTART.md) | [简体中文](QUICKSTART.zh.md) | **日本語** | [Español](QUICKSTART.es.md)
4
4
 
5
5
  OpenRouter の Coinbase 決済リンク (Payment Link) を、Solana、BNB Chain、
6
- Ethereum、Polygon、Base、Stellar 上の USDT/USDC、または Lightning 経由の BTC で支払います。所要 5 分。
6
+ Ethereum、Polygon、Arbitrum、Base、Stellar 上の USDT/USDC、Lightning 経由の BTC、またはネイティブコイン(Ethereum・Base・Arbitrum の ETH、BNB、SOL、POL)で支払います。所要 5 分。
7
7
  仕組みと設計意図については [README.md](../README.md) を参照してください。
8
8
 
9
9
  ## ワンライナー
@@ -25,10 +25,15 @@ npx @rozoai/checkout pay https://payments.coinbase.com/payment-links/pl_01YOURLI
25
25
 
26
26
  `--with` に指定できる通貨: `usdt-solana`、
27
27
  `usdc-solana`、`usdt-bnb`、`usdc-bnb`、`usdt-ethereum`、`usdc-ethereum`、
28
- `usdt-polygon`、`usdc-polygon`、`usdc-base`、`usdc-stellar`、`btc-lightning`。
28
+ `usdt-polygon`、`usdc-polygon`、`usdt-arbitrum`、`usdc-arbitrum`、`usdc-base`、`usdc-stellar`、`btc-lightning`、
29
+ ネイティブコインの `eth-ethereum`、`eth-base`、`eth-arbitrum`、`bnb-bnb`、`sol-solana`、`pol-polygon`。
29
30
  スクリプトやエージェントでは必ず `--with` を渡してください。対話式の選択は端末でのみ
30
31
  表示され、既定の通貨はありません。
31
32
 
33
+ ネイティブコインは、インボイスの見積もりに含まれている場合のみ使えます(上限 $2,000、Ethereum の ETH は最低 $1)。
34
+ 受取額固定(exact-out)なので、表示された数量を価格固定の期限(約 1 時間)までに正確に送り、ガス代として同じコインを少し残してください。
35
+ オンチェーンの BTC と Tron には対応していません。
36
+
32
37
  既定では、任意のウォレットから支払うためのアドレスを表示するだけです — 鍵も設定も
33
38
  不要です。CLI にホットウォレットから署名させたい場合にだけ `--send` を、機械可読な
34
39
  出力が必要な場合は `--json` を追加してください。
@@ -52,7 +57,7 @@ LINK="https://payments.coinbase.com/payment-links/pl_01YOURLINKID"
52
57
  ```
53
58
 
54
59
  チェーン id: `1` Ethereum · `56` BNB Chain · `137` Polygon · `8453` Base ·
55
- `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning。
60
+ `42161` Arbitrum · `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning。
56
61
 
57
62
  ## どのウォレットが必要ですか?
58
63
 
@@ -3,7 +3,8 @@
3
3
  **English** | [简体中文](QUICKSTART.zh.md) | [日本語](QUICKSTART.ja.md) | [Español](QUICKSTART.es.md)
4
4
 
5
5
  Pay an OpenRouter Coinbase Payment Link with USDT/USDC on Solana, BNB Chain,
6
- Ethereum, Polygon, Base or Stellar, or with BTC over Lightning. Five minutes.
6
+ Ethereum, Polygon, Arbitrum, Base or Stellar, with BTC over Lightning, or with a
7
+ native coin (ETH on Ethereum, Base or Arbitrum, BNB, SOL, POL). Five minutes.
7
8
  For how it works and why, see [README.md](../README.md).
8
9
 
9
10
  ## The one-liner
@@ -25,9 +26,16 @@ npx @rozoai/checkout pay https://payments.coinbase.com/payment-links/pl_01YOURLI
25
26
  ```
26
27
 
27
28
  Coins for `--with`: `usdt-solana`, `usdc-solana`, `usdt-bnb`, `usdc-bnb`,
28
- `usdt-ethereum`, `usdc-ethereum`, `usdt-polygon`, `usdc-polygon`, `usdc-base`,
29
- `usdc-stellar`, `btc-lightning`. Scripts and agents must pass `--with`: the
30
- picker only appears on a terminal, and there is no default coin.
29
+ `usdt-ethereum`, `usdc-ethereum`, `usdt-polygon`, `usdc-polygon`,
30
+ `usdt-arbitrum`, `usdc-arbitrum`, `usdc-base`, `usdc-stellar`, `btc-lightning`,
31
+ and the native coins `eth-ethereum`, `eth-base`, `eth-arbitrum`, `bnb-bnb`,
32
+ `sol-solana`, `pol-polygon`. Scripts and agents must pass `--with`: the picker
33
+ only appears on a terminal, and there is no default coin.
34
+
35
+ A native coin is offered only when the invoice's quote lists it, for invoices up
36
+ to $2,000 (native ETH on Ethereum: $1 minimum). It is exact-out: send exactly
37
+ the coin amount shown, before its price lock ends (about an hour), and keep a
38
+ little of the same coin for gas. On-chain BTC and Tron are not supported.
31
39
 
32
40
  By default it just prints an address for you to pay from any wallet — no key
33
41
  and no configuration needed. Add `--send` only if you want the CLI to sign
@@ -52,7 +60,7 @@ LINK="https://payments.coinbase.com/payment-links/pl_01YOURLINKID"
52
60
  ```
53
61
 
54
62
  Chain ids: `1` Ethereum · `56` BNB Chain · `137` Polygon · `8453` Base ·
55
- `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning.
63
+ `42161` Arbitrum · `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning.
56
64
 
57
65
  ## Which wallet do I need?
58
66
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  [English](QUICKSTART.md) | **简体中文** | [日本語](QUICKSTART.ja.md) | [Español](QUICKSTART.es.md)
4
4
 
5
- 用 Solana、BNB Chain、Ethereum、Polygon、Base 或 Stellar 上的 USDT/USDC,或者用走
6
- Lightning 的 BTC,去支付一个 OpenRouter Coinbase 收款链接 (Payment Link)。五分钟搞定。
5
+ 用 Solana、BNB Chain、Ethereum、Polygon、Arbitrum、Base 或 Stellar 上的 USDT/USDC,用走
6
+ Lightning 的 BTC,或者用原生币(Ethereum、Base、Arbitrum 上的 ETH,BNB、SOL、POL),去支付一个 OpenRouter Coinbase 收款链接 (Payment Link)。五分钟搞定。
7
7
  工作原理与设计理由见 [README.md](../README.md)。
8
8
 
9
9
  ## 一行命令搞定
@@ -20,7 +20,9 @@ npx @rozoai/checkout pay https://payments.coinbase.com/payment-links/pl_01YOURLI
20
20
  npx @rozoai/checkout pay https://payments.coinbase.com/payment-links/pl_01YOURLINKID --with usdt-solana
21
21
  ```
22
22
 
23
- `--with` 可选的币种有:`usdt-solana`、`usdc-solana`、`usdt-bnb`、`usdc-bnb`、`usdt-ethereum`、`usdc-ethereum`、`usdt-polygon`、`usdc-polygon`、`usdc-base`、`usdc-stellar`、`btc-lightning`。脚本和 agent 必须显式传 `--with`:交互式选择只在终端里出现,而且没有默认币种。
23
+ `--with` 可选的币种有:`usdt-solana`、`usdc-solana`、`usdt-bnb`、`usdc-bnb`、`usdt-ethereum`、`usdc-ethereum`、`usdt-polygon`、`usdc-polygon`、`usdt-arbitrum`、`usdc-arbitrum`、`usdc-base`、`usdc-stellar`、`btc-lightning`,以及原生币 `eth-ethereum`、`eth-base`、`eth-arbitrum`、`bnb-bnb`、`sol-solana`、`pol-polygon`。脚本和 agent 必须显式传 `--with`:交互式选择只在终端里出现,而且没有默认币种。
24
+
25
+ 原生币只有在这张账单的报价列出时才能用,账单上限 $2,000(Ethereum 上的 ETH 最低 $1)。原生币是精确到账(exact-out):在币价锁定结束前(约 1 小时)按显示的币数精确发送,并留一点同一种币付 gas。链上 BTC 和 Tron 不支持。
24
26
 
25
27
  默认情况下它只是打印一个地址,让你用任意钱包去付 —— 不需要私钥,也不需要任何配置。只有当你想让 CLI 改从热钱包签名时才加 `--send`;加 `--json` 输出机器可读格式。
26
28
 
@@ -42,7 +44,7 @@ LINK="https://payments.coinbase.com/payment-links/pl_01YOURLINKID"
42
44
  ```
43
45
 
44
46
  链 id:`1` Ethereum · `56` BNB Chain · `137` Polygon · `8453` Base ·
45
- `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning。
47
+ `42161` Arbitrum · `900` Solana · `1500` Stellar · `lightning` Bitcoin Lightning。
46
48
 
47
49
  ## 我需要什么钱包?
48
50
 
package/docs/README.es.md CHANGED
@@ -3,8 +3,9 @@
3
3
  [English](../README.md) | [简体中文](README.zh.md) | [日本語](README.ja.md) | **Español**
4
4
 
5
5
  Pagar un **enlace de pago de Coinbase (Payment Link) de OpenRouter** con una
6
- moneda que ese enlace no puede aceptar directamente: BTC por Lightning, o
7
- USDT/USDC en Solana, BNB Chain, Ethereum, Polygon, Base o Stellar. Un enlace de
6
+ moneda que ese enlace no puede aceptar directamente: BTC por Lightning,
7
+ USDT/USDC en Solana, BNB Chain, Ethereum, Polygon, Arbitrum, Base o Stellar, o
8
+ una moneda nativa: ETH en Ethereum, Base o Arbitrum, BNB, SOL o POL. Un enlace de
8
9
  pago de Coinbase solo acepta USDC en Base; esto enruta la moneda que realmente
9
10
  se posee a través de un puente, y una billetera fondeadora liquida la factura en
10
11
  nombre del usuario. Sin cuenta, sin clave de API, sin navegador.
@@ -32,12 +33,26 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
32
33
  | Ethereum | `usdt-ethereum` `usdc-ethereum` | `1` | 6 decimales |
33
34
  | BNB Chain | `usdt-bnb` `usdc-bnb` | `56` | 18 decimales |
34
35
  | Polygon | `usdt-polygon` `usdc-polygon` | `137` | 6 decimales |
36
+ | Arbitrum | `usdt-arbitrum` `usdc-arbitrum` | `42161` | 6 decimales |
35
37
  | Base | `usdc-base` | `8453` | 6 decimales |
36
- | Solana | `usdt-solana` `usdc-solana` | `900` | SPL; SOL nativo no admitido |
38
+ | Solana | `usdt-solana` `usdc-solana` | `900` | SPL |
37
39
  | Stellar | `usdc-stellar` | `1500` | memo `MEMO_TEXT` obligatorio — se muestra en el bloque de depósito |
38
40
  | Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11; importes en satoshis |
39
41
 
40
- Las monedas de gas nativas (SOL, BNB, ETH, MATIC) y el BTC on-chain no se aceptan.
42
+ **Monedas nativas**, cada una en su propia cadena:
43
+
44
+ | Moneda | `--with` | Id de cadena | Notas |
45
+ |---|---|---|---|
46
+ | ETH en Ethereum | `eth-ethereum` | `1` | 18 decimales (wei); mínimo $1 |
47
+ | ETH en Base | `eth-base` | `8453` | 18 decimales (wei) |
48
+ | ETH en Arbitrum | `eth-arbitrum` | `42161` | 18 decimales (wei) |
49
+ | BNB | `bnb-bnb` o `bnb` | `56` | 18 decimales |
50
+ | SOL | `sol-solana` o `sol` | `900` | 9 decimales (lamports) |
51
+ | POL | `pol-polygon` o `pol` | `137` | 18 decimales |
52
+
53
+ Una moneda nativa solo se ofrece cuando la cotización de la factura la incluye (`quote` lo muestra), y solo para facturas de hasta $2,000. La orden es **exact-out**, como Lightning: envía exactamente la cantidad de moneda del bloque de depósito. Su precio queda fijado solo hasta la hora indicada (alrededor de una hora); pasada esa hora, no la envíes: deja que la orden expire y crea una nueva. La cantidad incluye un diferencial cambiario además de la comisión de servicio, y la billetera necesita un poco más de la misma moneda para la comisión de red. Si pagas desde un exchange, debe llegar la cantidad completa: comprueba que la comisión de retiro no se descuente de ella. `--send` también paga monedas nativas, como una transferencia normal de la cantidad exacta.
54
+
55
+ El BTC on-chain y Tron no están soportados.
41
56
 
42
57
  ## ¿Qué wallet necesito?
43
58
 
package/docs/README.ja.md CHANGED
@@ -3,8 +3,8 @@
3
3
  [English](../README.md) | [简体中文](README.zh.md) | **日本語** | [Español](README.es.md)
4
4
 
5
5
  **OpenRouter の Coinbase 決済リンク (Payment Link)** を、そのリンクが直接受け取れない
6
- 通貨で支払います — Lightning 経由の BTC、または Solana、BNB Chain、Ethereum、
7
- Polygon、Base、Stellar 上の USDT/USDC です。Coinbase の決済リンクは Base 上の USDC しか
6
+ 通貨で支払います:Lightning 経由の BTC、Solana、BNB Chain、Ethereum、
7
+ Polygon、Arbitrum、Base、Stellar 上の USDT/USDC、またはネイティブコイン(Ethereum・Base・Arbitrum の ETH、BNB、SOL、POL)です。Coinbase の決済リンクは Base 上の USDC しか
8
8
  受け付けません。本ツールは、あなたが実際に保有している通貨をブリッジ経由で中継し、
9
9
  資金提供ウォレット (funder wallet) があなたに代わってインボイスを決済します。
10
10
  アカウントも API キーもブラウザーも不要です。
@@ -31,12 +31,26 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
31
31
  | Ethereum | `usdt-ethereum` `usdc-ethereum` | `1` | 小数点以下 6 桁 |
32
32
  | BNB Chain | `usdt-bnb` `usdc-bnb` | `56` | 小数点以下 18 桁 |
33
33
  | Polygon | `usdt-polygon` `usdc-polygon` | `137` | 小数点以下 6 桁 |
34
+ | Arbitrum | `usdt-arbitrum` `usdc-arbitrum` | `42161` | 小数点以下 6 桁 |
34
35
  | Base | `usdc-base` | `8453` | 小数点以下 6 桁 |
35
- | Solana | `usdt-solana` `usdc-solana` | `900` | SPL。ネイティブの SOL は非対応 |
36
+ | Solana | `usdt-solana` `usdc-solana` | `900` | SPL |
36
37
  | Stellar | `usdc-stellar` | `1500` | `MEMO_TEXT` のメモが必須 — 入金ブロックに表示されます |
37
38
  | Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11。金額は satoshi 単位 |
38
39
 
39
- ネイティブのガス通貨(SOL、BNB、ETH、MATIC)およびオンチェーンの BTC は受け付けません。
40
+ **ネイティブコイン**(それぞれ自分のチェーン上のみ):
41
+
42
+ | コイン | `--with` | チェーン id | 備考 |
43
+ |---|---|---|---|
44
+ | Ethereum の ETH | `eth-ethereum` | `1` | 小数点以下 18 桁(wei)。最低 $1 |
45
+ | Base の ETH | `eth-base` | `8453` | 小数点以下 18 桁(wei) |
46
+ | Arbitrum の ETH | `eth-arbitrum` | `42161` | 小数点以下 18 桁(wei) |
47
+ | BNB | `bnb-bnb` または `bnb` | `56` | 小数点以下 18 桁 |
48
+ | SOL | `sol-solana` または `sol` | `900` | 小数点以下 9 桁(lamports) |
49
+ | POL | `pol-polygon` または `pol` | `137` | 小数点以下 18 桁 |
50
+
51
+ ネイティブコインは、そのインボイスの見積もりに含まれている場合にのみ使えます(`quote` で確認できます)。上限は 1 件 $2,000 です。注文は Lightning と同じく**exact-out(受取額固定)**で、入金ブロックのコイン数量をそのまま正確に送ってください。価格は表示された時刻(約 1 時間)までしか固定されません。それを過ぎたら送らず、注文の期限切れを待って新しく作り直してください。コイン数量にはサービス手数料に加えて為替スプレッドが含まれます。ウォレットにはネットワーク手数料用に同じコインが少し余分に必要です。取引所から出金する場合は、着金額が全額になるよう、出金手数料が差し引かれないことを確認してください。`--send` もネイティブコインに対応しており、正確な数量の通常送金として送ります。
52
+
53
+ オンチェーンの BTC と Tron には対応していません。
40
54
 
41
55
  ## どのウォレットが必要ですか?
42
56
 
package/docs/README.zh.md CHANGED
@@ -3,8 +3,8 @@
3
3
  [English](../README.md) | **简体中文** | [日本語](README.ja.md) | [Español](README.es.md)
4
4
 
5
5
  用一种 **OpenRouter Coinbase 收款链接 (Payment Link)** 本身收不了的币去付款 —— 走
6
- 闪电网络的 BTC,或者 Solana、BNB Chain、Ethereum、Polygon、Base、Stellar 上的
7
- USDT/USDC。Coinbase 收款链接只接受 Base 上的 USDC;本工具把你实际持有的币通过
6
+ 闪电网络的 BTC,Solana、BNB Chain、Ethereum、Polygon、Arbitrum、Base、Stellar 上的
7
+ USDT/USDC,或者原生币:Ethereum、Base、Arbitrum 上的 ETH,以及 BNB、SOL、POL。Coinbase 收款链接只接受 Base 上的 USDC;本工具把你实际持有的币通过
8
8
  一座桥路由过去,再由一个出资钱包代你结清账单。无需账号、无需 API key、无需浏览器。
9
9
 
10
10
  ```bash
@@ -28,12 +28,26 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
28
28
  | Ethereum | `usdt-ethereum` `usdc-ethereum` | `1` | 6 位小数 |
29
29
  | BNB Chain | `usdt-bnb` `usdc-bnb` | `56` | 18 位小数 |
30
30
  | Polygon | `usdt-polygon` `usdc-polygon` | `137` | 6 位小数 |
31
+ | Arbitrum | `usdt-arbitrum` `usdc-arbitrum` | `42161` | 6 位小数 |
31
32
  | Base | `usdc-base` | `8453` | 6 位小数 |
32
- | Solana | `usdt-solana` `usdc-solana` | `900` | SPL;不支持原生 SOL |
33
+ | Solana | `usdt-solana` `usdc-solana` | `900` | SPL |
33
34
  | Stellar | `usdc-stellar` | `1500` | 必须带 `MEMO_TEXT` memo —— 会在充值信息块里给出 |
34
35
  | Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11;金额单位为聪 |
35
36
 
36
- 原生 gas 币(SOL、BNB、ETH、MATIC)以及链上 BTC 均不接受。
37
+ **原生币**,各自只在自己的链上:
38
+
39
+ | 币 | `--with` | 链 id | 备注 |
40
+ |---|---|---|---|
41
+ | Ethereum 上的 ETH | `eth-ethereum` | `1` | 18 位小数(wei);最低 $1 |
42
+ | Base 上的 ETH | `eth-base` | `8453` | 18 位小数(wei) |
43
+ | Arbitrum 上的 ETH | `eth-arbitrum` | `42161` | 18 位小数(wei) |
44
+ | BNB | `bnb-bnb` 或 `bnb` | `56` | 18 位小数 |
45
+ | SOL | `sol-solana` 或 `sol` | `900` | 9 位小数(lamports) |
46
+ | POL | `pol-polygon` 或 `pol` | `137` | 18 位小数 |
47
+
48
+ 只有当这张账单的报价列出某个原生币时才能用它(`quote` 会显示),且账单不超过 $2,000。原生币订单是**精确到账(exact-out)**,和闪电网络一样:按充值信息块里的币数一分不差地发送。币价只锁定到显示的时间(约 1 小时);过了这个时间就不要再发,让订单过期后重新下单。币数里在服务费之外还含汇率价差,钱包里还需要多留一点同一种币付网络费。从交易所提币时,到账金额必须是完整金额:确认提币手续费没有从中扣除。`--send` 也能付原生币,按精确金额做一笔普通转账。
49
+
50
+ 链上 BTC 和 Tron 不支持。
37
51
 
38
52
  ## 我需要什么钱包?
39
53
 
package/llms.txt CHANGED
@@ -3,7 +3,8 @@
3
3
  > When your agent needs to pay OpenRouter (or any Coinbase invoice) with the crypto you
4
4
  > already hold. Pays a Coinbase Payment Link (payments.coinbase.com/payment-links/pl_* or
5
5
  > /payment-sessions/paymentSession_*) with BTC over Lightning, USDT/USDC on Solana,
6
- > BNB Chain, Ethereum or Polygon, or USDC on Base or Stellar. No Coinbase account, public HTTP
6
+ > BNB Chain, Ethereum, Polygon or Arbitrum, USDC on Base or Stellar, or a native coin
7
+ > (ETH on Ethereum, Base or Arbitrum, BNB, SOL, POL). No Coinbase account, public HTTP
7
8
  > endpoints, no API key. Crypto payments to OpenRouter are never refundable.
8
9
  > The payer funds a one-time deposit address; a bridge and a funder wallet settle the
9
10
  > Coinbase link automatically. No discount: you pay the invoice amount, plus the
@@ -22,8 +23,10 @@ calls with every safety rule already enforced:
22
23
  npx @rozoai/checkout status <rozoPaymentId | coinbase-link>
23
24
 
24
25
  --with accepts usdt-solana, usdc-solana, usdt-bnb, usdc-bnb, usdt-ethereum,
25
- usdc-ethereum, usdt-polygon, usdc-polygon, usdc-base, usdc-stellar, btc-lightning
26
- (or raw: --chain 900 --token USDT).
26
+ usdc-ethereum, usdt-polygon, usdc-polygon, usdt-arbitrum, usdc-arbitrum, usdc-base,
27
+ usdc-stellar, btc-lightning, and the native coins eth-ethereum, eth-base,
28
+ eth-arbitrum, bnb-bnb (or bnb), sol-solana (or sol), pol-polygon (or pol)
29
+ (or raw: --chain 900 --token USDT, --chain 8453 --token ETH).
27
30
 
28
31
  Optional: --email <addr> stores a contact email with the order so ROZO can reach
29
32
  the user if the payment needs attention. Ask the user once if they are present;
@@ -95,11 +98,23 @@ copy-pastable block. Creating an order moves no money; an unfunded order expires
95
98
 
96
99
  ## Supported sources
97
100
 
98
- chainId "1" Ethereum (USDC, USDT) · "56" BNB Chain (USDC, USDT; 18-decimals) ·
99
- "137" Polygon (USDC, USDT) · "8453" Base (USDC) · "900" Solana (USDC, USDT) ·
100
- "1500" Stellar (USDC; deposit memo REQUIRED) · "lightning" (BTC; BOLT11 invoice,
101
- amounts in integer satoshis via source.amountUnit=="sats").
102
- Native SOL/ETH/BNB are NOT supported — stablecoins (or Lightning BTC) only.
101
+ chainId "1" Ethereum (USDC, USDT, native ETH) · "56" BNB Chain (USDC, USDT;
102
+ 18-decimals; native BNB) · "137" Polygon (USDC, USDT, native POL) · "42161" Arbitrum
103
+ (USDC, USDT, native ETH) · "8453" Base (USDC, native ETH) · "900" Solana (USDC, USDT,
104
+ native SOL) · "1500" Stellar (USDC; deposit memo REQUIRED) · "lightning" (BTC;
105
+ BOLT11 invoice, amounts in integer satoshis via source.amountUnit=="sats").
106
+ USDT is not accepted on Base or Stellar. On-chain BTC and Tron are NOT supported.
107
+ Native coins (tokenSymbol "ETH", "BNB", "SOL" or "POL" on the chains above; ETH, BNB
108
+ and POL have 18 decimals, SOL 9): offer one only when quote-invoice lists it in
109
+ supportedSources for that invoice ({"<chainId>": ["USDC", "ETH", ...]}). A native
110
+ order is exact-out like Lightning: source.amount is the exact coin amount to send,
111
+ and the price is locked only until quoteExpiresAt (returned by create-invoice and by
112
+ the payments GET; the order's own expiresAt is later). Never send after
113
+ quoteExpiresAt. The coin amount includes an FX spread on top of the service fee, and
114
+ the payer also needs some of the same coin for gas. Native orders are limited to
115
+ $2,000 per invoice (native ETH on Ethereum: $1 minimum; quote-invoice may report
116
+ per-coin minimums in nativeMinUsd). The CLI enforces all of this, and --send pays a
117
+ native coin as a plain transfer of the exact amount.
103
118
 
104
119
  WALLET: one wallet on one of these chains is enough — not one per chain. Any
105
120
  wallet, or an exchange withdrawal, can fund the deposit address; nothing
@@ -158,9 +173,12 @@ balance once with the coin you hold, then pay many small x402 calls from it.
158
173
  npx @rozoai/checkout x402 balance
159
174
 
160
175
  Payment leg (what the seller receives): USDC on Base (eip155:8453) only,
161
- scheme "exact". Solana payment leg is coming later. Topup leg: every --with coin above, plus native
162
- ETH (Ethereum, Base, Arbitrum), BNB and SOL in beta. Native coins never pay a
163
- seller directly.
176
+ scheme "exact". Solana payment leg is coming later. Topup leg: USDT on Solana,
177
+ BNB Chain, Ethereum, Polygon, Arbitrum; USDC on Solana, BNB Chain, Ethereum,
178
+ Polygon, Arbitrum, Base, Stellar. x402 balance top ups accept USDC and USDT only; any other coin
179
+ is answered with 400 X402_TOPUP_SOURCE_UNSUPPORTED. USDT only funds the balance;
180
+ sellers are paid in USDC. Holding a native coin or sats? Use them to top up
181
+ OpenRouter with ROZO Checkout (https://checkout.rozo.ai).
164
182
 
165
183
  Raw HTTP (Authorization: Bearer <agent key ak_...>):
166
184
  POST https://apiserver.mpprouter.dev/v1/x402/topup {"amount":"20","token":"USDT","chain":"900"}
@@ -177,10 +195,105 @@ x402 safety rules:
177
195
  - Refuse a payment above what the user approved; refuse a payTo on a
178
196
  compromised-wallet list.
179
197
  - 503 X402_RETRY, X402_PAYER_MODE_CHANGED or X402_LEDGER_UNAVAILABLE: retry
180
- with the same idempotencyKey. Any other 503 from /v1/x402 = "x402 payer not
181
- enabled" for this key. Nothing was charged; stop.
198
+ with the same idempotencyKey. Any other 503 from /v1/x402 means x402 is not
199
+ available for this key right now. Nothing new was charged; stop. Every server
200
+ code is listed below.
182
201
  - The agent key owns the balance. Store it 0600, never print or log it.
183
202
 
203
+ x402 server error codes (returned by https://apiserver.mpprouter.dev/v1/x402/*):
204
+ Every error body looks like
205
+ {"ok":false,"code":"X402_...","error":{"code":"X402_...","message":"..."}},
206
+ sometimes with extra top level fields (limitUsd, balanceUsd, ...).
207
+ These are separate from the codes the CLI raises on its own (X402_UNSUPPORTED,
208
+ X402_OVER_BUDGET, X402_BAD_CHALLENGE, X402_PAYMENT_REJECTED and others). The balance is
209
+ debited only by the ledger commit inside /sign, after signing; every error
210
+ raised before that commit charges nothing. If /sign answers
211
+ X402_LEDGER_UNAVAILABLE or X402_INTERNAL the commit may have landed: retry
212
+ with the same idempotencyKey, and a payment that did land comes back as the
213
+ stored signature (replay:true), never as a second charge.
214
+ The CLI reports every 503 except X402_RETRY, X402_PAYER_MODE_CHANGED and
215
+ X402_LEDGER_UNAVAILABLE as X402_PAYER_DISABLED, with the server code in
216
+ error.details.serverCode. On /sign it retries 429, 500, 502, 504 and those
217
+ three 503 codes itself, with the same idempotencyKey.
218
+
219
+ balance, topup and sign (keys does not read a key):
220
+ - 401 X402_KEY_INVALID: agent key missing, malformed or unknown. Send
221
+ "Authorization: Bearer ak_...". Do not mint a new key to get around it: the
222
+ balance belongs to the old key.
223
+ - 403 X402_KEY_SUSPENDED: the key is not active. Stop; email hi@rozo.ai.
224
+
225
+ Any route:
226
+ - 503 X402_PAYER_DISABLED: the payer is switched off. Stop, tell the user.
227
+ - 503 X402_PAYER_NOT_CONFIGURED: payer not set up on this deployment. Stop.
228
+ - 503 X402_LEDGER_UNAVAILABLE: ledger unreachable. Retry shortly with the same
229
+ idempotencyKey.
230
+ - 500 X402_INTERNAL: unexpected error. Retry with the same idempotencyKey a few
231
+ times, then stop and report it.
232
+ - 405 METHOD_NOT_ALLOWED: wrong HTTP method (keys/topup/sign are POST, balance is GET).
233
+
234
+ POST /v1/x402/keys:
235
+ - 429 X402_KEY_RATE_LIMITED: too many keys created from this IP this hour.
236
+ Reuse the key you have, or retry later.
237
+ - 503 X402_RETRY: key collision. Retry.
238
+
239
+ POST /v1/x402/topup (no deposit address is shown on any error, so nothing can
240
+ be sent to it; only pay an address from a 200 response):
241
+ - 400 X402_INVALID_REQUEST: body is not JSON, or amount is not a USD amount
242
+ with at most 2 decimals.
243
+ - 400 X402_TOPUP_AMOUNT_OUT_OF_RANGE: top up must be between $5 and $500.
244
+ - 400 X402_TOPUP_SOURCE_REQUIRED: say which coin you pay with: chain and
245
+ token. The response lists accepted chains.
246
+ - 400 X402_UNSUPPORTED_CHAIN: unknown chain. Use a CAIP-2 id or a name such as
247
+ solana, base, ethereum, bsc, polygon, arbitrum, stellar.
248
+ - 400 X402_TOPUP_SOURCE_UNSUPPORTED: that coin is not accepted for top ups.
249
+ Use USDC or USDT. May carry a "supported" list.
250
+ - 502 INTENTS_API_FAILED: the top up order could not be created. Retry later.
251
+ - 503 X402_TOPUP_MISCONFIGURED or X402_TOPUP_NOT_REGISTERED: the order was not
252
+ usable, the address was withheld. Retry later; email hi@rozo.ai if it repeats.
253
+ - 503 X402_PAYER_SHADOW, X402_TOPUP_NOT_CONFIGURED or X402_SIGNER_NOT_CONFIGURED:
254
+ top ups are closed right now. Stop.
255
+
256
+ POST /v1/x402/sign:
257
+ - 400 X402_INVALID_REQUEST: body is not JSON, or budget is not a positive USD amount.
258
+ - 400 X402_IDEMPOTENCY_KEY_REQUIRED: send idempotencyKey, 8 to 128 chars of
259
+ [A-Za-z0-9_.:-], one per 402 challenge.
260
+ - 400 X402_UNSUPPORTED_VERSION: only x402Version 2 is accepted.
261
+ - 400 X402_UNSUPPORTED_NETWORK, X402_UNSUPPORTED_SCHEME, X402_UNSUPPORTED_ASSET,
262
+ X402_INVALID_REQUIREMENT or X402_SIGN_UNSUPPORTED: the accepts entry is
263
+ malformed or asks for something not covered (only exact USDC is signed).
264
+ Do not retry the same entry; tell the user.
265
+ - 402 X402_BUDGET_EXCEEDED: the challenge asks more than your budget. Stop and
266
+ ask the user.
267
+ - 402 X402_PER_TX_LIMIT_EXCEEDED: above this key's single-payment limit
268
+ (limitUsd). Stop and ask the user.
269
+ - 402 X402_INSUFFICIENT_BALANCE: balance too low (balanceUsd). Top up, wait
270
+ for the credit, then pay again.
271
+ - 403 X402_PAYTO_NOT_ALLOWED: payTo is not on this key's allowlist. Stop.
272
+ - 403 X402_PAYTO_BLOCKED: this payTo is blocked. Stop, do not retry.
273
+ - 409 X402_IDEMPOTENCY_CONFLICT: this idempotencyKey was already used for a
274
+ different requirement. Nothing new was charged. Use a new key only for a new
275
+ 402 challenge.
276
+ - 410 X402_CREDENTIAL_REFUNDED: the stored signature expired unused and its
277
+ amount went back to the balance. Fetch a new 402 and sign it with a new key.
278
+ - 429 X402_DAILY_LIMIT_EXCEEDED: this key's daily limit would be exceeded
279
+ (limitUsd, spentTodayUsd). Wait for the daily
280
+ window to reset, or ask hi@rozo.ai for a higher limit.
281
+ - 429 X402_GLOBAL_DAILY_CAP_REACHED or X402_SIGNER_DAILY_CAP_REACHED: a
282
+ platform-wide daily cap was reached. Retry after 00:00 UTC.
283
+ - 429 X402_SIGNER_CAP_REACHED: the signing service refused this amount. Try a
284
+ smaller payment or later.
285
+ - 503 X402_RETRY or X402_PAYER_MODE_CHANGED: transient. Retry with the same
286
+ idempotencyKey.
287
+ - 503 X402_PAYER_SHADOW: the payer is not live for this key. A fresh request
288
+ was checked and recorded but not signed, and nothing was charged. With
289
+ "replay":true it refers to an earlier payment under this idempotencyKey,
290
+ which may have been charged: check /balance, never pay again with a new key.
291
+ Stop.
292
+ - 503 X402_SIGNER_NOT_CONFIGURED or X402_SIGNER_DISABLED: signing for this
293
+ network is off right now. Stop.
294
+ A 200 with "replay":true is the stored signature for an idempotencyKey that
295
+ was already paid; it is not a second charge.
296
+
184
297
  ## Safety rules (encode these, they prevent fund loss)
185
298
 
186
299
  - Before paying, require: status == "payment_unpaid" AND source.txHash == null AND
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@rozoai/checkout",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "type": "module",
5
- "description": "Pay OpenRouter, or any Coinbase invoice, with the crypto you already hold: USDT/USDC on Solana, BNB Chain, Ethereum or Polygon, USDC on Base or Stellar, or BTC over Lightning. No Coinbase account.",
5
+ "description": "Pay OpenRouter, or any Coinbase invoice, with the crypto you already hold: USDT/USDC on Solana, BNB Chain, Ethereum, Polygon or Arbitrum, USDC on Base or Stellar, BTC over Lightning, or native ETH, BNB, SOL or POL. No Coinbase account.",
6
6
  "license": "MIT",
7
7
  "author": "Rozo AI",
8
8
  "homepage": "https://github.com/RozoAI/rozo-checkout-skill#readme",
@@ -24,10 +24,15 @@
24
24
  "bnb-chain",
25
25
  "ethereum",
26
26
  "polygon",
27
+ "arbitrum",
27
28
  "base",
28
29
  "stellar",
29
30
  "lightning",
30
31
  "bitcoin",
32
+ "eth",
33
+ "bnb",
34
+ "sol",
35
+ "pol",
31
36
  "crypto-payments",
32
37
  "agent",
33
38
  "ai-agent",