@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 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, Alby
113
- - **Alternative payment methods** - Nostr Wallet Connect (NWC) and Cashu ecash tokens
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 per IP
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 { albyBackend } from '@thecryptodonkey/toll-booth/backends/alby'
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
- | Alby (NWC) | Experimental | JSON relay transport is unauthenticated; only enable with `allowInsecureRelay: true` for local testing or a fully trusted relay |
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;AAE7D,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,CA4F9B"}
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
- if (deps.maxPendingPerIp && request.clientIp) {
17
- const pending = deps.storage.pendingInvoiceCount(request.clientIp);
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, request.clientIp);
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":"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"}
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;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGnC,8EAA8E;AAC9E,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAaxE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAuB,EACvB,OAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACtE,IAAI,IAAI,CAAC,eAAe,IAAI,MAAM,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;YACxD,IAAI,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;YACvF,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAA;YACzE,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAA;gBACzE,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC9B,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;oBACpC,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,GAAG,4CAA4C,EAAE,CAAA;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAA;QAEhE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC,IAAI,eAAe,GAAG,qBAAqB,EAAE,CAAC;YAC7G,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAA;QAC3E,CAAC;QAED,wCAAwC;QACxC,IAAI,UAAU,GAAG,eAAe,CAAA;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,eAAe,CAAC,CAAA;YACnE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,8CAA8C;oBACrD,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB,CAAA;YACH,CAAC;YACD,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAC9B,CAAC;QAED,IAAI,WAAmB,CAAA;QACvB,IAAI,MAA0B,CAAA;QAE9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,YAAY,CAAA;YAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAC9C,eAAe,EACf,GAAG,KAAK,KAAK,UAAU,cAAc,CACtC,CAAA;YACD,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;YACjC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,0CAA0C;YAC1C,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACrF,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEnD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAE/F,MAAM,KAAK,GAAG,MAAM;YAClB,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CACnB,aAAa,MAAM,EAAE,CAAC,WAAW,EAAE,EACnC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAC3B;YACH,CAAC,CAAC,SAAS,CAAA;QAEb,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,IAAI,EAAE;gBACpB,WAAW;gBACX,UAAU,EAAE,mBAAmB,WAAW,UAAU,WAAW,EAAE;gBACjE,UAAU,EAAE,eAAe;gBAC3B,UAAU;gBACV,QAAQ;gBACR,KAAK,EAAE,KAAK,IAAI,EAAE;aACnB;SACF,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC7F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAA;IAC9D,CAAC;AACH,CAAC"}
@@ -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;AAI1E,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;AAmBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,CAqR5E"}
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"}
@@ -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;AAW5F,iFAAiF;AACjF,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAEzC,wEAAwE;AACxE,SAAS,kBAAkB,CAAC,KAAyB;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;AAC5D,CAAC;AAED,+DAA+D;AAC/D,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,MAAM,MAAM,GAA8B,EAAE,CAAA;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAA2B;IACzD,kEAAkE;IAClE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;YACzE,iDAAiD;YACjD,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,iCAAiC,CAAC,CAAA;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,IAAI,IAAI,CAAA;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACnD,IAAI,QAAQ,GAAqB,IAAI,CAAA;IACrC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC1B,QAAQ,GAAG,gBAAgB,IAAI,EAAE;YAC/B,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC;YACjC,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;IAC1C,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAE9B,wEAAwE;IACxE,kEAAkE;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI;QAC5B,cAAc,CAAC;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO;YACP,aAAa;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;KACH,CAAA;IACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,qBAAqB,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAEjG,MAAM,mBAAmB,GAAG,MAAM,CAAA;IAClC,MAAM,UAAU,GAAG,MAAM,CAAA;IACzB,MAAM,cAAc,GAAG,IAAI,GAAG,EAA4D,CAAA;IAE1F,OAAO;QACL,QAAQ;QACR,QAAQ;QAER,KAAK,CAAC,MAAM,CAAC,GAAqB;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;YACrB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAExC,gEAAgE;YAChE,KAAK,UAAU,cAAc;gBAC3B,MAAM,gBAAgB,GAA2B,EAAE,CAAA;gBACnD,MAAM,aAAa,GAA4B,EAAE,CAAA;gBAEjD,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;gBAE9E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;wBAAE,SAAQ;oBACtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;oBAChE,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;oBACjD,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAC7C,CAAC;gBAED,aAAa,CAAC,OAAO,GAAG,mBAAmB,CAAA;gBAE3C,iDAAiD;gBACjD,IAAI,WAAW,KAAK,SAAS,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9D,aAAa,CAAC,KAAK,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;gBACtD,CAAC;gBAED,+CAA+C;gBAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAA2C,CAAA;gBAC1E,IAAI,QAAQ,EAAE,YAAY,EAAE,CAAC;oBAC3B,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAsB,CAAA;oBACnD,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;oBACnD,OAAO,CAAC,YAAY,CAClB,WAAW,EACV,QAAQ,CAAC,OAAkB,IAAI,EAAE,EAClC,aAAa,EACb,QAAQ,CAAC,QAAkB,EAC3B,WAAW,EACX,GAAG,CAAC,EAAE,CACP,CAAA;oBACD,QAAQ,CAAC,WAAW,GAAG,mBAAmB,WAAW,UAAU,WAAW,EAAE,CAAA;oBAC5E,QAAQ,CAAC,YAAY,GAAG,WAAW,CAAA;gBACrC,CAAC;gBAED,MAAM,CAAC,WAAW,EAAE,CAAC;oBACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,aAAa;oBACzB,QAAQ,EAAE,GAAG,CAAC,EAAE;iBACjB,CAAC,CAAA;gBAEF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;YAC7F,CAAC;YAED,gEAAgE;YAChE,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;YAClD,CAAC;YAED,gCAAgC;YAChC,IAAI,SAAoB,CAAA;YACxB,IAAI,YAAgC,CAAA;YAEpC,IAAI,WAAW,KAAK,SAAS,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,SAAS,CAAA;gBAErC,4BAA4B;gBAC5B,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzD,OAAO,cAAc,EAAE,CAAA;gBACzB,CAAC;gBAED,6BAA6B;gBAC7B,IAAI,CAAC,CAAC,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC;oBAC9B,OAAO,cAAc,EAAE,CAAA;gBACzB,CAAC;gBAED,SAAS,GAAG,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;gBACpD,YAAY,GAAG,OAAO,CAAA;YACxB,CAAC;iBAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBACrC,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;YAC3C,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;YACrC,CAAC;YAED,gBAAgB;YAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;oBAEtD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;wBACzB,mCAAmC;wBACnC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,KAAK,KAAK;4BACpC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;4BACtB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,aAAa,CAAC,CAAA;wBAErC,2DAA2D;wBAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;4BAClC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gCACxC,MAAK,CAAE,4BAA4B;4BACrC,CAAC;4BACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gCACtC,MAAK,CAAE,2CAA2C;4BACpD,CAAC;wBACH,CAAC;wBAED,uCAAuC;wBACvC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;4BAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;4BACpE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gCACnB,mDAAmD;gCACnD,MAAK;4BACP,CAAC;wBACH,CAAC;wBAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ;4BACxC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC;4BACpD,CAAC,CAAC,SAAS,CAAA;wBAEb,gEAAgE;wBAChE,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC9D,MAAM,cAAc,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;4BAC9C,MAAM,CAAC,SAAS,EAAE,CAAC;gCACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gCACnC,WAAW,EAAE,MAAM,CAAC,SAAS;gCAC7B,UAAU,EAAE,cAAc;gCAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;6BAC1B,CAAC,CAAA;wBACJ,CAAC;wBAED,wDAAwD;wBACxD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;4BACrB,sBAAsB;4BACtB,IAAI,cAAc,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;gCAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gCACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;oCAC1C,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,UAAU;wCAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gCAC7D,CAAC;4BACH,CAAC;4BACD,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;wBAC3F,CAAC;wBAED,yBAAyB;wBACzB,MAAM,OAAO,GAA2B,EAAE,CAAA;wBAC1C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;4BAC5B,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;wBACjD,CAAC;wBACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;4BAC/B,OAAO,CAAC,aAAa,CAAC,GAAG,YAAY,CAAA;wBACvC,CAAC;wBACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;4BACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;gCAChE,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oCAChC,OAAO,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;gCACvG,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,MAAM,CAAC,SAAS,EAAE,CAAC;4BACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BACnC,QAAQ,EAAE,IAAI;4BACd,YAAY,EAAE,IAAI;4BAClB,gBAAgB,EAAE,SAAS,IAAI,CAAC;4BAChC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;4BAC7B,aAAa,EAAE,IAAI;4BACnB,QAAQ,EAAE,GAAG,CAAC,EAAE;4BAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,IAAI,EAAE,YAAY;yBACnB,CAAC,CAAA;wBAEF,OAAO;4BACL,MAAM,EAAE,OAAO;4BACf,QAAQ;4BACR,OAAO;4BACP,WAAW,EAAE,MAAM,CAAC,SAAS;4BAC7B,aAAa,EAAE,IAAI;4BACnB,aAAa,EAAE,SAAS;4BACxB,IAAI,EAAE,YAAY;yBACnB,CAAA;oBACH,CAAC;oBAED,gFAAgF;oBAChF,MAAK;gBACP,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,aAAa,CAAA;gBAEpE,kEAAkE;gBAClE,kEAAkE;gBAClE,mEAAmE;gBACnE,iCAAiC;gBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;gBAE/C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,MAAM,CAAC,SAAS,EAAE,CAAC;wBACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACnC,QAAQ,EAAE,IAAI;wBACd,YAAY,EAAE,QAAQ,YAAY,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBAChE,gBAAgB,EAAE,CAAC;wBACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;wBAC7B,aAAa,EAAE,KAAK;wBACpB,QAAQ,EAAE,GAAG,CAAC,EAAE;qBACjB,CAAC,CAAA;oBACF,OAAO;wBACL,MAAM,EAAE,OAAO;wBACf,QAAQ;wBACR,OAAO,EAAE,EAAE,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;wBACxD,aAAa,EAAE,KAAK,CAAC,SAAS;qBAC/B,CAAA;gBACH,CAAC;YACH,CAAC;YAED,OAAO,cAAc,EAAE,CAAA;QACzB,CAAC;QAED,SAAS,CAAC,WAAmB,EAAE,UAAkB;YAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;YAChF,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,UAAU,CAAA;YACrC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;YAChG,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC5E,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;gBACxD,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,KAAK,IAAI,IAAI,QAAQ,WAAW,iBAAiB,UAAU,EAAE,CAAC,CAAA;YACnI,CAAC;YACD,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YAClC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;QAC9C,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"toll-booth.js","sourceRoot":"","sources":["../../src/core/toll-booth.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAKA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAA"}
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 { albyBackend } from './backends/alby.js';
45
- export type { AlbyConfig } from './backends/alby.js';
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
@@ -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 { albyBackend } from './backends/alby.js';
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,WAAW,EAAE,MAAM,oBAAoB,CAAA"}
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,6DAA6D;IAC7D,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"}
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.
@@ -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, Alby), or you can run in Cashu-only mode with no Lightning node at all — ideal for serverless and edge deployments.
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/alby` — Alby / NWC backend
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": "1.4.0",
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/alby": {
59
- "import": "./dist/backends/alby.js",
60
- "types": "./dist/backends/alby.d.ts"
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
  }
@@ -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"}
@@ -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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"}