btc-wallet 0.3.17 → 0.3.18
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/connector/base.d.ts +2 -2
- package/dist/core/btcUtils.d.ts +1 -1
- package/dist/core/btcWalletSelectorContext.d.ts +2 -1
- package/dist/index.js +96 -59
- package/dist/index.js.map +2 -2
- package/esm/index.js +94 -57
- package/esm/index.js.map +2 -2
- package/package.json +1 -1
package/dist/connector/base.d.ts
CHANGED
@@ -11,8 +11,8 @@ export declare abstract class BaseConnector {
|
|
11
11
|
abstract getAccounts(): Promise<string[]>;
|
12
12
|
abstract getPublicKey(): Promise<string>;
|
13
13
|
abstract signMessage(signStr: string, type?: 'ecdsa' | 'bip322-simple'): Promise<string>;
|
14
|
-
abstract on(event: string, handler: (data?:
|
15
|
-
abstract removeListener(event: string, handler: (data?:
|
14
|
+
abstract on(event: string, handler: (data?: any) => void): void;
|
15
|
+
abstract removeListener(event: string, handler: (data?: any) => void): void;
|
16
16
|
[key: string]: any;
|
17
17
|
abstract getProvider(): any;
|
18
18
|
abstract getNetwork(): Promise<'livenet' | 'testnet'>;
|
package/dist/core/btcUtils.d.ts
CHANGED
@@ -9,7 +9,7 @@ export declare function getAccountInfo(csna: string, accountContractId: string):
|
|
9
9
|
gas_token: Record<string, string>;
|
10
10
|
debt_info?: DebtInfo;
|
11
11
|
} | undefined>;
|
12
|
-
export declare function checkGasTokenBalance(csna: string, gasToken: string, isDev: boolean): Promise<void>;
|
12
|
+
export declare function checkGasTokenBalance(csna: string, gasToken: string, minAmount: string, isDev: boolean): Promise<void>;
|
13
13
|
type CheckGasTokenArrearsReturnType<T extends boolean> = T extends true ? void : {
|
14
14
|
receiver_id: string;
|
15
15
|
amount: string;
|
@@ -4,7 +4,7 @@ export declare function BtcWalletSelectorContextProvider({ children, }: {
|
|
4
4
|
autoConnect?: boolean;
|
5
5
|
}): import("react/jsx-runtime").JSX.Element;
|
6
6
|
export declare function useBtcWalletSelector(): {
|
7
|
-
login: () => Promise<string>;
|
7
|
+
login: () => Promise<string | null>;
|
8
8
|
autoConnect: () => Promise<void>;
|
9
9
|
logout: () => void;
|
10
10
|
account: string;
|
@@ -12,6 +12,7 @@ export declare function useBtcWalletSelector(): {
|
|
12
12
|
signMessage: (msg: string) => any;
|
13
13
|
getContext: () => any;
|
14
14
|
getNetwork: () => Promise<"livenet" | "testnet">;
|
15
|
+
switchNetwork: (network: "livenet" | "testnet") => Promise<void>;
|
15
16
|
sendBitcoin: (toAddress: string, satoshis: number, options?: {
|
16
17
|
feeRate: number;
|
17
18
|
}) => Promise<string>;
|
package/dist/index.js
CHANGED
@@ -143,6 +143,7 @@ var InjectedConnector = class extends BaseConnector {
|
|
143
143
|
requestAccounts() {
|
144
144
|
return __async(this, null, function* () {
|
145
145
|
const accounts = yield this.getProviderOrThrow().requestAccounts();
|
146
|
+
console.log("network:", yield this.getNetwork());
|
146
147
|
console.log("\u{1F680} ~ InjectedConnector ~ requestAccounts ~ accounts:", accounts);
|
147
148
|
return accounts;
|
148
149
|
});
|
@@ -504,6 +505,7 @@ var XverseConnector = class extends BaseConnector {
|
|
504
505
|
});
|
505
506
|
}
|
506
507
|
};
|
508
|
+
console.log("\u{1F680} ~ XverseConnector ~ sendBitcoin ~ sendBtcOptions:", sendBtcOptions);
|
507
509
|
sendBtcTransaction(sendBtcOptions).catch((e) => reject(e));
|
508
510
|
});
|
509
511
|
return result;
|
@@ -2490,12 +2492,22 @@ function InitBtcWalletSelectorContext() {
|
|
2490
2492
|
return null;
|
2491
2493
|
}
|
2492
2494
|
function useBtcWalletSelector() {
|
2493
|
-
const { openConnectModal,
|
2494
|
-
const {
|
2495
|
+
const { openConnectModal, disconnect, requestDirectAccount } = useConnectModal();
|
2496
|
+
const {
|
2497
|
+
accounts,
|
2498
|
+
sendBitcoin: sendBitcoin2,
|
2499
|
+
getPublicKey,
|
2500
|
+
provider,
|
2501
|
+
signMessage,
|
2502
|
+
connector,
|
2503
|
+
getNetwork: getNetwork2,
|
2504
|
+
switchNetwork
|
2505
|
+
} = useBTCProvider();
|
2495
2506
|
const publicKey = (0, import_react11.useRef)(null);
|
2496
2507
|
const signMessageFn = (0, import_react11.useRef)(null);
|
2497
2508
|
const connectorRef = (0, import_react11.useRef)(null);
|
2498
2509
|
const context = (0, import_react11.useContext)(WalletSelectorContext);
|
2510
|
+
const isLoggingIn = (0, import_react11.useRef)(false);
|
2499
2511
|
(0, import_react11.useEffect)(() => {
|
2500
2512
|
if (provider) {
|
2501
2513
|
getPublicKey().then((res) => {
|
@@ -2530,7 +2542,27 @@ function useBtcWalletSelector() {
|
|
2530
2542
|
login: () => __async(this, null, function* () {
|
2531
2543
|
const account = accounts == null ? void 0 : accounts[0];
|
2532
2544
|
if (!account) {
|
2533
|
-
|
2545
|
+
if (isLoggingIn.current) {
|
2546
|
+
return null;
|
2547
|
+
}
|
2548
|
+
try {
|
2549
|
+
isLoggingIn.current = true;
|
2550
|
+
openConnectModal == null ? void 0 : openConnectModal();
|
2551
|
+
const account1 = yield retryOperation(
|
2552
|
+
() => window.btcContext.account,
|
2553
|
+
(res) => !!res,
|
2554
|
+
{
|
2555
|
+
maxRetries: 100,
|
2556
|
+
delayMs: 1e3
|
2557
|
+
}
|
2558
|
+
);
|
2559
|
+
if (!account1) {
|
2560
|
+
throw new Error("Failed to get account");
|
2561
|
+
}
|
2562
|
+
return account1;
|
2563
|
+
} finally {
|
2564
|
+
isLoggingIn.current = false;
|
2565
|
+
}
|
2534
2566
|
}
|
2535
2567
|
return account;
|
2536
2568
|
}),
|
@@ -2557,6 +2589,10 @@ function useBtcWalletSelector() {
|
|
2557
2589
|
return context;
|
2558
2590
|
},
|
2559
2591
|
getNetwork: getNetwork2,
|
2592
|
+
switchNetwork: (network) => __async(this, null, function* () {
|
2593
|
+
console.log("switchNetwork:", network);
|
2594
|
+
yield switchNetwork(network);
|
2595
|
+
}),
|
2560
2596
|
sendBitcoin: sendBitcoin2
|
2561
2597
|
};
|
2562
2598
|
}, [
|
@@ -2564,6 +2600,7 @@ function useBtcWalletSelector() {
|
|
2564
2600
|
context,
|
2565
2601
|
disconnect,
|
2566
2602
|
getNetwork2,
|
2603
|
+
switchNetwork,
|
2567
2604
|
openConnectModal,
|
2568
2605
|
requestDirectAccount,
|
2569
2606
|
sendBitcoin2
|
@@ -2576,7 +2613,7 @@ var import_near_api_js2 = require("near-api-js");
|
|
2576
2613
|
var import_transactions = require("@near-js/transactions");
|
2577
2614
|
var import_key_pair = require("near-api-js/lib/utils/key_pair");
|
2578
2615
|
var import_transaction = require("near-api-js/lib/transaction");
|
2579
|
-
var
|
2616
|
+
var import_utils7 = require("@near-js/utils");
|
2580
2617
|
var import_bs58 = __toESM(require("bs58"), 1);
|
2581
2618
|
var import_js_sha256 = require("js-sha256");
|
2582
2619
|
|
@@ -3228,11 +3265,11 @@ function getAccountInfo(csna, accountContractId) {
|
|
3228
3265
|
return accountInfo;
|
3229
3266
|
});
|
3230
3267
|
}
|
3231
|
-
function checkGasTokenBalance(csna, gasToken, isDev) {
|
3268
|
+
function checkGasTokenBalance(csna, gasToken, minAmount, isDev) {
|
3232
3269
|
return __async(this, null, function* () {
|
3233
3270
|
const amount = yield nearCall(gasToken, "ft_balance_of", { account_id: csna });
|
3234
3271
|
console.log("gas token balance:", amount);
|
3235
|
-
if (new import_big.default(amount).
|
3272
|
+
if (new import_big.default(amount).lt(minAmount)) {
|
3236
3273
|
yield Dialog.confirm({
|
3237
3274
|
title: "Gas token balance is insufficient",
|
3238
3275
|
message: "Please deposit gas token to continue, will open bridge website."
|
@@ -3488,7 +3525,6 @@ var state = {
|
|
3488
3525
|
return window.localStorage.getItem("btc-wallet-btc-publickey");
|
3489
3526
|
}
|
3490
3527
|
};
|
3491
|
-
var inter = null;
|
3492
3528
|
var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
3493
3529
|
metadata,
|
3494
3530
|
options,
|
@@ -3511,41 +3547,49 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3511
3547
|
const isDev = (_a = "isDev" in metadata && metadata.isDev) != null ? _a : false;
|
3512
3548
|
const currentConfig = isDev ? walletConfig.dev : walletConfig[options.network.networkId];
|
3513
3549
|
const walletNetwork = isDev ? "dev" : options.network.networkId;
|
3514
|
-
|
3515
|
-
|
3516
|
-
|
3517
|
-
const
|
3518
|
-
|
3519
|
-
|
3520
|
-
|
3521
|
-
|
3522
|
-
|
3523
|
-
|
3524
|
-
|
3525
|
-
|
3526
|
-
|
3527
|
-
|
3528
|
-
|
3529
|
-
|
3530
|
-
|
3531
|
-
|
3532
|
-
|
3533
|
-
|
3534
|
-
emitter.emit("accountsChanged", {
|
3535
|
-
accounts: []
|
3536
|
-
});
|
3537
|
-
}));
|
3538
|
-
context.on("btcLogOut", (e) => __async(void 0, null, function* () {
|
3539
|
-
emitter.emit("accountsChanged", {
|
3540
|
-
accounts: []
|
3541
|
-
});
|
3542
|
-
}));
|
3543
|
-
if ("autoConnect" in metadata && metadata.autoConnect && localStorage.getItem("near-wallet-selector:selectedWalletId") === '"btc-wallet"') {
|
3544
|
-
yield btcContext.autoConnect();
|
3545
|
-
}
|
3546
|
-
clearInterval(inter);
|
3550
|
+
yield initBtcContext();
|
3551
|
+
function setupBtcContextListeners(btcContext) {
|
3552
|
+
return __async(this, null, function* () {
|
3553
|
+
const context = btcContext.getContext();
|
3554
|
+
context.on("updatePublicKey", (btcPublicKey) => __async(this, null, function* () {
|
3555
|
+
const { nearTempAddress } = yield getNearAccountByBtcPublicKey(btcPublicKey);
|
3556
|
+
removeWalletButton();
|
3557
|
+
initConnected(walletNetwork, wallet);
|
3558
|
+
emitter.emit("accountsChanged", {
|
3559
|
+
accounts: [{ accountId: nearTempAddress }]
|
3560
|
+
});
|
3561
|
+
}));
|
3562
|
+
context.on("btcLoginError", () => __async(this, null, function* () {
|
3563
|
+
emitter.emit("accountsChanged", { accounts: [] });
|
3564
|
+
}));
|
3565
|
+
context.on("btcLogOut", () => __async(this, null, function* () {
|
3566
|
+
emitter.emit("accountsChanged", { accounts: [] });
|
3567
|
+
}));
|
3568
|
+
if ("autoConnect" in metadata && metadata.autoConnect && localStorage.getItem("near-wallet-selector:selectedWalletId") === '"btc-wallet"') {
|
3569
|
+
yield btcContext.autoConnect();
|
3547
3570
|
}
|
3548
|
-
})
|
3571
|
+
});
|
3572
|
+
}
|
3573
|
+
function initBtcContext() {
|
3574
|
+
return __async(this, null, function* () {
|
3575
|
+
console.log("initBtcContext");
|
3576
|
+
const btcContext = yield retryOperation(
|
3577
|
+
() => __async(this, null, function* () {
|
3578
|
+
const ctx = window.btcContext;
|
3579
|
+
if (!ctx) {
|
3580
|
+
throw new Error("btcContext not found");
|
3581
|
+
}
|
3582
|
+
return ctx;
|
3583
|
+
}),
|
3584
|
+
(res) => !!res,
|
3585
|
+
{
|
3586
|
+
maxRetries: 10,
|
3587
|
+
delayMs: 500
|
3588
|
+
}
|
3589
|
+
);
|
3590
|
+
yield setupBtcContextListeners(btcContext);
|
3591
|
+
return btcContext;
|
3592
|
+
});
|
3549
3593
|
}
|
3550
3594
|
function nearCall2(contractId, methodName, args) {
|
3551
3595
|
return __async(this, null, function* () {
|
@@ -3575,28 +3619,20 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3575
3619
|
}
|
3576
3620
|
function signIn(_02) {
|
3577
3621
|
return __async(this, arguments, function* ({ contractId, methodNames }) {
|
3622
|
+
const btcContext = window.btcContext;
|
3578
3623
|
const accountId = state.getAccount();
|
3579
3624
|
const publicKey = state.getPublicKey();
|
3580
|
-
|
3581
|
-
|
3582
|
-
|
3583
|
-
return [
|
3584
|
-
{
|
3585
|
-
accountId,
|
3586
|
-
publicKey
|
3587
|
-
}
|
3588
|
-
];
|
3625
|
+
console.log("isLogin:", accountId && publicKey);
|
3626
|
+
if (!accountId || !publicKey) {
|
3627
|
+
yield btcContext.login();
|
3589
3628
|
}
|
3590
|
-
yield btcContext.
|
3591
|
-
const btcPublicKey = yield retryOperation(btcContext.getPublicKey, (res) => !!res, {
|
3592
|
-
maxRetries: 40,
|
3593
|
-
delayMs: 3e3
|
3594
|
-
});
|
3629
|
+
const btcPublicKey = yield btcContext.getPublicKey();
|
3595
3630
|
console.log("btcPublicKey:", btcPublicKey);
|
3596
3631
|
if (!btcPublicKey) {
|
3597
3632
|
throw new Error("No connected BTC wallet, please connect your BTC wallet first.");
|
3598
3633
|
}
|
3599
3634
|
const { nearTempAddress, nearTempPublicKey } = yield getNearAccountByBtcPublicKey(btcPublicKey);
|
3635
|
+
initConnected(walletNetwork, wallet);
|
3600
3636
|
return [
|
3601
3637
|
{
|
3602
3638
|
accountId: nearTempAddress,
|
@@ -3615,6 +3651,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3615
3651
|
const btcContext = window.btcContext;
|
3616
3652
|
if (metadata.syncLogOut) {
|
3617
3653
|
btcContext.logout();
|
3654
|
+
yield delay(300);
|
3618
3655
|
}
|
3619
3656
|
state.clear();
|
3620
3657
|
window.localStorage.removeItem("near-wallet-selector:selectedWalletId");
|
@@ -3652,7 +3689,6 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3652
3689
|
const btcContext = window.btcContext;
|
3653
3690
|
const accountId = state.getAccount();
|
3654
3691
|
const accountInfo = yield getAccountInfo(accountId, currentConfig.accountContractId);
|
3655
|
-
yield checkGasTokenBalance(accountId, currentConfig.token, isDev);
|
3656
3692
|
yield checkGasTokenArrears(accountInfo == null ? void 0 : accountInfo.debt_info, isDev, true);
|
3657
3693
|
const trans = [...params.transactions];
|
3658
3694
|
console.log("raw trans:", trans);
|
@@ -3664,6 +3700,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3664
3700
|
console.log("transferGasTransaction:", transferGasTransaction);
|
3665
3701
|
console.log("useNearPayGas:", useNearPayGas);
|
3666
3702
|
console.log("gasLimit:", gasLimit);
|
3703
|
+
yield checkGasTokenBalance(accountId, currentConfig.token, gasLimit, isDev);
|
3667
3704
|
if (transferGasTransaction) {
|
3668
3705
|
trans.unshift(transferGasTransaction);
|
3669
3706
|
}
|
@@ -3844,7 +3881,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3844
3881
|
transaction.receiverId,
|
3845
3882
|
BigInt(nearNonceNumber) + BigInt(index),
|
3846
3883
|
newActions,
|
3847
|
-
(0,
|
3884
|
+
(0, import_utils7.baseDecode)(header.hash)
|
3848
3885
|
);
|
3849
3886
|
const txBytes = (0, import_transaction.encodeTransaction)(_transaction);
|
3850
3887
|
const txHex = Array.from(txBytes, (byte) => ("0" + (byte & 255).toString(16)).slice(-2)).join(
|
@@ -3854,7 +3891,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3854
3891
|
return { txBytes, txHex, hash };
|
3855
3892
|
});
|
3856
3893
|
}
|
3857
|
-
function
|
3894
|
+
function initConnected(network, wallet2) {
|
3858
3895
|
return __async(this, null, function* () {
|
3859
3896
|
const checkAndSetupWalletButton = () => {
|
3860
3897
|
const accountId = state.getAccount();
|
@@ -3913,7 +3950,7 @@ function setupBTCWallet({
|
|
3913
3950
|
|
3914
3951
|
// src/index.ts
|
3915
3952
|
var getVersion = () => {
|
3916
|
-
return "0.3.
|
3953
|
+
return "0.3.18";
|
3917
3954
|
};
|
3918
3955
|
if (typeof window !== "undefined") {
|
3919
3956
|
window.__BTC_WALLET_VERSION = getVersion();
|