@omnisat/lasereyes 0.0.8 → 0.0.9
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/README.md +7 -8
- package/dist/index.js +239 -25
- package/dist/index.mjs +242 -25
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,14 +7,13 @@
|
|
|
7
7
|
</a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
</p>
|
|
10
|
+
# lasereyes
|
|
11
|
+
|
|
12
|
+
A common wallet interface for building React applications on Bitcoin.
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+

|
|
16
|
+
|
|
18
17
|
|
|
19
18
|
---
|
|
20
19
|
|
package/dist/index.js
CHANGED
|
@@ -60,6 +60,15 @@ var __async = (__this, __arguments, generator) => {
|
|
|
60
60
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
61
61
|
});
|
|
62
62
|
};
|
|
63
|
+
var __forAwait = (obj, it, method) => {
|
|
64
|
+
it = obj[Symbol.asyncIterator];
|
|
65
|
+
method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((resolve, reject, done) => {
|
|
66
|
+
arg = fn.call(obj, arg);
|
|
67
|
+
done = arg.done;
|
|
68
|
+
return Promise.resolve(arg.value).then((value) => resolve({ value, done }), reject);
|
|
69
|
+
}));
|
|
70
|
+
return it ? it.call(obj) : (obj = obj[Symbol.iterator](), it = {}, method("next"), method("return"), it);
|
|
71
|
+
};
|
|
63
72
|
|
|
64
73
|
// src/index.tsx
|
|
65
74
|
var src_exports = {};
|
|
@@ -73,6 +82,7 @@ __export(src_exports, {
|
|
|
73
82
|
MEMPOOL_SPACE_URL: () => MEMPOOL_SPACE_URL,
|
|
74
83
|
OYL: () => OYL,
|
|
75
84
|
P2PKH: () => P2PKH,
|
|
85
|
+
P2PSH: () => P2PSH,
|
|
76
86
|
P2SH: () => P2SH,
|
|
77
87
|
P2TR: () => P2TR,
|
|
78
88
|
P2WPKH: () => P2WPKH,
|
|
@@ -91,6 +101,7 @@ __export(src_exports, {
|
|
|
91
101
|
createConfig: () => createConfig,
|
|
92
102
|
findOrdinalsAddress: () => findOrdinalsAddress,
|
|
93
103
|
findPaymentAddress: () => findPaymentAddress,
|
|
104
|
+
getAddressType: () => getAddressType,
|
|
94
105
|
getBTCBalance: () => getBTCBalance,
|
|
95
106
|
getBitcoinNetwork: () => getBitcoinNetwork,
|
|
96
107
|
getLeatherNetwork: () => getLeatherNetwork,
|
|
@@ -173,6 +184,7 @@ var LEATHER = "leather";
|
|
|
173
184
|
var P2TR = "p2tr";
|
|
174
185
|
var P2PKH = "p2pkh";
|
|
175
186
|
var P2WPKH = "p2wpkh";
|
|
187
|
+
var P2PSH = "p2psh";
|
|
176
188
|
var P2WSH = "p2wsh";
|
|
177
189
|
var P2SH = "p2sh";
|
|
178
190
|
var WALLETS = {
|
|
@@ -218,10 +230,8 @@ var bitcoin2 = __toESM(require("bitcoinjs-lib"));
|
|
|
218
230
|
// src/consts/settings.ts
|
|
219
231
|
var LOCAL_STORAGE_DEFAULT_WALLET = "defaultWallet";
|
|
220
232
|
var initialWalletContext = {
|
|
221
|
-
hasOyl: false,
|
|
222
233
|
hasUnisat: false,
|
|
223
234
|
hasXverse: false,
|
|
224
|
-
hasLeather: false,
|
|
225
235
|
connected: false,
|
|
226
236
|
isConnecting: false,
|
|
227
237
|
publicKey: "",
|
|
@@ -297,9 +307,9 @@ var findPaymentAddress = (addresses) => {
|
|
|
297
307
|
({ purpose }) => purpose === "payment"
|
|
298
308
|
);
|
|
299
309
|
};
|
|
300
|
-
var getBTCBalance = (
|
|
310
|
+
var getBTCBalance = (address2) => __async(void 0, null, function* () {
|
|
301
311
|
try {
|
|
302
|
-
return yield import_axios.default.get(`https://blockchain.info/q/addressbalance/${
|
|
312
|
+
return yield import_axios.default.get(`https://blockchain.info/q/addressbalance/${address2}`).then((response) => response.data);
|
|
303
313
|
} catch (error) {
|
|
304
314
|
console.error("Error fetching BTC balance:", error);
|
|
305
315
|
throw new Error("Failed to fetch BTC balance");
|
|
@@ -319,8 +329,36 @@ var isHex = (str) => {
|
|
|
319
329
|
const hexRegex = /^[a-fA-F0-9]+$/;
|
|
320
330
|
return hexRegex.test(str);
|
|
321
331
|
};
|
|
332
|
+
function getAddressType(address2) {
|
|
333
|
+
try {
|
|
334
|
+
bitcoin.address.fromBase58Check(address2);
|
|
335
|
+
return P2PKH;
|
|
336
|
+
} catch (e) {
|
|
337
|
+
}
|
|
338
|
+
try {
|
|
339
|
+
bitcoin.address.fromBase58Check(address2);
|
|
340
|
+
return P2PSH;
|
|
341
|
+
} catch (e) {
|
|
342
|
+
}
|
|
343
|
+
try {
|
|
344
|
+
const { version, data } = bitcoin.address.fromBech32(address2);
|
|
345
|
+
if (version === 0) {
|
|
346
|
+
if (data.length === 20) {
|
|
347
|
+
return P2WPKH;
|
|
348
|
+
} else if (data.length === 32) {
|
|
349
|
+
return P2WSH;
|
|
350
|
+
}
|
|
351
|
+
} else if (version === 1 && data.length === 32) {
|
|
352
|
+
return P2TR;
|
|
353
|
+
}
|
|
354
|
+
} catch (e) {
|
|
355
|
+
}
|
|
356
|
+
throw new Error("Invalid address");
|
|
357
|
+
}
|
|
322
358
|
|
|
323
359
|
// src/providers/LaserEyesProvider.tsx
|
|
360
|
+
var import_sats_connect = require("sats-connect");
|
|
361
|
+
var import_address = require("bitcoinjs-lib/src/address");
|
|
324
362
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
325
363
|
var LaserEyesContext = (0, import_react.createContext)(initialWalletContext);
|
|
326
364
|
var useLaserEyes = () => {
|
|
@@ -341,10 +379,11 @@ var LaserEyesProvider = ({
|
|
|
341
379
|
const [accounts, setAccounts] = (0, import_react.useState)([]);
|
|
342
380
|
const [publicKey, setPublicKey] = (0, import_react.useState)("");
|
|
343
381
|
const [paymentPublicKey, setPaymentPublicKey] = (0, import_react.useState)("");
|
|
344
|
-
const [
|
|
382
|
+
const [address2, setAddress] = (0, import_react.useState)("");
|
|
345
383
|
const [paymentAddress, setPaymentAddress] = (0, import_react.useState)("");
|
|
346
384
|
const [balance, setBalance] = (0, import_react.useState)();
|
|
347
385
|
const [hasUnisat, setHasUnisat] = (0, import_react.useState)(false);
|
|
386
|
+
const [hasXverse, setHasXverse] = (0, import_react.useState)(false);
|
|
348
387
|
const [network, setNetwork] = (0, import_usehooks_ts.useLocalStorage)("network", MAINNET, {
|
|
349
388
|
initializeWithValue: false
|
|
350
389
|
});
|
|
@@ -364,6 +403,11 @@ var LaserEyesProvider = ({
|
|
|
364
403
|
const unisatLib = window == null ? void 0 : window.unisat;
|
|
365
404
|
setHasUnisat(!!unisatLib);
|
|
366
405
|
}, []);
|
|
406
|
+
(0, import_react.useEffect)(() => {
|
|
407
|
+
var _a;
|
|
408
|
+
const xverseLib = (_a = window == null ? void 0 : window.XverseProviders) == null ? void 0 : _a.BitcoinProvider;
|
|
409
|
+
setHasXverse(!!xverseLib);
|
|
410
|
+
}, []);
|
|
367
411
|
(0, import_react.useEffect)(() => {
|
|
368
412
|
setBalance(void 0);
|
|
369
413
|
}, [network]);
|
|
@@ -385,7 +429,7 @@ var LaserEyesProvider = ({
|
|
|
385
429
|
const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(
|
|
386
430
|
LOCAL_STORAGE_DEFAULT_WALLET
|
|
387
431
|
);
|
|
388
|
-
if (defaultWallet
|
|
432
|
+
if (defaultWallet) {
|
|
389
433
|
setProvider(defaultWallet);
|
|
390
434
|
connect(defaultWallet);
|
|
391
435
|
}
|
|
@@ -414,6 +458,48 @@ var LaserEyesProvider = ({
|
|
|
414
458
|
throw error;
|
|
415
459
|
}
|
|
416
460
|
});
|
|
461
|
+
const connectXverse = () => __async(void 0, null, function* () {
|
|
462
|
+
try {
|
|
463
|
+
localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, XVERSE);
|
|
464
|
+
let xverseNetwork = getXverseNetwork((config == null ? void 0 : config.network) || MAINNET);
|
|
465
|
+
console.log({ xverseNetwork });
|
|
466
|
+
const getAddressOptions = {
|
|
467
|
+
payload: {
|
|
468
|
+
purposes: ["ordinals", "payment"],
|
|
469
|
+
message: "Address for receiving Ordinals and payments",
|
|
470
|
+
network: {
|
|
471
|
+
type: xverseNetwork
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
onFinish: (response) => {
|
|
475
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
476
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
477
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
478
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
479
|
+
if (foundAddress && foundPaymentAddress) {
|
|
480
|
+
setAddress(foundAddress.address);
|
|
481
|
+
setPaymentAddress(foundPaymentAddress.address);
|
|
482
|
+
setProvider(XVERSE);
|
|
483
|
+
setLibrary(window.BitcoinProvider);
|
|
484
|
+
}
|
|
485
|
+
getBTCBalance(foundPaymentAddress.address).then((totalBalance) => {
|
|
486
|
+
console.log({ totalBalance });
|
|
487
|
+
setBalance(totalBalance);
|
|
488
|
+
});
|
|
489
|
+
},
|
|
490
|
+
onCancel: () => {
|
|
491
|
+
throw new Error(`User canceled lasereyes to ${XVERSE} wallet`);
|
|
492
|
+
},
|
|
493
|
+
onError: (error) => {
|
|
494
|
+
throw new Error(`Can't lasereyes to ${XVERSE} wallet`);
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
yield (0, import_sats_connect.getAddress)(getAddressOptions);
|
|
498
|
+
setConnected(true);
|
|
499
|
+
} catch (error) {
|
|
500
|
+
throw error;
|
|
501
|
+
}
|
|
502
|
+
});
|
|
417
503
|
const handleAccountsChanged = (_accounts) => {
|
|
418
504
|
if (!_accounts.length) {
|
|
419
505
|
disconnect();
|
|
@@ -422,6 +508,7 @@ var LaserEyesProvider = ({
|
|
|
422
508
|
if (self.accounts[0] === _accounts[0]) {
|
|
423
509
|
return;
|
|
424
510
|
}
|
|
511
|
+
console.log("acct changed", _accounts[0]);
|
|
425
512
|
self.accounts = _accounts;
|
|
426
513
|
if (_accounts.length > 0) {
|
|
427
514
|
connect(UNISAT);
|
|
@@ -436,8 +523,10 @@ var LaserEyesProvider = ({
|
|
|
436
523
|
foundNetwork = getNetworkForUnisat(network2);
|
|
437
524
|
setNetwork(foundNetwork);
|
|
438
525
|
connect(provider);
|
|
526
|
+
} else if (provider === XVERSE) {
|
|
527
|
+
throw new Error("Not implemented");
|
|
439
528
|
} else {
|
|
440
|
-
throw new Error("
|
|
529
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
441
530
|
}
|
|
442
531
|
} catch (error) {
|
|
443
532
|
throw error;
|
|
@@ -450,14 +539,16 @@ var LaserEyesProvider = ({
|
|
|
450
539
|
throw new Error("No wallet provided");
|
|
451
540
|
if (walletName === UNISAT) {
|
|
452
541
|
yield connectUnisat();
|
|
542
|
+
} else if (walletName === XVERSE) {
|
|
543
|
+
yield connectXverse();
|
|
453
544
|
} else {
|
|
454
|
-
throw new Error("
|
|
545
|
+
throw new Error("The connected wallet doesn't support this method..!");
|
|
455
546
|
}
|
|
456
547
|
setConnected(true);
|
|
457
548
|
} catch (error) {
|
|
458
549
|
setIsConnecting(false);
|
|
459
550
|
disconnect();
|
|
460
|
-
throw
|
|
551
|
+
throw error;
|
|
461
552
|
} finally {
|
|
462
553
|
setIsConnecting(false);
|
|
463
554
|
}
|
|
@@ -480,14 +571,38 @@ var LaserEyesProvider = ({
|
|
|
480
571
|
return;
|
|
481
572
|
if (provider === UNISAT) {
|
|
482
573
|
return yield library.requestAccounts();
|
|
574
|
+
} else if (provider === XVERSE) {
|
|
575
|
+
const getAddressOptions = {
|
|
576
|
+
payload: {
|
|
577
|
+
// @ts-ignore
|
|
578
|
+
purposes: ["ordinals", "payment"],
|
|
579
|
+
message: "Address for receiving Ordinals and payments",
|
|
580
|
+
network: {
|
|
581
|
+
type: XVERSE_NETWORK
|
|
582
|
+
}
|
|
583
|
+
},
|
|
584
|
+
onFinish: (response) => __async(void 0, null, function* () {
|
|
585
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
586
|
+
setAddress(foundAddress.address);
|
|
587
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
588
|
+
setPaymentAddress(foundPaymentAddress);
|
|
589
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
590
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
591
|
+
}),
|
|
592
|
+
onCancel: () => {
|
|
593
|
+
console.log("CANCELLED");
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
return [address2];
|
|
483
597
|
} else {
|
|
484
|
-
throw new Error("
|
|
598
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
485
599
|
}
|
|
486
600
|
} catch (error) {
|
|
487
601
|
throw error;
|
|
488
602
|
}
|
|
489
603
|
});
|
|
490
604
|
const getNetwork = () => __async(void 0, null, function* () {
|
|
605
|
+
var _a;
|
|
491
606
|
try {
|
|
492
607
|
if (!library)
|
|
493
608
|
return;
|
|
@@ -496,9 +611,13 @@ var LaserEyesProvider = ({
|
|
|
496
611
|
const foundNetwork = getNetworkForUnisat(unisatNetwork);
|
|
497
612
|
setNetwork(foundNetwork);
|
|
498
613
|
return foundNetwork;
|
|
499
|
-
} else {
|
|
500
|
-
|
|
614
|
+
} else if (provider === XVERSE) {
|
|
615
|
+
if (address2.slice(0, 1) === "t") {
|
|
616
|
+
return TESTNET;
|
|
617
|
+
}
|
|
618
|
+
return MAINNET;
|
|
501
619
|
}
|
|
620
|
+
return (_a = config == null ? void 0 : config.network) != null ? _a : MAINNET;
|
|
502
621
|
} catch (error) {
|
|
503
622
|
throw error;
|
|
504
623
|
}
|
|
@@ -512,7 +631,7 @@ var LaserEyesProvider = ({
|
|
|
512
631
|
yield library == null ? void 0 : library.switchNetwork(wantedNetwork);
|
|
513
632
|
setNetwork(network2);
|
|
514
633
|
} else {
|
|
515
|
-
throw new Error("
|
|
634
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
516
635
|
}
|
|
517
636
|
} catch (error) {
|
|
518
637
|
throw error;
|
|
@@ -526,7 +645,7 @@ var LaserEyesProvider = ({
|
|
|
526
645
|
const pub = yield library == null ? void 0 : library.getPublicKey();
|
|
527
646
|
return yield library == null ? void 0 : library.getPublicKey();
|
|
528
647
|
} else {
|
|
529
|
-
throw new Error("
|
|
648
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
530
649
|
}
|
|
531
650
|
} catch (error) {
|
|
532
651
|
throw error;
|
|
@@ -538,8 +657,8 @@ var LaserEyesProvider = ({
|
|
|
538
657
|
return;
|
|
539
658
|
if (provider === UNISAT) {
|
|
540
659
|
return yield library.getBalance();
|
|
541
|
-
} else {
|
|
542
|
-
|
|
660
|
+
} else if (provider === XVERSE) {
|
|
661
|
+
return yield getBTCBalance(paymentAddress);
|
|
543
662
|
}
|
|
544
663
|
} catch (error) {
|
|
545
664
|
throw error;
|
|
@@ -552,7 +671,7 @@ var LaserEyesProvider = ({
|
|
|
552
671
|
if (provider === UNISAT) {
|
|
553
672
|
return yield library.getInscriptions(0, 10);
|
|
554
673
|
} else {
|
|
555
|
-
throw new Error("
|
|
674
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
556
675
|
}
|
|
557
676
|
} catch (error) {
|
|
558
677
|
throw error;
|
|
@@ -572,7 +691,7 @@ var LaserEyesProvider = ({
|
|
|
572
691
|
throw new Error("Transaction failed");
|
|
573
692
|
return txId;
|
|
574
693
|
} else {
|
|
575
|
-
throw new Error("
|
|
694
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
576
695
|
}
|
|
577
696
|
} catch (error) {
|
|
578
697
|
throw error;
|
|
@@ -584,8 +703,20 @@ var LaserEyesProvider = ({
|
|
|
584
703
|
return;
|
|
585
704
|
if (provider === UNISAT) {
|
|
586
705
|
return yield library == null ? void 0 : library.signMessage(message);
|
|
587
|
-
} else {
|
|
588
|
-
|
|
706
|
+
} else if (provider === XVERSE) {
|
|
707
|
+
const response = yield (0, import_sats_connect.request)("signMessage", {
|
|
708
|
+
address: address2,
|
|
709
|
+
message
|
|
710
|
+
});
|
|
711
|
+
if (response.status === "success") {
|
|
712
|
+
return response.result.signature;
|
|
713
|
+
} else {
|
|
714
|
+
if (response.error.code === import_sats_connect.RpcErrorCode.USER_REJECTION) {
|
|
715
|
+
throw new Error("User rejected the request");
|
|
716
|
+
} else {
|
|
717
|
+
throw new Error("Error signing message: " + response.error.message);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
589
720
|
}
|
|
590
721
|
} catch (error) {
|
|
591
722
|
throw error;
|
|
@@ -623,11 +754,91 @@ var LaserEyesProvider = ({
|
|
|
623
754
|
signedPsbtBase64: psbtSignedPsbt.toBase64(),
|
|
624
755
|
txId: void 0
|
|
625
756
|
};
|
|
757
|
+
} else if (provider === XVERSE) {
|
|
758
|
+
const toSignPsbt = bitcoin2.Psbt.fromBase64(String(psbtBase64), {
|
|
759
|
+
network: getBitcoinNetwork(network)
|
|
760
|
+
});
|
|
761
|
+
const inputs = toSignPsbt.data.inputs;
|
|
762
|
+
const inputsToSign = [];
|
|
763
|
+
const ordinalAddressData = {
|
|
764
|
+
address: address2,
|
|
765
|
+
signingIndexes: []
|
|
766
|
+
};
|
|
767
|
+
const paymentsAddressData = {
|
|
768
|
+
address: paymentAddress,
|
|
769
|
+
signingIndexes: []
|
|
770
|
+
};
|
|
771
|
+
let counter = 0;
|
|
772
|
+
try {
|
|
773
|
+
for (var iter = __forAwait(inputs), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
774
|
+
let input = temp.value;
|
|
775
|
+
const { script } = input.witnessUtxo;
|
|
776
|
+
const addressFromScript = (0, import_address.fromOutputScript)(
|
|
777
|
+
script,
|
|
778
|
+
getBitcoinNetwork(network)
|
|
779
|
+
);
|
|
780
|
+
if (addressFromScript === paymentAddress) {
|
|
781
|
+
paymentsAddressData.signingIndexes.push(Number(counter));
|
|
782
|
+
} else if (addressFromScript === address2) {
|
|
783
|
+
ordinalAddressData.signingIndexes.push(Number(counter));
|
|
784
|
+
}
|
|
785
|
+
counter++;
|
|
786
|
+
}
|
|
787
|
+
} catch (temp) {
|
|
788
|
+
error = [temp];
|
|
789
|
+
} finally {
|
|
790
|
+
try {
|
|
791
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
792
|
+
} finally {
|
|
793
|
+
if (error)
|
|
794
|
+
throw error[0];
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
if (ordinalAddressData.signingIndexes.length > 0) {
|
|
798
|
+
inputsToSign.push(ordinalAddressData);
|
|
799
|
+
}
|
|
800
|
+
if (paymentsAddressData.signingIndexes.length > 0) {
|
|
801
|
+
inputsToSign.push(paymentsAddressData);
|
|
802
|
+
}
|
|
803
|
+
let txId, signedPsbtHex, signedPsbtBase64;
|
|
804
|
+
const xverseNetwork = getXverseNetwork(network);
|
|
805
|
+
const signPsbtOptions = {
|
|
806
|
+
payload: {
|
|
807
|
+
network: {
|
|
808
|
+
type: xverseNetwork
|
|
809
|
+
},
|
|
810
|
+
message: "Sign Transaction",
|
|
811
|
+
psbtBase64: toSignPsbt.toBase64(),
|
|
812
|
+
broadcast,
|
|
813
|
+
inputsToSign
|
|
814
|
+
},
|
|
815
|
+
onFinish: (response) => {
|
|
816
|
+
if (response.txId) {
|
|
817
|
+
txId = response.txId;
|
|
818
|
+
} else if (response.psbtBase64) {
|
|
819
|
+
const signedPsbt = bitcoin2.Psbt.fromBase64(
|
|
820
|
+
String(response.psbtBase64),
|
|
821
|
+
{
|
|
822
|
+
network: getBitcoinNetwork(network)
|
|
823
|
+
}
|
|
824
|
+
);
|
|
825
|
+
signedPsbtHex = signedPsbt.toHex();
|
|
826
|
+
signedPsbtBase64 = signedPsbt.toBase64();
|
|
827
|
+
}
|
|
828
|
+
},
|
|
829
|
+
onCancel: () => console.log("Canceled")
|
|
830
|
+
};
|
|
831
|
+
yield (0, import_sats_connect.signTransaction)(signPsbtOptions);
|
|
832
|
+
return {
|
|
833
|
+
signedPsbtHex,
|
|
834
|
+
signedPsbtBase64,
|
|
835
|
+
txId
|
|
836
|
+
};
|
|
626
837
|
} else {
|
|
627
|
-
throw new Error("
|
|
838
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
628
839
|
}
|
|
629
|
-
} catch (
|
|
630
|
-
throw
|
|
840
|
+
} catch (error2) {
|
|
841
|
+
throw error2;
|
|
631
842
|
}
|
|
632
843
|
});
|
|
633
844
|
const pushPsbt = (psbt) => __async(void 0, null, function* () {
|
|
@@ -637,7 +848,7 @@ var LaserEyesProvider = ({
|
|
|
637
848
|
if (provider === UNISAT) {
|
|
638
849
|
return yield library == null ? void 0 : library.pushPsbt(psbt);
|
|
639
850
|
} else {
|
|
640
|
-
throw new Error("
|
|
851
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
641
852
|
}
|
|
642
853
|
} catch (error) {
|
|
643
854
|
throw error;
|
|
@@ -650,7 +861,7 @@ var LaserEyesProvider = ({
|
|
|
650
861
|
library,
|
|
651
862
|
accounts,
|
|
652
863
|
publicKey,
|
|
653
|
-
address,
|
|
864
|
+
address: address2,
|
|
654
865
|
paymentAddress,
|
|
655
866
|
paymentPublicKey,
|
|
656
867
|
provider,
|
|
@@ -659,6 +870,7 @@ var LaserEyesProvider = ({
|
|
|
659
870
|
connected,
|
|
660
871
|
isConnecting,
|
|
661
872
|
hasUnisat,
|
|
873
|
+
hasXverse,
|
|
662
874
|
// functions
|
|
663
875
|
connect,
|
|
664
876
|
disconnect,
|
|
@@ -688,6 +900,7 @@ var LaserEyesProvider = ({
|
|
|
688
900
|
MEMPOOL_SPACE_URL,
|
|
689
901
|
OYL,
|
|
690
902
|
P2PKH,
|
|
903
|
+
P2PSH,
|
|
691
904
|
P2SH,
|
|
692
905
|
P2TR,
|
|
693
906
|
P2WPKH,
|
|
@@ -706,6 +919,7 @@ var LaserEyesProvider = ({
|
|
|
706
919
|
createConfig,
|
|
707
920
|
findOrdinalsAddress,
|
|
708
921
|
findPaymentAddress,
|
|
922
|
+
getAddressType,
|
|
709
923
|
getBTCBalance,
|
|
710
924
|
getBitcoinNetwork,
|
|
711
925
|
getLeatherNetwork,
|
package/dist/index.mjs
CHANGED
|
@@ -34,6 +34,15 @@ var __async = (__this, __arguments, generator) => {
|
|
|
34
34
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
35
35
|
});
|
|
36
36
|
};
|
|
37
|
+
var __forAwait = (obj, it, method) => {
|
|
38
|
+
it = obj[Symbol.asyncIterator];
|
|
39
|
+
method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((resolve, reject, done) => {
|
|
40
|
+
arg = fn.call(obj, arg);
|
|
41
|
+
done = arg.done;
|
|
42
|
+
return Promise.resolve(arg.value).then((value) => resolve({ value, done }), reject);
|
|
43
|
+
}));
|
|
44
|
+
return it ? it.call(obj) : (obj = obj[Symbol.iterator](), it = {}, method("next"), method("return"), it);
|
|
45
|
+
};
|
|
37
46
|
|
|
38
47
|
// src/consts/networks.ts
|
|
39
48
|
var XVERSE_NETWORK = "Mainnet";
|
|
@@ -101,6 +110,7 @@ var LEATHER = "leather";
|
|
|
101
110
|
var P2TR = "p2tr";
|
|
102
111
|
var P2PKH = "p2pkh";
|
|
103
112
|
var P2WPKH = "p2wpkh";
|
|
113
|
+
var P2PSH = "p2psh";
|
|
104
114
|
var P2WSH = "p2wsh";
|
|
105
115
|
var P2SH = "p2sh";
|
|
106
116
|
var WALLETS = {
|
|
@@ -152,10 +162,8 @@ import * as bitcoin2 from "bitcoinjs-lib";
|
|
|
152
162
|
// src/consts/settings.ts
|
|
153
163
|
var LOCAL_STORAGE_DEFAULT_WALLET = "defaultWallet";
|
|
154
164
|
var initialWalletContext = {
|
|
155
|
-
hasOyl: false,
|
|
156
165
|
hasUnisat: false,
|
|
157
166
|
hasXverse: false,
|
|
158
|
-
hasLeather: false,
|
|
159
167
|
connected: false,
|
|
160
168
|
isConnecting: false,
|
|
161
169
|
publicKey: "",
|
|
@@ -231,9 +239,9 @@ var findPaymentAddress = (addresses) => {
|
|
|
231
239
|
({ purpose }) => purpose === "payment"
|
|
232
240
|
);
|
|
233
241
|
};
|
|
234
|
-
var getBTCBalance = (
|
|
242
|
+
var getBTCBalance = (address2) => __async(void 0, null, function* () {
|
|
235
243
|
try {
|
|
236
|
-
return yield axios.get(`https://blockchain.info/q/addressbalance/${
|
|
244
|
+
return yield axios.get(`https://blockchain.info/q/addressbalance/${address2}`).then((response) => response.data);
|
|
237
245
|
} catch (error) {
|
|
238
246
|
console.error("Error fetching BTC balance:", error);
|
|
239
247
|
throw new Error("Failed to fetch BTC balance");
|
|
@@ -253,8 +261,41 @@ var isHex = (str) => {
|
|
|
253
261
|
const hexRegex = /^[a-fA-F0-9]+$/;
|
|
254
262
|
return hexRegex.test(str);
|
|
255
263
|
};
|
|
264
|
+
function getAddressType(address2) {
|
|
265
|
+
try {
|
|
266
|
+
bitcoin.address.fromBase58Check(address2);
|
|
267
|
+
return P2PKH;
|
|
268
|
+
} catch (e) {
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
bitcoin.address.fromBase58Check(address2);
|
|
272
|
+
return P2PSH;
|
|
273
|
+
} catch (e) {
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
const { version, data } = bitcoin.address.fromBech32(address2);
|
|
277
|
+
if (version === 0) {
|
|
278
|
+
if (data.length === 20) {
|
|
279
|
+
return P2WPKH;
|
|
280
|
+
} else if (data.length === 32) {
|
|
281
|
+
return P2WSH;
|
|
282
|
+
}
|
|
283
|
+
} else if (version === 1 && data.length === 32) {
|
|
284
|
+
return P2TR;
|
|
285
|
+
}
|
|
286
|
+
} catch (e) {
|
|
287
|
+
}
|
|
288
|
+
throw new Error("Invalid address");
|
|
289
|
+
}
|
|
256
290
|
|
|
257
291
|
// src/providers/LaserEyesProvider.tsx
|
|
292
|
+
import {
|
|
293
|
+
getAddress,
|
|
294
|
+
request,
|
|
295
|
+
RpcErrorCode,
|
|
296
|
+
signTransaction
|
|
297
|
+
} from "sats-connect";
|
|
298
|
+
import { fromOutputScript } from "bitcoinjs-lib/src/address";
|
|
258
299
|
import { jsx } from "react/jsx-runtime";
|
|
259
300
|
var LaserEyesContext = createContext(initialWalletContext);
|
|
260
301
|
var useLaserEyes = () => {
|
|
@@ -275,10 +316,11 @@ var LaserEyesProvider = ({
|
|
|
275
316
|
const [accounts, setAccounts] = useState([]);
|
|
276
317
|
const [publicKey, setPublicKey] = useState("");
|
|
277
318
|
const [paymentPublicKey, setPaymentPublicKey] = useState("");
|
|
278
|
-
const [
|
|
319
|
+
const [address2, setAddress] = useState("");
|
|
279
320
|
const [paymentAddress, setPaymentAddress] = useState("");
|
|
280
321
|
const [balance, setBalance] = useState();
|
|
281
322
|
const [hasUnisat, setHasUnisat] = useState(false);
|
|
323
|
+
const [hasXverse, setHasXverse] = useState(false);
|
|
282
324
|
const [network, setNetwork] = useLocalStorage("network", MAINNET, {
|
|
283
325
|
initializeWithValue: false
|
|
284
326
|
});
|
|
@@ -298,6 +340,11 @@ var LaserEyesProvider = ({
|
|
|
298
340
|
const unisatLib = window == null ? void 0 : window.unisat;
|
|
299
341
|
setHasUnisat(!!unisatLib);
|
|
300
342
|
}, []);
|
|
343
|
+
useEffect(() => {
|
|
344
|
+
var _a;
|
|
345
|
+
const xverseLib = (_a = window == null ? void 0 : window.XverseProviders) == null ? void 0 : _a.BitcoinProvider;
|
|
346
|
+
setHasXverse(!!xverseLib);
|
|
347
|
+
}, []);
|
|
301
348
|
useEffect(() => {
|
|
302
349
|
setBalance(void 0);
|
|
303
350
|
}, [network]);
|
|
@@ -319,7 +366,7 @@ var LaserEyesProvider = ({
|
|
|
319
366
|
const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(
|
|
320
367
|
LOCAL_STORAGE_DEFAULT_WALLET
|
|
321
368
|
);
|
|
322
|
-
if (defaultWallet
|
|
369
|
+
if (defaultWallet) {
|
|
323
370
|
setProvider(defaultWallet);
|
|
324
371
|
connect(defaultWallet);
|
|
325
372
|
}
|
|
@@ -348,6 +395,48 @@ var LaserEyesProvider = ({
|
|
|
348
395
|
throw error;
|
|
349
396
|
}
|
|
350
397
|
});
|
|
398
|
+
const connectXverse = () => __async(void 0, null, function* () {
|
|
399
|
+
try {
|
|
400
|
+
localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, XVERSE);
|
|
401
|
+
let xverseNetwork = getXverseNetwork((config == null ? void 0 : config.network) || MAINNET);
|
|
402
|
+
console.log({ xverseNetwork });
|
|
403
|
+
const getAddressOptions = {
|
|
404
|
+
payload: {
|
|
405
|
+
purposes: ["ordinals", "payment"],
|
|
406
|
+
message: "Address for receiving Ordinals and payments",
|
|
407
|
+
network: {
|
|
408
|
+
type: xverseNetwork
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
onFinish: (response) => {
|
|
412
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
413
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
414
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
415
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
416
|
+
if (foundAddress && foundPaymentAddress) {
|
|
417
|
+
setAddress(foundAddress.address);
|
|
418
|
+
setPaymentAddress(foundPaymentAddress.address);
|
|
419
|
+
setProvider(XVERSE);
|
|
420
|
+
setLibrary(window.BitcoinProvider);
|
|
421
|
+
}
|
|
422
|
+
getBTCBalance(foundPaymentAddress.address).then((totalBalance) => {
|
|
423
|
+
console.log({ totalBalance });
|
|
424
|
+
setBalance(totalBalance);
|
|
425
|
+
});
|
|
426
|
+
},
|
|
427
|
+
onCancel: () => {
|
|
428
|
+
throw new Error(`User canceled lasereyes to ${XVERSE} wallet`);
|
|
429
|
+
},
|
|
430
|
+
onError: (error) => {
|
|
431
|
+
throw new Error(`Can't lasereyes to ${XVERSE} wallet`);
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
yield getAddress(getAddressOptions);
|
|
435
|
+
setConnected(true);
|
|
436
|
+
} catch (error) {
|
|
437
|
+
throw error;
|
|
438
|
+
}
|
|
439
|
+
});
|
|
351
440
|
const handleAccountsChanged = (_accounts) => {
|
|
352
441
|
if (!_accounts.length) {
|
|
353
442
|
disconnect();
|
|
@@ -356,6 +445,7 @@ var LaserEyesProvider = ({
|
|
|
356
445
|
if (self.accounts[0] === _accounts[0]) {
|
|
357
446
|
return;
|
|
358
447
|
}
|
|
448
|
+
console.log("acct changed", _accounts[0]);
|
|
359
449
|
self.accounts = _accounts;
|
|
360
450
|
if (_accounts.length > 0) {
|
|
361
451
|
connect(UNISAT);
|
|
@@ -370,8 +460,10 @@ var LaserEyesProvider = ({
|
|
|
370
460
|
foundNetwork = getNetworkForUnisat(network2);
|
|
371
461
|
setNetwork(foundNetwork);
|
|
372
462
|
connect(provider);
|
|
463
|
+
} else if (provider === XVERSE) {
|
|
464
|
+
throw new Error("Not implemented");
|
|
373
465
|
} else {
|
|
374
|
-
throw new Error("
|
|
466
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
375
467
|
}
|
|
376
468
|
} catch (error) {
|
|
377
469
|
throw error;
|
|
@@ -384,14 +476,16 @@ var LaserEyesProvider = ({
|
|
|
384
476
|
throw new Error("No wallet provided");
|
|
385
477
|
if (walletName === UNISAT) {
|
|
386
478
|
yield connectUnisat();
|
|
479
|
+
} else if (walletName === XVERSE) {
|
|
480
|
+
yield connectXverse();
|
|
387
481
|
} else {
|
|
388
|
-
throw new Error("
|
|
482
|
+
throw new Error("The connected wallet doesn't support this method..!");
|
|
389
483
|
}
|
|
390
484
|
setConnected(true);
|
|
391
485
|
} catch (error) {
|
|
392
486
|
setIsConnecting(false);
|
|
393
487
|
disconnect();
|
|
394
|
-
throw
|
|
488
|
+
throw error;
|
|
395
489
|
} finally {
|
|
396
490
|
setIsConnecting(false);
|
|
397
491
|
}
|
|
@@ -414,14 +508,38 @@ var LaserEyesProvider = ({
|
|
|
414
508
|
return;
|
|
415
509
|
if (provider === UNISAT) {
|
|
416
510
|
return yield library.requestAccounts();
|
|
511
|
+
} else if (provider === XVERSE) {
|
|
512
|
+
const getAddressOptions = {
|
|
513
|
+
payload: {
|
|
514
|
+
// @ts-ignore
|
|
515
|
+
purposes: ["ordinals", "payment"],
|
|
516
|
+
message: "Address for receiving Ordinals and payments",
|
|
517
|
+
network: {
|
|
518
|
+
type: XVERSE_NETWORK
|
|
519
|
+
}
|
|
520
|
+
},
|
|
521
|
+
onFinish: (response) => __async(void 0, null, function* () {
|
|
522
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
523
|
+
setAddress(foundAddress.address);
|
|
524
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
525
|
+
setPaymentAddress(foundPaymentAddress);
|
|
526
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
527
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
528
|
+
}),
|
|
529
|
+
onCancel: () => {
|
|
530
|
+
console.log("CANCELLED");
|
|
531
|
+
}
|
|
532
|
+
};
|
|
533
|
+
return [address2];
|
|
417
534
|
} else {
|
|
418
|
-
throw new Error("
|
|
535
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
419
536
|
}
|
|
420
537
|
} catch (error) {
|
|
421
538
|
throw error;
|
|
422
539
|
}
|
|
423
540
|
});
|
|
424
541
|
const getNetwork = () => __async(void 0, null, function* () {
|
|
542
|
+
var _a;
|
|
425
543
|
try {
|
|
426
544
|
if (!library)
|
|
427
545
|
return;
|
|
@@ -430,9 +548,13 @@ var LaserEyesProvider = ({
|
|
|
430
548
|
const foundNetwork = getNetworkForUnisat(unisatNetwork);
|
|
431
549
|
setNetwork(foundNetwork);
|
|
432
550
|
return foundNetwork;
|
|
433
|
-
} else {
|
|
434
|
-
|
|
551
|
+
} else if (provider === XVERSE) {
|
|
552
|
+
if (address2.slice(0, 1) === "t") {
|
|
553
|
+
return TESTNET;
|
|
554
|
+
}
|
|
555
|
+
return MAINNET;
|
|
435
556
|
}
|
|
557
|
+
return (_a = config == null ? void 0 : config.network) != null ? _a : MAINNET;
|
|
436
558
|
} catch (error) {
|
|
437
559
|
throw error;
|
|
438
560
|
}
|
|
@@ -446,7 +568,7 @@ var LaserEyesProvider = ({
|
|
|
446
568
|
yield library == null ? void 0 : library.switchNetwork(wantedNetwork);
|
|
447
569
|
setNetwork(network2);
|
|
448
570
|
} else {
|
|
449
|
-
throw new Error("
|
|
571
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
450
572
|
}
|
|
451
573
|
} catch (error) {
|
|
452
574
|
throw error;
|
|
@@ -460,7 +582,7 @@ var LaserEyesProvider = ({
|
|
|
460
582
|
const pub = yield library == null ? void 0 : library.getPublicKey();
|
|
461
583
|
return yield library == null ? void 0 : library.getPublicKey();
|
|
462
584
|
} else {
|
|
463
|
-
throw new Error("
|
|
585
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
464
586
|
}
|
|
465
587
|
} catch (error) {
|
|
466
588
|
throw error;
|
|
@@ -472,8 +594,8 @@ var LaserEyesProvider = ({
|
|
|
472
594
|
return;
|
|
473
595
|
if (provider === UNISAT) {
|
|
474
596
|
return yield library.getBalance();
|
|
475
|
-
} else {
|
|
476
|
-
|
|
597
|
+
} else if (provider === XVERSE) {
|
|
598
|
+
return yield getBTCBalance(paymentAddress);
|
|
477
599
|
}
|
|
478
600
|
} catch (error) {
|
|
479
601
|
throw error;
|
|
@@ -486,7 +608,7 @@ var LaserEyesProvider = ({
|
|
|
486
608
|
if (provider === UNISAT) {
|
|
487
609
|
return yield library.getInscriptions(0, 10);
|
|
488
610
|
} else {
|
|
489
|
-
throw new Error("
|
|
611
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
490
612
|
}
|
|
491
613
|
} catch (error) {
|
|
492
614
|
throw error;
|
|
@@ -506,7 +628,7 @@ var LaserEyesProvider = ({
|
|
|
506
628
|
throw new Error("Transaction failed");
|
|
507
629
|
return txId;
|
|
508
630
|
} else {
|
|
509
|
-
throw new Error("
|
|
631
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
510
632
|
}
|
|
511
633
|
} catch (error) {
|
|
512
634
|
throw error;
|
|
@@ -518,8 +640,20 @@ var LaserEyesProvider = ({
|
|
|
518
640
|
return;
|
|
519
641
|
if (provider === UNISAT) {
|
|
520
642
|
return yield library == null ? void 0 : library.signMessage(message);
|
|
521
|
-
} else {
|
|
522
|
-
|
|
643
|
+
} else if (provider === XVERSE) {
|
|
644
|
+
const response = yield request("signMessage", {
|
|
645
|
+
address: address2,
|
|
646
|
+
message
|
|
647
|
+
});
|
|
648
|
+
if (response.status === "success") {
|
|
649
|
+
return response.result.signature;
|
|
650
|
+
} else {
|
|
651
|
+
if (response.error.code === RpcErrorCode.USER_REJECTION) {
|
|
652
|
+
throw new Error("User rejected the request");
|
|
653
|
+
} else {
|
|
654
|
+
throw new Error("Error signing message: " + response.error.message);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
523
657
|
}
|
|
524
658
|
} catch (error) {
|
|
525
659
|
throw error;
|
|
@@ -557,11 +691,91 @@ var LaserEyesProvider = ({
|
|
|
557
691
|
signedPsbtBase64: psbtSignedPsbt.toBase64(),
|
|
558
692
|
txId: void 0
|
|
559
693
|
};
|
|
694
|
+
} else if (provider === XVERSE) {
|
|
695
|
+
const toSignPsbt = bitcoin2.Psbt.fromBase64(String(psbtBase64), {
|
|
696
|
+
network: getBitcoinNetwork(network)
|
|
697
|
+
});
|
|
698
|
+
const inputs = toSignPsbt.data.inputs;
|
|
699
|
+
const inputsToSign = [];
|
|
700
|
+
const ordinalAddressData = {
|
|
701
|
+
address: address2,
|
|
702
|
+
signingIndexes: []
|
|
703
|
+
};
|
|
704
|
+
const paymentsAddressData = {
|
|
705
|
+
address: paymentAddress,
|
|
706
|
+
signingIndexes: []
|
|
707
|
+
};
|
|
708
|
+
let counter = 0;
|
|
709
|
+
try {
|
|
710
|
+
for (var iter = __forAwait(inputs), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
711
|
+
let input = temp.value;
|
|
712
|
+
const { script } = input.witnessUtxo;
|
|
713
|
+
const addressFromScript = fromOutputScript(
|
|
714
|
+
script,
|
|
715
|
+
getBitcoinNetwork(network)
|
|
716
|
+
);
|
|
717
|
+
if (addressFromScript === paymentAddress) {
|
|
718
|
+
paymentsAddressData.signingIndexes.push(Number(counter));
|
|
719
|
+
} else if (addressFromScript === address2) {
|
|
720
|
+
ordinalAddressData.signingIndexes.push(Number(counter));
|
|
721
|
+
}
|
|
722
|
+
counter++;
|
|
723
|
+
}
|
|
724
|
+
} catch (temp) {
|
|
725
|
+
error = [temp];
|
|
726
|
+
} finally {
|
|
727
|
+
try {
|
|
728
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
729
|
+
} finally {
|
|
730
|
+
if (error)
|
|
731
|
+
throw error[0];
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
if (ordinalAddressData.signingIndexes.length > 0) {
|
|
735
|
+
inputsToSign.push(ordinalAddressData);
|
|
736
|
+
}
|
|
737
|
+
if (paymentsAddressData.signingIndexes.length > 0) {
|
|
738
|
+
inputsToSign.push(paymentsAddressData);
|
|
739
|
+
}
|
|
740
|
+
let txId, signedPsbtHex, signedPsbtBase64;
|
|
741
|
+
const xverseNetwork = getXverseNetwork(network);
|
|
742
|
+
const signPsbtOptions = {
|
|
743
|
+
payload: {
|
|
744
|
+
network: {
|
|
745
|
+
type: xverseNetwork
|
|
746
|
+
},
|
|
747
|
+
message: "Sign Transaction",
|
|
748
|
+
psbtBase64: toSignPsbt.toBase64(),
|
|
749
|
+
broadcast,
|
|
750
|
+
inputsToSign
|
|
751
|
+
},
|
|
752
|
+
onFinish: (response) => {
|
|
753
|
+
if (response.txId) {
|
|
754
|
+
txId = response.txId;
|
|
755
|
+
} else if (response.psbtBase64) {
|
|
756
|
+
const signedPsbt = bitcoin2.Psbt.fromBase64(
|
|
757
|
+
String(response.psbtBase64),
|
|
758
|
+
{
|
|
759
|
+
network: getBitcoinNetwork(network)
|
|
760
|
+
}
|
|
761
|
+
);
|
|
762
|
+
signedPsbtHex = signedPsbt.toHex();
|
|
763
|
+
signedPsbtBase64 = signedPsbt.toBase64();
|
|
764
|
+
}
|
|
765
|
+
},
|
|
766
|
+
onCancel: () => console.log("Canceled")
|
|
767
|
+
};
|
|
768
|
+
yield signTransaction(signPsbtOptions);
|
|
769
|
+
return {
|
|
770
|
+
signedPsbtHex,
|
|
771
|
+
signedPsbtBase64,
|
|
772
|
+
txId
|
|
773
|
+
};
|
|
560
774
|
} else {
|
|
561
|
-
throw new Error("
|
|
775
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
562
776
|
}
|
|
563
|
-
} catch (
|
|
564
|
-
throw
|
|
777
|
+
} catch (error2) {
|
|
778
|
+
throw error2;
|
|
565
779
|
}
|
|
566
780
|
});
|
|
567
781
|
const pushPsbt = (psbt) => __async(void 0, null, function* () {
|
|
@@ -571,7 +785,7 @@ var LaserEyesProvider = ({
|
|
|
571
785
|
if (provider === UNISAT) {
|
|
572
786
|
return yield library == null ? void 0 : library.pushPsbt(psbt);
|
|
573
787
|
} else {
|
|
574
|
-
throw new Error("
|
|
788
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
575
789
|
}
|
|
576
790
|
} catch (error) {
|
|
577
791
|
throw error;
|
|
@@ -584,7 +798,7 @@ var LaserEyesProvider = ({
|
|
|
584
798
|
library,
|
|
585
799
|
accounts,
|
|
586
800
|
publicKey,
|
|
587
|
-
address,
|
|
801
|
+
address: address2,
|
|
588
802
|
paymentAddress,
|
|
589
803
|
paymentPublicKey,
|
|
590
804
|
provider,
|
|
@@ -593,6 +807,7 @@ var LaserEyesProvider = ({
|
|
|
593
807
|
connected,
|
|
594
808
|
isConnecting,
|
|
595
809
|
hasUnisat,
|
|
810
|
+
hasXverse,
|
|
596
811
|
// functions
|
|
597
812
|
connect,
|
|
598
813
|
disconnect,
|
|
@@ -621,6 +836,7 @@ export {
|
|
|
621
836
|
MEMPOOL_SPACE_URL,
|
|
622
837
|
OYL,
|
|
623
838
|
P2PKH,
|
|
839
|
+
P2PSH,
|
|
624
840
|
P2SH,
|
|
625
841
|
P2TR,
|
|
626
842
|
P2WPKH,
|
|
@@ -639,6 +855,7 @@ export {
|
|
|
639
855
|
createConfig,
|
|
640
856
|
findOrdinalsAddress,
|
|
641
857
|
findPaymentAddress,
|
|
858
|
+
getAddressType,
|
|
642
859
|
getBTCBalance,
|
|
643
860
|
getBitcoinNetwork,
|
|
644
861
|
getLeatherNetwork,
|