btc-wallet 0.0.1
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 +9 -0
- package/dist/components/btcWalletSelectorContext.d.ts +12 -0
- package/dist/components/button/index.d.ts +10 -0
- package/dist/components/confirmBox/Modal.d.ts +7 -0
- package/dist/components/confirmBox/index.d.ts +9 -0
- package/dist/components/connectModal/index.d.ts +5 -0
- package/dist/components/copyText/index.d.ts +8 -0
- package/dist/components/hook.d.ts +1 -0
- package/dist/components/modal/index.d.ts +11 -0
- package/dist/components/signModal/index.d.ts +6 -0
- package/dist/components/spinner/index.d.ts +6 -0
- package/dist/components/tooltip/index.d.ts +7 -0
- package/dist/components/transactionDetails/index.d.ts +5 -0
- package/dist/connector/base.d.ts +29 -0
- package/dist/connector/bitget.d.ts +6 -0
- package/dist/connector/bybit.d.ts +6 -0
- package/dist/connector/index.d.ts +9 -0
- package/dist/connector/injected.d.ts +25 -0
- package/dist/connector/okx.d.ts +6 -0
- package/dist/connector/tokenPocket.d.ts +6 -0
- package/dist/connector/unisat.d.ts +6 -0
- package/dist/connector/wizz.d.ts +6 -0
- package/dist/connector/xverse.d.ts +23 -0
- package/dist/context/index.d.ts +45 -0
- package/dist/evmSigner/index.d.ts +4966 -0
- package/dist/evmSigner/provider.d.ts +13 -0
- package/dist/evmSigner/walletClientProvider.d.ts +10 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/useAccountContract.d.ts +4 -0
- package/dist/hooks/useAccounts.d.ts +3 -0
- package/dist/hooks/useBTCProvider.d.ts +16 -0
- package/dist/hooks/useConnectModal.d.ts +4 -0
- package/dist/hooks/useConnector.d.ts +4 -0
- package/dist/hooks/useETHProvider.d.ts +1 -0
- package/dist/hooks/useModalStateValue.d.ts +6 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +2738 -0
- package/dist/index.js.map +7 -0
- package/dist/package.json +1 -0
- package/dist/types/accountInfo.d.ts +6 -0
- package/dist/types/deserializeTx.d.ts +97 -0
- package/dist/types/eventName.d.ts +8 -0
- package/dist/types/evmMethod.d.ts +4 -0
- package/dist/utils/ethereumUtils.d.ts +7 -0
- package/dist/utils/eventUtils.d.ts +4 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/initWalletButton.d.ts +6 -0
- package/dist/utils/setupBTCWallet.d.ts +11 -0
- package/dist/utils/setupSatoshiWallet.d.ts +11 -0
- package/dist/utils/txConfirmUtils.d.ts +6 -0
- package/esm/index.js +2720 -0
- package/esm/index.js.map +7 -0
- package/package.json +89 -0
package/esm/index.js
ADDED
@@ -0,0 +1,2720 @@
|
|
1
|
+
"use client";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __defProps = Object.defineProperties;
|
4
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
9
|
+
var __spreadValues = (a, b) => {
|
10
|
+
for (var prop in b || (b = {}))
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
13
|
+
if (__getOwnPropSymbols)
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
15
|
+
if (__propIsEnum.call(b, prop))
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
17
|
+
}
|
18
|
+
return a;
|
19
|
+
};
|
20
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
21
|
+
var __accessCheck = (obj, member, msg) => {
|
22
|
+
if (!member.has(obj))
|
23
|
+
throw TypeError("Cannot " + msg);
|
24
|
+
};
|
25
|
+
var __privateGet = (obj, member, getter) => {
|
26
|
+
__accessCheck(obj, member, "read from private field");
|
27
|
+
return getter ? getter.call(obj) : member.get(obj);
|
28
|
+
};
|
29
|
+
var __privateAdd = (obj, member, value) => {
|
30
|
+
if (member.has(obj))
|
31
|
+
throw TypeError("Cannot add the same private member more than once");
|
32
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
33
|
+
};
|
34
|
+
var __async = (__this, __arguments, generator) => {
|
35
|
+
return new Promise((resolve, reject) => {
|
36
|
+
var fulfilled = (value) => {
|
37
|
+
try {
|
38
|
+
step(generator.next(value));
|
39
|
+
} catch (e) {
|
40
|
+
reject(e);
|
41
|
+
}
|
42
|
+
};
|
43
|
+
var rejected = (value) => {
|
44
|
+
try {
|
45
|
+
step(generator.throw(value));
|
46
|
+
} catch (e) {
|
47
|
+
reject(e);
|
48
|
+
}
|
49
|
+
};
|
50
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
51
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
52
|
+
});
|
53
|
+
};
|
54
|
+
|
55
|
+
// src/connector/base.ts
|
56
|
+
var BaseConnector = class {
|
57
|
+
};
|
58
|
+
|
59
|
+
// src/icons/bitget.png
|
60
|
+
var bitget_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAORlWElmTU0AKgAAAAgABgESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgExAAIAAAAfAAAAZgEyAAIAAAAUAAAAhodpAAQAAAABAAAAmgAAAAAAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpAAAyMDIzOjA4OjA0IDE0OjA5OjI0AAAEkAQAAgAAABQAAADQoAEAAwAAAAEAAQAAoAIABAAAAAEAAACAoAMABAAAAAEAAACAAAAAADIwMjM6MDg6MDQgMTA6MDk6MDkAdpUVnwAAAAlwSFlzAAALEwAACxMBAJqcGAAACW9pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMjMtMDgtMDRUMTQ6MDk6MjQrMDg6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wOC0wNFQxMDowOTowOSswODowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDgtMDRUMTQ6MDk6MjQrMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wOC0wNFQxMDowOTowOSswODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjZmU0ZDc0NC0wMGY0LTRhOTEtYjI2Mi0xMDFmNmYyYjYwYTk8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wOC0wNFQxNDowOToyNCswODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDozMDlmN2NhZS0wOThiLTQ3ZDUtOWE0NC02MTg3MjQ1ZTEwMDY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6Y2ZlNGQ3NDQtMDBmNC00YTkxLWIyNjItMTAxZjZmMmI2MGE5PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6Y2ZlNGQ3NDQtMDBmNC00YTkxLWIyNjItMTAxZjZmMmI2MGE5PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjMwOWY3Y2FlLTA5OGItNDdkNS05YTQ0LTYxODcyNDVlMTAwNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlv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";
|
61
|
+
|
62
|
+
// src/connector/injected.ts
|
63
|
+
var InjectedConnector = class extends BaseConnector {
|
64
|
+
constructor(propertity) {
|
65
|
+
var _a;
|
66
|
+
super();
|
67
|
+
this.propertity = propertity;
|
68
|
+
const props = (_a = this.propertity) == null ? void 0 : _a.split(".");
|
69
|
+
if (!this.propertity || props.length > 2) {
|
70
|
+
throw new Error("please input valid propertity");
|
71
|
+
}
|
72
|
+
}
|
73
|
+
isReady() {
|
74
|
+
if (typeof window !== "undefined") {
|
75
|
+
const props = this.propertity.split(".");
|
76
|
+
if (props.length === 1) {
|
77
|
+
return typeof window[props[0]] !== "undefined";
|
78
|
+
} else {
|
79
|
+
return typeof window[props[0]] !== "undefined" && typeof window[props[0]][props[1]] !== "undefined";
|
80
|
+
}
|
81
|
+
}
|
82
|
+
return false;
|
83
|
+
}
|
84
|
+
requestAccounts() {
|
85
|
+
return __async(this, null, function* () {
|
86
|
+
const accounts = yield this.getProviderOrThrow().requestAccounts();
|
87
|
+
return accounts;
|
88
|
+
});
|
89
|
+
}
|
90
|
+
getAccounts() {
|
91
|
+
return __async(this, null, function* () {
|
92
|
+
const accounts = yield this.getProviderOrThrow().getAccounts();
|
93
|
+
return accounts;
|
94
|
+
});
|
95
|
+
}
|
96
|
+
getPublicKey() {
|
97
|
+
return __async(this, null, function* () {
|
98
|
+
return this.getProviderOrThrow().getPublicKey();
|
99
|
+
});
|
100
|
+
}
|
101
|
+
signMessage(signStr, type) {
|
102
|
+
return __async(this, null, function* () {
|
103
|
+
const addresses = yield this.getAccounts();
|
104
|
+
if (addresses.length === 0) {
|
105
|
+
throw new Error(`${this.metadata.name} not connected!`);
|
106
|
+
}
|
107
|
+
return this.getProviderOrThrow().signMessage(signStr, type);
|
108
|
+
});
|
109
|
+
}
|
110
|
+
on(event, handler) {
|
111
|
+
var _a;
|
112
|
+
const provider = this.getProvider();
|
113
|
+
return (_a = provider == null ? void 0 : provider.on) == null ? void 0 : _a.call(provider, event, handler);
|
114
|
+
}
|
115
|
+
removeListener(event, handler) {
|
116
|
+
var _a;
|
117
|
+
const provider = this.getProvider();
|
118
|
+
return (_a = provider == null ? void 0 : provider.removeListener) == null ? void 0 : _a.call(provider, event, handler);
|
119
|
+
}
|
120
|
+
getProvider() {
|
121
|
+
if (this.isReady()) {
|
122
|
+
const props = this.propertity.split(".");
|
123
|
+
if (props.length === 1) {
|
124
|
+
return window[props[0]];
|
125
|
+
} else {
|
126
|
+
return window[props[0]][props[1]];
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
getProviderOrThrow() {
|
131
|
+
const provider = this.getProvider();
|
132
|
+
if (!provider) {
|
133
|
+
throw new Error(`${this.metadata.name} is not install or not create Bitcoin wallet!`);
|
134
|
+
}
|
135
|
+
return provider;
|
136
|
+
}
|
137
|
+
getNetwork() {
|
138
|
+
return __async(this, null, function* () {
|
139
|
+
return this.getProviderOrThrow().getNetwork();
|
140
|
+
});
|
141
|
+
}
|
142
|
+
switchNetwork(network) {
|
143
|
+
return __async(this, null, function* () {
|
144
|
+
return this.getProviderOrThrow().switchNetwork(network);
|
145
|
+
});
|
146
|
+
}
|
147
|
+
sendBitcoin(toAddress, satoshis, options) {
|
148
|
+
return __async(this, null, function* () {
|
149
|
+
return this.getProviderOrThrow().sendBitcoin(toAddress, satoshis, options);
|
150
|
+
});
|
151
|
+
}
|
152
|
+
sendInscription(address, inscriptionId, options) {
|
153
|
+
return __async(this, null, function* () {
|
154
|
+
const result = yield this.getProviderOrThrow().sendInscription(address, inscriptionId, options);
|
155
|
+
if (typeof result === "string") {
|
156
|
+
return {
|
157
|
+
txid: result
|
158
|
+
};
|
159
|
+
}
|
160
|
+
return result;
|
161
|
+
});
|
162
|
+
}
|
163
|
+
disconnect() {
|
164
|
+
}
|
165
|
+
};
|
166
|
+
|
167
|
+
// src/connector/bitget.ts
|
168
|
+
var BitgetConnector = class extends InjectedConnector {
|
169
|
+
constructor() {
|
170
|
+
super("bitkeep.unisat");
|
171
|
+
this.metadata = {
|
172
|
+
id: "bitget",
|
173
|
+
name: "Bitget Wallet",
|
174
|
+
icon: bitget_default,
|
175
|
+
downloadUrl: "https://web3.bitget.com/en/wallet-download"
|
176
|
+
};
|
177
|
+
}
|
178
|
+
};
|
179
|
+
|
180
|
+
// src/icons/bybit.png
|
181
|
+
var bybit_default = "data:image/png;base64,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";
|
182
|
+
|
183
|
+
// src/connector/bybit.ts
|
184
|
+
var BybitConnector = class extends InjectedConnector {
|
185
|
+
constructor() {
|
186
|
+
super("bybitWallet.bitcoin");
|
187
|
+
this.metadata = {
|
188
|
+
id: "bybit",
|
189
|
+
name: "Bybit Wallet",
|
190
|
+
icon: bybit_default,
|
191
|
+
downloadUrl: "https://www.bybit.com/download/"
|
192
|
+
};
|
193
|
+
}
|
194
|
+
};
|
195
|
+
|
196
|
+
// src/icons/okx.svg
|
197
|
+
var okx_default = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiBmaWxsPSJibGFjayIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM5My45NDkgMjE4LjUxOEgyMzEuMDQ5QzIyNC4xMjkgMjE4LjUxOCAyMTguNTE5IDIyNC4xMjggMjE4LjUxOSAyMzEuMDQ4VjM5My45NDhDMjE4LjUxOSA0MDAuODY5IDIyNC4xMjkgNDA2LjQ3OSAyMzEuMDQ5IDQwNi40NzlIMzkzLjk0OUM0MDAuODcgNDA2LjQ3OSA0MDYuNDggNDAwLjg2OSA0MDYuNDggMzkzLjk0OFYyMzEuMDQ4QzQwNi40OCAyMjQuMTI4IDQwMC44NyAyMTguNTE4IDM5My45NDkgMjE4LjUxOFpNNTgxLjk5MiA0MDYuNDc5SDQxOS4wOTJDNDEyLjE3MiA0MDYuNDc5IDQwNi41NjEgNDEyLjA5IDQwNi41NjEgNDE5LjAxVjU4MS45MUM0MDYuNTYxIDU4OC44MzEgNDEyLjE3MiA1OTQuNDQxIDQxOS4wOTIgNTk0LjQ0MUg1ODEuOTkyQzU4OC45MTMgNTk0LjQ0MSA1OTQuNTIzIDU4OC44MzEgNTk0LjUyMyA1ODEuOTFWNDE5LjAxQzU5NC41MjMgNDEyLjA5IDU4OC45MTMgNDA2LjQ3OSA1ODEuOTkyIDQwNi40NzlaTTYwNi45NzQgMjE4LjUxOEg3NjkuODc0Qzc3Ni43OTQgMjE4LjUxOCA3ODIuNDA1IDIyNC4xMjggNzgyLjQwNSAyMzEuMDQ4VjM5My45NDhDNzgyLjQwNSA0MDAuODY5IDc3Ni43OTQgNDA2LjQ3OSA3NjkuODc0IDQwNi40NzlINjA2Ljk3NEM2MDAuMDUzIDQwNi40NzkgNTk0LjQ0MyA0MDAuODY5IDU5NC40NDMgMzkzLjk0OFYyMzEuMDQ4QzU5NC40NDMgMjI0LjEyOCA2MDAuMDUzIDIxOC41MTggNjA2Ljk3NCAyMTguNTE4Wk0zOTMuOTUgNTk0LjQ0MkgyMzEuMDQ5QzIyNC4xMjkgNTk0LjQ0MiAyMTguNTE5IDYwMC4wNTIgMjE4LjUxOSA2MDYuOTczVjc2OS44NzNDMjE4LjUxOSA3NzYuNzkzIDIyNC4xMjkgNzgyLjQwNCAyMzEuMDQ5IDc4Mi40MDRIMzkzLjk1QzQwMC44NyA3ODIuNDA0IDQwNi40OCA3NzYuNzkzIDQwNi40OCA3NjkuODczVjYwNi45NzNDNDA2LjQ4IDYwMC4wNTIgNDAwLjg3IDU5NC40NDIgMzkzLjk1IDU5NC40NDJaTTYwNi45NzQgNTk0LjQ0Mkg3NjkuODc0Qzc3Ni43OTQgNTk0LjQ0MiA3ODIuNDA1IDYwMC4wNTIgNzgyLjQwNSA2MDYuOTczVjc2OS44NzNDNzgyLjQwNSA3NzYuNzkzIDc3Ni43OTQgNzgyLjQwNCA3NjkuODc0IDc4Mi40MDRINjA2Ljk3NEM2MDAuMDUzIDc4Mi40MDQgNTk0LjQ0MyA3NzYuNzkzIDU5NC40NDMgNzY5Ljg3M1Y2MDYuOTczQzU5NC40NDMgNjAwLjA1MiA2MDAuMDUzIDU5NC40NDIgNjA2Ljk3NCA1OTQuNDQyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
|
198
|
+
|
199
|
+
// src/connector/okx.ts
|
200
|
+
var OKXConnector = class extends InjectedConnector {
|
201
|
+
constructor() {
|
202
|
+
super("okxwallet.bitcoin");
|
203
|
+
this.metadata = {
|
204
|
+
id: "okx",
|
205
|
+
name: "OKX Wallet",
|
206
|
+
icon: okx_default,
|
207
|
+
downloadUrl: "https://www.okx.com/download"
|
208
|
+
};
|
209
|
+
}
|
210
|
+
};
|
211
|
+
|
212
|
+
// src/icons/tokenpocket.png
|
213
|
+
var tokenpocket_default = "data:image/png;base64,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";
|
214
|
+
|
215
|
+
// src/connector/tokenPocket.ts
|
216
|
+
var TokenPocketConnector = class extends InjectedConnector {
|
217
|
+
constructor() {
|
218
|
+
super("tokenpocket.bitcoin");
|
219
|
+
this.metadata = {
|
220
|
+
id: "tokenpocket",
|
221
|
+
name: "TokenPocket",
|
222
|
+
icon: tokenpocket_default,
|
223
|
+
downloadUrl: "https://www.tokenpocket.pro/en/download/app"
|
224
|
+
};
|
225
|
+
}
|
226
|
+
};
|
227
|
+
|
228
|
+
// src/icons/unisat.svg
|
229
|
+
var unisat_default = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iX2ZyYW1lXzIiIGRhdGEtbmFtZT0iZnJhbWUgMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iLTEyIDAgMTAwIDEwMCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogdXJsKCNfbGxfMTI2KTsKICAgICAgfQoKICAgICAgLmNscy0yIHsKICAgICAgICBmaWxsOiB1cmwoI19sbF8xMjMpOwogICAgICB9CgogICAgICAuY2xzLTMgewogICAgICAgIGZpbGw6IHVybCgjX2xsXzEyMSk7CiAgICAgIH0KCiAgICAgIC5jbHMtNCB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICBmb250LWZhbWlseTogSmV0QnJhaW5zTW9ub1JvbWFuLU1lZGl1bSwgJ0pldEJyYWlucyBNb25vJzsKICAgICAgICBmb250LXNpemU6IDI0Ljc5cHg7CiAgICAgICAgZm9udC12YXJpYXRpb24tc2V0dGluZ3M6ICd3Z2h0JyA1MDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9sbF8xMjYiICB4MT0iOTYxLjY4IiB5MT0iLTQ1LjU3IiB4Mj0iOTg2LjE0IiB5Mj0iLTExMC4wNiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3ODAuOTkgNjcxLjcpIHJvdGF0ZSgtMTM0LjczKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMwNzAxMDAiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIuMzYiIHN0b3AtY29sb3I9IiM3NzM5MGQiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIuNjciIHN0b3AtY29sb3I9IiNlYTgxMDEiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZjRiODUyIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJfbGxfMTIxIiAgeDE9Ijk2NS4xNyIgeTE9Ii0xMzIuNDEiIHgyPSI5MjkuMjIiIHkyPSItNjUuMjIiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzgwLjk5IDY3MS43KSByb3RhdGUoLTEzNC43MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMDcwMTAwIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iLjM3IiBzdG9wLWNvbG9yPSIjNzczOTBkIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iLjY3IiBzdG9wLWNvbG9yPSIjZWE4MTAxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2Y0ZmI1MiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudCBpZD0iX2xsXzEyMyIgIGN4PSIzNS41OSIgY3k9IjMwLjc2IiBmeD0iMzUuNTkiIGZ5PSIzMC43NiIgcj0iNy40NyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIDApIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2Y0Yjg1MiIvPgogICAgICA8c3RvcCBvZmZzZXQ9Ii4zMyIgc3RvcC1jb2xvcj0iI2VhODEwMSIvPgogICAgICA8c3RvcCBvZmZzZXQ9Ii42NCIgc3RvcC1jb2xvcj0iIzc3MzkwZCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwNzAxMDAiLz4KICAgIDwvcmFkaWFsR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxnIGlkPSJfZnJhbWVfMS0yIiA+CiAgICA8Zz4KICAgICAgPGc+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTQuODEsOC45MWwyMC4zNCwyMC4xNGMxLjczLDEuNzEsMi41OCwzLjQ0LDIuNTUsNS4xOS0uMDMsMS43NC0uNzcsMy4zNC0yLjIzLDQuNzgtMS41MiwxLjUxLTMuMTYsMi4yOC00LjkyLDIuMzEtMS43NiwuMDMtMy41LS44Mi01LjI0LTIuNTNsLTIwLjgtMjAuNmMtMi4zNi0yLjM0LTQuNjQtNC02Ljg0LTQuOTctMi4xOS0uOTctNC41LTEuMTItNi45Mi0uNDYtMi40MiwuNjYtNS4wMiwyLjM3LTcuOCw1LjEzLTMuODQsMy44LTUuNjcsNy4zNy01LjQ4LDEwLjcxLC4xOSwzLjM0LDIuMDksNi43OSw1LjcxLDEwLjM4bDIwLjk3LDIwLjc3YzEuNzUsMS43MywyLjYxLDMuNDYsMi41OCw1LjE4LS4wMywxLjcyLS43OCwzLjMyLTIuMjYsNC43OC0xLjQ4LDEuNDYtMy4xLDIuMjMtNC44OCwyLjI5LTEuNzcsLjA2LTMuNTMtLjc4LTUuMjgtMi41MUwxMy45OSw0OS4zNmMtMy4zMS0zLjI4LTUuNy02LjM4LTcuMTctOS4zLTEuNDctMi45Mi0yLjAyLTYuMjMtMS42NC05LjkyLC4zNC0zLjE2LDEuMzYtNi4yMiwzLjA0LTkuMTksMS42OS0yLjk3LDQuMS02LDcuMjMtOS4xMSwzLjczLTMuNyw3LjI5LTYuNTMsMTAuNjktOC41QzI5LjU0LDEuMzcsMzIuODIsLjI3LDM1Ljk5LC4wNGMzLjE3LS4yMyw2LjMsLjQsOS40LDEuODksMy4wOSwxLjQ5LDYuMjMsMy44MSw5LjQzLDYuOThaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjIuOTIsOTAuMTlMMi41OCw3MC4wNUMuODUsNjguMzQsMCw2Ni42MSwuMDMsNjQuODZzLjc3LTMuMzQsMi4yMy00Ljc4YzEuNTItMS41MSwzLjE2LTIuMjgsNC45Mi0yLjMxLDEuNzYtLjAzLDMuNSwuODEsNS4yNCwyLjUzbDIwLjgsMjAuNmMyLjM3LDIuMzQsNC42NCw0LDYuODQsNC45N3M0LjUsMS4xMiw2LjkyLC40NmMyLjQyLS42Niw1LjAyLTIuMzcsNy44LTUuMTMsMy44NC0zLjgsNS42Ny03LjM3LDUuNDgtMTAuNzEtLjE5LTMuMzQtMi4wOS02LjgtNS43MS0xMC4zOGwtMTEuMTctMTAuOTdjLTEuNzUtMS43My0yLjYxLTMuNDYtMi41OC01LjE4LC4wMy0xLjcyLC43OC0zLjMyLDIuMjYtNC43OCwxLjQ4LTEuNDYsMy4xLTIuMjMsNC44OC0yLjI5LDEuNzctLjA2LDMuNTMsLjc4LDUuMjgsMi41MWwxMC41MywxMC4zNGMzLjMxLDMuMjgsNS43LDYuMzgsNy4xNyw5LjMsMS40NywyLjkyLDIuMDIsNi4yMywxLjY0LDkuOTItLjM0LDMuMTYtMS4zNiw2LjIyLTMuMDQsOS4xOS0xLjY5LDIuOTctNC4xLDYtNy4yMyw5LjExLTMuNzMsMy43LTcuMjksNi41My0xMC42OSw4LjUtMy40LDEuOTctNi42OCwzLjA3LTkuODUsMy4zLTMuMTcsLjIzLTYuMy0uNC05LjQtMS44OS0zLjA5LTEuNDktNi4yNC0zLjgxLTkuNDMtNi45OFoiLz4KICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHMtMiIgY3g9IjM1LjYiIGN5PSIzMC43NSIgcj0iNy40NyIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4=";
|
230
|
+
|
231
|
+
// src/connector/unisat.ts
|
232
|
+
var UnisatConnector = class extends InjectedConnector {
|
233
|
+
constructor() {
|
234
|
+
super("unisat");
|
235
|
+
this.metadata = {
|
236
|
+
id: "unisat",
|
237
|
+
name: "Unisat Wallet",
|
238
|
+
icon: unisat_default,
|
239
|
+
downloadUrl: "https://unisat.io"
|
240
|
+
};
|
241
|
+
}
|
242
|
+
};
|
243
|
+
|
244
|
+
// src/icons/wizz.svg
|
245
|
+
var wizz_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjRkZEODE1IiBkPSJtMjkuNjExIDE1LjU4NC0yLjU5Ny0yLjU5OC0yLjU5OCAyLjU5OCAyLjU5OCAyLjU5NyAyLjU5NyAyLjU5NyAyLjU5Ny0yLjU5N3oiLz48cGF0aCBmaWxsPSIjRkY5ODEzIiBkPSJtMjkuNjExIDAtMi41OTggMi41OTcgMi41OTggMi41OTggMi41OTctMi41OTh6TTQwIDEwLjM4OWwtMi41OTctMi41OTctMi41OTggMi41OTcgMi41OTggMi41OTh6TTI0LjQxNiAzMS4xNjhsMi41OTggMi41OTcgMi41OTctMi41OTctMi41OTctMi41OTh6TTYuMjM1IDEyLjk4NmwyLjU5OCAyLjU5OCAyLjU5Ny0yLjU5OC0yLjU5Ny0yLjU5N3pNMTkuMjIyIDBsLTIuNTk4IDIuNTk3IDIuNTk4IDIuNTk4IDIuNTk3LTIuNTk4ek04LjgzMyA1LjE5NWwyLjU5NyAyLjU5NyAyLjU5Ny0yLjU5Ny0yLjU5Ny0yLjU5OHpNMzcuNDAzIDE4LjE4MWwtMi41OTggMi41OTcgMi41OTggMi41OThMNDAgMjAuNzc4ek0zMi4yMDggMjguNTdsMi41OTcgMi41OTggMi41OTgtMi41OTgtMi41OTgtMi41OTd6Ii8+PHBhdGggZmlsbD0iIzVCNUI3MiIgZD0ibTI5LjYxMSAyMC43NzgtMi41OTctMi41OTctMi41OTggMi41OTctMi41OTctMi41OTctMi41OTctMi41OTcgMi41OTctMi41OTgtMi41OTctMi41OTctMi41OTgtMi41OTctMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTcgMi41OTggMi41OTcgMi41OTctMi41OTcgMi41OTctMS4yOTktMS4yOTgtMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTcgMi41OTgtMi40NjggMi40NjgtMi40NjggMi40NjgtMi41OTggMi41OThMMCAzNy40MDMgMi41OTcgNDBsMi41OTgtMi41OTcgMi41OTctMi41OTcgMi40NjgtMi40NjkuMTI5LS4xMjkgMi4zMzktMi4zMzkuMTI5LS4xMjkgMi40NjktMi40NjggMi41OTcgMi41OTcgMi41OTctMi41OTctMS4yOTgtMS4yOTkgMi41OTctMi41OTcgMi41OTcgMi41OTcgMi41OTgtMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTd6Ii8+PHBhdGggZmlsbD0iI0ZGOTgxMyIgZD0ibTI5LjYxMSAxMC4zODktMi41OTctMi41OTctMi41OTggMi41OTctMi41OTctMi41OTctMi41OTcgMi41OTcgMi41OTcgMi41OTgtMi41OTcgMi41OTcgMi41OTcgMi41OTcgMi41OTcgMi41OTcgMi41OTgtMi41OTctMi41OTgtMi41OTcgMi41OTgtMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTd6Ii8+PC9nPjwvc3ZnPgo=";
|
246
|
+
|
247
|
+
// src/connector/wizz.ts
|
248
|
+
var WizzConnector = class extends InjectedConnector {
|
249
|
+
constructor() {
|
250
|
+
super("wizz");
|
251
|
+
this.metadata = {
|
252
|
+
id: "wizz",
|
253
|
+
name: "Wizz Wallet",
|
254
|
+
icon: wizz_default,
|
255
|
+
downloadUrl: "https://wizzwallet.io"
|
256
|
+
};
|
257
|
+
}
|
258
|
+
};
|
259
|
+
|
260
|
+
// src/connector/xverse.ts
|
261
|
+
import EventEmitter from "events";
|
262
|
+
|
263
|
+
// src/icons/xverse.png
|
264
|
+
var xverse_default = "data:image/png;base64,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";
|
265
|
+
|
266
|
+
// src/connector/xverse.ts
|
267
|
+
var _network, _event;
|
268
|
+
var XverseConnector = class extends BaseConnector {
|
269
|
+
constructor() {
|
270
|
+
super();
|
271
|
+
__privateAdd(this, _network, "Mainnet");
|
272
|
+
__privateAdd(this, _event, new EventEmitter());
|
273
|
+
this.metadata = {
|
274
|
+
id: "xverse",
|
275
|
+
name: "Xverse Wallet",
|
276
|
+
icon: xverse_default,
|
277
|
+
downloadUrl: "https://www.xverse.app"
|
278
|
+
};
|
279
|
+
this.loadAccounts = (network) => __async(this, null, function* () {
|
280
|
+
const { getAddress, AddressPurpose } = yield import("sats-connect");
|
281
|
+
const addresses = yield new Promise((resolve, reject) => {
|
282
|
+
const getAddressOptions = {
|
283
|
+
payload: {
|
284
|
+
purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],
|
285
|
+
message: "Address for receiving Ordinals and payments",
|
286
|
+
network: {
|
287
|
+
type: network
|
288
|
+
}
|
289
|
+
},
|
290
|
+
onFinish: (response) => {
|
291
|
+
resolve(response.addresses);
|
292
|
+
},
|
293
|
+
onCancel: () => reject({
|
294
|
+
code: 4001,
|
295
|
+
message: "User rejected the request."
|
296
|
+
})
|
297
|
+
};
|
298
|
+
getAddress(getAddressOptions).catch((error) => reject(error));
|
299
|
+
});
|
300
|
+
localStorage.setItem("btc-connect-xverse-addresses-" + network, JSON.stringify(addresses));
|
301
|
+
return addresses;
|
302
|
+
});
|
303
|
+
__privateGet(this, _event).setMaxListeners(100);
|
304
|
+
}
|
305
|
+
isReady() {
|
306
|
+
return typeof window !== "undefined" && typeof window.BitcoinProvider !== "undefined";
|
307
|
+
}
|
308
|
+
sendInscription() {
|
309
|
+
return __async(this, null, function* () {
|
310
|
+
throw new Error("Unsupported");
|
311
|
+
});
|
312
|
+
}
|
313
|
+
requestAccounts() {
|
314
|
+
return __async(this, null, function* () {
|
315
|
+
if (!this.isReady()) {
|
316
|
+
throw new Error(`${this.metadata.name} is not install!`);
|
317
|
+
}
|
318
|
+
const addresses = yield this.loadAccounts(__privateGet(this, _network));
|
319
|
+
return addresses.map((item) => item.address);
|
320
|
+
});
|
321
|
+
}
|
322
|
+
getAccounts() {
|
323
|
+
return __async(this, null, function* () {
|
324
|
+
if (!this.isReady()) {
|
325
|
+
throw new Error(`${this.metadata.name} is not install!`);
|
326
|
+
}
|
327
|
+
const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
|
328
|
+
if (data) {
|
329
|
+
const addresses = JSON.parse(data);
|
330
|
+
return addresses.map((item) => item.address);
|
331
|
+
} else {
|
332
|
+
return [];
|
333
|
+
}
|
334
|
+
});
|
335
|
+
}
|
336
|
+
getPublicKey() {
|
337
|
+
return __async(this, null, function* () {
|
338
|
+
if (!this.isReady()) {
|
339
|
+
throw new Error(`${this.metadata.name} is not install!`);
|
340
|
+
}
|
341
|
+
const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
|
342
|
+
if (data) {
|
343
|
+
const addresses = JSON.parse(data);
|
344
|
+
return addresses[0].publicKey;
|
345
|
+
} else {
|
346
|
+
return "";
|
347
|
+
}
|
348
|
+
});
|
349
|
+
}
|
350
|
+
signMessage(signStr) {
|
351
|
+
return __async(this, null, function* () {
|
352
|
+
if (!this.isReady()) {
|
353
|
+
throw new Error(`${this.metadata.name} is not install!`);
|
354
|
+
}
|
355
|
+
const addresses = yield this.getAccounts();
|
356
|
+
if (addresses.length === 0) {
|
357
|
+
throw new Error(`${this.metadata.name} not connected!`);
|
358
|
+
}
|
359
|
+
const { signMessage } = yield import("sats-connect");
|
360
|
+
const sig = yield new Promise((resolve, reject) => {
|
361
|
+
const signMessageOptions = {
|
362
|
+
payload: {
|
363
|
+
network: {
|
364
|
+
type: __privateGet(this, _network)
|
365
|
+
},
|
366
|
+
address: addresses[0],
|
367
|
+
message: signStr
|
368
|
+
},
|
369
|
+
onFinish: (response) => {
|
370
|
+
resolve(response);
|
371
|
+
},
|
372
|
+
onCancel: () => {
|
373
|
+
reject({
|
374
|
+
code: 4001,
|
375
|
+
message: "User rejected the request."
|
376
|
+
});
|
377
|
+
}
|
378
|
+
};
|
379
|
+
signMessage(signMessageOptions).catch((e) => {
|
380
|
+
reject(e);
|
381
|
+
});
|
382
|
+
});
|
383
|
+
const modifiedSig = Buffer.from(sig, "base64");
|
384
|
+
modifiedSig[0] = 31 + (modifiedSig[0] - 31) % 4;
|
385
|
+
return modifiedSig.toString("base64");
|
386
|
+
});
|
387
|
+
}
|
388
|
+
on(event, handler) {
|
389
|
+
return __privateGet(this, _event).on(event, handler);
|
390
|
+
}
|
391
|
+
removeListener(event, handler) {
|
392
|
+
return __privateGet(this, _event).removeListener(event, handler);
|
393
|
+
}
|
394
|
+
getProvider() {
|
395
|
+
if (this.isReady()) {
|
396
|
+
return window.BitcoinProvider;
|
397
|
+
}
|
398
|
+
}
|
399
|
+
getNetwork() {
|
400
|
+
return __async(this, null, function* () {
|
401
|
+
if (!this.isReady()) {
|
402
|
+
throw new Error(`${this.metadata.name} is not install!`);
|
403
|
+
}
|
404
|
+
return __privateGet(this, _network) === "Mainnet" ? "livenet" : "testnet";
|
405
|
+
});
|
406
|
+
}
|
407
|
+
switchNetwork() {
|
408
|
+
return __async(this, null, function* () {
|
409
|
+
throw new Error("Unsupported");
|
410
|
+
});
|
411
|
+
}
|
412
|
+
sendBitcoin(toAddress, satoshis) {
|
413
|
+
return __async(this, null, function* () {
|
414
|
+
const provider = this.getProvider();
|
415
|
+
if (!provider) {
|
416
|
+
throw new Error(`${this.metadata.name} is not install!`);
|
417
|
+
}
|
418
|
+
const { sendBtcTransaction } = yield import("sats-connect");
|
419
|
+
const addresses = yield this.getAccounts();
|
420
|
+
if (addresses.length === 0) {
|
421
|
+
throw new Error(`${this.metadata.name} not connected!`);
|
422
|
+
}
|
423
|
+
const result = yield new Promise((resolve, reject) => {
|
424
|
+
const sendBtcOptions = {
|
425
|
+
payload: {
|
426
|
+
network: {
|
427
|
+
type: __privateGet(this, _network)
|
428
|
+
},
|
429
|
+
recipients: [
|
430
|
+
{
|
431
|
+
address: toAddress,
|
432
|
+
amountSats: BigInt(satoshis)
|
433
|
+
}
|
434
|
+
],
|
435
|
+
senderAddress: addresses[0]
|
436
|
+
},
|
437
|
+
onFinish: (response) => {
|
438
|
+
resolve(response);
|
439
|
+
},
|
440
|
+
onCancel: () => {
|
441
|
+
reject({
|
442
|
+
code: 4001,
|
443
|
+
message: "User rejected the request."
|
444
|
+
});
|
445
|
+
}
|
446
|
+
};
|
447
|
+
sendBtcTransaction(sendBtcOptions).catch((e) => reject(e));
|
448
|
+
});
|
449
|
+
return result;
|
450
|
+
});
|
451
|
+
}
|
452
|
+
disconnect() {
|
453
|
+
localStorage.removeItem("btc-connect-xverse-addresses-Mainnet");
|
454
|
+
localStorage.removeItem("btc-connect-xverse-addresses-Testnet");
|
455
|
+
}
|
456
|
+
};
|
457
|
+
_network = new WeakMap();
|
458
|
+
_event = new WeakMap();
|
459
|
+
|
460
|
+
// src/context/index.tsx
|
461
|
+
import { SmartAccount } from "@particle-network/aa";
|
462
|
+
import { chains as chains4 } from "@particle-network/chains";
|
463
|
+
import { walletEntryPlugin } from "@particle-network/wallet";
|
464
|
+
import { createContext, useCallback as useCallback7, useContext, useEffect as useEffect5, useMemo as useMemo5, useState as useState7 } from "react";
|
465
|
+
|
466
|
+
// src/components/connectModal/index.tsx
|
467
|
+
import { useEffect as useEffect3, useState as useState3 } from "react";
|
468
|
+
|
469
|
+
// src/hooks/useAccountContract.ts
|
470
|
+
var useAccountContract = () => {
|
471
|
+
const { accountContract, setAccountContract } = useConnectProvider();
|
472
|
+
return {
|
473
|
+
accountContract,
|
474
|
+
setAccountContract
|
475
|
+
};
|
476
|
+
};
|
477
|
+
|
478
|
+
// src/hooks/useAccounts.ts
|
479
|
+
var useAccounts = () => {
|
480
|
+
const { accounts } = useConnectProvider();
|
481
|
+
return { accounts };
|
482
|
+
};
|
483
|
+
|
484
|
+
// src/hooks/useBTCProvider.ts
|
485
|
+
import { useCallback } from "react";
|
486
|
+
var useBTCProvider = () => {
|
487
|
+
const { connector, provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin } = useConnectProvider();
|
488
|
+
const sendInscription = useCallback(
|
489
|
+
(address, inscriptionId, options) => __async(void 0, null, function* () {
|
490
|
+
if (!connector) {
|
491
|
+
throw new Error("Wallet not connected!");
|
492
|
+
}
|
493
|
+
const result = yield connector.sendInscription(address, inscriptionId, options);
|
494
|
+
return result;
|
495
|
+
}),
|
496
|
+
[connector]
|
497
|
+
);
|
498
|
+
return { provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin, sendInscription };
|
499
|
+
};
|
500
|
+
|
501
|
+
// src/hooks/useConnectModal.ts
|
502
|
+
var useConnectModal = () => {
|
503
|
+
const { openConnectModal, disconnect } = useConnectProvider();
|
504
|
+
return { openConnectModal, disconnect };
|
505
|
+
};
|
506
|
+
|
507
|
+
// src/hooks/useConnector.ts
|
508
|
+
import { useCallback as useCallback2 } from "react";
|
509
|
+
var useConnector = () => {
|
510
|
+
const { connectors, setConnectorId } = useConnectProvider();
|
511
|
+
const connect = useCallback2(
|
512
|
+
(connectorId) => __async(void 0, null, function* () {
|
513
|
+
const connector = connectors.find((item) => item.metadata.id === connectorId);
|
514
|
+
if (!connector) {
|
515
|
+
throw new Error(`connector id ${connectorId} not found`);
|
516
|
+
}
|
517
|
+
const accounts = yield connector.requestAccounts();
|
518
|
+
if (accounts.length > 0) {
|
519
|
+
localStorage.setItem("current-connector-id", connector.metadata.id);
|
520
|
+
setConnectorId(connector.metadata.id);
|
521
|
+
}
|
522
|
+
}),
|
523
|
+
[connectors, setConnectorId]
|
524
|
+
);
|
525
|
+
return { connectors, connect };
|
526
|
+
};
|
527
|
+
|
528
|
+
// src/hooks/useETHProvider.ts
|
529
|
+
import { intToHex } from "@ethereumjs/util";
|
530
|
+
import { useCallback as useCallback3, useEffect, useMemo, useState } from "react";
|
531
|
+
import { createWalletClient, custom } from "viem";
|
532
|
+
|
533
|
+
// src/evmSigner/provider.ts
|
534
|
+
var EthereumProvider = class {
|
535
|
+
constructor(sendUserOp, signer, account) {
|
536
|
+
this.sendUserOp = sendUserOp;
|
537
|
+
this.signer = signer;
|
538
|
+
this.account = account;
|
539
|
+
}
|
540
|
+
on(event, listener) {
|
541
|
+
var _a;
|
542
|
+
(_a = this.signer) == null ? void 0 : _a.on(event, listener);
|
543
|
+
return this;
|
544
|
+
}
|
545
|
+
once(event, listener) {
|
546
|
+
var _a;
|
547
|
+
(_a = this.signer) == null ? void 0 : _a.once(event, listener);
|
548
|
+
return this;
|
549
|
+
}
|
550
|
+
off(event, listener) {
|
551
|
+
var _a;
|
552
|
+
(_a = this.signer) == null ? void 0 : _a.off(event, listener);
|
553
|
+
return this;
|
554
|
+
}
|
555
|
+
removeListener(event, listener) {
|
556
|
+
var _a;
|
557
|
+
(_a = this.signer) == null ? void 0 : _a.removeListener(event, listener);
|
558
|
+
return this;
|
559
|
+
}
|
560
|
+
request(arg) {
|
561
|
+
return __async(this, null, function* () {
|
562
|
+
var _a, _b;
|
563
|
+
const method = arg.method;
|
564
|
+
if (!method) {
|
565
|
+
throw new Error("Method not found.");
|
566
|
+
}
|
567
|
+
if (method === "eth_accounts" || method === "eth_requestAccounts") {
|
568
|
+
return this.account ? [this.account] : [];
|
569
|
+
} else if (method === "eth_sendTransaction") {
|
570
|
+
const txData = (_a = arg.params) == null ? void 0 : _a[0];
|
571
|
+
const result = yield this.sendUserOp({ tx: txData });
|
572
|
+
return result;
|
573
|
+
}
|
574
|
+
return (_b = this.signer) == null ? void 0 : _b.request(arg);
|
575
|
+
});
|
576
|
+
}
|
577
|
+
};
|
578
|
+
|
579
|
+
// src/utils/eventUtils.ts
|
580
|
+
import { EventEmitter as EventEmitter2 } from "events";
|
581
|
+
var events = new EventEmitter2();
|
582
|
+
events.setMaxListeners(100);
|
583
|
+
var getPendingSignEventAccount = () => {
|
584
|
+
return events.listenerCount("sendUserOpResult" /* sendUserOpResult */) + events.listenerCount("personalSignResult" /* personalSignResult */) + events.listenerCount("signTypedDataResult" /* signTypedDataResult */);
|
585
|
+
};
|
586
|
+
var eventUtils_default = events;
|
587
|
+
|
588
|
+
// src/utils/txConfirmUtils.ts
|
589
|
+
var txConfirm = {
|
590
|
+
isNotRemind: () => {
|
591
|
+
if (typeof window === "undefined")
|
592
|
+
return false;
|
593
|
+
const value = localStorage.getItem("tx-confirm-modal-remind");
|
594
|
+
return value === "0";
|
595
|
+
},
|
596
|
+
setNotRemind: (notRemind) => {
|
597
|
+
if (typeof window === "undefined")
|
598
|
+
return;
|
599
|
+
if (notRemind) {
|
600
|
+
localStorage.setItem("tx-confirm-modal-remind", "0");
|
601
|
+
} else {
|
602
|
+
localStorage.removeItem("tx-confirm-modal-remind");
|
603
|
+
}
|
604
|
+
},
|
605
|
+
reset: () => {
|
606
|
+
if (typeof window === "undefined")
|
607
|
+
return;
|
608
|
+
localStorage.removeItem("tx-confirm-modal-remind");
|
609
|
+
}
|
610
|
+
};
|
611
|
+
var txConfirmUtils_default = txConfirm;
|
612
|
+
|
613
|
+
// src/evmSigner/walletClientProvider.ts
|
614
|
+
var WalletClientProvider = class {
|
615
|
+
constructor(provider) {
|
616
|
+
this.provider = provider;
|
617
|
+
}
|
618
|
+
on(event, listener) {
|
619
|
+
this.provider.on(event, listener);
|
620
|
+
return this;
|
621
|
+
}
|
622
|
+
once(event, listener) {
|
623
|
+
this.provider.once(event, listener);
|
624
|
+
return this;
|
625
|
+
}
|
626
|
+
off(event, listener) {
|
627
|
+
this.provider.off(event, listener);
|
628
|
+
return this;
|
629
|
+
}
|
630
|
+
removeListener(event, listener) {
|
631
|
+
this.provider.removeListener(event, listener);
|
632
|
+
return this;
|
633
|
+
}
|
634
|
+
request(arg) {
|
635
|
+
return __async(this, null, function* () {
|
636
|
+
const method = arg.method;
|
637
|
+
if (!method) {
|
638
|
+
throw new Error("Method not found.");
|
639
|
+
}
|
640
|
+
if (method === "personal_sign" /* personalSign */ || method.startsWith("eth_signTypedData" /* signTypedData */)) {
|
641
|
+
const showConfirmModal = !txConfirmUtils_default.isNotRemind();
|
642
|
+
if (showConfirmModal) {
|
643
|
+
if (getPendingSignEventAccount() > 0) {
|
644
|
+
throw new Error("Operation failed, there is a transaction being processed");
|
645
|
+
}
|
646
|
+
}
|
647
|
+
if (!showConfirmModal) {
|
648
|
+
return this.provider.request(arg);
|
649
|
+
}
|
650
|
+
}
|
651
|
+
if (method === "personal_sign" /* personalSign */) {
|
652
|
+
return new Promise((resolve, reject) => {
|
653
|
+
eventUtils_default.emit("personalSign" /* personalSign */, arg);
|
654
|
+
eventUtils_default.once("personalSignResult" /* personalSignResult */, ({ result, error }) => {
|
655
|
+
if (result) {
|
656
|
+
resolve(result);
|
657
|
+
} else {
|
658
|
+
reject(error);
|
659
|
+
}
|
660
|
+
});
|
661
|
+
});
|
662
|
+
} else if (method.startsWith("eth_signTypedData" /* signTypedData */)) {
|
663
|
+
return new Promise((resolve, reject) => {
|
664
|
+
eventUtils_default.emit("signTypedData" /* signTypedData */, arg);
|
665
|
+
eventUtils_default.once("signTypedDataResult" /* signTypedDataResult */, ({ result, error }) => {
|
666
|
+
if (result) {
|
667
|
+
resolve(result);
|
668
|
+
} else {
|
669
|
+
reject(error);
|
670
|
+
}
|
671
|
+
});
|
672
|
+
});
|
673
|
+
}
|
674
|
+
return this.provider.request(arg);
|
675
|
+
});
|
676
|
+
}
|
677
|
+
};
|
678
|
+
|
679
|
+
// src/hooks/useETHProvider.ts
|
680
|
+
var useETHProvider = () => {
|
681
|
+
const { evmAccount, smartAccount, getSmartAccountInfo } = useConnectProvider();
|
682
|
+
const [chainId, setChainId] = useState();
|
683
|
+
useEffect(() => {
|
684
|
+
if (smartAccount) {
|
685
|
+
const chainId2 = smartAccount.provider.chainId;
|
686
|
+
setChainId(chainId2);
|
687
|
+
const onChangeChange = (id) => {
|
688
|
+
setChainId(Number(id));
|
689
|
+
};
|
690
|
+
smartAccount.provider.on("chainChanged", onChangeChange);
|
691
|
+
return () => {
|
692
|
+
smartAccount.provider.removeListener("chainChanged", onChangeChange);
|
693
|
+
};
|
694
|
+
}
|
695
|
+
}, [smartAccount]);
|
696
|
+
const switchChain = useCallback3(
|
697
|
+
(chainId2) => __async(void 0, null, function* () {
|
698
|
+
if (smartAccount == null ? void 0 : smartAccount.provider) {
|
699
|
+
yield smartAccount.provider.request({
|
700
|
+
method: "wallet_switchEthereumChain",
|
701
|
+
params: [
|
702
|
+
{
|
703
|
+
chainId: intToHex(chainId2)
|
704
|
+
}
|
705
|
+
]
|
706
|
+
});
|
707
|
+
}
|
708
|
+
}),
|
709
|
+
[smartAccount == null ? void 0 : smartAccount.provider]
|
710
|
+
);
|
711
|
+
const getFeeQuotes = useCallback3(
|
712
|
+
(tx) => __async(void 0, null, function* () {
|
713
|
+
if (!smartAccount) {
|
714
|
+
throw new Error("The smart account is not initialized.");
|
715
|
+
}
|
716
|
+
return smartAccount.getFeeQuotes(tx);
|
717
|
+
}),
|
718
|
+
[smartAccount]
|
719
|
+
);
|
720
|
+
const buildUserOp = useCallback3(
|
721
|
+
(_0) => __async(void 0, [_0], function* ({ tx, feeQuote, tokenPaymasterAddress }) {
|
722
|
+
if (!smartAccount) {
|
723
|
+
throw new Error("The smart account is not initialized.");
|
724
|
+
}
|
725
|
+
const result = yield smartAccount.buildUserOperation({ tx, feeQuote, tokenPaymasterAddress });
|
726
|
+
return result;
|
727
|
+
}),
|
728
|
+
[smartAccount]
|
729
|
+
);
|
730
|
+
const sendUserOp = useCallback3(
|
731
|
+
(params, forceHideConfirmModal) => __async(void 0, null, function* () {
|
732
|
+
if (!smartAccount) {
|
733
|
+
throw new Error("The smart account is not initialized.");
|
734
|
+
}
|
735
|
+
const showConfirmModal = !forceHideConfirmModal && !txConfirmUtils_default.isNotRemind();
|
736
|
+
if (showConfirmModal) {
|
737
|
+
if (getPendingSignEventAccount() > 0) {
|
738
|
+
throw new Error("Operation failed, there is a transaction being processed");
|
739
|
+
}
|
740
|
+
}
|
741
|
+
let userOpBundle;
|
742
|
+
if (Object.prototype.hasOwnProperty.call(params, "userOpHash") && Object.prototype.hasOwnProperty.call(params, "userOp")) {
|
743
|
+
const { userOpHash, userOp } = params;
|
744
|
+
if (userOpHash && userOp) {
|
745
|
+
userOpBundle = { userOpHash, userOp };
|
746
|
+
}
|
747
|
+
}
|
748
|
+
if (!userOpBundle) {
|
749
|
+
const { tx, feeQuote, tokenPaymasterAddress } = params;
|
750
|
+
userOpBundle = yield buildUserOp({ tx, feeQuote, tokenPaymasterAddress });
|
751
|
+
}
|
752
|
+
if (!showConfirmModal) {
|
753
|
+
return smartAccount.sendUserOperation(userOpBundle);
|
754
|
+
}
|
755
|
+
return new Promise((resolve, reject) => {
|
756
|
+
eventUtils_default.emit("sendUserOp" /* sendUserOp */, userOpBundle);
|
757
|
+
eventUtils_default.once("sendUserOpResult" /* sendUserOpResult */, ({ result, error }) => {
|
758
|
+
if (result) {
|
759
|
+
resolve(result);
|
760
|
+
} else {
|
761
|
+
reject(error);
|
762
|
+
}
|
763
|
+
});
|
764
|
+
});
|
765
|
+
}),
|
766
|
+
[smartAccount, buildUserOp]
|
767
|
+
);
|
768
|
+
const publicClient = useMemo(() => {
|
769
|
+
if (!smartAccount || !chainId) {
|
770
|
+
return void 0;
|
771
|
+
}
|
772
|
+
return (smartAccount == null ? void 0 : smartAccount.provider).publicClient;
|
773
|
+
}, [smartAccount, chainId]);
|
774
|
+
const provider = useMemo(() => {
|
775
|
+
const ethereumProvider = new EthereumProvider(sendUserOp, smartAccount == null ? void 0 : smartAccount.provider, evmAccount);
|
776
|
+
return ethereumProvider;
|
777
|
+
}, [evmAccount, sendUserOp, smartAccount == null ? void 0 : smartAccount.provider]);
|
778
|
+
const walletClient = useMemo(() => {
|
779
|
+
return createWalletClient({
|
780
|
+
transport: custom(new WalletClientProvider(provider))
|
781
|
+
});
|
782
|
+
}, [provider]);
|
783
|
+
return {
|
784
|
+
provider,
|
785
|
+
evmAccount,
|
786
|
+
account: evmAccount,
|
787
|
+
getSmartAccountInfo,
|
788
|
+
switchChain,
|
789
|
+
chainId,
|
790
|
+
getFeeQuotes,
|
791
|
+
buildUserOp,
|
792
|
+
sendUserOp,
|
793
|
+
publicClient,
|
794
|
+
walletClient
|
795
|
+
};
|
796
|
+
};
|
797
|
+
|
798
|
+
// src/icons/back.svg
|
799
|
+
var back_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00MDAtODAgMC00ODBsNDAwLTQwMCA3MSA3MS0zMjkgMzI5IDMyOSAzMjktNzEgNzFaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==";
|
800
|
+
|
801
|
+
// src/icons/close.svg
|
802
|
+
var close_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Im0yNTYtMjAwLTU2LTU2IDIyNC0yMjQtMjI0LTIyNCA1Ni01NiAyMjQgMjI0IDIyNC0yMjQgNTYgNTYtMjI0IDIyNCAyMjQgMjI0LTU2IDU2LTIyNC0yMjQtMjI0IDIyNFoiIGZpbGw9IndoaXRlIi8+PC9zdmc+";
|
803
|
+
|
804
|
+
// src/icons/retry.svg
|
805
|
+
var retry_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtMTYwcS0xMzQgMC0yMjctOTN0LTkzLTIyN3EwLTEzNCA5My0yMjd0MjI3LTkzcTY5IDAgMTMyIDI4LjVUNzIwLTY5MHYtMTEwaDgwdjI4MEg1MjB2LTgwaDE2OHEtMzItNTYtODcuNS04OFQ0ODAtNzIwcS0xMDAgMC0xNzAgNzB0LTcwIDE3MHEwIDEwMCA3MCAxNzB0MTcwIDcwcTc3IDAgMTM5LTQ0dDg3LTExNmg4NHEtMjggMTA2LTExNCAxNzN0LTE5NiA2N1oiIGZpbGw9IndoaXRlIi8+PC9zdmc+";
|
806
|
+
|
807
|
+
// esbuild-scss-modules-plugin:./spinner.module.scss
|
808
|
+
var digest = "906d42389ecad5c2ab92642c8e0775ea667c413b069684ce9d01199562f2d0be";
|
809
|
+
var classes = { "loader": "_loader_g0am3_1", "rotate": "_rotate_g0am3_1", "prixClipFix": "_prixClipFix_g0am3_1" };
|
810
|
+
var css = `._loader_g0am3_1{animation:_rotate_g0am3_1 1s linear infinite;border-radius:50%;height:20px;position:relative;width:20px}._loader_g0am3_1:before{animation:_prixClipFix_g0am3_1 2s linear infinite;border:2px solid #000;border-radius:50%;box-sizing:border-box;content:"";inset:0;position:absolute}@keyframes _rotate_g0am3_1{to{transform:rotate(1turn)}}@keyframes _prixClipFix_g0am3_1{0%{clip-path:polygon(50% 50%,0 0,0 0,0 0,0 0,0 0)}25%{clip-path:polygon(50% 50%,0 0,100% 0,100% 0,100% 0,100% 0)}50%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,100% 100%,100% 100%)}75%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 100%)}to{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 0)}}`;
|
811
|
+
(function() {
|
812
|
+
if (typeof document !== "undefined" && !document.getElementById(digest)) {
|
813
|
+
var ele = document.createElement("style");
|
814
|
+
ele.id = digest;
|
815
|
+
ele.textContent = css;
|
816
|
+
document.head.appendChild(ele);
|
817
|
+
}
|
818
|
+
})();
|
819
|
+
var spinner_module_default = classes;
|
820
|
+
|
821
|
+
// src/components/spinner/index.tsx
|
822
|
+
import { jsx } from "react/jsx-runtime";
|
823
|
+
var Spinner = ({ className, style }) => {
|
824
|
+
return /* @__PURE__ */ jsx("span", { className: spinner_module_default.loader + (className ? ` ${className}` : ""), style });
|
825
|
+
};
|
826
|
+
var spinner_default = Spinner;
|
827
|
+
|
828
|
+
// esbuild-scss-modules-plugin:./button.module.scss
|
829
|
+
var digest2 = "424d614dbc2763d7cad7ca35c00bd255c6ed55da308a1f3018594201a47127bf";
|
830
|
+
var classes2 = { "btn": "_btn_ofd87_1" };
|
831
|
+
var css2 = `._btn_ofd87_1{align-items:center;background:#fff;border-radius:8px;color:#000;display:flex;flex-direction:row;font-size:16px;gap:16px;justify-content:center;padding:6px 24px;position:relative}._btn_ofd87_1:hover{opacity:.85}._btn_ofd87_1:disabled{background:hsla(0,0%,100%,.2);color:hsla(0,0%,100%,.639);cursor:not-allowed;opacity:1}`;
|
832
|
+
(function() {
|
833
|
+
if (typeof document !== "undefined" && !document.getElementById(digest2)) {
|
834
|
+
var ele = document.createElement("style");
|
835
|
+
ele.id = digest2;
|
836
|
+
ele.textContent = css2;
|
837
|
+
document.head.appendChild(ele);
|
838
|
+
}
|
839
|
+
})();
|
840
|
+
var button_module_default = classes2;
|
841
|
+
|
842
|
+
// src/components/button/index.tsx
|
843
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
844
|
+
var Button = ({
|
845
|
+
children,
|
846
|
+
isLoading,
|
847
|
+
isDisabled,
|
848
|
+
onClick,
|
849
|
+
className,
|
850
|
+
style
|
851
|
+
}) => {
|
852
|
+
return /* @__PURE__ */ jsxs(
|
853
|
+
"button",
|
854
|
+
{
|
855
|
+
className: button_module_default.btn + (className ? ` ${className}` : ""),
|
856
|
+
onClick: isLoading || isDisabled ? void 0 : onClick,
|
857
|
+
disabled: isDisabled,
|
858
|
+
style,
|
859
|
+
children: [
|
860
|
+
isLoading && !isDisabled && /* @__PURE__ */ jsx2(spinner_default, {}),
|
861
|
+
children
|
862
|
+
]
|
863
|
+
}
|
864
|
+
);
|
865
|
+
};
|
866
|
+
var button_default = Button;
|
867
|
+
|
868
|
+
// src/components/modal/index.tsx
|
869
|
+
import { useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
|
870
|
+
import { createPortal } from "react-dom";
|
871
|
+
import { RemoveScroll } from "react-remove-scroll";
|
872
|
+
|
873
|
+
// esbuild-scss-modules-plugin:./modal.module.scss
|
874
|
+
var digest3 = "65eada90924218eba4e72a5f00291c3cb69387ecce1351e454cdefd066d4bcff";
|
875
|
+
var classes3 = { "container": "_container_smzpm_1", "modal": "_modal_smzpm_18" };
|
876
|
+
var css3 = `._container_smzpm_1{align-items:center;backdrop-filter:blur(12px);background:rgba(0,0,0,.502);bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100000}._container_smzpm_1 ._modal_smzpm_18{align-items:center;background-color:#171a1f;border-radius:16px;display:flex;flex-direction:column;font-size:14px;height:auto;margin:16px;max-height:80%;max-width:100%;overflow:auto;padding:24px;position:relative;width:380px}`;
|
877
|
+
(function() {
|
878
|
+
if (typeof document !== "undefined" && !document.getElementById(digest3)) {
|
879
|
+
var ele = document.createElement("style");
|
880
|
+
ele.id = digest3;
|
881
|
+
ele.textContent = css3;
|
882
|
+
document.head.appendChild(ele);
|
883
|
+
}
|
884
|
+
})();
|
885
|
+
var modal_module_default = classes3;
|
886
|
+
|
887
|
+
// src/components/modal/index.tsx
|
888
|
+
import { Fragment, jsx as jsx3 } from "react/jsx-runtime";
|
889
|
+
var stopPropagation = (event) => event.stopPropagation();
|
890
|
+
var Modal = ({ open, onClose, children, isDismissable = true, contentStyle, contentClassName }) => {
|
891
|
+
const handleBackdropClick = useMemo2(() => isDismissable ? onClose : void 0, [onClose, isDismissable]);
|
892
|
+
useEffect2(() => {
|
893
|
+
if (isDismissable) {
|
894
|
+
const handleEscape = (event) => open && event.key === "Escape" && onClose();
|
895
|
+
document.addEventListener("keydown", handleEscape);
|
896
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
897
|
+
}
|
898
|
+
}, [open, onClose, isDismissable]);
|
899
|
+
const [bodyScrollable, setBodyScrollable] = useState2(true);
|
900
|
+
useEffect2(() => {
|
901
|
+
setBodyScrollable(getComputedStyle(window.document.body).overflow !== "hidden");
|
902
|
+
}, []);
|
903
|
+
return /* @__PURE__ */ jsx3(Fragment, { children: open ? createPortal(
|
904
|
+
/* @__PURE__ */ jsx3(RemoveScroll, { enabled: bodyScrollable, children: /* @__PURE__ */ jsx3("div", { className: modal_module_default.container, onClick: handleBackdropClick, children: /* @__PURE__ */ jsx3(
|
905
|
+
"div",
|
906
|
+
{
|
907
|
+
className: modal_module_default.modal + (contentClassName ? ` ${contentClassName}` : ""),
|
908
|
+
style: contentStyle,
|
909
|
+
onClick: stopPropagation,
|
910
|
+
children
|
911
|
+
}
|
912
|
+
) }) }),
|
913
|
+
document.body
|
914
|
+
) : null });
|
915
|
+
};
|
916
|
+
var modal_default = Modal;
|
917
|
+
|
918
|
+
// esbuild-scss-modules-plugin:./connect.module.scss
|
919
|
+
var digest4 = "c7bbc091f1227154742a5bd0d55a3df29eb913eb0ad4cafc7ab236b574002f65";
|
920
|
+
var classes4 = { "connectModal": "_connectModal_1kqtj_1", "title": "_title_1kqtj_4", "closeBtn": "_closeBtn_1kqtj_9", "backBtn": "_backBtn_1kqtj_15", "walletItem": "_walletItem_1kqtj_21", "walletIcon": "_walletIcon_1kqtj_33", "walletName": "_walletName_1kqtj_38", "connecting": "_connecting_1kqtj_43", "connectingIconContainer": "_connectingIconContainer_1kqtj_51", "retryContainer": "_retryContainer_1kqtj_54", "retryIcon": "_retryIcon_1kqtj_63", "connectingIcon": "_connectingIcon_1kqtj_51", "connection": "_connection_1kqtj_72", "acceptRequest": "_acceptRequest_1kqtj_76", "btnDownload": "_btnDownload_1kqtj_83" };
|
921
|
+
var css4 = `._connectModal_1kqtj_1{gap:12px}._connectModal_1kqtj_1 ._title_1kqtj_4{font-size:18px;font-weight:700;margin-bottom:4px}._connectModal_1kqtj_1 ._closeBtn_1kqtj_9{cursor:pointer;position:absolute;right:16px;top:16px}._connectModal_1kqtj_1 ._backBtn_1kqtj_15{cursor:pointer;left:16px;position:absolute;top:16px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21{border:1px solid #3a3a3a;border-radius:8px;box-sizing:border-box;cursor:pointer;display:flex;padding:8px;width:100%}._connectModal_1kqtj_1 ._walletItem_1kqtj_21:hover{background:hsla(0,0%,100%,.05)}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletIcon_1kqtj_33{border-radius:4px;height:42px;width:42px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletName_1kqtj_38{flex-grow:1;line-height:42px;text-align:center}._connectModal_1kqtj_1 ._connecting_1kqtj_43{align-items:center;display:flex;flex-direction:column;height:204px;justify-content:center;width:100%}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51{position:relative}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54{background:#4b5563;border-radius:50%;bottom:-12px;cursor:pointer;padding:4px;position:absolute;right:-12px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54 ._retryIcon_1kqtj_63{height:24px;width:24px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIcon_1kqtj_51{border-radius:4px;height:60px;width:60px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connection_1kqtj_72{font-size:18px;margin-top:20px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._acceptRequest_1kqtj_76{color:hsla(0,0%,100%,.4);font-size:14px;margin-top:6px;text-align:center;white-space:pre-wrap}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._btnDownload_1kqtj_83{margin-top:20px}`;
|
922
|
+
(function() {
|
923
|
+
if (typeof document !== "undefined" && !document.getElementById(digest4)) {
|
924
|
+
var ele = document.createElement("style");
|
925
|
+
ele.id = digest4;
|
926
|
+
ele.textContent = css4;
|
927
|
+
document.head.appendChild(ele);
|
928
|
+
}
|
929
|
+
})();
|
930
|
+
var connect_module_default = classes4;
|
931
|
+
|
932
|
+
// src/components/connectModal/index.tsx
|
933
|
+
import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
934
|
+
var ConnectModal = ({ open, onClose }) => {
|
935
|
+
const [backVisible, setBackVisible] = useState3(false);
|
936
|
+
const [retryVisible, setRetryVisible] = useState3(false);
|
937
|
+
const [walletReady, setWalletReady] = useState3(true);
|
938
|
+
const [selectConnector, setSelectConnector] = useState3();
|
939
|
+
const { closeConnectModal } = useConnectProvider();
|
940
|
+
const { connect, connectors } = useConnector();
|
941
|
+
useEffect3(() => {
|
942
|
+
if (!open) {
|
943
|
+
setBackVisible(false);
|
944
|
+
setRetryVisible(false);
|
945
|
+
setWalletReady(true);
|
946
|
+
setSelectConnector(void 0);
|
947
|
+
}
|
948
|
+
}, [open]);
|
949
|
+
const onConnect = (connector) => __async(void 0, null, function* () {
|
950
|
+
setBackVisible(true);
|
951
|
+
setSelectConnector(connector);
|
952
|
+
if (connector.isReady()) {
|
953
|
+
try {
|
954
|
+
yield connect(connector.metadata.id);
|
955
|
+
closeConnectModal();
|
956
|
+
} catch (error) {
|
957
|
+
if (error.code === 4001) {
|
958
|
+
setRetryVisible(true);
|
959
|
+
}
|
960
|
+
}
|
961
|
+
} else {
|
962
|
+
setWalletReady(false);
|
963
|
+
}
|
964
|
+
});
|
965
|
+
const onBack = () => {
|
966
|
+
setBackVisible(false);
|
967
|
+
setRetryVisible(false);
|
968
|
+
setWalletReady(true);
|
969
|
+
setSelectConnector(void 0);
|
970
|
+
};
|
971
|
+
const onRetry = () => {
|
972
|
+
setRetryVisible(false);
|
973
|
+
if (selectConnector) {
|
974
|
+
onConnect(selectConnector);
|
975
|
+
}
|
976
|
+
};
|
977
|
+
return /* @__PURE__ */ jsxs2(modal_default, { open, onClose, isDismissable: false, contentClassName: connect_module_default.connectModal, children: [
|
978
|
+
/* @__PURE__ */ jsx4("div", { className: connect_module_default.title, children: (selectConnector == null ? void 0 : selectConnector.metadata.name) || "Choose Wallet" }),
|
979
|
+
/* @__PURE__ */ jsx4("img", { className: connect_module_default.closeBtn, src: close_default, onClick: onClose }),
|
980
|
+
backVisible && /* @__PURE__ */ jsx4("img", { className: connect_module_default.backBtn, src: back_default, onClick: onBack }),
|
981
|
+
!backVisible && connectors.map((connector) => {
|
982
|
+
return /* @__PURE__ */ jsxs2("div", { className: connect_module_default.walletItem, onClick: () => onConnect(connector), children: [
|
983
|
+
/* @__PURE__ */ jsx4("img", { className: connect_module_default.walletIcon, src: connector.metadata.icon }),
|
984
|
+
/* @__PURE__ */ jsx4("div", { className: connect_module_default.walletName, children: connector.metadata.name })
|
985
|
+
] }, connector.metadata.id);
|
986
|
+
}),
|
987
|
+
backVisible && selectConnector && /* @__PURE__ */ jsxs2("div", { className: connect_module_default.connecting, children: [
|
988
|
+
/* @__PURE__ */ jsxs2("div", { className: connect_module_default.connectingIconContainer, children: [
|
989
|
+
/* @__PURE__ */ jsx4("img", { className: connect_module_default.connectingIcon, src: selectConnector.metadata.icon }),
|
990
|
+
retryVisible && /* @__PURE__ */ jsx4("div", { className: connect_module_default.retryContainer, onClick: onRetry, children: /* @__PURE__ */ jsx4("img", { className: connect_module_default.retryIcon, src: retry_default }) })
|
991
|
+
] }),
|
992
|
+
walletReady ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
993
|
+
/* @__PURE__ */ jsx4("div", { className: connect_module_default.connection, children: retryVisible ? "Request Cancelled" : "Requesting Connection" }),
|
994
|
+
/* @__PURE__ */ jsx4("div", { className: connect_module_default.acceptRequest, children: retryVisible ? "You cancelled the request.\nClick above to try again." : "Accept the request through your wallet to connect to this app." })
|
995
|
+
] }) : /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
996
|
+
/* @__PURE__ */ jsx4("div", { className: connect_module_default.connection, children: "Wallet Not Installed." }),
|
997
|
+
/* @__PURE__ */ jsx4(
|
998
|
+
button_default,
|
999
|
+
{
|
1000
|
+
className: connect_module_default.btnDownload,
|
1001
|
+
onClick: () => {
|
1002
|
+
window.open(selectConnector == null ? void 0 : selectConnector.metadata.downloadUrl, "_blank");
|
1003
|
+
},
|
1004
|
+
children: "Get"
|
1005
|
+
}
|
1006
|
+
)
|
1007
|
+
] })
|
1008
|
+
] })
|
1009
|
+
] });
|
1010
|
+
};
|
1011
|
+
var connectModal_default = ConnectModal;
|
1012
|
+
|
1013
|
+
// src/components/signModal/index.tsx
|
1014
|
+
import { chains as chains2 } from "@particle-network/chains";
|
1015
|
+
import { useCallback as useCallback5, useEffect as useEffect4, useMemo as useMemo4, useState as useState5 } from "react";
|
1016
|
+
import { formatEther, hexToString } from "viem";
|
1017
|
+
|
1018
|
+
// src/icons/check_box.svg
|
1019
|
+
var check_box_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiIGZpbGw9IiNhODU1ZjciPgogICAgPHBhdGgKICAgICAgICBkPSJtNDI0LTMxMiAyODItMjgyLTU2LTU2LTIyNiAyMjYtMTE0LTExNC01NiA1NiAxNzAgMTcwWk0yMDAtMTIwcS0zMyAwLTU2LjUtMjMuNVQxMjAtMjAwdi01NjBxMC0zMyAyMy41LTU2LjVUMjAwLTg0MGg1NjBxMzMgMCA1Ni41IDIzLjVUODQwLTc2MHY1NjBxMCAzMy0yMy41IDU2LjVUNzYwLTEyMEgyMDBabTAtODBoNTYwdi01NjBIMjAwdjU2MFptMC01NjB2NTYwLTU2MFoiIC8+Cjwvc3ZnPg==";
|
1020
|
+
|
1021
|
+
// src/icons/check_box_blank.svg
|
1022
|
+
var check_box_blank_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiIGZpbGw9IiM2YjcyODAiPgogICAgPHBhdGgKICAgICAgICBkPSJNMjAwLTEyMHEtMzMgMC01Ni41LTIzLjVUMTIwLTIwMHYtNTYwcTAtMzMgMjMuNS01Ni41VDIwMC04NDBoNTYwcTMzIDAgNTYuNSAyMy41VDg0MC03NjB2NTYwcTAgMzMtMjMuNSA1Ni41VDc2MC0xMjBIMjAwWm0wLTgwaDU2MHYtNTYwSDIwMHY1NjBaIiAvPgo8L3N2Zz4=";
|
1023
|
+
|
1024
|
+
// src/icons/copy.svg
|
1025
|
+
var copy_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiIGZpbGw9IiNmZmYiPgogICAgPHBhdGgKICAgICAgICBkPSJNMzYwLTI0MHEtMzMgMC01Ni41LTIzLjVUMjgwLTMyMHYtNDgwcTAtMzMgMjMuNS01Ni41VDM2MC04ODBoMzYwcTMzIDAgNTYuNSAyMy41VDgwMC04MDB2NDgwcTAgMzMtMjMuNSA1Ni41VDcyMC0yNDBIMzYwWm0wLTgwaDM2MHYtNDgwSDM2MHY0ODBaTTIwMC04MHEtMzMgMC01Ni41LTIzLjVUMTIwLTE2MHYtNTYwaDgwdjU2MGg0NDB2ODBIMjAwWm0xNjAtMjQwdi00ODAgNDgwWiIgLz4KPC9zdmc+";
|
1026
|
+
|
1027
|
+
// src/utils/index.ts
|
1028
|
+
function shortString(str) {
|
1029
|
+
if (Array.isArray(str)) {
|
1030
|
+
str = "[" + str.toString() + "]";
|
1031
|
+
}
|
1032
|
+
if (str) {
|
1033
|
+
if (typeof str.toString === "function") {
|
1034
|
+
str = str.toString();
|
1035
|
+
}
|
1036
|
+
if (str.length <= 10) {
|
1037
|
+
return str;
|
1038
|
+
}
|
1039
|
+
return `${str.slice(0, 5)}...${str.slice(str.length - 5, str.length)}`;
|
1040
|
+
}
|
1041
|
+
return "";
|
1042
|
+
}
|
1043
|
+
function copyToClipboard(text) {
|
1044
|
+
return __async(this, null, function* () {
|
1045
|
+
const clipboardCopy = () => __async(this, null, function* () {
|
1046
|
+
if (navigator.clipboard) {
|
1047
|
+
return navigator.clipboard.writeText(text);
|
1048
|
+
} else {
|
1049
|
+
const textarea = document.createElement("textarea");
|
1050
|
+
textarea.value = text;
|
1051
|
+
textarea.setAttribute("readonly", "");
|
1052
|
+
textarea.style.position = "absolute";
|
1053
|
+
textarea.style.left = "-9999px";
|
1054
|
+
document.body.appendChild(textarea);
|
1055
|
+
textarea.select();
|
1056
|
+
const result = document.execCommand("copy");
|
1057
|
+
document.body.removeChild(textarea);
|
1058
|
+
if (!result) {
|
1059
|
+
throw new Error("Copy to clipboard failed");
|
1060
|
+
}
|
1061
|
+
}
|
1062
|
+
});
|
1063
|
+
return new Promise((resolve, reject) => {
|
1064
|
+
clipboardCopy().then(resolve).catch(reject);
|
1065
|
+
});
|
1066
|
+
});
|
1067
|
+
}
|
1068
|
+
var defaultTokenIcon = "https://static.particle.network/token-list/defaultToken/default.png";
|
1069
|
+
var ipfsToSrc = (ipfs) => {
|
1070
|
+
if (!ipfs || !ipfs.startsWith("ipfs://")) {
|
1071
|
+
return ipfs || "";
|
1072
|
+
}
|
1073
|
+
return `https://ipfs.particle.network/${encodeURI(ipfs.slice(7))}`;
|
1074
|
+
};
|
1075
|
+
var checkBTCVersion = (accountContracts, accountContractKey, version) => {
|
1076
|
+
if (!accountContracts[accountContractKey]) {
|
1077
|
+
return false;
|
1078
|
+
}
|
1079
|
+
return accountContracts[accountContractKey].some((item) => item.version === version);
|
1080
|
+
};
|
1081
|
+
|
1082
|
+
// src/utils/ethereumUtils.ts
|
1083
|
+
import { bytesToHex, publicToAddress, toBytes, toChecksumAddress, toRpcSig } from "@ethereumjs/util";
|
1084
|
+
import bitcore from "bitcore-lib";
|
1085
|
+
var pubKeyToEVMAddress = (pubKey) => {
|
1086
|
+
const address = toChecksumAddress(bytesToHex(publicToAddress(toBytes(`0x${pubKey}`), true)));
|
1087
|
+
return address;
|
1088
|
+
};
|
1089
|
+
var convertSignature = (signature) => {
|
1090
|
+
const sig = bitcore.crypto.Signature.fromCompact(Buffer.from(signature, "base64"));
|
1091
|
+
const v = BigInt(sig.i + 27);
|
1092
|
+
const evmSig = toRpcSig(v, sig.r.toBuffer(), sig.s.toBuffer());
|
1093
|
+
return evmSig;
|
1094
|
+
};
|
1095
|
+
function caculateNativeFee(userOp) {
|
1096
|
+
return (BigInt(userOp.callGasLimit) + BigInt(userOp.verificationGasLimit) + BigInt(userOp.preVerificationGas)) * BigInt(userOp.maxFeePerGas);
|
1097
|
+
}
|
1098
|
+
var getBTCAAAddress = (smartAccount, btcAddress, name, version) => __async(void 0, null, function* () {
|
1099
|
+
var _a;
|
1100
|
+
const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
|
1101
|
+
const owner = addresses[0];
|
1102
|
+
const localKey = `particle_${name}_${version}_${owner}`;
|
1103
|
+
if (typeof window !== "undefined" && localStorage) {
|
1104
|
+
const localAA = localStorage.getItem(localKey);
|
1105
|
+
if (localAA) {
|
1106
|
+
return localAA;
|
1107
|
+
}
|
1108
|
+
}
|
1109
|
+
const btcPublicKey = yield smartAccount.provider.getPublicKey();
|
1110
|
+
const accountInfo = yield smartAccount.sendRpc({
|
1111
|
+
method: "particle_aa_getBTCAccount",
|
1112
|
+
params: [
|
1113
|
+
{
|
1114
|
+
name,
|
1115
|
+
version,
|
1116
|
+
btcPublicKey,
|
1117
|
+
btcAddress
|
1118
|
+
}
|
1119
|
+
]
|
1120
|
+
});
|
1121
|
+
const address = (_a = accountInfo == null ? void 0 : accountInfo[0]) == null ? void 0 : _a.smartAccountAddress;
|
1122
|
+
if (typeof window !== "undefined" && localStorage && address) {
|
1123
|
+
localStorage.setItem(localKey, address);
|
1124
|
+
}
|
1125
|
+
return address;
|
1126
|
+
});
|
1127
|
+
var getBTCAccountInfo = (smartAccount, btcAddress, name, version) => __async(void 0, null, function* () {
|
1128
|
+
const btcPublicKey = yield smartAccount.provider.getPublicKey();
|
1129
|
+
const [accountInfo] = yield smartAccount.sendRpc({
|
1130
|
+
method: "particle_aa_getBTCAccount",
|
1131
|
+
params: [
|
1132
|
+
{
|
1133
|
+
name,
|
1134
|
+
version,
|
1135
|
+
btcPublicKey,
|
1136
|
+
btcAddress
|
1137
|
+
}
|
1138
|
+
]
|
1139
|
+
});
|
1140
|
+
const address = accountInfo.smartAccountAddress;
|
1141
|
+
const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
|
1142
|
+
const owner = addresses[0];
|
1143
|
+
const localKey = `particle_${name}_${version}_${owner}`;
|
1144
|
+
if (typeof window !== "undefined" && localStorage && address) {
|
1145
|
+
localStorage.setItem(localKey, address);
|
1146
|
+
}
|
1147
|
+
return accountInfo;
|
1148
|
+
});
|
1149
|
+
|
1150
|
+
// src/components/copyText/index.tsx
|
1151
|
+
import { useState as useState4 } from "react";
|
1152
|
+
|
1153
|
+
// esbuild-scss-modules-plugin:./copyText.module.scss
|
1154
|
+
var digest5 = "d6fbb5df7ed6ec51d41f665ca768306181bb1e7d7c1cef8eed9bd4230368d7bb";
|
1155
|
+
var classes5 = { "copyText": "_copyText_smolu_1", "copied": "_copied_smolu_9" };
|
1156
|
+
var css5 = `._copyText_smolu_1{cursor:pointer;text-decoration-line:underline}._copyText_smolu_1:hover{opacity:.75}._copied_smolu_9{color:#a855f7;cursor:none;text-decoration-line:none}._copied_smolu_9:hover{opacity:1}`;
|
1157
|
+
(function() {
|
1158
|
+
if (typeof document !== "undefined" && !document.getElementById(digest5)) {
|
1159
|
+
var ele = document.createElement("style");
|
1160
|
+
ele.id = digest5;
|
1161
|
+
ele.textContent = css5;
|
1162
|
+
document.head.appendChild(ele);
|
1163
|
+
}
|
1164
|
+
})();
|
1165
|
+
var copyText_module_default = classes5;
|
1166
|
+
|
1167
|
+
// src/components/copyText/index.tsx
|
1168
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
1169
|
+
function CopyText({ children, value, className, style }) {
|
1170
|
+
const [copied, setCopied] = useState4();
|
1171
|
+
const handleClick = () => __async(this, null, function* () {
|
1172
|
+
if (copied) {
|
1173
|
+
return;
|
1174
|
+
}
|
1175
|
+
try {
|
1176
|
+
if (value) {
|
1177
|
+
yield copyToClipboard(value);
|
1178
|
+
} else if (typeof children === "string" || typeof children === "number" || typeof children === "boolean") {
|
1179
|
+
yield copyToClipboard(children.toString());
|
1180
|
+
} else {
|
1181
|
+
throw new Error("please set copy value");
|
1182
|
+
}
|
1183
|
+
setCopied(true);
|
1184
|
+
setTimeout(() => setCopied(false), 1e3);
|
1185
|
+
} catch (error) {
|
1186
|
+
}
|
1187
|
+
});
|
1188
|
+
return /* @__PURE__ */ jsx5(
|
1189
|
+
"div",
|
1190
|
+
{
|
1191
|
+
className: copyText_module_default.copyText + (className ? ` ${className}` : "") + (copied ? ` ${copyText_module_default.copied}` : ""),
|
1192
|
+
onClick: handleClick,
|
1193
|
+
style,
|
1194
|
+
children: copied ? "Copied" : children
|
1195
|
+
}
|
1196
|
+
);
|
1197
|
+
}
|
1198
|
+
|
1199
|
+
// src/components/transactionDetails/index.tsx
|
1200
|
+
import { chains } from "@particle-network/chains";
|
1201
|
+
import { useCallback as useCallback4, useMemo as useMemo3 } from "react";
|
1202
|
+
import { formatUnits } from "viem";
|
1203
|
+
|
1204
|
+
// src/icons/unverified.svg
|
1205
|
+
var unverified_default = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB0PSIxNzA5Mjg0MDMwNzM5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDExNTIgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICBwLWlkPSIxMzY3NSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij4KICAgIDxwYXRoCiAgICAgICAgZD0iTTExMjguNjQgODA2LjI3Mkw2NzYuMTYgNzIuMzJjLTU1LjE2OC05Ni4zMi0xNDUuMTUyLTk2LjMyLTIwMC4yNTYgMEwyMy4yMzIgODA2LjRDLTMxLjgwOCA5MDIuNTkyIDE0LjU5MiA5NzkuMiAxMjQuOCA5NzkuMmg5MDUuMjE2YzEwNy4zOTIgMCAxNTMuNzkyLTc5LjM2IDk4LjYyNC0xNzIuOTI4eiIKICAgICAgICBmaWxsPSIjZWFiMzA4IiBwLWlkPSIxMzY3NiI+PC9wYXRoPgogICAgPHBhdGgKICAgICAgICBkPSJNNTc0LjQ2NCA2OTUuODA4YzMyIDAgNjAuOTkyIDI4LjM1MiA2MC45OTIgNTkuNTIgMCAzMS4xNjgtMjYuMTEyIDU5LjUyLTYwLjk5MiA1OS41MmE2MC41NDQgNjAuNTQ0IDAgMCAxLTYwLjgtNTkuNTJjMC0zMS4yMzIgMjguOTI4LTU5LjUyIDYwLjgtNTkuNTJ6IG0yLjg4LTQ0NC45OTJjMjMuMjk2IDAgNDMuNTg0IDE5Ljg0IDQzLjU4NCA0Mi40OTZ2Mjk3LjZjMCAyMi42NTYtMjAuMjg4IDQyLjQ5Ni00My41MiA0Mi40OTZhNDQuMTYgNDQuMTYgMCAwIDEtNDMuNTItNDIuNDk2di0yOTcuNmMwLTIyLjY1NiAyMC4yODgtNDIuNDk2IDQzLjUyLTQyLjQ5NnoiCiAgICAgICAgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMTM2NzciPjwvcGF0aD4KPC9zdmc+";
|
1206
|
+
|
1207
|
+
// src/icons/verified.svg
|
1208
|
+
var verified_default = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB0PSIxNzA5MjgzOTE4NzM0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICBwLWlkPSIxMjI3OCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij4KICAgIDxwYXRoIGQ9Ik01MTIgNTEybS01MTIgMGE1MTIgNTEyIDAgMSAwIDEwMjQgMCA1MTIgNTEyIDAgMSAwLTEwMjQgMFoiIGZpbGw9IiM0YWRlODAiIHAtaWQ9IjEyMjc5Ij48L3BhdGg+CiAgICA8cGF0aAogICAgICAgIGQ9Ik00NjkuMzc2IDYyMC4xNkwyOTMuNjMyIDQ2OC40OEE1Ny42IDU3LjYgMCAxIDAgMjE4LjM2OCA1NTUuNTJsMjE5LjcxMiAxODkuNzZhNjAuOCA2MC44IDAgMCAwIDg1Ljc2LTYuMjcybDIuNDk2LTMuMTM2IDI4Ny42MTYtMzgxLjI0OGE1Ny42IDU3LjYgMCAwIDAtOTEuOTA0LTY5LjM3Nkw0NjkuMzc2IDYyMC4xNnoiCiAgICAgICAgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMTIyODAiPjwvcGF0aD4KPC9zdmc+";
|
1209
|
+
|
1210
|
+
// esbuild-scss-modules-plugin:./tooltip.module.scss
|
1211
|
+
var digest6 = "ee15dc27fcfd209601159e7f0e0063ff4e7a886b7b892c1600a911372b82a0b1";
|
1212
|
+
var classes6 = { "tipContainer": "_tipContainer_ufud7_1", "tipContent": "_tipContent_ufud7_5" };
|
1213
|
+
var css6 = `._tipContainer_ufud7_1{overflow:visible;position:relative}._tipContainer_ufud7_1 ._tipContent_ufud7_5{background:#3f3f46;border-radius:8px;bottom:100%;color:#fff;font-size:11px;left:-100%;opacity:0;padding:3px 6px;position:absolute;transition:opacity .5s;visibility:hidden;white-space:nowrap;z-index:1}._tipContainer_ufud7_1:hover ._tipContent_ufud7_5{opacity:1;visibility:visible}`;
|
1214
|
+
(function() {
|
1215
|
+
if (typeof document !== "undefined" && !document.getElementById(digest6)) {
|
1216
|
+
var ele = document.createElement("style");
|
1217
|
+
ele.id = digest6;
|
1218
|
+
ele.textContent = css6;
|
1219
|
+
document.head.appendChild(ele);
|
1220
|
+
}
|
1221
|
+
})();
|
1222
|
+
var tooltip_module_default = classes6;
|
1223
|
+
|
1224
|
+
// src/components/tooltip/index.tsx
|
1225
|
+
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
1226
|
+
var Tooltip = ({ children, content, className }) => {
|
1227
|
+
return /* @__PURE__ */ jsxs3("div", { className: tooltip_module_default.tipContainer, children: [
|
1228
|
+
children,
|
1229
|
+
/* @__PURE__ */ jsx6("div", { className: tooltip_module_default.tipContent + (className ? ` ${className}` : ""), children: content })
|
1230
|
+
] });
|
1231
|
+
};
|
1232
|
+
var tooltip_default = Tooltip;
|
1233
|
+
|
1234
|
+
// esbuild-scss-modules-plugin:./transactionDetails.module.scss
|
1235
|
+
var digest7 = "a81c744751497ed4b401c08b9e5aeef1991aeb86f2cbba3ee57c1926c0502f1a";
|
1236
|
+
var classes7 = { "detailsCard": "_detailsCard_ml2p9_1", "title": "_title_ml2p9_13", "nftContract": "_nftContract_ml2p9_19", "row": "_row_ml2p9_26", "tokenIcon": "_tokenIcon_ml2p9_35", "nftIcon": "_nftIcon_ml2p9_41", "balanceChange": "_balanceChange_ml2p9_49", "tokenSymbol": "_tokenSymbol_ml2p9_56", "toContract": "_toContract_ml2p9_61", "right": "_right_ml2p9_71" };
|
1237
|
+
var css7 = `._detailsCard_ml2p9_1{background:#232529;border:1px solid #252525;border-radius:8px;color:#fff;margin-top:16px;overflow-x:hidden;padding:10px;position:relative;width:100%}._detailsCard_ml2p9_1 ._title_ml2p9_13{font-size:16px;font-weight:600;margin-bottom:12px;text-align:left}._detailsCard_ml2p9_1 ._nftContract_ml2p9_19{color:#a855f7;font-size:16px;position:absolute;right:8px;top:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26{align-items:center;display:flex;flex-direction:row;font-size:14px;gap:8px;justify-content:space-between;margin-top:6px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenIcon_ml2p9_35{border-radius:50%;height:32px;margin:10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._nftIcon_ml2p9_41{border-radius:2px;display:inline;height:32px;margin:10px 8px 10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._balanceChange_ml2p9_49{flex-grow:2;font-size:16px;font-weight:500;text-align:end;word-break:break-word}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenSymbol_ml2p9_56{font-size:16px;font-weight:500;text-align:end}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61{align-items:center;display:flex;gap:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61 img{display:inline;height:18px;width:18px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._right_ml2p9_71{text-align:end}`;
|
1238
|
+
(function() {
|
1239
|
+
if (typeof document !== "undefined" && !document.getElementById(digest7)) {
|
1240
|
+
var ele = document.createElement("style");
|
1241
|
+
ele.id = digest7;
|
1242
|
+
ele.textContent = css7;
|
1243
|
+
document.head.appendChild(ele);
|
1244
|
+
}
|
1245
|
+
})();
|
1246
|
+
var transactionDetails_module_default = classes7;
|
1247
|
+
|
1248
|
+
// src/components/transactionDetails/index.tsx
|
1249
|
+
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
1250
|
+
var TransactionDetails = ({ details }) => {
|
1251
|
+
const { chainId } = useETHProvider();
|
1252
|
+
const chainInfo = useMemo3(() => {
|
1253
|
+
if (chainId) {
|
1254
|
+
return chains.getEVMChainInfoById(chainId);
|
1255
|
+
}
|
1256
|
+
}, [chainId]);
|
1257
|
+
const titleContent = useMemo3(() => {
|
1258
|
+
var _a;
|
1259
|
+
switch (details.type) {
|
1260
|
+
case "native_transfer" /* NATIVE_TRANSFER */:
|
1261
|
+
return `Send ${chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol}`;
|
1262
|
+
case "erc20_transfer" /* ERC20_TRANSFER */:
|
1263
|
+
return `Send ${(_a = details.estimatedChanges.tokens[0]) == null ? void 0 : _a.symbol}`;
|
1264
|
+
case "erc20_approve" /* ERC20_APPROVE */:
|
1265
|
+
return "Approve Spending";
|
1266
|
+
case "erc721_transfer" /* ERC721_TRANFER */:
|
1267
|
+
return "Send NFT";
|
1268
|
+
case "erc1155_transfer" /* ERC1155_TRANFER */:
|
1269
|
+
return "Send NFT";
|
1270
|
+
default:
|
1271
|
+
return "Transaction Details";
|
1272
|
+
}
|
1273
|
+
}, [details, chainInfo]);
|
1274
|
+
const nftContractType = useMemo3(() => {
|
1275
|
+
if (details.type === "erc721_transfer" /* ERC721_TRANFER */) {
|
1276
|
+
return "ERC721";
|
1277
|
+
} else if (details.type === "erc1155_transfer" /* ERC1155_TRANFER */) {
|
1278
|
+
return "ERC1155";
|
1279
|
+
}
|
1280
|
+
}, [details]);
|
1281
|
+
const nativeIcon = useMemo3(() => {
|
1282
|
+
if (chainInfo) {
|
1283
|
+
if (chainInfo.nativeCurrency.symbol === "ETH") {
|
1284
|
+
return "https://static.particle.network/token-list/ethereum/native.png";
|
1285
|
+
} else {
|
1286
|
+
return chainInfo.nativeIcon || chainInfo.icon;
|
1287
|
+
}
|
1288
|
+
}
|
1289
|
+
return defaultTokenIcon;
|
1290
|
+
}, [chainInfo]);
|
1291
|
+
const to = useMemo3(() => {
|
1292
|
+
var _a, _b;
|
1293
|
+
const params = (_b = (_a = details.data) == null ? void 0 : _a.function) == null ? void 0 : _b.params;
|
1294
|
+
if (details.type == "erc20_transfer" /* ERC20_TRANSFER */) {
|
1295
|
+
return params ? params[params.length === 3 ? 1 : 0].value : "";
|
1296
|
+
} else if (details.type == "erc20_approve" /* ERC20_APPROVE */) {
|
1297
|
+
return params ? params[0].value : "";
|
1298
|
+
} else if (details.type == "native_transfer" /* NATIVE_TRANSFER */) {
|
1299
|
+
return details.data.to;
|
1300
|
+
} else if (details.type == "erc721_transfer" /* ERC721_TRANFER */ || details.type == "erc1155_transfer" /* ERC1155_TRANFER */) {
|
1301
|
+
return params ? params[1].value : "";
|
1302
|
+
} else {
|
1303
|
+
return details.data.to;
|
1304
|
+
}
|
1305
|
+
}, [details]);
|
1306
|
+
const balanceChangeTextColor = useCallback4((value) => {
|
1307
|
+
if (BigInt(value) > 0) {
|
1308
|
+
return "#4ade80";
|
1309
|
+
} else if (BigInt(value) < 0) {
|
1310
|
+
return "#ef4444";
|
1311
|
+
} else {
|
1312
|
+
return "white";
|
1313
|
+
}
|
1314
|
+
}, []);
|
1315
|
+
const functionContent = useMemo3(() => {
|
1316
|
+
if (details.type !== "native_transfer" /* NATIVE_TRANSFER */ && details.data.function) {
|
1317
|
+
const params = details.data.function.params.map((item) => item.name);
|
1318
|
+
return `${details.data.function.name}(${params.join(", ")})`;
|
1319
|
+
}
|
1320
|
+
}, [details]);
|
1321
|
+
const approveTokenAmount = useMemo3(() => {
|
1322
|
+
var _a, _b, _c, _d;
|
1323
|
+
if (details.type === "erc20_approve" /* ERC20_APPROVE */) {
|
1324
|
+
const amount = (_d = (_c = (_b = (_a = details.data) == null ? void 0 : _a.function) == null ? void 0 : _b.params) == null ? void 0 : _c[1]) == null ? void 0 : _d.value;
|
1325
|
+
return BigInt(amount || 0);
|
1326
|
+
}
|
1327
|
+
return BigInt(0);
|
1328
|
+
}, [details]);
|
1329
|
+
const tokenAmountChange = useCallback4(
|
1330
|
+
(tokenItem) => {
|
1331
|
+
const result = formatUnits(
|
1332
|
+
details.type === "erc20_approve" /* ERC20_APPROVE */ ? approveTokenAmount : BigInt(tokenItem.amountChange),
|
1333
|
+
tokenItem.decimals
|
1334
|
+
);
|
1335
|
+
if (details.type !== "erc20_approve" /* ERC20_APPROVE */ && BigInt(tokenItem.amountChange) > BigInt(0)) {
|
1336
|
+
return `+${result}`;
|
1337
|
+
}
|
1338
|
+
return result;
|
1339
|
+
},
|
1340
|
+
[approveTokenAmount, details]
|
1341
|
+
);
|
1342
|
+
const showContactAddress = useMemo3(() => {
|
1343
|
+
return details.type === "erc20_transfer" /* ERC20_TRANSFER */ || details.type === "erc20_approve" /* ERC20_APPROVE */ || details.type === "erc721_transfer" /* ERC721_TRANFER */ || details.type === "erc1155_transfer" /* ERC1155_TRANFER */;
|
1344
|
+
}, [details]);
|
1345
|
+
return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.detailsCard, children: [
|
1346
|
+
/* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.title, children: titleContent }),
|
1347
|
+
nftContractType && /* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.nftContract, children: nftContractType }),
|
1348
|
+
details.estimatedChanges.natives.map((nativeItem) => {
|
1349
|
+
return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
|
1350
|
+
/* @__PURE__ */ jsx7("img", { className: transactionDetails_module_default.tokenIcon, src: nativeIcon }),
|
1351
|
+
/* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.balanceChange, style: { color: balanceChangeTextColor(nativeItem.nativeChange) }, children: [
|
1352
|
+
BigInt(nativeItem.nativeChange) > 0 ? "+" : void 0,
|
1353
|
+
formatUnits(BigInt(nativeItem.nativeChange), (chainInfo == null ? void 0 : chainInfo.nativeCurrency.decimals) || 18)
|
1354
|
+
] }),
|
1355
|
+
/* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.tokenSymbol, children: chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol })
|
1356
|
+
] }, nativeItem.address);
|
1357
|
+
}),
|
1358
|
+
details.estimatedChanges.tokens.map((tokenItem) => {
|
1359
|
+
return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
|
1360
|
+
/* @__PURE__ */ jsx7("img", { className: transactionDetails_module_default.tokenIcon, src: tokenItem.image || defaultTokenIcon }),
|
1361
|
+
/* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.balanceChange, children: [
|
1362
|
+
/* @__PURE__ */ jsx7("span", { style: { color: balanceChangeTextColor(tokenItem.amountChange) }, children: tokenAmountChange(tokenItem) }),
|
1363
|
+
` ${tokenItem.symbol}`
|
1364
|
+
] })
|
1365
|
+
] }, tokenItem.address);
|
1366
|
+
}),
|
1367
|
+
details.estimatedChanges.nfts.map((nftItem) => {
|
1368
|
+
return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
|
1369
|
+
/* @__PURE__ */ jsxs4("div", { style: { fontSize: 16 }, children: [
|
1370
|
+
/* @__PURE__ */ jsx7("img", { className: transactionDetails_module_default.nftIcon, src: ipfsToSrc(nftItem.image || defaultTokenIcon) }),
|
1371
|
+
nftItem.name || `NFT#${nftItem.tokenId}`
|
1372
|
+
] }),
|
1373
|
+
/* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.balanceChange, style: { color: balanceChangeTextColor(nftItem.amountChange) }, children: nftItem.amountChange })
|
1374
|
+
] }, nftItem.address);
|
1375
|
+
}),
|
1376
|
+
to && /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
|
1377
|
+
/* @__PURE__ */ jsx7("div", { children: "To" }),
|
1378
|
+
/* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.toContract, children: [
|
1379
|
+
details.toVerified != null && !showContactAddress && /* @__PURE__ */ jsx7(tooltip_default, { content: details.toVerified ? "Verified Contract" : "Unverified Contract", children: /* @__PURE__ */ jsx7("img", { src: details.toVerified ? verified_default : unverified_default }) }),
|
1380
|
+
/* @__PURE__ */ jsx7(CopyText, { value: to, children: shortString(to) })
|
1381
|
+
] })
|
1382
|
+
] }),
|
1383
|
+
showContactAddress && /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
|
1384
|
+
/* @__PURE__ */ jsx7("div", { children: "Contract" }),
|
1385
|
+
/* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.toContract, children: [
|
1386
|
+
details.toVerified != null && /* @__PURE__ */ jsx7(tooltip_default, { content: details.toVerified ? "Verified Contract" : "Unverified Contract", children: /* @__PURE__ */ jsx7("img", { src: details.toVerified ? verified_default : unverified_default }) }),
|
1387
|
+
/* @__PURE__ */ jsx7(CopyText, { value: details.data.to, children: shortString(details.data.to) })
|
1388
|
+
] })
|
1389
|
+
] }),
|
1390
|
+
/* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
|
1391
|
+
/* @__PURE__ */ jsx7("div", { children: "Hex Data" }),
|
1392
|
+
/* @__PURE__ */ jsx7(CopyText, { value: details.data.data, children: shortString(details.data.data) })
|
1393
|
+
] }),
|
1394
|
+
functionContent && /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
|
1395
|
+
/* @__PURE__ */ jsx7("div", { children: "Function" }),
|
1396
|
+
/* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.right, children: functionContent })
|
1397
|
+
] })
|
1398
|
+
] });
|
1399
|
+
};
|
1400
|
+
var transactionDetails_default = TransactionDetails;
|
1401
|
+
|
1402
|
+
// esbuild-scss-modules-plugin:./sign.module.scss
|
1403
|
+
var digest8 = "3ab1a455562ae7e24c2ac49572897e615b9e9275066fd0d64f0cf24844521bab";
|
1404
|
+
var classes8 = { "modalContent": "_modalContent_aoysu_1", "closeBtn": "_closeBtn_aoysu_5", "signTitle": "_signTitle_aoysu_11", "chainInfo": "_chainInfo_aoysu_16", "addressContainer": "_addressContainer_aoysu_29", "addressInfo": "_addressInfo_aoysu_34", "detailsContent": "_detailsContent_aoysu_49", "fill": "_fill_aoysu_58", "unsignedMessage": "_unsignedMessage_aoysu_61", "estimatedGas": "_estimatedGas_aoysu_76", "signBtn": "_signBtn_aoysu_81", "notRemind": "_notRemind_aoysu_85" };
|
1405
|
+
var css8 = `._modalContent_aoysu_1{color:#fff;text-align:center}._modalContent_aoysu_1 ._closeBtn_aoysu_5{cursor:pointer;position:absolute;right:16px;top:16px}._modalContent_aoysu_1 ._signTitle_aoysu_11{font-size:20px;font-weight:600;margin-bottom:10px}._modalContent_aoysu_1 ._chainInfo_aoysu_16{align-items:center;display:flex;flex-direction:row;font-size:12px;gap:8px;justify-content:center;margin-bottom:8px}._modalContent_aoysu_1 ._chainInfo_aoysu_16 img{height:18px;width:18px}._modalContent_aoysu_1 ._addressContainer_aoysu_29{height:28px;margin-bottom:16px;margin-top:8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34{align-items:center;background:rgba(58,58,58,.635);border-radius:20px;display:flex;flex-direction:row;font-size:12px;gap:4px;justify-content:center;padding:4px 8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34 img{height:18px;width:18px}._modalContent_aoysu_1 ._detailsContent_aoysu_49{max-height:0;overflow-y:auto;transition:max-height .3s linear;width:100%}._modalContent_aoysu_1 ._detailsContent_aoysu_49::-webkit-scrollbar{display:none}._modalContent_aoysu_1 ._detailsContent_aoysu_49._fill_aoysu_58{max-height:500px}._modalContent_aoysu_1 ._detailsContent_aoysu_49 ._unsignedMessage_aoysu_61{background:#232529;border:1px solid #252525;border-radius:8px;box-sizing:border-box;color:#fff;font-size:14px;padding:8px;width:100%;word-wrap:break-word;color:hsla(0,0%,100%,.631);text-align:left;white-space:pre-wrap}._modalContent_aoysu_1 ._estimatedGas_aoysu_76{color:hsla(0,0%,100%,.631);font-size:12px;margin-top:24px}._modalContent_aoysu_1 ._signBtn_aoysu_81{margin-top:24px;min-width:200px}._modalContent_aoysu_1 ._notRemind_aoysu_85{align-items:center;color:hsla(0,0%,100%,.631);cursor:pointer;display:inline-flex;font-size:12px;gap:4px;margin-top:16px}._modalContent_aoysu_1 ._notRemind_aoysu_85:hover{opacity:.85}`;
|
1406
|
+
(function() {
|
1407
|
+
if (typeof document !== "undefined" && !document.getElementById(digest8)) {
|
1408
|
+
var ele = document.createElement("style");
|
1409
|
+
ele.id = digest8;
|
1410
|
+
ele.textContent = css8;
|
1411
|
+
document.head.appendChild(ele);
|
1412
|
+
}
|
1413
|
+
})();
|
1414
|
+
var sign_module_default = classes8;
|
1415
|
+
|
1416
|
+
// src/components/signModal/index.tsx
|
1417
|
+
import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
1418
|
+
var SignModal = ({ open, onClose, onOpen }) => {
|
1419
|
+
const [userOpBundle, setUserOpBundle] = useState5();
|
1420
|
+
const [notRemindChecked, setNotRemindChecked] = useState5(false);
|
1421
|
+
const [loading, setLoading] = useState5(false);
|
1422
|
+
const [deserializeLoading, setDeserializeLoading] = useState5(false);
|
1423
|
+
const [deserializeResult, setDeserializeResult] = useState5();
|
1424
|
+
const [disabled, setDisabled] = useState5(false);
|
1425
|
+
const [showNotRemind, setShowNotRemind] = useState5(true);
|
1426
|
+
const [nativeBalance, setNativeBalance] = useState5();
|
1427
|
+
const { accountContract } = useAccountContract();
|
1428
|
+
const [requestArguments, setRequestArguments] = useState5();
|
1429
|
+
const { chainId, publicClient, evmAccount, provider } = useETHProvider();
|
1430
|
+
const { smartAccount } = useConnectProvider();
|
1431
|
+
useEffect4(() => {
|
1432
|
+
if (!open) {
|
1433
|
+
setDeserializeResult(void 0);
|
1434
|
+
setUserOpBundle(void 0);
|
1435
|
+
setRequestArguments(void 0);
|
1436
|
+
setLoading(false);
|
1437
|
+
setDisabled(false);
|
1438
|
+
setDeserializeLoading(false);
|
1439
|
+
setNativeBalance(void 0);
|
1440
|
+
}
|
1441
|
+
}, [open]);
|
1442
|
+
useEffect4(() => {
|
1443
|
+
if (open) {
|
1444
|
+
const notRemind = txConfirmUtils_default.isNotRemind();
|
1445
|
+
setShowNotRemind(!notRemind);
|
1446
|
+
if (!notRemind) {
|
1447
|
+
setNotRemindChecked(false);
|
1448
|
+
}
|
1449
|
+
}
|
1450
|
+
}, [open]);
|
1451
|
+
const chainInfo = useMemo4(() => {
|
1452
|
+
if (chainId) {
|
1453
|
+
return chains2.getEVMChainInfoById(chainId);
|
1454
|
+
}
|
1455
|
+
}, [chainId]);
|
1456
|
+
useEffect4(() => {
|
1457
|
+
const onSendUserOp = (opBundle) => {
|
1458
|
+
setUserOpBundle(opBundle);
|
1459
|
+
onOpen();
|
1460
|
+
};
|
1461
|
+
const onPersonalSign = (arg) => {
|
1462
|
+
setRequestArguments(arg);
|
1463
|
+
onOpen();
|
1464
|
+
};
|
1465
|
+
const onSignTypedData = (arg) => {
|
1466
|
+
setRequestArguments(arg);
|
1467
|
+
onOpen();
|
1468
|
+
};
|
1469
|
+
eventUtils_default.on("sendUserOp" /* sendUserOp */, onSendUserOp);
|
1470
|
+
eventUtils_default.on("personalSign" /* personalSign */, onPersonalSign);
|
1471
|
+
eventUtils_default.on("signTypedData" /* signTypedData */, onSignTypedData);
|
1472
|
+
return () => {
|
1473
|
+
eventUtils_default.off("sendUserOp" /* sendUserOp */, onSendUserOp);
|
1474
|
+
eventUtils_default.off("personalSign" /* personalSign */, onPersonalSign);
|
1475
|
+
eventUtils_default.off("signTypedData" /* signTypedData */, onSignTypedData);
|
1476
|
+
};
|
1477
|
+
}, [onOpen, setUserOpBundle]);
|
1478
|
+
const deserializeUserOp = useCallback5(() => __async(void 0, null, function* () {
|
1479
|
+
if (userOpBundle && smartAccount) {
|
1480
|
+
const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
|
1481
|
+
const owner = addresses[0];
|
1482
|
+
const result = yield smartAccount.sendRpc({
|
1483
|
+
method: "particle_aa_deserializeUserOp",
|
1484
|
+
params: [
|
1485
|
+
{
|
1486
|
+
name: accountContract.name,
|
1487
|
+
version: accountContract.version,
|
1488
|
+
ownerAddress: owner
|
1489
|
+
},
|
1490
|
+
userOpBundle.userOp
|
1491
|
+
]
|
1492
|
+
});
|
1493
|
+
return result;
|
1494
|
+
}
|
1495
|
+
}), [userOpBundle, smartAccount, accountContract]);
|
1496
|
+
useEffect4(() => {
|
1497
|
+
if (userOpBundle && open) {
|
1498
|
+
setDeserializeLoading(true);
|
1499
|
+
deserializeUserOp().then((result) => {
|
1500
|
+
setDeserializeResult(result);
|
1501
|
+
}).catch((error) => {
|
1502
|
+
eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
|
1503
|
+
error
|
1504
|
+
});
|
1505
|
+
onClose();
|
1506
|
+
});
|
1507
|
+
}
|
1508
|
+
}, [deserializeUserOp, userOpBundle, open, onClose]);
|
1509
|
+
useEffect4(() => {
|
1510
|
+
if (open && publicClient && evmAccount && userOpBundle) {
|
1511
|
+
publicClient.getBalance({ address: evmAccount }).then((result) => setNativeBalance(result)).catch((error) => {
|
1512
|
+
eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
|
1513
|
+
error
|
1514
|
+
});
|
1515
|
+
onClose();
|
1516
|
+
});
|
1517
|
+
}
|
1518
|
+
}, [open, publicClient, evmAccount, userOpBundle, onClose]);
|
1519
|
+
useEffect4(() => {
|
1520
|
+
if (nativeBalance != null && deserializeResult != null) {
|
1521
|
+
setDeserializeLoading(false);
|
1522
|
+
}
|
1523
|
+
}, [nativeBalance, deserializeResult]);
|
1524
|
+
const toggleNotRemind = () => {
|
1525
|
+
setNotRemindChecked(!notRemindChecked);
|
1526
|
+
txConfirmUtils_default.setNotRemind(!notRemindChecked);
|
1527
|
+
};
|
1528
|
+
const gasFee = useMemo4(() => {
|
1529
|
+
if (userOpBundle == null ? void 0 : userOpBundle.userOp) {
|
1530
|
+
return caculateNativeFee(userOpBundle == null ? void 0 : userOpBundle.userOp);
|
1531
|
+
}
|
1532
|
+
return BigInt(0);
|
1533
|
+
}, [userOpBundle]);
|
1534
|
+
const closeModal = () => {
|
1535
|
+
var _a;
|
1536
|
+
let event;
|
1537
|
+
if (userOpBundle) {
|
1538
|
+
event = "sendUserOpResult" /* sendUserOpResult */;
|
1539
|
+
} else if ((requestArguments == null ? void 0 : requestArguments.method) === "personal_sign" /* personalSign */) {
|
1540
|
+
event = "personalSignResult" /* personalSignResult */;
|
1541
|
+
} else if ((_a = requestArguments == null ? void 0 : requestArguments.method) == null ? void 0 : _a.startsWith("eth_signTypedData" /* signTypedData */)) {
|
1542
|
+
event = "signTypedDataResult" /* signTypedDataResult */;
|
1543
|
+
}
|
1544
|
+
if (event) {
|
1545
|
+
eventUtils_default.emit(event, {
|
1546
|
+
error: {
|
1547
|
+
code: 4001,
|
1548
|
+
message: "The user rejected the request."
|
1549
|
+
}
|
1550
|
+
});
|
1551
|
+
}
|
1552
|
+
onClose();
|
1553
|
+
};
|
1554
|
+
const confirmTx = useCallback5(() => __async(void 0, null, function* () {
|
1555
|
+
if (smartAccount && provider) {
|
1556
|
+
setLoading(true);
|
1557
|
+
if (userOpBundle) {
|
1558
|
+
try {
|
1559
|
+
const hash = yield smartAccount.sendUserOperation(userOpBundle);
|
1560
|
+
eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, { result: hash });
|
1561
|
+
} catch (error) {
|
1562
|
+
eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
|
1563
|
+
error
|
1564
|
+
});
|
1565
|
+
} finally {
|
1566
|
+
setLoading(false);
|
1567
|
+
}
|
1568
|
+
} else if (requestArguments) {
|
1569
|
+
try {
|
1570
|
+
const hash = yield provider.request(requestArguments);
|
1571
|
+
eventUtils_default.emit(
|
1572
|
+
requestArguments.method == "personal_sign" /* personalSign */ ? "personalSignResult" /* personalSignResult */ : "signTypedDataResult" /* signTypedDataResult */,
|
1573
|
+
{ result: hash }
|
1574
|
+
);
|
1575
|
+
} catch (error) {
|
1576
|
+
eventUtils_default.emit(
|
1577
|
+
requestArguments.method == "personal_sign" /* personalSign */ ? "personalSignResult" /* personalSignResult */ : "signTypedDataResult" /* signTypedDataResult */,
|
1578
|
+
{
|
1579
|
+
error
|
1580
|
+
}
|
1581
|
+
);
|
1582
|
+
} finally {
|
1583
|
+
setLoading(false);
|
1584
|
+
}
|
1585
|
+
}
|
1586
|
+
onClose();
|
1587
|
+
}
|
1588
|
+
}), [smartAccount, provider, requestArguments, userOpBundle, onClose]);
|
1589
|
+
useEffect4(() => {
|
1590
|
+
if (userOpBundle && nativeBalance != null && deserializeResult) {
|
1591
|
+
const nativeChange = deserializeResult.filter(
|
1592
|
+
(item) => {
|
1593
|
+
var _a, _b;
|
1594
|
+
return ((_b = (_a = item.estimatedChanges.natives) == null ? void 0 : _a[0]) == null ? void 0 : _b.nativeChange) && item.estimatedChanges.natives[0].nativeChange.startsWith("-");
|
1595
|
+
}
|
1596
|
+
).map((item) => {
|
1597
|
+
var _a, _b, _c, _d;
|
1598
|
+
return BigInt(((_d = (_c = (_b = (_a = item.estimatedChanges) == null ? void 0 : _a.natives) == null ? void 0 : _b[0]) == null ? void 0 : _c.nativeChange) == null ? void 0 : _d.replace("-", "")) || 0);
|
1599
|
+
}).reduce((accumulator, currentValue) => accumulator + currentValue, BigInt(0));
|
1600
|
+
if (userOpBundle.userOp.paymasterAndData.length > 2) {
|
1601
|
+
setDisabled(nativeBalance < nativeChange);
|
1602
|
+
} else {
|
1603
|
+
setDisabled(nativeBalance < gasFee + nativeChange);
|
1604
|
+
}
|
1605
|
+
}
|
1606
|
+
}, [userOpBundle, gasFee, nativeBalance, deserializeResult]);
|
1607
|
+
const unsignedMessage = useMemo4(() => {
|
1608
|
+
var _a, _b;
|
1609
|
+
if (!requestArguments) {
|
1610
|
+
return void 0;
|
1611
|
+
}
|
1612
|
+
if (requestArguments.method === "personal_sign" /* personalSign */) {
|
1613
|
+
const message = ((_a = requestArguments.params) == null ? void 0 : _a[0]) || "0x";
|
1614
|
+
return hexToString(message);
|
1615
|
+
} else {
|
1616
|
+
const typedData = (_b = requestArguments.params) == null ? void 0 : _b[1];
|
1617
|
+
const obj = typeof typedData === "string" ? JSON.parse(typedData) : typedData;
|
1618
|
+
return JSON.stringify(obj, null, 2);
|
1619
|
+
}
|
1620
|
+
}, [requestArguments]);
|
1621
|
+
return /* @__PURE__ */ jsx8(modal_default, { open, onClose, isDismissable: false, contentClassName: sign_module_default.modalContent, children: /* @__PURE__ */ jsxs5(Fragment3, { children: [
|
1622
|
+
/* @__PURE__ */ jsx8("img", { className: sign_module_default.closeBtn, src: close_default, onClick: closeModal }),
|
1623
|
+
requestArguments && /* @__PURE__ */ jsx8("div", { className: sign_module_default.signTitle, children: requestArguments.method == "personal_sign" /* personalSign */ ? "Sign Message" : "Sign Typed Data" }),
|
1624
|
+
/* @__PURE__ */ jsxs5("div", { className: sign_module_default.chainInfo, children: [
|
1625
|
+
/* @__PURE__ */ jsx8("img", { src: chainInfo == null ? void 0 : chainInfo.icon }),
|
1626
|
+
chainInfo == null ? void 0 : chainInfo.fullname.replace("Mainnet", "")
|
1627
|
+
] }),
|
1628
|
+
/* @__PURE__ */ jsx8("div", { className: sign_module_default.addressContainer, children: /* @__PURE__ */ jsx8(CopyText, { value: evmAccount, style: { textDecorationLine: "none" }, children: /* @__PURE__ */ jsxs5("div", { className: sign_module_default.addressInfo, children: [
|
1629
|
+
shortString(evmAccount),
|
1630
|
+
/* @__PURE__ */ jsx8("img", { src: copy_default })
|
1631
|
+
] }) }) }),
|
1632
|
+
/* @__PURE__ */ jsxs5("div", { className: sign_module_default.detailsContent + (deserializeResult || requestArguments ? ` ${sign_module_default.fill}` : ""), children: [
|
1633
|
+
deserializeResult && deserializeResult.map((details, index) => /* @__PURE__ */ jsx8(transactionDetails_default, { details }, `${details.type}-${index}`)),
|
1634
|
+
unsignedMessage && /* @__PURE__ */ jsx8("div", { className: sign_module_default.unsignedMessage, children: unsignedMessage })
|
1635
|
+
] }),
|
1636
|
+
gasFee && /* @__PURE__ */ jsx8("div", { className: sign_module_default.estimatedGas, children: `Estimated gas fee: ${formatEther(gasFee)} ${chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol}` }),
|
1637
|
+
/* @__PURE__ */ jsx8(
|
1638
|
+
button_default,
|
1639
|
+
{
|
1640
|
+
onClick: confirmTx,
|
1641
|
+
className: sign_module_default.signBtn,
|
1642
|
+
isLoading: loading || deserializeLoading,
|
1643
|
+
isDisabled: disabled,
|
1644
|
+
children: deserializeLoading ? "LOADING" : disabled ? "INSUFFICIENT FEE" : "CONFIRM"
|
1645
|
+
}
|
1646
|
+
),
|
1647
|
+
showNotRemind && /* @__PURE__ */ jsxs5("div", { className: sign_module_default.notRemind, onClick: toggleNotRemind, children: [
|
1648
|
+
/* @__PURE__ */ jsx8("img", { src: notRemindChecked ? check_box_default : check_box_blank_default }),
|
1649
|
+
"Do not remind me again"
|
1650
|
+
] })
|
1651
|
+
] }) });
|
1652
|
+
};
|
1653
|
+
var signModal_default = SignModal;
|
1654
|
+
|
1655
|
+
// src/evmSigner/index.ts
|
1656
|
+
import { intToHex as intToHex2 } from "@ethereumjs/util";
|
1657
|
+
import { chains as chains3 } from "@particle-network/chains";
|
1658
|
+
import { EventEmitter as EventEmitter3 } from "events";
|
1659
|
+
import {
|
1660
|
+
InvalidParamsRpcError,
|
1661
|
+
SwitchChainError,
|
1662
|
+
UnsupportedProviderMethodError,
|
1663
|
+
createPublicClient,
|
1664
|
+
hashMessage,
|
1665
|
+
hashTypedData,
|
1666
|
+
http
|
1667
|
+
} from "viem";
|
1668
|
+
var AASignerProvider = class {
|
1669
|
+
constructor(supportChainIds, projectId, clientKey, rpcUrls) {
|
1670
|
+
this.supportChainIds = supportChainIds;
|
1671
|
+
this.projectId = projectId;
|
1672
|
+
this.clientKey = clientKey;
|
1673
|
+
this.rpcUrls = rpcUrls;
|
1674
|
+
this.chainId = 1;
|
1675
|
+
this.personalSign = (message) => __async(this, null, function* () {
|
1676
|
+
throw new Error("Wallet not connected!");
|
1677
|
+
});
|
1678
|
+
this.getPublicKey = () => __async(this, null, function* () {
|
1679
|
+
throw new Error("Wallet not connected!");
|
1680
|
+
});
|
1681
|
+
this.getPublicClient = () => {
|
1682
|
+
var _a, _b;
|
1683
|
+
const rpcUrl = ((_a = this == null ? void 0 : this.rpcUrls) == null ? void 0 : _a[this.chainId]) || ((_b = chains3.getEVMChainInfoById(this.chainId || 1)) == null ? void 0 : _b.rpcUrl);
|
1684
|
+
return createPublicClient({
|
1685
|
+
transport: http(rpcUrl)
|
1686
|
+
});
|
1687
|
+
};
|
1688
|
+
this.events = new EventEmitter3();
|
1689
|
+
this.events.setMaxListeners(100);
|
1690
|
+
if (typeof window !== "undefined") {
|
1691
|
+
const localChainId = localStorage.getItem("connect-evm-chain-id");
|
1692
|
+
if (localChainId && supportChainIds.includes(Number(localChainId))) {
|
1693
|
+
this.chainId = Number(localChainId);
|
1694
|
+
} else {
|
1695
|
+
const chainId = supportChainIds[0];
|
1696
|
+
if (chainId) {
|
1697
|
+
localStorage.setItem("connect-evm-chain-id", chainId.toString());
|
1698
|
+
this.chainId = chainId;
|
1699
|
+
}
|
1700
|
+
}
|
1701
|
+
}
|
1702
|
+
this.publicClient = this.getPublicClient();
|
1703
|
+
}
|
1704
|
+
request(arg) {
|
1705
|
+
return __async(this, null, function* () {
|
1706
|
+
var _a, _b;
|
1707
|
+
if (arg.method === "eth_sendTransaction" || arg.method === "wallet_addEthereumChain" || arg.method === "wallet_watchAsset" || arg.method === "eth_sign") {
|
1708
|
+
throw new UnsupportedProviderMethodError(new Error("The Provider does not support the requested method."));
|
1709
|
+
}
|
1710
|
+
if (arg.method === "eth_accounts" || arg.method === "eth_requestAccounts") {
|
1711
|
+
const pubKey = yield this.getPublicKey();
|
1712
|
+
const address = pubKeyToEVMAddress(pubKey);
|
1713
|
+
return [address];
|
1714
|
+
} else if (arg.method === "eth_chainId") {
|
1715
|
+
return `0x${this.chainId.toString(16)}`;
|
1716
|
+
} else if (arg.method === "personal_sign" /* personalSign */) {
|
1717
|
+
let message = (_a = arg.params) == null ? void 0 : _a[0];
|
1718
|
+
if (message.length !== 66) {
|
1719
|
+
const hash = hashMessage({ raw: message });
|
1720
|
+
message = hash;
|
1721
|
+
}
|
1722
|
+
const result = yield this.personalSign(message || "");
|
1723
|
+
const convertResult = convertSignature(result);
|
1724
|
+
if (!convertResult) {
|
1725
|
+
throw new Error("sign error");
|
1726
|
+
}
|
1727
|
+
return convertResult;
|
1728
|
+
} else if (arg.method === "eth_signTypedData" || arg.method === "eth_signTypedData_v4") {
|
1729
|
+
const typedData = (_b = arg.params) == null ? void 0 : _b[1];
|
1730
|
+
const hash = hashTypedData(typeof typedData === "string" ? JSON.parse(typedData) : typedData);
|
1731
|
+
const result = yield this.personalSign(hash || "");
|
1732
|
+
const convertResult = convertSignature(result);
|
1733
|
+
if (!convertResult) {
|
1734
|
+
throw new Error("sign error");
|
1735
|
+
}
|
1736
|
+
return convertResult;
|
1737
|
+
} else if (arg.method === "wallet_switchEthereumChain") {
|
1738
|
+
if (arg.params && arg.params instanceof Array && arg.params[0] && arg.params[0].chainId) {
|
1739
|
+
const chainId = Number(arg.params[0].chainId);
|
1740
|
+
if (this.supportChainIds.includes(this.chainId)) {
|
1741
|
+
this.chainId = chainId;
|
1742
|
+
localStorage.setItem("connect-evm-chain-id", this.chainId.toString());
|
1743
|
+
this.publicClient = this.getPublicClient();
|
1744
|
+
setTimeout(() => this.events.emit("chainChanged", intToHex2(this.chainId)), 0);
|
1745
|
+
return Promise.resolve(null);
|
1746
|
+
}
|
1747
|
+
throw new SwitchChainError(new Error(`The chain: ${chainId} is not supported`));
|
1748
|
+
} else {
|
1749
|
+
throw new InvalidParamsRpcError(new Error("Invalid Params"));
|
1750
|
+
}
|
1751
|
+
} else {
|
1752
|
+
const result = yield this.publicClient.request(arg);
|
1753
|
+
return result;
|
1754
|
+
}
|
1755
|
+
});
|
1756
|
+
}
|
1757
|
+
removeListener(event, listener) {
|
1758
|
+
this.events.removeListener(event, listener);
|
1759
|
+
return this;
|
1760
|
+
}
|
1761
|
+
on(event, listener) {
|
1762
|
+
this.events.on(event, listener);
|
1763
|
+
return this;
|
1764
|
+
}
|
1765
|
+
once(event, listener) {
|
1766
|
+
this.events.once(event, listener);
|
1767
|
+
return this;
|
1768
|
+
}
|
1769
|
+
off(event, listener) {
|
1770
|
+
this.events.off(event, listener);
|
1771
|
+
return this;
|
1772
|
+
}
|
1773
|
+
emit(event, ...args) {
|
1774
|
+
this.events.emit(event, args);
|
1775
|
+
}
|
1776
|
+
};
|
1777
|
+
|
1778
|
+
// src/hooks/useModalStateValue.ts
|
1779
|
+
import { useCallback as useCallback6, useState as useState6 } from "react";
|
1780
|
+
var useModalStateValue = () => {
|
1781
|
+
const [isModalOpen, setModalOpen] = useState6(false);
|
1782
|
+
return {
|
1783
|
+
closeModal: useCallback6(() => setModalOpen(false), []),
|
1784
|
+
isModalOpen,
|
1785
|
+
openModal: useCallback6(() => setModalOpen(true), [])
|
1786
|
+
};
|
1787
|
+
};
|
1788
|
+
var useModalStateValue_default = useModalStateValue;
|
1789
|
+
|
1790
|
+
// src/context/index.tsx
|
1791
|
+
import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
1792
|
+
var ConnectContext = createContext({});
|
1793
|
+
var SAContractKey = "particle-sa-config";
|
1794
|
+
var ConnectProvider = ({
|
1795
|
+
children,
|
1796
|
+
options,
|
1797
|
+
connectors,
|
1798
|
+
autoConnect = true
|
1799
|
+
}) => {
|
1800
|
+
var _a, _b, _c;
|
1801
|
+
const {
|
1802
|
+
closeModal: closeConnectModal,
|
1803
|
+
isModalOpen: connectModalOpen,
|
1804
|
+
openModal: openConnectModal
|
1805
|
+
} = useModalStateValue_default();
|
1806
|
+
const { closeModal: closeSignModal, isModalOpen: signModalOpen, openModal: openSignModal } = useModalStateValue_default();
|
1807
|
+
const [connectorId, setConnectorId] = useState7();
|
1808
|
+
const [accounts, setAccounts] = useState7([]);
|
1809
|
+
const [evmAccount, setEVMAccount] = useState7();
|
1810
|
+
const [accountContract, _setAccountContract] = useState7({
|
1811
|
+
name: ((_a = Object.keys(options.aaOptions.accountContracts)) == null ? void 0 : _a[0]) || "BTC",
|
1812
|
+
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"
|
1813
|
+
});
|
1814
|
+
const setAccountContract = useCallback7(
|
1815
|
+
(config) => {
|
1816
|
+
if (!checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
|
1817
|
+
throw new Error("Invalid Account Contract");
|
1818
|
+
}
|
1819
|
+
localStorage.setItem(SAContractKey, JSON.stringify(config));
|
1820
|
+
_setAccountContract(config);
|
1821
|
+
},
|
1822
|
+
[options.aaOptions.accountContracts, _setAccountContract]
|
1823
|
+
);
|
1824
|
+
useEffect5(() => {
|
1825
|
+
const id = localStorage.getItem("current-connector-id");
|
1826
|
+
if (autoConnect && id) {
|
1827
|
+
setConnectorId(id);
|
1828
|
+
}
|
1829
|
+
}, [autoConnect]);
|
1830
|
+
const evmSupportChainIds = useMemo5(() => {
|
1831
|
+
var _a2;
|
1832
|
+
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) => {
|
1833
|
+
a.push(...b);
|
1834
|
+
return a;
|
1835
|
+
}, []);
|
1836
|
+
chainIds = Array.from(new Set(chainIds || []));
|
1837
|
+
return chainIds;
|
1838
|
+
}, [options.aaOptions.accountContracts, accountContract]);
|
1839
|
+
const connector = useMemo5(() => {
|
1840
|
+
return connectors.find((item) => item.metadata.id === connectorId);
|
1841
|
+
}, [connectorId, connectors]);
|
1842
|
+
const getPublicKey = useCallback7(() => __async(void 0, null, function* () {
|
1843
|
+
if (!connector) {
|
1844
|
+
throw new Error("Wallet not connected!");
|
1845
|
+
}
|
1846
|
+
const pubKey = yield connector.getPublicKey();
|
1847
|
+
return pubKey;
|
1848
|
+
}), [connector]);
|
1849
|
+
const signMessage = useCallback7(
|
1850
|
+
(message) => __async(void 0, null, function* () {
|
1851
|
+
if (!connector) {
|
1852
|
+
throw new Error("Wallet not connected!");
|
1853
|
+
}
|
1854
|
+
const signature = yield connector.signMessage(message);
|
1855
|
+
return signature;
|
1856
|
+
}),
|
1857
|
+
[connector]
|
1858
|
+
);
|
1859
|
+
const sendBitcoin = useCallback7(
|
1860
|
+
(toAddress, satoshis, options2) => __async(void 0, null, function* () {
|
1861
|
+
if (!connector) {
|
1862
|
+
throw new Error("Wallet not connected!");
|
1863
|
+
}
|
1864
|
+
const signature = yield connector.sendBitcoin(toAddress, satoshis, options2);
|
1865
|
+
return signature;
|
1866
|
+
}),
|
1867
|
+
[connector]
|
1868
|
+
);
|
1869
|
+
const getNetwork = useCallback7(() => __async(void 0, null, function* () {
|
1870
|
+
if (!connector) {
|
1871
|
+
throw new Error("Wallet not connected!");
|
1872
|
+
}
|
1873
|
+
const network = yield connector.getNetwork();
|
1874
|
+
return network;
|
1875
|
+
}), [connector]);
|
1876
|
+
const switchNetwork = useCallback7(
|
1877
|
+
(network) => __async(void 0, null, function* () {
|
1878
|
+
if (!connector) {
|
1879
|
+
throw new Error("Wallet not connected!");
|
1880
|
+
}
|
1881
|
+
yield connector.switchNetwork(network);
|
1882
|
+
}),
|
1883
|
+
[connector]
|
1884
|
+
);
|
1885
|
+
const smartAccount = useMemo5(() => {
|
1886
|
+
if (typeof window === "undefined") {
|
1887
|
+
return void 0;
|
1888
|
+
}
|
1889
|
+
if (!window.__bitcoinSmartAccount || (window == null ? void 0 : window.__bitcoinSmartAccount) && ((window == null ? void 0 : window.__bitcoinSmartAccount.smartAccountContract.version) !== accountContract.version || (window == null ? void 0 : window.__bitcoinSmartAccount.smartAccountContract.name) !== accountContract.name)) {
|
1890
|
+
const smartAccount2 = new SmartAccount(
|
1891
|
+
new AASignerProvider(evmSupportChainIds, options.projectId, options.clientKey, options.rpcUrls),
|
1892
|
+
options
|
1893
|
+
);
|
1894
|
+
smartAccount2.setSmartAccountContract(accountContract);
|
1895
|
+
window.__bitcoinSmartAccount = smartAccount2;
|
1896
|
+
}
|
1897
|
+
window.__bitcoinSmartAccount.provider.getPublicKey = getPublicKey;
|
1898
|
+
window.__bitcoinSmartAccount.provider.personalSign = signMessage;
|
1899
|
+
return window.__bitcoinSmartAccount;
|
1900
|
+
}, [options, evmSupportChainIds, getPublicKey, signMessage, accountContract]);
|
1901
|
+
useEffect5(() => {
|
1902
|
+
if (accounts.length > 0 && smartAccount) {
|
1903
|
+
getBTCAAAddress(smartAccount, accounts[0], accountContract.name, accountContract.version).then((res) => {
|
1904
|
+
setEVMAccount(res);
|
1905
|
+
}).catch((e) => {
|
1906
|
+
setEVMAccount(void 0);
|
1907
|
+
});
|
1908
|
+
} else {
|
1909
|
+
setEVMAccount(void 0);
|
1910
|
+
}
|
1911
|
+
}, [accountContract, accounts, smartAccount]);
|
1912
|
+
const getSmartAccountInfo = useCallback7(() => __async(void 0, null, function* () {
|
1913
|
+
if (accounts.length > 0 && smartAccount) {
|
1914
|
+
const accountInfo = yield getBTCAccountInfo(
|
1915
|
+
smartAccount,
|
1916
|
+
accounts[0],
|
1917
|
+
accountContract.name,
|
1918
|
+
accountContract.version
|
1919
|
+
);
|
1920
|
+
setEVMAccount(accountInfo.smartAccountAddress);
|
1921
|
+
return accountInfo;
|
1922
|
+
}
|
1923
|
+
return void 0;
|
1924
|
+
}), [accounts, smartAccount, accountContract, setEVMAccount]);
|
1925
|
+
const requestAccount = useCallback7(
|
1926
|
+
(connector2) => __async(void 0, null, function* () {
|
1927
|
+
let accounts2 = yield connector2.getAccounts();
|
1928
|
+
if (accounts2.length === 0 && autoConnect) {
|
1929
|
+
accounts2 = yield connector2.requestAccounts();
|
1930
|
+
}
|
1931
|
+
setAccounts(accounts2);
|
1932
|
+
}),
|
1933
|
+
[autoConnect]
|
1934
|
+
);
|
1935
|
+
useEffect5(() => {
|
1936
|
+
if (connector) {
|
1937
|
+
requestAccount(connector).catch((e) => {
|
1938
|
+
setAccounts([]);
|
1939
|
+
});
|
1940
|
+
} else {
|
1941
|
+
setAccounts([]);
|
1942
|
+
}
|
1943
|
+
}, [connector, requestAccount]);
|
1944
|
+
useEffect5(() => {
|
1945
|
+
const onAccountChange = (accounts2) => {
|
1946
|
+
setAccounts(accounts2);
|
1947
|
+
};
|
1948
|
+
connector == null ? void 0 : connector.on("accountsChanged", onAccountChange);
|
1949
|
+
return () => {
|
1950
|
+
connector == null ? void 0 : connector.removeListener("accountsChanged", onAccountChange);
|
1951
|
+
};
|
1952
|
+
}, [connector]);
|
1953
|
+
const provider = useMemo5(() => {
|
1954
|
+
var _a2;
|
1955
|
+
if (connectorId) {
|
1956
|
+
return (_a2 = connectors.find((item) => item.metadata.id === connectorId)) == null ? void 0 : _a2.getProvider();
|
1957
|
+
}
|
1958
|
+
}, [connectorId, connectors]);
|
1959
|
+
const disconnect = useCallback7(() => {
|
1960
|
+
localStorage.removeItem("current-connector-id");
|
1961
|
+
txConfirmUtils_default.reset();
|
1962
|
+
if (connector) {
|
1963
|
+
connector.disconnect();
|
1964
|
+
}
|
1965
|
+
setConnectorId(void 0);
|
1966
|
+
}, [connector]);
|
1967
|
+
useEffect5(() => {
|
1968
|
+
const config = JSON.parse(localStorage.getItem(SAContractKey) || "{}");
|
1969
|
+
if (config.name && config.version && checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
|
1970
|
+
_setAccountContract(config);
|
1971
|
+
}
|
1972
|
+
}, [options.aaOptions.accountContracts, _setAccountContract]);
|
1973
|
+
useEffect5(() => {
|
1974
|
+
var _a2, _b2;
|
1975
|
+
if (((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
|
1976
|
+
const supportChains = evmSupportChainIds.map((id) => chains4.getEVMChainInfoById(id));
|
1977
|
+
if (supportChains.some((chain) => !chain)) {
|
1978
|
+
throw new Error(`Please config valid chain ids, ${JSON.stringify(evmSupportChainIds)}`);
|
1979
|
+
}
|
1980
|
+
walletEntryPlugin.init(
|
1981
|
+
{
|
1982
|
+
projectId: options.projectId,
|
1983
|
+
clientKey: options.clientKey,
|
1984
|
+
appId: options.appId
|
1985
|
+
},
|
1986
|
+
__spreadProps(__spreadValues({}, options.walletOptions), {
|
1987
|
+
erc4337: accountContract,
|
1988
|
+
customStyle: __spreadProps(__spreadValues({}, (_b2 = options.walletOptions) == null ? void 0 : _b2.customStyle), {
|
1989
|
+
supportChains
|
1990
|
+
})
|
1991
|
+
})
|
1992
|
+
);
|
1993
|
+
}
|
1994
|
+
}, [options, evmSupportChainIds, accountContract]);
|
1995
|
+
useEffect5(() => {
|
1996
|
+
var _a2;
|
1997
|
+
if (smartAccount && ((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
|
1998
|
+
walletEntryPlugin.setWalletCore({
|
1999
|
+
ethereum: smartAccount.provider
|
2000
|
+
});
|
2001
|
+
}
|
2002
|
+
}, [smartAccount, options]);
|
2003
|
+
useEffect5(() => {
|
2004
|
+
var _a2;
|
2005
|
+
if (((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
|
2006
|
+
if (evmAccount) {
|
2007
|
+
walletEntryPlugin.walletEntryCreate();
|
2008
|
+
} else {
|
2009
|
+
walletEntryPlugin.walletEntryDestroy();
|
2010
|
+
}
|
2011
|
+
}
|
2012
|
+
}, [evmAccount, smartAccount, options]);
|
2013
|
+
useEffect5(() => {
|
2014
|
+
if (accounts.length === 0) {
|
2015
|
+
closeConnectModal();
|
2016
|
+
closeSignModal();
|
2017
|
+
if (eventUtils_default.listenerCount("sendUserOpResult" /* sendUserOpResult */) > 0) {
|
2018
|
+
eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
|
2019
|
+
error: {
|
2020
|
+
code: -32600,
|
2021
|
+
message: "Wallet disconnected"
|
2022
|
+
}
|
2023
|
+
});
|
2024
|
+
} else if (eventUtils_default.listenerCount("personalSignResult" /* personalSignResult */) > 0) {
|
2025
|
+
eventUtils_default.emit("personalSignResult" /* personalSignResult */, {
|
2026
|
+
error: {
|
2027
|
+
code: -32600,
|
2028
|
+
message: "Wallet disconnected"
|
2029
|
+
}
|
2030
|
+
});
|
2031
|
+
} else if (eventUtils_default.listenerCount("signTypedDataResult" /* signTypedDataResult */) > 0) {
|
2032
|
+
eventUtils_default.emit("signTypedDataResult" /* signTypedDataResult */, {
|
2033
|
+
error: {
|
2034
|
+
code: -32600,
|
2035
|
+
message: "Wallet disconnected"
|
2036
|
+
}
|
2037
|
+
});
|
2038
|
+
}
|
2039
|
+
}
|
2040
|
+
}, [accounts, closeConnectModal, closeSignModal]);
|
2041
|
+
return /* @__PURE__ */ jsxs6(
|
2042
|
+
ConnectContext.Provider,
|
2043
|
+
{
|
2044
|
+
value: {
|
2045
|
+
connectorId,
|
2046
|
+
setConnectorId,
|
2047
|
+
connector,
|
2048
|
+
connectors,
|
2049
|
+
openConnectModal,
|
2050
|
+
closeConnectModal,
|
2051
|
+
accounts,
|
2052
|
+
provider,
|
2053
|
+
disconnect,
|
2054
|
+
getPublicKey,
|
2055
|
+
signMessage,
|
2056
|
+
evmAccount,
|
2057
|
+
smartAccount,
|
2058
|
+
getNetwork,
|
2059
|
+
switchNetwork,
|
2060
|
+
sendBitcoin,
|
2061
|
+
accountContract,
|
2062
|
+
setAccountContract,
|
2063
|
+
getSmartAccountInfo
|
2064
|
+
},
|
2065
|
+
children: [
|
2066
|
+
children,
|
2067
|
+
/* @__PURE__ */ jsx9(connectModal_default, { open: connectModalOpen, onClose: closeConnectModal }),
|
2068
|
+
/* @__PURE__ */ jsx9(signModal_default, { open: signModalOpen, onClose: closeSignModal, onOpen: openSignModal })
|
2069
|
+
]
|
2070
|
+
}
|
2071
|
+
);
|
2072
|
+
};
|
2073
|
+
var useConnectProvider = () => {
|
2074
|
+
const context = useContext(ConnectContext);
|
2075
|
+
return context;
|
2076
|
+
};
|
2077
|
+
|
2078
|
+
// src/components/btcWalletSelectorContext.tsx
|
2079
|
+
import React, { useContext as useContext2, useEffect as useEffect6, useMemo as useMemo6, useRef, useState as useState8 } from "react";
|
2080
|
+
|
2081
|
+
// src/components/confirmBox/Modal.tsx
|
2082
|
+
import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
2083
|
+
function Modal2({ children, onClose, style = {} }) {
|
2084
|
+
return /* @__PURE__ */ jsxs7("div", { children: [
|
2085
|
+
/* @__PURE__ */ jsx10("div", { className: "layer" }),
|
2086
|
+
/* @__PURE__ */ jsxs7("div", { className: "modal", style, children: [
|
2087
|
+
/* @__PURE__ */ jsx10("div", { className: "close", onClick: () => {
|
2088
|
+
onClose && onClose();
|
2089
|
+
}, children: /* @__PURE__ */ jsx10("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx10("path", { d: "M7.73284 5.99997L11.7359 1.99698C12.0368 1.69598 12.0882 1.25928 11.8507 1.02188L10.9779 0.149088C10.7404 -0.0884114 10.3043 -0.0363117 10.0028 0.264487L6.00013 4.26737L1.99719 0.264587C1.69619 -0.0367116 1.25948 -0.0884115 1.02198 0.149388L0.149174 1.02228C-0.0882276 1.25938 -0.0368271 1.69608 0.264576 1.99708L4.26761 5.99997L0.264576 10.0032C-0.0363271 10.304 -0.0884276 10.7404 0.149174 10.9779L1.02198 11.8507C1.25948 12.0882 1.69619 12.0367 1.99719 11.7358L6.00033 7.73266L10.0029 11.7352C10.3044 12.0368 10.7405 12.0882 10.978 11.8507L11.8508 10.9779C12.0882 10.7404 12.0368 10.304 11.736 10.0028L7.73284 5.99997Z", fill: "#808095" }) }) }),
|
2090
|
+
children
|
2091
|
+
] })
|
2092
|
+
] });
|
2093
|
+
}
|
2094
|
+
|
2095
|
+
// src/components/confirmBox/index.tsx
|
2096
|
+
import { Fragment as Fragment4, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
2097
|
+
function ComfirmBox({ onClose, status = 1, fromChain = {
|
2098
|
+
name: "NEAR"
|
2099
|
+
}, toChain = {
|
2100
|
+
name: "BTC"
|
2101
|
+
}, hash }) {
|
2102
|
+
return /* @__PURE__ */ jsxs8(Modal2, { onClose, children: [
|
2103
|
+
/* @__PURE__ */ jsx11("div", { className: "title", children: "Transaction Detail" }),
|
2104
|
+
/* @__PURE__ */ jsx11("div", { className: "chians", children: status === 0 ? /* @__PURE__ */ jsx11("svg", { className: "loading", width: "54", height: "54", viewBox: "0 0 54 54", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx11("path", { d: "M52.0766 10.7867C53.0482 11.0471 53.6273 12.0399 53.3741 13.0134C53.1219 13.977 52.1361 14.5546 51.1725 14.3024L47.6172 13.3498L46.3268 18.1657C44.8261 23.7665 40.0219 27.6146 34.2721 28.6546C38.7381 32.4056 40.9681 38.1648 39.4673 43.7656L38.1769 48.5815L41.6972 49.5248C42.6655 49.7843 43.2401 50.7794 42.9806 51.7477C42.7212 52.7159 41.726 53.2905 40.7578 53.031L2.02593 42.6529L1.71657 42.5396C0.800668 42.1375 0.383843 41.0689 0.785965 40.153C1.15472 39.3126 2.09436 38.8809 2.97262 39.1481L6.52126 40.0989L7.81144 35.2839C9.31216 29.6832 14.1131 25.8341 19.8661 24.795C15.3968 21.0432 13.1702 15.2848 14.6709 9.68407L15.9615 4.86764L12.4128 3.91679C11.4445 3.65734 10.87 2.66223 11.1295 1.69395C11.3889 0.725662 12.384 0.151138 13.3523 0.410589L52.0766 10.7867ZM44.0959 12.4063L19.471 5.80801L18.1871 10.5994C17.0693 14.7711 18.671 19.3131 22.2022 22.3268C23.2549 23.2994 23.6544 24.61 23.3544 25.7297C23.0485 27.0126 21.9665 27.9627 20.6551 28.1007C16.1146 28.9516 12.432 32.0776 11.3175 36.2502L10.0214 41.0874L11.982 41.6127L12.5291 39.571C13.5385 35.8039 16.032 32.0464 21.0065 30.689L21.8135 30.4937C23.6047 30.2306 25.3145 29.1151 26.9388 27.1507C27.1931 29.441 28.1726 31.2771 29.8857 32.6567C34.4351 36.8 34.1706 41.1245 33.1094 45.0849L32.5623 47.1267L34.6428 47.6841L35.9323 42.8715C37.0501 38.6998 35.4522 34.1588 31.9215 31.1412C30.8693 30.1687 30.4684 28.8613 30.7693 27.7383C31.1136 26.4535 32.114 25.5215 33.4676 25.3711C38.0072 24.5235 41.6865 21.3966 42.8052 17.2216L44.0959 12.4063ZM40.7578 15.6185C40.1797 19.9295 35.6431 22.9023 32.7256 23.2863C30.9809 23.5169 29.1741 24.3456 27.3087 25.7742C26.4809 23.6244 25.3731 22.0143 23.9948 20.9474C21.5041 19.0198 20.6551 17.2216 20.3797 15.1185L40.7578 15.6185Z", fill: "white", "fill-opacity": "0.21" }) }) : /* @__PURE__ */ jsxs8("svg", { width: "54", height: "54", viewBox: "0 0 54 54", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
2105
|
+
/* @__PURE__ */ jsx11("circle", { cx: "27", cy: "27", r: "21", fill: "#33FFDA" }),
|
2106
|
+
/* @__PURE__ */ jsx11("circle", { cx: "27", cy: "27", r: "24", stroke: "#33FFDA", "stroke-opacity": "0.3", "stroke-width": "6" }),
|
2107
|
+
/* @__PURE__ */ jsx11("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M37.342 19.6604C38.2111 20.5494 38.2205 22.0006 37.363 22.9016L24.8987 36L17.651 28.5196C16.7858 27.6266 16.7826 26.1754 17.6439 25.2783C18.5052 24.3813 19.9048 24.378 20.77 25.271L24.8705 29.5031L34.2159 19.6822C35.0733 18.7812 36.4729 18.7714 37.342 19.6604Z", fill: "black" })
|
2108
|
+
] }) }),
|
2109
|
+
status === 0 && /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
2110
|
+
/* @__PURE__ */ jsx11("div", { className: "time", children: "Est Time: 5 mins" }),
|
2111
|
+
/* @__PURE__ */ jsx11("div", { className: "processing", children: "Transaction is processing." })
|
2112
|
+
] }),
|
2113
|
+
status === 1 && /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
2114
|
+
/* @__PURE__ */ jsx11("div", { className: "time", children: "Bridge Completed" }),
|
2115
|
+
/* @__PURE__ */ jsxs8("div", { className: "processing", children: [
|
2116
|
+
"You can view your transaction on the ",
|
2117
|
+
/* @__PURE__ */ jsx11("a", { href: "/history", children: "bridge transaction history." })
|
2118
|
+
] })
|
2119
|
+
] }),
|
2120
|
+
!!hash && /* @__PURE__ */ jsx11(Fragment4, { children: /* @__PURE__ */ jsxs8("div", { className: "srcBtn", onClick: () => {
|
2121
|
+
if (fromChain.name === "BTC") {
|
2122
|
+
window.open(`https://mempool.space/testnet/tx/${hash}`);
|
2123
|
+
} else if (fromChain.name === "NEAR") {
|
2124
|
+
window.open(`https://testnet.nearblocks.io/txns/${hash}`);
|
2125
|
+
}
|
2126
|
+
}, children: [
|
2127
|
+
"SRC TX ",
|
2128
|
+
/* @__PURE__ */ jsx11("svg", { width: "8", height: "8", viewBox: "0 0 8 8", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx11("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M5.97871 8H2.02129C0.907217 8 0 7.09294 0 5.97905V2.02095C0 0.907063 0.907217 0 2.02129 0H3.73973C3.98175 0 4.17779 0.196012 4.17779 0.437986C4.17779 0.679959 3.98175 0.875972 3.73973 0.875972H2.02129C1.71573 0.875972 1.42775 0.994931 1.21142 1.21122C0.995099 1.42751 0.87612 1.71544 0.87612 2.02095V5.97769C0.87612 6.2832 0.995099 6.57114 1.21142 6.78743C1.42775 7.00372 1.71573 7.12268 2.02129 7.12268H5.97871C6.61011 7.12268 7.12388 6.60899 7.12388 5.97769V4.12977C7.12388 3.97432 7.20771 3.82832 7.34291 3.74992C7.40916 3.71206 7.48487 3.69179 7.56194 3.69179C7.63901 3.69179 7.71472 3.71206 7.78097 3.74992C7.91617 3.82832 8 3.97296 8 4.12977V5.97769C8 7.09294 7.09414 8 5.97871 8ZM7.35223 2.78066C7.41578 2.81715 7.48879 2.83608 7.56179 2.83608C7.6348 2.83608 7.70781 2.8158 7.77271 2.7793C7.90251 2.70496 7.98228 2.56572 7.98228 2.41702V0.438001C7.98228 0.206844 7.79434 0.0189453 7.56315 0.0189453H5.58378C5.35258 0.0189453 5.16465 0.206844 5.16465 0.438001C5.16465 0.669157 5.35258 0.857056 5.58378 0.857056H6.55077L3.70328 3.70405L3.70058 3.70676C3.62658 3.7861 3.58634 3.89111 3.58835 3.99958C3.59037 4.10806 3.6345 4.21149 3.7114 4.28803C3.79117 4.36779 3.89527 4.41105 4.00749 4.41105C4.1143 4.41105 4.2157 4.37049 4.29277 4.29885L4.29412 4.2975L7.14267 1.44944V2.41838C7.14267 2.56707 7.22379 2.70631 7.35223 2.78066Z", fill: "#FF7A00" }) })
|
2129
|
+
] }) })
|
2130
|
+
] });
|
2131
|
+
}
|
2132
|
+
|
2133
|
+
// src/components/btcWalletSelectorContext.tsx
|
2134
|
+
import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
|
2135
|
+
var WalletSelectorContext = React.createContext(null);
|
2136
|
+
function BtcWalletSelectorContextProvider({ children }) {
|
2137
|
+
const [isProcessing, setIsProcessing] = useState8(false);
|
2138
|
+
const walletSelectorContextValue = useMemo6(() => {
|
2139
|
+
return {
|
2140
|
+
setIsProcessing
|
2141
|
+
};
|
2142
|
+
}, []);
|
2143
|
+
return /* @__PURE__ */ jsx12(WalletSelectorContext.Provider, { value: walletSelectorContextValue, children: /* @__PURE__ */ jsxs9(
|
2144
|
+
ConnectProvider,
|
2145
|
+
{
|
2146
|
+
options: {
|
2147
|
+
projectId: "btc",
|
2148
|
+
clientKey: "btc",
|
2149
|
+
appId: "btc",
|
2150
|
+
aaOptions: {
|
2151
|
+
accountContracts: {
|
2152
|
+
BTC: [
|
2153
|
+
{
|
2154
|
+
chainIds: [686868],
|
2155
|
+
version: "1.0.0"
|
2156
|
+
}
|
2157
|
+
]
|
2158
|
+
}
|
2159
|
+
},
|
2160
|
+
walletOptions: {
|
2161
|
+
visible: true
|
2162
|
+
}
|
2163
|
+
},
|
2164
|
+
autoConnect: true,
|
2165
|
+
connectors: [new UnisatConnector()],
|
2166
|
+
children: [
|
2167
|
+
children,
|
2168
|
+
isProcessing && /* @__PURE__ */ jsx12(ComfirmBox, { hash: "", status: 0, onClose: () => {
|
2169
|
+
setIsProcessing(false);
|
2170
|
+
} })
|
2171
|
+
]
|
2172
|
+
}
|
2173
|
+
) });
|
2174
|
+
}
|
2175
|
+
function useBtcWalletSelector() {
|
2176
|
+
const { openConnectModal, openConnectModalAsync, disconnect } = useConnectModal();
|
2177
|
+
const { accounts, sendBitcoin, getPublicKey, provider, signMessage } = useBTCProvider();
|
2178
|
+
const publicKey = useRef(null);
|
2179
|
+
const signMessageFn = useRef(null);
|
2180
|
+
const [updater, setUpdater] = useState8(1);
|
2181
|
+
const context = useContext2(WalletSelectorContext);
|
2182
|
+
useEffect6(() => {
|
2183
|
+
if (provider) {
|
2184
|
+
getPublicKey().then((res) => {
|
2185
|
+
publicKey.current = res;
|
2186
|
+
});
|
2187
|
+
}
|
2188
|
+
}, [provider, updater]);
|
2189
|
+
useEffect6(() => {
|
2190
|
+
signMessageFn.current = signMessage;
|
2191
|
+
}, [signMessage]);
|
2192
|
+
return {
|
2193
|
+
login: () => __async(this, null, function* () {
|
2194
|
+
setUpdater(updater + 1);
|
2195
|
+
if (openConnectModal) {
|
2196
|
+
yield openConnectModal();
|
2197
|
+
}
|
2198
|
+
return null;
|
2199
|
+
}),
|
2200
|
+
logout: () => {
|
2201
|
+
disconnect && disconnect();
|
2202
|
+
},
|
2203
|
+
account: accounts && accounts.length ? accounts[0] : null,
|
2204
|
+
getPublicKey: () => __async(this, null, function* () {
|
2205
|
+
let times = 0;
|
2206
|
+
while (!publicKey.current) {
|
2207
|
+
yield sleep(1e3);
|
2208
|
+
if (times++ > 10) {
|
2209
|
+
return null;
|
2210
|
+
}
|
2211
|
+
}
|
2212
|
+
return publicKey.current;
|
2213
|
+
}),
|
2214
|
+
signMessage: (msg) => {
|
2215
|
+
return signMessageFn.current(msg);
|
2216
|
+
},
|
2217
|
+
getContext: () => {
|
2218
|
+
return context;
|
2219
|
+
}
|
2220
|
+
};
|
2221
|
+
}
|
2222
|
+
function sleep(time) {
|
2223
|
+
return new Promise(function(resolve) {
|
2224
|
+
setTimeout(resolve, time);
|
2225
|
+
});
|
2226
|
+
}
|
2227
|
+
|
2228
|
+
// src/utils/setupBTCWallet.ts
|
2229
|
+
import { providers, transactions } from "near-api-js";
|
2230
|
+
import { actionCreators } from "@near-js/transactions";
|
2231
|
+
import { PublicKey } from "near-api-js/lib/utils/key_pair";
|
2232
|
+
import { encodeTransaction } from "near-api-js/lib/transaction";
|
2233
|
+
import { baseDecode } from "@near-js/utils";
|
2234
|
+
import bs58 from "bs58";
|
2235
|
+
import { sha256 } from "js-sha256";
|
2236
|
+
|
2237
|
+
// src/utils/initWalletButton.ts
|
2238
|
+
function setupWalletButton(network, wallet, originalWallet) {
|
2239
|
+
if (document.getElementById("satoshi-wallet-button"))
|
2240
|
+
return;
|
2241
|
+
const iframe = createIframe({
|
2242
|
+
iframeUrl: network === "testnet" ? "https://wallet-dev.satoshibridge.top" : "https://wallet.satoshibridge.top",
|
2243
|
+
iframeStyle: { width: "400px", height: "650px" }
|
2244
|
+
});
|
2245
|
+
const button = createFloatingButtonWithIframe({
|
2246
|
+
openImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn.png",
|
2247
|
+
closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
|
2248
|
+
iframe
|
2249
|
+
});
|
2250
|
+
setupButtonClickHandler(button, iframe, wallet, originalWallet);
|
2251
|
+
}
|
2252
|
+
function createFloatingButtonWithIframe({
|
2253
|
+
openImageUrl,
|
2254
|
+
closeImageUrl,
|
2255
|
+
iframe
|
2256
|
+
}) {
|
2257
|
+
const button = document.createElement("img");
|
2258
|
+
button.id = "satoshi-wallet-button";
|
2259
|
+
button.src = openImageUrl;
|
2260
|
+
Object.assign(button.style, {
|
2261
|
+
position: "fixed",
|
2262
|
+
bottom: "20px",
|
2263
|
+
right: "20px",
|
2264
|
+
zIndex: "100000",
|
2265
|
+
width: "60px",
|
2266
|
+
height: "60px",
|
2267
|
+
borderRadius: "50%",
|
2268
|
+
cursor: "pointer",
|
2269
|
+
transition: "transform 0.15s ease"
|
2270
|
+
});
|
2271
|
+
document.body.appendChild(button);
|
2272
|
+
const iframeVisible = localStorage.getItem("iframeVisible") === "true" || localStorage.getItem("iframeVisible") === null;
|
2273
|
+
button.src = iframeVisible ? closeImageUrl : openImageUrl;
|
2274
|
+
iframe.style.display = iframeVisible ? "block" : "none";
|
2275
|
+
button.onclick = function() {
|
2276
|
+
const isCurrentlyVisible = iframe.style.display === "block";
|
2277
|
+
button.style.transform = "scale(0.8)";
|
2278
|
+
setTimeout(() => {
|
2279
|
+
button.style.transform = "scale(1)";
|
2280
|
+
}, 150);
|
2281
|
+
iframe.style.display = isCurrentlyVisible ? "none" : "block";
|
2282
|
+
button.src = isCurrentlyVisible ? openImageUrl : closeImageUrl;
|
2283
|
+
localStorage.setItem("iframeVisible", String(!isCurrentlyVisible));
|
2284
|
+
};
|
2285
|
+
return button;
|
2286
|
+
}
|
2287
|
+
function createIframe({
|
2288
|
+
iframeUrl,
|
2289
|
+
iframeStyle = {}
|
2290
|
+
}) {
|
2291
|
+
const iframe = document.createElement("iframe");
|
2292
|
+
iframe.id = "satoshi-wallet-iframe";
|
2293
|
+
iframe.src = iframeUrl;
|
2294
|
+
Object.assign(iframe.style, __spreadValues({
|
2295
|
+
position: "fixed",
|
2296
|
+
bottom: "90px",
|
2297
|
+
right: "20px",
|
2298
|
+
zIndex: "100000",
|
2299
|
+
boxShadow: "0 0 10px rgba(0, 0, 0, 0.1)",
|
2300
|
+
borderRadius: "10px",
|
2301
|
+
display: "block"
|
2302
|
+
}, iframeStyle));
|
2303
|
+
document.body.appendChild(iframe);
|
2304
|
+
return iframe;
|
2305
|
+
}
|
2306
|
+
function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
|
2307
|
+
return __async(this, null, function* () {
|
2308
|
+
var _a;
|
2309
|
+
const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
|
2310
|
+
const originalAccountId = originalWallet.account;
|
2311
|
+
const originalPublicKey = yield originalWallet.getPublicKey();
|
2312
|
+
const iframeSrc = new URL(iframe.src);
|
2313
|
+
iframeSrc.searchParams.set("origin", window.location.origin);
|
2314
|
+
if (accountId)
|
2315
|
+
iframeSrc.searchParams.set("accountId", accountId);
|
2316
|
+
if (originalAccountId)
|
2317
|
+
iframeSrc.searchParams.set("originalAccountId", originalAccountId);
|
2318
|
+
if (originalPublicKey)
|
2319
|
+
iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
|
2320
|
+
iframe.src = iframeSrc.toString();
|
2321
|
+
window.addEventListener("message", (event) => __async(this, null, function* () {
|
2322
|
+
var _a2, _b;
|
2323
|
+
if (event.origin !== iframeSrc.origin)
|
2324
|
+
return;
|
2325
|
+
const { action, requestId, params } = event.data;
|
2326
|
+
if (action === "signAndSendTransaction") {
|
2327
|
+
try {
|
2328
|
+
const result = yield wallet.signAndSendTransaction(params);
|
2329
|
+
(_a2 = event.source) == null ? void 0 : _a2.postMessage(
|
2330
|
+
{
|
2331
|
+
requestId,
|
2332
|
+
result,
|
2333
|
+
success: true
|
2334
|
+
},
|
2335
|
+
{ targetOrigin: event.origin }
|
2336
|
+
);
|
2337
|
+
} catch (error) {
|
2338
|
+
(_b = event.source) == null ? void 0 : _b.postMessage(
|
2339
|
+
{
|
2340
|
+
requestId,
|
2341
|
+
error: error.message,
|
2342
|
+
success: false
|
2343
|
+
},
|
2344
|
+
{ targetOrigin: event.origin }
|
2345
|
+
);
|
2346
|
+
}
|
2347
|
+
}
|
2348
|
+
}));
|
2349
|
+
});
|
2350
|
+
}
|
2351
|
+
function removeWalletButton() {
|
2352
|
+
const button = document.getElementById("satoshi-wallet-button");
|
2353
|
+
button == null ? void 0 : button.remove();
|
2354
|
+
const iframe = document.getElementById("satoshi-wallet-iframe");
|
2355
|
+
iframe == null ? void 0 : iframe.remove();
|
2356
|
+
}
|
2357
|
+
|
2358
|
+
// src/utils/setupBTCWallet.ts
|
2359
|
+
var { signedDelegate, transfer, functionCall } = actionCreators;
|
2360
|
+
var base_url = "https://api.dev.satoshibridge.top/v1";
|
2361
|
+
var token = "nbtc1-nsp.testnet";
|
2362
|
+
var contractId = "dev1-nsp.testnet";
|
2363
|
+
var state = {
|
2364
|
+
saveAccount(account) {
|
2365
|
+
window.localStorage.setItem("btc-wallet-account", account);
|
2366
|
+
},
|
2367
|
+
removeAccount() {
|
2368
|
+
window.localStorage.removeItem("btc-wallet-account");
|
2369
|
+
},
|
2370
|
+
savePublicKey(publicKey) {
|
2371
|
+
window.localStorage.setItem("btc-wallet-publickey", publicKey);
|
2372
|
+
},
|
2373
|
+
removePublicKey() {
|
2374
|
+
window.localStorage.removeItem("btc-wallet-publickey");
|
2375
|
+
},
|
2376
|
+
saveBtcPublicKey(publicKey) {
|
2377
|
+
window.localStorage.setItem("btc-wallet-btc-publickey", publicKey);
|
2378
|
+
},
|
2379
|
+
removeBtcPublicKey() {
|
2380
|
+
window.localStorage.removeItem("btc-wallet-btc-publickey");
|
2381
|
+
},
|
2382
|
+
clear() {
|
2383
|
+
this.removeAccount();
|
2384
|
+
this.removePublicKey();
|
2385
|
+
this.removeBtcPublicKey();
|
2386
|
+
},
|
2387
|
+
save(account, publicKey) {
|
2388
|
+
this.saveAccount(account);
|
2389
|
+
this.savePublicKey(publicKey);
|
2390
|
+
},
|
2391
|
+
getAccount() {
|
2392
|
+
return window.localStorage.getItem("btc-wallet-account");
|
2393
|
+
},
|
2394
|
+
getPublicKey() {
|
2395
|
+
return window.localStorage.getItem("btc-wallet-publickey");
|
2396
|
+
},
|
2397
|
+
getBtcPublicKey() {
|
2398
|
+
return window.localStorage.getItem("btc-wallet-btc-publickey");
|
2399
|
+
}
|
2400
|
+
};
|
2401
|
+
var BTCWallet = (_0) => __async(void 0, [_0], function* ({
|
2402
|
+
metadata,
|
2403
|
+
options,
|
2404
|
+
store,
|
2405
|
+
emitter,
|
2406
|
+
logger,
|
2407
|
+
id,
|
2408
|
+
provider
|
2409
|
+
}) {
|
2410
|
+
const wallet = {
|
2411
|
+
signIn,
|
2412
|
+
signOut,
|
2413
|
+
getAccounts,
|
2414
|
+
verifyOwner,
|
2415
|
+
signMessage,
|
2416
|
+
signAndSendTransaction,
|
2417
|
+
signAndSendTransactions
|
2418
|
+
};
|
2419
|
+
function viewMethod(_02) {
|
2420
|
+
return __async(this, arguments, function* ({ method, args = {} }) {
|
2421
|
+
const res = yield provider.query({
|
2422
|
+
request_type: "call_function",
|
2423
|
+
account_id: contractId,
|
2424
|
+
method_name: method,
|
2425
|
+
args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
|
2426
|
+
finality: "optimistic"
|
2427
|
+
});
|
2428
|
+
return JSON.parse(Buffer.from(res.result).toString());
|
2429
|
+
});
|
2430
|
+
}
|
2431
|
+
;
|
2432
|
+
function signIn(_02) {
|
2433
|
+
return __async(this, arguments, function* ({ contractId: contractId2, methodNames }) {
|
2434
|
+
const accountId = state.getAccount();
|
2435
|
+
const publicKey = state.getPublicKey();
|
2436
|
+
const btcContext = window.btcContext;
|
2437
|
+
if (accountId && publicKey) {
|
2438
|
+
return [{
|
2439
|
+
accountId,
|
2440
|
+
publicKey
|
2441
|
+
}];
|
2442
|
+
}
|
2443
|
+
const btcAccount = yield btcContext.login();
|
2444
|
+
const btcPublicKey = yield btcContext.getPublicKey();
|
2445
|
+
const nearTempAddress = yield viewMethod({
|
2446
|
+
method: "get_chain_signature_near_account",
|
2447
|
+
args: { "btc_public_key": btcPublicKey }
|
2448
|
+
});
|
2449
|
+
const nearTempPublicKey = yield viewMethod({
|
2450
|
+
method: "get_chain_signature_near_account_public_key",
|
2451
|
+
args: { "btc_public_key": btcPublicKey }
|
2452
|
+
});
|
2453
|
+
state.saveAccount(nearTempAddress);
|
2454
|
+
state.savePublicKey(nearTempPublicKey);
|
2455
|
+
state.saveBtcPublicKey(btcPublicKey);
|
2456
|
+
return [
|
2457
|
+
{
|
2458
|
+
accountId: nearTempAddress,
|
2459
|
+
publicKey: nearTempPublicKey
|
2460
|
+
}
|
2461
|
+
];
|
2462
|
+
});
|
2463
|
+
}
|
2464
|
+
function signOut() {
|
2465
|
+
return __async(this, null, function* () {
|
2466
|
+
const btcContext = window.btcContext;
|
2467
|
+
btcContext.logout();
|
2468
|
+
state.clear();
|
2469
|
+
window.localStorage.removeItem("near-wallet-selector:selectedWalletId");
|
2470
|
+
removeWalletButton();
|
2471
|
+
});
|
2472
|
+
}
|
2473
|
+
function getAccounts() {
|
2474
|
+
return __async(this, null, function* () {
|
2475
|
+
const accountId = state.getAccount();
|
2476
|
+
initWalletButton(options.network.networkId, accountId, wallet);
|
2477
|
+
return [{ accountId: state.getAccount() }];
|
2478
|
+
});
|
2479
|
+
}
|
2480
|
+
function verifyOwner() {
|
2481
|
+
return __async(this, null, function* () {
|
2482
|
+
throw new Error(`Method not supported by ${metadata.name}`);
|
2483
|
+
});
|
2484
|
+
}
|
2485
|
+
function signMessage() {
|
2486
|
+
return __async(this, null, function* () {
|
2487
|
+
throw new Error(`Method not supported by ${metadata.name}`);
|
2488
|
+
});
|
2489
|
+
}
|
2490
|
+
function signAndSendTransaction(_02) {
|
2491
|
+
return __async(this, arguments, function* ({ signerId, receiverId, actions }) {
|
2492
|
+
const btcContext = window.btcContext;
|
2493
|
+
const accountId = state.getAccount();
|
2494
|
+
const publicKey = state.getPublicKey();
|
2495
|
+
const newActions = actions.map((action) => {
|
2496
|
+
switch (action.type) {
|
2497
|
+
case "FunctionCall":
|
2498
|
+
return functionCall(action.params.methodName, action.params.args, action.params.gas, action.params.deposit);
|
2499
|
+
case "Transfer":
|
2500
|
+
return transfer(action.params.deposit);
|
2501
|
+
}
|
2502
|
+
});
|
2503
|
+
const { header } = yield provider.block({ finality: "final" });
|
2504
|
+
const rawAccessKey = yield provider.query({
|
2505
|
+
request_type: "view_access_key",
|
2506
|
+
account_id: accountId,
|
2507
|
+
public_key: publicKey,
|
2508
|
+
finality: "final"
|
2509
|
+
});
|
2510
|
+
const accessKey = __spreadProps(__spreadValues({}, rawAccessKey), {
|
2511
|
+
nonce: BigInt(rawAccessKey.nonce || 0)
|
2512
|
+
});
|
2513
|
+
const publicKeyFromat = PublicKey.from(publicKey);
|
2514
|
+
let nearNonceNumber = accessKey.nonce + BigInt(1);
|
2515
|
+
const nearNonceApi = yield getNearNonceFromApi(accountId);
|
2516
|
+
if (nearNonceApi) {
|
2517
|
+
nearNonceNumber = nearNonceApi.result_data && Number(nearNonceApi.result_data) > 0 ? BigInt(Number(nearNonceApi.result_data)) : accessKey.nonce + BigInt(1);
|
2518
|
+
}
|
2519
|
+
const _transiton = yield transactions.createTransaction(
|
2520
|
+
accountId,
|
2521
|
+
publicKeyFromat,
|
2522
|
+
receiverId,
|
2523
|
+
nearNonceNumber,
|
2524
|
+
newActions,
|
2525
|
+
baseDecode(header.hash)
|
2526
|
+
);
|
2527
|
+
const tx_bytes = encodeTransaction(_transiton);
|
2528
|
+
const hash = bs58.encode(new Uint8Array(sha256.array(tx_bytes)));
|
2529
|
+
const accountInfo = yield viewMethod({
|
2530
|
+
method: "get_account",
|
2531
|
+
args: { "account_id": accountId }
|
2532
|
+
});
|
2533
|
+
const nonceApi = yield getNonceFromApi(accountId);
|
2534
|
+
const nonce = (nonceApi == null ? void 0 : nonceApi.result_data) ? Number(nonceApi == null ? void 0 : nonceApi.result_data) : accountInfo.nonce;
|
2535
|
+
const outcome = {
|
2536
|
+
near_transactions: Array.from(tx_bytes),
|
2537
|
+
nonce: Number(nonce),
|
2538
|
+
chain_id: 397,
|
2539
|
+
csna: accountId,
|
2540
|
+
btcPublicKey: state.getBtcPublicKey(),
|
2541
|
+
nearPublicKey: publicKey
|
2542
|
+
};
|
2543
|
+
const intention = {
|
2544
|
+
chain_id: outcome.chain_id.toString(),
|
2545
|
+
csna: outcome.csna,
|
2546
|
+
near_transactions: [outcome.near_transactions],
|
2547
|
+
"gas_token": token,
|
2548
|
+
"gas_limit": "3000",
|
2549
|
+
nonce: Number(outcome.nonce).toString()
|
2550
|
+
};
|
2551
|
+
const strIntention = JSON.stringify(intention);
|
2552
|
+
const signature = yield btcContext.signMessage(strIntention);
|
2553
|
+
const result = yield uploadCAWithdraw({
|
2554
|
+
sig: signature,
|
2555
|
+
btcPubKey: outcome.btcPublicKey,
|
2556
|
+
data: toHex(strIntention),
|
2557
|
+
near_nonce: [Number(nearNonceNumber)]
|
2558
|
+
});
|
2559
|
+
if (result.result_code === 0) {
|
2560
|
+
const result2 = yield pollTransactionStatus(options.network.networkId, hash);
|
2561
|
+
return result2;
|
2562
|
+
} else {
|
2563
|
+
return null;
|
2564
|
+
}
|
2565
|
+
});
|
2566
|
+
}
|
2567
|
+
function signAndSendTransactions(_02) {
|
2568
|
+
return __async(this, arguments, function* ({ transactions: transactions2 }) {
|
2569
|
+
const result = yield Promise.all(transactions2.map(
|
2570
|
+
(transaction) => __async(this, null, function* () {
|
2571
|
+
return yield signAndSendTransaction(transaction);
|
2572
|
+
})
|
2573
|
+
));
|
2574
|
+
return result;
|
2575
|
+
});
|
2576
|
+
}
|
2577
|
+
return wallet;
|
2578
|
+
});
|
2579
|
+
function getNonceFromApi(accountId) {
|
2580
|
+
return fetch(`${base_url}/nonce?csna=${accountId}`, {
|
2581
|
+
method: "GET",
|
2582
|
+
headers: {
|
2583
|
+
"Content-Type": "application/json"
|
2584
|
+
}
|
2585
|
+
}).then((res) => res.json());
|
2586
|
+
}
|
2587
|
+
function getNearNonceFromApi(accountId) {
|
2588
|
+
return fetch(`${base_url}/nonceNear?csna=${accountId}`, {
|
2589
|
+
method: "GET",
|
2590
|
+
headers: {
|
2591
|
+
"Content-Type": "application/json"
|
2592
|
+
}
|
2593
|
+
}).then((res) => res.json());
|
2594
|
+
}
|
2595
|
+
function uploadCAWithdraw(data) {
|
2596
|
+
return fetch(`${base_url}/receiveTransaction`, {
|
2597
|
+
method: "POST",
|
2598
|
+
headers: {
|
2599
|
+
"Content-Type": "application/json"
|
2600
|
+
},
|
2601
|
+
body: JSON.stringify(data)
|
2602
|
+
}).then((res) => res.json());
|
2603
|
+
}
|
2604
|
+
function setupBTCWallet({
|
2605
|
+
iconUrl = "https://assets.deltatrade.ai/assets/chain/btc.svg",
|
2606
|
+
deprecated = false,
|
2607
|
+
btcContext
|
2608
|
+
}) {
|
2609
|
+
const btcWallet = () => __async(this, null, function* () {
|
2610
|
+
return {
|
2611
|
+
id: "btc-wallet",
|
2612
|
+
type: "injected",
|
2613
|
+
metadata: {
|
2614
|
+
name: "BTC Wallet",
|
2615
|
+
description: "BTC Wallet",
|
2616
|
+
iconUrl,
|
2617
|
+
downloadUrl: iconUrl,
|
2618
|
+
deprecated,
|
2619
|
+
available: true,
|
2620
|
+
btcContext
|
2621
|
+
},
|
2622
|
+
init: BTCWallet
|
2623
|
+
};
|
2624
|
+
});
|
2625
|
+
return btcWallet;
|
2626
|
+
}
|
2627
|
+
function toHex(originalString) {
|
2628
|
+
let charArray = originalString.split("");
|
2629
|
+
let asciiArray = charArray.map((char) => char.charCodeAt(0));
|
2630
|
+
let hexArray = asciiArray.map((code) => code.toString(16));
|
2631
|
+
let hexString = hexArray.join("");
|
2632
|
+
hexString = hexString.replace(/(^0+)/g, "");
|
2633
|
+
return hexString;
|
2634
|
+
}
|
2635
|
+
function initWalletButton(network, accountId, wallet) {
|
2636
|
+
const checkAndSetupWalletButton = () => {
|
2637
|
+
if (accountId && window.btcContext.account) {
|
2638
|
+
setupWalletButton(network, wallet, window.btcContext);
|
2639
|
+
} else {
|
2640
|
+
removeWalletButton();
|
2641
|
+
setTimeout(() => {
|
2642
|
+
checkAndSetupWalletButton();
|
2643
|
+
}, 5e3);
|
2644
|
+
}
|
2645
|
+
};
|
2646
|
+
checkAndSetupWalletButton();
|
2647
|
+
}
|
2648
|
+
var rcpUrls = {
|
2649
|
+
mainnet: ["https://near.lava.build", "https://rpc.mainnet.near.org", "https://free.rpc.fastnear.com", "https://near.drpc.org"],
|
2650
|
+
testnet: ["https://near-testnet.lava.build", "https://rpc.testnet.near.org", "https://near-testnet.drpc.org"]
|
2651
|
+
};
|
2652
|
+
function delay(ms) {
|
2653
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
2654
|
+
}
|
2655
|
+
function pollTransactionStatus(network, hash) {
|
2656
|
+
return __async(this, null, function* () {
|
2657
|
+
const provider = new providers.FailoverRpcProvider(
|
2658
|
+
Object.values(rcpUrls[network]).map(
|
2659
|
+
(url) => new providers.JsonRpcProvider({ url })
|
2660
|
+
)
|
2661
|
+
);
|
2662
|
+
const maxAttempts = 3;
|
2663
|
+
let attempt = 0;
|
2664
|
+
while (attempt < maxAttempts) {
|
2665
|
+
attempt++;
|
2666
|
+
const result = yield provider.txStatus(hash, "unused", "FINAL").catch((error) => {
|
2667
|
+
if (attempt === maxAttempts) {
|
2668
|
+
throw new Error(`Transaction not found: ${hash}`);
|
2669
|
+
}
|
2670
|
+
return;
|
2671
|
+
});
|
2672
|
+
if (result && result.status) {
|
2673
|
+
return result;
|
2674
|
+
}
|
2675
|
+
yield delay(1e4);
|
2676
|
+
}
|
2677
|
+
});
|
2678
|
+
}
|
2679
|
+
|
2680
|
+
// src/components/hook.tsx
|
2681
|
+
import { useEffect as useEffect7 } from "react";
|
2682
|
+
function InitContextHook() {
|
2683
|
+
const btcContext = useBtcWalletSelector();
|
2684
|
+
useEffect7(() => {
|
2685
|
+
window.btcContext = btcContext;
|
2686
|
+
}, [btcContext]);
|
2687
|
+
return null;
|
2688
|
+
}
|
2689
|
+
|
2690
|
+
// src/index.ts
|
2691
|
+
var getVersion = () => {
|
2692
|
+
return "0.0.1";
|
2693
|
+
};
|
2694
|
+
if (typeof window !== "undefined") {
|
2695
|
+
window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
|
2696
|
+
}
|
2697
|
+
export {
|
2698
|
+
BaseConnector,
|
2699
|
+
BitgetConnector,
|
2700
|
+
BtcWalletSelectorContextProvider,
|
2701
|
+
BybitConnector,
|
2702
|
+
ConnectProvider,
|
2703
|
+
InitContextHook,
|
2704
|
+
InjectedConnector,
|
2705
|
+
OKXConnector,
|
2706
|
+
TokenPocketConnector,
|
2707
|
+
UnisatConnector,
|
2708
|
+
WizzConnector,
|
2709
|
+
XverseConnector,
|
2710
|
+
getVersion,
|
2711
|
+
setupBTCWallet,
|
2712
|
+
useAccountContract,
|
2713
|
+
useAccounts,
|
2714
|
+
useBTCProvider,
|
2715
|
+
useBtcWalletSelector,
|
2716
|
+
useConnectModal,
|
2717
|
+
useConnector,
|
2718
|
+
useETHProvider
|
2719
|
+
};
|
2720
|
+
//# sourceMappingURL=index.js.map
|