btc-wallet 0.5.2-beta → 0.5.4-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/dist/core/btcUtils.d.ts +8 -0
- package/dist/index.js +286 -243
- package/dist/index.js.map +4 -4
- package/esm/index.js +286 -243
- package/esm/index.js.map +4 -4
- package/package.json +1 -1
package/esm/index.js
CHANGED
@@ -2902,231 +2902,8 @@ var btcRpcUrls = {
|
|
2902
2902
|
testnet: "https://mempool.space/testnet/api"
|
2903
2903
|
};
|
2904
2904
|
|
2905
|
-
// src/
|
2906
|
-
|
2907
|
-
console.log("setupWalletButton");
|
2908
|
-
if (document.getElementById("satoshi-wallet-button")) {
|
2909
|
-
return;
|
2910
|
-
}
|
2911
|
-
const iframe = createIframe({
|
2912
|
-
iframeUrl: walletConfig[env].walletUrl,
|
2913
|
-
iframeStyle: { width: "400px", height: "650px" }
|
2914
|
-
});
|
2915
|
-
iframe.addEventListener("mouseenter", () => {
|
2916
|
-
var _a;
|
2917
|
-
if (document.activeElement !== iframe) {
|
2918
|
-
(_a = document.activeElement) == null ? void 0 : _a.setAttribute("tabindex", "null");
|
2919
|
-
setTimeout(() => {
|
2920
|
-
iframe.focus();
|
2921
|
-
}, 0);
|
2922
|
-
}
|
2923
|
-
});
|
2924
|
-
const button = createFloatingButtonWithIframe({
|
2925
|
-
openImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn.png",
|
2926
|
-
closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
|
2927
|
-
iframe
|
2928
|
-
});
|
2929
|
-
setupButtonClickHandler(button, iframe, wallet, originalWallet);
|
2930
|
-
}
|
2931
|
-
function createFloatingButtonWithIframe({
|
2932
|
-
openImageUrl,
|
2933
|
-
closeImageUrl,
|
2934
|
-
iframe
|
2935
|
-
}) {
|
2936
|
-
const button = document.createElement("img");
|
2937
|
-
button.id = "satoshi-wallet-button";
|
2938
|
-
const isIframeVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
|
2939
|
-
button.src = isIframeVisible ? closeImageUrl : openImageUrl;
|
2940
|
-
iframe.style.display = isIframeVisible ? "block" : "none";
|
2941
|
-
const windowWidth = window.innerWidth;
|
2942
|
-
const windowHeight = window.innerHeight;
|
2943
|
-
const savedPosition = JSON.parse(
|
2944
|
-
localStorage.getItem("btc-wallet-button-position") || '{"right": "20px", "bottom": "20px"}'
|
2945
|
-
);
|
2946
|
-
const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);
|
2947
|
-
const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);
|
2948
|
-
Object.assign(button.style, {
|
2949
|
-
position: "fixed",
|
2950
|
-
bottom: `${bottom}px`,
|
2951
|
-
right: `${right}px`,
|
2952
|
-
zIndex: "100000",
|
2953
|
-
width: "60px",
|
2954
|
-
height: "60px",
|
2955
|
-
borderRadius: "50%",
|
2956
|
-
cursor: "grab",
|
2957
|
-
transition: "transform 0.15s ease",
|
2958
|
-
userSelect: "none"
|
2959
|
-
});
|
2960
|
-
document.body.appendChild(button);
|
2961
|
-
updateIframePosition(iframe, right, bottom, windowWidth, windowHeight);
|
2962
|
-
let isDragging = false;
|
2963
|
-
let startX = 0;
|
2964
|
-
let startY = 0;
|
2965
|
-
let initialRight = 0;
|
2966
|
-
let initialBottom = 0;
|
2967
|
-
let dragStartTime = 0;
|
2968
|
-
button.addEventListener("mousedown", (e) => {
|
2969
|
-
isDragging = true;
|
2970
|
-
startX = e.clientX;
|
2971
|
-
startY = e.clientY;
|
2972
|
-
initialRight = parseInt(button.style.right);
|
2973
|
-
initialBottom = parseInt(button.style.bottom);
|
2974
|
-
dragStartTime = Date.now();
|
2975
|
-
button.style.cursor = "grabbing";
|
2976
|
-
button.style.transition = "none";
|
2977
|
-
e.preventDefault();
|
2978
|
-
});
|
2979
|
-
document.addEventListener("mousemove", (e) => {
|
2980
|
-
if (!isDragging)
|
2981
|
-
return;
|
2982
|
-
const deltaX = startX - e.clientX;
|
2983
|
-
const deltaY = startY - e.clientY;
|
2984
|
-
let newRight = initialRight + deltaX;
|
2985
|
-
let newBottom = initialBottom + deltaY;
|
2986
|
-
newRight = Math.min(Math.max(20, newRight), windowWidth - 80);
|
2987
|
-
newBottom = Math.min(Math.max(20, newBottom), windowHeight - 80);
|
2988
|
-
const snapThreshold = 20;
|
2989
|
-
const buttonLeft = windowWidth - newRight - 60;
|
2990
|
-
if (buttonLeft < snapThreshold) {
|
2991
|
-
newRight = windowWidth - 80;
|
2992
|
-
} else if (buttonLeft > windowWidth - snapThreshold - 60) {
|
2993
|
-
newRight = 20;
|
2994
|
-
}
|
2995
|
-
if (newBottom < snapThreshold) {
|
2996
|
-
newBottom = 20;
|
2997
|
-
} else if (newBottom > windowHeight - snapThreshold - 60) {
|
2998
|
-
newBottom = windowHeight - 80;
|
2999
|
-
}
|
3000
|
-
button.style.right = `${newRight}px`;
|
3001
|
-
button.style.bottom = `${newBottom}px`;
|
3002
|
-
updateIframePosition(iframe, newRight, newBottom, windowWidth, windowHeight);
|
3003
|
-
});
|
3004
|
-
document.addEventListener("mouseup", () => {
|
3005
|
-
if (!isDragging)
|
3006
|
-
return;
|
3007
|
-
const dragEndTime = Date.now();
|
3008
|
-
const isDragEvent = dragEndTime - dragStartTime > 200;
|
3009
|
-
isDragging = false;
|
3010
|
-
button.style.cursor = "grab";
|
3011
|
-
button.style.transition = "transform 0.15s ease";
|
3012
|
-
localStorage.setItem(
|
3013
|
-
"btc-wallet-button-position",
|
3014
|
-
JSON.stringify({
|
3015
|
-
right: button.style.right,
|
3016
|
-
bottom: button.style.bottom
|
3017
|
-
})
|
3018
|
-
);
|
3019
|
-
if (!isDragEvent) {
|
3020
|
-
handleButtonClick();
|
3021
|
-
}
|
3022
|
-
});
|
3023
|
-
const handleButtonClick = () => {
|
3024
|
-
const isCurrentlyVisible = iframe.style.display === "block";
|
3025
|
-
button.style.transform = "scale(0.8)";
|
3026
|
-
setTimeout(() => {
|
3027
|
-
button.style.transform = "scale(1)";
|
3028
|
-
}, 150);
|
3029
|
-
const newVisibleState = !isCurrentlyVisible;
|
3030
|
-
iframe.style.display = newVisibleState ? "block" : "none";
|
3031
|
-
button.src = newVisibleState ? closeImageUrl : openImageUrl;
|
3032
|
-
localStorage.setItem("btc-wallet-iframe-visible", String(newVisibleState));
|
3033
|
-
setTimeout(() => {
|
3034
|
-
if (newVisibleState) {
|
3035
|
-
iframe.focus();
|
3036
|
-
}
|
3037
|
-
}, 0);
|
3038
|
-
};
|
3039
|
-
button.onclick = null;
|
3040
|
-
return button;
|
3041
|
-
}
|
3042
|
-
function createIframe({
|
3043
|
-
iframeUrl,
|
3044
|
-
iframeStyle = {}
|
3045
|
-
}) {
|
3046
|
-
const iframe = document.createElement("iframe");
|
3047
|
-
iframe.id = "satoshi-wallet-iframe";
|
3048
|
-
iframe.allow = "clipboard-read; clipboard-write";
|
3049
|
-
iframe.src = iframeUrl;
|
3050
|
-
const isVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
|
3051
|
-
Object.assign(iframe.style, __spreadValues({
|
3052
|
-
position: "fixed",
|
3053
|
-
bottom: "90px",
|
3054
|
-
right: "20px",
|
3055
|
-
zIndex: "100000",
|
3056
|
-
boxShadow: "0 0 10px rgba(0, 0, 0, 0.1)",
|
3057
|
-
borderRadius: "10px",
|
3058
|
-
display: isVisible ? "block" : "none",
|
3059
|
-
border: "none"
|
3060
|
-
}, iframeStyle));
|
3061
|
-
document.body.appendChild(iframe);
|
3062
|
-
return iframe;
|
3063
|
-
}
|
3064
|
-
function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
|
3065
|
-
return __async(this, null, function* () {
|
3066
|
-
var _a;
|
3067
|
-
const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
|
3068
|
-
const originalAccountId = originalWallet.account;
|
3069
|
-
const originalPublicKey = yield originalWallet.getPublicKey();
|
3070
|
-
console.log({ accountId, originalAccountId, originalPublicKey });
|
3071
|
-
const iframeSrc = new URL(iframe.src);
|
3072
|
-
iframeSrc.searchParams.set("origin", window.location.origin);
|
3073
|
-
accountId && iframeSrc.searchParams.set("accountId", accountId);
|
3074
|
-
originalAccountId && iframeSrc.searchParams.set("originalAccountId", originalAccountId);
|
3075
|
-
originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
|
3076
|
-
iframe.src = iframeSrc.toString();
|
3077
|
-
window.addEventListener("message", (event) => __async(this, null, function* () {
|
3078
|
-
var _a2, _b;
|
3079
|
-
if (event.origin !== iframeSrc.origin)
|
3080
|
-
return;
|
3081
|
-
const { action, requestId, data } = event.data;
|
3082
|
-
if (action === "signAndSendTransaction") {
|
3083
|
-
console.log("signAndSendTransaction message", event.data);
|
3084
|
-
try {
|
3085
|
-
const result = yield wallet.signAndSendTransaction(data);
|
3086
|
-
console.log("signAndSendTransaction result", result);
|
3087
|
-
(_a2 = event.source) == null ? void 0 : _a2.postMessage(
|
3088
|
-
{
|
3089
|
-
requestId,
|
3090
|
-
data,
|
3091
|
-
success: true
|
3092
|
-
},
|
3093
|
-
{ targetOrigin: event.origin }
|
3094
|
-
);
|
3095
|
-
} catch (error) {
|
3096
|
-
console.error("signAndSendTransaction error", error);
|
3097
|
-
(_b = event.source) == null ? void 0 : _b.postMessage(
|
3098
|
-
{
|
3099
|
-
requestId,
|
3100
|
-
error: error.message,
|
3101
|
-
success: false
|
3102
|
-
},
|
3103
|
-
{ targetOrigin: event.origin }
|
3104
|
-
);
|
3105
|
-
}
|
3106
|
-
}
|
3107
|
-
}));
|
3108
|
-
});
|
3109
|
-
}
|
3110
|
-
function removeWalletButton() {
|
3111
|
-
const button = document.getElementById("satoshi-wallet-button");
|
3112
|
-
button == null ? void 0 : button.remove();
|
3113
|
-
const iframe = document.getElementById("satoshi-wallet-iframe");
|
3114
|
-
iframe == null ? void 0 : iframe.remove();
|
3115
|
-
}
|
3116
|
-
function updateIframePosition(iframe, buttonRight, buttonBottom, windowWidth, windowHeight) {
|
3117
|
-
const iframeWidth = parseInt(iframe.style.width);
|
3118
|
-
const iframeHeight = parseInt(iframe.style.height);
|
3119
|
-
let iframeRight = buttonRight;
|
3120
|
-
let iframeBottom = buttonBottom + 70;
|
3121
|
-
if (iframeRight + iframeWidth > windowWidth - 20) {
|
3122
|
-
iframeRight = Math.max(20, windowWidth - iframeWidth - 20);
|
3123
|
-
}
|
3124
|
-
if (iframeBottom + iframeHeight > windowHeight - 20) {
|
3125
|
-
iframeBottom = Math.max(20, buttonBottom - iframeHeight - 10);
|
3126
|
-
}
|
3127
|
-
iframe.style.right = `${iframeRight}px`;
|
3128
|
-
iframe.style.bottom = `${iframeBottom}px`;
|
3129
|
-
}
|
2905
|
+
// src/core/btcUtils.ts
|
2906
|
+
import Big from "big.js";
|
3130
2907
|
|
3131
2908
|
// src/utils/nearUtils.ts
|
3132
2909
|
import { providers } from "near-api-js";
|
@@ -3190,12 +2967,6 @@ function pollTransactionStatuses(network, hashes) {
|
|
3190
2967
|
});
|
3191
2968
|
}
|
3192
2969
|
|
3193
|
-
// src/core/setupBTCWallet.ts
|
3194
|
-
import Big2 from "big.js";
|
3195
|
-
|
3196
|
-
// src/core/btcUtils.ts
|
3197
|
-
import Big from "big.js";
|
3198
|
-
|
3199
2970
|
// src/utils/request.ts
|
3200
2971
|
var cache = /* @__PURE__ */ new Map();
|
3201
2972
|
var defaultCacheTimeout = 3e3;
|
@@ -3398,11 +3169,10 @@ var NBTC_STORAGE_DEPOSIT_AMOUNT = "3000";
|
|
3398
3169
|
var GAS_LIMIT = "50000000000000";
|
3399
3170
|
var NEW_ACCOUNT_MIN_DEPOSIT_AMOUNT = "1000";
|
3400
3171
|
function getBtcProvider() {
|
3401
|
-
|
3402
|
-
if (typeof window === "undefined" || !window.btcContext && !((_a = window.top) == null ? void 0 : _a.btcContext)) {
|
3172
|
+
if (typeof window === "undefined" || !window.btcContext) {
|
3403
3173
|
throw new Error("BTC Provider is not initialized.");
|
3404
3174
|
}
|
3405
|
-
return window.btcContext
|
3175
|
+
return window.btcContext;
|
3406
3176
|
}
|
3407
3177
|
function getNetwork() {
|
3408
3178
|
return __async(this, null, function* () {
|
@@ -3465,7 +3235,6 @@ function checkGasTokenDebt(accountInfo, env, autoDeposit) {
|
|
3465
3235
|
return;
|
3466
3236
|
const config = yield getConfig(env);
|
3467
3237
|
const transferAmount = hasDebtArrears ? debtAmount : relayerFeeAmount;
|
3468
|
-
console.log("get_account:", accountInfo);
|
3469
3238
|
const action = {
|
3470
3239
|
receiver_id: config.accountContractId,
|
3471
3240
|
amount: transferAmount.toString(),
|
@@ -3876,7 +3645,239 @@ function uint8ArrayToHex(uint8Array) {
|
|
3876
3645
|
return Array.from(uint8Array).map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
3877
3646
|
}
|
3878
3647
|
|
3648
|
+
// src/utils/initWalletButton.ts
|
3649
|
+
function setupWalletButton(env, wallet, originalWallet) {
|
3650
|
+
console.log("setupWalletButton");
|
3651
|
+
if (document.getElementById("satoshi-wallet-button")) {
|
3652
|
+
return;
|
3653
|
+
}
|
3654
|
+
const iframe = createIframe({
|
3655
|
+
iframeUrl: walletConfig[env].walletUrl,
|
3656
|
+
iframeStyle: { width: "400px", height: "650px" }
|
3657
|
+
});
|
3658
|
+
iframe.addEventListener("mouseenter", () => {
|
3659
|
+
var _a;
|
3660
|
+
if (document.activeElement !== iframe) {
|
3661
|
+
(_a = document.activeElement) == null ? void 0 : _a.setAttribute("tabindex", "null");
|
3662
|
+
setTimeout(() => {
|
3663
|
+
iframe.focus();
|
3664
|
+
}, 0);
|
3665
|
+
}
|
3666
|
+
});
|
3667
|
+
const button = createFloatingButtonWithIframe({
|
3668
|
+
openImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn.png",
|
3669
|
+
closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
|
3670
|
+
iframe
|
3671
|
+
});
|
3672
|
+
setupButtonClickHandler(button, iframe, wallet, originalWallet);
|
3673
|
+
}
|
3674
|
+
function createFloatingButtonWithIframe({
|
3675
|
+
openImageUrl,
|
3676
|
+
closeImageUrl,
|
3677
|
+
iframe
|
3678
|
+
}) {
|
3679
|
+
const button = document.createElement("img");
|
3680
|
+
button.id = "satoshi-wallet-button";
|
3681
|
+
const isIframeVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
|
3682
|
+
button.src = isIframeVisible ? closeImageUrl : openImageUrl;
|
3683
|
+
iframe.style.display = isIframeVisible ? "block" : "none";
|
3684
|
+
const windowWidth = window.innerWidth;
|
3685
|
+
const windowHeight = window.innerHeight;
|
3686
|
+
const savedPosition = JSON.parse(
|
3687
|
+
localStorage.getItem("btc-wallet-button-position") || '{"right": "20px", "bottom": "20px"}'
|
3688
|
+
);
|
3689
|
+
const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);
|
3690
|
+
const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);
|
3691
|
+
Object.assign(button.style, {
|
3692
|
+
position: "fixed",
|
3693
|
+
bottom: `${bottom}px`,
|
3694
|
+
right: `${right}px`,
|
3695
|
+
zIndex: "100000",
|
3696
|
+
width: "60px",
|
3697
|
+
height: "60px",
|
3698
|
+
borderRadius: "50%",
|
3699
|
+
cursor: "grab",
|
3700
|
+
transition: "transform 0.15s ease",
|
3701
|
+
userSelect: "none"
|
3702
|
+
});
|
3703
|
+
document.body.appendChild(button);
|
3704
|
+
updateIframePosition(iframe, right, bottom, windowWidth, windowHeight);
|
3705
|
+
let isDragging = false;
|
3706
|
+
let startX = 0;
|
3707
|
+
let startY = 0;
|
3708
|
+
let initialRight = 0;
|
3709
|
+
let initialBottom = 0;
|
3710
|
+
let dragStartTime = 0;
|
3711
|
+
button.addEventListener("mousedown", (e) => {
|
3712
|
+
isDragging = true;
|
3713
|
+
startX = e.clientX;
|
3714
|
+
startY = e.clientY;
|
3715
|
+
initialRight = parseInt(button.style.right);
|
3716
|
+
initialBottom = parseInt(button.style.bottom);
|
3717
|
+
dragStartTime = Date.now();
|
3718
|
+
button.style.cursor = "grabbing";
|
3719
|
+
button.style.transition = "none";
|
3720
|
+
e.preventDefault();
|
3721
|
+
});
|
3722
|
+
document.addEventListener("mousemove", (e) => {
|
3723
|
+
if (!isDragging)
|
3724
|
+
return;
|
3725
|
+
const deltaX = startX - e.clientX;
|
3726
|
+
const deltaY = startY - e.clientY;
|
3727
|
+
let newRight = initialRight + deltaX;
|
3728
|
+
let newBottom = initialBottom + deltaY;
|
3729
|
+
newRight = Math.min(Math.max(20, newRight), windowWidth - 80);
|
3730
|
+
newBottom = Math.min(Math.max(20, newBottom), windowHeight - 80);
|
3731
|
+
const snapThreshold = 20;
|
3732
|
+
const buttonLeft = windowWidth - newRight - 60;
|
3733
|
+
if (buttonLeft < snapThreshold) {
|
3734
|
+
newRight = windowWidth - 80;
|
3735
|
+
} else if (buttonLeft > windowWidth - snapThreshold - 60) {
|
3736
|
+
newRight = 20;
|
3737
|
+
}
|
3738
|
+
if (newBottom < snapThreshold) {
|
3739
|
+
newBottom = 20;
|
3740
|
+
} else if (newBottom > windowHeight - snapThreshold - 60) {
|
3741
|
+
newBottom = windowHeight - 80;
|
3742
|
+
}
|
3743
|
+
button.style.right = `${newRight}px`;
|
3744
|
+
button.style.bottom = `${newBottom}px`;
|
3745
|
+
updateIframePosition(iframe, newRight, newBottom, windowWidth, windowHeight);
|
3746
|
+
});
|
3747
|
+
document.addEventListener("mouseup", () => {
|
3748
|
+
if (!isDragging)
|
3749
|
+
return;
|
3750
|
+
const dragEndTime = Date.now();
|
3751
|
+
const isDragEvent = dragEndTime - dragStartTime > 200;
|
3752
|
+
isDragging = false;
|
3753
|
+
button.style.cursor = "grab";
|
3754
|
+
button.style.transition = "transform 0.15s ease";
|
3755
|
+
localStorage.setItem(
|
3756
|
+
"btc-wallet-button-position",
|
3757
|
+
JSON.stringify({
|
3758
|
+
right: button.style.right,
|
3759
|
+
bottom: button.style.bottom
|
3760
|
+
})
|
3761
|
+
);
|
3762
|
+
if (!isDragEvent) {
|
3763
|
+
handleButtonClick();
|
3764
|
+
}
|
3765
|
+
});
|
3766
|
+
const handleButtonClick = () => {
|
3767
|
+
const isCurrentlyVisible = iframe.style.display === "block";
|
3768
|
+
button.style.transform = "scale(0.8)";
|
3769
|
+
setTimeout(() => {
|
3770
|
+
button.style.transform = "scale(1)";
|
3771
|
+
}, 150);
|
3772
|
+
const newVisibleState = !isCurrentlyVisible;
|
3773
|
+
iframe.style.display = newVisibleState ? "block" : "none";
|
3774
|
+
button.src = newVisibleState ? closeImageUrl : openImageUrl;
|
3775
|
+
localStorage.setItem("btc-wallet-iframe-visible", String(newVisibleState));
|
3776
|
+
setTimeout(() => {
|
3777
|
+
if (newVisibleState) {
|
3778
|
+
iframe.focus();
|
3779
|
+
}
|
3780
|
+
}, 0);
|
3781
|
+
};
|
3782
|
+
button.onclick = null;
|
3783
|
+
return button;
|
3784
|
+
}
|
3785
|
+
function createIframe({
|
3786
|
+
iframeUrl,
|
3787
|
+
iframeStyle = {}
|
3788
|
+
}) {
|
3789
|
+
const iframe = document.createElement("iframe");
|
3790
|
+
iframe.id = "satoshi-wallet-iframe";
|
3791
|
+
iframe.allow = "clipboard-read; clipboard-write";
|
3792
|
+
iframe.src = iframeUrl;
|
3793
|
+
const isVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
|
3794
|
+
Object.assign(iframe.style, __spreadValues({
|
3795
|
+
position: "fixed",
|
3796
|
+
bottom: "90px",
|
3797
|
+
right: "20px",
|
3798
|
+
zIndex: "100000",
|
3799
|
+
boxShadow: "0 0 10px rgba(0, 0, 0, 0.1)",
|
3800
|
+
borderRadius: "10px",
|
3801
|
+
display: isVisible ? "block" : "none",
|
3802
|
+
border: "none"
|
3803
|
+
}, iframeStyle));
|
3804
|
+
document.body.appendChild(iframe);
|
3805
|
+
return iframe;
|
3806
|
+
}
|
3807
|
+
function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
|
3808
|
+
return __async(this, null, function* () {
|
3809
|
+
var _a;
|
3810
|
+
const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
|
3811
|
+
const originalAccountId = originalWallet.account;
|
3812
|
+
const originalPublicKey = yield originalWallet.getPublicKey();
|
3813
|
+
console.log({ accountId, originalAccountId, originalPublicKey });
|
3814
|
+
const iframeSrc = new URL(iframe.src);
|
3815
|
+
iframeSrc.searchParams.set("origin", window.location.origin);
|
3816
|
+
accountId && iframeSrc.searchParams.set("accountId", accountId);
|
3817
|
+
originalAccountId && iframeSrc.searchParams.set("originalAccountId", originalAccountId);
|
3818
|
+
originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
|
3819
|
+
iframe.src = iframeSrc.toString();
|
3820
|
+
const actions = {
|
3821
|
+
signAndSendTransaction: wallet.signAndSendTransaction,
|
3822
|
+
executeBTCDepositAndAction
|
3823
|
+
};
|
3824
|
+
window.addEventListener("message", (event) => __async(this, null, function* () {
|
3825
|
+
var _a2, _b;
|
3826
|
+
if (event.origin !== iframeSrc.origin)
|
3827
|
+
return;
|
3828
|
+
const { action, requestId, data } = event.data;
|
3829
|
+
try {
|
3830
|
+
const actionFn = actions[action];
|
3831
|
+
if (!actionFn)
|
3832
|
+
return;
|
3833
|
+
console.log("handleWalletAction", action, event.data);
|
3834
|
+
const result = yield actionFn(data);
|
3835
|
+
console.log("handleWalletAction result", action, result);
|
3836
|
+
(_a2 = event.source) == null ? void 0 : _a2.postMessage(
|
3837
|
+
{
|
3838
|
+
requestId,
|
3839
|
+
data,
|
3840
|
+
success: true
|
3841
|
+
},
|
3842
|
+
{ targetOrigin: event.origin }
|
3843
|
+
);
|
3844
|
+
} catch (error) {
|
3845
|
+
console.error("handleWalletAction error", action, error);
|
3846
|
+
(_b = event.source) == null ? void 0 : _b.postMessage(
|
3847
|
+
{
|
3848
|
+
requestId,
|
3849
|
+
error: error.message,
|
3850
|
+
success: false
|
3851
|
+
},
|
3852
|
+
{ targetOrigin: event.origin }
|
3853
|
+
);
|
3854
|
+
}
|
3855
|
+
}));
|
3856
|
+
});
|
3857
|
+
}
|
3858
|
+
function removeWalletButton() {
|
3859
|
+
const button = document.getElementById("satoshi-wallet-button");
|
3860
|
+
button == null ? void 0 : button.remove();
|
3861
|
+
const iframe = document.getElementById("satoshi-wallet-iframe");
|
3862
|
+
iframe == null ? void 0 : iframe.remove();
|
3863
|
+
}
|
3864
|
+
function updateIframePosition(iframe, buttonRight, buttonBottom, windowWidth, windowHeight) {
|
3865
|
+
const iframeWidth = parseInt(iframe.style.width);
|
3866
|
+
const iframeHeight = parseInt(iframe.style.height);
|
3867
|
+
let iframeRight = buttonRight;
|
3868
|
+
let iframeBottom = buttonBottom + 70;
|
3869
|
+
if (iframeRight + iframeWidth > windowWidth - 20) {
|
3870
|
+
iframeRight = Math.max(20, windowWidth - iframeWidth - 20);
|
3871
|
+
}
|
3872
|
+
if (iframeBottom + iframeHeight > windowHeight - 20) {
|
3873
|
+
iframeBottom = Math.max(20, buttonBottom - iframeHeight - 10);
|
3874
|
+
}
|
3875
|
+
iframe.style.right = `${iframeRight}px`;
|
3876
|
+
iframe.style.bottom = `${iframeBottom}px`;
|
3877
|
+
}
|
3878
|
+
|
3879
3879
|
// src/core/setupBTCWallet.ts
|
3880
|
+
import Big2 from "big.js";
|
3880
3881
|
var { transfer, functionCall } = actionCreators;
|
3881
3882
|
var STORAGE_KEYS = {
|
3882
3883
|
ACCOUNT: "btc-wallet-account",
|
@@ -4274,17 +4275,58 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
4274
4275
|
}
|
4275
4276
|
function calculateGasStrategy(gasTokenBalance, transactions2) {
|
4276
4277
|
return __async(this, null, function* () {
|
4278
|
+
var _a;
|
4277
4279
|
const accountId = state.getAccount();
|
4280
|
+
const nearAccount = yield provider.query({
|
4281
|
+
request_type: "view_account",
|
4282
|
+
account_id: accountId,
|
4283
|
+
finality: "final"
|
4284
|
+
});
|
4285
|
+
const availableBalance = parseFloat(nearAccount.amount) / __pow(10, 24);
|
4286
|
+
console.log("available near balance:", availableBalance);
|
4287
|
+
console.log("available gas token balance:", gasTokenBalance);
|
4278
4288
|
const convertTx = yield Promise.all(
|
4279
4289
|
transactions2.map((transaction, index) => convertTransactionToTxHex(transaction, index))
|
4280
4290
|
);
|
4281
|
-
|
4282
|
-
|
4283
|
-
|
4284
|
-
|
4285
|
-
|
4286
|
-
|
4287
|
-
|
4291
|
+
if (availableBalance > 0.5) {
|
4292
|
+
console.log("near balance is enough, get the protocol fee of each transaction");
|
4293
|
+
const gasTokens = yield nearCall2(
|
4294
|
+
currentConfig.accountContractId,
|
4295
|
+
"list_gas_token",
|
4296
|
+
{ token_ids: [currentConfig.token] }
|
4297
|
+
);
|
4298
|
+
console.log("list_gas_token gas tokens:", gasTokens);
|
4299
|
+
const perTxFee = Math.max(
|
4300
|
+
Number(((_a = gasTokens[currentConfig.token]) == null ? void 0 : _a.per_tx_protocol_fee) || 0),
|
4301
|
+
100
|
4302
|
+
);
|
4303
|
+
console.log("perTxFee:", perTxFee);
|
4304
|
+
const protocolFee = new Big2(perTxFee || "0").mul(convertTx.length).toFixed(0);
|
4305
|
+
console.log("protocolFee:", protocolFee);
|
4306
|
+
if (new Big2(gasTokenBalance).gte(protocolFee)) {
|
4307
|
+
console.log("use near pay gas and enough gas token balance");
|
4308
|
+
return { useNearPayGas: true, gasLimit: protocolFee };
|
4309
|
+
} else {
|
4310
|
+
console.log("use near pay gas and not enough gas token balance");
|
4311
|
+
const transferTx = yield createGasTokenTransfer(accountId, protocolFee);
|
4312
|
+
return recalculateGasWithTransfer(transferTx, convertTx, true, perTxFee.toString());
|
4313
|
+
}
|
4314
|
+
} else {
|
4315
|
+
console.log("near balance is not enough, predict the gas token amount required");
|
4316
|
+
const adjustedGas = yield getPredictedGasAmount(
|
4317
|
+
currentConfig.accountContractId,
|
4318
|
+
currentConfig.token,
|
4319
|
+
convertTx.map((t) => t.txHex)
|
4320
|
+
);
|
4321
|
+
if (new Big2(gasTokenBalance).gte(adjustedGas)) {
|
4322
|
+
console.log("use gas token and gas token balance is enough");
|
4323
|
+
return { useNearPayGas: false, gasLimit: adjustedGas };
|
4324
|
+
} else {
|
4325
|
+
console.log("use gas token and gas token balance is not enough, need to transfer");
|
4326
|
+
const transferTx = yield createGasTokenTransfer(accountId, adjustedGas);
|
4327
|
+
return recalculateGasWithTransfer(transferTx, convertTx, false);
|
4328
|
+
}
|
4329
|
+
}
|
4288
4330
|
});
|
4289
4331
|
}
|
4290
4332
|
function convertTransactionToTxHex(transaction, index = 0) {
|
@@ -4389,7 +4431,7 @@ function setupBTCWallet({
|
|
4389
4431
|
|
4390
4432
|
// src/index.ts
|
4391
4433
|
var getVersion = () => {
|
4392
|
-
return "0.5.
|
4434
|
+
return "0.5.4-beta";
|
4393
4435
|
};
|
4394
4436
|
if (typeof window !== "undefined") {
|
4395
4437
|
window.__BTC_WALLET_VERSION = getVersion();
|
@@ -4416,6 +4458,7 @@ export {
|
|
4416
4458
|
getAccountInfo,
|
4417
4459
|
getBtcBalance,
|
4418
4460
|
getBtcGasPrice,
|
4461
|
+
getConfig,
|
4419
4462
|
getCsnaAccountId,
|
4420
4463
|
getDepositAmount,
|
4421
4464
|
getNBTCBalance,
|