btc-wallet 0.5.53-beta → 0.5.55-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.
@@ -11,3 +11,13 @@ export declare function retryOperation<T>(operation: () => Promise<T> | T, shoul
11
11
  }): Promise<T>;
12
12
  export declare function toHex(originalString: string): string;
13
13
  export declare function isMobile(): boolean;
14
+ export declare function safeJSONParse<T>(str: string): T | undefined;
15
+ export declare function safeJSONStringify(obj: any): string | undefined;
16
+ export declare function storageStore(namespace?: string, options?: {
17
+ storage?: Storage;
18
+ }): {
19
+ set(key: string, value: any): void;
20
+ get<T>(key: string): T | undefined;
21
+ remove(key: string): void;
22
+ clearAll: () => void;
23
+ } | undefined;
@@ -1,9 +1,15 @@
1
1
  import type { Wallet } from '@near-wallet-selector/core';
2
2
  import { type ENV } from '../config';
3
+ interface setupWalletButtonOptions {
4
+ env: ENV;
5
+ nearWallet: Wallet;
6
+ btcWallet?: OriginalWallet;
7
+ walletUrl?: string;
8
+ }
3
9
  interface OriginalWallet {
4
10
  account: string | undefined;
5
11
  getPublicKey: () => Promise<string | undefined>;
6
12
  }
7
- export declare function setupWalletButton(env: ENV, wallet: Wallet, originalWallet: OriginalWallet, walletUrl?: string): void;
13
+ export declare function setupWalletButton({ env, nearWallet, btcWallet, walletUrl, }: setupWalletButtonOptions): void;
8
14
  export declare function removeWalletButton(): void;
9
15
  export {};
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 {
@@ -706,6 +751,7 @@ import EventEmitter from "events";
706
751
  var xverse_default = "data:image/png;base64,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";
707
752
 
708
753
  // src/connector/xverse.ts
754
+ var storage = storageStore("SATOSHI_WALLET_XVERSE");
709
755
  var _network, _event;
710
756
  var XverseConnector = class extends BaseConnector {
711
757
  constructor() {
@@ -731,7 +777,7 @@ var XverseConnector = class extends BaseConnector {
731
777
  walletType
732
778
  }));
733
779
  console.log("\u{1F680} ~ XverseConnector ~ loadAccounts ~ res:", addresses);
734
- localStorage.setItem("btc-connect-xverse-addresses-" + network, JSON.stringify(addresses));
780
+ storage == null ? void 0 : storage.set(`${network}:addresses`, addresses);
735
781
  return addresses;
736
782
  });
737
783
  __privateGet(this, _event).setMaxListeners(100);
@@ -766,9 +812,9 @@ var XverseConnector = class extends BaseConnector {
766
812
  }
767
813
  getAddresses() {
768
814
  return __async(this, null, function* () {
769
- const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
815
+ const data = storage == null ? void 0 : storage.get(`${__privateGet(this, _network)}:addresses`);
770
816
  if (data) {
771
- return JSON.parse(data);
817
+ return data;
772
818
  }
773
819
  return [];
774
820
  });
@@ -853,8 +899,7 @@ var XverseConnector = class extends BaseConnector {
853
899
  });
854
900
  }
855
901
  disconnect() {
856
- localStorage.removeItem("btc-connect-xverse-addresses-Mainnet");
857
- localStorage.removeItem("btc-connect-xverse-addresses-Testnet");
902
+ storage == null ? void 0 : storage.remove(`${__privateGet(this, _network)}:addresses`);
858
903
  }
859
904
  };
860
905
  _network = new WeakMap();
@@ -867,6 +912,7 @@ import EventEmitter2 from "events";
867
912
  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
913
 
869
914
  // src/connector/magicEden.ts
915
+ var storage2 = storageStore("SATOSHI_WALLET_MAGICEDEN");
870
916
  var _network2, _event2;
871
917
  var MagicEdenConnector = class extends BaseConnector {
872
918
  constructor() {
@@ -900,7 +946,7 @@ var MagicEdenConnector = class extends BaseConnector {
900
946
  };
901
947
  getAddress(getAddressOptions).catch((error) => reject(error));
902
948
  });
903
- localStorage.setItem("btc-connect-magicEden-addresses-" + network, JSON.stringify(addresses));
949
+ storage2 == null ? void 0 : storage2.set(`${network}:addresses`, addresses);
904
950
  return addresses;
905
951
  });
906
952
  __privateGet(this, _event2).setMaxListeners(100);
@@ -927,10 +973,9 @@ var MagicEdenConnector = class extends BaseConnector {
927
973
  if (!this.isReady()) {
928
974
  throw new Error(`${this.metadata.name} is not install!`);
929
975
  }
930
- const data = localStorage.getItem("btc-connect-magicEden-addresses-" + __privateGet(this, _network2));
976
+ const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
931
977
  if (data) {
932
- const addresses = JSON.parse(data);
933
- return addresses.map((item) => item.address);
978
+ return data.map((item) => item.address);
934
979
  } else {
935
980
  return [];
936
981
  }
@@ -941,10 +986,9 @@ var MagicEdenConnector = class extends BaseConnector {
941
986
  if (!this.isReady()) {
942
987
  throw new Error(`${this.metadata.name} is not install!`);
943
988
  }
944
- const data = localStorage.getItem("btc-connect-magicEden-addresses-" + __privateGet(this, _network2));
989
+ const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
945
990
  if (data) {
946
- const addresses = JSON.parse(data);
947
- return addresses[0].publicKey;
991
+ return data[0].publicKey;
948
992
  } else {
949
993
  return "";
950
994
  }
@@ -1057,8 +1101,7 @@ var MagicEdenConnector = class extends BaseConnector {
1057
1101
  });
1058
1102
  }
1059
1103
  disconnect() {
1060
- localStorage.removeItem("btc-connect-magicEden-addresses-Mainnet");
1061
- localStorage.removeItem("btc-connect-magicEden-addresses-Testnet");
1104
+ storage2 == null ? void 0 : storage2.remove(`${__privateGet(this, _network2)}:addresses`);
1062
1105
  }
1063
1106
  };
1064
1107
  _network2 = new WeakMap();
@@ -1152,13 +1195,14 @@ var useConnector = () => {
1152
1195
  const { connectors, setConnectorId } = useConnectProvider();
1153
1196
  const connect = useCallback2(
1154
1197
  (connectorId) => __async(void 0, null, function* () {
1198
+ var _a;
1155
1199
  const connector = connectors.find((item) => item.metadata.id === connectorId);
1156
1200
  if (!connector) {
1157
1201
  throw new Error(`connector id ${connectorId} not found`);
1158
1202
  }
1159
1203
  const accounts = yield connector.requestAccounts();
1160
1204
  if (accounts.length > 0) {
1161
- localStorage.setItem("current-connector-id", connector.metadata.id);
1205
+ (_a = storageStore()) == null ? void 0 : _a.set("current-connector-id", connector.metadata.id);
1162
1206
  setConnectorId(connector.metadata.id);
1163
1207
  }
1164
1208
  }),
@@ -2321,10 +2365,11 @@ var ConnectProvider = ({
2321
2365
  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
2366
  });
2323
2367
  const getConnectorId = useCallback7(() => {
2368
+ var _a2;
2324
2369
  if (typeof window === "undefined") {
2325
2370
  return "";
2326
2371
  }
2327
- const id = localStorage.getItem("current-connector-id");
2372
+ const id = (_a2 = storageStore()) == null ? void 0 : _a2.get("current-connector-id");
2328
2373
  return id != null ? id : "";
2329
2374
  }, []);
2330
2375
  const getConnector = useCallback7(() => {
@@ -2466,7 +2511,8 @@ var ConnectProvider = ({
2466
2511
  }
2467
2512
  }, [connectorId, connectors]);
2468
2513
  const disconnect = useCallback7(() => {
2469
- localStorage.removeItem("current-connector-id");
2514
+ var _a2;
2515
+ (_a2 = storageStore()) == null ? void 0 : _a2.remove("current-connector-id");
2470
2516
  txConfirmUtils_default.reset();
2471
2517
  if (connector) {
2472
2518
  connector.disconnect();
@@ -2655,7 +2701,8 @@ function BtcWalletSelectorContextProvider({
2655
2701
  new UnisatConnector(),
2656
2702
  new XverseConnector(),
2657
2703
  new OKXConnector(),
2658
- new BitgetConnector()
2704
+ new BitgetConnector(),
2705
+ new MagicEdenConnector()
2659
2706
  ];
2660
2707
  const walletSelectorContextValue = useMemo6(() => {
2661
2708
  const simpleFn = {};
@@ -2894,7 +2941,7 @@ var nearRpcUrls = {
2894
2941
  mainnet: [
2895
2942
  "https://near.lava.build",
2896
2943
  "https://rpc.mainnet.near.org",
2897
- "https://free.rpc.fastnear.com",
2944
+ "https://mw.rpc.fastnear.com",
2898
2945
  "https://near.drpc.org"
2899
2946
  ],
2900
2947
  testnet: ["https://rpc.testnet.near.org"]
@@ -3090,36 +3137,37 @@ var STORAGE_KEYS = {
3090
3137
  PUBLIC_KEY: "btc-wallet-publickey",
3091
3138
  BTC_PUBLIC_KEY: "btc-wallet-btc-publickey"
3092
3139
  };
3140
+ var storage3 = storageStore("SATOSHI_WALLET_ACCOUNT");
3093
3141
  var state_default = {
3094
3142
  saveAccount(account) {
3095
3143
  if (!account) {
3096
3144
  this.removeAccount();
3097
3145
  return;
3098
3146
  }
3099
- window.localStorage.setItem(STORAGE_KEYS.ACCOUNT, account);
3147
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.ACCOUNT, account);
3100
3148
  },
3101
3149
  removeAccount() {
3102
- window.localStorage.removeItem(STORAGE_KEYS.ACCOUNT);
3150
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.ACCOUNT);
3103
3151
  },
3104
3152
  savePublicKey(publicKey) {
3105
3153
  if (!publicKey) {
3106
3154
  this.removePublicKey();
3107
3155
  return;
3108
3156
  }
3109
- window.localStorage.setItem(STORAGE_KEYS.PUBLIC_KEY, publicKey);
3157
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.PUBLIC_KEY, publicKey);
3110
3158
  },
3111
3159
  removePublicKey() {
3112
- window.localStorage.removeItem(STORAGE_KEYS.PUBLIC_KEY);
3160
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.PUBLIC_KEY);
3113
3161
  },
3114
3162
  saveBtcPublicKey(publicKey) {
3115
3163
  if (!publicKey) {
3116
3164
  this.removeBtcPublicKey();
3117
3165
  return;
3118
3166
  }
3119
- window.localStorage.setItem(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
3167
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
3120
3168
  },
3121
3169
  removeBtcPublicKey() {
3122
- window.localStorage.removeItem(STORAGE_KEYS.BTC_PUBLIC_KEY);
3170
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.BTC_PUBLIC_KEY);
3123
3171
  },
3124
3172
  clear() {
3125
3173
  this.removeAccount();
@@ -3135,13 +3183,13 @@ var state_default = {
3135
3183
  this.savePublicKey(publicKey);
3136
3184
  },
3137
3185
  getAccount() {
3138
- return window.localStorage.getItem(STORAGE_KEYS.ACCOUNT) || "";
3186
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.ACCOUNT)) || "";
3139
3187
  },
3140
3188
  getPublicKey() {
3141
- return window.localStorage.getItem(STORAGE_KEYS.PUBLIC_KEY) || "";
3189
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.PUBLIC_KEY)) || "";
3142
3190
  },
3143
3191
  getBtcPublicKey() {
3144
- return window.localStorage.getItem(STORAGE_KEYS.BTC_PUBLIC_KEY) || "";
3192
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.BTC_PUBLIC_KEY)) || "";
3145
3193
  },
3146
3194
  isValid() {
3147
3195
  const account = this.getAccount();
@@ -3837,11 +3885,13 @@ function getCsnaAccountId(env) {
3837
3885
  });
3838
3886
  }
3839
3887
  function checkDepositDisabledAddress() {
3840
- const data = localStorage.getItem("btc-connect-xverse-addresses-Mainnet");
3888
+ var _a;
3889
+ const data = (_a = storageStore("SATOSHI_WALLET_XVERSE")) == null ? void 0 : _a.get(
3890
+ `Mainnet:addresses`
3891
+ );
3841
3892
  if (!data)
3842
3893
  return;
3843
- const addresses = JSON.parse(data);
3844
- const address = addresses == null ? void 0 : addresses[0];
3894
+ const address = data == null ? void 0 : data[0];
3845
3895
  if (address.walletType === "ledger" && !["p2wpkh", "p2sh"].includes(address.addressType)) {
3846
3896
  throw new Error("Ledger is only supported for p2wpkh and p2sh address");
3847
3897
  }
@@ -3878,7 +3928,7 @@ function executeBTCDepositAndAction(_0) {
3878
3928
  throw new Error("Deposit amount or action is required");
3879
3929
  }
3880
3930
  const csna = yield getCsnaAccountId(env);
3881
- const depositAmount = Number(amount || (action == null ? void 0 : action.amount) || 0);
3931
+ const depositAmount = new Big2(amount || (action == null ? void 0 : action.amount) || 0).round(0, Big2.roundDown).toNumber();
3882
3932
  console.log("depositAmount", depositAmount);
3883
3933
  if (depositAmount <= 0) {
3884
3934
  throw new Error("Invalid deposit amount");
@@ -3982,13 +4032,14 @@ function checkSatoshiWhitelist(btcAccountId, env = "mainnet") {
3982
4032
  return __async(this, null, function* () {
3983
4033
  if (env !== "mainnet")
3984
4034
  return;
3985
- const hasShownNotice = localStorage.getItem("btc-wallet-private-mainnet-notice");
4035
+ const storage5 = storageStore();
4036
+ const hasShownNotice = storage5 == null ? void 0 : storage5.get("private-mainnet-notice");
3986
4037
  if (!hasShownNotice) {
3987
4038
  Dialog.alert({
3988
4039
  title: "Notice",
3989
4040
  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
4041
  });
3991
- localStorage.setItem("btc-wallet-private-mainnet-notice", "true");
4042
+ storage5 == null ? void 0 : storage5.set("private-mainnet-notice", "true");
3992
4043
  }
3993
4044
  if (!btcAccountId)
3994
4045
  return;
@@ -4318,7 +4369,13 @@ function uint8ArrayToHex(uint8Array) {
4318
4369
  }
4319
4370
 
4320
4371
  // src/utils/initWalletButton.ts
4321
- function setupWalletButton(env, wallet, originalWallet, walletUrl) {
4372
+ var storage4 = storageStore("SATOSHI_WALLET_BUTTON");
4373
+ function setupWalletButton({
4374
+ env,
4375
+ nearWallet,
4376
+ btcWallet,
4377
+ walletUrl
4378
+ }) {
4322
4379
  console.log(`setupWalletButton ${walletUrl || ""}`);
4323
4380
  if (document.getElementById("satoshi-wallet-button")) {
4324
4381
  return;
@@ -4341,23 +4398,25 @@ function setupWalletButton(env, wallet, originalWallet, walletUrl) {
4341
4398
  closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
4342
4399
  iframe
4343
4400
  });
4344
- setupButtonClickHandler(button, iframe, wallet, originalWallet);
4401
+ setupButtonClickHandler(button, iframe, nearWallet, btcWallet);
4345
4402
  }
4346
4403
  function createFloatingButtonWithIframe({
4347
4404
  openImageUrl,
4348
4405
  closeImageUrl,
4349
4406
  iframe
4350
4407
  }) {
4408
+ var _a;
4351
4409
  const button = document.createElement("img");
4352
4410
  button.id = "satoshi-wallet-button";
4353
- const isIframeVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
4411
+ const isIframeVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
4354
4412
  button.src = isIframeVisible ? closeImageUrl : openImageUrl;
4355
4413
  iframe.style.display = isIframeVisible ? "block" : "none";
4356
4414
  const windowWidth = window.innerWidth;
4357
4415
  const windowHeight = window.innerHeight;
4358
- const savedPosition = JSON.parse(
4359
- localStorage.getItem("btc-wallet-button-position") || '{"right": "20px", "bottom": "20px"}'
4360
- );
4416
+ const savedPosition = (storage4 == null ? void 0 : storage4.get("position")) || {
4417
+ right: "20px",
4418
+ bottom: "20px"
4419
+ };
4361
4420
  const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);
4362
4421
  const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);
4363
4422
  Object.assign(button.style, {
@@ -4453,13 +4512,10 @@ function createFloatingButtonWithIframe({
4453
4512
  isDragging = false;
4454
4513
  button.style.cursor = "grab";
4455
4514
  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
- );
4515
+ storage4 == null ? void 0 : storage4.set("position", {
4516
+ right: button.style.right,
4517
+ bottom: button.style.bottom
4518
+ });
4463
4519
  if (!isDragEvent) {
4464
4520
  handleButtonClick();
4465
4521
  }
@@ -4473,7 +4529,7 @@ function createFloatingButtonWithIframe({
4473
4529
  const newVisibleState = !isCurrentlyVisible;
4474
4530
  iframe.style.display = newVisibleState ? "block" : "none";
4475
4531
  button.src = newVisibleState ? closeImageUrl : openImageUrl;
4476
- localStorage.setItem("btc-wallet-iframe-visible", String(newVisibleState));
4532
+ storage4 == null ? void 0 : storage4.set("visible", newVisibleState);
4477
4533
  setTimeout(() => {
4478
4534
  if (newVisibleState) {
4479
4535
  iframe.focus();
@@ -4487,11 +4543,12 @@ function createIframe({
4487
4543
  iframeUrl,
4488
4544
  iframeStyle = {}
4489
4545
  }) {
4546
+ var _a;
4490
4547
  const iframe = document.createElement("iframe");
4491
4548
  iframe.id = "satoshi-wallet-iframe";
4492
4549
  iframe.allow = "clipboard-read; clipboard-write";
4493
4550
  iframe.src = iframeUrl;
4494
- const isVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
4551
+ const isVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
4495
4552
  Object.assign(iframe.style, __spreadValues({
4496
4553
  position: "fixed",
4497
4554
  bottom: "90px",
@@ -4506,12 +4563,12 @@ function createIframe({
4506
4563
  return iframe;
4507
4564
  }
4508
4565
  var currentMessageHandler = null;
4509
- function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4566
+ function setupButtonClickHandler(button, iframe, nearWallet, btcWallet) {
4510
4567
  return __async(this, null, function* () {
4511
4568
  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();
4569
+ const accountId = (_a = yield nearWallet == null ? void 0 : nearWallet.getAccounts()) == null ? void 0 : _a[0].accountId;
4570
+ const originalAccountId = btcWallet == null ? void 0 : btcWallet.account;
4571
+ const originalPublicKey = yield btcWallet == null ? void 0 : btcWallet.getPublicKey();
4515
4572
  console.log({ accountId, originalAccountId, originalPublicKey });
4516
4573
  const iframeSrc = new URL(iframe.src);
4517
4574
  iframeSrc.searchParams.set("origin", window.location.origin);
@@ -4520,8 +4577,8 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4520
4577
  originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
4521
4578
  iframe.src = iframeSrc.toString();
4522
4579
  const actions = {
4523
- signAndSendTransaction: wallet.signAndSendTransaction,
4524
- signAndSendTransactions: wallet.signAndSendTransactions,
4580
+ signAndSendTransaction: nearWallet.signAndSendTransaction,
4581
+ signAndSendTransactions: nearWallet.signAndSendTransactions,
4525
4582
  executeBTCDepositAndAction,
4526
4583
  getWithdrawTransaction
4527
4584
  };
@@ -4566,6 +4623,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4566
4623
  });
4567
4624
  }
4568
4625
  function removeWalletButton() {
4626
+ console.log("removeWalletButton");
4569
4627
  const button = document.getElementById("satoshi-wallet-button");
4570
4628
  button == null ? void 0 : button.remove();
4571
4629
  const iframe = document.getElementById("satoshi-wallet-iframe");
@@ -4672,7 +4730,12 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4672
4730
  if (btcPublicKey) {
4673
4731
  yield getNearAccountByBtcPublicKey(btcPublicKey);
4674
4732
  removeWalletButton();
4675
- setupWalletButton(env, wallet, btcContext, metadata.walletUrl);
4733
+ setupWalletButton({
4734
+ env,
4735
+ nearWallet: wallet,
4736
+ btcWallet: btcContext,
4737
+ walletUrl: metadata.walletUrl
4738
+ });
4676
4739
  }
4677
4740
  } else {
4678
4741
  removeWalletButton();
@@ -4915,11 +4978,30 @@ function setupBTCWallet({
4915
4978
  import {
4916
4979
  setupModal as _setupModal
4917
4980
  } from "ref-modal-ui";
4981
+ var subscription;
4918
4982
  function setupWalletSelectorModal(selector, options) {
4919
4983
  if (!selector)
4920
4984
  throw new Error("selector is required");
4985
+ const {
4986
+ showChainGroups = true,
4987
+ showWalletUIForNearAccount = true,
4988
+ env = "mainnet",
4989
+ walletUrl
4990
+ } = options;
4991
+ subscription == null ? void 0 : subscription.unsubscribe();
4921
4992
  const state = selector.store.getState();
4922
4993
  const group = getGroup(state);
4994
+ subscription = selector.store.observable.subscribe((state2) => {
4995
+ const walletId = state2.selectedWalletId;
4996
+ console.log("setupWalletSelectorModal walletId", walletId);
4997
+ if (!walletId)
4998
+ removeWalletButton();
4999
+ if (showWalletUIForNearAccount && walletId !== "btc-wallet") {
5000
+ selector.wallet().then((wallet) => {
5001
+ setupWalletButton({ env, nearWallet: wallet, walletUrl });
5002
+ });
5003
+ }
5004
+ });
4923
5005
  if (group.includes("btc")) {
4924
5006
  document.head.appendChild(document.createElement("style")).textContent = `
4925
5007
  #near-wallet-selector-modal .options-list .btc-wallet {
@@ -4930,7 +5012,7 @@ function setupWalletSelectorModal(selector, options) {
4930
5012
  const modal = _setupModal(selector, options);
4931
5013
  const originalShow = modal.show.bind(modal);
4932
5014
  modal.show = () => __async(this, null, function* () {
4933
- const chain = group.length > 1 ? yield openChainModal() : group[0];
5015
+ const chain = group.length > 1 && showChainGroups ? yield openChainModal() : group[0];
4934
5016
  if (chain === "btc") {
4935
5017
  const module = state.modules.find((module2) => module2.id === "btc-wallet");
4936
5018
  if (module) {
@@ -4987,7 +5069,7 @@ function getGroup(state) {
4987
5069
 
4988
5070
  // src/index.ts
4989
5071
  var getVersion = () => {
4990
- return "0.5.53-beta";
5072
+ return "0.5.55-beta";
4991
5073
  };
4992
5074
  if (typeof window !== "undefined") {
4993
5075
  window.__BTC_WALLET_VERSION = getVersion();