@thecryptodonkey/toll-booth 1.1.2 → 1.2.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 +71 -23
- package/dist/adapters/express.d.ts +15 -2
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +62 -16
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/hono.d.ts +62 -0
- package/dist/adapters/hono.d.ts.map +1 -0
- package/dist/adapters/hono.js +202 -0
- package/dist/adapters/hono.js.map +1 -0
- package/dist/adapters/proxy-headers.d.ts.map +1 -1
- package/dist/adapters/proxy-headers.js +1 -0
- package/dist/adapters/proxy-headers.js.map +1 -1
- package/dist/adapters/web-standard.d.ts +9 -1
- package/dist/adapters/web-standard.d.ts.map +1 -1
- package/dist/adapters/web-standard.js +44 -9
- package/dist/adapters/web-standard.js.map +1 -1
- package/dist/backends/cln.d.ts.map +1 -1
- package/dist/backends/cln.js +5 -2
- package/dist/backends/cln.js.map +1 -1
- package/dist/backends/lnbits.d.ts.map +1 -1
- package/dist/backends/lnbits.js +5 -2
- package/dist/backends/lnbits.js.map +1 -1
- package/dist/backends/lnd.d.ts.map +1 -1
- package/dist/backends/lnd.js +4 -1
- package/dist/backends/lnd.js.map +1 -1
- package/dist/backends/phoenixd.d.ts.map +1 -1
- package/dist/backends/phoenixd.js +5 -2
- package/dist/backends/phoenixd.js.map +1 -1
- package/dist/booth.d.ts.map +1 -1
- package/dist/booth.js +36 -6
- package/dist/booth.js.map +1 -1
- package/dist/core/cashu-redeem.d.ts.map +1 -1
- package/dist/core/cashu-redeem.js +15 -5
- package/dist/core/cashu-redeem.js.map +1 -1
- package/dist/core/create-invoice.d.ts +1 -0
- package/dist/core/create-invoice.d.ts.map +1 -1
- package/dist/core/create-invoice.js +29 -3
- package/dist/core/create-invoice.js.map +1 -1
- package/dist/core/invoice-status.d.ts.map +1 -1
- package/dist/core/invoice-status.js +24 -11
- package/dist/core/invoice-status.js.map +1 -1
- package/dist/core/l402-rail.d.ts +11 -0
- package/dist/core/l402-rail.d.ts.map +1 -0
- package/dist/core/l402-rail.js +94 -0
- package/dist/core/l402-rail.js.map +1 -0
- package/dist/core/nwc-pay.d.ts.map +1 -1
- package/dist/core/nwc-pay.js +8 -4
- package/dist/core/nwc-pay.js.map +1 -1
- package/dist/core/payment-rail.d.ts +40 -0
- package/dist/core/payment-rail.d.ts.map +1 -0
- package/dist/core/payment-rail.js +13 -0
- package/dist/core/payment-rail.js.map +1 -0
- package/dist/core/toll-booth.d.ts +2 -1
- package/dist/core/toll-booth.d.ts.map +1 -1
- package/dist/core/toll-booth.js +143 -120
- package/dist/core/toll-booth.js.map +1 -1
- package/dist/core/types.d.ts +17 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/x402-rail.d.ts +4 -0
- package/dist/core/x402-rail.d.ts.map +1 -0
- package/dist/core/x402-rail.js +65 -0
- package/dist/core/x402-rail.js.map +1 -0
- package/dist/core/x402-types.d.ts +29 -0
- package/dist/core/x402-types.d.ts.map +1 -0
- package/dist/core/x402-types.js +7 -0
- package/dist/core/x402-types.js.map +1 -0
- package/dist/demo.js +6 -6
- package/dist/demo.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/macaroon.d.ts +18 -2
- package/dist/macaroon.d.ts.map +1 -1
- package/dist/macaroon.js +61 -8
- package/dist/macaroon.js.map +1 -1
- package/dist/payment-page.d.ts.map +1 -1
- package/dist/payment-page.js +8 -1
- package/dist/payment-page.js.map +1 -1
- package/dist/stats.d.ts.map +1 -1
- package/dist/stats.js +4 -2
- package/dist/stats.js.map +1 -1
- package/dist/storage/interface.d.ts +10 -5
- package/dist/storage/interface.d.ts.map +1 -1
- package/dist/storage/interface.js +0 -1
- package/dist/storage/interface.js.map +1 -1
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +52 -15
- package/dist/storage/memory.js.map +1 -1
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +138 -28
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/types.d.ts +23 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -5
package/README.md
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
[](./LICENSE)
|
|
4
4
|
[](https://primal.net/p/npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2)
|
|
5
|
+
[](https://www.npmjs.com/package/@thecryptodonkey/toll-booth)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](https://nodejs.org/)
|
|
5
8
|
|
|
6
|
-
**
|
|
9
|
+
**Monetise any API with one line of code.**
|
|
7
10
|
|
|
8
11
|

|
|
9
12
|
|
|
10
|
-
[Live demo](https://jokes.trotters.dev/
|
|
13
|
+
[Live demo](https://jokes.trotters.dev/) - pay 21 sats, get a joke. No account. No sign-up. ([API](https://jokes.trotters.dev/api/joke))
|
|
11
14
|
|
|
12
15
|
### Try it now
|
|
13
16
|
|
|
@@ -59,11 +62,11 @@ app.listen(3000)
|
|
|
59
62
|
|
|
60
63
|
Zero accounts. Zero API keys. Zero chargebacks. Zero KYC. Zero vendor lock-in.
|
|
61
64
|
|
|
62
|
-
Your API earns
|
|
65
|
+
Your API earns money the moment it receives a request. Clients pay with Lightning, Cashu ecash, or NWC — no relationship with you required. Payments settle instantly and are cryptographically final — no disputes, no reversals, no Stripe risk reviews.
|
|
63
66
|
|
|
64
67
|
---
|
|
65
68
|
|
|
66
|
-
## Let AI agents pay for your API
|
|
69
|
+
## Let AI agents pay for your API
|
|
67
70
|
|
|
68
71
|
toll-booth is the **server side** of a two-part stack for machine-to-machine payments.
|
|
69
72
|
[l402-mcp](https://github.com/TheCryptoDonkey/l402-mcp) is the **client side** - an MCP server that gives AI agents the ability to discover, pay, and consume L402-gated APIs autonomously.
|
|
@@ -78,11 +81,15 @@ An agent using Claude, GPT, or any MCP-capable model can call your API, receive
|
|
|
78
81
|
|
|
79
82
|
## Live demo
|
|
80
83
|
|
|
84
|
+
Visit [jokes.trotters.dev](https://jokes.trotters.dev/) in a browser to try it - get a free joke, hit the paywall, scan the QR code or pay with a browser wallet extension.
|
|
85
|
+
|
|
86
|
+
Or use the API directly:
|
|
87
|
+
|
|
81
88
|
```bash
|
|
82
89
|
# Get a free joke (1 free per day per IP)
|
|
83
90
|
curl https://jokes.trotters.dev/api/joke
|
|
84
91
|
|
|
85
|
-
# Free tier exhausted - request a Lightning invoice for
|
|
92
|
+
# Free tier exhausted - request a Lightning invoice for 21 sats
|
|
86
93
|
curl -X POST https://jokes.trotters.dev/create-invoice
|
|
87
94
|
|
|
88
95
|
# Pay the invoice with any Lightning wallet, then authenticate
|
|
@@ -101,6 +108,7 @@ curl -H "Authorization: L402 <macaroon>:<preimage>" https://jokes.trotters.dev/a
|
|
|
101
108
|
- **Free tier** - configurable daily allowance per IP
|
|
102
109
|
- **Self-service payment page** - QR codes, tier selector, wallet adapter buttons
|
|
103
110
|
- **SQLite persistence** - WAL mode, automatic invoice expiry pruning
|
|
111
|
+
- **Three framework adapters** - Express, Web Standard (Deno/Bun/Workers), and Hono
|
|
104
112
|
- **Framework-agnostic core** - use the `Booth` facade or wire handlers directly
|
|
105
113
|
|
|
106
114
|
---
|
|
@@ -166,6 +174,45 @@ Deno.serve({ port: 3000 }, async (req: Request) => {
|
|
|
166
174
|
})
|
|
167
175
|
```
|
|
168
176
|
|
|
177
|
+
### Hono
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
import { Hono } from 'hono'
|
|
181
|
+
import { createHonoTollBooth, type TollBoothEnv } from '@thecryptodonkey/toll-booth/hono'
|
|
182
|
+
import { phoenixdBackend } from '@thecryptodonkey/toll-booth/backends/phoenixd'
|
|
183
|
+
import { createTollBooth } from '@thecryptodonkey/toll-booth'
|
|
184
|
+
import { sqliteStorage } from '@thecryptodonkey/toll-booth/storage/sqlite'
|
|
185
|
+
|
|
186
|
+
const storage = sqliteStorage({ path: './toll-booth.db' })
|
|
187
|
+
const engine = createTollBooth({
|
|
188
|
+
backend: phoenixdBackend({ url: 'http://localhost:9740', password: process.env.PHOENIXD_PASSWORD! }),
|
|
189
|
+
storage,
|
|
190
|
+
pricing: { '/api': 10 },
|
|
191
|
+
upstream: 'http://localhost:8080',
|
|
192
|
+
rootKey: process.env.ROOT_KEY!,
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
const tollBooth = createHonoTollBooth({ engine })
|
|
196
|
+
const app = new Hono<TollBoothEnv>()
|
|
197
|
+
|
|
198
|
+
// Mount payment routes
|
|
199
|
+
app.route('/', tollBooth.createPaymentApp({
|
|
200
|
+
storage,
|
|
201
|
+
rootKey: process.env.ROOT_KEY!,
|
|
202
|
+
tiers: [],
|
|
203
|
+
defaultAmount: 1000,
|
|
204
|
+
}))
|
|
205
|
+
|
|
206
|
+
// Gate your API
|
|
207
|
+
app.use('/api/*', tollBooth.authMiddleware)
|
|
208
|
+
app.get('/api/resource', (c) => {
|
|
209
|
+
const balance = c.get('tollBoothCreditBalance')
|
|
210
|
+
return c.json({ message: 'Paid content', balance })
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
export default app
|
|
214
|
+
```
|
|
215
|
+
|
|
169
216
|
### Cashu-only (no Lightning node)
|
|
170
217
|
|
|
171
218
|
```typescript
|
|
@@ -223,24 +270,13 @@ Each backend implements the `LightningBackend` interface (`createInvoice` + `che
|
|
|
223
270
|
|
|
224
271
|
---
|
|
225
272
|
|
|
226
|
-
##
|
|
273
|
+
## What about x402?
|
|
227
274
|
|
|
228
|
-
[x402](https://x402.org) is Coinbase's HTTP 402 payment protocol for on-chain stablecoins.
|
|
229
|
-
|
|
230
|
-
| | x402 | toll-booth |
|
|
231
|
-
|---|---|---|
|
|
232
|
-
| **Settlement** | On-chain (Base, Ethereum) | Lightning Network - sub-second, final |
|
|
233
|
-
| **Settlement time** | Block confirmations (seconds to minutes) | Milliseconds |
|
|
234
|
-
| **Transaction fees** | Gas fees (variable) | Routing fees (fractions of a sat) |
|
|
235
|
-
| **Currency** | USDC on Base | Bitcoin (sats), with stablecoin compatibility via USDT-over-LN bridges |
|
|
236
|
-
| **Infrastructure** | Requires Coinbase Commerce or on-chain wallet | Any of 5 Lightning backends, Cashu ecash, or NWC - self-hosted or hosted |
|
|
237
|
-
| **Vendor lock-in** | Coinbase ecosystem | None - open protocol, open source, any Lightning wallet |
|
|
238
|
-
| **Serverless** | Yes | Yes - Web Standard adapter for Workers, Deno, Bun |
|
|
239
|
-
| **Offline/edge** | No - requires chain access | Yes - Cashu-only mode needs no node at all |
|
|
275
|
+
[x402](https://x402.org) is Coinbase's HTTP 402 payment protocol for on-chain stablecoins. Great — the more protocols normalising HTTP 402 as a payment primitive, the better for everyone.
|
|
240
276
|
|
|
241
|
-
|
|
277
|
+
toll-booth is **payment-rail agnostic**. It already supports Lightning (five backends), Cashu ecash, and Nostr Wallet Connect. x402 is on the roadmap as another pluggable backend. When it lands, a single toll-booth deployment will accept Lightning **and** x402 stablecoins **and** Cashu — simultaneously. The seller doesn't care how they get paid. They just want paid.
|
|
242
278
|
|
|
243
|
-
|
|
279
|
+
The unique value of toll-booth isn't any single payment rail. It's the **middleware layer**: gating, credit accounting, free tiers, volume discounts, upstream proxying, and macaroon credentials — all framework-agnostic, all runtime-agnostic, all payment-rail agnostic. Payment protocols are pluggable backends. toll-booth is the booth.
|
|
244
280
|
|
|
245
281
|
---
|
|
246
282
|
|
|
@@ -272,7 +308,7 @@ Deploy toll-booth as a sidecar (Docker Compose, Kubernetes) or as a standalone g
|
|
|
272
308
|
|
|
273
309
|
## Production checklist
|
|
274
310
|
|
|
275
|
-
- Set a persistent `rootKey
|
|
311
|
+
- **Set a persistent `rootKey`** (64 hex chars / 32 bytes). Without it, a random key is generated per restart and all existing macaroons become invalid. Generate one with: `node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"`
|
|
276
312
|
- Use a persistent `dbPath` (default: `./toll-booth.db`).
|
|
277
313
|
- Enable `strictPricing: true` to prevent unpriced routes from bypassing billing.
|
|
278
314
|
- Ensure your `pricing` keys match the paths the middleware actually sees (after mounting).
|
|
@@ -286,7 +322,7 @@ Deploy toll-booth as a sidecar (Docker Compose, Kubernetes) or as a standalone g
|
|
|
286
322
|
|
|
287
323
|
### sats-for-laughs - build your own paid API
|
|
288
324
|
|
|
289
|
-
[`examples/sats-for-laughs/`](examples/sats-for-laughs/) is the fastest path from "I have an API" to "my API earns sats". It's the same code that runs the [live demo](https://jokes.trotters.dev/
|
|
325
|
+
[`examples/sats-for-laughs/`](examples/sats-for-laughs/) is the fastest path from "I have an API" to "my API earns sats". It's the same code that runs the [live demo](https://jokes.trotters.dev/). Includes a web frontend with QR codes and wallet adapter buttons, plus a JSON API for programmatic access. Clone it, change three env vars, deploy.
|
|
290
326
|
|
|
291
327
|
```bash
|
|
292
328
|
cd examples/sats-for-laughs
|
|
@@ -343,7 +379,7 @@ The five most common options:
|
|
|
343
379
|
|
|
344
380
|
| Option | Type | Description |
|
|
345
381
|
|--------|------|-------------|
|
|
346
|
-
| `adapter` | `'express' \| 'web-standard'` | Framework integration to use |
|
|
382
|
+
| `adapter` | `'express' \| 'web-standard' \| 'hono'` | Framework integration to use |
|
|
347
383
|
| `backend` | `LightningBackend` | Lightning node (optional if using Cashu-only) |
|
|
348
384
|
| `pricing` | `Record<string, number>` | Route pattern to cost in sats |
|
|
349
385
|
| `upstream` | `string` | URL to proxy authorised requests to |
|
|
@@ -357,6 +393,18 @@ See [docs/configuration.md](docs/configuration.md) for the full reference includ
|
|
|
357
393
|
|
|
358
394
|
**[Why L402?](docs/vision.md)** - the case for permissionless, machine-to-machine payments on the web.
|
|
359
395
|
|
|
396
|
+
**[Architecture](docs/architecture.md)** - how toll-booth, token-toll, and l402-mcp fit together.
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## Ecosystem
|
|
401
|
+
|
|
402
|
+
| Project | Role |
|
|
403
|
+
|---------|------|
|
|
404
|
+
| **[toll-booth](https://github.com/TheCryptoDonkey/toll-booth)** | **Payment-rail agnostic HTTP 402 middleware** |
|
|
405
|
+
| [token-toll](https://github.com/TheCryptoDonkey/token-toll) | Pay-per-token AI inference proxy (built on toll-booth) |
|
|
406
|
+
| [l402-mcp](https://github.com/TheCryptoDonkey/l402-mcp) | MCP client — AI agents discover, pay, and consume L402 APIs |
|
|
407
|
+
|
|
360
408
|
---
|
|
361
409
|
|
|
362
410
|
## Support
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RequestHandler } from 'express';
|
|
1
|
+
import type { Request, RequestHandler } from 'express';
|
|
2
2
|
import type { TollBoothEngine } from '../core/toll-booth.js';
|
|
3
3
|
import type { CreateInvoiceDeps } from '../core/create-invoice.js';
|
|
4
4
|
import type { InvoiceStatusDeps } from '../core/invoice-status.js';
|
|
@@ -17,6 +17,12 @@ export interface ExpressMiddlewareConfig {
|
|
|
17
17
|
responseHeaders?: Record<string, string>;
|
|
18
18
|
/** Timeout in milliseconds for upstream proxy requests (default: 30000). */
|
|
19
19
|
upstreamTimeout?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Custom callback to extract client IP from the request.
|
|
22
|
+
* Use this for platform-specific IP resolution.
|
|
23
|
+
* Takes precedence over trustProxy when provided.
|
|
24
|
+
*/
|
|
25
|
+
getClientIp?: (req: Request) => string;
|
|
20
26
|
}
|
|
21
27
|
export declare function createExpressMiddleware(engineOrConfig: TollBoothEngine | ExpressMiddlewareConfig, upstreamArg?: string): RequestHandler;
|
|
22
28
|
/**
|
|
@@ -27,13 +33,20 @@ export declare function createExpressMiddleware(engineOrConfig: TollBoothEngine
|
|
|
27
33
|
* otherwise returns JSON with `{ paid, preimage }`.
|
|
28
34
|
*/
|
|
29
35
|
export declare function createExpressInvoiceStatusHandler(deps: InvoiceStatusDeps): RequestHandler;
|
|
36
|
+
export interface CreateInvoiceHandlerConfig {
|
|
37
|
+
deps: CreateInvoiceDeps;
|
|
38
|
+
trustProxy?: boolean;
|
|
39
|
+
}
|
|
30
40
|
/**
|
|
31
41
|
* Returns an Express `RequestHandler` that creates a new Lightning invoice.
|
|
32
42
|
*
|
|
33
43
|
* Assumes `express.json()` middleware is already mounted. Delegates to the
|
|
34
44
|
* core `handleCreateInvoice` and returns the result.
|
|
45
|
+
*
|
|
46
|
+
* Accepts either a bare `CreateInvoiceDeps` object (backwards-compatible) or
|
|
47
|
+
* a `CreateInvoiceHandlerConfig` for IP-aware rate limiting.
|
|
35
48
|
*/
|
|
36
|
-
export declare function createExpressCreateInvoiceHandler(
|
|
49
|
+
export declare function createExpressCreateInvoiceHandler(depsOrConfig: CreateInvoiceDeps | CreateInvoiceHandlerConfig): RequestHandler;
|
|
37
50
|
/**
|
|
38
51
|
* Returns an Express `RequestHandler` that pays a Lightning invoice via NWC.
|
|
39
52
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/adapters/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/adapters/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA0B,cAAc,EAAE,MAAM,SAAS,CAAA;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAIlE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAW9D;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;CACvC;AA6CD,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,eAAe,GAAG,uBAAuB,EACzD,WAAW,CAAC,EAAE,MAAM,GACnB,cAAc,CAwIhB;AAID;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,iBAAiB,GACtB,cAAc,CA6ChB;AAID,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,iBAAiB,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,iBAAiB,GAAG,0BAA0B,GAC3D,cAAc,CAkChB;AAID;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAUxE;AAID;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAY/E"}
|
package/dist/adapters/express.js
CHANGED
|
@@ -49,16 +49,18 @@ export function createExpressMiddleware(engineOrConfig, upstreamArg) {
|
|
|
49
49
|
const extraHeaders = config.responseHeaders ?? {};
|
|
50
50
|
const upstreamTimeout = config.upstreamTimeout ?? 30_000;
|
|
51
51
|
return async (req, res, _next) => {
|
|
52
|
-
const ip = config.
|
|
53
|
-
? (
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
? req.headers['x-real-ip'].trim()
|
|
52
|
+
const ip = config.getClientIp
|
|
53
|
+
? config.getClientIp(req)
|
|
54
|
+
: config.trustProxy
|
|
55
|
+
? (typeof req.headers['x-forwarded-for'] === 'string'
|
|
56
|
+
? req.headers['x-forwarded-for'].split(',')[0]?.trim()
|
|
58
57
|
: undefined) ??
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
(typeof req.headers['x-real-ip'] === 'string'
|
|
59
|
+
? req.headers['x-real-ip'].trim()
|
|
60
|
+
: undefined) ??
|
|
61
|
+
req.socket.remoteAddress ??
|
|
62
|
+
'127.0.0.1'
|
|
63
|
+
: req.socket.remoteAddress ?? '127.0.0.1';
|
|
62
64
|
const headers = {};
|
|
63
65
|
for (const [key, value] of Object.entries(req.headers)) {
|
|
64
66
|
headers[key] = Array.isArray(value) ? value.join(', ') : value;
|
|
@@ -111,6 +113,23 @@ export function createExpressMiddleware(engineOrConfig, upstreamArg) {
|
|
|
111
113
|
res.setHeader(key, value);
|
|
112
114
|
}
|
|
113
115
|
const buf = Buffer.from(await upstream_res.arrayBuffer());
|
|
116
|
+
// Reconcile estimated cost against actual cost reported by the upstream.
|
|
117
|
+
// Only applies to L402-authenticated requests (result has paymentHash).
|
|
118
|
+
if (result.action === 'proxy' && result.paymentHash) {
|
|
119
|
+
const tollCostHeader = upstream_res.headers.get('x-toll-cost');
|
|
120
|
+
if (tollCostHeader !== null && /^\d+$/.test(tollCostHeader)) {
|
|
121
|
+
const actualCost = parseInt(tollCostHeader, 10);
|
|
122
|
+
if (Number.isSafeInteger(actualCost) && actualCost >= 0) {
|
|
123
|
+
const reconciled = engine.reconcile(result.paymentHash, actualCost);
|
|
124
|
+
if (reconciled.adjusted) {
|
|
125
|
+
res.setHeader('X-Credit-Balance', String(reconciled.newBalance));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
console.warn('[toll-booth] Invalid X-Toll-Cost value:', tollCostHeader?.slice(0, 32));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
114
133
|
res.status(upstream_res.status).send(buf);
|
|
115
134
|
return;
|
|
116
135
|
}
|
|
@@ -124,8 +143,21 @@ export function createExpressMiddleware(engineOrConfig, upstreamArg) {
|
|
|
124
143
|
}
|
|
125
144
|
jsonWithSensitiveHeaders(res, result.body, 402, challengeHeaders);
|
|
126
145
|
}
|
|
127
|
-
catch {
|
|
128
|
-
|
|
146
|
+
catch (err) {
|
|
147
|
+
// Distinguish upstream network errors from programming errors
|
|
148
|
+
if (err instanceof TypeError && (err.message.includes('fetch') || err.message.includes('network'))) {
|
|
149
|
+
res.status(502).json({ error: 'Upstream unavailable' });
|
|
150
|
+
}
|
|
151
|
+
else if (err instanceof DOMException && err.name === 'TimeoutError') {
|
|
152
|
+
res.status(504).json({ error: 'Upstream timeout' });
|
|
153
|
+
}
|
|
154
|
+
else if (err instanceof DOMException && err.name === 'AbortError') {
|
|
155
|
+
res.status(504).json({ error: 'Upstream request aborted' });
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
console.error('[toll-booth] Unexpected error in middleware:', err instanceof Error ? err.message : err);
|
|
159
|
+
res.status(502).json({ error: 'Upstream unavailable' });
|
|
160
|
+
}
|
|
129
161
|
}
|
|
130
162
|
};
|
|
131
163
|
}
|
|
@@ -146,7 +178,8 @@ export function createExpressInvoiceStatusHandler(deps) {
|
|
|
146
178
|
res.status(400).json({ error: 'Invalid payment hash' });
|
|
147
179
|
return;
|
|
148
180
|
}
|
|
149
|
-
const
|
|
181
|
+
const rawToken = typeof req.query.token === 'string' ? req.query.token : undefined;
|
|
182
|
+
const statusToken = rawToken && rawToken.length <= 128 ? rawToken : undefined;
|
|
150
183
|
const accept = req.headers.accept ?? '';
|
|
151
184
|
try {
|
|
152
185
|
if (accept.includes('text/html')) {
|
|
@@ -166,19 +199,32 @@ export function createExpressInvoiceStatusHandler(deps) {
|
|
|
166
199
|
}
|
|
167
200
|
};
|
|
168
201
|
}
|
|
169
|
-
// -- Create invoice handler ---------------------------------------------------
|
|
170
202
|
/**
|
|
171
203
|
* Returns an Express `RequestHandler` that creates a new Lightning invoice.
|
|
172
204
|
*
|
|
173
205
|
* Assumes `express.json()` middleware is already mounted. Delegates to the
|
|
174
206
|
* core `handleCreateInvoice` and returns the result.
|
|
207
|
+
*
|
|
208
|
+
* Accepts either a bare `CreateInvoiceDeps` object (backwards-compatible) or
|
|
209
|
+
* a `CreateInvoiceHandlerConfig` for IP-aware rate limiting.
|
|
175
210
|
*/
|
|
176
|
-
export function createExpressCreateInvoiceHandler(
|
|
211
|
+
export function createExpressCreateInvoiceHandler(depsOrConfig) {
|
|
212
|
+
const config = 'deps' in depsOrConfig ? depsOrConfig : { deps: depsOrConfig };
|
|
213
|
+
const deps = config.deps;
|
|
177
214
|
return async (req, res, _next) => {
|
|
178
215
|
const body = req.body ?? {};
|
|
179
|
-
const
|
|
216
|
+
const ip = config.trustProxy
|
|
217
|
+
? (typeof req.headers['x-forwarded-for'] === 'string'
|
|
218
|
+
? req.headers['x-forwarded-for'].split(',')[0]?.trim()
|
|
219
|
+
: undefined) ??
|
|
220
|
+
(typeof req.headers['x-real-ip'] === 'string'
|
|
221
|
+
? req.headers['x-real-ip'].trim()
|
|
222
|
+
: undefined) ??
|
|
223
|
+
req.socket.remoteAddress ?? '127.0.0.1'
|
|
224
|
+
: req.socket.remoteAddress ?? '127.0.0.1';
|
|
225
|
+
const result = await handleCreateInvoice(deps, { ...body, clientIp: ip });
|
|
180
226
|
if (!result.success) {
|
|
181
|
-
jsonWithSensitiveHeaders(res, { error: result.error, tiers: result.tiers }, 400);
|
|
227
|
+
jsonWithSensitiveHeaders(res, { error: result.error, tiers: result.tiers }, result.status ?? 400);
|
|
182
228
|
return;
|
|
183
229
|
}
|
|
184
230
|
const d = result.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/adapters/express.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/adapters/express.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import type { Context, MiddlewareHandler } from 'hono';
|
|
3
|
+
import type { TollBoothEngine } from '../core/toll-booth.js';
|
|
4
|
+
import type { LightningBackend, CreditTier } from '../types.js';
|
|
5
|
+
import type { StorageBackend } from '../storage/interface.js';
|
|
6
|
+
import type { NwcPayDeps } from '../core/nwc-pay.js';
|
|
7
|
+
import type { CashuRedeemDeps } from '../core/cashu-redeem.js';
|
|
8
|
+
/**
|
|
9
|
+
* Hono context variables set by the toll-booth auth middleware.
|
|
10
|
+
*
|
|
11
|
+
* Consumers should declare `Hono<TollBoothEnv>` to get typed access
|
|
12
|
+
* to these variables via `c.get()`.
|
|
13
|
+
*/
|
|
14
|
+
export type TollBoothEnv = {
|
|
15
|
+
Variables: {
|
|
16
|
+
tollBoothAction: 'proxy' | 'pass';
|
|
17
|
+
tollBoothPaymentHash: string | undefined;
|
|
18
|
+
tollBoothEstimatedCost: number | undefined;
|
|
19
|
+
tollBoothCreditBalance: number | undefined;
|
|
20
|
+
tollBoothFreeRemaining: number | undefined;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export interface HonoTollBoothConfig {
|
|
24
|
+
engine: TollBoothEngine;
|
|
25
|
+
/**
|
|
26
|
+
* Custom callback to extract client IP from the Hono context.
|
|
27
|
+
* Use this for platform-specific IP resolution (e.g. Cloudflare's
|
|
28
|
+
* `CF-Connecting-IP`, or `X-Real-IP` behind a trusted reverse proxy).
|
|
29
|
+
* Falls back to `X-Forwarded-For` header if not provided.
|
|
30
|
+
*/
|
|
31
|
+
getClientIp?: (c: Context) => string;
|
|
32
|
+
}
|
|
33
|
+
export interface PaymentAppConfig {
|
|
34
|
+
storage: StorageBackend;
|
|
35
|
+
rootKey: string;
|
|
36
|
+
tiers: CreditTier[];
|
|
37
|
+
defaultAmount: number;
|
|
38
|
+
backend?: LightningBackend;
|
|
39
|
+
maxPendingPerIp?: number;
|
|
40
|
+
nwcPay?: NwcPayDeps['nwcPay'];
|
|
41
|
+
cashuRedeem?: CashuRedeemDeps['redeem'];
|
|
42
|
+
getClientIp?: (c: Context) => string;
|
|
43
|
+
}
|
|
44
|
+
export interface HonoTollBooth {
|
|
45
|
+
authMiddleware: MiddlewareHandler<TollBoothEnv>;
|
|
46
|
+
engine: TollBoothEngine;
|
|
47
|
+
createPaymentApp: (paymentConfig: PaymentAppConfig) => Hono;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a Hono middleware that enforces L402 payment gating.
|
|
51
|
+
*
|
|
52
|
+
* On `challenge` results a 402 response is returned with invoice details.
|
|
53
|
+
* On `pass` or `proxy` results, context variables are set and the next
|
|
54
|
+
* handler is called:
|
|
55
|
+
* - `tollBoothAction`: `'proxy'` or `'pass'`
|
|
56
|
+
* - `tollBoothPaymentHash`: payment hash (proxy only)
|
|
57
|
+
* - `tollBoothEstimatedCost`: estimated cost in credits (proxy only)
|
|
58
|
+
* - `tollBoothCreditBalance`: remaining balance (proxy only)
|
|
59
|
+
* - `tollBoothFreeRemaining`: remaining free-tier requests (proxy only)
|
|
60
|
+
*/
|
|
61
|
+
export declare function createHonoTollBooth(config: HonoTollBoothConfig): HonoTollBooth;
|
|
62
|
+
//# sourceMappingURL=hono.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../src/adapters/hono.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAM7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAyB9D;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE;QACT,eAAe,EAAE,OAAO,GAAG,MAAM,CAAA;QACjC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAA;QACxC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3C,CAAA;CACF,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAA;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACvC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAA;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,EAAE,eAAe,CAAA;IACvB,gBAAgB,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAC5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAqL9E"}
|