bolt12-decoder
Advanced tools
Comparing version 0.0.9 to 1.0.0
{ | ||
"name": "bolt12-decoder", | ||
"version": "0.0.9", | ||
"version": "1.0.0", | ||
"description": "Decode BOLT12 Offers", | ||
"main": "src/index.js", | ||
"module": "src/index.js", | ||
"type": "module", | ||
"types": "@types/index.d.ts", | ||
"main": "./dist/index.js", | ||
"module": "./dist/index.js", | ||
"types": "./dist/index.d.ts", | ||
"files": [ | ||
"src", | ||
"@types" | ||
"dist" | ||
], | ||
"scripts": { | ||
"gentypes": "tsc -p ./tsconfig.jsonc" | ||
"build": "bun build ./src/index.ts --outdir ./dist --target browser --format esm --minify", | ||
"build:types": "tsc --emitDeclarationOnly --declaration --outDir dist --noEmit false", | ||
"build:all": "bun run build && bun run build:types", | ||
"clean": "rm -rf dist", | ||
"prepublishOnly": "bun run clean && bun run build:all" | ||
}, | ||
"author": "Aaron Barnard", | ||
"license": "MIT", | ||
"repository": "github:aaronbarnardsound/bolt12-decoder", | ||
"devDependencies": { | ||
"eslint": "^8.16.0", | ||
"eslint-config-prettier": "^8.3.0", | ||
"prettier": "^2.6.2", | ||
"typescript": "^5.0.2" | ||
"@types/bun": "latest" | ||
}, | ||
"peerDependencies": { | ||
"typescript": "^5.0.0" | ||
}, | ||
"dependencies": { | ||
"@noble/hashes": "^1.2.0", | ||
"@noble/hashes": "^1.5.0", | ||
"bech32": "^2.0.0", | ||
"buffer": "^6.0.3" | ||
} | ||
} |
# BOLT12 Decoder | ||
Decode BOLT12 Offers, Invoice Requests and invoices. | ||
Decode BOLT12 Offers, Invoice Requests and Invoices. | ||
The goal is to match the output of the CoreLN [`decode` RPC response](https://docs.corelightning.org/reference/lightning-decode). | ||
Code is mostly grabbed from [Rusty's BOLT12 repo](https://github.com/rustyrussell/bolt12/tree/master/javascript) with some changes and fixes. | ||
## Install | ||
`yarn add bolt12-decoder` | ||
`npm i bolt12-decoder` | ||
`yarn add bolt12-decoder` OR `npm i bolt12-decoder` OR `bun add bolt12-decoder` | ||
@@ -17,25 +12,77 @@ ## Usage | ||
```javascript | ||
import decodeBolt12 from 'bolt12-decoder' | ||
import BOLT12Decoder from 'bolt12-decoder' | ||
const bolt12 = | ||
const offer = | ||
'lno1qgsqvgnwgcg35z6ee2h3yczraddm72xrfua9uve2rlrm9deu7xyfzrc2q42xjurnyyfqys2zzcssx06thlxk00g0epvynxff5vj46p3en8hz8ax9uy4ckyyfuyet8eqg' | ||
const decoded = decodeBolt12(bolt12) | ||
const decodedOffer = BOLT12Decoder.decode(offer) | ||
console.log(JSON.stringify(decodedOffer, null, 2)) | ||
console.log(decoded) | ||
// { | ||
// "id": "45880e501c65e9060d33128d2de1d23ff52ae768b2bcb62bef262d90b741b8cd", | ||
// "type": "offer", | ||
// "chains": [ | ||
// "06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f" | ||
// ], | ||
// "description": "Tips!", | ||
// "issuer": "AB", | ||
// "issuerId": "033f4bbfcd67bd0fc858499929a3255d063999ee23f4c5e12b8b1089e132b3e408" | ||
// } | ||
const invoice = | ||
'lni1qqgqp9et744ne2r7zg3kq0vz860xgyxvqwryaup9lh50kkranzgcdnn2fgvx390wgj5jd07rwr3vxeje0glc7qsp2dxt6avc2avfxg2avl58psv7xflwzhfmv2gtm9wytkn5c7uusvpq9qr8h0nh66qpv7xa9hyguuc3ar3y42qlxsxcy0genwt8d7tsamvaqqeec63yjlkyyd05gkfzrwwvaxl8y9jjxemwsqrnc2j6xdjrg0yzj7k5x2pwvyga3heejhra24a0wushp6rfqq3jdf2glnwaydeml333v4xrap92ek3q9qgm7370exxs45f68p42sqqpqrslyuarpkn5r78nquzma65rrs6jqvqcdgzcyypdf0d2vqmqu02ruex9mskrzmr5d3rrzygttq425w89c3z3arqh8f9ql5qe5quxfmcztl0gldv8mxy3sm8x5jscdz27u39fy6luxu8zcdn9j73l3uppfjclju37sq4pfcne5gw9l9vydpsnfwlnkc0f2ncu786mxzpss0szqfhylpxyl0pjvnwheheful2mjtu0zvvnfwmrkzm7e5flnh5dmpmxzqz998um6nckle0n2sse3lad2cm2m87wqssjn8rtrstgw7fr4cq7jcss3aspnmgg2sua776240454kl9f5sv9t3cfe58xur7mch6q9rz6u4sdffra2cz7nwvw2xcmty0eut4dayy03n6guksvrvtt237tl6264ks8yyfhqjspn9uj9zg4wrhpsvrw56skaqcfd3ul6d6tlpw3qrz5jnuz609ee7czc6n629rm5ccncackrspca3mpzk4phrjwcc9hukuxck2u93wkpmp0hx8rn2c7pd65hsl8hwkzqemkx7p2g0zkx92gzvyg5cfpktvm42g57d6spjy7clkwtrtz72pmm4a990phfa3exzldwsydqxpq3tepwk5v9474zmmd98ttyyzx058t2sf5dvpn73hlvdhnycv55t4lsv6a9080a83dl9s7mf02ukt48nhche6he45j9npx87jk7eyhzxsrjpzz0t5e2n206an9ma59uhatgsuqqqq86qqqqqxgq9zqqqqqqqqqqp7sqqqqqqqqqcdgqqqpfqyvm5xhjdxqy72sg8wkseztv2dpeudmcx0ahz6ezxx86thwrzvjfq400rnhh7vmcrs6k4qxqvx5zhqxqsqqzczzq3jdf2glnwaydeml333v4xrap92ek3q9qgm7370exxs45f68p42srcyql379vw777n9rmj66ze9qmq8agvuz9fdg6nnu5wcdn6ppvrh3rjcftld8rtakadngfdalgq9czau46yfa07pqpeffqlx8qaruzv7w5qs' | ||
const decodedInvoice = BOLT12Decoder.decode(invoice) | ||
console.log(JSON.stringify(decodedInvoice, null, 2)) | ||
// { | ||
// offer_chains: ['06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f'], | ||
// offer_description: 'Tips!', | ||
// offer_id: '45880e501c65e9060d33128d2de1d23ff52ae768b2bcb62bef262d90b741b8cd', | ||
// offer_issuer: 'AB', | ||
// offer_node_id: '033f4bbfcd67bd0fc858499929a3255d063999ee23f4c5e12b8b1089e132b3e408', | ||
// type: 'bolt12 offer', | ||
// valid: true | ||
// "id": "4f80127354452142ca241c0964b65632d4f6209e9376f1d968e372ef0d1b6dfe", | ||
// "type": "invoice", | ||
// "paths": [ | ||
// { | ||
// "firstNodeId": "03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f", | ||
// "firstPathKey": "0214cb1f9723e802a14e279a21c5f9584686134bbf3b61e954f1cf1f5b3083083e", | ||
// "numHops": 2, | ||
// "path": [ | ||
// { | ||
// "blindedNodeId": "026e4f84c4fbc3264dd7cdf29e7d5b92f8f131934bb63b0b7ecd13f9de8dd87661", | ||
// "encryptedRecipientData": "29f9bd4f16fe5f3542198ffad5636ad9fce0421299c6b1c16877923ae01e962108f6019ed085439df7b4aabeb4adbe54d20c2ae384e6873707ede2fa01462d72b06a523eab" | ||
// }, | ||
// { | ||
// "blindedNodeId": "02f4dcc728d8dac8fcf1756f4847c67a472d060d8b5aa3e5ff4ad56d039089b825", | ||
// "encryptedRecipientData": "bc91448ab8770c18375350b74184b63cfe9ba5fc2e88062a4a7c169e5ce7d816353d28a3dd3189e3b8b0e01c763b08ad50dc7276305bf2dc362cae162eb07617dcc71cd58f05baa5e1f3ddd61033bb1bc1521e2b18aa40984453090d96cdd548a79ba80644f63f672c6b17941deebd295e1ba7b1c985f6ba04680c1045790bad4616bea8b7b694eb5908233e875aa09a35819fa37fb1b79930ca5175fc19ae95e77f4f16fcb0f6d2f572cba9e77c5f3abe6b49166131fd2b7b24b88d01c82213d74caa6a7ebb32efb42f2fd5" | ||
// } | ||
// ] | ||
// } | ||
// ], | ||
// "metadata": "00972bf56b3ca87e1223603d823e9e64", | ||
// "amount": "100000", | ||
// "payerId": "02d4bdaa60360e3d43e64c5dc2c316c746c4631110b582aaa38e5c4451e8c173a4", | ||
// "signature": "7e3e2b1def7a651ee5ad0b2506c07ea19c1152d46a73e51d86cf410b07788e584afed38d7db75b3425bdfa005c0bbcae889ebfc100729483e6383a3e099e7501", | ||
// "blindedPayInfo": [ | ||
// { | ||
// "feeBaseMsat": 1000, | ||
// "feeProportionalMillionths": 100, | ||
// "cltvExpiryDelta": 162, | ||
// "htlcMinimumMsat": "1000", | ||
// "htlcMaximumMsat": "200000", | ||
// "features": "" | ||
// } | ||
// ], | ||
// "createdAt": 1726507977, | ||
// "relativeExpiry": 60, | ||
// "paymentHash": "eeb43225b14d0e78dde0cfedc5ac88c63e97770c4c924157bc73bdfccde070d5", | ||
// "features": "020000", | ||
// "nodeId": "02326a548fcddd2373bfc631654c3e84aacda202811bf47cfc98d0ad13a386aa80" | ||
// } | ||
``` | ||
## Caveats | ||
## Running Locally | ||
- Does not decode recurrence (will add once recurrence is added back in to the spec) | ||
- Does not decode `invoice_paths` and `invoice_blindedpay` as I could not get it working (I hope to fix this some time soon) | ||
### Install Deps | ||
`bun install` | ||
### Build | ||
`bun run build:all` |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
59309
1
1
88
4
10
346
1
+ Addedbech32@^2.0.0
+ Addedbech32@2.0.0(transitive)
+ Addedtypescript@5.7.3(transitive)
Updated@noble/hashes@^1.5.0