btc-wallet 0.3.17 → 0.3.19
Sign up to get free protection for your applications and to get access to all the features.
- 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 +136 -84
- package/dist/index.js.map +3 -3
- package/esm/index.js +134 -82
- package/esm/index.js.map +3 -3
- 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
|
});
|
@@ -328,7 +329,7 @@ var _network, _event;
|
|
328
329
|
var XverseConnector = class extends BaseConnector {
|
329
330
|
constructor() {
|
330
331
|
super();
|
331
|
-
__privateAdd(this, _network, "
|
332
|
+
__privateAdd(this, _network, "Mainnet");
|
332
333
|
__privateAdd(this, _event, new import_events.default());
|
333
334
|
this.metadata = {
|
334
335
|
id: "xverse",
|
@@ -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,16 +2589,18 @@ function useBtcWalletSelector() {
|
|
2557
2589
|
return context;
|
2558
2590
|
},
|
2559
2591
|
getNetwork: getNetwork2,
|
2592
|
+
switchNetwork,
|
2560
2593
|
sendBitcoin: sendBitcoin2
|
2561
2594
|
};
|
2562
2595
|
}, [
|
2563
2596
|
accounts,
|
2564
|
-
context,
|
2565
|
-
disconnect,
|
2566
2597
|
getNetwork2,
|
2598
|
+
switchNetwork,
|
2599
|
+
sendBitcoin2,
|
2567
2600
|
openConnectModal,
|
2568
2601
|
requestDirectAccount,
|
2569
|
-
|
2602
|
+
context,
|
2603
|
+
disconnect
|
2570
2604
|
]);
|
2571
2605
|
return hook;
|
2572
2606
|
}
|
@@ -2576,7 +2610,7 @@ var import_near_api_js2 = require("near-api-js");
|
|
2576
2610
|
var import_transactions = require("@near-js/transactions");
|
2577
2611
|
var import_key_pair = require("near-api-js/lib/utils/key_pair");
|
2578
2612
|
var import_transaction = require("near-api-js/lib/transaction");
|
2579
|
-
var
|
2613
|
+
var import_utils7 = require("@near-js/utils");
|
2580
2614
|
var import_bs58 = __toESM(require("bs58"), 1);
|
2581
2615
|
var import_js_sha256 = require("js-sha256");
|
2582
2616
|
|
@@ -3228,11 +3262,11 @@ function getAccountInfo(csna, accountContractId) {
|
|
3228
3262
|
return accountInfo;
|
3229
3263
|
});
|
3230
3264
|
}
|
3231
|
-
function checkGasTokenBalance(csna, gasToken, isDev) {
|
3265
|
+
function checkGasTokenBalance(csna, gasToken, minAmount, isDev) {
|
3232
3266
|
return __async(this, null, function* () {
|
3233
3267
|
const amount = yield nearCall(gasToken, "ft_balance_of", { account_id: csna });
|
3234
3268
|
console.log("gas token balance:", amount);
|
3235
|
-
if (new import_big.default(amount).
|
3269
|
+
if (new import_big.default(amount).lt(minAmount)) {
|
3236
3270
|
yield Dialog.confirm({
|
3237
3271
|
title: "Gas token balance is insufficient",
|
3238
3272
|
message: "Please deposit gas token to continue, will open bridge website."
|
@@ -3488,7 +3522,6 @@ var state = {
|
|
3488
3522
|
return window.localStorage.getItem("btc-wallet-btc-publickey");
|
3489
3523
|
}
|
3490
3524
|
};
|
3491
|
-
var inter = null;
|
3492
3525
|
var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
3493
3526
|
metadata,
|
3494
3527
|
options,
|
@@ -3505,47 +3538,74 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3505
3538
|
getAccounts,
|
3506
3539
|
verifyOwner,
|
3507
3540
|
signMessage,
|
3541
|
+
isSignedIn,
|
3508
3542
|
signAndSendTransaction,
|
3509
3543
|
signAndSendTransactions
|
3510
3544
|
};
|
3511
3545
|
const isDev = (_a = "isDev" in metadata && metadata.isDev) != null ? _a : false;
|
3512
3546
|
const currentConfig = isDev ? walletConfig.dev : walletConfig[options.network.networkId];
|
3513
3547
|
const walletNetwork = isDev ? "dev" : options.network.networkId;
|
3514
|
-
|
3515
|
-
|
3516
|
-
|
3517
|
-
const
|
3518
|
-
|
3519
|
-
|
3520
|
-
const
|
3521
|
-
|
3522
|
-
|
3548
|
+
yield initBtcContext();
|
3549
|
+
function setupBtcContextListeners() {
|
3550
|
+
return __async(this, null, function* () {
|
3551
|
+
const handleConnectionUpdate = () => __async(this, null, function* () {
|
3552
|
+
yield checkBtcNetwork(walletNetwork);
|
3553
|
+
const accountId = state.getAccount();
|
3554
|
+
const btcContext = window.btcContext;
|
3555
|
+
if (accountId && btcContext.account) {
|
3556
|
+
setupWalletButton(walletNetwork, wallet, btcContext);
|
3557
|
+
} else {
|
3523
3558
|
removeWalletButton();
|
3524
|
-
|
3525
|
-
|
3526
|
-
|
3527
|
-
{
|
3528
|
-
accountId: nearTempAddress
|
3529
|
-
}
|
3530
|
-
]
|
3531
|
-
});
|
3532
|
-
}));
|
3533
|
-
context.on("btcLoginError", (e) => __async(void 0, null, function* () {
|
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();
|
3559
|
+
setTimeout(() => {
|
3560
|
+
handleConnectionUpdate();
|
3561
|
+
}, 5e3);
|
3545
3562
|
}
|
3546
|
-
|
3563
|
+
});
|
3564
|
+
const context = window.btcContext.getContext();
|
3565
|
+
context.on("updatePublicKey", (btcPublicKey) => __async(this, null, function* () {
|
3566
|
+
console.log("updatePublicKey");
|
3567
|
+
const { nearAddress } = yield getNearAccountByBtcPublicKey(btcPublicKey);
|
3568
|
+
emitter.emit("accountsChanged", {
|
3569
|
+
accounts: [{ accountId: nearAddress }]
|
3570
|
+
});
|
3571
|
+
yield handleConnectionUpdate();
|
3572
|
+
}));
|
3573
|
+
context.on("btcLoginError", () => __async(this, null, function* () {
|
3574
|
+
console.log("btcLoginError");
|
3575
|
+
emitter.emit("accountsChanged", { accounts: [] });
|
3576
|
+
yield handleConnectionUpdate();
|
3577
|
+
}));
|
3578
|
+
context.on("btcLogOut", () => __async(this, null, function* () {
|
3579
|
+
console.log("btcLogOut");
|
3580
|
+
emitter.emit("accountsChanged", { accounts: [] });
|
3581
|
+
yield handleConnectionUpdate();
|
3582
|
+
}));
|
3583
|
+
yield handleConnectionUpdate();
|
3584
|
+
if ("autoConnect" in metadata && metadata.autoConnect && localStorage.getItem("near-wallet-selector:selectedWalletId") === '"btc-wallet"') {
|
3585
|
+
yield window.btcContext.autoConnect();
|
3547
3586
|
}
|
3548
|
-
})
|
3587
|
+
});
|
3588
|
+
}
|
3589
|
+
function initBtcContext() {
|
3590
|
+
return __async(this, null, function* () {
|
3591
|
+
console.log("initBtcContext");
|
3592
|
+
const btcContext = yield retryOperation(
|
3593
|
+
() => __async(this, null, function* () {
|
3594
|
+
const ctx = window.btcContext;
|
3595
|
+
if (!ctx) {
|
3596
|
+
throw new Error("btcContext not found");
|
3597
|
+
}
|
3598
|
+
return ctx;
|
3599
|
+
}),
|
3600
|
+
(res) => !!res,
|
3601
|
+
{
|
3602
|
+
maxRetries: 10,
|
3603
|
+
delayMs: 500
|
3604
|
+
}
|
3605
|
+
);
|
3606
|
+
yield setupBtcContextListeners();
|
3607
|
+
return btcContext;
|
3608
|
+
});
|
3549
3609
|
}
|
3550
3610
|
function nearCall2(contractId, methodName, args) {
|
3551
3611
|
return __async(this, null, function* () {
|
@@ -3554,53 +3614,44 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3554
3614
|
}
|
3555
3615
|
function getNearAccountByBtcPublicKey(btcPublicKey) {
|
3556
3616
|
return __async(this, null, function* () {
|
3557
|
-
const
|
3617
|
+
const nearAddress = yield nearCall2(
|
3558
3618
|
currentConfig.accountContractId,
|
3559
3619
|
"get_chain_signature_near_account_id",
|
3560
3620
|
{ btc_public_key: btcPublicKey }
|
3561
3621
|
);
|
3562
|
-
const
|
3622
|
+
const nearPublicKey = yield nearCall2(
|
3563
3623
|
currentConfig.accountContractId,
|
3564
3624
|
"get_chain_signature_near_account_public_key",
|
3565
3625
|
{ btc_public_key: btcPublicKey }
|
3566
3626
|
);
|
3567
|
-
state.saveAccount(
|
3568
|
-
state.savePublicKey(
|
3627
|
+
state.saveAccount(nearAddress);
|
3628
|
+
state.savePublicKey(nearPublicKey);
|
3569
3629
|
state.saveBtcPublicKey(btcPublicKey);
|
3570
3630
|
return {
|
3571
|
-
|
3572
|
-
|
3631
|
+
nearAddress,
|
3632
|
+
nearPublicKey
|
3573
3633
|
};
|
3574
3634
|
});
|
3575
3635
|
}
|
3576
3636
|
function signIn(_02) {
|
3577
3637
|
return __async(this, arguments, function* ({ contractId, methodNames }) {
|
3638
|
+
const btcContext = window.btcContext;
|
3578
3639
|
const accountId = state.getAccount();
|
3579
3640
|
const publicKey = state.getPublicKey();
|
3580
|
-
|
3581
|
-
|
3582
|
-
|
3583
|
-
return [
|
3584
|
-
{
|
3585
|
-
accountId,
|
3586
|
-
publicKey
|
3587
|
-
}
|
3588
|
-
];
|
3641
|
+
console.log("isLogin:", accountId && publicKey);
|
3642
|
+
if (!accountId || !publicKey) {
|
3643
|
+
yield btcContext.login();
|
3589
3644
|
}
|
3590
|
-
yield btcContext.
|
3591
|
-
const btcPublicKey = yield retryOperation(btcContext.getPublicKey, (res) => !!res, {
|
3592
|
-
maxRetries: 40,
|
3593
|
-
delayMs: 3e3
|
3594
|
-
});
|
3645
|
+
const btcPublicKey = yield btcContext.getPublicKey();
|
3595
3646
|
console.log("btcPublicKey:", btcPublicKey);
|
3596
3647
|
if (!btcPublicKey) {
|
3597
3648
|
throw new Error("No connected BTC wallet, please connect your BTC wallet first.");
|
3598
3649
|
}
|
3599
|
-
const {
|
3650
|
+
const { nearAddress, nearPublicKey } = yield getNearAccountByBtcPublicKey(btcPublicKey);
|
3600
3651
|
return [
|
3601
3652
|
{
|
3602
|
-
accountId:
|
3603
|
-
publicKey:
|
3653
|
+
accountId: nearAddress,
|
3654
|
+
publicKey: nearPublicKey
|
3604
3655
|
}
|
3605
3656
|
];
|
3606
3657
|
});
|
@@ -3621,6 +3672,11 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3621
3672
|
removeWalletButton();
|
3622
3673
|
});
|
3623
3674
|
}
|
3675
|
+
function isSignedIn() {
|
3676
|
+
const accountId = state.getAccount();
|
3677
|
+
const publicKey = state.getPublicKey();
|
3678
|
+
return accountId && publicKey;
|
3679
|
+
}
|
3624
3680
|
function getAccounts() {
|
3625
3681
|
return __async(this, null, function* () {
|
3626
3682
|
return [{ accountId: state.getAccount() }];
|
@@ -3652,7 +3708,6 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3652
3708
|
const btcContext = window.btcContext;
|
3653
3709
|
const accountId = state.getAccount();
|
3654
3710
|
const accountInfo = yield getAccountInfo(accountId, currentConfig.accountContractId);
|
3655
|
-
yield checkGasTokenBalance(accountId, currentConfig.token, isDev);
|
3656
3711
|
yield checkGasTokenArrears(accountInfo == null ? void 0 : accountInfo.debt_info, isDev, true);
|
3657
3712
|
const trans = [...params.transactions];
|
3658
3713
|
console.log("raw trans:", trans);
|
@@ -3664,6 +3719,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3664
3719
|
console.log("transferGasTransaction:", transferGasTransaction);
|
3665
3720
|
console.log("useNearPayGas:", useNearPayGas);
|
3666
3721
|
console.log("gasLimit:", gasLimit);
|
3722
|
+
yield checkGasTokenBalance(accountId, currentConfig.token, gasLimit, isDev);
|
3667
3723
|
if (transferGasTransaction) {
|
3668
3724
|
trans.unshift(transferGasTransaction);
|
3669
3725
|
}
|
@@ -3844,7 +3900,7 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3844
3900
|
transaction.receiverId,
|
3845
3901
|
BigInt(nearNonceNumber) + BigInt(index),
|
3846
3902
|
newActions,
|
3847
|
-
(0,
|
3903
|
+
(0, import_utils7.baseDecode)(header.hash)
|
3848
3904
|
);
|
3849
3905
|
const txBytes = (0, import_transaction.encodeTransaction)(_transaction);
|
3850
3906
|
const txHex = Array.from(txBytes, (byte) => ("0" + (byte & 255).toString(16)).slice(-2)).join(
|
@@ -3854,22 +3910,18 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
3854
3910
|
return { txBytes, txHex, hash };
|
3855
3911
|
});
|
3856
3912
|
}
|
3857
|
-
function
|
3913
|
+
function checkBtcNetwork(network) {
|
3858
3914
|
return __async(this, null, function* () {
|
3859
|
-
const
|
3860
|
-
|
3861
|
-
|
3862
|
-
|
3863
|
-
|
3864
|
-
|
3865
|
-
|
3866
|
-
|
3867
|
-
|
3868
|
-
|
3869
|
-
}
|
3870
|
-
};
|
3871
|
-
yield delay(1e3);
|
3872
|
-
checkAndSetupWalletButton();
|
3915
|
+
const btcContext = window.btcContext;
|
3916
|
+
if (!btcContext.account)
|
3917
|
+
return;
|
3918
|
+
const btcNetwork = yield btcContext.getNetwork();
|
3919
|
+
console.log("btcNetwork:", btcNetwork, network);
|
3920
|
+
if (network === "mainnet" && btcNetwork !== "livenet") {
|
3921
|
+
yield btcContext.switchNetwork("livenet");
|
3922
|
+
} else if (network === "testnet" && btcNetwork !== "testnet") {
|
3923
|
+
yield btcContext.switchNetwork("testnet");
|
3924
|
+
}
|
3873
3925
|
});
|
3874
3926
|
}
|
3875
3927
|
return wallet;
|
@@ -3913,7 +3965,7 @@ function setupBTCWallet({
|
|
3913
3965
|
|
3914
3966
|
// src/index.ts
|
3915
3967
|
var getVersion = () => {
|
3916
|
-
return "0.3.
|
3968
|
+
return "0.3.19";
|
3917
3969
|
};
|
3918
3970
|
if (typeof window !== "undefined") {
|
3919
3971
|
window.__BTC_WALLET_VERSION = getVersion();
|