miniwallet 0.1.14 → 0.1.16
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/dist/miniwallet.js +103 -79
- package/package.json +1 -1
package/dist/miniwallet.js
CHANGED
|
@@ -70,18 +70,18 @@ var d = [
|
|
|
70
70
|
//#endregion
|
|
71
71
|
//#region src/MiniWalletProvider.tsx
|
|
72
72
|
function m({ children: e, chains: n = [] }) {
|
|
73
|
-
let [s, l] = a(""), [m, h] = a(""), [g, _] = a(0), [v, y] = a(""), [b] = a(null), [
|
|
74
|
-
let { id: t } = e, n =
|
|
73
|
+
let [s, l] = a(""), [m, h] = a(""), [g, _] = a(0), [v, y] = a(""), [b, x] = a(null), [S, C] = a({}), w = i(() => n.length > 0 ? n : p, [n]), T = i(() => S[m] ?? null, [S, m]), E = i(() => d.find((e) => e.id === m), [m]), D = i(() => !!s, [s]), O = i(() => w.find((e) => e.id === g) || null, [w, g]), k = i(() => !O || !v || !O?.decimals ? "0" : Number(u(v, O.decimals)).toFixed(3), [v, O]), A = t(async (e) => {
|
|
74
|
+
let { id: t } = e, n = S[t];
|
|
75
75
|
if (!n) {
|
|
76
76
|
alert("请安装钱包");
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
79
|
try {
|
|
80
|
-
console.log("provider: ", n);
|
|
81
|
-
let
|
|
82
|
-
console.log("accounts: ",
|
|
83
|
-
let
|
|
84
|
-
l(
|
|
80
|
+
x(e), console.log("provider: ", n);
|
|
81
|
+
let r = await n.request({ method: "eth_requestAccounts" });
|
|
82
|
+
console.log("accounts: ", r), console.log("provider.chainId: ", n.chainId);
|
|
83
|
+
let i = parseInt(String(n.chainId ?? "0x0"), 16);
|
|
84
|
+
l(r[0]), h(t), _(i), localStorage.setItem("miniwallet:lastWalletId", t);
|
|
85
85
|
} catch (e) {
|
|
86
86
|
console.log("error: ", e);
|
|
87
87
|
let t = e, n = t?.code ?? "", r = t?.message ?? "";
|
|
@@ -90,14 +90,16 @@ function m({ children: e, chains: n = [] }) {
|
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
92
|
alert(`Connect failed${n && `\n${n}`}${r && `\n${r}`}`);
|
|
93
|
+
} finally {
|
|
94
|
+
x(null);
|
|
93
95
|
}
|
|
94
|
-
}, [
|
|
96
|
+
}, [S]), j = t(async () => {
|
|
95
97
|
try {
|
|
96
|
-
if (!
|
|
98
|
+
if (!T || !m) {
|
|
97
99
|
alert("请安装钱包");
|
|
98
100
|
return;
|
|
99
101
|
}
|
|
100
|
-
m !== "okx" && await
|
|
102
|
+
m !== "okx" && await T.request({
|
|
101
103
|
method: "wallet_revokePermissions",
|
|
102
104
|
params: [{ eth_accounts: {} }]
|
|
103
105
|
});
|
|
@@ -106,13 +108,13 @@ function m({ children: e, chains: n = [] }) {
|
|
|
106
108
|
} finally {
|
|
107
109
|
l(""), h(""), _(0), localStorage.removeItem("miniwallet:lastWalletId");
|
|
108
110
|
}
|
|
109
|
-
}, [
|
|
110
|
-
if (!
|
|
111
|
+
}, [T, m]), M = t(async (e) => {
|
|
112
|
+
if (!T) {
|
|
111
113
|
alert("钱包不存在");
|
|
112
114
|
return;
|
|
113
115
|
}
|
|
114
116
|
try {
|
|
115
|
-
await
|
|
117
|
+
await T.request({
|
|
116
118
|
method: "wallet_switchEthereumChain",
|
|
117
119
|
params: [{ chainId: `0x${e.id.toString(16)}` }]
|
|
118
120
|
}), _(e.id);
|
|
@@ -121,10 +123,10 @@ function m({ children: e, chains: n = [] }) {
|
|
|
121
123
|
let t = e, n = t?.code ?? "", r = t?.message ?? "";
|
|
122
124
|
alert(`Switch failed${n && `\n${n}`}${r && `\n${r}`}`);
|
|
123
125
|
}
|
|
124
|
-
}, [
|
|
126
|
+
}, [T]), N = t(async () => {
|
|
125
127
|
try {
|
|
126
|
-
if (!s || !
|
|
127
|
-
let e = await
|
|
128
|
+
if (!s || !T) return;
|
|
129
|
+
let e = await T.request({
|
|
128
130
|
method: "eth_getBalance",
|
|
129
131
|
params: [s, "latest"]
|
|
130
132
|
});
|
|
@@ -132,60 +134,60 @@ function m({ children: e, chains: n = [] }) {
|
|
|
132
134
|
} catch (e) {
|
|
133
135
|
console.error("getBalance error: ", e);
|
|
134
136
|
}
|
|
135
|
-
}, [s,
|
|
137
|
+
}, [s, T]), P = i(() => ({
|
|
136
138
|
account: s,
|
|
137
|
-
balance:
|
|
138
|
-
isConnected:
|
|
139
|
+
balance: k,
|
|
140
|
+
isConnected: D,
|
|
139
141
|
connectingWallet: b,
|
|
140
|
-
selectedChain:
|
|
141
|
-
wallet:
|
|
142
|
-
chains:
|
|
143
|
-
connect:
|
|
144
|
-
switchChain:
|
|
145
|
-
disconnect:
|
|
142
|
+
selectedChain: O,
|
|
143
|
+
wallet: E,
|
|
144
|
+
chains: w,
|
|
145
|
+
connect: A,
|
|
146
|
+
switchChain: M,
|
|
147
|
+
disconnect: j
|
|
146
148
|
}), [
|
|
147
149
|
s,
|
|
150
|
+
k,
|
|
151
|
+
D,
|
|
152
|
+
b,
|
|
148
153
|
O,
|
|
149
154
|
E,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
k,
|
|
155
|
-
j,
|
|
156
|
-
A
|
|
155
|
+
w,
|
|
156
|
+
A,
|
|
157
|
+
M,
|
|
158
|
+
j
|
|
157
159
|
]);
|
|
158
160
|
return r(() => {
|
|
159
161
|
let e = ((e) => {
|
|
160
162
|
let { info: t, provider: n } = e.detail ?? {}, r = f[t?.rdns];
|
|
161
|
-
!r || !n?.request ||
|
|
163
|
+
!r || !n?.request || C((e) => e[r] === n ? e : {
|
|
162
164
|
...e,
|
|
163
165
|
[r]: n
|
|
164
166
|
});
|
|
165
167
|
});
|
|
166
168
|
return window.addEventListener("eip6963:announceProvider", e), window.dispatchEvent(new Event("eip6963:requestProvider")), () => {
|
|
167
|
-
window.removeEventListener("eip6963:announceProvider", e),
|
|
169
|
+
window.removeEventListener("eip6963:announceProvider", e), C({});
|
|
168
170
|
};
|
|
169
171
|
}, []), r(() => {
|
|
170
|
-
g &&
|
|
171
|
-
}, [
|
|
172
|
-
if (!
|
|
172
|
+
g && N();
|
|
173
|
+
}, [N, g]), r(() => {
|
|
174
|
+
if (!D || !T?.on) return;
|
|
173
175
|
let e = (e) => {
|
|
174
176
|
console.log("ChainChanged chainId: ", e), _(parseInt(e, 16));
|
|
175
177
|
}, t = (e) => {
|
|
176
178
|
console.log("AccountsChanged accounts: ", e), l(e[0] ?? "");
|
|
177
179
|
};
|
|
178
|
-
return console.log("Listen chainChanged and accountsChanged"),
|
|
179
|
-
console.log("RemoveListener chainChanged and accountsChanged"),
|
|
180
|
+
return console.log("Listen chainChanged and accountsChanged"), T.on("chainChanged", e), T.on("accountsChanged", t), () => {
|
|
181
|
+
console.log("RemoveListener chainChanged and accountsChanged"), T.removeListener("chainChanged", e), T.removeListener("accountsChanged", t);
|
|
180
182
|
};
|
|
181
|
-
}, [
|
|
183
|
+
}, [D, T]), r(() => {
|
|
182
184
|
if (!s) return;
|
|
183
|
-
let e = setInterval(
|
|
185
|
+
let e = setInterval(N, 1e4);
|
|
184
186
|
return () => clearInterval(e);
|
|
185
|
-
}, [s,
|
|
187
|
+
}, [s, N]), r(() => {
|
|
186
188
|
let e = localStorage.getItem("miniwallet:lastWalletId");
|
|
187
189
|
if (!e) return;
|
|
188
|
-
let t =
|
|
190
|
+
let t = S[e];
|
|
189
191
|
if (!t) return;
|
|
190
192
|
let n = !1;
|
|
191
193
|
return (async () => {
|
|
@@ -200,8 +202,8 @@ function m({ children: e, chains: n = [] }) {
|
|
|
200
202
|
})(), () => {
|
|
201
203
|
n = !0;
|
|
202
204
|
};
|
|
203
|
-
}, [
|
|
204
|
-
value:
|
|
205
|
+
}, [S]), /* @__PURE__ */ o(c.Provider, {
|
|
206
|
+
value: P,
|
|
205
207
|
children: e
|
|
206
208
|
});
|
|
207
209
|
}
|
|
@@ -218,29 +220,29 @@ var g = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOC
|
|
|
218
220
|
//#endregion
|
|
219
221
|
//#region src/MiniWalletButton.tsx
|
|
220
222
|
function _({ label: e = "Connect Wallet" }) {
|
|
221
|
-
let { account: n, balance: c, isConnected: l,
|
|
222
|
-
|
|
223
|
-
}, []),
|
|
224
|
-
|
|
225
|
-
}, []),
|
|
223
|
+
let { account: n, balance: c, isConnected: l, connectingWallet: u, selectedChain: f, wallet: p, switchChain: m, chains: _, connect: v, disconnect: y } = h(), [b, x] = a(!1), [S, C] = a(!1), [w, T] = a(!1), [E, D] = a("复制地址"), O = i(() => n ? `${n.slice(0, 6)}...${n.slice(-4)}` : "", [n]), k = t(() => {
|
|
224
|
+
x(!0);
|
|
225
|
+
}, []), A = t(() => {
|
|
226
|
+
x(!1);
|
|
227
|
+
}, []), j = t(async () => {
|
|
226
228
|
try {
|
|
227
|
-
await navigator.clipboard.writeText(n),
|
|
228
|
-
|
|
229
|
+
await navigator.clipboard.writeText(n), D("已复制!"), setTimeout(() => {
|
|
230
|
+
D("复制地址");
|
|
229
231
|
}, 1e3);
|
|
230
232
|
} catch (e) {
|
|
231
233
|
console.error("copy", e);
|
|
232
234
|
}
|
|
233
235
|
}, [n]);
|
|
234
236
|
return r(() => {
|
|
235
|
-
l &&
|
|
237
|
+
l && x(!1);
|
|
236
238
|
}, [l]), l ? /* @__PURE__ */ s("section", {
|
|
237
239
|
className: "inline-flex items-center justify-center text-center",
|
|
238
240
|
children: [
|
|
239
241
|
/* @__PURE__ */ o("select", {
|
|
240
|
-
value:
|
|
241
|
-
onChange: (e) =>
|
|
242
|
+
value: f?.id,
|
|
243
|
+
onChange: (e) => m(_.find((t) => t.id === Number(e.target.value))),
|
|
242
244
|
className: "bg-transparent1 mr-4 cursor-pointer rounded-sm border-none p-1 text-gray-600 outline-none hover:bg-gray-100",
|
|
243
|
-
children:
|
|
245
|
+
children: _.map((e) => /* @__PURE__ */ o("option", {
|
|
244
246
|
value: e.id,
|
|
245
247
|
children: e.name
|
|
246
248
|
}, e.id))
|
|
@@ -249,18 +251,18 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
249
251
|
className: "flex items-center justify-center rounded-2xl bg-white pr-3 shadow-lg inset-ring-1 shadow-gray-200 inset-ring-gray-100",
|
|
250
252
|
children: [/* @__PURE__ */ s("div", {
|
|
251
253
|
onClick: () => {
|
|
252
|
-
|
|
254
|
+
T(!0);
|
|
253
255
|
},
|
|
254
256
|
className: "flex cursor-pointer items-center justify-center space-x-2 rounded-l-2xl py-2.5 pr-1 pl-3 hover:bg-gray-50",
|
|
255
257
|
children: [
|
|
256
|
-
|
|
257
|
-
src:
|
|
258
|
-
alt:
|
|
258
|
+
p && /* @__PURE__ */ o("img", {
|
|
259
|
+
src: p.icon,
|
|
260
|
+
alt: p.name,
|
|
259
261
|
className: "h-6 w-6"
|
|
260
262
|
}),
|
|
261
263
|
/* @__PURE__ */ o("div", {
|
|
262
264
|
className: "mr-1",
|
|
263
|
-
children:
|
|
265
|
+
children: O
|
|
264
266
|
}),
|
|
265
267
|
/* @__PURE__ */ s("span", {
|
|
266
268
|
className: "text-sm text-gray-400",
|
|
@@ -268,14 +270,14 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
268
270
|
"(",
|
|
269
271
|
c,
|
|
270
272
|
" ",
|
|
271
|
-
|
|
273
|
+
f?.symbol ?? "",
|
|
272
274
|
")"
|
|
273
275
|
]
|
|
274
276
|
})
|
|
275
277
|
]
|
|
276
278
|
}), /* @__PURE__ */ o("button", {
|
|
277
279
|
className: "ml-1 h-6 w-6 cursor-pointer rounded-full",
|
|
278
|
-
onClick:
|
|
280
|
+
onClick: y,
|
|
279
281
|
children: /* @__PURE__ */ o("img", {
|
|
280
282
|
src: g,
|
|
281
283
|
alt: "disconnect",
|
|
@@ -283,7 +285,7 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
283
285
|
})
|
|
284
286
|
})]
|
|
285
287
|
}),
|
|
286
|
-
|
|
288
|
+
w && /* @__PURE__ */ o("div", {
|
|
287
289
|
className: "z-index-10 fixed top-0 right-0 bottom-0 left-0 bg-[rgba(0,0,0,0.5)]",
|
|
288
290
|
children: /* @__PURE__ */ s("div", {
|
|
289
291
|
className: "absolute top-1/2 left-1/2 flex h-auto w-[380px] -translate-x-1/2 -translate-y-1/2 flex-col items-center gap-3 rounded-3xl bg-white p-10 pt-5 text-center",
|
|
@@ -293,7 +295,7 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
293
295
|
children: /* @__PURE__ */ o("button", {
|
|
294
296
|
className: "mr-[-20px] cursor-pointer rounded-full p-1 hover:bg-gray-100",
|
|
295
297
|
onClick: () => {
|
|
296
|
-
|
|
298
|
+
T(!1);
|
|
297
299
|
},
|
|
298
300
|
children: /* @__PURE__ */ s("svg", {
|
|
299
301
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -306,21 +308,21 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
306
308
|
})
|
|
307
309
|
})
|
|
308
310
|
}),
|
|
309
|
-
|
|
310
|
-
src:
|
|
311
|
-
alt:
|
|
311
|
+
p && /* @__PURE__ */ o("img", {
|
|
312
|
+
src: p.icon,
|
|
313
|
+
alt: p.name,
|
|
312
314
|
className: "h-16 w-16"
|
|
313
315
|
}),
|
|
314
|
-
/* @__PURE__ */ o("p", { children:
|
|
316
|
+
/* @__PURE__ */ o("p", { children: O }),
|
|
315
317
|
/* @__PURE__ */ s("div", {
|
|
316
318
|
className: "mt-2 w-full space-x-10",
|
|
317
319
|
children: [/* @__PURE__ */ o("button", {
|
|
318
|
-
onClick:
|
|
320
|
+
onClick: j,
|
|
319
321
|
className: "w-[112px] cursor-pointer rounded-xl bg-gray-700 py-2 text-white shadow-md shadow-gray-500/50 outline-none",
|
|
320
|
-
children:
|
|
322
|
+
children: E
|
|
321
323
|
}), /* @__PURE__ */ o("button", {
|
|
322
324
|
type: "button",
|
|
323
|
-
onClick:
|
|
325
|
+
onClick: y,
|
|
324
326
|
className: "w-[112px] cursor-pointer rounded-xl bg-red-400 py-2 text-white shadow-md shadow-red-500/50 outline-none",
|
|
325
327
|
children: "断开连接"
|
|
326
328
|
})]
|
|
@@ -331,10 +333,10 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
331
333
|
]
|
|
332
334
|
}) : /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("button", {
|
|
333
335
|
type: "button",
|
|
334
|
-
onClick:
|
|
336
|
+
onClick: k,
|
|
335
337
|
className: "cursor-pointer rounded-xl bg-blue-500 px-4 py-2 text-white shadow-lg shadow-blue-500/50",
|
|
336
338
|
children: e
|
|
337
|
-
}),
|
|
339
|
+
}), b && /* @__PURE__ */ o("div", {
|
|
338
340
|
className: "z-index-10 fixed top-0 right-0 bottom-0 left-0 bg-[rgba(0,0,0,0.5)]",
|
|
339
341
|
children: /* @__PURE__ */ s("div", {
|
|
340
342
|
className: "absolute top-1/2 left-1/2 flex h-auto w-[380px] -translate-x-1/2 -translate-y-1/2 flex-col gap-3 rounded-3xl bg-white p-6",
|
|
@@ -347,7 +349,9 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
347
349
|
type: "button",
|
|
348
350
|
"aria-label": "Close",
|
|
349
351
|
className: "cursor-pointer rounded-full p-1 hover:bg-gray-100",
|
|
350
|
-
onClick:
|
|
352
|
+
onClick: () => {
|
|
353
|
+
C(!1), A();
|
|
354
|
+
},
|
|
351
355
|
children: /* @__PURE__ */ s("svg", {
|
|
352
356
|
xmlns: "http://www.w3.org/2000/svg",
|
|
353
357
|
viewBox: "0 0 24 24",
|
|
@@ -358,11 +362,31 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
358
362
|
children: [/* @__PURE__ */ o("path", { d: "M18 6 6 18" }), /* @__PURE__ */ o("path", { d: "m6 6 12 12" })]
|
|
359
363
|
})
|
|
360
364
|
})]
|
|
361
|
-
}), /* @__PURE__ */
|
|
365
|
+
}), /* @__PURE__ */ s("div", {
|
|
362
366
|
className: "relative w-full space-y-4",
|
|
363
|
-
children:
|
|
367
|
+
children: [S && u && /* @__PURE__ */ s("div", {
|
|
368
|
+
className: "absolute inset-0 mb-0 flex flex-col items-center justify-center rounded-xl bg-[rgba(255,255,255,0.9)] text-black",
|
|
369
|
+
children: [
|
|
370
|
+
/* @__PURE__ */ s("div", { children: [
|
|
371
|
+
"正在连接",
|
|
372
|
+
u.name,
|
|
373
|
+
"..."
|
|
374
|
+
] }),
|
|
375
|
+
/* @__PURE__ */ o("div", {
|
|
376
|
+
className: "my-1.5 text-xs",
|
|
377
|
+
children: "请在扩展中确认连接"
|
|
378
|
+
}),
|
|
379
|
+
/* @__PURE__ */ o("img", {
|
|
380
|
+
src: "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1783646544006'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='78324'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='32'%20height='32'%3e%3cpath%20d='M512%20907c-24.852%200-45-20.148-45-45s20.148-45%2045-45c168.446%200%20305-136.554%20305-305S680.446%20207%20512%20207%20207%20343.554%20207%20512c0%2024.852-20.148%2045-45%2045S117%20536.852%20117%20512c0-218.152%20176.848-395%20395-395S907%20293.848%20907%20512%20730.152%20907%20512%20907z'%20fill='%23444444'%20p-id='78325'%3e%3c/path%3e%3c/svg%3e",
|
|
381
|
+
alt: "spin",
|
|
382
|
+
className: "h-8 w-8 animate-[spin_2s_linear_infinite]"
|
|
383
|
+
})
|
|
384
|
+
]
|
|
385
|
+
}), d.map((e) => /* @__PURE__ */ s("button", {
|
|
364
386
|
type: "button",
|
|
365
|
-
onClick: () =>
|
|
387
|
+
onClick: () => {
|
|
388
|
+
C(!0), v(e);
|
|
389
|
+
},
|
|
366
390
|
className: "flex w-full cursor-pointer items-center gap-2 rounded-xl border border-gray-300 px-4 py-2 hover:bg-gray-100",
|
|
367
391
|
children: [/* @__PURE__ */ o("img", {
|
|
368
392
|
src: e.icon,
|
|
@@ -379,7 +403,7 @@ function _({ label: e = "Connect Wallet" }) {
|
|
|
379
403
|
]
|
|
380
404
|
})]
|
|
381
405
|
})]
|
|
382
|
-
}, e.id))
|
|
406
|
+
}, e.id))]
|
|
383
407
|
})]
|
|
384
408
|
})
|
|
385
409
|
})] });
|