btc-wallet 0.2.4 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.ts CHANGED
@@ -4,4 +4,5 @@ export * from './hooks';
4
4
  export * from './components/btcWalletSelectorContext';
5
5
  export * from './utils/setupBTCWallet';
6
6
  export * from './components/hook';
7
+ export * from './utils/bridgeSupplyUtils';
7
8
  export declare const getVersion: () => string;
package/dist/index.js CHANGED
@@ -90,6 +90,7 @@ __export(src_exports, {
90
90
  UnisatConnector: () => UnisatConnector,
91
91
  WizzConnector: () => WizzConnector,
92
92
  XverseConnector: () => XverseConnector,
93
+ executeBurrowSupply: () => executeBurrowSupply,
93
94
  getVersion: () => getVersion,
94
95
  setupBTCWallet: () => setupBTCWallet,
95
96
  useAccountContract: () => useAccountContract,
@@ -134,6 +135,7 @@ var InjectedConnector = class extends BaseConnector {
134
135
  requestAccounts() {
135
136
  return __async(this, null, function* () {
136
137
  const accounts = yield this.getProviderOrThrow().requestAccounts();
138
+ console.log("\u{1F680} ~ InjectedConnector ~ requestAccounts ~ accounts:", accounts);
137
139
  return accounts;
138
140
  });
139
141
  }
@@ -534,7 +536,7 @@ var useAccounts = () => {
534
536
  // src/hooks/useBTCProvider.ts
535
537
  var import_react = require("react");
536
538
  var useBTCProvider = () => {
537
- const { connector, provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin } = useConnectProvider();
539
+ const { connector, provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin: sendBitcoin2 } = useConnectProvider();
538
540
  const sendInscription = (0, import_react.useCallback)(
539
541
  (address, inscriptionId, options) => __async(void 0, null, function* () {
540
542
  if (!connector) {
@@ -545,7 +547,7 @@ var useBTCProvider = () => {
545
547
  }),
546
548
  [connector]
547
549
  );
548
- return { provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin, sendInscription, connector };
550
+ return { provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin: sendBitcoin2, sendInscription, connector };
549
551
  };
550
552
 
551
553
  // src/hooks/useConnectModal.ts
@@ -699,6 +701,7 @@ var WalletClientProvider = class {
699
701
  }
700
702
  }
701
703
  if (method === "personal_sign" /* personalSign */) {
704
+ console.log("personal_sign ---- ", arg);
702
705
  return new Promise((resolve, reject) => {
703
706
  eventUtils_default.emit("personalSign" /* personalSign */, arg);
704
707
  eventUtils_default.once("personalSignResult" /* personalSignResult */, ({ result, error }) => {
@@ -1004,6 +1007,7 @@ var ConnectModal = ({ open, onClose }) => {
1004
1007
  yield connect(connector.metadata.id);
1005
1008
  closeConnectModal();
1006
1009
  } catch (error) {
1010
+ console.error("onConnect error", error);
1007
1011
  if (error.code === 4001) {
1008
1012
  setRetryVisible(true);
1009
1013
  }
@@ -1546,10 +1550,13 @@ var SignModal = ({ open, onClose, onOpen }) => {
1546
1550
  }), [userOpBundle, smartAccount, accountContract]);
1547
1551
  (0, import_react8.useEffect)(() => {
1548
1552
  if (userOpBundle && open) {
1553
+ console.log("deserializeUserOp start");
1549
1554
  setDeserializeLoading(true);
1550
1555
  deserializeUserOp().then((result) => {
1556
+ console.log("\u{1F680} ~ deserializeUserOp ~ result:", result);
1551
1557
  setDeserializeResult(result);
1552
1558
  }).catch((error) => {
1559
+ console.log("\u{1F680} ~ deserializeUserOp ~ error:", error);
1553
1560
  eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1554
1561
  error
1555
1562
  });
@@ -1560,6 +1567,7 @@ var SignModal = ({ open, onClose, onOpen }) => {
1560
1567
  (0, import_react8.useEffect)(() => {
1561
1568
  if (open && publicClient && evmAccount && userOpBundle) {
1562
1569
  publicClient.getBalance({ address: evmAccount }).then((result) => setNativeBalance(result)).catch((error) => {
1570
+ console.log("\u{1F680} ~ getBalance ~ error:", error);
1563
1571
  eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1564
1572
  error
1565
1573
  });
@@ -1724,6 +1732,7 @@ var AASignerProvider = class {
1724
1732
  this.getPublicClient = () => {
1725
1733
  var _a, _b;
1726
1734
  const rpcUrl = ((_a = this == null ? void 0 : this.rpcUrls) == null ? void 0 : _a[this.chainId]) || ((_b = import_chains3.chains.getEVMChainInfoById(this.chainId || 1)) == null ? void 0 : _b.rpcUrl);
1735
+ console.log("rpcUrl", rpcUrl);
1727
1736
  return (0, import_viem4.createPublicClient)({
1728
1737
  transport: (0, import_viem4.http)(rpcUrl)
1729
1738
  });
@@ -1758,8 +1767,10 @@ var AASignerProvider = class {
1758
1767
  return `0x${this.chainId.toString(16)}`;
1759
1768
  } else if (arg.method === "personal_sign" /* personalSign */) {
1760
1769
  let message = (_a = arg.params) == null ? void 0 : _a[0];
1770
+ console.log("personal_sign message:", message);
1761
1771
  if (message.length !== 66) {
1762
1772
  const hash = (0, import_viem4.hashMessage)({ raw: message });
1773
+ console.log("personal_sign hash:", hash);
1763
1774
  message = hash;
1764
1775
  }
1765
1776
  const result = yield this.personalSign(message || "");
@@ -1767,15 +1778,19 @@ var AASignerProvider = class {
1767
1778
  if (!convertResult) {
1768
1779
  throw new Error("sign error");
1769
1780
  }
1781
+ console.log(`personal_sign result(${convertResult.length}): `, convertResult);
1770
1782
  return convertResult;
1771
1783
  } else if (arg.method === "eth_signTypedData" || arg.method === "eth_signTypedData_v4") {
1772
1784
  const typedData = (_b = arg.params) == null ? void 0 : _b[1];
1785
+ console.log("signTypedData typedData", typedData);
1773
1786
  const hash = (0, import_viem4.hashTypedData)(typeof typedData === "string" ? JSON.parse(typedData) : typedData);
1787
+ console.log("signTypedData hash", hash);
1774
1788
  const result = yield this.personalSign(hash || "");
1775
1789
  const convertResult = convertSignature(result);
1776
1790
  if (!convertResult) {
1777
1791
  throw new Error("sign error");
1778
1792
  }
1793
+ console.log(`eth_signTypedData result(${convertResult.length}): `, convertResult);
1779
1794
  return convertResult;
1780
1795
  } else if (arg.method === "wallet_switchEthereumChain") {
1781
1796
  if (arg.params && arg.params instanceof Array && arg.params[0] && arg.params[0].chainId) {
@@ -1855,12 +1870,12 @@ var ConnectProvider = ({
1855
1870
  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"
1856
1871
  });
1857
1872
  const setAccountContract = (0, import_react10.useCallback)(
1858
- (config2) => {
1859
- if (!checkBTCVersion(options.aaOptions.accountContracts, config2.name, config2.version)) {
1873
+ (config) => {
1874
+ if (!checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
1860
1875
  throw new Error("Invalid Account Contract");
1861
1876
  }
1862
- localStorage.setItem(SAContractKey, JSON.stringify(config2));
1863
- _setAccountContract(config2);
1877
+ localStorage.setItem(SAContractKey, JSON.stringify(config));
1878
+ _setAccountContract(config);
1864
1879
  },
1865
1880
  [options.aaOptions.accountContracts, _setAccountContract]
1866
1881
  );
@@ -1899,7 +1914,7 @@ var ConnectProvider = ({
1899
1914
  }),
1900
1915
  [connector]
1901
1916
  );
1902
- const sendBitcoin = (0, import_react10.useCallback)(
1917
+ const sendBitcoin2 = (0, import_react10.useCallback)(
1903
1918
  (toAddress, satoshis, options2) => __async(void 0, null, function* () {
1904
1919
  if (!connector) {
1905
1920
  throw new Error("Wallet not connected!");
@@ -1947,6 +1962,7 @@ var ConnectProvider = ({
1947
1962
  setEVMAccount(res);
1948
1963
  }).catch((e) => {
1949
1964
  setEVMAccount(void 0);
1965
+ console.error("smartAccount getAddress error", e);
1950
1966
  });
1951
1967
  } else {
1952
1968
  setEVMAccount(void 0);
@@ -1968,6 +1984,7 @@ var ConnectProvider = ({
1968
1984
  const requestAccount = (0, import_react10.useCallback)(
1969
1985
  (connector2) => __async(void 0, null, function* () {
1970
1986
  let accounts2 = yield connector2.getAccounts();
1987
+ console.log("requestAccount start, autoConnect", accounts2, autoConnect);
1971
1988
  if (accounts2.length === 0 && autoConnect) {
1972
1989
  accounts2 = yield connector2.requestAccounts();
1973
1990
  }
@@ -1977,7 +1994,9 @@ var ConnectProvider = ({
1977
1994
  );
1978
1995
  const requestDirectAccount = (0, import_react10.useCallback)(
1979
1996
  (connector2) => __async(void 0, null, function* () {
1997
+ console.log(111);
1980
1998
  let accounts2 = yield connector2.getAccounts();
1999
+ console.log("requestAccount start, autoConnect", accounts2, autoConnect);
1981
2000
  if (accounts2.length === 0) {
1982
2001
  accounts2 = yield connector2.requestAccounts();
1983
2002
  }
@@ -1989,6 +2008,7 @@ var ConnectProvider = ({
1989
2008
  (0, import_react10.useEffect)(() => {
1990
2009
  if (connector) {
1991
2010
  requestAccount(connector).catch((e) => {
2011
+ console.log("get account error", e);
1992
2012
  setAccounts([]);
1993
2013
  });
1994
2014
  } else {
@@ -2019,9 +2039,9 @@ var ConnectProvider = ({
2019
2039
  setConnectorId(void 0);
2020
2040
  }, [connector]);
2021
2041
  (0, import_react10.useEffect)(() => {
2022
- const config2 = JSON.parse(localStorage.getItem(SAContractKey) || "{}");
2023
- if (config2.name && config2.version && checkBTCVersion(options.aaOptions.accountContracts, config2.name, config2.version)) {
2024
- _setAccountContract(config2);
2042
+ const config = JSON.parse(localStorage.getItem(SAContractKey) || "{}");
2043
+ if (config.name && config.version && checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
2044
+ _setAccountContract(config);
2025
2045
  }
2026
2046
  }, [options.aaOptions.accountContracts, _setAccountContract]);
2027
2047
  (0, import_react10.useEffect)(() => {
@@ -2044,6 +2064,7 @@ var ConnectProvider = ({
2044
2064
  })
2045
2065
  })
2046
2066
  );
2067
+ console.log("walletEntryPlugin init");
2047
2068
  }
2048
2069
  }, [options, evmSupportChainIds, accountContract]);
2049
2070
  (0, import_react10.useEffect)(() => {
@@ -2052,6 +2073,7 @@ var ConnectProvider = ({
2052
2073
  import_wallet.walletEntryPlugin.setWalletCore({
2053
2074
  ethereum: smartAccount.provider
2054
2075
  });
2076
+ console.log("walletEntryPlugin setWalletCore");
2055
2077
  }
2056
2078
  }, [smartAccount, options]);
2057
2079
  (0, import_react10.useEffect)(() => {
@@ -2059,8 +2081,10 @@ var ConnectProvider = ({
2059
2081
  if (((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
2060
2082
  if (evmAccount) {
2061
2083
  import_wallet.walletEntryPlugin.walletEntryCreate();
2084
+ console.log("walletEntryPlugin walletEntryCreate");
2062
2085
  } else {
2063
2086
  import_wallet.walletEntryPlugin.walletEntryDestroy();
2087
+ console.log("walletEntryPlugin walletEntryDestroy");
2064
2088
  }
2065
2089
  }
2066
2090
  }, [evmAccount, smartAccount, options]);
@@ -2112,7 +2136,7 @@ var ConnectProvider = ({
2112
2136
  smartAccount,
2113
2137
  getNetwork,
2114
2138
  switchNetwork,
2115
- sendBitcoin,
2139
+ sendBitcoin: sendBitcoin2,
2116
2140
  accountContract,
2117
2141
  setAccountContract,
2118
2142
  getSmartAccountInfo
@@ -2198,7 +2222,10 @@ function InitContextHook() {
2198
2222
  // src/components/btcWalletSelectorContext.tsx
2199
2223
  var import_jsx_runtime12 = require("react/jsx-runtime");
2200
2224
  var WalletSelectorContext = import_react12.default.createContext(null);
2201
- function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2225
+ function BtcWalletSelectorContextProvider({
2226
+ children,
2227
+ autoConnect = false
2228
+ }) {
2202
2229
  const [isProcessing, setIsProcessing] = (0, import_react12.useState)(false);
2203
2230
  const walletSelectorContextValue = (0, import_react12.useMemo)(() => {
2204
2231
  const simpleFn = {};
@@ -2242,9 +2269,16 @@ function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2242
2269
  connectors: [new UnisatConnector()],
2243
2270
  children: [
2244
2271
  children,
2245
- isProcessing && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComfirmBox, { hash: "", status: 0, onClose: () => {
2246
- setIsProcessing(false);
2247
- } }),
2272
+ isProcessing && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2273
+ ComfirmBox,
2274
+ {
2275
+ hash: "",
2276
+ status: 0,
2277
+ onClose: () => {
2278
+ setIsProcessing(false);
2279
+ }
2280
+ }
2281
+ ),
2248
2282
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(InitContextHook, {})
2249
2283
  ]
2250
2284
  }
@@ -2252,7 +2286,7 @@ function BtcWalletSelectorContextProvider({ children, autoConnect = false }) {
2252
2286
  }
2253
2287
  function useBtcWalletSelector() {
2254
2288
  const { openConnectModal, openConnectModalAsync, disconnect, requestDirectAccount } = useConnectModal();
2255
- const { accounts, sendBitcoin, getPublicKey, provider, signMessage, connector } = useBTCProvider();
2289
+ const { accounts, sendBitcoin: sendBitcoin2, getPublicKey, provider, signMessage, connector } = useBTCProvider();
2256
2290
  const publicKey = (0, import_react12.useRef)(null);
2257
2291
  const signMessageFn = (0, import_react12.useRef)(null);
2258
2292
  const connectorRef = (0, import_react12.useRef)(null);
@@ -2344,7 +2378,8 @@ function useBtcWalletSelector() {
2344
2378
  }
2345
2379
  const { total } = yield providerRef.current.getBalance();
2346
2380
  return total;
2347
- })
2381
+ }),
2382
+ sendBitcoin: sendBitcoin2
2348
2383
  };
2349
2384
  }
2350
2385
  function sleep(time) {
@@ -2369,6 +2404,7 @@ var walletUrlConfig = {
2369
2404
  mainnet: "https://wallet.satoshibridge.top"
2370
2405
  };
2371
2406
  function setupWalletButton(network, wallet, originalWallet) {
2407
+ console.log("setupWalletButton");
2372
2408
  if (document.getElementById("satoshi-wallet-button")) {
2373
2409
  return;
2374
2410
  }
@@ -2456,20 +2492,24 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2456
2492
  const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
2457
2493
  const originalAccountId = originalWallet.account;
2458
2494
  const originalPublicKey = yield originalWallet.getPublicKey();
2495
+ console.log({ accountId, originalAccountId, originalPublicKey });
2459
2496
  const iframeSrc = new URL(iframe.src);
2460
2497
  iframeSrc.searchParams.set("origin", window.location.origin);
2461
2498
  accountId && iframeSrc.searchParams.set("accountId", accountId);
2462
2499
  originalAccountId && iframeSrc.searchParams.set("originalAccountId", originalAccountId);
2463
2500
  originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
2464
2501
  iframe.src = iframeSrc.toString();
2502
+ console.log("iframe src", iframe.src);
2465
2503
  window.addEventListener("message", (event) => __async(this, null, function* () {
2466
2504
  var _a2, _b;
2467
2505
  if (event.origin !== iframeSrc.origin)
2468
2506
  return;
2469
2507
  const { action, requestId, data } = event.data;
2470
2508
  if (action === "signAndSendTransaction") {
2509
+ console.log("signAndSendTransaction message", event.data);
2471
2510
  try {
2472
2511
  const result = yield wallet.signAndSendTransaction(data);
2512
+ console.log("signAndSendTransaction result", result);
2473
2513
  (_a2 = event.source) == null ? void 0 : _a2.postMessage(
2474
2514
  {
2475
2515
  requestId,
@@ -2479,6 +2519,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2479
2519
  { targetOrigin: event.origin }
2480
2520
  );
2481
2521
  } catch (error) {
2522
+ console.error("signAndSendTransaction error", error);
2482
2523
  (_b = event.source) == null ? void 0 : _b.postMessage(
2483
2524
  {
2484
2525
  requestId,
@@ -2499,25 +2540,117 @@ function removeWalletButton() {
2499
2540
  iframe == null ? void 0 : iframe.remove();
2500
2541
  }
2501
2542
 
2502
- // src/utils/setupBTCWallet.ts
2503
- var { transfer, functionCall } = import_transactions.actionCreators;
2504
- var config = {
2543
+ // src/config.ts
2544
+ var walletConfig = {
2505
2545
  dev: {
2506
- base_url: "https://api.dev.satoshibridge.top/v1",
2546
+ base_url: "https://api.dev.satoshibridge.top",
2507
2547
  token: "nbtc1-nsp.testnet",
2508
- contractId: "dev1-nsp.testnet"
2548
+ contractId: "dev1-nsp.testnet",
2549
+ walletUrl: "https://wallet-dev.satoshibridge.top"
2509
2550
  },
2510
2551
  testnet: {
2511
- base_url: "https://api.testnet.satoshibridge.top/v1",
2552
+ base_url: "https://api.testnet.satoshibridge.top",
2512
2553
  token: "nbtc2-nsp.testnet",
2513
- contractId: "dev2-nsp.testnet"
2554
+ contractId: "dev2-nsp.testnet",
2555
+ walletUrl: "https://wallet-test.satoshibridge.top"
2514
2556
  },
2515
2557
  mainnet: {
2516
- base_url: "https://api.mainnet.satoshibridge.top/v1",
2558
+ base_url: "https://api.mainnet.satoshibridge.top",
2517
2559
  token: "",
2518
- contractId: ""
2560
+ contractId: "",
2561
+ walletUrl: "https://wallet.satoshibridge.top"
2519
2562
  }
2520
2563
  };
2564
+ var nearRpcUrls = {
2565
+ mainnet: [
2566
+ "https://near.lava.build",
2567
+ "https://rpc.mainnet.near.org",
2568
+ "https://free.rpc.fastnear.com",
2569
+ "https://near.drpc.org"
2570
+ ],
2571
+ testnet: [
2572
+ "https://near-testnet.lava.build",
2573
+ "https://rpc.testnet.near.org",
2574
+ "https://near-testnet.drpc.org"
2575
+ ]
2576
+ };
2577
+ var btcRpcUrls = {
2578
+ mainnet: "https://blockstream.info/api",
2579
+ testnet: "https://blockstream.info/testnet/api"
2580
+ };
2581
+
2582
+ // src/utils/request.ts
2583
+ var cache = /* @__PURE__ */ new Map();
2584
+ var defaultCacheTimeout = 3e3;
2585
+ function request(url, options) {
2586
+ return __async(this, null, function* () {
2587
+ var _a;
2588
+ const defaultHeaders = {
2589
+ "Content-Type": "application/json"
2590
+ };
2591
+ const cacheTimeout = (options == null ? void 0 : options.cacheTimeout) || defaultCacheTimeout;
2592
+ const headers = __spreadValues(__spreadValues({}, defaultHeaders), options == null ? void 0 : options.headers);
2593
+ let body = options == null ? void 0 : options.body;
2594
+ if (headers["Content-Type"] === "application/json" && body && typeof body !== "string") {
2595
+ body = JSON.stringify(body);
2596
+ }
2597
+ const method = (options == null ? void 0 : options.method) || "GET";
2598
+ const cacheKey = method.toUpperCase() === "GET" ? url : null;
2599
+ if (cacheKey) {
2600
+ const cached = cache.get(cacheKey);
2601
+ const isCacheValid = cached && Date.now() - cached.timestamp < cacheTimeout;
2602
+ if (isCacheValid) {
2603
+ return Promise.resolve(cached.data);
2604
+ }
2605
+ }
2606
+ const newOptions = __spreadProps(__spreadValues({}, options), {
2607
+ headers,
2608
+ body,
2609
+ method
2610
+ });
2611
+ const retryCount = (_a = options == null ? void 0 : options.retryCount) != null ? _a : 1;
2612
+ const controller = new AbortController();
2613
+ const timeout = (options == null ? void 0 : options.timeout) || 2e4;
2614
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
2615
+ try {
2616
+ const res = yield fetch(url, __spreadProps(__spreadValues({}, newOptions), { signal: controller.signal })).finally(
2617
+ () => clearTimeout(timeoutId)
2618
+ );
2619
+ if (!res.ok)
2620
+ throw new Error(res.statusText);
2621
+ const data = yield res.json();
2622
+ if (cacheKey) {
2623
+ cache.set(cacheKey, { timestamp: Date.now(), data });
2624
+ setTimeout(() => {
2625
+ cache.delete(cacheKey);
2626
+ }, cacheTimeout);
2627
+ }
2628
+ if ((options == null ? void 0 : options.shouldStopPolling) && options.shouldStopPolling(data)) {
2629
+ return data;
2630
+ }
2631
+ return data;
2632
+ } catch (err) {
2633
+ console.error(err);
2634
+ if (retryCount > 0) {
2635
+ console.log(`Retrying... attempts left: ${retryCount}`);
2636
+ return request(url, __spreadProps(__spreadValues({}, options), { retryCount: retryCount - 1 }));
2637
+ } else if ((options == null ? void 0 : options.pollingInterval) && (options == null ? void 0 : options.maxPollingAttempts)) {
2638
+ if (options.maxPollingAttempts > 0) {
2639
+ console.log(`Polling... attempts left: ${options.maxPollingAttempts}`);
2640
+ yield new Promise((resolve) => setTimeout(resolve, options.pollingInterval));
2641
+ return request(url, __spreadProps(__spreadValues({}, options), {
2642
+ maxPollingAttempts: options.maxPollingAttempts - 1,
2643
+ retryCount
2644
+ }));
2645
+ }
2646
+ }
2647
+ return Promise.reject(err);
2648
+ }
2649
+ });
2650
+ }
2651
+
2652
+ // src/utils/setupBTCWallet.ts
2653
+ var { transfer, functionCall } = import_transactions.actionCreators;
2521
2654
  var state = {
2522
2655
  saveAccount(account) {
2523
2656
  window.localStorage.setItem("btc-wallet-account", account);
@@ -2575,12 +2708,13 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2575
2708
  signAndSendTransaction,
2576
2709
  signAndSendTransactions
2577
2710
  };
2578
- const currentConfig = "isDev" in metadata && metadata.isDev ? config.dev : config[options.network.networkId];
2711
+ const currentConfig = "isDev" in metadata && metadata.isDev ? walletConfig.dev : walletConfig[options.network.networkId];
2579
2712
  const walletNetwork = "isDev" in metadata && metadata.isDev ? "dev" : options.network.networkId;
2580
2713
  initWalletButton(walletNetwork, wallet);
2581
2714
  if (!inter) {
2582
2715
  inter = setInterval(() => __async(void 0, null, function* () {
2583
2716
  const btcContext = window.btcContext;
2717
+ console.log("inter btcContext:", btcContext);
2584
2718
  if (btcContext) {
2585
2719
  clearInterval(inter);
2586
2720
  const context = btcContext.getContext();
@@ -2602,10 +2736,12 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2602
2736
  });
2603
2737
  }));
2604
2738
  context.on("btcLogOut", (e) => __async(void 0, null, function* () {
2739
+ console.log(3333);
2605
2740
  emitter.emit("accountsChanged", {
2606
2741
  accounts: []
2607
2742
  });
2608
2743
  }));
2744
+ console.log("metadata.autoConnect:", metadata);
2609
2745
  if ("autoConnect" in metadata && metadata.autoConnect && localStorage.getItem("near-wallet-selector:selectedWalletId") === '"btc-wallet"') {
2610
2746
  yield btcContext.autoConnect();
2611
2747
  }
@@ -2754,6 +2890,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2754
2890
  txBytes,
2755
2891
  (byte) => ("0" + (byte & 255).toString(16)).slice(-2)
2756
2892
  ).join("");
2893
+ console.log("txHex:", txHex);
2757
2894
  const hash = import_bs58.default.encode(new Uint8Array(import_js_sha256.sha256.array(txBytes)));
2758
2895
  return { txBytes, txHex, hash };
2759
2896
  });
@@ -2767,10 +2904,10 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2767
2904
  chain_id: "397",
2768
2905
  csna: accountId,
2769
2906
  near_transactions: newTransactions.map((t) => t.txHex),
2770
- nonce,
2771
2907
  gas_token: currentConfig.token,
2772
2908
  gas_limit: "3000",
2773
- use_near_pay_gas: false
2909
+ use_near_pay_gas: false,
2910
+ nonce
2774
2911
  };
2775
2912
  const nearAccount = yield provider.query({
2776
2913
  request_type: "view_account",
@@ -2788,8 +2925,10 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2788
2925
  btcPubKey: state.getBtcPublicKey(),
2789
2926
  data: toHex(strIntention)
2790
2927
  });
2928
+ console.log("result:", result);
2791
2929
  if (result.result_code === 0) {
2792
2930
  const hash = newTransactions.map((t) => t.hash);
2931
+ console.log("txHash:", hash);
2793
2932
  const result2 = yield pollTransactionStatuses(options.network.networkId, hash);
2794
2933
  return result2;
2795
2934
  } else {
@@ -2802,6 +2941,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2802
2941
  const checkAndSetupWalletButton = () => {
2803
2942
  const accountId = state.getAccount();
2804
2943
  const btcContext = window.btcContext;
2944
+ console.log("checkAndSetupWalletButton:", accountId, btcContext.account);
2805
2945
  if (accountId && btcContext.account) {
2806
2946
  setupWalletButton(network, wallet2, btcContext);
2807
2947
  } else {
@@ -2818,29 +2958,16 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2818
2958
  return wallet;
2819
2959
  });
2820
2960
  function getNonceFromApi(url, accountId) {
2821
- return fetch(`${url}/nonce?csna=${accountId}`, {
2822
- method: "GET",
2823
- headers: {
2824
- "Content-Type": "application/json"
2825
- }
2826
- }).then((res) => res.json());
2961
+ return request(`${url}/v1/nonce?csna=${accountId}`);
2827
2962
  }
2828
2963
  function getNearNonceFromApi(url, accountId) {
2829
- return fetch(`${url}/nonceNear?csna=${accountId}`, {
2830
- method: "GET",
2831
- headers: {
2832
- "Content-Type": "application/json"
2833
- }
2834
- }).then((res) => res.json());
2964
+ return request(`${url}/v1/nonceNear?csna=${accountId}`);
2835
2965
  }
2836
2966
  function uploadBTCTx(url, data) {
2837
- return fetch(`${url}/receiveTransaction`, {
2967
+ return request(`${url}/v1/receiveTransaction`, {
2838
2968
  method: "POST",
2839
- headers: {
2840
- "Content-Type": "application/json"
2841
- },
2842
- body: JSON.stringify(data)
2843
- }).then((res) => res.json());
2969
+ body: data
2970
+ });
2844
2971
  }
2845
2972
  function setupBTCWallet({
2846
2973
  iconUrl = "https://assets.deltatrade.ai/assets/chain/btc.svg",
@@ -2877,23 +3004,10 @@ function toHex(originalString) {
2877
3004
  hexString = hexString.replace(/(^0+)/g, "");
2878
3005
  return hexString;
2879
3006
  }
2880
- var rcpUrls = {
2881
- mainnet: [
2882
- "https://near.lava.build",
2883
- "https://rpc.mainnet.near.org",
2884
- "https://free.rpc.fastnear.com",
2885
- "https://near.drpc.org"
2886
- ],
2887
- testnet: [
2888
- "https://near-testnet.lava.build",
2889
- "https://rpc.testnet.near.org",
2890
- "https://near-testnet.drpc.org"
2891
- ]
2892
- };
2893
3007
  function pollTransactionStatuses(network, hashes) {
2894
3008
  return __async(this, null, function* () {
2895
3009
  const provider = new import_near_api_js.providers.FailoverRpcProvider(
2896
- Object.values(rcpUrls[network]).map(
3010
+ Object.values(nearRpcUrls[network]).map(
2897
3011
  (url) => new import_near_api_js.providers.JsonRpcProvider({ url })
2898
3012
  )
2899
3013
  );
@@ -2905,14 +3019,17 @@ function pollTransactionStatuses(network, hashes) {
2905
3019
  try {
2906
3020
  const result = yield provider.txStatus(hash, "unused", "FINAL");
2907
3021
  if (result && result.status) {
3022
+ console.log(`Transaction ${hash} result:`, result);
2908
3023
  return result;
2909
3024
  }
2910
3025
  } catch (error) {
3026
+ console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
2911
3027
  }
2912
3028
  if (attempt === maxAttempts) {
2913
3029
  throw new Error(`Transaction not found after max attempts: ${hash}`);
2914
3030
  }
2915
3031
  yield delay(1e4);
3032
+ console.log(`RPC request failed for ${hash}, retrying ${maxAttempts - attempt} more times`);
2916
3033
  }
2917
3034
  });
2918
3035
  const results = yield Promise.all(hashes.map((hash) => pollStatus(hash)));
@@ -2920,9 +3037,108 @@ function pollTransactionStatuses(network, hashes) {
2920
3037
  });
2921
3038
  }
2922
3039
 
3040
+ // src/utils/bridgeSupplyUtils.ts
3041
+ var import_near_api_js2 = require("near-api-js");
3042
+ var import_big = __toESM(require("big.js"), 1);
3043
+ function nearViewMethod(contractId, methodName, args, network) {
3044
+ return __async(this, null, function* () {
3045
+ const nearProvider = new import_near_api_js2.providers.FailoverRpcProvider(
3046
+ nearRpcUrls[network].map(
3047
+ (url) => new import_near_api_js2.providers.JsonRpcProvider({ url })
3048
+ )
3049
+ );
3050
+ const res = yield nearProvider.query({
3051
+ request_type: "call_function",
3052
+ account_id: contractId,
3053
+ method_name: methodName,
3054
+ args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
3055
+ finality: "optimistic"
3056
+ });
3057
+ return JSON.parse(Buffer.from(res.result).toString());
3058
+ });
3059
+ }
3060
+ function getDepositAddress(btcPublicKey, contractId, network) {
3061
+ return __async(this, null, function* () {
3062
+ const res = yield nearViewMethod(
3063
+ contractId,
3064
+ "get_user_dapp_deposit_address",
3065
+ {
3066
+ deposit_type: {
3067
+ BtcPublicKey: { btc_public_key: btcPublicKey, dapp_operation: "Burrowland->Supply" }
3068
+ }
3069
+ },
3070
+ network
3071
+ );
3072
+ return res;
3073
+ });
3074
+ }
3075
+ function getGasPrice(btcRpcUrl) {
3076
+ return __async(this, null, function* () {
3077
+ const defaultFeeRate = 100;
3078
+ try {
3079
+ const res = yield request(`${btcRpcUrl}/fee-estimates`);
3080
+ const feeRate = res[6];
3081
+ return feeRate || defaultFeeRate;
3082
+ } catch (error) {
3083
+ return defaultFeeRate;
3084
+ }
3085
+ });
3086
+ }
3087
+ function sendBitcoin(btcProvider, address, amount, feeRate) {
3088
+ return __async(this, null, function* () {
3089
+ const satoshis = new import_big.default(amount).mul(__pow(10, 8)).toNumber();
3090
+ const txHash = yield btcProvider.sendBitcoin(address, satoshis, { feeRate });
3091
+ return txHash;
3092
+ });
3093
+ }
3094
+ function receiveDepositMsg(_0, _1) {
3095
+ return __async(this, arguments, function* (baseUrl, {
3096
+ btcPublicKey,
3097
+ txHash,
3098
+ depositType = 1
3099
+ }) {
3100
+ const res = yield request(`${baseUrl}/v1/receiveDepositMsg`, {
3101
+ method: "POST",
3102
+ body: { btcPublicKey, txHash, depositType }
3103
+ });
3104
+ return res;
3105
+ });
3106
+ }
3107
+ function checkTransactionStatus(baseUrl, txHash) {
3108
+ return __async(this, null, function* () {
3109
+ const res = yield request(`${baseUrl}/v1/bridgeFromTx?fromTxHash=${txHash}`);
3110
+ return res;
3111
+ });
3112
+ }
3113
+ function executeBurrowSupply(amount, environment) {
3114
+ return __async(this, null, function* () {
3115
+ try {
3116
+ if (typeof window === "undefined" || !window.btcContext) {
3117
+ throw new Error("BTC Provider is not initialized.");
3118
+ }
3119
+ const btcProvider = window.btcContext;
3120
+ const network = environment === "dev" ? "testnet" : environment;
3121
+ const config = walletConfig[environment];
3122
+ const btcRpcUrl = btcRpcUrls[network];
3123
+ const btcPublicKey = yield btcProvider.getPublicKey();
3124
+ if (!btcPublicKey) {
3125
+ throw new Error("BTC Public Key is not available.");
3126
+ }
3127
+ const address = yield getDepositAddress(btcPublicKey, config.contractId, network);
3128
+ const feeRate = yield getGasPrice(btcRpcUrl);
3129
+ const txHash = yield sendBitcoin(btcProvider, address, amount, feeRate);
3130
+ yield receiveDepositMsg(config.base_url, { btcPublicKey, txHash });
3131
+ const status = yield checkTransactionStatus(config.base_url, txHash);
3132
+ console.log("Transaction Status:", status);
3133
+ } catch (error) {
3134
+ console.error("Error executing Bridge+BurrowSupply:", error);
3135
+ }
3136
+ });
3137
+ }
3138
+
2923
3139
  // src/index.ts
2924
3140
  var getVersion = () => {
2925
- return "0.2.4";
3141
+ return "0.2.6";
2926
3142
  };
2927
3143
  if (typeof window !== "undefined") {
2928
3144
  window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();