@buildonspark/spark-sdk 0.1.35 → 0.1.37
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/CHANGELOG.md +15 -0
- package/dist/{RequestLightningSendInput-BtR12ZlP.d.cts → RequestLightningSendInput-39_zGri6.d.cts} +1 -1
- package/dist/{RequestLightningSendInput-Dfx7JYWT.d.ts → RequestLightningSendInput-B4JdzclX.d.ts} +1 -1
- package/dist/address/index.cjs +7 -2
- package/dist/address/index.d.cts +2 -2
- package/dist/address/index.d.ts +2 -2
- package/dist/address/index.js +3 -3
- package/dist/{chunk-5IXRSN47.js → chunk-2CDJZQN4.js} +1 -1
- package/dist/{chunk-YQBZR7YC.js → chunk-A74XSEW3.js} +1 -1
- package/dist/{chunk-PZRENZXV.js → chunk-C5LTJBI7.js} +215 -6
- package/dist/{chunk-B2CHXWG6.js → chunk-FWQPAPXK.js} +2 -2
- package/dist/{chunk-EVTP3LXL.js → chunk-I4JI6TYN.js} +2 -2
- package/dist/{chunk-74S7NOHT.js → chunk-MVRQ5US7.js} +7 -2
- package/dist/{chunk-UDT7KKB6.js → chunk-NS4UZRQ7.js} +1 -1
- package/dist/{chunk-W7N2ABBH.js → chunk-RAPBVYJY.js} +7 -12
- package/dist/{chunk-7TM6XZIQ.js → chunk-RULOY5WX.js} +2 -2
- package/dist/{chunk-3FT662ZE.js → chunk-RZDD6X5A.js} +143 -68
- package/dist/{chunk-C4URKX6J.js → chunk-YWFZ5ECA.js} +1 -1
- package/dist/graphql/objects/index.cjs +7 -2
- package/dist/graphql/objects/index.d.cts +4 -4
- package/dist/graphql/objects/index.d.ts +4 -4
- package/dist/graphql/objects/index.js +1 -1
- package/dist/{index-BBzdQhqB.d.ts → index-CxAi2L8y.d.ts} +10 -8
- package/dist/{index-D-We3A27.d.cts → index-Dm17Ggfe.d.cts} +10 -8
- package/dist/index.cjs +365 -85
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +11 -11
- package/dist/index.node.cjs +365 -85
- package/dist/index.node.d.cts +7 -7
- package/dist/index.node.d.ts +7 -7
- package/dist/index.node.js +11 -11
- package/dist/native/chunk-C3WN3D4O.js +19 -0
- package/dist/native/index.cjs +365 -85
- package/dist/native/index.d.cts +16 -4
- package/dist/native/index.d.ts +16 -4
- package/dist/native/index.js +363 -88
- package/dist/native/{wasm-A6KGFTNV.js → wasm-PZWVEGEE.js} +1 -1
- package/dist/native/{xhr-transport-TERT4PBA.js → xhr-transport-WHMS3FGG.js} +1 -1
- package/dist/{network-Bc-W9qLR.d.ts → network-DobHpaV6.d.ts} +1 -1
- package/dist/{network-Dbxfi7Tp.d.cts → network-GFGEHkS4.d.cts} +1 -1
- package/dist/proto/lrc20.cjs +7 -2
- package/dist/proto/lrc20.d.cts +1 -1
- package/dist/proto/lrc20.d.ts +1 -1
- package/dist/proto/lrc20.js +3 -3
- package/dist/proto/spark.cjs +221 -7
- package/dist/proto/spark.d.cts +1 -1
- package/dist/proto/spark.d.ts +1 -1
- package/dist/proto/spark.js +6 -2
- package/dist/{sdk-types-BZhxaXMN.d.ts → sdk-types-BeI6DM_M.d.ts} +1 -1
- package/dist/{sdk-types-BPwagWYa.d.cts → sdk-types-BuVMn2rX.d.cts} +1 -1
- package/dist/services/config.cjs +17 -17
- package/dist/services/config.d.cts +4 -4
- package/dist/services/config.d.ts +4 -4
- package/dist/services/config.js +4 -4
- package/dist/services/connection.cjs +217 -7
- package/dist/services/connection.d.cts +4 -4
- package/dist/services/connection.d.ts +4 -4
- package/dist/services/connection.js +3 -3
- package/dist/services/index.cjs +227 -22
- package/dist/services/index.d.cts +4 -4
- package/dist/services/index.d.ts +4 -4
- package/dist/services/index.js +7 -7
- package/dist/services/lrc-connection.cjs +7 -2
- package/dist/services/lrc-connection.d.cts +4 -4
- package/dist/services/lrc-connection.d.ts +4 -4
- package/dist/services/lrc-connection.js +4 -4
- package/dist/services/token-transactions.cjs +7 -2
- package/dist/services/token-transactions.d.cts +4 -4
- package/dist/services/token-transactions.d.ts +4 -4
- package/dist/services/token-transactions.js +4 -4
- package/dist/services/wallet-config.cjs +7 -2
- package/dist/services/wallet-config.d.cts +4 -4
- package/dist/services/wallet-config.d.ts +4 -4
- package/dist/services/wallet-config.js +1 -1
- package/dist/signer/signer.cjs +11 -11
- package/dist/signer/signer.d.cts +2 -2
- package/dist/signer/signer.d.ts +2 -2
- package/dist/signer/signer.js +2 -2
- package/dist/{signer-DQfFgVNA.d.cts → signer-C1t40Wus.d.cts} +1 -1
- package/dist/{signer-Db_TjQFj.d.ts → signer-DFGw9RRp.d.ts} +1 -1
- package/dist/{spark-FHwyinrG.d.cts → spark-DXYE9gMM.d.cts} +29 -3
- package/dist/{spark-FHwyinrG.d.ts → spark-DXYE9gMM.d.ts} +29 -3
- package/dist/types/index.cjs +219 -7
- package/dist/types/index.d.cts +4 -4
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.js +3 -3
- package/dist/utils/index.cjs +7 -2
- package/dist/utils/index.d.cts +5 -5
- package/dist/utils/index.d.ts +5 -5
- package/dist/utils/index.js +3 -3
- package/dist/{wasm-W3WBILBX.js → wasm-7OWFHDMS.js} +1 -1
- package/dist/{xhr-transport-DSTXEBFS.js → xhr-transport-RH6LDRXS.js} +1 -1
- package/package.json +3 -4
- package/src/proto/common.ts +1 -1
- package/src/proto/google/protobuf/descriptor.ts +1 -1
- package/src/proto/google/protobuf/duration.ts +1 -1
- package/src/proto/google/protobuf/empty.ts +1 -1
- package/src/proto/google/protobuf/timestamp.ts +1 -1
- package/src/proto/mock.ts +2 -2
- package/src/proto/spark.ts +271 -8
- package/src/proto/spark_authn.ts +2 -2
- package/src/proto/validate/validate.ts +1 -1
- package/src/services/transfer.ts +1 -0
- package/src/signer/signer.ts +6 -11
- package/src/spark-wallet/spark-wallet.ts +177 -73
- package/src/tests/integration/deposit.test.ts +5 -0
- package/src/tests/integration/ssp/static_deposit.test.ts +4 -0
- package/src/tests/spark-wallet/queryNodes.test.ts +89 -0
- package/dist/native/chunk-OVEXKBAZ.js +0 -14
package/dist/native/index.cjs
CHANGED
|
@@ -40,8 +40,13 @@ var init_buffer = __esm({
|
|
|
40
40
|
if (typeof globalThis.Buffer === "undefined") {
|
|
41
41
|
globalThis.Buffer = import_buffer.Buffer;
|
|
42
42
|
}
|
|
43
|
-
if (typeof
|
|
44
|
-
window.global
|
|
43
|
+
if (typeof window !== "undefined") {
|
|
44
|
+
if (typeof window.global === "undefined") {
|
|
45
|
+
window.global = window;
|
|
46
|
+
}
|
|
47
|
+
if (typeof window.globalThis === "undefined") {
|
|
48
|
+
window.globalThis = window;
|
|
49
|
+
}
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
52
|
});
|
|
@@ -1501,7 +1506,6 @@ var NativeSparkFrost = class {
|
|
|
1501
1506
|
init_buffer();
|
|
1502
1507
|
var import_utils4 = require("@noble/curves/abstract/utils");
|
|
1503
1508
|
var import_secp256k15 = require("@noble/curves/secp256k1");
|
|
1504
|
-
var import_sha2 = require("@noble/hashes/sha2");
|
|
1505
1509
|
var import_bip32 = require("@scure/bip32");
|
|
1506
1510
|
var import_bip39 = require("@scure/bip39");
|
|
1507
1511
|
var import_english = require("@scure/bip39/wordlists/english");
|
|
@@ -1824,7 +1828,7 @@ function getSigningCommitmentFromNonce(nonce) {
|
|
|
1824
1828
|
var import_lrc20_sdk = require("@buildonspark/lrc20-sdk");
|
|
1825
1829
|
var import_lrc20_sdk2 = require("@buildonspark/lrc20-sdk");
|
|
1826
1830
|
var import_secp256k16 = require("@bitcoinerlab/secp256k1");
|
|
1827
|
-
var
|
|
1831
|
+
var import_sha2 = require("@noble/hashes/sha2");
|
|
1828
1832
|
var import_lrc20_sdk3 = require("@buildonspark/lrc20-sdk");
|
|
1829
1833
|
var sparkFrostModule = void 0;
|
|
1830
1834
|
var getSparkFrostModule = async () => {
|
|
@@ -2291,15 +2295,11 @@ var DefaultSparkSigner = class {
|
|
|
2291
2295
|
}
|
|
2292
2296
|
if (receipt) {
|
|
2293
2297
|
const receiptPrivateKey = this.getReceiptPrivateKey(receipt);
|
|
2294
|
-
const tweakedKeyPair = import_lrc20_sdk3.
|
|
2295
|
-
import_buffer.Buffer.from(receiptPrivateKey)
|
|
2296
|
-
);
|
|
2298
|
+
const tweakedKeyPair = (0, import_lrc20_sdk3.fromPrivateKey)(import_buffer.Buffer.from(receiptPrivateKey));
|
|
2297
2299
|
psbt.signInput(input, tweakedKeyPair, sighashTypes);
|
|
2298
2300
|
return psbt;
|
|
2299
2301
|
}
|
|
2300
|
-
const keypair = import_lrc20_sdk3.
|
|
2301
|
-
import_buffer.Buffer.from(this.identityKey.privateKey)
|
|
2302
|
-
);
|
|
2302
|
+
const keypair = (0, import_lrc20_sdk3.fromPrivateKey)(import_buffer.Buffer.from(this.identityKey.privateKey));
|
|
2303
2303
|
psbt.signInput(input, keypair, sighashTypes);
|
|
2304
2304
|
return psbt;
|
|
2305
2305
|
}
|
|
@@ -2311,7 +2311,7 @@ var DefaultSparkSigner = class {
|
|
|
2311
2311
|
innerKey = import_buffer.Buffer.concat([import_lrc20_sdk.PARITY, innerKey.slice(1)]);
|
|
2312
2312
|
privateKey = import_buffer.Buffer.from((0, import_secp256k16.privateNegate)(privateKey));
|
|
2313
2313
|
}
|
|
2314
|
-
const pxhPubkey =
|
|
2314
|
+
const pxhPubkey = (0, import_sha2.sha256)(import_buffer.Buffer.concat([pxh, innerKey]));
|
|
2315
2315
|
const receiptProof = (0, import_secp256k16.privateAdd)(privateKey, pxhPubkey);
|
|
2316
2316
|
return import_buffer.Buffer.from(receiptProof);
|
|
2317
2317
|
}
|
|
@@ -10455,6 +10455,203 @@ var FinalizeTransferRequest = {
|
|
|
10455
10455
|
return message;
|
|
10456
10456
|
}
|
|
10457
10457
|
};
|
|
10458
|
+
function createBaseFinalizeTransferWithTransferPackageRequest() {
|
|
10459
|
+
return {
|
|
10460
|
+
transferId: "",
|
|
10461
|
+
ownerIdentityPublicKey: new Uint8Array(0),
|
|
10462
|
+
transferPackage: void 0,
|
|
10463
|
+
refundSignatures: {}
|
|
10464
|
+
};
|
|
10465
|
+
}
|
|
10466
|
+
var FinalizeTransferWithTransferPackageRequest = {
|
|
10467
|
+
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
10468
|
+
if (message.transferId !== "") {
|
|
10469
|
+
writer.uint32(10).string(message.transferId);
|
|
10470
|
+
}
|
|
10471
|
+
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
10472
|
+
writer.uint32(18).bytes(message.ownerIdentityPublicKey);
|
|
10473
|
+
}
|
|
10474
|
+
if (message.transferPackage !== void 0) {
|
|
10475
|
+
TransferPackage.encode(message.transferPackage, writer.uint32(26).fork()).join();
|
|
10476
|
+
}
|
|
10477
|
+
Object.entries(message.refundSignatures).forEach(([key, value]) => {
|
|
10478
|
+
FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.encode(
|
|
10479
|
+
{ key, value },
|
|
10480
|
+
writer.uint32(34).fork()
|
|
10481
|
+
).join();
|
|
10482
|
+
});
|
|
10483
|
+
return writer;
|
|
10484
|
+
},
|
|
10485
|
+
decode(input, length) {
|
|
10486
|
+
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
10487
|
+
let end = length === void 0 ? reader.len : reader.pos + length;
|
|
10488
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest();
|
|
10489
|
+
while (reader.pos < end) {
|
|
10490
|
+
const tag = reader.uint32();
|
|
10491
|
+
switch (tag >>> 3) {
|
|
10492
|
+
case 1: {
|
|
10493
|
+
if (tag !== 10) {
|
|
10494
|
+
break;
|
|
10495
|
+
}
|
|
10496
|
+
message.transferId = reader.string();
|
|
10497
|
+
continue;
|
|
10498
|
+
}
|
|
10499
|
+
case 2: {
|
|
10500
|
+
if (tag !== 18) {
|
|
10501
|
+
break;
|
|
10502
|
+
}
|
|
10503
|
+
message.ownerIdentityPublicKey = reader.bytes();
|
|
10504
|
+
continue;
|
|
10505
|
+
}
|
|
10506
|
+
case 3: {
|
|
10507
|
+
if (tag !== 26) {
|
|
10508
|
+
break;
|
|
10509
|
+
}
|
|
10510
|
+
message.transferPackage = TransferPackage.decode(reader, reader.uint32());
|
|
10511
|
+
continue;
|
|
10512
|
+
}
|
|
10513
|
+
case 4: {
|
|
10514
|
+
if (tag !== 34) {
|
|
10515
|
+
break;
|
|
10516
|
+
}
|
|
10517
|
+
const entry4 = FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.decode(
|
|
10518
|
+
reader,
|
|
10519
|
+
reader.uint32()
|
|
10520
|
+
);
|
|
10521
|
+
if (entry4.value !== void 0) {
|
|
10522
|
+
message.refundSignatures[entry4.key] = entry4.value;
|
|
10523
|
+
}
|
|
10524
|
+
continue;
|
|
10525
|
+
}
|
|
10526
|
+
}
|
|
10527
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
10528
|
+
break;
|
|
10529
|
+
}
|
|
10530
|
+
reader.skip(tag & 7);
|
|
10531
|
+
}
|
|
10532
|
+
return message;
|
|
10533
|
+
},
|
|
10534
|
+
fromJSON(object) {
|
|
10535
|
+
return {
|
|
10536
|
+
transferId: isSet3(object.transferId) ? globalThis.String(object.transferId) : "",
|
|
10537
|
+
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
10538
|
+
transferPackage: isSet3(object.transferPackage) ? TransferPackage.fromJSON(object.transferPackage) : void 0,
|
|
10539
|
+
refundSignatures: isObject8(object.refundSignatures) ? Object.entries(object.refundSignatures).reduce((acc, [key, value]) => {
|
|
10540
|
+
acc[key] = bytesFromBase642(value);
|
|
10541
|
+
return acc;
|
|
10542
|
+
}, {}) : {}
|
|
10543
|
+
};
|
|
10544
|
+
},
|
|
10545
|
+
toJSON(message) {
|
|
10546
|
+
const obj = {};
|
|
10547
|
+
if (message.transferId !== "") {
|
|
10548
|
+
obj.transferId = message.transferId;
|
|
10549
|
+
}
|
|
10550
|
+
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
10551
|
+
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
10552
|
+
}
|
|
10553
|
+
if (message.transferPackage !== void 0) {
|
|
10554
|
+
obj.transferPackage = TransferPackage.toJSON(message.transferPackage);
|
|
10555
|
+
}
|
|
10556
|
+
if (message.refundSignatures) {
|
|
10557
|
+
const entries = Object.entries(message.refundSignatures);
|
|
10558
|
+
if (entries.length > 0) {
|
|
10559
|
+
obj.refundSignatures = {};
|
|
10560
|
+
entries.forEach(([k, v]) => {
|
|
10561
|
+
obj.refundSignatures[k] = base64FromBytes2(v);
|
|
10562
|
+
});
|
|
10563
|
+
}
|
|
10564
|
+
}
|
|
10565
|
+
return obj;
|
|
10566
|
+
},
|
|
10567
|
+
create(base) {
|
|
10568
|
+
return FinalizeTransferWithTransferPackageRequest.fromPartial(base ?? {});
|
|
10569
|
+
},
|
|
10570
|
+
fromPartial(object) {
|
|
10571
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest();
|
|
10572
|
+
message.transferId = object.transferId ?? "";
|
|
10573
|
+
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
10574
|
+
message.transferPackage = object.transferPackage !== void 0 && object.transferPackage !== null ? TransferPackage.fromPartial(object.transferPackage) : void 0;
|
|
10575
|
+
message.refundSignatures = Object.entries(object.refundSignatures ?? {}).reduce(
|
|
10576
|
+
(acc, [key, value]) => {
|
|
10577
|
+
if (value !== void 0) {
|
|
10578
|
+
acc[key] = value;
|
|
10579
|
+
}
|
|
10580
|
+
return acc;
|
|
10581
|
+
},
|
|
10582
|
+
{}
|
|
10583
|
+
);
|
|
10584
|
+
return message;
|
|
10585
|
+
}
|
|
10586
|
+
};
|
|
10587
|
+
function createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry() {
|
|
10588
|
+
return { key: "", value: new Uint8Array(0) };
|
|
10589
|
+
}
|
|
10590
|
+
var FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry = {
|
|
10591
|
+
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
10592
|
+
if (message.key !== "") {
|
|
10593
|
+
writer.uint32(10).string(message.key);
|
|
10594
|
+
}
|
|
10595
|
+
if (message.value.length !== 0) {
|
|
10596
|
+
writer.uint32(18).bytes(message.value);
|
|
10597
|
+
}
|
|
10598
|
+
return writer;
|
|
10599
|
+
},
|
|
10600
|
+
decode(input, length) {
|
|
10601
|
+
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
10602
|
+
let end = length === void 0 ? reader.len : reader.pos + length;
|
|
10603
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry();
|
|
10604
|
+
while (reader.pos < end) {
|
|
10605
|
+
const tag = reader.uint32();
|
|
10606
|
+
switch (tag >>> 3) {
|
|
10607
|
+
case 1: {
|
|
10608
|
+
if (tag !== 10) {
|
|
10609
|
+
break;
|
|
10610
|
+
}
|
|
10611
|
+
message.key = reader.string();
|
|
10612
|
+
continue;
|
|
10613
|
+
}
|
|
10614
|
+
case 2: {
|
|
10615
|
+
if (tag !== 18) {
|
|
10616
|
+
break;
|
|
10617
|
+
}
|
|
10618
|
+
message.value = reader.bytes();
|
|
10619
|
+
continue;
|
|
10620
|
+
}
|
|
10621
|
+
}
|
|
10622
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
10623
|
+
break;
|
|
10624
|
+
}
|
|
10625
|
+
reader.skip(tag & 7);
|
|
10626
|
+
}
|
|
10627
|
+
return message;
|
|
10628
|
+
},
|
|
10629
|
+
fromJSON(object) {
|
|
10630
|
+
return {
|
|
10631
|
+
key: isSet3(object.key) ? globalThis.String(object.key) : "",
|
|
10632
|
+
value: isSet3(object.value) ? bytesFromBase642(object.value) : new Uint8Array(0)
|
|
10633
|
+
};
|
|
10634
|
+
},
|
|
10635
|
+
toJSON(message) {
|
|
10636
|
+
const obj = {};
|
|
10637
|
+
if (message.key !== "") {
|
|
10638
|
+
obj.key = message.key;
|
|
10639
|
+
}
|
|
10640
|
+
if (message.value.length !== 0) {
|
|
10641
|
+
obj.value = base64FromBytes2(message.value);
|
|
10642
|
+
}
|
|
10643
|
+
return obj;
|
|
10644
|
+
},
|
|
10645
|
+
create(base) {
|
|
10646
|
+
return FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.fromPartial(base ?? {});
|
|
10647
|
+
},
|
|
10648
|
+
fromPartial(object) {
|
|
10649
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry();
|
|
10650
|
+
message.key = object.key ?? "";
|
|
10651
|
+
message.value = object.value ?? new Uint8Array(0);
|
|
10652
|
+
return message;
|
|
10653
|
+
}
|
|
10654
|
+
};
|
|
10458
10655
|
function createBaseFinalizeTransferResponse() {
|
|
10459
10656
|
return { transfer: void 0 };
|
|
10460
10657
|
}
|
|
@@ -15737,7 +15934,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
15737
15934
|
writer.uint32(50).bytes(message.userSignature);
|
|
15738
15935
|
}
|
|
15739
15936
|
if (message.transfer !== void 0) {
|
|
15740
|
-
|
|
15937
|
+
StartTransferRequest.encode(message.transfer, writer.uint32(58).fork()).join();
|
|
15741
15938
|
}
|
|
15742
15939
|
if (message.spendTxSigningJob !== void 0) {
|
|
15743
15940
|
SigningJob.encode(message.spendTxSigningJob, writer.uint32(66).fork()).join();
|
|
@@ -15797,7 +15994,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
15797
15994
|
if (tag !== 58) {
|
|
15798
15995
|
break;
|
|
15799
15996
|
}
|
|
15800
|
-
message.transfer =
|
|
15997
|
+
message.transfer = StartTransferRequest.decode(reader, reader.uint32());
|
|
15801
15998
|
continue;
|
|
15802
15999
|
}
|
|
15803
16000
|
case 8: {
|
|
@@ -15822,7 +16019,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
15822
16019
|
amount: isSet3(object.creditAmountSats) ? { $case: "creditAmountSats", creditAmountSats: globalThis.Number(object.creditAmountSats) } : isSet3(object.maxFeeSats) ? { $case: "maxFeeSats", maxFeeSats: globalThis.Number(object.maxFeeSats) } : void 0,
|
|
15823
16020
|
sspSignature: isSet3(object.sspSignature) ? bytesFromBase642(object.sspSignature) : new Uint8Array(0),
|
|
15824
16021
|
userSignature: isSet3(object.userSignature) ? bytesFromBase642(object.userSignature) : new Uint8Array(0),
|
|
15825
|
-
transfer: isSet3(object.transfer) ?
|
|
16022
|
+
transfer: isSet3(object.transfer) ? StartTransferRequest.fromJSON(object.transfer) : void 0,
|
|
15826
16023
|
spendTxSigningJob: isSet3(object.spendTxSigningJob) ? SigningJob.fromJSON(object.spendTxSigningJob) : void 0
|
|
15827
16024
|
};
|
|
15828
16025
|
},
|
|
@@ -15846,7 +16043,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
15846
16043
|
obj.userSignature = base64FromBytes2(message.userSignature);
|
|
15847
16044
|
}
|
|
15848
16045
|
if (message.transfer !== void 0) {
|
|
15849
|
-
obj.transfer =
|
|
16046
|
+
obj.transfer = StartTransferRequest.toJSON(message.transfer);
|
|
15850
16047
|
}
|
|
15851
16048
|
if (message.spendTxSigningJob !== void 0) {
|
|
15852
16049
|
obj.spendTxSigningJob = SigningJob.toJSON(message.spendTxSigningJob);
|
|
@@ -15876,7 +16073,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
15876
16073
|
}
|
|
15877
16074
|
message.sspSignature = object.sspSignature ?? new Uint8Array(0);
|
|
15878
16075
|
message.userSignature = object.userSignature ?? new Uint8Array(0);
|
|
15879
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ?
|
|
16076
|
+
message.transfer = object.transfer !== void 0 && object.transfer !== null ? StartTransferRequest.fromPartial(object.transfer) : void 0;
|
|
15880
16077
|
message.spendTxSigningJob = object.spendTxSigningJob !== void 0 && object.spendTxSigningJob !== null ? SigningJob.fromPartial(object.spendTxSigningJob) : void 0;
|
|
15881
16078
|
return message;
|
|
15882
16079
|
}
|
|
@@ -16851,6 +17048,14 @@ var SparkServiceDefinition = {
|
|
|
16851
17048
|
responseStream: false,
|
|
16852
17049
|
options: {}
|
|
16853
17050
|
},
|
|
17051
|
+
finalize_transfer_with_transfer_package: {
|
|
17052
|
+
name: "finalize_transfer_with_transfer_package",
|
|
17053
|
+
requestType: FinalizeTransferWithTransferPackageRequest,
|
|
17054
|
+
requestStream: false,
|
|
17055
|
+
responseType: FinalizeTransferResponse,
|
|
17056
|
+
responseStream: false,
|
|
17057
|
+
options: {}
|
|
17058
|
+
},
|
|
16854
17059
|
cancel_transfer: {
|
|
16855
17060
|
name: "cancel_transfer",
|
|
16856
17061
|
requestType: CancelTransferRequest,
|
|
@@ -17222,7 +17427,7 @@ init_buffer();
|
|
|
17222
17427
|
init_buffer();
|
|
17223
17428
|
var import_lrc20_sdk4 = require("@buildonspark/lrc20-sdk");
|
|
17224
17429
|
var btc = __toESM(require("@scure/btc-signer"), 1);
|
|
17225
|
-
var
|
|
17430
|
+
var bitcoin = __toESM(require("bitcoinjs-lib"), 1);
|
|
17226
17431
|
var Network2 = /* @__PURE__ */ ((Network5) => {
|
|
17227
17432
|
Network5[Network5["MAINNET"] = 0] = "MAINNET";
|
|
17228
17433
|
Network5[Network5["TESTNET"] = 1] = "TESTNET";
|
|
@@ -17247,11 +17452,11 @@ var NetworkConfig = {
|
|
|
17247
17452
|
};
|
|
17248
17453
|
var getNetwork = (network) => NetworkConfig[network];
|
|
17249
17454
|
var LRC_WALLET_NETWORK = Object.freeze({
|
|
17250
|
-
[0 /* MAINNET */]:
|
|
17251
|
-
[1 /* TESTNET */]:
|
|
17252
|
-
[2 /* SIGNET */]:
|
|
17253
|
-
[3 /* REGTEST */]:
|
|
17254
|
-
[4 /* LOCAL */]:
|
|
17455
|
+
[0 /* MAINNET */]: bitcoin.networks.bitcoin,
|
|
17456
|
+
[1 /* TESTNET */]: bitcoin.networks.testnet,
|
|
17457
|
+
[2 /* SIGNET */]: bitcoin.networks.testnet,
|
|
17458
|
+
[3 /* REGTEST */]: bitcoin.networks.regtest,
|
|
17459
|
+
[4 /* LOCAL */]: bitcoin.networks.regtest
|
|
17255
17460
|
});
|
|
17256
17461
|
var LRC_WALLET_NETWORK_TYPE = Object.freeze({
|
|
17257
17462
|
[0 /* MAINNET */]: import_lrc20_sdk4.NetworkType.MAINNET,
|
|
@@ -17262,7 +17467,7 @@ var LRC_WALLET_NETWORK_TYPE = Object.freeze({
|
|
|
17262
17467
|
});
|
|
17263
17468
|
function getNetworkFromAddress(address2) {
|
|
17264
17469
|
try {
|
|
17265
|
-
const decoded =
|
|
17470
|
+
const decoded = bitcoin.address.fromBech32(address2);
|
|
17266
17471
|
if (decoded.prefix === "bc") {
|
|
17267
17472
|
return "MAINNET" /* MAINNET */;
|
|
17268
17473
|
} else if (decoded.prefix === "bcrt") {
|
|
@@ -19309,7 +19514,8 @@ var TransferService = class extends BaseTransferService {
|
|
|
19309
19514
|
types: [
|
|
19310
19515
|
2 /* TRANSFER */,
|
|
19311
19516
|
0 /* PREIMAGE_SWAP */,
|
|
19312
|
-
1 /* COOPERATIVE_EXIT
|
|
19517
|
+
1 /* COOPERATIVE_EXIT */,
|
|
19518
|
+
3 /* UTXO_SWAP */
|
|
19313
19519
|
],
|
|
19314
19520
|
network: NetworkToProto[this.config.getNetwork()]
|
|
19315
19521
|
});
|
|
@@ -20637,7 +20843,7 @@ function verifySignature(words, prefix) {
|
|
|
20637
20843
|
}
|
|
20638
20844
|
|
|
20639
20845
|
// src/services/lightning.ts
|
|
20640
|
-
var
|
|
20846
|
+
var crypto2 = getCrypto();
|
|
20641
20847
|
var LightningService = class {
|
|
20642
20848
|
config;
|
|
20643
20849
|
connectionManager;
|
|
@@ -20654,7 +20860,7 @@ var LightningService = class {
|
|
|
20654
20860
|
receiverIdentityPubkey,
|
|
20655
20861
|
descriptionHash
|
|
20656
20862
|
}) {
|
|
20657
|
-
const randBytes =
|
|
20863
|
+
const randBytes = crypto2.getRandomValues(new Uint8Array(32));
|
|
20658
20864
|
const preimage = (0, import_utils11.numberToBytesBE)(
|
|
20659
20865
|
(0, import_utils11.bytesToNumberBE)(randBytes) % import_secp256k111.secp256k1.CURVE.n,
|
|
20660
20866
|
32
|
|
@@ -26370,7 +26576,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26370
26576
|
if (event?.$case === "transfer" && event.transfer.transfer && event.transfer.transfer.type !== 40 /* COUNTER_SWAP */) {
|
|
26371
26577
|
const { senderIdentityPublicKey, receiverIdentityPublicKey } = event.transfer.transfer;
|
|
26372
26578
|
if (event.transfer.transfer && !(0, import_utils21.equalBytes)(senderIdentityPublicKey, receiverIdentityPublicKey)) {
|
|
26373
|
-
await this.claimTransfer(
|
|
26579
|
+
await this.claimTransfer({
|
|
26580
|
+
transfer: event.transfer.transfer,
|
|
26581
|
+
emit: true,
|
|
26582
|
+
optimize: true
|
|
26583
|
+
});
|
|
26374
26584
|
}
|
|
26375
26585
|
} else if (event?.$case === "deposit" && event.deposit.deposit) {
|
|
26376
26586
|
const deposit = event.deposit.deposit;
|
|
@@ -26496,10 +26706,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26496
26706
|
}
|
|
26497
26707
|
}
|
|
26498
26708
|
async getLeaves(isBalanceCheck = false) {
|
|
26499
|
-
const
|
|
26500
|
-
this.config.getCoordinatorAddress()
|
|
26501
|
-
);
|
|
26502
|
-
const leaves = await sparkClient.query_nodes({
|
|
26709
|
+
const leaves = await this.queryNodes({
|
|
26503
26710
|
source: {
|
|
26504
26711
|
$case: "ownerIdentityPubkey",
|
|
26505
26712
|
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
@@ -26513,17 +26720,17 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26513
26720
|
this.config.getSigningOperators()
|
|
26514
26721
|
)) {
|
|
26515
26722
|
if (id !== this.config.getCoordinatorIdentifier()) {
|
|
26516
|
-
const
|
|
26723
|
+
const operatorLeaves = await this.queryNodes(
|
|
26724
|
+
{
|
|
26725
|
+
source: {
|
|
26726
|
+
$case: "ownerIdentityPubkey",
|
|
26727
|
+
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
26728
|
+
},
|
|
26729
|
+
includeParents: false,
|
|
26730
|
+
network: NetworkToProto[this.config.getNetwork()]
|
|
26731
|
+
},
|
|
26517
26732
|
operator.address
|
|
26518
26733
|
);
|
|
26519
|
-
const operatorLeaves = await client.query_nodes({
|
|
26520
|
-
source: {
|
|
26521
|
-
$case: "ownerIdentityPubkey",
|
|
26522
|
-
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
26523
|
-
},
|
|
26524
|
-
includeParents: false,
|
|
26525
|
-
network: NetworkToProto[this.config.getNetwork()]
|
|
26526
|
-
});
|
|
26527
26734
|
for (const [nodeId, leaf] of Object.entries(leaves.nodes)) {
|
|
26528
26735
|
const operatorLeaf = operatorLeaves.nodes[nodeId];
|
|
26529
26736
|
if (!operatorLeaf) {
|
|
@@ -26652,10 +26859,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26652
26859
|
}
|
|
26653
26860
|
async syncWallet() {
|
|
26654
26861
|
await this.syncTokenOutputs();
|
|
26655
|
-
|
|
26656
|
-
await this.config.signer.restoreSigningKeysFromLeafs(
|
|
26657
|
-
await this.checkRefreshTimelockNodes();
|
|
26658
|
-
await this.checkExtendTimeLockNodes();
|
|
26862
|
+
let leaves = await this.getLeaves();
|
|
26863
|
+
await this.config.signer.restoreSigningKeysFromLeafs(leaves);
|
|
26864
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
26865
|
+
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
26866
|
+
this.leaves = leaves;
|
|
26659
26867
|
this.optimizeLeaves().catch((e) => {
|
|
26660
26868
|
console.error("Failed to optimize leaves", e);
|
|
26661
26869
|
});
|
|
@@ -26799,11 +27007,6 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26799
27007
|
expected: "smaller or equal to " + Number.MAX_SAFE_INTEGER
|
|
26800
27008
|
});
|
|
26801
27009
|
}
|
|
26802
|
-
try {
|
|
26803
|
-
await this.claimTransfers();
|
|
26804
|
-
} catch (e) {
|
|
26805
|
-
console.warn("Unabled to claim transfers.");
|
|
26806
|
-
}
|
|
26807
27010
|
let leavesToSwap;
|
|
26808
27011
|
if (targetAmount && leaves && leaves.length > 0) {
|
|
26809
27012
|
if (targetAmount < leaves.reduce((acc, leaf) => acc + leaf.value, 0)) {
|
|
@@ -26902,10 +27105,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26902
27105
|
if (!request) {
|
|
26903
27106
|
throw new Error("Failed to request leaves swap. No response returned.");
|
|
26904
27107
|
}
|
|
26905
|
-
const
|
|
26906
|
-
this.config.getCoordinatorAddress()
|
|
26907
|
-
);
|
|
26908
|
-
const nodes = await sparkClient.query_nodes({
|
|
27108
|
+
const nodes = await this.queryNodes({
|
|
26909
27109
|
source: {
|
|
26910
27110
|
$case: "nodeIds",
|
|
26911
27111
|
nodeIds: {
|
|
@@ -27076,7 +27276,20 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27076
27276
|
* @returns {Promise<string>} A Bitcoin address for depositing funds
|
|
27077
27277
|
*/
|
|
27078
27278
|
async getStaticDepositAddress() {
|
|
27079
|
-
|
|
27279
|
+
try {
|
|
27280
|
+
return await this.generateDepositAddress(true);
|
|
27281
|
+
} catch (error) {
|
|
27282
|
+
if (error.message?.includes("static deposit address already exists")) {
|
|
27283
|
+
const existingAddresses = await this.queryStaticDepositAddresses();
|
|
27284
|
+
if (existingAddresses.length > 0 && existingAddresses[0]) {
|
|
27285
|
+
return existingAddresses[0];
|
|
27286
|
+
} else {
|
|
27287
|
+
throw error;
|
|
27288
|
+
}
|
|
27289
|
+
} else {
|
|
27290
|
+
throw error;
|
|
27291
|
+
}
|
|
27292
|
+
}
|
|
27080
27293
|
}
|
|
27081
27294
|
/**
|
|
27082
27295
|
* Generates a deposit address for receiving funds.
|
|
@@ -27659,7 +27872,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27659
27872
|
const pendingTransfer = await this.transferService.queryTransfer(
|
|
27660
27873
|
transfer.id
|
|
27661
27874
|
);
|
|
27662
|
-
const resultNodes = !pendingTransfer ? [] : await this.claimTransfer(pendingTransfer);
|
|
27875
|
+
const resultNodes = !pendingTransfer ? [] : await this.claimTransfer({ transfer: pendingTransfer });
|
|
27663
27876
|
const leavesToRemove = new Set(leaves.map((leaf) => leaf.id));
|
|
27664
27877
|
this.leaves = [
|
|
27665
27878
|
...this.leaves.filter((leaf) => !leavesToRemove.has(leaf.id)),
|
|
@@ -27709,7 +27922,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27709
27922
|
);
|
|
27710
27923
|
return await this.withLeaves(async () => {
|
|
27711
27924
|
let leavesToSend = await this.selectLeaves(amountSats);
|
|
27712
|
-
await this.checkRefreshTimelockNodes(leavesToSend);
|
|
27925
|
+
leavesToSend = await this.checkRefreshTimelockNodes(leavesToSend);
|
|
27713
27926
|
leavesToSend = await this.checkExtendTimeLockNodes(leavesToSend);
|
|
27714
27927
|
const leafKeyTweaks = await Promise.all(
|
|
27715
27928
|
leavesToSend.map(async (leaf) => ({
|
|
@@ -27730,7 +27943,10 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27730
27943
|
const transactionId = transfer.id;
|
|
27731
27944
|
const pendingTransfer = await this.transferService.queryTransfer(transactionId);
|
|
27732
27945
|
if (pendingTransfer) {
|
|
27733
|
-
await this.claimTransfer(
|
|
27946
|
+
await this.claimTransfer({
|
|
27947
|
+
transfer: pendingTransfer,
|
|
27948
|
+
optimize: true
|
|
27949
|
+
});
|
|
27734
27950
|
}
|
|
27735
27951
|
}
|
|
27736
27952
|
return mapTransferToWalletTransfer(
|
|
@@ -27740,11 +27956,10 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27740
27956
|
});
|
|
27741
27957
|
}
|
|
27742
27958
|
async checkExtendTimeLockNodes(nodes) {
|
|
27743
|
-
const nodesToCheck = nodes ?? this.leaves;
|
|
27744
27959
|
const nodesToExtend = [];
|
|
27745
27960
|
const nodeIds = [];
|
|
27746
|
-
|
|
27747
|
-
for (const node of
|
|
27961
|
+
const validNodes = [];
|
|
27962
|
+
for (const node of nodes) {
|
|
27748
27963
|
const nodeTx = getTxFromRawTxBytes(node.nodeTx);
|
|
27749
27964
|
const { needRefresh } = getNextTransactionSequence(
|
|
27750
27965
|
nodeTx.getInput(0).sequence
|
|
@@ -27752,9 +27967,14 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27752
27967
|
if (needRefresh) {
|
|
27753
27968
|
nodesToExtend.push(node);
|
|
27754
27969
|
nodeIds.push(node.id);
|
|
27970
|
+
} else {
|
|
27971
|
+
validNodes.push(node);
|
|
27755
27972
|
}
|
|
27756
27973
|
}
|
|
27757
|
-
|
|
27974
|
+
if (nodesToExtend.length === 0) {
|
|
27975
|
+
return validNodes;
|
|
27976
|
+
}
|
|
27977
|
+
const nodesToAdd = [];
|
|
27758
27978
|
for (const node of nodesToExtend) {
|
|
27759
27979
|
const signingPubKey = await this.config.signer.generatePublicKey(
|
|
27760
27980
|
(0, import_sha213.sha256)(node.id)
|
|
@@ -27765,9 +27985,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27765
27985
|
);
|
|
27766
27986
|
this.leaves = this.leaves.filter((leaf) => leaf.id !== node.id);
|
|
27767
27987
|
const newNodes = await this.transferLeavesToSelf(nodes2, signingPubKey);
|
|
27768
|
-
|
|
27988
|
+
nodesToAdd.push(...newNodes);
|
|
27769
27989
|
}
|
|
27770
|
-
|
|
27990
|
+
this.updateLeaves(nodeIds, nodesToAdd);
|
|
27991
|
+
validNodes.push(...nodesToAdd);
|
|
27992
|
+
return validNodes;
|
|
27771
27993
|
}
|
|
27772
27994
|
/**
|
|
27773
27995
|
* Internal method to refresh timelock nodes.
|
|
@@ -27779,7 +28001,8 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27779
28001
|
async checkRefreshTimelockNodes(nodes) {
|
|
27780
28002
|
const nodesToRefresh = [];
|
|
27781
28003
|
const nodeIds = [];
|
|
27782
|
-
|
|
28004
|
+
const validNodes = [];
|
|
28005
|
+
for (const node of nodes) {
|
|
27783
28006
|
const refundTx = getTxFromRawTxBytes(node.refundTx);
|
|
27784
28007
|
const { needRefresh } = getNextTransactionSequence(
|
|
27785
28008
|
refundTx.getInput(0).sequence,
|
|
@@ -27788,15 +28011,14 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27788
28011
|
if (needRefresh) {
|
|
27789
28012
|
nodesToRefresh.push(node);
|
|
27790
28013
|
nodeIds.push(node.id);
|
|
28014
|
+
} else {
|
|
28015
|
+
validNodes.push(node);
|
|
27791
28016
|
}
|
|
27792
28017
|
}
|
|
27793
28018
|
if (nodesToRefresh.length === 0) {
|
|
27794
|
-
return;
|
|
28019
|
+
return validNodes;
|
|
27795
28020
|
}
|
|
27796
|
-
const
|
|
27797
|
-
this.config.getCoordinatorAddress()
|
|
27798
|
-
);
|
|
27799
|
-
const nodesResp = await sparkClient.query_nodes({
|
|
28021
|
+
const nodesResp = await this.queryNodes({
|
|
27800
28022
|
source: {
|
|
27801
28023
|
$case: "nodeIds",
|
|
27802
28024
|
nodeIds: {
|
|
@@ -27810,6 +28032,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27810
28032
|
for (const node of Object.values(nodesResp.nodes)) {
|
|
27811
28033
|
nodesMap.set(node.id, node);
|
|
27812
28034
|
}
|
|
28035
|
+
const nodesToAdd = [];
|
|
27813
28036
|
for (const node of nodesToRefresh) {
|
|
27814
28037
|
if (!node.parentNodeId) {
|
|
27815
28038
|
throw new Error(`node ${node.id} has no parent`);
|
|
@@ -27830,9 +28053,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27830
28053
|
if (!newNode) {
|
|
27831
28054
|
throw new Error("Failed to refresh timelock node");
|
|
27832
28055
|
}
|
|
27833
|
-
|
|
27834
|
-
this.leaves.push(newNode);
|
|
28056
|
+
nodesToAdd.push(newNode);
|
|
27835
28057
|
}
|
|
28058
|
+
this.updateLeaves(nodeIds, nodesToAdd);
|
|
28059
|
+
validNodes.push(...nodesToAdd);
|
|
28060
|
+
return validNodes;
|
|
27836
28061
|
}
|
|
27837
28062
|
/**
|
|
27838
28063
|
* Claims a specific transfer.
|
|
@@ -27840,11 +28065,16 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27840
28065
|
* @param {Transfer} transfer - The transfer to claim
|
|
27841
28066
|
* @returns {Promise<Object>} The claim result
|
|
27842
28067
|
*/
|
|
27843
|
-
async claimTransfer(
|
|
28068
|
+
async claimTransfer({
|
|
28069
|
+
transfer,
|
|
28070
|
+
emit,
|
|
28071
|
+
retryCount,
|
|
28072
|
+
optimize
|
|
28073
|
+
}) {
|
|
27844
28074
|
const MAX_RETRIES = 5;
|
|
27845
28075
|
const BASE_DELAY_MS = 1e3;
|
|
27846
28076
|
const MAX_DELAY_MS = 1e4;
|
|
27847
|
-
if (retryCount > 0) {
|
|
28077
|
+
if (retryCount && retryCount > 0) {
|
|
27848
28078
|
const delayMs = Math.min(
|
|
27849
28079
|
BASE_DELAY_MS * Math.pow(2, retryCount - 1),
|
|
27850
28080
|
MAX_DELAY_MS
|
|
@@ -27860,7 +28090,10 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27860
28090
|
const leafPubKey = leafPubKeyMap.get(leaf.leaf.id);
|
|
27861
28091
|
if (leafPubKey) {
|
|
27862
28092
|
leavesToClaim.push({
|
|
27863
|
-
leaf:
|
|
28093
|
+
leaf: {
|
|
28094
|
+
...leaf.leaf,
|
|
28095
|
+
refundTx: leaf.intermediateRefundTx
|
|
28096
|
+
},
|
|
27864
28097
|
signingPubKey: leafPubKey,
|
|
27865
28098
|
newSigningPubKey: await this.config.signer.generatePublicKey(
|
|
27866
28099
|
(0, import_sha213.sha256)(leaf.leaf.id)
|
|
@@ -27873,7 +28106,6 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27873
28106
|
transfer,
|
|
27874
28107
|
leavesToClaim
|
|
27875
28108
|
);
|
|
27876
|
-
this.leaves.push(...response.nodes);
|
|
27877
28109
|
if (emit) {
|
|
27878
28110
|
this.emit(
|
|
27879
28111
|
"transfer:claimed",
|
|
@@ -27883,14 +28115,25 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27883
28115
|
}
|
|
27884
28116
|
return response.nodes;
|
|
27885
28117
|
});
|
|
27886
|
-
await this.checkRefreshTimelockNodes(result);
|
|
28118
|
+
result = await this.checkRefreshTimelockNodes(result);
|
|
27887
28119
|
result = await this.checkExtendTimeLockNodes(result);
|
|
28120
|
+
const existingIds = new Set(this.leaves.map((leaf) => leaf.id));
|
|
28121
|
+
const uniqueResults = result.filter((node) => !existingIds.has(node.id));
|
|
28122
|
+
this.leaves.push(...uniqueResults);
|
|
28123
|
+
if (optimize && transfer.type !== 40 /* COUNTER_SWAP */) {
|
|
28124
|
+
await this.optimizeLeaves();
|
|
28125
|
+
}
|
|
27888
28126
|
return result;
|
|
27889
28127
|
} catch (error) {
|
|
27890
|
-
if (retryCount < MAX_RETRIES) {
|
|
27891
|
-
this.claimTransfer(
|
|
28128
|
+
if (retryCount && retryCount < MAX_RETRIES) {
|
|
28129
|
+
this.claimTransfer({
|
|
28130
|
+
transfer,
|
|
28131
|
+
emit,
|
|
28132
|
+
retryCount: retryCount + 1,
|
|
28133
|
+
optimize
|
|
28134
|
+
});
|
|
27892
28135
|
return [];
|
|
27893
|
-
} else if (retryCount
|
|
28136
|
+
} else if (retryCount) {
|
|
27894
28137
|
console.warn(
|
|
27895
28138
|
"Failed to claim transfer. Please try reinitializing your wallet in a few minutes. Transfer ID: " + transfer.id,
|
|
27896
28139
|
error
|
|
@@ -27925,7 +28168,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27925
28168
|
continue;
|
|
27926
28169
|
}
|
|
27927
28170
|
promises.push(
|
|
27928
|
-
this.claimTransfer(transfer, emit).then(() => transfer.id).catch((error) => {
|
|
28171
|
+
this.claimTransfer({ transfer, emit, optimize: true }).then(() => transfer.id).catch((error) => {
|
|
27929
28172
|
console.warn(`Failed to claim transfer ${transfer.id}:`, error);
|
|
27930
28173
|
return null;
|
|
27931
28174
|
})
|
|
@@ -27960,11 +28203,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27960
28203
|
*
|
|
27961
28204
|
* @param {Object} params - Parameters for the lightning invoice
|
|
27962
28205
|
* @param {number} params.amountSats - Amount in satoshis
|
|
27963
|
-
* @param {string} params.memo - Description for the invoice
|
|
28206
|
+
* @param {string} [params.memo] - Description for the invoice. Should not be provided if the descriptionHash is provided.
|
|
27964
28207
|
* @param {number} [params.expirySeconds] - Optional expiry time in seconds
|
|
27965
28208
|
* @param {boolean} [params.includeSparkAddress] - Optional boolean signalling whether or not to include the spark address in the invoice
|
|
27966
28209
|
* @param {string} [params.receiverIdentityPubkey] - Optional public key of the wallet receiving the lightning invoice. If not present, the receiver will be the creator of this request.
|
|
27967
|
-
* @param {string} [params.descriptionHash] - Optional h tag of the invoice. This is the hash of a longer description to include in the lightning invoice. It is used in LNURL and UMA as the hash of the metadata.
|
|
28210
|
+
* @param {string} [params.descriptionHash] - Optional h tag of the invoice. This is the hash of a longer description to include in the lightning invoice. It is used in LNURL and UMA as the hash of the metadata. This field is mutually exclusive with the memo field. Only one or the other should be provided.
|
|
27968
28211
|
* @returns {Promise<LightningReceiveRequest>} BOLT11 encoded invoice
|
|
27969
28212
|
*/
|
|
27970
28213
|
async createLightningInvoice({
|
|
@@ -28011,6 +28254,16 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28011
28254
|
expected: "Memo size within limits"
|
|
28012
28255
|
});
|
|
28013
28256
|
}
|
|
28257
|
+
if (memo && descriptionHash) {
|
|
28258
|
+
throw new ValidationError(
|
|
28259
|
+
"Memo and descriptionHash cannot be provided together. Please provide only one.",
|
|
28260
|
+
{
|
|
28261
|
+
field: "memo",
|
|
28262
|
+
value: memo,
|
|
28263
|
+
expected: "Memo or descriptionHash"
|
|
28264
|
+
}
|
|
28265
|
+
);
|
|
28266
|
+
}
|
|
28014
28267
|
const requestLightningInvoice = async (amountSats2, paymentHash, memo2, receiverIdentityPubkey2, descriptionHash2) => {
|
|
28015
28268
|
const network = this.config.getNetwork();
|
|
28016
28269
|
let bitcoinNetwork = BitcoinNetwork_default.REGTEST;
|
|
@@ -28146,7 +28399,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28146
28399
|
});
|
|
28147
28400
|
}
|
|
28148
28401
|
let leaves = await this.selectLeaves(totalAmount);
|
|
28149
|
-
await this.checkRefreshTimelockNodes(leaves);
|
|
28402
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
28150
28403
|
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
28151
28404
|
const leavesToSend = await Promise.all(
|
|
28152
28405
|
leaves.map(async (leaf) => ({
|
|
@@ -28327,7 +28580,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28327
28580
|
);
|
|
28328
28581
|
}
|
|
28329
28582
|
}
|
|
28330
|
-
await this.checkRefreshTimelockNodes(leavesToSend);
|
|
28583
|
+
leavesToSend = await this.checkRefreshTimelockNodes(leavesToSend);
|
|
28331
28584
|
leavesToSend = await this.checkExtendTimeLockNodes(leavesToSend);
|
|
28332
28585
|
const leafKeyTweaks = await Promise.all(
|
|
28333
28586
|
leavesToSend.map(async (leaf) => ({
|
|
@@ -28397,7 +28650,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28397
28650
|
});
|
|
28398
28651
|
}
|
|
28399
28652
|
let leaves = await this.selectLeaves(amountSats);
|
|
28400
|
-
await this.checkRefreshTimelockNodes(leaves);
|
|
28653
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
28401
28654
|
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
28402
28655
|
const feeEstimate = await sspClient.getCoopExitFeeEstimate({
|
|
28403
28656
|
leafExternalIds: leaves.map((leaf) => leaf.id),
|
|
@@ -28631,6 +28884,33 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28631
28884
|
}
|
|
28632
28885
|
}, 1e4);
|
|
28633
28886
|
}
|
|
28887
|
+
async updateLeaves(leavesToRemove, leavesToAdd) {
|
|
28888
|
+
const leavesToRemoveSet = new Set(leavesToRemove);
|
|
28889
|
+
this.leaves = this.leaves.filter((leaf) => !leavesToRemoveSet.has(leaf.id));
|
|
28890
|
+
this.leaves.push(...leavesToAdd);
|
|
28891
|
+
}
|
|
28892
|
+
async queryNodes(baseRequest, sparkClientAddress, pageSize = 100) {
|
|
28893
|
+
const address2 = sparkClientAddress ?? this.config.getCoordinatorAddress();
|
|
28894
|
+
const aggregatedNodes = {};
|
|
28895
|
+
let offset = 0;
|
|
28896
|
+
while (true) {
|
|
28897
|
+
const sparkClient = await this.connectionManager.createSparkClient(address2);
|
|
28898
|
+
const response = await sparkClient.query_nodes({
|
|
28899
|
+
...baseRequest,
|
|
28900
|
+
limit: pageSize,
|
|
28901
|
+
offset
|
|
28902
|
+
});
|
|
28903
|
+
Object.assign(aggregatedNodes, response.nodes ?? {});
|
|
28904
|
+
const received = Object.keys(response.nodes ?? {}).length;
|
|
28905
|
+
if (received < pageSize) {
|
|
28906
|
+
return {
|
|
28907
|
+
nodes: aggregatedNodes,
|
|
28908
|
+
offset: response.offset
|
|
28909
|
+
};
|
|
28910
|
+
}
|
|
28911
|
+
offset += pageSize;
|
|
28912
|
+
}
|
|
28913
|
+
}
|
|
28634
28914
|
};
|
|
28635
28915
|
|
|
28636
28916
|
// src/utils/mempool.ts
|