btc-wallet 0.5.52-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 +20 -15
- package/dist/core/setupModal.d.ts +7 -1
- package/dist/index.js +153 -65
- package/dist/index.js.map +3 -3
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/initWalletButton.d.ts +7 -1
- package/esm/index.js +151 -63
- package/esm/index.js.map +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
@@ -36,9 +36,14 @@ const selector = await setupWalletSelector({
|
|
36
36
|
],
|
37
37
|
});
|
38
38
|
|
39
|
-
// 2. Setup wallet selector modal
|
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;
|
66
|
-
amount: string;
|
67
|
-
msg: string;
|
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;
|
72
|
-
|
76
|
+
amount?: string; // amount to deposit to Satoshi bridge
|
77
|
+
|
73
78
|
// Common optional parameters
|
74
|
-
feeRate?: number;
|
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;
|
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',
|
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',
|
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
|
-
|
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
|
-
|
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 =
|
885
|
+
const data = storage == null ? void 0 : storage.get(`${__privateGet(this, _network)}:addresses`);
|
840
886
|
if (data) {
|
841
|
-
return
|
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
|
-
|
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
|
-
|
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 =
|
1046
|
+
const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
|
1001
1047
|
if (data) {
|
1002
|
-
|
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 =
|
1059
|
+
const data = storage2 == null ? void 0 : storage2.get(`${__privateGet(this, _network2)}:addresses`);
|
1015
1060
|
if (data) {
|
1016
|
-
|
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
|
-
|
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
|
-
|
1275
|
+
(_a = storageStore()) == null ? void 0 : _a.set("current-connector-id", connector.metadata.id);
|
1232
1276
|
setConnectorId(connector.metadata.id);
|
1233
1277
|
}
|
1234
1278
|
}),
|
@@ -2390,12 +2434,16 @@ var ConnectProvider = ({
|
|
2390
2434
|
name: ((_a = Object.keys(options.aaOptions.accountContracts)) == null ? void 0 : _a[0]) || "BTC",
|
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
|
-
const
|
2394
|
-
|
2395
|
-
|
2437
|
+
const getConnectorId = (0, import_react10.useCallback)(() => {
|
2438
|
+
var _a2;
|
2439
|
+
if (typeof window === "undefined") {
|
2440
|
+
return "";
|
2441
|
+
}
|
2442
|
+
const id = (_a2 = storageStore()) == null ? void 0 : _a2.get("current-connector-id");
|
2443
|
+
return id != null ? id : "";
|
2396
2444
|
}, []);
|
2397
2445
|
const getConnector = (0, import_react10.useCallback)(() => {
|
2398
|
-
const connectorId2 =
|
2446
|
+
const connectorId2 = getConnectorId();
|
2399
2447
|
return connectors.find((item) => item.metadata.id === connectorId2);
|
2400
2448
|
}, [connectorId, connectors]);
|
2401
2449
|
const setAccountContract = (0, import_react10.useCallback)(
|
@@ -2409,8 +2457,11 @@ var ConnectProvider = ({
|
|
2409
2457
|
[options.aaOptions.accountContracts, _setAccountContract]
|
2410
2458
|
);
|
2411
2459
|
(0, import_react10.useEffect)(() => {
|
2412
|
-
|
2413
|
-
|
2460
|
+
const connectorId2 = getConnectorId();
|
2461
|
+
if (connectorId2) {
|
2462
|
+
setConnectorId(connectorId2);
|
2463
|
+
}
|
2464
|
+
}, [autoConnect, getConnectorId]);
|
2414
2465
|
const evmSupportChainIds = (0, import_react10.useMemo)(() => {
|
2415
2466
|
var _a2;
|
2416
2467
|
let chainIds = (_a2 = options.aaOptions.accountContracts[accountContract.name]) == null ? void 0 : _a2.filter((item) => item.version === accountContract.version).map((item) => item.chainIds).reduce((a, b) => {
|
@@ -2530,7 +2581,8 @@ var ConnectProvider = ({
|
|
2530
2581
|
}
|
2531
2582
|
}, [connectorId, connectors]);
|
2532
2583
|
const disconnect = (0, import_react10.useCallback)(() => {
|
2533
|
-
|
2584
|
+
var _a2;
|
2585
|
+
(_a2 = storageStore()) == null ? void 0 : _a2.remove("current-connector-id");
|
2534
2586
|
txConfirmUtils_default.reset();
|
2535
2587
|
if (connector) {
|
2536
2588
|
connector.disconnect();
|
@@ -2719,7 +2771,8 @@ function BtcWalletSelectorContextProvider({
|
|
2719
2771
|
new UnisatConnector(),
|
2720
2772
|
new XverseConnector(),
|
2721
2773
|
new OKXConnector(),
|
2722
|
-
new BitgetConnector()
|
2774
|
+
new BitgetConnector(),
|
2775
|
+
new MagicEdenConnector()
|
2723
2776
|
];
|
2724
2777
|
const walletSelectorContextValue = (0, import_react11.useMemo)(() => {
|
2725
2778
|
const simpleFn = {};
|
@@ -2958,7 +3011,7 @@ var nearRpcUrls = {
|
|
2958
3011
|
mainnet: [
|
2959
3012
|
"https://near.lava.build",
|
2960
3013
|
"https://rpc.mainnet.near.org",
|
2961
|
-
"https://
|
3014
|
+
"https://mw.rpc.fastnear.com",
|
2962
3015
|
"https://near.drpc.org"
|
2963
3016
|
],
|
2964
3017
|
testnet: ["https://rpc.testnet.near.org"]
|
@@ -3142,7 +3195,7 @@ function pollTransactionStatuses(network, hashes) {
|
|
3142
3195
|
var import_transactions = require("@near-js/transactions");
|
3143
3196
|
var import_key_pair = require("near-api-js/lib/utils/key_pair");
|
3144
3197
|
var import_transaction = require("near-api-js/lib/transaction");
|
3145
|
-
var
|
3198
|
+
var import_utils13 = require("@near-js/utils");
|
3146
3199
|
var import_bs58 = __toESM(require("bs58"), 1);
|
3147
3200
|
var import_js_sha256 = require("js-sha256");
|
3148
3201
|
var import_near_api_js2 = require("near-api-js");
|
@@ -3154,36 +3207,37 @@ var STORAGE_KEYS = {
|
|
3154
3207
|
PUBLIC_KEY: "btc-wallet-publickey",
|
3155
3208
|
BTC_PUBLIC_KEY: "btc-wallet-btc-publickey"
|
3156
3209
|
};
|
3210
|
+
var storage3 = storageStore("SATOSHI_WALLET_ACCOUNT");
|
3157
3211
|
var state_default = {
|
3158
3212
|
saveAccount(account) {
|
3159
3213
|
if (!account) {
|
3160
3214
|
this.removeAccount();
|
3161
3215
|
return;
|
3162
3216
|
}
|
3163
|
-
|
3217
|
+
storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.ACCOUNT, account);
|
3164
3218
|
},
|
3165
3219
|
removeAccount() {
|
3166
|
-
|
3220
|
+
storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.ACCOUNT);
|
3167
3221
|
},
|
3168
3222
|
savePublicKey(publicKey) {
|
3169
3223
|
if (!publicKey) {
|
3170
3224
|
this.removePublicKey();
|
3171
3225
|
return;
|
3172
3226
|
}
|
3173
|
-
|
3227
|
+
storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.PUBLIC_KEY, publicKey);
|
3174
3228
|
},
|
3175
3229
|
removePublicKey() {
|
3176
|
-
|
3230
|
+
storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.PUBLIC_KEY);
|
3177
3231
|
},
|
3178
3232
|
saveBtcPublicKey(publicKey) {
|
3179
3233
|
if (!publicKey) {
|
3180
3234
|
this.removeBtcPublicKey();
|
3181
3235
|
return;
|
3182
3236
|
}
|
3183
|
-
|
3237
|
+
storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
|
3184
3238
|
},
|
3185
3239
|
removeBtcPublicKey() {
|
3186
|
-
|
3240
|
+
storage3 == null ? void 0 : storage3.remove(STORAGE_KEYS.BTC_PUBLIC_KEY);
|
3187
3241
|
},
|
3188
3242
|
clear() {
|
3189
3243
|
this.removeAccount();
|
@@ -3199,13 +3253,13 @@ var state_default = {
|
|
3199
3253
|
this.savePublicKey(publicKey);
|
3200
3254
|
},
|
3201
3255
|
getAccount() {
|
3202
|
-
return
|
3256
|
+
return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.ACCOUNT)) || "";
|
3203
3257
|
},
|
3204
3258
|
getPublicKey() {
|
3205
|
-
return
|
3259
|
+
return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.PUBLIC_KEY)) || "";
|
3206
3260
|
},
|
3207
3261
|
getBtcPublicKey() {
|
3208
|
-
return
|
3262
|
+
return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.BTC_PUBLIC_KEY)) || "";
|
3209
3263
|
},
|
3210
3264
|
isValid() {
|
3211
3265
|
const account = this.getAccount();
|
@@ -3508,7 +3562,7 @@ function convertTransactionToTxHex(_0) {
|
|
3508
3562
|
transaction.receiverId,
|
3509
3563
|
BigInt(nearNonceNumber) + BigInt(index),
|
3510
3564
|
newActions,
|
3511
|
-
(0,
|
3565
|
+
(0, import_utils13.baseDecode)(header.hash)
|
3512
3566
|
);
|
3513
3567
|
const txBytes = (0, import_transaction.encodeTransaction)(_transaction);
|
3514
3568
|
const txHex = Array.from(txBytes, (byte) => ("0" + (byte & 255).toString(16)).slice(-2)).join(
|
@@ -3901,11 +3955,13 @@ function getCsnaAccountId(env) {
|
|
3901
3955
|
});
|
3902
3956
|
}
|
3903
3957
|
function checkDepositDisabledAddress() {
|
3904
|
-
|
3958
|
+
var _a;
|
3959
|
+
const data = (_a = storageStore("SATOSHI_WALLET_XVERSE")) == null ? void 0 : _a.get(
|
3960
|
+
`Mainnet:addresses`
|
3961
|
+
);
|
3905
3962
|
if (!data)
|
3906
3963
|
return;
|
3907
|
-
const
|
3908
|
-
const address = addresses == null ? void 0 : addresses[0];
|
3964
|
+
const address = data == null ? void 0 : data[0];
|
3909
3965
|
if (address.walletType === "ledger" && !["p2wpkh", "p2sh"].includes(address.addressType)) {
|
3910
3966
|
throw new Error("Ledger is only supported for p2wpkh and p2sh address");
|
3911
3967
|
}
|
@@ -3942,7 +3998,7 @@ function executeBTCDepositAndAction(_0) {
|
|
3942
3998
|
throw new Error("Deposit amount or action is required");
|
3943
3999
|
}
|
3944
4000
|
const csna = yield getCsnaAccountId(env);
|
3945
|
-
const depositAmount =
|
4001
|
+
const depositAmount = new import_big2.default(amount || (action == null ? void 0 : action.amount) || 0).round(0, import_big2.default.roundDown).toNumber();
|
3946
4002
|
console.log("depositAmount", depositAmount);
|
3947
4003
|
if (depositAmount <= 0) {
|
3948
4004
|
throw new Error("Invalid deposit amount");
|
@@ -4046,13 +4102,14 @@ function checkSatoshiWhitelist(btcAccountId, env = "mainnet") {
|
|
4046
4102
|
return __async(this, null, function* () {
|
4047
4103
|
if (env !== "mainnet")
|
4048
4104
|
return;
|
4049
|
-
const
|
4105
|
+
const storage5 = storageStore();
|
4106
|
+
const hasShownNotice = storage5 == null ? void 0 : storage5.get("private-mainnet-notice");
|
4050
4107
|
if (!hasShownNotice) {
|
4051
4108
|
Dialog.alert({
|
4052
4109
|
title: "Notice",
|
4053
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"
|
4054
4111
|
});
|
4055
|
-
|
4112
|
+
storage5 == null ? void 0 : storage5.set("private-mainnet-notice", "true");
|
4056
4113
|
}
|
4057
4114
|
if (!btcAccountId)
|
4058
4115
|
return;
|
@@ -4382,7 +4439,13 @@ function uint8ArrayToHex(uint8Array) {
|
|
4382
4439
|
}
|
4383
4440
|
|
4384
4441
|
// src/utils/initWalletButton.ts
|
4385
|
-
|
4442
|
+
var storage4 = storageStore("SATOSHI_WALLET_BUTTON");
|
4443
|
+
function setupWalletButton({
|
4444
|
+
env,
|
4445
|
+
nearWallet,
|
4446
|
+
btcWallet,
|
4447
|
+
walletUrl
|
4448
|
+
}) {
|
4386
4449
|
console.log(`setupWalletButton ${walletUrl || ""}`);
|
4387
4450
|
if (document.getElementById("satoshi-wallet-button")) {
|
4388
4451
|
return;
|
@@ -4405,23 +4468,25 @@ function setupWalletButton(env, wallet, originalWallet, walletUrl) {
|
|
4405
4468
|
closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
|
4406
4469
|
iframe
|
4407
4470
|
});
|
4408
|
-
setupButtonClickHandler(button, iframe,
|
4471
|
+
setupButtonClickHandler(button, iframe, nearWallet, btcWallet);
|
4409
4472
|
}
|
4410
4473
|
function createFloatingButtonWithIframe({
|
4411
4474
|
openImageUrl,
|
4412
4475
|
closeImageUrl,
|
4413
4476
|
iframe
|
4414
4477
|
}) {
|
4478
|
+
var _a;
|
4415
4479
|
const button = document.createElement("img");
|
4416
4480
|
button.id = "satoshi-wallet-button";
|
4417
|
-
const isIframeVisible =
|
4481
|
+
const isIframeVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
|
4418
4482
|
button.src = isIframeVisible ? closeImageUrl : openImageUrl;
|
4419
4483
|
iframe.style.display = isIframeVisible ? "block" : "none";
|
4420
4484
|
const windowWidth = window.innerWidth;
|
4421
4485
|
const windowHeight = window.innerHeight;
|
4422
|
-
const savedPosition =
|
4423
|
-
|
4424
|
-
|
4486
|
+
const savedPosition = (storage4 == null ? void 0 : storage4.get("position")) || {
|
4487
|
+
right: "20px",
|
4488
|
+
bottom: "20px"
|
4489
|
+
};
|
4425
4490
|
const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);
|
4426
4491
|
const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);
|
4427
4492
|
Object.assign(button.style, {
|
@@ -4517,13 +4582,10 @@ function createFloatingButtonWithIframe({
|
|
4517
4582
|
isDragging = false;
|
4518
4583
|
button.style.cursor = "grab";
|
4519
4584
|
button.style.transition = "transform 0.15s ease";
|
4520
|
-
|
4521
|
-
|
4522
|
-
|
4523
|
-
|
4524
|
-
bottom: button.style.bottom
|
4525
|
-
})
|
4526
|
-
);
|
4585
|
+
storage4 == null ? void 0 : storage4.set("position", {
|
4586
|
+
right: button.style.right,
|
4587
|
+
bottom: button.style.bottom
|
4588
|
+
});
|
4527
4589
|
if (!isDragEvent) {
|
4528
4590
|
handleButtonClick();
|
4529
4591
|
}
|
@@ -4537,7 +4599,7 @@ function createFloatingButtonWithIframe({
|
|
4537
4599
|
const newVisibleState = !isCurrentlyVisible;
|
4538
4600
|
iframe.style.display = newVisibleState ? "block" : "none";
|
4539
4601
|
button.src = newVisibleState ? closeImageUrl : openImageUrl;
|
4540
|
-
|
4602
|
+
storage4 == null ? void 0 : storage4.set("visible", newVisibleState);
|
4541
4603
|
setTimeout(() => {
|
4542
4604
|
if (newVisibleState) {
|
4543
4605
|
iframe.focus();
|
@@ -4551,11 +4613,12 @@ function createIframe({
|
|
4551
4613
|
iframeUrl,
|
4552
4614
|
iframeStyle = {}
|
4553
4615
|
}) {
|
4616
|
+
var _a;
|
4554
4617
|
const iframe = document.createElement("iframe");
|
4555
4618
|
iframe.id = "satoshi-wallet-iframe";
|
4556
4619
|
iframe.allow = "clipboard-read; clipboard-write";
|
4557
4620
|
iframe.src = iframeUrl;
|
4558
|
-
const isVisible =
|
4621
|
+
const isVisible = (_a = storage4 == null ? void 0 : storage4.get("visible")) != null ? _a : true;
|
4559
4622
|
Object.assign(iframe.style, __spreadValues({
|
4560
4623
|
position: "fixed",
|
4561
4624
|
bottom: "90px",
|
@@ -4570,12 +4633,12 @@ function createIframe({
|
|
4570
4633
|
return iframe;
|
4571
4634
|
}
|
4572
4635
|
var currentMessageHandler = null;
|
4573
|
-
function setupButtonClickHandler(button, iframe,
|
4636
|
+
function setupButtonClickHandler(button, iframe, nearWallet, btcWallet) {
|
4574
4637
|
return __async(this, null, function* () {
|
4575
4638
|
var _a;
|
4576
|
-
const accountId = (_a = yield
|
4577
|
-
const originalAccountId =
|
4578
|
-
const originalPublicKey = yield
|
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();
|
4579
4642
|
console.log({ accountId, originalAccountId, originalPublicKey });
|
4580
4643
|
const iframeSrc = new URL(iframe.src);
|
4581
4644
|
iframeSrc.searchParams.set("origin", window.location.origin);
|
@@ -4584,8 +4647,8 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
|
|
4584
4647
|
originalPublicKey && iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
|
4585
4648
|
iframe.src = iframeSrc.toString();
|
4586
4649
|
const actions = {
|
4587
|
-
signAndSendTransaction:
|
4588
|
-
signAndSendTransactions:
|
4650
|
+
signAndSendTransaction: nearWallet.signAndSendTransaction,
|
4651
|
+
signAndSendTransactions: nearWallet.signAndSendTransactions,
|
4589
4652
|
executeBTCDepositAndAction,
|
4590
4653
|
getWithdrawTransaction
|
4591
4654
|
};
|
@@ -4630,6 +4693,7 @@ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
|
|
4630
4693
|
});
|
4631
4694
|
}
|
4632
4695
|
function removeWalletButton() {
|
4696
|
+
console.log("removeWalletButton");
|
4633
4697
|
const button = document.getElementById("satoshi-wallet-button");
|
4634
4698
|
button == null ? void 0 : button.remove();
|
4635
4699
|
const iframe = document.getElementById("satoshi-wallet-iframe");
|
@@ -4736,7 +4800,12 @@ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
|
4736
4800
|
if (btcPublicKey) {
|
4737
4801
|
yield getNearAccountByBtcPublicKey(btcPublicKey);
|
4738
4802
|
removeWalletButton();
|
4739
|
-
setupWalletButton(
|
4803
|
+
setupWalletButton({
|
4804
|
+
env,
|
4805
|
+
nearWallet: wallet,
|
4806
|
+
btcWallet: btcContext,
|
4807
|
+
walletUrl: metadata.walletUrl
|
4808
|
+
});
|
4740
4809
|
}
|
4741
4810
|
} else {
|
4742
4811
|
removeWalletButton();
|
@@ -4977,11 +5046,30 @@ function setupBTCWallet({
|
|
4977
5046
|
|
4978
5047
|
// src/core/setupModal.ts
|
4979
5048
|
var import_ref_modal_ui = require("ref-modal-ui");
|
5049
|
+
var subscription;
|
4980
5050
|
function setupWalletSelectorModal(selector, options) {
|
4981
5051
|
if (!selector)
|
4982
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();
|
4983
5060
|
const state = selector.store.getState();
|
4984
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
|
+
});
|
4985
5073
|
if (group.includes("btc")) {
|
4986
5074
|
document.head.appendChild(document.createElement("style")).textContent = `
|
4987
5075
|
#near-wallet-selector-modal .options-list .btc-wallet {
|
@@ -4992,7 +5080,7 @@ function setupWalletSelectorModal(selector, options) {
|
|
4992
5080
|
const modal = (0, import_ref_modal_ui.setupModal)(selector, options);
|
4993
5081
|
const originalShow = modal.show.bind(modal);
|
4994
5082
|
modal.show = () => __async(this, null, function* () {
|
4995
|
-
const chain = group.length > 1 ? yield openChainModal() : group[0];
|
5083
|
+
const chain = group.length > 1 && showChainGroups ? yield openChainModal() : group[0];
|
4996
5084
|
if (chain === "btc") {
|
4997
5085
|
const module2 = state.modules.find((module3) => module3.id === "btc-wallet");
|
4998
5086
|
if (module2) {
|
@@ -5049,7 +5137,7 @@ function getGroup(state) {
|
|
5049
5137
|
|
5050
5138
|
// src/index.ts
|
5051
5139
|
var getVersion = () => {
|
5052
|
-
return "0.5.
|
5140
|
+
return "0.5.55-beta";
|
5053
5141
|
};
|
5054
5142
|
if (typeof window !== "undefined") {
|
5055
5143
|
window.__BTC_WALLET_VERSION = getVersion();
|