btc-wallet 0.2.5 → 0.2.7

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/esm/index.js CHANGED
@@ -85,6 +85,7 @@ var InjectedConnector = class extends BaseConnector {
85
85
  requestAccounts() {
86
86
  return __async(this, null, function* () {
87
87
  const accounts = yield this.getProviderOrThrow().requestAccounts();
88
+ console.log("\u{1F680} ~ InjectedConnector ~ requestAccounts ~ accounts:", accounts);
88
89
  return accounts;
89
90
  });
90
91
  }
@@ -485,7 +486,7 @@ var useAccounts = () => {
485
486
  // src/hooks/useBTCProvider.ts
486
487
  import { useCallback } from "react";
487
488
  var useBTCProvider = () => {
488
- const { connector, provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin } = useConnectProvider();
489
+ const { connector, provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin: sendBitcoin2 } = useConnectProvider();
489
490
  const sendInscription = useCallback(
490
491
  (address, inscriptionId, options) => __async(void 0, null, function* () {
491
492
  if (!connector) {
@@ -496,7 +497,7 @@ var useBTCProvider = () => {
496
497
  }),
497
498
  [connector]
498
499
  );
499
- return { provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin, sendInscription, connector };
500
+ return { provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin: sendBitcoin2, sendInscription, connector };
500
501
  };
501
502
 
502
503
  // src/hooks/useConnectModal.ts
@@ -650,6 +651,7 @@ var WalletClientProvider = class {
650
651
  }
651
652
  }
652
653
  if (method === "personal_sign" /* personalSign */) {
654
+ console.log("personal_sign ---- ", arg);
653
655
  return new Promise((resolve, reject) => {
654
656
  eventUtils_default.emit("personalSign" /* personalSign */, arg);
655
657
  eventUtils_default.once("personalSignResult" /* personalSignResult */, ({ result, error }) => {
@@ -679,7 +681,7 @@ var WalletClientProvider = class {
679
681
 
680
682
  // src/hooks/useETHProvider.ts
681
683
  var useETHProvider = () => {
682
- const { evmAccount, smartAccount, getSmartAccountInfo } = useConnectProvider();
684
+ const { evmAccount, smartAccount } = useConnectProvider();
683
685
  const [chainId, setChainId] = useState();
684
686
  useEffect(() => {
685
687
  if (smartAccount) {
@@ -773,7 +775,11 @@ var useETHProvider = () => {
773
775
  return (smartAccount == null ? void 0 : smartAccount.provider).publicClient;
774
776
  }, [smartAccount, chainId]);
775
777
  const provider = useMemo(() => {
776
- const ethereumProvider = new EthereumProvider(sendUserOp, smartAccount == null ? void 0 : smartAccount.provider, evmAccount);
778
+ const ethereumProvider = new EthereumProvider(
779
+ sendUserOp,
780
+ smartAccount == null ? void 0 : smartAccount.provider,
781
+ evmAccount
782
+ );
777
783
  return ethereumProvider;
778
784
  }, [evmAccount, sendUserOp, smartAccount == null ? void 0 : smartAccount.provider]);
779
785
  const walletClient = useMemo(() => {
@@ -785,7 +791,6 @@ var useETHProvider = () => {
785
791
  provider,
786
792
  evmAccount,
787
793
  account: evmAccount,
788
- getSmartAccountInfo,
789
794
  switchChain,
790
795
  chainId,
791
796
  getFeeQuotes,
@@ -955,6 +960,7 @@ var ConnectModal = ({ open, onClose }) => {
955
960
  yield connect(connector.metadata.id);
956
961
  closeConnectModal();
957
962
  } catch (error) {
963
+ console.error("onConnect error", error);
958
964
  if (error.code === 4001) {
959
965
  setRetryVisible(true);
960
966
  }
@@ -1082,7 +1088,13 @@ var checkBTCVersion = (accountContracts, accountContractKey, version) => {
1082
1088
  var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
1083
1089
 
1084
1090
  // src/utils/ethereumUtils.ts
1085
- import { bytesToHex, publicToAddress, toBytes, toChecksumAddress, toRpcSig } from "@ethereumjs/util";
1091
+ import {
1092
+ bytesToHex,
1093
+ publicToAddress,
1094
+ toBytes,
1095
+ toChecksumAddress,
1096
+ toRpcSig
1097
+ } from "@ethereumjs/util";
1086
1098
  import bitcore from "bitcore-lib";
1087
1099
  var pubKeyToEVMAddress = (pubKey) => {
1088
1100
  const address = toChecksumAddress(bytesToHex(publicToAddress(toBytes(`0x${pubKey}`), true)));
@@ -1097,57 +1109,6 @@ var convertSignature = (signature) => {
1097
1109
  function caculateNativeFee(userOp) {
1098
1110
  return (BigInt(userOp.callGasLimit) + BigInt(userOp.verificationGasLimit) + BigInt(userOp.preVerificationGas)) * BigInt(userOp.maxFeePerGas);
1099
1111
  }
1100
- var getBTCAAAddress = (smartAccount, btcAddress, name, version) => __async(void 0, null, function* () {
1101
- var _a;
1102
- const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
1103
- const owner = addresses[0];
1104
- const localKey = `particle_${name}_${version}_${owner}`;
1105
- if (typeof window !== "undefined" && localStorage) {
1106
- const localAA = localStorage.getItem(localKey);
1107
- if (localAA) {
1108
- return localAA;
1109
- }
1110
- }
1111
- const btcPublicKey = yield smartAccount.provider.getPublicKey();
1112
- const accountInfo = yield smartAccount.sendRpc({
1113
- method: "particle_aa_getBTCAccount",
1114
- params: [
1115
- {
1116
- name,
1117
- version,
1118
- btcPublicKey,
1119
- btcAddress
1120
- }
1121
- ]
1122
- });
1123
- const address = (_a = accountInfo == null ? void 0 : accountInfo[0]) == null ? void 0 : _a.smartAccountAddress;
1124
- if (typeof window !== "undefined" && localStorage && address) {
1125
- localStorage.setItem(localKey, address);
1126
- }
1127
- return address;
1128
- });
1129
- var getBTCAccountInfo = (smartAccount, btcAddress, name, version) => __async(void 0, null, function* () {
1130
- const btcPublicKey = yield smartAccount.provider.getPublicKey();
1131
- const [accountInfo] = yield smartAccount.sendRpc({
1132
- method: "particle_aa_getBTCAccount",
1133
- params: [
1134
- {
1135
- name,
1136
- version,
1137
- btcPublicKey,
1138
- btcAddress
1139
- }
1140
- ]
1141
- });
1142
- const address = accountInfo.smartAccountAddress;
1143
- const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
1144
- const owner = addresses[0];
1145
- const localKey = `particle_${name}_${version}_${owner}`;
1146
- if (typeof window !== "undefined" && localStorage && address) {
1147
- localStorage.setItem(localKey, address);
1148
- }
1149
- return accountInfo;
1150
- });
1151
1112
 
1152
1113
  // src/components/copyText/index.tsx
1153
1114
  import { useState as useState4 } from "react";
@@ -1417,7 +1378,11 @@ var sign_module_default = classes8;
1417
1378
 
1418
1379
  // src/components/signModal/index.tsx
1419
1380
  import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
1420
- var SignModal = ({ open, onClose, onOpen }) => {
1381
+ var SignModal = ({
1382
+ open,
1383
+ onClose,
1384
+ onOpen
1385
+ }) => {
1421
1386
  const [userOpBundle, setUserOpBundle] = useState5();
1422
1387
  const [notRemindChecked, setNotRemindChecked] = useState5(false);
1423
1388
  const [loading, setLoading] = useState5(false);
@@ -1497,10 +1462,13 @@ var SignModal = ({ open, onClose, onOpen }) => {
1497
1462
  }), [userOpBundle, smartAccount, accountContract]);
1498
1463
  useEffect4(() => {
1499
1464
  if (userOpBundle && open) {
1465
+ console.log("deserializeUserOp start");
1500
1466
  setDeserializeLoading(true);
1501
1467
  deserializeUserOp().then((result) => {
1468
+ console.log("\u{1F680} ~ deserializeUserOp ~ result:", result);
1502
1469
  setDeserializeResult(result);
1503
1470
  }).catch((error) => {
1471
+ console.log("\u{1F680} ~ deserializeUserOp ~ error:", error);
1504
1472
  eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1505
1473
  error
1506
1474
  });
@@ -1511,6 +1479,7 @@ var SignModal = ({ open, onClose, onOpen }) => {
1511
1479
  useEffect4(() => {
1512
1480
  if (open && publicClient && evmAccount && userOpBundle) {
1513
1481
  publicClient.getBalance({ address: evmAccount }).then((result) => setNativeBalance(result)).catch((error) => {
1482
+ console.log("\u{1F680} ~ getBalance ~ error:", error);
1514
1483
  eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1515
1484
  error
1516
1485
  });
@@ -1595,10 +1564,12 @@ var SignModal = ({ open, onClose, onOpen }) => {
1595
1564
  var _a, _b;
1596
1565
  return ((_b = (_a = item.estimatedChanges.natives) == null ? void 0 : _a[0]) == null ? void 0 : _b.nativeChange) && item.estimatedChanges.natives[0].nativeChange.startsWith("-");
1597
1566
  }
1598
- ).map((item) => {
1599
- var _a, _b, _c, _d;
1600
- return BigInt(((_d = (_c = (_b = (_a = item.estimatedChanges) == null ? void 0 : _a.natives) == null ? void 0 : _b[0]) == null ? void 0 : _c.nativeChange) == null ? void 0 : _d.replace("-", "")) || 0);
1601
- }).reduce((accumulator, currentValue) => accumulator + currentValue, BigInt(0));
1567
+ ).map(
1568
+ (item) => {
1569
+ var _a, _b, _c, _d;
1570
+ return BigInt(((_d = (_c = (_b = (_a = item.estimatedChanges) == null ? void 0 : _a.natives) == null ? void 0 : _b[0]) == null ? void 0 : _c.nativeChange) == null ? void 0 : _d.replace("-", "")) || 0);
1571
+ }
1572
+ ).reduce((accumulator, currentValue) => accumulator + currentValue, BigInt(0));
1602
1573
  if (userOpBundle.userOp.paymasterAndData.length > 2) {
1603
1574
  setDisabled(nativeBalance < nativeChange);
1604
1575
  } else {
@@ -1620,37 +1591,52 @@ var SignModal = ({ open, onClose, onOpen }) => {
1620
1591
  return JSON.stringify(obj, null, 2);
1621
1592
  }
1622
1593
  }, [requestArguments]);
1623
- return /* @__PURE__ */ jsx8(modal_default, { open, onClose, isDismissable: false, contentClassName: sign_module_default.modalContent, children: /* @__PURE__ */ jsxs5(Fragment3, { children: [
1624
- /* @__PURE__ */ jsx8("img", { className: sign_module_default.closeBtn, src: close_default, onClick: closeModal }),
1625
- requestArguments && /* @__PURE__ */ jsx8("div", { className: sign_module_default.signTitle, children: requestArguments.method == "personal_sign" /* personalSign */ ? "Sign Message" : "Sign Typed Data" }),
1626
- /* @__PURE__ */ jsxs5("div", { className: sign_module_default.chainInfo, children: [
1627
- /* @__PURE__ */ jsx8("img", { src: chainInfo == null ? void 0 : chainInfo.icon }),
1628
- chainInfo == null ? void 0 : chainInfo.fullname.replace("Mainnet", "")
1629
- ] }),
1630
- /* @__PURE__ */ jsx8("div", { className: sign_module_default.addressContainer, children: /* @__PURE__ */ jsx8(CopyText, { value: evmAccount, style: { textDecorationLine: "none" }, children: /* @__PURE__ */ jsxs5("div", { className: sign_module_default.addressInfo, children: [
1631
- shortString(evmAccount),
1632
- /* @__PURE__ */ jsx8("img", { src: copy_default })
1633
- ] }) }) }),
1634
- /* @__PURE__ */ jsxs5("div", { className: sign_module_default.detailsContent + (deserializeResult || requestArguments ? ` ${sign_module_default.fill}` : ""), children: [
1635
- deserializeResult && deserializeResult.map((details, index) => /* @__PURE__ */ jsx8(transactionDetails_default, { details }, `${details.type}-${index}`)),
1636
- unsignedMessage && /* @__PURE__ */ jsx8("div", { className: sign_module_default.unsignedMessage, children: unsignedMessage })
1637
- ] }),
1638
- gasFee && /* @__PURE__ */ jsx8("div", { className: sign_module_default.estimatedGas, children: `Estimated gas fee: ${formatEther(gasFee)} ${chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol}` }),
1639
- /* @__PURE__ */ jsx8(
1640
- button_default,
1641
- {
1642
- onClick: confirmTx,
1643
- className: sign_module_default.signBtn,
1644
- isLoading: loading || deserializeLoading,
1645
- isDisabled: disabled,
1646
- children: deserializeLoading ? "LOADING" : disabled ? "INSUFFICIENT FEE" : "CONFIRM"
1647
- }
1648
- ),
1649
- showNotRemind && /* @__PURE__ */ jsxs5("div", { className: sign_module_default.notRemind, onClick: toggleNotRemind, children: [
1650
- /* @__PURE__ */ jsx8("img", { src: notRemindChecked ? check_box_default : check_box_blank_default }),
1651
- "Do not remind me again"
1652
- ] })
1653
- ] }) });
1594
+ return /* @__PURE__ */ jsx8(
1595
+ modal_default,
1596
+ {
1597
+ open,
1598
+ onClose,
1599
+ isDismissable: false,
1600
+ contentClassName: sign_module_default.modalContent,
1601
+ children: /* @__PURE__ */ jsxs5(Fragment3, { children: [
1602
+ /* @__PURE__ */ jsx8("img", { className: sign_module_default.closeBtn, src: close_default, onClick: closeModal }),
1603
+ requestArguments && /* @__PURE__ */ jsx8("div", { className: sign_module_default.signTitle, children: requestArguments.method == "personal_sign" /* personalSign */ ? "Sign Message" : "Sign Typed Data" }),
1604
+ /* @__PURE__ */ jsxs5("div", { className: sign_module_default.chainInfo, children: [
1605
+ /* @__PURE__ */ jsx8("img", { src: chainInfo == null ? void 0 : chainInfo.icon }),
1606
+ chainInfo == null ? void 0 : chainInfo.fullname.replace("Mainnet", "")
1607
+ ] }),
1608
+ /* @__PURE__ */ jsx8("div", { className: sign_module_default.addressContainer, children: /* @__PURE__ */ jsx8(CopyText, { value: evmAccount, style: { textDecorationLine: "none" }, children: /* @__PURE__ */ jsxs5("div", { className: sign_module_default.addressInfo, children: [
1609
+ shortString(evmAccount),
1610
+ /* @__PURE__ */ jsx8("img", { src: copy_default })
1611
+ ] }) }) }),
1612
+ /* @__PURE__ */ jsxs5(
1613
+ "div",
1614
+ {
1615
+ className: sign_module_default.detailsContent + (deserializeResult || requestArguments ? ` ${sign_module_default.fill}` : ""),
1616
+ children: [
1617
+ deserializeResult && deserializeResult.map((details, index) => /* @__PURE__ */ jsx8(transactionDetails_default, { details }, `${details.type}-${index}`)),
1618
+ unsignedMessage && /* @__PURE__ */ jsx8("div", { className: sign_module_default.unsignedMessage, children: unsignedMessage })
1619
+ ]
1620
+ }
1621
+ ),
1622
+ gasFee && /* @__PURE__ */ jsx8("div", { className: sign_module_default.estimatedGas, children: `Estimated gas fee: ${formatEther(gasFee)} ${chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol}` }),
1623
+ /* @__PURE__ */ jsx8(
1624
+ button_default,
1625
+ {
1626
+ onClick: confirmTx,
1627
+ className: sign_module_default.signBtn,
1628
+ isLoading: loading || deserializeLoading,
1629
+ isDisabled: disabled,
1630
+ children: deserializeLoading ? "LOADING" : disabled ? "INSUFFICIENT FEE" : "CONFIRM"
1631
+ }
1632
+ ),
1633
+ showNotRemind && /* @__PURE__ */ jsxs5("div", { className: sign_module_default.notRemind, onClick: toggleNotRemind, children: [
1634
+ /* @__PURE__ */ jsx8("img", { src: notRemindChecked ? check_box_default : check_box_blank_default }),
1635
+ "Do not remind me again"
1636
+ ] })
1637
+ ] })
1638
+ }
1639
+ );
1654
1640
  };
1655
1641
  var signModal_default = SignModal;
1656
1642
 
@@ -1683,6 +1669,7 @@ var AASignerProvider = class {
1683
1669
  this.getPublicClient = () => {
1684
1670
  var _a, _b;
1685
1671
  const rpcUrl = ((_a = this == null ? void 0 : this.rpcUrls) == null ? void 0 : _a[this.chainId]) || ((_b = chains3.getEVMChainInfoById(this.chainId || 1)) == null ? void 0 : _b.rpcUrl);
1672
+ console.log("rpcUrl", rpcUrl);
1686
1673
  return createPublicClient({
1687
1674
  transport: http(rpcUrl)
1688
1675
  });
@@ -1717,8 +1704,10 @@ var AASignerProvider = class {
1717
1704
  return `0x${this.chainId.toString(16)}`;
1718
1705
  } else if (arg.method === "personal_sign" /* personalSign */) {
1719
1706
  let message = (_a = arg.params) == null ? void 0 : _a[0];
1707
+ console.log("personal_sign message:", message);
1720
1708
  if (message.length !== 66) {
1721
1709
  const hash = hashMessage({ raw: message });
1710
+ console.log("personal_sign hash:", hash);
1722
1711
  message = hash;
1723
1712
  }
1724
1713
  const result = yield this.personalSign(message || "");
@@ -1726,15 +1715,19 @@ var AASignerProvider = class {
1726
1715
  if (!convertResult) {
1727
1716
  throw new Error("sign error");
1728
1717
  }
1718
+ console.log(`personal_sign result(${convertResult.length}): `, convertResult);
1729
1719
  return convertResult;
1730
1720
  } else if (arg.method === "eth_signTypedData" || arg.method === "eth_signTypedData_v4") {
1731
1721
  const typedData = (_b = arg.params) == null ? void 0 : _b[1];
1722
+ console.log("signTypedData typedData", typedData);
1732
1723
  const hash = hashTypedData(typeof typedData === "string" ? JSON.parse(typedData) : typedData);
1724
+ console.log("signTypedData hash", hash);
1733
1725
  const result = yield this.personalSign(hash || "");
1734
1726
  const convertResult = convertSignature(result);
1735
1727
  if (!convertResult) {
1736
1728
  throw new Error("sign error");
1737
1729
  }
1730
+ console.log(`eth_signTypedData result(${convertResult.length}): `, convertResult);
1738
1731
  return convertResult;
1739
1732
  } else if (arg.method === "wallet_switchEthereumChain") {
1740
1733
  if (arg.params && arg.params instanceof Array && arg.params[0] && arg.params[0].chainId) {
@@ -1805,7 +1798,11 @@ var ConnectProvider = ({
1805
1798
  isModalOpen: connectModalOpen,
1806
1799
  openModal: openConnectModal
1807
1800
  } = useModalStateValue_default();
1808
- const { closeModal: closeSignModal, isModalOpen: signModalOpen, openModal: openSignModal } = useModalStateValue_default();
1801
+ const {
1802
+ closeModal: closeSignModal,
1803
+ isModalOpen: signModalOpen,
1804
+ openModal: openSignModal
1805
+ } = useModalStateValue_default();
1809
1806
  const [connectorId, setConnectorId] = useState7();
1810
1807
  const [accounts, setAccounts] = useState7([]);
1811
1808
  const [evmAccount, setEVMAccount] = useState7();
@@ -1814,12 +1811,12 @@ var ConnectProvider = ({
1814
1811
  version: ((_c = options.aaOptions.accountContracts[((_b = Object.keys(options.aaOptions.accountContracts)) == null ? void 0 : _b[0]) || "BTC"]) == null ? void 0 : _c[0].version) || "1.0.0"
1815
1812
  });
1816
1813
  const setAccountContract = useCallback7(
1817
- (config2) => {
1818
- if (!checkBTCVersion(options.aaOptions.accountContracts, config2.name, config2.version)) {
1814
+ (config) => {
1815
+ if (!checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
1819
1816
  throw new Error("Invalid Account Contract");
1820
1817
  }
1821
- localStorage.setItem(SAContractKey, JSON.stringify(config2));
1822
- _setAccountContract(config2);
1818
+ localStorage.setItem(SAContractKey, JSON.stringify(config));
1819
+ _setAccountContract(config);
1823
1820
  },
1824
1821
  [options.aaOptions.accountContracts, _setAccountContract]
1825
1822
  );
@@ -1858,7 +1855,7 @@ var ConnectProvider = ({
1858
1855
  }),
1859
1856
  [connector]
1860
1857
  );
1861
- const sendBitcoin = useCallback7(
1858
+ const sendBitcoin2 = useCallback7(
1862
1859
  (toAddress, satoshis, options2) => __async(void 0, null, function* () {
1863
1860
  if (!connector) {
1864
1861
  throw new Error("Wallet not connected!");
@@ -1890,7 +1887,12 @@ var ConnectProvider = ({
1890
1887
  }
1891
1888
  if (!window.__bitcoinSmartAccount || (window == null ? void 0 : window.__bitcoinSmartAccount) && ((window == null ? void 0 : window.__bitcoinSmartAccount.smartAccountContract.version) !== accountContract.version || (window == null ? void 0 : window.__bitcoinSmartAccount.smartAccountContract.name) !== accountContract.name)) {
1892
1889
  const smartAccount2 = new SmartAccount(
1893
- new AASignerProvider(evmSupportChainIds, options.projectId, options.clientKey, options.rpcUrls),
1890
+ new AASignerProvider(
1891
+ evmSupportChainIds,
1892
+ options.projectId,
1893
+ options.clientKey,
1894
+ options.rpcUrls
1895
+ ),
1894
1896
  options
1895
1897
  );
1896
1898
  smartAccount2.setSmartAccountContract(accountContract);
@@ -1900,30 +1902,6 @@ var ConnectProvider = ({
1900
1902
  window.__bitcoinSmartAccount.provider.personalSign = signMessage;
1901
1903
  return window.__bitcoinSmartAccount;
1902
1904
  }, [options, evmSupportChainIds, getPublicKey, signMessage, accountContract]);
1903
- useEffect5(() => {
1904
- if (accounts.length > 0 && smartAccount) {
1905
- getBTCAAAddress(smartAccount, accounts[0], accountContract.name, accountContract.version).then((res) => {
1906
- setEVMAccount(res);
1907
- }).catch((e) => {
1908
- setEVMAccount(void 0);
1909
- });
1910
- } else {
1911
- setEVMAccount(void 0);
1912
- }
1913
- }, [accountContract, accounts, smartAccount]);
1914
- const getSmartAccountInfo = useCallback7(() => __async(void 0, null, function* () {
1915
- if (accounts.length > 0 && smartAccount) {
1916
- const accountInfo = yield getBTCAccountInfo(
1917
- smartAccount,
1918
- accounts[0],
1919
- accountContract.name,
1920
- accountContract.version
1921
- );
1922
- setEVMAccount(accountInfo.smartAccountAddress);
1923
- return accountInfo;
1924
- }
1925
- return void 0;
1926
- }), [accounts, smartAccount, accountContract, setEVMAccount]);
1927
1905
  const requestAccount = useCallback7(
1928
1906
  (connector2) => __async(void 0, null, function* () {
1929
1907
  let accounts2 = yield connector2.getAccounts();
@@ -1934,20 +1912,18 @@ var ConnectProvider = ({
1934
1912
  }),
1935
1913
  [autoConnect]
1936
1914
  );
1937
- const requestDirectAccount = useCallback7(
1938
- (connector2) => __async(void 0, null, function* () {
1939
- let accounts2 = yield connector2.getAccounts();
1940
- if (accounts2.length === 0) {
1941
- accounts2 = yield connector2.requestAccounts();
1942
- }
1943
- setAccounts(accounts2);
1944
- return accounts2;
1945
- }),
1946
- []
1947
- );
1915
+ const requestDirectAccount = useCallback7((connector2) => __async(void 0, null, function* () {
1916
+ let accounts2 = yield connector2.getAccounts();
1917
+ if (accounts2.length === 0) {
1918
+ accounts2 = yield connector2.requestAccounts();
1919
+ }
1920
+ setAccounts(accounts2);
1921
+ return accounts2;
1922
+ }), []);
1948
1923
  useEffect5(() => {
1949
1924
  if (connector) {
1950
1925
  requestAccount(connector).catch((e) => {
1926
+ console.error("get account error", e);
1951
1927
  setAccounts([]);
1952
1928
  });
1953
1929
  } else {
@@ -1978,9 +1954,9 @@ var ConnectProvider = ({
1978
1954
  setConnectorId(void 0);
1979
1955
  }, [connector]);
1980
1956
  useEffect5(() => {
1981
- const config2 = JSON.parse(localStorage.getItem(SAContractKey) || "{}");
1982
- if (config2.name && config2.version && checkBTCVersion(options.aaOptions.accountContracts, config2.name, config2.version)) {
1983
- _setAccountContract(config2);
1957
+ const config = JSON.parse(localStorage.getItem(SAContractKey) || "{}");
1958
+ if (config.name && config.version && checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
1959
+ _setAccountContract(config);
1984
1960
  }
1985
1961
  }, [options.aaOptions.accountContracts, _setAccountContract]);
1986
1962
  useEffect5(() => {
@@ -2003,6 +1979,7 @@ var ConnectProvider = ({
2003
1979
  })
2004
1980
  })
2005
1981
  );
1982
+ console.log("walletEntryPlugin init");
2006
1983
  }
2007
1984
  }, [options, evmSupportChainIds, accountContract]);
2008
1985
  useEffect5(() => {
@@ -2011,6 +1988,7 @@ var ConnectProvider = ({
2011
1988
  walletEntryPlugin.setWalletCore({
2012
1989
  ethereum: smartAccount.provider
2013
1990
  });
1991
+ console.log("walletEntryPlugin setWalletCore");
2014
1992
  }
2015
1993
  }, [smartAccount, options]);
2016
1994
  useEffect5(() => {
@@ -2018,8 +1996,10 @@ var ConnectProvider = ({
2018
1996
  if (((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
2019
1997
  if (evmAccount) {
2020
1998
  walletEntryPlugin.walletEntryCreate();
1999
+ console.log("walletEntryPlugin walletEntryCreate");
2021
2000
  } else {
2022
2001
  walletEntryPlugin.walletEntryDestroy();
2002
+ console.log("walletEntryPlugin walletEntryDestroy");
2023
2003
  }
2024
2004
  }
2025
2005
  }, [evmAccount, smartAccount, options]);
@@ -2071,10 +2051,9 @@ var ConnectProvider = ({
2071
2051
  smartAccount,
2072
2052
  getNetwork,
2073
2053
  switchNetwork,
2074
- sendBitcoin,
2054
+ sendBitcoin: sendBitcoin2,
2075
2055
  accountContract,
2076
- setAccountContract,
2077
- getSmartAccountInfo
2056
+ setAccountContract
2078
2057
  },
2079
2058
  children: [
2080
2059
  children,
@@ -2089,8 +2068,8 @@ var useConnectProvider = () => {
2089
2068
  return context;
2090
2069
  };
2091
2070
 
2092
- // src/components/btcWalletSelectorContext.tsx
2093
- import React, { useContext as useContext2, useEffect as useEffect7, useMemo as useMemo6, useRef, useState as useState8 } from "react";
2071
+ // src/core/btcWalletSelectorContext.tsx
2072
+ import React, { useContext as useContext2, useEffect as useEffect6, useMemo as useMemo6, useRef, useState as useState8 } from "react";
2094
2073
 
2095
2074
  // src/components/confirmBox/Modal.tsx
2096
2075
  import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
@@ -2144,20 +2123,13 @@ function ComfirmBox({ onClose, status = 1, fromChain = {
2144
2123
  ] });
2145
2124
  }
2146
2125
 
2147
- // src/components/hook.tsx
2148
- import { useEffect as useEffect6 } from "react";
2149
- function InitContextHook() {
2150
- const btcContext = useBtcWalletSelector();
2151
- useEffect6(() => {
2152
- window.btcContext = btcContext;
2153
- }, [btcContext]);
2154
- return null;
2155
- }
2156
-
2157
- // src/components/btcWalletSelectorContext.tsx
2126
+ // src/core/btcWalletSelectorContext.tsx
2158
2127
  import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
2159
2128
  var WalletSelectorContext = React.createContext(null);
2160
- function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2129
+ function BtcWalletSelectorContextProvider({
2130
+ children,
2131
+ autoConnect = false
2132
+ }) {
2161
2133
  const [isProcessing, setIsProcessing] = useState8(false);
2162
2134
  const walletSelectorContextValue = useMemo6(() => {
2163
2135
  const simpleFn = {};
@@ -2201,24 +2173,38 @@ function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2201
2173
  connectors: [new UnisatConnector()],
2202
2174
  children: [
2203
2175
  children,
2204
- isProcessing && /* @__PURE__ */ jsx12(ComfirmBox, { hash: "", status: 0, onClose: () => {
2205
- setIsProcessing(false);
2206
- } }),
2207
- /* @__PURE__ */ jsx12(InitContextHook, {})
2176
+ isProcessing && /* @__PURE__ */ jsx12(
2177
+ ComfirmBox,
2178
+ {
2179
+ hash: "",
2180
+ status: 0,
2181
+ onClose: () => {
2182
+ setIsProcessing(false);
2183
+ }
2184
+ }
2185
+ ),
2186
+ /* @__PURE__ */ jsx12(InitBtcWalletSelectorContext, {})
2208
2187
  ]
2209
2188
  }
2210
2189
  ) });
2211
2190
  }
2191
+ function InitBtcWalletSelectorContext() {
2192
+ const context = useBtcWalletSelector();
2193
+ useEffect6(() => {
2194
+ window.btcContext = context;
2195
+ }, [context]);
2196
+ return null;
2197
+ }
2212
2198
  function useBtcWalletSelector() {
2213
2199
  const { openConnectModal, openConnectModalAsync, disconnect, requestDirectAccount } = useConnectModal();
2214
- const { accounts, sendBitcoin, getPublicKey, provider, signMessage, connector } = useBTCProvider();
2200
+ const { accounts, sendBitcoin: sendBitcoin2, getPublicKey, provider, signMessage, connector } = useBTCProvider();
2215
2201
  const publicKey = useRef(null);
2216
2202
  const signMessageFn = useRef(null);
2217
2203
  const connectorRef = useRef(null);
2218
2204
  const providerRef = useRef(null);
2219
2205
  const [updater, setUpdater] = useState8(1);
2220
2206
  const context = useContext2(WalletSelectorContext);
2221
- useEffect7(() => {
2207
+ useEffect6(() => {
2222
2208
  if (provider) {
2223
2209
  getPublicKey().then((res) => {
2224
2210
  publicKey.current = res;
@@ -2226,10 +2212,10 @@ function useBtcWalletSelector() {
2226
2212
  providerRef.current = provider;
2227
2213
  }
2228
2214
  }, [provider, updater]);
2229
- useEffect7(() => {
2215
+ useEffect6(() => {
2230
2216
  signMessageFn.current = signMessage;
2231
2217
  }, [signMessage]);
2232
- useEffect7(() => {
2218
+ useEffect6(() => {
2233
2219
  const fn = (account) => {
2234
2220
  if (account) {
2235
2221
  getPublicKey().then((res) => {
@@ -2263,7 +2249,7 @@ function useBtcWalletSelector() {
2263
2249
  autoConnect: () => __async(this, null, function* () {
2264
2250
  let times = 0;
2265
2251
  while (!connectorRef.current) {
2266
- yield sleep(500);
2252
+ yield delay(500);
2267
2253
  if (times++ > 10) {
2268
2254
  return null;
2269
2255
  }
@@ -2280,7 +2266,7 @@ function useBtcWalletSelector() {
2280
2266
  getPublicKey: () => __async(this, null, function* () {
2281
2267
  let times = 0;
2282
2268
  while (!publicKey.current) {
2283
- yield sleep(1e3);
2269
+ yield delay(1e3);
2284
2270
  if (times++ > 10) {
2285
2271
  return null;
2286
2272
  }
@@ -2296,23 +2282,19 @@ function useBtcWalletSelector() {
2296
2282
  getBalance: () => __async(this, null, function* () {
2297
2283
  let times = 0;
2298
2284
  while (!providerRef.current) {
2299
- yield sleep(500);
2285
+ yield delay(500);
2300
2286
  if (times++ > 10) {
2301
2287
  return null;
2302
2288
  }
2303
2289
  }
2304
2290
  const { total } = yield providerRef.current.getBalance();
2305
2291
  return total;
2306
- })
2292
+ }),
2293
+ sendBitcoin: sendBitcoin2
2307
2294
  };
2308
2295
  }
2309
- function sleep(time) {
2310
- return new Promise(function(resolve) {
2311
- setTimeout(resolve, time);
2312
- });
2313
- }
2314
2296
 
2315
- // src/utils/setupBTCWallet.ts
2297
+ // src/core/setupBTCWallet.ts
2316
2298
  import { providers, transactions } from "near-api-js";
2317
2299
  import { actionCreators } from "@near-js/transactions";
2318
2300
  import { PublicKey } from "near-api-js/lib/utils/key_pair";
@@ -2328,6 +2310,7 @@ var walletUrlConfig = {
2328
2310
  mainnet: "https://wallet.satoshibridge.top"
2329
2311
  };
2330
2312
  function setupWalletButton(network, wallet, originalWallet) {
2313
+ console.log("setupWalletButton");
2331
2314
  if (document.getElementById("satoshi-wallet-button")) {
2332
2315
  return;
2333
2316
  }
@@ -2404,7 +2387,8 @@ function createIframe({
2404
2387
  zIndex: "100000",
2405
2388
  boxShadow: "0 0 10px rgba(0, 0, 0, 0.1)",
2406
2389
  borderRadius: "10px",
2407
- display: "block"
2390
+ display: "block",
2391
+ border: "none"
2408
2392
  }, iframeStyle));
2409
2393
  document.body.appendChild(iframe);
2410
2394
  return iframe;
@@ -2415,6 +2399,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2415
2399
  const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
2416
2400
  const originalAccountId = originalWallet.account;
2417
2401
  const originalPublicKey = yield originalWallet.getPublicKey();
2402
+ console.log({ accountId, originalAccountId, originalPublicKey });
2418
2403
  const iframeSrc = new URL(iframe.src);
2419
2404
  iframeSrc.searchParams.set("origin", window.location.origin);
2420
2405
  accountId && iframeSrc.searchParams.set("accountId", accountId);
@@ -2427,8 +2412,10 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2427
2412
  return;
2428
2413
  const { action, requestId, data } = event.data;
2429
2414
  if (action === "signAndSendTransaction") {
2415
+ console.log("signAndSendTransaction message", event.data);
2430
2416
  try {
2431
2417
  const result = yield wallet.signAndSendTransaction(data);
2418
+ console.log("signAndSendTransaction result", result);
2432
2419
  (_a2 = event.source) == null ? void 0 : _a2.postMessage(
2433
2420
  {
2434
2421
  requestId,
@@ -2438,6 +2425,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2438
2425
  { targetOrigin: event.origin }
2439
2426
  );
2440
2427
  } catch (error) {
2428
+ console.error("signAndSendTransaction error", error);
2441
2429
  (_b = event.source) == null ? void 0 : _b.postMessage(
2442
2430
  {
2443
2431
  requestId,
@@ -2458,25 +2446,117 @@ function removeWalletButton() {
2458
2446
  iframe == null ? void 0 : iframe.remove();
2459
2447
  }
2460
2448
 
2461
- // src/utils/setupBTCWallet.ts
2462
- var { transfer, functionCall } = actionCreators;
2463
- var config = {
2449
+ // src/config.ts
2450
+ var walletConfig = {
2464
2451
  dev: {
2465
- base_url: "https://api.dev.satoshibridge.top/v1",
2452
+ base_url: "https://api.dev.satoshibridge.top",
2466
2453
  token: "nbtc1-nsp.testnet",
2467
- contractId: "dev1-nsp.testnet"
2454
+ contractId: "dev1-nsp.testnet",
2455
+ walletUrl: "https://wallet-dev.satoshibridge.top"
2468
2456
  },
2469
2457
  testnet: {
2470
- base_url: "https://api.testnet.satoshibridge.top/v1",
2458
+ base_url: "https://api.testnet.satoshibridge.top",
2471
2459
  token: "nbtc2-nsp.testnet",
2472
- contractId: "dev2-nsp.testnet"
2460
+ contractId: "dev2-nsp.testnet",
2461
+ walletUrl: "https://wallet-test.satoshibridge.top"
2473
2462
  },
2474
2463
  mainnet: {
2475
- base_url: "https://api.mainnet.satoshibridge.top/v1",
2464
+ base_url: "https://api.mainnet.satoshibridge.top",
2476
2465
  token: "",
2477
- contractId: ""
2466
+ contractId: "",
2467
+ walletUrl: "https://wallet.satoshibridge.top"
2478
2468
  }
2479
2469
  };
2470
+ var nearRpcUrls = {
2471
+ mainnet: [
2472
+ "https://near.lava.build",
2473
+ "https://rpc.mainnet.near.org",
2474
+ "https://free.rpc.fastnear.com",
2475
+ "https://near.drpc.org"
2476
+ ],
2477
+ testnet: [
2478
+ "https://near-testnet.lava.build",
2479
+ "https://rpc.testnet.near.org",
2480
+ "https://near-testnet.drpc.org"
2481
+ ]
2482
+ };
2483
+ var btcRpcUrls = {
2484
+ mainnet: "https://mempool.space/api",
2485
+ testnet: "https://mempool.space/testnet/api"
2486
+ };
2487
+
2488
+ // src/utils/request.ts
2489
+ var cache = /* @__PURE__ */ new Map();
2490
+ var defaultCacheTimeout = 3e3;
2491
+ function request(url, options) {
2492
+ return __async(this, null, function* () {
2493
+ var _a;
2494
+ const defaultHeaders = {
2495
+ "Content-Type": "application/json"
2496
+ };
2497
+ const cacheTimeout = (options == null ? void 0 : options.cacheTimeout) || defaultCacheTimeout;
2498
+ const headers = __spreadValues(__spreadValues({}, defaultHeaders), options == null ? void 0 : options.headers);
2499
+ let body = options == null ? void 0 : options.body;
2500
+ if (headers["Content-Type"] === "application/json" && body && typeof body !== "string") {
2501
+ body = JSON.stringify(body);
2502
+ }
2503
+ const method = (options == null ? void 0 : options.method) || "GET";
2504
+ const cacheKey = method.toUpperCase() === "GET" ? url : null;
2505
+ if (cacheKey) {
2506
+ const cached = cache.get(cacheKey);
2507
+ const isCacheValid = cached && Date.now() - cached.timestamp < cacheTimeout;
2508
+ if (isCacheValid) {
2509
+ return Promise.resolve(cached.data);
2510
+ }
2511
+ }
2512
+ const newOptions = __spreadProps(__spreadValues({}, options), {
2513
+ headers,
2514
+ body,
2515
+ method
2516
+ });
2517
+ const retryCount = (_a = options == null ? void 0 : options.retryCount) != null ? _a : 1;
2518
+ const controller = new AbortController();
2519
+ const timeout = (options == null ? void 0 : options.timeout) || 2e4;
2520
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
2521
+ try {
2522
+ const res = yield fetch(url, __spreadProps(__spreadValues({}, newOptions), { signal: controller.signal })).finally(
2523
+ () => clearTimeout(timeoutId)
2524
+ );
2525
+ if (!res.ok)
2526
+ throw new Error(res.statusText);
2527
+ const data = yield res.json();
2528
+ if (cacheKey) {
2529
+ cache.set(cacheKey, { timestamp: Date.now(), data });
2530
+ setTimeout(() => {
2531
+ cache.delete(cacheKey);
2532
+ }, cacheTimeout);
2533
+ }
2534
+ if ((options == null ? void 0 : options.shouldStopPolling) && options.shouldStopPolling(data)) {
2535
+ return data;
2536
+ }
2537
+ return data;
2538
+ } catch (err) {
2539
+ console.error(err);
2540
+ if (retryCount > 0) {
2541
+ console.log(`Retrying... attempts left: ${retryCount}`);
2542
+ return request(url, __spreadProps(__spreadValues({}, options), { retryCount: retryCount - 1 }));
2543
+ } else if ((options == null ? void 0 : options.pollingInterval) && (options == null ? void 0 : options.maxPollingAttempts)) {
2544
+ if (options.maxPollingAttempts > 0) {
2545
+ console.log(`Polling... attempts left: ${options.maxPollingAttempts}`);
2546
+ yield new Promise((resolve) => setTimeout(resolve, options.pollingInterval));
2547
+ return request(url, __spreadProps(__spreadValues({}, options), {
2548
+ maxPollingAttempts: options.maxPollingAttempts - 1,
2549
+ retryCount
2550
+ }));
2551
+ }
2552
+ }
2553
+ return Promise.reject(err);
2554
+ }
2555
+ });
2556
+ }
2557
+
2558
+ // src/core/setupBTCWallet.ts
2559
+ var { transfer, functionCall } = actionCreators;
2480
2560
  var state = {
2481
2561
  saveAccount(account) {
2482
2562
  window.localStorage.setItem("btc-wallet-account", account);
@@ -2534,7 +2614,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2534
2614
  signAndSendTransaction,
2535
2615
  signAndSendTransactions
2536
2616
  };
2537
- const currentConfig = "isDev" in metadata && metadata.isDev ? config.dev : config[options.network.networkId];
2617
+ const currentConfig = "isDev" in metadata && metadata.isDev ? walletConfig.dev : walletConfig[options.network.networkId];
2538
2618
  const walletNetwork = "isDev" in metadata && metadata.isDev ? "dev" : options.network.networkId;
2539
2619
  initWalletButton(walletNetwork, wallet);
2540
2620
  if (!inter) {
@@ -2713,6 +2793,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2713
2793
  txBytes,
2714
2794
  (byte) => ("0" + (byte & 255).toString(16)).slice(-2)
2715
2795
  ).join("");
2796
+ console.log("txHex:", txHex);
2716
2797
  const hash = bs58.encode(new Uint8Array(sha256.array(txBytes)));
2717
2798
  return { txBytes, txHex, hash };
2718
2799
  });
@@ -2749,6 +2830,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2749
2830
  });
2750
2831
  if (result.result_code === 0) {
2751
2832
  const hash = newTransactions.map((t) => t.hash);
2833
+ console.log("txHash:", hash);
2752
2834
  const result2 = yield pollTransactionStatuses(options.network.networkId, hash);
2753
2835
  return result2;
2754
2836
  } else {
@@ -2761,6 +2843,10 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2761
2843
  const checkAndSetupWalletButton = () => {
2762
2844
  const accountId = state.getAccount();
2763
2845
  const btcContext = window.btcContext;
2846
+ console.log("checkAndSetupWalletButton:", {
2847
+ nearAccountId: accountId,
2848
+ btcAccountId: btcContext.account
2849
+ });
2764
2850
  if (accountId && btcContext.account) {
2765
2851
  setupWalletButton(network, wallet2, btcContext);
2766
2852
  } else {
@@ -2777,29 +2863,16 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2777
2863
  return wallet;
2778
2864
  });
2779
2865
  function getNonceFromApi(url, accountId) {
2780
- return fetch(`${url}/nonce?csna=${accountId}`, {
2781
- method: "GET",
2782
- headers: {
2783
- "Content-Type": "application/json"
2784
- }
2785
- }).then((res) => res.json());
2866
+ return request(`${url}/v1/nonce?csna=${accountId}`);
2786
2867
  }
2787
2868
  function getNearNonceFromApi(url, accountId) {
2788
- return fetch(`${url}/nonceNear?csna=${accountId}`, {
2789
- method: "GET",
2790
- headers: {
2791
- "Content-Type": "application/json"
2792
- }
2793
- }).then((res) => res.json());
2869
+ return request(`${url}/v1/nonceNear?csna=${accountId}`);
2794
2870
  }
2795
2871
  function uploadBTCTx(url, data) {
2796
- return fetch(`${url}/receiveTransaction`, {
2872
+ return request(`${url}/v1/receiveTransaction`, {
2797
2873
  method: "POST",
2798
- headers: {
2799
- "Content-Type": "application/json"
2800
- },
2801
- body: JSON.stringify(data)
2802
- }).then((res) => res.json());
2874
+ body: data
2875
+ });
2803
2876
  }
2804
2877
  function setupBTCWallet({
2805
2878
  iconUrl = "https://assets.deltatrade.ai/assets/chain/btc.svg",
@@ -2836,23 +2909,10 @@ function toHex(originalString) {
2836
2909
  hexString = hexString.replace(/(^0+)/g, "");
2837
2910
  return hexString;
2838
2911
  }
2839
- var rcpUrls = {
2840
- mainnet: [
2841
- "https://near.lava.build",
2842
- "https://rpc.mainnet.near.org",
2843
- "https://free.rpc.fastnear.com",
2844
- "https://near.drpc.org"
2845
- ],
2846
- testnet: [
2847
- "https://near-testnet.lava.build",
2848
- "https://rpc.testnet.near.org",
2849
- "https://near-testnet.drpc.org"
2850
- ]
2851
- };
2852
2912
  function pollTransactionStatuses(network, hashes) {
2853
2913
  return __async(this, null, function* () {
2854
2914
  const provider = new providers.FailoverRpcProvider(
2855
- Object.values(rcpUrls[network]).map(
2915
+ Object.values(nearRpcUrls[network]).map(
2856
2916
  (url) => new providers.JsonRpcProvider({ url })
2857
2917
  )
2858
2918
  );
@@ -2864,14 +2924,17 @@ function pollTransactionStatuses(network, hashes) {
2864
2924
  try {
2865
2925
  const result = yield provider.txStatus(hash, "unused", "FINAL");
2866
2926
  if (result && result.status) {
2927
+ console.log(`Transaction ${hash} result:`, result);
2867
2928
  return result;
2868
2929
  }
2869
2930
  } catch (error) {
2931
+ console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
2870
2932
  }
2871
2933
  if (attempt === maxAttempts) {
2872
2934
  throw new Error(`Transaction not found after max attempts: ${hash}`);
2873
2935
  }
2874
2936
  yield delay(1e4);
2937
+ console.log(`RPC request failed for ${hash}, retrying ${maxAttempts - attempt} more times`);
2875
2938
  }
2876
2939
  });
2877
2940
  const results = yield Promise.all(hashes.map((hash) => pollStatus(hash)));
@@ -2879,9 +2942,119 @@ function pollTransactionStatuses(network, hashes) {
2879
2942
  });
2880
2943
  }
2881
2944
 
2945
+ // src/core/bridgeSupplyUtils.ts
2946
+ import { providers as providers2 } from "near-api-js";
2947
+ import Big from "big.js";
2948
+ function nearViewMethod(contractId, methodName, args, network) {
2949
+ return __async(this, null, function* () {
2950
+ const nearProvider = new providers2.FailoverRpcProvider(
2951
+ nearRpcUrls[network].map(
2952
+ (url) => new providers2.JsonRpcProvider({ url })
2953
+ )
2954
+ );
2955
+ const res = yield nearProvider.query({
2956
+ request_type: "call_function",
2957
+ account_id: contractId,
2958
+ method_name: methodName,
2959
+ args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
2960
+ finality: "optimistic"
2961
+ });
2962
+ return JSON.parse(Buffer.from(res.result).toString());
2963
+ });
2964
+ }
2965
+ function getDepositAddress(btcPublicKey, contractId, network) {
2966
+ return __async(this, null, function* () {
2967
+ const res = yield nearViewMethod(
2968
+ contractId,
2969
+ "get_user_dapp_deposit_address",
2970
+ {
2971
+ deposit_type: {
2972
+ BtcPublicKey: { btc_public_key: btcPublicKey, dapp_operation: "Burrowland->Supply" }
2973
+ }
2974
+ },
2975
+ network
2976
+ );
2977
+ return res;
2978
+ });
2979
+ }
2980
+ function getGasPrice(network) {
2981
+ return __async(this, null, function* () {
2982
+ const defaultFeeRate = 100;
2983
+ try {
2984
+ const btcRpcUrl = btcRpcUrls[network];
2985
+ const res = yield fetch(`${btcRpcUrl}/v1/fees/recommended`).then((res2) => res2.json());
2986
+ const feeRate = res.fastestFee;
2987
+ return feeRate || defaultFeeRate;
2988
+ } catch (error) {
2989
+ return defaultFeeRate;
2990
+ }
2991
+ });
2992
+ }
2993
+ function sendBitcoin(btcProvider, address, amount, feeRate) {
2994
+ return __async(this, null, function* () {
2995
+ const satoshis = new Big(amount).mul(__pow(10, 8)).toNumber();
2996
+ const txHash = yield btcProvider.sendBitcoin(address, satoshis, { feeRate });
2997
+ return txHash;
2998
+ });
2999
+ }
3000
+ function receiveDepositMsg(_0, _1) {
3001
+ return __async(this, arguments, function* (baseUrl, {
3002
+ btcPublicKey,
3003
+ txHash,
3004
+ depositType = 1
3005
+ }) {
3006
+ const res = yield request(`${baseUrl}/v1/receiveDepositMsg`, {
3007
+ method: "POST",
3008
+ body: { btcPublicKey, txHash, depositType }
3009
+ });
3010
+ return res;
3011
+ });
3012
+ }
3013
+ function checkTransactionStatus(baseUrl, txHash) {
3014
+ return __async(this, null, function* () {
3015
+ const res = yield request(`${baseUrl}/v1/bridgeFromTx?fromTxHash=${txHash}`, {
3016
+ timeout: 6e4,
3017
+ pollingInterval: 5e3,
3018
+ maxPollingAttempts: 10,
3019
+ shouldStopPolling: (res2) => res2.result_code === 0
3020
+ });
3021
+ return res;
3022
+ });
3023
+ }
3024
+ function executeBurrowSupply(_0) {
3025
+ return __async(this, arguments, function* ({
3026
+ amount,
3027
+ feeRate,
3028
+ environment = "mainnet"
3029
+ }) {
3030
+ try {
3031
+ if (typeof window === "undefined" || !window.btcContext) {
3032
+ throw new Error("BTC Provider is not initialized.");
3033
+ }
3034
+ const btcProvider = window.btcContext;
3035
+ const network = environment === "dev" ? "testnet" : environment;
3036
+ const config = walletConfig[environment];
3037
+ const btcPublicKey = yield btcProvider.getPublicKey();
3038
+ if (!btcPublicKey) {
3039
+ throw new Error("BTC Public Key is not available.");
3040
+ }
3041
+ const address = yield getDepositAddress(btcPublicKey, config.contractId, network);
3042
+ const _feeRate = feeRate || (yield getGasPrice(network));
3043
+ console.log("feeRate", _feeRate);
3044
+ const txHash = yield sendBitcoin(btcProvider, address, amount, _feeRate);
3045
+ const receiveDepositMsgRes = yield receiveDepositMsg(config.base_url, { btcPublicKey, txHash });
3046
+ console.log("receiveDepositMsg resp:", receiveDepositMsgRes);
3047
+ const checkTransactionStatusRes = yield checkTransactionStatus(config.base_url, txHash);
3048
+ console.log("checkTransactionStatus resp:", checkTransactionStatusRes);
3049
+ } catch (error) {
3050
+ console.error("Error executing Bridge+BurrowSupply:", error);
3051
+ }
3052
+ });
3053
+ }
3054
+
2882
3055
  // src/index.ts
2883
3056
  var getVersion = () => {
2884
- return "0.2.5";
3057
+ return "0.2.7";
2885
3058
  };
2886
3059
  if (typeof window !== "undefined") {
2887
3060
  window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
@@ -2892,13 +3065,13 @@ export {
2892
3065
  BtcWalletSelectorContextProvider,
2893
3066
  BybitConnector,
2894
3067
  ConnectProvider,
2895
- InitContextHook,
2896
3068
  InjectedConnector,
2897
3069
  OKXConnector,
2898
3070
  TokenPocketConnector,
2899
3071
  UnisatConnector,
2900
3072
  WizzConnector,
2901
3073
  XverseConnector,
3074
+ executeBurrowSupply,
2902
3075
  getVersion,
2903
3076
  setupBTCWallet,
2904
3077
  useAccountContract,