npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

payto-rl

v1.0.10

Published

PayTo Resource Locator

Downloads

79

Readme

Payto-RL

payto-rl is a TypeScript library for handling Payto Resource Locators (PRLs). This library is based on the URL API and provides additional functionality for managing PRLs.

npm License: CORE Bundle Size TypeScript GitHub Sponsors

Features

  • 🐥 Small: Bundle Size gzipped, distributed as minified ES modules.
  • 📜 Standardized: Based on the URL Web API.
  • 🏗️ Simple: Easy to implement.
  • 🗂 Typed: Ships with types included.
  • 🧪 Tested: Robust test coverage.
  • 🌲 Tree Shaking: Zero dependencies, no side effects.

Installation

Install the payto-rl package using your package manager:

npm i payto-rl
pnpm add payto-rl
yarn add payto-rl

Usage

Here's an example of how to use the payto-rl package:

import Payto from 'payto-rl';

// Basic payment URL
const paytoString = 'payto://xcb/cb7147879011ea207df5b35a24ca6f0859dcfb145999?amount=ctn:10.01&fiat=eur';
const payto = new Payto(paytoString);

// Standard payment properties
console.log(payto.address);  // 'cb7147879011ea207df5b35a24ca6f0859dcfb145999'
console.log(payto.amount);   // 'ctn:10.01'
console.log(payto.value);    // 10.01
console.log(payto.network);  // 'xcb'
console.log(payto.currency); // ['ctn', 'eur']

// Update payment amount
payto.value = 20.02;
console.log(payto.amount);   // 'ctn:20.02'
console.log(payto.fiat);     // 'eur'

// Color customization
payto.colorBackground = 'ff0000';  // Red background (6-character hex)
payto.colorForeground = '000000';  // Black foreground
console.log(payto.colorBackground); // 'ff0000'

// ACH payment examples
const achPayto1 = new Payto('payto://ach/123456789/1234567'); // With routing number
console.log(achPayto1.routingNumber); // 123456789
console.log(achPayto1.accountNumber); // 1234567

const achPayto2 = new Payto('payto://ach/1234567'); // Account number only
console.log(achPayto2.accountNumber); // 1234567

// UPI/PIX payment examples (case-insensitive email)
const upiPayto = new Payto('payto://upi/USER@example.com');
console.log(upiPayto.accountAlias); // 'user@example.com'

const pixPayto = new Payto('payto://pix/user@EXAMPLE.com');
console.log(pixPayto.accountAlias); // 'user@example.com'

// Geo location example
const geoPayto = new Payto('payto://void/geo');
geoPayto.location = '51.5074,0.1278';  // Valid coordinates
console.log(geoPayto.void);     // 'geo'
console.log(geoPayto.location); // '51.5074,0.1278'

// Plus code example
const plusPayto = new Payto('payto://void/plus');
plusPayto.location = '8FVC9G8V+R9';  // Valid plus code
console.log(plusPayto.void);     // 'plus'
console.log(plusPayto.location); // '8FVC9G8V+R9'

// Bank details example (case-insensitive BIC)
const bankPayto = new Payto('payto://bic/deutdeff500');
console.log(bankPayto.bic);           // 'DEUTDEFF500'
bankPayto.routingNumber = 123456789;  // Valid 9-digit routing number
console.log(bankPayto.routingNumber); // 123456789

// Value handling examples
const numericPayto = new Payto('payto://example/address?amount=10.5');
console.log(numericPayto.value);  // 10.5
console.log(numericPayto.amount); // '10.5'

const tokenPayto = new Payto('payto://example/address?amount=token:10.5');
console.log(tokenPayto.value);    // 10.5
console.log(tokenPayto.amount);   // 'token:10.5'
console.log(tokenPayto.asset);    // 'token'

// Convert to JSON object
const jsonObj = payto.toJSONObject();
console.log(jsonObj.colorForeground); // Access typed properties
console.log(jsonObj['custom-field']); // Access custom properties

API Reference

Constructor

new Payto(paytoString: string)

Creates a new Payto instance from a payto URL string.

Properties

| Property | Type | Description | |----------|------|-------------| | accountAlias | string \| null | Email address for UPI/PIX payments (case-insensitive) | | accountNumber | number \| null | Account number (7-14 digits) for ACH payments | | address | string \| null | Payment address | | amount | string \| null | Payment amount with optional currency prefix | | asset | string \| null | Asset type or contract address | | barcode | 'qr' \| 'pdf417' \| 'aztec' \| 'code128' \| null | Barcode format | | bic | string \| null | Bank Identifier Code (8 or 11 characters, case-insensitive) | | colorBackground | string \| null | Background color in 6-character hex format | | colorForeground | string \| null | Foreground color in 6-character hex format | | currency | [string \| null, string \| null] | Currency codes array [asset, fiat] | | deadline | number \| null | Payment deadline (Unix timestamp or positive integer) | | donate | boolean \| null | Donation flag | | fiat | string \| null | Fiat currency code (case-insensitive) | | hash | string | URL hash component | | host | string | Complete host (hostname:port) | | hostname | string | Host without port (case-insensitive) | | href | string | Complete URL string | | iban | string \| null | International Bank Account Number (case-insensitive) | | item | string \| null | Item description (max 40 chars) | | location | string \| null | Location data (format depends on void type) | | message | string \| null | Payment message | | network | string | Network identifier (case-insensitive) | | organization | string \| null | Organization name (max 25 chars) | | origin | string \| null | URL origin | | password | string | URL password component | | pathname | string | URL path component | | port | string | URL port component | | protocol | string | URL protocol (always 'payto:') | | receiverName | string \| null | Receiver's name | | recurring | string \| null | Recurring payment details | | routingNumber | number \| null | Bank routing number (9 digits) | | rtl | boolean \| null | right-to-left layout | | search | string | URL search component | | searchParams | URLSearchParams | URL search parameters | | split | [string, string, boolean] \| null | Payment split information | | swap | string \| null | Swap transaction details | | username | string | URL username component | | value | number \| null | Numeric amount value (extracted from both simple and token:amount formats) | | void | string \| null | Void path type (e.g., 'geo', 'plus') |

Methods

| Method | Return Type | Description | |--------|-------------|-------------| | toString() | string | Returns the complete payto URL string | | toJSON() | string | Returns a JSON string representation | | toJSONObject() | PaytoJSON | Returns a typed object with all properties and custom fields |

Type Safety

The library includes TypeScript type definitions and runtime validation for:

  • Bank Identifier Codes (BIC) - 8 or 11 characters, case-insensitive
  • Routing numbers (9 digits)
  • Account numbers (7-14 digits)
  • Email addresses (for UPI/PIX, case-insensitive)
  • Geographic coordinates
  • Plus codes
  • Unix timestamps
  • Barcode formats
  • IBAN format (case-insensitive)
  • Color formats (6-character hex)

Payment System Support

IBAN

Supports two formats (case-insensitive):

  • payto://iban/iban (without BIC)
  • payto://iban/bic/iban (with BIC)

ACH Payments

Supports two formats:

  • payto://ach/routing/account (with routing number)
  • payto://ach/account (account number only)

UPI/PIX Payments

Email-based payment identifiers (case-insensitive):

  • payto://upi/email@example.com
  • payto://pix/email@example.com

License

This project is licensed under the CORE License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

Acknowledgments

  • Based on the URL Web API
  • Implements RFC 8905 - The 'payto' URI Scheme

Funding

If you find this project useful, please consider supporting it:

List of sponsors: GitHub Sponsors