beignet 0.16.0 → 0.17.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/dist/cli/beignet-node.js +26 -7
- package/dist/cli/beignet-node.js.map +1 -1
- package/dist/cli/daemon.js +11 -8
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/errors.js +5 -1
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/openapi.js +8 -4
- package/dist/cli/openapi.js.map +1 -1
- package/dist/lightning/channel/channel-state.js +2 -0
- package/dist/lightning/channel/channel-state.js.map +1 -1
- package/dist/lightning/channel/channel.js +46 -4
- package/dist/lightning/channel/channel.js.map +1 -1
- package/dist/lightning/node/lightning-node.js +24 -3
- package/dist/lightning/node/lightning-node.js.map +1 -1
- package/dist/lightning/storage/serialization.js +12 -0
- package/dist/lightning/storage/serialization.js.map +1 -1
- package/dist/types/cli/beignet-node.d.ts +4 -3
- package/dist/types/cli/errors.d.ts +2 -0
- package/dist/types/cli/types.d.ts +1 -0
- package/dist/types/lightning/channel/channel-state.d.ts +4 -0
- package/dist/types/lightning/channel/channel.d.ts +1 -0
- package/dist/types/lightning/storage/serialization.d.ts +4 -0
- package/docs/AI_AGENT_GUIDE.md +2 -0
- package/package.json +1 -1
package/dist/cli/beignet-node.js
CHANGED
|
@@ -4999,7 +4999,19 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
4999
4999
|
}
|
|
5000
5000
|
return { status, summary, checks, invoice };
|
|
5001
5001
|
}
|
|
5002
|
-
|
|
5002
|
+
_cltvCeiling(cltvLimit) {
|
|
5003
|
+
if (cltvLimit === undefined)
|
|
5004
|
+
return undefined;
|
|
5005
|
+
if (!Number.isSafeInteger(cltvLimit) || cltvLimit < 1) {
|
|
5006
|
+
throw new errors_1.BeignetError('INVALID_PARAMS', 'cltvLimit must be a positive integer number of blocks');
|
|
5007
|
+
}
|
|
5008
|
+
const height = this.node.getCurrentBlockHeight();
|
|
5009
|
+
if (!(height > 0)) {
|
|
5010
|
+
throw new errors_1.BeignetError('CHAIN_NOT_SYNCED', 'cltvLimit needs the current block height, which is not known yet');
|
|
5011
|
+
}
|
|
5012
|
+
return height + cltvLimit;
|
|
5013
|
+
}
|
|
5014
|
+
async payInvoice(bolt11, timeoutMs = 60000, maxFeeSats, amountSats, metadata, cltvLimit) {
|
|
5003
5015
|
this._checkDraining();
|
|
5004
5016
|
const decoded = decodeInvoiceInput(bolt11);
|
|
5005
5017
|
const paymentHashHex = decoded.paymentHash.toString('hex');
|
|
@@ -5012,6 +5024,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5012
5024
|
? BigInt(requireNonNegativeSafeInteger(amountSats, 'amountSats')) *
|
|
5013
5025
|
1000n
|
|
5014
5026
|
: undefined;
|
|
5027
|
+
const maxCltvExpiryHeight = this._cltvCeiling(cltvLimit);
|
|
5015
5028
|
if (spendAmountSats > 0) {
|
|
5016
5029
|
this._checkMaxPayment(spendAmountSats);
|
|
5017
5030
|
this._checkSpendLimit(spendAmountSats);
|
|
@@ -5077,7 +5090,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5077
5090
|
this.node.on('payment:sent', onSent);
|
|
5078
5091
|
this.node.on('payment:failed', onFailed);
|
|
5079
5092
|
try {
|
|
5080
|
-
this.node.sendPayment(bolt11, undefined, maxFeeMsat, amountMsat);
|
|
5093
|
+
this.node.sendPayment(bolt11, undefined, maxFeeMsat, amountMsat, maxCltvExpiryHeight);
|
|
5081
5094
|
}
|
|
5082
5095
|
catch (err) {
|
|
5083
5096
|
cleanup();
|
|
@@ -5091,6 +5104,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5091
5104
|
DUPLICATE_PAYMENT: 'DUPLICATE_PAYMENT',
|
|
5092
5105
|
NO_CHANNEL_TO_HOP: 'PEER_NOT_CONNECTED',
|
|
5093
5106
|
FEE_EXCEEDS_MAX: 'PAYMENT_FAILED',
|
|
5107
|
+
CLTV_EXCEEDS_MAX: 'CLTV_EXCEEDS_MAX',
|
|
5094
5108
|
MISSING_AMOUNT: 'INVALID_PARAMS',
|
|
5095
5109
|
INVALID_INVOICE: 'INVALID_PARAMS',
|
|
5096
5110
|
INVOICE_EXPIRED: 'INVOICE_EXPIRED'
|
|
@@ -5110,9 +5124,9 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5110
5124
|
}
|
|
5111
5125
|
});
|
|
5112
5126
|
}
|
|
5113
|
-
async payInvoiceSafe(bolt11, timeoutMs = 60000, maxFeeSats, amountSats, metadata) {
|
|
5127
|
+
async payInvoiceSafe(bolt11, timeoutMs = 60000, maxFeeSats, amountSats, metadata, cltvLimit) {
|
|
5114
5128
|
try {
|
|
5115
|
-
return await this.payInvoice(bolt11, timeoutMs, maxFeeSats, amountSats, metadata);
|
|
5129
|
+
return await this.payInvoice(bolt11, timeoutMs, maxFeeSats, amountSats, metadata, cltvLimit);
|
|
5116
5130
|
}
|
|
5117
5131
|
catch (err) {
|
|
5118
5132
|
let hashHex = 'unknown';
|
|
@@ -5152,7 +5166,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5152
5166
|
let lastError;
|
|
5153
5167
|
for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {
|
|
5154
5168
|
try {
|
|
5155
|
-
const result = await this.payInvoice(bolt11, 60000, opts.maxFeeSats, opts.amountSats, opts.metadata);
|
|
5169
|
+
const result = await this.payInvoice(bolt11, 60000, opts.maxFeeSats, opts.amountSats, opts.metadata, opts.cltvLimit);
|
|
5156
5170
|
return { ...result, attempts: attempt };
|
|
5157
5171
|
}
|
|
5158
5172
|
catch (err) {
|
|
@@ -5242,7 +5256,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5242
5256
|
attempts: maxRetries + 1
|
|
5243
5257
|
};
|
|
5244
5258
|
}
|
|
5245
|
-
sendPaymentAsync(bolt11, maxFeeSats, amountSats, metadata) {
|
|
5259
|
+
sendPaymentAsync(bolt11, maxFeeSats, amountSats, metadata, cltvLimit) {
|
|
5246
5260
|
this._checkDraining();
|
|
5247
5261
|
const decoded = decodeInvoiceInput(bolt11);
|
|
5248
5262
|
const paymentHashHex = decoded.paymentHash.toString('hex');
|
|
@@ -5255,6 +5269,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5255
5269
|
? BigInt(requireNonNegativeSafeInteger(amountSats, 'amountSats')) *
|
|
5256
5270
|
1000n
|
|
5257
5271
|
: undefined;
|
|
5272
|
+
const maxCltvExpiryHeight = this._cltvCeiling(cltvLimit);
|
|
5258
5273
|
let claim;
|
|
5259
5274
|
if (spendAmountSats > 0) {
|
|
5260
5275
|
this._checkMaxPayment(spendAmountSats);
|
|
@@ -5266,11 +5281,15 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
5266
5281
|
if (metadata) {
|
|
5267
5282
|
this.node.setPaymentMetadata(decoded.paymentHash, metadata);
|
|
5268
5283
|
}
|
|
5269
|
-
result = this.node.sendPayment(bolt11, undefined, maxFeeMsat, amountMsat);
|
|
5284
|
+
result = this.node.sendPayment(bolt11, undefined, maxFeeMsat, amountMsat, maxCltvExpiryHeight);
|
|
5270
5285
|
}
|
|
5271
5286
|
catch (err) {
|
|
5272
5287
|
if (claim)
|
|
5273
5288
|
this._closeAsyncSpendClaim(paymentHashHex, claim);
|
|
5289
|
+
if (err instanceof Error &&
|
|
5290
|
+
err.code === 'CLTV_EXCEEDS_MAX') {
|
|
5291
|
+
throw new errors_1.BeignetError('CLTV_EXCEEDS_MAX', err.message);
|
|
5292
|
+
}
|
|
5274
5293
|
throw err;
|
|
5275
5294
|
}
|
|
5276
5295
|
if (claim && result.status === 'FAILED') {
|