From eda4b9f5dd55bc25b63d20648d2148b0f2f3c04d Mon Sep 17 00:00:00 2001
From: openoms <43343391+openoms@users.noreply.github.com>
Date: Thu, 23 Nov 2023 22:03:12 +0100
Subject: [PATCH] feat: add a bolt11 invoice decode option (#29)
---
docs/decode.mdx | 16 +
package-lock.json | 527 +++++-
package.json | 10 +-
sidebars.js | 3 +-
src/components/DecodeInvoice.jsx | 70 +
src/hooks/useScript.js | 39 +
static/js/bolt11.min.js | 1 +
typos.toml | 6 +-
yarn.lock | 3017 +++++++++++++++++++-----------
9 files changed, 2622 insertions(+), 1067 deletions(-)
create mode 100644 docs/decode.mdx
create mode 100644 src/components/DecodeInvoice.jsx
create mode 100644 src/hooks/useScript.js
create mode 100644 static/js/bolt11.min.js
diff --git a/docs/decode.mdx b/docs/decode.mdx
new file mode 100644
index 00000000..2cd8689f
--- /dev/null
+++ b/docs/decode.mdx
@@ -0,0 +1,16 @@
+---
+id: decode
+title: Decode a lightning invoice
+slug: /decode
+---
+
+import { AuthProvider } from '/src/components/apiTutorial/AuthContext';
+import {DecodeInvoice} from '/src/components/DecodeInvoice';
+
+
Loading script...
; + } + if (status === 'error') { + returnError loading script.
; + } + + const handleDecode = () => { + try { + let customNetwork; + if (paymentRequest.startsWith('lnbc')) { + customNetwork = { + bech32: 'bc', // mainnet + pubKeyHash: 0x42, + scriptHash: 0xff, + validWitnessVersions: [0, 2, 3, 4, 5] + }; + } else if (paymentRequest.startsWith('lntbs')) { + customNetwork = { + bech32: 'tbs', // signet + pubKeyHash: 0x42, + scriptHash: 0xff, + validWitnessVersions: [0, 2, 3, 4, 5] + }; + } else { + throw new Error('Invalid invoice prefix.'); + } + + const decoded = lightningPayReq.decode(paymentRequest, customNetwork); // Use the global object + setDecodedInvoice(decoded); + setErrorMessage(null); + } catch (error) { + setDecodedInvoice(null); + setErrorMessage('Failed to decode invoice. Please check the format.'); + } + }; + + return ( +=0;n--){for(var u=t.words[n],c=f-1;c>=0;c--){var h=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==s?(s<<=1,s|=h,(4===++a||0===n&&0===c)&&(i=this.mul(i,r[s]),a=0,s=0)):a=0}f=26}return i},E.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},E.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new k(e)},i(k,E),k.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},k.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},k.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},k.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),s=i;return i.cmp(this.m)>=0?s=i.isub(this.m):i.cmpn(0)<0&&(s=i.iadd(this.m)),s._forceRed(this)},k.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this)},{buffer:74}],73:[function(e,t,r){var n;function i(e){this.rand=e}if(t.exports=function(e){return n||(n=new i(null)),n.generate(e)},t.exports.Rand=i,i.prototype.generate=function(e){return this._rand(e)},i.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r