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 +7 -2
- package/dist/context/index.d.ts +1 -0
- package/dist/core/btcWalletSelectorContext.d.ts +1 -0
- package/dist/core/setupModal.d.ts +5 -0
- package/dist/hooks/useConnectModal.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +150 -19
- package/dist/index.js.map +4 -4
- package/dist/utils/Dialog.d.ts +5 -0
- package/dist/utils/satoshi.d.ts +1 -1
- package/esm/index.js +152 -19
- package/esm/index.js.map +4 -4
- package/package.json +3 -2
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.
|
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() {
|
package/dist/context/index.d.ts
CHANGED
@@ -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;
|
package/dist/index.d.ts
CHANGED
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: #
|
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 = "
|
1527
|
-
var classes3 = { "container": "
|
1528
|
-
var css3 = `.
|
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 = "
|
1572
|
-
var classes4 = { "connectModal": "
|
1573
|
-
var css4 = `.
|
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 (
|
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
|
-
}
|
2845
|
-
|
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
|
-
|
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:
|
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.
|
4966
|
+
return "0.5.25-beta";
|
4836
4967
|
};
|
4837
4968
|
if (typeof window !== "undefined") {
|
4838
4969
|
window.__BTC_WALLET_VERSION = getVersion();
|