beignet 0.25.0 → 0.26.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 +61 -8
- package/dist/cli/beignet-node.js.map +1 -1
- package/dist/cli/cli.js +17 -1
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/config.js +6 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/daemon-options.js +3 -0
- package/dist/cli/daemon-options.js.map +1 -1
- package/dist/cli/daemon.js +34 -3
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/iroh-config.js +35 -0
- package/dist/cli/iroh-config.js.map +1 -0
- package/dist/cli/openapi.js +23 -2
- package/dist/cli/openapi.js.map +1 -1
- package/dist/lightning/backup/scb.js +19 -0
- package/dist/lightning/backup/scb.js.map +1 -1
- package/dist/lightning/node/lightning-node.js +63 -8
- package/dist/lightning/node/lightning-node.js.map +1 -1
- package/dist/lightning/node/types.js.map +1 -1
- package/dist/lightning/storage/sqlite-storage.js +33 -6
- package/dist/lightning/storage/sqlite-storage.js.map +1 -1
- package/dist/lightning/storage/types.js.map +1 -1
- package/dist/lightning/transport/index.js +1 -0
- package/dist/lightning/transport/index.js.map +1 -1
- package/dist/lightning/transport/iroh-node.js +212 -0
- package/dist/lightning/transport/iroh-node.js.map +1 -0
- package/dist/lightning/transport/iroh.js +269 -0
- package/dist/lightning/transport/iroh.js.map +1 -0
- package/dist/lightning/transport/peer-manager.js +114 -3
- package/dist/lightning/transport/peer-manager.js.map +1 -1
- package/dist/lightning/transport/peer-uri.js +10 -0
- package/dist/lightning/transport/peer-uri.js.map +1 -1
- package/dist/lightning/transport/peer.js +7 -0
- package/dist/lightning/transport/peer.js.map +1 -1
- package/dist/types/cli/beignet-node.d.ts +4 -1
- package/dist/types/cli/iroh-config.d.ts +8 -0
- package/dist/types/cli/types.d.ts +8 -1
- package/dist/types/lightning/backup/scb.d.ts +2 -0
- package/dist/types/lightning/node/lightning-node.d.ts +3 -0
- package/dist/types/lightning/node/types.d.ts +1 -0
- package/dist/types/lightning/storage/sqlite-storage.d.ts +4 -2
- package/dist/types/lightning/storage/types.d.ts +3 -1
- package/dist/types/lightning/transport/duplex-transport.d.ts +10 -1
- package/dist/types/lightning/transport/index.d.ts +1 -0
- package/dist/types/lightning/transport/iroh-node.d.ts +2 -0
- package/dist/types/lightning/transport/iroh.d.ts +69 -0
- package/dist/types/lightning/transport/peer-manager.d.ts +14 -1
- package/dist/types/lightning/transport/peer.d.ts +2 -0
- package/package.json +8 -1
package/dist/cli/beignet-node.js
CHANGED
|
@@ -24,6 +24,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.BeignetNode = exports.jitInvoiceError = exports.holdInvoiceEvent = exports.jsonSafeEvent = exports.jitReceiveRefusal = exports.leaseRatesRefusal = exports.defaultMaxFeeMsat = exports.DEFAULT_MAX_FEE_FLOOR_SATS = exports.DEFAULT_MAX_FEE_PPM = exports.clampDirectFundingMinimum = exports.DAILY_SPEND_STATE_KEY = exports.MAX_ASYNC_SPEND_CLAIMS = exports.ASYNC_SPEND_CLAIM_TTL_MS = exports.jsonToRouteHops = exports.routeHopsToJson = exports.spliceRefusalError = exports.decodeOfferInput = exports.paymentAdmissionSats = exports.paymentSpendSats = exports.hopFeeMsat = exports.spendLimitSats = exports.decodeInvoiceInput = exports.ENGINE_PAYMENT_ERROR_CODES = exports.parseScid = exports.formatScid = exports.gossipPrimeLatch = exports.defaultDataDirForMnemonic = exports.parseRecoveryMode = void 0;
|
|
27
|
+
const iroh_config_1 = require("./iroh-config");
|
|
28
|
+
const iroh_node_1 = require("../lightning/transport/iroh-node");
|
|
27
29
|
const offline_receive_1 = require("./offline-receive");
|
|
28
30
|
const ffor_receive_1 = require("./ffor-receive");
|
|
29
31
|
const path = __importStar(require("path"));
|
|
@@ -637,7 +639,11 @@ const LISTENER_HELD_MESSAGE = 'held by the startup quarantine until writer owner
|
|
|
637
639
|
const LISTENER_FENCED_MESSAGE = 'this node is fenced: another device owns its recovery namespace, so ' +
|
|
638
640
|
'the listener stays down';
|
|
639
641
|
function listenerLabel(kind) {
|
|
640
|
-
return kind === 'tcp'
|
|
642
|
+
return kind === 'tcp'
|
|
643
|
+
? 'Lightning listener'
|
|
644
|
+
: kind === 'iroh'
|
|
645
|
+
? 'Iroh listener'
|
|
646
|
+
: 'WebSocket listener';
|
|
641
647
|
}
|
|
642
648
|
class BeignetNode extends events_1.EventEmitter {
|
|
643
649
|
getOfflineReceive() {
|
|
@@ -715,6 +721,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
715
721
|
this._deferredGossipSyncs = new Set();
|
|
716
722
|
this.electrumServerCount = 1;
|
|
717
723
|
this._failoverInProgress = false;
|
|
724
|
+
this._irohBound = false;
|
|
718
725
|
this._listenBinds = {};
|
|
719
726
|
this._listenEpoch = 0;
|
|
720
727
|
this._connectTimeoutMs = 15000;
|
|
@@ -749,6 +756,12 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
749
756
|
}
|
|
750
757
|
}
|
|
751
758
|
static async create(opts = {}) {
|
|
759
|
+
try {
|
|
760
|
+
(0, iroh_config_1.validateIrohConfig)(opts);
|
|
761
|
+
}
|
|
762
|
+
catch (err) {
|
|
763
|
+
throw new errors_1.BeignetError('INVALID_PARAMS', err.message);
|
|
764
|
+
}
|
|
752
765
|
const mnemonic = opts.mnemonic || (0, helpers_1.generateMnemonic)();
|
|
753
766
|
const networkName = opts.network || 'mainnet';
|
|
754
767
|
const dataDir = opts.dataDir || defaultDataDirForMnemonic(mnemonic);
|
|
@@ -1077,6 +1090,13 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
1077
1090
|
storage: this._nodeStorageView,
|
|
1078
1091
|
newChannelsRefused: () => this.newChannelRefusal(),
|
|
1079
1092
|
enableNetworking: true,
|
|
1093
|
+
iroh: opts.iroh
|
|
1094
|
+
? {
|
|
1095
|
+
factory: iroh_node_1.createNodeIrohEndpoint,
|
|
1096
|
+
relays: opts.irohRelays,
|
|
1097
|
+
discovery: opts.irohDiscovery
|
|
1098
|
+
}
|
|
1099
|
+
: undefined,
|
|
1080
1100
|
autoReconnect: opts.autoReconnect ?? true,
|
|
1081
1101
|
autoUpdateChannelFees: opts.autoUpdateChannelFees ?? false,
|
|
1082
1102
|
forwardingEnabled: opts.forwardingEnabled ?? true,
|
|
@@ -1720,6 +1740,9 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
1720
1740
|
if (opts.websocketPort) {
|
|
1721
1741
|
await this.bindListener('websocket', opts.websocketPort);
|
|
1722
1742
|
}
|
|
1743
|
+
if (opts.iroh) {
|
|
1744
|
+
await this.bindListener('iroh', 0);
|
|
1745
|
+
}
|
|
1723
1746
|
if (opts.connectTimeoutMs !== undefined && opts.connectTimeoutMs > 0) {
|
|
1724
1747
|
this._connectTimeoutMs = opts.connectTimeoutMs;
|
|
1725
1748
|
}
|
|
@@ -2710,7 +2733,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
2710
2733
|
}
|
|
2711
2734
|
try {
|
|
2712
2735
|
for (const peer of from.loadAllPeerAddresses()) {
|
|
2713
|
-
to.savePeerAddress(peer.pubkey, peer.host, peer.port);
|
|
2736
|
+
to.savePeerAddress(peer.pubkey, peer.host, peer.port, peer.transport);
|
|
2714
2737
|
}
|
|
2715
2738
|
}
|
|
2716
2739
|
catch (err) {
|
|
@@ -3190,6 +3213,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
3190
3213
|
const info = this.node.getNodeInfo();
|
|
3191
3214
|
const lightningBalance = this.getLightningBalanceSats();
|
|
3192
3215
|
const result = {
|
|
3216
|
+
irohAvailable: true,
|
|
3193
3217
|
nodeId: info.nodeId,
|
|
3194
3218
|
alias: info.alias,
|
|
3195
3219
|
network: this.networkName,
|
|
@@ -3204,6 +3228,11 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
3204
3228
|
peerCount: info.peerCount,
|
|
3205
3229
|
listening: this.node.isListening()
|
|
3206
3230
|
};
|
|
3231
|
+
const irohUri = this.node.getIrohConnectionString();
|
|
3232
|
+
if (irohUri)
|
|
3233
|
+
result.irohUri = irohUri;
|
|
3234
|
+
if (this._irohListenError)
|
|
3235
|
+
result.irohListenError = { ...this._irohListenError };
|
|
3207
3236
|
if (this._requestedListenPort !== undefined) {
|
|
3208
3237
|
result.listenPort = this._requestedListenPort;
|
|
3209
3238
|
}
|
|
@@ -4006,7 +4035,9 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
4006
4035
|
pubkey,
|
|
4007
4036
|
host: host ?? connected?.host ?? '',
|
|
4008
4037
|
port: port ?? connected?.port ?? 0,
|
|
4009
|
-
state: 'connected'
|
|
4038
|
+
state: 'connected',
|
|
4039
|
+
...(connected?.transport ? { transport: connected.transport } : {}),
|
|
4040
|
+
...(connected?.iroh ? { iroh: connected.iroh } : {})
|
|
4010
4041
|
};
|
|
4011
4042
|
}
|
|
4012
4043
|
disconnectPeer(pubkey) {
|
|
@@ -4017,7 +4048,9 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
4017
4048
|
pubkey: p.pubkey,
|
|
4018
4049
|
host: p.host,
|
|
4019
4050
|
port: p.port,
|
|
4020
|
-
state: p.state
|
|
4051
|
+
state: p.state,
|
|
4052
|
+
...(p.transport ? { transport: p.transport } : {}),
|
|
4053
|
+
...(p.iroh ? { iroh: p.iroh } : {})
|
|
4021
4054
|
}));
|
|
4022
4055
|
}
|
|
4023
4056
|
startGossipSync(pubkey) {
|
|
@@ -8195,6 +8228,8 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
8195
8228
|
this._listenEpoch++;
|
|
8196
8229
|
this._listenPort = undefined;
|
|
8197
8230
|
this._websocketPort = undefined;
|
|
8231
|
+
this._irohBound = false;
|
|
8232
|
+
this._irohListenError = undefined;
|
|
8198
8233
|
this._requestedListenPort = undefined;
|
|
8199
8234
|
this._listenError = undefined;
|
|
8200
8235
|
this._websocketListenError = undefined;
|
|
@@ -8219,6 +8254,8 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
8219
8254
|
try {
|
|
8220
8255
|
if (kind === 'tcp')
|
|
8221
8256
|
await node.listen(port);
|
|
8257
|
+
else if (kind === 'iroh')
|
|
8258
|
+
await node.listenIroh();
|
|
8222
8259
|
else
|
|
8223
8260
|
await node.listenWebSocket(port);
|
|
8224
8261
|
}
|
|
@@ -8250,6 +8287,8 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
8250
8287
|
const wasHeld = this.listenerProblem(kind)?.state === 'held';
|
|
8251
8288
|
if (kind === 'tcp')
|
|
8252
8289
|
this._listenPort = port;
|
|
8290
|
+
else if (kind === 'iroh')
|
|
8291
|
+
this._irohBound = true;
|
|
8253
8292
|
else
|
|
8254
8293
|
this._websocketPort = port;
|
|
8255
8294
|
this.setListenerProblem(kind, undefined);
|
|
@@ -8297,11 +8336,17 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
8297
8336
|
}
|
|
8298
8337
|
}
|
|
8299
8338
|
listenerProblem(kind) {
|
|
8300
|
-
return kind === 'tcp'
|
|
8339
|
+
return kind === 'tcp'
|
|
8340
|
+
? this._listenError
|
|
8341
|
+
: kind === 'iroh'
|
|
8342
|
+
? this._irohListenError
|
|
8343
|
+
: this._websocketListenError;
|
|
8301
8344
|
}
|
|
8302
8345
|
setListenerProblem(kind, problem) {
|
|
8303
8346
|
if (kind === 'tcp')
|
|
8304
8347
|
this._listenError = problem;
|
|
8348
|
+
else if (kind === 'iroh')
|
|
8349
|
+
this._irohListenError = problem;
|
|
8305
8350
|
else
|
|
8306
8351
|
this._websocketListenError = problem;
|
|
8307
8352
|
}
|
|
@@ -8309,7 +8354,7 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
8309
8354
|
if (this.destroyed || !this.node)
|
|
8310
8355
|
return;
|
|
8311
8356
|
const held = [];
|
|
8312
|
-
for (const kind of ['tcp', 'websocket']) {
|
|
8357
|
+
for (const kind of ['tcp', 'websocket', 'iroh']) {
|
|
8313
8358
|
const problem = this.listenerProblem(kind);
|
|
8314
8359
|
if (problem?.state === 'held')
|
|
8315
8360
|
held.push([kind, problem.port]);
|
|
@@ -8325,14 +8370,22 @@ class BeignetNode extends events_1.EventEmitter {
|
|
|
8325
8370
|
}
|
|
8326
8371
|
}
|
|
8327
8372
|
fenceListeners() {
|
|
8328
|
-
for (const kind of ['tcp', 'websocket']) {
|
|
8373
|
+
for (const kind of ['tcp', 'websocket', 'iroh']) {
|
|
8329
8374
|
const problem = this.listenerProblem(kind);
|
|
8330
|
-
const bound = kind === 'tcp'
|
|
8375
|
+
const bound = kind === 'tcp'
|
|
8376
|
+
? this._listenPort
|
|
8377
|
+
: kind === 'iroh'
|
|
8378
|
+
? this._irohBound
|
|
8379
|
+
? 0
|
|
8380
|
+
: undefined
|
|
8381
|
+
: this._websocketPort;
|
|
8331
8382
|
const port = bound ?? (problem?.state === 'held' ? problem.port : undefined);
|
|
8332
8383
|
if (port === undefined)
|
|
8333
8384
|
continue;
|
|
8334
8385
|
if (kind === 'tcp')
|
|
8335
8386
|
this._listenPort = undefined;
|
|
8387
|
+
else if (kind === 'iroh')
|
|
8388
|
+
this._irohBound = false;
|
|
8336
8389
|
else
|
|
8337
8390
|
this._websocketPort = undefined;
|
|
8338
8391
|
this.setListenerProblem(kind, {
|