btc-wallet 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,5 +7,5 @@ interface RequestOptions<T> extends RequestInit {
7
7
  maxPollingAttempts?: number;
8
8
  shouldStopPolling?: (response: T) => boolean;
9
9
  }
10
- export default function request<T>(url: string, options?: RequestOptions<T>): Promise<T>;
10
+ export default function request<T = any>(url: string, options?: RequestOptions<T>): Promise<T>;
11
11
  export {};
package/esm/index.js CHANGED
@@ -270,7 +270,7 @@ var _network, _event;
270
270
  var XverseConnector = class extends BaseConnector {
271
271
  constructor() {
272
272
  super();
273
- __privateAdd(this, _network, "Mainnet");
273
+ __privateAdd(this, _network, "Testnet");
274
274
  __privateAdd(this, _event, new EventEmitter());
275
275
  this.metadata = {
276
276
  id: "xverse",
@@ -470,7 +470,7 @@ var _network2, _event2;
470
470
  var MagicEdenConnector = class extends BaseConnector {
471
471
  constructor() {
472
472
  super();
473
- __privateAdd(this, _network2, "Mainnet");
473
+ __privateAdd(this, _network2, "Testnet");
474
474
  __privateAdd(this, _event2, new EventEmitter2());
475
475
  this.metadata = {
476
476
  id: "magicEden",
@@ -690,7 +690,16 @@ var useAccounts = () => {
690
690
  // src/hooks/useBTCProvider.ts
691
691
  import { useCallback } from "react";
692
692
  var useBTCProvider = () => {
693
- const { connector, provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin: sendBitcoin2 } = useConnectProvider();
693
+ const {
694
+ connector,
695
+ provider,
696
+ accounts,
697
+ getPublicKey,
698
+ signMessage,
699
+ getNetwork: getNetwork2,
700
+ switchNetwork,
701
+ sendBitcoin: sendBitcoin2
702
+ } = useConnectProvider();
694
703
  const sendInscription = useCallback(
695
704
  (address, inscriptionId, options) => __async(void 0, null, function* () {
696
705
  if (!connector) {
@@ -701,7 +710,17 @@ var useBTCProvider = () => {
701
710
  }),
702
711
  [connector]
703
712
  );
704
- return { provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin: sendBitcoin2, sendInscription, connector };
713
+ return {
714
+ provider,
715
+ accounts,
716
+ getPublicKey,
717
+ signMessage,
718
+ getNetwork: getNetwork2,
719
+ switchNetwork,
720
+ sendBitcoin: sendBitcoin2,
721
+ sendInscription,
722
+ connector
723
+ };
705
724
  };
706
725
 
707
726
  // src/hooks/useConnectModal.ts
@@ -2069,7 +2088,7 @@ var ConnectProvider = ({
2069
2088
  }),
2070
2089
  [connector]
2071
2090
  );
2072
- const getNetwork = useCallback7(() => __async(void 0, null, function* () {
2091
+ const getNetwork2 = useCallback7(() => __async(void 0, null, function* () {
2073
2092
  if (!connector) {
2074
2093
  throw new Error("Wallet not connected!");
2075
2094
  }
@@ -2253,7 +2272,7 @@ var ConnectProvider = ({
2253
2272
  signMessage,
2254
2273
  evmAccount,
2255
2274
  smartAccount,
2256
- getNetwork,
2275
+ getNetwork: getNetwork2,
2257
2276
  switchNetwork,
2258
2277
  sendBitcoin: sendBitcoin2,
2259
2278
  accountContract,
@@ -2407,21 +2426,18 @@ function InitBtcWalletSelectorContext() {
2407
2426
  }
2408
2427
  function useBtcWalletSelector() {
2409
2428
  const { openConnectModal, openConnectModalAsync, disconnect, requestDirectAccount } = useConnectModal();
2410
- const { accounts, sendBitcoin: sendBitcoin2, getPublicKey, provider, signMessage, connector } = useBTCProvider();
2429
+ const { accounts, sendBitcoin: sendBitcoin2, getPublicKey, provider, signMessage, connector, getNetwork: getNetwork2 } = useBTCProvider();
2411
2430
  const publicKey = useRef(null);
2412
2431
  const signMessageFn = useRef(null);
2413
2432
  const connectorRef = useRef(null);
2414
- const providerRef = useRef(null);
2415
- const [updater, setUpdater] = useState8(1);
2416
2433
  const context = useContext2(WalletSelectorContext);
2417
2434
  useEffect6(() => {
2418
2435
  if (provider) {
2419
2436
  getPublicKey().then((res) => {
2420
2437
  publicKey.current = res;
2421
2438
  });
2422
- providerRef.current = provider;
2423
2439
  }
2424
- }, [provider, updater]);
2440
+ }, [provider]);
2425
2441
  useEffect6(() => {
2426
2442
  signMessageFn.current = signMessage;
2427
2443
  }, [signMessage]);
@@ -2444,67 +2460,53 @@ function useBtcWalletSelector() {
2444
2460
  }
2445
2461
  };
2446
2462
  }, [connector]);
2447
- return {
2448
- login: () => __async(this, null, function* () {
2449
- const account = accounts && accounts.length ? accounts[0] : null;
2450
- if (account) {
2451
- return account;
2452
- }
2453
- setUpdater(updater + 1);
2454
- if (openConnectModal) {
2455
- yield openConnectModal();
2456
- }
2457
- return null;
2458
- }),
2459
- autoConnect: () => __async(this, null, function* () {
2460
- let times = 0;
2461
- while (!connectorRef.current) {
2462
- yield delay(500);
2463
- if (times++ > 10) {
2464
- return null;
2465
- }
2466
- }
2467
- requestDirectAccount(connectorRef.current).catch((e) => {
2468
- context.emit("btcLoginError");
2469
- });
2470
- }),
2471
- logout: () => {
2472
- const accountId = accounts && accounts.length ? accounts[0] : null;
2473
- if (!accountId)
2474
- return;
2475
- disconnect == null ? void 0 : disconnect();
2476
- context.emit("btcLogOut");
2477
- },
2478
- account: accounts && accounts.length ? accounts[0] : null,
2479
- getPublicKey: () => __async(this, null, function* () {
2480
- let times = 0;
2481
- while (!publicKey.current) {
2482
- yield delay(1e3);
2483
- if (times++ > 10) {
2484
- return null;
2463
+ const hook = useMemo6(() => {
2464
+ return {
2465
+ login: () => __async(this, null, function* () {
2466
+ const account = accounts && accounts.length ? accounts[0] : null;
2467
+ if (account) {
2468
+ return account;
2485
2469
  }
2486
- }
2487
- return publicKey.current;
2488
- }),
2489
- signMessage: (msg) => {
2490
- return signMessageFn.current(msg);
2491
- },
2492
- getContext: () => {
2493
- return context;
2494
- },
2495
- getBalance: () => __async(this, null, function* () {
2496
- let times = 0;
2497
- while (!providerRef.current) {
2498
- yield delay(500);
2499
- if (times++ > 10) {
2500
- return null;
2470
+ if (openConnectModal) {
2471
+ yield openConnectModal();
2501
2472
  }
2502
- }
2503
- const { total } = yield providerRef.current.getBalance();
2504
- return total;
2505
- }),
2506
- sendBitcoin: sendBitcoin2
2507
- };
2473
+ return null;
2474
+ }),
2475
+ autoConnect: () => __async(this, null, function* () {
2476
+ requestDirectAccount(connectorRef.current).catch((e) => {
2477
+ context.emit("btcLoginError");
2478
+ });
2479
+ }),
2480
+ logout: () => {
2481
+ const accountId = accounts && accounts.length ? accounts[0] : null;
2482
+ if (!accountId)
2483
+ return;
2484
+ disconnect == null ? void 0 : disconnect();
2485
+ context.emit("btcLogOut");
2486
+ },
2487
+ account: accounts && accounts.length ? accounts[0] : null,
2488
+ getPublicKey: () => {
2489
+ return publicKey.current;
2490
+ },
2491
+ signMessage: (msg) => {
2492
+ return signMessageFn.current(msg);
2493
+ },
2494
+ getContext: () => {
2495
+ return context;
2496
+ },
2497
+ getNetwork: getNetwork2,
2498
+ sendBitcoin: sendBitcoin2
2499
+ };
2500
+ }, [
2501
+ accounts,
2502
+ context,
2503
+ disconnect,
2504
+ getNetwork2,
2505
+ openConnectModal,
2506
+ requestDirectAccount,
2507
+ sendBitcoin2
2508
+ ]);
2509
+ return hook;
2508
2510
  }
2509
2511
 
2510
2512
  // src/core/setupBTCWallet.ts
@@ -2727,7 +2729,7 @@ function request(url, options) {
2727
2729
  body,
2728
2730
  method
2729
2731
  });
2730
- const retryCount = (_a = options == null ? void 0 : options.retryCount) != null ? _a : 1;
2732
+ const retryCount2 = (_a = options == null ? void 0 : options.retryCount) != null ? _a : 1;
2731
2733
  const controller = new AbortController();
2732
2734
  const timeout = (options == null ? void 0 : options.timeout) || 2e4;
2733
2735
  const timeoutId = setTimeout(() => controller.abort(), timeout);
@@ -2750,16 +2752,16 @@ function request(url, options) {
2750
2752
  return data;
2751
2753
  } catch (err) {
2752
2754
  console.error(err);
2753
- if (retryCount > 0) {
2754
- console.log(`Retrying... attempts left: ${retryCount}`);
2755
- return request(url, __spreadProps(__spreadValues({}, options), { retryCount: retryCount - 1 }));
2755
+ if (retryCount2 > 0) {
2756
+ console.log(`Retrying... attempts left: ${retryCount2}`);
2757
+ return request(url, __spreadProps(__spreadValues({}, options), { retryCount: retryCount2 - 1 }));
2756
2758
  } else if ((options == null ? void 0 : options.pollingInterval) && (options == null ? void 0 : options.maxPollingAttempts)) {
2757
2759
  if (options.maxPollingAttempts > 0) {
2758
2760
  console.log(`Polling... attempts left: ${options.maxPollingAttempts}`);
2759
2761
  yield new Promise((resolve) => setTimeout(resolve, options.pollingInterval));
2760
2762
  return request(url, __spreadProps(__spreadValues({}, options), {
2761
2763
  maxPollingAttempts: options.maxPollingAttempts - 1,
2762
- retryCount
2764
+ retryCount: retryCount2
2763
2765
  }));
2764
2766
  }
2765
2767
  }
@@ -3146,11 +3148,31 @@ function pollTransactionStatuses(network, hashes) {
3146
3148
  });
3147
3149
  }
3148
3150
 
3149
- // src/core/bridgeSupplyUtils.ts
3151
+ // src/core/btcUtils.ts
3150
3152
  import { providers as providers2 } from "near-api-js";
3151
3153
  import Big from "big.js";
3152
- function nearViewMethod(contractId, methodName, args, network) {
3154
+ function getBtcProvider() {
3155
+ if (typeof window === "undefined" || !window.btcContext) {
3156
+ throw new Error("BTC Provider is not initialized.");
3157
+ }
3158
+ return window.btcContext;
3159
+ }
3160
+ function getNetwork() {
3161
+ return __async(this, null, function* () {
3162
+ const network = yield getBtcProvider().getNetwork();
3163
+ console.log("btc network:", network);
3164
+ return network === "livenet" ? "mainnet" : "testnet";
3165
+ });
3166
+ }
3167
+ function getBtcRpcUrl() {
3168
+ return __async(this, null, function* () {
3169
+ const network = yield getNetwork();
3170
+ return btcRpcUrls[network];
3171
+ });
3172
+ }
3173
+ function nearViewMethod(contractId, methodName, args) {
3153
3174
  return __async(this, null, function* () {
3175
+ const network = yield getNetwork();
3154
3176
  const nearProvider = new providers2.FailoverRpcProvider(
3155
3177
  nearRpcUrls[network].map(
3156
3178
  (url) => new providers2.JsonRpcProvider({ url })
@@ -3166,41 +3188,16 @@ function nearViewMethod(contractId, methodName, args, network) {
3166
3188
  return JSON.parse(Buffer.from(res.result).toString());
3167
3189
  });
3168
3190
  }
3169
- function getDepositAddress(btcPublicKey, contractId, network) {
3191
+ function getDepositAddress(btcPublicKey, contractId) {
3170
3192
  return __async(this, null, function* () {
3171
- const res = yield nearViewMethod(
3172
- contractId,
3173
- "get_user_dapp_deposit_address",
3174
- {
3175
- deposit_type: {
3176
- BtcPublicKey: { btc_public_key: btcPublicKey, dapp_operation: "Burrowland->Supply" }
3177
- }
3178
- },
3179
- network
3180
- );
3193
+ const res = yield nearViewMethod(contractId, "get_user_dapp_deposit_address", {
3194
+ deposit_type: {
3195
+ BtcPublicKey: { btc_public_key: btcPublicKey, dapp_operation: "Burrowland->Supply" }
3196
+ }
3197
+ });
3181
3198
  return res;
3182
3199
  });
3183
3200
  }
3184
- function getGasPrice(network) {
3185
- return __async(this, null, function* () {
3186
- const defaultFeeRate = 100;
3187
- try {
3188
- const btcRpcUrl = btcRpcUrls[network];
3189
- const res = yield fetch(`${btcRpcUrl}/v1/fees/recommended`).then((res2) => res2.json());
3190
- const feeRate = res.fastestFee;
3191
- return feeRate || defaultFeeRate;
3192
- } catch (error) {
3193
- return defaultFeeRate;
3194
- }
3195
- });
3196
- }
3197
- function sendBitcoin(btcProvider, address, amount, feeRate) {
3198
- return __async(this, null, function* () {
3199
- const satoshis = new Big(amount).mul(__pow(10, 8)).toNumber();
3200
- const txHash = yield btcProvider.sendBitcoin(address, satoshis, { feeRate });
3201
- return txHash;
3202
- });
3203
- }
3204
3201
  function receiveDepositMsg(_0, _1) {
3205
3202
  return __async(this, arguments, function* (baseUrl, {
3206
3203
  btcPublicKey,
@@ -3225,27 +3222,66 @@ function checkTransactionStatus(baseUrl, txHash) {
3225
3222
  return res;
3226
3223
  });
3227
3224
  }
3225
+ function getBtcGasPrice() {
3226
+ return __async(this, null, function* () {
3227
+ const defaultFeeRate = 100;
3228
+ try {
3229
+ const btcRpcUrl = yield getBtcRpcUrl();
3230
+ const res = yield fetch(`${btcRpcUrl}/v1/fees/recommended`).then((res2) => res2.json());
3231
+ const feeRate = res.fastestFee;
3232
+ return feeRate || defaultFeeRate;
3233
+ } catch (error) {
3234
+ return defaultFeeRate;
3235
+ }
3236
+ });
3237
+ }
3238
+ var retryCount = 0;
3239
+ function getBtcBalance() {
3240
+ return __async(this, null, function* () {
3241
+ const { account } = getBtcProvider();
3242
+ if (!account) {
3243
+ retryCount++;
3244
+ if (retryCount > 3) {
3245
+ throw new Error("BTC Account is not available.");
3246
+ }
3247
+ yield delay(1e3);
3248
+ return getBtcBalance();
3249
+ }
3250
+ retryCount = 0;
3251
+ const btcRpcUrl = yield getBtcRpcUrl();
3252
+ const res = yield fetch(`${btcRpcUrl}/address/${account}/utxo`).then((res2) => res2.json());
3253
+ const rawBalance = res.reduce((acc, cur) => acc + cur.value, 0);
3254
+ const balance = rawBalance / __pow(10, 8);
3255
+ console.log("btc balance:", balance);
3256
+ return { rawBalance, balance };
3257
+ });
3258
+ }
3259
+ function sendBitcoin(address, amount, feeRate) {
3260
+ return __async(this, null, function* () {
3261
+ const { sendBitcoin: sendBitcoin2 } = getBtcProvider();
3262
+ const satoshis = new Big(amount).mul(__pow(10, 8)).toNumber();
3263
+ const txHash = yield sendBitcoin2(address, satoshis, { feeRate });
3264
+ return txHash;
3265
+ });
3266
+ }
3228
3267
  function executeBurrowSupply(_0) {
3229
3268
  return __async(this, arguments, function* ({
3230
3269
  amount,
3231
3270
  feeRate,
3232
- environment = "mainnet"
3271
+ isDev = false
3233
3272
  }) {
3234
3273
  try {
3235
- if (typeof window === "undefined" || !window.btcContext) {
3236
- throw new Error("BTC Provider is not initialized.");
3237
- }
3238
- const btcProvider = window.btcContext;
3239
- const network = environment === "dev" ? "testnet" : environment;
3240
- const config = walletConfig[environment];
3241
- const btcPublicKey = yield btcProvider.getPublicKey();
3274
+ const { getPublicKey } = getBtcProvider();
3275
+ const network = yield getNetwork();
3276
+ const config = walletConfig[isDev ? "dev" : network];
3277
+ const btcPublicKey = yield getPublicKey();
3242
3278
  if (!btcPublicKey) {
3243
3279
  throw new Error("BTC Public Key is not available.");
3244
3280
  }
3245
- const address = yield getDepositAddress(btcPublicKey, config.contractId, network);
3246
- const _feeRate = feeRate || (yield getGasPrice(network));
3281
+ const address = yield getDepositAddress(btcPublicKey, config.contractId);
3282
+ const _feeRate = feeRate || (yield getBtcGasPrice());
3247
3283
  console.log("feeRate", _feeRate);
3248
- const txHash = yield sendBitcoin(btcProvider, address, amount, _feeRate);
3284
+ const txHash = yield sendBitcoin(address, amount, _feeRate);
3249
3285
  const receiveDepositMsgRes = yield receiveDepositMsg(config.base_url, { btcPublicKey, txHash });
3250
3286
  console.log("receiveDepositMsg resp:", receiveDepositMsgRes);
3251
3287
  const checkTransactionStatusRes = yield checkTransactionStatus(config.base_url, txHash);
@@ -3258,7 +3294,7 @@ function executeBurrowSupply(_0) {
3258
3294
 
3259
3295
  // src/index.ts
3260
3296
  var getVersion = () => {
3261
- return "0.3.3";
3297
+ return "0.3.4";
3262
3298
  };
3263
3299
  if (typeof window !== "undefined") {
3264
3300
  window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
@@ -3277,7 +3313,10 @@ export {
3277
3313
  WizzConnector,
3278
3314
  XverseConnector,
3279
3315
  executeBurrowSupply,
3316
+ getBtcBalance,
3317
+ getBtcGasPrice,
3280
3318
  getVersion,
3319
+ sendBitcoin,
3281
3320
  setupBTCWallet,
3282
3321
  useAccountContract,
3283
3322
  useAccounts,