@ckb-ccc/connector 0.0.5-alpha.1 → 0.0.5-alpha.11
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/assets/chains/ckb.sm.svg.d.ts +2 -0
- package/dist/assets/chains/ckb.sm.svg.d.ts.map +1 -0
- package/dist/assets/chains/ckb.sm.svg.js +2 -0
- package/dist/assets/copy.svg.d.ts +2 -0
- package/dist/assets/copy.svg.d.ts.map +1 -0
- package/dist/assets/copy.svg.js +2 -0
- package/dist/assets/diconnect.svg.d.ts +2 -0
- package/dist/assets/diconnect.svg.d.ts.map +1 -0
- package/dist/assets/diconnect.svg.js +2 -0
- package/dist/assets/swap.svg.d.ts +2 -0
- package/dist/assets/swap.svg.d.ts.map +1 -0
- package/dist/assets/swap.svg.js +2 -0
- package/dist/connector/index.d.ts +6 -2
- package/dist/connector/index.d.ts.map +1 -1
- package/dist/connector/index.js +276 -84
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +5 -0
- package/dist/scenes/connected.d.ts +4 -0
- package/dist/scenes/connected.d.ts.map +1 -0
- package/dist/scenes/connected.js +71 -0
- package/dist/scenes/connecting.d.ts +1 -1
- package/dist/scenes/connecting.d.ts.map +1 -1
- package/dist/scenes/connecting.js +9 -3
- package/dist/scenes/networks.d.ts +3 -0
- package/dist/scenes/networks.d.ts.map +1 -0
- package/dist/scenes/networks.js +38 -0
- package/dist/scenes/signers.d.ts.map +1 -1
- package/dist/scenes/signers.js +5 -2
- package/dist/scenes/wallets.d.ts +1 -1
- package/dist/scenes/wallets.d.ts.map +1 -1
- package/dist/scenes/wallets.js +9 -44
- package/package.json +3 -3
- package/src/assets/chains/ckb.sm.svg.ts +5 -0
- package/src/assets/copy.svg.ts +5 -0
- package/src/assets/diconnect.svg.ts +5 -0
- package/src/assets/swap.svg.ts +5 -0
- package/src/connector/index.ts +328 -108
- package/src/events/index.ts +6 -0
- package/src/scenes/connected.ts +87 -0
- package/src/scenes/connecting.ts +9 -2
- package/src/scenes/networks.ts +47 -0
- package/src/scenes/signers.ts +5 -2
- package/src/scenes/wallets.ts +20 -63
- package/dist.commonjs/tsconfig.commonjs.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ckb.sm.svg.d.ts","sourceRoot":"","sources":["../../../src/assets/chains/ckb.sm.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,QAEtB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { encodeSvgToImgSrc } from "../utils";
|
|
2
|
+
export const CKB_SM_SVG = encodeSvgToImgSrc('<svg width="19" height="18" viewBox="0 0 19 18" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_221_415)"><path d="M0.666992 9C0.666992 11.3869 1.6152 13.6761 3.30303 15.364C4.99086 17.0518 7.28004 18 9.66699 18C12.0539 18 14.3431 17.0518 16.031 15.364C17.7188 13.6761 18.667 11.3869 18.667 9C18.667 6.61305 17.7188 4.32387 16.031 2.63604C14.3431 0.948212 12.0539 0 9.66699 0C7.28004 0 4.99086 0.948212 3.30303 2.63604C1.6152 4.32387 0.666992 6.61305 0.666992 9Z" fill="#333333"/><path d="M5.51318 4.84619V12.9231H7.60395V8.52235H9.20549L5.51318 4.84619Z" fill="white"/><path d="M11.73 4.84619V9.24696H10.1284L13.8207 12.9231V4.84619H11.73Z" fill="white"/></g><defs><clipPath id="clip0_221_415"><rect width="18" height="18" fill="white" transform="translate(0.666992)"/></clipPath></defs></svg>');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.svg.d.ts","sourceRoot":"","sources":["../../src/assets/copy.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAEpB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { encodeSvgToImgSrc } from "./utils";
|
|
2
|
+
export const COPY_SVG = encodeSvgToImgSrc('<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 13.5657V6.10526C19 5.49737 18.5091 5 17.9091 5H10.5454C9.94543 5 9.45452 5.49737 9.45452 6.10526V13.5657C9.45452 14.1736 9.94543 14.671 10.5454 14.671H17.9091C18.5091 14.671 19 14.1736 19 13.5657Z" fill="#999999"/><path d="M14.5455 15.8684H9.18183C8.58183 15.8684 8.09092 15.3711 8.09092 14.7632V9.329H6.09091C5.49091 9.329 5 9.82637 5 10.4343V17.8947C5 18.5026 5.49091 19 6.09091 19H13.4546C14.0546 19 14.5455 18.5026 14.5455 17.8947V15.8684Z" fill="#999999"/></svg>');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diconnect.svg.d.ts","sourceRoot":"","sources":["../../src/assets/diconnect.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,QAE1B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { encodeSvgToImgSrc } from "./utils";
|
|
2
|
+
export const DISCONNECT_SVG = encodeSvgToImgSrc('<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect width="32" height="32" rx="8" fill="#DDDDDD"/><path d="M20.375 16.875H14.25V15.125H20.375L19.5 13.375H21.25L23 16L21.25 18.625H19.5L20.375 16.875ZM20.9509 11.051L19.7128 12.2886C19.226 11.8 18.6473 11.4125 18.0101 11.1484C17.3729 10.8844 16.6897 10.749 16 10.75C13.1006 10.75 10.75 13.1006 10.75 16C10.75 18.8994 13.1006 21.25 16 21.25C17.4107 21.25 18.7309 20.6923 19.71 19.7147L20.9462 20.9532C20.297 21.6031 19.5259 22.1184 18.6771 22.4696C17.8283 22.8209 16.9186 23.0011 16 23C12.1341 23 9 19.8659 9 16C9 12.1341 12.1341 9 16 9C17.8816 9 19.647 9.74667 20.9509 11.051Z" fill="#666666"/></svg>');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swap.svg.d.ts","sourceRoot":"","sources":["../../src/assets/swap.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAEpB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { encodeSvgToImgSrc } from "./utils";
|
|
2
|
+
export const SWAP_SVG = encodeSvgToImgSrc('<svg width="13" height="12" viewBox="0 0 13 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.30688 5.22537L11.1669 3.36536L9.30688 1.50537" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.16699 3.36523H11.167" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/><path d="M4.02698 6.77539L2.16699 8.63541L4.02698 10.4954" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.167 8.63525H2.16699" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/></svg>');
|
|
@@ -3,9 +3,8 @@ import { LitElement, PropertyValues } from "lit";
|
|
|
3
3
|
import { Ref } from "lit/directives/ref.js";
|
|
4
4
|
export declare class WebComponentConnector extends LitElement {
|
|
5
5
|
private wallets;
|
|
6
|
+
signerFilter?: (signerInfo: ccc.SignerInfo, wallet: ccc.Wallet) => Promise<boolean>;
|
|
6
7
|
private resetListeners;
|
|
7
|
-
isOpen: boolean;
|
|
8
|
-
setIsOpen(isOpen: boolean): void;
|
|
9
8
|
name?: string;
|
|
10
9
|
icon?: string;
|
|
11
10
|
client: ccc.Client;
|
|
@@ -13,10 +12,15 @@ export declare class WebComponentConnector extends LitElement {
|
|
|
13
12
|
private scene;
|
|
14
13
|
private selectedWallet?;
|
|
15
14
|
private selectedSigner?;
|
|
15
|
+
private connectingError?;
|
|
16
16
|
private walletName?;
|
|
17
17
|
private signerName?;
|
|
18
18
|
wallet?: ccc.Wallet;
|
|
19
19
|
signer?: ccc.SignerInfo;
|
|
20
|
+
private recommendAddress?;
|
|
21
|
+
private internalAddress?;
|
|
22
|
+
private balance?;
|
|
23
|
+
private updateSignerInfo;
|
|
20
24
|
private prepareSigner;
|
|
21
25
|
disconnect(): void;
|
|
22
26
|
private loadConnection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAa,MAAM,KAAK,CAAC;AAE5D,OAAO,EAAE,GAAG,EAAkB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAa,MAAM,KAAK,CAAC;AAE5D,OAAO,EAAE,GAAG,EAAkB,MAAM,uBAAuB,CAAC;AAyB5D,qBACa,qBAAsB,SAAQ,UAAU;IAEnD,OAAO,CAAC,OAAO,CAA2B;IAEnC,YAAY,CAAC,EAAE,CACpB,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,KACf,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB,OAAO,CAAC,cAAc,CAAsB;IAGrC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,EAAE,GAAG,CAAC,MAAM,CAAiC;IACnD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;IAKnC,OAAO,CAAC,KAAK,CAAiC;IAE9C,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,OAAO,CAAC,eAAe,CAAC,CAAS;IAGjC,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B,OAAO,CAAC,UAAU,CAAC,CAAS;IAErB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEpB,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;IAG/B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAElC,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,OAAO,CAAC,CAAU;YAEZ,gBAAgB;YAUhB,aAAa;IAYpB,UAAU;IAQjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAUtB,iBAAiB,IAAI,IAAI;IAMzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAoCnD,OAAO,CAAC,aAAa;YA6FP,SAAS;IAyCvB,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,CAAe;IAC3C,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAe;IAC7C,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,CAAe;IAE3C,MAAM;IA+FN,OAAO;IAUP,OAAO,CAAC,aAAa,CAgBnB;IAEF,OAAO,CAAC,qBAAqB,CAqC3B;IAEF,MAAM,CAAC,MAAM,0BAsPX;CACH"}
|
package/dist/connector/index.js
CHANGED
|
@@ -11,23 +11,26 @@ import { createRef, ref } from "lit/directives/ref.js";
|
|
|
11
11
|
import { CLOSE_SVG } from "../assets/close.svg";
|
|
12
12
|
import { JOY_ID_SVG } from "../assets/joy-id.svg";
|
|
13
13
|
import { LEFT_SVG } from "../assets/left.svg";
|
|
14
|
+
import { METAMASK_SVG } from "../assets/metamask.svg";
|
|
14
15
|
import { OKX_SVG } from "../assets/okx.svg";
|
|
15
16
|
import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
|
|
16
|
-
import { WillUpdateEvent } from "../events";
|
|
17
|
+
import { ClosedEvent, WillUpdateEvent } from "../events";
|
|
17
18
|
import { generateConnectingScene, generateSignersScene, generateWalletsScene, } from "../scenes";
|
|
19
|
+
import { generateConnectedScene } from "../scenes/connected";
|
|
20
|
+
import { generateNetworksScene } from "../scenes/networks";
|
|
18
21
|
var Scene;
|
|
19
22
|
(function (Scene) {
|
|
20
23
|
Scene["SelectingWallets"] = "SelectingWallets";
|
|
21
24
|
Scene["SelectingSigners"] = "SelectingSigners";
|
|
22
25
|
Scene["Connecting"] = "Connecting";
|
|
23
26
|
Scene["Connected"] = "Connected";
|
|
27
|
+
Scene["SwitchingNetworks"] = "SwitchingNetworks";
|
|
24
28
|
})(Scene || (Scene = {}));
|
|
25
29
|
let WebComponentConnector = class WebComponentConnector extends LitElement {
|
|
26
30
|
constructor() {
|
|
27
31
|
super(...arguments);
|
|
28
32
|
this.wallets = [];
|
|
29
33
|
this.resetListeners = [];
|
|
30
|
-
this.isOpen = false;
|
|
31
34
|
this.client = new ccc.ClientPublicTestnet();
|
|
32
35
|
this.scene = Scene.SelectingWallets;
|
|
33
36
|
this.mainRef = createRef();
|
|
@@ -43,47 +46,76 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
|
|
|
43
46
|
this.selectedSigner = undefined;
|
|
44
47
|
this.selectedWallet = undefined;
|
|
45
48
|
}
|
|
46
|
-
this.
|
|
49
|
+
else if ([Scene.SwitchingNetworks].includes(this.scene)) {
|
|
50
|
+
this.scene = Scene.Connected;
|
|
51
|
+
}
|
|
52
|
+
this.dispatchEvent(new ClosedEvent());
|
|
47
53
|
};
|
|
48
|
-
this.signerSelectedHandler = (wallet,
|
|
54
|
+
this.signerSelectedHandler = (wallet, signerInfo) => {
|
|
49
55
|
this.scene = Scene.Connecting;
|
|
56
|
+
this.connectingError = undefined;
|
|
50
57
|
this.selectedWallet = wallet;
|
|
51
|
-
this.selectedSigner =
|
|
58
|
+
this.selectedSigner = signerInfo;
|
|
52
59
|
(async () => {
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
const { signer } = signerInfo;
|
|
61
|
+
try {
|
|
62
|
+
await signer.connect();
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (typeof error === "object") {
|
|
66
|
+
const message = error?.message;
|
|
67
|
+
if (typeof message === "string") {
|
|
68
|
+
this.connectingError = message;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.connectingError = JSON.stringify(message);
|
|
72
|
+
}
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.connectingError = JSON.stringify(error);
|
|
76
|
+
}
|
|
77
|
+
if (!(await signer.isConnected())) {
|
|
55
78
|
return;
|
|
56
79
|
}
|
|
57
80
|
this.scene = Scene.Connected;
|
|
58
81
|
this.walletName = wallet.name;
|
|
59
|
-
this.signerName =
|
|
82
|
+
this.signerName = signerInfo.name;
|
|
60
83
|
this.saveConnection();
|
|
61
84
|
this.closedHandler();
|
|
85
|
+
this.internalAddress = await signer.getInternalAddress();
|
|
86
|
+
this.recommendAddress = await signer.getRecommendedAddress();
|
|
87
|
+
this.balance = await signer.getBalance();
|
|
62
88
|
})();
|
|
63
89
|
};
|
|
64
90
|
}
|
|
65
|
-
setIsOpen(isOpen) {
|
|
66
|
-
this.isOpen = isOpen;
|
|
67
|
-
}
|
|
68
91
|
setClient(client) {
|
|
69
92
|
this.client = client;
|
|
70
93
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
94
|
+
async updateSignerInfo() {
|
|
95
|
+
const signer = this.signer?.signer;
|
|
96
|
+
if (!signer) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.recommendAddress = await signer.getRecommendedAddress();
|
|
100
|
+
this.internalAddress = await signer.getInternalAddress();
|
|
101
|
+
this.balance = await signer.getBalance();
|
|
102
|
+
}
|
|
103
|
+
async prepareSigner() {
|
|
104
|
+
if (this.signer && (await this.signer.signer.isConnected())) {
|
|
105
|
+
await this.updateSignerInfo();
|
|
106
|
+
this.scene = Scene.Connected;
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.wallet = undefined;
|
|
110
|
+
this.signer = undefined;
|
|
111
|
+
this.scene = Scene.SelectingWallets;
|
|
81
112
|
}
|
|
82
113
|
disconnect() {
|
|
83
114
|
this.signer?.signer?.disconnect();
|
|
84
115
|
this.walletName = undefined;
|
|
85
116
|
this.signerName = undefined;
|
|
86
117
|
this.saveConnection();
|
|
118
|
+
this.closedHandler();
|
|
87
119
|
}
|
|
88
120
|
loadConnection() {
|
|
89
121
|
const { signerName, walletName, } = JSON.parse(window.localStorage.getItem("ccc-connection-info") ?? "{}");
|
|
@@ -102,17 +134,26 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
|
|
|
102
134
|
this.reloadSigners();
|
|
103
135
|
}
|
|
104
136
|
willUpdate(changedProperties) {
|
|
105
|
-
if (changedProperties.has("client")
|
|
137
|
+
if (changedProperties.has("client") ||
|
|
138
|
+
changedProperties.has("signerFilter")) {
|
|
106
139
|
this.reloadSigners();
|
|
107
140
|
}
|
|
108
|
-
if (changedProperties.has("
|
|
109
|
-
changedProperties.has("wallets")
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
141
|
+
if ((changedProperties.has("scene") && this.scene === Scene.Connected) ||
|
|
142
|
+
changedProperties.has("wallets") ||
|
|
143
|
+
changedProperties.has("walletName") ||
|
|
144
|
+
changedProperties.has("signerName")) {
|
|
145
|
+
(async () => {
|
|
146
|
+
const wallet = this.wallets.find(({ name }) => name === this.walletName);
|
|
147
|
+
const signer = wallet?.signers.find(({ name }) => name === this.signerName);
|
|
148
|
+
if (signer && (await signer.signer.isConnected())) {
|
|
149
|
+
this.wallet = wallet;
|
|
150
|
+
this.signer = signer;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
this.wallet = undefined;
|
|
154
|
+
this.signer = undefined;
|
|
155
|
+
}
|
|
156
|
+
})();
|
|
116
157
|
}
|
|
117
158
|
if (changedProperties.has("signer")) {
|
|
118
159
|
this.prepareSigner();
|
|
@@ -122,12 +163,13 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
|
|
|
122
163
|
reloadSigners() {
|
|
123
164
|
this.wallets = [];
|
|
124
165
|
(async () => {
|
|
125
|
-
|
|
166
|
+
const signer = this.signer;
|
|
167
|
+
if (!signer) {
|
|
126
168
|
return;
|
|
127
169
|
}
|
|
170
|
+
await signer.signer.replaceClient(this.client);
|
|
128
171
|
this.signer = {
|
|
129
|
-
...
|
|
130
|
-
signer: await this.signer.signer.replaceClient(this.client),
|
|
172
|
+
...signer,
|
|
131
173
|
};
|
|
132
174
|
})();
|
|
133
175
|
this.resetListeners.forEach((listener) => listener());
|
|
@@ -136,45 +178,72 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
|
|
|
136
178
|
document.querySelector("head title").text;
|
|
137
179
|
const icon = this.icon ??
|
|
138
180
|
document.querySelector('link[rel="icon"]').href;
|
|
139
|
-
ccc.JoyId.getJoyIdSigners(this.client, name, icon).forEach(({ signer,
|
|
140
|
-
this.addSigner("JoyID", name, JOY_ID_SVG,
|
|
181
|
+
ccc.JoyId.getJoyIdSigners(this.client, name, icon).forEach(({ signer, name }) => {
|
|
182
|
+
this.addSigner("JoyID", name, JOY_ID_SVG, signer);
|
|
141
183
|
});
|
|
142
184
|
const uniSatSigner = ccc.UniSat.getUniSatSigner(this.client);
|
|
143
185
|
if (uniSatSigner) {
|
|
144
|
-
this.addSigner("UniSat", "BTC", UNI_SAT_SVG,
|
|
186
|
+
this.addSigner("UniSat", "BTC", UNI_SAT_SVG, uniSatSigner);
|
|
145
187
|
}
|
|
146
188
|
const okxBitcoinSigner = ccc.Okx.getOKXBitcoinSigner(this.client);
|
|
147
189
|
if (okxBitcoinSigner) {
|
|
148
|
-
this.addSigner("OKX Wallet", "BTC", OKX_SVG,
|
|
190
|
+
this.addSigner("OKX Wallet", "BTC", OKX_SVG, okxBitcoinSigner);
|
|
149
191
|
}
|
|
150
192
|
const eip6963Manager = new ccc.Eip6963.SignerFactory(this.client);
|
|
151
193
|
this.resetListeners.push(eip6963Manager.subscribeSigners((signer) => {
|
|
152
|
-
this.addSigner(`${signer.detail.info.name}`, "EVM", signer.detail.info.icon,
|
|
194
|
+
this.addSigner(`${signer.detail.info.name}`, "EVM", signer.detail.info.icon, signer);
|
|
153
195
|
}));
|
|
196
|
+
// === Dummy signers ===
|
|
197
|
+
this.addSigner("MetaMask", "EVM", METAMASK_SVG, new ccc.SignerOpenLink(this.client, ccc.SignerType.EVM, `https://metamask.app.link/dapp/${window.location.href}`));
|
|
198
|
+
[ccc.SignerType.EVM, ccc.SignerType.BTC].forEach((type) => {
|
|
199
|
+
this.addSigner("OKX Wallet", type, OKX_SVG, new ccc.SignerOpenLink(this.client, type, "https://www.okx.com/download?deeplink=" +
|
|
200
|
+
encodeURIComponent("okx://wallet/dapp/url?dappUrl=" +
|
|
201
|
+
encodeURIComponent(window.location.href))));
|
|
202
|
+
});
|
|
203
|
+
this.addSigner("UniSat", ccc.SignerType.BTC, UNI_SAT_SVG, new ccc.SignerOpenLink(this.client, ccc.SignerType.BTC, "https://unisat.io/download"));
|
|
204
|
+
// ===
|
|
154
205
|
}
|
|
155
|
-
addSigner(walletName, signerName, icon,
|
|
206
|
+
async addSigner(walletName, signerName, icon, signer) {
|
|
207
|
+
const signerInfo = { name: signerName, signer };
|
|
208
|
+
if (this.signerFilter &&
|
|
209
|
+
!(await this.signerFilter(signerInfo, { name: walletName, icon }))) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
156
212
|
let updated = false;
|
|
157
213
|
const wallets = this.wallets.map((wallet) => {
|
|
158
214
|
if (wallet.name !== walletName) {
|
|
159
215
|
return wallet;
|
|
160
216
|
}
|
|
161
217
|
updated = true;
|
|
218
|
+
const allSigners = [...wallet.signers, signerInfo];
|
|
219
|
+
const signers = allSigners.filter(({ signer }) => !(signer instanceof ccc.SignerDummy));
|
|
162
220
|
return {
|
|
163
221
|
...wallet,
|
|
164
|
-
signers:
|
|
222
|
+
signers: signers.length !== 0 ? signers : [signerInfo],
|
|
165
223
|
};
|
|
166
224
|
});
|
|
167
225
|
if (!updated) {
|
|
168
226
|
wallets.push({
|
|
169
227
|
name: walletName,
|
|
170
228
|
icon,
|
|
171
|
-
signers: [
|
|
229
|
+
signers: [signerInfo],
|
|
172
230
|
});
|
|
173
231
|
}
|
|
174
232
|
this.wallets = wallets;
|
|
175
233
|
}
|
|
176
234
|
render() {
|
|
177
235
|
const [title, body] = (() => {
|
|
236
|
+
if (this.scene === Scene.Connected && this.wallet && this.signer) {
|
|
237
|
+
return generateConnectedScene(this.wallet, this.signer, this.recommendAddress, this.internalAddress, this.balance, this.disconnect.bind(this), () => {
|
|
238
|
+
this.scene = Scene.SwitchingNetworks;
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
if (this.scene === Scene.SwitchingNetworks) {
|
|
242
|
+
return generateNetworksScene(this.client, (client) => {
|
|
243
|
+
this.setClient(client);
|
|
244
|
+
this.closedHandler();
|
|
245
|
+
});
|
|
246
|
+
}
|
|
178
247
|
if (this.scene === Scene.SelectingWallets || !this.selectedWallet) {
|
|
179
248
|
return generateWalletsScene(this.wallets, (wallet) => {
|
|
180
249
|
this.selectedWallet = wallet;
|
|
@@ -184,53 +253,58 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
|
|
|
184
253
|
if (this.scene === Scene.SelectingSigners || !this.selectedSigner) {
|
|
185
254
|
return generateSignersScene(this.selectedWallet, this.signerSelectedHandler);
|
|
186
255
|
}
|
|
187
|
-
return generateConnectingScene(this.selectedWallet, this.selectedSigner, this.signerSelectedHandler);
|
|
256
|
+
return generateConnectingScene(this.selectedWallet, this.selectedSigner, this.connectingError, this.signerSelectedHandler);
|
|
188
257
|
})();
|
|
189
|
-
const canBack = [
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
--btn-secondary: #ddd;
|
|
198
|
-
color: #1e1e1e;
|
|
199
|
-
--tip-color: #666;
|
|
200
|
-
}
|
|
201
|
-
</style>
|
|
202
|
-
<div
|
|
203
|
-
class="background"
|
|
204
|
-
@click=${(event) => {
|
|
258
|
+
const canBack = [
|
|
259
|
+
Scene.SelectingSigners,
|
|
260
|
+
Scene.Connecting,
|
|
261
|
+
Scene.SwitchingNetworks,
|
|
262
|
+
].includes(this.scene);
|
|
263
|
+
return html ` <div
|
|
264
|
+
class="background"
|
|
265
|
+
@click=${(event) => {
|
|
205
266
|
if (event.target === event.currentTarget) {
|
|
206
267
|
this.closedHandler();
|
|
207
268
|
}
|
|
208
269
|
}}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
270
|
+
>
|
|
271
|
+
<div class="main" ${ref(this.mainRef)}>
|
|
272
|
+
<div
|
|
273
|
+
class="header text-bold fs-lg ${title == null
|
|
274
|
+
? ""
|
|
275
|
+
: "header-divider"}"
|
|
276
|
+
${ref(this.headerRef)}
|
|
277
|
+
>
|
|
278
|
+
<img
|
|
279
|
+
class="back ${canBack ? "active" : ""}"
|
|
280
|
+
src=${LEFT_SVG}
|
|
281
|
+
@click=${() => {
|
|
216
282
|
if (this.scene === Scene.Connecting) {
|
|
217
|
-
this.
|
|
283
|
+
if ((this.selectedWallet?.signers.length ?? 0) <= 1) {
|
|
284
|
+
this.scene = Scene.SelectingWallets;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
this.scene = Scene.SelectingSigners;
|
|
288
|
+
}
|
|
218
289
|
}
|
|
219
290
|
else if (this.scene === Scene.SelectingSigners) {
|
|
220
291
|
this.scene = Scene.SelectingWallets;
|
|
221
292
|
}
|
|
293
|
+
else if (this.scene === Scene.SwitchingNetworks) {
|
|
294
|
+
this.scene = Scene.Connected;
|
|
295
|
+
}
|
|
222
296
|
}}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
</div>
|
|
231
|
-
<div class="body" ${ref(this.bodyRef)}>${body}</div>
|
|
297
|
+
/>
|
|
298
|
+
${title}
|
|
299
|
+
<img
|
|
300
|
+
class="close active"
|
|
301
|
+
src=${CLOSE_SVG}
|
|
302
|
+
@click=${this.closedHandler}
|
|
303
|
+
/>
|
|
232
304
|
</div>
|
|
233
|
-
|
|
305
|
+
<div class="body" ${ref(this.bodyRef)}>${body}</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>`;
|
|
234
308
|
}
|
|
235
309
|
updated() {
|
|
236
310
|
if (!this.mainRef.value) {
|
|
@@ -267,9 +341,18 @@ WebComponentConnector.styles = css `
|
|
|
267
341
|
color: var(--tip-color);
|
|
268
342
|
}
|
|
269
343
|
|
|
270
|
-
.fs-
|
|
344
|
+
.fs-sm {
|
|
345
|
+
font-size: 0.8rem;
|
|
346
|
+
}
|
|
347
|
+
.fs-md {
|
|
348
|
+
font-size: 1rem;
|
|
349
|
+
}
|
|
350
|
+
.fs-lg {
|
|
271
351
|
font-size: 1.2rem;
|
|
272
352
|
}
|
|
353
|
+
.fs-xl {
|
|
354
|
+
font-size: 1.5rem;
|
|
355
|
+
}
|
|
273
356
|
|
|
274
357
|
.mb-1 {
|
|
275
358
|
margin-bottom: 0.7rem;
|
|
@@ -283,6 +366,18 @@ WebComponentConnector.styles = css `
|
|
|
283
366
|
.mt-2 {
|
|
284
367
|
margin-top: 1rem;
|
|
285
368
|
}
|
|
369
|
+
.ml-1 {
|
|
370
|
+
margin-left: 0.7rem;
|
|
371
|
+
}
|
|
372
|
+
.ml-2 {
|
|
373
|
+
margin-left: 1em;
|
|
374
|
+
}
|
|
375
|
+
.mr-1 {
|
|
376
|
+
margin-right: 0.7rem;
|
|
377
|
+
}
|
|
378
|
+
.mr-2 {
|
|
379
|
+
margin-right: 1rem;
|
|
380
|
+
}
|
|
286
381
|
|
|
287
382
|
.background {
|
|
288
383
|
width: 100%;
|
|
@@ -305,8 +400,13 @@ WebComponentConnector.styles = css `
|
|
|
305
400
|
display: flex;
|
|
306
401
|
justify-content: space-between;
|
|
307
402
|
align-items: center;
|
|
308
|
-
padding: 1rem 1.3rem;
|
|
403
|
+
padding: 1rem 1.3rem 0.5rem;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.header-divider {
|
|
407
|
+
padding-bottom: 1rem;
|
|
309
408
|
border-bottom: 1px solid var(--divider);
|
|
409
|
+
margin-bottom: 1rem;
|
|
310
410
|
}
|
|
311
411
|
|
|
312
412
|
.close,
|
|
@@ -324,7 +424,7 @@ WebComponentConnector.styles = css `
|
|
|
324
424
|
}
|
|
325
425
|
|
|
326
426
|
.body {
|
|
327
|
-
padding: 1.
|
|
427
|
+
padding: 0 1.3rem 1.4rem;
|
|
328
428
|
min-width: 20rem;
|
|
329
429
|
display: flex;
|
|
330
430
|
flex-direction: column;
|
|
@@ -341,17 +441,21 @@ WebComponentConnector.styles = css `
|
|
|
341
441
|
border-radius: 0.4rem;
|
|
342
442
|
transition: background 0.15s ease-in-out;
|
|
343
443
|
}
|
|
344
|
-
|
|
345
444
|
.btn-primary img {
|
|
346
445
|
width: 2rem;
|
|
347
446
|
height: 2rem;
|
|
348
447
|
margin-right: 1rem;
|
|
349
448
|
border-radius: 0.4rem;
|
|
350
449
|
}
|
|
351
|
-
|
|
352
450
|
.btn-primary:hover {
|
|
353
451
|
background: var(--btn-primary-hover);
|
|
354
452
|
}
|
|
453
|
+
.btn-primary:disabled {
|
|
454
|
+
cursor: not-allowed;
|
|
455
|
+
}
|
|
456
|
+
.btn-primary:disabled:hover {
|
|
457
|
+
background: var(--btn-primary);
|
|
458
|
+
}
|
|
355
459
|
|
|
356
460
|
.btn-secondary {
|
|
357
461
|
display: flex;
|
|
@@ -361,12 +465,20 @@ WebComponentConnector.styles = css `
|
|
|
361
465
|
border-radius: 9999px;
|
|
362
466
|
transition: background 0.15s ease-in-out;
|
|
363
467
|
}
|
|
364
|
-
|
|
365
468
|
.btn-secondary img {
|
|
366
469
|
width: 0.8rem;
|
|
367
470
|
height: 0.8rem;
|
|
368
471
|
margin-right: 0.5rem;
|
|
369
472
|
}
|
|
473
|
+
.btn-secondary:hover {
|
|
474
|
+
background: var(--btn-secondary-hover);
|
|
475
|
+
}
|
|
476
|
+
.btn-secondary:disabled {
|
|
477
|
+
cursor: not-allowed;
|
|
478
|
+
}
|
|
479
|
+
.btn-secondary:disabled:hover {
|
|
480
|
+
background: var(--btn-secondary);
|
|
481
|
+
}
|
|
370
482
|
|
|
371
483
|
.wallet-icon {
|
|
372
484
|
width: 4rem;
|
|
@@ -380,13 +492,81 @@ WebComponentConnector.styles = css `
|
|
|
380
492
|
height: 5rem;
|
|
381
493
|
border-radius: 1rem;
|
|
382
494
|
}
|
|
495
|
+
|
|
496
|
+
.position-relative {
|
|
497
|
+
position: relative;
|
|
498
|
+
}
|
|
499
|
+
.position-absolute {
|
|
500
|
+
position: absolute;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.connected-type-icon {
|
|
504
|
+
position: absolute;
|
|
505
|
+
width: 1.5rem;
|
|
506
|
+
height: 1.5rem;
|
|
507
|
+
right: -0.5rem;
|
|
508
|
+
bottom: -0.5rem;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.text-center {
|
|
512
|
+
text-align: center;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.cursor-pointer {
|
|
516
|
+
cursor: pointer;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
.flex {
|
|
520
|
+
display: flex;
|
|
521
|
+
}
|
|
522
|
+
.justify-center {
|
|
523
|
+
justify-content: center;
|
|
524
|
+
}
|
|
525
|
+
.justify-between {
|
|
526
|
+
justify-content: space-between;
|
|
527
|
+
}
|
|
528
|
+
.align-center {
|
|
529
|
+
align-items: center;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
.switch-btn-container {
|
|
533
|
+
width: 100%;
|
|
534
|
+
padding: 1rem;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.switch-line {
|
|
538
|
+
flex: 1;
|
|
539
|
+
height: 1px;
|
|
540
|
+
background-color: var(--divider);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.switching-status-dot {
|
|
544
|
+
width: 0.5rem;
|
|
545
|
+
height: 0.5rem;
|
|
546
|
+
background: #0f0;
|
|
547
|
+
border-radius: 50%;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
.copy-btn {
|
|
551
|
+
width: 1.5rem;
|
|
552
|
+
height: 1.5rem;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.copy-btn-sm {
|
|
556
|
+
width: 1rem;
|
|
557
|
+
height: 1rem;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
.sm-chain-logo {
|
|
561
|
+
width: 1.125rem;
|
|
562
|
+
}
|
|
383
563
|
`;
|
|
384
564
|
__decorate([
|
|
385
565
|
state()
|
|
386
566
|
], WebComponentConnector.prototype, "wallets", void 0);
|
|
387
567
|
__decorate([
|
|
388
|
-
|
|
389
|
-
], WebComponentConnector.prototype, "
|
|
568
|
+
property()
|
|
569
|
+
], WebComponentConnector.prototype, "signerFilter", void 0);
|
|
390
570
|
__decorate([
|
|
391
571
|
property()
|
|
392
572
|
], WebComponentConnector.prototype, "name", void 0);
|
|
@@ -405,6 +585,9 @@ __decorate([
|
|
|
405
585
|
__decorate([
|
|
406
586
|
state()
|
|
407
587
|
], WebComponentConnector.prototype, "selectedSigner", void 0);
|
|
588
|
+
__decorate([
|
|
589
|
+
state()
|
|
590
|
+
], WebComponentConnector.prototype, "connectingError", void 0);
|
|
408
591
|
__decorate([
|
|
409
592
|
state()
|
|
410
593
|
], WebComponentConnector.prototype, "walletName", void 0);
|
|
@@ -417,6 +600,15 @@ __decorate([
|
|
|
417
600
|
__decorate([
|
|
418
601
|
state()
|
|
419
602
|
], WebComponentConnector.prototype, "signer", void 0);
|
|
603
|
+
__decorate([
|
|
604
|
+
state()
|
|
605
|
+
], WebComponentConnector.prototype, "recommendAddress", void 0);
|
|
606
|
+
__decorate([
|
|
607
|
+
state()
|
|
608
|
+
], WebComponentConnector.prototype, "internalAddress", void 0);
|
|
609
|
+
__decorate([
|
|
610
|
+
state()
|
|
611
|
+
], WebComponentConnector.prototype, "balance", void 0);
|
|
420
612
|
WebComponentConnector = __decorate([
|
|
421
613
|
customElement("ccc-connector")
|
|
422
614
|
], WebComponentConnector);
|
package/dist/events/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;;CAIzC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;;CAIzC;AAED,qBAAa,WAAY,SAAQ,KAAK;;CAIrC"}
|