btc-wallet 0.5.6-beta → 0.5.7-beta

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.
@@ -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" && (address.addressType !== "p2wpkh" || address.addressType !== "p2sh")) {
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.7-beta";
4483
4490
  };
4484
4491
  if (typeof window !== "undefined") {
4485
4492
  window.__BTC_WALLET_VERSION = getVersion();