{"_id":"thunder-bridge","_rev":"43-6c6a8f5c9bbc1f46ec70f33c7360fc10","name":"thunder-bridge","dist-tags":{"latest":"2.2.1"},"versions":{"0.8.0":{"name":"thunder-bridge","version":"0.8.0","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.0","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"d3b439d815480f026fbf680942fbbd2e5c8c9934","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.0.tgz","fileCount":6,"integrity":"sha512-NmQXv9OylJ1fvAkZ6ZT5DLHqTZPnDRSmHe4uRDoG9j8u6MRXRCCzR9Erdw32q/kMS6VsGq64lfNrJBVBmCLa1w==","signatures":[{"sig":"MEQCIHMCseKonzqaxtOVf+yT8hwE7FxdwcviLC3XoymDa1UZAiAiYuJBdbpoUvEEcWSTUXryW7V3ScWTef6DNx1oZ+vB4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184712},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"8e117f366622a23595b031974c5ef69d7c0e5866","scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm,cjs --dts --clean","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.0_1785867843564_0.8801445866901758","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"thunder-bridge","version":"0.8.1","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.1","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"17ab91da2d370d523e5a2643b0a4fe64ecc8d98e","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.1.tgz","fileCount":7,"integrity":"sha512-r5JW3Z6ffInQtoKm/B7E7tiX65H0Nih1IyZdKX3RNcan4u/EkIo9u66CR2wd8uKyJ5xJXfLXwCZdwqpLZmuUOw==","signatures":[{"sig":"MEYCIQDhpLlsla+x+gfliGw7RMBMTmQCgjbDiTfma4YTdyDuTQIhAJuNtxd6kzt/P64lzHCv9Mnd6lsnWATWMegcc/UgIp8M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234997},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"cbd9e0bf705b116a5c008e5e01cd4549bf708c80","scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm,cjs --dts --clean","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.1_1785943689762_0.5429011759074793","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"thunder-bridge","version":"0.8.2","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.2","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"fc5498de9421a00ac34536311ea0fd4af7be382b","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.2.tgz","fileCount":7,"integrity":"sha512-duH1X3lPL6P0XSZHU0E7Fl+Zw5P4d+qWe4lpp0/nXSjPV+JV7X4WBiW6Pat6VIaRad2pUsCumet/gGv19x04AA==","signatures":[{"sig":"MEUCIQDgmECHXItYmHbUjPkzgfdC+zPjPJ7QLyPvNmWSfOfkgQIgXK6nW9GRi3Jdht5bSWa2bfFyadR23ajz1N/jA2cUEiQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264316},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"69fd4d2da9fca7d400102e5164c396bdee1e69e9","scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm,cjs --dts --clean","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.2_1786367577888_0.1578324959236237","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"thunder-bridge","version":"0.8.3","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.3","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"098e4a0738372931d0e8b8d20f4355ab86587eed","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.3.tgz","fileCount":13,"integrity":"sha512-fIzq43fCGCs120azWjhq+n4AwjEXkoV+vIimDu5e8edxWYSJJPlWZP3Z5cZcdlA2vNKpO1p13ba2sATdZorDCw==","signatures":[{"sig":"MEUCIQCv2x0EUJcwBGAHNhppJZqG6aMF3KTWF0KrgS+QUxfLmgIgZCFKVkStkkrTxSNt/ArhKxqw38tm4nVFb+4fUMtmsRU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294430},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"e06922300da54971926d53444f20e5aacbc845dd","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.3_1786381543368_0.41250880337525064","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"thunder-bridge","version":"0.8.4","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.4","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"69708691ac6514c66c17470058a28a3a0c5609d0","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.4.tgz","fileCount":13,"integrity":"sha512-Pfo1ALdkrcEbZeQU06GazxSGCYTe4spQnugHMI0s/qgnKB382InHj2YlIyKvJiv6KaalciK2ak4WRfquxxFpyw==","signatures":[{"sig":"MEUCIACDt4zlcAQxLmaXzDqPYSw5Lm1VT+ltf5NrUzYDXiC+AiEA9Efv1vmHLHdKAdiG+WCE/rlWn9hM9jXJaijlaiLmSxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301161},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"9e8fbe16a63f2fee73e2f953549fd14d8b08a23b","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.4_1786391625217_0.8909279143270961","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"thunder-bridge","version":"0.8.6","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.6","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"39941e085bf546dd119a91e8c3bad0ed4eb02094","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.6.tgz","fileCount":13,"integrity":"sha512-Fy+vq0BQQZoxEOjtSi671WQlhQfd/vjujdeLrNaempPnxLEKHSSsi5O/vjABis9NNYSlhMKO1D0agE1gXg5fKQ==","signatures":[{"sig":"MEQCID4S52e3jjyLMqVjJkfa0jPhhk8Xm/qKbRBDhJAhJm17AiAEiXLiyMqmsTRGydeFf8qpuLTlP6apE1Nvp/2cCqUhuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314162},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"e70caa59cbb7153dec12809856f6287d8131d692","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.6_1786450400488_0.510612423483989","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"thunder-bridge","version":"0.8.8","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.8","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"9a3f36315d9fdc8c90df1a5185577b2a15762569","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.8.tgz","fileCount":13,"integrity":"sha512-fLGoLV2wTLiv+WLje5QLnIrTfCdES4iyEH+X53DqPpMJJJuMtcUpPCdYxBaV2p2vyVt+SByt27VQ+uqRyP+KBA==","signatures":[{"sig":"MEUCIQDLFp4+ObdYh+9kSyccUl8S/Ao4SNBNZfPgvv6Obd1wKQIgB9lrNxu8Co/Rp3Tv8A4V3MYig6Od+1zC2fanBm4wONo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330694},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"47b7477fb6248dc3672f973f7c890a63f6779646","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.8_1786523353254_0.7532457819195859","host":"s3://npm-registry-packages-npm-production"}},"0.8.9":{"name":"thunder-bridge","version":"0.8.9","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.9","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"b5c4a3f933626f8d6aaf0212f7f3a9b1b8ecef06","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.9.tgz","fileCount":13,"integrity":"sha512-ln7yfAN7m+kT1MrCcmY3ff4Kl9Az0Ja+fKvISH1yDqzRYRBnf+iM1PZ1irFHzoH6ABOqzgMs9SCT8oDU1Ok9JQ==","signatures":[{"sig":"MEUCIFjPOavG5XNTPfwIKIf+2C+++GwpuTYim/coZCpaerDMAiEA3Q06nm6p76997Onjp79VZ6CNGLgfxTdvVGbPPe53duY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336322},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"b6a6f2f5ff430e862123d4b7eb5e75d7101b24c5","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.9_1786549926160_0.5217071641989308","host":"s3://npm-registry-packages-npm-production"}},"0.8.10":{"name":"thunder-bridge","version":"0.8.10","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@0.8.10","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"1c81905345040f3b46d404ba3295790e046deb14","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-0.8.10.tgz","fileCount":13,"integrity":"sha512-f1BXxm6T+4hEAd6UrLqbuAYm0drP6d0KT/suCsevEy2m5nModwap1HPxcczdStYzRe7wVoEoJOSlFirWBCwKDA==","signatures":[{"sig":"MEUCIDuhRdO4+31mG2hYyPEUSPnFuW39p69hYZkrLHT7crYKAiEA1kT52u5ck+UrbOkgvlkUiqdUk/5jRXkXhr3EkCOq2w4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336565},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"602f0083690fd1b45d55f41a980a85c6aade51dd","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_0.8.10_1786555323403_0.32969284308551683","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"thunder-bridge","version":"1.0.0","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@1.0.0","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"9ae321d4f6f66522957cb8a948d8ed4fdd17b6d9","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-1.0.0.tgz","fileCount":13,"integrity":"sha512-4IVC+V/55SCn7GUVO8tTuqgiTi9tkZJD8R7l3jK9Bg0whNA+EnvD5UA1AjTtlUqM7iu9H9hxxWbviJ0w/ZdBGw==","signatures":[{"sig":"MEQCIE3bZWuHkItd0nfnKo8suzAUf17Uy+2uv+gITpzSlQ1uAiAjymLTbQv7559qaQK7GTx4wkRsd218DOUJcDvTU8vRMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":359757},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"4f3e5aa289d97a2bbade0c8c59ece000b1dabe14","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_1.0.0_1786631096607_0.10644051135007238","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"thunder-bridge","version":"1.1.0","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@1.1.0","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"33e7f7d1aebab856492e17ab7d27d223b3c06560","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-1.1.0.tgz","fileCount":13,"integrity":"sha512-+vhhsB9aBDppgbszusjKbP8zMW2plClVtmmuvRiZ4eUAZHvJWR6d4JuEQy8Z9rEPwDTEFoOA3yjICPoItNo6Zg==","signatures":[{"sig":"MEUCIBjM+DSCWoB7PLKiPxy5m1lIEYCYH5qzvl14KxSANC57AiEApJZVBDQuaDJLsz9WP1kvlF6Mw0cL28ByT1eCt6A9DH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361844},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"491e07907a7ba794d81f7bc41a27cdaa21a45c69","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome format --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.2"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.10","typescript":"^5.5.0","@types/node":"^24.13.3","@biomejs/biome":"^2.4.16"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_1.1.0_1786633320234_0.7634911093841388","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"thunder-bridge","version":"1.3.0","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@1.3.0","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"9b286278e8de7aa64b36cb41ff7bb8811c810c4b","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-1.3.0.tgz","fileCount":13,"integrity":"sha512-09M9TZHtiuWon6H4EbEwR6wvmLqGOgA4E0sl+8YbBXZw6SC4T+wcY2tg6j0Q7RGn8TcTPw/09QQpT5LT7fLr/A==","signatures":[{"sig":"MEUCIQDuL9uxVbq37VXRrnrgSDwNqvIoXbJF/c2mrcdGiTrOOAIgE3PDLwd+1b4uiFBYro/ZuIZ44Ecq/2re3uQBhLeIAKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":430063},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"8c5e81ce003332ad774b66cd8492b69d86fb9ee9","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_1.3.0_1788611744986_0.6246544120743875","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"thunder-bridge","version":"1.4.0","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@1.4.0","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"558bd5544930998e9afb7fa6836a87382543aa51","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-1.4.0.tgz","fileCount":13,"integrity":"sha512-fLwQg8iEneLNnpTzJIHmubw29C3+t3qDd4+gNuRkUpCw6bjkctvZKyUL+wn0Cn/NQuqiU6VHkoggHbZbUjX2PA==","signatures":[{"sig":"MEUCID5DDLRcvUgCyBY1os4qAo9Xt6FHQna9hZAz7if5yI77AiEAkGaeEEIJ21S43T10R0YlEo1Sw/mVENNJCMnF8FSsEjM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":441192},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"70f4cb80d516f1c329edb8d592b4efcec6cd5d53","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_1.4.0_1788865186590_0.5199885894729026","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"thunder-bridge","version":"1.4.1","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@1.4.1","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"66883d01b46f454c563fb84fdc595280c7c0b720","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-1.4.1.tgz","fileCount":13,"integrity":"sha512-JkEAHw6Bvml2XKWhBSg2y5aykn3VqcCwYkriLrRD5wSV7TPNBjjP7LwRFB1oLEg73dbt66psf7p1QYqzTYjI+Q==","signatures":[{"sig":"MEQCIHD6FCp5caikIK1SfrYp2PNM5VVJAt1jurFjfa2nSMW0AiA9sZI+symEA5sfEphPUP4nx13Io7a4cJFzpQYb2KWgOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444575},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"f285fa14a085588c93dd1aebdc2836f55e47cfe4","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_1.4.1_1788868155199_0.6775177109340491","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"thunder-bridge","version":"1.4.2","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@1.4.2","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"07a9f457c0498c6a128c00b876db685f7b85a9de","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-1.4.2.tgz","fileCount":13,"integrity":"sha512-n5XSJL4RBIbqTC6CetDkKiAfQcQBOK6Bd2dn4N0+r0c7NXoX6P/3aQLDkAC4FI2gs5eHs9gowS5J1nYFP6y4dw==","signatures":[{"sig":"MEUCIQCsYqRXeVXY1vZG25g+ofN+ImAZa02DEmwKcegm6INxyAIgbtdU3hvTEXG7EAxGlALMUGseho9dBoFVb1P7F1GUvlg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":435130},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"require":{"types":"./dist/server.d.cts","default":"./dist/server.cjs"}}},"gitHead":"35fdb0ca7fdf0e43fadd18e5f26219c2dd9247ec","scripts":{"test":"vitest run","build":"tsup src/index.ts src/server.ts --format esm,cjs --dts --clean --splitting=false","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"server":["./dist/server.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_1.4.2_1788888226947_0.33040296455638773","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"thunder-bridge","version":"1.5.0","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@1.5.0","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"f87ef3216c821ab47cfec79fb57e569263450d40","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-1.5.0.tgz","fileCount":33,"integrity":"sha512-chsisZVsQRhWkmCvwTSMyG01y1PUQCFqW6MOby3lC69iMqvbhue//Tlu0oHyowrw9evo3W5/nvZNCNmrLaD1WA==","signatures":[{"sig":"MEYCIQCmP9IR5JQ5MNGs3Gw9NRKN2jBGKsSQVo6jSAP/Z/91sQIhAMu6W8NYUVNl58emUSEdh5ajjU1jyO9gMMJGyaScvSLB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":495578},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./qr":{"import":{"types":"./dist/qr.d.ts","default":"./dist/qr.js"},"require":{"types":"./dist/qr.d.cts","default":"./dist/qr.cjs"}},"./nwc":{"import":{"types":"./dist/nwc.d.ts","default":"./dist/nwc.js"},"require":{"types":"./dist/nwc.d.cts","default":"./dist/nwc.cjs"}},"./bank":{"import":{"types":"./dist/bank.d.ts","default":"./dist/bank.js"},"require":{"types":"./dist/bank.d.cts","default":"./dist/bank.cjs"}},"./price":{"import":{"types":"./dist/price.d.ts","default":"./dist/price.js"},"require":{"types":"./dist/price.d.cts","default":"./dist/price.cjs"}}},"gitHead":"f6fb8bb360562288f0463076a8f9566a8b2ff3f7","scripts":{"test":"vitest run","build":"tsup","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.11.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"qr":["./dist/qr.d.ts"],"nwc":["./dist/nwc.d.ts"],"bank":["./dist/bank.d.ts"],"price":["./dist/price.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_1.5.0_1789081514560_0.38421439175663674","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"thunder-bridge","version":"2.1.1","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@2.1.1","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"944b29cb66064a1d3b43ce51e1e55d8a64d986de","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-2.1.1.tgz","fileCount":31,"integrity":"sha512-1i9wKQqGGvfbusiw9TkRUXobaSCqGb8eEQVAUDTCjUjrFHeEfPaAuzUETlP11nNXhJ7K1s8dglGV9+B2YOCa1A==","signatures":[{"sig":"MEYCIQDy5Xj0mY3FrOQYz35vyMRLNQSU5oXRvjpbS6xrf1Y0vgIhAJLQKnHQov7p9bj2u7mRXvFdRAVbau9/l6edZ4zpAAJ7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/thunder-bridge@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":545667},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./qr":{"import":{"types":"./dist/qr.d.ts","default":"./dist/qr.js"},"require":{"types":"./dist/qr.d.cts","default":"./dist/qr.cjs"}},"./nwc":{"import":{"types":"./dist/nwc.d.ts","default":"./dist/nwc.js"},"require":{"types":"./dist/nwc.d.cts","default":"./dist/nwc.cjs"}},"./bank":{"import":{"types":"./dist/bank.d.ts","default":"./dist/bank.js"},"require":{"types":"./dist/bank.d.cts","default":"./dist/bank.cjs"}},"./price":{"import":{"types":"./dist/price.d.ts","default":"./dist/price.js"},"require":{"types":"./dist/price.d.cts","default":"./dist/price.cjs"}}},"gitHead":"24a6f09b04afe0e0a2fdb1fb5191c10ccd28507c","scripts":{"test":"vitest run","build":"tsup","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"trustedPublisher":{"id":"github","oidcConfigId":"88c94b14-8e3e-47d0-9bf2-6ed0f6550489"}},"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.19.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"qr":["./dist/qr.d.ts"],"nwc":["./dist/nwc.d.ts"],"bank":["./dist/bank.d.ts"],"price":["./dist/price.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_2.1.1_1790706533919_0.2654353404913621","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"thunder-bridge","version":"2.2.0","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"author":{"name":"i-am-fatik"},"license":"MIT","_id":"thunder-bridge@2.2.0","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"homepage":"https://agora.gripe/en/tools/thunder-bridge","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"4d48c7754180123fe37a1aa3d698677c5411c57c","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-2.2.0.tgz","fileCount":31,"integrity":"sha512-1eEK3SY6T0l9SbEyFXRb2eNWTsbfSZHViW8NqV0LpvdbQAFjWi2yvMDRlqwCPa/ANx+pNhBmwnpT8cuvbTj9kQ==","signatures":[{"sig":"MEUCIQC43YR0QXSbuU/Ou+nrNNlQAvnjcqSiCXe6Zqg4qQV7cgIgRI4JeqaG9ZXceaU11ptBecIRTvKhbKg4VcPc6GfT2Vg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/thunder-bridge@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":594051},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./qr":{"import":{"types":"./dist/qr.d.ts","default":"./dist/qr.js"},"require":{"types":"./dist/qr.d.cts","default":"./dist/qr.cjs"}},"./nwc":{"import":{"types":"./dist/nwc.d.ts","default":"./dist/nwc.js"},"require":{"types":"./dist/nwc.d.cts","default":"./dist/nwc.cjs"}},"./bank":{"import":{"types":"./dist/bank.d.ts","default":"./dist/bank.js"},"require":{"types":"./dist/bank.d.cts","default":"./dist/bank.cjs"}},"./price":{"import":{"types":"./dist/price.d.ts","default":"./dist/price.js"},"require":{"types":"./dist/price.d.cts","default":"./dist/price.cjs"}}},"gitHead":"389a8428abb68a624083481a0b1f1a11a4011e55","scripts":{"test":"vitest run","build":"tsup","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"i_am_fatik","email":"fatrdla@proton.me"},"trustedPublisher":{"id":"github","oidcConfigId":"88c94b14-8e3e-47d0-9bf2-6ed0f6550489"}},"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.19.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"qr":["./dist/qr.d.ts"],"nwc":["./dist/nwc.d.ts"],"bank":["./dist/bank.d.ts"],"price":["./dist/price.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"tmp":"tmp/thunder-bridge_2.2.0_1790713795202_0.9498030430862365","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"_id":"thunder-bridge@2.2.1","bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"dist":{"shasum":"8a0ef1c321c10d53f1098d47538e5d4d823ae661","tarball":"https://registry.npmjs.org/thunder-bridge/-/thunder-bridge-2.2.1.tgz","integrity":"sha512-bd3QYLbZ9kxF6KOVEUQctU1WJf3/2fD30W9UJ2sAPK5DtOHIWZJp0T5ikG6mJedQW8Zr946XNTEGozHnb0PZWA==","fileCount":31,"unpackedSize":596196,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/thunder-bridge@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD7VUQ+tytL1r+DK+idf7TIQI6hWxhMXoBKDrEG6IkYawIhAKi1bLsmiVSJ/9mBYk+xUkvqDYhCf+btarZm7/03xyR6"}]},"main":"./dist/index.cjs","name":"thunder-bridge","type":"module","types":"./dist/index.d.ts","author":{"name":"i-am-fatik"},"module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./qr":{"import":{"types":"./dist/qr.d.ts","default":"./dist/qr.js"},"require":{"types":"./dist/qr.d.cts","default":"./dist/qr.cjs"}},"./nwc":{"import":{"types":"./dist/nwc.d.ts","default":"./dist/nwc.js"},"require":{"types":"./dist/nwc.d.cts","default":"./dist/nwc.cjs"}},"./bank":{"import":{"types":"./dist/bank.d.ts","default":"./dist/bank.js"},"require":{"types":"./dist/bank.d.cts","default":"./dist/bank.cjs"}},"./price":{"import":{"types":"./dist/price.d.ts","default":"./dist/price.js"},"require":{"types":"./dist/price.d.cts","default":"./dist/price.cjs"}}},"gitHead":"da582b2c67278e41352d84eac8e52593f500ebaf","license":"MIT","scripts":{"test":"vitest run","build":"tsup","format":"biome check --write src test","check:pkg":"npx --yes publint && npx --yes @arethetypeswrong/cli --pack .","typecheck":"tsc --noEmit && tsc -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build && npx --yes publint"},"version":"2.2.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"88c94b14-8e3e-47d0-9bf2-6ed0f6550489"},"approver":{"name":"i_am_fatik","email":"fatrdla@proton.me"}},"homepage":"https://agora.gripe/en/tools/thunder-bridge","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"overrides":{"esbuild":"^0.28.2"},"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"_npmVersion":"11.19.0","description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","directories":{},"maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"uqr":"^0.1.3","@noble/curves":"2.4.0","@noble/hashes":"2.4.0","@noble/ciphers":"2.4.0"},"typesVersions":{"*":{"qr":["./dist/qr.d.ts"],"nwc":["./dist/nwc.d.ts"],"bank":["./dist/bank.d.ts"],"price":["./dist/price.d.ts"]}},"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^6.0.3","@types/node":"^26.4.0","@biomejs/biome":"^2.5.11"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/thunder-bridge_2.2.1_1790715933406_0.9432194197934052"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-04T18:24:03.497Z","modified":"2026-09-29T21:05:33.789Z","0.0.1":"2026-03-29T17:52:27.363Z","0.0.2":"2026-03-29T18:56:20.361Z","0.0.3":"2026-04-11T19:08:33.673Z","0.0.4":"2026-04-11T19:11:53.931Z","0.0.5":"2026-04-11T20:42:44.979Z","0.0.6":"2026-04-12T14:14:50.923Z","0.0.7":"2026-04-25T12:38:33.824Z","0.0.8":"2026-04-25T12:53:43.408Z","0.0.9":"2026-04-25T14:22:54.779Z","0.0.10":"2026-04-25T15:38:50.639Z","0.1.0":"2026-05-31T20:33:49.222Z","0.1.1":"2026-06-01T14:45:39.376Z","0.1.2":"2026-06-01T16:45:29.903Z","0.2.0":"2026-06-02T20:54:32.806Z","0.3.0":"2026-06-06T18:45:50.783Z","0.4.0":"2026-06-06T20:06:36.774Z","0.4.1":"2026-06-07T11:50:03.668Z","0.5.0":"2026-06-07T13:04:57.830Z","0.6.0":"2026-06-07T20:13:55.811Z","0.7.0":"2026-06-08T17:00:30.076Z","0.8.0":"2026-08-04T18:24:03.709Z","0.8.1":"2026-08-05T15:28:09.916Z","0.8.2":"2026-08-10T13:12:58.067Z","0.8.3":"2026-08-10T17:05:43.552Z","0.8.4":"2026-08-10T19:53:45.388Z","0.8.6":"2026-08-11T12:13:20.644Z","0.8.8":"2026-08-12T08:29:13.388Z","0.8.9":"2026-08-12T15:52:06.337Z","0.8.10":"2026-08-12T17:22:03.587Z","1.0.0":"2026-08-13T14:24:56.765Z","1.1.0":"2026-08-13T15:02:00.390Z","1.3.0":"2026-09-05T12:35:45.115Z","1.4.0":"2026-09-08T10:59:46.727Z","1.4.1":"2026-09-08T11:49:15.330Z","1.4.2":"2026-09-08T17:23:47.071Z","1.5.0":"2026-09-10T23:05:14.684Z","2.1.1":"2026-09-29T18:28:54.024Z","2.2.0":"2026-09-29T20:29:55.317Z","2.2.1":"2026-09-29T21:05:33.520Z"},"bugs":{"url":"https://github.com/i-am-fatik/thunder-bridge/issues"},"author":{"name":"i-am-fatik"},"license":"MIT","homepage":"https://agora.gripe/en/tools/thunder-bridge","keywords":["lightning","bitcoin","lnurl","lud-21","trustless","payments","websocket"],"repository":{"url":"git+https://github.com/i-am-fatik/thunder-bridge.git","type":"git","directory":"sdk"},"description":"Trustless JavaScript client for the Thunder Bridge Lightning payment gateway. Proves the invoice came from your own wallet before the payer sees it.","maintainers":[{"name":"i_am_fatik","email":"fatrdla@proton.me"}],"readme":"# thunder-bridge\n\nA JavaScript client for a Thunder Bridge gateway. Give it a priority list of\nlightning addresses and an amount, and it hands back an invoice minted by the\nrecipient's own wallet, proven against that recipient's own server before it\nreturns. The gateway mints nothing, holds nothing and forwards nothing.\n\nLUD-21 is the shape of the proof rather than the whole of it. Whichever rail a\npayment runs on, the gateway holds a payment hash, polls a `verify` URL and reports\nwhat came back, and four different things can be the one answering.\n\n## Whose wallets this works with\n\nCheck this before you build on it. The gateway can watch a payment only when the\nrecipient's lightning address publishes a LUD-21 `verify` URL **and** releases the\npreimage through it. Support belongs to the address domain rather than to the app,\nso the same wallet on another domain can answer differently.\n\n| Works | Address ends with |\n|---|---|\n| Blink | `@blink.sv` |\n| Alby | `@getalby.com` |\n| coinos | `@coinos.io`, `@coinos.pro` |\n| Minibits | `@minibits.cash` |\n| Speed | `@speed.app` |\n| Cake, Breez, Blitz, the Spark-hosted brands | `@cake.cash`, `@breez.tips`, `@blitzwalletapp.com` |\n| a BTCPay Server of your own | your domain, from v2.3.8 |\n\n| Refused | Why |\n|---|---|\n| Wallet of Satoshi, Strike, Cash App, ZBD, Primal, Fountain, every LNbits wallet | no `verify` at all |\n| ZEUS Pay, ecash.love | `verify` without a preimage, refused deliberately, since `settled: true` with nothing to hash proves nothing |\n\nA refusal happens at creation rather than leaving a payment pending until a\nwatcher gives up, so a recipient finds out before a payer sees a QR code.\n\nIf your recipient is on a refused name, `gateway.rails.nwc` is the way round it: your own\nwallet answers over NIP-47 instead of over an address, and the gateway watches the\nhash exactly the same. [docs/lud21-coverage.md](../docs/lud21-coverage.md) is the\nmeasured list rather than a reading of changelogs, last surveyed 2026-08-12. Read\nevery row as true of that date: a wallet that has shipped LUD-21 since still reads\nas refused here until the next survey says otherwise.\n\n## Install\n\n```bash\nnpm install thunder-bridge\n```\n\nNode 22 or newer, for anything that opens a socket: `requestPayment`, `settled`,\n`firstSettled` and `follow` on the gateway side, and every NWC call on the wallet\nside, since a nostr relay is a socket too. Node only exposes a global `WebSocket`\nfrom 22 onwards and there is no fallback to install. The rest, which is every call\nthat is one or more `fetch` requests, runs on any runtime with `fetch` and\n`crypto.subtle`.\n\nOne import is the whole thing. The other four are for what a checkout page has no\nreason to download.\n\n| Import | What it is for |\n|---|---|\n| `thunder-bridge` | the gateway, the proofs, the errors and the amounts. Everything is reached through one instance |\n| `thunder-bridge/qr` | a payload as an SVG or a data URL, for a page that draws a QR of its own |\n| `thunder-bridge/price` | the exchange venues behind `fiat`, for pricing off your own book instead |\n| `thunder-bridge/bank` | a bank statement reader, currently Fio |\n| `thunder-bridge/nwc` | your own wallet over NIP-47, which carries the nostr crypto no browser wants |\n\n`invoiceFrom` resolves lightning addresses and refuses a private host, so it needs\n`node:dns` and will not run on Cloudflare Workers. Nothing else on the main import\ndoes.\n\n## Quick start\n\nA page can run the whole flow with no backend of its own. The url below is a shared\ndemo gateway that answers anyone and forgets everything on restart, so this snippet\nruns as written. It is a base url rather than a page, so opening it in a browser\ngives a `404` and [`/health`](https://public.thunder-bridge.agora.gripe/health) is\nwhat tells you it is up.\n\n```ts\nimport { sats, ThunderBridge } from \"thunder-bridge\";\n\nconst gateway = new ThunderBridge(\"https://public.thunder-bridge.agora.gripe\");\n\nconst asked = await gateway.requestPayment({\n  paidTo: [\"iamfatik@blink.sv\", \"iamfatik@coinos.io\"],\n  amount: sats(21),\n  signal: AbortSignal.timeout(600_000),\n});\n\nconst target = document.querySelector(\"#qr\");\nif (target !== null) {\n  target.innerHTML = asked.qr;\n}\n\nawait asked.paid();\n\nconst preimage = await asked.prove();\n```\n\nTwo names and one call. `requestPayment` mints the invoice on the first address that can\nprove one, checks that invoice against the recipient's own domain before returning,\nand draws the QR.\n\nThen there are two different questions and both are worth asking. `paid` tells you\nwhat the gateway says, and it is the fast one. `prove` asks the recipient's own\nserver, and only that is evidence the money arrived.\n[docs/proving-a-payment.md](../docs/proving-a-payment.md) is the whole argument for\nwhy.\n\nAn amount is `sats(21)`, `msat(21_000)` or `fiat(\"4.99\", \"USD\")`, and a bare number\ndoes not compile: the type is branded, so `21` cannot pass for a price and quietly\nmean twenty-one thousandths of a satoshi. A fiat price is converted when the invoice\nis minted, off the median of four MiCA authorised venues unless you pass your own,\nand a decimal string is read digit by digit rather than through a float. Every\nrefusal is an `AmountError` carrying a `code`, and `AmountError.is(error)` is how\nyou recognise one: each entry point bundles its own copy of the class, so\n`instanceof` holds within one import and that static holds across all of them.\n\n## How each payment method gets verified\n\nEvery rail ends the same way, with a preimage that has to hash to the payment hash\nthe gateway was given. What differs is who obtains the invoice, who is asked for the\npreimage, and which side does the checking.\n\n| `rails.lightning` | the gateway asks, at the recipient's LNURL callback |\n|---|---|\n| the gateway is told | the address list and the amount, and nothing else. It derives the hash and the `verify` URL by resolving the address, and hands both back |\n| the invoice is checked by | you, `proveOrigin` runs five checks against the recipient's own domain |\n| the gateway probes first | nothing, it resolved the address itself |\n| the gateway polls | the wallet, directly |\n| `settled` comes from | the wallet releasing its preimage |\n| the pace is set by | the wallet, when it sends `Cache-Control: max-age`. When it sends none the gateway's own schedule decides |\n\n| `rails.blindLightning` | you ask, with `invoiceFrom` on your server |\n|---|---|\n| the gateway is told | a hash, an expiry and your URL, with the wallet's sealed inside |\n| the invoice is checked by | nobody needs to, you resolved the address yourself |\n| the gateway probes first | `speaksVerify`: a GET on the URL, then a signed POST nonce it must echo |\n| the gateway polls | your `serve.lightningVerify` endpoint, once `relayThrough` is set. Leave it off and the gateway polls the wallet directly, as on the minted rail |\n| `settled` comes from | your endpoint, which unseals, asks the wallet and relays the answer |\n| the pace is set by | you, `pollEverySecs` |\n\n| `rails.nwc` | your own wallet mints it, over NIP-47 `make_invoice` |\n|---|---|\n| the gateway is told | a hash and your URL, with the hash sealed inside |\n| the invoice is checked by | nobody, it is your wallet |\n| the gateway probes first | the same GET and signed nonce |\n| the gateway polls | your `serve.nwcVerify` endpoint |\n| `settled` comes from | `lookup_invoice`, refused unless the wallet's own key signed it |\n| the pace is set by | you, `pollEverySecs` |\n\n| `rails.bank` | nobody, there is no invoice |\n|---|---|\n| the gateway is told | a hash and your URL, whose query is one sealed blob naming neither the amount, the reference nor the account |\n| the invoice is checked by | nobody, there is no invoice to check |\n| the gateway probes first | the same GET and signed nonce |\n| the gateway polls | your `serve.bankVerify` endpoint |\n| `settled` comes from | a `Statement` credit matching amount and currency exactly, with the reference anywhere in the payer's text |\n| the pace is set by | the statement: `fioStatement` reads every thirty seconds divided by its tokens, and `pollEverySecs` overrides it |\n\nTwo things are worth reading off those blocks rather than inferring.\n\n**The checking side flips.** On the minted path the gateway resolved the address, so\nit runs no verify probe and no verify challenge, and `proveOrigin` on your side is\nthe whole defence. A `webhookUrl` is challenged on both paths. On every watched path the gateway resolved nothing, so it probes the URL\nand challenges it with a nonce before accepting the watch, refusing with `424` if\nnothing answers. Deploy the endpoint before you register it. The challenge is on\nunless the operator set `VERIFY_CHALLENGE=0`, which is also why a bare wallet\n`verify` URL cannot be handed to `watch`: a wallet will not echo a nonce.\n\n**What a preimage proves is the same on all four, and narrower than it looks:** that\nthe server holding the secret says the money arrived, made unforgeable by anyone\nelse. On the bank rail that secret is an HMAC you derive, which sounds weaker and is\nnot, because a wallet also minted the preimage it later releases. It rules out a\ngateway inventing a settlement. It does not rule out a recipient lying about one, so\nthis protects a payer against the operator, not against the person being paid.\n\n`proveWrapped` sits on a different axis. It compares two invoices on one payment\nhash and asks nobody anything, so it says whether an operator's wrap is honest\nwithout saying whether either invoice was paid.\n\n### What each one costs you\n\n**`rails.lightning`**\n\n- the gateway holds the address and the amount, so your order book is readable\n  from its own logs\n- it polls the wallet directly, which puts the recipient's provider in its logs and\n  in front of its peers\n- the wallet's `Cache-Control` sets the poll pace, so how fast a settlement is\n  noticed is not yours to decide\n\n**`rails.blindLightning`**\n\n- a service of your own that has to stay up, so a browser-only integration cannot\n  use this rail at all\n- one long-lived sealing secret, which `seal` refuses under 32 characters, so\n  `openssl rand -hex 16` is the shortest thing that works\n- your endpoint being down means the gateway cannot verify and the payment sits\n  `pending`\n- a wallet you cannot reach answers `502`, so the gateway retries instead of\n  concluding the invoice went unpaid. The body still reads `settled: false`, and the\n  status is what separates \"could not ask\" from \"asked, and no\"\n\n**`rails.nwc`**\n\n- an NWC connection to your own wallet, and the nostr relays behind it\n- **scope the connection to `make_invoice` and `lookup_invoice`, never\n  `pay_invoice`.** It is a key that spends, and a leak with the wrong scope drains\n  the wallet\n- relays unreachable means no verification\n\n**`rails.bank`**\n\n- the gateway has to be one of your own: the verify URL names the amount and the\n  reference, so whoever runs the gateway reads your order book from the watches\n  alone\n- the secret is the entire proof. **Lose it and every past proof is gone**, because\n  each preimage is derived from it\n\n**The bank rail has one silent failure worth testing before you promise anybody a\nrail.** Two shapes leave a payment `pending` while the money is already in the\naccount: a bank that truncates the reference, since the match asks whether the\nreference is inside what the bank forwarded rather than the other way round, and a\npayer whose bank forwards nothing but a numeric variable symbol, since an\nalphanumeric reference cannot travel in a numeric field and `X-VS` is not read as an\nalternative. Neither has been seen with Fio, which forwards the message untouched.\nCheck it against the banks your payers actually use.\n\n## Who you still have to trust\n\nThe proof narrows the trust rather than removing it. Three parties are left, and\nthey are not equally constrained.\n\n| | You trust it with | It cannot |\n|---|---|---|\n| the gateway | which of your addresses gets paid, and whether it answers at all | pay an address not on your list, bill you more than you asked, or invent a settlement |\n| the recipient's wallet provider | that a preimage it releases means the money arrived | mint an invoice for a different account on the same domain |\n| the recipient | that the sum they asked for is the sum they are owed | nothing here checks this at all |\n\nThe gateway also sees your address list and your amount. It cannot invent a\nsettlement because the preimage comes from the recipient's own server, and the\nprovider cannot mint for another account because the description hash pins an\ninvoice to one user's metadata under LUD-06. A recipient inflating a total is\noutside what any of it proves.\n\nFour sharp edges, worth reading before you build:\n\n- **A colluding custodian defeats all of it.** If the recipient's wallet provider\n  and the gateway are the same party, then whoever holds the money also serves the\n  metadata and answers the verify requests. Every check passes. This protects a\n  payer against the operator, never against the recipient's own custodian.\n- **The two proof fetches vet the first hop and no further.** `proveOrigin` and\n  `proveSettlement` use the runtime's redirect handling, so a public https host\n  answering `302` to a private address on its own origin is followed there, while a\n  redirect off the recipient's origin fails the proof. `invoiceFrom` is not like\n  this: it resolves through the outbound guard, which sets `redirect: \"manual\"` and\n  re-vets every hop. Keep egress control outside this package if that matters.\n- **A payment read cold is only as pinned as its creation.** `payment` checks\n  the report against the `paymentHash` you hand it, and it was `proveOrigin` at\n  creation, against the request you wrote, that tied that hash to an invoice the\n  recipient issued. Store the hash you proved alongside the payment id, and never a\n  hash a later read handed back, or a cold read is checking the gateway's numbers\n  against each other and nothing more.\n- **Availability is not provable, and an address is not a person.** Every check\n  here is about an invoice you were given, none about one you were refused, and\n  proving an invoice belongs to an address never proves the address belongs to\n  whoever you think it does.\n\n`agreesWithItself` is the one to be careful with: it asks only whether a report holds\ntogether, so a gateway that generates a preimage, hashes it and builds an invoice\naround that hash passes it. If a payment matters, ask the recipient with\n`prove` on the payment request or with `proveSettlement`. The full argument, including the five\norigin checks and their failure codes, is in\n[docs/proving-a-payment.md](../docs/proving-a-payment.md).\n\n## What you call\n\n[docs/api.md](../docs/api.md) is the whole surface, generated from the TSDoc on\nevery export by [`tools/api-reference.ts`](../tools/api-reference.ts) and checked in\nCI, so nothing there can be out of date and nothing here repeats it. Your editor\nhas the same text on the export itself.\n\nThe shape of it is worth stating once, because it is the thing that makes the rest\nfindable. One instance is the entry to everything:\n\n```ts\nimport { sats, ThunderBridge } from \"thunder-bridge\";\n\nconst gateway = new ThunderBridge(\"https://public.thunder-bridge.agora.gripe\", {\n  secret: \"a-long-lived-server-side-secret\",\n});\n\nconst asked = await gateway.requestPayment({ paidTo: \"iamfatik@blink.sv\", amount: sats(21) });\nconst read = await gateway.payment(asked);\nconst quoted = await gateway.quote({ paidTo: \"iamfatik@blink.sv\", amount: sats(21) });\n\nconst lnurl = gateway.serve.lnurlPay({\n  paidTo: \"iamfatik@blink.sv\",\n  amount: sats(21),\n  secret: \"a-long-lived-server-side-secret\",\n});\nconst rail = gateway.rails.lightning({ paidTo: \"iamfatik@blink.sv\", amount: () => sats(21) });\n```\n\n- **the payments themselves** are `requestPayment`, `mint`, `quote`, `watch`, `payment`,\n  `payments`, `settled`, `firstSettled`, `follow`, `ticket`, `nameFor` and\n  `webhookKey`, all on the instance\n- **what you mount** is on `gateway.serve`: an LNURL-pay endpoint, the two ticket\n  endpoints, the verify endpoints `lightningVerify`, `bankVerify` and `nwcVerify`, the\n  webhook route, and the readers under it\n- **one call per sale** is on `gateway.rails`: `lightning`, `blindLightning`,\n  `bank`, `nwc`, and `transfer` for a bank transfer on its own. What the NWC rail\n  needs to reach your wallet, `nwcConnection` and the wallet calls, stays in\n  `thunder-bridge/nwc`\n- **the proofs** are free functions, deliberately, because a proof you cannot run\n  without the thing being audited is not a proof: `proveOrigin`, `proveSettlement`,\n  `proveWrapped`, `decodeInvoice`, `preimageMatchesHash`. `agreesWithItself` sits\n  beside them and proves less, as the table below says\n- **a payment reads without an assertion.** `Payment` is `MintedPayment |\n  WatchedPayment`, so checking `kind` is what makes the address, the amount and the\n  invoice non-null. The gateway writes those three together or writes none of them,\n  and a record carrying some of the three is refused rather than read\n- **the amounts** are `sats`, `msat` and `fiat`\n\nWhat your service answers once those handlers are mounted is written out in\n[`openapi.yaml`](openapi.yaml), shipped with this package.\n\n### Which call checks what\n\nThere are several ways to hear that a payment settled because there are several\nplaces to hear it from. They do not check the same thing, and the difference is\nwhat you may act on without asking anyone else.\n\n| You hear it through | What the claim is checked against |\n| --- | --- |\n| `payment`, `settled`, `firstSettled`, `paid()` on a `requestPayment`, and `Gateways.settled` | the `{ id, paymentHash }` you hold. Another payment, another hash, or a preimage that does not hash to yours throws `GatewayCheatError` |\n| `serve.webhook`, `serve.readSettlement`, `serve.readPayment` | the gateway's key, the timestamp, the URL it was sent to, and the preimage against the hash in the same body. Find your order by that hash before you act, which is what makes a pair the gateway invented find nothing |\n| `payments`, `follow` | the report itself. An entry claiming paid whose preimage does not hash to its own hash is left out of `payments` and reaches `follow`'s `onError` rather than `onPayment` |\n| `agreesWithItself` | the report itself, and nothing you hold, so a gateway that invents a preimage and names its hash passes it |\n| `proveSettlement` | the recipient's own verify URL, after the origin proof, so the gateway is not asked at all |\n\n## Errors\n\nEvery failure from the gateway is an RFC 9457 problem document. Branch on `type`,\nnever on prose. `error.status` is what the transport carried, and a document naming\na different status in its own body does not override it.\n\nEvery `type` below is prefixed `urn:problem-type:thunder-bridge:`, and every one of\nthem is a static string on `ProblemError`, so nothing has to be copied out of this\ntable by hand. `ProblemError.is(error, ProblemError.PAYMENT_ALREADY_WATCHED)` is how\nyou branch on a type that has no error class of its own.\n\n| `type` | Status | What it is |\n|---|---|---|\n| `invalid-request` | 400, or 413 for a body over the size ceiling | `detail` names the field |\n| `no-wallet-available` | 502, else 422, else 400, following the worst wallet | `NoWalletAvailableError`, `wallets` says why each failed |\n| `request-in-flight` | 409 | a request with this `Idempotency-Key` is still running, as `IdempotencyConflictError` |\n| `idempotency-key-reused` | 409 | that key was used for a different request, as `IdempotencyConflictError` |\n| `payment-already-watched` | 409 | that payment hash is already watched here |\n| `caller-unknown` | 403 | the instance keeps a list of callers and your key is not on it |\n| `verify-host-refused` | 403 | this instance will not mint, because minting is off or `VERIFY_HOSTS` pins it to a list. Resolve the address yourself and use `watch`. A verify URL that is not public https is `invalid-request` instead |\n| `verify-unconfirmed` | 424 | the URL did not answer the LUD-21 shape |\n| `verify-unconsented` | 424 | the URL did not echo the challenge nonce |\n| `webhook-unconfirmed` | 424 | the webhook URL did not answer its challenge |\n| `too-many-pending` | 429, with `ratelimit-limit` and `ratelimit-remaining` set | the caller is over its share of the instance's `MAX_PENDING` |\n\nThe rest carry `about:blank` as their type, which the gateway seeds into every\nproblem body: `401` when the bearer token does not match, `404` both for an id this\ngateway never heard of and for one it knows that belongs to a different caller key,\nso a `403` can never confirm an id exists, `410` when you replay an\n`Idempotency-Key` whose payment has since been pruned, `500`, and `503` while the\ninstance is draining or its own health check reads stalled. On a `404` `payment`\nreturns `null` rather than throwing.\n\n`GatewayCheatError` is different in kind. It reports a gateway that demonstrably\nmisbehaved, and `code` names the check that caught it. `UnverifiedRecipientError` is\nneither an accusation nor a clean bill of health: it means a check could not be run\nat all, because the recipient's server was down, timed out, answered something\nunreadable, or the browser was blocked by CORS. Decide what you want to do with an\nunproven invoice, and decide it explicitly.\n\n```ts\nimport {\n  GatewayCheatError,\n  msat,\n  NoWalletAvailableError,\n  ProblemError,\n  ThunderBridge,\n  UnverifiedRecipientError,\n} from \"thunder-bridge\";\n\ndeclare const gateway: ThunderBridge;\ndeclare function report(line: string): void;\n\ntry {\n  await gateway.mint({ paidTo: \"iamfatik@blink.sv\", amount: msat(21_000) });\n} catch (error) {\n  if (error instanceof GatewayCheatError) {\n    report(`the gateway cheated: ${error.code} on payment ${error.paymentId}`);\n  } else if (error instanceof UnverifiedRecipientError) {\n    report(`could not reach ${error.lnAddress} to check the invoice`);\n  } else if (error instanceof NoWalletAvailableError) {\n    for (const wallet of error.wallets) {\n      report(`${wallet.address}: ${wallet.reason}`);\n    }\n  } else if (error instanceof ProblemError) {\n    report(`${error.status} ${error.title}`);\n  } else {\n    throw error;\n  }\n}\n```\n\n## Webhooks\n\nPass `webhookUrl` when you create a payment, or on any rail. There is no webhook\nsecret: a gateway holds nothing of yours, and sending one is refused rather than\nignored. Every delivery carries `x-signature-v2: ed25519=<signature>` with the key\nthe gateway publishes at `/webhook-key`, over the URL it was sent to, `<x-timestamp>`\nand the raw body, so a delivery made for somebody else's endpoint proves nothing at\nyours and a captured one cannot be replayed at you later. Behind a proxy that hands\nthe request on under another host or scheme, pass the URL you registered as `url`.\nUntil then\n`serve.webhook` acts on each settlement once, answering a replay `200` without\ncalling you again. Delivery is still at-least-once: a retry after that window, or\none reaching another instance of your server, calls you again, so fulfil\nidempotently on `id`.\n\nYour handler answers one challenge before any of that. The gateway POSTs\n`{\"type\":\"webhook-challenge\",\"nonce\":\"...\"}` to the URL while the create is still\nopen, and refuses the payment with a `424` unless the nonce comes back, so deploy\nthe endpoint before you register it.\n\n```ts\nimport { ThunderBridge } from \"thunder-bridge\";\n\ndeclare function fulfil(paymentId: string, preimage: string): Promise<void>;\n\nconst gateway = new ThunderBridge(\"https://public.thunder-bridge.agora.gripe\");\n\nexport const POST = gateway.serve.webhook({\n  onSettled: async (settlement) => {\n    await fulfil(settlement.id, settlement.preimage);\n  },\n});\n```\n\nThat route answers the challenge, reads the gateway's own published key, checks the\nsignature, and calls you only for a delivery that proves itself: it says paid and it\ncarries a preimage that hashes to the payment hash the same body names. A delivery\nthat proves nothing gets a `202` and no callback, because acting on an unproven\nclaim is the one thing this refuses to do. Pass `onUnproven` when an expiry is news\nyou want.\n\n`onSettled` is handed a `SelfConsistent<Settlement>`, so the preimage is a `string` rather\nthan something to coerce: the check the route already ran is what narrows it.\n\n`gateway.serve.readSettlement` and `gateway.serve.readPayment` are the same checks\nwithout the route, for a handler you would rather write yourself. Ask the\nrecipient's own server with `proveSettlement` when you want the proof to come from\nsomewhere other than the delivery.\n\n## More\n\n- [docs/lud21-coverage.md](../docs/lud21-coverage.md) - which address domains\n  release a preimage, and how that was measured\n- [docs/proving-a-payment.md](../docs/proving-a-payment.md) - the five origin checks\n  and their failure codes, what settlement means, making the gateway poll nobody but\n  you, the NWC rail, wrapped invoices, and webhooks in full\n- [docs/api.md](../docs/api.md) - every export, generated from the code\n- [docs/recipes.md](../docs/recipes.md) - one runnable program per use case, every name in\n  it linked to its own entry in the reference\n- [the gateway](../README.md) - one level up in this repository\n\n## Development\n\n```bash\nnpm install\nnpm test\nnpm run build\n```\n\nMIT.\n","readmeFilename":"README.md"}