@thecryptodonkey/toll-booth 1.4.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/backends/nwc.d.ts +22 -0
- package/dist/backends/nwc.d.ts.map +1 -0
- package/dist/backends/nwc.js +65 -0
- package/dist/backends/nwc.js.map +1 -0
- package/dist/core/create-invoice.d.ts.map +1 -1
- package/dist/core/create-invoice.js +5 -3
- package/dist/core/create-invoice.js.map +1 -1
- package/dist/core/toll-booth.d.ts.map +1 -1
- package/dist/core/toll-booth.js +3 -5
- package/dist/core/toll-booth.js.map +1 -1
- package/dist/core/types.d.ts +6 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/storage/interface.d.ts +1 -1
- package/dist/storage/interface.d.ts.map +1 -1
- package/dist/types.d.ts +0 -2
- package/dist/types.d.ts.map +1 -1
- package/llms.txt +2 -2
- package/package.json +6 -8
- package/dist/backends/alby.d.ts +0 -25
- package/dist/backends/alby.d.ts.map +0 -1
- package/dist/backends/alby.js +0 -137
- package/dist/backends/alby.js.map +0 -1
package/README.md
CHANGED
|
@@ -109,11 +109,12 @@ curl -H "Authorization: L402 <macaroon>:<preimage>" https://jokes.trotters.dev/a
|
|
|
109
109
|
## Features
|
|
110
110
|
|
|
111
111
|
- **L402 protocol** - industry-standard HTTP 402 payment flow with macaroon credentials
|
|
112
|
-
- **Multiple Lightning backends** - Phoenixd, LND, CLN, LNbits,
|
|
113
|
-
- **Alternative payment methods** -
|
|
112
|
+
- **Multiple Lightning backends** - Phoenixd, LND, CLN, LNbits, NWC (any Nostr Wallet Connect wallet)
|
|
113
|
+
- **Alternative payment methods** - Cashu ecash tokens
|
|
114
114
|
- **Cashu-only mode** - no Lightning node required; ideal for serverless and edge deployments
|
|
115
115
|
- **Credit system** - pre-paid balance with volume discount tiers
|
|
116
|
-
- **Free tier** - configurable daily allowance
|
|
116
|
+
- **Free tier** - configurable daily allowance (IP-hashed, no PII stored)
|
|
117
|
+
- **Privacy by design** - no personal data collected or stored; IP addresses are one-way hashed with a daily-rotating salt before any processing
|
|
117
118
|
- **Self-service payment page** - QR codes, tier selector, wallet adapter buttons
|
|
118
119
|
- **SQLite persistence** - WAL mode, automatic invoice expiry pruning
|
|
119
120
|
- **Three framework adapters** - Express, Web Standard (Deno/Bun/Workers), and Hono
|
|
@@ -249,7 +250,7 @@ import { phoenixdBackend } from '@thecryptodonkey/toll-booth/backends/phoenixd'
|
|
|
249
250
|
import { lndBackend } from '@thecryptodonkey/toll-booth/backends/lnd'
|
|
250
251
|
import { clnBackend } from '@thecryptodonkey/toll-booth/backends/cln'
|
|
251
252
|
import { lnbitsBackend } from '@thecryptodonkey/toll-booth/backends/lnbits'
|
|
252
|
-
import {
|
|
253
|
+
import { nwcBackend } from '@thecryptodonkey/toll-booth/backends/nwc'
|
|
253
254
|
```
|
|
254
255
|
|
|
255
256
|
Each backend implements the `LightningBackend` interface (`createInvoice` + `checkInvoice`).
|
|
@@ -260,7 +261,7 @@ Each backend implements the `LightningBackend` interface (`createInvoice` + `che
|
|
|
260
261
|
| LND | Stable | Industry standard |
|
|
261
262
|
| CLN | Stable | Core Lightning REST API |
|
|
262
263
|
| LNbits | Stable | Any LNbits instance - self-hosted or hosted |
|
|
263
|
-
|
|
|
264
|
+
| NWC | Stable | Any Nostr Wallet Connect wallet (Alby Hub, Mutiny, Umbrel, Phoenix, etc.) — E2E encrypted via NIP-44 |
|
|
264
265
|
|
|
265
266
|
---
|
|
266
267
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { LightningBackend } from '../types.js';
|
|
2
|
+
export interface NwcConfig {
|
|
3
|
+
/** NWC connection URI: nostr+walletconnect://pubkey?relay=wss://...&secret=... */
|
|
4
|
+
nwcUrl: string;
|
|
5
|
+
/** Reply timeout in ms (default: 60000) */
|
|
6
|
+
timeout?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Lightning backend adapter for Nostr Wallet Connect (NIP-47).
|
|
10
|
+
*
|
|
11
|
+
* Works with any NWC-compatible wallet (Alby Hub, Mutiny, Umbrel,
|
|
12
|
+
* Phoenix, and others). Communication is end-to-end encrypted over
|
|
13
|
+
* Nostr relays using NIP-44 (or NIP-04 for older wallets).
|
|
14
|
+
*
|
|
15
|
+
* The `nostr-core` package is imported dynamically so it only needs
|
|
16
|
+
* to be installed when this backend is actually used.
|
|
17
|
+
*
|
|
18
|
+
* @see https://nwc.dev/
|
|
19
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/47.md
|
|
20
|
+
*/
|
|
21
|
+
export declare function nwcBackend(config: NwcConfig): LightningBackend;
|
|
22
|
+
//# sourceMappingURL=nwc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nwc.d.ts","sourceRoot":"","sources":["../../src/backends/nwc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,aAAa,CAAA;AAE3E,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,gBAAgB,CAwD9D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightning backend adapter for Nostr Wallet Connect (NIP-47).
|
|
3
|
+
*
|
|
4
|
+
* Works with any NWC-compatible wallet (Alby Hub, Mutiny, Umbrel,
|
|
5
|
+
* Phoenix, and others). Communication is end-to-end encrypted over
|
|
6
|
+
* Nostr relays using NIP-44 (or NIP-04 for older wallets).
|
|
7
|
+
*
|
|
8
|
+
* The `nostr-core` package is imported dynamically so it only needs
|
|
9
|
+
* to be installed when this backend is actually used.
|
|
10
|
+
*
|
|
11
|
+
* @see https://nwc.dev/
|
|
12
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/47.md
|
|
13
|
+
*/
|
|
14
|
+
export function nwcBackend(config) {
|
|
15
|
+
const { nwcUrl, timeout } = config;
|
|
16
|
+
// Validate the connection string eagerly so config errors surface at startup
|
|
17
|
+
if (!nwcUrl || !nwcUrl.startsWith('nostr+walletconnect://')) {
|
|
18
|
+
throw new Error('NWC URL must start with nostr+walletconnect://');
|
|
19
|
+
}
|
|
20
|
+
// Lazy-initialised client — connects on first use
|
|
21
|
+
let clientPromise;
|
|
22
|
+
async function getClient() {
|
|
23
|
+
if (!clientPromise) {
|
|
24
|
+
clientPromise = (async () => {
|
|
25
|
+
const { NWC } = await import('nostr-core');
|
|
26
|
+
const nwc = new NWC(nwcUrl);
|
|
27
|
+
if (timeout !== undefined) {
|
|
28
|
+
nwc.replyTimeout = timeout;
|
|
29
|
+
}
|
|
30
|
+
await nwc.connect();
|
|
31
|
+
return nwc;
|
|
32
|
+
})();
|
|
33
|
+
}
|
|
34
|
+
return clientPromise;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
async createInvoice(amountSats, memo) {
|
|
38
|
+
const nwc = await getClient();
|
|
39
|
+
const tx = await nwc.makeInvoice({
|
|
40
|
+
amount: amountSats * 1000, // NWC uses millisatoshis
|
|
41
|
+
description: memo,
|
|
42
|
+
});
|
|
43
|
+
if (!tx.invoice || !tx.payment_hash) {
|
|
44
|
+
throw new Error('NWC response missing invoice or payment_hash');
|
|
45
|
+
}
|
|
46
|
+
return { bolt11: tx.invoice, paymentHash: tx.payment_hash };
|
|
47
|
+
},
|
|
48
|
+
async checkInvoice(paymentHash) {
|
|
49
|
+
const nwc = await getClient();
|
|
50
|
+
try {
|
|
51
|
+
const tx = await nwc.lookupInvoice({ payment_hash: paymentHash });
|
|
52
|
+
const paid = tx.state === 'settled';
|
|
53
|
+
return {
|
|
54
|
+
paid,
|
|
55
|
+
preimage: paid ? tx.preimage : undefined,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// NOT_FOUND or other errors — treat as unpaid
|
|
60
|
+
return { paid: false };
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=nwc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nwc.js","sourceRoot":"","sources":["../../src/backends/nwc.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAElC,6EAA6E;IAC7E,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACnE,CAAC;IAED,kDAAkD;IAClD,IAAI,aAAiF,CAAA;IAErF,KAAK,UAAU,SAAS;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;gBAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;gBAC3B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,GAAG,CAAC,YAAY,GAAG,OAAO,CAAA;gBAC5B,CAAC;gBACD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;gBACnB,OAAO,GAAG,CAAA;YACZ,CAAC,CAAC,EAAE,CAAA;QACN,CAAC;QACD,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,IAAa;YACnD,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAA;YAC7B,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC;gBAC/B,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,yBAAyB;gBACpD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAA;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;YACjE,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,YAAY,EAAE,CAAA;QAC7D,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,WAAmB;YACpC,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAA;YAC7B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAA;gBACjE,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,KAAK,SAAS,CAAA;gBACnC,OAAO;oBACL,IAAI;oBACJ,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;iBACzC,CAAA;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;gBAC9C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;YACxB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-invoice.d.ts","sourceRoot":"","sources":["../../src/core/create-invoice.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"create-invoice.d.ts","sourceRoot":"","sources":["../../src/core/create-invoice.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAK3E,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA6F9B"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { randomBytes } from 'node:crypto';
|
|
3
3
|
import QRCode from 'qrcode';
|
|
4
4
|
import { mintMacaroon } from '../macaroon.js';
|
|
5
|
+
import { hashIp } from './types.js';
|
|
5
6
|
/** Caveat keys that control monetary value and must not be set by clients. */
|
|
6
7
|
const RESERVED_CAVEAT_KEYS = new Set(['payment_hash', 'credit_balance']);
|
|
7
8
|
/**
|
|
@@ -13,8 +14,9 @@ const RESERVED_CAVEAT_KEYS = new Set(['payment_hash', 'credit_balance']);
|
|
|
13
14
|
*/
|
|
14
15
|
export async function handleCreateInvoice(deps, request) {
|
|
15
16
|
try {
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
const ipHash = request.clientIp ? hashIp(request.clientIp) : undefined;
|
|
18
|
+
if (deps.maxPendingPerIp && ipHash) {
|
|
19
|
+
const pending = deps.storage.pendingInvoiceCount(ipHash);
|
|
18
20
|
if (pending >= deps.maxPendingPerIp) {
|
|
19
21
|
return { success: false, error: 'Invoice creation rate limit exceeded', status: 429 };
|
|
20
22
|
}
|
|
@@ -68,7 +70,7 @@ export async function handleCreateInvoice(deps, request) {
|
|
|
68
70
|
}
|
|
69
71
|
const macaroon = mintMacaroon(deps.rootKey, paymentHash, creditSats, request.caveats);
|
|
70
72
|
const statusToken = randomBytes(32).toString('hex');
|
|
71
|
-
deps.storage.storeInvoice(paymentHash, bolt11 ?? '', creditSats, macaroon, statusToken,
|
|
73
|
+
deps.storage.storeInvoice(paymentHash, bolt11 ?? '', creditSats, macaroon, statusToken, ipHash);
|
|
72
74
|
const qrSvg = bolt11
|
|
73
75
|
? await QRCode.toString(`lightning:${bolt11}`.toUpperCase(), { type: 'svg', margin: 2 })
|
|
74
76
|
: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-invoice.js","sourceRoot":"","sources":["../../src/core/create-invoice.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAG3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"create-invoice.js","sourceRoot":"","sources":["../../src/core/create-invoice.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toll-booth.d.ts","sourceRoot":"","sources":["../../src/core/toll-booth.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"toll-booth.d.ts","sourceRoot":"","sources":["../../src/core/toll-booth.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAK1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEzG,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IACvD,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAAA;IACnE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAoBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,CAqR5E"}
|
package/dist/core/toll-booth.js
CHANGED
|
@@ -3,6 +3,7 @@ import { randomBytes } from 'node:crypto';
|
|
|
3
3
|
import { FreeTier, CreditFreeTier } from '../free-tier.js';
|
|
4
4
|
import { createL402Rail } from './l402-rail.js';
|
|
5
5
|
import { normalisePricing, normalisePricingTable, isTieredPricing } from './payment-rail.js';
|
|
6
|
+
import { hashIp } from './types.js';
|
|
6
7
|
/** Valid tier name: lowercase alphanumeric, hyphens, underscores; 1-32 chars. */
|
|
7
8
|
const TIER_NAME_RE = /^[a-z0-9_-]{1,32}$/;
|
|
8
9
|
/** Normalise a single tier value (number or PriceInfo) to PriceInfo. */
|
|
@@ -81,7 +82,7 @@ export function createTollBooth(config) {
|
|
|
81
82
|
if (l402Data?.payment_hash) {
|
|
82
83
|
const paymentHash = l402Data.payment_hash;
|
|
83
84
|
const statusToken = randomBytes(32).toString('hex');
|
|
84
|
-
storage.storeInvoice(paymentHash, l402Data.invoice ?? '', defaultAmount, l402Data.macaroon, statusToken, req.ip);
|
|
85
|
+
storage.storeInvoice(paymentHash, l402Data.invoice ?? '', defaultAmount, l402Data.macaroon, statusToken, hashIp(req.ip));
|
|
85
86
|
l402Data.payment_url = `/invoice-status/${paymentHash}?token=${statusToken}`;
|
|
86
87
|
l402Data.status_token = statusToken;
|
|
87
88
|
}
|
|
@@ -89,7 +90,6 @@ export function createTollBooth(config) {
|
|
|
89
90
|
timestamp: new Date().toISOString(),
|
|
90
91
|
endpoint: path,
|
|
91
92
|
amountSats: defaultAmount,
|
|
92
|
-
clientIp: req.ip,
|
|
93
93
|
});
|
|
94
94
|
return { action: 'challenge', status: 402, headers: challengeHeaders, body: challengeBody };
|
|
95
95
|
}
|
|
@@ -192,7 +192,6 @@ export function createTollBooth(config) {
|
|
|
192
192
|
remainingBalance: remaining ?? 0,
|
|
193
193
|
latencyMs: Date.now() - start,
|
|
194
194
|
authenticated: true,
|
|
195
|
-
clientIp: req.ip,
|
|
196
195
|
currency: result.currency,
|
|
197
196
|
tier: resolvedTier,
|
|
198
197
|
});
|
|
@@ -217,7 +216,7 @@ export function createTollBooth(config) {
|
|
|
217
216
|
// is debited upfront. If actual usage is lower, the difference is
|
|
218
217
|
// not refunded to the daily budget. This is intentional — the free
|
|
219
218
|
// tier is a quota, not a wallet.
|
|
220
|
-
const check = freeTier.check(req.ip, routeCost);
|
|
219
|
+
const check = freeTier.check(hashIp(req.ip), routeCost);
|
|
221
220
|
if (check.allowed) {
|
|
222
221
|
config.onRequest?.({
|
|
223
222
|
timestamp: new Date().toISOString(),
|
|
@@ -226,7 +225,6 @@ export function createTollBooth(config) {
|
|
|
226
225
|
remainingBalance: 0,
|
|
227
226
|
latencyMs: Date.now() - start,
|
|
228
227
|
authenticated: false,
|
|
229
|
-
clientIp: req.ip,
|
|
230
228
|
});
|
|
231
229
|
return {
|
|
232
230
|
action: 'proxy',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toll-booth.js","sourceRoot":"","sources":["../../src/core/toll-booth.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"toll-booth.js","sourceRoot":"","sources":["../../src/core/toll-booth.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -3,6 +3,12 @@ import type { StorageBackend, StoredInvoice } from '../storage/interface.js';
|
|
|
3
3
|
import type { PaymentRail, PriceInfo, PricingEntry } from './payment-rail.js';
|
|
4
4
|
/** Matches a valid 64-char lowercase hex payment hash. */
|
|
5
5
|
export declare const PAYMENT_HASH_RE: RegExp;
|
|
6
|
+
/**
|
|
7
|
+
* One-way hash of an IP address with a daily-rotating salt.
|
|
8
|
+
* Rate limiting still works (same IP produces same hash within a day),
|
|
9
|
+
* but the raw IP cannot be recovered from storage.
|
|
10
|
+
*/
|
|
11
|
+
export declare function hashIp(ip: string): string;
|
|
6
12
|
export interface TollBoothRequest {
|
|
7
13
|
method: string;
|
|
8
14
|
path: string;
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
// src/core/types.ts
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
1
3
|
/** Matches a valid 64-char lowercase hex payment hash. */
|
|
2
4
|
export const PAYMENT_HASH_RE = /^[0-9a-f]{64}$/;
|
|
5
|
+
/**
|
|
6
|
+
* One-way hash of an IP address with a daily-rotating salt.
|
|
7
|
+
* Rate limiting still works (same IP produces same hash within a day),
|
|
8
|
+
* but the raw IP cannot be recovered from storage.
|
|
9
|
+
*/
|
|
10
|
+
export function hashIp(ip) {
|
|
11
|
+
const daySalt = new Date().toISOString().slice(0, 10);
|
|
12
|
+
return createHash('sha256').update(`${daySalt}:${ip}`).digest('hex').slice(0, 32);
|
|
13
|
+
}
|
|
3
14
|
//# sourceMappingURL=types.js.map
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAA;AAE/C;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,EAAU;IAC/B,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACrD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACnF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -41,8 +41,8 @@ export { clnBackend } from './backends/cln.js';
|
|
|
41
41
|
export type { ClnConfig } from './backends/cln.js';
|
|
42
42
|
export { lnbitsBackend } from './backends/lnbits.js';
|
|
43
43
|
export type { LNbitsConfig } from './backends/lnbits.js';
|
|
44
|
-
export {
|
|
45
|
-
export type {
|
|
44
|
+
export { nwcBackend } from './backends/nwc.js';
|
|
45
|
+
export type { NwcConfig } from './backends/nwc.js';
|
|
46
46
|
export type { LightningBackend, Invoice, InvoiceStatus, PricingTable, BoothConfig, CreditTier, PaymentEvent, RequestEvent, ChallengeEvent, EventHandler, } from './types.js';
|
|
47
47
|
export type { BoothStats } from './stats.js';
|
|
48
48
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -27,5 +27,5 @@ export { phoenixdBackend } from './backends/phoenixd.js';
|
|
|
27
27
|
export { lndBackend } from './backends/lnd.js';
|
|
28
28
|
export { clnBackend } from './backends/cln.js';
|
|
29
29
|
export { lnbitsBackend } from './backends/lnbits.js';
|
|
30
|
-
export {
|
|
30
|
+
export { nwcBackend } from './backends/nwc.js';
|
|
31
31
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AAEf,yBAAyB;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAItD,gBAAgB;AAChB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,iCAAiC,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAEzL,OAAO,EAAE,2BAA2B,EAAE,qCAAqC,EAAE,qCAAqC,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA;AAOlN,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEtE,mFAAmF;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AAEf,yBAAyB;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAItD,gBAAgB;AAChB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,iCAAiC,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAEzL,OAAO,EAAE,2BAA2B,EAAE,qCAAqC,EAAE,qCAAqC,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA;AAOlN,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEtE,mFAAmF;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -50,7 +50,7 @@ export interface StorageBackend {
|
|
|
50
50
|
*/
|
|
51
51
|
extendRecoveryLease(paymentHash: string, leaseMs: number): boolean;
|
|
52
52
|
storeInvoice(paymentHash: string, bolt11: string, amountSats: number, macaroon: string, statusToken: string, clientIp?: string): void;
|
|
53
|
-
/** Count pending (unpaid) invoices for a given client IP. */
|
|
53
|
+
/** Count pending (unpaid) invoices for a given client IP hash. */
|
|
54
54
|
pendingInvoiceCount(clientIp: string): number;
|
|
55
55
|
getInvoice(paymentHash: string): StoredInvoice | undefined;
|
|
56
56
|
getInvoiceForStatus(paymentHash: string, statusToken: string): StoredInvoice | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/storage/interface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAA;IAC5E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IACzD,qHAAqH;IACrH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC9E,sGAAsG;IACtG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;IACpC,qDAAqD;IACrD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC,0GAA0G;IAC1G,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC9G,uGAAuG;IACvG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC5D;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC7E,kFAAkF;IAClF,aAAa,IAAI,YAAY,EAAE,CAAA;IAC/B;;;;OAIG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAA;IACvF;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAClE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrI,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/storage/interface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAA;IAC5E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IACzD,qHAAqH;IACrH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC9E,sGAAsG;IACtG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;IACpC,qDAAqD;IACrD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC,0GAA0G;IAC1G,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC9G,uGAAuG;IACvG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC5D;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC7E,kFAAkF;IAClF,aAAa,IAAI,YAAY,EAAE,CAAA;IAC/B;;;;OAIG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAA;IACvF;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAClE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrI,kEAAkE;IAClE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7C,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IAC1D,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IACxF,+EAA+E;IAC/E,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9C,2FAA2F;IAC3F,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3C,KAAK,IAAI,IAAI,CAAA;CACd"}
|
package/dist/types.d.ts
CHANGED
|
@@ -204,7 +204,6 @@ export interface RequestEvent {
|
|
|
204
204
|
remainingBalance: number;
|
|
205
205
|
latencyMs: number;
|
|
206
206
|
authenticated: boolean;
|
|
207
|
-
clientIp: string;
|
|
208
207
|
currency?: Currency;
|
|
209
208
|
tier?: string;
|
|
210
209
|
}
|
|
@@ -215,7 +214,6 @@ export interface ChallengeEvent {
|
|
|
215
214
|
timestamp: string;
|
|
216
215
|
endpoint: string;
|
|
217
216
|
amountSats: number;
|
|
218
|
-
clientIp: string;
|
|
219
217
|
}
|
|
220
218
|
/**
|
|
221
219
|
* Optional event handlers for observing toll-booth lifecycle events.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/llms.txt
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> toll-booth lets AI agents discover, pay for, and consume any HTTP API using Lightning, Cashu, or NWC - no accounts, no API keys, no human in the loop. It's L402 payment middleware that embeds in your Node.js app as middleware, supporting Express 5, Deno, Bun, and Cloudflare Workers.
|
|
4
4
|
|
|
5
|
-
toll-booth embeds in your existing Node.js application as middleware (not a separate proxy). It supports Express 5, Deno, Bun, and Cloudflare Workers. Five Lightning backends are supported (Phoenixd, LND, Core Lightning, LNbits,
|
|
5
|
+
toll-booth embeds in your existing Node.js application as middleware (not a separate proxy). It supports Express 5, Deno, Bun, and Cloudflare Workers. Five Lightning backends are supported (Phoenixd, LND, Core Lightning, LNbits, NWC), or you can run in Cashu-only mode with no Lightning node at all — ideal for serverless and edge deployments.
|
|
6
6
|
|
|
7
7
|
The closest alternative is Aperture (Lightning Labs), a Go reverse proxy that requires LND. toll-booth is TypeScript middleware that works with any Lightning backend, runs serverless, and supports Cashu ecash payments.
|
|
8
8
|
|
|
@@ -73,7 +73,7 @@ Subpath imports for tree-shaking:
|
|
|
73
73
|
- `@thecryptodonkey/toll-booth/backends/lnd` — LND backend
|
|
74
74
|
- `@thecryptodonkey/toll-booth/backends/cln` — Core Lightning backend
|
|
75
75
|
- `@thecryptodonkey/toll-booth/backends/lnbits` — LNbits backend
|
|
76
|
-
- `@thecryptodonkey/toll-booth/backends/
|
|
76
|
+
- `@thecryptodonkey/toll-booth/backends/nwc` — Nostr Wallet Connect (NIP-47) backend
|
|
77
77
|
- `@thecryptodonkey/toll-booth/storage/sqlite` — SQLite storage (default)
|
|
78
78
|
- `@thecryptodonkey/toll-booth/storage/memory` — in-memory storage (testing)
|
|
79
79
|
- `@thecryptodonkey/toll-booth/adapters/express` — Express middleware factory
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thecryptodonkey/toll-booth",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Monetise any API with HTTP 402 payments. Payment-rail agnostic middleware for Express, Hono, Deno, Bun, and Workers.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -55,9 +55,9 @@
|
|
|
55
55
|
"import": "./dist/backends/cln.js",
|
|
56
56
|
"types": "./dist/backends/cln.d.ts"
|
|
57
57
|
},
|
|
58
|
-
"./backends/
|
|
59
|
-
"import": "./dist/backends/
|
|
60
|
-
"types": "./dist/backends/
|
|
58
|
+
"./backends/nwc": {
|
|
59
|
+
"import": "./dist/backends/nwc.js",
|
|
60
|
+
"types": "./dist/backends/nwc.d.ts"
|
|
61
61
|
},
|
|
62
62
|
"./backends/lnbits": {
|
|
63
63
|
"import": "./dist/backends/lnbits.js",
|
|
@@ -101,6 +101,7 @@
|
|
|
101
101
|
"dependencies": {
|
|
102
102
|
"better-sqlite3": "^11.8.0",
|
|
103
103
|
"macaroon": "^3.0.4",
|
|
104
|
+
"nostr-core": "^0.4.0",
|
|
104
105
|
"qrcode": "^1.5.4"
|
|
105
106
|
},
|
|
106
107
|
"peerDependencies": {
|
|
@@ -124,7 +125,6 @@
|
|
|
124
125
|
"@types/better-sqlite3": "^7.6.0",
|
|
125
126
|
"@types/express": "^5.0.6",
|
|
126
127
|
"@types/qrcode": "^1.5.6",
|
|
127
|
-
"@types/ws": "^8.18.1",
|
|
128
128
|
"express": "^5.2.1",
|
|
129
129
|
"hono": "^4.12.7",
|
|
130
130
|
"patch-package": "^8.0.1",
|
|
@@ -133,7 +133,5 @@
|
|
|
133
133
|
"typescript": "^5.7.0",
|
|
134
134
|
"vitest": "^3.0.0"
|
|
135
135
|
},
|
|
136
|
-
"optionalDependencies": {
|
|
137
|
-
"ws": "^8.19.0"
|
|
138
|
-
}
|
|
136
|
+
"optionalDependencies": {}
|
|
139
137
|
}
|
package/dist/backends/alby.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { LightningBackend } from '../types.js';
|
|
2
|
-
export interface AlbyConfig {
|
|
3
|
-
/** NWC connection URI: nostr+walletconnect://pubkey?relay=wss://...&secret=... */
|
|
4
|
-
nwcUrl: string;
|
|
5
|
-
/** Request timeout in ms (default: 30000) */
|
|
6
|
-
timeout?: number;
|
|
7
|
-
/**
|
|
8
|
-
* Opt into the current insecure JSON-over-relay transport.
|
|
9
|
-
* This exists only for local testing and trusted relay experiments.
|
|
10
|
-
*/
|
|
11
|
-
allowInsecureRelay?: boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Lightning backend adapter for Alby / Nostr Wallet Connect (NWC).
|
|
15
|
-
*
|
|
16
|
-
* This transport is intentionally disabled by default because it sends
|
|
17
|
-
* unsigned, unencrypted JSON directly to the relay and therefore cannot
|
|
18
|
-
* authenticate responses. Pass `allowInsecureRelay: true` only for local
|
|
19
|
-
* testing or a fully trusted relay shim.
|
|
20
|
-
*
|
|
21
|
-
* The `ws` package is imported dynamically so it only needs to be
|
|
22
|
-
* installed when this backend is actually used.
|
|
23
|
-
*/
|
|
24
|
-
export declare function albyBackend(config: AlbyConfig): LightningBackend;
|
|
25
|
-
//# sourceMappingURL=alby.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alby.d.ts","sourceRoot":"","sources":["../../src/backends/alby.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,aAAa,CAAA;AAE3E,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAA;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAkCD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAmEhE"}
|
package/dist/backends/alby.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
function parseNwcUrl(nwcUrl) {
|
|
2
|
-
// Replace the custom scheme so URL parser can handle it
|
|
3
|
-
const url = new URL(nwcUrl.replace('nostr+walletconnect://', 'https://'));
|
|
4
|
-
const pubkey = url.hostname;
|
|
5
|
-
const relay = url.searchParams.get('relay');
|
|
6
|
-
const secret = url.searchParams.get('secret');
|
|
7
|
-
if (!relay)
|
|
8
|
-
throw new Error('NWC URL missing required "relay" parameter');
|
|
9
|
-
if (!secret)
|
|
10
|
-
throw new Error('NWC URL missing required "secret" parameter');
|
|
11
|
-
return { pubkey, relay, secret };
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Lightning backend adapter for Alby / Nostr Wallet Connect (NWC).
|
|
15
|
-
*
|
|
16
|
-
* This transport is intentionally disabled by default because it sends
|
|
17
|
-
* unsigned, unencrypted JSON directly to the relay and therefore cannot
|
|
18
|
-
* authenticate responses. Pass `allowInsecureRelay: true` only for local
|
|
19
|
-
* testing or a fully trusted relay shim.
|
|
20
|
-
*
|
|
21
|
-
* The `ws` package is imported dynamically so it only needs to be
|
|
22
|
-
* installed when this backend is actually used.
|
|
23
|
-
*/
|
|
24
|
-
export function albyBackend(config) {
|
|
25
|
-
if (!config.allowInsecureRelay) {
|
|
26
|
-
throw new Error('albyBackend is disabled by default because its JSON relay transport is unauthenticated; pass allowInsecureRelay: true only for local testing');
|
|
27
|
-
}
|
|
28
|
-
const params = parseNwcUrl(config.nwcUrl);
|
|
29
|
-
const timeoutMs = config.timeout ?? 30_000;
|
|
30
|
-
const MAX_CACHED_INVOICES = 10_000;
|
|
31
|
-
const invoiceMap = new Map();
|
|
32
|
-
return {
|
|
33
|
-
async createInvoice(amountSats, memo) {
|
|
34
|
-
const result = await sendNwcRequest(params, timeoutMs, 'make_invoice', {
|
|
35
|
-
amount: amountSats * 1000, // NWC uses millisats
|
|
36
|
-
description: memo,
|
|
37
|
-
});
|
|
38
|
-
const bolt11 = getStringField(result, 'invoice') ?? getStringField(result, 'bolt11');
|
|
39
|
-
const paymentHash = getStringField(result, 'payment_hash') ?? getStringField(result, 'paymentHash');
|
|
40
|
-
if (!bolt11 || !paymentHash) {
|
|
41
|
-
throw new Error('NWC response missing invoice or payment_hash');
|
|
42
|
-
}
|
|
43
|
-
// Evict oldest entries when cache is full (Map preserves insertion order)
|
|
44
|
-
if (invoiceMap.size >= MAX_CACHED_INVOICES) {
|
|
45
|
-
const oldest = invoiceMap.keys().next().value;
|
|
46
|
-
invoiceMap.delete(oldest);
|
|
47
|
-
}
|
|
48
|
-
invoiceMap.set(paymentHash, { bolt11, paid: false });
|
|
49
|
-
return { bolt11, paymentHash };
|
|
50
|
-
},
|
|
51
|
-
async checkInvoice(paymentHash) {
|
|
52
|
-
const entry = invoiceMap.get(paymentHash);
|
|
53
|
-
if (!entry)
|
|
54
|
-
return { paid: false };
|
|
55
|
-
if (entry.paid) {
|
|
56
|
-
return { paid: true, preimage: entry.preimage };
|
|
57
|
-
}
|
|
58
|
-
const result = await sendNwcRequest(params, timeoutMs, 'lookup_invoice', { payment_hash: paymentHash });
|
|
59
|
-
const lookupRecord = result;
|
|
60
|
-
const paid = isPaid(result);
|
|
61
|
-
const preimage = paid
|
|
62
|
-
? getStringField(lookupRecord, 'payment_preimage') ?? getStringField(lookupRecord, 'preimage')
|
|
63
|
-
: undefined;
|
|
64
|
-
const bolt11 = getStringField(lookupRecord, 'invoice') ?? getStringField(lookupRecord, 'bolt11') ?? entry.bolt11;
|
|
65
|
-
invoiceMap.set(paymentHash, { bolt11, paid, preimage });
|
|
66
|
-
return { paid, preimage };
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
async function sendNwcRequest(params, timeoutMs, method, requestParams) {
|
|
71
|
-
const { default: WebSocket } = await import('ws');
|
|
72
|
-
return new Promise((resolve, reject) => {
|
|
73
|
-
const ws = new WebSocket(params.relay);
|
|
74
|
-
let settled = false;
|
|
75
|
-
const cleanup = () => {
|
|
76
|
-
if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
|
|
77
|
-
ws.close();
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
const finish = (fn) => {
|
|
81
|
-
if (settled)
|
|
82
|
-
return;
|
|
83
|
-
settled = true;
|
|
84
|
-
clearTimeout(timer);
|
|
85
|
-
cleanup();
|
|
86
|
-
fn();
|
|
87
|
-
};
|
|
88
|
-
const timer = setTimeout(() => {
|
|
89
|
-
finish(() => reject(new Error(`NWC ${method} timed out`)));
|
|
90
|
-
}, timeoutMs);
|
|
91
|
-
ws.on('open', () => {
|
|
92
|
-
ws.send(JSON.stringify({
|
|
93
|
-
method,
|
|
94
|
-
params: requestParams,
|
|
95
|
-
}));
|
|
96
|
-
});
|
|
97
|
-
ws.on('message', (data) => {
|
|
98
|
-
finish(() => {
|
|
99
|
-
try {
|
|
100
|
-
const response = JSON.parse(data.toString());
|
|
101
|
-
const error = response.error;
|
|
102
|
-
if (error) {
|
|
103
|
-
reject(new Error(`NWC ${method} failed: ${formatError(error)}`));
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
resolve((response.result ?? response));
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
reject(new Error(`Failed to parse NWC response: ${err}`));
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
ws.on('error', (err) => {
|
|
114
|
-
finish(() => reject(new Error(`NWC WebSocket error: ${err.message}`)));
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
function getStringField(record, key) {
|
|
119
|
-
const value = record[key];
|
|
120
|
-
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
121
|
-
}
|
|
122
|
-
function isPaid(result) {
|
|
123
|
-
return result.paid === true ||
|
|
124
|
-
result.settled === true ||
|
|
125
|
-
result.state === 'paid' ||
|
|
126
|
-
result.state === 'settled' ||
|
|
127
|
-
result.settled_at !== undefined;
|
|
128
|
-
}
|
|
129
|
-
function formatError(error) {
|
|
130
|
-
if (typeof error === 'string')
|
|
131
|
-
return error;
|
|
132
|
-
if (error && typeof error === 'object' && 'message' in error && typeof error.message === 'string') {
|
|
133
|
-
return error.message;
|
|
134
|
-
}
|
|
135
|
-
return 'unknown error';
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=alby.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alby.js","sourceRoot":"","sources":["../../src/backends/alby.ts"],"names":[],"mappings":"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"}
|