btc-wallet 0.5.23-beta → 0.5.25-beta

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/README.md CHANGED
@@ -19,7 +19,7 @@ Initialize and integrate BTC wallet with NEAR wallet selector.
19
19
  ```typescript
20
20
  // 1. Setup wallet selector with BTC wallet module
21
21
  import { setupWalletSelector } from '@near-wallet-selector/core';
22
- import { setupBTCWallet } from 'btc-wallet';
22
+ import { setupBTCWallet, setupWalletSelectorModal } from 'btc-wallet';
23
23
 
24
24
  const selector = await setupWalletSelector({
25
25
  network: 'mainnet', // or 'testnet'
@@ -36,7 +36,12 @@ const selector = await setupWalletSelector({
36
36
  ],
37
37
  });
38
38
 
39
- // 2. Wrap your app with BtcWalletSelectorContextProvider
39
+ // 2. Setup wallet selector modal,params see setupModal @near-wallet-selector/modal-ui
40
+ setupWalletSelectorModal(selector, {
41
+ contractId:'xxx.near',
42
+ });
43
+
44
+ // 3. Wrap your app with BtcWalletSelectorContextProvider
40
45
  import { BtcWalletSelectorContextProvider } from 'btc-wallet';
41
46
 
42
47
  function App() {
@@ -6,6 +6,7 @@ interface GlobalState {
6
6
  setConnectorId: (connectorId?: string) => void;
7
7
  connector?: BaseConnector;
8
8
  connectors: BaseConnector[];
9
+ connectModalOpen: boolean;
9
10
  openConnectModal: () => void;
10
11
  closeConnectModal: () => void;
11
12
  accounts: string[];
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import 'ref-modal-ui/styles.css';
2
3
  export declare function BtcWalletSelectorContextProvider({ children, }: {
3
4
  children: React.ReactNode;
4
5
  autoConnect?: boolean;
@@ -0,0 +1,5 @@
1
+ import { type WalletSelectorModal as _WalletSelectorModal, type ModalOptions as _ModalOptions } from 'ref-modal-ui';
2
+ import type { WalletSelector } from '@near-wallet-selector/core';
3
+ export type WalletSelectorModalOptions = _ModalOptions;
4
+ export type WalletSelectorModal = _WalletSelectorModal;
5
+ export declare function setupWalletSelectorModal(selector: WalletSelector, options: WalletSelectorModalOptions): _WalletSelectorModal;
@@ -2,4 +2,5 @@ export declare const useConnectModal: () => {
2
2
  openConnectModal: () => void;
3
3
  disconnect: () => void;
4
4
  requestDirectAccount: (connector: import("..").BaseConnector) => any;
5
+ connectModalOpen: boolean;
5
6
  };
package/dist/index.d.ts CHANGED
@@ -5,4 +5,5 @@ export * from './core/btcWalletSelectorContext';
5
5
  export * from './core/setupBTCWallet/index';
6
6
  export * from './core/btcUtils';
7
7
  export * from './config';
8
+ export * from './core/setupModal';
8
9
  export declare const getVersion: () => string;
package/dist/index.js CHANGED
@@ -122,6 +122,7 @@ __export(src_exports, {
122
122
  nearRpcUrls: () => nearRpcUrls,
123
123
  sendBitcoin: () => sendBitcoin,
124
124
  setupBTCWallet: () => setupBTCWallet,
125
+ setupWalletSelectorModal: () => setupWalletSelectorModal,
125
126
  useAccountContract: () => useAccountContract,
126
127
  useAccounts: () => useAccounts,
127
128
  useBTCProvider: () => useBTCProvider,
@@ -313,6 +314,44 @@ var Dialog = class {
313
314
  });
314
315
  });
315
316
  }
317
+ static openModal({
318
+ title,
319
+ titleStyle,
320
+ content
321
+ }) {
322
+ return new Promise((resolve) => {
323
+ const modalContainer = document.createElement("div");
324
+ modalContainer.innerHTML = this.template;
325
+ document.body.appendChild(modalContainer);
326
+ const btns = modalContainer.querySelector(".dialog-buttons");
327
+ btns.style.display = "none";
328
+ this.injectStyles();
329
+ const titleEl = modalContainer.querySelector(".dialog-title");
330
+ if (title) {
331
+ titleEl.textContent = title;
332
+ if (titleStyle) {
333
+ titleEl.style.cssText = titleStyle;
334
+ }
335
+ } else {
336
+ titleEl.style.display = "none";
337
+ }
338
+ const cleanup = () => {
339
+ document.body.removeChild(modalContainer);
340
+ };
341
+ const close = () => {
342
+ cleanup();
343
+ resolve(null);
344
+ };
345
+ const messageEl = modalContainer.querySelector(".dialog-message");
346
+ messageEl.appendChild(content(resolve, close));
347
+ const overlay = modalContainer.querySelector(".dialog-overlay");
348
+ overlay.addEventListener("click", (e) => {
349
+ if (e.target === overlay) {
350
+ close();
351
+ }
352
+ });
353
+ });
354
+ }
316
355
  };
317
356
  Dialog.template = `
318
357
  <div class="dialog-overlay">
@@ -343,7 +382,7 @@ Dialog.style = `
343
382
  backdrop-filter: blur(4px);
344
383
  }
345
384
  .dialog-container {
346
- background: #21232f;
385
+ background: #131313;
347
386
  border-radius: 12px;
348
387
  padding: 24px;
349
388
  width: 350px;
@@ -430,6 +469,30 @@ Dialog.style = `
430
469
  opacity: 1;
431
470
  }
432
471
  }
472
+ .option-list {
473
+ display: flex;
474
+ flex-direction: column;
475
+ gap: 12px;
476
+ }
477
+ .option-item {
478
+ display: flex;
479
+ align-items: center;
480
+ gap: 12px;
481
+ color: #fff;
482
+ border: 1px solid transparent;
483
+ background-color: hsla(0, 0%, 100%, .05);
484
+ border-radius: 8px;
485
+ padding: 8px 16px;
486
+ transition: all 0.15s ease;
487
+ cursor: pointer;
488
+ font-size: 14px;
489
+ font-weight: bold;
490
+ &:hover {
491
+ border-color: #ff7a00;
492
+ color: #ff7a00;
493
+ background-color: hsla(0, 0%, 100%, .08);
494
+ }
495
+ }
433
496
  `;
434
497
 
435
498
  // src/connector/universalLink.ts
@@ -1148,8 +1211,8 @@ var useBTCProvider = () => {
1148
1211
 
1149
1212
  // src/hooks/useConnectModal.ts
1150
1213
  var useConnectModal = () => {
1151
- const { openConnectModal, disconnect, requestDirectAccount } = useConnectProvider();
1152
- return { openConnectModal, disconnect, requestDirectAccount };
1214
+ const { openConnectModal, disconnect, requestDirectAccount, connectModalOpen } = useConnectProvider();
1215
+ return { openConnectModal, disconnect, requestDirectAccount, connectModalOpen };
1153
1216
  };
1154
1217
 
1155
1218
  // src/hooks/useConnector.ts
@@ -1523,9 +1586,9 @@ var import_react_dom = require("react-dom");
1523
1586
  var import_react_remove_scroll = require("react-remove-scroll");
1524
1587
 
1525
1588
  // esbuild-scss-modules-plugin:./modal.module.scss
1526
- var digest3 = "65eada90924218eba4e72a5f00291c3cb69387ecce1351e454cdefd066d4bcff";
1527
- var classes3 = { "container": "_container_smzpm_1", "modal": "_modal_smzpm_18" };
1528
- var css3 = `._container_smzpm_1{align-items:center;backdrop-filter:blur(12px);background:rgba(0,0,0,.502);bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100000}._container_smzpm_1 ._modal_smzpm_18{align-items:center;background-color:#171a1f;border-radius:16px;display:flex;flex-direction:column;font-size:14px;height:auto;margin:16px;max-height:80%;max-width:100%;overflow:auto;padding:24px;position:relative;width:380px}`;
1589
+ var digest3 = "9c9a003376c4060e772fdba1e4b20a9af75a33b996c44ae9cea877de3ceb1b80";
1590
+ var classes3 = { "container": "_container_1s3ca_1", "modal": "_modal_1s3ca_18" };
1591
+ var css3 = `._container_1s3ca_1{align-items:center;backdrop-filter:blur(12px);background:rgba(0,0,0,.502);bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100000}._container_1s3ca_1 ._modal_1s3ca_18{align-items:center;background-color:#131313;border-radius:16px;display:flex;flex-direction:column;font-size:14px;height:auto;margin:16px;max-height:80%;max-width:100%;overflow:auto;padding:24px;position:relative;width:380px}`;
1529
1592
  (function() {
1530
1593
  if (typeof document !== "undefined" && !document.getElementById(digest3)) {
1531
1594
  var ele = document.createElement("style");
@@ -1568,9 +1631,9 @@ var Modal = ({ open, onClose, children, isDismissable = true, contentStyle, cont
1568
1631
  var modal_default = Modal;
1569
1632
 
1570
1633
  // esbuild-scss-modules-plugin:./connect.module.scss
1571
- var digest4 = "c7bbc091f1227154742a5bd0d55a3df29eb913eb0ad4cafc7ab236b574002f65";
1572
- var classes4 = { "connectModal": "_connectModal_1kqtj_1", "title": "_title_1kqtj_4", "closeBtn": "_closeBtn_1kqtj_9", "backBtn": "_backBtn_1kqtj_15", "walletItem": "_walletItem_1kqtj_21", "walletIcon": "_walletIcon_1kqtj_33", "walletName": "_walletName_1kqtj_38", "connecting": "_connecting_1kqtj_43", "connectingIconContainer": "_connectingIconContainer_1kqtj_51", "retryContainer": "_retryContainer_1kqtj_54", "retryIcon": "_retryIcon_1kqtj_63", "connectingIcon": "_connectingIcon_1kqtj_51", "connection": "_connection_1kqtj_72", "acceptRequest": "_acceptRequest_1kqtj_76", "btnDownload": "_btnDownload_1kqtj_83" };
1573
- var css4 = `._connectModal_1kqtj_1{gap:12px}._connectModal_1kqtj_1 ._title_1kqtj_4{font-size:18px;font-weight:700;margin-bottom:4px}._connectModal_1kqtj_1 ._closeBtn_1kqtj_9{cursor:pointer;position:absolute;right:16px;top:16px}._connectModal_1kqtj_1 ._backBtn_1kqtj_15{cursor:pointer;left:16px;position:absolute;top:16px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21{border:1px solid #3a3a3a;border-radius:8px;box-sizing:border-box;cursor:pointer;display:flex;padding:8px;width:100%}._connectModal_1kqtj_1 ._walletItem_1kqtj_21:hover{background:hsla(0,0%,100%,.05)}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletIcon_1kqtj_33{border-radius:4px;height:42px;width:42px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletName_1kqtj_38{flex-grow:1;line-height:42px;text-align:center}._connectModal_1kqtj_1 ._connecting_1kqtj_43{align-items:center;display:flex;flex-direction:column;height:204px;justify-content:center;width:100%}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51{position:relative}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54{background:#4b5563;border-radius:50%;bottom:-12px;cursor:pointer;padding:4px;position:absolute;right:-12px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54 ._retryIcon_1kqtj_63{height:24px;width:24px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIcon_1kqtj_51{border-radius:4px;height:60px;width:60px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connection_1kqtj_72{font-size:18px;margin-top:20px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._acceptRequest_1kqtj_76{color:hsla(0,0%,100%,.4);font-size:14px;margin-top:6px;text-align:center;white-space:pre-wrap}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._btnDownload_1kqtj_83{margin-top:20px}`;
1634
+ var digest4 = "9f37532ca7be1b0e97d8b75261330d17b9316635d48e9ec58b471baefd1f674c";
1635
+ var classes4 = { "connectModal": "_connectModal_1tdkv_1", "title": "_title_1tdkv_4", "closeBtn": "_closeBtn_1tdkv_9", "backBtn": "_backBtn_1tdkv_15", "walletItem": "_walletItem_1tdkv_21", "walletIcon": "_walletIcon_1tdkv_41", "walletName": "_walletName_1tdkv_46", "connecting": "_connecting_1tdkv_50", "connectingIconContainer": "_connectingIconContainer_1tdkv_58", "retryContainer": "_retryContainer_1tdkv_61", "retryIcon": "_retryIcon_1tdkv_70", "connectingIcon": "_connectingIcon_1tdkv_58", "connection": "_connection_1tdkv_79", "acceptRequest": "_acceptRequest_1tdkv_83", "btnDownload": "_btnDownload_1tdkv_90" };
1636
+ var css4 = `._connectModal_1tdkv_1{gap:12px}._connectModal_1tdkv_1 ._title_1tdkv_4{font-size:18px;font-weight:700;margin-bottom:16px}._connectModal_1tdkv_1 ._closeBtn_1tdkv_9{cursor:pointer;position:absolute;right:16px;top:16px}._connectModal_1tdkv_1 ._backBtn_1tdkv_15{cursor:pointer;left:16px;position:absolute;top:16px}._connectModal_1tdkv_1 ._walletItem_1tdkv_21{background-color:hsla(0,0%,100%,.05);border:1px solid transparent;border-radius:8px;box-sizing:border-box;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:700;gap:12px;padding:8px 16px;transition:all .15s ease;width:100%}._connectModal_1tdkv_1 ._walletItem_1tdkv_21:hover{background:hsla(0,0%,100%,.08);border-color:#ff7a00;color:#ff7a00}._connectModal_1tdkv_1 ._walletItem_1tdkv_21 ._walletIcon_1tdkv_41{border-radius:8px;height:32px;width:32px}._connectModal_1tdkv_1 ._walletItem_1tdkv_21 ._walletName_1tdkv_46{flex-grow:1;line-height:32px}._connectModal_1tdkv_1 ._connecting_1tdkv_50{align-items:center;display:flex;flex-direction:column;height:204px;justify-content:center;width:100%}._connectModal_1tdkv_1 ._connecting_1tdkv_50 ._connectingIconContainer_1tdkv_58{position:relative}._connectModal_1tdkv_1 ._connecting_1tdkv_50 ._connectingIconContainer_1tdkv_58 ._retryContainer_1tdkv_61{background:#4b5563;border-radius:50%;bottom:-12px;cursor:pointer;padding:4px;position:absolute;right:-12px}._connectModal_1tdkv_1 ._connecting_1tdkv_50 ._connectingIconContainer_1tdkv_58 ._retryContainer_1tdkv_61 ._retryIcon_1tdkv_70{height:24px;width:24px}._connectModal_1tdkv_1 ._connecting_1tdkv_50 ._connectingIcon_1tdkv_58{border-radius:4px;height:60px;width:60px}._connectModal_1tdkv_1 ._connecting_1tdkv_50 ._connection_1tdkv_79{font-size:18px;margin-top:20px}._connectModal_1tdkv_1 ._connecting_1tdkv_50 ._acceptRequest_1tdkv_83{color:hsla(0,0%,100%,.4);font-size:14px;margin-top:6px;text-align:center;white-space:pre-wrap}._connectModal_1tdkv_1 ._connecting_1tdkv_50 ._btnDownload_1tdkv_90{margin-top:20px}`;
1574
1637
  (function() {
1575
1638
  if (typeof document !== "undefined" && !document.getElementById(digest4)) {
1576
1639
  var ele = document.createElement("style");
@@ -2611,6 +2674,7 @@ var ConnectProvider = ({
2611
2674
  setConnectorId,
2612
2675
  connector,
2613
2676
  connectors,
2677
+ connectModalOpen,
2614
2678
  openConnectModal,
2615
2679
  closeConnectModal,
2616
2680
  accounts,
@@ -2696,6 +2760,7 @@ function ComfirmBox({ onClose, status = 1, fromChain = {
2696
2760
  }
2697
2761
 
2698
2762
  // src/core/btcWalletSelectorContext.tsx
2763
+ var import_styles = require("ref-modal-ui/styles.css");
2699
2764
  var import_jsx_runtime12 = require("react/jsx-runtime");
2700
2765
  var WalletSelectorContext = import_react11.default.createContext(null);
2701
2766
  function BtcWalletSelectorContextProvider({
@@ -2773,7 +2838,7 @@ function InitBtcWalletSelectorContext() {
2773
2838
  return null;
2774
2839
  }
2775
2840
  function useBtcWalletSelector() {
2776
- const { openConnectModal, disconnect, requestDirectAccount } = useConnectModal();
2841
+ const { openConnectModal, disconnect, requestDirectAccount, connectModalOpen } = useConnectModal();
2777
2842
  const {
2778
2843
  accounts,
2779
2844
  sendBitcoin: sendBitcoin2,
@@ -2788,7 +2853,6 @@ function useBtcWalletSelector() {
2788
2853
  const signMessageFn = (0, import_react11.useRef)(null);
2789
2854
  const connectorRef = (0, import_react11.useRef)(null);
2790
2855
  const context = (0, import_react11.useContext)(WalletSelectorContext);
2791
- const isLoggingIn = (0, import_react11.useRef)(false);
2792
2856
  (0, import_react11.useEffect)(() => {
2793
2857
  if (provider) {
2794
2858
  getPublicKey().then((res) => {
@@ -2822,12 +2886,13 @@ function useBtcWalletSelector() {
2822
2886
  return {
2823
2887
  login: () => __async(this, null, function* () {
2824
2888
  const account = accounts == null ? void 0 : accounts[0];
2889
+ console.log("account", account);
2890
+ console.log("connecting", connectModalOpen);
2825
2891
  if (!account) {
2826
- if (isLoggingIn.current) {
2892
+ if (connectModalOpen) {
2827
2893
  return null;
2828
2894
  }
2829
2895
  try {
2830
- isLoggingIn.current = true;
2831
2896
  openConnectModal == null ? void 0 : openConnectModal();
2832
2897
  const account1 = yield retryOperation(
2833
2898
  () => window.btcContext.account,
@@ -2841,8 +2906,9 @@ function useBtcWalletSelector() {
2841
2906
  throw new Error("Failed to get account");
2842
2907
  }
2843
2908
  return account1;
2844
- } finally {
2845
- isLoggingIn.current = false;
2909
+ } catch (error) {
2910
+ console.error("btcLoginError", error);
2911
+ context.emit("btcLoginError");
2846
2912
  }
2847
2913
  }
2848
2914
  return account;
@@ -3343,7 +3409,8 @@ function getAccountInfo(_0) {
3343
3409
  },
3344
3410
  { network: config.network }
3345
3411
  ).catch((error) => {
3346
- return void 0;
3412
+ console.log(`get_account error, please try again later`, error);
3413
+ throw error;
3347
3414
  });
3348
3415
  return accountInfo;
3349
3416
  });
@@ -3703,7 +3770,7 @@ function calculateWithdraw(_0) {
3703
3770
  return {
3704
3771
  withdrawFee: 0,
3705
3772
  isError: true,
3706
- errorMsg: "Mini withdraw amount is " + (Number(brgConfig.min_withdraw_amount) + Number(gasLimit))
3773
+ errorMsg: `Mini withdraw amount is ${Number(brgConfig.min_withdraw_amount) + Number(gasLimit)} sats`
3707
3774
  };
3708
3775
  }
3709
3776
  }
@@ -4324,7 +4391,6 @@ function createFloatingButtonWithIframe({
4324
4391
  zIndex: "100000",
4325
4392
  width: "60px",
4326
4393
  height: "60px",
4327
- borderRadius: "50%",
4328
4394
  cursor: "grab",
4329
4395
  transition: "transform 0.15s ease",
4330
4396
  userSelect: "none"
@@ -4830,9 +4896,74 @@ function setupBTCWallet({
4830
4896
  return btcWallet;
4831
4897
  }
4832
4898
 
4899
+ // src/core/setupModal.ts
4900
+ var import_ref_modal_ui = require("ref-modal-ui");
4901
+ function setupWalletSelectorModal(selector, options) {
4902
+ if (!selector)
4903
+ throw new Error("selector is required");
4904
+ const state = selector.store.getState();
4905
+ const group = getGroup(state);
4906
+ const modal = (0, import_ref_modal_ui.setupModal)(selector, options);
4907
+ const originalShow = modal.show.bind(modal);
4908
+ modal.show = () => __async(this, null, function* () {
4909
+ const chain = group.length > 1 ? yield openChainModal() : group[0];
4910
+ if (chain === "btc") {
4911
+ const module2 = state.modules.find((module3) => module3.id === "btc-wallet");
4912
+ if (module2) {
4913
+ const wallet = yield module2.wallet();
4914
+ yield wallet.signIn(options);
4915
+ }
4916
+ } else if (chain === "near") {
4917
+ originalShow();
4918
+ }
4919
+ });
4920
+ return modal;
4921
+ }
4922
+ function openChainModal() {
4923
+ return __async(this, null, function* () {
4924
+ const chains5 = ["btc", "near"];
4925
+ const content = (resolve, close) => {
4926
+ const buttons = `
4927
+ <div class="option-list">${chains5.map(
4928
+ (chain) => `<button class="chain-button option-item" data-chain="${chain}">
4929
+ <img src="https://assets.deltatrade.ai/assets/chain/${chain}.svg" alt="${chain}" style="width:32px; height: 32px;" />
4930
+ ${chain.toUpperCase()}
4931
+ </button>`
4932
+ ).join("")}
4933
+ </div>
4934
+ `;
4935
+ const div = document.createElement("div");
4936
+ div.innerHTML = buttons;
4937
+ const buttonsEl = div.querySelectorAll(".chain-button");
4938
+ buttonsEl.forEach((button) => {
4939
+ button.addEventListener("click", () => {
4940
+ resolve(button.dataset.chain);
4941
+ close();
4942
+ });
4943
+ });
4944
+ return div;
4945
+ };
4946
+ return yield Dialog.openModal({
4947
+ title: "Choose Chain",
4948
+ titleStyle: "font-size: 18px; font-weight: 600; color: #fff; text-align: center;padding-bottom: 10px;",
4949
+ content
4950
+ });
4951
+ });
4952
+ }
4953
+ function getGroup(state) {
4954
+ const hasBtcWallet = state.modules.some((module2) => module2.id === "btc-wallet");
4955
+ const hasNearWallet = state.modules.some((module2) => module2.id !== "btc-wallet");
4956
+ const group = [];
4957
+ if (hasBtcWallet)
4958
+ group.push("btc");
4959
+ if (hasNearWallet)
4960
+ group.push("near");
4961
+ return group;
4962
+ }
4963
+
4833
4964
  // src/index.ts
4834
4965
  var getVersion = () => {
4835
- return "0.5.23-beta";
4966
+ return "0.5.25-beta";
4836
4967
  };
4837
4968
  if (typeof window !== "undefined") {
4838
4969
  window.__BTC_WALLET_VERSION = getVersion();