btc-wallet 0.5.6-beta → 0.5.8-beta

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,9 @@
1
1
  import EventEmitter from 'events';
2
+ import type { Address } from 'sats-connect';
2
3
  import { BaseConnector, type WalletMetadata } from './base';
4
+ interface XverseAddress extends Address {
5
+ walletType: 'software' | 'ledger';
6
+ }
3
7
  export declare class XverseConnector extends BaseConnector {
4
8
  #private;
5
9
  constructor();
@@ -10,14 +14,17 @@ export declare class XverseConnector extends BaseConnector {
10
14
  txid: string;
11
15
  }>;
12
16
  requestAccounts(): Promise<string[]>;
17
+ getAddresses(): Promise<XverseAddress[]>;
18
+ getCurrentAddress(): Promise<XverseAddress>;
13
19
  getAccounts(): Promise<string[]>;
14
20
  getPublicKey(): Promise<string>;
15
21
  signMessage(signStr: string): Promise<string>;
16
22
  on(event: string, handler: (data?: unknown) => void): EventEmitter<[never]>;
17
23
  removeListener(event: string, handler: (data?: unknown) => void): EventEmitter<[never]>;
18
- getProvider(): import("sats-connect").BitcoinProvider | undefined;
24
+ getProvider(): import("sats-connect").BitcoinProvider;
19
25
  getNetwork(): Promise<'livenet' | 'testnet'>;
20
26
  switchNetwork(): Promise<void>;
21
27
  sendBitcoin(toAddress: string, satoshis: number): Promise<string>;
22
28
  disconnect(): void;
23
29
  }
30
+ export {};
package/dist/index.js CHANGED
@@ -715,16 +715,15 @@ var XverseConnector = class extends BaseConnector {
715
715
  this.loadAccounts = (network) => __async(this, null, function* () {
716
716
  const { AddressPurpose } = yield import("sats-connect");
717
717
  const provider = this.getProvider();
718
- if (!provider) {
719
- throw new Error(`${this.metadata.name} is not install!`);
720
- }
721
718
  yield provider.request("wallet_requestPermissions", void 0);
722
719
  const { result: walletType } = yield provider.request("wallet_getWalletType", void 0);
723
720
  const { result } = yield provider.request("getAddresses", {
724
721
  purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],
725
722
  message: "Address for receiving Ordinals and payments"
726
723
  });
727
- const addresses = result.addresses.map((item) => __spreadProps(__spreadValues({}, item), { walletType }));
724
+ const addresses = result.addresses.map((item) => __spreadProps(__spreadValues({}, item), {
725
+ walletType
726
+ }));
728
727
  console.log("\u{1F680} ~ XverseConnector ~ loadAccounts ~ res:", addresses);
729
728
  localStorage.setItem("btc-connect-xverse-addresses-" + network, JSON.stringify(addresses));
730
729
  return addresses;
@@ -747,78 +746,76 @@ var XverseConnector = class extends BaseConnector {
747
746
  }
748
747
  requestAccounts() {
749
748
  return __async(this, null, function* () {
750
- if (isMobile() && !this.getProvider()) {
751
- MobileWalletConnect.redirectToWallet(this.metadata.id);
752
- return [];
749
+ if (isMobile()) {
750
+ try {
751
+ this.getProvider();
752
+ } catch (error) {
753
+ MobileWalletConnect.redirectToWallet(this.metadata.id);
754
+ return [];
755
+ }
753
756
  }
754
757
  const addresses = yield this.loadAccounts(__privateGet(this, _network));
755
758
  return addresses.map((item) => item.address);
756
759
  });
757
760
  }
758
- getAccounts() {
761
+ getAddresses() {
759
762
  return __async(this, null, function* () {
760
- if (!this.isReady()) {
761
- throw new Error(`${this.metadata.name} is not install!`);
762
- }
763
763
  const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
764
764
  if (data) {
765
- const addresses = JSON.parse(data);
766
- return addresses.map((item) => item.address);
767
- } else {
768
- return [];
765
+ return JSON.parse(data);
769
766
  }
767
+ return [];
770
768
  });
771
769
  }
772
- getPublicKey() {
770
+ getCurrentAddress() {
773
771
  return __async(this, null, function* () {
774
- if (!this.isReady()) {
775
- throw new Error(`${this.metadata.name} is not install!`);
776
- }
777
- const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
778
- if (data) {
779
- const addresses = JSON.parse(data);
780
- return addresses[0].publicKey;
781
- } else {
782
- return "";
772
+ const addresses = yield this.getAddresses();
773
+ const address = addresses == null ? void 0 : addresses[0];
774
+ if (!address) {
775
+ throw new Error(`${this.metadata.name} not connected!`);
783
776
  }
777
+ return address;
784
778
  });
785
779
  }
786
- signMessage(signStr) {
780
+ getAccounts() {
787
781
  return __async(this, null, function* () {
788
782
  if (!this.isReady()) {
789
783
  throw new Error(`${this.metadata.name} is not install!`);
790
784
  }
791
- const addresses = yield this.getAccounts();
792
- if (addresses.length === 0) {
793
- throw new Error(`${this.metadata.name} not connected!`);
794
- }
795
- const { signMessage } = yield import("sats-connect");
796
- const sig = yield new Promise((resolve, reject) => {
797
- const signMessageOptions = {
798
- payload: {
799
- network: {
800
- type: __privateGet(this, _network)
801
- },
802
- address: addresses[0],
803
- message: signStr
804
- },
805
- onFinish: (response) => {
806
- resolve(response);
807
- },
808
- onCancel: () => {
809
- reject({
810
- code: 4001,
811
- message: "User rejected the request."
812
- });
813
- }
814
- };
815
- signMessage(signMessageOptions).catch((e) => {
816
- reject(e);
817
- });
785
+ const addresses = yield this.getAddresses();
786
+ return addresses.map((item) => item.address);
787
+ });
788
+ }
789
+ getPublicKey() {
790
+ return __async(this, null, function* () {
791
+ const address = yield this.getCurrentAddress();
792
+ return address.publicKey;
793
+ });
794
+ }
795
+ signMessage(signStr) {
796
+ return __async(this, null, function* () {
797
+ const address = yield this.getCurrentAddress();
798
+ const provider = this.getProvider();
799
+ const { result } = yield provider.request("signMessage", {
800
+ address: address.address,
801
+ message: signStr,
802
+ protocol: "ECDSA"
818
803
  });
819
- const modifiedSig = Buffer.from(sig, "base64");
820
- modifiedSig[0] = 31 + (modifiedSig[0] - 31) % 4;
821
- return modifiedSig.toString("base64");
804
+ const modifiedSig = Buffer.from(result.signature, "base64");
805
+ console.log("xverse walletType", address.walletType);
806
+ console.log("xverse raw sig", result.signature, modifiedSig.toString("base64"));
807
+ if (address.walletType === "ledger") {
808
+ if (address.addressType === "p2wpkh") {
809
+ modifiedSig[0] = 31 + (modifiedSig[0] - 39);
810
+ } else if (address.addressType === "p2sh") {
811
+ modifiedSig[0] = 31 + (modifiedSig[0] - 35);
812
+ }
813
+ } else {
814
+ modifiedSig[0] = 31 + (modifiedSig[0] - 31) % 4;
815
+ }
816
+ const sig = modifiedSig.toString("base64");
817
+ console.log("xverse modified sig", sig);
818
+ return sig;
822
819
  });
823
820
  }
824
821
  on(event, handler) {
@@ -828,9 +825,11 @@ var XverseConnector = class extends BaseConnector {
828
825
  return __privateGet(this, _event).removeListener(event, handler);
829
826
  }
830
827
  getProvider() {
831
- if (this.isReady()) {
832
- return window.BitcoinProvider;
828
+ const provider = window.BitcoinProvider;
829
+ if (!provider) {
830
+ throw new Error(`${this.metadata.name} is not install!`);
833
831
  }
832
+ return provider;
834
833
  }
835
834
  getNetwork() {
836
835
  return __async(this, null, function* () {
@@ -848,9 +847,6 @@ var XverseConnector = class extends BaseConnector {
848
847
  sendBitcoin(toAddress, satoshis) {
849
848
  return __async(this, null, function* () {
850
849
  const provider = this.getProvider();
851
- if (!provider) {
852
- throw new Error(`${this.metadata.name} is not install!`);
853
- }
854
850
  const { result } = yield provider.request("sendTransfer", {
855
851
  recipients: [{ address: toAddress, amount: satoshis }]
856
852
  });
@@ -3411,6 +3407,16 @@ function getCsnaAccountId(env) {
3411
3407
  return csna;
3412
3408
  });
3413
3409
  }
3410
+ function checkDepositDisabledAddress() {
3411
+ const data = localStorage.getItem("btc-connect-xverse-addresses-Mainnet");
3412
+ if (!data)
3413
+ return;
3414
+ const addresses = JSON.parse(data);
3415
+ const address = addresses == null ? void 0 : addresses[0];
3416
+ if (address.walletType === "ledger" && !["p2wpkh", "p2sh"].includes(address.addressType)) {
3417
+ throw new Error("Ledger is only supported for p2wpkh and p2sh address");
3418
+ }
3419
+ }
3414
3420
  function executeBTCDepositAndAction(_0) {
3415
3421
  return __async(this, arguments, function* ({
3416
3422
  action,
@@ -3423,6 +3429,7 @@ function executeBTCDepositAndAction(_0) {
3423
3429
  }) {
3424
3430
  var _a;
3425
3431
  try {
3432
+ checkDepositDisabledAddress();
3426
3433
  const { getPublicKey } = getBtcProvider();
3427
3434
  const config = yield getConfig(env);
3428
3435
  const btcPublicKey = yield getPublicKey();
@@ -4479,7 +4486,7 @@ function setupBTCWallet({
4479
4486
 
4480
4487
  // src/index.ts
4481
4488
  var getVersion = () => {
4482
- return "0.5.6-beta";
4489
+ return "0.5.8-beta";
4483
4490
  };
4484
4491
  if (typeof window !== "undefined") {
4485
4492
  window.__BTC_WALLET_VERSION = getVersion();