relays.component.ts raw
1 import { NgTemplateOutlet } from '@angular/common';
2 import { Component, inject, OnInit } from '@angular/core';
3 import { ActivatedRoute } from '@angular/router';
4 import {
5 IconButtonComponent,
6 Identity_DECRYPTED,
7 NavComponent,
8 Nip65Relay,
9 NostrHelper,
10 RelayListService,
11 RelayRwComponent,
12 StorageService,
13 VisualRelayPipe,
14 } from '@common';
15
16 @Component({
17 selector: 'app-relays',
18 imports: [
19 IconButtonComponent,
20 RelayRwComponent,
21 NgTemplateOutlet,
22 VisualRelayPipe,
23 ],
24 templateUrl: './relays.component.html',
25 styleUrl: './relays.component.scss',
26 })
27 export class RelaysComponent extends NavComponent implements OnInit {
28 identity?: Identity_DECRYPTED;
29 relays: Nip65Relay[] = [];
30 loading = true;
31 errorMessage = '';
32
33 readonly #activatedRoute = inject(ActivatedRoute);
34 readonly #storage = inject(StorageService);
35 readonly #relayListService = inject(RelayListService);
36
37 ngOnInit(): void {
38 const selectedIdentityId =
39 this.#activatedRoute.parent?.snapshot.params['id'];
40 if (!selectedIdentityId) {
41 this.loading = false;
42 return;
43 }
44
45 this.#loadData(selectedIdentityId);
46 }
47
48 async #loadData(identityId: string) {
49 try {
50 this.loading = true;
51 this.errorMessage = '';
52
53 this.identity = this.#storage
54 .getBrowserSessionHandler()
55 .browserSessionData?.identities.find((x) => x.id === identityId);
56
57 if (!this.identity) {
58 this.loading = false;
59 this.errorMessage = 'Identity not found';
60 return;
61 }
62
63 // Get the pubkey for this identity
64 const pubkey = NostrHelper.pubkeyFromPrivkey(this.identity.privkey);
65
66 // Fetch NIP-65 relay list
67 const nip65Relays = await this.#relayListService.fetchRelayList(pubkey);
68 this.relays = nip65Relays;
69
70 this.loading = false;
71 } catch (error) {
72 console.error('Failed to load relay list:', error);
73 this.loading = false;
74 this.errorMessage = 'Failed to fetch relay list';
75 }
76 }
77 }
78