btc-wallet 0.5.53-beta → 0.5.56-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/esm/index.js CHANGED
@@ -164,6 +164,51 @@ function isMobile() {
164
164
  }
165
165
  return false;
166
166
  }
167
+ function safeJSONParse(str) {
168
+ try {
169
+ return JSON.parse(str);
170
+ } catch (e) {
171
+ console.error("safeJSONParse", e);
172
+ return void 0;
173
+ }
174
+ }
175
+ function safeJSONStringify(obj) {
176
+ try {
177
+ return JSON.stringify(obj);
178
+ } catch (e) {
179
+ console.error("safeJSONStringify", e);
180
+ return void 0;
181
+ }
182
+ }
183
+ function storageStore(namespace, options) {
184
+ if (typeof window === "undefined")
185
+ return;
186
+ const _namespace = namespace || "SATOSHI_WALLET_DEFAULT";
187
+ const storage5 = (options == null ? void 0 : options.storage) || (window == null ? void 0 : window.localStorage);
188
+ const namespaceKey = (key) => {
189
+ return _namespace + ":" + key;
190
+ };
191
+ return {
192
+ set(key, value) {
193
+ const _value = safeJSONStringify(value);
194
+ _value ? storage5.setItem(namespaceKey(key), _value) : storage5.removeItem(namespaceKey(key));
195
+ },
196
+ get(key) {
197
+ const _value = storage5.getItem(namespaceKey(key));
198
+ return _value ? safeJSONParse(_value) : void 0;
199
+ },
200
+ remove(key) {
201
+ storage5.removeItem(namespaceKey(key));
202
+ },
203
+ clearAll: function clearAll() {
204
+ for (const key in storage5) {
205
+ if (key.startsWith(namespace + ":")) {
206
+ storage5.removeItem(key);
207
+ }
208
+ }
209
+ }
210
+ };
211
+ }
167
212
 
168
213
  // src/utils/Dialog.ts
169
214
  var Dialog = class {
@@ -433,7 +478,7 @@ var MobileWalletConnect = class {
433
478
  case "okx":
434
479
  return `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(url)}`;
435
480
  case "bitget":
436
- return `https://bkcode.vip?action=dapp&url=${encodeURIComponent(url)}`;
481
+ return `bitkeep://bkconnect?action=dapp&url=${encodeURIComponent(url)}`;
437
482
  case "xverse":
438
483
  return `xverse://browser?url=${encodeURIComponent(url)}`;
439
484
  default:
@@ -519,9 +564,13 @@ var InjectedConnector = class extends BaseConnector {
519
564
  }
520
565
  requestAccounts() {
521
566
  return __async(this, null, function* () {
522
- if (isMobile() && !this.getProvider()) {
523
- MobileWalletConnect.redirectToWallet(this.metadata.id);
524
- return [];
567
+ if (isMobile()) {
568
+ try {
569
+ this.getProvider();
570
+ } catch (error) {
571
+ yield MobileWalletConnect.redirectToWallet(this.metadata.id);
572
+ return [];
573
+ }
525
574
  }
526
575
  const accounts = yield this.getProviderOrThrow().requestAccounts();
527
576
  console.log("network:", yield this.getNetwork());
@@ -706,6 +755,7 @@ import EventEmitter from "events";
706
755
  var xverse_default = "data:image/png;base64,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";
707
756
 
708
757
  // src/connector/xverse.ts
758
+ var storage = storageStore("SATOSHI_WALLET_XVERSE");
709
759
  var _network, _event;
710
760
  var XverseConnector = class extends BaseConnector {
711
761
  constructor() {
@@ -731,7 +781,7 @@ var XverseConnector = class extends BaseConnector {
731
781
  walletType
732
782
  }));
733
783
  console.log("\u{1F680} ~ XverseConnector ~ loadAccounts ~ res:", addresses);
734
- localStorage.setItem("btc-connect-xverse-addresses-" + network, JSON.stringify(addresses));
784
+ storage == null ? void 0 : storage.set(`${network}:addresses`, addresses);
735
785
  return addresses;
736
786
  });
737
787
  __privateGet(this, _event).setMaxListeners(100);
@@ -766,9 +816,9 @@ var XverseConnector = class extends BaseConnector {
766
816
  }
767
817
  getAddresses() {
768
818
  return __async(this, null, function* () {
769
- const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
819
+ const data = storage == null ? void 0 : storage.get(`${__privateGet(this, _network)}:addresses`);
770
820
  if (data) {
771
- return JSON.parse(data);
821
+ return data;
772
822
  }
773
823
  return [];
774
824
  });
@@ -853,8 +903,7 @@ var XverseConnector = class extends BaseConnector {
853
903
  });
854
904
  }
855
905
  disconnect() {
856
- localStorage.removeItem("btc-connect-xverse-addresses-Mainnet");
857
- localStorage.removeItem("btc-connect-xverse-addresses-Testnet");
906
+ storage == null ? void 0 : storage.remove(`${__privateGet(this, _network)}:addresses`);
858
907
  }
859
908
  };
860
909
  _network = new WeakMap();
@@ -867,6 +916,7 @@ import EventEmitter2 from "events";
867
916
  var magicEden_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADYAAAAgCAYAAABZyotbAAADGklEQVR42sVYTW7aQBT+ZsZk0yy8jWoqIxWK1E16A3KDcoLACRqkGKFugE0VAVLgBElOQHqC0BPUm0q0EMVVoWxZNCsYv25MlR/AY2O73xKZefO9ed+b7w0DgFm+ZrquPCdCAYAOwAbQM0btS0SIaa5aJ6AEIhPR49Ge2SxfM6Urb0B4Fowx1nj5o9WMhpTVJ8J7xA3OKsb3VpdNs9YFAaVN30VBbpqr1omogWQwXyxeZDhhexaJqDHNVetho8zyNTNBUgCga9qfQ+5pCnGQuzMbunTlDf4DuOqHYcjtpe7P12k3XjAnPe4MeJC/BCH3+431YZt249KXEPwIANgka1HgnPg0lFm+Zkopv6qU+aasAzQImPSfy+V+N+M05gCghQnrnRw2kfN0pYdPPOlCiObB8MyJXWOqZTnNVesR6EqXUt7cmQ09cWLryE2yVsm/tTOHXLensLyZSt33Q7eQMBpbpznO+dUmB/ME74xR255kTy8BdqywetcYtSqJntjDk5NS3vmRIqKmMWrbALBYLE88f+e3+kmYO1SF2ADRYJAed/6VacbpzoUQRTDmqCTu1+vTQqTEiKhJRDsaYeYIIcpPfz0YnjmC8yMAc4Vyr0deiulxp7ELOSK3vKl1HwzPHCIqKixTCNIllTUWlhwRNdPjztZy1jTNQcQI1DxCkHukq40uRckoM2flKmLpit5Gy2F19RSulEoXuuuiEtuJreCN3+Wwunr2VKBQzq9uW9eJ3GPbyKnoSnUAJRc9v3KO/II2Ru1LIUQGoCsANmO4BlD220iAAdRO37ZPwuxN27X7eOUWaO7aS92fk6+umCMEL4bdVySWKgjUBlDmCMGPdhlbtCRJeQOogl5Il1LWJ1kryPJfhBCDVTISJSal7CsOoDqCPyuUpJTOJGsVjVHbTqwUJ1mrBOAw5jAmgH7SGjtOKI45efvx0JfYcrlvRxKOJfsMx33mrUEQf7bdPeBzMpSYY3z7ZHMAlfXzkJrXU26/QnRVhspdsfKU7EEbvgBQ8Ehe7/r8taXdFzy96WBMj+ycQLbrUm9l5f4C3RupufZdcK8AAAAASUVORK5CYII=";
868
917
 
869
918
  // src/connector/magicEden.ts
919
+ var storage2 = storageStore("SATOSHI_WALLET_MAGICEDEN");
870
920
  var _network2, _event2;
871
921
  var MagicEdenConnector = class extends BaseConnector {
872
922
  constructor() {
@@ -900,7 +950,7 @@ var MagicEdenConnector = class extends BaseConnector {
900
950
  };
901
951
  getAddress(getAddressOptions).catch((error) => reject(error));
902
952
  });
903
- localStorage.setItem("btc-connect-magicEden-addresses-" + network, JSON.stringify(addresses));
953
+ storage2 == null ? void 0 : storage2.set(`${network}:addresses`, addresses);
904
954
  return addresses;
905
955
  });
906
956
  __privateGet(this, _event2).setMaxListeners(100);
@@ -927,10 +977,9 @@ var MagicEdenConnector = class extends BaseConnector {
927
977
  if (!this.isReady()) {
928
978
  throw new Error(`${this.metadata.name} is not install!`);
929
979
  }
930
- const data = localStorage.getItem("btc-connect-magicEden-addresses-" + __privateGet(this, _network2));
980
+ const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
931
981
  if (data) {
932
- const addresses = JSON.parse(data);
933
- return addresses.map((item) => item.address);
982
+ return data.map((item) => item.address);
934
983
  } else {
935
984
  return [];
936
985
  }
@@ -941,10 +990,9 @@ var MagicEdenConnector = class extends BaseConnector {
941
990
  if (!this.isReady()) {
942
991
  throw new Error(`${this.metadata.name} is not install!`);
943
992
  }
944
- const data = localStorage.getItem("btc-connect-magicEden-addresses-" + __privateGet(this, _network2));
993
+ const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
945
994
  if (data) {
946
- const addresses = JSON.parse(data);
947
- return addresses[0].publicKey;
995
+ return data[0].publicKey;
948
996
  } else {
949
997
  return "";
950
998
  }
@@ -1057,8 +1105,7 @@ var MagicEdenConnector = class extends BaseConnector {
1057
1105
  });
1058
1106
  }
1059
1107
  disconnect() {
1060
- localStorage.removeItem("btc-connect-magicEden-addresses-Mainnet");
1061
- localStorage.removeItem("btc-connect-magicEden-addresses-Testnet");
1108
+ storage2 == null ? void 0 : storage2.remove(`${__privateGet(this, _network2)}:addresses`);
1062
1109
  }
1063
1110
  };
1064
1111
  _network2 = new WeakMap();
@@ -1152,13 +1199,14 @@ var useConnector = () => {
1152
1199
  const { connectors, setConnectorId } = useConnectProvider();
1153
1200
  const connect = useCallback2(
1154
1201
  (connectorId) => __async(void 0, null, function* () {
1202
+ var _a;
1155
1203
  const connector = connectors.find((item) => item.metadata.id === connectorId);
1156
1204
  if (!connector) {
1157
1205
  throw new Error(`connector id ${connectorId} not found`);
1158
1206
  }
1159
1207
  const accounts = yield connector.requestAccounts();
1160
1208
  if (accounts.length > 0) {
1161
- localStorage.setItem("current-connector-id", connector.metadata.id);
1209
+ (_a = storageStore()) == null ? void 0 : _a.set("current-connector-id", connector.metadata.id);
1162
1210
  setConnectorId(connector.metadata.id);
1163
1211
  }
1164
1212
  }),
@@ -2321,10 +2369,11 @@ var ConnectProvider = ({
2321
2369
  version: ((_c = options.aaOptions.accountContracts[((_b = Object.keys(options.aaOptions.accountContracts)) == null ? void 0 : _b[0]) || "BTC"]) == null ? void 0 : _c[0].version) || "1.0.0"
2322
2370
  });
2323
2371
  const getConnectorId = useCallback7(() => {
2372
+ var _a2;
2324
2373
  if (typeof window === "undefined") {
2325
2374
  return "";
2326
2375
  }
2327
- const id = localStorage.getItem("current-connector-id");
2376
+ const id = (_a2 = storageStore()) == null ? void 0 : _a2.get("current-connector-id");
2328
2377
  return id != null ? id : "";
2329
2378
  }, []);
2330
2379
  const getConnector = useCallback7(() => {
@@ -2466,7 +2515,8 @@ var ConnectProvider = ({
2466
2515
  }
2467
2516
  }, [connectorId, connectors]);
2468
2517
  const disconnect = useCallback7(() => {
2469
- localStorage.removeItem("current-connector-id");
2518
+ var _a2;
2519
+ (_a2 = storageStore()) == null ? void 0 : _a2.remove("current-connector-id");
2470
2520
  txConfirmUtils_default.reset();
2471
2521
  if (connector) {
2472
2522
  connector.disconnect();
@@ -2655,7 +2705,9 @@ function BtcWalletSelectorContextProvider({
2655
2705
  new UnisatConnector(),
2656
2706
  new XverseConnector(),
2657
2707
  new OKXConnector(),
2658
- new BitgetConnector()
2708
+ new BitgetConnector(),
2709
+ new MagicEdenConnector(),
2710
+ new BybitConnector()
2659
2711
  ];
2660
2712
  const walletSelectorContextValue = useMemo6(() => {
2661
2713
  const simpleFn = {};
@@ -3090,36 +3142,37 @@ var STORAGE_KEYS = {
3090
3142
  PUBLIC_KEY: "btc-wallet-publickey",
3091
3143
  BTC_PUBLIC_KEY: "btc-wallet-btc-publickey"
3092
3144
  };
3145
+ var storage3 = storageStore("SATOSHI_WALLET_ACCOUNT");
3093
3146
  var state_default = {
3094
3147
  saveAccount(account) {
3095
3148
  if (!account) {
3096
3149
  this.removeAccount();
3097
3150
  return;
3098
3151
  }
3099
- window.localStorage.setItem(STORAGE_KEYS.ACCOUNT, account);
3152
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.ACCOUNT, account);
3100
3153
  },
3101
3154
  removeAccount() {
3102
- window.localStorage.removeItem(STORAGE_KEYS.ACCOUNT);
3155
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.ACCOUNT);
3103
3156
  },
3104
3157
  savePublicKey(publicKey) {
3105
3158
  if (!publicKey) {
3106
3159
  this.removePublicKey();
3107
3160
  return;
3108
3161
  }
3109
- window.localStorage.setItem(STORAGE_KEYS.PUBLIC_KEY, publicKey);
3162
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.PUBLIC_KEY, publicKey);
3110
3163
  },
3111
3164
  removePublicKey() {
3112
- window.localStorage.removeItem(STORAGE_KEYS.PUBLIC_KEY);
3165
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.PUBLIC_KEY);
3113
3166
  },
3114
3167
  saveBtcPublicKey(publicKey) {
3115
3168
  if (!publicKey) {
3116
3169
  this.removeBtcPublicKey();
3117
3170
  return;
3118
3171
  }
3119
- window.localStorage.setItem(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
3172
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
3120
3173
  },
3121
3174
  removeBtcPublicKey() {
3122
- window.localStorage.removeItem(STORAGE_KEYS.BTC_PUBLIC_KEY);
3175
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.BTC_PUBLIC_KEY);
3123
3176
  },
3124
3177
  clear() {
3125
3178
  this.removeAccount();
@@ -3135,13 +3188,13 @@ var state_default = {
3135
3188
  this.savePublicKey(publicKey);
3136
3189
  },
3137
3190
  getAccount() {
3138
- return window.localStorage.getItem(STORAGE_KEYS.ACCOUNT) || "";
3191
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.ACCOUNT)) || "";
3139
3192
  },
3140
3193
  getPublicKey() {
3141
- return window.localStorage.getItem(STORAGE_KEYS.PUBLIC_KEY) || "";
3194
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.PUBLIC_KEY)) || "";
3142
3195
  },
3143
3196
  getBtcPublicKey() {
3144
- return window.localStorage.getItem(STORAGE_KEYS.BTC_PUBLIC_KEY) || "";
3197
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.BTC_PUBLIC_KEY)) || "";
3145
3198
  },
3146
3199
  isValid() {
3147
3200
  const account = this.getAccount();
@@ -3466,7 +3519,8 @@ function calculateGasStrategy(_0) {
3466
3519
  return __async(this, arguments, function* ({
3467
3520
  csna,
3468
3521
  transactions: transactions2,
3469
- env
3522
+ env,
3523
+ gasStrategy = "auto"
3470
3524
  }) {
3471
3525
  var _a;
3472
3526
  const currentConfig = getWalletConfig(env);
@@ -3498,6 +3552,7 @@ function calculateGasStrategy(_0) {
3498
3552
  const nearAvailableBalance = new Big(nearBalance).minus(transferAmount.near).toNumber();
3499
3553
  console.log("available near balance:", nearAvailableBalance);
3500
3554
  console.log("available gas token balance:", gasTokenBalance);
3555
+ console.log("gas strategy:", gasStrategy);
3501
3556
  const convertTx = yield Promise.all(
3502
3557
  transactions2.map(
3503
3558
  (transaction, index) => convertTransactionToTxHex({
@@ -3509,8 +3564,20 @@ function calculateGasStrategy(_0) {
3509
3564
  })
3510
3565
  )
3511
3566
  );
3512
- if (nearAvailableBalance > 0.5) {
3513
- console.log("near balance is enough, get the protocol fee of each transaction");
3567
+ let useNearPayGas = false;
3568
+ let perTxFee;
3569
+ if (gasStrategy === "near") {
3570
+ console.log("Forcing NEAR as gas token based on gasStrategy");
3571
+ useNearPayGas = true;
3572
+ } else if (gasStrategy === "btc") {
3573
+ console.log("Forcing BTC token as gas token based on gasStrategy");
3574
+ useNearPayGas = false;
3575
+ } else if (nearAvailableBalance > 0.5) {
3576
+ console.log("NEAR balance is enough, using NEAR to pay for gas");
3577
+ useNearPayGas = true;
3578
+ }
3579
+ let gasAmount;
3580
+ if (useNearPayGas) {
3514
3581
  const gasTokens = yield nearCallFunction(
3515
3582
  currentConfig.accountContractId,
3516
3583
  "list_gas_token",
@@ -3518,39 +3585,29 @@ function calculateGasStrategy(_0) {
3518
3585
  { network: currentConfig.network }
3519
3586
  );
3520
3587
  console.log("list_gas_token gas tokens:", gasTokens);
3521
- const perTxFee = Math.max(
3522
- Number(((_a = gasTokens[currentConfig.btcToken]) == null ? void 0 : _a.per_tx_protocol_fee) || 0),
3523
- 100
3524
- );
3588
+ const fee = Math.max(Number(((_a = gasTokens[currentConfig.btcToken]) == null ? void 0 : _a.per_tx_protocol_fee) || 0), 100);
3589
+ perTxFee = fee.toString();
3525
3590
  console.log("perTxFee:", perTxFee);
3526
- const protocolFee = new Big(perTxFee || "0").mul(convertTx.length).toFixed(0);
3527
- console.log("protocolFee:", protocolFee);
3528
- const transferTx = yield createGasTokenTransfer({ csna, amount: protocolFee, env });
3529
- return recalculateGasWithTransfer({
3530
- csna,
3531
- transferTx,
3532
- transactions: convertTx,
3533
- useNearPayGas: true,
3534
- perTxFee: perTxFee.toString(),
3535
- env
3536
- });
3591
+ gasAmount = new Big(perTxFee || "0").mul(convertTx.length).toFixed(0);
3537
3592
  } else {
3538
- console.log("near balance is not enough, predict the gas token amount required");
3539
- const adjustedGas = yield getPredictedGasAmount({
3593
+ gasAmount = yield getPredictedGasAmount({
3540
3594
  accountContractId: currentConfig.accountContractId,
3541
3595
  tokenId: currentConfig.btcToken,
3542
3596
  transactions: convertTx.map((t) => t.txHex),
3543
3597
  env
3544
3598
  });
3545
- const transferTx = yield createGasTokenTransfer({ csna, amount: adjustedGas, env });
3546
- return recalculateGasWithTransfer({
3547
- csna,
3548
- transferTx,
3549
- transactions: convertTx,
3550
- useNearPayGas: false,
3551
- env
3552
- });
3553
3599
  }
3600
+ console.log("useNearPayGas:", useNearPayGas);
3601
+ console.log("gasAmount:", gasAmount);
3602
+ const transferTx = yield createGasTokenTransfer({ csna, amount: gasAmount, env });
3603
+ return recalculateGasWithTransfer({
3604
+ csna,
3605
+ transferTx,
3606
+ transactions: convertTx,
3607
+ useNearPayGas,
3608
+ perTxFee,
3609
+ env
3610
+ });
3554
3611
  });
3555
3612
  }
3556
3613
  function createGasTokenTransfer(_0) {
@@ -3837,11 +3894,13 @@ function getCsnaAccountId(env) {
3837
3894
  });
3838
3895
  }
3839
3896
  function checkDepositDisabledAddress() {
3840
- const data = localStorage.getItem("btc-connect-xverse-addresses-Mainnet");
3897
+ var _a;
3898
+ const data = (_a = storageStore("SATOSHI_WALLET_XVERSE")) == null ? void 0 : _a.get(
3899
+ `Mainnet:addresses`
3900
+ );
3841
3901
  if (!data)
3842
3902
  return;
3843
- const addresses = JSON.parse(data);
3844
- const address = addresses == null ? void 0 : addresses[0];
3903
+ const address = data == null ? void 0 : data[0];
3845
3904
  if (address.walletType === "ledger" && !["p2wpkh", "p2sh"].includes(address.addressType)) {
3846
3905
  throw new Error("Ledger is only supported for p2wpkh and p2sh address");
3847
3906
  }
@@ -3878,7 +3937,7 @@ function executeBTCDepositAndAction(_0) {
3878
3937
  throw new Error("Deposit amount or action is required");
3879
3938
  }
3880
3939
  const csna = yield getCsnaAccountId(env);
3881
- const depositAmount = Number(amount || (action == null ? void 0 : action.amount) || 0);
3940
+ const depositAmount = new Big2(amount || (action == null ? void 0 : action.amount) || 0).round(0, Big2.roundDown).toNumber();
3882
3941
  console.log("depositAmount", depositAmount);
3883
3942
  if (depositAmount <= 0) {
3884
3943
  throw new Error("Invalid deposit amount");
@@ -3982,13 +4041,14 @@ function checkSatoshiWhitelist(btcAccountId, env = "mainnet") {
3982
4041
  return __async(this, null, function* () {
3983
4042
  if (env !== "mainnet")
3984
4043
  return;
3985
- const hasShownNotice = localStorage.getItem("btc-wallet-private-mainnet-notice");
4044
+ const storage5 = storageStore();
4045
+ const hasShownNotice = storage5 == null ? void 0 : storage5.get("private-mainnet-notice");
3986
4046
  if (!hasShownNotice) {
3987
4047
  Dialog.alert({
3988
4048
  title: "Notice",
3989
4049
  message: "You are currently using Satoshi Private Mainnet. This is a private version for testing. Please try a small amount of assets in Ramp"
3990
4050
  });
3991
- localStorage.setItem("btc-wallet-private-mainnet-notice", "true");
4051
+ storage5 == null ? void 0 : storage5.set("private-mainnet-notice", "true");
3992
4052
  }
3993
4053
  if (!btcAccountId)
3994
4054
  return;
@@ -4318,7 +4378,13 @@ function uint8ArrayToHex(uint8Array) {
4318
4378
  }
4319
4379
 
4320
4380
  // src/utils/initWalletButton.ts
4321
- function setupWalletButton(env, wallet, originalWallet, walletUrl) {
4381
+ var storage4 = storageStore("SATOSHI_WALLET_BUTTON");
4382
+ function setupWalletButton({
4383
+ env,
4384
+ nearWallet,
4385
+ btcWallet,
4386
+ walletUrl
4387
+ }) {
4322
4388
  console.log(`setupWalletButton ${walletUrl || ""}`);
4323
4389
  if (document.getElementById("satoshi-wallet-button")) {
4324
4390
  return;
@@ -4341,23 +4407,25 @@ function setupWalletButton(env, wallet, originalWallet, walletUrl) {
4341
4407
  closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
4342
4408
  iframe
4343
4409
  });
4344
- setupButtonClickHandler(button, iframe, wallet, originalWallet);
4410
+ setupButtonClickHandler(button, iframe, nearWallet, btcWallet);
4345
4411
  }
4346
4412
  function createFloatingButtonWithIframe({
4347
4413
  openImageUrl,
4348
4414
  closeImageUrl,
4349
4415
  iframe
4350
4416
  }) {
4417
+ var _a;
4351
4418
  const button = document.createElement("img");
4352
4419
  button.id = "satoshi-wallet-button";
4353
- const isIframeVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
4420
+ const isIframeVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
4354
4421
  button.src = isIframeVisible ? closeImageUrl : openImageUrl;
4355
4422
  iframe.style.display = isIframeVisible ? "block" : "none";
4356
4423
  const windowWidth = window.innerWidth;
4357
4424
  const windowHeight = window.innerHeight;
4358
- const savedPosition = JSON.parse(
4359
- localStorage.getItem("btc-wallet-button-position") || '{"right": "20px", "bottom": "20px"}'
4360
- );
4425
+ const savedPosition = (storage4 == null ? void 0 : storage4.get("position")) || {
4426
+ right: "20px",
4427
+ bottom: "20px"
4428
+ };
4361
4429
  const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);
4362
4430
  const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);
4363
4431
  Object.assign(button.style, {
@@ -4453,13 +4521,10 @@ function createFloatingButtonWithIframe({
4453
4521
  isDragging = false;
4454
4522
  button.style.cursor = "grab";
4455
4523
  button.style.transition = "transform 0.15s ease";
4456
- localStorage.setItem(
4457
- "btc-wallet-button-position",
4458
- JSON.stringify({
4459
- right: button.style.right,
4460
- bottom: button.style.bottom
4461
- })
4462
- );
4524
+ storage4 == null ? void 0 : storage4.set("position", {
4525
+ right: button.style.right,
4526
+ bottom: button.style.bottom
4527
+ });
4463
4528
  if (!isDragEvent) {
4464
4529
  handleButtonClick();
4465
4530
  }
@@ -4473,7 +4538,7 @@ function createFloatingButtonWithIframe({
4473
4538
  const newVisibleState = !isCurrentlyVisible;
4474
4539
  iframe.style.display = newVisibleState ? "block" : "none";
4475
4540
  button.src = newVisibleState ? closeImageUrl : openImageUrl;
4476
- localStorage.setItem("btc-wallet-iframe-visible", String(newVisibleState));
4541
+ storage4 == null ? void 0 : storage4.set("visible", newVisibleState);
4477
4542
  setTimeout(() => {
4478
4543
  if (newVisibleState) {
4479
4544
  iframe.focus();
@@ -4487,11 +4552,12 @@ function createIframe({
4487
4552
  iframeUrl,
4488
4553
  iframeStyle = {}
4489
4554
  }) {
4555
+ var _a;
4490
4556
  const iframe = document.createElement("iframe");
4491
4557
  iframe.id = "satoshi-wallet-iframe";
4492
4558
  iframe.allow = "clipboard-read; clipboard-write";
4493
4559
  iframe.src = iframeUrl;
4494
- const isVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
4560
+ const isVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
4495
4561
  Object.assign(iframe.style, __spreadValues({
4496
4562
  position: "fixed",
4497
4563
  bottom: "90px",
@@ -4506,12 +4572,12 @@ function createIframe({
4506
4572
  return iframe;
4507
4573
  }
4508
4574
  var currentMessageHandler = null;
4509
- function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4575
+ function setupButtonClickHandler(button, iframe, nearWallet, btcWallet) {
4510
4576
  return __async(this, null, function* () {
4511
4577
  var _a;
4512
- const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
4513
- const originalAccountId = originalWallet.account;
4514
- const originalPublicKey = yield originalWallet.getPublicKey();
4578
+ const accountId = (_a = yield nearWallet == null ? void 0 : nearWallet.getAccounts()) == null ? void 0 : _a[0].accountId;
4579
+ const originalAccountId = btcWallet == null ? void 0 : btcWallet.account;
4580
+ const originalPublicKey = yield btcWallet == null ? void 0 : btcWallet.getPublicKey();
4515
4581
  console.log({ accountId, originalAccountId, originalPublicKey });
4516
4582
  const iframeSrc = new URL(iframe.src);
4517
4583
  iframeSrc.searchParams.set("origin", window.location.origin);
@@ -4520,8 +4586,8 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4520
4586
  originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
4521
4587
  iframe.src = iframeSrc.toString();
4522
4588
  const actions = {
4523
- signAndSendTransaction: wallet.signAndSendTransaction,
4524
- signAndSendTransactions: wallet.signAndSendTransactions,
4589
+ signAndSendTransaction: nearWallet.signAndSendTransaction,
4590
+ signAndSendTransactions: nearWallet.signAndSendTransactions,
4525
4591
  executeBTCDepositAndAction,
4526
4592
  getWithdrawTransaction
4527
4593
  };
@@ -4566,6 +4632,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4566
4632
  });
4567
4633
  }
4568
4634
  function removeWalletButton() {
4635
+ console.log("removeWalletButton");
4569
4636
  const button = document.getElementById("satoshi-wallet-button");
4570
4637
  button == null ? void 0 : button.remove();
4571
4638
  const iframe = document.getElementById("satoshi-wallet-iframe");
@@ -4672,10 +4739,14 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4672
4739
  if (btcPublicKey) {
4673
4740
  yield getNearAccountByBtcPublicKey(btcPublicKey);
4674
4741
  removeWalletButton();
4675
- setupWalletButton(env, wallet, btcContext, metadata.walletUrl);
4742
+ setupWalletButton({
4743
+ env,
4744
+ nearWallet: wallet,
4745
+ btcWallet: btcContext,
4746
+ walletUrl: metadata.walletUrl
4747
+ });
4676
4748
  }
4677
4749
  } else {
4678
- removeWalletButton();
4679
4750
  connectionUpdateTimeout = setTimeout(() => {
4680
4751
  handleConnectionUpdate();
4681
4752
  }, 5e3);
@@ -4814,7 +4885,8 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4814
4885
  const { transferGasTransaction, useNearPayGas, gasLimit } = yield calculateGasStrategy({
4815
4886
  csna,
4816
4887
  transactions: trans,
4817
- env
4888
+ env,
4889
+ gasStrategy: metadata.gasStrategy
4818
4890
  });
4819
4891
  console.log("transferGasTransaction:", transferGasTransaction);
4820
4892
  console.log("useNearPayGas:", useNearPayGas);
@@ -4886,9 +4958,10 @@ function setupBTCWallet({
4886
4958
  autoConnect = true,
4887
4959
  syncLogOut = true,
4888
4960
  env = "mainnet",
4889
- walletUrl
4961
+ walletUrl,
4962
+ gasStrategy = "auto"
4890
4963
  } = {}) {
4891
- console.log("\u26A1\uFE0F BTC Wallet Version:", getVersion(), "env:", env);
4964
+ console.log("\u26A1\uFE0F BTC Wallet Version:", getVersion(), "env:", env, "gasStrategy:", gasStrategy);
4892
4965
  const btcWallet = () => __async(this, null, function* () {
4893
4966
  return {
4894
4967
  id: "btc-wallet",
@@ -4903,7 +4976,8 @@ function setupBTCWallet({
4903
4976
  autoConnect,
4904
4977
  syncLogOut,
4905
4978
  env,
4906
- walletUrl
4979
+ walletUrl,
4980
+ gasStrategy
4907
4981
  },
4908
4982
  init: BTCWallet
4909
4983
  };
@@ -4915,11 +4989,30 @@ function setupBTCWallet({
4915
4989
  import {
4916
4990
  setupModal as _setupModal
4917
4991
  } from "ref-modal-ui";
4992
+ var subscription;
4918
4993
  function setupWalletSelectorModal(selector, options) {
4919
4994
  if (!selector)
4920
4995
  throw new Error("selector is required");
4996
+ const {
4997
+ showChainGroups = true,
4998
+ showWalletUIForNearAccount = true,
4999
+ env = "mainnet",
5000
+ walletUrl
5001
+ } = options;
5002
+ subscription == null ? void 0 : subscription.unsubscribe();
4921
5003
  const state = selector.store.getState();
4922
5004
  const group = getGroup(state);
5005
+ subscription = selector.store.observable.subscribe((state2) => {
5006
+ const walletId = state2.selectedWalletId;
5007
+ console.log("setupWalletSelectorModal walletId", walletId);
5008
+ if (!walletId)
5009
+ removeWalletButton();
5010
+ if (showWalletUIForNearAccount && walletId !== "btc-wallet") {
5011
+ selector.wallet().then((wallet) => {
5012
+ setupWalletButton({ env, nearWallet: wallet, walletUrl });
5013
+ });
5014
+ }
5015
+ });
4923
5016
  if (group.includes("btc")) {
4924
5017
  document.head.appendChild(document.createElement("style")).textContent = `
4925
5018
  #near-wallet-selector-modal .options-list .btc-wallet {
@@ -4930,7 +5023,7 @@ function setupWalletSelectorModal(selector, options) {
4930
5023
  const modal = _setupModal(selector, options);
4931
5024
  const originalShow = modal.show.bind(modal);
4932
5025
  modal.show = () => __async(this, null, function* () {
4933
- const chain = group.length > 1 ? yield openChainModal() : group[0];
5026
+ const chain = group.length > 1 && showChainGroups ? yield openChainModal() : group[0];
4934
5027
  if (chain === "btc") {
4935
5028
  const module = state.modules.find((module2) => module2.id === "btc-wallet");
4936
5029
  if (module) {
@@ -4968,7 +5061,7 @@ function openChainModal() {
4968
5061
  return div;
4969
5062
  };
4970
5063
  return yield Dialog.openModal({
4971
- title: "Choose Chain",
5064
+ title: "Choose Wallet",
4972
5065
  titleStyle: "font-size: 18px; font-weight: 600; color: #fff; text-align: center;padding-bottom: 10px;",
4973
5066
  content
4974
5067
  });
@@ -4987,7 +5080,7 @@ function getGroup(state) {
4987
5080
 
4988
5081
  // src/index.ts
4989
5082
  var getVersion = () => {
4990
- return "0.5.53-beta";
5083
+ return "0.5.56-beta";
4991
5084
  };
4992
5085
  if (typeof window !== "undefined") {
4993
5086
  window.__BTC_WALLET_VERSION = getVersion();