beignet 0.28.0 → 0.30.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.
Files changed (112) hide show
  1. package/dist/cli/beignet-node.js +40 -0
  2. package/dist/cli/beignet-node.js.map +1 -1
  3. package/dist/cli/direct-funding.js +6 -7
  4. package/dist/cli/direct-funding.js.map +1 -1
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/lightning/chain/chain-monitor.js +2 -2
  7. package/dist/lightning/chain/chain-monitor.js.map +1 -1
  8. package/dist/lightning/chain/chain-watcher.js +2 -2
  9. package/dist/lightning/chain/chain-watcher.js.map +1 -1
  10. package/dist/lightning/chain/closing.js +2 -2
  11. package/dist/lightning/chain/closing.js.map +1 -1
  12. package/dist/lightning/chain/output-resolver.js +2 -2
  13. package/dist/lightning/chain/output-resolver.js.map +1 -1
  14. package/dist/lightning/chain/sweep.js +2 -2
  15. package/dist/lightning/chain/sweep.js.map +1 -1
  16. package/dist/lightning/channel/channel-manager.js +13 -5
  17. package/dist/lightning/channel/channel-manager.js.map +1 -1
  18. package/dist/lightning/channel/channel.js +6 -6
  19. package/dist/lightning/channel/channel.js.map +1 -1
  20. package/dist/lightning/channel/splice-tx.js +3 -3
  21. package/dist/lightning/channel/splice-tx.js.map +1 -1
  22. package/dist/lightning/crypto/ecdh.js +10 -33
  23. package/dist/lightning/crypto/ecdh.js.map +1 -1
  24. package/dist/lightning/crypto/musig.js +9 -32
  25. package/dist/lightning/crypto/musig.js.map +1 -1
  26. package/dist/lightning/direct-funding/receiver/verify.js +2 -2
  27. package/dist/lightning/direct-funding/receiver/verify.js.map +1 -1
  28. package/dist/lightning/gossip/graph-restore.js +162 -0
  29. package/dist/lightning/gossip/graph-restore.js.map +1 -0
  30. package/dist/lightning/gossip/index.js +1 -0
  31. package/dist/lightning/gossip/index.js.map +1 -1
  32. package/dist/lightning/gossip/network-graph.js +74 -37
  33. package/dist/lightning/gossip/network-graph.js.map +1 -1
  34. package/dist/lightning/invoice/decode.js +11 -6
  35. package/dist/lightning/invoice/decode.js.map +1 -1
  36. package/dist/lightning/invoice/index.js.map +1 -1
  37. package/dist/lightning/keys/signer.js +2 -2
  38. package/dist/lightning/keys/signer.js.map +1 -1
  39. package/dist/lightning/keys/wallet-keys.js +28 -6
  40. package/dist/lightning/keys/wallet-keys.js.map +1 -1
  41. package/dist/lightning/node/lightning-node.js +368 -79
  42. package/dist/lightning/node/lightning-node.js.map +1 -1
  43. package/dist/lightning/node/types.js.map +1 -1
  44. package/dist/lightning/offer/schnorr.js +4 -27
  45. package/dist/lightning/offer/schnorr.js.map +1 -1
  46. package/dist/lightning/recovery/assembly.js +2 -25
  47. package/dist/lightning/recovery/assembly.js.map +1 -1
  48. package/dist/lightning/recovery/guardian-bolt8.js +2 -25
  49. package/dist/lightning/recovery/guardian-bolt8.js.map +1 -1
  50. package/dist/lightning/recovery/guardian-client.js +2 -25
  51. package/dist/lightning/recovery/guardian-client.js.map +1 -1
  52. package/dist/lightning/recovery/guardian-replication.js +2 -25
  53. package/dist/lightning/recovery/guardian-replication.js.map +1 -1
  54. package/dist/lightning/recovery/guardian-wire.js +6 -29
  55. package/dist/lightning/recovery/guardian-wire.js.map +1 -1
  56. package/dist/lightning/recovery/guardian.js +5 -28
  57. package/dist/lightning/recovery/guardian.js.map +1 -1
  58. package/dist/lightning/recovery/restore-driver.js +2 -25
  59. package/dist/lightning/recovery/restore-driver.js.map +1 -1
  60. package/dist/lightning/recovery/writer-lease.js +4 -27
  61. package/dist/lightning/recovery/writer-lease.js.map +1 -1
  62. package/dist/lightning/script/anchor.js +2 -2
  63. package/dist/lightning/script/anchor.js.map +1 -1
  64. package/dist/lightning/script/commitment-taproot.js +5 -5
  65. package/dist/lightning/script/commitment-taproot.js.map +1 -1
  66. package/dist/lightning/script/commitment.js +2 -2
  67. package/dist/lightning/script/commitment.js.map +1 -1
  68. package/dist/lightning/script/funding-taproot.js +2 -2
  69. package/dist/lightning/script/funding-taproot.js.map +1 -1
  70. package/dist/lightning/script/funding.js +2 -2
  71. package/dist/lightning/script/funding.js.map +1 -1
  72. package/dist/lightning/script/htlc-taproot.js +4 -4
  73. package/dist/lightning/script/htlc-taproot.js.map +1 -1
  74. package/dist/lightning/script/htlc.js +2 -2
  75. package/dist/lightning/script/htlc.js.map +1 -1
  76. package/dist/lightning/script/revocation.js +2 -2
  77. package/dist/lightning/script/revocation.js.map +1 -1
  78. package/dist/lightning/storage/sqlite-storage.js +38 -0
  79. package/dist/lightning/storage/sqlite-storage.js.map +1 -1
  80. package/dist/lightning/storage/types.js.map +1 -1
  81. package/dist/lightning/wallet/wallet-funding-provider.js +8 -9
  82. package/dist/lightning/wallet/wallet-funding-provider.js.map +1 -1
  83. package/dist/lightning/watchtower/justice.js +3 -3
  84. package/dist/lightning/watchtower/justice.js.map +1 -1
  85. package/dist/transaction/index.js +2 -5
  86. package/dist/transaction/index.js.map +1 -1
  87. package/dist/types/cli/beignet-node.d.ts +6 -1
  88. package/dist/types/cli/index.d.ts +1 -1
  89. package/dist/types/cli/types.d.ts +3 -0
  90. package/dist/types/lightning/gossip/graph-restore.d.ts +37 -0
  91. package/dist/types/lightning/gossip/index.d.ts +1 -0
  92. package/dist/types/lightning/gossip/network-graph.d.ts +1 -0
  93. package/dist/types/lightning/invoice/decode.d.ts +4 -1
  94. package/dist/types/lightning/invoice/index.d.ts +1 -0
  95. package/dist/types/lightning/keys/wallet-keys.d.ts +1 -0
  96. package/dist/types/lightning/node/lightning-node.d.ts +29 -1
  97. package/dist/types/lightning/node/types.d.ts +22 -0
  98. package/dist/types/lightning/storage/sqlite-storage.d.ts +3 -1
  99. package/dist/types/lightning/storage/types.d.ts +7 -0
  100. package/dist/types/utils/ecc-apis.d.ts +3 -0
  101. package/dist/types/utils/ecc.d.ts +2 -0
  102. package/dist/utils/ecc-apis.js +15 -0
  103. package/dist/utils/ecc-apis.js.map +1 -0
  104. package/dist/utils/ecc.js +29 -0
  105. package/dist/utils/ecc.js.map +1 -0
  106. package/dist/utils/helpers.js +10 -10
  107. package/dist/utils/helpers.js.map +1 -1
  108. package/dist/utils/watch-only.js +2 -7
  109. package/dist/utils/watch-only.js.map +1 -1
  110. package/dist/wallet/index.js +3 -5
  111. package/dist/wallet/index.js.map +1 -1
  112. package/package.json +1 -1
@@ -1094,6 +1094,7 @@ class BeignetNode extends events_1.EventEmitter {
1094
1094
  });
1095
1095
  }
1096
1096
  this._nodeStorageView = (0, node_storage_view_1.nodeStorageView)(this.storage);
1097
+ const constructStarted = Date.now();
1097
1098
  this.node = lightning_node_1.LightningNode.fromMnemonic(this.mnemonic, {
1098
1099
  coinType,
1099
1100
  seed: this.walletSeed(),
@@ -1265,6 +1266,7 @@ class BeignetNode extends events_1.EventEmitter {
1265
1266
  : {}
1266
1267
  },
1267
1268
  eagerGossipVerify: opts.eagerGossipVerify ?? false,
1269
+ cooperativeGraphRestore: opts.deferGraphRestore === true,
1268
1270
  localFeatures: lightning_node_1.LightningNode.defaultFeatures(),
1269
1271
  chainHashes: [chainHash],
1270
1272
  alias: opts.alias,
@@ -1309,6 +1311,12 @@ class BeignetNode extends events_1.EventEmitter {
1309
1311
  watchtowers: opts.watchtowers,
1310
1312
  recovery: this.recoveryNodeConfig
1311
1313
  });
1314
+ this._nodeConstructMs = Date.now() - constructStarted;
1315
+ this.node.on('graph:restored', () => {
1316
+ const stats = this.getGraphRestoreStats();
1317
+ if (stats)
1318
+ this.emit('graph:restored', stats);
1319
+ });
1312
1320
  this.fforReceiveService = new ffor_receive_1.FforReceiveService(this, opts.fforSettle, opts.fforReceiveFunding, opts.fforSettleConcurrent !== false);
1313
1321
  const receiveKey = 'automatic_receive_jobs_v1';
1314
1322
  const receiveJobs = this.storage.loadWalletData(receiveKey);
@@ -4230,6 +4238,10 @@ class BeignetNode extends events_1.EventEmitter {
4230
4238
  const downloadStart = Date.now();
4231
4239
  const data = await (0, rapid_sync_1.fetchRapidGossipSnapshot)(url);
4232
4240
  const downloadMs = Date.now() - downloadStart;
4241
+ if (this.destroyed)
4242
+ throw new rapid_sync_1.RapidGossipCancelledError();
4243
+ if (this.isGraphRestoring())
4244
+ await this.whenGraphRestored();
4233
4245
  if (this.destroyed)
4234
4246
  throw new rapid_sync_1.RapidGossipCancelledError();
4235
4247
  let slices = 0;
@@ -4299,6 +4311,8 @@ class BeignetNode extends events_1.EventEmitter {
4299
4311
  return this.openChannel(pubkey, amountSats, opts?.pushSats, opts?.satsPerVbyte, opts?.max, opts?.trusted ?? false);
4300
4312
  }
4301
4313
  async ensureMinimumChannels(count, satsPerChannel, _opts) {
4314
+ if (this.isGraphRestoring())
4315
+ await this.whenGraphRestored();
4302
4316
  const existing = this.getReadyChannels();
4303
4317
  if (existing.length >= count)
4304
4318
  return existing;
@@ -6377,6 +6391,8 @@ class BeignetNode extends events_1.EventEmitter {
6377
6391
  }
6378
6392
  async payInvoiceAll(bolt11, debitMsat, maxFeeMsat, timeoutMs = 60000) {
6379
6393
  this._checkDraining();
6394
+ if (this.isGraphRestoring())
6395
+ await this.whenGraphRestored();
6380
6396
  const decoded = decodeInvoiceInput(bolt11);
6381
6397
  const debit = requireMsatValue(debitMsat, 'debitMsat');
6382
6398
  const feeCap = requireMsatValue(maxFeeMsat, 'maxFeeMsat');
@@ -6395,6 +6411,8 @@ class BeignetNode extends events_1.EventEmitter {
6395
6411
  }
6396
6412
  async payInvoice(bolt11, timeoutMs = 60000, maxFeeSats, amountSats, metadata, cltvLimit, maxFeeMsatCap) {
6397
6413
  this._checkDraining();
6414
+ if (this.isGraphRestoring())
6415
+ await this.whenGraphRestored();
6398
6416
  const decoded = decodeInvoiceInput(bolt11);
6399
6417
  const paymentHashHex = decoded.paymentHash.toString('hex');
6400
6418
  const amountMsat = amountSats !== undefined
@@ -6619,6 +6637,8 @@ class BeignetNode extends events_1.EventEmitter {
6619
6637
  }
6620
6638
  async sendKeysend(pubkey, amountSats, timeoutMs = 60000, maxFeeSats, metadata, onPaymentHash) {
6621
6639
  this._checkDraining();
6640
+ if (this.isGraphRestoring())
6641
+ await this.whenGraphRestored();
6622
6642
  const amountMsat = BigInt(requireNonNegativeSafeInteger(amountSats, 'amountSats')) * 1000n;
6623
6643
  const maxFeeMsat = resolveMaxFeeMsat(maxFeeSats, undefined, amountMsat);
6624
6644
  const preimage = crypto.randomBytes(32);
@@ -7206,6 +7226,8 @@ class BeignetNode extends events_1.EventEmitter {
7206
7226
  .map(({ offer, encoded }) => this.toOfferInfo(offer, encoded));
7207
7227
  }
7208
7228
  async payOffer(offerStr, amountSats, timeoutMs = 60000, maxFeeSats, maxFeeMsatCap, onPaymentHash) {
7229
+ if (this.isGraphRestoring())
7230
+ await this.whenGraphRestored();
7209
7231
  this._checkDraining();
7210
7232
  const offer = decodeOfferInput(offerStr);
7211
7233
  const callerMaxFeeMsat = explicitMaxFeeMsat(maxFeeSats, maxFeeMsatCap);
@@ -7629,6 +7651,8 @@ class BeignetNode extends events_1.EventEmitter {
7629
7651
  return { ...this.getLiquiditySnapshot(), rebalancePlan: plan };
7630
7652
  }
7631
7653
  async rebalanceChannel(fromChannelId, toChannelId, amountSats, maxFeeSats) {
7654
+ if (this.isGraphRestoring())
7655
+ await this.whenGraphRestored();
7632
7656
  if (!/^[0-9a-fA-F]{64}$/.test(fromChannelId))
7633
7657
  throw new errors_1.BeignetError(errors_1.BeignetErrorCode.INVALID_PARAMS, 'fromChannelId must be 64 hex chars');
7634
7658
  if (!/^[0-9a-fA-F]{64}$/.test(toChannelId))
@@ -7765,6 +7789,20 @@ class BeignetNode extends events_1.EventEmitter {
7765
7789
  }))
7766
7790
  };
7767
7791
  }
7792
+ isGraphRestoring() {
7793
+ return this.node?.isGraphRestoring?.() ?? false;
7794
+ }
7795
+ whenGraphRestored() {
7796
+ return this.node?.whenGraphRestored?.() ?? Promise.resolve(true);
7797
+ }
7798
+ getGraphRestoreStats() {
7799
+ const stats = this.node?.getGraphRestoreStats() ?? null;
7800
+ if (!stats)
7801
+ return null;
7802
+ return this._nodeConstructMs === undefined
7803
+ ? stats
7804
+ : { ...stats, constructMs: this._nodeConstructMs };
7805
+ }
7768
7806
  getGraphInfo() {
7769
7807
  const graph = this.node.getGraph();
7770
7808
  const info = {
@@ -7774,6 +7812,8 @@ class BeignetNode extends events_1.EventEmitter {
7774
7812
  if (this._lastGraphSyncAt !== undefined) {
7775
7813
  info.lastSyncAt = this._lastGraphSyncAt;
7776
7814
  }
7815
+ if (this.isGraphRestoring())
7816
+ info.restoring = true;
7777
7817
  return info;
7778
7818
  }
7779
7819
  getGraphNode(pubkey) {