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.
package/README.md CHANGED
@@ -36,9 +36,14 @@ const selector = await setupWalletSelector({
36
36
  ],
37
37
  });
38
38
 
39
- // 2. Setup wallet selector modal,params see setupModal @near-wallet-selector/modal-ui
39
+ // 2. Setup wallet selector modal
40
+ // Note: For enhanced functionality, use setupWalletSelectorModal exported from btc-wallet
41
+ // If using setupModal from @near-wallet-selector/modal-ui, the showChainGroups and showWalletUIForNearAccount parameters below are not supported
40
42
  setupWalletSelectorModal(selector, {
41
- contractId:'xxx.near',
43
+ contractId: 'xxx.near',
44
+ showChainGroups?: boolean, // optional: show chain group selection, defaults to true
45
+ showWalletUIForNearAccount?: boolean, // optional: show wallet UI for regular NEAR accounts, defaults to true
46
+ env?: 'mainnet' | 'testnet' | 'private_mainnet' | 'dev', // optional: defaults to NEAR network environment
42
47
  });
43
48
 
44
49
  // 3. Wrap your app with BtcWalletSelectorContextProvider
@@ -62,18 +67,18 @@ Execute a native BTC deposit to receive corresponding BTC tokens on NEAR through
62
67
  interface ExecuteBTCDepositAndActionParams<T extends boolean = true> {
63
68
  // Option 1: For dApp one-click BTC deposit and action
64
69
  action?: {
65
- receiver_id: string; // receiver account on NEAR
66
- amount: string; // amount to deposit
67
- msg: string; // message for the transaction
70
+ receiver_id: string; // receiver account on NEAR
71
+ amount: string; // amount to deposit
72
+ msg: string; // message for the transaction
68
73
  };
69
-
74
+
70
75
  // Option 2: For direct Satoshi bridge deposit
71
- amount?: string; // amount to deposit to Satoshi bridge
72
-
76
+ amount?: string; // amount to deposit to Satoshi bridge
77
+
73
78
  // Common optional parameters
74
- feeRate?: number; // optional: custom fee rate for the BTC transaction
79
+ feeRate?: number; // optional: custom fee rate for the BTC transaction
75
80
  env?: 'mainnet' | 'testnet' | 'private_mainnet' | 'dev'; // optional: defaults to NEAR network environment
76
- pollResult?: T; // optional: whether to poll for transaction result
81
+ pollResult?: T; // optional: whether to poll for transaction result
77
82
  registerDeposit?: string; // optional: whether to register deposit,default 0.000125 NEAR
78
83
  newAccountMinDepositAmount?: boolean; // default is true, if true, new account minimum deposit BTC amount 1000sat, otherwise 0
79
84
  registerContractId?: string; // if registerContractId is provided, it will be used to register the contract, otherwise it will be the default contract id
@@ -84,15 +89,15 @@ await executeBTCDepositAndAction({
84
89
  action: {
85
90
  receiver_id: 'token.near',
86
91
  amount: '1000000',
87
- msg: 'ft_transfer_call message' // ft_transfer_call message
92
+ msg: 'ft_transfer_call message', // ft_transfer_call message
88
93
  },
89
- registerDeposit: '100000000000000000000000', // default 0.000125 NEAR, you can set it according to your needs
94
+ registerDeposit: '100000000000000000000000', // default 0.000125 NEAR, you can set it according to your needs
90
95
  });
91
96
 
92
97
  // Example 2: Direct Satoshi bridge deposit
93
98
  await executeBTCDepositAndAction({
94
- amount: '1000000', // amount to deposit to Satoshi bridge
95
- feeRate: 5
99
+ amount: '1000000', // amount to deposit to Satoshi bridge
100
+ feeRate: 5,
96
101
  });
97
102
  ```
98
103
 
@@ -158,4 +163,4 @@ const transaction = await getWithdrawTransaction({
158
163
 
159
164
  ## License
160
165
 
161
- This project is licensed under the MIT License - see the LICENSE file for details.
166
+ This project is licensed under the MIT License - see the LICENSE file for details.
@@ -1,5 +1,11 @@
1
1
  import { type WalletSelectorModal as _WalletSelectorModal, type ModalOptions as _ModalOptions } from 'ref-modal-ui';
2
2
  import type { WalletSelector } from '@near-wallet-selector/core';
3
- export type WalletSelectorModalOptions = _ModalOptions;
3
+ import { ENV } from '../config';
4
+ export interface WalletSelectorModalOptions extends _ModalOptions {
5
+ showChainGroups?: boolean;
6
+ showWalletUIForNearAccount?: boolean;
7
+ walletUrl?: string;
8
+ env?: ENV;
9
+ }
4
10
  export type WalletSelectorModal = _WalletSelectorModal;
5
11
  export declare function setupWalletSelectorModal(selector: WalletSelector, options: WalletSelectorModalOptions): _WalletSelectorModal;
package/dist/index.js CHANGED
@@ -234,6 +234,51 @@ function isMobile() {
234
234
  }
235
235
  return false;
236
236
  }
237
+ function safeJSONParse(str) {
238
+ try {
239
+ return JSON.parse(str);
240
+ } catch (e) {
241
+ console.error("safeJSONParse", e);
242
+ return void 0;
243
+ }
244
+ }
245
+ function safeJSONStringify(obj) {
246
+ try {
247
+ return JSON.stringify(obj);
248
+ } catch (e) {
249
+ console.error("safeJSONStringify", e);
250
+ return void 0;
251
+ }
252
+ }
253
+ function storageStore(namespace, options) {
254
+ if (typeof window === "undefined")
255
+ return;
256
+ const _namespace = namespace || "SATOSHI_WALLET_DEFAULT";
257
+ const storage5 = (options == null ? void 0 : options.storage) || (window == null ? void 0 : window.localStorage);
258
+ const namespaceKey = (key) => {
259
+ return _namespace + ":" + key;
260
+ };
261
+ return {
262
+ set(key, value) {
263
+ const _value = safeJSONStringify(value);
264
+ _value ? storage5.setItem(namespaceKey(key), _value) : storage5.removeItem(namespaceKey(key));
265
+ },
266
+ get(key) {
267
+ const _value = storage5.getItem(namespaceKey(key));
268
+ return _value ? safeJSONParse(_value) : void 0;
269
+ },
270
+ remove(key) {
271
+ storage5.removeItem(namespaceKey(key));
272
+ },
273
+ clearAll: function clearAll() {
274
+ for (const key in storage5) {
275
+ if (key.startsWith(namespace + ":")) {
276
+ storage5.removeItem(key);
277
+ }
278
+ }
279
+ }
280
+ };
281
+ }
237
282
 
238
283
  // src/utils/Dialog.ts
239
284
  var Dialog = class {
@@ -776,6 +821,7 @@ var import_events = __toESM(require("events"), 1);
776
821
  var xverse_default = "data:image/png;base64,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";
777
822
 
778
823
  // src/connector/xverse.ts
824
+ var storage = storageStore("SATOSHI_WALLET_XVERSE");
779
825
  var _network, _event;
780
826
  var XverseConnector = class extends BaseConnector {
781
827
  constructor() {
@@ -801,7 +847,7 @@ var XverseConnector = class extends BaseConnector {
801
847
  walletType
802
848
  }));
803
849
  console.log("\u{1F680} ~ XverseConnector ~ loadAccounts ~ res:", addresses);
804
- localStorage.setItem("btc-connect-xverse-addresses-" + network, JSON.stringify(addresses));
850
+ storage == null ? void 0 : storage.set(`${network}:addresses`, addresses);
805
851
  return addresses;
806
852
  });
807
853
  __privateGet(this, _event).setMaxListeners(100);
@@ -836,9 +882,9 @@ var XverseConnector = class extends BaseConnector {
836
882
  }
837
883
  getAddresses() {
838
884
  return __async(this, null, function* () {
839
- const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
885
+ const data = storage == null ? void 0 : storage.get(`${__privateGet(this, _network)}:addresses`);
840
886
  if (data) {
841
- return JSON.parse(data);
887
+ return data;
842
888
  }
843
889
  return [];
844
890
  });
@@ -923,8 +969,7 @@ var XverseConnector = class extends BaseConnector {
923
969
  });
924
970
  }
925
971
  disconnect() {
926
- localStorage.removeItem("btc-connect-xverse-addresses-Mainnet");
927
- localStorage.removeItem("btc-connect-xverse-addresses-Testnet");
972
+ storage == null ? void 0 : storage.remove(`${__privateGet(this, _network)}:addresses`);
928
973
  }
929
974
  };
930
975
  _network = new WeakMap();
@@ -937,6 +982,7 @@ var import_events2 = __toESM(require("events"), 1);
937
982
  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=";
938
983
 
939
984
  // src/connector/magicEden.ts
985
+ var storage2 = storageStore("SATOSHI_WALLET_MAGICEDEN");
940
986
  var _network2, _event2;
941
987
  var MagicEdenConnector = class extends BaseConnector {
942
988
  constructor() {
@@ -970,7 +1016,7 @@ var MagicEdenConnector = class extends BaseConnector {
970
1016
  };
971
1017
  getAddress(getAddressOptions).catch((error) => reject(error));
972
1018
  });
973
- localStorage.setItem("btc-connect-magicEden-addresses-" + network, JSON.stringify(addresses));
1019
+ storage2 == null ? void 0 : storage2.set(`${network}:addresses`, addresses);
974
1020
  return addresses;
975
1021
  });
976
1022
  __privateGet(this, _event2).setMaxListeners(100);
@@ -997,10 +1043,9 @@ var MagicEdenConnector = class extends BaseConnector {
997
1043
  if (!this.isReady()) {
998
1044
  throw new Error(`${this.metadata.name} is not install!`);
999
1045
  }
1000
- const data = localStorage.getItem("btc-connect-magicEden-addresses-" + __privateGet(this, _network2));
1046
+ const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
1001
1047
  if (data) {
1002
- const addresses = JSON.parse(data);
1003
- return addresses.map((item) => item.address);
1048
+ return data.map((item) => item.address);
1004
1049
  } else {
1005
1050
  return [];
1006
1051
  }
@@ -1011,10 +1056,9 @@ var MagicEdenConnector = class extends BaseConnector {
1011
1056
  if (!this.isReady()) {
1012
1057
  throw new Error(`${this.metadata.name} is not install!`);
1013
1058
  }
1014
- const data = localStorage.getItem("btc-connect-magicEden-addresses-" + __privateGet(this, _network2));
1059
+ const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
1015
1060
  if (data) {
1016
- const addresses = JSON.parse(data);
1017
- return addresses[0].publicKey;
1061
+ return data[0].publicKey;
1018
1062
  } else {
1019
1063
  return "";
1020
1064
  }
@@ -1127,8 +1171,7 @@ var MagicEdenConnector = class extends BaseConnector {
1127
1171
  });
1128
1172
  }
1129
1173
  disconnect() {
1130
- localStorage.removeItem("btc-connect-magicEden-addresses-Mainnet");
1131
- localStorage.removeItem("btc-connect-magicEden-addresses-Testnet");
1174
+ storage2 == null ? void 0 : storage2.remove(`${__privateGet(this, _network2)}:addresses`);
1132
1175
  }
1133
1176
  };
1134
1177
  _network2 = new WeakMap();
@@ -1222,13 +1265,14 @@ var useConnector = () => {
1222
1265
  const { connectors, setConnectorId } = useConnectProvider();
1223
1266
  const connect = (0, import_react2.useCallback)(
1224
1267
  (connectorId) => __async(void 0, null, function* () {
1268
+ var _a;
1225
1269
  const connector = connectors.find((item) => item.metadata.id === connectorId);
1226
1270
  if (!connector) {
1227
1271
  throw new Error(`connector id ${connectorId} not found`);
1228
1272
  }
1229
1273
  const accounts = yield connector.requestAccounts();
1230
1274
  if (accounts.length > 0) {
1231
- localStorage.setItem("current-connector-id", connector.metadata.id);
1275
+ (_a = storageStore()) == null ? void 0 : _a.set("current-connector-id", connector.metadata.id);
1232
1276
  setConnectorId(connector.metadata.id);
1233
1277
  }
1234
1278
  }),
@@ -2391,10 +2435,11 @@ var ConnectProvider = ({
2391
2435
  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"
2392
2436
  });
2393
2437
  const getConnectorId = (0, import_react10.useCallback)(() => {
2438
+ var _a2;
2394
2439
  if (typeof window === "undefined") {
2395
2440
  return "";
2396
2441
  }
2397
- const id = localStorage.getItem("current-connector-id");
2442
+ const id = (_a2 = storageStore()) == null ? void 0 : _a2.get("current-connector-id");
2398
2443
  return id != null ? id : "";
2399
2444
  }, []);
2400
2445
  const getConnector = (0, import_react10.useCallback)(() => {
@@ -2536,7 +2581,8 @@ var ConnectProvider = ({
2536
2581
  }
2537
2582
  }, [connectorId, connectors]);
2538
2583
  const disconnect = (0, import_react10.useCallback)(() => {
2539
- localStorage.removeItem("current-connector-id");
2584
+ var _a2;
2585
+ (_a2 = storageStore()) == null ? void 0 : _a2.remove("current-connector-id");
2540
2586
  txConfirmUtils_default.reset();
2541
2587
  if (connector) {
2542
2588
  connector.disconnect();
@@ -2725,7 +2771,8 @@ function BtcWalletSelectorContextProvider({
2725
2771
  new UnisatConnector(),
2726
2772
  new XverseConnector(),
2727
2773
  new OKXConnector(),
2728
- new BitgetConnector()
2774
+ new BitgetConnector(),
2775
+ new MagicEdenConnector()
2729
2776
  ];
2730
2777
  const walletSelectorContextValue = (0, import_react11.useMemo)(() => {
2731
2778
  const simpleFn = {};
@@ -2964,7 +3011,7 @@ var nearRpcUrls = {
2964
3011
  mainnet: [
2965
3012
  "https://near.lava.build",
2966
3013
  "https://rpc.mainnet.near.org",
2967
- "https://free.rpc.fastnear.com",
3014
+ "https://mw.rpc.fastnear.com",
2968
3015
  "https://near.drpc.org"
2969
3016
  ],
2970
3017
  testnet: ["https://rpc.testnet.near.org"]
@@ -3148,7 +3195,7 @@ function pollTransactionStatuses(network, hashes) {
3148
3195
  var import_transactions = require("@near-js/transactions");
3149
3196
  var import_key_pair = require("near-api-js/lib/utils/key_pair");
3150
3197
  var import_transaction = require("near-api-js/lib/transaction");
3151
- var import_utils9 = require("@near-js/utils");
3198
+ var import_utils13 = require("@near-js/utils");
3152
3199
  var import_bs58 = __toESM(require("bs58"), 1);
3153
3200
  var import_js_sha256 = require("js-sha256");
3154
3201
  var import_near_api_js2 = require("near-api-js");
@@ -3160,36 +3207,37 @@ var STORAGE_KEYS = {
3160
3207
  PUBLIC_KEY: "btc-wallet-publickey",
3161
3208
  BTC_PUBLIC_KEY: "btc-wallet-btc-publickey"
3162
3209
  };
3210
+ var storage3 = storageStore("SATOSHI_WALLET_ACCOUNT");
3163
3211
  var state_default = {
3164
3212
  saveAccount(account) {
3165
3213
  if (!account) {
3166
3214
  this.removeAccount();
3167
3215
  return;
3168
3216
  }
3169
- window.localStorage.setItem(STORAGE_KEYS.ACCOUNT, account);
3217
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.ACCOUNT, account);
3170
3218
  },
3171
3219
  removeAccount() {
3172
- window.localStorage.removeItem(STORAGE_KEYS.ACCOUNT);
3220
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.ACCOUNT);
3173
3221
  },
3174
3222
  savePublicKey(publicKey) {
3175
3223
  if (!publicKey) {
3176
3224
  this.removePublicKey();
3177
3225
  return;
3178
3226
  }
3179
- window.localStorage.setItem(STORAGE_KEYS.PUBLIC_KEY, publicKey);
3227
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.PUBLIC_KEY, publicKey);
3180
3228
  },
3181
3229
  removePublicKey() {
3182
- window.localStorage.removeItem(STORAGE_KEYS.PUBLIC_KEY);
3230
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.PUBLIC_KEY);
3183
3231
  },
3184
3232
  saveBtcPublicKey(publicKey) {
3185
3233
  if (!publicKey) {
3186
3234
  this.removeBtcPublicKey();
3187
3235
  return;
3188
3236
  }
3189
- window.localStorage.setItem(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
3237
+ storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
3190
3238
  },
3191
3239
  removeBtcPublicKey() {
3192
- window.localStorage.removeItem(STORAGE_KEYS.BTC_PUBLIC_KEY);
3240
+ storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.BTC_PUBLIC_KEY);
3193
3241
  },
3194
3242
  clear() {
3195
3243
  this.removeAccount();
@@ -3205,13 +3253,13 @@ var state_default = {
3205
3253
  this.savePublicKey(publicKey);
3206
3254
  },
3207
3255
  getAccount() {
3208
- return window.localStorage.getItem(STORAGE_KEYS.ACCOUNT) || "";
3256
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.ACCOUNT)) || "";
3209
3257
  },
3210
3258
  getPublicKey() {
3211
- return window.localStorage.getItem(STORAGE_KEYS.PUBLIC_KEY) || "";
3259
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.PUBLIC_KEY)) || "";
3212
3260
  },
3213
3261
  getBtcPublicKey() {
3214
- return window.localStorage.getItem(STORAGE_KEYS.BTC_PUBLIC_KEY) || "";
3262
+ return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.BTC_PUBLIC_KEY)) || "";
3215
3263
  },
3216
3264
  isValid() {
3217
3265
  const account = this.getAccount();
@@ -3514,7 +3562,7 @@ function convertTransactionToTxHex(_0) {
3514
3562
  transaction.receiverId,
3515
3563
  BigInt(nearNonceNumber) + BigInt(index),
3516
3564
  newActions,
3517
- (0, import_utils9.baseDecode)(header.hash)
3565
+ (0, import_utils13.baseDecode)(header.hash)
3518
3566
  );
3519
3567
  const txBytes = (0, import_transaction.encodeTransaction)(_transaction);
3520
3568
  const txHex = Array.from(txBytes, (byte) => ("0" + (byte & 255).toString(16)).slice(-2)).join(
@@ -3907,11 +3955,13 @@ function getCsnaAccountId(env) {
3907
3955
  });
3908
3956
  }
3909
3957
  function checkDepositDisabledAddress() {
3910
- const data = localStorage.getItem("btc-connect-xverse-addresses-Mainnet");
3958
+ var _a;
3959
+ const data = (_a = storageStore("SATOSHI_WALLET_XVERSE")) == null ? void 0 : _a.get(
3960
+ `Mainnet:addresses`
3961
+ );
3911
3962
  if (!data)
3912
3963
  return;
3913
- const addresses = JSON.parse(data);
3914
- const address = addresses == null ? void 0 : addresses[0];
3964
+ const address = data == null ? void 0 : data[0];
3915
3965
  if (address.walletType === "ledger" && !["p2wpkh", "p2sh"].includes(address.addressType)) {
3916
3966
  throw new Error("Ledger is only supported for p2wpkh and p2sh address");
3917
3967
  }
@@ -3948,7 +3998,7 @@ function executeBTCDepositAndAction(_0) {
3948
3998
  throw new Error("Deposit amount or action is required");
3949
3999
  }
3950
4000
  const csna = yield getCsnaAccountId(env);
3951
- const depositAmount = Number(amount || (action == null ? void 0 : action.amount) || 0);
4001
+ const depositAmount = new import_big2.default(amount || (action == null ? void 0 : action.amount) || 0).round(0, import_big2.default.roundDown).toNumber();
3952
4002
  console.log("depositAmount", depositAmount);
3953
4003
  if (depositAmount <= 0) {
3954
4004
  throw new Error("Invalid deposit amount");
@@ -4052,13 +4102,14 @@ function checkSatoshiWhitelist(btcAccountId, env = "mainnet") {
4052
4102
  return __async(this, null, function* () {
4053
4103
  if (env !== "mainnet")
4054
4104
  return;
4055
- const hasShownNotice = localStorage.getItem("btc-wallet-private-mainnet-notice");
4105
+ const storage5 = storageStore();
4106
+ const hasShownNotice = storage5 == null ? void 0 : storage5.get("private-mainnet-notice");
4056
4107
  if (!hasShownNotice) {
4057
4108
  Dialog.alert({
4058
4109
  title: "Notice",
4059
4110
  message: "You are currently using Satoshi Private Mainnet. This is a private version for testing. Please try a small amount of assets in Ramp"
4060
4111
  });
4061
- localStorage.setItem("btc-wallet-private-mainnet-notice", "true");
4112
+ storage5 == null ? void 0 : storage5.set("private-mainnet-notice", "true");
4062
4113
  }
4063
4114
  if (!btcAccountId)
4064
4115
  return;
@@ -4388,7 +4439,13 @@ function uint8ArrayToHex(uint8Array) {
4388
4439
  }
4389
4440
 
4390
4441
  // src/utils/initWalletButton.ts
4391
- function setupWalletButton(env, wallet, originalWallet, walletUrl) {
4442
+ var storage4 = storageStore("SATOSHI_WALLET_BUTTON");
4443
+ function setupWalletButton({
4444
+ env,
4445
+ nearWallet,
4446
+ btcWallet,
4447
+ walletUrl
4448
+ }) {
4392
4449
  console.log(`setupWalletButton ${walletUrl || ""}`);
4393
4450
  if (document.getElementById("satoshi-wallet-button")) {
4394
4451
  return;
@@ -4411,23 +4468,25 @@ function setupWalletButton(env, wallet, originalWallet, walletUrl) {
4411
4468
  closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
4412
4469
  iframe
4413
4470
  });
4414
- setupButtonClickHandler(button, iframe, wallet, originalWallet);
4471
+ setupButtonClickHandler(button, iframe, nearWallet, btcWallet);
4415
4472
  }
4416
4473
  function createFloatingButtonWithIframe({
4417
4474
  openImageUrl,
4418
4475
  closeImageUrl,
4419
4476
  iframe
4420
4477
  }) {
4478
+ var _a;
4421
4479
  const button = document.createElement("img");
4422
4480
  button.id = "satoshi-wallet-button";
4423
- const isIframeVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
4481
+ const isIframeVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
4424
4482
  button.src = isIframeVisible ? closeImageUrl : openImageUrl;
4425
4483
  iframe.style.display = isIframeVisible ? "block" : "none";
4426
4484
  const windowWidth = window.innerWidth;
4427
4485
  const windowHeight = window.innerHeight;
4428
- const savedPosition = JSON.parse(
4429
- localStorage.getItem("btc-wallet-button-position") || '{"right": "20px", "bottom": "20px"}'
4430
- );
4486
+ const savedPosition = (storage4 == null ? void 0 : storage4.get("position")) || {
4487
+ right: "20px",
4488
+ bottom: "20px"
4489
+ };
4431
4490
  const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);
4432
4491
  const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);
4433
4492
  Object.assign(button.style, {
@@ -4523,13 +4582,10 @@ function createFloatingButtonWithIframe({
4523
4582
  isDragging = false;
4524
4583
  button.style.cursor = "grab";
4525
4584
  button.style.transition = "transform 0.15s ease";
4526
- localStorage.setItem(
4527
- "btc-wallet-button-position",
4528
- JSON.stringify({
4529
- right: button.style.right,
4530
- bottom: button.style.bottom
4531
- })
4532
- );
4585
+ storage4 == null ? void 0 : storage4.set("position", {
4586
+ right: button.style.right,
4587
+ bottom: button.style.bottom
4588
+ });
4533
4589
  if (!isDragEvent) {
4534
4590
  handleButtonClick();
4535
4591
  }
@@ -4543,7 +4599,7 @@ function createFloatingButtonWithIframe({
4543
4599
  const newVisibleState = !isCurrentlyVisible;
4544
4600
  iframe.style.display = newVisibleState ? "block" : "none";
4545
4601
  button.src = newVisibleState ? closeImageUrl : openImageUrl;
4546
- localStorage.setItem("btc-wallet-iframe-visible", String(newVisibleState));
4602
+ storage4 == null ? void 0 : storage4.set("visible", newVisibleState);
4547
4603
  setTimeout(() => {
4548
4604
  if (newVisibleState) {
4549
4605
  iframe.focus();
@@ -4557,11 +4613,12 @@ function createIframe({
4557
4613
  iframeUrl,
4558
4614
  iframeStyle = {}
4559
4615
  }) {
4616
+ var _a;
4560
4617
  const iframe = document.createElement("iframe");
4561
4618
  iframe.id = "satoshi-wallet-iframe";
4562
4619
  iframe.allow = "clipboard-read; clipboard-write";
4563
4620
  iframe.src = iframeUrl;
4564
- const isVisible = localStorage.getItem("btc-wallet-iframe-visible") === "true";
4621
+ const isVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
4565
4622
  Object.assign(iframe.style, __spreadValues({
4566
4623
  position: "fixed",
4567
4624
  bottom: "90px",
@@ -4576,12 +4633,12 @@ function createIframe({
4576
4633
  return iframe;
4577
4634
  }
4578
4635
  var currentMessageHandler = null;
4579
- function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4636
+ function setupButtonClickHandler(button, iframe, nearWallet, btcWallet) {
4580
4637
  return __async(this, null, function* () {
4581
4638
  var _a;
4582
- const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
4583
- const originalAccountId = originalWallet.account;
4584
- const originalPublicKey = yield originalWallet.getPublicKey();
4639
+ const accountId = (_a = yield nearWallet == null ? void 0 : nearWallet.getAccounts()) == null ? void 0 : _a[0].accountId;
4640
+ const originalAccountId = btcWallet == null ? void 0 : btcWallet.account;
4641
+ const originalPublicKey = yield btcWallet == null ? void 0 : btcWallet.getPublicKey();
4585
4642
  console.log({ accountId, originalAccountId, originalPublicKey });
4586
4643
  const iframeSrc = new URL(iframe.src);
4587
4644
  iframeSrc.searchParams.set("origin", window.location.origin);
@@ -4590,8 +4647,8 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4590
4647
  originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
4591
4648
  iframe.src = iframeSrc.toString();
4592
4649
  const actions = {
4593
- signAndSendTransaction: wallet.signAndSendTransaction,
4594
- signAndSendTransactions: wallet.signAndSendTransactions,
4650
+ signAndSendTransaction: nearWallet.signAndSendTransaction,
4651
+ signAndSendTransactions: nearWallet.signAndSendTransactions,
4595
4652
  executeBTCDepositAndAction,
4596
4653
  getWithdrawTransaction
4597
4654
  };
@@ -4636,6 +4693,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
4636
4693
  });
4637
4694
  }
4638
4695
  function removeWalletButton() {
4696
+ console.log("removeWalletButton");
4639
4697
  const button = document.getElementById("satoshi-wallet-button");
4640
4698
  button == null ? void 0 : button.remove();
4641
4699
  const iframe = document.getElementById("satoshi-wallet-iframe");
@@ -4742,7 +4800,12 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
4742
4800
  if (btcPublicKey) {
4743
4801
  yield getNearAccountByBtcPublicKey(btcPublicKey);
4744
4802
  removeWalletButton();
4745
- setupWalletButton(env, wallet, btcContext, metadata.walletUrl);
4803
+ setupWalletButton({
4804
+ env,
4805
+ nearWallet: wallet,
4806
+ btcWallet: btcContext,
4807
+ walletUrl: metadata.walletUrl
4808
+ });
4746
4809
  }
4747
4810
  } else {
4748
4811
  removeWalletButton();
@@ -4983,11 +5046,30 @@ function setupBTCWallet({
4983
5046
 
4984
5047
  // src/core/setupModal.ts
4985
5048
  var import_ref_modal_ui = require("ref-modal-ui");
5049
+ var subscription;
4986
5050
  function setupWalletSelectorModal(selector, options) {
4987
5051
  if (!selector)
4988
5052
  throw new Error("selector is required");
5053
+ const {
5054
+ showChainGroups = true,
5055
+ showWalletUIForNearAccount = true,
5056
+ env = "mainnet",
5057
+ walletUrl
5058
+ } = options;
5059
+ subscription == null ? void 0 : subscription.unsubscribe();
4989
5060
  const state = selector.store.getState();
4990
5061
  const group = getGroup(state);
5062
+ subscription = selector.store.observable.subscribe((state2) => {
5063
+ const walletId = state2.selectedWalletId;
5064
+ console.log("setupWalletSelectorModal walletId", walletId);
5065
+ if (!walletId)
5066
+ removeWalletButton();
5067
+ if (showWalletUIForNearAccount && walletId !== "btc-wallet") {
5068
+ selector.wallet().then((wallet) => {
5069
+ setupWalletButton({ env, nearWallet: wallet, walletUrl });
5070
+ });
5071
+ }
5072
+ });
4991
5073
  if (group.includes("btc")) {
4992
5074
  document.head.appendChild(document.createElement("style")).textContent = `
4993
5075
  #near-wallet-selector-modal .options-list .btc-wallet {
@@ -4998,7 +5080,7 @@ function setupWalletSelectorModal(selector, options) {
4998
5080
  const modal = (0, import_ref_modal_ui.setupModal)(selector, options);
4999
5081
  const originalShow = modal.show.bind(modal);
5000
5082
  modal.show = () => __async(this, null, function* () {
5001
- const chain = group.length > 1 ? yield openChainModal() : group[0];
5083
+ const chain = group.length > 1 && showChainGroups ? yield openChainModal() : group[0];
5002
5084
  if (chain === "btc") {
5003
5085
  const module2 = state.modules.find((module3) => module3.id === "btc-wallet");
5004
5086
  if (module2) {
@@ -5055,7 +5137,7 @@ function getGroup(state) {
5055
5137
 
5056
5138
  // src/index.ts
5057
5139
  var getVersion = () => {
5058
- return "0.5.53-beta";
5140
+ return "0.5.55-beta";
5059
5141
  };
5060
5142
  if (typeof window !== "undefined") {
5061
5143
  window.__BTC_WALLET_VERSION = getVersion();