1.0.9 โ€ข Published 10 months ago

payto-rl v1.0.9

Weekly downloads
-
License
CORE
Repository
github
Last release
10 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

10 months ago

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.1

1 year ago

1.0.0

1 year ago