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 +20 -15
- package/dist/core/setupModal.d.ts +7 -1
- package/dist/index.js +142 -60
- 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 +140 -58
- 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
|
}),
|
@@ -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 =
|
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
|
-
|
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://
|
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
|
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
|
-
|
3217
|
+
storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.ACCOUNT, account);
|
3170
3218
|
},
|
3171
3219
|
removeAccount() {
|
3172
|
-
|
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
|
-
|
3227
|
+
storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.PUBLIC_KEY, publicKey);
|
3180
3228
|
},
|
3181
3229
|
removePublicKey() {
|
3182
|
-
|
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
|
-
|
3237
|
+
storage3 == null ? void 0 : storage3.set(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);
|
3190
3238
|
},
|
3191
3239
|
removeBtcPublicKey() {
|
3192
|
-
|
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
|
3256
|
+
return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.ACCOUNT)) || "";
|
3209
3257
|
},
|
3210
3258
|
getPublicKey() {
|
3211
|
-
return
|
3259
|
+
return (storage3 == null ? void 0 : storage3.get(STORAGE_KEYS.PUBLIC_KEY)) || "";
|
3212
3260
|
},
|
3213
3261
|
getBtcPublicKey() {
|
3214
|
-
return
|
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,
|
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
|
-
|
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
|
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 =
|
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
|
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
|
-
|
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
|
-
|
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,
|
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 =
|
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 =
|
4429
|
-
|
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
|
-
|
4527
|
-
|
4528
|
-
|
4529
|
-
|
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
|
-
|
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 =
|
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,
|
4636
|
+
function setupButtonClickHandler(button, iframe, nearWallet, btcWallet) {
|
4580
4637
|
return __async(this, null, function* () {
|
4581
4638
|
var _a;
|
4582
|
-
const accountId = (_a = yield
|
4583
|
-
const originalAccountId =
|
4584
|
-
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();
|
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:
|
4594
|
-
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(
|
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.
|
5140
|
+
return "0.5.55-beta";
|
5059
5141
|
};
|
5060
5142
|
if (typeof window !== "undefined") {
|
5061
5143
|
window.__BTC_WALLET_VERSION = getVersion();
|