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