@ckb-ccc/connector 0.0.9-alpha.2 → 0.0.10-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.
Files changed (76) hide show
  1. package/dist/assets/chains/index.d.ts +1 -0
  2. package/dist/assets/chains/index.d.ts.map +1 -1
  3. package/dist/assets/chains/index.js +1 -0
  4. package/dist/barrel.d.ts +2 -1
  5. package/dist/barrel.d.ts.map +1 -1
  6. package/dist/barrel.js +2 -1
  7. package/dist/components/button-pill.d.ts +7 -0
  8. package/dist/components/button-pill.d.ts.map +1 -0
  9. package/dist/components/button-pill.js +54 -0
  10. package/dist/components/button.d.ts +7 -0
  11. package/dist/components/button.d.ts.map +1 -0
  12. package/dist/components/button.js +60 -0
  13. package/dist/components/copy-button.d.ts +10 -0
  14. package/dist/components/copy-button.d.ts.map +1 -0
  15. package/dist/components/copy-button.js +76 -0
  16. package/dist/components/dialog.d.ts +8 -0
  17. package/dist/components/dialog.d.ts.map +1 -0
  18. package/dist/components/dialog.js +103 -0
  19. package/dist/components/index.d.ts +5 -0
  20. package/dist/components/index.d.ts.map +1 -0
  21. package/dist/components/index.js +4 -0
  22. package/dist/connector/index.d.ts +8 -21
  23. package/dist/connector/index.d.ts.map +1 -1
  24. package/dist/connector/index.js +59 -496
  25. package/dist/scenes/connected.d.ts +12 -1
  26. package/dist/scenes/connected.d.ts.map +1 -1
  27. package/dist/scenes/connected.js +204 -59
  28. package/dist/scenes/index.d.ts +2 -3
  29. package/dist/scenes/index.d.ts.map +1 -1
  30. package/dist/scenes/index.js +2 -3
  31. package/dist/scenes/{connecting.d.ts → selecting/connecting.d.ts} +1 -1
  32. package/dist/scenes/selecting/connecting.d.ts.map +1 -0
  33. package/dist/scenes/{connecting.js → selecting/connecting.js} +5 -5
  34. package/dist/scenes/selecting/index.d.ts +19 -0
  35. package/dist/scenes/selecting/index.d.ts.map +1 -0
  36. package/dist/scenes/selecting/index.js +164 -0
  37. package/dist/scenes/{signers.d.ts → selecting/signers.d.ts} +1 -1
  38. package/dist/scenes/selecting/signers.d.ts.map +1 -0
  39. package/dist/scenes/{signers.js → selecting/signers.js} +6 -7
  40. package/dist/scenes/{wallets.d.ts → selecting/wallets.d.ts} +1 -1
  41. package/dist/scenes/selecting/wallets.d.ts.map +1 -0
  42. package/dist/scenes/{wallets.js → selecting/wallets.js} +3 -3
  43. package/dist/signers/index.d.ts +28 -0
  44. package/dist/signers/index.d.ts.map +1 -0
  45. package/dist/signers/index.js +104 -0
  46. package/package.json +3 -3
  47. package/src/assets/chains/index.ts +1 -0
  48. package/src/barrel.ts +3 -1
  49. package/src/components/button-pill.ts +48 -0
  50. package/src/components/button.ts +54 -0
  51. package/src/components/copy-button.ts +69 -0
  52. package/src/components/dialog.ts +97 -0
  53. package/src/components/index.ts +4 -0
  54. package/src/connector/index.ts +67 -596
  55. package/src/scenes/connected.ts +197 -68
  56. package/src/scenes/index.ts +2 -3
  57. package/src/scenes/{connecting.ts → selecting/connecting.ts} +6 -6
  58. package/src/scenes/selecting/index.ts +181 -0
  59. package/src/scenes/{signers.ts → selecting/signers.ts} +7 -8
  60. package/src/scenes/{wallets.ts → selecting/wallets.ts} +4 -4
  61. package/src/signers/index.ts +186 -0
  62. package/dist/assets/chains/ckb.sm.svg.d.ts +0 -2
  63. package/dist/assets/chains/ckb.sm.svg.d.ts.map +0 -1
  64. package/dist/assets/chains/ckb.sm.svg.js +0 -2
  65. package/dist/assets/copy.svg.d.ts +0 -2
  66. package/dist/assets/copy.svg.d.ts.map +0 -1
  67. package/dist/assets/copy.svg.js +0 -2
  68. package/dist/events/index.d.ts +0 -7
  69. package/dist/events/index.d.ts.map +0 -1
  70. package/dist/events/index.js +0 -10
  71. package/dist/scenes/connecting.d.ts.map +0 -1
  72. package/dist/scenes/signers.d.ts.map +0 -1
  73. package/dist/scenes/wallets.d.ts.map +0 -1
  74. package/src/assets/chains/ckb.sm.svg.ts +0 -5
  75. package/src/assets/copy.svg.ts +0 -5
  76. package/src/events/index.ts +0 -11
@@ -0,0 +1,186 @@
1
+ import { ccc } from "@ckb-ccc/ccc";
2
+ import { ReactiveController, ReactiveControllerHost } from "lit";
3
+ import { NOSTR_SVG } from "../assets/chains/nostr.svg";
4
+ import { JOY_ID_SVG } from "../assets/joy-id.svg";
5
+ import { METAMASK_SVG } from "../assets/metamask.svg";
6
+ import { OKX_SVG } from "../assets/okx.svg";
7
+ import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
8
+ import { WalletWithSigners } from "../types";
9
+
10
+ export class SignersController implements ReactiveController {
11
+ public wallets: WalletWithSigners[] = [];
12
+
13
+ private resetListeners: (() => void)[] = [];
14
+
15
+ constructor(
16
+ private readonly host: ReactiveControllerHost & {
17
+ client: ccc.Client;
18
+ signerFilter?: (
19
+ signerInfo: ccc.SignerInfo,
20
+ wallet: ccc.Wallet,
21
+ ) => Promise<boolean>;
22
+ preferredNetworks?: ccc.NetworkPreference[];
23
+ name?: string;
24
+ icon?: string;
25
+ refreshSigner: () => void;
26
+ },
27
+ ) {
28
+ host.addController(this);
29
+ }
30
+
31
+ getConfig() {
32
+ const name =
33
+ this.host.name ??
34
+ (document.querySelector("head title") as HTMLTitleElement).text;
35
+ const icon =
36
+ this.host.icon ??
37
+ (document.querySelector('link[rel="icon"]') as HTMLLinkElement).href;
38
+ const preferredNetworks = [
39
+ ...(this.host.preferredNetworks ?? []),
40
+ {
41
+ addressPrefix: "ckb",
42
+ signerType: ccc.SignerType.BTC,
43
+ network: "btc",
44
+ },
45
+ {
46
+ addressPrefix: "ckt",
47
+ signerType: ccc.SignerType.BTC,
48
+ network: "btcTestnet",
49
+ },
50
+ ];
51
+
52
+ return {
53
+ client: this.host.client,
54
+ name,
55
+ icon,
56
+ preferredNetworks,
57
+ };
58
+ }
59
+
60
+ update() {
61
+ this.host.refreshSigner();
62
+ this.host.requestUpdate();
63
+ }
64
+
65
+ refresh() {
66
+ this.resetListeners.forEach((listener) => listener());
67
+ this.resetListeners = [];
68
+
69
+ this.wallets = [];
70
+
71
+ const { client, name, icon, preferredNetworks } = this.getConfig();
72
+
73
+ ccc.JoyId.getJoyIdSigners(client, name, icon, preferredNetworks).forEach(
74
+ ({ signer, name }) => {
75
+ this.addSigner("JoyID", name, JOY_ID_SVG, signer);
76
+ },
77
+ );
78
+
79
+ const uniSatSigner = ccc.UniSat.getUniSatSigner(client, preferredNetworks);
80
+ if (uniSatSigner) {
81
+ this.addSigner("UniSat", "BTC", UNI_SAT_SVG, uniSatSigner);
82
+ }
83
+
84
+ ccc.Okx.getOKXBitcoinSigner(client, preferredNetworks).forEach((signer) => {
85
+ this.addSigner("OKX Wallet", signer.type, OKX_SVG, signer);
86
+ });
87
+
88
+ const nip07Signer = ccc.Nip07.getNip07Signer(client);
89
+ if (nip07Signer) {
90
+ this.addSigner("Nostr", "Nostr", NOSTR_SVG, nip07Signer);
91
+ }
92
+
93
+ const eip6963Manager = new ccc.Eip6963.SignerFactory(client);
94
+ this.resetListeners.push(
95
+ eip6963Manager.subscribeSigners((signer) => {
96
+ this.addSigner(
97
+ `${signer.detail.info.name}`,
98
+ "EVM",
99
+ signer.detail.info.icon,
100
+ signer,
101
+ );
102
+ this.update();
103
+ }),
104
+ );
105
+
106
+ // === Dummy signers ===
107
+ this.addSigner(
108
+ "MetaMask",
109
+ "EVM",
110
+ METAMASK_SVG,
111
+ new ccc.SignerOpenLink(
112
+ client,
113
+ ccc.SignerType.EVM,
114
+ `https://metamask.app.link/dapp/${window.location.href}`,
115
+ ),
116
+ );
117
+ [ccc.SignerType.EVM, ccc.SignerType.BTC].forEach((type) => {
118
+ this.addSigner(
119
+ "OKX Wallet",
120
+ type,
121
+ OKX_SVG,
122
+ new ccc.SignerOpenLink(
123
+ client,
124
+ type,
125
+ "https://www.okx.com/download?deeplink=" +
126
+ encodeURIComponent(
127
+ "okx://wallet/dapp/url?dappUrl=" +
128
+ encodeURIComponent(window.location.href),
129
+ ),
130
+ ),
131
+ );
132
+ });
133
+ this.addSigner(
134
+ "UniSat",
135
+ ccc.SignerType.BTC,
136
+ UNI_SAT_SVG,
137
+ new ccc.SignerOpenLink(
138
+ client,
139
+ ccc.SignerType.BTC,
140
+ "https://unisat.io/download",
141
+ ),
142
+ );
143
+ // ===
144
+ }
145
+
146
+ private async addSigner(
147
+ walletName: string,
148
+ signerName: string,
149
+ icon: string,
150
+ signer: ccc.Signer,
151
+ ) {
152
+ const signerInfo = { name: signerName, signer };
153
+
154
+ const signerFilter = this.host.signerFilter;
155
+ if (
156
+ signerFilter &&
157
+ !(await signerFilter(signerInfo, { name: walletName, icon }))
158
+ ) {
159
+ return;
160
+ }
161
+
162
+ const wallet = this.wallets.find((w) => w.name === walletName);
163
+
164
+ if (!wallet) {
165
+ this.wallets.push({
166
+ name: walletName,
167
+ icon,
168
+ signers: [signerInfo],
169
+ });
170
+ } else {
171
+ const signers = [...wallet.signers, signerInfo].filter(
172
+ ({ signer }) => !(signer instanceof ccc.SignerDummy),
173
+ );
174
+ wallet.signers = signers.length !== 0 ? signers : [signerInfo];
175
+ }
176
+
177
+ this.update();
178
+ }
179
+
180
+ hostConnected(): void {
181
+ this.refresh();
182
+ // Wait for plugins to be loaded
183
+ setTimeout(() => this.refresh(), 100);
184
+ }
185
+ hostDisconnected(): void {}
186
+ }
@@ -1,2 +0,0 @@
1
- export declare const CKB_SM_SVG: string;
2
- //# sourceMappingURL=ckb.sm.svg.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
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>');
@@ -1,2 +0,0 @@
1
- export declare const COPY_SVG: string;
2
- //# sourceMappingURL=copy.svg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copy.svg.d.ts","sourceRoot":"","sources":["../../src/assets/copy.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAEpB,CAAC"}
@@ -1,2 +0,0 @@
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>');
@@ -1,7 +0,0 @@
1
- export declare class WillUpdateEvent extends Event {
2
- constructor();
3
- }
4
- export declare class ClosedEvent extends Event {
5
- constructor();
6
- }
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,10 +0,0 @@
1
- export class WillUpdateEvent extends Event {
2
- constructor() {
3
- super("willUpdate", { composed: true });
4
- }
5
- }
6
- export class ClosedEvent extends Event {
7
- constructor() {
8
- super("closed", { composed: true });
9
- }
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"connecting.d.ts","sourceRoot":"","sources":["../../src/scenes/connecting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,gBAAgB,EAAE,CAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDA2Bb"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"signers.d.ts","sourceRoot":"","sources":["../../src/scenes/signers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAKnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,CAO7D;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,EAAE,CAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDA4Bb"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/scenes/wallets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,gBAAgB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,EACxD,gBAAgB,EAAE,CAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,aAwBb"}
@@ -1,5 +0,0 @@
1
- import { encodeSvgToImgSrc } from "../utils";
2
-
3
- export const CKB_SM_SVG = encodeSvgToImgSrc(
4
- '<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>',
5
- );
@@ -1,5 +0,0 @@
1
- import { encodeSvgToImgSrc } from "./utils";
2
-
3
- export const COPY_SVG = encodeSvgToImgSrc(
4
- '<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>',
5
- );
@@ -1,11 +0,0 @@
1
- export class WillUpdateEvent extends Event {
2
- constructor() {
3
- super("willUpdate", { composed: true });
4
- }
5
- }
6
-
7
- export class ClosedEvent extends Event {
8
- constructor() {
9
- super("closed", { composed: true });
10
- }
11
- }