@rozoai/checkout 0.1.0 → 0.1.2

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.
@@ -0,0 +1,348 @@
1
+ # rozo-checkout
2
+
3
+ [English](../README.md) | [简体中文](README.zh.md) | [日本語](README.ja.md) | **Español**
4
+
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
8
+ pago de Coinbase solo acepta USDC en Base; esto enruta la moneda que realmente
9
+ se posee a través de un puente, y una billetera fondeadora liquida la factura en
10
+ nombre del usuario. Sin cuenta, sin clave de API, sin navegador.
11
+
12
+ ```bash
13
+ npx @rozoai/checkout pay <coinbase-link>
14
+ ```
15
+
16
+ Primero pregunta con qué moneda se quiere pagar —al pegar la dirección de la
17
+ billetera en el prompt, marca cuáles se pueden pagar con el saldo disponible— y
18
+ luego imprime una dirección de depósito para pagar desde cualquier billetera
19
+ —**sin clave privada, sin variable de entorno, sin configuración**—. Después
20
+ espera hasta que la factura quede liquidada.
21
+
22
+ ¿Ya se sabe qué moneda usar? Se puede omitir la pregunta:
23
+
24
+ ```bash
25
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
26
+ ```
27
+
28
+ ## Monedas con las que se puede pagar
29
+
30
+ | Cadena | `--with` | Id de cadena | Notas |
31
+ |---|---|---|---|
32
+ | Ethereum | `usdt-ethereum` `usdc-ethereum` | `1` | 6 decimales |
33
+ | BNB Chain | `usdt-bnb` `usdc-bnb` | `56` | 18 decimales |
34
+ | Polygon | `usdt-polygon` `usdc-polygon` | `137` | 6 decimales |
35
+ | Base | `usdc-base` | `8453` | 6 decimales |
36
+ | Solana | `usdt-solana` `usdc-solana` | `900` | SPL; SOL nativo no admitido |
37
+ | Stellar | `usdc-stellar` | `1500` | memo obligatorio — se muestra en el bloque de depósito |
38
+ | Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11; importes en satoshis |
39
+
40
+ Las monedas de gas nativas (SOL, BNB, ETH, MATIC) y el BTC on-chain no se aceptan.
41
+
42
+ ## ¿Qué wallet necesito?
43
+
44
+ **Una wallet, en una cadena: no hace falta una por cada cadena.** Elige de la
45
+ tabla de arriba la moneda que ya tengas y paga desde donde ya esté.
46
+
47
+ - **Sirve cualquier wallet, y también un retiro desde un exchange.** La vía por
48
+ defecto solo imprime un bloque de depósito: envía exactamente ese `amount` de
49
+ ese `tokenSymbol`, en esa `chain`, a esa `receiverAddress`. Nada se conecta a
50
+ ningún sitio ni se aprueba en el navegador. En la práctica la gente usa
51
+ MetaMask o Rabby en las cadenas EVM, Phantom o Solflare en Solana, y una
52
+ wallet Lightning como Phoenix o Wallet of Satoshi para BTC.
53
+ - **Stellar es la que exige cuidado.** Sus depósitos se enrutan mediante una
54
+ dirección compartida más `receiverMemo`, así que aquello desde lo que envíes
55
+ — exchange o wallet — debe permitirte fijar un memo. Si lo omites, el pago se
56
+ pierde.
57
+ - **Lightning paga una factura, no una dirección.** Escanea o pega
58
+ `deposit.lnInvoice`; no hay ninguna dirección a la que enviar.
59
+ - **Solo `--send` necesita una clave privada**, leída de
60
+ `ROZO_CHECKOUT_EVM_KEY` o `ROZO_CHECKOUT_SOL_KEY`, y cubre únicamente las
61
+ cadenas EVM y Solana. Todo lo demás no usa claves.
62
+
63
+ ## Usarlo desde el agente
64
+
65
+ La carga útil es la misma en todas partes: el comando de una línea de arriba, o
66
+ apuntar al agente a [llms.txt](../llms.txt). **Pagar desde la propia billetera
67
+ nunca necesita una clave.** Solo la bandera opcional `--send` firma en local, y
68
+ solo esa bandera lee `ROZO_CHECKOUT_EVM_KEY` / `ROZO_CHECKOUT_SOL_KEY`. Los agentes y los scripts deben
69
+ pasar siempre `--with`: el selector solo aparece en una terminal y no hay moneda
70
+ por defecto de forma deliberada.
71
+
72
+ <details>
73
+ <summary><b>Claude Code</b> — instalar la habilidad, o pegar el comando de una línea</summary>
74
+
75
+ Este repositorio es una habilidad de Claude Code: incluye `SKILL.md` más los
76
+ ejecutables de `scripts/dist/`. Basta con clonarlo en el directorio de
77
+ habilidades y Claude Code lo detecta automáticamente.
78
+
79
+ ```bash
80
+ git clone https://github.com/RozoAI/rozo-checkout-skill ~/.claude/skills/rozo-checkout
81
+ ```
82
+
83
+ O saltarse la instalación y simplemente pedirle que ejecute:
84
+
85
+ ```
86
+ Paga este enlace de OpenRouter con USDT en Solana:
87
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
88
+ ```
89
+
90
+ Billetera: cualquier billetera, **sin clave**. Añadir `--send` solo si se quiere
91
+ que Claude firme desde una billetera caliente, lo cual necesita la clave del entorno.
92
+ </details>
93
+
94
+ <details>
95
+ <summary><b>Codex CLI</b> — AGENTS.md, o ejecutarlo directamente</summary>
96
+
97
+ Codex lee `AGENTS.md` desde la raíz del proyecto. Conviene añadir una
98
+ instrucción permanente para que sepa cómo pagar sin que haya que explicárselo
99
+ cada vez:
100
+
101
+ ```
102
+ Para pagar un enlace de pago de OpenRouter / Coinbase, ejecuta:
103
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
104
+ ```
105
+
106
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
107
+ </details>
108
+
109
+ <details>
110
+ <summary><b>OpenCode</b> — AGENTS.md, o ejecutarlo directamente</summary>
111
+
112
+ OpenCode también lee `AGENTS.md` desde la raíz del proyecto, así que el fragmento
113
+ de Codex de arriba funciona sin cambios. El camino más corto sigue siendo el
114
+ propio comando:
115
+
116
+ ```bash
117
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
118
+ ```
119
+
120
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
121
+ </details>
122
+
123
+ <details>
124
+ <summary><b>Cline</b> — .clinerules, o ejecutarlo directamente</summary>
125
+
126
+ Cline lee las instrucciones permanentes desde `.clinerules` en la raíz del proyecto:
127
+
128
+ ```
129
+ Para pagar un enlace de pago de OpenRouter / Coinbase, ejecuta:
130
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
131
+ ```
132
+
133
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
134
+ </details>
135
+
136
+ <details>
137
+ <summary><b>Cursor</b> — .cursor/rules, o ejecutarlo directamente</summary>
138
+
139
+ Añadir una regla de proyecto en `.cursor/rules/rozo-checkout.mdc`:
140
+
141
+ ```
142
+ Para pagar un enlace de pago de OpenRouter / Coinbase, ejecuta:
143
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
144
+ ```
145
+
146
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
147
+ </details>
148
+
149
+ <details>
150
+ <summary><b>Hermes Agent</b> — ejecutar el comando de una línea en una sesión</summary>
151
+
152
+ Hermes Agent (Nous Research) tiene acceso a la shell y su propio sistema de
153
+ habilidades. Se inicia con `hermes` y se le pide:
154
+
155
+ ```
156
+ Descarga https://checkout.rozo.ai/llms.txt y luego paga este enlace de OpenRouter:
157
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
158
+ ```
159
+
160
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
161
+ </details>
162
+
163
+ <details>
164
+ <summary><b>OpenClaw</b> — openclaw agent exec</summary>
165
+
166
+ El punto de entrada headless de OpenClaw ejecuta una tarea puntual, lo que encaja
167
+ con un pago que se dispara desde un script o desde un canal de chat:
168
+
169
+ ```bash
170
+ openclaw agent exec "Pay this OpenRouter link with USDT on Solana by running: npx @rozoai/checkout pay <coinbase-link> --with usdt-solana"
171
+ ```
172
+
173
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
174
+ </details>
175
+
176
+ <details>
177
+ <summary><b>Pi</b> — ejecutar el comando de una línea en una sesión</summary>
178
+
179
+ Pi es un agente de terminal BYOK cuyas herramientas integradas incluyen `bash`,
180
+ así que puede ejecutar el comando directamente. Se inicia con `pi` y se le pide:
181
+
182
+ ```
183
+ Paga este enlace de OpenRouter con USDT en Solana ejecutando:
184
+ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
185
+ ```
186
+
187
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
188
+ </details>
189
+
190
+ <details>
191
+ <summary><b>Terminal — sin ningún agente</b> — ejecutar los scripts paso a paso</summary>
192
+
193
+ Conducir cada paso a mano. Los paquetes son autocontenidos; no hay nada que
194
+ instalar más allá de Node 18+.
195
+
196
+ ```bash
197
+ git clone https://github.com/RozoAI/rozo-checkout-skill && cd rozo-checkout-skill
198
+ LINK="https://payments.coinbase.com/payment-links/pl_01YOURLINKID"
199
+
200
+ # Cotización de solo lectura, no cuesta nada
201
+ node scripts/dist/quote.js --url "$LINK"
202
+
203
+ # Crear la orden. Aquí se RETIENE la dirección de depósito completa; primero se
204
+ # obtiene un resumen enmascarado para revisar.
205
+ node scripts/dist/create-order.js --url "$LINK" --chain 900 --token USDT
206
+
207
+ # Una vez decidido el pago, volver a ejecutar con --confirm para liberarla
208
+ node scripts/dist/create-order.js --url "$LINK" --chain 900 --token USDT --confirm
209
+
210
+ # Pagar el bloque de depósito desde cualquier billetera y observar la liquidación
211
+ node scripts/dist/status.js --rozo-payment-id <uuid> --watch
212
+ ```
213
+
214
+ Cada script imprime exactamente un objeto JSON en stdout. Código de salida `0`
215
+ éxito, `1` rechazado/fallido (leer `error.code`), `2` uso incorrecto, `3` enviado
216
+ pero sin confirmar. Recorrido completo: [QUICKSTART](QUICKSTART.es.md).
217
+
218
+ Billetera: cualquier billetera, **sin clave**. Para el envío desde billetera
219
+ caliente, ver `send-evm.js` / `send-sol.js`, que leen `ROZO_CHECKOUT_EVM_KEY` /
220
+ `ROZO_CHECKOUT_SOL_KEY`.
221
+ </details>
222
+
223
+ <details>
224
+ <summary><b>Cualquier otro agente</b> — apuntarlo a llms.txt</summary>
225
+
226
+ Cualquier agente capaz de descargar una URL y ejecutar un comando puede hacer esto:
227
+
228
+ ```
229
+ Descarga https://checkout.rozo.ai/llms.txt a tu contexto y úsalo
230
+ para pagar este enlace de OpenRouter: <coinbase-link>
231
+ ```
232
+
233
+ Si el agente no tiene shell pero puede hacer peticiones HTTP, puede manejar
234
+ directamente los cuatro endpoints públicos — ver [cómo funciona](how-it-works.md).
235
+
236
+ Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
237
+ </details>
238
+
239
+ <details>
240
+ <summary><b>Configurar una billetera local para <code>--send</code></b> — plantilla .env y pasos de exportación por billetera</summary>
241
+
242
+ **Nada de esto hace falta para la ruta por defecto.** Pagar desde la propia
243
+ billetera no necesita clave ni configuración, y funciona con billeteras que aquí
244
+ nunca se pueden usar, incluidas las de hardware y las cuentas de exchange.
245
+
246
+ Un `.env` en el directorio desde el que se ejecuta, con todas las variables que
247
+ esta herramienta lee:
248
+
249
+ ```bash
250
+ # Nada de esto hace falta para pagar desde la propia billetera. Solo se lee
251
+ # cuando se usa --send.
252
+
253
+ # Clave secreta de Solana: una cadena base58 o un arreglo JSON de bytes. Solo
254
+ # hace falta si NO se tiene ~/.config/solana/id.json, que se detecta solo.
255
+ ROZO_CHECKOUT_SOL_KEY=REPLACE_ME_base58_secret_key
256
+
257
+ # Clave privada EVM en bruto: 0x seguido de 64 caracteres hex. La opción menos
258
+ # segura: es preferible el keystore de abajo.
259
+ ROZO_CHECKOUT_EVM_KEY=0x0000000000000000000000000000000000000000000000000000000000000000
260
+
261
+ # Keystore V3 cifrado para EVM: ruta al archivo. Preferible a la clave en bruto.
262
+ ROZO_CHECKOUT_EVM_KEYSTORE=/replace/me/keystores/my-hot-wallet
263
+
264
+ # Frase de contraseña de ese keystore. Solo para ejecuciones desatendidas; en
265
+ # una terminal se solicita y no se guarda nada.
266
+ ROZO_CHECKOUT_KEYSTORE_PASSPHRASE=REPLACE_ME_not_a_real_passphrase
267
+
268
+ # Sobrescrituras de RPC opcionales, una por id de cadena. 8453 = Base,
269
+ # 900 = Solana.
270
+ ROZO_CHECKOUT_RPC_8453=https://mainnet.base.org
271
+ ROZO_CHECKOUT_RPC_900=https://api.mainnet-beta.solana.com
272
+ ```
273
+
274
+ Después, restringir permisos y mantenerlo fuera de git:
275
+
276
+ ```bash
277
+ chmod 600 .env
278
+ echo '.env' >> .gitignore
279
+ ```
280
+
281
+ **Solana**
282
+
283
+ - `solana-keygen new` escribe `~/.config/solana/id.json`. No hay nada que
284
+ configurar: se encuentra automáticamente. Es la ruta recomendada.
285
+ - **Phantom** → Settings → Export Private Key da una cadena **base58**. Va en
286
+ `ROZO_CHECKOUT_SOL_KEY`.
287
+ - **Solflare** exporta una cadena base58 en las versiones actuales y un arreglo
288
+ JSON de bytes en las antiguas. Ambos se aceptan tal cual.
289
+
290
+ **EVM**
291
+
292
+ - **MetaMask** y **Rabby** exportan la clave privada como 64 caracteres hex.
293
+ Pegarla tal cual en `ROZO_CHECKOUT_EVM_KEY`; el prefijo `0x` es opcional.
294
+ - **Keystore cifrado (más seguro).** Las billeteras de navegador exportan claves
295
+ en bruto, no keystores. Para convertir una en un keystore cifrado, usar
296
+ Foundry: `cast wallet import my-hot-wallet --interactive` pide la clave y
297
+ escribe un keystore V3 cifrado en `~/.foundry/keystores/my-hot-wallet`
298
+ (`--keystore-dir` cambia la ubicación). Apuntar `ROZO_CHECKOUT_EVM_KEYSTORE` a
299
+ ese archivo. `geth account import` también genera un keystore V3.
300
+
301
+ **Billeteras que no se pueden usar con `--send`:** billeteras de hardware
302
+ (Ledger, Trezor), billeteras móviles solo con WalletConnect y cuentas de
303
+ exchange. Por diseño, ninguna entrega una clave de firma. Esos casos usan la
304
+ ruta por defecto sin clave, que funciona con todas ellas.
305
+
306
+ </details>
307
+
308
+ ## Tres reglas que conviene conocer
309
+
310
+ - **La dirección de depósito es de un solo uso.** Nunca reutilizar una de una
311
+ orden anterior, de una respuesta cacheada o de una captura de pantalla.
312
+ - **Enviar exactamente el importe mostrado.** Normalmente es mayor que la
313
+ factura: incluye las comisiones del puente y de la red.
314
+ - **Nunca pagar dos veces una orden ya fondeada.** Si ya se ha detectado un
315
+ pago, detenerse y pedir a una persona que lo concilie; un segundo pago a una
316
+ dirección de un solo uso no tiene garantía de ser acreditado.
317
+
318
+ La lista completa de lo que esta herramienta se niega a hacer, y por qué, está en
319
+ [docs/safety.md](safety.md).
320
+
321
+ ## Enlaces
322
+
323
+ - [Inicio rápido](QUICKSTART.es.md) — los cinco comandos, con la salida esperada
324
+ - [Cómo funciona](how-it-works.md) — el flujo, los endpoints, los identificadores
325
+ - [Diseño de seguridad](safety.md) — cada salvaguarda, en detalle
326
+ - [SKILL.md](../SKILL.md) — instrucciones dirigidas al agente · [llms.txt](../llms.txt) — resumen en un solo archivo
327
+ - [checkout.rozo.ai/agent](https://checkout.rozo.ai/agent.html) — lo mismo, en la web
328
+ - [Issues](https://github.com/RozoAI/rozo-checkout-skill/issues) — errores y solicitudes
329
+
330
+ ## Registro de cambios
331
+
332
+ - **0.1.2** — El Modo B ya no necesita una clave privada en bruto en una variable
333
+ de entorno. En Solana usa el `~/.config/solana/id.json` que `solana-keygen` ya
334
+ creó; en EVM un keystore V3 cifrado cuya frase de contraseña se solicita.
335
+ `--keyfile` indica cualquiera de los dos explícitamente, y los ajustes pueden
336
+ venir de un `.env` incluido en `.gitignore`. Las claves en bruto del entorno
337
+ siguen funcionando para automatización desatendida. Los archivos de claves y
338
+ el `.env` deben ser `chmod 600` y no estar bajo seguimiento de git.
339
+ - **0.1.1** — un solo límite de gasto en lugar de dos: un pago individual no
340
+ puede superar los $1,100 (dimensionado para una compra de crédito de $1,000
341
+ más su comisión del 5%); se eliminan el tope acumulado por sesión y la bandera
342
+ `--yes-large`. La documentación deja explícito que pagar desde la propia
343
+ billetera no necesita clave ni configuración.
344
+ - **0.1.0** — primera versión: `npx @rozoai/checkout`.
345
+
346
+ ## Licencia
347
+
348
+ MIT.