btc-wallet 0.3.17 → 0.3.19
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 +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();
|