@thecryptodonkey/toll-booth 1.1.2 → 1.2.1
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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAA4C,MAAM,gBAAgB,CAAA;AAI9F,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAkc1E"}
|
package/dist/storage/sqlite.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/storage/sqlite.ts
|
|
2
|
+
import { timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import Database from 'better-sqlite3';
|
|
3
4
|
const DEFAULT_LEASE_MS = 30_000;
|
|
4
5
|
export function sqliteStorage(config) {
|
|
@@ -8,6 +9,8 @@ export function sqliteStorage(config) {
|
|
|
8
9
|
CREATE TABLE IF NOT EXISTS credits (
|
|
9
10
|
payment_hash TEXT PRIMARY KEY,
|
|
10
11
|
balance INTEGER NOT NULL DEFAULT 0,
|
|
12
|
+
balance_sats INTEGER NOT NULL DEFAULT 0,
|
|
13
|
+
balance_usd INTEGER NOT NULL DEFAULT 0,
|
|
11
14
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
12
15
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
13
16
|
)
|
|
@@ -63,26 +66,69 @@ export function sqliteStorage(config) {
|
|
|
63
66
|
catch {
|
|
64
67
|
// Column already exists — ignore
|
|
65
68
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
// Migration: add client_ip column to invoices table.
|
|
70
|
+
try {
|
|
71
|
+
db.exec('ALTER TABLE invoices ADD COLUMN client_ip TEXT');
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Column already exists — ignore
|
|
75
|
+
}
|
|
76
|
+
// Migration: add dual-currency balance columns to credits table.
|
|
77
|
+
try {
|
|
78
|
+
db.exec('ALTER TABLE credits ADD COLUMN balance_sats INTEGER NOT NULL DEFAULT 0');
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Column already exists — ignore
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
db.exec('ALTER TABLE credits ADD COLUMN balance_usd INTEGER NOT NULL DEFAULT 0');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Column already exists — ignore
|
|
88
|
+
}
|
|
89
|
+
// Copy legacy balance into balance_sats for existing rows.
|
|
90
|
+
db.exec('UPDATE credits SET balance_sats = balance WHERE balance > 0 AND balance_sats = 0');
|
|
91
|
+
// Per-currency prepared statements for credit operations
|
|
92
|
+
const stmtCreditSat = db.prepare(`
|
|
93
|
+
INSERT INTO credits (payment_hash, balance, balance_sats)
|
|
94
|
+
VALUES (?, ?, ?)
|
|
69
95
|
ON CONFLICT(payment_hash) DO UPDATE SET
|
|
70
96
|
balance = balance + excluded.balance,
|
|
97
|
+
balance_sats = balance_sats + excluded.balance_sats,
|
|
98
|
+
updated_at = datetime('now')
|
|
99
|
+
`);
|
|
100
|
+
const stmtCreditUsd = db.prepare(`
|
|
101
|
+
INSERT INTO credits (payment_hash, balance_usd)
|
|
102
|
+
VALUES (?, ?)
|
|
103
|
+
ON CONFLICT(payment_hash) DO UPDATE SET
|
|
104
|
+
balance_usd = balance_usd + excluded.balance_usd,
|
|
71
105
|
updated_at = datetime('now')
|
|
72
106
|
`);
|
|
73
|
-
const
|
|
74
|
-
UPDATE credits SET balance = balance - ?, updated_at = datetime('now')
|
|
75
|
-
WHERE payment_hash = ? AND
|
|
107
|
+
const stmtDebitSat = db.prepare(`
|
|
108
|
+
UPDATE credits SET balance = balance - ?, balance_sats = balance_sats - ?, updated_at = datetime('now')
|
|
109
|
+
WHERE payment_hash = ? AND balance_sats >= ?
|
|
76
110
|
`);
|
|
77
|
-
const
|
|
111
|
+
const stmtDebitUsd = db.prepare(`
|
|
112
|
+
UPDATE credits SET balance_usd = balance_usd - ?, updated_at = datetime('now')
|
|
113
|
+
WHERE payment_hash = ? AND balance_usd >= ?
|
|
114
|
+
`);
|
|
115
|
+
const stmtBalanceSat = db.prepare('SELECT balance_sats AS balance FROM credits WHERE payment_hash = ?');
|
|
116
|
+
const stmtBalanceUsd = db.prepare('SELECT balance_usd AS balance FROM credits WHERE payment_hash = ?');
|
|
117
|
+
function debitFor(currency) { return currency === 'usd' ? stmtDebitUsd : stmtDebitSat; }
|
|
118
|
+
function balanceFor(currency) { return currency === 'usd' ? stmtBalanceUsd : stmtBalanceSat; }
|
|
78
119
|
const stmtStoreInvoice = db.prepare(`
|
|
79
|
-
INSERT OR IGNORE INTO invoices (payment_hash, bolt11, amount_sats, macaroon, status_token)
|
|
80
|
-
VALUES (?, ?, ?, ?, ?)
|
|
120
|
+
INSERT OR IGNORE INTO invoices (payment_hash, bolt11, amount_sats, macaroon, status_token, client_ip)
|
|
121
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
122
|
+
`);
|
|
123
|
+
const stmtPendingInvoiceCount = db.prepare(`
|
|
124
|
+
SELECT COUNT(*) as count FROM invoices i
|
|
125
|
+
LEFT JOIN settlements s ON i.payment_hash = s.payment_hash
|
|
126
|
+
WHERE i.client_ip = ? AND s.payment_hash IS NULL
|
|
81
127
|
`);
|
|
82
128
|
const stmtGetInvoice = db.prepare('SELECT payment_hash, bolt11, amount_sats, macaroon, created_at FROM invoices WHERE payment_hash = ?');
|
|
83
|
-
const
|
|
129
|
+
const stmtGetInvoiceWithToken = db.prepare(`SELECT payment_hash, bolt11, amount_sats, macaroon, status_token, created_at
|
|
84
130
|
FROM invoices
|
|
85
|
-
WHERE payment_hash =
|
|
131
|
+
WHERE payment_hash = ?`);
|
|
86
132
|
const stmtSettle = db.prepare('INSERT OR IGNORE INTO settlements (payment_hash, settlement_secret) VALUES (?, ?)');
|
|
87
133
|
const stmtIsSettled = db.prepare('SELECT 1 FROM settlements WHERE payment_hash = ?');
|
|
88
134
|
const stmtGetSettlementSecret = db.prepare('SELECT settlement_secret FROM settlements WHERE payment_hash = ?');
|
|
@@ -112,10 +158,11 @@ export function sqliteStorage(config) {
|
|
|
112
158
|
const stmtPruneInvoices = db.prepare(`
|
|
113
159
|
DELETE FROM invoices
|
|
114
160
|
WHERE datetime(created_at) <= datetime('now', '-' || ? || ' seconds')
|
|
161
|
+
AND payment_hash NOT IN (SELECT payment_hash FROM claims)
|
|
115
162
|
`);
|
|
116
163
|
const stmtPruneZeroCredits = db.prepare(`
|
|
117
164
|
DELETE FROM credits
|
|
118
|
-
WHERE
|
|
165
|
+
WHERE balance_sats <= 0 AND balance_usd <= 0
|
|
119
166
|
AND datetime(updated_at) <= datetime('now', '-' || ? || ' seconds')
|
|
120
167
|
`);
|
|
121
168
|
const stmtPruneSettlements = db.prepare(`
|
|
@@ -135,10 +182,17 @@ export function sqliteStorage(config) {
|
|
|
135
182
|
const r = stmtClaim.run(paymentHash, token, leaseExpiresAt);
|
|
136
183
|
return r.changes > 0;
|
|
137
184
|
});
|
|
138
|
-
const txnSettleWithCredit = db.transaction((paymentHash, amount, settlementSecret) => {
|
|
185
|
+
const txnSettleWithCredit = db.transaction((paymentHash, amount, settlementSecret, currency = 'sat') => {
|
|
186
|
+
if (amount < 0)
|
|
187
|
+
throw new RangeError('settleWithCredit amount must not be negative');
|
|
139
188
|
const r = stmtSettle.run(paymentHash, settlementSecret ?? null);
|
|
140
189
|
if (r.changes > 0) {
|
|
141
|
-
|
|
190
|
+
if (currency === 'usd') {
|
|
191
|
+
stmtCreditUsd.run(paymentHash, amount);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
stmtCreditSat.run(paymentHash, amount, amount);
|
|
195
|
+
}
|
|
142
196
|
stmtDeleteClaim.run(paymentHash);
|
|
143
197
|
return true;
|
|
144
198
|
}
|
|
@@ -157,27 +211,74 @@ export function sqliteStorage(config) {
|
|
|
157
211
|
claimedAt: row.claimed_at,
|
|
158
212
|
};
|
|
159
213
|
});
|
|
160
|
-
const
|
|
161
|
-
|
|
214
|
+
const stmtAdjustCreditsSat = db.prepare(`
|
|
215
|
+
UPDATE credits SET
|
|
216
|
+
balance_sats = MAX(0, balance_sats + ?),
|
|
217
|
+
balance = MAX(0, balance + ?),
|
|
218
|
+
updated_at = datetime('now')
|
|
219
|
+
WHERE payment_hash = ?
|
|
220
|
+
`);
|
|
221
|
+
const stmtAdjustCreditsUsd = db.prepare(`
|
|
222
|
+
UPDATE credits SET balance_usd = MAX(0, balance_usd + ?), updated_at = datetime('now')
|
|
223
|
+
WHERE payment_hash = ?
|
|
224
|
+
`);
|
|
225
|
+
const txnAdjustCredits = db.transaction((paymentHash, delta, currency = 'sat') => {
|
|
226
|
+
const stmtBal = balanceFor(currency);
|
|
227
|
+
const row = stmtBal.get(paymentHash);
|
|
228
|
+
if (!row) {
|
|
229
|
+
const newBalance = Math.max(0, delta);
|
|
230
|
+
if (currency === 'usd') {
|
|
231
|
+
stmtCreditUsd.run(paymentHash, newBalance);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
stmtCreditSat.run(paymentHash, newBalance, newBalance);
|
|
235
|
+
}
|
|
236
|
+
return newBalance;
|
|
237
|
+
}
|
|
238
|
+
if (currency === 'usd') {
|
|
239
|
+
stmtAdjustCreditsUsd.run(delta, paymentHash);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
stmtAdjustCreditsSat.run(delta, delta, paymentHash);
|
|
243
|
+
}
|
|
244
|
+
const updated = stmtBal.get(paymentHash);
|
|
245
|
+
return updated.balance;
|
|
246
|
+
});
|
|
247
|
+
const txnDebit = db.transaction((paymentHash, amount, currency = 'sat') => {
|
|
248
|
+
const stmtBal = balanceFor(currency);
|
|
249
|
+
const row = stmtBal.get(paymentHash);
|
|
162
250
|
const current = row?.balance ?? 0;
|
|
163
251
|
if (current < amount) {
|
|
164
252
|
return { success: false, remaining: current };
|
|
165
253
|
}
|
|
166
|
-
const
|
|
254
|
+
const stmtDeb = debitFor(currency);
|
|
255
|
+
const result = currency === 'sat'
|
|
256
|
+
? stmtDeb.run(amount, amount, paymentHash, amount)
|
|
257
|
+
: stmtDeb.run(amount, paymentHash, amount);
|
|
167
258
|
if (result.changes === 0) {
|
|
168
259
|
return { success: false, remaining: current };
|
|
169
260
|
}
|
|
170
261
|
return { success: true, remaining: current - amount };
|
|
171
262
|
});
|
|
172
263
|
return {
|
|
173
|
-
credit(paymentHash, amount) {
|
|
174
|
-
|
|
264
|
+
credit(paymentHash, amount, currency = 'sat') {
|
|
265
|
+
if (amount <= 0)
|
|
266
|
+
throw new RangeError('credit amount must be positive');
|
|
267
|
+
if (currency === 'usd') {
|
|
268
|
+
stmtCreditUsd.run(paymentHash, amount);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
stmtCreditSat.run(paymentHash, amount, amount);
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
debit(paymentHash, amount, currency = 'sat') {
|
|
275
|
+
return txnDebit(paymentHash, amount, currency);
|
|
175
276
|
},
|
|
176
|
-
|
|
177
|
-
return
|
|
277
|
+
adjustCredits(paymentHash, delta, currency = 'sat') {
|
|
278
|
+
return txnAdjustCredits(paymentHash, delta, currency);
|
|
178
279
|
},
|
|
179
|
-
balance(paymentHash) {
|
|
180
|
-
const row =
|
|
280
|
+
balance(paymentHash, currency = 'sat') {
|
|
281
|
+
const row = balanceFor(currency).get(paymentHash);
|
|
181
282
|
return row?.balance ?? 0;
|
|
182
283
|
},
|
|
183
284
|
settle(paymentHash) {
|
|
@@ -187,8 +288,8 @@ export function sqliteStorage(config) {
|
|
|
187
288
|
isSettled(paymentHash) {
|
|
188
289
|
return !!stmtIsSettled.get(paymentHash);
|
|
189
290
|
},
|
|
190
|
-
settleWithCredit(paymentHash, amount, settlementSecret) {
|
|
191
|
-
return txnSettleWithCredit(paymentHash, amount, settlementSecret);
|
|
291
|
+
settleWithCredit(paymentHash, amount, settlementSecret, currency = 'sat') {
|
|
292
|
+
return txnSettleWithCredit(paymentHash, amount, settlementSecret, currency);
|
|
192
293
|
},
|
|
193
294
|
getSettlementSecret(paymentHash) {
|
|
194
295
|
const row = stmtGetSettlementSecret.get(paymentHash);
|
|
@@ -216,8 +317,12 @@ export function sqliteStorage(config) {
|
|
|
216
317
|
const result = stmtExtendRecoveryLease.run(leaseExpiresAt, paymentHash);
|
|
217
318
|
return result.changes > 0;
|
|
218
319
|
},
|
|
219
|
-
storeInvoice(paymentHash, bolt11, amountSats, macaroon, statusToken) {
|
|
220
|
-
stmtStoreInvoice.run(paymentHash, bolt11, amountSats, macaroon, statusToken);
|
|
320
|
+
storeInvoice(paymentHash, bolt11, amountSats, macaroon, statusToken, clientIp) {
|
|
321
|
+
stmtStoreInvoice.run(paymentHash, bolt11, amountSats, macaroon, statusToken, clientIp ?? null);
|
|
322
|
+
},
|
|
323
|
+
pendingInvoiceCount(clientIp) {
|
|
324
|
+
const row = stmtPendingInvoiceCount.get(clientIp);
|
|
325
|
+
return row.count;
|
|
221
326
|
},
|
|
222
327
|
getInvoice(paymentHash) {
|
|
223
328
|
const row = stmtGetInvoice.get(paymentHash);
|
|
@@ -232,9 +337,14 @@ export function sqliteStorage(config) {
|
|
|
232
337
|
};
|
|
233
338
|
},
|
|
234
339
|
getInvoiceForStatus(paymentHash, statusToken) {
|
|
235
|
-
const row =
|
|
340
|
+
const row = stmtGetInvoiceWithToken.get(paymentHash);
|
|
236
341
|
if (!row)
|
|
237
342
|
return undefined;
|
|
343
|
+
// Timing-safe comparison to prevent token enumeration via timing side-channel
|
|
344
|
+
const storedBuf = Buffer.from(row.status_token);
|
|
345
|
+
const providedBuf = Buffer.from(statusToken);
|
|
346
|
+
if (storedBuf.length !== providedBuf.length || !timingSafeEqual(storedBuf, providedBuf))
|
|
347
|
+
return undefined;
|
|
238
348
|
return {
|
|
239
349
|
paymentHash: row.payment_hash,
|
|
240
350
|
bolt11: row.bolt11,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,QAAQ,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -43,13 +43,16 @@ export interface LightningBackend {
|
|
|
43
43
|
*/
|
|
44
44
|
checkInvoice(paymentHash: string): Promise<InvoiceStatus>;
|
|
45
45
|
}
|
|
46
|
+
import type { Currency, PricingEntry } from './core/payment-rail.js';
|
|
47
|
+
import type { X402RailConfig } from './core/x402-types.js';
|
|
46
48
|
/**
|
|
47
|
-
* Pricing table mapping route patterns to amounts
|
|
49
|
+
* Pricing table mapping route patterns to amounts.
|
|
48
50
|
*
|
|
49
|
-
* Keys are route patterns (e.g. `"/route"`)
|
|
50
|
-
*
|
|
51
|
+
* Keys are route patterns (e.g. `"/route"`). Values are either a number
|
|
52
|
+
* (satoshis, backward-compatible) or a PriceInfo object for dual-currency
|
|
53
|
+
* pricing (e.g. `{ sats: 10, usd: 1 }`).
|
|
51
54
|
*/
|
|
52
|
-
export type PricingTable = Record<string,
|
|
55
|
+
export type PricingTable = Record<string, PricingEntry>;
|
|
53
56
|
/**
|
|
54
57
|
* A credit tier offering volume discounts.
|
|
55
58
|
*
|
|
@@ -63,6 +66,10 @@ export interface CreditTier {
|
|
|
63
66
|
creditSats: number;
|
|
64
67
|
/** Human-readable label for this tier. */
|
|
65
68
|
label: string;
|
|
69
|
+
/** x402 tier amount in cents (USD). */
|
|
70
|
+
amountUsd?: number;
|
|
71
|
+
/** x402 tier credit in cents (USD). */
|
|
72
|
+
creditUsd?: number;
|
|
66
73
|
}
|
|
67
74
|
/**
|
|
68
75
|
* Configuration for a toll-booth instance.
|
|
@@ -145,6 +152,8 @@ export interface BoothConfig {
|
|
|
145
152
|
* When provided, the payment page shows a Cashu option.
|
|
146
153
|
*/
|
|
147
154
|
redeemCashu?: (token: string, paymentHash: string) => Promise<number>;
|
|
155
|
+
/** x402 stablecoin payment rail configuration. */
|
|
156
|
+
x402?: X402RailConfig;
|
|
148
157
|
/**
|
|
149
158
|
* Timeout in milliseconds for upstream proxy requests.
|
|
150
159
|
* Defaults to 30000 (30 seconds).
|
|
@@ -156,6 +165,13 @@ export interface BoothConfig {
|
|
|
156
165
|
* Default: 86400000 (24 hours).
|
|
157
166
|
*/
|
|
158
167
|
invoiceMaxAgeMs?: number;
|
|
168
|
+
/**
|
|
169
|
+
* Rate limit for invoice creation. When configured, limits the number of
|
|
170
|
+
* pending (unpaid) invoices per client IP.
|
|
171
|
+
*/
|
|
172
|
+
invoiceRateLimit?: {
|
|
173
|
+
maxPendingPerIp: number;
|
|
174
|
+
};
|
|
159
175
|
}
|
|
160
176
|
/**
|
|
161
177
|
* A record of a payment event stored for audit and idempotency purposes.
|
|
@@ -164,6 +180,8 @@ export interface PaymentEvent {
|
|
|
164
180
|
timestamp: string;
|
|
165
181
|
paymentHash: string;
|
|
166
182
|
amountSats: number;
|
|
183
|
+
currency?: Currency;
|
|
184
|
+
rail?: string;
|
|
167
185
|
}
|
|
168
186
|
/**
|
|
169
187
|
* A record of an incoming HTTP request, used for analytics and
|
|
@@ -177,6 +195,7 @@ export interface RequestEvent {
|
|
|
177
195
|
latencyMs: number;
|
|
178
196
|
authenticated: boolean;
|
|
179
197
|
clientIp: string;
|
|
198
|
+
currency?: Currency;
|
|
180
199
|
}
|
|
181
200
|
/**
|
|
182
201
|
* A record of a 402 challenge issued to a client.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,IAAI,EAAE,OAAO,CAAA;IACb,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAElE;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CAC1D;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,IAAI,EAAE,OAAO,CAAA;IACb,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAElE;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CAC1D;AAED,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAA;IAClB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAE1B;;;OAGG;IACH,OAAO,EAAE,YAAY,CAAA;IAErB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAA;IAErC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAA;IAE1C;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAExC;;;OAGG;IACH,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAE1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAEnE;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAErE,kDAAkD;IAClD,IAAI,CAAC,EAAE,cAAc,CAAA;IAErB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;OAGG;IACH,gBAAgB,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;CAC9C,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thecryptodonkey/toll-booth",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Monetise any API with HTTP 402 payments. Payment-rail agnostic middleware for Express, Hono, Deno, Bun, and Workers.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"l402",
|
|
@@ -16,20 +16,25 @@
|
|
|
16
16
|
"nwc",
|
|
17
17
|
"bitcoin",
|
|
18
18
|
"express",
|
|
19
|
+
"hono",
|
|
19
20
|
"deno",
|
|
20
21
|
"bun",
|
|
21
22
|
"cloudflare-workers",
|
|
22
23
|
"serverless",
|
|
24
|
+
"typescript",
|
|
23
25
|
"macaroon",
|
|
24
26
|
"http-402",
|
|
25
27
|
"api-monetisation",
|
|
26
|
-
"payment-gateway"
|
|
28
|
+
"payment-gateway",
|
|
29
|
+
"ai-agents",
|
|
30
|
+
"machine-payments"
|
|
27
31
|
],
|
|
28
32
|
"repository": {
|
|
29
33
|
"type": "git",
|
|
30
34
|
"url": "git+https://github.com/TheCryptoDonkey/toll-booth.git"
|
|
31
35
|
},
|
|
32
36
|
"homepage": "https://github.com/TheCryptoDonkey/toll-booth#readme",
|
|
37
|
+
"funding": "https://github.com/TheCryptoDonkey/toll-booth#support",
|
|
33
38
|
"bin": {
|
|
34
39
|
"toll-booth": "dist/cli.js"
|
|
35
40
|
},
|
|
@@ -73,6 +78,10 @@
|
|
|
73
78
|
"./adapters/web-standard": {
|
|
74
79
|
"import": "./dist/adapters/web-standard.js",
|
|
75
80
|
"types": "./dist/adapters/web-standard.d.ts"
|
|
81
|
+
},
|
|
82
|
+
"./hono": {
|
|
83
|
+
"import": "./dist/adapters/hono.js",
|
|
84
|
+
"types": "./dist/adapters/hono.d.ts"
|
|
76
85
|
}
|
|
77
86
|
},
|
|
78
87
|
"files": [
|
|
@@ -86,7 +95,8 @@
|
|
|
86
95
|
"test:integration:ln": "bash scripts/test-integration.sh --ln-only",
|
|
87
96
|
"test:integration:cashu": "bash scripts/test-integration.sh --cashu-only",
|
|
88
97
|
"typecheck": "tsc --noEmit",
|
|
89
|
-
"prepublishOnly": "npm run build && npm test"
|
|
98
|
+
"prepublishOnly": "npm run build && npm test",
|
|
99
|
+
"prepare": "patch-package"
|
|
90
100
|
},
|
|
91
101
|
"dependencies": {
|
|
92
102
|
"better-sqlite3": "^11.8.0",
|
|
@@ -94,20 +104,27 @@
|
|
|
94
104
|
"qrcode": "^1.5.4"
|
|
95
105
|
},
|
|
96
106
|
"peerDependencies": {
|
|
97
|
-
"express": "^4.0.0 || ^5.0.0"
|
|
107
|
+
"express": "^4.0.0 || ^5.0.0",
|
|
108
|
+
"hono": "^4.0.0"
|
|
98
109
|
},
|
|
99
110
|
"peerDependenciesMeta": {
|
|
100
111
|
"express": {
|
|
101
112
|
"optional": true
|
|
113
|
+
},
|
|
114
|
+
"hono": {
|
|
115
|
+
"optional": true
|
|
102
116
|
}
|
|
103
117
|
},
|
|
104
118
|
"devDependencies": {
|
|
105
119
|
"@cashu/cashu-ts": "^3.5.0",
|
|
120
|
+
"@hono/node-server": "^1.19.11",
|
|
106
121
|
"@types/better-sqlite3": "^7.6.0",
|
|
107
122
|
"@types/express": "^5.0.6",
|
|
108
123
|
"@types/qrcode": "^1.5.6",
|
|
109
124
|
"@types/ws": "^8.18.1",
|
|
110
125
|
"express": "^5.2.1",
|
|
126
|
+
"hono": "^4.12.7",
|
|
127
|
+
"patch-package": "^8.0.1",
|
|
111
128
|
"tsx": "^4.21.0",
|
|
112
129
|
"typescript": "^5.7.0",
|
|
113
130
|
"vitest": "^3.0.0"
|