btc-wallet 0.2.4 → 0.2.6

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 }) => {
@@ -955,6 +957,7 @@ var ConnectModal = ({ open, onClose }) => {
955
957
  yield connect(connector.metadata.id);
956
958
  closeConnectModal();
957
959
  } catch (error) {
960
+ console.error("onConnect error", error);
958
961
  if (error.code === 4001) {
959
962
  setRetryVisible(true);
960
963
  }
@@ -1497,10 +1500,13 @@ var SignModal = ({ open, onClose, onOpen }) => {
1497
1500
  }), [userOpBundle, smartAccount, accountContract]);
1498
1501
  useEffect4(() => {
1499
1502
  if (userOpBundle && open) {
1503
+ console.log("deserializeUserOp start");
1500
1504
  setDeserializeLoading(true);
1501
1505
  deserializeUserOp().then((result) => {
1506
+ console.log("\u{1F680} ~ deserializeUserOp ~ result:", result);
1502
1507
  setDeserializeResult(result);
1503
1508
  }).catch((error) => {
1509
+ console.log("\u{1F680} ~ deserializeUserOp ~ error:", error);
1504
1510
  eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1505
1511
  error
1506
1512
  });
@@ -1511,6 +1517,7 @@ var SignModal = ({ open, onClose, onOpen }) => {
1511
1517
  useEffect4(() => {
1512
1518
  if (open && publicClient && evmAccount && userOpBundle) {
1513
1519
  publicClient.getBalance({ address: evmAccount }).then((result) => setNativeBalance(result)).catch((error) => {
1520
+ console.log("\u{1F680} ~ getBalance ~ error:", error);
1514
1521
  eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1515
1522
  error
1516
1523
  });
@@ -1683,6 +1690,7 @@ var AASignerProvider = class {
1683
1690
  this.getPublicClient = () => {
1684
1691
  var _a, _b;
1685
1692
  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);
1693
+ console.log("rpcUrl", rpcUrl);
1686
1694
  return createPublicClient({
1687
1695
  transport: http(rpcUrl)
1688
1696
  });
@@ -1717,8 +1725,10 @@ var AASignerProvider = class {
1717
1725
  return `0x${this.chainId.toString(16)}`;
1718
1726
  } else if (arg.method === "personal_sign" /* personalSign */) {
1719
1727
  let message = (_a = arg.params) == null ? void 0 : _a[0];
1728
+ console.log("personal_sign message:", message);
1720
1729
  if (message.length !== 66) {
1721
1730
  const hash = hashMessage({ raw: message });
1731
+ console.log("personal_sign hash:", hash);
1722
1732
  message = hash;
1723
1733
  }
1724
1734
  const result = yield this.personalSign(message || "");
@@ -1726,15 +1736,19 @@ var AASignerProvider = class {
1726
1736
  if (!convertResult) {
1727
1737
  throw new Error("sign error");
1728
1738
  }
1739
+ console.log(`personal_sign result(${convertResult.length}): `, convertResult);
1729
1740
  return convertResult;
1730
1741
  } else if (arg.method === "eth_signTypedData" || arg.method === "eth_signTypedData_v4") {
1731
1742
  const typedData = (_b = arg.params) == null ? void 0 : _b[1];
1743
+ console.log("signTypedData typedData", typedData);
1732
1744
  const hash = hashTypedData(typeof typedData === "string" ? JSON.parse(typedData) : typedData);
1745
+ console.log("signTypedData hash", hash);
1733
1746
  const result = yield this.personalSign(hash || "");
1734
1747
  const convertResult = convertSignature(result);
1735
1748
  if (!convertResult) {
1736
1749
  throw new Error("sign error");
1737
1750
  }
1751
+ console.log(`eth_signTypedData result(${convertResult.length}): `, convertResult);
1738
1752
  return convertResult;
1739
1753
  } else if (arg.method === "wallet_switchEthereumChain") {
1740
1754
  if (arg.params && arg.params instanceof Array && arg.params[0] && arg.params[0].chainId) {
@@ -1814,12 +1828,12 @@ var ConnectProvider = ({
1814
1828
  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
1829
  });
1816
1830
  const setAccountContract = useCallback7(
1817
- (config2) => {
1818
- if (!checkBTCVersion(options.aaOptions.accountContracts, config2.name, config2.version)) {
1831
+ (config) => {
1832
+ if (!checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
1819
1833
  throw new Error("Invalid Account Contract");
1820
1834
  }
1821
- localStorage.setItem(SAContractKey, JSON.stringify(config2));
1822
- _setAccountContract(config2);
1835
+ localStorage.setItem(SAContractKey, JSON.stringify(config));
1836
+ _setAccountContract(config);
1823
1837
  },
1824
1838
  [options.aaOptions.accountContracts, _setAccountContract]
1825
1839
  );
@@ -1858,7 +1872,7 @@ var ConnectProvider = ({
1858
1872
  }),
1859
1873
  [connector]
1860
1874
  );
1861
- const sendBitcoin = useCallback7(
1875
+ const sendBitcoin2 = useCallback7(
1862
1876
  (toAddress, satoshis, options2) => __async(void 0, null, function* () {
1863
1877
  if (!connector) {
1864
1878
  throw new Error("Wallet not connected!");
@@ -1906,6 +1920,7 @@ var ConnectProvider = ({
1906
1920
  setEVMAccount(res);
1907
1921
  }).catch((e) => {
1908
1922
  setEVMAccount(void 0);
1923
+ console.error("smartAccount getAddress error", e);
1909
1924
  });
1910
1925
  } else {
1911
1926
  setEVMAccount(void 0);
@@ -1927,6 +1942,7 @@ var ConnectProvider = ({
1927
1942
  const requestAccount = useCallback7(
1928
1943
  (connector2) => __async(void 0, null, function* () {
1929
1944
  let accounts2 = yield connector2.getAccounts();
1945
+ console.log("requestAccount start, autoConnect", accounts2, autoConnect);
1930
1946
  if (accounts2.length === 0 && autoConnect) {
1931
1947
  accounts2 = yield connector2.requestAccounts();
1932
1948
  }
@@ -1936,7 +1952,9 @@ var ConnectProvider = ({
1936
1952
  );
1937
1953
  const requestDirectAccount = useCallback7(
1938
1954
  (connector2) => __async(void 0, null, function* () {
1955
+ console.log(111);
1939
1956
  let accounts2 = yield connector2.getAccounts();
1957
+ console.log("requestAccount start, autoConnect", accounts2, autoConnect);
1940
1958
  if (accounts2.length === 0) {
1941
1959
  accounts2 = yield connector2.requestAccounts();
1942
1960
  }
@@ -1948,6 +1966,7 @@ var ConnectProvider = ({
1948
1966
  useEffect5(() => {
1949
1967
  if (connector) {
1950
1968
  requestAccount(connector).catch((e) => {
1969
+ console.log("get account error", e);
1951
1970
  setAccounts([]);
1952
1971
  });
1953
1972
  } else {
@@ -1978,9 +1997,9 @@ var ConnectProvider = ({
1978
1997
  setConnectorId(void 0);
1979
1998
  }, [connector]);
1980
1999
  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);
2000
+ const config = JSON.parse(localStorage.getItem(SAContractKey) || "{}");
2001
+ if (config.name && config.version && checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
2002
+ _setAccountContract(config);
1984
2003
  }
1985
2004
  }, [options.aaOptions.accountContracts, _setAccountContract]);
1986
2005
  useEffect5(() => {
@@ -2003,6 +2022,7 @@ var ConnectProvider = ({
2003
2022
  })
2004
2023
  })
2005
2024
  );
2025
+ console.log("walletEntryPlugin init");
2006
2026
  }
2007
2027
  }, [options, evmSupportChainIds, accountContract]);
2008
2028
  useEffect5(() => {
@@ -2011,6 +2031,7 @@ var ConnectProvider = ({
2011
2031
  walletEntryPlugin.setWalletCore({
2012
2032
  ethereum: smartAccount.provider
2013
2033
  });
2034
+ console.log("walletEntryPlugin setWalletCore");
2014
2035
  }
2015
2036
  }, [smartAccount, options]);
2016
2037
  useEffect5(() => {
@@ -2018,8 +2039,10 @@ var ConnectProvider = ({
2018
2039
  if (((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
2019
2040
  if (evmAccount) {
2020
2041
  walletEntryPlugin.walletEntryCreate();
2042
+ console.log("walletEntryPlugin walletEntryCreate");
2021
2043
  } else {
2022
2044
  walletEntryPlugin.walletEntryDestroy();
2045
+ console.log("walletEntryPlugin walletEntryDestroy");
2023
2046
  }
2024
2047
  }
2025
2048
  }, [evmAccount, smartAccount, options]);
@@ -2071,7 +2094,7 @@ var ConnectProvider = ({
2071
2094
  smartAccount,
2072
2095
  getNetwork,
2073
2096
  switchNetwork,
2074
- sendBitcoin,
2097
+ sendBitcoin: sendBitcoin2,
2075
2098
  accountContract,
2076
2099
  setAccountContract,
2077
2100
  getSmartAccountInfo
@@ -2157,7 +2180,10 @@ function InitContextHook() {
2157
2180
  // src/components/btcWalletSelectorContext.tsx
2158
2181
  import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
2159
2182
  var WalletSelectorContext = React.createContext(null);
2160
- function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2183
+ function BtcWalletSelectorContextProvider({
2184
+ children,
2185
+ autoConnect = false
2186
+ }) {
2161
2187
  const [isProcessing, setIsProcessing] = useState8(false);
2162
2188
  const walletSelectorContextValue = useMemo6(() => {
2163
2189
  const simpleFn = {};
@@ -2201,9 +2227,16 @@ function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2201
2227
  connectors: [new UnisatConnector()],
2202
2228
  children: [
2203
2229
  children,
2204
- isProcessing && /* @__PURE__ */ jsx12(ComfirmBox, { hash: "", status: 0, onClose: () => {
2205
- setIsProcessing(false);
2206
- } }),
2230
+ isProcessing && /* @__PURE__ */ jsx12(
2231
+ ComfirmBox,
2232
+ {
2233
+ hash: "",
2234
+ status: 0,
2235
+ onClose: () => {
2236
+ setIsProcessing(false);
2237
+ }
2238
+ }
2239
+ ),
2207
2240
  /* @__PURE__ */ jsx12(InitContextHook, {})
2208
2241
  ]
2209
2242
  }
@@ -2211,7 +2244,7 @@ function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2211
2244
  }
2212
2245
  function useBtcWalletSelector() {
2213
2246
  const { openConnectModal, openConnectModalAsync, disconnect, requestDirectAccount } = useConnectModal();
2214
- const { accounts, sendBitcoin, getPublicKey, provider, signMessage, connector } = useBTCProvider();
2247
+ const { accounts, sendBitcoin: sendBitcoin2, getPublicKey, provider, signMessage, connector } = useBTCProvider();
2215
2248
  const publicKey = useRef(null);
2216
2249
  const signMessageFn = useRef(null);
2217
2250
  const connectorRef = useRef(null);
@@ -2303,7 +2336,8 @@ function useBtcWalletSelector() {
2303
2336
  }
2304
2337
  const { total } = yield providerRef.current.getBalance();
2305
2338
  return total;
2306
- })
2339
+ }),
2340
+ sendBitcoin: sendBitcoin2
2307
2341
  };
2308
2342
  }
2309
2343
  function sleep(time) {
@@ -2328,6 +2362,7 @@ var walletUrlConfig = {
2328
2362
  mainnet: "https://wallet.satoshibridge.top"
2329
2363
  };
2330
2364
  function setupWalletButton(network, wallet, originalWallet) {
2365
+ console.log("setupWalletButton");
2331
2366
  if (document.getElementById("satoshi-wallet-button")) {
2332
2367
  return;
2333
2368
  }
@@ -2415,20 +2450,24 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2415
2450
  const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
2416
2451
  const originalAccountId = originalWallet.account;
2417
2452
  const originalPublicKey = yield originalWallet.getPublicKey();
2453
+ console.log({ accountId, originalAccountId, originalPublicKey });
2418
2454
  const iframeSrc = new URL(iframe.src);
2419
2455
  iframeSrc.searchParams.set("origin", window.location.origin);
2420
2456
  accountId && iframeSrc.searchParams.set("accountId", accountId);
2421
2457
  originalAccountId && iframeSrc.searchParams.set("originalAccountId", originalAccountId);
2422
2458
  originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
2423
2459
  iframe.src = iframeSrc.toString();
2460
+ console.log("iframe src", iframe.src);
2424
2461
  window.addEventListener("message", (event) => __async(this, null, function* () {
2425
2462
  var _a2, _b;
2426
2463
  if (event.origin !== iframeSrc.origin)
2427
2464
  return;
2428
2465
  const { action, requestId, data } = event.data;
2429
2466
  if (action === "signAndSendTransaction") {
2467
+ console.log("signAndSendTransaction message", event.data);
2430
2468
  try {
2431
2469
  const result = yield wallet.signAndSendTransaction(data);
2470
+ console.log("signAndSendTransaction result", result);
2432
2471
  (_a2 = event.source) == null ? void 0 : _a2.postMessage(
2433
2472
  {
2434
2473
  requestId,
@@ -2438,6 +2477,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2438
2477
  { targetOrigin: event.origin }
2439
2478
  );
2440
2479
  } catch (error) {
2480
+ console.error("signAndSendTransaction error", error);
2441
2481
  (_b = event.source) == null ? void 0 : _b.postMessage(
2442
2482
  {
2443
2483
  requestId,
@@ -2458,25 +2498,117 @@ function removeWalletButton() {
2458
2498
  iframe == null ? void 0 : iframe.remove();
2459
2499
  }
2460
2500
 
2461
- // src/utils/setupBTCWallet.ts
2462
- var { transfer, functionCall } = actionCreators;
2463
- var config = {
2501
+ // src/config.ts
2502
+ var walletConfig = {
2464
2503
  dev: {
2465
- base_url: "https://api.dev.satoshibridge.top/v1",
2504
+ base_url: "https://api.dev.satoshibridge.top",
2466
2505
  token: "nbtc1-nsp.testnet",
2467
- contractId: "dev1-nsp.testnet"
2506
+ contractId: "dev1-nsp.testnet",
2507
+ walletUrl: "https://wallet-dev.satoshibridge.top"
2468
2508
  },
2469
2509
  testnet: {
2470
- base_url: "https://api.testnet.satoshibridge.top/v1",
2510
+ base_url: "https://api.testnet.satoshibridge.top",
2471
2511
  token: "nbtc2-nsp.testnet",
2472
- contractId: "dev2-nsp.testnet"
2512
+ contractId: "dev2-nsp.testnet",
2513
+ walletUrl: "https://wallet-test.satoshibridge.top"
2473
2514
  },
2474
2515
  mainnet: {
2475
- base_url: "https://api.mainnet.satoshibridge.top/v1",
2516
+ base_url: "https://api.mainnet.satoshibridge.top",
2476
2517
  token: "",
2477
- contractId: ""
2518
+ contractId: "",
2519
+ walletUrl: "https://wallet.satoshibridge.top"
2478
2520
  }
2479
2521
  };
2522
+ var nearRpcUrls = {
2523
+ mainnet: [
2524
+ "https://near.lava.build",
2525
+ "https://rpc.mainnet.near.org",
2526
+ "https://free.rpc.fastnear.com",
2527
+ "https://near.drpc.org"
2528
+ ],
2529
+ testnet: [
2530
+ "https://near-testnet.lava.build",
2531
+ "https://rpc.testnet.near.org",
2532
+ "https://near-testnet.drpc.org"
2533
+ ]
2534
+ };
2535
+ var btcRpcUrls = {
2536
+ mainnet: "https://blockstream.info/api",
2537
+ testnet: "https://blockstream.info/testnet/api"
2538
+ };
2539
+
2540
+ // src/utils/request.ts
2541
+ var cache = /* @__PURE__ */ new Map();
2542
+ var defaultCacheTimeout = 3e3;
2543
+ function request(url, options) {
2544
+ return __async(this, null, function* () {
2545
+ var _a;
2546
+ const defaultHeaders = {
2547
+ "Content-Type": "application/json"
2548
+ };
2549
+ const cacheTimeout = (options == null ? void 0 : options.cacheTimeout) || defaultCacheTimeout;
2550
+ const headers = __spreadValues(__spreadValues({}, defaultHeaders), options == null ? void 0 : options.headers);
2551
+ let body = options == null ? void 0 : options.body;
2552
+ if (headers["Content-Type"] === "application/json" && body && typeof body !== "string") {
2553
+ body = JSON.stringify(body);
2554
+ }
2555
+ const method = (options == null ? void 0 : options.method) || "GET";
2556
+ const cacheKey = method.toUpperCase() === "GET" ? url : null;
2557
+ if (cacheKey) {
2558
+ const cached = cache.get(cacheKey);
2559
+ const isCacheValid = cached && Date.now() - cached.timestamp < cacheTimeout;
2560
+ if (isCacheValid) {
2561
+ return Promise.resolve(cached.data);
2562
+ }
2563
+ }
2564
+ const newOptions = __spreadProps(__spreadValues({}, options), {
2565
+ headers,
2566
+ body,
2567
+ method
2568
+ });
2569
+ const retryCount = (_a = options == null ? void 0 : options.retryCount) != null ? _a : 1;
2570
+ const controller = new AbortController();
2571
+ const timeout = (options == null ? void 0 : options.timeout) || 2e4;
2572
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
2573
+ try {
2574
+ const res = yield fetch(url, __spreadProps(__spreadValues({}, newOptions), { signal: controller.signal })).finally(
2575
+ () => clearTimeout(timeoutId)
2576
+ );
2577
+ if (!res.ok)
2578
+ throw new Error(res.statusText);
2579
+ const data = yield res.json();
2580
+ if (cacheKey) {
2581
+ cache.set(cacheKey, { timestamp: Date.now(), data });
2582
+ setTimeout(() => {
2583
+ cache.delete(cacheKey);
2584
+ }, cacheTimeout);
2585
+ }
2586
+ if ((options == null ? void 0 : options.shouldStopPolling) && options.shouldStopPolling(data)) {
2587
+ return data;
2588
+ }
2589
+ return data;
2590
+ } catch (err) {
2591
+ console.error(err);
2592
+ if (retryCount > 0) {
2593
+ console.log(`Retrying... attempts left: ${retryCount}`);
2594
+ return request(url, __spreadProps(__spreadValues({}, options), { retryCount: retryCount - 1 }));
2595
+ } else if ((options == null ? void 0 : options.pollingInterval) && (options == null ? void 0 : options.maxPollingAttempts)) {
2596
+ if (options.maxPollingAttempts > 0) {
2597
+ console.log(`Polling... attempts left: ${options.maxPollingAttempts}`);
2598
+ yield new Promise((resolve) => setTimeout(resolve, options.pollingInterval));
2599
+ return request(url, __spreadProps(__spreadValues({}, options), {
2600
+ maxPollingAttempts: options.maxPollingAttempts - 1,
2601
+ retryCount
2602
+ }));
2603
+ }
2604
+ }
2605
+ return Promise.reject(err);
2606
+ }
2607
+ });
2608
+ }
2609
+
2610
+ // src/utils/setupBTCWallet.ts
2611
+ var { transfer, functionCall } = actionCreators;
2480
2612
  var state = {
2481
2613
  saveAccount(account) {
2482
2614
  window.localStorage.setItem("btc-wallet-account", account);
@@ -2534,12 +2666,13 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2534
2666
  signAndSendTransaction,
2535
2667
  signAndSendTransactions
2536
2668
  };
2537
- const currentConfig = "isDev" in metadata && metadata.isDev ? config.dev : config[options.network.networkId];
2669
+ const currentConfig = "isDev" in metadata && metadata.isDev ? walletConfig.dev : walletConfig[options.network.networkId];
2538
2670
  const walletNetwork = "isDev" in metadata && metadata.isDev ? "dev" : options.network.networkId;
2539
2671
  initWalletButton(walletNetwork, wallet);
2540
2672
  if (!inter) {
2541
2673
  inter = setInterval(() => __async(void 0, null, function* () {
2542
2674
  const btcContext = window.btcContext;
2675
+ console.log("inter btcContext:", btcContext);
2543
2676
  if (btcContext) {
2544
2677
  clearInterval(inter);
2545
2678
  const context = btcContext.getContext();
@@ -2561,10 +2694,12 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2561
2694
  });
2562
2695
  }));
2563
2696
  context.on("btcLogOut", (e) => __async(void 0, null, function* () {
2697
+ console.log(3333);
2564
2698
  emitter.emit("accountsChanged", {
2565
2699
  accounts: []
2566
2700
  });
2567
2701
  }));
2702
+ console.log("metadata.autoConnect:", metadata);
2568
2703
  if ("autoConnect" in metadata && metadata.autoConnect && localStorage.getItem("near-wallet-selector:selectedWalletId") === '"btc-wallet"') {
2569
2704
  yield btcContext.autoConnect();
2570
2705
  }
@@ -2713,6 +2848,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2713
2848
  txBytes,
2714
2849
  (byte) => ("0" + (byte & 255).toString(16)).slice(-2)
2715
2850
  ).join("");
2851
+ console.log("txHex:", txHex);
2716
2852
  const hash = bs58.encode(new Uint8Array(sha256.array(txBytes)));
2717
2853
  return { txBytes, txHex, hash };
2718
2854
  });
@@ -2726,10 +2862,10 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2726
2862
  chain_id: "397",
2727
2863
  csna: accountId,
2728
2864
  near_transactions: newTransactions.map((t) => t.txHex),
2729
- nonce,
2730
2865
  gas_token: currentConfig.token,
2731
2866
  gas_limit: "3000",
2732
- use_near_pay_gas: false
2867
+ use_near_pay_gas: false,
2868
+ nonce
2733
2869
  };
2734
2870
  const nearAccount = yield provider.query({
2735
2871
  request_type: "view_account",
@@ -2747,8 +2883,10 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2747
2883
  btcPubKey: state.getBtcPublicKey(),
2748
2884
  data: toHex(strIntention)
2749
2885
  });
2886
+ console.log("result:", result);
2750
2887
  if (result.result_code === 0) {
2751
2888
  const hash = newTransactions.map((t) => t.hash);
2889
+ console.log("txHash:", hash);
2752
2890
  const result2 = yield pollTransactionStatuses(options.network.networkId, hash);
2753
2891
  return result2;
2754
2892
  } else {
@@ -2761,6 +2899,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2761
2899
  const checkAndSetupWalletButton = () => {
2762
2900
  const accountId = state.getAccount();
2763
2901
  const btcContext = window.btcContext;
2902
+ console.log("checkAndSetupWalletButton:", accountId, btcContext.account);
2764
2903
  if (accountId && btcContext.account) {
2765
2904
  setupWalletButton(network, wallet2, btcContext);
2766
2905
  } else {
@@ -2777,29 +2916,16 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2777
2916
  return wallet;
2778
2917
  });
2779
2918
  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());
2919
+ return request(`${url}/v1/nonce?csna=${accountId}`);
2786
2920
  }
2787
2921
  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());
2922
+ return request(`${url}/v1/nonceNear?csna=${accountId}`);
2794
2923
  }
2795
2924
  function uploadBTCTx(url, data) {
2796
- return fetch(`${url}/receiveTransaction`, {
2925
+ return request(`${url}/v1/receiveTransaction`, {
2797
2926
  method: "POST",
2798
- headers: {
2799
- "Content-Type": "application/json"
2800
- },
2801
- body: JSON.stringify(data)
2802
- }).then((res) => res.json());
2927
+ body: data
2928
+ });
2803
2929
  }
2804
2930
  function setupBTCWallet({
2805
2931
  iconUrl = "https://assets.deltatrade.ai/assets/chain/btc.svg",
@@ -2836,23 +2962,10 @@ function toHex(originalString) {
2836
2962
  hexString = hexString.replace(/(^0+)/g, "");
2837
2963
  return hexString;
2838
2964
  }
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
2965
  function pollTransactionStatuses(network, hashes) {
2853
2966
  return __async(this, null, function* () {
2854
2967
  const provider = new providers.FailoverRpcProvider(
2855
- Object.values(rcpUrls[network]).map(
2968
+ Object.values(nearRpcUrls[network]).map(
2856
2969
  (url) => new providers.JsonRpcProvider({ url })
2857
2970
  )
2858
2971
  );
@@ -2864,14 +2977,17 @@ function pollTransactionStatuses(network, hashes) {
2864
2977
  try {
2865
2978
  const result = yield provider.txStatus(hash, "unused", "FINAL");
2866
2979
  if (result && result.status) {
2980
+ console.log(`Transaction ${hash} result:`, result);
2867
2981
  return result;
2868
2982
  }
2869
2983
  } catch (error) {
2984
+ console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
2870
2985
  }
2871
2986
  if (attempt === maxAttempts) {
2872
2987
  throw new Error(`Transaction not found after max attempts: ${hash}`);
2873
2988
  }
2874
2989
  yield delay(1e4);
2990
+ console.log(`RPC request failed for ${hash}, retrying ${maxAttempts - attempt} more times`);
2875
2991
  }
2876
2992
  });
2877
2993
  const results = yield Promise.all(hashes.map((hash) => pollStatus(hash)));
@@ -2879,9 +2995,108 @@ function pollTransactionStatuses(network, hashes) {
2879
2995
  });
2880
2996
  }
2881
2997
 
2998
+ // src/utils/bridgeSupplyUtils.ts
2999
+ import { providers as providers2 } from "near-api-js";
3000
+ import Big from "big.js";
3001
+ function nearViewMethod(contractId, methodName, args, network) {
3002
+ return __async(this, null, function* () {
3003
+ const nearProvider = new providers2.FailoverRpcProvider(
3004
+ nearRpcUrls[network].map(
3005
+ (url) => new providers2.JsonRpcProvider({ url })
3006
+ )
3007
+ );
3008
+ const res = yield nearProvider.query({
3009
+ request_type: "call_function",
3010
+ account_id: contractId,
3011
+ method_name: methodName,
3012
+ args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
3013
+ finality: "optimistic"
3014
+ });
3015
+ return JSON.parse(Buffer.from(res.result).toString());
3016
+ });
3017
+ }
3018
+ function getDepositAddress(btcPublicKey, contractId, network) {
3019
+ return __async(this, null, function* () {
3020
+ const res = yield nearViewMethod(
3021
+ contractId,
3022
+ "get_user_dapp_deposit_address",
3023
+ {
3024
+ deposit_type: {
3025
+ BtcPublicKey: { btc_public_key: btcPublicKey, dapp_operation: "Burrowland->Supply" }
3026
+ }
3027
+ },
3028
+ network
3029
+ );
3030
+ return res;
3031
+ });
3032
+ }
3033
+ function getGasPrice(btcRpcUrl) {
3034
+ return __async(this, null, function* () {
3035
+ const defaultFeeRate = 100;
3036
+ try {
3037
+ const res = yield request(`${btcRpcUrl}/fee-estimates`);
3038
+ const feeRate = res[6];
3039
+ return feeRate || defaultFeeRate;
3040
+ } catch (error) {
3041
+ return defaultFeeRate;
3042
+ }
3043
+ });
3044
+ }
3045
+ function sendBitcoin(btcProvider, address, amount, feeRate) {
3046
+ return __async(this, null, function* () {
3047
+ const satoshis = new Big(amount).mul(__pow(10, 8)).toNumber();
3048
+ const txHash = yield btcProvider.sendBitcoin(address, satoshis, { feeRate });
3049
+ return txHash;
3050
+ });
3051
+ }
3052
+ function receiveDepositMsg(_0, _1) {
3053
+ return __async(this, arguments, function* (baseUrl, {
3054
+ btcPublicKey,
3055
+ txHash,
3056
+ depositType = 1
3057
+ }) {
3058
+ const res = yield request(`${baseUrl}/v1/receiveDepositMsg`, {
3059
+ method: "POST",
3060
+ body: { btcPublicKey, txHash, depositType }
3061
+ });
3062
+ return res;
3063
+ });
3064
+ }
3065
+ function checkTransactionStatus(baseUrl, txHash) {
3066
+ return __async(this, null, function* () {
3067
+ const res = yield request(`${baseUrl}/v1/bridgeFromTx?fromTxHash=${txHash}`);
3068
+ return res;
3069
+ });
3070
+ }
3071
+ function executeBurrowSupply(amount, environment) {
3072
+ return __async(this, null, function* () {
3073
+ try {
3074
+ if (typeof window === "undefined" || !window.btcContext) {
3075
+ throw new Error("BTC Provider is not initialized.");
3076
+ }
3077
+ const btcProvider = window.btcContext;
3078
+ const network = environment === "dev" ? "testnet" : environment;
3079
+ const config = walletConfig[environment];
3080
+ const btcRpcUrl = btcRpcUrls[network];
3081
+ const btcPublicKey = yield btcProvider.getPublicKey();
3082
+ if (!btcPublicKey) {
3083
+ throw new Error("BTC Public Key is not available.");
3084
+ }
3085
+ const address = yield getDepositAddress(btcPublicKey, config.contractId, network);
3086
+ const feeRate = yield getGasPrice(btcRpcUrl);
3087
+ const txHash = yield sendBitcoin(btcProvider, address, amount, feeRate);
3088
+ yield receiveDepositMsg(config.base_url, { btcPublicKey, txHash });
3089
+ const status = yield checkTransactionStatus(config.base_url, txHash);
3090
+ console.log("Transaction Status:", status);
3091
+ } catch (error) {
3092
+ console.error("Error executing Bridge+BurrowSupply:", error);
3093
+ }
3094
+ });
3095
+ }
3096
+
2882
3097
  // src/index.ts
2883
3098
  var getVersion = () => {
2884
- return "0.2.4";
3099
+ return "0.2.6";
2885
3100
  };
2886
3101
  if (typeof window !== "undefined") {
2887
3102
  window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
@@ -2899,6 +3114,7 @@ export {
2899
3114
  UnisatConnector,
2900
3115
  WizzConnector,
2901
3116
  XverseConnector,
3117
+ executeBurrowSupply,
2902
3118
  getVersion,
2903
3119
  setupBTCWallet,
2904
3120
  useAccountContract,