btc-wallet 0.5.5-beta → 0.5.7-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
@@ -713,26 +713,18 @@ var XverseConnector = class extends BaseConnector {
713
713
  downloadUrl: "https://www.xverse.app"
714
714
  };
715
715
  this.loadAccounts = (network) => __async(this, null, function* () {
716
- const { getAddress, AddressPurpose } = yield import("sats-connect");
717
- const addresses = yield new Promise((resolve, reject) => {
718
- const getAddressOptions = {
719
- payload: {
720
- purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],
721
- message: "Address for receiving Ordinals and payments",
722
- network: {
723
- type: network
724
- }
725
- },
726
- onFinish: (response) => {
727
- resolve(response.addresses);
728
- },
729
- onCancel: () => reject({
730
- code: 4001,
731
- message: "User rejected the request."
732
- })
733
- };
734
- getAddress(getAddressOptions).catch((error) => reject(error));
716
+ const { AddressPurpose } = yield import("sats-connect");
717
+ const provider = this.getProvider();
718
+ yield provider.request("wallet_requestPermissions", void 0);
719
+ const { result: walletType } = yield provider.request("wallet_getWalletType", void 0);
720
+ const { result } = yield provider.request("getAddresses", {
721
+ purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],
722
+ message: "Address for receiving Ordinals and payments"
735
723
  });
724
+ const addresses = result.addresses.map((item) => __spreadProps(__spreadValues({}, item), {
725
+ walletType
726
+ }));
727
+ console.log("\u{1F680} ~ XverseConnector ~ loadAccounts ~ res:", addresses);
736
728
  localStorage.setItem("btc-connect-xverse-addresses-" + network, JSON.stringify(addresses));
737
729
  return addresses;
738
730
  });
@@ -754,78 +746,76 @@ var XverseConnector = class extends BaseConnector {
754
746
  }
755
747
  requestAccounts() {
756
748
  return __async(this, null, function* () {
757
- if (isMobile() && !this.getProvider()) {
758
- MobileWalletConnect.redirectToWallet(this.metadata.id);
759
- return [];
749
+ if (isMobile()) {
750
+ try {
751
+ this.getProvider();
752
+ } catch (error) {
753
+ MobileWalletConnect.redirectToWallet(this.metadata.id);
754
+ return [];
755
+ }
760
756
  }
761
757
  const addresses = yield this.loadAccounts(__privateGet(this, _network));
762
758
  return addresses.map((item) => item.address);
763
759
  });
764
760
  }
765
- getAccounts() {
761
+ getAddresses() {
766
762
  return __async(this, null, function* () {
767
- if (!this.isReady()) {
768
- throw new Error(`${this.metadata.name} is not install!`);
769
- }
770
763
  const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
771
764
  if (data) {
772
- const addresses = JSON.parse(data);
773
- return addresses.map((item) => item.address);
774
- } else {
775
- return [];
765
+ return JSON.parse(data);
776
766
  }
767
+ return [];
777
768
  });
778
769
  }
779
- getPublicKey() {
770
+ getCurrentAddress() {
780
771
  return __async(this, null, function* () {
781
- if (!this.isReady()) {
782
- throw new Error(`${this.metadata.name} is not install!`);
783
- }
784
- const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
785
- if (data) {
786
- const addresses = JSON.parse(data);
787
- return addresses[0].publicKey;
788
- } else {
789
- 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!`);
790
776
  }
777
+ return address;
791
778
  });
792
779
  }
793
- signMessage(signStr) {
780
+ getAccounts() {
794
781
  return __async(this, null, function* () {
795
782
  if (!this.isReady()) {
796
783
  throw new Error(`${this.metadata.name} is not install!`);
797
784
  }
798
- const addresses = yield this.getAccounts();
799
- if (addresses.length === 0) {
800
- throw new Error(`${this.metadata.name} not connected!`);
801
- }
802
- const { signMessage } = yield import("sats-connect");
803
- const sig = yield new Promise((resolve, reject) => {
804
- const signMessageOptions = {
805
- payload: {
806
- network: {
807
- type: __privateGet(this, _network)
808
- },
809
- address: addresses[0],
810
- message: signStr
811
- },
812
- onFinish: (response) => {
813
- resolve(response);
814
- },
815
- onCancel: () => {
816
- reject({
817
- code: 4001,
818
- message: "User rejected the request."
819
- });
820
- }
821
- };
822
- signMessage(signMessageOptions).catch((e) => {
823
- reject(e);
824
- });
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"
825
803
  });
826
- const modifiedSig = Buffer.from(sig, "base64");
827
- modifiedSig[0] = 31 + (modifiedSig[0] - 31) % 4;
828
- 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;
829
819
  });
830
820
  }
831
821
  on(event, handler) {
@@ -835,9 +825,11 @@ var XverseConnector = class extends BaseConnector {
835
825
  return __privateGet(this, _event).removeListener(event, handler);
836
826
  }
837
827
  getProvider() {
838
- if (this.isReady()) {
839
- return window.BitcoinProvider;
828
+ const provider = window.BitcoinProvider;
829
+ if (!provider) {
830
+ throw new Error(`${this.metadata.name} is not install!`);
840
831
  }
832
+ return provider;
841
833
  }
842
834
  getNetwork() {
843
835
  return __async(this, null, function* () {
@@ -855,9 +847,6 @@ var XverseConnector = class extends BaseConnector {
855
847
  sendBitcoin(toAddress, satoshis) {
856
848
  return __async(this, null, function* () {
857
849
  const provider = this.getProvider();
858
- if (!provider) {
859
- throw new Error(`${this.metadata.name} is not install!`);
860
- }
861
850
  const { result } = yield provider.request("sendTransfer", {
862
851
  recipients: [{ address: toAddress, amount: satoshis }]
863
852
  });
@@ -3418,6 +3407,16 @@ function getCsnaAccountId(env) {
3418
3407
  return csna;
3419
3408
  });
3420
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" && (address.addressType !== "p2wpkh" || address.addressType !== "p2sh")) {
3417
+ throw new Error("Ledger is only supported for p2wpkh and p2sh address");
3418
+ }
3419
+ }
3421
3420
  function executeBTCDepositAndAction(_0) {
3422
3421
  return __async(this, arguments, function* ({
3423
3422
  action,
@@ -3430,6 +3429,7 @@ function executeBTCDepositAndAction(_0) {
3430
3429
  }) {
3431
3430
  var _a;
3432
3431
  try {
3432
+ checkDepositDisabledAddress();
3433
3433
  const { getPublicKey } = getBtcProvider();
3434
3434
  const config = yield getConfig(env);
3435
3435
  const btcPublicKey = yield getPublicKey();
@@ -3872,7 +3872,9 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
3872
3872
  iframe.src = iframeSrc.toString();
3873
3873
  const actions = {
3874
3874
  signAndSendTransaction: wallet.signAndSendTransaction,
3875
- executeBTCDepositAndAction
3875
+ signAndSendTransactions: wallet.signAndSendTransactions,
3876
+ executeBTCDepositAndAction,
3877
+ getWithdrawTransaction
3876
3878
  };
3877
3879
  window.addEventListener("message", (event) => __async(this, null, function* () {
3878
3880
  var _a2, _b;
@@ -4484,7 +4486,7 @@ function setupBTCWallet({
4484
4486
 
4485
4487
  // src/index.ts
4486
4488
  var getVersion = () => {
4487
- return "0.5.5-beta";
4489
+ return "0.5.7-beta";
4488
4490
  };
4489
4491
  if (typeof window !== "undefined") {
4490
4492
  window.__BTC_WALLET_VERSION = getVersion();