btc-wallet 0.3.11 → 0.3.12
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/dist/core/btcUtils.d.ts +1 -7
- package/dist/index.js +576 -323
- package/dist/index.js.map +4 -4
- package/dist/utils/Dialog.d.ts +13 -0
- package/dist/utils/request.d.ts +1 -1
- package/dist/utils/satoshi.d.ts +18 -0
- package/esm/index.js +574 -321
- package/esm/index.js.map +4 -4
- package/package.json +1 -1
    
        package/esm/index.js
    CHANGED
    
    | @@ -2722,6 +2722,73 @@ var btcRpcUrls = { | |
| 2722 2722 | 
             
              testnet: "https://mempool.space/testnet/api"
         | 
| 2723 2723 | 
             
            };
         | 
| 2724 2724 |  | 
| 2725 | 
            +
            // src/utils/nearUtils.ts
         | 
| 2726 | 
            +
            import { providers } from "near-api-js";
         | 
| 2727 | 
            +
            function nearCallFunction(contractId, methodName, args, options) {
         | 
| 2728 | 
            +
              return __async(this, null, function* () {
         | 
| 2729 | 
            +
                const nearProvider = (options == null ? void 0 : options.provider) || new providers.FailoverRpcProvider(
         | 
| 2730 | 
            +
                  nearRpcUrls[options == null ? void 0 : options.network].map(
         | 
| 2731 | 
            +
                    (url) => new providers.JsonRpcProvider({ url })
         | 
| 2732 | 
            +
                  )
         | 
| 2733 | 
            +
                );
         | 
| 2734 | 
            +
                const res = yield nearProvider.query({
         | 
| 2735 | 
            +
                  request_type: "call_function",
         | 
| 2736 | 
            +
                  account_id: contractId,
         | 
| 2737 | 
            +
                  method_name: methodName,
         | 
| 2738 | 
            +
                  args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
         | 
| 2739 | 
            +
                  finality: "final"
         | 
| 2740 | 
            +
                });
         | 
| 2741 | 
            +
                return JSON.parse(Buffer.from(res.result).toString());
         | 
| 2742 | 
            +
              });
         | 
| 2743 | 
            +
            }
         | 
| 2744 | 
            +
            function pollTransactionStatuses(network, hashes) {
         | 
| 2745 | 
            +
              return __async(this, null, function* () {
         | 
| 2746 | 
            +
                const provider = new providers.FailoverRpcProvider(
         | 
| 2747 | 
            +
                  Object.values(nearRpcUrls[network]).map(
         | 
| 2748 | 
            +
                    (url) => new providers.JsonRpcProvider({ url })
         | 
| 2749 | 
            +
                  )
         | 
| 2750 | 
            +
                );
         | 
| 2751 | 
            +
                const maxAttempts = 30;
         | 
| 2752 | 
            +
                let currentAttempt = 0;
         | 
| 2753 | 
            +
                const pendingHashes = new Set(hashes);
         | 
| 2754 | 
            +
                const results = /* @__PURE__ */ new Map();
         | 
| 2755 | 
            +
                while (pendingHashes.size > 0 && currentAttempt < maxAttempts) {
         | 
| 2756 | 
            +
                  currentAttempt++;
         | 
| 2757 | 
            +
                  const promises = Array.from(pendingHashes).map((hash) => __async(this, null, function* () {
         | 
| 2758 | 
            +
                    try {
         | 
| 2759 | 
            +
                      const result = yield provider.txStatus(hash, "unused", "FINAL");
         | 
| 2760 | 
            +
                      if (result && result.status) {
         | 
| 2761 | 
            +
                        console.log(`Transaction ${hash} result:`, result);
         | 
| 2762 | 
            +
                        results.set(hash, result);
         | 
| 2763 | 
            +
                        pendingHashes.delete(hash);
         | 
| 2764 | 
            +
                      }
         | 
| 2765 | 
            +
                    } catch (error) {
         | 
| 2766 | 
            +
                      console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);
         | 
| 2767 | 
            +
                    }
         | 
| 2768 | 
            +
                  }));
         | 
| 2769 | 
            +
                  yield Promise.all(promises);
         | 
| 2770 | 
            +
                  if (pendingHashes.size > 0) {
         | 
| 2771 | 
            +
                    if (currentAttempt === maxAttempts) {
         | 
| 2772 | 
            +
                      throw new Error(
         | 
| 2773 | 
            +
                        `Transactions not found after max attempts: ${Array.from(pendingHashes).join(", ")}`
         | 
| 2774 | 
            +
                      );
         | 
| 2775 | 
            +
                    }
         | 
| 2776 | 
            +
                    console.log(
         | 
| 2777 | 
            +
                      `Waiting for ${pendingHashes.size} transactions, retrying ${maxAttempts - currentAttempt} more times`
         | 
| 2778 | 
            +
                    );
         | 
| 2779 | 
            +
                    yield delay(1e4);
         | 
| 2780 | 
            +
                  }
         | 
| 2781 | 
            +
                }
         | 
| 2782 | 
            +
                return hashes.map((hash) => results.get(hash));
         | 
| 2783 | 
            +
              });
         | 
| 2784 | 
            +
            }
         | 
| 2785 | 
            +
             | 
| 2786 | 
            +
            // src/core/setupBTCWallet.ts
         | 
| 2787 | 
            +
            import Big2 from "big.js";
         | 
| 2788 | 
            +
             | 
| 2789 | 
            +
            // src/core/btcUtils.ts
         | 
| 2790 | 
            +
            import Big from "big.js";
         | 
| 2791 | 
            +
             | 
| 2725 2792 | 
             
            // src/utils/request.ts
         | 
| 2726 2793 | 
             
            var cache = /* @__PURE__ */ new Map();
         | 
| 2727 2794 | 
             
            var defaultCacheTimeout = 3e3;
         | 
| @@ -2762,18 +2829,20 @@ function request(url, options) { | |
| 2762 2829 | 
             
                  if (!res.ok)
         | 
| 2763 2830 | 
             
                    throw new Error(res.statusText);
         | 
| 2764 2831 | 
             
                  const data = yield res.json();
         | 
| 2832 | 
            +
                  if (options == null ? void 0 : options.shouldStopPolling) {
         | 
| 2833 | 
            +
                    if (options.shouldStopPolling(data)) {
         | 
| 2834 | 
            +
                      return data;
         | 
| 2835 | 
            +
                    }
         | 
| 2836 | 
            +
                    throw new Error("Polling should continue");
         | 
| 2837 | 
            +
                  }
         | 
| 2765 2838 | 
             
                  if (cacheKey) {
         | 
| 2766 2839 | 
             
                    cache.set(cacheKey, { timestamp: Date.now(), data });
         | 
| 2767 2840 | 
             
                    setTimeout(() => {
         | 
| 2768 2841 | 
             
                      cache.delete(cacheKey);
         | 
| 2769 2842 | 
             
                    }, cacheTimeout);
         | 
| 2770 2843 | 
             
                  }
         | 
| 2771 | 
            -
                  if ((options == null ? void 0 : options.shouldStopPolling) && options.shouldStopPolling(data)) {
         | 
| 2772 | 
            -
                    return data;
         | 
| 2773 | 
            -
                  }
         | 
| 2774 2844 | 
             
                  return data;
         | 
| 2775 2845 | 
             
                } catch (err) {
         | 
| 2776 | 
            -
                  console.error(err);
         | 
| 2777 2846 | 
             
                  if (retryCount > 0) {
         | 
| 2778 2847 | 
             
                    console.log(`Retrying... attempts left: ${retryCount}`);
         | 
| 2779 2848 | 
             
                    return request(url, __spreadProps(__spreadValues({}, options), { retryCount: retryCount - 1 }));
         | 
| @@ -2787,74 +2856,471 @@ function request(url, options) { | |
| 2787 2856 | 
             
                      }));
         | 
| 2788 2857 | 
             
                    }
         | 
| 2789 2858 | 
             
                  }
         | 
| 2790 | 
            -
                   | 
| 2859 | 
            +
                  throw err;
         | 
| 2791 2860 | 
             
                }
         | 
| 2792 2861 | 
             
              });
         | 
| 2793 2862 | 
             
            }
         | 
| 2794 2863 |  | 
| 2795 | 
            -
            // src/utils/ | 
| 2796 | 
            -
             | 
| 2797 | 
            -
            function nearCallFunction(contractId, methodName, args, options) {
         | 
| 2864 | 
            +
            // src/utils/satoshi.ts
         | 
| 2865 | 
            +
            function getNonce(url, accountId) {
         | 
| 2798 2866 | 
             
              return __async(this, null, function* () {
         | 
| 2799 | 
            -
                const  | 
| 2800 | 
            -
                   | 
| 2801 | 
            -
                    (url) => new providers.JsonRpcProvider({ url })
         | 
| 2802 | 
            -
                  )
         | 
| 2867 | 
            +
                const { result_code, result_message, result_data } = yield request(
         | 
| 2868 | 
            +
                  `${url}/v1/nonce?csna=${accountId}`
         | 
| 2803 2869 | 
             
                );
         | 
| 2804 | 
            -
                 | 
| 2805 | 
            -
                   | 
| 2806 | 
            -
             | 
| 2807 | 
            -
             | 
| 2808 | 
            -
             | 
| 2809 | 
            -
             | 
| 2870 | 
            +
                if (result_code !== 0) {
         | 
| 2871 | 
            +
                  throw new Error(result_message);
         | 
| 2872 | 
            +
                }
         | 
| 2873 | 
            +
                return result_data;
         | 
| 2874 | 
            +
              });
         | 
| 2875 | 
            +
            }
         | 
| 2876 | 
            +
            function getNearNonce(url, accountId) {
         | 
| 2877 | 
            +
              return __async(this, null, function* () {
         | 
| 2878 | 
            +
                const { result_code, result_message, result_data } = yield request(
         | 
| 2879 | 
            +
                  `${url}/v1/nonceNear?csna=${accountId}`
         | 
| 2880 | 
            +
                );
         | 
| 2881 | 
            +
                if (result_code !== 0) {
         | 
| 2882 | 
            +
                  throw new Error(result_message);
         | 
| 2883 | 
            +
                }
         | 
| 2884 | 
            +
                return result_data;
         | 
| 2885 | 
            +
              });
         | 
| 2886 | 
            +
            }
         | 
| 2887 | 
            +
            function receiveTransaction(url, data) {
         | 
| 2888 | 
            +
              return __async(this, null, function* () {
         | 
| 2889 | 
            +
                const { result_code, result_message, result_data } = yield request(
         | 
| 2890 | 
            +
                  `${url}/v1/receiveTransaction`,
         | 
| 2891 | 
            +
                  {
         | 
| 2892 | 
            +
                    method: "POST",
         | 
| 2893 | 
            +
                    body: data
         | 
| 2894 | 
            +
                  }
         | 
| 2895 | 
            +
                );
         | 
| 2896 | 
            +
                if (result_code !== 0) {
         | 
| 2897 | 
            +
                  throw new Error(result_message);
         | 
| 2898 | 
            +
                }
         | 
| 2899 | 
            +
                return result_data;
         | 
| 2900 | 
            +
              });
         | 
| 2901 | 
            +
            }
         | 
| 2902 | 
            +
            function receiveDepositMsg(_0, _1) {
         | 
| 2903 | 
            +
              return __async(this, arguments, function* (url, {
         | 
| 2904 | 
            +
                btcPublicKey,
         | 
| 2905 | 
            +
                txHash,
         | 
| 2906 | 
            +
                depositType = 1,
         | 
| 2907 | 
            +
                postActions,
         | 
| 2908 | 
            +
                extraMsg
         | 
| 2909 | 
            +
              }) {
         | 
| 2910 | 
            +
                const { result_code, result_message, result_data } = yield request(
         | 
| 2911 | 
            +
                  `${url}/v1/receiveDepositMsg`,
         | 
| 2912 | 
            +
                  {
         | 
| 2913 | 
            +
                    method: "POST",
         | 
| 2914 | 
            +
                    body: { btcPublicKey, txHash, depositType, postActions, extraMsg }
         | 
| 2915 | 
            +
                  }
         | 
| 2916 | 
            +
                );
         | 
| 2917 | 
            +
                console.log("receiveDepositMsg resp:", { result_code, result_message, result_data });
         | 
| 2918 | 
            +
                if (result_code !== 0) {
         | 
| 2919 | 
            +
                  throw new Error(result_message);
         | 
| 2920 | 
            +
                }
         | 
| 2921 | 
            +
                return result_data;
         | 
| 2922 | 
            +
              });
         | 
| 2923 | 
            +
            }
         | 
| 2924 | 
            +
            function checkBridgeTransactionStatus(url, txHash) {
         | 
| 2925 | 
            +
              return __async(this, null, function* () {
         | 
| 2926 | 
            +
                const { result_code, result_message, result_data } = yield request(`${url}/v1/bridgeFromTx?fromTxHash=${txHash}&fromChainId=1`, {
         | 
| 2927 | 
            +
                  timeout: 3e5,
         | 
| 2928 | 
            +
                  pollingInterval: 5e3,
         | 
| 2929 | 
            +
                  maxPollingAttempts: 30,
         | 
| 2930 | 
            +
                  shouldStopPolling: (res) => {
         | 
| 2931 | 
            +
                    var _a;
         | 
| 2932 | 
            +
                    return res.result_code === 0 && [4, 102].includes(((_a = res.result_data) == null ? void 0 : _a.status) || 0);
         | 
| 2933 | 
            +
                  }
         | 
| 2810 2934 | 
             
                });
         | 
| 2811 | 
            -
                 | 
| 2935 | 
            +
                console.log("checkTransactionStatus resp:", { result_code, result_message, result_data });
         | 
| 2936 | 
            +
                if ((result_data == null ? void 0 : result_data.status) !== 4) {
         | 
| 2937 | 
            +
                  throw new Error(result_message);
         | 
| 2938 | 
            +
                }
         | 
| 2939 | 
            +
                return result_data;
         | 
| 2812 2940 | 
             
              });
         | 
| 2813 2941 | 
             
            }
         | 
| 2814 | 
            -
            function  | 
| 2942 | 
            +
            function checkBtcTransactionStatus(url, sig) {
         | 
| 2815 2943 | 
             
              return __async(this, null, function* () {
         | 
| 2816 | 
            -
                const  | 
| 2817 | 
            -
                   | 
| 2818 | 
            -
             | 
| 2819 | 
            -
                   | 
| 2944 | 
            +
                const { result_code, result_message, result_data } = yield request(`${url}/v1/btcTx?sig=${sig}`, {
         | 
| 2945 | 
            +
                  timeout: 3e5,
         | 
| 2946 | 
            +
                  pollingInterval: 5e3,
         | 
| 2947 | 
            +
                  maxPollingAttempts: 30,
         | 
| 2948 | 
            +
                  shouldStopPolling: (res) => {
         | 
| 2949 | 
            +
                    var _a;
         | 
| 2950 | 
            +
                    return res.result_code === 0 && [3, 101, 102].includes(((_a = res.result_data) == null ? void 0 : _a.status) || 0);
         | 
| 2951 | 
            +
                  }
         | 
| 2952 | 
            +
                });
         | 
| 2953 | 
            +
                console.log("checkBtcTransactionStatus resp:", { result_code, result_message, result_data });
         | 
| 2954 | 
            +
                if ((result_data == null ? void 0 : result_data.status) !== 3) {
         | 
| 2955 | 
            +
                  throw new Error(result_message);
         | 
| 2956 | 
            +
                }
         | 
| 2957 | 
            +
                return result_data;
         | 
| 2958 | 
            +
              });
         | 
| 2959 | 
            +
            }
         | 
| 2960 | 
            +
             | 
| 2961 | 
            +
            // src/core/btcUtils.ts
         | 
| 2962 | 
            +
            function getBtcProvider() {
         | 
| 2963 | 
            +
              if (typeof window === "undefined" || !window.btcContext) {
         | 
| 2964 | 
            +
                throw new Error("BTC Provider is not initialized.");
         | 
| 2965 | 
            +
              }
         | 
| 2966 | 
            +
              return window.btcContext;
         | 
| 2967 | 
            +
            }
         | 
| 2968 | 
            +
            function getNetwork() {
         | 
| 2969 | 
            +
              return __async(this, null, function* () {
         | 
| 2970 | 
            +
                const network = yield getBtcProvider().getNetwork();
         | 
| 2971 | 
            +
                console.log("btc network:", network);
         | 
| 2972 | 
            +
                return network === "livenet" ? "mainnet" : "testnet";
         | 
| 2973 | 
            +
              });
         | 
| 2974 | 
            +
            }
         | 
| 2975 | 
            +
            function getBtcRpcUrl() {
         | 
| 2976 | 
            +
              return __async(this, null, function* () {
         | 
| 2977 | 
            +
                const network = yield getNetwork();
         | 
| 2978 | 
            +
                return btcRpcUrls[network];
         | 
| 2979 | 
            +
              });
         | 
| 2980 | 
            +
            }
         | 
| 2981 | 
            +
            function getConfig(isDev) {
         | 
| 2982 | 
            +
              return __async(this, null, function* () {
         | 
| 2983 | 
            +
                const network = yield getNetwork();
         | 
| 2984 | 
            +
                return walletConfig[isDev ? "dev" : network];
         | 
| 2985 | 
            +
              });
         | 
| 2986 | 
            +
            }
         | 
| 2987 | 
            +
            function nearCall(contractId, methodName, args) {
         | 
| 2988 | 
            +
              return __async(this, null, function* () {
         | 
| 2989 | 
            +
                const network = yield getNetwork();
         | 
| 2990 | 
            +
                return nearCallFunction(contractId, methodName, args, { network });
         | 
| 2991 | 
            +
              });
         | 
| 2992 | 
            +
            }
         | 
| 2993 | 
            +
            function getBtcGasPrice() {
         | 
| 2994 | 
            +
              return __async(this, null, function* () {
         | 
| 2995 | 
            +
                const defaultFeeRate = 100;
         | 
| 2996 | 
            +
                try {
         | 
| 2997 | 
            +
                  const btcRpcUrl = yield getBtcRpcUrl();
         | 
| 2998 | 
            +
                  const res = yield fetch(`${btcRpcUrl}/v1/fees/recommended`).then((res2) => res2.json());
         | 
| 2999 | 
            +
                  const feeRate = res.fastestFee;
         | 
| 3000 | 
            +
                  return feeRate || defaultFeeRate;
         | 
| 3001 | 
            +
                } catch (error) {
         | 
| 3002 | 
            +
                  return defaultFeeRate;
         | 
| 3003 | 
            +
                }
         | 
| 3004 | 
            +
              });
         | 
| 3005 | 
            +
            }
         | 
| 3006 | 
            +
            function getBtcBalance() {
         | 
| 3007 | 
            +
              return __async(this, null, function* () {
         | 
| 3008 | 
            +
                const { account } = yield retryOperation(getBtcProvider, (res) => !!res.account);
         | 
| 3009 | 
            +
                if (!account) {
         | 
| 3010 | 
            +
                  console.error("BTC Account is not available.");
         | 
| 3011 | 
            +
                  return { rawBalance: 0, balance: 0, maxSpendableBalance: 0 };
         | 
| 3012 | 
            +
                }
         | 
| 3013 | 
            +
                const btcRpcUrl = yield getBtcRpcUrl();
         | 
| 3014 | 
            +
                const utxos = yield fetch(`${btcRpcUrl}/address/${account}/utxo`).then((res) => res.json());
         | 
| 3015 | 
            +
                const rawBalance = (utxos == null ? void 0 : utxos.reduce((acc, cur) => acc + cur.value, 0)) || 0;
         | 
| 3016 | 
            +
                const balance = rawBalance / __pow(10, 8);
         | 
| 3017 | 
            +
                const feeRate = yield getBtcGasPrice();
         | 
| 3018 | 
            +
                const inputSize = ((utxos == null ? void 0 : utxos.length) || 0) * 66;
         | 
| 3019 | 
            +
                const outputSize = 34;
         | 
| 3020 | 
            +
                const overheadSize = 10;
         | 
| 3021 | 
            +
                const estimatedTxSize = inputSize + outputSize + overheadSize;
         | 
| 3022 | 
            +
                const estimatedFee = estimatedTxSize * feeRate / __pow(10, 8);
         | 
| 3023 | 
            +
                console.log("estimated fee:", estimatedFee);
         | 
| 3024 | 
            +
                const availableBalance = Math.max(0, balance - estimatedFee);
         | 
| 3025 | 
            +
                return {
         | 
| 3026 | 
            +
                  rawBalance,
         | 
| 3027 | 
            +
                  balance,
         | 
| 3028 | 
            +
                  availableBalance
         | 
| 3029 | 
            +
                };
         | 
| 3030 | 
            +
              });
         | 
| 3031 | 
            +
            }
         | 
| 3032 | 
            +
            function sendBitcoin(address, amount, feeRate) {
         | 
| 3033 | 
            +
              return __async(this, null, function* () {
         | 
| 3034 | 
            +
                const { sendBitcoin: sendBitcoin2 } = getBtcProvider();
         | 
| 3035 | 
            +
                const txHash = yield sendBitcoin2(address, amount, { feeRate });
         | 
| 3036 | 
            +
                return txHash;
         | 
| 3037 | 
            +
              });
         | 
| 3038 | 
            +
            }
         | 
| 3039 | 
            +
            function estimateDepositAmount(amount, option) {
         | 
| 3040 | 
            +
              return __async(this, null, function* () {
         | 
| 3041 | 
            +
                const config = yield getConfig((option == null ? void 0 : option.isDev) || false);
         | 
| 3042 | 
            +
                const {
         | 
| 3043 | 
            +
                  deposit_bridge_fee: { fee_min, fee_rate }
         | 
| 3044 | 
            +
                } = yield nearCall(
         | 
| 3045 | 
            +
                  config.bridgeContractId,
         | 
| 3046 | 
            +
                  "get_config",
         | 
| 3047 | 
            +
                  {}
         | 
| 2820 3048 | 
             
                );
         | 
| 2821 | 
            -
                const  | 
| 2822 | 
            -
                 | 
| 2823 | 
            -
             | 
| 2824 | 
            -
             | 
| 2825 | 
            -
             | 
| 2826 | 
            -
             | 
| 2827 | 
            -
             | 
| 2828 | 
            -
             | 
| 2829 | 
            -
             | 
| 2830 | 
            -
             | 
| 2831 | 
            -
             | 
| 2832 | 
            -
             | 
| 2833 | 
            -
             | 
| 2834 | 
            -
             | 
| 2835 | 
            -
             | 
| 2836 | 
            -
             | 
| 2837 | 
            -
             | 
| 2838 | 
            -
                   | 
| 2839 | 
            -
             | 
| 2840 | 
            -
                   | 
| 2841 | 
            -
             | 
| 2842 | 
            -
             | 
| 2843 | 
            -
             | 
| 2844 | 
            -
             | 
| 3049 | 
            +
                const fee = Math.max(Number(fee_min), Number(amount) * fee_rate);
         | 
| 3050 | 
            +
                return new Big(amount).minus(fee).toFixed(0);
         | 
| 3051 | 
            +
              });
         | 
| 3052 | 
            +
            }
         | 
| 3053 | 
            +
            function executeBTCDepositAndAction(_0) {
         | 
| 3054 | 
            +
              return __async(this, arguments, function* ({
         | 
| 3055 | 
            +
                action,
         | 
| 3056 | 
            +
                feeRate,
         | 
| 3057 | 
            +
                isDev = false
         | 
| 3058 | 
            +
              }) {
         | 
| 3059 | 
            +
                try {
         | 
| 3060 | 
            +
                  const { getPublicKey } = getBtcProvider();
         | 
| 3061 | 
            +
                  const config = yield getConfig(isDev);
         | 
| 3062 | 
            +
                  const btcPublicKey = yield getPublicKey();
         | 
| 3063 | 
            +
                  if (!btcPublicKey) {
         | 
| 3064 | 
            +
                    throw new Error("BTC Public Key is not available.");
         | 
| 3065 | 
            +
                  }
         | 
| 3066 | 
            +
                  if (!action.receiver_id) {
         | 
| 3067 | 
            +
                    throw new Error("receiver_id is required");
         | 
| 3068 | 
            +
                  }
         | 
| 3069 | 
            +
                  if (!action.amount) {
         | 
| 3070 | 
            +
                    throw new Error("amount is required");
         | 
| 3071 | 
            +
                  }
         | 
| 3072 | 
            +
                  const csna = yield nearCall(
         | 
| 3073 | 
            +
                    config.accountContractId,
         | 
| 3074 | 
            +
                    "get_chain_signature_near_account_id",
         | 
| 3075 | 
            +
                    {
         | 
| 3076 | 
            +
                      btc_public_key: btcPublicKey
         | 
| 2845 3077 | 
             
                    }
         | 
| 2846 | 
            -
             | 
| 2847 | 
            -
             | 
| 2848 | 
            -
                     | 
| 2849 | 
            -
                     | 
| 3078 | 
            +
                  );
         | 
| 3079 | 
            +
                  const depositMsg = {
         | 
| 3080 | 
            +
                    recipient_id: csna,
         | 
| 3081 | 
            +
                    post_actions: [
         | 
| 3082 | 
            +
                      __spreadProps(__spreadValues({}, action), {
         | 
| 3083 | 
            +
                        gas: new Big(100).mul(__pow(10, 12)).toFixed(0)
         | 
| 3084 | 
            +
                      })
         | 
| 3085 | 
            +
                    ]
         | 
| 3086 | 
            +
                  };
         | 
| 3087 | 
            +
                  const storageDepositMsg = {};
         | 
| 3088 | 
            +
                  const accountInfo = yield nearCall(
         | 
| 3089 | 
            +
                    config.accountContractId,
         | 
| 3090 | 
            +
                    "get_account",
         | 
| 3091 | 
            +
                    {
         | 
| 3092 | 
            +
                      account_id: csna
         | 
| 3093 | 
            +
                    }
         | 
| 3094 | 
            +
                  );
         | 
| 3095 | 
            +
                  if (!(accountInfo == null ? void 0 : accountInfo.nonce)) {
         | 
| 3096 | 
            +
                    storageDepositMsg.btc_public_key = btcPublicKey;
         | 
| 3097 | 
            +
                  }
         | 
| 3098 | 
            +
                  const registerRes = yield nearCall(action.receiver_id, "storage_balance_of", {
         | 
| 3099 | 
            +
                    account_id: csna
         | 
| 3100 | 
            +
                  });
         | 
| 3101 | 
            +
                  if (!(registerRes == null ? void 0 : registerRes.available)) {
         | 
| 3102 | 
            +
                    storageDepositMsg.storage_deposit_msg = {
         | 
| 3103 | 
            +
                      contract_id: action.receiver_id,
         | 
| 3104 | 
            +
                      deposit: new Big(0.25).mul(__pow(10, 24)).toFixed(0),
         | 
| 3105 | 
            +
                      registration_only: true
         | 
| 3106 | 
            +
                    };
         | 
| 3107 | 
            +
                  }
         | 
| 3108 | 
            +
                  if (Object.keys(storageDepositMsg).length > 0) {
         | 
| 3109 | 
            +
                    depositMsg.extra_msg = JSON.stringify(storageDepositMsg);
         | 
| 2850 3110 | 
             
                  }
         | 
| 3111 | 
            +
                  console.log("get_user_deposit_address params:", { deposit_msg: depositMsg });
         | 
| 3112 | 
            +
                  const userDepositAddress = yield nearCall(
         | 
| 3113 | 
            +
                    config.bridgeContractId,
         | 
| 3114 | 
            +
                    "get_user_deposit_address",
         | 
| 3115 | 
            +
                    { deposit_msg: depositMsg }
         | 
| 3116 | 
            +
                  );
         | 
| 3117 | 
            +
                  const _feeRate = feeRate || (yield getBtcGasPrice());
         | 
| 3118 | 
            +
                  const minDepositAmount = 5e3;
         | 
| 3119 | 
            +
                  const sendAmount = Math.max(minDepositAmount, new Big(action.amount).toNumber());
         | 
| 3120 | 
            +
                  console.log("user deposit address:", userDepositAddress);
         | 
| 3121 | 
            +
                  console.log("send amount:", sendAmount);
         | 
| 3122 | 
            +
                  console.log("fee rate:", _feeRate);
         | 
| 3123 | 
            +
                  const txHash = yield sendBitcoin(userDepositAddress, sendAmount, _feeRate);
         | 
| 3124 | 
            +
                  yield receiveDepositMsg(config.base_url, {
         | 
| 3125 | 
            +
                    btcPublicKey,
         | 
| 3126 | 
            +
                    txHash,
         | 
| 3127 | 
            +
                    postActions: JSON.stringify(depositMsg.post_actions),
         | 
| 3128 | 
            +
                    extraMsg: depositMsg.extra_msg
         | 
| 3129 | 
            +
                  });
         | 
| 3130 | 
            +
                  const checkTransactionStatusRes = yield checkBridgeTransactionStatus(config.base_url, txHash);
         | 
| 3131 | 
            +
                  console.log("checkBridgeTransactionStatus resp:", checkTransactionStatusRes);
         | 
| 3132 | 
            +
                  const network = yield getNetwork();
         | 
| 3133 | 
            +
                  const result = yield pollTransactionStatuses(network, [checkTransactionStatusRes.ToTxHash]);
         | 
| 3134 | 
            +
                  return result;
         | 
| 3135 | 
            +
                } catch (error) {
         | 
| 3136 | 
            +
                  console.error("executeBTCDepositAndAction error:", error);
         | 
| 3137 | 
            +
                  throw error;
         | 
| 2851 3138 | 
             
                }
         | 
| 2852 | 
            -
                return hashes.map((hash) => results.get(hash));
         | 
| 2853 3139 | 
             
              });
         | 
| 2854 3140 | 
             
            }
         | 
| 2855 3141 |  | 
| 3142 | 
            +
            // src/utils/Dialog.ts
         | 
| 3143 | 
            +
            var Dialog = class {
         | 
| 3144 | 
            +
              static injectStyles() {
         | 
| 3145 | 
            +
                if (!document.querySelector("#dialog-styles")) {
         | 
| 3146 | 
            +
                  const styleSheet = document.createElement("style");
         | 
| 3147 | 
            +
                  styleSheet.id = "dialog-styles";
         | 
| 3148 | 
            +
                  styleSheet.textContent = this.style;
         | 
| 3149 | 
            +
                  document.head.appendChild(styleSheet);
         | 
| 3150 | 
            +
                }
         | 
| 3151 | 
            +
              }
         | 
| 3152 | 
            +
              static confirm(options) {
         | 
| 3153 | 
            +
                return new Promise((resolve) => {
         | 
| 3154 | 
            +
                  this.injectStyles();
         | 
| 3155 | 
            +
                  const container = document.createElement("div");
         | 
| 3156 | 
            +
                  container.innerHTML = this.template;
         | 
| 3157 | 
            +
                  document.body.appendChild(container);
         | 
| 3158 | 
            +
                  const titleEl = container.querySelector(".dialog-title");
         | 
| 3159 | 
            +
                  const messageEl = container.querySelector(".dialog-message");
         | 
| 3160 | 
            +
                  const confirmBtn = container.querySelector(".dialog-confirm-btn");
         | 
| 3161 | 
            +
                  const cancelBtn = container.querySelector(".dialog-cancel-btn");
         | 
| 3162 | 
            +
                  if (options.title) {
         | 
| 3163 | 
            +
                    titleEl.textContent = options.title;
         | 
| 3164 | 
            +
                  } else {
         | 
| 3165 | 
            +
                    titleEl.style.display = "none";
         | 
| 3166 | 
            +
                  }
         | 
| 3167 | 
            +
                  messageEl.textContent = options.message;
         | 
| 3168 | 
            +
                  const cleanup = () => {
         | 
| 3169 | 
            +
                    document.body.removeChild(container);
         | 
| 3170 | 
            +
                  };
         | 
| 3171 | 
            +
                  confirmBtn.addEventListener("click", () => {
         | 
| 3172 | 
            +
                    cleanup();
         | 
| 3173 | 
            +
                    resolve(true);
         | 
| 3174 | 
            +
                  });
         | 
| 3175 | 
            +
                  cancelBtn.addEventListener("click", () => {
         | 
| 3176 | 
            +
                    cleanup();
         | 
| 3177 | 
            +
                    resolve(false);
         | 
| 3178 | 
            +
                  });
         | 
| 3179 | 
            +
                });
         | 
| 3180 | 
            +
              }
         | 
| 3181 | 
            +
              static alert(options) {
         | 
| 3182 | 
            +
                return new Promise((resolve) => {
         | 
| 3183 | 
            +
                  this.injectStyles();
         | 
| 3184 | 
            +
                  const container = document.createElement("div");
         | 
| 3185 | 
            +
                  container.innerHTML = this.template;
         | 
| 3186 | 
            +
                  document.body.appendChild(container);
         | 
| 3187 | 
            +
                  const titleEl = container.querySelector(".dialog-title");
         | 
| 3188 | 
            +
                  const messageEl = container.querySelector(".dialog-message");
         | 
| 3189 | 
            +
                  const confirmBtn = container.querySelector(".dialog-confirm-btn");
         | 
| 3190 | 
            +
                  const cancelBtn = container.querySelector(".dialog-cancel-btn");
         | 
| 3191 | 
            +
                  if (options.title) {
         | 
| 3192 | 
            +
                    titleEl.textContent = options.title;
         | 
| 3193 | 
            +
                  } else {
         | 
| 3194 | 
            +
                    titleEl.style.display = "none";
         | 
| 3195 | 
            +
                  }
         | 
| 3196 | 
            +
                  messageEl.textContent = options.message;
         | 
| 3197 | 
            +
                  cancelBtn.style.display = "none";
         | 
| 3198 | 
            +
                  const cleanup = () => {
         | 
| 3199 | 
            +
                    document.body.removeChild(container);
         | 
| 3200 | 
            +
                  };
         | 
| 3201 | 
            +
                  confirmBtn.addEventListener("click", () => {
         | 
| 3202 | 
            +
                    cleanup();
         | 
| 3203 | 
            +
                    resolve();
         | 
| 3204 | 
            +
                  });
         | 
| 3205 | 
            +
                });
         | 
| 3206 | 
            +
              }
         | 
| 3207 | 
            +
            };
         | 
| 3208 | 
            +
            Dialog.template = `
         | 
| 3209 | 
            +
                <div class="dialog-overlay">
         | 
| 3210 | 
            +
                  <div class="dialog-container">
         | 
| 3211 | 
            +
                    <div class="dialog-content">
         | 
| 3212 | 
            +
                      <div class="dialog-title"></div>
         | 
| 3213 | 
            +
                      <div class="dialog-message"></div>
         | 
| 3214 | 
            +
                      <div class="dialog-buttons">
         | 
| 3215 | 
            +
                        <button class="dialog-cancel-btn">Cancel</button>
         | 
| 3216 | 
            +
                        <button class="dialog-confirm-btn">Confirm</button>
         | 
| 3217 | 
            +
                      </div>
         | 
| 3218 | 
            +
                    </div>
         | 
| 3219 | 
            +
                  </div>
         | 
| 3220 | 
            +
                </div>
         | 
| 3221 | 
            +
              `;
         | 
| 3222 | 
            +
            Dialog.style = `
         | 
| 3223 | 
            +
                .dialog-overlay {
         | 
| 3224 | 
            +
                  position: fixed;
         | 
| 3225 | 
            +
                  top: 0;
         | 
| 3226 | 
            +
                  left: 0;
         | 
| 3227 | 
            +
                  right: 0;
         | 
| 3228 | 
            +
                  bottom: 0;
         | 
| 3229 | 
            +
                  background-color: rgba(0, 0, 0, 0.75);
         | 
| 3230 | 
            +
                  display: flex;
         | 
| 3231 | 
            +
                  align-items: center;
         | 
| 3232 | 
            +
                  justify-content: center;
         | 
| 3233 | 
            +
                  z-index: 999999;
         | 
| 3234 | 
            +
                  backdrop-filter: blur(4px);
         | 
| 3235 | 
            +
                }
         | 
| 3236 | 
            +
                .dialog-container {
         | 
| 3237 | 
            +
                  background: #21232f;
         | 
| 3238 | 
            +
                  border-radius: 12px;
         | 
| 3239 | 
            +
                  padding: 24px;
         | 
| 3240 | 
            +
                  width: 350px;
         | 
| 3241 | 
            +
                  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
         | 
| 3242 | 
            +
                }
         | 
| 3243 | 
            +
                .dialog-title {
         | 
| 3244 | 
            +
                  font-size: 18px;
         | 
| 3245 | 
            +
                  font-weight: 600;
         | 
| 3246 | 
            +
                  margin-bottom: 16px;
         | 
| 3247 | 
            +
                  color: #ffffff;
         | 
| 3248 | 
            +
                }
         | 
| 3249 | 
            +
                .dialog-message {
         | 
| 3250 | 
            +
                  margin-bottom: 24px;
         | 
| 3251 | 
            +
                  line-height: 1.6;
         | 
| 3252 | 
            +
                  color: rgba(255, 255, 255, 0.8);
         | 
| 3253 | 
            +
                  font-size: 14px;
         | 
| 3254 | 
            +
                }
         | 
| 3255 | 
            +
                .dialog-buttons {
         | 
| 3256 | 
            +
                  display: flex;
         | 
| 3257 | 
            +
                  justify-content: flex-end;
         | 
| 3258 | 
            +
                  gap: 12px;
         | 
| 3259 | 
            +
                }
         | 
| 3260 | 
            +
                .dialog-confirm-btn {
         | 
| 3261 | 
            +
                  padding: 8px 24px;
         | 
| 3262 | 
            +
                  background-color: #ff7a00;
         | 
| 3263 | 
            +
                  color: white;
         | 
| 3264 | 
            +
                  border: none;
         | 
| 3265 | 
            +
                  border-radius: 6px;
         | 
| 3266 | 
            +
                  cursor: pointer;
         | 
| 3267 | 
            +
                  font-size: 14px;
         | 
| 3268 | 
            +
                  font-weight: 500;
         | 
| 3269 | 
            +
                  transition: all 0.2s ease;
         | 
| 3270 | 
            +
                }
         | 
| 3271 | 
            +
                .dialog-confirm-btn:hover {
         | 
| 3272 | 
            +
                  background-color: #ff8f1f;
         | 
| 3273 | 
            +
                  transform: translateY(-1px);
         | 
| 3274 | 
            +
                }
         | 
| 3275 | 
            +
                .dialog-confirm-btn:active {
         | 
| 3276 | 
            +
                  transform: translateY(0);
         | 
| 3277 | 
            +
                }
         | 
| 3278 | 
            +
                .dialog-cancel-btn {
         | 
| 3279 | 
            +
                  padding: 8px 24px;
         | 
| 3280 | 
            +
                  background-color: rgba(255, 255, 255, 0.1);
         | 
| 3281 | 
            +
                  color: rgba(255, 255, 255, 0.8);
         | 
| 3282 | 
            +
                  border: none;
         | 
| 3283 | 
            +
                  border-radius: 6px;
         | 
| 3284 | 
            +
                  cursor: pointer;
         | 
| 3285 | 
            +
                  font-size: 14px;
         | 
| 3286 | 
            +
                  font-weight: 500;
         | 
| 3287 | 
            +
                  transition: all 0.2s ease;
         | 
| 3288 | 
            +
                }
         | 
| 3289 | 
            +
                .dialog-cancel-btn:hover {
         | 
| 3290 | 
            +
                  background-color: rgba(255, 255, 255, 0.15);
         | 
| 3291 | 
            +
                  transform: translateY(-1px);
         | 
| 3292 | 
            +
                }
         | 
| 3293 | 
            +
                .dialog-cancel-btn:active {
         | 
| 3294 | 
            +
                  transform: translateY(0);
         | 
| 3295 | 
            +
                }
         | 
| 3296 | 
            +
                
         | 
| 3297 | 
            +
                .dialog-overlay {
         | 
| 3298 | 
            +
                  animation: fadeIn 0.2s ease;
         | 
| 3299 | 
            +
                }
         | 
| 3300 | 
            +
                .dialog-container {
         | 
| 3301 | 
            +
                  animation: slideIn 0.2s ease;
         | 
| 3302 | 
            +
                }
         | 
| 3303 | 
            +
                @keyframes fadeIn {
         | 
| 3304 | 
            +
                  from {
         | 
| 3305 | 
            +
                    opacity: 0;
         | 
| 3306 | 
            +
                  }
         | 
| 3307 | 
            +
                  to {
         | 
| 3308 | 
            +
                    opacity: 1;
         | 
| 3309 | 
            +
                  }
         | 
| 3310 | 
            +
                }
         | 
| 3311 | 
            +
                @keyframes slideIn {
         | 
| 3312 | 
            +
                  from {
         | 
| 3313 | 
            +
                    transform: translateY(-20px);
         | 
| 3314 | 
            +
                    opacity: 0;
         | 
| 3315 | 
            +
                  }
         | 
| 3316 | 
            +
                  to {
         | 
| 3317 | 
            +
                    transform: translateY(0);
         | 
| 3318 | 
            +
                    opacity: 1;
         | 
| 3319 | 
            +
                  }
         | 
| 3320 | 
            +
                }
         | 
| 3321 | 
            +
              `;
         | 
| 3322 | 
            +
             | 
| 2856 3323 | 
             
            // src/core/setupBTCWallet.ts
         | 
| 2857 | 
            -
            import Big from "big.js";
         | 
| 2858 3324 | 
             
            var { transfer, functionCall } = actionCreators;
         | 
| 2859 3325 | 
             
            var state = {
         | 
| 2860 3326 | 
             
              saveAccount(account) {
         | 
| @@ -2904,6 +3370,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 2904 3370 | 
             
              id,
         | 
| 2905 3371 | 
             
              provider
         | 
| 2906 3372 | 
             
            }) {
         | 
| 3373 | 
            +
              var _a;
         | 
| 2907 3374 | 
             
              const wallet = {
         | 
| 2908 3375 | 
             
                signIn,
         | 
| 2909 3376 | 
             
                signOut,
         | 
| @@ -2913,8 +3380,9 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 2913 3380 | 
             
                signAndSendTransaction,
         | 
| 2914 3381 | 
             
                signAndSendTransactions
         | 
| 2915 3382 | 
             
              };
         | 
| 2916 | 
            -
              const  | 
| 2917 | 
            -
              const  | 
| 3383 | 
            +
              const isDev = (_a = "isDev" in metadata && metadata.isDev) != null ? _a : false;
         | 
| 3384 | 
            +
              const currentConfig = isDev ? walletConfig.dev : walletConfig[options.network.networkId];
         | 
| 3385 | 
            +
              const walletNetwork = isDev ? "dev" : options.network.networkId;
         | 
| 2918 3386 | 
             
              initWalletButton(walletNetwork, wallet);
         | 
| 2919 3387 | 
             
              if (!inter) {
         | 
| 2920 3388 | 
             
                inter = setInterval(() => __async(void 0, null, function* () {
         | 
| @@ -3055,9 +3523,15 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3055 3523 | 
             
                return __async(this, null, function* () {
         | 
| 3056 3524 | 
             
                  const btcContext = window.btcContext;
         | 
| 3057 3525 | 
             
                  const accountId = state.getAccount();
         | 
| 3526 | 
            +
                  const accountInfo = yield getAccountInfo();
         | 
| 3527 | 
            +
                  yield checkGasTokenArrears(accountInfo.debt_info);
         | 
| 3058 3528 | 
             
                  const trans = [...params.transactions];
         | 
| 3059 3529 | 
             
                  console.log("raw trans:", trans);
         | 
| 3060 | 
            -
                  const  | 
| 3530 | 
            +
                  const gasTokenBalance = accountInfo.gas_token[currentConfig.token] || "0";
         | 
| 3531 | 
            +
                  const { transferGasTransaction, useNearPayGas, gasLimit } = yield calculateGasStrategy(
         | 
| 3532 | 
            +
                    gasTokenBalance,
         | 
| 3533 | 
            +
                    trans
         | 
| 3534 | 
            +
                  );
         | 
| 3061 3535 | 
             
                  console.log("transferGasTransaction:", transferGasTransaction);
         | 
| 3062 3536 | 
             
                  console.log("useNearPayGas:", useNearPayGas);
         | 
| 3063 3537 | 
             
                  console.log("gasLimit:", gasLimit);
         | 
| @@ -3068,11 +3542,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3068 3542 | 
             
                  const newTrans = yield Promise.all(
         | 
| 3069 3543 | 
             
                    trans.map((transaction, index) => convertTransactionToTxHex(transaction, index))
         | 
| 3070 3544 | 
             
                  );
         | 
| 3071 | 
            -
                  const  | 
| 3072 | 
            -
                    currentConfig.base_url,
         | 
| 3073 | 
            -
                    accountId
         | 
| 3074 | 
            -
                  );
         | 
| 3075 | 
            -
                  const accountInfo = yield getAccountInfo();
         | 
| 3545 | 
            +
                  const nonceFromApi = yield getNonce(currentConfig.base_url, accountId);
         | 
| 3076 3546 | 
             
                  const nonce = Number(nonceFromApi) > Number(accountInfo.nonce) ? String(nonceFromApi) : String(accountInfo.nonce);
         | 
| 3077 3547 | 
             
                  const intention = {
         | 
| 3078 3548 | 
             
                    chain_id: "397",
         | 
| @@ -3085,29 +3555,48 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3085 3555 | 
             
                  };
         | 
| 3086 3556 | 
             
                  const strIntention = JSON.stringify(intention);
         | 
| 3087 3557 | 
             
                  const signature = yield btcContext.signMessage(strIntention);
         | 
| 3088 | 
            -
                   | 
| 3558 | 
            +
                  yield receiveTransaction(currentConfig.base_url, {
         | 
| 3089 3559 | 
             
                    sig: signature,
         | 
| 3090 3560 | 
             
                    btcPubKey: state.getBtcPublicKey(),
         | 
| 3091 3561 | 
             
                    data: toHex(strIntention)
         | 
| 3092 3562 | 
             
                  });
         | 
| 3093 | 
            -
                   | 
| 3094 | 
            -
             | 
| 3095 | 
            -
             | 
| 3096 | 
            -
             | 
| 3097 | 
            -
             | 
| 3563 | 
            +
                  yield checkBtcTransactionStatus(currentConfig.base_url, signature);
         | 
| 3564 | 
            +
                  const hash = newTrans.map((t) => t.hash);
         | 
| 3565 | 
            +
                  console.log("txHash:", hash);
         | 
| 3566 | 
            +
                  const result = yield pollTransactionStatuses(options.network.networkId, hash);
         | 
| 3567 | 
            +
                  return result;
         | 
| 3568 | 
            +
                });
         | 
| 3569 | 
            +
              }
         | 
| 3570 | 
            +
              function checkGasTokenArrears(debtInfo) {
         | 
| 3571 | 
            +
                return __async(this, null, function* () {
         | 
| 3572 | 
            +
                  const transferAmount = (debtInfo == null ? void 0 : debtInfo.transfer_amount) || "0";
         | 
| 3573 | 
            +
                  console.log("get_account debtInfo:", debtInfo);
         | 
| 3574 | 
            +
                  if (transferAmount === "0")
         | 
| 3575 | 
            +
                    return;
         | 
| 3576 | 
            +
                  const confirmed = yield Dialog.confirm({
         | 
| 3577 | 
            +
                    title: "Has gas token arrears",
         | 
| 3578 | 
            +
                    message: "You have gas token arrears, please deposit gas token to continue."
         | 
| 3579 | 
            +
                  });
         | 
| 3580 | 
            +
                  if (confirmed) {
         | 
| 3581 | 
            +
                    const action = {
         | 
| 3582 | 
            +
                      receiver_id: currentConfig.token,
         | 
| 3583 | 
            +
                      amount: transferAmount,
         | 
| 3584 | 
            +
                      msg: JSON.stringify("Deposit")
         | 
| 3585 | 
            +
                    };
         | 
| 3586 | 
            +
                    yield executeBTCDepositAndAction({ action, isDev });
         | 
| 3587 | 
            +
                    yield Dialog.alert({
         | 
| 3588 | 
            +
                      title: "Deposit success",
         | 
| 3589 | 
            +
                      message: "Deposit success, will continue to execute transaction."
         | 
| 3590 | 
            +
                    });
         | 
| 3098 3591 | 
             
                  } else {
         | 
| 3099 | 
            -
                     | 
| 3592 | 
            +
                    throw new Error("Deposit failed, please deposit gas token first.");
         | 
| 3100 3593 | 
             
                  }
         | 
| 3101 3594 | 
             
                });
         | 
| 3102 3595 | 
             
              }
         | 
| 3103 3596 | 
             
              function getAccountInfo() {
         | 
| 3104 3597 | 
             
                return __async(this, null, function* () {
         | 
| 3105 3598 | 
             
                  const accountId = state.getAccount();
         | 
| 3106 | 
            -
                  const accountInfo = yield nearCall2(
         | 
| 3107 | 
            -
                    currentConfig.accountContractId,
         | 
| 3108 | 
            -
                    "get_account",
         | 
| 3109 | 
            -
                    { account_id: accountId }
         | 
| 3110 | 
            -
                  );
         | 
| 3599 | 
            +
                  const accountInfo = yield nearCall2(currentConfig.accountContractId, "get_account", { account_id: accountId });
         | 
| 3111 3600 | 
             
                  return accountInfo;
         | 
| 3112 3601 | 
             
                });
         | 
| 3113 3602 | 
             
              }
         | 
| @@ -3126,7 +3615,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3126 3615 | 
             
                            amount,
         | 
| 3127 3616 | 
             
                            msg: JSON.stringify("Deposit")
         | 
| 3128 3617 | 
             
                          },
         | 
| 3129 | 
            -
                          gas: new  | 
| 3618 | 
            +
                          gas: new Big2(50).mul(__pow(10, 12)).toFixed(0),
         | 
| 3130 3619 | 
             
                          deposit: "1"
         | 
| 3131 3620 | 
             
                        }
         | 
| 3132 3621 | 
             
                      }
         | 
| @@ -3139,7 +3628,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3139 3628 | 
             
                  const { txHex: transferTxHex } = yield convertTransactionToTxHex(transferTx);
         | 
| 3140 3629 | 
             
                  let newGasLimit;
         | 
| 3141 3630 | 
             
                  if (useNearPayGas && perTxFee) {
         | 
| 3142 | 
            -
                    newGasLimit = new  | 
| 3631 | 
            +
                    newGasLimit = new Big2(perTxFee).mul(transactions2.length + 1).toFixed(0);
         | 
| 3143 3632 | 
             
                  } else {
         | 
| 3144 3633 | 
             
                    newGasLimit = yield getPredictedGasAmount(
         | 
| 3145 3634 | 
             
                      currentConfig.accountContractId,
         | 
| @@ -3157,14 +3646,14 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3157 3646 | 
             
                    gas_token_id: tokenId,
         | 
| 3158 3647 | 
             
                    near_transactions: transactions2
         | 
| 3159 3648 | 
             
                  });
         | 
| 3160 | 
            -
                  const predictedGasAmount = new  | 
| 3649 | 
            +
                  const predictedGasAmount = new Big2(predictedGas).mul(1.2).toFixed(0);
         | 
| 3161 3650 | 
             
                  console.log("predictedGas:", predictedGasAmount);
         | 
| 3162 3651 | 
             
                  return predictedGasAmount;
         | 
| 3163 3652 | 
             
                });
         | 
| 3164 3653 | 
             
              }
         | 
| 3165 | 
            -
              function calculateGasStrategy(transactions2) {
         | 
| 3654 | 
            +
              function calculateGasStrategy(gasTokenBalance, transactions2) {
         | 
| 3166 3655 | 
             
                return __async(this, null, function* () {
         | 
| 3167 | 
            -
                  var  | 
| 3656 | 
            +
                  var _a2;
         | 
| 3168 3657 | 
             
                  const accountId = state.getAccount();
         | 
| 3169 3658 | 
             
                  const nearAccount = yield provider.query({
         | 
| 3170 3659 | 
             
                    request_type: "view_account",
         | 
| @@ -3173,8 +3662,6 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3173 3662 | 
             
                  });
         | 
| 3174 3663 | 
             
                  const availableBalance = parseFloat(nearAccount.amount) / __pow(10, 24);
         | 
| 3175 3664 | 
             
                  console.log("available near balance:", availableBalance);
         | 
| 3176 | 
            -
                  const accountInfo = yield getAccountInfo();
         | 
| 3177 | 
            -
                  const gasTokenBalance = accountInfo.gas_token[currentConfig.token] || "0";
         | 
| 3178 3665 | 
             
                  console.log("available gas token balance:", gasTokenBalance);
         | 
| 3179 3666 | 
             
                  const convertTx = yield Promise.all(
         | 
| 3180 3667 | 
             
                    transactions2.map((transaction, index) => convertTransactionToTxHex(transaction, index))
         | 
| @@ -3187,13 +3674,13 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3187 3674 | 
             
                    );
         | 
| 3188 3675 | 
             
                    console.log("list_gas_token gas tokens:", gasTokens);
         | 
| 3189 3676 | 
             
                    const perTxFee = Math.max(
         | 
| 3190 | 
            -
                      Number((( | 
| 3677 | 
            +
                      Number(((_a2 = gasTokens[currentConfig.token]) == null ? void 0 : _a2.per_tx_protocol_fee) || 0),
         | 
| 3191 3678 | 
             
                      100
         | 
| 3192 3679 | 
             
                    );
         | 
| 3193 3680 | 
             
                    console.log("perTxFee:", perTxFee);
         | 
| 3194 | 
            -
                    const protocolFee = new  | 
| 3681 | 
            +
                    const protocolFee = new Big2(perTxFee || "0").mul(convertTx.length).toFixed(0);
         | 
| 3195 3682 | 
             
                    console.log("protocolFee:", protocolFee);
         | 
| 3196 | 
            -
                    if (new  | 
| 3683 | 
            +
                    if (new Big2(gasTokenBalance).gte(protocolFee)) {
         | 
| 3197 3684 | 
             
                      console.log("use near pay gas and enough gas token balance");
         | 
| 3198 3685 | 
             
                      return { useNearPayGas: true, gasLimit: protocolFee };
         | 
| 3199 3686 | 
             
                    } else {
         | 
| @@ -3208,7 +3695,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3208 3695 | 
             
                      currentConfig.token,
         | 
| 3209 3696 | 
             
                      convertTx.map((t) => t.txHex)
         | 
| 3210 3697 | 
             
                    );
         | 
| 3211 | 
            -
                    if (new  | 
| 3698 | 
            +
                    if (new Big2(gasTokenBalance).gte(adjustedGas)) {
         | 
| 3212 3699 | 
             
                      console.log("use gas token and gas token balance is enough");
         | 
| 3213 3700 | 
             
                      return { useNearPayGas: false, gasLimit: adjustedGas };
         | 
| 3214 3701 | 
             
                    } else {
         | 
| @@ -3236,10 +3723,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3236 3723 | 
             
                  const accessKey = __spreadProps(__spreadValues({}, rawAccessKey), {
         | 
| 3237 3724 | 
             
                    nonce: BigInt(rawAccessKey.nonce || 0)
         | 
| 3238 3725 | 
             
                  });
         | 
| 3239 | 
            -
                  const  | 
| 3240 | 
            -
                    currentConfig.base_url,
         | 
| 3241 | 
            -
                    accountId
         | 
| 3242 | 
            -
                  );
         | 
| 3726 | 
            +
                  const nearNonceFromApi = yield getNearNonce(currentConfig.base_url, accountId);
         | 
| 3243 3727 | 
             
                  let nearNonceNumber = accessKey.nonce + BigInt(1);
         | 
| 3244 3728 | 
             
                  if (nearNonceFromApi) {
         | 
| 3245 3729 | 
             
                    nearNonceNumber = BigInt(nearNonceFromApi) > nearNonceNumber ? BigInt(nearNonceFromApi) : nearNonceNumber;
         | 
| @@ -3293,18 +3777,6 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({ | |
| 3293 3777 | 
             
              }
         | 
| 3294 3778 | 
             
              return wallet;
         | 
| 3295 3779 | 
             
            });
         | 
| 3296 | 
            -
            function getNonceFromApi(url, accountId) {
         | 
| 3297 | 
            -
              return request(`${url}/v1/nonce?csna=${accountId}`);
         | 
| 3298 | 
            -
            }
         | 
| 3299 | 
            -
            function getNearNonceFromApi(url, accountId) {
         | 
| 3300 | 
            -
              return request(`${url}/v1/nonceNear?csna=${accountId}`);
         | 
| 3301 | 
            -
            }
         | 
| 3302 | 
            -
            function uploadBTCTx(url, data) {
         | 
| 3303 | 
            -
              return request(`${url}/v1/receiveTransaction`, {
         | 
| 3304 | 
            -
                method: "POST",
         | 
| 3305 | 
            -
                body: data
         | 
| 3306 | 
            -
              });
         | 
| 3307 | 
            -
            }
         | 
| 3308 3780 | 
             
            function toHex(originalString) {
         | 
| 3309 3781 | 
             
              const charArray = originalString.split("");
         | 
| 3310 3782 | 
             
              const asciiArray = charArray.map((char) => char.charCodeAt(0));
         | 
| @@ -3341,228 +3813,9 @@ function setupBTCWallet({ | |
| 3341 3813 | 
             
              return btcWallet;
         | 
| 3342 3814 | 
             
            }
         | 
| 3343 3815 |  | 
| 3344 | 
            -
            // src/core/btcUtils.ts
         | 
| 3345 | 
            -
            import Big2 from "big.js";
         | 
| 3346 | 
            -
            function getBtcProvider() {
         | 
| 3347 | 
            -
              if (typeof window === "undefined" || !window.btcContext) {
         | 
| 3348 | 
            -
                throw new Error("BTC Provider is not initialized.");
         | 
| 3349 | 
            -
              }
         | 
| 3350 | 
            -
              return window.btcContext;
         | 
| 3351 | 
            -
            }
         | 
| 3352 | 
            -
            function getNetwork() {
         | 
| 3353 | 
            -
              return __async(this, null, function* () {
         | 
| 3354 | 
            -
                const network = yield getBtcProvider().getNetwork();
         | 
| 3355 | 
            -
                console.log("btc network:", network);
         | 
| 3356 | 
            -
                return network === "livenet" ? "mainnet" : "testnet";
         | 
| 3357 | 
            -
              });
         | 
| 3358 | 
            -
            }
         | 
| 3359 | 
            -
            function getBtcRpcUrl() {
         | 
| 3360 | 
            -
              return __async(this, null, function* () {
         | 
| 3361 | 
            -
                const network = yield getNetwork();
         | 
| 3362 | 
            -
                return btcRpcUrls[network];
         | 
| 3363 | 
            -
              });
         | 
| 3364 | 
            -
            }
         | 
| 3365 | 
            -
            function getConfig(isDev) {
         | 
| 3366 | 
            -
              return __async(this, null, function* () {
         | 
| 3367 | 
            -
                const network = yield getNetwork();
         | 
| 3368 | 
            -
                return walletConfig[isDev ? "dev" : network];
         | 
| 3369 | 
            -
              });
         | 
| 3370 | 
            -
            }
         | 
| 3371 | 
            -
            function nearCall(contractId, methodName, args) {
         | 
| 3372 | 
            -
              return __async(this, null, function* () {
         | 
| 3373 | 
            -
                const network = yield getNetwork();
         | 
| 3374 | 
            -
                return nearCallFunction(contractId, methodName, args, { network });
         | 
| 3375 | 
            -
              });
         | 
| 3376 | 
            -
            }
         | 
| 3377 | 
            -
            function receiveDepositMsg(_0, _1) {
         | 
| 3378 | 
            -
              return __async(this, arguments, function* (baseUrl, {
         | 
| 3379 | 
            -
                btcPublicKey,
         | 
| 3380 | 
            -
                txHash,
         | 
| 3381 | 
            -
                depositType = 1,
         | 
| 3382 | 
            -
                postActions,
         | 
| 3383 | 
            -
                extraMsg
         | 
| 3384 | 
            -
              }) {
         | 
| 3385 | 
            -
                const res = yield request(`${baseUrl}/v1/receiveDepositMsg`, {
         | 
| 3386 | 
            -
                  method: "POST",
         | 
| 3387 | 
            -
                  body: { btcPublicKey, txHash, depositType, postActions, extraMsg }
         | 
| 3388 | 
            -
                });
         | 
| 3389 | 
            -
                console.log("receiveDepositMsg resp:", res);
         | 
| 3390 | 
            -
                return res;
         | 
| 3391 | 
            -
              });
         | 
| 3392 | 
            -
            }
         | 
| 3393 | 
            -
            function checkTransactionStatus(baseUrl, txHash) {
         | 
| 3394 | 
            -
              return __async(this, null, function* () {
         | 
| 3395 | 
            -
                const res = yield request(
         | 
| 3396 | 
            -
                  `${baseUrl}/v1/bridgeFromTx?fromTxHash=${txHash}&fromChainId=1`,
         | 
| 3397 | 
            -
                  {
         | 
| 3398 | 
            -
                    timeout: 6e4,
         | 
| 3399 | 
            -
                    pollingInterval: 5e3,
         | 
| 3400 | 
            -
                    maxPollingAttempts: 10,
         | 
| 3401 | 
            -
                    shouldStopPolling: (res2) => res2.result_code === 0
         | 
| 3402 | 
            -
                  }
         | 
| 3403 | 
            -
                );
         | 
| 3404 | 
            -
                return res;
         | 
| 3405 | 
            -
              });
         | 
| 3406 | 
            -
            }
         | 
| 3407 | 
            -
            function getBtcGasPrice() {
         | 
| 3408 | 
            -
              return __async(this, null, function* () {
         | 
| 3409 | 
            -
                const defaultFeeRate = 100;
         | 
| 3410 | 
            -
                try {
         | 
| 3411 | 
            -
                  const btcRpcUrl = yield getBtcRpcUrl();
         | 
| 3412 | 
            -
                  const res = yield fetch(`${btcRpcUrl}/v1/fees/recommended`).then((res2) => res2.json());
         | 
| 3413 | 
            -
                  const feeRate = res.fastestFee;
         | 
| 3414 | 
            -
                  return feeRate || defaultFeeRate;
         | 
| 3415 | 
            -
                } catch (error) {
         | 
| 3416 | 
            -
                  return defaultFeeRate;
         | 
| 3417 | 
            -
                }
         | 
| 3418 | 
            -
              });
         | 
| 3419 | 
            -
            }
         | 
| 3420 | 
            -
            function getBtcBalance() {
         | 
| 3421 | 
            -
              return __async(this, null, function* () {
         | 
| 3422 | 
            -
                const { account } = yield retryOperation(getBtcProvider, (res) => !!res.account);
         | 
| 3423 | 
            -
                if (!account) {
         | 
| 3424 | 
            -
                  console.error("BTC Account is not available.");
         | 
| 3425 | 
            -
                  return { rawBalance: 0, balance: 0, maxSpendableBalance: 0 };
         | 
| 3426 | 
            -
                }
         | 
| 3427 | 
            -
                const btcRpcUrl = yield getBtcRpcUrl();
         | 
| 3428 | 
            -
                const utxos = yield fetch(`${btcRpcUrl}/address/${account}/utxo`).then((res) => res.json());
         | 
| 3429 | 
            -
                const rawBalance = (utxos == null ? void 0 : utxos.reduce((acc, cur) => acc + cur.value, 0)) || 0;
         | 
| 3430 | 
            -
                const balance = rawBalance / __pow(10, 8);
         | 
| 3431 | 
            -
                const feeRate = yield getBtcGasPrice();
         | 
| 3432 | 
            -
                const inputSize = ((utxos == null ? void 0 : utxos.length) || 0) * 66;
         | 
| 3433 | 
            -
                const outputSize = 34;
         | 
| 3434 | 
            -
                const overheadSize = 10;
         | 
| 3435 | 
            -
                const estimatedTxSize = inputSize + outputSize + overheadSize;
         | 
| 3436 | 
            -
                const estimatedFee = estimatedTxSize * feeRate / __pow(10, 8);
         | 
| 3437 | 
            -
                console.log("estimated fee:", estimatedFee);
         | 
| 3438 | 
            -
                const availableBalance = Math.max(0, balance - estimatedFee);
         | 
| 3439 | 
            -
                return {
         | 
| 3440 | 
            -
                  rawBalance,
         | 
| 3441 | 
            -
                  balance,
         | 
| 3442 | 
            -
                  availableBalance
         | 
| 3443 | 
            -
                };
         | 
| 3444 | 
            -
              });
         | 
| 3445 | 
            -
            }
         | 
| 3446 | 
            -
            function sendBitcoin(address, amount, feeRate) {
         | 
| 3447 | 
            -
              return __async(this, null, function* () {
         | 
| 3448 | 
            -
                const { sendBitcoin: sendBitcoin2 } = getBtcProvider();
         | 
| 3449 | 
            -
                const txHash = yield sendBitcoin2(address, amount, { feeRate });
         | 
| 3450 | 
            -
                return txHash;
         | 
| 3451 | 
            -
              });
         | 
| 3452 | 
            -
            }
         | 
| 3453 | 
            -
            function estimateDepositAmount(amount, option) {
         | 
| 3454 | 
            -
              return __async(this, null, function* () {
         | 
| 3455 | 
            -
                const config = yield getConfig((option == null ? void 0 : option.isDev) || false);
         | 
| 3456 | 
            -
                const {
         | 
| 3457 | 
            -
                  deposit_bridge_fee: { fee_min, fee_rate }
         | 
| 3458 | 
            -
                } = yield nearCall(
         | 
| 3459 | 
            -
                  config.bridgeContractId,
         | 
| 3460 | 
            -
                  "get_config",
         | 
| 3461 | 
            -
                  {}
         | 
| 3462 | 
            -
                );
         | 
| 3463 | 
            -
                const fee = Math.max(Number(fee_min), Number(amount) * fee_rate);
         | 
| 3464 | 
            -
                return new Big2(amount).minus(fee).toFixed(0);
         | 
| 3465 | 
            -
              });
         | 
| 3466 | 
            -
            }
         | 
| 3467 | 
            -
            function executeBTCDepositAndAction(_0) {
         | 
| 3468 | 
            -
              return __async(this, arguments, function* ({
         | 
| 3469 | 
            -
                action,
         | 
| 3470 | 
            -
                feeRate,
         | 
| 3471 | 
            -
                isDev = false
         | 
| 3472 | 
            -
              }) {
         | 
| 3473 | 
            -
                try {
         | 
| 3474 | 
            -
                  const { getPublicKey } = getBtcProvider();
         | 
| 3475 | 
            -
                  const config = yield getConfig(isDev);
         | 
| 3476 | 
            -
                  const btcPublicKey = yield getPublicKey();
         | 
| 3477 | 
            -
                  const _action = Object.assign(
         | 
| 3478 | 
            -
                    {},
         | 
| 3479 | 
            -
                    __spreadProps(__spreadValues({}, action), {
         | 
| 3480 | 
            -
                      gas: new Big2(100).mul(__pow(10, 12)).toFixed(0)
         | 
| 3481 | 
            -
                    })
         | 
| 3482 | 
            -
                  );
         | 
| 3483 | 
            -
                  if (!btcPublicKey) {
         | 
| 3484 | 
            -
                    throw new Error("BTC Public Key is not available.");
         | 
| 3485 | 
            -
                  }
         | 
| 3486 | 
            -
                  if (!_action.receiver_id) {
         | 
| 3487 | 
            -
                    throw new Error("action.receiver_id is required");
         | 
| 3488 | 
            -
                  }
         | 
| 3489 | 
            -
                  const amountWithFee = yield estimateDepositAmount(_action.amount, {
         | 
| 3490 | 
            -
                    isDev
         | 
| 3491 | 
            -
                  });
         | 
| 3492 | 
            -
                  _action.amount = amountWithFee;
         | 
| 3493 | 
            -
                  if (!_action.amount || !new Big2(_action.amount || 0).gt(0)) {
         | 
| 3494 | 
            -
                    throw new Error("action.amount is required or deposit amount is not enough");
         | 
| 3495 | 
            -
                  }
         | 
| 3496 | 
            -
                  const csna = yield nearCall(
         | 
| 3497 | 
            -
                    config.accountContractId,
         | 
| 3498 | 
            -
                    "get_chain_signature_near_account_id",
         | 
| 3499 | 
            -
                    {
         | 
| 3500 | 
            -
                      btc_public_key: btcPublicKey
         | 
| 3501 | 
            -
                    }
         | 
| 3502 | 
            -
                  );
         | 
| 3503 | 
            -
                  const depositMsg = {
         | 
| 3504 | 
            -
                    recipient_id: csna,
         | 
| 3505 | 
            -
                    post_actions: [_action]
         | 
| 3506 | 
            -
                  };
         | 
| 3507 | 
            -
                  const storageDepositMsg = {};
         | 
| 3508 | 
            -
                  const accountInfo = yield nearCall(
         | 
| 3509 | 
            -
                    config.accountContractId,
         | 
| 3510 | 
            -
                    "get_account",
         | 
| 3511 | 
            -
                    {
         | 
| 3512 | 
            -
                      account_id: csna
         | 
| 3513 | 
            -
                    }
         | 
| 3514 | 
            -
                  );
         | 
| 3515 | 
            -
                  if (!(accountInfo == null ? void 0 : accountInfo.nonce)) {
         | 
| 3516 | 
            -
                    storageDepositMsg.btc_public_key = btcPublicKey;
         | 
| 3517 | 
            -
                  }
         | 
| 3518 | 
            -
                  const registerRes = yield nearCall(action.receiver_id, "storage_balance_of", {
         | 
| 3519 | 
            -
                    account_id: csna
         | 
| 3520 | 
            -
                  });
         | 
| 3521 | 
            -
                  if (!(registerRes == null ? void 0 : registerRes.available)) {
         | 
| 3522 | 
            -
                    storageDepositMsg.storage_deposit_msg = {
         | 
| 3523 | 
            -
                      contract_id: action.receiver_id,
         | 
| 3524 | 
            -
                      deposit: new Big2(0.25).mul(__pow(10, 24)).toFixed(0),
         | 
| 3525 | 
            -
                      registration_only: true
         | 
| 3526 | 
            -
                    };
         | 
| 3527 | 
            -
                  }
         | 
| 3528 | 
            -
                  if (Object.keys(storageDepositMsg).length > 0) {
         | 
| 3529 | 
            -
                    depositMsg.extra_msg = JSON.stringify(storageDepositMsg);
         | 
| 3530 | 
            -
                  }
         | 
| 3531 | 
            -
                  console.log("get_user_deposit_address params:", { deposit_msg: depositMsg });
         | 
| 3532 | 
            -
                  const userDepositAddress = yield nearCall(
         | 
| 3533 | 
            -
                    config.bridgeContractId,
         | 
| 3534 | 
            -
                    "get_user_deposit_address",
         | 
| 3535 | 
            -
                    { deposit_msg: depositMsg }
         | 
| 3536 | 
            -
                  );
         | 
| 3537 | 
            -
                  const _feeRate = feeRate || (yield getBtcGasPrice());
         | 
| 3538 | 
            -
                  console.log("user deposit address:", userDepositAddress);
         | 
| 3539 | 
            -
                  console.log("deposit amount:", new Big2(action.amount).toNumber());
         | 
| 3540 | 
            -
                  console.log("receive amount:", new Big2(_action.amount).toNumber());
         | 
| 3541 | 
            -
                  console.log("fee rate:", _feeRate);
         | 
| 3542 | 
            -
                  const txHash = yield sendBitcoin(
         | 
| 3543 | 
            -
                    userDepositAddress,
         | 
| 3544 | 
            -
                    new Big2(action.amount).toNumber(),
         | 
| 3545 | 
            -
                    _feeRate
         | 
| 3546 | 
            -
                  );
         | 
| 3547 | 
            -
                  yield receiveDepositMsg(config.base_url, {
         | 
| 3548 | 
            -
                    btcPublicKey,
         | 
| 3549 | 
            -
                    txHash,
         | 
| 3550 | 
            -
                    postActions: JSON.stringify(depositMsg.post_actions),
         | 
| 3551 | 
            -
                    extraMsg: depositMsg.extra_msg
         | 
| 3552 | 
            -
                  });
         | 
| 3553 | 
            -
                  const checkTransactionStatusRes = yield checkTransactionStatus(config.base_url, txHash);
         | 
| 3554 | 
            -
                  console.log("checkTransactionStatus resp:", checkTransactionStatusRes);
         | 
| 3555 | 
            -
                  return checkTransactionStatusRes.result_code === 0 ? { result: "success" } : { result: "failed", error: checkTransactionStatusRes.result_message };
         | 
| 3556 | 
            -
                } catch (error) {
         | 
| 3557 | 
            -
                  console.error("Error executing Bridge+BurrowSupply:", error);
         | 
| 3558 | 
            -
                  return { result: "failed", error: error.message };
         | 
| 3559 | 
            -
                }
         | 
| 3560 | 
            -
              });
         | 
| 3561 | 
            -
            }
         | 
| 3562 | 
            -
             | 
| 3563 3816 | 
             
            // src/index.ts
         | 
| 3564 3817 | 
             
            var getVersion = () => {
         | 
| 3565 | 
            -
              return "0.3. | 
| 3818 | 
            +
              return "0.3.12";
         | 
| 3566 3819 | 
             
            };
         | 
| 3567 3820 | 
             
            if (typeof window !== "undefined") {
         | 
| 3568 3821 | 
             
              window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
         |