@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/index.cjs
CHANGED
|
@@ -39,8 +39,13 @@ var init_buffer = __esm({
|
|
|
39
39
|
if (typeof globalThis.Buffer === "undefined") {
|
|
40
40
|
globalThis.Buffer = import_buffer.Buffer;
|
|
41
41
|
}
|
|
42
|
-
if (typeof
|
|
43
|
-
window.global
|
|
42
|
+
if (typeof window !== "undefined") {
|
|
43
|
+
if (typeof window.global === "undefined") {
|
|
44
|
+
window.global = window;
|
|
45
|
+
}
|
|
46
|
+
if (typeof window.globalThis === "undefined") {
|
|
47
|
+
window.globalThis = window;
|
|
48
|
+
}
|
|
44
49
|
}
|
|
45
50
|
}
|
|
46
51
|
});
|
|
@@ -9510,6 +9515,203 @@ var FinalizeTransferRequest = {
|
|
|
9510
9515
|
return message;
|
|
9511
9516
|
}
|
|
9512
9517
|
};
|
|
9518
|
+
function createBaseFinalizeTransferWithTransferPackageRequest() {
|
|
9519
|
+
return {
|
|
9520
|
+
transferId: "",
|
|
9521
|
+
ownerIdentityPublicKey: new Uint8Array(0),
|
|
9522
|
+
transferPackage: void 0,
|
|
9523
|
+
refundSignatures: {}
|
|
9524
|
+
};
|
|
9525
|
+
}
|
|
9526
|
+
var FinalizeTransferWithTransferPackageRequest = {
|
|
9527
|
+
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
9528
|
+
if (message.transferId !== "") {
|
|
9529
|
+
writer.uint32(10).string(message.transferId);
|
|
9530
|
+
}
|
|
9531
|
+
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
9532
|
+
writer.uint32(18).bytes(message.ownerIdentityPublicKey);
|
|
9533
|
+
}
|
|
9534
|
+
if (message.transferPackage !== void 0) {
|
|
9535
|
+
TransferPackage.encode(message.transferPackage, writer.uint32(26).fork()).join();
|
|
9536
|
+
}
|
|
9537
|
+
Object.entries(message.refundSignatures).forEach(([key, value]) => {
|
|
9538
|
+
FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.encode(
|
|
9539
|
+
{ key, value },
|
|
9540
|
+
writer.uint32(34).fork()
|
|
9541
|
+
).join();
|
|
9542
|
+
});
|
|
9543
|
+
return writer;
|
|
9544
|
+
},
|
|
9545
|
+
decode(input, length) {
|
|
9546
|
+
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
9547
|
+
let end = length === void 0 ? reader.len : reader.pos + length;
|
|
9548
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest();
|
|
9549
|
+
while (reader.pos < end) {
|
|
9550
|
+
const tag = reader.uint32();
|
|
9551
|
+
switch (tag >>> 3) {
|
|
9552
|
+
case 1: {
|
|
9553
|
+
if (tag !== 10) {
|
|
9554
|
+
break;
|
|
9555
|
+
}
|
|
9556
|
+
message.transferId = reader.string();
|
|
9557
|
+
continue;
|
|
9558
|
+
}
|
|
9559
|
+
case 2: {
|
|
9560
|
+
if (tag !== 18) {
|
|
9561
|
+
break;
|
|
9562
|
+
}
|
|
9563
|
+
message.ownerIdentityPublicKey = reader.bytes();
|
|
9564
|
+
continue;
|
|
9565
|
+
}
|
|
9566
|
+
case 3: {
|
|
9567
|
+
if (tag !== 26) {
|
|
9568
|
+
break;
|
|
9569
|
+
}
|
|
9570
|
+
message.transferPackage = TransferPackage.decode(reader, reader.uint32());
|
|
9571
|
+
continue;
|
|
9572
|
+
}
|
|
9573
|
+
case 4: {
|
|
9574
|
+
if (tag !== 34) {
|
|
9575
|
+
break;
|
|
9576
|
+
}
|
|
9577
|
+
const entry4 = FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.decode(
|
|
9578
|
+
reader,
|
|
9579
|
+
reader.uint32()
|
|
9580
|
+
);
|
|
9581
|
+
if (entry4.value !== void 0) {
|
|
9582
|
+
message.refundSignatures[entry4.key] = entry4.value;
|
|
9583
|
+
}
|
|
9584
|
+
continue;
|
|
9585
|
+
}
|
|
9586
|
+
}
|
|
9587
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
9588
|
+
break;
|
|
9589
|
+
}
|
|
9590
|
+
reader.skip(tag & 7);
|
|
9591
|
+
}
|
|
9592
|
+
return message;
|
|
9593
|
+
},
|
|
9594
|
+
fromJSON(object) {
|
|
9595
|
+
return {
|
|
9596
|
+
transferId: isSet3(object.transferId) ? globalThis.String(object.transferId) : "",
|
|
9597
|
+
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
9598
|
+
transferPackage: isSet3(object.transferPackage) ? TransferPackage.fromJSON(object.transferPackage) : void 0,
|
|
9599
|
+
refundSignatures: isObject8(object.refundSignatures) ? Object.entries(object.refundSignatures).reduce((acc, [key, value]) => {
|
|
9600
|
+
acc[key] = bytesFromBase642(value);
|
|
9601
|
+
return acc;
|
|
9602
|
+
}, {}) : {}
|
|
9603
|
+
};
|
|
9604
|
+
},
|
|
9605
|
+
toJSON(message) {
|
|
9606
|
+
const obj = {};
|
|
9607
|
+
if (message.transferId !== "") {
|
|
9608
|
+
obj.transferId = message.transferId;
|
|
9609
|
+
}
|
|
9610
|
+
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
9611
|
+
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
9612
|
+
}
|
|
9613
|
+
if (message.transferPackage !== void 0) {
|
|
9614
|
+
obj.transferPackage = TransferPackage.toJSON(message.transferPackage);
|
|
9615
|
+
}
|
|
9616
|
+
if (message.refundSignatures) {
|
|
9617
|
+
const entries = Object.entries(message.refundSignatures);
|
|
9618
|
+
if (entries.length > 0) {
|
|
9619
|
+
obj.refundSignatures = {};
|
|
9620
|
+
entries.forEach(([k, v]) => {
|
|
9621
|
+
obj.refundSignatures[k] = base64FromBytes2(v);
|
|
9622
|
+
});
|
|
9623
|
+
}
|
|
9624
|
+
}
|
|
9625
|
+
return obj;
|
|
9626
|
+
},
|
|
9627
|
+
create(base) {
|
|
9628
|
+
return FinalizeTransferWithTransferPackageRequest.fromPartial(base ?? {});
|
|
9629
|
+
},
|
|
9630
|
+
fromPartial(object) {
|
|
9631
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest();
|
|
9632
|
+
message.transferId = object.transferId ?? "";
|
|
9633
|
+
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
9634
|
+
message.transferPackage = object.transferPackage !== void 0 && object.transferPackage !== null ? TransferPackage.fromPartial(object.transferPackage) : void 0;
|
|
9635
|
+
message.refundSignatures = Object.entries(object.refundSignatures ?? {}).reduce(
|
|
9636
|
+
(acc, [key, value]) => {
|
|
9637
|
+
if (value !== void 0) {
|
|
9638
|
+
acc[key] = value;
|
|
9639
|
+
}
|
|
9640
|
+
return acc;
|
|
9641
|
+
},
|
|
9642
|
+
{}
|
|
9643
|
+
);
|
|
9644
|
+
return message;
|
|
9645
|
+
}
|
|
9646
|
+
};
|
|
9647
|
+
function createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry() {
|
|
9648
|
+
return { key: "", value: new Uint8Array(0) };
|
|
9649
|
+
}
|
|
9650
|
+
var FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry = {
|
|
9651
|
+
encode(message, writer = new import_wire4.BinaryWriter()) {
|
|
9652
|
+
if (message.key !== "") {
|
|
9653
|
+
writer.uint32(10).string(message.key);
|
|
9654
|
+
}
|
|
9655
|
+
if (message.value.length !== 0) {
|
|
9656
|
+
writer.uint32(18).bytes(message.value);
|
|
9657
|
+
}
|
|
9658
|
+
return writer;
|
|
9659
|
+
},
|
|
9660
|
+
decode(input, length) {
|
|
9661
|
+
const reader = input instanceof import_wire4.BinaryReader ? input : new import_wire4.BinaryReader(input);
|
|
9662
|
+
let end = length === void 0 ? reader.len : reader.pos + length;
|
|
9663
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry();
|
|
9664
|
+
while (reader.pos < end) {
|
|
9665
|
+
const tag = reader.uint32();
|
|
9666
|
+
switch (tag >>> 3) {
|
|
9667
|
+
case 1: {
|
|
9668
|
+
if (tag !== 10) {
|
|
9669
|
+
break;
|
|
9670
|
+
}
|
|
9671
|
+
message.key = reader.string();
|
|
9672
|
+
continue;
|
|
9673
|
+
}
|
|
9674
|
+
case 2: {
|
|
9675
|
+
if (tag !== 18) {
|
|
9676
|
+
break;
|
|
9677
|
+
}
|
|
9678
|
+
message.value = reader.bytes();
|
|
9679
|
+
continue;
|
|
9680
|
+
}
|
|
9681
|
+
}
|
|
9682
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
9683
|
+
break;
|
|
9684
|
+
}
|
|
9685
|
+
reader.skip(tag & 7);
|
|
9686
|
+
}
|
|
9687
|
+
return message;
|
|
9688
|
+
},
|
|
9689
|
+
fromJSON(object) {
|
|
9690
|
+
return {
|
|
9691
|
+
key: isSet3(object.key) ? globalThis.String(object.key) : "",
|
|
9692
|
+
value: isSet3(object.value) ? bytesFromBase642(object.value) : new Uint8Array(0)
|
|
9693
|
+
};
|
|
9694
|
+
},
|
|
9695
|
+
toJSON(message) {
|
|
9696
|
+
const obj = {};
|
|
9697
|
+
if (message.key !== "") {
|
|
9698
|
+
obj.key = message.key;
|
|
9699
|
+
}
|
|
9700
|
+
if (message.value.length !== 0) {
|
|
9701
|
+
obj.value = base64FromBytes2(message.value);
|
|
9702
|
+
}
|
|
9703
|
+
return obj;
|
|
9704
|
+
},
|
|
9705
|
+
create(base) {
|
|
9706
|
+
return FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.fromPartial(base ?? {});
|
|
9707
|
+
},
|
|
9708
|
+
fromPartial(object) {
|
|
9709
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry();
|
|
9710
|
+
message.key = object.key ?? "";
|
|
9711
|
+
message.value = object.value ?? new Uint8Array(0);
|
|
9712
|
+
return message;
|
|
9713
|
+
}
|
|
9714
|
+
};
|
|
9513
9715
|
function createBaseFinalizeTransferResponse() {
|
|
9514
9716
|
return { transfer: void 0 };
|
|
9515
9717
|
}
|
|
@@ -14792,7 +14994,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14792
14994
|
writer.uint32(50).bytes(message.userSignature);
|
|
14793
14995
|
}
|
|
14794
14996
|
if (message.transfer !== void 0) {
|
|
14795
|
-
|
|
14997
|
+
StartTransferRequest.encode(message.transfer, writer.uint32(58).fork()).join();
|
|
14796
14998
|
}
|
|
14797
14999
|
if (message.spendTxSigningJob !== void 0) {
|
|
14798
15000
|
SigningJob.encode(message.spendTxSigningJob, writer.uint32(66).fork()).join();
|
|
@@ -14852,7 +15054,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14852
15054
|
if (tag !== 58) {
|
|
14853
15055
|
break;
|
|
14854
15056
|
}
|
|
14855
|
-
message.transfer =
|
|
15057
|
+
message.transfer = StartTransferRequest.decode(reader, reader.uint32());
|
|
14856
15058
|
continue;
|
|
14857
15059
|
}
|
|
14858
15060
|
case 8: {
|
|
@@ -14877,7 +15079,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14877
15079
|
amount: isSet3(object.creditAmountSats) ? { $case: "creditAmountSats", creditAmountSats: globalThis.Number(object.creditAmountSats) } : isSet3(object.maxFeeSats) ? { $case: "maxFeeSats", maxFeeSats: globalThis.Number(object.maxFeeSats) } : void 0,
|
|
14878
15080
|
sspSignature: isSet3(object.sspSignature) ? bytesFromBase642(object.sspSignature) : new Uint8Array(0),
|
|
14879
15081
|
userSignature: isSet3(object.userSignature) ? bytesFromBase642(object.userSignature) : new Uint8Array(0),
|
|
14880
|
-
transfer: isSet3(object.transfer) ?
|
|
15082
|
+
transfer: isSet3(object.transfer) ? StartTransferRequest.fromJSON(object.transfer) : void 0,
|
|
14881
15083
|
spendTxSigningJob: isSet3(object.spendTxSigningJob) ? SigningJob.fromJSON(object.spendTxSigningJob) : void 0
|
|
14882
15084
|
};
|
|
14883
15085
|
},
|
|
@@ -14901,7 +15103,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14901
15103
|
obj.userSignature = base64FromBytes2(message.userSignature);
|
|
14902
15104
|
}
|
|
14903
15105
|
if (message.transfer !== void 0) {
|
|
14904
|
-
obj.transfer =
|
|
15106
|
+
obj.transfer = StartTransferRequest.toJSON(message.transfer);
|
|
14905
15107
|
}
|
|
14906
15108
|
if (message.spendTxSigningJob !== void 0) {
|
|
14907
15109
|
obj.spendTxSigningJob = SigningJob.toJSON(message.spendTxSigningJob);
|
|
@@ -14931,7 +15133,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14931
15133
|
}
|
|
14932
15134
|
message.sspSignature = object.sspSignature ?? new Uint8Array(0);
|
|
14933
15135
|
message.userSignature = object.userSignature ?? new Uint8Array(0);
|
|
14934
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ?
|
|
15136
|
+
message.transfer = object.transfer !== void 0 && object.transfer !== null ? StartTransferRequest.fromPartial(object.transfer) : void 0;
|
|
14935
15137
|
message.spendTxSigningJob = object.spendTxSigningJob !== void 0 && object.spendTxSigningJob !== null ? SigningJob.fromPartial(object.spendTxSigningJob) : void 0;
|
|
14936
15138
|
return message;
|
|
14937
15139
|
}
|
|
@@ -15906,6 +16108,14 @@ var SparkServiceDefinition = {
|
|
|
15906
16108
|
responseStream: false,
|
|
15907
16109
|
options: {}
|
|
15908
16110
|
},
|
|
16111
|
+
finalize_transfer_with_transfer_package: {
|
|
16112
|
+
name: "finalize_transfer_with_transfer_package",
|
|
16113
|
+
requestType: FinalizeTransferWithTransferPackageRequest,
|
|
16114
|
+
requestStream: false,
|
|
16115
|
+
responseType: FinalizeTransferResponse,
|
|
16116
|
+
responseStream: false,
|
|
16117
|
+
options: {}
|
|
16118
|
+
},
|
|
15909
16119
|
cancel_transfer: {
|
|
15910
16120
|
name: "cancel_transfer",
|
|
15911
16121
|
requestType: CancelTransferRequest,
|
|
@@ -16277,7 +16487,6 @@ init_buffer();
|
|
|
16277
16487
|
init_buffer();
|
|
16278
16488
|
var import_utils4 = require("@noble/curves/abstract/utils");
|
|
16279
16489
|
var import_secp256k15 = require("@noble/curves/secp256k1");
|
|
16280
|
-
var import_sha22 = require("@noble/hashes/sha2");
|
|
16281
16490
|
var import_bip32 = require("@scure/bip32");
|
|
16282
16491
|
var import_bip39 = require("@scure/bip39");
|
|
16283
16492
|
var import_english = require("@scure/bip39/wordlists/english");
|
|
@@ -16811,7 +17020,7 @@ function decodeBytesToSigningCommitment(bytes2) {
|
|
|
16811
17020
|
var import_lrc20_sdk = require("@buildonspark/lrc20-sdk");
|
|
16812
17021
|
var import_lrc20_sdk2 = require("@buildonspark/lrc20-sdk");
|
|
16813
17022
|
var import_secp256k16 = require("@bitcoinerlab/secp256k1");
|
|
16814
|
-
var
|
|
17023
|
+
var import_sha22 = require("@noble/hashes/sha2");
|
|
16815
17024
|
var import_lrc20_sdk3 = require("@buildonspark/lrc20-sdk");
|
|
16816
17025
|
var sparkFrostModule = void 0;
|
|
16817
17026
|
var getSparkFrostModule = async () => {
|
|
@@ -17278,15 +17487,11 @@ var DefaultSparkSigner = class {
|
|
|
17278
17487
|
}
|
|
17279
17488
|
if (receipt) {
|
|
17280
17489
|
const receiptPrivateKey = this.getReceiptPrivateKey(receipt);
|
|
17281
|
-
const tweakedKeyPair = import_lrc20_sdk3.
|
|
17282
|
-
import_buffer.Buffer.from(receiptPrivateKey)
|
|
17283
|
-
);
|
|
17490
|
+
const tweakedKeyPair = (0, import_lrc20_sdk3.fromPrivateKey)(import_buffer.Buffer.from(receiptPrivateKey));
|
|
17284
17491
|
psbt.signInput(input, tweakedKeyPair, sighashTypes);
|
|
17285
17492
|
return psbt;
|
|
17286
17493
|
}
|
|
17287
|
-
const keypair = import_lrc20_sdk3.
|
|
17288
|
-
import_buffer.Buffer.from(this.identityKey.privateKey)
|
|
17289
|
-
);
|
|
17494
|
+
const keypair = (0, import_lrc20_sdk3.fromPrivateKey)(import_buffer.Buffer.from(this.identityKey.privateKey));
|
|
17290
17495
|
psbt.signInput(input, keypair, sighashTypes);
|
|
17291
17496
|
return psbt;
|
|
17292
17497
|
}
|
|
@@ -17298,7 +17503,7 @@ var DefaultSparkSigner = class {
|
|
|
17298
17503
|
innerKey = import_buffer.Buffer.concat([import_lrc20_sdk.PARITY, innerKey.slice(1)]);
|
|
17299
17504
|
privateKey = import_buffer.Buffer.from((0, import_secp256k16.privateNegate)(privateKey));
|
|
17300
17505
|
}
|
|
17301
|
-
const pxhPubkey =
|
|
17506
|
+
const pxhPubkey = (0, import_sha22.sha256)(import_buffer.Buffer.concat([pxh, innerKey]));
|
|
17302
17507
|
const receiptProof = (0, import_secp256k16.privateAdd)(privateKey, pxhPubkey);
|
|
17303
17508
|
return import_buffer.Buffer.from(receiptProof);
|
|
17304
17509
|
}
|
|
@@ -17308,7 +17513,7 @@ var DefaultSparkSigner = class {
|
|
|
17308
17513
|
init_buffer();
|
|
17309
17514
|
var import_lrc20_sdk4 = require("@buildonspark/lrc20-sdk");
|
|
17310
17515
|
var btc = __toESM(require("@scure/btc-signer"), 1);
|
|
17311
|
-
var
|
|
17516
|
+
var bitcoin = __toESM(require("bitcoinjs-lib"), 1);
|
|
17312
17517
|
var Network2 = /* @__PURE__ */ ((Network5) => {
|
|
17313
17518
|
Network5[Network5["MAINNET"] = 0] = "MAINNET";
|
|
17314
17519
|
Network5[Network5["TESTNET"] = 1] = "TESTNET";
|
|
@@ -17333,11 +17538,11 @@ var NetworkConfig = {
|
|
|
17333
17538
|
};
|
|
17334
17539
|
var getNetwork = (network) => NetworkConfig[network];
|
|
17335
17540
|
var LRC_WALLET_NETWORK = Object.freeze({
|
|
17336
|
-
[0 /* MAINNET */]:
|
|
17337
|
-
[1 /* TESTNET */]:
|
|
17338
|
-
[2 /* SIGNET */]:
|
|
17339
|
-
[3 /* REGTEST */]:
|
|
17340
|
-
[4 /* LOCAL */]:
|
|
17541
|
+
[0 /* MAINNET */]: bitcoin.networks.bitcoin,
|
|
17542
|
+
[1 /* TESTNET */]: bitcoin.networks.testnet,
|
|
17543
|
+
[2 /* SIGNET */]: bitcoin.networks.testnet,
|
|
17544
|
+
[3 /* REGTEST */]: bitcoin.networks.regtest,
|
|
17545
|
+
[4 /* LOCAL */]: bitcoin.networks.regtest
|
|
17341
17546
|
});
|
|
17342
17547
|
var LRC_WALLET_NETWORK_TYPE = Object.freeze({
|
|
17343
17548
|
[0 /* MAINNET */]: import_lrc20_sdk4.NetworkType.MAINNET,
|
|
@@ -17348,7 +17553,7 @@ var LRC_WALLET_NETWORK_TYPE = Object.freeze({
|
|
|
17348
17553
|
});
|
|
17349
17554
|
function getNetworkFromAddress(address2) {
|
|
17350
17555
|
try {
|
|
17351
|
-
const decoded =
|
|
17556
|
+
const decoded = bitcoin.address.fromBech32(address2);
|
|
17352
17557
|
if (decoded.prefix === "bc") {
|
|
17353
17558
|
return "MAINNET" /* MAINNET */;
|
|
17354
17559
|
} else if (decoded.prefix === "bcrt") {
|
|
@@ -19409,7 +19614,8 @@ var TransferService = class extends BaseTransferService {
|
|
|
19409
19614
|
types: [
|
|
19410
19615
|
2 /* TRANSFER */,
|
|
19411
19616
|
0 /* PREIMAGE_SWAP */,
|
|
19412
|
-
1 /* COOPERATIVE_EXIT
|
|
19617
|
+
1 /* COOPERATIVE_EXIT */,
|
|
19618
|
+
3 /* UTXO_SWAP */
|
|
19413
19619
|
],
|
|
19414
19620
|
network: NetworkToProto[this.config.getNetwork()]
|
|
19415
19621
|
});
|
|
@@ -20737,7 +20943,7 @@ function verifySignature(words, prefix) {
|
|
|
20737
20943
|
}
|
|
20738
20944
|
|
|
20739
20945
|
// src/services/lightning.ts
|
|
20740
|
-
var
|
|
20946
|
+
var crypto2 = getCrypto();
|
|
20741
20947
|
var LightningService = class {
|
|
20742
20948
|
config;
|
|
20743
20949
|
connectionManager;
|
|
@@ -20754,7 +20960,7 @@ var LightningService = class {
|
|
|
20754
20960
|
receiverIdentityPubkey,
|
|
20755
20961
|
descriptionHash
|
|
20756
20962
|
}) {
|
|
20757
|
-
const randBytes =
|
|
20963
|
+
const randBytes = crypto2.getRandomValues(new Uint8Array(32));
|
|
20758
20964
|
const preimage = (0, import_utils10.numberToBytesBE)(
|
|
20759
20965
|
(0, import_utils10.bytesToNumberBE)(randBytes) % import_secp256k111.secp256k1.CURVE.n,
|
|
20760
20966
|
32
|
|
@@ -26480,7 +26686,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26480
26686
|
if (event?.$case === "transfer" && event.transfer.transfer && event.transfer.transfer.type !== 40 /* COUNTER_SWAP */) {
|
|
26481
26687
|
const { senderIdentityPublicKey, receiverIdentityPublicKey } = event.transfer.transfer;
|
|
26482
26688
|
if (event.transfer.transfer && !(0, import_utils20.equalBytes)(senderIdentityPublicKey, receiverIdentityPublicKey)) {
|
|
26483
|
-
await this.claimTransfer(
|
|
26689
|
+
await this.claimTransfer({
|
|
26690
|
+
transfer: event.transfer.transfer,
|
|
26691
|
+
emit: true,
|
|
26692
|
+
optimize: true
|
|
26693
|
+
});
|
|
26484
26694
|
}
|
|
26485
26695
|
} else if (event?.$case === "deposit" && event.deposit.deposit) {
|
|
26486
26696
|
const deposit = event.deposit.deposit;
|
|
@@ -26606,10 +26816,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26606
26816
|
}
|
|
26607
26817
|
}
|
|
26608
26818
|
async getLeaves(isBalanceCheck = false) {
|
|
26609
|
-
const
|
|
26610
|
-
this.config.getCoordinatorAddress()
|
|
26611
|
-
);
|
|
26612
|
-
const leaves = await sparkClient.query_nodes({
|
|
26819
|
+
const leaves = await this.queryNodes({
|
|
26613
26820
|
source: {
|
|
26614
26821
|
$case: "ownerIdentityPubkey",
|
|
26615
26822
|
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
@@ -26623,17 +26830,17 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26623
26830
|
this.config.getSigningOperators()
|
|
26624
26831
|
)) {
|
|
26625
26832
|
if (id !== this.config.getCoordinatorIdentifier()) {
|
|
26626
|
-
const
|
|
26833
|
+
const operatorLeaves = await this.queryNodes(
|
|
26834
|
+
{
|
|
26835
|
+
source: {
|
|
26836
|
+
$case: "ownerIdentityPubkey",
|
|
26837
|
+
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
26838
|
+
},
|
|
26839
|
+
includeParents: false,
|
|
26840
|
+
network: NetworkToProto[this.config.getNetwork()]
|
|
26841
|
+
},
|
|
26627
26842
|
operator.address
|
|
26628
26843
|
);
|
|
26629
|
-
const operatorLeaves = await client.query_nodes({
|
|
26630
|
-
source: {
|
|
26631
|
-
$case: "ownerIdentityPubkey",
|
|
26632
|
-
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
26633
|
-
},
|
|
26634
|
-
includeParents: false,
|
|
26635
|
-
network: NetworkToProto[this.config.getNetwork()]
|
|
26636
|
-
});
|
|
26637
26844
|
for (const [nodeId, leaf] of Object.entries(leaves.nodes)) {
|
|
26638
26845
|
const operatorLeaf = operatorLeaves.nodes[nodeId];
|
|
26639
26846
|
if (!operatorLeaf) {
|
|
@@ -26762,10 +26969,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26762
26969
|
}
|
|
26763
26970
|
async syncWallet() {
|
|
26764
26971
|
await this.syncTokenOutputs();
|
|
26765
|
-
|
|
26766
|
-
await this.config.signer.restoreSigningKeysFromLeafs(
|
|
26767
|
-
await this.checkRefreshTimelockNodes();
|
|
26768
|
-
await this.checkExtendTimeLockNodes();
|
|
26972
|
+
let leaves = await this.getLeaves();
|
|
26973
|
+
await this.config.signer.restoreSigningKeysFromLeafs(leaves);
|
|
26974
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
26975
|
+
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
26976
|
+
this.leaves = leaves;
|
|
26769
26977
|
this.optimizeLeaves().catch((e) => {
|
|
26770
26978
|
console.error("Failed to optimize leaves", e);
|
|
26771
26979
|
});
|
|
@@ -26909,11 +27117,6 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
26909
27117
|
expected: "smaller or equal to " + Number.MAX_SAFE_INTEGER
|
|
26910
27118
|
});
|
|
26911
27119
|
}
|
|
26912
|
-
try {
|
|
26913
|
-
await this.claimTransfers();
|
|
26914
|
-
} catch (e) {
|
|
26915
|
-
console.warn("Unabled to claim transfers.");
|
|
26916
|
-
}
|
|
26917
27120
|
let leavesToSwap;
|
|
26918
27121
|
if (targetAmount && leaves && leaves.length > 0) {
|
|
26919
27122
|
if (targetAmount < leaves.reduce((acc, leaf) => acc + leaf.value, 0)) {
|
|
@@ -27012,10 +27215,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27012
27215
|
if (!request) {
|
|
27013
27216
|
throw new Error("Failed to request leaves swap. No response returned.");
|
|
27014
27217
|
}
|
|
27015
|
-
const
|
|
27016
|
-
this.config.getCoordinatorAddress()
|
|
27017
|
-
);
|
|
27018
|
-
const nodes = await sparkClient.query_nodes({
|
|
27218
|
+
const nodes = await this.queryNodes({
|
|
27019
27219
|
source: {
|
|
27020
27220
|
$case: "nodeIds",
|
|
27021
27221
|
nodeIds: {
|
|
@@ -27186,7 +27386,20 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27186
27386
|
* @returns {Promise<string>} A Bitcoin address for depositing funds
|
|
27187
27387
|
*/
|
|
27188
27388
|
async getStaticDepositAddress() {
|
|
27189
|
-
|
|
27389
|
+
try {
|
|
27390
|
+
return await this.generateDepositAddress(true);
|
|
27391
|
+
} catch (error) {
|
|
27392
|
+
if (error.message?.includes("static deposit address already exists")) {
|
|
27393
|
+
const existingAddresses = await this.queryStaticDepositAddresses();
|
|
27394
|
+
if (existingAddresses.length > 0 && existingAddresses[0]) {
|
|
27395
|
+
return existingAddresses[0];
|
|
27396
|
+
} else {
|
|
27397
|
+
throw error;
|
|
27398
|
+
}
|
|
27399
|
+
} else {
|
|
27400
|
+
throw error;
|
|
27401
|
+
}
|
|
27402
|
+
}
|
|
27190
27403
|
}
|
|
27191
27404
|
/**
|
|
27192
27405
|
* Generates a deposit address for receiving funds.
|
|
@@ -27769,7 +27982,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27769
27982
|
const pendingTransfer = await this.transferService.queryTransfer(
|
|
27770
27983
|
transfer.id
|
|
27771
27984
|
);
|
|
27772
|
-
const resultNodes = !pendingTransfer ? [] : await this.claimTransfer(pendingTransfer);
|
|
27985
|
+
const resultNodes = !pendingTransfer ? [] : await this.claimTransfer({ transfer: pendingTransfer });
|
|
27773
27986
|
const leavesToRemove = new Set(leaves.map((leaf) => leaf.id));
|
|
27774
27987
|
this.leaves = [
|
|
27775
27988
|
...this.leaves.filter((leaf) => !leavesToRemove.has(leaf.id)),
|
|
@@ -27819,7 +28032,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27819
28032
|
);
|
|
27820
28033
|
return await this.withLeaves(async () => {
|
|
27821
28034
|
let leavesToSend = await this.selectLeaves(amountSats);
|
|
27822
|
-
await this.checkRefreshTimelockNodes(leavesToSend);
|
|
28035
|
+
leavesToSend = await this.checkRefreshTimelockNodes(leavesToSend);
|
|
27823
28036
|
leavesToSend = await this.checkExtendTimeLockNodes(leavesToSend);
|
|
27824
28037
|
const leafKeyTweaks = await Promise.all(
|
|
27825
28038
|
leavesToSend.map(async (leaf) => ({
|
|
@@ -27840,7 +28053,10 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27840
28053
|
const transactionId = transfer.id;
|
|
27841
28054
|
const pendingTransfer = await this.transferService.queryTransfer(transactionId);
|
|
27842
28055
|
if (pendingTransfer) {
|
|
27843
|
-
await this.claimTransfer(
|
|
28056
|
+
await this.claimTransfer({
|
|
28057
|
+
transfer: pendingTransfer,
|
|
28058
|
+
optimize: true
|
|
28059
|
+
});
|
|
27844
28060
|
}
|
|
27845
28061
|
}
|
|
27846
28062
|
return mapTransferToWalletTransfer(
|
|
@@ -27850,11 +28066,10 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27850
28066
|
});
|
|
27851
28067
|
}
|
|
27852
28068
|
async checkExtendTimeLockNodes(nodes) {
|
|
27853
|
-
const nodesToCheck = nodes ?? this.leaves;
|
|
27854
28069
|
const nodesToExtend = [];
|
|
27855
28070
|
const nodeIds = [];
|
|
27856
|
-
|
|
27857
|
-
for (const node of
|
|
28071
|
+
const validNodes = [];
|
|
28072
|
+
for (const node of nodes) {
|
|
27858
28073
|
const nodeTx = getTxFromRawTxBytes(node.nodeTx);
|
|
27859
28074
|
const { needRefresh } = getNextTransactionSequence(
|
|
27860
28075
|
nodeTx.getInput(0).sequence
|
|
@@ -27862,9 +28077,14 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27862
28077
|
if (needRefresh) {
|
|
27863
28078
|
nodesToExtend.push(node);
|
|
27864
28079
|
nodeIds.push(node.id);
|
|
28080
|
+
} else {
|
|
28081
|
+
validNodes.push(node);
|
|
27865
28082
|
}
|
|
27866
28083
|
}
|
|
27867
|
-
|
|
28084
|
+
if (nodesToExtend.length === 0) {
|
|
28085
|
+
return validNodes;
|
|
28086
|
+
}
|
|
28087
|
+
const nodesToAdd = [];
|
|
27868
28088
|
for (const node of nodesToExtend) {
|
|
27869
28089
|
const signingPubKey = await this.config.signer.generatePublicKey(
|
|
27870
28090
|
(0, import_sha213.sha256)(node.id)
|
|
@@ -27875,9 +28095,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27875
28095
|
);
|
|
27876
28096
|
this.leaves = this.leaves.filter((leaf) => leaf.id !== node.id);
|
|
27877
28097
|
const newNodes = await this.transferLeavesToSelf(nodes2, signingPubKey);
|
|
27878
|
-
|
|
28098
|
+
nodesToAdd.push(...newNodes);
|
|
27879
28099
|
}
|
|
27880
|
-
|
|
28100
|
+
this.updateLeaves(nodeIds, nodesToAdd);
|
|
28101
|
+
validNodes.push(...nodesToAdd);
|
|
28102
|
+
return validNodes;
|
|
27881
28103
|
}
|
|
27882
28104
|
/**
|
|
27883
28105
|
* Internal method to refresh timelock nodes.
|
|
@@ -27889,7 +28111,8 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27889
28111
|
async checkRefreshTimelockNodes(nodes) {
|
|
27890
28112
|
const nodesToRefresh = [];
|
|
27891
28113
|
const nodeIds = [];
|
|
27892
|
-
|
|
28114
|
+
const validNodes = [];
|
|
28115
|
+
for (const node of nodes) {
|
|
27893
28116
|
const refundTx = getTxFromRawTxBytes(node.refundTx);
|
|
27894
28117
|
const { needRefresh } = getNextTransactionSequence(
|
|
27895
28118
|
refundTx.getInput(0).sequence,
|
|
@@ -27898,15 +28121,14 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27898
28121
|
if (needRefresh) {
|
|
27899
28122
|
nodesToRefresh.push(node);
|
|
27900
28123
|
nodeIds.push(node.id);
|
|
28124
|
+
} else {
|
|
28125
|
+
validNodes.push(node);
|
|
27901
28126
|
}
|
|
27902
28127
|
}
|
|
27903
28128
|
if (nodesToRefresh.length === 0) {
|
|
27904
|
-
return;
|
|
28129
|
+
return validNodes;
|
|
27905
28130
|
}
|
|
27906
|
-
const
|
|
27907
|
-
this.config.getCoordinatorAddress()
|
|
27908
|
-
);
|
|
27909
|
-
const nodesResp = await sparkClient.query_nodes({
|
|
28131
|
+
const nodesResp = await this.queryNodes({
|
|
27910
28132
|
source: {
|
|
27911
28133
|
$case: "nodeIds",
|
|
27912
28134
|
nodeIds: {
|
|
@@ -27920,6 +28142,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27920
28142
|
for (const node of Object.values(nodesResp.nodes)) {
|
|
27921
28143
|
nodesMap.set(node.id, node);
|
|
27922
28144
|
}
|
|
28145
|
+
const nodesToAdd = [];
|
|
27923
28146
|
for (const node of nodesToRefresh) {
|
|
27924
28147
|
if (!node.parentNodeId) {
|
|
27925
28148
|
throw new Error(`node ${node.id} has no parent`);
|
|
@@ -27940,9 +28163,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27940
28163
|
if (!newNode) {
|
|
27941
28164
|
throw new Error("Failed to refresh timelock node");
|
|
27942
28165
|
}
|
|
27943
|
-
|
|
27944
|
-
this.leaves.push(newNode);
|
|
28166
|
+
nodesToAdd.push(newNode);
|
|
27945
28167
|
}
|
|
28168
|
+
this.updateLeaves(nodeIds, nodesToAdd);
|
|
28169
|
+
validNodes.push(...nodesToAdd);
|
|
28170
|
+
return validNodes;
|
|
27946
28171
|
}
|
|
27947
28172
|
/**
|
|
27948
28173
|
* Claims a specific transfer.
|
|
@@ -27950,11 +28175,16 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27950
28175
|
* @param {Transfer} transfer - The transfer to claim
|
|
27951
28176
|
* @returns {Promise<Object>} The claim result
|
|
27952
28177
|
*/
|
|
27953
|
-
async claimTransfer(
|
|
28178
|
+
async claimTransfer({
|
|
28179
|
+
transfer,
|
|
28180
|
+
emit,
|
|
28181
|
+
retryCount,
|
|
28182
|
+
optimize
|
|
28183
|
+
}) {
|
|
27954
28184
|
const MAX_RETRIES = 5;
|
|
27955
28185
|
const BASE_DELAY_MS = 1e3;
|
|
27956
28186
|
const MAX_DELAY_MS = 1e4;
|
|
27957
|
-
if (retryCount > 0) {
|
|
28187
|
+
if (retryCount && retryCount > 0) {
|
|
27958
28188
|
const delayMs = Math.min(
|
|
27959
28189
|
BASE_DELAY_MS * Math.pow(2, retryCount - 1),
|
|
27960
28190
|
MAX_DELAY_MS
|
|
@@ -27970,7 +28200,10 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27970
28200
|
const leafPubKey = leafPubKeyMap.get(leaf.leaf.id);
|
|
27971
28201
|
if (leafPubKey) {
|
|
27972
28202
|
leavesToClaim.push({
|
|
27973
|
-
leaf:
|
|
28203
|
+
leaf: {
|
|
28204
|
+
...leaf.leaf,
|
|
28205
|
+
refundTx: leaf.intermediateRefundTx
|
|
28206
|
+
},
|
|
27974
28207
|
signingPubKey: leafPubKey,
|
|
27975
28208
|
newSigningPubKey: await this.config.signer.generatePublicKey(
|
|
27976
28209
|
(0, import_sha213.sha256)(leaf.leaf.id)
|
|
@@ -27983,7 +28216,6 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27983
28216
|
transfer,
|
|
27984
28217
|
leavesToClaim
|
|
27985
28218
|
);
|
|
27986
|
-
this.leaves.push(...response.nodes);
|
|
27987
28219
|
if (emit) {
|
|
27988
28220
|
this.emit(
|
|
27989
28221
|
"transfer:claimed",
|
|
@@ -27993,14 +28225,25 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
27993
28225
|
}
|
|
27994
28226
|
return response.nodes;
|
|
27995
28227
|
});
|
|
27996
|
-
await this.checkRefreshTimelockNodes(result);
|
|
28228
|
+
result = await this.checkRefreshTimelockNodes(result);
|
|
27997
28229
|
result = await this.checkExtendTimeLockNodes(result);
|
|
28230
|
+
const existingIds = new Set(this.leaves.map((leaf) => leaf.id));
|
|
28231
|
+
const uniqueResults = result.filter((node) => !existingIds.has(node.id));
|
|
28232
|
+
this.leaves.push(...uniqueResults);
|
|
28233
|
+
if (optimize && transfer.type !== 40 /* COUNTER_SWAP */) {
|
|
28234
|
+
await this.optimizeLeaves();
|
|
28235
|
+
}
|
|
27998
28236
|
return result;
|
|
27999
28237
|
} catch (error) {
|
|
28000
|
-
if (retryCount < MAX_RETRIES) {
|
|
28001
|
-
this.claimTransfer(
|
|
28238
|
+
if (retryCount && retryCount < MAX_RETRIES) {
|
|
28239
|
+
this.claimTransfer({
|
|
28240
|
+
transfer,
|
|
28241
|
+
emit,
|
|
28242
|
+
retryCount: retryCount + 1,
|
|
28243
|
+
optimize
|
|
28244
|
+
});
|
|
28002
28245
|
return [];
|
|
28003
|
-
} else if (retryCount
|
|
28246
|
+
} else if (retryCount) {
|
|
28004
28247
|
console.warn(
|
|
28005
28248
|
"Failed to claim transfer. Please try reinitializing your wallet in a few minutes. Transfer ID: " + transfer.id,
|
|
28006
28249
|
error
|
|
@@ -28035,7 +28278,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28035
28278
|
continue;
|
|
28036
28279
|
}
|
|
28037
28280
|
promises.push(
|
|
28038
|
-
this.claimTransfer(transfer, emit).then(() => transfer.id).catch((error) => {
|
|
28281
|
+
this.claimTransfer({ transfer, emit, optimize: true }).then(() => transfer.id).catch((error) => {
|
|
28039
28282
|
console.warn(`Failed to claim transfer ${transfer.id}:`, error);
|
|
28040
28283
|
return null;
|
|
28041
28284
|
})
|
|
@@ -28070,11 +28313,11 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28070
28313
|
*
|
|
28071
28314
|
* @param {Object} params - Parameters for the lightning invoice
|
|
28072
28315
|
* @param {number} params.amountSats - Amount in satoshis
|
|
28073
|
-
* @param {string} params.memo - Description for the invoice
|
|
28316
|
+
* @param {string} [params.memo] - Description for the invoice. Should not be provided if the descriptionHash is provided.
|
|
28074
28317
|
* @param {number} [params.expirySeconds] - Optional expiry time in seconds
|
|
28075
28318
|
* @param {boolean} [params.includeSparkAddress] - Optional boolean signalling whether or not to include the spark address in the invoice
|
|
28076
28319
|
* @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.
|
|
28077
|
-
* @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.
|
|
28320
|
+
* @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.
|
|
28078
28321
|
* @returns {Promise<LightningReceiveRequest>} BOLT11 encoded invoice
|
|
28079
28322
|
*/
|
|
28080
28323
|
async createLightningInvoice({
|
|
@@ -28121,6 +28364,16 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28121
28364
|
expected: "Memo size within limits"
|
|
28122
28365
|
});
|
|
28123
28366
|
}
|
|
28367
|
+
if (memo && descriptionHash) {
|
|
28368
|
+
throw new ValidationError(
|
|
28369
|
+
"Memo and descriptionHash cannot be provided together. Please provide only one.",
|
|
28370
|
+
{
|
|
28371
|
+
field: "memo",
|
|
28372
|
+
value: memo,
|
|
28373
|
+
expected: "Memo or descriptionHash"
|
|
28374
|
+
}
|
|
28375
|
+
);
|
|
28376
|
+
}
|
|
28124
28377
|
const requestLightningInvoice = async (amountSats2, paymentHash, memo2, receiverIdentityPubkey2, descriptionHash2) => {
|
|
28125
28378
|
const network = this.config.getNetwork();
|
|
28126
28379
|
let bitcoinNetwork = BitcoinNetwork_default.REGTEST;
|
|
@@ -28256,7 +28509,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28256
28509
|
});
|
|
28257
28510
|
}
|
|
28258
28511
|
let leaves = await this.selectLeaves(totalAmount);
|
|
28259
|
-
await this.checkRefreshTimelockNodes(leaves);
|
|
28512
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
28260
28513
|
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
28261
28514
|
const leavesToSend = await Promise.all(
|
|
28262
28515
|
leaves.map(async (leaf) => ({
|
|
@@ -28437,7 +28690,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28437
28690
|
);
|
|
28438
28691
|
}
|
|
28439
28692
|
}
|
|
28440
|
-
await this.checkRefreshTimelockNodes(leavesToSend);
|
|
28693
|
+
leavesToSend = await this.checkRefreshTimelockNodes(leavesToSend);
|
|
28441
28694
|
leavesToSend = await this.checkExtendTimeLockNodes(leavesToSend);
|
|
28442
28695
|
const leafKeyTweaks = await Promise.all(
|
|
28443
28696
|
leavesToSend.map(async (leaf) => ({
|
|
@@ -28507,7 +28760,7 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28507
28760
|
});
|
|
28508
28761
|
}
|
|
28509
28762
|
let leaves = await this.selectLeaves(amountSats);
|
|
28510
|
-
await this.checkRefreshTimelockNodes(leaves);
|
|
28763
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
28511
28764
|
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
28512
28765
|
const feeEstimate = await sspClient.getCoopExitFeeEstimate({
|
|
28513
28766
|
leafExternalIds: leaves.map((leaf) => leaf.id),
|
|
@@ -28741,6 +28994,33 @@ var SparkWallet = class _SparkWallet extends import_eventemitter3.EventEmitter {
|
|
|
28741
28994
|
}
|
|
28742
28995
|
}, 1e4);
|
|
28743
28996
|
}
|
|
28997
|
+
async updateLeaves(leavesToRemove, leavesToAdd) {
|
|
28998
|
+
const leavesToRemoveSet = new Set(leavesToRemove);
|
|
28999
|
+
this.leaves = this.leaves.filter((leaf) => !leavesToRemoveSet.has(leaf.id));
|
|
29000
|
+
this.leaves.push(...leavesToAdd);
|
|
29001
|
+
}
|
|
29002
|
+
async queryNodes(baseRequest, sparkClientAddress, pageSize = 100) {
|
|
29003
|
+
const address2 = sparkClientAddress ?? this.config.getCoordinatorAddress();
|
|
29004
|
+
const aggregatedNodes = {};
|
|
29005
|
+
let offset = 0;
|
|
29006
|
+
while (true) {
|
|
29007
|
+
const sparkClient = await this.connectionManager.createSparkClient(address2);
|
|
29008
|
+
const response = await sparkClient.query_nodes({
|
|
29009
|
+
...baseRequest,
|
|
29010
|
+
limit: pageSize,
|
|
29011
|
+
offset
|
|
29012
|
+
});
|
|
29013
|
+
Object.assign(aggregatedNodes, response.nodes ?? {});
|
|
29014
|
+
const received = Object.keys(response.nodes ?? {}).length;
|
|
29015
|
+
if (received < pageSize) {
|
|
29016
|
+
return {
|
|
29017
|
+
nodes: aggregatedNodes,
|
|
29018
|
+
offset: response.offset
|
|
29019
|
+
};
|
|
29020
|
+
}
|
|
29021
|
+
offset += pageSize;
|
|
29022
|
+
}
|
|
29023
|
+
}
|
|
28744
29024
|
};
|
|
28745
29025
|
|
|
28746
29026
|
// src/index.ts
|