1.0.9 โ€ข Published 5 months ago

payto-rl v1.0.9

Weekly downloads
-
License
CORE
Repository
github
Last release
5 months ago

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

PropertyTypeDescription
accountAliasstring \| nullEmail address for UPI/PIX payments (case-insensitive)
accountNumbernumber \| nullAccount number (7-14 digits) for ACH payments
addressstring \| nullPayment address
amountstring \| nullPayment amount with optional currency prefix
assetstring \| nullAsset type or contract address
barcode'qr' \| 'pdf417' \| 'aztec' \| 'code128' \| nullBarcode format
bicstring \| nullBank Identifier Code (8 or 11 characters, case-insensitive)
colorBackgroundstring \| nullBackground color in 6-character hex format
colorForegroundstring \| nullForeground color in 6-character hex format
currency[string \| null, string \| null]Currency codes array asset, fiat
deadlinenumber \| nullPayment deadline (Unix timestamp)
donateboolean \| nullDonation flag
fiatstring \| nullFiat currency code (case-insensitive)
hashstringURL hash component
hoststringComplete host (hostname:port)
hostnamestringHost without port (case-insensitive)
hrefstringComplete URL string
ibanstring \| nullInternational Bank Account Number (case-insensitive)
itemstring \| nullItem description (max 40 chars)
locationstring \| nullLocation data (format depends on void type)
messagestring \| nullPayment message
networkstringNetwork identifier (case-insensitive)
organizationstring \| nullOrganization name (max 25 chars)
originstring \| nullURL origin
passwordstringURL password component
pathnamestringURL path component
portstringURL port component
protocolstringURL protocol (always 'payto:')
receiverNamestring \| nullReceiver's name
recurringstring \| nullRecurring payment details
routingNumbernumber \| nullBank routing number (9 digits)
rtlboolean \| nullright-to-left layout
searchstringURL search component
searchParamsURLSearchParamsURL search parameters
split[string, string, boolean] \| nullPayment split information
swapstring \| nullSwap transaction details
usernamestringURL username component
valuenumber \| nullNumeric amount value (extracted from both simple and token:amount formats)
voidstring \| nullVoid path type (e.g., 'geo', 'plus')

Methods

MethodReturn TypeDescription
toString()stringReturns the complete payto URL string
toJSON()stringReturns a JSON string representation
toJSONObject()PaytoJSONReturns 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

1.0.9

5 months ago

1.0.8

5 months ago

1.0.7

5 months ago

1.0.6

5 months ago

1.0.5

5 months ago

1.0.4

5 months ago

1.0.3

5 months ago

1.0.1

11 months ago

1.0.0

11 months ago