@ckb-ccc/connector 0.0.5-alpha.8 → 0.0.6-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.
@@ -0,0 +1,2 @@
1
+ export declare const NOSTR_SVG: string;
2
+ //# sourceMappingURL=nostr.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nostr.svg.d.ts","sourceRoot":"","sources":["../../../src/assets/chains/nostr.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,QAErB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "../utils";
2
+ export const NOSTR_SVG = encodeSvgToImgSrc('<svg version="1.1" id="_8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve"><style type="text/css">.st0{fill:none;} .st1{fill:#FFFFFF;} .st2{fill:#662482;}</style><g><path class="st0" d="M0,0v256h256V0H0z M231.2,159.2c0,20.7,0,31.1-3.5,42.2c-4.4,12.2-14,21.8-26.2,26.2 c-11.1,3.5-21.5,3.5-42.2,3.5H96.8c-20.7,0-31.1,0-42.2-3.5c-12.2-4.4-21.8-14-26.2-26.2c-3.5-11.1-3.5-21.5-3.5-42.2V96.8 c0-20.7,0-31.1,3.5-42.2c4.4-12.2,14-21.8,26.2-26.2c11.2-3.5,21.5-3.5,42.2-3.5h62.5c20.7,0,31.1,0,42.2,3.5 c12.2,4.4,21.8,14,26.2,26.2c3.5,11.1,3.5,21.5,3.5,42.2V159.2z"/> <circle class="st1" cx="137.9" cy="99" r="12.1"/><path class="st1" d="M210.8,115.9c0-47.3-27.7-68.7-64.4-68.7c-16.4,0-31,4.4-42.4,12.5c-3.8,2.7-9,0.1-9-4.5 c0-3.1-2.5-5.7-5.7-5.7H57.7c-3.1,0-5.7,2.5-5.7,5.7v144c0,3.1,2.5,5.7,5.7,5.7h33.7c3.1,0,5.6-2.5,5.6-5.6v-8.4 c0-62.8-33.2-109.8-0.4-116c30-5.7,64.1-3,64.5,20.1c0,2,0.3,8,8.6,11.2c5,2,12.6,2.6,22.6,2.4c0,0,9.1-0.7,9.1,8.5 c0,11.5-20.4,10.7-20.4,10.7c-6.7,0.3-22.6-1.5-31.7,1.2c-4.8,1.5-9,4.2-11.5,9.1c-4.2,8.3-6.2,26.5-6.5,45.5v15.5 c0,3.1,2.5,5.7,5.7,5.7h68c3.1,0,5.7-2.5,5.7-5.7l0,0V115.9z"/><path class="st2" d="M227.6,54.6c-4.4-12.2-14-21.8-26.2-26.2c-11.1-3.5-21.5-3.5-42.2-3.5H96.8c-20.7,0-31.1,0-42.2,3.5 c-12.2,4.4-21.8,14-26.2,26.2c-3.5,11.2-3.5,21.5-3.5,42.2v62.5c0,20.7,0,31.1,3.5,42.2c4.4,12.2,14,21.8,26.2,26.2 c11.2,3.5,21.5,3.5,42.2,3.5h62.5c20.7,0,31.1,0,42.2-3.5c12.2-4.4,21.8-14,26.2-26.2c3.5-11.1,3.5-21.5,3.5-42.2V96.8 C231.2,76.1,231.2,65.7,227.6,54.6z M205.1,204.8h-68c-3.1,0-5.7-2.5-5.7-5.7v-15.5c0.3-19,2.3-37.2,6.5-45.5 c2.5-5,6.7-7.7,11.5-9.1c9-2.7,24.9-0.9,31.7-1.2c0,0,20.4,0.8,20.4-10.7c0-9.3-9.1-8.5-9.1-8.5c-10,0.3-17.7-0.4-22.6-2.4 c-8.3-3.3-8.6-9.2-8.6-11.2c-0.4-23.1-34.5-25.9-64.5-20.1c-32.8,6.2,0.4,53.3,0.4,116v8.4c-0.1,3.1-2.5,5.6-5.6,5.6H57.7 c-3.1,0-5.7-2.5-5.7-5.7v-144c0-3.1,2.5-5.7,5.7-5.7h31.7c3.1,0,5.7,2.5,5.7,5.7c0,4.7,5.2,7.2,9,4.5c11.4-8.2,26-12.5,42.4-12.5 c36.7,0,64.4,21.4,64.4,68.7v83.2l0,0C210.8,202.3,208.3,204.8,205.1,204.8z M125.7,99c0-6.7,5.4-12.1,12.1-12.1S150,92.3,150,99 s-5.4,12.1-12.1,12.1S125.7,105.8,125.7,99z"/></g></svg>');
@@ -5,8 +5,6 @@ export declare class WebComponentConnector extends LitElement {
5
5
  private wallets;
6
6
  signerFilter?: (signerInfo: ccc.SignerInfo, wallet: ccc.Wallet) => Promise<boolean>;
7
7
  private resetListeners;
8
- isOpen: boolean;
9
- setIsOpen(isOpen: boolean): void;
10
8
  name?: string;
11
9
  icon?: string;
12
10
  client: ccc.Client;
@@ -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;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,MAAM,EAAE,OAAO,CAAS;IACxB,SAAS,CAAC,MAAM,EAAE,OAAO;IAKzB,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;YA2FP,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;IA4GN,OAAO;IAUP,OAAO,CAAC,aAAa,CAgBnB;IAEF,OAAO,CAAC,qBAAqB,CAqC3B;IAEF,MAAM,CAAC,MAAM,0BAsPX;CACH"}
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;AA0B5D,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;IAOjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAUtB,iBAAiB,IAAI,IAAI;IAMzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAoCnD,OAAO,CAAC,aAAa;YAoGP,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"}
@@ -8,13 +8,14 @@ import { ccc } from "@ckb-ccc/ccc";
8
8
  import { LitElement, css, html } from "lit";
9
9
  import { customElement, property, state } from "lit/decorators.js";
10
10
  import { createRef, ref } from "lit/directives/ref.js";
11
+ import { NOSTR_SVG } from "../assets/chains/nostr.svg";
11
12
  import { CLOSE_SVG } from "../assets/close.svg";
12
13
  import { JOY_ID_SVG } from "../assets/joy-id.svg";
13
14
  import { LEFT_SVG } from "../assets/left.svg";
14
15
  import { METAMASK_SVG } from "../assets/metamask.svg";
15
16
  import { OKX_SVG } from "../assets/okx.svg";
16
17
  import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
17
- import { WillUpdateEvent } from "../events";
18
+ import { ClosedEvent, WillUpdateEvent } from "../events";
18
19
  import { generateConnectingScene, generateSignersScene, generateWalletsScene, } from "../scenes";
19
20
  import { generateConnectedScene } from "../scenes/connected";
20
21
  import { generateNetworksScene } from "../scenes/networks";
@@ -31,7 +32,6 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
31
32
  super(...arguments);
32
33
  this.wallets = [];
33
34
  this.resetListeners = [];
34
- this.isOpen = false;
35
35
  this.client = new ccc.ClientPublicTestnet();
36
36
  this.scene = Scene.SelectingWallets;
37
37
  this.mainRef = createRef();
@@ -50,7 +50,7 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
50
50
  else if ([Scene.SwitchingNetworks].includes(this.scene)) {
51
51
  this.scene = Scene.Connected;
52
52
  }
53
- this.isOpen = false;
53
+ this.dispatchEvent(new ClosedEvent());
54
54
  };
55
55
  this.signerSelectedHandler = (wallet, signerInfo) => {
56
56
  this.scene = Scene.Connecting;
@@ -89,9 +89,6 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
89
89
  })();
90
90
  };
91
91
  }
92
- setIsOpen(isOpen) {
93
- this.isOpen = isOpen;
94
- }
95
92
  setClient(client) {
96
93
  this.client = client;
97
94
  }
@@ -115,7 +112,6 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
115
112
  this.scene = Scene.SelectingWallets;
116
113
  }
117
114
  disconnect() {
118
- this.signer?.signer?.disconnect();
119
115
  this.walletName = undefined;
120
116
  this.signerName = undefined;
121
117
  this.saveConnection();
@@ -167,13 +163,18 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
167
163
  reloadSigners() {
168
164
  this.wallets = [];
169
165
  (async () => {
170
- if (!this.signer) {
166
+ const signer = this.signer;
167
+ if (!signer) {
171
168
  return;
172
169
  }
173
- this.signer = {
174
- ...this.signer,
175
- signer: await this.signer.signer.replaceClient(this.client),
176
- };
170
+ if (await signer.signer.replaceClient(this.client)) {
171
+ this.signer = {
172
+ ...signer,
173
+ };
174
+ }
175
+ else {
176
+ this.signer = undefined;
177
+ }
177
178
  })();
178
179
  this.resetListeners.forEach((listener) => listener());
179
180
  this.resetListeners = [];
@@ -192,6 +193,10 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
192
193
  if (okxBitcoinSigner) {
193
194
  this.addSigner("OKX Wallet", "BTC", OKX_SVG, okxBitcoinSigner);
194
195
  }
196
+ const nip07Signer = ccc.Nip07.getNip07Signer(this.client);
197
+ if (nip07Signer) {
198
+ this.addSigner("Nostr", "Nostr", NOSTR_SVG, nip07Signer);
199
+ }
195
200
  const eip6963Manager = new ccc.Eip6963.SignerFactory(this.client);
196
201
  this.resetListeners.push(eip6963Manager.subscribeSigners((signer) => {
197
202
  this.addSigner(`${signer.detail.info.name}`, "EVM", signer.detail.info.icon, signer);
@@ -263,38 +268,25 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
263
268
  Scene.Connecting,
264
269
  Scene.SwitchingNetworks,
265
270
  ].includes(this.scene);
266
- return html `<style>
267
- :host {
268
- ${this.isOpen ? "" : "display: none;"}
269
- --background: #fff;
270
- --divider: #eee;
271
- --btn-primary: #f8f8f8;
272
- --btn-primary-hover: #efeeee;
273
- --btn-secondary: #ddd;
274
- --btn-secondary-hover: #ccc;
275
- color: #1e1e1e;
276
- --tip-color: #666;
277
- }
278
- </style>
279
- <div
280
- class="background"
281
- @click=${(event) => {
271
+ return html ` <div
272
+ class="background"
273
+ @click=${(event) => {
282
274
  if (event.target === event.currentTarget) {
283
275
  this.closedHandler();
284
276
  }
285
277
  }}
286
- >
287
- <div class="main" ${ref(this.mainRef)}>
288
- <div
289
- class="header text-bold fs-lg ${title == null
278
+ >
279
+ <div class="main" ${ref(this.mainRef)}>
280
+ <div
281
+ class="header text-bold fs-lg ${title == null
290
282
  ? ""
291
283
  : "header-divider"}"
292
- ${ref(this.headerRef)}
293
- >
294
- <img
295
- class="back ${canBack ? "active" : ""}"
296
- src=${LEFT_SVG}
297
- @click=${() => {
284
+ ${ref(this.headerRef)}
285
+ >
286
+ <img
287
+ class="back ${canBack ? "active" : ""}"
288
+ src=${LEFT_SVG}
289
+ @click=${() => {
298
290
  if (this.scene === Scene.Connecting) {
299
291
  if ((this.selectedWallet?.signers.length ?? 0) <= 1) {
300
292
  this.scene = Scene.SelectingWallets;
@@ -310,17 +302,17 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
310
302
  this.scene = Scene.Connected;
311
303
  }
312
304
  }}
313
- />
314
- ${title}
315
- <img
316
- class="close active"
317
- src=${CLOSE_SVG}
318
- @click=${this.closedHandler}
319
- />
320
- </div>
321
- <div class="body" ${ref(this.bodyRef)}>${body}</div>
305
+ />
306
+ ${title}
307
+ <img
308
+ class="close active"
309
+ src=${CLOSE_SVG}
310
+ @click=${this.closedHandler}
311
+ />
322
312
  </div>
323
- </div>`;
313
+ <div class="body" ${ref(this.bodyRef)}>${body}</div>
314
+ </div>
315
+ </div>`;
324
316
  }
325
317
  updated() {
326
318
  if (!this.mainRef.value) {
@@ -583,9 +575,6 @@ __decorate([
583
575
  __decorate([
584
576
  property()
585
577
  ], WebComponentConnector.prototype, "signerFilter", void 0);
586
- __decorate([
587
- state()
588
- ], WebComponentConnector.prototype, "isOpen", void 0);
589
578
  __decorate([
590
579
  property()
591
580
  ], WebComponentConnector.prototype, "name", void 0);
@@ -1,4 +1,7 @@
1
1
  export declare class WillUpdateEvent extends Event {
2
2
  constructor();
3
3
  }
4
+ export declare class ClosedEvent extends Event {
5
+ constructor();
6
+ }
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -3,3 +3,8 @@ export class WillUpdateEvent extends Event {
3
3
  super("willUpdate", { composed: true });
4
4
  }
5
5
  }
6
+ export class ClosedEvent extends Event {
7
+ constructor() {
8
+ super("closed", { composed: true });
9
+ }
10
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"signers.d.ts","sourceRoot":"","sources":["../../src/scenes/signers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAInC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,CAM7D;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,EAAE,CAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDA4Bb"}
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"}
@@ -2,11 +2,13 @@ import { ccc } from "@ckb-ccc/ccc";
2
2
  import { html } from "lit";
3
3
  import { repeat } from "lit/directives/repeat.js";
4
4
  import { BTC_SVG, CKB_SVG, ETH_SVG } from "../assets/chains";
5
+ import { NOSTR_SVG } from "../assets/chains/nostr.svg";
5
6
  export function signerTypeToIcon(type) {
6
7
  return {
7
8
  [ccc.SignerType.BTC]: BTC_SVG,
8
9
  [ccc.SignerType.EVM]: ETH_SVG,
9
10
  [ccc.SignerType.CKB]: CKB_SVG,
11
+ [ccc.SignerType.Nostr]: NOSTR_SVG,
10
12
  }[type];
11
13
  }
12
14
  export function generateSignersScene(wallet, onSignerSelected) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckb-ccc/connector",
3
- "version": "0.0.5-alpha.8",
3
+ "version": "0.0.6-alpha.0",
4
4
  "description": "Common Chains Connector UI",
5
5
  "author": "Hanssen0 <hanssen0@hanssen0.com>",
6
6
  "license": "MIT",
@@ -37,8 +37,8 @@
37
37
  "access": "public"
38
38
  },
39
39
  "dependencies": {
40
- "@ckb-ccc/ccc": "0.0.5-alpha.8",
40
+ "@ckb-ccc/ccc": "0.0.6-alpha.0",
41
41
  "lit": "^3.1.3"
42
42
  },
43
- "gitHead": "f12b8758d8581bfae0c9a00abbb5f7d2c6d03147"
43
+ "gitHead": "2cbb4f450ed88e773a353a13ad006dbe6208f67f"
44
44
  }
@@ -0,0 +1,5 @@
1
+ import { encodeSvgToImgSrc } from "../utils";
2
+
3
+ export const NOSTR_SVG = encodeSvgToImgSrc(
4
+ '<svg version="1.1" id="_8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve"><style type="text/css">.st0{fill:none;} .st1{fill:#FFFFFF;} .st2{fill:#662482;}</style><g><path class="st0" d="M0,0v256h256V0H0z M231.2,159.2c0,20.7,0,31.1-3.5,42.2c-4.4,12.2-14,21.8-26.2,26.2 c-11.1,3.5-21.5,3.5-42.2,3.5H96.8c-20.7,0-31.1,0-42.2-3.5c-12.2-4.4-21.8-14-26.2-26.2c-3.5-11.1-3.5-21.5-3.5-42.2V96.8 c0-20.7,0-31.1,3.5-42.2c4.4-12.2,14-21.8,26.2-26.2c11.2-3.5,21.5-3.5,42.2-3.5h62.5c20.7,0,31.1,0,42.2,3.5 c12.2,4.4,21.8,14,26.2,26.2c3.5,11.1,3.5,21.5,3.5,42.2V159.2z"/> <circle class="st1" cx="137.9" cy="99" r="12.1"/><path class="st1" d="M210.8,115.9c0-47.3-27.7-68.7-64.4-68.7c-16.4,0-31,4.4-42.4,12.5c-3.8,2.7-9,0.1-9-4.5 c0-3.1-2.5-5.7-5.7-5.7H57.7c-3.1,0-5.7,2.5-5.7,5.7v144c0,3.1,2.5,5.7,5.7,5.7h33.7c3.1,0,5.6-2.5,5.6-5.6v-8.4 c0-62.8-33.2-109.8-0.4-116c30-5.7,64.1-3,64.5,20.1c0,2,0.3,8,8.6,11.2c5,2,12.6,2.6,22.6,2.4c0,0,9.1-0.7,9.1,8.5 c0,11.5-20.4,10.7-20.4,10.7c-6.7,0.3-22.6-1.5-31.7,1.2c-4.8,1.5-9,4.2-11.5,9.1c-4.2,8.3-6.2,26.5-6.5,45.5v15.5 c0,3.1,2.5,5.7,5.7,5.7h68c3.1,0,5.7-2.5,5.7-5.7l0,0V115.9z"/><path class="st2" d="M227.6,54.6c-4.4-12.2-14-21.8-26.2-26.2c-11.1-3.5-21.5-3.5-42.2-3.5H96.8c-20.7,0-31.1,0-42.2,3.5 c-12.2,4.4-21.8,14-26.2,26.2c-3.5,11.2-3.5,21.5-3.5,42.2v62.5c0,20.7,0,31.1,3.5,42.2c4.4,12.2,14,21.8,26.2,26.2 c11.2,3.5,21.5,3.5,42.2,3.5h62.5c20.7,0,31.1,0,42.2-3.5c12.2-4.4,21.8-14,26.2-26.2c3.5-11.1,3.5-21.5,3.5-42.2V96.8 C231.2,76.1,231.2,65.7,227.6,54.6z M205.1,204.8h-68c-3.1,0-5.7-2.5-5.7-5.7v-15.5c0.3-19,2.3-37.2,6.5-45.5 c2.5-5,6.7-7.7,11.5-9.1c9-2.7,24.9-0.9,31.7-1.2c0,0,20.4,0.8,20.4-10.7c0-9.3-9.1-8.5-9.1-8.5c-10,0.3-17.7-0.4-22.6-2.4 c-8.3-3.3-8.6-9.2-8.6-11.2c-0.4-23.1-34.5-25.9-64.5-20.1c-32.8,6.2,0.4,53.3,0.4,116v8.4c-0.1,3.1-2.5,5.6-5.6,5.6H57.7 c-3.1,0-5.7-2.5-5.7-5.7v-144c0-3.1,2.5-5.7,5.7-5.7h31.7c3.1,0,5.7,2.5,5.7,5.7c0,4.7,5.2,7.2,9,4.5c11.4-8.2,26-12.5,42.4-12.5 c36.7,0,64.4,21.4,64.4,68.7v83.2l0,0C210.8,202.3,208.3,204.8,205.1,204.8z M125.7,99c0-6.7,5.4-12.1,12.1-12.1S150,92.3,150,99 s-5.4,12.1-12.1,12.1S125.7,105.8,125.7,99z"/></g></svg>',
5
+ );
@@ -2,13 +2,14 @@ import { ccc } from "@ckb-ccc/ccc";
2
2
  import { LitElement, PropertyValues, css, html } from "lit";
3
3
  import { customElement, property, state } from "lit/decorators.js";
4
4
  import { Ref, createRef, ref } from "lit/directives/ref.js";
5
+ import { NOSTR_SVG } from "../assets/chains/nostr.svg";
5
6
  import { CLOSE_SVG } from "../assets/close.svg";
6
7
  import { JOY_ID_SVG } from "../assets/joy-id.svg";
7
8
  import { LEFT_SVG } from "../assets/left.svg";
8
9
  import { METAMASK_SVG } from "../assets/metamask.svg";
9
10
  import { OKX_SVG } from "../assets/okx.svg";
10
11
  import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
11
- import { WillUpdateEvent } from "../events";
12
+ import { ClosedEvent, WillUpdateEvent } from "../events";
12
13
  import {
13
14
  generateConnectingScene,
14
15
  generateSignersScene,
@@ -38,12 +39,6 @@ export class WebComponentConnector extends LitElement {
38
39
 
39
40
  private resetListeners: (() => void)[] = [];
40
41
 
41
- @state()
42
- public isOpen: boolean = false;
43
- public setIsOpen(isOpen: boolean) {
44
- this.isOpen = isOpen;
45
- }
46
-
47
42
  @property()
48
43
  public name?: string;
49
44
  @property()
@@ -103,7 +98,6 @@ export class WebComponentConnector extends LitElement {
103
98
  }
104
99
 
105
100
  public disconnect() {
106
- this.signer?.signer?.disconnect();
107
101
  this.walletName = undefined;
108
102
  this.signerName = undefined;
109
103
  this.saveConnection();
@@ -178,14 +172,18 @@ export class WebComponentConnector extends LitElement {
178
172
  this.wallets = [];
179
173
 
180
174
  (async () => {
181
- if (!this.signer) {
175
+ const signer = this.signer;
176
+ if (!signer) {
182
177
  return;
183
178
  }
184
179
 
185
- this.signer = {
186
- ...this.signer,
187
- signer: await this.signer.signer.replaceClient(this.client),
188
- };
180
+ if (await signer.signer.replaceClient(this.client)) {
181
+ this.signer = {
182
+ ...signer,
183
+ };
184
+ } else {
185
+ this.signer = undefined;
186
+ }
189
187
  })();
190
188
 
191
189
  this.resetListeners.forEach((listener) => listener());
@@ -213,6 +211,11 @@ export class WebComponentConnector extends LitElement {
213
211
  this.addSigner("OKX Wallet", "BTC", OKX_SVG, okxBitcoinSigner);
214
212
  }
215
213
 
214
+ const nip07Signer = ccc.Nip07.getNip07Signer(this.client);
215
+ if (nip07Signer) {
216
+ this.addSigner("Nostr", "Nostr", NOSTR_SVG, nip07Signer);
217
+ }
218
+
216
219
  const eip6963Manager = new ccc.Eip6963.SignerFactory(this.client);
217
220
  this.resetListeners.push(
218
221
  eip6963Manager.subscribeSigners((signer) => {
@@ -361,61 +364,48 @@ export class WebComponentConnector extends LitElement {
361
364
  Scene.SwitchingNetworks,
362
365
  ].includes(this.scene);
363
366
 
364
- return html`<style>
365
- :host {
366
- ${this.isOpen ? "" : "display: none;"}
367
- --background: #fff;
368
- --divider: #eee;
369
- --btn-primary: #f8f8f8;
370
- --btn-primary-hover: #efeeee;
371
- --btn-secondary: #ddd;
372
- --btn-secondary-hover: #ccc;
373
- color: #1e1e1e;
374
- --tip-color: #666;
367
+ return html` <div
368
+ class="background"
369
+ @click=${(event: Event) => {
370
+ if (event.target === event.currentTarget) {
371
+ this.closedHandler();
375
372
  }
376
- </style>
377
- <div
378
- class="background"
379
- @click=${(event: Event) => {
380
- if (event.target === event.currentTarget) {
381
- this.closedHandler();
382
- }
383
- }}
384
- >
385
- <div class="main" ${ref(this.mainRef)}>
386
- <div
387
- class="header text-bold fs-lg ${title == null
388
- ? ""
389
- : "header-divider"}"
390
- ${ref(this.headerRef)}
391
- >
392
- <img
393
- class="back ${canBack ? "active" : ""}"
394
- src=${LEFT_SVG}
395
- @click=${() => {
396
- if (this.scene === Scene.Connecting) {
397
- if ((this.selectedWallet?.signers.length ?? 0) <= 1) {
398
- this.scene = Scene.SelectingWallets;
399
- } else {
400
- this.scene = Scene.SelectingSigners;
401
- }
402
- } else if (this.scene === Scene.SelectingSigners) {
373
+ }}
374
+ >
375
+ <div class="main" ${ref(this.mainRef)}>
376
+ <div
377
+ class="header text-bold fs-lg ${title == null
378
+ ? ""
379
+ : "header-divider"}"
380
+ ${ref(this.headerRef)}
381
+ >
382
+ <img
383
+ class="back ${canBack ? "active" : ""}"
384
+ src=${LEFT_SVG}
385
+ @click=${() => {
386
+ if (this.scene === Scene.Connecting) {
387
+ if ((this.selectedWallet?.signers.length ?? 0) <= 1) {
403
388
  this.scene = Scene.SelectingWallets;
404
- } else if (this.scene === Scene.SwitchingNetworks) {
405
- this.scene = Scene.Connected;
389
+ } else {
390
+ this.scene = Scene.SelectingSigners;
406
391
  }
407
- }}
408
- />
409
- ${title}
410
- <img
411
- class="close active"
412
- src=${CLOSE_SVG}
413
- @click=${this.closedHandler}
414
- />
415
- </div>
416
- <div class="body" ${ref(this.bodyRef)}>${body}</div>
392
+ } else if (this.scene === Scene.SelectingSigners) {
393
+ this.scene = Scene.SelectingWallets;
394
+ } else if (this.scene === Scene.SwitchingNetworks) {
395
+ this.scene = Scene.Connected;
396
+ }
397
+ }}
398
+ />
399
+ ${title}
400
+ <img
401
+ class="close active"
402
+ src=${CLOSE_SVG}
403
+ @click=${this.closedHandler}
404
+ />
417
405
  </div>
418
- </div>`;
406
+ <div class="body" ${ref(this.bodyRef)}>${body}</div>
407
+ </div>
408
+ </div>`;
419
409
  }
420
410
 
421
411
  updated() {
@@ -443,7 +433,7 @@ export class WebComponentConnector extends LitElement {
443
433
  this.scene = Scene.Connected;
444
434
  }
445
435
 
446
- this.isOpen = false;
436
+ this.dispatchEvent(new ClosedEvent());
447
437
  };
448
438
 
449
439
  private signerSelectedHandler = (
@@ -3,3 +3,9 @@ export class WillUpdateEvent extends Event {
3
3
  super("willUpdate", { composed: true });
4
4
  }
5
5
  }
6
+
7
+ export class ClosedEvent extends Event {
8
+ constructor() {
9
+ super("closed", { composed: true });
10
+ }
11
+ }
@@ -2,6 +2,7 @@ import { ccc } from "@ckb-ccc/ccc";
2
2
  import { html } from "lit";
3
3
  import { repeat } from "lit/directives/repeat.js";
4
4
  import { BTC_SVG, CKB_SVG, ETH_SVG } from "../assets/chains";
5
+ import { NOSTR_SVG } from "../assets/chains/nostr.svg";
5
6
  import { WalletWithSigners } from "../types";
6
7
 
7
8
  export function signerTypeToIcon(type: ccc.SignerType): string {
@@ -9,6 +10,7 @@ export function signerTypeToIcon(type: ccc.SignerType): string {
9
10
  [ccc.SignerType.BTC]: BTC_SVG,
10
11
  [ccc.SignerType.EVM]: ETH_SVG,
11
12
  [ccc.SignerType.CKB]: CKB_SVG,
13
+ [ccc.SignerType.Nostr]: NOSTR_SVG,
12
14
  }[type];
13
15
  }
14
16