Introducción
periplo es una librería cliente en TypeScript para pagos x402 en Stellar. Está construida alrededor de upto: en vez de pagar un precio fijo, quien compra firma un techo de gasto una sola vez, y un facilitador liquida después solo el monto realmente usado. El techo nunca cambia; lo único que cambia es el uso real.
techo firmado: [████████████████████████████████] 0.10 USDC
usado de verdad: [████████░░░░░░░░░░░░░░░░░░░░░░░░] 0.05 USDC liquidado, 0.05 USDC devuelto
Esa es la forma real de la primera liquidación upto en stellar:testnet: quien compró firmó un techo de 0.10 USDC, quien vendió midió 0.05 USDC de uso real, y el contrato UptoSettlement liquidó 0.05 USDC al vendedor y devolvió los otros 0.05 USDC al comprador en la misma transacción. Puedes comprobarlo tú en Stellar Expert, o verlo en vivo en la página del demo.
Qué te da periplo
- Lado comprador: firmar un techo
upto(createUptoStellarPayer) o pagar un precio fijoexact(createExactStellarPayer), y luego pedir un recurso pagado con reintento incluido (payAndFetch,discoverPayAndFetch). - Lado vendedor: declarar los metadatos de descubrimiento de un recurso pagado (
definePaidResource), anunciar un techoupto(buildUptoRequirements), y liquidar el uso real una vez que se conoce (settleUptoUsage).
Ningún lado reimplementa la verificación ni la liquidación de pagos: cada llamada pasa por HTTPFacilitatorClient, el mismo cliente publicado de @x402/core que entiende cualquier facilitador x402.
Qué funciona hoy, con honestidad
exactestá vivo en el facilitador público enperiplo-testnet.fly.dev(stellar:testnet), usado en todo el demo completo y en la evidencia de conformidad.uptoliquida contra un contrato SorobanUptoSettlementya desplegado, pero necesita un facilitador configurado con la dirección de ese contrato. El propioGET /supporteddel facilitador público hoy no anunciaupto, soloexact; compruébalo tú mismo antes de asumir lo contrario. Para liquidar de extremo a extremo hace falta correr tu propio facilitador (auto-facilitación) o usar uno que sí soporteupto.- Todo aquí es solo
stellar:testnet. Periplo no opera en mainnet todavía, ycreateUptoStellarPayerrechaza conUptoMainnetNotSupportedErrorcualquier otra red, incluyendostellar:pubnet.
Requisitos
Node.js 22 o más nuevo (el campo engines.node del paquete). Ninguna otra dependencia de entorno además de lo que instala npm.
Instalación
npm i periplo
Verificado desde una carpeta limpia fuera de este repositorio: npm install periplo, luego npm install --save-dev typescript @types/node, se resuelve e instala sin errores, y npx tsc tipa sin errores un archivo que importa de periplo, siempre que compilerOptions tenga "types": ["node"] (los propios tipos del paquete referencian Buffer, a través de @x402/core).
Requisitos
- Node.js 22 o más nuevo. Declarado en el propio campo
engines.nodedel paquete; npm avisa con una versión de Node más vieja. @types/node, como dependencia de desarrollo, si usas TypeScript. Sin ella,tscfalla conCannot find name 'Buffer'dentro de las propias declaraciones de tipos de@x402/core, por las queperiploreexporta.- Red: todo en este paquete que habla con Stellar apunta a
stellar:testnet. No hay soporte de mainnet; ver Introducción.
Verificar la instalación
Esto comprueba que los tipos de error del paquete funcionan de verdad, sin necesitar red ni credenciales:
import { createUptoStellarPayer, UptoMainnetNotSupportedError } from "periplo";
try {
createUptoStellarPayer("S" + "A".repeat(55), "stellar:pubnet", {
facilitatorBaseUrl: "https://periplo-testnet.fly.dev",
maxSpendPerAuthorization: 1_000_000n,
});
} catch (error) {
console.log(error instanceof UptoMainnetNotSupportedError, (error as Error).message);
}
Salida real, de ese script exacto, corrido contra el paquete instalado desde su tarball publicado:
true upto is only supported on stellar:testnet today; stellar:pubnet (including any pubnet/mainnet network) is not yet supported.
Eso confirma dos cosas a la vez: el paquete se instaló y sus tipos resuelven, y upto de verdad rechaza cualquier red que no sea stellar:testnet, en vez de hacer silenciosamente lo incorrecto.