@ckb-ccc/connector 0.0.4-alpha.8 → 0.0.5-alpha.0
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 +6 -0
- package/dist/advancedBarrel.d.ts +1 -0
- package/dist/advancedBarrel.d.ts.map +1 -1
- package/dist/advancedBarrel.js +1 -0
- package/dist/assets/chains/ckb.svg.d.ts +2 -0
- package/dist/assets/chains/ckb.svg.d.ts.map +1 -0
- package/dist/assets/chains/ckb.svg.js +2 -0
- package/dist/assets/chains/index.d.ts +1 -0
- package/dist/assets/chains/index.d.ts.map +1 -1
- package/dist/assets/chains/index.js +1 -0
- package/dist/assets/joy-id.svg.d.ts +2 -0
- package/dist/assets/joy-id.svg.d.ts.map +1 -0
- package/dist/assets/joy-id.svg.js +2 -0
- package/dist/assets/metamask.svg.d.ts +2 -0
- package/dist/assets/metamask.svg.d.ts.map +1 -0
- package/dist/assets/metamask.svg.js +2 -0
- package/dist/barrel.d.ts +1 -2
- package/dist/barrel.d.ts.map +1 -1
- package/dist/barrel.js +1 -2
- package/dist/connector/index.d.ts +19 -8
- package/dist/connector/index.d.ts.map +1 -1
- package/dist/connector/index.js +162 -59
- package/dist/events/index.d.ts +1 -12
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +2 -15
- package/dist/scenes/connecting.d.ts +2 -1
- package/dist/scenes/connecting.d.ts.map +1 -1
- package/dist/scenes/signers.d.ts +2 -1
- package/dist/scenes/signers.d.ts.map +1 -1
- package/dist/scenes/signers.js +3 -2
- package/dist/scenes/wallets.d.ts +2 -1
- package/dist/scenes/wallets.d.ts.map +1 -1
- package/dist/scenes/wallets.js +44 -9
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist.commonjs/advanced.d.ts +3 -0
- package/dist.commonjs/advanced.d.ts.map +1 -0
- package/dist.commonjs/advanced.js +56 -0
- package/dist.commonjs/advancedBarrel.d.ts +4 -0
- package/dist.commonjs/advancedBarrel.d.ts.map +1 -0
- package/dist.commonjs/advancedBarrel.js +35 -0
- package/dist.commonjs/assets/chains/btc.svg.d.ts +2 -0
- package/dist.commonjs/assets/chains/btc.svg.d.ts.map +1 -0
- package/dist.commonjs/assets/chains/btc.svg.js +7 -0
- package/dist.commonjs/assets/chains/eth.svg.d.ts +2 -0
- package/dist.commonjs/assets/chains/eth.svg.d.ts.map +1 -0
- package/dist.commonjs/assets/chains/eth.svg.js +7 -0
- package/dist.commonjs/assets/chains/index.d.ts +3 -0
- package/dist.commonjs/assets/chains/index.d.ts.map +1 -0
- package/dist.commonjs/assets/chains/index.js +34 -0
- package/dist.commonjs/assets/close.svg.d.ts +2 -0
- package/dist.commonjs/assets/close.svg.d.ts.map +1 -0
- package/dist.commonjs/assets/close.svg.js +7 -0
- package/dist.commonjs/assets/okx.svg.d.ts +2 -0
- package/dist.commonjs/assets/okx.svg.d.ts.map +1 -0
- package/dist.commonjs/assets/okx.svg.js +7 -0
- package/dist.commonjs/assets/retry.svg.d.ts +2 -0
- package/dist.commonjs/assets/retry.svg.d.ts.map +1 -0
- package/dist.commonjs/assets/retry.svg.js +7 -0
- package/dist.commonjs/assets/uni-sat.svg.d.ts +2 -0
- package/dist.commonjs/assets/uni-sat.svg.d.ts.map +1 -0
- package/dist.commonjs/assets/uni-sat.svg.js +7 -0
- package/dist.commonjs/assets/utils.d.ts +2 -0
- package/dist.commonjs/assets/utils.d.ts.map +1 -0
- package/dist.commonjs/assets/utils.js +7 -0
- package/dist.commonjs/barrel.d.ts +4 -0
- package/dist.commonjs/barrel.d.ts.map +1 -0
- package/dist.commonjs/barrel.js +35 -0
- package/dist.commonjs/connector/index.d.ts +33 -0
- package/dist.commonjs/connector/index.d.ts.map +1 -0
- package/dist.commonjs/connector/index.js +452 -0
- package/dist.commonjs/events/index.d.ts +4 -0
- package/dist.commonjs/events/index.d.ts.map +1 -0
- package/dist.commonjs/events/index.js +9 -0
- package/dist.commonjs/index.d.ts +3 -0
- package/dist.commonjs/index.d.ts.map +1 -0
- package/dist.commonjs/index.js +56 -0
- package/dist.commonjs/scenes/connecting.d.ts +10 -0
- package/dist.commonjs/scenes/connecting.d.ts.map +1 -0
- package/dist.commonjs/scenes/connecting.js +27 -0
- package/dist.commonjs/scenes/index.d.ts +4 -0
- package/dist.commonjs/scenes/index.d.ts.map +1 -0
- package/dist.commonjs/scenes/index.js +35 -0
- package/dist.commonjs/scenes/signers.d.ts +11 -0
- package/dist.commonjs/scenes/signers.d.ts.map +1 -0
- package/dist.commonjs/scenes/signers.js +39 -0
- package/dist.commonjs/scenes/wallets.d.ts +8 -0
- package/dist.commonjs/scenes/wallets.d.ts.map +1 -0
- package/dist.commonjs/scenes/wallets.js +30 -0
- package/dist.commonjs/tsconfig.commonjs.tsbuildinfo +1 -0
- package/dist.commonjs/types/index.d.ts +5 -0
- package/dist.commonjs/types/index.d.ts.map +1 -0
- package/dist.commonjs/types/index.js +2 -0
- package/package.json +3 -3
- package/src/advancedBarrel.ts +1 -0
- package/src/assets/chains/ckb.svg.ts +5 -0
- package/src/assets/chains/index.ts +1 -0
- package/src/assets/joy-id.svg.ts +5 -0
- package/src/assets/metamask.svg.ts +5 -0
- package/src/barrel.ts +1 -2
- package/src/connector/index.ts +217 -69
- package/src/events/index.ts +2 -20
- package/src/scenes/connecting.ts +6 -2
- package/src/scenes/signers.ts +9 -4
- package/src/scenes/wallets.ts +69 -22
- package/src/types/index.ts +11 -0
- package/dist/status/index.d.ts +0 -6
- package/dist/status/index.d.ts.map +0 -1
- package/dist/status/index.js +0 -6
- package/src/status/index.ts +0 -5
package/src/connector/index.ts
CHANGED
|
@@ -1,105 +1,243 @@
|
|
|
1
1
|
import { ccc } from "@ckb-ccc/ccc";
|
|
2
|
-
import { LitElement, css, html } from "lit";
|
|
2
|
+
import { LitElement, PropertyValues, css, html } from "lit";
|
|
3
3
|
import { customElement, property, state } from "lit/decorators.js";
|
|
4
4
|
import { CLOSE_SVG } from "../assets/close.svg";
|
|
5
|
+
import { JOY_ID_SVG } from "../assets/joy-id.svg";
|
|
5
6
|
import { OKX_SVG } from "../assets/okx.svg";
|
|
6
7
|
import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
|
|
7
|
-
import {
|
|
8
|
+
import { WillUpdateEvent } from "../events";
|
|
8
9
|
import {
|
|
9
10
|
generateConnectingScene,
|
|
10
11
|
generateSignersScene,
|
|
11
12
|
generateWalletsScene,
|
|
12
13
|
} from "../scenes";
|
|
13
|
-
import {
|
|
14
|
+
import { WalletWithSigners } from "../types";
|
|
15
|
+
|
|
16
|
+
enum Scene {
|
|
17
|
+
SelectingWallets = "SelectingWallets",
|
|
18
|
+
SelectingSigners = "SelectingSigners",
|
|
19
|
+
Connecting = "Connecting",
|
|
20
|
+
Connected = "Connected",
|
|
21
|
+
}
|
|
14
22
|
|
|
15
23
|
@customElement("ccc-connector")
|
|
16
24
|
export class WebComponentConnector extends LitElement {
|
|
17
25
|
@state()
|
|
18
|
-
private wallets:
|
|
19
|
-
private existedEip6963: string[] = [];
|
|
26
|
+
private wallets: WalletWithSigners[] = [];
|
|
20
27
|
|
|
21
|
-
|
|
28
|
+
private resetListeners: (() => void)[] = [];
|
|
29
|
+
|
|
30
|
+
@state()
|
|
22
31
|
public isOpen: boolean = false;
|
|
32
|
+
public setIsOpen(isOpen: boolean) {
|
|
33
|
+
this.isOpen = isOpen;
|
|
34
|
+
}
|
|
23
35
|
|
|
24
36
|
@property()
|
|
37
|
+
public client: ccc.Client = new ccc.ClientPublicTestnet();
|
|
38
|
+
public setClient(client: ccc.Client) {
|
|
39
|
+
this.client = client;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@state()
|
|
43
|
+
private scene: Scene = Scene.SelectingWallets;
|
|
44
|
+
@state()
|
|
45
|
+
private selectedWallet?: WalletWithSigners;
|
|
46
|
+
@state()
|
|
47
|
+
private selectedSigner?: ccc.SignerInfo;
|
|
48
|
+
|
|
49
|
+
@state()
|
|
50
|
+
private walletName?: string;
|
|
51
|
+
@state()
|
|
52
|
+
private signerName?: string;
|
|
53
|
+
@state()
|
|
25
54
|
public wallet?: ccc.Wallet;
|
|
26
|
-
@
|
|
55
|
+
@state()
|
|
27
56
|
public signer?: ccc.SignerInfo;
|
|
28
|
-
|
|
29
|
-
|
|
57
|
+
private prepareSigner() {
|
|
58
|
+
(async () => {
|
|
59
|
+
if (this.signer && (await this.signer.signer.isConnected())) {
|
|
60
|
+
this.scene = Scene.Connected;
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
this.wallet = undefined;
|
|
65
|
+
this.signer = undefined;
|
|
66
|
+
this.scene = Scene.SelectingWallets;
|
|
67
|
+
})();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public disconnect() {
|
|
71
|
+
this.signer?.signer?.disconnect();
|
|
72
|
+
this.walletName = undefined;
|
|
73
|
+
this.signerName = undefined;
|
|
74
|
+
this.saveConnection();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private loadConnection() {
|
|
78
|
+
const {
|
|
79
|
+
signerName,
|
|
80
|
+
walletName,
|
|
81
|
+
}: { signerName?: string; walletName?: string } = JSON.parse(
|
|
82
|
+
window.localStorage.getItem("ccc-connection-info") ?? "{}",
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
this.signerName = signerName;
|
|
86
|
+
this.walletName = walletName;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private saveConnection() {
|
|
90
|
+
window.localStorage.setItem(
|
|
91
|
+
"ccc-connection-info",
|
|
92
|
+
JSON.stringify({
|
|
93
|
+
signerName: this.signerName,
|
|
94
|
+
walletName: this.walletName,
|
|
95
|
+
}),
|
|
96
|
+
);
|
|
97
|
+
}
|
|
30
98
|
|
|
31
99
|
connectedCallback(): void {
|
|
32
100
|
super.connectedCallback();
|
|
101
|
+
this.loadConnection();
|
|
102
|
+
this.reloadSigners();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
willUpdate(changedProperties: PropertyValues): void {
|
|
106
|
+
if (changedProperties.has("client")) {
|
|
107
|
+
this.reloadSigners();
|
|
108
|
+
}
|
|
109
|
+
if (
|
|
110
|
+
changedProperties.has("walletName") ||
|
|
111
|
+
changedProperties.has("wallets")
|
|
112
|
+
) {
|
|
113
|
+
this.wallet = this.wallets.find(({ name }) => name === this.walletName);
|
|
114
|
+
}
|
|
115
|
+
if (
|
|
116
|
+
changedProperties.has("signerName") ||
|
|
117
|
+
changedProperties.has("wallet")
|
|
118
|
+
) {
|
|
119
|
+
const wallet = this.wallets.find(({ name }) => name === this.walletName);
|
|
120
|
+
this.signer = wallet?.signers.find(
|
|
121
|
+
({ name }) => name === this.signerName,
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
if (changedProperties.has("signer")) {
|
|
125
|
+
this.prepareSigner();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
this.dispatchEvent(new WillUpdateEvent());
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private reloadSigners() {
|
|
132
|
+
this.wallets = [];
|
|
133
|
+
|
|
134
|
+
(async () => {
|
|
135
|
+
if (!this.signer) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
33
138
|
|
|
34
|
-
|
|
35
|
-
|
|
139
|
+
this.signer = {
|
|
140
|
+
...this.signer,
|
|
141
|
+
signer: await this.signer.signer.replaceClient(this.client),
|
|
142
|
+
};
|
|
143
|
+
})();
|
|
144
|
+
|
|
145
|
+
this.resetListeners.forEach((listener) => listener());
|
|
146
|
+
this.resetListeners = [];
|
|
147
|
+
|
|
148
|
+
ccc.JoyId.getJoyIdSigners(this.client).forEach(({ signer, type, name }) => {
|
|
149
|
+
this.addSigner("JoyID", name, JOY_ID_SVG, type, signer);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
const uniSatSigner = ccc.UniSat.getUniSatSigner(this.client);
|
|
36
153
|
if (uniSatSigner) {
|
|
37
|
-
this.addSigner(
|
|
154
|
+
this.addSigner(
|
|
155
|
+
"UniSat",
|
|
156
|
+
"BTC",
|
|
157
|
+
UNI_SAT_SVG,
|
|
158
|
+
ccc.SignerType.BTC,
|
|
159
|
+
uniSatSigner,
|
|
160
|
+
);
|
|
38
161
|
}
|
|
39
162
|
|
|
40
|
-
const okxBitcoinSigner = ccc.Okx.getOKXBitcoinSigner(client);
|
|
163
|
+
const okxBitcoinSigner = ccc.Okx.getOKXBitcoinSigner(this.client);
|
|
41
164
|
if (okxBitcoinSigner) {
|
|
42
165
|
this.addSigner(
|
|
43
166
|
"OKX Wallet",
|
|
167
|
+
"BTC",
|
|
44
168
|
OKX_SVG,
|
|
45
169
|
ccc.SignerType.BTC,
|
|
46
170
|
okxBitcoinSigner,
|
|
47
171
|
);
|
|
48
172
|
}
|
|
49
173
|
|
|
50
|
-
const eip6963Manager = new ccc.Eip6963.SignerFactory(client);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
});
|
|
174
|
+
const eip6963Manager = new ccc.Eip6963.SignerFactory(this.client);
|
|
175
|
+
this.resetListeners.push(
|
|
176
|
+
eip6963Manager.subscribeSigners((signer) => {
|
|
177
|
+
this.addSigner(
|
|
178
|
+
`${signer.detail.info.name}`,
|
|
179
|
+
"EVM",
|
|
180
|
+
signer.detail.info.icon,
|
|
181
|
+
ccc.SignerType.EVM,
|
|
182
|
+
signer,
|
|
183
|
+
);
|
|
184
|
+
}),
|
|
185
|
+
);
|
|
63
186
|
}
|
|
64
187
|
|
|
65
|
-
addSigner(
|
|
66
|
-
|
|
188
|
+
private addSigner(
|
|
189
|
+
walletName: string,
|
|
190
|
+
signerName: string,
|
|
67
191
|
icon: string,
|
|
68
192
|
type: ccc.SignerType,
|
|
69
193
|
signer: ccc.Signer,
|
|
70
194
|
) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
wallet.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
195
|
+
let updated = false;
|
|
196
|
+
const wallets = this.wallets.map((wallet) => {
|
|
197
|
+
if (wallet.name !== walletName) {
|
|
198
|
+
return wallet;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
updated = true;
|
|
202
|
+
return {
|
|
203
|
+
...wallet,
|
|
204
|
+
signers: [...wallet.signers, { type, name: signerName, signer }],
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
if (!updated) {
|
|
209
|
+
wallets.push({
|
|
210
|
+
name: walletName,
|
|
211
|
+
icon,
|
|
212
|
+
signers: [{ type, name: signerName, signer }],
|
|
213
|
+
});
|
|
84
214
|
}
|
|
215
|
+
|
|
216
|
+
this.wallets = wallets;
|
|
85
217
|
}
|
|
86
218
|
|
|
87
219
|
render() {
|
|
88
220
|
const [title, body] = (() => {
|
|
89
|
-
if (!this.
|
|
221
|
+
if (this.scene === Scene.SelectingWallets || !this.selectedWallet) {
|
|
90
222
|
return generateWalletsScene(
|
|
91
223
|
this.wallets,
|
|
92
|
-
|
|
93
|
-
|
|
224
|
+
(wallet) => {
|
|
225
|
+
this.selectedWallet = wallet;
|
|
226
|
+
this.scene = Scene.SelectingSigners;
|
|
227
|
+
},
|
|
228
|
+
this.signerSelectedHandler,
|
|
94
229
|
);
|
|
95
230
|
}
|
|
96
|
-
if (!this.
|
|
97
|
-
return generateSignersScene(
|
|
231
|
+
if (this.scene === Scene.SelectingSigners || !this.selectedSigner) {
|
|
232
|
+
return generateSignersScene(
|
|
233
|
+
this.selectedWallet,
|
|
234
|
+
this.signerSelectedHandler,
|
|
235
|
+
);
|
|
98
236
|
}
|
|
99
237
|
return generateConnectingScene(
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
102
|
-
this.
|
|
238
|
+
this.selectedWallet,
|
|
239
|
+
this.selectedSigner,
|
|
240
|
+
this.signerSelectedHandler,
|
|
103
241
|
);
|
|
104
242
|
})();
|
|
105
243
|
|
|
@@ -111,7 +249,6 @@ export class WebComponentConnector extends LitElement {
|
|
|
111
249
|
--btn-primary: #f8f8f8;
|
|
112
250
|
--btn-primary-hover: #efeeee;
|
|
113
251
|
--btn-secondary: #ddd;
|
|
114
|
-
--btn-icon: #e9e4de;
|
|
115
252
|
color: #1e1e1e;
|
|
116
253
|
--tip-color: #666;
|
|
117
254
|
}
|
|
@@ -120,7 +257,7 @@ export class WebComponentConnector extends LitElement {
|
|
|
120
257
|
class="background"
|
|
121
258
|
@click=${(event: Event) => {
|
|
122
259
|
if (event.target === event.currentTarget) {
|
|
123
|
-
this.
|
|
260
|
+
this.closedHandler();
|
|
124
261
|
}
|
|
125
262
|
}}
|
|
126
263
|
>
|
|
@@ -128,30 +265,45 @@ export class WebComponentConnector extends LitElement {
|
|
|
128
265
|
<div class="header text-bold fs-big">
|
|
129
266
|
<div class="back"></div>
|
|
130
267
|
${title}
|
|
131
|
-
<img class="close" src=${CLOSE_SVG} @click=${this.
|
|
268
|
+
<img class="close" src=${CLOSE_SVG} @click=${this.closedHandler} />
|
|
132
269
|
</div>
|
|
133
270
|
<div class="body">${body}</div>
|
|
134
271
|
</div>
|
|
135
272
|
</div>`;
|
|
136
273
|
}
|
|
137
274
|
|
|
138
|
-
private
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
275
|
+
private closedHandler = () => {
|
|
276
|
+
if (
|
|
277
|
+
[
|
|
278
|
+
Scene.SelectingSigners,
|
|
279
|
+
Scene.SelectingWallets,
|
|
280
|
+
Scene.Connecting,
|
|
281
|
+
].includes(this.scene)
|
|
282
|
+
) {
|
|
283
|
+
this.scene = Scene.SelectingWallets;
|
|
284
|
+
this.selectedSigner = undefined;
|
|
285
|
+
this.selectedWallet = undefined;
|
|
286
|
+
}
|
|
287
|
+
this.isOpen = false;
|
|
145
288
|
};
|
|
146
289
|
|
|
147
|
-
private
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
290
|
+
private signerSelectedHandler = (
|
|
291
|
+
wallet: WalletWithSigners,
|
|
292
|
+
signer: ccc.SignerInfo,
|
|
293
|
+
) => {
|
|
294
|
+
this.scene = Scene.Connecting;
|
|
295
|
+
this.selectedWallet = wallet;
|
|
296
|
+
this.selectedSigner = signer;
|
|
151
297
|
(async () => {
|
|
152
298
|
await signer.signer.connect();
|
|
153
|
-
|
|
154
|
-
|
|
299
|
+
if (!(await signer.signer.isConnected())) {
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
this.scene = Scene.Connected;
|
|
303
|
+
this.walletName = wallet.name;
|
|
304
|
+
this.signerName = signer.name;
|
|
305
|
+
this.saveConnection();
|
|
306
|
+
this.closedHandler();
|
|
155
307
|
})();
|
|
156
308
|
};
|
|
157
309
|
|
|
@@ -252,8 +404,6 @@ export class WebComponentConnector extends LitElement {
|
|
|
252
404
|
width: 2rem;
|
|
253
405
|
height: 2rem;
|
|
254
406
|
margin-right: 1rem;
|
|
255
|
-
border-radius: 0.4rem;
|
|
256
|
-
background: var(--btn-icon);
|
|
257
407
|
}
|
|
258
408
|
|
|
259
409
|
.btn-primary:hover {
|
|
@@ -279,8 +429,6 @@ export class WebComponentConnector extends LitElement {
|
|
|
279
429
|
width: 4rem;
|
|
280
430
|
height: 4rem;
|
|
281
431
|
margin-bottom: 0.5rem;
|
|
282
|
-
border-radius: 0.8rem;
|
|
283
|
-
background: var(--btn-icon);
|
|
284
432
|
}
|
|
285
433
|
|
|
286
434
|
.connecting-wallet-icon {
|
package/src/events/index.ts
CHANGED
|
@@ -1,23 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import { ConnectorStatus } from "../status";
|
|
3
|
-
|
|
4
|
-
export class SignerChangedEvent extends Event {
|
|
5
|
-
constructor(
|
|
6
|
-
public readonly wallet?: ccc.Wallet,
|
|
7
|
-
public readonly signerInfo?: ccc.SignerInfo,
|
|
8
|
-
) {
|
|
9
|
-
super("signerChanged", { composed: true });
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class StatusChangedEvent extends Event {
|
|
14
|
-
constructor(public readonly status: ConnectorStatus) {
|
|
15
|
-
super("statusChanged", { composed: true });
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export class CloseEvent extends Event {
|
|
1
|
+
export class WillUpdateEvent extends Event {
|
|
20
2
|
constructor() {
|
|
21
|
-
super("
|
|
3
|
+
super("willUpdate", { composed: true });
|
|
22
4
|
}
|
|
23
5
|
}
|
package/src/scenes/connecting.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { ccc } from "@ckb-ccc/ccc";
|
|
2
2
|
import { html } from "lit";
|
|
3
3
|
import { RETRY_SVG } from "../assets/retry.svg";
|
|
4
|
+
import { WalletWithSigners } from "../types";
|
|
4
5
|
|
|
5
6
|
export function generateConnectingScene(
|
|
6
|
-
wallet:
|
|
7
|
+
wallet: WalletWithSigners,
|
|
7
8
|
signer: ccc.SignerInfo,
|
|
8
|
-
onSignerSelected: (
|
|
9
|
+
onSignerSelected: (
|
|
10
|
+
wallet: WalletWithSigners,
|
|
11
|
+
signer: ccc.SignerInfo,
|
|
12
|
+
) => unknown,
|
|
9
13
|
) {
|
|
10
14
|
return [
|
|
11
15
|
wallet.name,
|
package/src/scenes/signers.ts
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { ccc } from "@ckb-ccc/ccc";
|
|
2
2
|
import { html } from "lit";
|
|
3
3
|
import { repeat } from "lit/directives/repeat.js";
|
|
4
|
-
import { BTC_SVG, ETH_SVG } from "../assets/chains";
|
|
4
|
+
import { BTC_SVG, CKB_SVG, ETH_SVG } from "../assets/chains";
|
|
5
|
+
import { WalletWithSigners } from "../types";
|
|
5
6
|
|
|
6
7
|
export function signerTypeToIcon(type: ccc.SignerType): string {
|
|
7
8
|
return {
|
|
8
9
|
[ccc.SignerType.BTC]: BTC_SVG,
|
|
9
10
|
[ccc.SignerType.EVM]: ETH_SVG,
|
|
11
|
+
[ccc.SignerType.CKB]: CKB_SVG,
|
|
10
12
|
}[type];
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export function generateSignersScene(
|
|
14
|
-
wallet:
|
|
15
|
-
onSignerSelected: (
|
|
16
|
+
wallet: WalletWithSigners,
|
|
17
|
+
onSignerSelected: (
|
|
18
|
+
wallet: WalletWithSigners,
|
|
19
|
+
signer: ccc.SignerInfo,
|
|
20
|
+
) => unknown,
|
|
16
21
|
) {
|
|
17
22
|
return [
|
|
18
23
|
"Select a Chain",
|
|
@@ -31,7 +36,7 @@ export function generateSignersScene(
|
|
|
31
36
|
}}
|
|
32
37
|
>
|
|
33
38
|
<img src=${signerTypeToIcon(signer.type)} alt=${signer.type} />
|
|
34
|
-
${signer.
|
|
39
|
+
${signer.name}
|
|
35
40
|
</button>
|
|
36
41
|
`,
|
|
37
42
|
)}
|
package/src/scenes/wallets.ts
CHANGED
|
@@ -1,32 +1,79 @@
|
|
|
1
1
|
import { ccc } from "@ckb-ccc/ccc";
|
|
2
2
|
import { html } from "lit";
|
|
3
3
|
import { repeat } from "lit/directives/repeat.js";
|
|
4
|
+
import { METAMASK_SVG } from "../assets/metamask.svg";
|
|
5
|
+
import { OKX_SVG } from "../assets/okx.svg";
|
|
6
|
+
import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
|
|
7
|
+
import { WalletInfo, WalletWithSigners } from "../types";
|
|
4
8
|
|
|
5
9
|
export function generateWalletsScene(
|
|
6
|
-
wallets:
|
|
7
|
-
onWalletSelected: (wallet:
|
|
8
|
-
onSignerSelected: (
|
|
10
|
+
wallets: WalletWithSigners[],
|
|
11
|
+
onWalletSelected: (wallet: WalletWithSigners) => unknown,
|
|
12
|
+
onSignerSelected: (
|
|
13
|
+
wallet: WalletWithSigners,
|
|
14
|
+
signer: ccc.SignerInfo,
|
|
15
|
+
) => unknown,
|
|
9
16
|
) {
|
|
17
|
+
const recommendedWallets = [
|
|
18
|
+
{
|
|
19
|
+
name: "MetaMask",
|
|
20
|
+
icon: METAMASK_SVG,
|
|
21
|
+
downloadLink: `https://metamask.app.link/dapp/${window.location.href}`,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "OKX Wallet",
|
|
25
|
+
icon: OKX_SVG,
|
|
26
|
+
downloadLink: "https://www.okx.com/zh-hans/download",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "UniSat",
|
|
30
|
+
icon: UNI_SAT_SVG,
|
|
31
|
+
downloadLink: "https://unisat.io/",
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const missingWallets = recommendedWallets.filter(
|
|
36
|
+
(recommendedWallet) =>
|
|
37
|
+
!wallets.some((wallet) => wallet.name === recommendedWallet.name),
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
const additionalButtons = missingWallets.map(
|
|
41
|
+
(wallet: WalletInfo) => html`
|
|
42
|
+
<button
|
|
43
|
+
class="btn-primary mb-1"
|
|
44
|
+
@click=${() => {
|
|
45
|
+
window.open(wallet.downloadLink, "_blank");
|
|
46
|
+
}}
|
|
47
|
+
>
|
|
48
|
+
<img src=${wallet.icon} alt=${wallet.name} />
|
|
49
|
+
${wallet.name}
|
|
50
|
+
</button>
|
|
51
|
+
`,
|
|
52
|
+
);
|
|
53
|
+
|
|
10
54
|
return [
|
|
11
55
|
"Connect Wallet",
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
56
|
+
html`
|
|
57
|
+
${repeat(
|
|
58
|
+
wallets,
|
|
59
|
+
(wallet) => wallet.name,
|
|
60
|
+
(wallet) => html`
|
|
61
|
+
<button
|
|
62
|
+
class="btn-primary mb-1"
|
|
63
|
+
@click=${async () => {
|
|
64
|
+
if (wallet.signers.length === 1) {
|
|
65
|
+
onSignerSelected(wallet, wallet.signers[0]);
|
|
66
|
+
} else {
|
|
67
|
+
onWalletSelected(wallet);
|
|
68
|
+
}
|
|
69
|
+
}}
|
|
70
|
+
>
|
|
71
|
+
<img src=${wallet.icon} alt=${wallet.name} />
|
|
72
|
+
${wallet.name}
|
|
73
|
+
</button>
|
|
74
|
+
`,
|
|
75
|
+
)}
|
|
76
|
+
${additionalButtons}
|
|
77
|
+
`,
|
|
31
78
|
];
|
|
32
79
|
}
|
package/dist/status/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/status/index.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,eAAe,oBAAoB;IACnC,UAAU,eAAe;IACzB,IAAI,SAAS;CACd"}
|
package/dist/status/index.js
DELETED