@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.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require("react-native-get-random-values");
|
|
2
2
|
import {
|
|
3
3
|
Buffer
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-C3WN3D4O.js";
|
|
5
5
|
|
|
6
6
|
// src/signer/signer.react-native.ts
|
|
7
7
|
import { bytesToHex as bytesToHex3, hexToBytes as hexToBytes2 } from "@noble/hashes/utils";
|
|
@@ -209,7 +209,6 @@ import {
|
|
|
209
209
|
hexToBytes
|
|
210
210
|
} from "@noble/curves/abstract/utils";
|
|
211
211
|
import { schnorr as schnorr2, secp256k1 as secp256k15 } from "@noble/curves/secp256k1";
|
|
212
|
-
import { sha256 } from "@noble/hashes/sha2";
|
|
213
212
|
import { HDKey } from "@scure/bip32";
|
|
214
213
|
import { generateMnemonic, mnemonicToSeed } from "@scure/bip39";
|
|
215
214
|
import { wordlist } from "@scure/bip39/wordlists/english";
|
|
@@ -526,15 +525,15 @@ function getSigningCommitmentFromNonce(nonce) {
|
|
|
526
525
|
import { PARITY } from "@buildonspark/lrc20-sdk";
|
|
527
526
|
import { Receipt } from "@buildonspark/lrc20-sdk";
|
|
528
527
|
import { privateNegate, privateAdd } from "@bitcoinerlab/secp256k1";
|
|
529
|
-
import
|
|
530
|
-
import {
|
|
528
|
+
import { sha256 } from "@noble/hashes/sha2";
|
|
529
|
+
import { fromPrivateKey } from "@buildonspark/lrc20-sdk";
|
|
531
530
|
var sparkFrostModule = void 0;
|
|
532
531
|
var getSparkFrostModule = async () => {
|
|
533
532
|
if (isReactNative) {
|
|
534
533
|
return void 0;
|
|
535
534
|
}
|
|
536
535
|
if (!sparkFrostModule) {
|
|
537
|
-
sparkFrostModule = await import("./wasm-
|
|
536
|
+
sparkFrostModule = await import("./wasm-PZWVEGEE.js");
|
|
538
537
|
}
|
|
539
538
|
return sparkFrostModule;
|
|
540
539
|
};
|
|
@@ -993,15 +992,11 @@ var DefaultSparkSigner = class {
|
|
|
993
992
|
}
|
|
994
993
|
if (receipt) {
|
|
995
994
|
const receiptPrivateKey = this.getReceiptPrivateKey(receipt);
|
|
996
|
-
const tweakedKeyPair =
|
|
997
|
-
Buffer.from(receiptPrivateKey)
|
|
998
|
-
);
|
|
995
|
+
const tweakedKeyPair = fromPrivateKey(Buffer.from(receiptPrivateKey));
|
|
999
996
|
psbt.signInput(input, tweakedKeyPair, sighashTypes);
|
|
1000
997
|
return psbt;
|
|
1001
998
|
}
|
|
1002
|
-
const keypair =
|
|
1003
|
-
Buffer.from(this.identityKey.privateKey)
|
|
1004
|
-
);
|
|
999
|
+
const keypair = fromPrivateKey(Buffer.from(this.identityKey.privateKey));
|
|
1005
1000
|
psbt.signInput(input, keypair, sighashTypes);
|
|
1006
1001
|
return psbt;
|
|
1007
1002
|
}
|
|
@@ -1013,7 +1008,7 @@ var DefaultSparkSigner = class {
|
|
|
1013
1008
|
innerKey = Buffer.concat([PARITY, innerKey.slice(1)]);
|
|
1014
1009
|
privateKey = Buffer.from(privateNegate(privateKey));
|
|
1015
1010
|
}
|
|
1016
|
-
const pxhPubkey =
|
|
1011
|
+
const pxhPubkey = sha256(Buffer.concat([pxh, innerKey]));
|
|
1017
1012
|
const receiptProof = privateAdd(privateKey, pxhPubkey);
|
|
1018
1013
|
return Buffer.from(receiptProof);
|
|
1019
1014
|
}
|
|
@@ -9075,6 +9070,203 @@ var FinalizeTransferRequest = {
|
|
|
9075
9070
|
return message;
|
|
9076
9071
|
}
|
|
9077
9072
|
};
|
|
9073
|
+
function createBaseFinalizeTransferWithTransferPackageRequest() {
|
|
9074
|
+
return {
|
|
9075
|
+
transferId: "",
|
|
9076
|
+
ownerIdentityPublicKey: new Uint8Array(0),
|
|
9077
|
+
transferPackage: void 0,
|
|
9078
|
+
refundSignatures: {}
|
|
9079
|
+
};
|
|
9080
|
+
}
|
|
9081
|
+
var FinalizeTransferWithTransferPackageRequest = {
|
|
9082
|
+
encode(message, writer = new BinaryWriter4()) {
|
|
9083
|
+
if (message.transferId !== "") {
|
|
9084
|
+
writer.uint32(10).string(message.transferId);
|
|
9085
|
+
}
|
|
9086
|
+
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
9087
|
+
writer.uint32(18).bytes(message.ownerIdentityPublicKey);
|
|
9088
|
+
}
|
|
9089
|
+
if (message.transferPackage !== void 0) {
|
|
9090
|
+
TransferPackage.encode(message.transferPackage, writer.uint32(26).fork()).join();
|
|
9091
|
+
}
|
|
9092
|
+
Object.entries(message.refundSignatures).forEach(([key, value]) => {
|
|
9093
|
+
FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.encode(
|
|
9094
|
+
{ key, value },
|
|
9095
|
+
writer.uint32(34).fork()
|
|
9096
|
+
).join();
|
|
9097
|
+
});
|
|
9098
|
+
return writer;
|
|
9099
|
+
},
|
|
9100
|
+
decode(input, length) {
|
|
9101
|
+
const reader = input instanceof BinaryReader4 ? input : new BinaryReader4(input);
|
|
9102
|
+
let end = length === void 0 ? reader.len : reader.pos + length;
|
|
9103
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest();
|
|
9104
|
+
while (reader.pos < end) {
|
|
9105
|
+
const tag = reader.uint32();
|
|
9106
|
+
switch (tag >>> 3) {
|
|
9107
|
+
case 1: {
|
|
9108
|
+
if (tag !== 10) {
|
|
9109
|
+
break;
|
|
9110
|
+
}
|
|
9111
|
+
message.transferId = reader.string();
|
|
9112
|
+
continue;
|
|
9113
|
+
}
|
|
9114
|
+
case 2: {
|
|
9115
|
+
if (tag !== 18) {
|
|
9116
|
+
break;
|
|
9117
|
+
}
|
|
9118
|
+
message.ownerIdentityPublicKey = reader.bytes();
|
|
9119
|
+
continue;
|
|
9120
|
+
}
|
|
9121
|
+
case 3: {
|
|
9122
|
+
if (tag !== 26) {
|
|
9123
|
+
break;
|
|
9124
|
+
}
|
|
9125
|
+
message.transferPackage = TransferPackage.decode(reader, reader.uint32());
|
|
9126
|
+
continue;
|
|
9127
|
+
}
|
|
9128
|
+
case 4: {
|
|
9129
|
+
if (tag !== 34) {
|
|
9130
|
+
break;
|
|
9131
|
+
}
|
|
9132
|
+
const entry4 = FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.decode(
|
|
9133
|
+
reader,
|
|
9134
|
+
reader.uint32()
|
|
9135
|
+
);
|
|
9136
|
+
if (entry4.value !== void 0) {
|
|
9137
|
+
message.refundSignatures[entry4.key] = entry4.value;
|
|
9138
|
+
}
|
|
9139
|
+
continue;
|
|
9140
|
+
}
|
|
9141
|
+
}
|
|
9142
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
9143
|
+
break;
|
|
9144
|
+
}
|
|
9145
|
+
reader.skip(tag & 7);
|
|
9146
|
+
}
|
|
9147
|
+
return message;
|
|
9148
|
+
},
|
|
9149
|
+
fromJSON(object) {
|
|
9150
|
+
return {
|
|
9151
|
+
transferId: isSet3(object.transferId) ? globalThis.String(object.transferId) : "",
|
|
9152
|
+
ownerIdentityPublicKey: isSet3(object.ownerIdentityPublicKey) ? bytesFromBase642(object.ownerIdentityPublicKey) : new Uint8Array(0),
|
|
9153
|
+
transferPackage: isSet3(object.transferPackage) ? TransferPackage.fromJSON(object.transferPackage) : void 0,
|
|
9154
|
+
refundSignatures: isObject8(object.refundSignatures) ? Object.entries(object.refundSignatures).reduce((acc, [key, value]) => {
|
|
9155
|
+
acc[key] = bytesFromBase642(value);
|
|
9156
|
+
return acc;
|
|
9157
|
+
}, {}) : {}
|
|
9158
|
+
};
|
|
9159
|
+
},
|
|
9160
|
+
toJSON(message) {
|
|
9161
|
+
const obj = {};
|
|
9162
|
+
if (message.transferId !== "") {
|
|
9163
|
+
obj.transferId = message.transferId;
|
|
9164
|
+
}
|
|
9165
|
+
if (message.ownerIdentityPublicKey.length !== 0) {
|
|
9166
|
+
obj.ownerIdentityPublicKey = base64FromBytes2(message.ownerIdentityPublicKey);
|
|
9167
|
+
}
|
|
9168
|
+
if (message.transferPackage !== void 0) {
|
|
9169
|
+
obj.transferPackage = TransferPackage.toJSON(message.transferPackage);
|
|
9170
|
+
}
|
|
9171
|
+
if (message.refundSignatures) {
|
|
9172
|
+
const entries = Object.entries(message.refundSignatures);
|
|
9173
|
+
if (entries.length > 0) {
|
|
9174
|
+
obj.refundSignatures = {};
|
|
9175
|
+
entries.forEach(([k, v]) => {
|
|
9176
|
+
obj.refundSignatures[k] = base64FromBytes2(v);
|
|
9177
|
+
});
|
|
9178
|
+
}
|
|
9179
|
+
}
|
|
9180
|
+
return obj;
|
|
9181
|
+
},
|
|
9182
|
+
create(base) {
|
|
9183
|
+
return FinalizeTransferWithTransferPackageRequest.fromPartial(base ?? {});
|
|
9184
|
+
},
|
|
9185
|
+
fromPartial(object) {
|
|
9186
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest();
|
|
9187
|
+
message.transferId = object.transferId ?? "";
|
|
9188
|
+
message.ownerIdentityPublicKey = object.ownerIdentityPublicKey ?? new Uint8Array(0);
|
|
9189
|
+
message.transferPackage = object.transferPackage !== void 0 && object.transferPackage !== null ? TransferPackage.fromPartial(object.transferPackage) : void 0;
|
|
9190
|
+
message.refundSignatures = Object.entries(object.refundSignatures ?? {}).reduce(
|
|
9191
|
+
(acc, [key, value]) => {
|
|
9192
|
+
if (value !== void 0) {
|
|
9193
|
+
acc[key] = value;
|
|
9194
|
+
}
|
|
9195
|
+
return acc;
|
|
9196
|
+
},
|
|
9197
|
+
{}
|
|
9198
|
+
);
|
|
9199
|
+
return message;
|
|
9200
|
+
}
|
|
9201
|
+
};
|
|
9202
|
+
function createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry() {
|
|
9203
|
+
return { key: "", value: new Uint8Array(0) };
|
|
9204
|
+
}
|
|
9205
|
+
var FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry = {
|
|
9206
|
+
encode(message, writer = new BinaryWriter4()) {
|
|
9207
|
+
if (message.key !== "") {
|
|
9208
|
+
writer.uint32(10).string(message.key);
|
|
9209
|
+
}
|
|
9210
|
+
if (message.value.length !== 0) {
|
|
9211
|
+
writer.uint32(18).bytes(message.value);
|
|
9212
|
+
}
|
|
9213
|
+
return writer;
|
|
9214
|
+
},
|
|
9215
|
+
decode(input, length) {
|
|
9216
|
+
const reader = input instanceof BinaryReader4 ? input : new BinaryReader4(input);
|
|
9217
|
+
let end = length === void 0 ? reader.len : reader.pos + length;
|
|
9218
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry();
|
|
9219
|
+
while (reader.pos < end) {
|
|
9220
|
+
const tag = reader.uint32();
|
|
9221
|
+
switch (tag >>> 3) {
|
|
9222
|
+
case 1: {
|
|
9223
|
+
if (tag !== 10) {
|
|
9224
|
+
break;
|
|
9225
|
+
}
|
|
9226
|
+
message.key = reader.string();
|
|
9227
|
+
continue;
|
|
9228
|
+
}
|
|
9229
|
+
case 2: {
|
|
9230
|
+
if (tag !== 18) {
|
|
9231
|
+
break;
|
|
9232
|
+
}
|
|
9233
|
+
message.value = reader.bytes();
|
|
9234
|
+
continue;
|
|
9235
|
+
}
|
|
9236
|
+
}
|
|
9237
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
9238
|
+
break;
|
|
9239
|
+
}
|
|
9240
|
+
reader.skip(tag & 7);
|
|
9241
|
+
}
|
|
9242
|
+
return message;
|
|
9243
|
+
},
|
|
9244
|
+
fromJSON(object) {
|
|
9245
|
+
return {
|
|
9246
|
+
key: isSet3(object.key) ? globalThis.String(object.key) : "",
|
|
9247
|
+
value: isSet3(object.value) ? bytesFromBase642(object.value) : new Uint8Array(0)
|
|
9248
|
+
};
|
|
9249
|
+
},
|
|
9250
|
+
toJSON(message) {
|
|
9251
|
+
const obj = {};
|
|
9252
|
+
if (message.key !== "") {
|
|
9253
|
+
obj.key = message.key;
|
|
9254
|
+
}
|
|
9255
|
+
if (message.value.length !== 0) {
|
|
9256
|
+
obj.value = base64FromBytes2(message.value);
|
|
9257
|
+
}
|
|
9258
|
+
return obj;
|
|
9259
|
+
},
|
|
9260
|
+
create(base) {
|
|
9261
|
+
return FinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry.fromPartial(base ?? {});
|
|
9262
|
+
},
|
|
9263
|
+
fromPartial(object) {
|
|
9264
|
+
const message = createBaseFinalizeTransferWithTransferPackageRequest_RefundSignaturesEntry();
|
|
9265
|
+
message.key = object.key ?? "";
|
|
9266
|
+
message.value = object.value ?? new Uint8Array(0);
|
|
9267
|
+
return message;
|
|
9268
|
+
}
|
|
9269
|
+
};
|
|
9078
9270
|
function createBaseFinalizeTransferResponse() {
|
|
9079
9271
|
return { transfer: void 0 };
|
|
9080
9272
|
}
|
|
@@ -14357,7 +14549,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14357
14549
|
writer.uint32(50).bytes(message.userSignature);
|
|
14358
14550
|
}
|
|
14359
14551
|
if (message.transfer !== void 0) {
|
|
14360
|
-
|
|
14552
|
+
StartTransferRequest.encode(message.transfer, writer.uint32(58).fork()).join();
|
|
14361
14553
|
}
|
|
14362
14554
|
if (message.spendTxSigningJob !== void 0) {
|
|
14363
14555
|
SigningJob.encode(message.spendTxSigningJob, writer.uint32(66).fork()).join();
|
|
@@ -14417,7 +14609,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14417
14609
|
if (tag !== 58) {
|
|
14418
14610
|
break;
|
|
14419
14611
|
}
|
|
14420
|
-
message.transfer =
|
|
14612
|
+
message.transfer = StartTransferRequest.decode(reader, reader.uint32());
|
|
14421
14613
|
continue;
|
|
14422
14614
|
}
|
|
14423
14615
|
case 8: {
|
|
@@ -14442,7 +14634,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14442
14634
|
amount: isSet3(object.creditAmountSats) ? { $case: "creditAmountSats", creditAmountSats: globalThis.Number(object.creditAmountSats) } : isSet3(object.maxFeeSats) ? { $case: "maxFeeSats", maxFeeSats: globalThis.Number(object.maxFeeSats) } : void 0,
|
|
14443
14635
|
sspSignature: isSet3(object.sspSignature) ? bytesFromBase642(object.sspSignature) : new Uint8Array(0),
|
|
14444
14636
|
userSignature: isSet3(object.userSignature) ? bytesFromBase642(object.userSignature) : new Uint8Array(0),
|
|
14445
|
-
transfer: isSet3(object.transfer) ?
|
|
14637
|
+
transfer: isSet3(object.transfer) ? StartTransferRequest.fromJSON(object.transfer) : void 0,
|
|
14446
14638
|
spendTxSigningJob: isSet3(object.spendTxSigningJob) ? SigningJob.fromJSON(object.spendTxSigningJob) : void 0
|
|
14447
14639
|
};
|
|
14448
14640
|
},
|
|
@@ -14466,7 +14658,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14466
14658
|
obj.userSignature = base64FromBytes2(message.userSignature);
|
|
14467
14659
|
}
|
|
14468
14660
|
if (message.transfer !== void 0) {
|
|
14469
|
-
obj.transfer =
|
|
14661
|
+
obj.transfer = StartTransferRequest.toJSON(message.transfer);
|
|
14470
14662
|
}
|
|
14471
14663
|
if (message.spendTxSigningJob !== void 0) {
|
|
14472
14664
|
obj.spendTxSigningJob = SigningJob.toJSON(message.spendTxSigningJob);
|
|
@@ -14496,7 +14688,7 @@ var InitiateUtxoSwapRequest = {
|
|
|
14496
14688
|
}
|
|
14497
14689
|
message.sspSignature = object.sspSignature ?? new Uint8Array(0);
|
|
14498
14690
|
message.userSignature = object.userSignature ?? new Uint8Array(0);
|
|
14499
|
-
message.transfer = object.transfer !== void 0 && object.transfer !== null ?
|
|
14691
|
+
message.transfer = object.transfer !== void 0 && object.transfer !== null ? StartTransferRequest.fromPartial(object.transfer) : void 0;
|
|
14500
14692
|
message.spendTxSigningJob = object.spendTxSigningJob !== void 0 && object.spendTxSigningJob !== null ? SigningJob.fromPartial(object.spendTxSigningJob) : void 0;
|
|
14501
14693
|
return message;
|
|
14502
14694
|
}
|
|
@@ -15471,6 +15663,14 @@ var SparkServiceDefinition = {
|
|
|
15471
15663
|
responseStream: false,
|
|
15472
15664
|
options: {}
|
|
15473
15665
|
},
|
|
15666
|
+
finalize_transfer_with_transfer_package: {
|
|
15667
|
+
name: "finalize_transfer_with_transfer_package",
|
|
15668
|
+
requestType: FinalizeTransferWithTransferPackageRequest,
|
|
15669
|
+
requestStream: false,
|
|
15670
|
+
responseType: FinalizeTransferResponse,
|
|
15671
|
+
responseStream: false,
|
|
15672
|
+
options: {}
|
|
15673
|
+
},
|
|
15474
15674
|
cancel_transfer: {
|
|
15475
15675
|
name: "cancel_transfer",
|
|
15476
15676
|
requestType: CancelTransferRequest,
|
|
@@ -15838,7 +16038,7 @@ function isSet3(value) {
|
|
|
15838
16038
|
// src/utils/network.ts
|
|
15839
16039
|
import { NetworkType as Lrc20NetworkType } from "@buildonspark/lrc20-sdk";
|
|
15840
16040
|
import * as btc from "@scure/btc-signer";
|
|
15841
|
-
import * as
|
|
16041
|
+
import * as bitcoin from "bitcoinjs-lib";
|
|
15842
16042
|
var Network2 = /* @__PURE__ */ ((Network5) => {
|
|
15843
16043
|
Network5[Network5["MAINNET"] = 0] = "MAINNET";
|
|
15844
16044
|
Network5[Network5["TESTNET"] = 1] = "TESTNET";
|
|
@@ -15863,11 +16063,11 @@ var NetworkConfig = {
|
|
|
15863
16063
|
};
|
|
15864
16064
|
var getNetwork = (network) => NetworkConfig[network];
|
|
15865
16065
|
var LRC_WALLET_NETWORK = Object.freeze({
|
|
15866
|
-
[0 /* MAINNET */]:
|
|
15867
|
-
[1 /* TESTNET */]:
|
|
15868
|
-
[2 /* SIGNET */]:
|
|
15869
|
-
[3 /* REGTEST */]:
|
|
15870
|
-
[4 /* LOCAL */]:
|
|
16066
|
+
[0 /* MAINNET */]: bitcoin.networks.bitcoin,
|
|
16067
|
+
[1 /* TESTNET */]: bitcoin.networks.testnet,
|
|
16068
|
+
[2 /* SIGNET */]: bitcoin.networks.testnet,
|
|
16069
|
+
[3 /* REGTEST */]: bitcoin.networks.regtest,
|
|
16070
|
+
[4 /* LOCAL */]: bitcoin.networks.regtest
|
|
15871
16071
|
});
|
|
15872
16072
|
var LRC_WALLET_NETWORK_TYPE = Object.freeze({
|
|
15873
16073
|
[0 /* MAINNET */]: Lrc20NetworkType.MAINNET,
|
|
@@ -15878,7 +16078,7 @@ var LRC_WALLET_NETWORK_TYPE = Object.freeze({
|
|
|
15878
16078
|
});
|
|
15879
16079
|
function getNetworkFromAddress(address2) {
|
|
15880
16080
|
try {
|
|
15881
|
-
const decoded =
|
|
16081
|
+
const decoded = bitcoin.address.fromBech32(address2);
|
|
15882
16082
|
if (decoded.prefix === "bc") {
|
|
15883
16083
|
return "MAINNET" /* MAINNET */;
|
|
15884
16084
|
} else if (decoded.prefix === "bcrt") {
|
|
@@ -17085,7 +17285,7 @@ var ConnectionManager = class {
|
|
|
17085
17285
|
} else {
|
|
17086
17286
|
const grpcModule = await import("nice-grpc-web");
|
|
17087
17287
|
const { createChannel, FetchTransport } = "default" in grpcModule ? grpcModule.default : grpcModule;
|
|
17088
|
-
const { XHRTransport } = await import("./xhr-transport-
|
|
17288
|
+
const { XHRTransport } = await import("./xhr-transport-WHMS3FGG.js");
|
|
17089
17289
|
return createChannel(
|
|
17090
17290
|
address2,
|
|
17091
17291
|
isReactNative ? XHRTransport() : FetchTransport()
|
|
@@ -17922,7 +18122,8 @@ var TransferService = class extends BaseTransferService {
|
|
|
17922
18122
|
types: [
|
|
17923
18123
|
2 /* TRANSFER */,
|
|
17924
18124
|
0 /* PREIMAGE_SWAP */,
|
|
17925
|
-
1 /* COOPERATIVE_EXIT
|
|
18125
|
+
1 /* COOPERATIVE_EXIT */,
|
|
18126
|
+
3 /* UTXO_SWAP */
|
|
17926
18127
|
],
|
|
17927
18128
|
network: NetworkToProto[this.config.getNetwork()]
|
|
17928
18129
|
});
|
|
@@ -19250,7 +19451,7 @@ function verifySignature(words, prefix) {
|
|
|
19250
19451
|
}
|
|
19251
19452
|
|
|
19252
19453
|
// src/services/lightning.ts
|
|
19253
|
-
var
|
|
19454
|
+
var crypto2 = getCrypto();
|
|
19254
19455
|
var LightningService = class {
|
|
19255
19456
|
config;
|
|
19256
19457
|
connectionManager;
|
|
@@ -19267,7 +19468,7 @@ var LightningService = class {
|
|
|
19267
19468
|
receiverIdentityPubkey,
|
|
19268
19469
|
descriptionHash
|
|
19269
19470
|
}) {
|
|
19270
|
-
const randBytes =
|
|
19471
|
+
const randBytes = crypto2.getRandomValues(new Uint8Array(32));
|
|
19271
19472
|
const preimage = numberToBytesBE4(
|
|
19272
19473
|
bytesToNumberBE4(randBytes) % secp256k110.CURVE.n,
|
|
19273
19474
|
32
|
|
@@ -22598,7 +22799,7 @@ var Lrc20ConnectionManager = class {
|
|
|
22598
22799
|
} else {
|
|
22599
22800
|
const grpcModule = await import("nice-grpc-web");
|
|
22600
22801
|
const { createChannel, FetchTransport } = "default" in grpcModule ? grpcModule.default : grpcModule;
|
|
22601
|
-
const { XHRTransport } = await import("./xhr-transport-
|
|
22802
|
+
const { XHRTransport } = await import("./xhr-transport-WHMS3FGG.js");
|
|
22602
22803
|
return createChannel(
|
|
22603
22804
|
address2,
|
|
22604
22805
|
isReactNative ? XHRTransport() : FetchTransport()
|
|
@@ -24970,7 +25171,11 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
24970
25171
|
if (event?.$case === "transfer" && event.transfer.transfer && event.transfer.transfer.type !== 40 /* COUNTER_SWAP */) {
|
|
24971
25172
|
const { senderIdentityPublicKey, receiverIdentityPublicKey } = event.transfer.transfer;
|
|
24972
25173
|
if (event.transfer.transfer && !equalBytes4(senderIdentityPublicKey, receiverIdentityPublicKey)) {
|
|
24973
|
-
await this.claimTransfer(
|
|
25174
|
+
await this.claimTransfer({
|
|
25175
|
+
transfer: event.transfer.transfer,
|
|
25176
|
+
emit: true,
|
|
25177
|
+
optimize: true
|
|
25178
|
+
});
|
|
24974
25179
|
}
|
|
24975
25180
|
} else if (event?.$case === "deposit" && event.deposit.deposit) {
|
|
24976
25181
|
const deposit = event.deposit.deposit;
|
|
@@ -25096,10 +25301,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
25096
25301
|
}
|
|
25097
25302
|
}
|
|
25098
25303
|
async getLeaves(isBalanceCheck = false) {
|
|
25099
|
-
const
|
|
25100
|
-
this.config.getCoordinatorAddress()
|
|
25101
|
-
);
|
|
25102
|
-
const leaves = await sparkClient.query_nodes({
|
|
25304
|
+
const leaves = await this.queryNodes({
|
|
25103
25305
|
source: {
|
|
25104
25306
|
$case: "ownerIdentityPubkey",
|
|
25105
25307
|
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
@@ -25113,17 +25315,17 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
25113
25315
|
this.config.getSigningOperators()
|
|
25114
25316
|
)) {
|
|
25115
25317
|
if (id !== this.config.getCoordinatorIdentifier()) {
|
|
25116
|
-
const
|
|
25318
|
+
const operatorLeaves = await this.queryNodes(
|
|
25319
|
+
{
|
|
25320
|
+
source: {
|
|
25321
|
+
$case: "ownerIdentityPubkey",
|
|
25322
|
+
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
25323
|
+
},
|
|
25324
|
+
includeParents: false,
|
|
25325
|
+
network: NetworkToProto[this.config.getNetwork()]
|
|
25326
|
+
},
|
|
25117
25327
|
operator.address
|
|
25118
25328
|
);
|
|
25119
|
-
const operatorLeaves = await client.query_nodes({
|
|
25120
|
-
source: {
|
|
25121
|
-
$case: "ownerIdentityPubkey",
|
|
25122
|
-
ownerIdentityPubkey: await this.config.signer.getIdentityPublicKey()
|
|
25123
|
-
},
|
|
25124
|
-
includeParents: false,
|
|
25125
|
-
network: NetworkToProto[this.config.getNetwork()]
|
|
25126
|
-
});
|
|
25127
25329
|
for (const [nodeId, leaf] of Object.entries(leaves.nodes)) {
|
|
25128
25330
|
const operatorLeaf = operatorLeaves.nodes[nodeId];
|
|
25129
25331
|
if (!operatorLeaf) {
|
|
@@ -25252,10 +25454,11 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
25252
25454
|
}
|
|
25253
25455
|
async syncWallet() {
|
|
25254
25456
|
await this.syncTokenOutputs();
|
|
25255
|
-
|
|
25256
|
-
await this.config.signer.restoreSigningKeysFromLeafs(
|
|
25257
|
-
await this.checkRefreshTimelockNodes();
|
|
25258
|
-
await this.checkExtendTimeLockNodes();
|
|
25457
|
+
let leaves = await this.getLeaves();
|
|
25458
|
+
await this.config.signer.restoreSigningKeysFromLeafs(leaves);
|
|
25459
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
25460
|
+
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
25461
|
+
this.leaves = leaves;
|
|
25259
25462
|
this.optimizeLeaves().catch((e) => {
|
|
25260
25463
|
console.error("Failed to optimize leaves", e);
|
|
25261
25464
|
});
|
|
@@ -25399,11 +25602,6 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
25399
25602
|
expected: "smaller or equal to " + Number.MAX_SAFE_INTEGER
|
|
25400
25603
|
});
|
|
25401
25604
|
}
|
|
25402
|
-
try {
|
|
25403
|
-
await this.claimTransfers();
|
|
25404
|
-
} catch (e) {
|
|
25405
|
-
console.warn("Unabled to claim transfers.");
|
|
25406
|
-
}
|
|
25407
25605
|
let leavesToSwap;
|
|
25408
25606
|
if (targetAmount && leaves && leaves.length > 0) {
|
|
25409
25607
|
if (targetAmount < leaves.reduce((acc, leaf) => acc + leaf.value, 0)) {
|
|
@@ -25502,10 +25700,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
25502
25700
|
if (!request) {
|
|
25503
25701
|
throw new Error("Failed to request leaves swap. No response returned.");
|
|
25504
25702
|
}
|
|
25505
|
-
const
|
|
25506
|
-
this.config.getCoordinatorAddress()
|
|
25507
|
-
);
|
|
25508
|
-
const nodes = await sparkClient.query_nodes({
|
|
25703
|
+
const nodes = await this.queryNodes({
|
|
25509
25704
|
source: {
|
|
25510
25705
|
$case: "nodeIds",
|
|
25511
25706
|
nodeIds: {
|
|
@@ -25676,7 +25871,20 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
25676
25871
|
* @returns {Promise<string>} A Bitcoin address for depositing funds
|
|
25677
25872
|
*/
|
|
25678
25873
|
async getStaticDepositAddress() {
|
|
25679
|
-
|
|
25874
|
+
try {
|
|
25875
|
+
return await this.generateDepositAddress(true);
|
|
25876
|
+
} catch (error) {
|
|
25877
|
+
if (error.message?.includes("static deposit address already exists")) {
|
|
25878
|
+
const existingAddresses = await this.queryStaticDepositAddresses();
|
|
25879
|
+
if (existingAddresses.length > 0 && existingAddresses[0]) {
|
|
25880
|
+
return existingAddresses[0];
|
|
25881
|
+
} else {
|
|
25882
|
+
throw error;
|
|
25883
|
+
}
|
|
25884
|
+
} else {
|
|
25885
|
+
throw error;
|
|
25886
|
+
}
|
|
25887
|
+
}
|
|
25680
25888
|
}
|
|
25681
25889
|
/**
|
|
25682
25890
|
* Generates a deposit address for receiving funds.
|
|
@@ -26259,7 +26467,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26259
26467
|
const pendingTransfer = await this.transferService.queryTransfer(
|
|
26260
26468
|
transfer.id
|
|
26261
26469
|
);
|
|
26262
|
-
const resultNodes = !pendingTransfer ? [] : await this.claimTransfer(pendingTransfer);
|
|
26470
|
+
const resultNodes = !pendingTransfer ? [] : await this.claimTransfer({ transfer: pendingTransfer });
|
|
26263
26471
|
const leavesToRemove = new Set(leaves.map((leaf) => leaf.id));
|
|
26264
26472
|
this.leaves = [
|
|
26265
26473
|
...this.leaves.filter((leaf) => !leavesToRemove.has(leaf.id)),
|
|
@@ -26309,7 +26517,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26309
26517
|
);
|
|
26310
26518
|
return await this.withLeaves(async () => {
|
|
26311
26519
|
let leavesToSend = await this.selectLeaves(amountSats);
|
|
26312
|
-
await this.checkRefreshTimelockNodes(leavesToSend);
|
|
26520
|
+
leavesToSend = await this.checkRefreshTimelockNodes(leavesToSend);
|
|
26313
26521
|
leavesToSend = await this.checkExtendTimeLockNodes(leavesToSend);
|
|
26314
26522
|
const leafKeyTweaks = await Promise.all(
|
|
26315
26523
|
leavesToSend.map(async (leaf) => ({
|
|
@@ -26330,7 +26538,10 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26330
26538
|
const transactionId = transfer.id;
|
|
26331
26539
|
const pendingTransfer = await this.transferService.queryTransfer(transactionId);
|
|
26332
26540
|
if (pendingTransfer) {
|
|
26333
|
-
await this.claimTransfer(
|
|
26541
|
+
await this.claimTransfer({
|
|
26542
|
+
transfer: pendingTransfer,
|
|
26543
|
+
optimize: true
|
|
26544
|
+
});
|
|
26334
26545
|
}
|
|
26335
26546
|
}
|
|
26336
26547
|
return mapTransferToWalletTransfer(
|
|
@@ -26340,11 +26551,10 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26340
26551
|
});
|
|
26341
26552
|
}
|
|
26342
26553
|
async checkExtendTimeLockNodes(nodes) {
|
|
26343
|
-
const nodesToCheck = nodes ?? this.leaves;
|
|
26344
26554
|
const nodesToExtend = [];
|
|
26345
26555
|
const nodeIds = [];
|
|
26346
|
-
|
|
26347
|
-
for (const node of
|
|
26556
|
+
const validNodes = [];
|
|
26557
|
+
for (const node of nodes) {
|
|
26348
26558
|
const nodeTx = getTxFromRawTxBytes(node.nodeTx);
|
|
26349
26559
|
const { needRefresh } = getNextTransactionSequence(
|
|
26350
26560
|
nodeTx.getInput(0).sequence
|
|
@@ -26352,9 +26562,14 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26352
26562
|
if (needRefresh) {
|
|
26353
26563
|
nodesToExtend.push(node);
|
|
26354
26564
|
nodeIds.push(node.id);
|
|
26565
|
+
} else {
|
|
26566
|
+
validNodes.push(node);
|
|
26355
26567
|
}
|
|
26356
26568
|
}
|
|
26357
|
-
|
|
26569
|
+
if (nodesToExtend.length === 0) {
|
|
26570
|
+
return validNodes;
|
|
26571
|
+
}
|
|
26572
|
+
const nodesToAdd = [];
|
|
26358
26573
|
for (const node of nodesToExtend) {
|
|
26359
26574
|
const signingPubKey = await this.config.signer.generatePublicKey(
|
|
26360
26575
|
sha25613(node.id)
|
|
@@ -26365,9 +26580,11 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26365
26580
|
);
|
|
26366
26581
|
this.leaves = this.leaves.filter((leaf) => leaf.id !== node.id);
|
|
26367
26582
|
const newNodes = await this.transferLeavesToSelf(nodes2, signingPubKey);
|
|
26368
|
-
|
|
26583
|
+
nodesToAdd.push(...newNodes);
|
|
26369
26584
|
}
|
|
26370
|
-
|
|
26585
|
+
this.updateLeaves(nodeIds, nodesToAdd);
|
|
26586
|
+
validNodes.push(...nodesToAdd);
|
|
26587
|
+
return validNodes;
|
|
26371
26588
|
}
|
|
26372
26589
|
/**
|
|
26373
26590
|
* Internal method to refresh timelock nodes.
|
|
@@ -26379,7 +26596,8 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26379
26596
|
async checkRefreshTimelockNodes(nodes) {
|
|
26380
26597
|
const nodesToRefresh = [];
|
|
26381
26598
|
const nodeIds = [];
|
|
26382
|
-
|
|
26599
|
+
const validNodes = [];
|
|
26600
|
+
for (const node of nodes) {
|
|
26383
26601
|
const refundTx = getTxFromRawTxBytes(node.refundTx);
|
|
26384
26602
|
const { needRefresh } = getNextTransactionSequence(
|
|
26385
26603
|
refundTx.getInput(0).sequence,
|
|
@@ -26388,15 +26606,14 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26388
26606
|
if (needRefresh) {
|
|
26389
26607
|
nodesToRefresh.push(node);
|
|
26390
26608
|
nodeIds.push(node.id);
|
|
26609
|
+
} else {
|
|
26610
|
+
validNodes.push(node);
|
|
26391
26611
|
}
|
|
26392
26612
|
}
|
|
26393
26613
|
if (nodesToRefresh.length === 0) {
|
|
26394
|
-
return;
|
|
26614
|
+
return validNodes;
|
|
26395
26615
|
}
|
|
26396
|
-
const
|
|
26397
|
-
this.config.getCoordinatorAddress()
|
|
26398
|
-
);
|
|
26399
|
-
const nodesResp = await sparkClient.query_nodes({
|
|
26616
|
+
const nodesResp = await this.queryNodes({
|
|
26400
26617
|
source: {
|
|
26401
26618
|
$case: "nodeIds",
|
|
26402
26619
|
nodeIds: {
|
|
@@ -26410,6 +26627,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26410
26627
|
for (const node of Object.values(nodesResp.nodes)) {
|
|
26411
26628
|
nodesMap.set(node.id, node);
|
|
26412
26629
|
}
|
|
26630
|
+
const nodesToAdd = [];
|
|
26413
26631
|
for (const node of nodesToRefresh) {
|
|
26414
26632
|
if (!node.parentNodeId) {
|
|
26415
26633
|
throw new Error(`node ${node.id} has no parent`);
|
|
@@ -26430,9 +26648,11 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26430
26648
|
if (!newNode) {
|
|
26431
26649
|
throw new Error("Failed to refresh timelock node");
|
|
26432
26650
|
}
|
|
26433
|
-
|
|
26434
|
-
this.leaves.push(newNode);
|
|
26651
|
+
nodesToAdd.push(newNode);
|
|
26435
26652
|
}
|
|
26653
|
+
this.updateLeaves(nodeIds, nodesToAdd);
|
|
26654
|
+
validNodes.push(...nodesToAdd);
|
|
26655
|
+
return validNodes;
|
|
26436
26656
|
}
|
|
26437
26657
|
/**
|
|
26438
26658
|
* Claims a specific transfer.
|
|
@@ -26440,11 +26660,16 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26440
26660
|
* @param {Transfer} transfer - The transfer to claim
|
|
26441
26661
|
* @returns {Promise<Object>} The claim result
|
|
26442
26662
|
*/
|
|
26443
|
-
async claimTransfer(
|
|
26663
|
+
async claimTransfer({
|
|
26664
|
+
transfer,
|
|
26665
|
+
emit,
|
|
26666
|
+
retryCount,
|
|
26667
|
+
optimize
|
|
26668
|
+
}) {
|
|
26444
26669
|
const MAX_RETRIES = 5;
|
|
26445
26670
|
const BASE_DELAY_MS = 1e3;
|
|
26446
26671
|
const MAX_DELAY_MS = 1e4;
|
|
26447
|
-
if (retryCount > 0) {
|
|
26672
|
+
if (retryCount && retryCount > 0) {
|
|
26448
26673
|
const delayMs = Math.min(
|
|
26449
26674
|
BASE_DELAY_MS * Math.pow(2, retryCount - 1),
|
|
26450
26675
|
MAX_DELAY_MS
|
|
@@ -26460,7 +26685,10 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26460
26685
|
const leafPubKey = leafPubKeyMap.get(leaf.leaf.id);
|
|
26461
26686
|
if (leafPubKey) {
|
|
26462
26687
|
leavesToClaim.push({
|
|
26463
|
-
leaf:
|
|
26688
|
+
leaf: {
|
|
26689
|
+
...leaf.leaf,
|
|
26690
|
+
refundTx: leaf.intermediateRefundTx
|
|
26691
|
+
},
|
|
26464
26692
|
signingPubKey: leafPubKey,
|
|
26465
26693
|
newSigningPubKey: await this.config.signer.generatePublicKey(
|
|
26466
26694
|
sha25613(leaf.leaf.id)
|
|
@@ -26473,7 +26701,6 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26473
26701
|
transfer,
|
|
26474
26702
|
leavesToClaim
|
|
26475
26703
|
);
|
|
26476
|
-
this.leaves.push(...response.nodes);
|
|
26477
26704
|
if (emit) {
|
|
26478
26705
|
this.emit(
|
|
26479
26706
|
"transfer:claimed",
|
|
@@ -26483,14 +26710,25 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26483
26710
|
}
|
|
26484
26711
|
return response.nodes;
|
|
26485
26712
|
});
|
|
26486
|
-
await this.checkRefreshTimelockNodes(result);
|
|
26713
|
+
result = await this.checkRefreshTimelockNodes(result);
|
|
26487
26714
|
result = await this.checkExtendTimeLockNodes(result);
|
|
26715
|
+
const existingIds = new Set(this.leaves.map((leaf) => leaf.id));
|
|
26716
|
+
const uniqueResults = result.filter((node) => !existingIds.has(node.id));
|
|
26717
|
+
this.leaves.push(...uniqueResults);
|
|
26718
|
+
if (optimize && transfer.type !== 40 /* COUNTER_SWAP */) {
|
|
26719
|
+
await this.optimizeLeaves();
|
|
26720
|
+
}
|
|
26488
26721
|
return result;
|
|
26489
26722
|
} catch (error) {
|
|
26490
|
-
if (retryCount < MAX_RETRIES) {
|
|
26491
|
-
this.claimTransfer(
|
|
26723
|
+
if (retryCount && retryCount < MAX_RETRIES) {
|
|
26724
|
+
this.claimTransfer({
|
|
26725
|
+
transfer,
|
|
26726
|
+
emit,
|
|
26727
|
+
retryCount: retryCount + 1,
|
|
26728
|
+
optimize
|
|
26729
|
+
});
|
|
26492
26730
|
return [];
|
|
26493
|
-
} else if (retryCount
|
|
26731
|
+
} else if (retryCount) {
|
|
26494
26732
|
console.warn(
|
|
26495
26733
|
"Failed to claim transfer. Please try reinitializing your wallet in a few minutes. Transfer ID: " + transfer.id,
|
|
26496
26734
|
error
|
|
@@ -26525,7 +26763,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26525
26763
|
continue;
|
|
26526
26764
|
}
|
|
26527
26765
|
promises.push(
|
|
26528
|
-
this.claimTransfer(transfer, emit).then(() => transfer.id).catch((error) => {
|
|
26766
|
+
this.claimTransfer({ transfer, emit, optimize: true }).then(() => transfer.id).catch((error) => {
|
|
26529
26767
|
console.warn(`Failed to claim transfer ${transfer.id}:`, error);
|
|
26530
26768
|
return null;
|
|
26531
26769
|
})
|
|
@@ -26560,11 +26798,11 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26560
26798
|
*
|
|
26561
26799
|
* @param {Object} params - Parameters for the lightning invoice
|
|
26562
26800
|
* @param {number} params.amountSats - Amount in satoshis
|
|
26563
|
-
* @param {string} params.memo - Description for the invoice
|
|
26801
|
+
* @param {string} [params.memo] - Description for the invoice. Should not be provided if the descriptionHash is provided.
|
|
26564
26802
|
* @param {number} [params.expirySeconds] - Optional expiry time in seconds
|
|
26565
26803
|
* @param {boolean} [params.includeSparkAddress] - Optional boolean signalling whether or not to include the spark address in the invoice
|
|
26566
26804
|
* @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.
|
|
26567
|
-
* @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.
|
|
26805
|
+
* @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.
|
|
26568
26806
|
* @returns {Promise<LightningReceiveRequest>} BOLT11 encoded invoice
|
|
26569
26807
|
*/
|
|
26570
26808
|
async createLightningInvoice({
|
|
@@ -26611,6 +26849,16 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26611
26849
|
expected: "Memo size within limits"
|
|
26612
26850
|
});
|
|
26613
26851
|
}
|
|
26852
|
+
if (memo && descriptionHash) {
|
|
26853
|
+
throw new ValidationError(
|
|
26854
|
+
"Memo and descriptionHash cannot be provided together. Please provide only one.",
|
|
26855
|
+
{
|
|
26856
|
+
field: "memo",
|
|
26857
|
+
value: memo,
|
|
26858
|
+
expected: "Memo or descriptionHash"
|
|
26859
|
+
}
|
|
26860
|
+
);
|
|
26861
|
+
}
|
|
26614
26862
|
const requestLightningInvoice = async (amountSats2, paymentHash, memo2, receiverIdentityPubkey2, descriptionHash2) => {
|
|
26615
26863
|
const network = this.config.getNetwork();
|
|
26616
26864
|
let bitcoinNetwork = BitcoinNetwork_default.REGTEST;
|
|
@@ -26746,7 +26994,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26746
26994
|
});
|
|
26747
26995
|
}
|
|
26748
26996
|
let leaves = await this.selectLeaves(totalAmount);
|
|
26749
|
-
await this.checkRefreshTimelockNodes(leaves);
|
|
26997
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
26750
26998
|
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
26751
26999
|
const leavesToSend = await Promise.all(
|
|
26752
27000
|
leaves.map(async (leaf) => ({
|
|
@@ -26927,7 +27175,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26927
27175
|
);
|
|
26928
27176
|
}
|
|
26929
27177
|
}
|
|
26930
|
-
await this.checkRefreshTimelockNodes(leavesToSend);
|
|
27178
|
+
leavesToSend = await this.checkRefreshTimelockNodes(leavesToSend);
|
|
26931
27179
|
leavesToSend = await this.checkExtendTimeLockNodes(leavesToSend);
|
|
26932
27180
|
const leafKeyTweaks = await Promise.all(
|
|
26933
27181
|
leavesToSend.map(async (leaf) => ({
|
|
@@ -26997,7 +27245,7 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
26997
27245
|
});
|
|
26998
27246
|
}
|
|
26999
27247
|
let leaves = await this.selectLeaves(amountSats);
|
|
27000
|
-
await this.checkRefreshTimelockNodes(leaves);
|
|
27248
|
+
leaves = await this.checkRefreshTimelockNodes(leaves);
|
|
27001
27249
|
leaves = await this.checkExtendTimeLockNodes(leaves);
|
|
27002
27250
|
const feeEstimate = await sspClient.getCoopExitFeeEstimate({
|
|
27003
27251
|
leafExternalIds: leaves.map((leaf) => leaf.id),
|
|
@@ -27231,6 +27479,33 @@ var SparkWallet = class _SparkWallet extends EventEmitter {
|
|
|
27231
27479
|
}
|
|
27232
27480
|
}, 1e4);
|
|
27233
27481
|
}
|
|
27482
|
+
async updateLeaves(leavesToRemove, leavesToAdd) {
|
|
27483
|
+
const leavesToRemoveSet = new Set(leavesToRemove);
|
|
27484
|
+
this.leaves = this.leaves.filter((leaf) => !leavesToRemoveSet.has(leaf.id));
|
|
27485
|
+
this.leaves.push(...leavesToAdd);
|
|
27486
|
+
}
|
|
27487
|
+
async queryNodes(baseRequest, sparkClientAddress, pageSize = 100) {
|
|
27488
|
+
const address2 = sparkClientAddress ?? this.config.getCoordinatorAddress();
|
|
27489
|
+
const aggregatedNodes = {};
|
|
27490
|
+
let offset = 0;
|
|
27491
|
+
while (true) {
|
|
27492
|
+
const sparkClient = await this.connectionManager.createSparkClient(address2);
|
|
27493
|
+
const response = await sparkClient.query_nodes({
|
|
27494
|
+
...baseRequest,
|
|
27495
|
+
limit: pageSize,
|
|
27496
|
+
offset
|
|
27497
|
+
});
|
|
27498
|
+
Object.assign(aggregatedNodes, response.nodes ?? {});
|
|
27499
|
+
const received = Object.keys(response.nodes ?? {}).length;
|
|
27500
|
+
if (received < pageSize) {
|
|
27501
|
+
return {
|
|
27502
|
+
nodes: aggregatedNodes,
|
|
27503
|
+
offset: response.offset
|
|
27504
|
+
};
|
|
27505
|
+
}
|
|
27506
|
+
offset += pageSize;
|
|
27507
|
+
}
|
|
27508
|
+
}
|
|
27234
27509
|
};
|
|
27235
27510
|
|
|
27236
27511
|
// src/utils/mempool.ts
|